本轮要点: 三面偏重项目经历、思维深度与工程解决方案,兼顾产品理解与算法能力。
本轮共 6 道题。答案默认折叠,便于先自行作答。
1. 讲一下之前的实习经历,主要负责什么工作,你们团队是做什么的?
题目要点
在回答实习经历时,可以遵循: “团队是做什么的 → 自己负责了什么 → 过程中遇到的挑战 → 最终的结果和成长”。 这样既能让面试官清楚地看到候选人的贡献,也能体现出对团队目标的理解和自身成长路径的清晰度。
要不要我帮你准备几个可直接套用的实习经历表述范例,比如业务团队和前端基础设施团队两个版本?
参考答案
这个问题本质上考察的是候选人能否清晰表达实习经历的价值,以及是否能将个人的工作与团队目标联系起来。回答时既要避免流水账式的叙述,也要避免过度拔高,而是重点体现做过什么、为什么做、产生了什么影响。
回答思路
1. 团队定位与职责
先交代团队是做什么的,比如:
- 是否负责某条具体业务线(例如地图、金融、电商、内容平台);
- 是否是基础架构团队(组件库、工程化平台、性能优化、监控体系);
- 团队的核心目标是什么(提升用户体验、提升研发效率、支撑业务增长)。
这样能让面试官快速理解环境。
2. 个人负责的工作
描述时可以抓住几个关键词:
- 核心任务:负责开发某个功能模块、参与前端组件封装、接入监控埋点、优化性能等;
- 协作方式:是否需要和后端、测试、设计配合,是否参与需求评审或接口联调;
- 挑战与亮点:是否遇到过性能瓶颈、复杂交互、数据量大等问题,是否提出了改进方案。
避免简单说“写页面、改 bug”,而是强调“通过实现某个功能/优化某处性能,解决了某类问题”。
3. 收获与成长
最后点出在实习期间的成长:
- 是否熟悉了前端项目的完整研发流程(需求 → 开发 → 测试 → 上线 → 复盘);
- 是否积累了在团队协作、代码规范、工程化工具上的经验;
- 是否提升了技术能力,比如掌握了某些框架或优化手段。
2. 在工作中遇到过什么问题,是怎么解决的?
题目要点
这个问题的最佳回答路径是: “提出一个具体问题 → 说明如何分析定位 → 阐述解决过程和思考 → 总结结果和反思”。 重点不是问题有多难,而是展现出遇事冷静分析、推动落地并能沉淀经验的能力。
要不要我帮你列几个可以直接在面试里使用的典型案例场景,比如“性能优化”、“构建优化”、“协作问题”三类?
参考答案
这个问题考察的是候选人的问题意识、分析能力、解决路径和复盘能力。面试官关注的不是问题本身多么“高大上”,而是能否体现出逻辑清晰、方案合理、结果正向。
回答思路
1. 问题背景
问题需要真实、贴近前端工作场景,例如:
- 性能问题(页面渲染过慢、首屏加载时间过长);
- 工程化问题(构建时间过长、依赖冲突、CI/CD 卡点);
- 协作问题(接口定义频繁变动、联调效率低);
- 用户体验问题(复杂交互逻辑导致 bug 难以复现)。
选择的问题不必“最难”,但要能展开思路。
2. 分析问题
体现出有系统化思考能力,比如:
- 如何定位问题根源?是代码实现、架构设计还是协作流程?
- 是否通过工具(如性能分析工具、日志埋点、构建分析插件)进行验证?
- 是否评估过不同解决路径的利弊?
3. 解决方案
回答时要有过程感,而不是直接“后来就解决了”:
- 采取了什么短期措施保证业务可用;
- 推动了什么长期优化(如引入虚拟列表、增加代码规范检查、推动接口 mock 工具);
- 有没有涉及跨团队沟通与推动。
4. 结果与复盘
最后强调:
- 问题得到了解决(比如性能提升 40%,联调时间缩短一半);
- 自己在过程中积累了什么方法论,是否形成了可复用的方案或沉淀成团队规范。
3. 你怎么看待这一款产品?
题目要点
核心考查:你怎么看待这一款产品?的概念、原理与实际应用。
参考答案
略
4. 如何根据广告来推荐商品?
题目要点
用户画像与广告投放数据建模。
参考答案
- 用户画像与广告投放数据建模。
- 使用点击率预测模型 (CTR/CVR) 排序推荐结果。
- 引入实时反馈提升推荐效果。
5. 大型语言模型(LLM)详细讲讲
题目要点
- Transformer 架构
- 大模型应用原理
参考答案
LLM 基于 Transformer 架构,通过海量语料训练实现文本生成、理解、摘要、翻译等功能。核心组件包括自注意力机制、残差连接、大规模并行训练。
6. 找出路径最大值
给定一个三角形数组,找出从顶到底的路径最大值,要求只能从上一层相邻节点移动到下一层。
例如:
- 输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
- 输出:18(即 2 + 3 + 5 + 8 = 18)
题目要点
使用自底向上动态规划,逐层选择较大值累计:
参考答案
使用自底向上动态规划,逐层选择较大值累计:
function maximumTotal(triangle) {
for (let i = triangle.length - 2; i >= 0; i--) {
for (let j = 0; j < triangle[i].length; j++) {
triangle[i][j] += Math.max(triangle[i+1][j], triangle[i+1][j+1]);
}
}
return triangle[0][0];
}