面试问题我分为这么几大块:

1 基础 html、css、js

2 浏览器HTTP相关

3 框架/构建相关 (vue、react、node、webpack...)

4 手写代码 (常见算法、其他编程题)

5 性能优化

下面列举一些常见面试提问思路

CSS

  • 盒模型

  • flex:1 含义 → 适用场景

  • 响应式布局实现 → rem/em 区别、媒体查询 → 其他常见布局实现 → 居中

  • BFC原理 → 如何创建 → 应用场景

  • 移动端像素知识与viewport知识

  • sass/less特性、区别 → 怎么自己封装样式库 → css-loader/style-loader区别

JS

  • 作用域、原型链、闭包、继承、类型判断、V8 GC

  • 基础API、ES6/7/8新特性 → babel原理

  • 函数式编程、高阶函数、柯里化、递归、模块化

  • DOM操作、事件流、事件方法

PS: 异步单独拿出来列一下

异步

  • promise解决了什么问题、实现原理、使用场景

  • promise.all 概念、 怎么实现 → 用promise实现请求并发个数限制 → 希望即使前一个异步操作失败,也不要中断后面的异步操作,应该怎么做

  • 说说async/await、generator → co.js 实现 → 三者对比,什么情况一定要用promise

  • 说说JS异步编程 → JS事件循环、宏任务/微任务 → 说说react的setState → 说说node.js里的同步异步

Vue

  • vue2的数据响应式原理 → vue2的缺陷、业务代码里面怎么处理、$set原理、怎么重写数组方法的、vue3怎么实现的、proxy优缺点、怎么处理vue3不支持IE → vue3了解哪些API → vue3做了哪些优化

  • 生命周期 → 使用场景

  • 组件data为什么是一个函数 → 工厂函数 → 构造函数 → new一个对象发生了什么

  • vue组件通信 → vuex原理

  • 路由模式、实现原理 → 导航守卫 → 权限控制怎么做(页面和接口)→ 鉴权token

  • $nextTick 作用、实现原理 → 宏任务/微任务、 JS事件循环

  • key的作用 → diff算法思路、和react的区别

  • computed、watch 实现原理、区别、使用场景 → 说出三种watcher的区别

  • keep-alive 原理、使用场景

  • scoped 原理 → 如何改变第三方组件样式

  • 组件封装有哪些思考

Webpack

  • 构建流程、实现原理 → loader、plugin用到了哪些及其作用 → webpack5新特性 → 与vite的区别

  • tree-shaking 原理、做过哪些相关优化

  • 热更新原理

  • 打包速度和体积分别做过哪些优化

浏览器

  • 说说浏览器页面加载过程 → 浏览器缓存 → 服务端渲染 → 跨域问题 → axios/fetch区别、做过哪些二次封装 → HTTP方法、状态码、HTTP1/HTTP2/HTTP3/HTTPS区别

  • xss/csrf原理、如何防御

  • 做过哪些性能优化

像一些手写代码/算法题就不列举了,主要是提供一个大概的思路,可以按这个方向把自己的知识过一遍。