腾讯企业微信前端实习一面:XSS/CSRF、Vite 构建与 React Fiber
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍。
- 展开介绍实习项目:整体功能链路是什么,你负责哪一部分?
- XSS 是什么,如何防护?
- CSRF 是什么,如何防护?
- 打包工具 Vite 为什么区分生产模式和开发模式?开发模式为什么这么快,而生产模式不能?
- React Fiber 是什么,解决什么问题?
- AI 编码用得多吗?比例大概多少?
- 有自己做过 AI 项目吗?中间遇到什么难点?
- 算法题:括号匹配变种——三种括号设置了优先级,要保证优先级顺序也正确。
- 反问。
《参考解析》
XSS:按存储位置分三类——存储型(恶意脚本落库,所有访问者中招,最危险)、反射型(脚本在 URL 参数里,服务端原样回显)、DOM 型(前端把不可信数据写进 innerHTML、document.write、eval)。防护是分层做:输出侧按上下文转义(HTML、属性、JS、URL 各一套编码),能用 textContent 就不用 innerHTML;输入侧做白名单校验而不是黑名单过滤;再加 CSP(限制内联脚本与外部域)、Cookie 加 HttpOnly 让脚本读不到会话、富文本用成熟的 sanitizer 并在服务端二次清洗。答的时候点明「转义发生在输出时、跟着上下文走」,比只说「过滤特殊字符」到位。
CSRF:本质是浏览器会自动带上目标站的 Cookie,攻击者诱导用户在自己站上发起一个跨站请求。防护三件套:一是 SameSite=Lax/Strict 限制跨站携带 Cookie;二是 CSRF Token(服务端下发、表单或请求头带回、服务端校验),对写操作强制;三是校验 Origin / Referer。补充:关键操作要求二次认证、避免用 GET 做状态变更。和 XSS 的区别要能一句话说清:XSS 是「在受害者浏览器里执行攻击者的脚本」,CSRF 是「借受害者的身份发请求,攻击者读不到响应」。现代前后端分离项目里,如果鉴权用 Authorization 头而不是 Cookie,天然免疫大部分 CSRF,这点可以主动说。
Vite 开发 vs 生产:开发模式利用浏览器原生 ESM,按需把源码转译后直接给浏览器,冷启动几乎不打包,所以快;依赖用 esbuild 预构建(CommonJS 转 ESM、合并请求数)。生产模式不能这么干,因为每个模块一个请求在真实网络中会产生成百上千次往返、HTTP/1.1 下有并发限制、也没有 tree-shaking 和压缩——所以要用 Rollup 打包成少量 chunk,做 tree-shaking、代码分割、压缩、资源 hash 与 CSS 提取。追问「为什么生产不用 esbuild 预构建那套」时答:生产要在意体积、缓存粒度和兼容性(低版本浏览器不支持 ESM),而且打包能跨模块做静态分析优化。
React Fiber:旧版 Stack Reconciler 递归渲染不可中断,一棵大树 diff 会长时间占住主线程导致掉帧。Fiber 把渲染拆成可中断的工作单元(每个组件对应一个 fiber 节点,链表结构带 return / child / sibling),分 render 阶段(可中断、可让出)与 commit 阶段(同步、不可中断),配合调度器按优先级(expirationTime / lane 模型)决定先做哪个更新。由此才有并发特性:startTransition、useDeferredValue、Suspense。答题时把「可中断 + 优先级 + 两阶段」三点讲清即可。
带优先级的括号匹配:普通括号匹配是栈,左括号入栈、右括号与栈顶配对。加了优先级之后,规则通常是「内层括号的优先级必须不低于外层」,或者「关闭时必须先关掉所有优先级更高的未闭合括号」。做法是在栈里存 (类型, 优先级):遇到右括号时,先检查栈顶类型是否匹配,再检查当前括号优先级与栈顶外层的关系——若当前优先级低于栈中某个更高优先级的未闭合项,说明顺序违规。如果题意是「同层必须先匹配高优先级」,那么遇到右括号时把栈顶所有优先级更高但未闭合的项视为错误。面试时先花 30 秒跟面试官确认优先级的判定规则(是「内层不得低于外层」还是「同级按优先级顺序关闭」),再动手写,比闷头写完被指出理解错更划算。
其他:面试官对实习项目只要求整体介绍,说明这场更看基础与算法;「AI 编码占比」这类问题答真实比例 + 一句自己的使用边界(生成后必审、关键逻辑自己写)即可。