先放面经吧,只取了部分(有些忘记录音了,有些是电话面,没有录音),从8月份离职到现在9月份的,大概50天内的部分面经:
面试岗位:Java开发工程师,1-3年经验
信利恒丰
-
有做过哪些性能优化
-
说一下sql优化,是怎么优化的,定位到问题的,具体一点
-
索引太多的话也会有问题,这个了解过吗
-
做过高并发吗?怎么做的
-
为什么会离职
句子互动
-
自我介绍
-
目前在职状态还是离职状态?
-
什么时候离职的?
-
离职原因是什么?公司有变动吗?
-
公司在哪里?(确认地点)
-
老家是哪里的?(确认稳定性)
-
当时为什么选择这家公司?是校招进去的吗?
-
之前的薪资待遇大概多少?
-
期望薪资是多少?
-
最快到岗时间是什么时候?
-
之前的工作节奏是什么样的?(作息时间、上线发版周期)
-
每天的作息大概是几点到几点?
-
你觉得你的抗压能力怎么样?可以举个例子吗?
-
可以讲述一下你们的核心系统架构吗?
-
有处理过应急响应事件或线上故障吗?
-
平常会用哪些工具辅助工作?(AI工具等)
北京华胜天成
-
先做一下自我介绍吧。
-
项目里面用过Spring Cloud的吗?
-
Spring Cloud里面用了哪些组件?
-
Nacos是干什么用的?
-
注册中心是干什么用的?
-
OpenFeign是干什么用的?
-
项目里面OpenFeign具体怎么用的?
-
能说一下Spring Bean的生命周期吗?
-
Spring Bean是线程安全的吗?
-
能说一下Spring MVC的原理吗?
-
从后端取数据给前端,返回JSON的话,需要加什么注解?
-
Java里面创建线程有几种方式?
-
主线程启动两个子线程,主线程需要等两个子线程执行完再继续往下执行,怎么控制?
-
任意字符串中统计哪个字符出现次数最多,怎么实现?
-
怎么取出出现次数最多的那个结果?
-
用过Linux吗?
-
Linux怎么查看磁盘使用情况?
-
Linux日志文件里有错误,怎么根据关键字找出来?
-
部署过Java应用吗?部署流程是什么样的?
-
做过SQL优化吗?具体怎么做的?
-
用过Kafka吗?用来干什么?
-
为什么要离职?
-
期望薪资是多少?
追问问题(按出现顺序)
-
那你知道Nacos的服务注册发现具体流程吗?
-
那Nacos和Eureka有什么区别?
-
那注册中心和配置中心有什么区别?
-
那服务发现是客户端拉取还是服务端推送?
-
BeanPostProcessor和InitializingBean有什么区别?
-
在Spring Boot项目中,你是怎么用这些生命周期特性的?
-
那你们项目里有没有遇到过线程安全问题?
-
那如果Bean是prototype作用域呢?还安全吗?
-
ThreadLocal你用过吗?
-
@RequestMapping注解是怎么找到对应方法的?
-
Spring MVC和Spring Boot有什么关系?
-
你们用的是哪种CI/CD工具?
-
线上服务挂了,怎么快速回滚?
-
那你们用的是哪种发布策略?
-
Kafka和RocketMQ有什么区别?为什么你们用了两个?
-
Kafka怎么保证消息不丢失?
-
Kafka怎么保证消息顺序?
-
Kafka的消费者是如何提交偏移量的?
北京伏羲太昊文化
-
Kafka 和 MQ 的区别是什么?底层区别是什么?Broker 层面有什么不同?
-
说一下你做过的功能的代码逻辑、业务逻辑。
-
说一下你做过的项目。
-
MySQL 调优,详细说说。
-
说一下 OpenFeign 底层。
-
使用过哪些中间件?
北京中方立信科技
-
自我介绍
-
为什么离职
-
后端接口使用的什么协议?
-
工作内容
-
后端怎么给前端传数据?1 对 N 的怎么传?
-
跨域问题遇到过吗?
度小满一面
-
讲一下你做过的项目
-
项目追问
-
假如说你的线上有空指针异常,你该怎么去排查呢?
-
你能简单介绍一下这个 Kafka 的一个流程机制吗?就是他怎么去运作的?生产者之类的东西,这是它的一个运行流程。
-
你们那边是怎么去防止这个 Kafka 的重复消费呢?
-
我想了解一下 MySQL 的索引,就是我想了解一下聚簇索引和非聚簇索引的一个关系。
-
那为啥加索引的数据查询的比较快,而没有加索引的数据查询的比较慢?
-
你对你使用的 Redis 的话,你大概使用过什么样的数据结构?
-
假如有一个场景就是说,我想统计一下,比如说我这个 APP 用户进来的日活量,我用 Redis 做的话,那我采用什么样的数据结构比较好呢?
-
你这边有建议就是比较,就是你只想做 Java,还是说也不介意,可能会去做一些其他语言?
-
你目前还是离职状态吗?
-
个人情况追问
度小满二面
-
问项目,项目追问
-
结合对方公司实际场景追问
-
问数据库
-
说一下mysql创建的表,就是这个项目中用的表。然后他有哪些字段,然后为啥这么设计的?
-
数据库追问
-
询问个人情况
-
说明当前岗位,公司情况
-
反问
国简科技
-
现在是在职吗?还是离职了?
-
追问个人情况
-
可以介绍一下近期的一个项目吗?这个是做什么的?然后在这个里面主要是负责了什么呢?
-
注册发现这个是用的什么呢?
-
你可以讲讲这个解决了什么问题吧。
-
有没有做那个全局的异常管理呢?
-
那个数据库用的什么?
-
国产化的就信创这一块儿的,数据库有过了解吗?
-
像mysql的话,如果有那个接口很慢,比如说响应时间变到了5秒,要怎么去查询呢?怎么去排查这个问题?后面的优化呢?
-
那这个ES有没有了解过?或者是实际工作中有没有用过呢?
-
如果用户搜索一个关键词会命中上万条日志,怎么保证快速的一个返回呢?
-
可有做过这个后端缓存吗?
-
日志平台了解的多吗?
-
他那个采集链路有没有调解过?
-
底层那些应用的,或者是服务器的生成日志是怎么呈现到外部前端页面的?
-
那底层这块儿呢,有没有了解过?
-
对日志平台的整个这样的技术架构了解多少?之前薪资是多少?
-
追问个人情况,说明当前岗位,公司情况
中创新航科技公司
-
工作过程中用到过 Kafka 吗?
-
线上 Kafka 消息积压、CPU 高,怎么解决?以及后续怎么处理?
-
Redis 的两种存储方式?
浙江智普
-
自我介绍
-
问简历上的项目,追问
-
事务、一致性是怎么实现的?
-
服务分布式怎么做的?
-
看简历,追问项目
-
什么情况下会放弃使用索引?
贝才之神
-
根据简历上的项目追问,深度追问,同时给场景题
-
如果消息出现消息积压的情况下怎么处理呢?怎么办呢?
-
那个分级监控高级警惕器,这东西能介绍一下你是怎么做的吗?
-
说一下MVCC
-
说一下 Spring mvc
-
springboot的自动装配
-
说一下redission
货拉拉
-
Redis 的数据结构
-
如果出现 Redis 连接失败会是什么情况
-
索引分别有什么类型
-
索引底层结构
-
B 树和 B+ 树区别
-
锁有哪些
-
分布式锁是什么
-
循环锁和什么锁有了解吗
-
JVM 里面分哪些区
-
如果出现资源大量消耗场景应该怎么排查
-
哪些集合是线程安全的
-
线程安全的和加锁的有啥区别
-
项目追问
西安某家公司(忘记记名字了)
-
个人情况了解
-
简历项目追问
-
那你在做项目的时候,你觉得你遇到的最大的困难是什么?
-
如果想让你推荐三个你觉得好用的Skill,你会推荐什么呢?
南昌某家公司(没记名字)
-
个人情况了解
-
简历项目追问
-
我看你还用了一些Redis的数据库,你用Redis做了什么?
-
还有那个MongoDB你有用它做什么?
-
哦,那了解它的一些什么?它的什么?部署形式?
-
你用过吗?那个,那个是用过的吗?在什么时候用过?
-
它有什么特性,你知道吗?
-
部署,你做的是微服务的模式?
-
岗位,公司情况介绍
北京赛博灵犀
-
AQS,简历追问
-
CPU 飙高怎么排查
-
简历项目追问
-
线程池
-
Spring 的注解了解的有哪些,对声明式注解的了解
-
这个注解什么情况下有可能会失效
-
对高并发的了解
-
对 JDK 源码的了解,比如集合这块
-
MySQL 的事务
-
什么情况下需要更改一下 MySQL 的事务隔离级别
-
说一下对索引的了解
知乎
-
为什么离职呀?
-
搞一个你认为有亮点的项目,讲一下呗
-
项目深度追问(要求体现出个人能力)
-
项目我们先聊到这,然后聊一下具体的技术问题。怎么是 AQS?
-
MySQL 的事务?事务的底层实现原理是什么?
-
追问
-
算法题:有一个二叉树,比如 1,3,5,7,6,4,3,我们要实现 遍历,奇数层顺序打印,偶数层逆序,返回二维数组,第一维代表层数,第二维代表内层有哪些节点,我这边介绍清楚没有?
-
你写伪代码吧,讲思路你估计也很难讲明白,伪代码大致写一下,总得有个框架吧。比如队列 push/pop 就行了,不用那么严格,我觉得这就算是伪代码了。
中健投
-
三次握手,四次挥手
-
wait 什么意思,什么指令
-
为什么使用 MongoDB 索引,而不是 MySQL 索引
-
布隆过滤器
-
简历项目追问,网络,Java基础等
深圳计算机研究院
-
您有了解过我们的岗位吗?或者我们的岗位介绍吗?
-
你可以讲讲吗?(指讲讲对岗位的了解)
-
能讲讲你了解的一些开源项目吗?或者你使用过的开源项目?
-
除了 OpenCloud 还了解过什么开源项目?有没有了解过社区的 PR 流程?
-
社区的 PR 流程?或者说你没有向社区提过代码?贡献过一手代码都可以?
-
那你们内部是用 GitLab 私有部署对吧?
-
内部提代码写代码的话?
-
就是你们 Git 的代码管理、代码托管是用的什么平台?
-
自己私有部署的是吧?
-
我问几个基础问题,非常基础。我们这个 Git 提交中,如果想把一个分支的一笔代码,放到另一个分支上,Git 的命令是什么?
-
一个分支上的一笔代码放到另一个分支上,我们用 Git 怎么切换?怎么去操作?
-
当然你可以不用这个 Git,也有别的工具暂存,也可以讲一下,但这个工具无所谓,我只是想了解一下。
-
再问几个 Git 命令,就最后一个了,Git 的命令上,比如说我们要去合代码,然后发现有冲突,你本地的代码和远程代码有冲突,你一般是怎么做呢?
-
问一些计算机基础了。首先是从数据结构开始吧。我问一个经常问别人的问题吧,就是我们都知道数据库中的索引有很多结构,最常见的索引,也是最经典的索引就是 B 树索引。那我有个问题,为什么数据库它不用二叉树做索引,而用多叉树的 B 树做索引?
-
B 树查询效率更快吗?
-
B 树的查询效率的时间复杂度是多少?二叉树是多少?
-
时间复杂度怎么算一般?
-
那有没有了解过其他的数据结构,比如说跳表呢?
-
跳表其实在这种非关系数据库里面是非常常见的,包括在这个我们现在比较知道的列存式数据库中,或者说你有没有了解过列存式数据库?
-
列存数据库?比如说 HBase 呀什么的,ClickHouse?
-
有没有了解过这种全文索引,或者说倒排索引?
-
能讲一下这个索引结构吗?或者说 Elasticsearch 是如何做查询的,如何做分词的,你有没有了解过?
-
就全文索引啊,或者说这种查询的机制上,它会有一个召回率的问题,能聊能讲一讲召回率是什么吗?如何提高召回率,就是召回率它和什么指标有关系?
-
有没有了解过现在的向量数据库啊?矢量数据库用的索引,有没有了解过?
-
用到什么数据库呢?
-
那你能讲讲这个矢量数据库,它是为解决什么问题而制造的吗?
-
相似度检索的数学原理是什么?
-
所以你刚刚提到查询嘛,我们一查询,如果你假如说我们去实践一个这样的数据库,或者我们实践这样一个原理,那你总不能把数据库中现在所有的数据我都算一遍,和他的余弦夹角,或者和他的这个距离远近,那这个代价太大了,所以这样一个索引结构有没有思考过?
-
JAVA 中有这个 final 关键字,呃,你知道 JAVA 这个 final 关键字能修饰哪些,呃,属性类还是变量还是什么,它们都有什么作用吗?
-
从 JDK8 到 JDK17 之间有哪些新特性,你有了解过的?
-
你工作中常用的 JDK 版本是?
-
就是 Java 的这个,终止就是,呃,一次编写到处运行吗?right once, 什么,我也忘了一句话怎么说了,哈哈,sorry,嗯,然后,那,对 Java 是如何实现这个,一次的编写,right once, any wrong, 到处运行呢?
-
你了解过虚拟机是怎么实现的吗?
-
所以,呃,这么说,就是有人说 Java 是一门,呃,编译型语言,但有人说 Java 其实是一门解释性语言,你怎么理解这句话?
-
嗯,那我们回到这个 Java 的生态链中,嗯,其实 Java 对 Java 来说,嗯,最重要的一些就是它的工具,因为我们知道其实 C++ 代码,或者 C 代码,或者说像 Rust 代码等等,它的工具链是依靠这个系统的一些能力,嗯,在和平台相关吧,和平台非常相关,因为我们在 Java 运行是有虚拟机的,我们可以去监控虚拟机的一些情况,去了解整个进程的运行,但是对于比较编译成二进制的代码来说,就是那个像平台相关语言,那我们就可以就必须通过这个超系统的相关接口,那你有没有了解过 Java 这个是如何实现这些,或者说先问第一个问题吧,就 Java 有哪些小工具可以帮助我们在定位,就企业级开发的时候去定位一些,比如性能瓶颈啊,啊,包括这个夯柱啊,还有这个 OM 啊等等的问题,有没有了解过这样的工具?
-
嗯,进程夯柱了,JAVA 进程夯柱了,我只问 JAVA 夯柱了,JAVA 程序夯柱了,这时候需要,首先需要定位一下是哪个 JAVA 进程,嗯,可以,我现在就,我有这个进程的竞争号,VID,嗯,VID 的话,然后定位到它是哪个线程之后,嗯,怎么定位?
-
现在比如说 oom 了,你怎么定位呢?
-
网络模型七层结构
浙江晶穹新材料科技有限公司
-
那我现在问几个问题。你在本科毕业不算久,在学校应该学过数据结构,那你说一下数组和链表这两个数据结构的不同,以及分别的特点,好吗?
-
链表的删除效率,是说删除某个节点的动作本身调整时间效率高,但它的时间复杂度会是多少呢?
-
链表的话,比如说我们要删掉一个节点,你会怎么做呢?
-
那什么场景下用链表?
-
什么场景下用数组?
-
链表的话,每个链表它是指向下一个节点的指针,那指针到底是什么?
-
指针是什么?
-
比如说我们以Linux操作系统为例,那指针代表的是一个什么?
-
指针在Linux操作系统里面对应的是一个什么数据啊?
-
那如果说我们写C的话,比如定义一个整型 int a = 100,操作系统或编译器会把这个a放到内存里面的某个地方,它是不是随便放,想放哪放哪?
-
你既然提到申请内存,那我就想问一个问题:内存分堆和栈,那是不是所有的内存都需要申请?
-
解释一下堆和栈的区别。
-
堆和栈的区别?
-
我们不谈任何Java相关的东西,只谈底层OS,按操作系统的角度来看,堆和栈的区别。
-
所有线程都可以共享?
-
栈呢?
-
谁私有的?
-
会是谁私有的?
-
好,那这些了解得差不多,那我们说一下栈。栈的话在内存里面是怎样的一个东西?
-
在什么场景下会用到栈呢?
-
我们刚才说回内存地址,还是那一个问题:比如我们定义了一个函数,在函数里面定义了一个栈型数据 A = 100,那这个A我们没有申请内存,就是写到 int A = 100,那这个A是存在栈上还是存在堆上?
-
那这个100,它是一个数字,那它是存储在内存里面的哪个地方呢?
-
我们其实在做数据系统或系统之类的时候,经常会涉及到网络传输,那你讲一下网络传输的协议吧,好不好?
-
就比如说,传输层有哪些协议啊?
-
应用层有哪些协议啊?
-
HTTP是应用层的,那它分层到底是什么意思?
-
分层是什么概念啊?
-
比如说HTTP是应用层的,它的传输层我们打个比方用TCP,那它到底说了什么意思?
-
那你再讲一下TCP和UDP的区别?
-
现在有这样一个场景:你要做一个数据系统,需要某两个地方或两台机器的数据要一样。网络不可达或分区不耐受很难保证,现在把问题局限在局域网内,丢包率或不可联系性会好很多,但也可能发生。你要写一个server,负责把上游来的数据,通过相同的API写入下游A和B两台机器,要保证A和B的数据跟你上游接过来的数据一样,两台数据不能不一致。不要依赖第三方服务,只有一个你,而且磁盘百分百有效。这个时候你来设计这样一套系统,你会怎么样去做呢?
-
想问一下细节:比如一个数据过来之后做了什么事情?现在一个数据到了你的进程,你现在做什么事情?
-
追问
-
你有一个可靠的平台,所以你要尽可能利用,就是在数据传送之前、发送之前首先需要确保这个消息已经在磁盘中坚持着,就保证消息不丢失。这个方向很好,首先是保证消息不丢失。然后在这个消息就包一个状态,这个状态的话有哪几个状态?你提到状态,状态的话这方面我是参考TCP的三次握手,不用参考,你就这么想:你这个事情要完成分几步?分的话首先需要设计个状态,然后确保对方拿到这个之后然后给他修改一下。不是不是,我是问我们把这个消息发到A发到B这个事情分几步?其实就是两步对不对?向A发过去能查到这是第一步,向B发过去能查到这是第二步。那是不是这个状态就很好状态机就很好设计了?首先一个初始状态,第二步有没有向A发、有没有从A查到,对吧?这是两个状态;有没有向B发、有没有向B查到,这五个状态。这五个状态全部完成表明这个事情做完。中间某一个到哪一步了挂掉,重启之后你知道他在哪个状态,你就去做下一个,先确认本轮的再做下一个,是不是这样的?所以你得从这件事情的整体上考虑,然后看一下怎么样去设计能够保证你的数据的一致性还有当机恢复这种。
-
我们问一下你之前在上一家公司,服务器是怎么样的一个配置?
-
比如说你有一台服务器,比如8G内存、1G磁盘、4个核,我们从内存讲起。8G内存到底是个什么意思?比如我有10G的东西能够塞进去吗?
-
你知道虚拟内存是什么概念吗?虚拟内存不是你那个虚拟机啊,是操作系统层面的虚拟内存。
-
介绍岗位,公司情况
-
在做多线程进程的时候经常会遇到竞争(Contention)这种抢东西或者说抢写一块内存,那在这样的情况下就可能我们需要加锁。对多线程这方面的进程设计有过一些了解吗?有的话那先讲一讲。
-
比如说加锁我们经常会遇到你要我的、我要你的,然后就互相挂住。一般我们写这种多线程进程而且是系统内的进程的话,怎么样尽可能按什么样的方式编码才能够规避这种死锁的情况发生?
-
比如我们刚才回到那台机器,它有四个核,然后又说到多线程有这样一个场景:四个线程,一个线程读、一个线程写,三个线程读,这种情况下需要加锁吗?读写换一个,比如四个线程全是读,需要加锁吗?
-
他这种能从比如说多核硬件程度这个角度、CPU层级大概解释一下为什么会出现这种情况吗?

先就这些吧,从离职到确定好下家公司,花了差不多50天
其实在刚离职不到两周的时候,就拿到了一个offer(西安,给开到10k),但是当时的我一看,寻思着那我市场价值还可以哦,于是就先果断拒绝了,想找到更好的。
后面就是,不管怎么样,感觉都或多或少的不满意,都不想去,在这个过程里还同时拿到了好几家国企直签的offer,甚至一度被朋友调侃是国企圣体,但我也都因为各种原因婉拒了。
国企确实薪资比私企低,但也很稳定,面试的时候,看到面试官们的状态,也确实能看出来很稳定(但是结合我本人的情况:不管现在,还是未来,不婚不育,不追求稳定,更偏向于靠能力快速变现等等,所以我个人是觉得我不适合的)。
有一点我觉得还是需要注意一下的,当然我本人其实不太在意,有几家公司,都是拿到offer之后再婉拒,被拉了黑名单,也就是以后都不能再投递当前公司以及集团下的所有公司。
反正就是在经历过很多波折之后,跟熬鹰似的,最后还是决定,国庆之前走吧,不能再这样任性下去了,就算是过渡也好。
于是,最后决定了一家公司,当然也是出于多方面考虑。
其实,在求职的这50天里我也不是全部时间都用来求职了,也在发展自己的副业 & 吃喝玩乐,好不容易有这么长的假期,不得好好给牛马放生一下。
嗯.....副业说不上好,但也有起色。
最高的时候,一天能有30r吧,然后我在趋势连续走高的时候,直接掐断了,于是趋势开始向下走,虽然但是吧,稳定下来之后,就算每天啥也不干,也不干涉,现在每天也依然有10r的被动收入,当然月收入还是很少的,也才几百块,索性也就不怎么管了,当作基金养吧。
再说说,这50天里,求职之路吧,我是25届的,满打满算,不加上实习,也就是有社保的工作经验,其实也就1年1个月,很多公司都因为经验太少,直接把简历挂掉了。
甚至我精心准备的外企,也因为简历挂掉了(HR也说了,和其他竞争者相比,经验还是太少了),给我难受的恨不得喝尽大海的水。
真是难受啊。
再说说我5月份买的基金,这个是真的难搞啊,5月份all in 了科技股,于是一路看着走高,走高,再高,再高,甚至在巅峰时刻,多次大额买入,我是新手,只以为一直持有,就会有连绵不绝的收益,于是后面跌了,我也坚信,一定能再升回去,于是一直跌,一直跌,呵呵,到现在还没有回本。
哎,真的没招了。
啊对了,这个过程中,还去了趟洛阳,嗯......在酒店躺了一天算玩吗,当时一直在下雨,嗯......
罢了罢了,说说Java的市场吧,主要还是经验,只有1年经验的Java还是不建议跳槽或离职的,至少要攒够2年经验再去市场看看,会好很多。