3.31 美团食杂零售后端一面面经
面试题目
- 自我介绍
- 大模型项目做了什么
- 向量数据库流程,怎么选型,维度为啥这么选,基于之前的faiss是吗
- 用向量数据库的时候,对它的性能上有什么考虑
- 双向量(query改写)和单向量召回的区别是什么
- 上线了吗,完整数据流向流程
- 优化准确率,哪些方面优化
- 摘要怎么做的(参考OpenClaw)
- 项目做了多长时间,你参与了哪些
- 主要语言Java还是Python
- Java线程池使用场景(HTTP连接、CompletableFuture异步调用、自定义线程池防止阻塞)
- 线程数是怎么估计的
- Synchronized锁升级了解吗,可重入锁吗
- 如果不可重入会出现什么情况
- ThreadLocal底层原理
- 学习知识的流程是什么样(研究性 vs 工程性)
- OpenClaw爬论文Skill模块实现与部署方式
- 工程性课题学习路径,多Agent比单智能体的好处
- PPT Agent实现细节
- AI编程范式(人机协同、Vibe Coding)
- 算法题:数组升序排列,求前K个数,快排思路
- 反问环节
参考解析
1. 向量数据库选型与性能: 选型需权衡查询速度(ANN算法)与精度(召回率),性能优化可从索引结构(如HNSW)、硬件加速(GPU/SIMD)、数据预过滤及内存映射角度考虑。
2. 线程池参数估计: CPU密集型建议设置为 N+1,IO密集型建议设置为 2N 或采用动态调整策略,需结合压测观察系统吞吐量与CPU利用率。
3. Synchronized锁升级: 从无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁。不可重入会导致同一线程调用自身同步方法时产生自旋死锁。
4. ThreadLocal原理: 每个Thread对象持有一个ThreadLocalMap,key为ThreadLocal弱引用,value为实际存储对象,通过当前线程获取Map实现线程隔离,注意内存泄漏风险。
5. 快排求TopK: 使用快排的Partition思想,每次将数组划分为两部分,若基准点下标刚好为K-1,则左侧即为前K个元素,平均时间复杂度为O(N)。