字节跳动飞书实习 一面面经
字节跳动飞书实习 一面面经
面试官很好,面试氛围融洽,在卡壳的时候也有引导,面试顺着话题走,希望能有二面,内容如果有错欢迎指正
自我介绍
问了下专业课学习情况,自学情况。
操作系统(简历上没写)
进程和线程的区别
- 一个进程有一个或者多个线程组成,线程+系统分配的资源=进程,进程和进程之间相互独立,同一进程下的所有线程共享进程的内存空间。
CPU是如何调度的
- 先来先服务算法
- 短作业优先算法
- 最短剩余时间算法
- 高响应比优先算法(响应比等于(等待时间+服务时间)/ 服务时间 )
JS为什么是单线程的
- JS作为浏览器的脚本语言,主要是实现用户与浏览器的交互,还有操作DOM,这决定了JS只能是单线程。因为如果JS被设计了多线程,如果多个线程同时需要对同一个结点进行操作,这时候就会有冲突的问题。
JavaScript(熟悉)
JS是用什么来解决单线程的问题的(情景,大量代码执行,响应时间太长,js如何解决这种问题)
- 异步
- Web Worker
你刚刚答到了异步,异步是用什么方式实现的呢
- 回调函数、promise、async/await
你刚刚答到了回调和Promise,两者是如何实现的,有什么优势,有什么劣势,Promise又是解决什么问题的呢?
- 讲到最开始只有回调的时候,当多层回调嵌套的时候(比如多次网络请求),代码难以阅读,可维护性降低,回调地狱
- 然后有了Promise,Promise用then、catch、finally解决了回调地狱的问题,使得代码可维护性、可读性都得到了很好的提升
计网(熟悉)
刚刚你用了http请求做例子,你来说说http1.x 和http2.0的区别
- http2使用2进制传送,http1.x使用的文本(字符串)传送,解析速度更快了。
- http2支持多路复用。(补充问了下:多路复用解决了什么问题?当时紧张了就没答上来,现在想想,是用长连接避免创建多个TCP连接带来的网络开销,解决了对同一域名的请求限制阻塞问题,多路复用可以实现发送多个请求,再接收响应,而http1.x只能发送一个请求等待响应后再发送下一个请求)。
- http2支持头部压缩。
- http2支持服务端主动推送。http1.x只能在客户端发送请求后,服务端返回内容,http2支持在客户端未请求的情况下,主动发送内容给客户端。
答得不错,说一下http的请求methods吧
- 。。。。。。
讲一下GET和POST的差别
- 挺多的,答了四五个。
看你项目里用了JWT,说说看这种认证技术是为了实现什么,为什么要这么做?(无状态)
- http是无状态的
那看来你了解的不错,现在主流的是https,你来说说https是什么
- HTTP+SSL(TLS)
聊一下SSL握手的过程吧(唯一败笔,没答好,在面试官引导下答出来了,感觉不太满意)
客户端发送请求 Client Hello 向服务端传输自己支持的加密套件、SSL版本信息和一个随机生成数Random1,
服务端发送响应 Server Hello 从客户端的套件中确认一个加密方案,然后生成一个随机数Random2,将加密方案和随机数Random2返回给客户端,
服务端再发送自己的证书和公钥给客户端,
客户端接收到证书后,验证该证书的合法性,如果验证通过会取出证书中的服务端公钥,并且生成一个随机数Random3,通过公钥加密后返回给服务端,
服务端用自己的私钥解密获得Random3,此时服务器和客户端都有了三个随机数,根据Random1+Random2+Random3,还有前面确定的加密方案生成一个密钥,
后续的传输就使用该密钥进行对称加密就可以了。
Node(了解)
- express.js、egg.js、koa的对比,你对他们了解多少(老实回答,只用过express,其他两个只是了解)
- 洋葱模型(面试官说自己问的不好,没学过koa不该问洋葱模型)
- 所有请求在经过中间件的时候都会执行两次,请求一次,响应一次。
- 这种模型可以非常方便的实现后置处理逻辑。
- Koa和egg都是洋葱模型。
React(熟悉)
- 常用的hook
- 用过自定义hook吗,什么场景下会用到
- hook的优点,函数组件的优点
项目
唠家常
反问
- 觉得我答得怎样,我觉得我的https没有答好,其他的地方呢(两个人一起笑)
- 怎么查进度
- 部门技术栈