一、http1.1和http2.0的差异?(chrome和firefox说明不支持不经过tls和ssl加密的http2.0)
1.多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。众所周知,在http1.1协议中[浏览器在同一时间,针对同一域名的请求有数量限制,超过这个限制则会被阻塞],而 HTTP/2 的多路复用(Multiplexing) 则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
2.二进制分帧在应用层(http)和传输层(tcp或udp)中间多了一层“二进制分帧层”,目的在于将传输的消息分成更小的帧。其中首部信息放在headerFrame,requestBody放在bodyFrame
3.首部压缩http1.1首部的信息都是以文本的形式传输,随着请求的增多,造成很大的性能问题和资源浪费,针对于此,http2基于HAPCK算法对首部进行了压缩。
4.服务端推送HTTP/2允许服务器在请求之前先推送响应信息到客户端(之前客户端有过请求),如果实现了HTTP缓存,推送的响应信息可以在客户端被缓存(可通过no-cache进行配置)。
二、hooks的优势,和class的区别?
1.便于抽离一些重复的状态逻辑,实现状态逻辑的复用
2.区别于class的冗余代码,写法更优雅清晰
3.class会生成很多辅助函数,但hooks只会调用createElement
4.从框架思想上,React更像是函数式编程,而hooks恰好拥抱函数式编程
三、redux的中间件知道多少,实现原理?
1.Redux的中间件提供的是位于 action 被发起之后,到达 reducer 之前的扩展点,这种机制可以让我们改变数据流,实现如异步 action ,action 过滤,日志输出,异常报告等功能。
2.Redux要求所有的中间件必须提供统一的接口,每个中间件的实现逻辑虽然不一样,但只要遵循统一的接口就能和redux以及其他的中间件对话了
四、redux的实现方式?
发布订阅模式,subscribe函数将订阅函数推到listeners数组中,每当触发dispatch,遍历listeners并执行订阅函数。
五、react16较上一版本有哪些变化?
1.renderrender可以返回React elements, 数组和Fragments,Portal,String/numbers,boolean/null
2.Error Boundary方便定位到出错位置,componentDidCatch
3.portal在html下的modal,不需要将组件写在最外层组件内
4.fragment略
5.Fiber是对核心算法的重新实现,解决了之前“小兵过河”式加载或更新组件方式,利用队列和分片解决渲染卡顿的问题
6.生命周期函数废弃三个componentWillMount, componentWillReceiveProps,componentWillUpdate,增加俩getDerivedStateFromProps(替代componentWillReceiveProps),getSnapshotBeforeUpate
7.上下文context略
8.memo可以在functionComponent中实现pureComponent的函数
9.lazy,suspense实现组件的懒加载
10.hooks
六、webpack常用插件,以及检测包的大小的插件
七、部分CSS,JS编码问答题
1.单行文字居中,多行文字居左----文字用inline-block包裹,外层是block,外层center,内层left
2.实现一个once(func),避免二次执行func----闭包,创建一个MakeOnceFunc的函数,new一个once函数
3.给定一个数字n,输出一个值为从1到n递增的数组(不用循环)----迭代和递归
4.筛选字符串----正则replace