fe-knowledge
前端知识整理
一、数据结构与算法
常见数据结构
字符串
数组
链表
栈
队列
树
图
算法
排序算法
递归
回溯算法
深度优先和广度优先搜索
二分查找
动态规划
贪心算法
二、HTML、CSS
介绍下重绘和回流
盒子模型
CSS选择器有哪些?哪些属性可继承?
CSS定义的权重?优先级?
简述伪类和伪元素
CSS3新增的伪类有哪些?
实现水平居中布局的方案
实现垂直居中布局的方案
实现水平垂直居中布局的方案
两列/三列/多列布局实现的方案
BFC及其应用
清除浮动的方法
常见的兼容性问题
CSS绘制三角形、圆形、扇形、菱形
CSS3动画
简述Rem及其转换原理
如何解决移动端Retina屏1px像素的问题?
三、JavaScript
JavaScript类型判断
JavaScript的类型转换(显示、隐式转换)
JavaScript的原型与原型链
JavaScript的执行上下文与执行上下文栈
JavaScript的作用域与作用域链
JavaScript的this
JavaScript的闭包
JavaScript的垃圾回收机制和内存泄露
JavaScript创建对象的多种方式及优缺点
JavaScript实现继承的多种方式及优缺点
JavaScript数组去重的多种方式及优缺点
JavaScript数组扁平化
JavaScript实现数组原型上的遍历方法forEach、map、filter、some、reduce
JavaScript模拟实现new关键字
JavaScript模拟实现Object.create
JavaScript模拟实现Object.assign
JavaScript模拟实现JSON.stringify
JavaScript模拟实现JSON.parse
JavaScript模拟实现instanceof
JavaScript模拟实现call、apply、bind
JavaScript模拟实现compose
JavaScript实现函数防抖和节流
JavaScript实现函数柯里化和反柯里化
JavaScript实现偏函数
JavaScript实现浅拷贝和深拷贝
JavaScript实现发布订阅模式
JavaScript实现EventEmitter
JavaScript实现图片懒加载
JavaScript实现图片预加载
js动画
四、ES6
ES6 之 let 和 const
ES6 之 模板字符串
ES6 之 箭头函数
ES6 之 模拟实现 Symbol 类型
ES6 之 迭代器与 for of
ES6 之 模拟实现一个 Set 数据结构
ES6 之 WeakMap
ES6 之 Promise
ES6 之 Generator 的自动执行
ES6 之 Async/await
ES6 之异步处理实战
ES6 之 Babel 将 Generator 编译成了什么样子
ES6 之 Babel 将 Async 编译成了什么样子
ES6 之 Babel 是如何编译 Class 的(上)
ES6 之 Babel 是如何编译 Class 的(下)
ES6 之 defineProperty 与 proxy
ES6 之 模块加载方案
ES6 之 我们来聊聊装饰器
ES6 之 私有变量的实现
ES6 完全使用手册
手写E6字符串模板
手写一个Promise
手写async/await
五、TS
基础类型
Typescript 和 JavaScript的区别
TS中 any 和 unknown 类型区别
TS中 never 和 void 的区别
tsconfig.json 有什么作用?
高级类型
TS中使用 Union Types 时有哪些注意事项?
TS中 keyof、typeof 关键字的作用
类型别名 type 和接口 interface 区别?
接口
TS中 interface 可以给 Function/Array/Class(Indexable) 做声明吗?
TS中同名的 interface 或者同名的 interface 和 class 会合并吗?
类
TS中的类及其特性
TS如何设计 Class 的声明?
函数
TS中的 this 和JS中的 this 有什么区别?
泛型
TS中的泛型的应用场景
原理
逆变、协变、双向协变和不变的理解?
编译TS用 tsc 还是 babel?
六、框架
Vue 生态
SPA、MPA的区别是什么?
简述 Vue 的生命周期以及每个阶段做的事
你对MVC、MVP和MVVM的理解
对Vue设计理念的理解
对Vue组件化的理解
你对v-model双向绑定原理的理解?
Virtual DOM?它是如何提升性能的?
你对vue响应式原理的理解?
手写vue的数据响应式
你对vue编译原理的理解?从template到render的处理过程
Vue实例挂载的过程中发生了什么?
Vue的 diff 时间复杂度如何从O(n^3)优化到 O(n)?vue2和vue3 diff 有什么差异?
Vue中的 key 作用?为什么建议不用index作为key?
Vue要做权限管理该怎么做?控制到按钮级别的权限怎么做?
你是怎么处理vue项目中的错误?
了解哪些vue性能优化的方法
vue渲染大量数据时应该怎么优化?
实际工作中,总结的vue最佳实践有哪些?
从0到1构架一个vue项目,说说有哪些步骤、哪些重要 插件、目录结构你会怎么组织?
Vue2
Vue v-if/v-for 哪个优先级更高?
Vue v-show 和 v-if 的区别
v-once 的使用场景有哪些?
自定义指令及其使用场景有哪些?
computed、methods、watch 的区别?
Vue的父组件和子组件生命周期钩子执行顺序是什么?
Vue组件间的通信方式(9种)
Vue中,子组件为何不可以修改父组件传递的Props?
Vue如何扩展一个组件?
Vue中什么是递归组件?举例说明下
Vue中什么是异步组件?举例说明下
Vue组件data为什么必须是个函数而Vue的根实例则没有此限制?
nextTick是干什么的?实现原理是什么?
keep-alive缓存的机制
vue插槽是如何运作的?
Vue2.0响应式原理中Object.defineProperty有什么缺陷?为什么在Vue3.0采用了Proxy?
介绍Object.defineProperty()
手写实现EventBus
Vue3
Vue3 的设计目标是什么?具体如何实现的?
如何看待Vue3的 Composition API?
Vue3 性能提升表现在哪几方面?
Vuex
Vuex的设计思想
Vuex中的getters和state的区别?
Vuex中actions和mutations有什么区别?
为什么Vuex的mutation中不能做异步操作?
页面刷新后Vuex的state数据丢失怎么解决?
手写vuex(实现思路)
vue-router
vue-router中如何保护指定路由的安全?
手写vue-router路由
axios
手写axios
七、工具
webpack
为什么需要构建工具?为什么选择webpack?
webpack基本配置?
webpack的热更新使用及原理分析(是如何做到在不刷新浏览器的前提下更新页面的)
webpack的性能优化
webpack构建原理
Rollup
Rollup基础配置?及其构建原理?
Vite
vite为什么比webpack快?vite工作原理?
babel
Babel的原理是什么?
git
git的工作流程
git reset、git revert 和 git checkout的区别?
八、性能优化
性能优化(概要篇)
九、网络
浏览器输入url到页面展示的全过程(综合)
什么是DNS?DNS查询方式?DNS解析的详细过程?
TCP三次握手和四次挥手
HTTP协议?HTTP报文组成(请求报文、响应报文)
HTTP1.0、HTTP1.1、HTTP2.0的区别?
HTTP2的头部压缩算法是怎样的?
HTTP3是什么?
HTTP常见状态码
HTTP请求方式(9种),get和post请求区别?
HTTP和HTTPS的区别?
HTTPS通信过程
十、安全
XSS攻击?如何防御?
CSRF攻击?如何防御?
SQL注入?如何防御?
命令行注入?如何防御?
服务器漏洞?如何防御?
流量劫持(DNS劫持、HTTP劫持)?如何防御?
HTTPS中间人攻击?如何防御?