# 目录

## HTML & CSS 篇

* CSS 三列布局的实现方案
* 如何用 Flex 画出一个直径 100px 的圆，并放在屏幕中间
* CSS 如何实现垂直居中
* CSS 的怪异盒模型
* CSS3 新增的特性与用法。其好处是什么？
* 什么是 BFC
* CSS 的盒子模型 （W3C 和 IE）
* 怎么让背景图留出 padding 的空档？\[未解决]
* transition 的属性值和应用
* rem 和 em 的区别
* CSS 中有哪些长度单位
* 如何实现一个矩形的椭圆边角
* 移动端布局方案
* canvas 切图的原理
* 常见的 CSS Selector
* display: none 和 visibility: hidden 的区别
* 解释一下 reflow （回流）与 repaint（重绘）
* HTML5 新增了哪些元素？
* 移动端适配的问题 \[未解决]
* 一个 Input 一个 Button，Button 里的文字长度不确定，怎么在一行内实现两个元素的自适应？（两栏自适应布局）
* 常见的 CSS 布局方案 \[未解决]
* 关于 CSS 边距折叠的问题 \[未解决]
* 浮动元素会产生哪些影响？如何清除浮动？\[未解决]
* 如何在多行文字的末尾添加省略号？\[未解决]

## JavaScript 篇

* JS 的基本类型有哪些，引用类型有哪些，二者有什么区别
* 哪些类型是存在于栈上的，哪些是存在于堆上的。
* null 和 undefined 的区别
* JS 的继承有哪几种，分别有什么特点。
* 什么是原型链？原型与原型链的区别？
* ES6 的继承和 ES5 的继承有什么区别
* 原生 Ajax 的实现步骤
* 什么是闭包？什么时候构成闭包？
* 如何禁止浏览器的默认事件？什么是事件冒泡？怎样防止事件冒泡？（CSS 也有一种方法）
* readyState 的值分别代表什么状态。当 readyState === 3 的时候拔掉网线会怎么样？
* 闭包的缺陷
* 编写一个简单的递归函数
* 说出 Event 对象的 3 - 5 个属性或方法
* 如何改变函数的 this 的指向？call, apply, bind 的区别？
* JS 如何实现数组的浅拷贝和深拷贝？
* 如何将数组转换为字符串？
* 如何将字符串转换为整数？
* parseInt 的第二个参数代表什么
* 完整的 map, reduce, filter 都包含哪些参数？
* 简述一下 prototype
* 事件冒泡与 Ajax 的兼容性问题 x
* 给定一个 DOM 元素，获取它相对于视图窗口的坐标
* offsetHeight， scrollHeight, clientHeight 分别代表什么
* JavaScript 严格模式
* 如何实现图片滚动懒加载
* resize 和 scroll 性能优化
* 页面加载的性能优化问题
* throttle 和 debounce 的关系与区别
* 如何对页面进行埋点？ \[未解决]
* 如何检测 DOM 元素尺寸变化？\[未解决]
* 两个冷门的 JavaScript 问题
* Array 能被直接继承吗？如果不能，为什么？该怎么实现继承？\[未解决]
* Array 的 Splice 可不可以添加元素？
* 常用的正则校验与匹配表达式。\[未解决]
* 如何实现一个轮播组件？\[未解决]
* 在一个 `<a>` 标签中有一个 `<span>` 标签，点击 `<span>` 触发了点击事件，`target` 是谁？
* 怎么给 1000 个 分别添加点击事件？（考虑性能）\[未解决]
* 怎么实现一个异步获取搜索结果的搜索框？如果用户频繁修改关键词，如何只让最后一次输入的结果生效？\[未解决]

## 前端架构篇

* Vue 1 和 Vue 2 的区别
* 前后端分离的优点和缺点
* 前端工程化的意义
* 什么是 MVC，什么是 MVP，什么是 MVVM
* Vuex 的工作原理
* 项目如何实现模块化
* AMD CMD UMD CommonJS ES6 对比

## Web & Bowser 篇

* https 有几次握手？
* https 的原理
* http 有几次握手？
* TLS 的中文名？它属于网络结构的哪一层？
* SSL 与 TLS 的关系是什么？
* SSL/TLS 的原理是什么？
* SSL 3.0 和 TSL 1.0 的关系
* 负载均衡的方法。
* DNS 进行负载均衡的原理
* DNS 是基于 TCP 的还是 UDP 的。
* Nginx 负载均衡的原理
* 正向代理和反向代理的区别 
* 浏览器是如何加载页面的？
* Script 脚本阻塞有什么解决方法
* defer 和 async 有什么区别
* Socket.io 解决了什么问题，什么情况下用得到。
* 计算机网络的五层结构与七层结构
* TCP 在哪一层
* IP 在哪一层
* HTTP 在哪一层
* 多线程和多进程的区别
* HTTP 的状态与状态码有哪些
* 常见的 HTTP Header
* CDN 的用法
* XSS 与 CSRF 的防范
* 输入一个 URL 后发生了什么
* 如何实现 Web 缓存机制
* 服务器端更新脚本，如何保证客户端不受缓存机制影响，实时更新脚本？
* HTTP 有几种请求方法，OPTIONS 请求方法的作用是什么？
* HTTP 有哪些与缓存有关的状态码？
* GET 和 POST 的区别
* WebSocket 的实现机制和工作原理
* 跨域是什么？前端如何解决跨域？
* Cookie，Local Storage，Session Storage 的区别是什么？\[未解决]

## 算法、数据结构与设计模式篇

* [x] 常见的排序算法与其时间复杂度
* [ ] 常见的查找算法与其时间复杂度
* [ ] 深度优先遍历与广度优先遍历
* [x] 什么是完全二叉树？
* [x] 堆排序的原理
* [ ] 动态规划的原理与实现
* [x] fibonacci 数列的实现方法
* [x] 找出 n 个数中第 k 大的数
* [x] 从 100 万个数中找出最大的 100 个数
* [x] 两个房间，分别有三个开关和三个灯，每个房间只能进去一次，如何判断出开关对应的灯。
* [ ] 一个字符串 web(dev(ni(cat(new)))))找出第 n 个括号中的内容
* [x] DOM 树的深度优先遍历与广度优先遍历
* [x] JS 有哪些常用的设计模式
* [ ] 适配器模式适用的业务场景？

## Node 篇

* [ ] Node.js 的 Buffer 和 Stream 有什么区别
