面经-字节跳动-前端

已拿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


#面经##字节跳动##校招##前端工程师#
全部评论
三面promise的题,我有遇到过类似的实现并发控制器的,不知道和楼主的是不是同一题,在这里分享下思路: class Scheduler{     constructor(){         this.taskNum = 0;         this.taskQueue = [];     }     async add(promiseCreator){         //在Promise内部把resolve放到任务队列中,只有当resolve被调用,后面的的代码才被执行         if(this.taskNum>=2){             await new Promise((resolve)=>{                 this.taskQueue.push(resolve)             })         }         this.taskNum++;         let result = await promiseCreator();         this.taskNum--;         if(this.taskQueue.length>0){         //当前任务完成后,如果任务队列里有resolve,那么就调用resolve,之前被堵住的部分就可以得到执行             this.taskQueue.shift()();         }         return result;     } } let scheduler = new Scheduler(); let timeout = time => new Promise((resolve)=>{     setTimeout(resolve, time); }); function addTask(delay, num){     scheduler.add(()=>(         timeout(delay).then((val)=>{             console.log(num);         })     )) } addTask(1000, '1'); addTask(500, &(11526)#39;2'); addTask(300, &(11527)#39;3'); addTask(400, &(11528)#39;4');
3 回复 分享
发布于 2021-06-20 21:04
三面第四题会不会是用promise.all限制并发
2 回复 分享
发布于 2021-06-17 18:17
这前端面试好像有点后端哎😂
2 回复 分享
发布于 2021-06-25 14:19
实习or春招?
1 回复 分享
发布于 2021-06-16 22:47
1 回复 分享
发布于 2021-06-17 15:34
点赞,不仅有问题,还有答案
1 回复 分享
发布于 2021-06-20 19:45
我三面也是Promise问题和楼主一样
点赞 回复 分享
发布于 2021-06-17 19:19
太牛了
点赞 回复 分享
发布于 2021-06-17 19:45
实习还是秋招啊
点赞 回复 分享
发布于 2021-06-17 21:54
哇哦,同样是字节hr面,我还在等消息中,沾沾好运!为啥我没有调查问卷
点赞 回复 分享
发布于 2021-06-19 17:10
太厉害了,你都是怎么学习的啊?
点赞 回复 分享
发布于 2021-06-20 17:30
想问问算法通过什么途径学的啊,是懂原理就行了吗,因为很多算法学习的视频都是c语言的,看这些可以吗,还是说要看js的算法视频呢
点赞 回复 分享
发布于 2021-06-20 19:47
萌新求问,为什么问到JAVA了诶
点赞 回复 分享
发布于 2021-07-05 17:01
楼主没有问项目吗
点赞 回复 分享
发布于 2021-07-14 10:39
厉害了
点赞 回复 分享
发布于 2021-07-17 02:05

相关推荐

评论
40
341
分享
牛客网
牛客企业服务