本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
1.有效的重复字符题目描述
给定一个经过编码的字符串,按照特定规则返回它解码后的字符串。
编码规则为: k{string},表示大括号内部的 string 经过解码后重复 k 次,k 保证为正整数,string 经过解码后为由 a-z 之间的字符组成的字符串,即大括号可能会有嵌套的情况。你可以认为输入字符串总是有效的:输入字符串中没有额外的空格,且输入的括号总是符合格式要求的。
原始数据不包含数字,所有的数字只表示重复的次数 k,例如不会出现像 3a 或 2{4}的输入,但是会出现像a3{b4{c}de}的情况。
输入描述
输入一个经过编码的字符串。
输出描述
输出解码后的字符串。
输入示例
3{a2{c}}
输出示例
accaccacc
参考答案:
1234567891011121314151617181920212223242526272829303132333435import java.util.*;public class Main ...
个人碎碎念
未读本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
前⾔这篇⽂章可以作为参考,⽤来准备⾯试中类似下⾯的提问:
你在做这个项⽬的时候遇到了什么问题?(OOM 问题、GC 问题等等)
你⽤过哪些分析定位 Java 故障/性能的⼯具?(JDK ⾃带⼯具、MAT、Arthas 等等)
如果项⽬遇到了 OOM 问题,你会如何排查?(常⽤ MAT)
有什么办法可以监控到 JVM 的实时运⾏状态?(Arthas)
⽣产环境有⼀个接⼝很慢,如何排查?(Arthas)
CPU100%,你是怎么处理的?(jstack 或者 Arthas)
你是如何定位线上问题的?(说说⾃⼰了解的⼯具,然后根据⾯试官提示继续深⼊聊即可)
项⽬中遇到了哪些线上故障,你是如何解决的?
……
面试高频,一步一步解决OOM、GC调优:
大师级GC调优:剖析高并发系统的垃圾回收优化实战
「轻盈」之旅:OOM故障重现与解决
Java常⽤⼯具Arthas
Arthas 官⽅⽂档(中⽂,很详细。⽕焰图这块⾯试常问,)
如何使⽤ Artha ...
本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
1 线程的基础知识面试官:聊一下并行和并发有什么区别?(高频)候选人:
并发是指在同一时间段内,系统有能力处理多个事件,多个线程轮流使用一个或多个CPU。换句话说,并发并不一定要求任务同时进行,而是通过快速切换任务来实现“看起来同时运行”的效果。
并行是指在同一时刻,多个任务可以在多个处理器核心上同时执行,4核CPU同时执行4个线程。(宏观并行,微观并发)
面试官:说一下线程和进程的区别?候选人:
进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务
不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享进程的堆和 ⽅法区 资源,但每个线程有⾃⼰的程序计数器、虚拟机栈和本地⽅法栈
线程更轻量,线程上下文切换成本一般上要比进程上下文切换低(上下文切换指的是从一个线程切换到另一个线程)
下⾯来思考这样⼀个问题:为什么程序计数器、虚拟机栈和本地⽅法栈是线程私有的呢?
在多线程的情况下,程序计数器⽤于记录当前线程执⾏的位置,从⽽当线程被切换回来 ...
本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
1 JVM组成面试官:JVM由那些部分组成,运行流程是什么?候选人:
在JVM中共有四大部分,分别是ClassLoader(类加载器)、Runtime Data Area(运行时数据区,内存分区)、Execution Engine(执行引擎)、Native Method Library(本地库接口)
它们的运行流程是:
第一,类加载器(ClassLoader)把Java代码转换为字节码。
第二,运行时数据区(Runtime Data Area)把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层系统去执行,而是有执行引擎运行
第三,执行引擎(Execution Engine)将字节码翻译为底层系统指令,再交由CPU执行去执行,此时需要调用其他语言的本地库接口(Native Method Library)来实现整个程序的功能。
JDK1.6:(图为《深入理解Java虚拟机》第三版)
JDK1.8:(图为JavaGuide面试笔记)
面试官: ...
个人碎碎念
未读本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
⚠️注意:以下仅是个人对问题的参考,具体情况视个人情况而定~
1. 你觉得你有哪些优点和缺点?优点:学习能力强,遇到问题会主动思考和查找解决方案;有责任心,对待工作认真负责;团队协作能力强,能高效沟通、推动项目进展。此外,我在项目开发过程中积累了丰富的实战经验,对解决复杂问题有一定的方法论。
缺点:以前遇到技术难题容易“过度设计”,比如写个简单接口非要想扩展性,结果浪费了时间。后来 mentor 提醒我“先跑通再优化”,现在会更灵活地评估需求,该简单就简单,该复杂再深入。以前做需求总想一次性做到完美,导致交付周期拉长。后来学会了**MVP(最小可行产品)**思维,先保证核心功能上线,再迭代优化。
2. 你怎么评价你面试的这家公司?这家公司技术氛围浓厚,业务发展稳定,与我的职业规划较为契合,同时也能提供较好的成长空间和学习机会。我特别欣赏贵公司在技术创新上的投入,以及开放的学习和成长环境。
3. 你在校期间,有没有哪段时间或者某件事情让你受挫?在准备技术竞赛时,由于对某 ...
JAVA面经
未读本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
Linux 常用命令:
常用命令: 如果发现某一端口号被占用(例如8082)时(MacOS和Linux系统):
[sudo 命令]全称“SuperUser Do”,是Linux系统中的一个命令能够使普通用户以超级用户身份去执行某些命令。
Git常用命令:仓库操作
git init: 初始化一个新的 Git 仓库
git clone : 克隆远程仓库到本地
git status: 查看当前工作区和暂存区的状态
git add : 将文件添加到暂存区
git add .: 添加当前目录下所有更改的文件到暂存区
git commit -m “message”: 提交暂存区的更改到本地仓库
git log: 查看提交历史记录
git log --oneline: 以简洁的单行方式查看提交历史
分支操作
git branch: 查看当前分支列表
git branch <branch-name>: 创建新分支
git branch -d <br ...
JAVA面经
未读本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
一、十道海量数据处理面试题♟️1、海量日志数据,提取出某日访问百度次数最多的那个IP。(分治思想 + 哈希表)
首先,从日志中提取出所有访问百度的IP地址,将它们逐个写入一个大文件中,便于后续处理。
考虑到IP地址是32位的,最多有 2^23 个不同IP。为了减少单个文件的处理压力,可以采用哈希或者取模的方式,将这些IP均匀分散到 1000个小文件 中。这样每个小文件的规模大幅缩小,更便于处理。
对于每个小文件,使用 HashMap 统计每个IP的出现次数。HashMap的插入和查找操作都是 O(1) 的复杂度,能够高效地完成频率统计。然后从中找出出现频率最高的IP和对应的频率。
最后,将这 1000个小文件 中统计出的最高频率IP和频率值汇总。再在这1000个IP中执行一次线性扫描,找到频率最高的IP,得到最终结果。
♟️2、在1千万个查询记录中,去重后不超过300万个,要求在内存不超过1G的情况下,统计出最热门的10个查询串。(典型的 Top K 问题)该 ...
本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
面试官: 进程和线程的区别(高频)候选人: 线程和进程的区别主要体现在以下四个方面:
1️⃣ 资源分配: 进程是操作系统分配资源的基本单位,拥有独立的内存空间;线程共享进程资源,多个线程可访问相同的数据。
你说到进程是分配资源的基本单位,那么这个资源指的是什么? 虚拟内存、文件句柄、信号量等资源。
2️⃣ 创建与切换开销: 进程创建和切换成本较高,需要完整的资源分配和回收;线程切换更轻量,仅需保存和恢复私有数据。
3️⃣ 通信与同步: 进程间通信(IPC)依赖管道、消息队列等机制,效率较低;线程共享进程数据,通信更快,但需加锁避免竞争。
4️⃣ 容错与并发: 进程崩溃通常不影响其他进程,适用于高可靠性场景;线程共享进程资源,故单个线程异常可能导致整个进程崩溃。
面试官: 线程比进程高效的原因?(高频)候选人: 线程相较于进程的优势主要体现在资源共享、创建成本、切换开销和并发效率四个方面。
资源共享:进程间通信(IPC)成本较高,而线程共享进程资源,数据访 ...
本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
⾯试官: 从输入URL到页面展示到底发生了什么?(高频)候选人:
浏览器接收到用户请求,先检查浏览器缓存里是否有缓存该资源,如果有直接返回;如果没有进入下一步网络请求。
网络请求前,进行 DNS解析 ,以获取请求域名的IP地址 。如果请求协议是 HTTPS ,那么还需要建立TLS/SSL 连接 。DNS查找过程:浏览器缓存、路由器缓存、DNS缓存。
浏览器与服务器IP建立TCP连接。连接建立后,浏览器端会构建请求行、请求头等信息,并把和该域名相关的 Cookie 等数据附加到请求头中,向服务器构建请求信息。
服务器接收到请求信息,根据请求生成响应数据。
浏览器解析响应头。若响应头状态码为 301、302 ,会重定向到新地址;若响应数据类型是字节流类型,一般会将请求提交给下载管理器;若是HTML类型,会进入下一部渲染流程
浏览器解析 HTML 文件,创建 DOM 树、解析 CSS 进行样式计算,然后将CSS和DOM合并,构建渲染树;最后布局和绘制渲染树,完成页面 ...
JAVA面经
未读本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
你必须非常努力,才能看起来毫不费劲。
面试官: 分布式缓存常⻅的技术选型⽅案有哪些?候选人:
分布式缓存的话,使⽤的⽐多的主要是 Memcached 和 Redis。不过,现在基本没有看过还有项⽬使⽤ Memcached 来做缓存,都是直接⽤ Redis。
面试官: 说⼀下 Redis 和 Memcached 的区别和共同点共同点 :
都是基于内存的数据库,一般都用来当做缓存使用。
都有过期策略。
两者的性能都非常高。
区别 :
Redis 支持更丰富的数据类型(支持更复杂的应用场景)。Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash,string 等数据结构的存储。Memcached 只支持最简单的 k/v 数据类型。
Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。
Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分 ...