前言
本文并没有题目的答案,请自行搜索学习。
html
- html5的新特性
- 列一些meta标签属性
css
- BFC是什么,应用场景是什么
- 垂直居中的方案
- 移动端适配方案,rem的根元素fontSize设置
- 移动端1px方案
- 浮动布局,清除浮动
- position属性
- flex布局
- display:inline-block出现的问题,怎么解决
- 盒模型
- 两列布局和三列布局的实现
- 什么是 CSS 选择器权重以及它如何工作
- css 伪类与伪元素区别
javascript
- 数据类型
- 数据类型有哪些,包括BigInt
- 检测数据类型的方法
- undefined和null区别
- BigInt和Symbol的理解
- null是对象吗,为什么
- 数组
- 数组去重的方法(多种)
- 实现数组扁平化的方法(多种)
- 函数
- 作用域和作用域链
- this指向问题
- call、apply和bind的区别
- arguments为啥不是数组,怎么转换成数组
- 闭包是什么,为啥用它,缺点是什么
- 柯里化
- 执行上下文
- 立即执行函数
- 对象
- 原型和原型链
- js继承方法,es6的继承
- 获取原型的方法
- new的过程
- 深拷贝和浅拷贝
- 获取对象属性的方法
- DOM
- 事件委托
- 事件捕获和事件冒泡
- DOM和BOM的区别
- DOM操作的常用API有哪些?
- mouseover和mouseenter的区别
- ES6
- var,let,const的区别
- 箭头函数和普通函数的区别
- promise的理解
- 解构赋值
- for of 和 for in区别
- 介绍下 Set、Map、WeakSet 和 WeakMap 的区别
- Proxy
- 其他
- 设计模式
- 防抖throttle和节流debounce:含义,应用场景,手写方法
- 内存泄露
- 垃圾回收
- js延迟加载
- js模块化(commonjs/AMD/CMD/ES6)
- 函数式编程
- script中defer和async的区别
- 常用的正则表达式
手写系列
- 手写一个call/apply/bind效果
- 手写一个new效果
- 手写一个promise,promise.all,promise.retry,promise.prototype.finally
- 手动实现一下instanceof的功能
- 手写斐波那契数列及其优化
- 手写一个findIndex
- 实现一个快排
- 实现柯里化currying函数,反柯里化
- 实现寄生组合式继承
- 手写ajax,可用promise封装
- es5实现Array的map, filter,reduce方法
- 手写一个sleep函数
- 写一个函数,可以控制最大并发数
- 实现订阅者模式eventEmitter(emit,on,off,once)
- 实现观察者模式observer
- 实现单例模式
- 将一个同步callback包装成promise形式
- 基于Generator函数实现async/await原理
- 实现Object.create方法
- 手写一个JSONP实现
- js获取url的params
浏览器
- 从输入URL到呈现页面过程
- http和https的区别
- http状态码
- http缓存(强缓存/协商缓存/缓存位置/CDN缓存)
- 跨域(JSONP/CORS/WebSocket/nginx/iframe)
- GET 和 POST 的区别
- Http请求中的keep-alive
- TCP的三次握手和四次挥手
- 重绘和回流
- xss和csrf攻击,如何防范
- 事件循环eventloop
- 浏览器存储Cookie、localStorage、sessionStorage的区别
- requestAnimationFrame的理解,与定时器相比, 模拟定时器的写法
- 路由(window.history和hash)