25年10月抖音 Java开发实习生二面
#JAVA##JAVA面经##JAVA内推#
实习期间做过最有成就感或最棘手的需求是啥?
“虽暂无企业实习经历,但在校园二手平台项目中,我主导开发了高并发秒杀模块(类比实习场景):
- 背景:校园活动期间瞬时流量激增(预估500+并发),需防超卖、保系统稳定
- 我的职责:方案设计→编码→压测→上线全流程
- 设计方案:
1️⃣ 流量削峰:RabbitMQ异步队列缓冲请求(设置预热队列防突发)
2️⃣ 库存控制:
• Redis Lua脚本原子扣减(if stock>0 then decr key end)
• 数据库乐观锁二次校验(version字段)
3️⃣ 防刷机制:用户维度限流(Guava RateLimiter 3次/秒)+ 验证码- 成果:JMeter压测1000并发零超卖,接口P99<200ms
- 反思:初期忽略Redis缓存击穿,用布隆过滤器+空值缓存补救。最大收获:高并发设计需‘理论+压测+监控’三位一体,任何环节缺失都可能线上事故。”
用 RocketMQ 时,如何保证消息严格有序?
“项目中使用RabbitMQ,但深入研究过RocketMQ有序消息机制:
✅ 核心方案:
- 队列级有序:同一业务标识(如订单ID)的消息发送到同一MessageQueue
producer.send(msg, new MessageQueueSelector() { @Override public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) { Long orderId = (Long) arg; return mqs.get((int)(orderId % mqs.size())); // 按订单ID哈希固定队列 } }, orderId);- 消费端:单线程消费该队列(避免多线程乱序)
⚠️ 踩坑认知:- 若消费者故障转移,新实例需等待原实例释放队列锁,短暂无序(业务层需幂等兜底)
- 对比RabbitMQ:RabbitMQ需为每个订单建独立队列(运维成本高),RocketMQ的队列复用更优雅
态度:技术选型需匹配业务——订单状态流转用有序消息,通知类消息用普通队列提升吞吐。”
看 EXPLAIN 优化慢 SQL,重点关注哪些字段?
“三字段定乾坤:
🔹 type:
- 目标:
ref/range(走索引)- 警惕:
index(全索引扫描)、ALL(全表扫描)→ 立即加索引
🔹 rows:- 预估扫描行数,若>总数据10%需警惕(如10万表扫5万行)
- 结合
filtered看有效过滤率
🔹 Extra:- ✅
Using index:覆盖索引,最优- ⚠️
Using filesort:ORDER BY未走索引 → 加联合索引- ⚠️
Using temporary:GROUP BY临时表 → 优化分组字段索引
实战案例:曾优化‘用户订单查询’,将(user_id)单列索引改为(user_id, create_time),type从index→range,rows从8000→15,耗时从1.2s→40ms。”
Linux查日志定位"timeout"行,命令组合?
“高效组合三式:
1️⃣ 实时追踪:tail -f app.log | grep --color=auto "timeout"(高亮关键词)
2️⃣ 精准定位:grep -n "timeout" app.log | tail -20(显示行号+最后20条)
3️⃣ 上下文关联:grep -B 2 -A 3 "timeout" app.log(显示匹配行前后2/3行,快速定位堆栈)
进阶技巧:
- 大日志文件:
less +/timeout app.log(less内搜索)- 多文件:
grep -r "timeout" /var/log/myapp/ --include="*.log"- 排除干扰:
grep "timeout" app.log | grep -v "connect"(过滤含connect的timeout)”
端口被占用,查进程命令?
“两步精准定位:
1️⃣ 查进程PID:
lsof -i :8080(推荐,输出含进程名/用户)
备选:netstat -tunlp | grep :8080
2️⃣ 处理进程:
kill -9 <PID>(强制终止)
安全操作:先ps -p <PID> -o comm=确认进程名,避免误杀
实战习惯:部署脚本开头加lsof -ti :8080 | xargs kill -9 2>/dev/null,确保端口释放。”
Java 异常体系,运行时异常 vs 受检异常?
“核心分界:是否需显式处理(try-catch/throws)
🔹 运行时异常(RuntimeException子类):
- 例:
NullPointerException(空指针)、IllegalArgumentException(参数非法)、ConcurrentModificationException(遍历中修改集合)- 特点:程序逻辑错误,应编码避免,通常不捕获
🔹 受检异常(Exception子类,非RuntimeException):- 例:
IOException(文件读写)、SQLException(数据库操作)、ClassNotFoundException- 特点:外部环境导致,必须处理(如重试/降级)
项目实践:- 自定义业务异常继承
RuntimeException(如OrderNotFoundException),简化Controller层- 受检异常统一转换:MyBatis
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看14道真题和解析