# 面试

# 前端基础

# 前端知识

  1. JS 运行原理 by Philip Roberts (opens new window)
  2. JS 继承方式
  3. JS 异步解决方案的发展历程以及优缺点
  4. JS 作用域相关问题
  5. 浏览器输入URL之后发生的故事
  6. ES5/ES6的继承除了写法意外有什么区别 (opens new window)
  7. 介绍回流、重绘 以及 如何优化。标准判断:CSS Triggers (opens new window)
  8. Http发展,Http2的多路复用
  9. TCP 三次握手和四次挥手的理解,详细
  10. TCP 稳定连接后,服务端无预警掉线重启,描述客户端和服务端的状态变换 (opens new window)
  11. React 中 setState 什么时候是同步,什么时候是异步? (opens new window)
  12. npm 模块安装机制,yarn呢?
  13. 介绍 观察者模式 和 订阅发布模式 的区别,分别适合什么场景
  14. 介绍 Redux 设计思想
  15. 介绍 浏览器 和 Node 事件循环的区别
  16. 介绍 模块化发展历程:IIFE、AMD、CMD、CommonJS、UMD、webpack、ES Module、<script type="modlue">
  17. cookie 和 token 都存放在 header 中,为什么不会劫持 token? (opens new window)
  18. 浏览器缓存读取规则 (opens new window)
  19. Virtual DOM 真的比操作原生 DOM 快吗?
  20. a == 1 && a == 2 && a == 3,如何设置 a,让判断为 true
  21. 介绍 BFC 及其应用
  22. div 水平垂直居中
  23. 分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用场景

# 手撕代码

  1. 模拟实现 new
  2. 模拟实现 apply
  3. 模拟实现 call
  4. 模拟实现 bind
  5. 模拟实现 instanceof
  6. 模拟实现 requestIdleCallback
  7. 模拟实现 promise (opens new window)
  8. 模拟实现 防抖 debounce 和节流 throttle
  9. 模拟实现 深拷贝、浅拷贝)
  10. 模拟实现 flatten [递归|迭代]
  11. 模拟实现 sleep,从 Promise、Generator、Async/Await
  12. 实现 (5).add(3).minus(2) 功能

# 算法知识

  1. 广度优先遍历、深度优先遍历、先序遍历、中序遍历、后序遍历
  2. 排序算法,时间复杂度,稳定性,实现 冒泡排序及优化,快速排序

# 常考题目

  1. 合并两个有序数组为一个有序数组
  2. for 循环下打印 0-9 的所有写法

# 项目相关

  1. 大文件上传

# 前端框架

React

  1. Mixin => HOC => Hooks 发展
  2. React 生命周期
  3. 虚拟 DOM 和 DOM 节点
  4. Diff 算法
  5. Fiber 节点和 Fiber 树
  6. React 16 和 React 17 区别
  7. React 调度、调和过程
  8. this.setState 同步异步问题,源码解析
  9. React 源码解读

React-Native

  1. React-Native 跨端原理
  2. JS 与原生通信流程
  3. 如何编写一个 原生方法给 JS 使用
  4. 如何实现热更新
  5. metro 分包机制
  6. 原生与 RN 页面跳转方案
  7. 动画和手势操作的演示
  8. 双端的脚本打包
  9. fastlane 一键发布

Vue

  1. 与 React 的区别
  2. MVVM 框架原理

# 设计模式

# 编程题

编程题

# HTTP/HTML/浏览器

  1. 说一下 HTTP 和 HTTPS
  2. TCP 三次握手,概括介绍;详细介绍;四次挥手呢
  3. TCP 和 UDP 的区别
  4. WebSocket 的实现和应用
  5. HTTP 请求的方式,HEAD 方式
  6. 一个图片 URL 访问后直接下载怎样实现
  7. 说一下 web Quality(无障碍)
  8. 几个很实用的 BOM 属性对象方法
  9. 说一下 HTML5 Drag API
  10. 说一下 HTTP2.0,HTTP 发展史
  11. 补充 400 和 401、403 状态码,状态码介绍
  12. fetch 发送 2 次请求的原因
  13. Cookie、sessionStorage、localStorage 区别
  14. 说一下 web worker
  15. 对 HTML 语义化标签的理解
  16. iframe 是什么?有什么缺点
  17. Doctype 作用?严格模式与混杂模式如何区分?有何意义?
  18. Cookie 如何防范 XSS 攻击
  19. 强缓存、协商缓存
  20. 介绍 RESTFUL
  21. 讲一讲 viewport 和移动端布局
  22. click 在 ios 上有 300ms 延迟,原因和解决方法
  23. addEventListener 介绍
  24. 画一个三角形 CSS
  25. HTML5 新增元素
  26. 输入一个 URL,完整流程
  27. 常见的 HTTP 头部
  28. cache-control 的值有哪些
  29. 完整的页面渲染过程
  30. CSRF 和 XSS 的网络攻击及防范

# CSS

  1. CSS 盒模型介绍
  2. 画一条 0.5px 的线
  3. link 标签 和 import 标签的区别
  4. transition 和 animation 的区别
  5. flex 布局介绍
  6. BFC,产生原因,作用
  7. 垂直居中的几种方式
  8. JS 动画 和 CSS3 动画的差异性
  9. 说一下 块元素和行元素
  10. 多行元素的文本省略号
  11. 双边距重叠问题
  12. position 属性比较
  13. 浮动清除的方法
  14. CSS3 新特性
  15. CSS 选择器有哪些,优先级
  16. CSS3 对溢出的处理
  17. float 的元素,display 是什么
  18. 三栏布局的实现方式
  19. calc 属性
  20. 重排和重绘
  21. overflow 原理
  22. box-sizing 的语法和基本用处
  23. display: none 和 visibility: hidden
  24. CSS 预处理器

# JavaScript

  1. get 请求传参长度的误区
  2. get、post 在缓存方面的区别
  3. 闭包
  4. 类的创建和继承,继承方法
  5. 解决异步毁掉地狱
  6. 事件流
  7. 如何设置事件先冒泡后捕获
  8. 事件委托
  9. 图片的懒加载和预加载
  10. mouseover 和 mouseenter 的区别
  11. new 操作符原理
  12. 改变函数内部 this 指针的指向函数
  13. JS 位置判断,如何监听元素是否显示在可视区域。例如:clientHeight、scrollHeight、offsetHeight,scrollTop、offsetTop、clientTop
  14. JS 拖拽功能的实现
  15. 异步加载 JS
  16. 节流和防抖
  17. 垃圾回收机制
  18. 前端模块化
  19. CommonJS、AMD、CMD
  20. 深拷贝 (opens new window)、浅拷贝
  21. 手写 promise
  22. 监听对象属性的改变
  23. setTimeout、setInterval、requestAnimationFrame 的区别
  24. 实现一个两列等高布局
  25. bind、call、apply 手写
  26. JS 控制一次加载一张图片,完成后再加载下一张
  27. 代码的执行顺序
  28. 如何实现 sleep 效果
  29. Function.__proto__ / getPrototypeOf 是什么
  30. node 的 Events 模块
  31. 箭头函数中 this 指向问题,箭头函数特性
  32. JS 类型判断,typeof、instanceof
  33. 数组常用方法
  34. 数组去重
  35. 判断一个数组
  36. 跨域
  37. 暂时性死区
  38. 事件模型
  39. async/await
  40. promise + Generator + async
  41. JS 加载阻塞,解决方法
  42. 实现一个轮播效果
  43. 事件循环
  44. arguments
  45. 箭头函数 和 function 的区别

# 前端进阶

# 工程化

  1. babel 原理
  2. 如何实现一个 babel 插件
  3. git 工作流描述
  4. rebase 和 merge 的区别
  5. git reset、git revert、git checkout 描述
  6. webpack 和 gulp 的区别,模块化与流的区别

# Vue

  1. 对 Vue 的理解
  2. 优缺点
  3. Vue 与 React 的区别
  4. 虚拟 DOM
  5. vue 生命周期
  6. vue 如何监听键盘事件
  7. watch 怎么深度监听对象变化
  8. 删除数组使用 delete 和 Vue.delete 有什么区别
  9. watch 和计算属性 区别
  10. vue 双向绑定原理
  11. v-model 是什么,如何使用
  12. 3.0 为什么使用 Proxy API 替代 defineProperty API
  13. 3.0 优化了什么
  14. 3.0 新特性,Composition API
  15. 权限管理如何做
  16. created 和 mounted 两个生命周期中请求数据有什么区别
  17. 对 proxy 的理解

# React

  1. React 生命周期
  2. 如何划分业务组件、技术组件
  3. 性能优化
  4. 虚拟 DOM 为什么提高性能
  5. diff 算法描述
  6. flux 思想
  7. redux 中间件,saga、thunk
  8. redux 缺点
  9. React 解决了什么问题,为什么选用
  10. React 协议
  11. shouldComponentUpdate
  12. 类组件和函数组件区别
  13. 状态和属性 区别
  14. 高阶组件
  15. React 中使用箭头函数优点
  16. 为什么建议传给 setState 的参数是一个 callback 而不是一个对象
  17. 除了在构造函数中绑定 this,还有其他方式吗
  18. 如何阻止组件渲染
  19. 列表 key 如何设置。目的为何
  20. 什么是 JSX