一转眼已经毕业一年了这一年的工作经历真是有苦有甜,还是很坎坷的,还好所有的经验都整理了下来~ 分享给同一时期的伙伴们~ 大佬可以绕行🤣
css
-
盒子模型
标准模型和怪异模型(重点在于width的计算) -
BFC
1.BFC的作用1.清楚浮动 2.防止相邻BFC元素出现边距重叠 复制代码
2.BFC的触发条件
-
如何隐藏一个元素,只通过css方式
1.display:none
2.opacity:0
3.visibility:hidden
复制代码
-
让一个元素水平居中(元素可能为定高或者不定高)
<div class='parent'> <div class='children'></div> </div> -- 定高:-- 1. 父级:position:relative 子级:position:absolute; top:0; bottom:0; right:0; left:0; margin: 0 auto; 2. 父级:position:relative 子级:position:absolute; top:50%; left:50%; margin-left:自身宽的一半; margin-top:自身高的一半; -- 不定高 -- 1.absolute + transform 2.flex 3.table display: table-cell; vertical-align: middle; text-align: center; 复制代码
-
选择器优先级(选择器从右向左解析)
!important > style > id > class > tag > * > 继承 > 默认
复制代码
-
浮动/如何清除浮动
浮动缺点: 容易造成父容器高度坍塌
解决办法:1.伪元素清除浮动 :after { height:0; clear:both; content:''; display:block } 2.父级设置overflow:hidden 3.创建BFC 复制代码
-
css3新特性 多注意一下动画,canvas和svg的用法和区别
-
怎么实现单行文本溢出显示省略和多行文本省略
js
- js基本类型(要以MDN为标准)
string、number、boolean、object、symbol、null、undefined 复制代码
- 原型链(必考!重点中的重点!)
原型链部分过多,改天我会单独写一份,网上也有很多大佬们优秀的总结,一句话,看懂这个图, 就说明你吃透了原型链
-
闭包(!必考重点!)
闭包是指有权访问另外一个函数作用域中的变量函数
MDN:致那些可以访问自由变量的函数(自由变量就为你访问的那个参数)
特性:1.闭包可以访问当前函数以外的变量 2.及时外部函数已经返回,闭包仍能访问外部函数定义的变量 3.闭包可以更新外部变量的值 复制代码
闭包之所以能访问外部变量,是因为函数在创建的时候,基本类型变量都储存在堆当中,而不是栈
-
script标签属性
defer 异步加载,元素解析完成后执行
async 异步加载,但执行时会阻塞元素渲染 -
深浅拷贝
1.浅拷贝和深拷贝区别
2.如何实现一个深拷贝 -
new操作符做了什么
参考我之前写过的文章如何实现一个new -
instanceof 和 Array.isArray 是如何实现的
instanceof能在实例的原型对象链中找到改构造函数的prototype属性所指向的原型对象,返回true instance.[_proto_] === instance.constructor.prototype 复制代码
Array.isArray
通过Object.prototype.toString.call() 复制代码
-
防抖和节流实现方法(很多公司要求手写代码)
-
继承 我用的最多的就是类和原型继承,还有很多种类的继承,多说多加分!
-
Es6/ES7
1.const/let/var区别
const/let之所以会出现暂时性死区,是因为执行上下文创建的时候,
const、letc创建在词法环境内,未被初始化
var创建在变量环境内,初始化为undefinedconst常用来声明常量,并且一旦定义不能被改变
const声明引用类型时,是不能改变当前引用类型的地址,值是可以改变的 eg:
const arr = ['12','3']; arr.push('44'); console.log(arr) //['12','3','44'] 无报错 复制代码
2.set/Map用法
3.promise的状态和实现原理
4.async/awit的实现原理
自动执行器+gengerator
5.generator异步函数实现
generator使用和原理5.箭头函数
1.特性 2.和普通函数区别 -
url在地址栏输入到展示的过程
1.DNS解析 DNS查找 1.本地DNS之间的查找 递归 2.本地DNS与根域子域之间的查找 迭代查询 2.Tcp三次握手 3.Tcp四次挥手 4.浏览器渲染 1.构建DOM树 (转码) Html二进制数据 ---> Html字符串 (Tokens化) Html字符串 ---> Tokens结构,每个Token都特殊的含义和规则 (构建Nodes) Nodes节点和属性 (都贱DOM树) 2.样式计算 css -->stylesheet 3.页面布局 4.生成分层树 z-index,2d,3d.... 5.栅格化 图块 ---->位图 复制代码
-
执行上下文
1.全局执行上下文 只有一个对象,windows对象
2.函数执行上下文 无数个,函数被调用时就会创建
3.Eval函数上下文 运用在eval函数中的代码 -
执行上下文创建过程
1.确定this的值
2.词法环境 组件创建
3.变量环境 组件创建 -
垃圾回收方法
1.引用计数法
看一个对象是否有指向她的引用 ---> 循环引用判断不出来(缺点)2.标记清除(常用)
不在使用的对象叫做[无法到达对象]。
从JS对象全局出发,定时扫描内存中对象,凡是可以到达的,保留。无法到达的回收。 -
null和undefined的区别和本质内存区别
null表示‘无’,转为数值是0,空指针对象 给全局变量赋值null,相当于将这个变量的指针对象和值清空。 如果给对象属性和局部变量赋值null,给这个属性分配了空的内存,值为null > JS会回收值为null的对象 复制代码
undefined表示‘无的初始值’,变为数值为NaN 给全局变量赋值undefined,相当于将这个值清空,但是对象仍旧存在。 如果给对象属性和局部变量赋值undefined,说明这个值是空值。 复制代码
-
常见的内存泄露
1.全局变量未定义的变量会在全局创建一个新变量
解决办法:用完指向null,减少全局变量使用
2.闭包
3.定时器
4.脱离DOM引用 -
call/apply/bind的区别和怎么实现它们
-
let/const声明的变量在windows上面吗?为什么?
-
前端路由都是怎么实现的
-
怎么样实现一个indexOf方法
-
webpack打包原理 webpack一般都是随机问的,loader和plugin问的多一些,可以多看一下
Http
-
http报文结构
起始行 + 头部 + 空行(区分头部和实体)+ 实体 -
Get和post区别
-
http状态码
-
http1.0/http1.1/http2.0区别
-
定长和不定长数据http是如何设置的
content-length
transfer-encoding:chunked -
http怎么处理大文件传输的
accept-ranges
-
http1.1如何结局对头阻塞的
1.并发连接 (chrome可以并发6个) 2.域名分片 -
说一下cookie和怎么预防xss和CSRF攻击
-
http缓存
-
说下http代理
-
http2.0是如何实现多路复用的
-
websocket和http/tcp有什么关系
Vue
-
虚拟DOM实现原理
-
vue的computed是怎么实现的
-
谈谈nexttrick的原理
-
知道vue3.0嘛,谈谈object.prototype和proxy
-
vue和react的区别是什么
-
说说keep-alive的用处,如果缓存很多是如何处理的
React
-
类组件和函数组件的区别
类:有生命周期,可使用其他特性,如state,有自己的this
函数:接受props渲染,是无状态组件,无生命周期,无this -
高阶组件 高阶组件是接受一个组件并返回一个新组件的函数(具体见官网介绍)
-
类和函数的区别
class是function.prototype的语法糖
类实质就是一个函数。类本身的指向就是构造函数
复制代码
-
constructor和super
constructor方法是类的构造函数的默认方法。通过new生成对象实例时,自动调用该方法。
constructor中定义的属性为实例属性(this对象上) constructor外声明的属性都是定义在原型上面,可以称为原型属性(class上) 调用super()对父类进行初始化 这个两种调用和不调用的区别:1、如果不需要 在 constructor里面使用 this.props ,是可以不用给super传props的 2、如果不要在constructor写逻辑,仅仅是写一个super(props),实际上整个constructor都没有写的必要 复制代码
-
生命周期(新的旧的对比)
-
this.setState更新机制
众所周知,setState不会立即更新,会把要更新的state放到[队列机制]里面,不会立即更新 之后会判断是否处于batchUpdate状态, true -> 保存到dityComponents里面 false ->遍历所有的dityComponents调用updateComponent进行更新 -
React fiber 实现原理
-
React diff算法是如何优化的,o(n3)和o(n)是如何计算出来的
-
React路由懒加载和实现原理
就是在问react-loadable的实现原理
-
jsx是如何转化为浏览器可识别的js的
官网很清晰babel过程
-
redux实现方式
-
redux-saga作用是什么
处理redux的副作用
-
React为什么把reducer设置成纯函数
总结
最后一大块就是leetcode上面的算法题了,面得大厂的算法题基本都是从这个上面出的,刷题必不可少!加油吧~ 🤘
来源:oschina
链接:https://my.oschina.net/u/4346575/blog/4279411