基本信息形式:二面采用视频面试形式。面试包含项目深度追问、系统设计、前沿技术考察、手写代码等环节。 时长:约60分钟以上。面试节奏紧凑,问题层层递进,会追问到知识边界。 氛围:面试官级别更高,会从项目细节延伸到系统设计,考察技术深度和工程思维。
面试流程一面通过 → 二面通知 → 按时参加视频面试 → 项目深度追问 → 前沿技术考察 → 系统设计/手写代码 → 反问环节 → 退场。 面试问题及参考回答一、项目深度与架构设计
1. 请介绍你负责的项目模块的架构设计及原因。 参考回答:项目采用微服务架构,主要考虑以下几点:高可用性——用户状态存储在Redis中,支持任意节点处理请求;Nginx负载均衡+Sentinel熔断降级保障高峰期稳定;可扩展性——服务节点动态增减,通过Nacos+Spring Cloud Gateway实现自动注册发现,支持弹性伸缩。
2. 如何处理CPU高/内存高的问题? 参考回答:CPU高排查:使用top查看高CPU进程,jstack查看线程堆栈,分析是否有死循环或锁竞争;内存高排查:jmap分析内存快照,查找内存泄漏对象。常用工具包括Arthas、MAT等。
3. 如何解决锁竞争频繁的问题? 参考回答:使用读写锁(ReentrantReadWriteLock)分离读写操作;使用分段锁(ConcurrentHashMap);使用CAS操作(AtomicInteger);缩小锁粒度,避免锁大块代码。
4. 死锁如何排查和解决? 参考回答:排查步骤:jstack检查线程堆栈查看死锁状态,分析日志定位锁对象,使用Arthas等工具辅助排查。解决方案:避免嵌套锁,使用tryLock尝试获取锁避免阻塞,统一锁获取顺序。
二、数据库深度
5. MySQL的幻读是什么?如何解决? 参考回答:幻读指同一事务内多次执行相同查询,结果集发生变化。MySQL通过间隙锁解决幻读——SELECT ... FOR UPDATE会锁住查询范围的间隙,防止新数据插入。升级到Serializable隔离级别也能解决幻读,但并发性能会下降。
6. 间隙锁死锁的原因与排查思路? 参考回答:死锁原因:事务锁定范围重叠相互等待;索引未命中触发不必要间隙锁;并发插入同一区间数据。排查:SHOW ENGINE INNODB STATUS查看死锁详情;SHOW PROCESSLIST查看等待锁的事务。预防:使用唯一索引减少间隙锁;避免大范围FOR UPDATE;降低隔离级别。
7. Redo Log在磁盘上的存储方式及落盘策略? 参考回答:Redo Log以循环写的固定大小日志文件存储。落盘策略由innodb_flush_log_at_trx_commit参数控制:0每秒刷新到磁盘;1每次事务提交时刷新;2每次提交写入系统缓存,每秒刷新到磁盘。
三、分布式与中间件
8. RabbitMQ镜像集群与普通集群的区别? 参考回答:普通集群只有主节点存储队列数据,其他节点只存储元数据;镜像集群所有节点存储完整队列,避免单点故障但同步开销大。高可用建议使用Quorum Queues或镜像队列策略。
9. 消息队列的持久化机制是怎样的? 参考回答:消息持久化将消息写入磁盘,防止服务重启丢失。RabbitMQ通过将队列和消息标记为持久化实现;RocketMQ通过CommitLog顺序写盘;Kafka通过将消息写入磁盘段文件实现持久化。
|