小结
今日头条的面试不是一般的难.
前面两面还好。
一面
- JS基本数据类型
- 说说ES6新规范,我说了 let const 箭头函数 还有promise, ES6 Module 。
- 怎么实现ES6 Module,我说了用闭包实现一个模块。
- 项目用到React,说说React。
- React性能优化
- 算法 问题之前笔试 ,求两个整型数组的相同数,当时想到了用哈希表去扫描,然后比较下一个数组中是否有相同数字
- 常见的查找方式,顺序表查找,二分查找,哈希查找,各自时间复杂度。 注意二叉树的查找,时间复杂度是O(h),树的高度!
AVL是O(lgN) - 哈希表的实现方式: 哈希函数实现-除留余数法、直接定址法、数字分析法等。 解决冲突的方法:开放地址法(线性探测、平方探测、)、分离链接法、双散列、再散列等
- 算法二 : 头条很喜欢问这个:
一个无序,不重复的数组,从中取出N个数,求让这个N个数和为M的组合有多少个?
二面
简单的介绍了一下项目
1. 问我的项目,为什么使用背景滚动,如果是多个精灵对象来滚动怎么处理?(还是一样)
2. 还是问的另一个项目的一些细节(对自己的项目一定要熟悉)
3. 说说从输入URL,发生了什么,以HTTPS的角度讲,细讲了一下SSL握手。 数字签名 数字证书的作用。为什么我们需要HTTPS,为什么它是安全的?
4. 函数节流怎么设计,拖动事件,不需要频繁触发,而且隔一段时间触发一次。 函数节流的实现。
5. 设计一个认证的方案,免登陆的方案。 一开始提出cookie+session,一直问我怎么产生这些信息,我说在服务端产生,信息存到数据库中,通过HTTP 响应SET-Cookie返回一个cookie,设置了它的过期时间expire等,然后传输回客户端,客户端之后每次请求都会带上这个cookie。后面安全性,我说MD5,他说不可逆不行。
后面面试官跟我说 用token, 我们不需要实际把用户的信息存在cookie里面,我们把用户名等信息可以使用非对称加密算法,加密后得到一个随机字符串,这个就是token然后存在客户端,你每次发送到服务端可以通过解密token来获取这个信息。
6.React 的virtual DOM的dom diff算法细节。
三面
- 两道逻辑推理题
- document.write怎么影响文档的
比较它在onload中执行和在文档创建时不同时机的区别
3.设计一个弹幕,怎么优化。 需要考虑RenderLayer,我跟他说了一下canvas - 写KMP算法出来