应用软件开发面经
完整信息
本篇目录
继续发一下之前整理的面经
-- HashMap扩容的时候,如果两个线程同时触发resize,会发生什么问题?你说的这个链表成环的场景,具体是怎么产生的,画一下。
-- ConcurrentHashMap在JDK8里为什么放弃了分段锁,改用CAS+synchronized,这样设计的好处是什么?
-- 讲一下JVM里对象的内存布局,对象头里具体存了什么东西,为什么synchronized锁状态信息能存在对象头里?
-- CMS垃圾回收器为什么会有"浮动垃圾"这个问题,G1是怎么规避这个问题的?
-- 你说项目里遇到过一次线上OOM,能不能详细讲一下当时dump下来的堆内存快照里看到了什么,最后定位到是哪里的问题?
-- 双亲委派模型如果被打破会有什么后果,你知道哪些场景是主动打破这个模型的(比如Tomcat的类加载器设计)?
-- AQS里的state变量在ReentrantLock和CountDownLatch里分别代表什么含义,这个设计思路你怎么理解?
-- synchronized锁升级到重量级锁之后,还能降级回轻量级锁吗,为什么?
-- Spring解决循环依赖用的三级缓存,你能讲清楚每一级缓存分别存的是什么、为什么必须要三级而不是两级吗?
-- @Transactional在什么情况下会失效,你在项目里有没有真的踩过这个坑?
-- MySQL的B+树索引,如果我在一个字段上建了索引,为什么执行的时候优化器可能选择不走索引,全表扫描反而更快?
-- 讲一下MVCC里的ReadView是怎么工作的,可重复读隔离级别下为什么还是有可能出现幻读,用了什么机制去解决?
-- 你项目里说做过一次慢SQL优化,具体是怎么通过explain定位问题的,最后加索引还是改写SQL解决的?
-- 你简历上写了一个基于大模型做智能客服/文档问答的项目,这个里面用到RAG的话,你是怎么处理检索出来的文档和用户问题相关性不高的情况的?
-- 你在这个AI相关项目里有没有涉及到调用大模型API的成本控制,比如上下文长度太长导致token消耗过大,你是怎么处理的?
-- 既然你项目里用到了向量数据库做检索,能讲讲你用的是什么方案,为什么选它而不是直接上ES做关键词检索?
-- 消息队列这块,你说用RabbitMQ做异步解耦,如果消费者处理失败了,你是怎么保证消息不丢的,重试机制是怎么设计的?
-- 如果让你设计一个秒杀系统,你会怎么防止超卖,Redis这块具体怎么用,用了分布式锁还是Lua脚本?
-- 你项目里高并发场景下有没有做过限流,用的是什么算法,令牌桶和漏桶的区别你能讲一下吗?
-- 最后一个问题比较开放:你觉得现在大模型能不能替代传统的一些后端业务逻辑,比如你做的那个AI项目里,哪些部分是大模型做的,哪些部分你觉得还是必须靠传统代码逻辑兜底?
他们这边会根据你主要熟悉的编程语言来问你相关问题,这次面试给我最大的感觉是,问题问得都不算特别难,但每一个都在往深了问,比如HashMap不会只停在"讲讲原理",而是直接给你一个并发场景让你分析问题会怎么发生,逼着你把原理和实际场景串起来讲清楚。AI那部分反而问得没有八股那么细,感觉面试官更想看你是不是真的动手做过,而不是背了一堆RAG、向量数据库这些名词,问着问着就转回了工程落地的问题上,比如成本控制、检索质量这些很实际的东西。
建议大家准备的时候别只背概念,多想想每个知识点在实际场景里会怎么出问题、怎么解决,这种"场景化"的追问才是这次面试的重点。
本篇目录
当前问题0121
- 01
-- HashMap扩容的时候,如果两个线程同时触发resize,会发生什么问题?你说的这个链表成环的场景,具体是怎么产生的,画一下。
- 02
-- ConcurrentHashMap在JDK8里为什么放弃了分段锁,改用CAS+synchronized,这样设计的好处是什么?
- 03
-- 讲一下JVM里对象的内存布局,对象头里具体存了什么东西,为什么synchronized锁状态信息能存在对象头里?
- 04
-- CMS垃圾回收器为什么会有"浮动垃圾"这个问题,G1是怎么规避这个问题的?
- 05
-- 你说项目里遇到过一次线上OOM,能不能详细讲一下当时dump下来的堆内存快照里看到了什么,最后定位到是哪里的问题?
- 06
-- 双亲委派模型如果被打破会有什么后果,你知道哪些场景是主动打破这个模型的(比如Tomcat的类加载器设计)?
- 07
-- AQS里的state变量在ReentrantLock和CountDownLatch里分别代表什么含义,这个设计思路你怎么理解?
- 08
-- synchronized锁升级到重量级锁之后,还能降级回轻量级锁吗,为什么?
- 09
-- Spring解决循环依赖用的三级缓存,你能讲清楚每一级缓存分别存的是什么、为什么必须要三级而不是两级吗?
- 10
-- @Transactional在什么情况下会失效,你在项目里有没有真的踩过这个坑?
- 11
-- MySQL的B+树索引,如果我在一个字段上建了索引,为什么执行的时候优化器可能选择不走索引,全表扫描反而更快?
- 12
-- 讲一下MVCC里的ReadView是怎么工作的,可重复读隔离级别下为什么还是有可能出现幻读,用了什么机制去解决?
- 13
-- 讲一下MVCC里的ReadView是怎么工作的,可重复读隔离级别下为什么还是有可能出现幻读,用了什么机制去解决?
- 14
-- 你项目里说做过一次慢SQL优化,具体是怎么通过explain定位问题的,最后加索引还是改写SQL解决的?
- 15
-- 你简历上写了一个基于大模型做智能客服/文档问答的项目,这个里面用到RAG的话,你是怎么处理检索出来的文档和用户问题相关性不高的情况的?
- 16
-- 你在这个AI相关项目里有没有涉及到调用大模型API的成本控制,比如上下文长度太长导致token消耗过大,你是怎么处理的?
- 17
-- 既然你项目里用到了向量数据库做检索,能讲讲你用的是什么方案,为什么选它而不是直接上ES做关键词检索?
- 18
-- 消息队列这块,你说用RabbitMQ做异步解耦,如果消费者处理失败了,你是怎么保证消息不丢的,重试机制是怎么设计的?
- 19
-- 如果让你设计一个秒杀系统,你会怎么防止超卖,Redis这块具体怎么用,用了分布式锁还是Lua脚本?
- 20
-- 你项目里高并发场景下有没有做过限流,用的是什么算法,令牌桶和漏桶的区别你能讲一下吗?
- 21
-- 最后一个问题比较开放:你觉得现在大模型能不能替代传统的一些后端业务逻辑,比如你做的那个AI项目里,哪些部分是大模型做的,哪些部分你觉得还是必须靠传统代码逻辑兜底?
