杭州有赞一面

有赞 · AI算法工程师 · 一面 · 广东 · 2026-05

《面试题目》

  1. 📍面试公司:杭州有赞
  2. 🕐面试时间:04/10
  3. 💻面试岗位:java

❓面试问题

  1. 请做一下自我介绍和家庭地址
  2. 实习与项目集
  3. Java 8 Lambda 表达式在实际项目中的应用场景
  4. JVM 内存结构是怎样的?如果做一个高并发的在线社区系统,你会如何选择和配置垃圾回收器?考虑哪些因素?
  5. 项目如果大量用户发表评论和点赞,你会如何设计并发控制?选择乐观锁还是悲观锁?为什么?
  6. MiniDB 项目中实现了 MVCC 和死锁检测,解释一下什么是 MVCC?它是如何解决读写冲突的?
  7. B+树索引如何支持范围查询?相比 B 树有什么优势?实现时需要注意什么?
  8. 项目中有全文检索功能,如果要设计一个高效的“搜索建议”(输入前缀时给出推荐词),从算法角度你会怎么设计?
  9. 如果项目出现大量慢查询,你的排查思路是什么?会用到哪些工具?
  10. 实习中开发了 CI/CD 插件,如果现在有一个需求:流水线执行失败后自动分析日志并给出修复建议,你会怎么设计这个功能?
  11. MySQL 的索引与 Elasticsearch 的倒排索引有什么异同?
  12. 项目中遇到的最大技术挑战是什么?怎么解决的?从中学习到了什么?
  13. 你用过哪些 AI 工具辅助开发?分享一个具体案例
  14. Web Coding 和 Spec Coding 分别适用于哪些不同场景?
  15. 了解 “agent engineering” 或 “harness” 这些概念吗?
  16. 在 Gitee 项目中实现了 MCP 协议打通大模型,你认为 AI 在未来软件开发中会从哪些方面产生较大影响?
  17. 作为校招生,未来 1-3 年的职业规划是什么?

🙌面试感想 18. 面试官问得比较广,没有纯八股,但是不太难,约二面了。终面需要线下。


《参考解析》

  1. MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。

  2. JVM与GC:JVM内存模型:堆(对象分配,GC管理)、方法区(类信息、常量池)、虚拟机栈(栈帧/局部变量/操作数栈)、本地方法栈、程序计数器。GC算法:标记-清除(内存碎片)、标记-整理(无碎片,但移动对象)、复制(新生代)。G1按Region划分堆,预测停顿时间。

  3. Java并发:Java并发:synchronized关键字(偏向锁→轻量级锁→重量级锁升级);ReentrantLock(可重入、可中断、公平锁);volatile(内存可见性+禁止指令重排,不保证原子性);CAS(Compare-And-Swap,无锁乐观并发);ThreadLocal(线程本地变量,WeakReference,注意内存泄漏)。线程池核心参数:corePoolSize/maximumPoolSize/keepAliveTime/workQueue/handler。

  4. RAG与大模型:RAG(检索增强生成)流程:文档切片→向量化(Embedding)→存向量数据库→检索时将query向量化→TopK语义检索→将相关文档拼入prompt→LLM生成。优化:混合检索(语义+关键词)、重排序Rerank、查询改写、上下文压缩。评估:召回率(relevant docs retrieved/total relevant)、精确率、Answer相关性。