双非前端暑期腾讯pcg二面 噩梦缠绕
实习生当社招面,所有人全疯了这次加粗的不是答不出来的,是答案缺乏深度的,不是实习生哪来的深度
- 自我介绍
- 为什么选择前端
- 有没有接触过其他方向(写过一丢丢服务端)
- 用过哪些 AI 工具(说了平常用 AI 的用途,之前构想的单人异步工作流
- 从输入提示词到 AI 产出结果发生了什么(???先是想说 ReAct、Plan and execute 之类的,告诉我别说这些,就说 agent 做了什么)
- 你对提示词如何规范 AI 产出的理解,它到底做了些什么(只能说说列计划啊工具调用啊之类的)
- 怎么理解 harness engineering,有没有实践过(说了一下 skill 之类的,然后确认与 ai 的需求文档)
- 手撕:数字输出顺序,主要考事件循环
- 浏览器的渲染流程(从拿到 HTML 到页面显示,不过一面不是问过一遍了吗)
- 长列表页可能会渲染卡顿,怎么去做优化?(虚拟列表)
- 还有别的方案吗(分页请求)
- 普通的分页也行,还有别的方案吗(不是哥们我没做过性能优化说到这就可以了吧)
- 怎么用性能工具(F12,还有一些浏览器扩展)
- 如果不是 DOM 的问题呢(那就是 JS 的问题呗)
- 怎么去排查和优化呢(测量脚本运行时间,引入 memo 缓存运算结果,用 callback)
- 如果依赖外部状态,没法用 memo 呢(看它怎么计算的,用 wasm/WebGL,或者上 web worker 多线程)
- 为什么 WebAssembly 有帮助?(虚拟机更优越、无 GC 损耗、可以达到 JS 优化过后的性能)
- JS 一定比 WebAssembly 更慢吗?(很重的数值计算会有帮助)
- WebAssembly 适用哪些场景?(很重的数值计算的场景)
- 还有哪些办法可以优化?(优化 JS 体积、重写 JS 逻辑、降低 GC 开销)
- 用户反馈白屏时间过长,怎么考虑优化?(同步引入改异步引入、CSS URL 迁移到 HTML 里、精灵图、字体图标、看情况使用 base64、SSR)(还有懒加载之类的没说,不过说了也不会有更多帮助了)
- 还有什么办法?(我说这么些还不够吗)
- 有的时候引入 SSR 性能反而更差了,SSR 应该用在什么场景(首屏加载时间很重要、不太依赖和用户相关的状态)
- 为什么大部分情况 SSR 比 CSR 快(SSR 减少的是框架开销,但是 monaco 这种组件根本无法放在 SSR 里)
- SSR 依赖后端数据的话,白屏时间短了,但是可能出现 SSR 以后性能仍然不及预期的情况,还能继续优化吗?(还是得看它在渲染的时候做什么了,有没有出现框架开销之类的)
- 工程上还有什么优化的方法?(静态资源上 CDN)
- 为什么上 CDN 会更快?(物理距离更近、高频次访问缓存命中率高)
- 怎么找到物理距离最近的 CDN 的?(跟网络相关,域名绑定了若干 CDN 服务器)
- 整套查询流程是怎样的?(说了 DNS 查询的全流程,他问 CDN 我说 DNS 有点糖了)
- 除了 CDN 以外还有什么优化的方法?(都说 DNS 了那咱掰扯两句 DNS 优化呗)
- DNS 怎么优化?(我没做过,但是高频资源可以尝试放 DNS 缓存里、资源集中在同一 URL 里减少 DNS 查询次数、想办法把资源缓存在客户端里)
- 还有什么方法?(还要我说啥啊,服务器机房离用户位置更近?)
- 也可以,还有啥?(还可以设专用 CDN??)
- 手撕,20 分钟让 AI 修 5 个 bug(修了其中 2 个,主要得看明白 AI 都干了些啥,以及整理代码和注释本身格式花了点时间)
- 手撕:15 分钟反转二叉树每一层的节点(没做过这种题,先做了个纯模拟,问有没有优化空间,把反转和建树的逻辑写一起了。还有优化空间吗?这我真没招了)
- Webpack 和 Vite 有什么区别
- 生产环境下又有什么区别(我大意了啊,这个没有看)
- 如何保存用户的偏好设置,使之离线也可以使用?(用 localStorage)
- 如果本地偏好和在线偏好冲突了怎么办?(再存时间戳,比较修改时间)
- 钟表是 7:15,时针分针夹角是多少?(我算是 11/6 pi,好像没算对?)
- 反问(实习生都会做有挑战性的任务,面试官做了很多的排版任务和比较复杂的图像关系,需要提升对技术细节的理解和深度)