百度内搜-前端实习一面-20260903
最饱的一集:八股盛宴,1.5h 高强度拷打,没吃饱的可以来吃。
📅 时间:2026.09.03
🏢 公司:百度
💼 岗位:内部搜索 APP 实习|前端
⏱️ 流程:前端基础 → React → TypeScript → 工程化 → 项目/实习 → 手撕
整体感觉问得比较广,前端基础占比很高,JS、React、TS、工程化基本都覆盖到了,而且不少问题会在回答之后继续往下追问。
一、JavaScript
这一部分问题非常多,主要考察 JS + 浏览器基础。
闭包是什么?应用场景有哪些?
Promise 相关问题
箭头函数和普通函数有什么区别?
深拷贝和浅拷贝有什么区别?
跨域有哪些解决方案?
 CORS
JSONP
代理
除了这些还有没有其他方案?
不同 Web 项目 / 页面之间如何通信?
回答了 postMessage
继续追问:还有没有其他方式?
浏览器的前进/后退缓存(bfcache)
浏览器有哪些数据存储方式?
Cookie
LocalStorage
SessionStorage
IndexedDB
以及它们之间的区别
事件委托是什么?
事件委托有哪些优点、缺点?
哪些场景不适合使用事件委托?
DOM 事件的捕获、目标、冒泡机制
如何阻止事件冒泡?
this 指向的几种情况
箭头函数的 this 有什么特殊之处?
二、React
React 问得也比较深入。
React 中状态管理相关的 Hooks
useState 的状态更新方式
替换式更新
函数式更新
批处理
状态更新过程中有没有遇到过异常情况?如何处理?
👉 这里有一个我这次没答出来,但面完之后觉得很有收获的问题:
如果一次批更新中同时存在函数式更新和替换式更新,最终 state 会是什么?
例如:
setNumber(n => n + 1);
setNumber(n => n + 1);
setNumber(5);
setNumber(n => n + 1);
需要真正理解 React 的更新队列,而不能只记一句「setState 是异步的 / React 会批处理」。
这个算是我这次面试最大的一个查漏补缺点。
useEffect 三种情况的区别:
不传依赖数组
[]
[dep]
有没有自己封装过 Hooks?
useRequest
useDebounce
React Diff 算法的过程
Diff 中 key 的作用是什么?
Fiber 的数据结构是什么?
React 16 为什么要引入 Fiber?
Fiber 解决了之前 React 的什么问题?
React Diff 和 Vue 双端 Diff 有什么区别?
Vue 双端 Diff 的具体过程
useEffect 和 useLayoutEffect 有什么区别?
React 18 有哪些新特性?
React 18 有没有增加新的 API / Hooks?
三、TypeScript
TS 问得相对常规:
interface 和 type 有什么区别?
怎么理解泛型?泛型有什么作用?
联合类型和交叉类型有什么区别?
any、unknown、never 有什么区别?
四、前端工程化 / 构建工具
Webpack 和 Vite 的区别
Vite 为什么快?
Vite 插件的底层原理是什么?
👉 这个问题没答出来,准备回去补一下 Vite Plugin / Rollup Plugin / Plugin Hooks 这一套机制。
除了 Webpack 和 Vite,还使用/了解过哪些构建工具?
我回答了一些自己了解的工具,面试官随后提到:
他们部门目前在使用 Bun。
这个也准备之后重点了解一下。
五、项目 & 实习经历
后面针对简历上的项目和实习经历进行了一些追问。
这一部分整体就是围绕:
做了什么 → 为什么这么做 → 遇到了什么问题 → 怎么解决 → 有没有更好的方案
六、手撕 / 算法
最后两道题:
第一题:Promise / Event Loop 输出题
涉及 Promise 执行顺序、微任务、宏任务等。
这道有一些地方判断错了,Event Loop 还得继续补。
第二题:最长无重复子串