京东 AI应用开发(后端) 一面(JDY)

1. 做一下自我介绍

2. 讲一下你做过的系统架构,别只说用了哪些中间件

架构最好按数据流讲,而不是按技术名词堆。入口层是网关、鉴权和限流,业务层负责请求编排、规则判断和状态推进,异步层用 MQ 解耦高峰流量和补偿任务,存储层通常拆成 MySQL、Redis、检索索引和对象存储,旁路再挂监控、日志、配置中心和任务调度。真正有价值的是你能指出瓶颈会出现在哪里,比如检索召回抖动、缓存热点倾斜、下游依赖变慢、消费积压或者数据库回查索引失效。

3. RAG 的原理你怎么讲,真正落地时它在系统里承担什么角色

RAG 不是“检索一下再回答”这么简单,它本质上是把外部知识注入生成过程,降低模型纯参数记忆带来的不确定性。通常流程是文档清洗、切块、向量化、索引构建、召回、重排、上下文组装和答案生成。落地时它更像知识访问层,而不是答案本身。好的 RAG 系统不只是能找到相关段落,还要让模型在证据边界内作答,没证据时能够拒答。

def rag_pipeline(query):
    chunks = retrieve(query)
    ranked = rerank(query, chunks)
    context = build_context(ranked[:5])
    return llm_generate(query, context)

4. 向量数据库的作用是什么,它和普通检索系统的边界在哪里

向量数据库主要解决语义相似检索问题,适合处理问法不稳定、表达多样但语义相近的场景。它把文本映射成高维向量,再用 ANN 索引做近似最近邻搜索。但它不是全文检索替代品,精确关键词、结构字段过滤、时间约束和强规则查询,传统倒排索引通常更稳。实际系统里很少只用一种检索,而是向量召回、关键词召回和规则过滤混合使用。

5. 为什么有些场景会选择多智能体,而不是单智能体把事情全做完

多智能体不是因为“更高级”,而是因为任务边界真的可以拆。比如规划、执行、审计、复核天然是不同职责,拆开之后上下文更短,行为也更容易约束。单智能体优点是链路短、调试简单、状态集中,但一旦任务变成多阶段推理加工具调用,它很容易上下文污染。多智能体的代价是通信成本、错误放大和治理复杂度都会上升,所以只有职责边界足够清晰时才值得上。

6. 如果让你现场展示项目代码,你会重点讲哪一部分才能体现深度

不会直接展示 controller 或 CRUD,我会挑能体现系统复杂度的部分,比如检索编排层、工具路由、消息幂等消费、缓存一致性控制或者任务状态机。因为这些位置能体现你是不是只会堆框架,还是理解数据流、故障场景和边界控制。展示代码时也别只念逻辑,要说明这个实现解决了什么问题、为什么不用更简单的方案、上线后踩过哪些坑。

7. Redis 的 ZSet 在你的系统里适合拿来做什么,为什么不用 List 或普通 Set

ZSet 最典型的价值是既要去重,又要排序,还要支持按 score 范围查询。比如延迟任务调度、热度排行、限时窗口统计、会话活跃度排序都很适合。List 更适合简单队列,Set 适合纯去重,但都不适合按权重或时间戳排序。ZSet 真正好用的地方在于它把“唯一成员 + 有序 score”绑在一起,很多业务场景天然就是这个模型。

redisTemplate.opsForZSet().add("delay_task", "task_1001", System.currentTimeMillis() + 30000);
Set<String> tasks = redisTemplate.opsForZSet()
        .rangeByScore("delay_task", 0, System.currentTimeMillis());

8. 消息队列在你这个系统里真正承担什么作用

消息队列至少承担三件事:主链路解耦、失败补偿和流量整形。主链路里不适合同步阻塞的动作,比如审计日志、异步通知、画像更新、二级索引刷新,都可以异步化。失败补偿场景下,MQ 让系统具备重试和重放能力。流量整形则体现在高峰请求先入队,消费端按可承载速度处理。真正成熟的系统用 MQ 不是为了“快”,而是为了把不确定性从主请求里剥出去。

9. 多线程在项目里一般会用在哪些地方,线程池参数你是怎么考虑的

多线程不是为了“提高并发”这句空话,而是看任务是否能拆并且值不值得拆。常见用法是并行聚合下游接口、异步日志落盘、批量任务分片和后台补偿。线程池参数要结合任务类型来定,CPU 密集型和 IO 密集型差别很大,队列大小、拒绝策略和最大线程数也要看系统是否允许堆积。如果线程池只是凭经验写死,很容易在下游抖动时把自己先拖死。

ExecutorService executor = new ThreadPoolExecutor(
        8, 16, 60, TimeUnit.SECONDS,
        new ArrayBlockingQueue<>(200),
        new ThreadPoolExecutor.CallerRunsPolicy()
);

10. 说一说JVM 内存模型

如果只是讲堆、栈、方法区,那还停留在结构层。更关键的是 Java 内存模型约束了线程之间如何看见共享变量,涉及主内存、工作内存、可见性、原子性和有序性。很多并发 bug 不是因为对象放在哪个区,而是线程更新后的值为什么别的线程看不到,或者为什么指令重排导致状态异常。面试里讲 JMM,更重要的是把它和 volatile、锁、CAS 这些机制连起来。

11. 垃圾回收机制如果结合线上问题来讲,你会

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论
感觉总结的很好呢
点赞 回复 分享
发布于 04-18 22:22 北京
同学,考虑一下多多吗,招实习生啦:https://careers.pddglobalhr.com/campus/intern?t=FFEgIPlwIe
点赞 回复 分享
发布于 04-17 11:13 上海

相关推荐

04-30 08:04
东南大学 C++
一、基本情况&nbsp;/&nbsp;项目概述1.你先做个自我介绍。2.你最近的一份项目,能不能从整体框架、实现方式、你承担的角色这几个方面讲一下?________________________________________二、字节实习:端上特征平台&nbsp;/&nbsp;数据处理链路3.你们这个特征平台,本质上是在做哪些事情?4.你们是只做数据处理和平台化支撑,真正的使用方是各个业务侧,对吗?5.端上数据的产生流程是怎么设计的?6.特征是怎么从原始事件中生成出来的?7.不同特征之间是怎么区分的?8.数据产生之后,准确性校验是怎么做的?9.如果你们主要只是做订阅、采集、落库,那这个平台真正的复杂度和难点在哪里?10.你刚才提到的平台能力里,除了基础入库,还有哪些额外的处理或运行能力?________________________________________三、SQL&nbsp;优化&nbsp;/&nbsp;性能问题11.你做的&nbsp;SQL&nbsp;优化具体是怎么发现问题的?12.这个问题最初是怎么产生的?13.你的优化方案具体分成了哪几步?14.为什么这些&nbsp;SQL&nbsp;可以做模板化和合并处理?15.最终修复效果怎么样?优化指标大概是多少?________________________________________四、自动化测试&nbsp;/&nbsp;MCP&nbsp;/&nbsp;Agent&nbsp;能力16.你提到做了自动化测试相关的&nbsp;Agent&nbsp;和&nbsp;MCP,这块整体设计思路是什么?17.这个自动化测试能力具体包含哪些功能?18.你是怎么把&nbsp;MCP&nbsp;接进自动化测试流程里的?19.这个自动化测试后面是怎么和业务流程、版本流程结合起来的?20.如果有新增接口或者代码变更,你们后续怎么补自动化测试用例?________________________________________五、AI&nbsp;投资分析系统&nbsp;/&nbsp;Multi-Agent&nbsp;设计21.你做的&nbsp;AI&nbsp;投资项目,是一个&nbsp;Multi-Agent&nbsp;项目,对吗?22.这个&nbsp;Multi-Agent&nbsp;架构整体是怎么设计的?23.主控&nbsp;Agent&nbsp;和子&nbsp;Agent&nbsp;之间是怎么分工的?24.不同&nbsp;Agent&nbsp;之间的数据是怎么流转的?25.任务列表、完成标记、工具调用列表这套机制是怎么设计的?26.你的系统提示词一般是怎么设计出来的?27.你自己先写提示词,和让&nbsp;AI&nbsp;帮你结构化整理,这两部分分别怎么配合?________________________________________六、Prompt&nbsp;/&nbsp;幻觉控制28.写提示词的时候,怎么尽量减少幻觉?29.你觉得减少幻觉最关键的设计点是什么?30.除了提示词约束和标注信息来源,你还有没有别的方法控制幻觉?________________________________________七、字节中的&nbsp;Agent&nbsp;实践31.在字节实习期间,除了测试那块,你还做过其他&nbsp;Agent&nbsp;相关开发吗?32.你说的测试&nbsp;Agent,本质上到底用了哪些&nbsp;Agent&nbsp;能力?________________________________________八、通用&nbsp;Agent&nbsp;设计方法论33.如果现在让你从一个业务场景出发设计一个&nbsp;Agent,整个流程你会拆成哪些步骤?34.在架构设计阶段,你会先判断哪些关键问题?35.什么时候适合做简单的一问一答式&nbsp;Agent,什么时候适合做&nbsp;ReAct&nbsp;/&nbsp;Plan-and-Execute&nbsp;这种复杂&nbsp;Agent?36.长短期记忆、工具设计、安全审查,这些部分在&nbsp;Agent&nbsp;设计里分别怎么考虑?37.你觉得一个&nbsp;Agent&nbsp;的最小可行版本(MVP)应该包含哪些核心部分?________________________________________九、Agent&nbsp;评估&nbsp;/&nbsp;数据集&nbsp;/&nbsp;上线38.一个&nbsp;Agent&nbsp;做出来之后,你怎么评估它的效果?39.你刚才说需要准备测试数据集,那这个测试集应该怎么设计?40.如果测试集不好准备,那上线前你怎么确认这个&nbsp;Agent&nbsp;足够可用?41.除了离线测试,你会怎么做人工测试和灰度验证?________________________________________十、Agent&nbsp;安全&nbsp;/&nbsp;Prompt&nbsp;Injection&nbsp;/&nbsp;越权42.Agent&nbsp;测试时,除了正常测试,你有没有了解过异常测试场景?43.你对越权调用、Prompt&nbsp;投毒这类安全问题了解多少?44.如果要做这类安全防御,你会怎么设计技术方案?45.在输入侧做规则引擎和小模型审查,这两种思路你怎么理解?________________________________________十一、C++&nbsp;并发&nbsp;/&nbsp;异步&nbsp;/&nbsp;落库46.你提到过&nbsp;concurrent&nbsp;hashmap,你能讲讲它的实现原理吗?47.这个结构是怎么保证线程安全的?48.你们当时这个并发&nbsp;map&nbsp;真的是无锁实现吗?49.如果是锁&nbsp;+&nbsp;条件变量,它具体是怎么工作的?50.你提到异步落库,这个异步队列是怎么设计的?51.你们怎么处理消息延迟、消息丢失、消息堆积这些问题?52.如果队列在内存里堆积,进程或者机器异常退出,消息怎么恢复?53.你们当时对失败重试和上报之外,有没有更完整的恢复设计?________________________________________十二、网络基础&nbsp;/&nbsp;HTTP54.你大致说一下&nbsp;HTTP/1.1&nbsp;和&nbsp;HTTP/2&nbsp;的区别。55.在长连接场景下,比如&nbsp;Agent、模型交互、AI&nbsp;Coding&nbsp;这些场景里,HTTP/1.1&nbsp;和&nbsp;HTTP/2&nbsp;一般分别适用于什么情况?56.如果要选协议,你会怎么考虑它们各自的适用场景?
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务