2021-10-13 09:14:21
腾讯WXG实习一面整体通过,已进入复试环节。以下是对面试流程、考察重点及后续建议的详细分析:
一、面试流程与考察重点算法题环节
题目类型:哈希表基础题、股票买卖时机动态规划题(第二题未完全解答)。
考察点:算法基础能力、编码熟练度、问题拆解思路。
建议:未完全解答不影响整体评价,但需加强LeetCode中等难度题目的练习,重点掌握动态规划、贪心等高频题型。
前端技术深度考察
虚拟滚动
定高与不定高实现方案对比(如占位符+绝对定位、Intersection Observer API)。
细节优化:回收DOM节点、节流滚动事件、预加载可视区域外元素。
LRU缓存
基础实现:哈希表+双向链表。
优化方向:固定大小缓存、惰性删除、使用WeakMap减少内存泄漏风险。
双Token机制
流程:Access Token(短期有效)+ Refresh Token(长期有效),客户端先使用Access Token,失效后用Refresh Token换取新Token。
验证:服务端校验Token签名、过期时间、颁发者等信息,JWT通过非对称加密(如RS256)确保不可篡改。
Cookie+Session
实现:服务端生成Session ID存入数据库,通过Set-Cookie字段(如HttpOnly、Secure、SameSite)返回客户端,后续请求携带Cookie完成身份验证。
协作:Session ID作为客户端与服务端的唯一标识,服务端通过查询数据库验证用户状态。
安全与性能优化
Vue XSS防护
原理:Vue模板编译阶段自动转义敏感字符(如<、>),虚拟DOM差异更新时避免直接插入HTML字符串。
扩展:v-html指令需谨慎使用,需对动态内容进行二次过滤。
Vue响应式系统
Vue2:Object.defineProperty()递归劫持数据属性,通过Dep+Watcher实现依赖收集与派发更新。
Vue3:Proxy代理整个对象,effect()函数跟踪依赖,支持深响应与浅响应(通过shallowRef/shallowReactive实现)。
Vite与Webpack对比
Vite优势:依赖预构建(esbuild转换非ESM模块为ESM)、原生ESM按需编译、开发服务器启动快。
esbuild缺点:插件生态较弱、对复杂场景(如CSS预处理)支持不足。
底层原理与扩展问题
JS单线程原因
历史设计:避免DOM渲染冲突,保证状态一致性。
现代解决方案:Web Worker处理计算密集型任务,通过postMessage通信。
Proxy优势
除拦截属性访问外,还支持拦截apply、construct等操作,可完整覆盖对象行为。
优势
对前端核心知识(响应式原理、安全机制、工程化工具)有系统性理解,能结合代码实现细节展开回答。
项目经验中使用了原生JS/TS开发,体现工程能力与底层认知。
面试官主动提供优化建议(如LRU缓存、Token机制),说明对技术潜力认可。
不足
算法题未完全解答,需加强刷题量与复杂度。
部分问题回答依赖“八股文”,缺乏深度思考(如JS单线程原因仅回答竞态问题,未提及DOM渲染一致性)。
对新兴工具(如esbuild)的使用经验不足,需补充实践案例。
复试准备方向
系统设计:可能考察前端架构能力(如微前端、状态管理方案)。
代码实现:准备手写Promise、防抖节流、深拷贝等高频题目。
项目复盘:针对面试中提到的优化点(如LRU缓存、虚拟滚动)完善技术方案,准备量化指标(如性能提升比例)。
学习资源推荐
算法:LeetCode分类刷题(优先数组、链表、动态规划),结合《剑指Offer》理解思路。
前端进阶:
响应式原理:阅读Vue3源码(@vue/reactivity包)。
安全:OWASP XSS防护指南、CSP策略配置。
工程化:Vite官方文档、esbuild GitHub仓库。
面试技巧提升
STAR法则:描述项目时按“背景-任务-行动-结果”展开,突出个人贡献。
追问澄清:遇到抽象问题(如“effect()是怎么做到的”)可请求面试官举例说明,避免答非所问。
心态调整:面试官主动推进流程(如20分钟内更新状态)是积极信号,保持自信应对后续环节。
总结:一面通过表明基础能力达标,复试需重点展示技术深度与工程思维。建议结合面试反馈针对性补漏,同时保持对新技术趋势的关注(如Server Components、WASM)。