海能达 Java 线下三面:线程协作与实习项目
- 轮次
- 一面、HR面、主管面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 算法竞赛中,有什么让你印象深刻的经历?
- 熟悉哪些算法,DFS 和 BFS 有什么区别?
- 实习项目做了什么,自己承担了哪些工作?
- 三个线程中,如何让一个线程等另外两个线程结束后再执行?
- 实习时遇到过哪些技术或非技术困难?
- 实习公司的开发流程是什么,开发周期如何安排?
- 有哪些业余爱好,英语口语情况如何?
- 在项目里如何使用 AI 工具?
《参考解析》
等待两个线程完成
如果拿到的是两个 Thread 对象,可以先启动它们,再由第三个线程依次调用两个对象的 join。等待是依次发生的,前两个线程仍可同时运行。若任务放在线程池中,可以用 CountDownLatch(2),两个任务在 finally 中各调用一次 countDown,第三个任务 await。
要另行传递任务异常。计数归零只说明两个任务走到了结束路径,不意味着它们都成功;等待方被中断时,也要明确停止等待后的处理。
DFS 与 BFS 怎么选
DFS 沿一条路径深入,适合回溯和连通性遍历;BFS 按层扩展,可求无权图中按边数计的最短路径。图搜索通常需要记录已访问节点,避免重复访问。分析空间时,DFS 看递归深度或显式栈,BFS 看同层队列规模,不能只说两者都是“遍历一次”。
项目回答要能落到自己做的事
选一个能解释清楚的需求,说明原来的问题、自己的修改和实际结果。涉及工具辅助开发时,讲清哪些代码经过了运行验证,哪些设计仍由自己判断。原帖没有记录 HR 面细节,主管面的具体技术追问也未展开。