去哪儿春招 Java 一面凉经
面试题目
项目经历:
- 请介绍你的 Agent 项目。
- 项目的输入来源是什么?
- 简述该 Agent 的工作原理(定义 tools、机器人拦截、大模型意图识别、语义检索)。
- 该项目如何进行具体部署与业务接入?
- 系统是否需要主动 fetch 业务代码?
- 除了 excel 导出告警外,还有其他的根因分析案例吗?(提及业务耗时 30s 与 ForkJoinPool 的排查)
- 告警内容是否可以通过日志查询?
- 查询数据库耗时 30s 的问题真的是由 ForkJoinPool 导致的吗?最后如何解决的?
八股文:
- Java 中 List 有哪些常用的实现类?
- 两个线程同时向 List 中添加 100 万次数据,会出现什么问题?
- 核心线程数 4,最大线程数 8 的线程池适用于什么场景?为什么?
- 当有 4 个核心线程、队列长度 100,第 105 个任务到来时会发生什么?
参考解析
- List 并发问题:ArrayList 是非线程安全的,多线程调用
add()会发生数组越界异常或数据覆盖(因size++操作非原子),应使用CopyOnWriteArrayList或Collections.synchronizedList。 - 线程池场景分析:该配置适用于 IO 密集型场景(如数据库操作、网络请求)。因为 IO 密集型任务 CPU 等待时间较长,增加线程数可以提高 CPU 利用率;而 CPU 密集型应尽量减少线程切换。
- 线程池任务拒绝策略:核心线程 4 个满载,队列 100 个满载,当第 105 个任务到来时:前 4 个在执行,100 个在队列,第 105 个任务会触发创建非核心线程(直到达到最大线程 8),若超出 8 则触发
RejectedExecutionHandler拒绝策略。