面经-字节跳动-前端
已拿offer,总结一下,计网,操作系统,js相关知识,问的较多,前端方向的算法题是比较基础的,不难。基本上除了三面比较痛苦外,其他的面都比较轻松。
一面
Q:osI模型?
A:
Q:HTTP是哪层协议,解决什么问题?
A: 应用层,包装数据问题。
Q:三次握手的目的?
A:保证双方同时具有接收数据和发送数据能力,三次握手可以在有限次数完成校验工作。
Q:所以为什么要握手三次,一次握手不就行了?
A:防止失效的连接请求报文段被服务端接收,从而产生错误。 PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。 若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。
Q:网络状态码?
A:https://blog.csdn.net/qq_26988127/article/details/72757986
Q:web缓存?
A:数据库缓存、服务器缓存、浏览器缓存
Q:https?
A:https://baike.baidu.com/item/HTTPS/285356?fr=aladdin
Q:非对称加密和对称加密的具体实现与应用场景?
A:https加密用的非对称,传输用的对称,二者算法的区别如下
1、加密算法不同
在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
在对称加密中使用的主要算法有:DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)、Blowfish等。
2、加密安全性不同
对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。
而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。非对称加密与,其安全性更好。
4、流程图不同
4、加密耗时不同
非对称加密使用一对秘钥,一个用来加密,一个用来解密,这样加密和解密花费时间就会更长长。
对称加密中加密方和解密方使用同一个密钥,加密解密的速度比较快,耗时短,适合数据比较长时的使用。
Q: 请用自己擅长的语言写一个括号匹配算法(20.有效的括号)
A:力扣上有原题,https://leetcode-cn.com/problems/valid-parentheses/
二面
Q:进程、线程、协程?
A:http://www.360doc.com/content/20/0417/14/32196507_906628857.shtml
Q:进程间通信的方式
A: 无名管道(pipe):半双工通信,单向流动,通常父子进程使用
高级管道(popen):另一进程当做新进程在当前进程启动,把他当做当前进程的子进程。
有名管道(named pipe):允许无亲缘关系的进程通信
消息队列(message queue):消息链表,解决了管道传递信息少,缓冲区大小受限问题
信号量(semphore):一种计数器,常用于加锁,信号量常用的事pv操作,是一种不同进程间同步的手段
信号(sinal):通知某进程,某事件已经发生
共享内存(shared memory): 映射一些其他进程访问的内存,一般与信号量配合使用,实现进程同步与通信。
套接字(socket):用与不同机器之间的进程通信
Q:常用排序和查找算法
A:排序:插入,希尔,快排,归并。着重记,快排和归并的原理和差别(快排原地排序,比归容易实现,且成本低),着重记忆快排的优化方法(对小数据量数据,使用插入排序),着重记忆时间复杂度(快排,归并nlogn,其他n^2)查找:顺序,二分,插值,问的不多
Q:用js实现快排吧
A:我这块写的有点迷糊,这个参考网上的吧。https://www.cnblogs.com/mackxu/archive/2013/02/27/quicksort.html
Q:js的数据类型?如何分辨基本类型和引用类型?
A: 基本类型:String,Number,boolean,null,undefined,symbol和引用类型:object,function,Array,如何分辨,先用typeOf ,之后再用isArray判断是否是Array
Q: js闭包?
A:https://zhuanlan.zhihu.com/p/22486908
Q: js垃圾回收?
A:https://segmentfault.com/a/1190000018605776
Q:微任务与宏任务的关系
A:给一段代码,问最终打印结果如何?先执行主线程、微任务,之后再运行宏任务setTimeout里面的内容(队列缓存),注意promise的嵌套问题(promise先运行里面的,再运行then,最后final)总之就很经典
Q:给一个矩阵,让其原地旋转90度。
A:这道题我做过,力扣原题,秒答。https://leetcode-cn.com/problems/rotate-matrix-lcci/
三面-经理面
Q:之前做过的项目以及难点
A:认真回答即可
Q: 项目经历,以及收获
A: 认真回答即可
Q:是否已有其他offer?以及个人情况询问
A:认真回答即可
Q: 如何用js的promise实现一个最多只有两个promise同时运行的函数,要求多个调用该函数时,promise运行完毕后按输入顺序打印出来内容。
A:完全不会做,其题大致是给了一个函数,让完善其中的没写的部分,之后不断调用该函数,让打印正确的同时,同一时刻能只有两个promise同时执行。网上没有类似的题,我也不记得题目具体了,十分抱歉。
Q: 数据库的索引?
A:https://www.cnblogs.com/wwxzdl/p/11116446.html
Q: 索引树的构成与加载,索引的优缺点
A:b+树详细讲解即可,缺点:维护时间成本增加,需要空间成本,增加增删改查效率,优点:缩短索引时间,加快连接速度,加快分组排序速度
Q: 用java实现多线程操作一组数据
A: 主要是看是否掌握 runable接口,之后重写run函数,再读取数组,进行操作。这块我自认为临阵写的不太好的,就贴一段网上的代码了。https://blog.csdn.net/nmgrd/article/details/81335439
Hr面
Q:询问对本部门该职位的具体了解程度?
A: 所以说一定要提前调研好,之前面试结束后面试官会问你有什么问题么,一定要问该部门相应的内容和工作方向等等信息。
Q:之前项目中学到的认为最重要东西?
A:我说是沟通能力,巴拉巴拉,总之就找个点展开就行。
Q: 加入公司后,最想要学习什么?
A:我说是管理模式,以及工作方式,巴拉巴拉,总之吹就完事了。
Q:在之前项目中,如何独立解决项目问题的?
A:认真回答即可,查文档,百度,谷歌,查书,随便说。
Q:是否有其他offer,为什么选择字节?
A: 说说其他公司的缺点,再说说你要面的部门的优点即可。
Q:聊聊自己的优缺点吧
A:优点随便说,缺点说点无关轻重的,就比如三面发现自己对promise不够熟练巴拉巴拉。
Q:何时可以入职?是否有其他公司的协议没有解除?
A:认真回答即可。
之后面试结束,第二天发来了调查问卷短信,吓了我半死,之后端午假期结束收到oc,当天傍晚收到offer