任何好学的技能,都不是那么值钱。 全情投入,专注极致,刻意练习,守正出奇,未闻花名,愿等花开 以能造出什么样的轮子,来衡量学习的效果
css基础
-
行内元素和块状元素
-
position
-
盒子模型
-
高度塌陷,清除浮动
-
BFC块级格式化上下文
-
实现一个水平垂直居中
-
层叠上下文
-
三栏布局
-
flex布局
- flex布局的相关用法
- 如何用flex实现九宫格布局
- flex:1指的是什么
- flex容器container的相关属性
- flex项目item的相关属性
-
1px
- 移动端1px问题是怎么解决的
- 介绍一下rem方案和vw方案,分别有什么优点和缺点
- rem方案的font-size是挂在哪的
- rem方案时移动端字体是怎么处理的
-
移动端适配
-
重绘回流,如何避免
-
预处理语言sass和less
JavaScript基础
-
执行上下文,作用域链,闭包
- JavaScript的执行上下文
- JavaScript的作用域链
- JavaScript强大的闭包应用场景
-
垃圾回收机制
- 新生代
- 老生代
- 标记清除
- 标记压缩
- 引用计数
-
this, call, apply,bind
- 变幻莫测的this指向
- 如何改变this指向
- call,apply,bind的区别
- 如何实现call和apply
- 手写一个bind
-
原型,继承
- 原型和原型链
- 实现一个继承,
-
promise及异步
- 手写并实现一个promise
- async 和await
- 实现一个sheep函数
-
深浅拷贝
- 介绍js的深浅拷贝
- 如何实现深浅拷贝
- 实现深拷贝需要注意哪些问题
- 如何解决循环引用的问题
-
事件机制,Event Loop
- 如何实现一个事件的发布订阅
- 事件循环机制
- 宏认为和微任务的区别
-
函数式编程
-
函数柯里化
-
数组扁平化
-
防抖与节流
-
高阶函数
-
service worker和web worker
-
ES6的语法
vue框架使用和源码原理
-
生命周期
-
组件中 data 为什么是一个函数?
-
computed和watch的区别
-
v-if,v-show,v-html的原理
-
v-if和v-for的优先级
-
双向数据绑定
-
响应式原理
-
vm.$set()实现原理
-
Vue 的渲染过程
-
vue中key的作用
-
虚拟dom,diff算法
-
nextTick的原理
-
组件通信
-
vuex状态管理
-
vue-router路由实现
-
keep-alive 的实现原理和缓存策略
-
vue3的改动
-
vue和react的区别
-
vuejs的优化策略
react框架使用与源码原理
-
react虚拟dom怎么执行的(树的遍历和diff)
-
react16和15的虚拟dom架构有什么变化,fiber架构的描述
fiber把整个虚拟dom树变成了一个链表指向,diff过程可以随时终端
元素 -> 第一个子元素 -> 兄弟元素 -> 兄弟元素
-
fiber和虚拟dom的区别
-
react16的hooks到底是怎么执行的,react事件系统和浏览事件系统有啥区别和关系
-
react-router原理
-
react怎么实现ssr框架
-
ant-design + antd-pro的源码
-
redux生态 (redux react-redux, redux-sage dva, umi)
浏览器网络
-
重绘与回流
-
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
-
cookie与session,localStorage 与 sessionStorage
-
跨域,预检请求,同源策略
-
浏览器的缓存机制
-
http和https
-
http头部,状态码
-
https的加密算法
-
http1.0,http1.1, http2.0, http3.0
-
get请求与post请求
-
正向代理和反向代理
-
tcp连接的三次握手与四次挥手
性能优化
- 代码执行更快
- 网络传输更快
- 文件加载更快
- webpack性能优化
设计模式
- 单例模式
- 策略模式
- 代理模式
- 发布订阅模式(观察者模式)
算法与数据结构
- 斐波拉契数列,爬楼梯问题,递归
- 排序算法,冒泡排序,选择排序,快速排序
- 二叉树,二叉树的查找与遍历
- 贪心算法: 局部最优解法,经典背包问题
- 分治算法:分而治之
- 动态规划:每个状态都是过去历史的一个总结
- 回溯法:现原先选择不优时,退回重新选择