Skip to content

第一板块:需求拆解与架构设计

面试官通常先用这个来考察你的全局视野,而不是上来就敲代码。

1. 拿到一个全新的项目需求,你通常会怎么着手?请描述你拆解需求点的具体步骤和方法论。(对应笔记:0 & 13 & 17) 2. 你的项目架构是如何搭建的?是自研还是参考了业界方案?如果参考了开源脚手架,你做了哪些具体的定制和修改?(对应笔记:架构) 3. 为什么选择使用 Java 21 作为开发环境?它带来的虚拟线程等新特性,在你的项目中真的有实际收益吗?(对应笔记:18) 4. 你刚刚提到AOP,除了日志和鉴权,你认为AOP在项目中最具价值的“基本组件思维”应用场景还有哪些?(对应笔记:todo 1.aop)


第二板块:AI 代码生成与质量把控

这是你笔记的第一部分,面试官会非常好奇你在AI辅助下到底有没有“思考能力”。

5. 在AI帮你生成代码后,你通常采用什么策略和工具来进行测试,以确保生成的代码不是“一眼假”?(还原笔记1) 6. 你如何引导或约束AI,让它生成的代码具备可读性高、扩展性强的“优雅性”?是直接给Prompt还是有自己的规范库?(还原笔记2) 7. 关于代码的正确性评判标准:最终由你还是AI来把关?如果你把评判权交给AI,那么你传递给AI的“正确性定义”具体包含哪几个维度(如逻辑、边界、异常)?(还原笔记3) 8. 代码的可维护性(如圈复杂度、耦合度)由谁来评判?如果AI提出重构建议,你会无条件采纳吗?(还原笔记4) 9. 在实现一个复杂功能时,你和AI的协作思考链路是怎样的?是谁主导设计,AI负责补全细节,还是让AI先出方案你再挑选?(还原笔记5) 10. 最近很火的“Vibe Coding”(凭感觉编程)你怎么看?你在项目中是否有类似的实践,它的边界在哪里?(对应笔记19)


第三板块:技术选型与基础框架

对应你笔记中关于Mybatis、Druid、脚手架的部分。

11. 你的项目为什么要用 Mybatis-Plus?它比原生Mybatis有哪些不得不说的特殊优势?你知道Mybatis的核心执行流程吗?(还原笔记11) 12. 既然有了Mybatis-Plus,你为什么还要额外引入 Druid?Druid在你的项目中具体承担了什么不可替代的职责?(注:Druid不仅是连接池,更是监控平台)(还原笔记10) 13. 在进行技术选型时,针对同一个需求(例如定时任务),你通常会列出几套方案做对比?对比的核心维度(性能、运维成本、团队熟悉度)权重怎么分?(还原笔记13的“方案对比”)


第四板块:Redis 与缓存中间件

这是笔记里todo最多的地方,面试官会一直追问问到你说不出话为止。

14. 你的项目为什么要引入Redis?你在引入前,有没有计算过数据库的QPS阈值?数据库连接池被打崩的临界点你测试过吗?(还原todo 1) 15. 如果项目流量并没有预想中大,引入Redis和MQ是否会构成一种“过度设计”和额外负担?你如何权衡这个取舍?(还原todo 2) 16. 你清楚自己项目中Redis的详细配置参数吗?(比如maxmemory、淘汰策略、timeout)这些参数你是基于什么理由设置的?(还原todo 3) 17. 你的Redis中存储了哪些类型的数据?用的是String、Hash还是别的结构?针对不同的业务数据,你是如何设计Key的目录分级策略**(命名空间)的?(还原todo 4) 18. Redis在你们的项目中是如何实现限流的?用的是令牌桶还是漏桶?具体落地是用了Redisson的RRateLimiter还是自己用Lua脚本写的?(还原todo 5) 19. 你在项目中为什么要加分布式锁?解决的是什么具体的并发问题?如果不用Redis分布式锁,还有没有其他方案?**(还原todo 6)


第五板块:消息队列(MQ)与通信协议

对应Kafka、推拉模式、WebSocket。

20. 你提到用MQ实现定时轮询,为什么不用Redis自身的过期回调或定时任务?光用Redis能否实现,使用MQ的核心考量是什么?(还原todo 12) 21. 在消息队列(如Kafka/RabbitMQ)中,你如何保证消息的有序性(即保证xxx不乱序)?如果分区(Partition)发生重平衡(Rebalance)怎么办?(还原笔记20 & 22) 22. 你对推拉模式(Push/Pull)了解多少?在你项目涉及的场景(如消息消费、配置更新)中,你分别是怎么选型的?(还原笔记21 & 8) 23. WebSocket 和传统的 HTTPS 协议到底有什么区别?你为什么要在项目中加入 WebSocket?请简述建立 WebSocket 长连接的完整网络交互过程(包含TCP三次握手和WS握手)。(还原todo 7 & 9)


第六板块:安全、文件与兜底策略

考察你的防御性编程思维。

24. JWT(Json Web Token)在你的项目里是如何做身份认证的?你能详细讲一下JWT的结构、签名原理,以及如何解决JWT注销/过期难的问题吗?(还原todo 16) 25. 你的项目涉及文件上传,大文件(如1G以上)是如何实现快速上传的?如果用户上传到一半断网了,怎么保证失败重传(断点续传)的幂等性?(还原todo 15) 26. 针对文件存储服务,如果OSS(对象存储)或本地磁盘挂了,你有没有设计兜底(降级/容灾)方案?(还原todo 14)


第七板块:测试、性能与核心竞争

最后这些问题是决定你能不能拿到的关键。

27. 你提到自己做过压力测试**,请问是用什么工具(JMeter/Locust)测的?测出来的QPS/TPS是多少?数据库和Redis的压力分别到多少的时候系统开始崩溃?(还原todo 26 & 1的压力测试追问) 28. 除了业务代码,你对自己的职业生涯和竞争力做过什么深度思考?你做的这两个项目,如果让你复盘,你最想推翻重来的设计是什么?(还原笔记23 & 24) 29. 这是一个比较直接的问题:现在大厂不缺会写代码的人,你觉得你凭什么打得过985/科班的同学?你独特的、不可替代的价值点在哪里?**(还原笔记24) 30. 你平常是否主动学习AI底层原理(如Transformer架构、RAG、Agent)?如果让你用AI Agent优化你现在的项目监控,你会怎么设计?(还原笔记25,考察AI思维延伸)


额外补):

  • 31. 缓存穿透/雪崩/击穿的解决方案(你提到Redis但没写这三个经典坑)。
  • 32. 事务注解@Transactional在分布式场景下的失效问题
  • 33. 项目日志如何做链路追踪(TraceId)
  • 34. 数据库索引失效的常见场景
  • 35. 如果上线后突然CPU飙高到100%,你的排查思路(Arthas等工具)

Powered by VitePress 1.6.4 | 持续更新中