# 阿里、美团
# 基础知识
# CSS
- 垂直水平居中
 - 双栏布局
 - 随窗口变化的正方形
 - 网格布局
 
# JS
- JS 基本类型
 - setTimeout、Promise、async/await 三者之间异步解决方案的区别
 - 宏任务微任务,通常会给出一段代码,要你说出输出结果并解释原因
 - 解释 JS 的单线程模型,以及为什么要这样设计?setTimeout 为什么无法做到精确
 - 手写 Promise
 - 原型链知识考察,通常会给出一段代码让你输出结果并解释
 - 说说 ES6 以后新增的语法
 - 解释 JS 的闭包?解释 this 指针指向问题以及 this 绑定函数
 - JS 继承的几种方式和优缺点
 - 实现节流和防抖
 - fetch 是否可以共享 cookie?两个 then 分别对应什么
 - 手写代码实现红绿灯效果
 - js 是如何操作 cookie
 
# DOM API
问的比较少
- 如何翻转 DOM?
 - 冒泡和捕获机制,实际应用有哪些
 
# 前端框架底层原理
我们以 React 为例子:
- setState 内部实现
 - 什么是虚拟 DOM,引入虚拟 DOM 的目的,虚拟 DOM 一定能解决性能问题吗
 - React Hooks 有哪些了解
 - React Redux 底层原理?如何完成异步请求?介绍自己常用哪些中间件?以组合函数的方式手写实现中间件的级联功能。
 - React 的 diff 算法
 - React 的 fiber 算法
 - React PureComponent 和 Component 区别
 - React 的生命周期,新版旧版区别
 - React 单项数据流如何理解
 - 如何设计组件
 - React memo
 - React 无尽列表如何实现的
 
# 性能优化
- 浏览器的渲染原理
 - 浏览器输入一个 url 的过程,以及过程用应用了哪些缓存,如何优化
 - script 标签和 link 标签的先后顺序对页面加载的影响
 - async 和 defer 的区别
 
# 计算机网络
- 三次握手四次挥手
 - 跨域以及解决方案
 - CORS 的细节,哪些是简单请求,哪些是复杂请求
 - HTTPS?HTTP2?
 - HTTP 报文的格式
 
# 算法
- 手写冒泡排序
 - 给定两组数,分别以链表方式存储,求和
 - 数组去重
 - 微信红包是如何实现的
 - 给定一组数,求和函数时代延迟的网络请求,如何在最快的时间内计算出这组数据的和
 
# 前端工程化
- webpack 如何拆分大文件
 - webpack 的打包过程
 - webpack 的基本配置
 
# 头条、蚂蚁金服
- 合并 k 个有序链表
 - 求数独
 - 二叉树的层序遍历
 - 二叉树的锯齿形层序遍历
 - 字符串翻转
 - 重排链表
 - 二叉树插入节点
 - 二叉搜索树节点删除
 - 链表翻转
 - 接雨水
 - 旋转有序数组的峰值数字
 - 有序矩阵的第 k 小数字
 - 编辑距离
 - 二分查找
 - 找出小于并且最接近目标数字的数
 - 寻找旋转排序数组中的最小值
 - 不同路径
 - 两两交换链表中的节点
 - 山脉数组的峰顶索引
 - 盛最多水的容器