1. 面试背景与准备过程2024年3月27日我参加了腾讯第27届暑期实习生的首轮技术面试。作为计算机专业大三学生这次面试是我第一次接触国内顶级互联网企业的技术考核。面试岗位是Web前端开发方向面试形式为视频面试持续时间约60分钟。在面试前两周我系统性地做了以下准备重新梳理了HTML5、CSS3和JavaScript核心知识点重点复习了React和Vue框架的底层原理准备了10个常见的算法题模板在LeetCode上刷了约30道中等难度题目整理了过往项目中的技术难点和解决方案2. 面试问题全记录2.1 基础知识考察环节面试官首先考察了HTML和CSS的基础知识问题1请解释HTML5语义化标签的意义并举出至少5个例子我的回答语义化标签使文档结构更清晰有利于SEO和无障碍访问。例如article表示独立内容块section定义文档章节header页眉footer页脚nav导航链接区域...追问section和div在语义上有何本质区别我补充道section需要包含标题(h1-h6)且表示文档大纲中的独立节点而div仅用于样式分组。问题2CSS盒模型有几种类型如何切换我回答标准盒模型(content-box)和IE盒模型(border-box)通过box-sizing属性切换。并举例说明两者在宽度计算上的差异。2.2 JavaScript深度考察随后进入JavaScript核心知识环节问题3请解释事件循环机制我从调用栈、任务队列、微任务队列的角度进行说明特别强调了Promise和setTimeout的执行顺序差异。代码题console.log(1); setTimeout(() console.log(2), 0); Promise.resolve().then(() console.log(3)); console.log(4); // 要求说出输出顺序及原因我正确分析出1-4-3-2的执行顺序并解释了微任务优先于宏任务的机制。问题4实现一个深拷贝函数我给出了递归方案并处理了循环引用和特殊对象(Date/RegExp等)的情况function deepClone(obj, map new WeakMap()) { if (obj null || typeof obj ! object) return obj if (map.has(obj)) return map.get(obj) let clone Array.isArray(obj) ? [] : {} map.set(obj, clone) for (let key in obj) { if (obj.hasOwnProperty(key)) { clone[key] deepClone(obj[key], map) } } return clone }2.3 框架相关问题问题5React的虚拟DOM diff算法原理我从树比对、组件层级、key的作用三个方面阐述特别说明了同级比较和节点复用的策略。问题6Vue3的Composition API与Options API对比我提到逻辑复用、类型推导、代码组织等优势并举例说明setup函数的使用场景。2.4 算法与数据结构白板题实现LRU缓存机制我使用Map双向链表实现时间复杂度O(1)class LRUCache { constructor(capacity) { this.capacity capacity this.map new Map() } get(key) { if (!this.map.has(key)) return -1 const value this.map.get(key) this.map.delete(key) this.map.set(key, value) return value } put(key, value) { if (this.map.has(key)) this.map.delete(key) this.map.set(key, value) if (this.map.size this.capacity) { this.map.delete(this.map.keys().next().value) } } }3. 项目经验探讨面试官对我的校园论坛项目进行了深度追问问题7如何优化首屏加载速度我从多个维度进行了回答代码分割路由懒加载图片使用WebP格式CDN加速开启Gzip压缩关键CSS内联服务端渲染(SSR)方案问题8遇到最棘手的技术问题是什么我描述了富文本编辑器内容XSS防护的方案使用DOMPurify进行内容过滤CSP安全策略配置服务端二次校验关键操作增加二次确认4. 面试反思与改进4.1 表现良好的部分基础概念掌握扎实能准确说出API细节算法题完成度较高代码风格规范项目描述有数据支撑如性能提升百分比遇到不确定的问题会先确认题意4.2 需要改进的方面框架原理回答不够深入如没提到Fiber架构系统设计题缺乏实战经验对TypeScript的理解停留在基础用法网络协议知识薄弱HTTP2/QUIC等4.3 后续学习计划根据面试反馈我制定了以下提升方案精读React源码解析重点Fiber和Hooks每周完成1个系统设计案例学习在项目中全面应用TypeScript补充计算机网络系统知识参与开源项目积累协作经验5. 给后来者的建议基于这次面试经历我想分享几点心得基础优先原则大厂面试非常重视语言特性、数据结构和网络基础项目深挖准备每个项目要准备3个技术难点解决方案算法训练方法按专题分类练习DP、回溯、链表等表达技巧使用STAR法则描述项目经历模拟面试找同学进行技术模拟适应压力环境这次面试让我认识到理论知识与工程实践的差距后续会通过实际项目来巩固所学。虽然有些问题回答不够完美但整体展现了学习能力和技术热情最终顺利进入了二面环节。