校招 未知部门 / 算法 / 一面
[面试日期] 2026-04-07 [面试时长] 未知
[学校背景] 吉林大学 | 985 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>蚂蚁 AI应用开发 一面</h2>
<p><em>来源为牛客付费专栏,以下仅收录公开可见内容,付费部分未收录。</em></p>
<h2><span>1. 先做一下自我介绍</span></h2>
<h2><span>2. 讲讲你做的这个项目</span></h2>
<p><span>这个项目可以设计成面向投研分析师的问答和报告辅助系统,支持财报解析、公告问答、指标对比和结论摘要。整体链路一般包括文档接入、结构化解析、分块索引、检索增强、模型生成和结果回溯。我主要负责的是文档清洗、分块策略、Embedding 入库、重排、长上下文裁剪和推理链路监控。项目里比较难的点在于文档质量参差不齐,表格、脚注和跨页内容很多,直接切分会严重影响召回效果,所以后面会专门做表格提取和层级切片。</span></p>
<h2><span>3. 怎么解决大事务问题,为什么会导致这些风险</span></h2>
<p><span>大事务的风险主要在于占锁时间长、回滚成本高、undo log 膨胀、主从延迟和数据库连接占用时间过久。尤其是在消息发送、文件处理、远程调用都包进一个事务时,事务边界会被拉得很长,任何一个步骤慢下来都会把整个链路拖住。解决思路通常不是简单把超时时间调大,而是拆事务边界,把核心写库操作和外部副作用操作分开,必要时结合本地消息表、状态机和补偿逻辑来做最终一致性。</span></p>
<pre>@Transactional
public void createTask(Task task) {
taskMapper.insert(task);
outboxMapper.insert(buildEvent(task));
}
</pre>
<h2><span>4. JVM 调优的完整步骤你一般怎么讲</span></h2>
<p><span>JVM 调优最好按“现象、定位、验证、调整”这个顺序讲。先看线上现象,是吞吐下降、延迟抖动、Full GC 频繁还是 OOM,再结合监控判断堆、元空间、线程数和对象分配速率。接着看 GC 日志、jstat、jmap、jstack、Arthas 或 MAT,确认是内存泄漏、对象生命周期不合理、线程池堆积还是大对象分配问题。最后才是调参数,比如堆大小、分代比例、GC 策略和停顿目标。真正的重点不是背参数,而是知道为什么调以及调完如何验证。</span></p>
<h2><span>5. JVM 调优时重点要关注哪些内容</span></h2>
<p><span>重点一般是堆内存使用趋势、Young GC 和 Full GC 的频率与耗时、对象晋升情况、老年代增长速度、元空间占用、线程数量、直接内存和系统负载。很多人只盯堆,其实线上问题常常不只是堆,像线程暴涨、频繁创建大对象、网络缓冲区占用异常也会把服务拖垮。对于大模型应用,还要特别注意长文本处理、Embedding 批量任务和缓存对象是否会把堆打满。</span></p>
<h2><span>6. 挑一个你熟悉的消息队列讲讲底层原理</span></h2>
<p><span>如果讲 Kafka,可以从顺序写磁盘、分区、副本机制、消费位点和批量拉取说起。Kafka 为什么吞吐高,关键不是“用了磁盘”,而是它把磁盘写入做成了顺序追加,再配合页缓存、批量发送和零拷贝。消费者侧通过 offset 自己维护进度,Broker 只负责存储消息和提供拉取能力。这样设计带来的好处是读写职责清晰,但也意味着重复消费和消息幂等要靠上层业务兜底。</span></p>
<h2><span>7. JVM GC 的过程讲一下,以及对应的回收器怎么理解</span></h2>
<p><span>GC 的过程可以从根可达性分析开始,先找到不可达对象,再根据不同区域和回收器策略做回收。新生代一般是复制算法,老年代常见是标记整理或者标记清除整理结合。像 G1 会把堆拆成很多 Region,按收益优先回收一部分区域;CMS 更强调低停顿,但会有碎片问题。真正面试时不要只说算法名,更要结合为什么这个阶段用这种算法,比如新生代对象朝生夕灭,复制算法更适合。</span></p>
<h2><span></span></h2>
AI 推荐面试题
