前端八股精选
来自:小麦
网络
- 对比 HTTP1、HTTP2 和 HTTP3 的差异
- 对比 HTTP 和 HTTPS 的差异
- 对比 WebSocket 和 SSE 的差异
- 对比长连接和短连接
- 缓存问题:强缓存、协商缓存、Cache-Control、ETag 的区别?
- 跨域问题:同源策略、跨域概念、CORS 头、跨域场景和对应解法
- 安全问题:XSS vs CSRF vs Clickjacking
- 说几个常见的请求头和响应头?
- 状态码 301、302、304、307 的区别?
- 什么是预检请求(OPTIONS)?何时出现?
- Cookie 各属性的作用?
- 什么是 JWT 以及它的作用?
- 如何取消一个请求?
浏览器 / HTML / DOM
- 浏览器的渲染流程?
- 浏览器的多进程架构包含什么?
- 浏览器本地存储方案有哪些?各方案有什么区别?
- 对比重排、重绘/回流的区别?如何减少重绘/回流?
- <script> 中 defer、async 属性的区别?
- <link> 中 dns-prefetch、preconnect、preload、prefetch 的区别?
- <meta> 的常见作用?
- 如何与 <iframe> 中的页面通信?
- 对比 window.onload 和 DOMContentLoaded 两个事件的区别?
- window.requestIdleCallback 的作用?
- window.requestAnimationFrame 的作用?
- 如何自定义事件?
- 事件机制,捕获、冒泡、委托、passive 参数是什么?
- V8 垃圾回收(GC)机制?新生代、老生代、Minor GC 和 Major GC 的区别?
- 什么是 CSP?有什么用?
- 如何监控和上报 JS 错误?
CSS
- 解释盒模型
- 选择器的优先级
- display 属性值和作用?
- flexbox 弹性布局怎么写?
- 水平垂直居中的 N 种写法?
- 双栏、三栏布局的写法?
- 响应式布局怎么写?
- 动画和过渡分别怎么写?
- transform、transition、translate 的区别?
- 如何触发硬件加速?
- px、em、rem、vw/vh 的区别
- 伪元素和伪类的区别?
- line-height 的作用?
- 颜色主题如何实现?
- 说几个 CSS-in-JS 方案?
JavaScript
- 列举原始类型和引用类型?
- 怎么判断是数组?
- 什么是事件循环?
- Node.js 和浏览器事件循环的区别?
- 对比 call、apply 和 bind
- 隐式类型转换的几种场景?
- 宏任务和微任务的区别?
- 怎么实现深、浅拷贝?
- 同步和异步的区别?
- Promise 的三种状态?
- setTimeout、setImmediate、Promise.resolve、process.nextTick 的时序问题?
- Promise.all、Promise.race、Promise.allSettled、Promise.any 的差异?
- Promise 如何实现并发?
- async/await 的用法和异常处理?
- 解释迭代器和生成器?
- 如何控制并发?
Vue
- 生命周期?
- 对比 created 和 mounted
- 对比 Proxy 和 Object.defineProperty
- 对比 Composition API 和 Options API
- 对比 Computed 和 Watch
- 对比 v-if、v-show、v-html、v-model
- $nextTick 的原理?
- keep-alive 的作用?
- 组件间的通信方式有哪些?
- hash 路由和 history 路由的区别?
- router 和 location 跳转的区别?
React
- 什么是虚拟 DOM?它的好处和坏处?
- 对比受控组件和非受控组件?
- key 属性的作用是什么?
- React 事件和原生事件的差异?
- useState 的 setter 是同步还是异步的?为什么?
- 对比 useMemo 和 useCallback
- 简述 React 组件的渲染流程?
- 如何优化 React 组件的渲染性能?
- 列举 React 中跨组件通信的方法?
- 如何实现双向数据流?
- 对比 SSR 和 CSR 的优劣?
优化
- 首屏白屏优化方法?
- 图片加载优化方法?
- 性能指标有哪些?区别是什么?
- 如何排查页面卡顿问题?
- 列举常见的性能分析工具。
- 性能分析中的火焰图怎么看?
- 长列表虚拟滚动实现原理?
- 模块按需加载怎么做?
- SEO 优化方法?
工程化
- CJS 和 ESM 的差异?
- 什么是 Tree-Shaking?
- Vite 的打包策略?相比 Webpack 的改进?
- 模块热更新原理?
- 什么是 CI/CD?
- 解释语义化版本?
- 对比 git merge 和 git rebase
- 对比 git reset、git revert 和 git checkout
- 对比 npm、yarn 和 pnpm 的特点
- 列举 npm 常用命令
- lock 文件的作用?
- 如何优化打包性能?
- 什么是 AST?有什么应用?