总结了一些工作和面试中常遇到的知识,涵盖了:
- javascript(执行上下文、闭包等)
- css
- html & 浏览器(event loop、垃圾回收、缓存、跨域等)
- 网络(HTTP、HTTPS、TCP、CDN、DNS解析等)
- 网络安全
- 算法 & 编程
- 工程化
前端基础
JavaScript
- 执行上下文
- 调用栈
- 词法环境
- 谈谈对 Symbol 的理解
- 事件冒泡 & 事件捕获
- 谈谈对闭包的理解
- 前端异常的捕获与处理
- axios.CancelToken的原理
- cookie的工作原理
- defer vs async
- yarn vs. npm
- cookie和session的区别
- set、map、object 和 array的区别与联系
- 谈谈对 js 原型链的理解
- Commonjs 和 ES Module的区别
- CommonJS、AMD、CMD、ES module
- var、let、const的区别及ES6的“暂时性死区”
- 箭头函数和普通函数的区别
- defineProperty vs proxy
- call、apply和bind的区别和用法
- 变量提升
- ES5、ES6、ES2015~ES2020的区别
- ES7、ES8 的新增特性
- JS 代码执行过程
- 遍历器
- for in 和 for of的区别
- javascript对象属性的命名规则
- 字符编码:ASCII、Unicode、UTF-8
- 正则:各种分组匹配
- javascript数据类型及转换
- Javascript数据类型判断
- 127.0.0.1、0.0.0.0 和 localhost 的区别
- 快速初始化数组
- JavaScript 模块的循环加载
- 字节、位、比特、二进制流
- js数组的底层实现
- JS中变量声明的底层逻辑(过程)
- 字符串:slice、substring 和 substr 的区别
- JavaScript数据属性和访问器属性
- 数组和链表的优缺点
- js-数组去重的方法
- WeakSet & WeakMap
- uglify原理
- js - 遍历对象
- mvc、mvp、mvvm的区别
- js - 复制一个数组
- MutationObserver、IntersectionObserver
css
- CSS 隐藏元素的几种方法
- padding、margin设置100%的参考点
- BFC
- CSS选择器及其优先级
- CSS 实现垂直居中的常用方法
- 圣杯布局 & 双飞翼布局
- flex布局
- CSS 盒子模型
- CSS3 动画属性
html & 浏览器
- 几种常见的跨域方案
- 跨域资源共享
- 跨页面(tab)通信方案
- 回流 & 重绘
- 减少重绘和回流的方法
- 事件循环机制(Event Loop)
- 渲染流水线
- V8垃圾回收机制
- 渲染层 vs 图形层
- chrome调试工具中Form Data和Reqest Payload的区别
- 浏览器的强缓存和协商缓存
- web缓存策略
性能
- 页面10张img,http1是怎样的加载表现,怎么解决。那多域名又为什么可以解决呢
- 10张img,http2是怎样的表现
- http2为什么快,多了什么特性,头部压缩算法是怎样
-
- 头部压缩:HPACK算法
- 多路复用:同域请求使用同一个TCP连接完成
- 二进制分帧:分帧,并采用二进制编码
工程化
操作系统
网络
http
- 谈谈你对http的理解
- HTTP报文
- http常见状态码
- HTTP常用头字段
- HTTP 0.9/1.0/1.1/2.0的区别
- HTTP请求类型
- HTTP的连接管理
- 包、帧、数据包、段、消息、记录
- HTTP的重定向和跳转
- 流量控制
- http get和post的主要区别
- HTTP传输大文件的方法
- http/1.1 的优缺点
- http 3.0的特性
- 概念:TCP/IP
- 概念:代理
- TCP/IP网络分层模型 vs OSI网络分层模型
- HTTP的缓存代理
- HTTP的代理服务
- Content-Type
- HTTP如何判断数据传输结束
TCP
https
CDN
DNS解析
算法 & 编程
算法、数据结构
- js算法 - 最长无重复子数组
- js算法 - 链表中的两数相加
- js算法 - 螺旋矩阵
- js算法 - 进制转换
- js算法 - 数组中重复的数据
- js算法 - 二叉树的右视图(DFS、BFS)
- js算法 - 最长公共前缀
- js算法 - 二叉树的后序遍历
- js算法 - 最小的k个数
- js算法 - 全排列
- js算法 - 合并两个有序链表
- js算法 - 快速排序
- js算法 - 爬楼梯
- js算法 - 二叉树中序遍历
- js算法 - 输出二叉树的右视图
- js算法 - 验证回文串
- js算法 - 最大数
- js算法 - 两个链表的第一个公共节点
- js算法 - 环形链表
- js算法 - 删除链表的倒数第 N 个结点
- js算法 - 平衡二叉树
- js算法 - 判断是否为回文字符串
- js算法 - 数组中出现次数超过一半的数字
- js算法 - 二叉树的最近公共祖先
- js算法 - 斐波那契数
- js算法 - 三数之和
- js算法 - LRU缓存机制
- js算法 - 有效的括号
- js算法 - 大数相加
- js算法 - 二叉树前序遍历
- js算法 - 两数和
- js算法 - 反转链表
- js算法 - 连续子数组的最大和
- js算法 - 用队列实现栈
- js算法 - 二叉树的反转
- js算法 - 用栈实现队列
编程
- js编程 - 防抖、节流的实现
- js编程 - instanceof的实现
- js编程 - 数组扁平化的实现
- js编程 - 实现一个多维数组初始化方法
- js编程 - 实现一个链表(add、remove)
- js编程 - 深度拷贝
- js编程 - 对象扁平化的实现
- js编程 - sleep函数的实现
- js编程 - new的原理以及实现
- js编程 - for...of的实现
- js编程 - bind函数的模拟实现
- Array.reduce 的几个使用场景
- async/await & promise的执行顺序 - 练习
安全
常见的 web 安全问题
经典综合应用
其他
- 图片base64和外链的应用场景,各有什么优缺点(base64减少请求数,但是会增加额外的体积)