原文链接: https://interview.poetries.top/days/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98.html

每日一题-每日一题

简版速记

这是一份 180 题的前端面试「每日一题」合集,覆盖 webpack、HTTP/网络、JS 原理、Promise/异步、React/Vue、设计模式、算法手写。下面按高频考点压缩成速记卡片,方便面试前快速过一遍;细节与完整代码见正文对应题号。

工程化 / webpack

  • 构建提速:babel-loader 缓存、IgnorePlugin(不引入)、noParse(引入不打包)、多进程(thread-loader/旧 happypack)、DllPlugin(已被持久缓存替代)、热更新(HMR 不丢状态,自动刷新会丢)。
  • 产出优化:mode:production 自动开 Tree Shaking + 压缩、splitChunks 分包、contenthash 长缓存、CDN、用 import() 做按需加载。
  • Tree Shaking 依赖 ES Module 静态结构(import/export),CommonJS 不支持;需配 sideEffects

网络 / HTTP

  • HTTP/1.1 长连接+管线化(队头阻塞);HTTP/2 多路复用+头部压缩+服务端推送;HTTP/3 改用 QUIC(基于 UDP)解决 TCP 队头阻塞。
  • HTTPS = HTTP + TLS:非对称协商出对称密钥,再用对称加密传输;中间人攻击靠 CA 证书链校验防范。
  • 跨域:CORS(简单请求 vs 预检 OPTIONS)、JSONP(仅 GET)、代理;token 放 header 防 CSRF,cookie 自动带、session 存服务端。
  • 三次握手建连、四次挥手断连;状态码 301 永久/302 临时/304 协商缓存命中/307/308 保持方法重定向。
  • 强缓存 Cache-Control/Expires,协商缓存 ETag/Last-Modified

JS 核心

  • 事件循环:同步栈 → 微任务(Promise.then/queueMicrotask/MutationObserver)清空 → 一个宏任务(setTimeout/IO),每个宏任务后再清微任务;Node 与浏览器在 timers/microtask 时机上有差异。
  • 闭包、原型链(__proto__prototypeObject.prototype→null)、this 五种绑定(默认/隐式/显式 call-apply-bind/new/箭头继承外层)。
  • ?? 仅在 null/undefined 时取默认,|| 对所有 falsy 生效。
  • parseInt(str, radix) 第二参是进制;["1","2","3"].map(parseInt)[1, NaN, NaN]
  • 0.1+0.2!==0.3:IEEE754 浮点误差,比较用 Math.abs(a-b)<Number.EPSILON

框架

  • Vue2 响应式靠 Object.defineProperty(无法监听新增属性/数组下标,需 Vue.set/重写数组方法);Vue3 改用 Proxy
  • React setState 在合成事件/生命周期中批量异步合并,在原生事件/setTimeout 中同步(React18 起默认全自动批处理)。
  • diff:React 同层比较 + key;Vue 双端比较 + key。
  • useEffect 闭包陷阱:依赖数组缺项导致拿到旧值,用函数式更新或补全依赖。

手写高频:深拷贝(递归+循环引用 WeakMap)、深比较、Promise/A+、防抖节流、柯里化、call/apply/bindnewinstanceofPromise.all、发布订阅 EventBus、LRU(Map)、数组扁平化、防 XSS/CSRF。

算法高频:两数之和(哈希)、二分查找、快排、反转链表、二叉树第 k 小(中序)、括号匹配(栈)、最长不重复子串(滑动窗口)、回文、数组转树。

目录

Last Updated:
Contributors: leeguooooo