js基础
-
数组操作
哪些会改变原数组(pop、splice、reverse等等)
哪些不会改变原数组(map、reduce、filter等)
生成数组的几种方法和区别
数组去重的几种方式
-
函数
变量提升
具名函数与匿名函数的特性和区别
异步函数的发展史(callback->generator->promise->async/await)
函数链式调用、函数柯里化
arguments对象(取参数、caller、callee)
函数作用域链怎么生成
块级作用域(if else、try catch、let的效果)
-
对象
宿主对象、原生对象、内置对象
深拷贝浅拷贝实现
对象解构,扩展运算符
对象的几种创建方式
Object.defineProperty
(次要)Proxy与Reflect
-
值比较
==与===区别
抽象相等比较算法&toPrimitive方法
-
this
隐式绑定与显示绑定,各种绑定this方式的优先级
bind、call、apply绑定的区别与源码实现
new的原理
几种继承方式:原型链继承、组合继承、寄生组合继承(constructor的丢失问题)等等的实现与优缺点
箭头函数与普通函数的几个区别
严格模式下的this
-
原型链
记住原型链从末段到顶端的模型
Object与Function的关系
proto与prototype的含义
类型判断几种方法的区别和具体实现
-
promise
实现原理和PromiseA+规范
promise、promise.then与setTimeout的执行顺序(涉及Event Loop的原理)
async、await与Generator的关系
promise.all、promise.race、promise.catch、deferred对象等细节
-
正则表达式
分组、分支、单行、多行、全局、match、exec、RegExp
正则的回溯问题
正则在split、replace中的使用
-
内存泄漏问题
出现情况、如何避免
垃圾回收机制(引用计数算法、标记清除算法、标记压缩算法等等)
-
其他问题
数字精度问题
位运算的实际应用
进制转换
节流、防抖的实现
中间件的原理实现
几种设计模式的概念
-
数据结构
队列、栈、链表
二叉树、二分搜索树
堆、最小堆、最大堆
几种排序算法(冒泡、插入、选择、快排)的实现和复杂度比较
具体算法题刷LeetCode
-
浏览器
-
HTML
事件模型
捕获阶段、冒泡阶段、目标阶段
事件委托
DOM0级事件、DOM2级事件
-
Storage
localStorage的兼容问题
使用localStorage缓存数据和资源
XHTML、HTM4、HTML5的区别
-
css
格式化上下文:BFC、IFC、FFC、GFC概念和应用
块级元素、行内元素的区别
css选择器权重算法
样式优先级
移动端ios的穿透问题和300毫秒点击延迟问题
css的baseline概念
css3新属性/伪类
-
http相关
强缓存、协商缓存机制
expire、cache-control
last-modified、eTag
http各个状态码的概念
http2.0与1.0、1.1的区别
-
cookie
如何读写
设置过期时间
设置domain限制、了解domain匹配规则
cookie与sessonId的关联
-
ajax请求
XMLHttpRequest的使用
CORS的简单请求、复杂请求区别
在不同浏览器的兼容
ajax的五种状态
和fetch的比较
与form表单请求的区别
几种跨域请求的方式对比(jsonp、CORS、iframe、postMessage等等)
-
安全防范
xss攻击
转义处理、CSP内容安全策略
处理富文本编辑器(设置白名单)
CSRF攻击
cookie
token
-
浏览器渲染
浏览器渲染过程、输入URL到页面渲染的过程
合成层的原理/GPU加速原理
-
性能优化
重绘、重排的原理、如何引起如何减少
http缓存,见上
script的摆放和和defer、async属性
chrome的preload、prefetch
window.Performance进行页面性能监控(白屏时间、首屏时间、可交互时间等等的计算)
CDN加速(原理)、资源合并、压缩
尽量使用css代替js,减少script执行时间
gzip压缩
-
(次要)几条浏览器线程的作用
-