字节跳动网络工程师凉经
情况概述
刚毕业半年,计算机二战考研结束,分数擦线找保底工作。因为自己网络基础还可以,所以找在字节实习的学妹内推的网络工程师的岗位,走的是社招。等了一周之后收到了面试邀约。
这个岗位真的很小众,听在字节的校友说这个岗位今年校招全国只招5个人。我翻遍全网只找到两篇字节网络工程师的面经。
不愧是大厂,考察的问题很全面,对于知识问得很深入。明显感觉这种知识深度不是简简单单背点八股文就能糊弄过去的,面试官会在他感兴趣的部分不断地深入,以探测你掌握的知识的深度,是不是只是简单背了点八股文。
写这篇文章一是想帮助有同样困惑的朋友,免得少走弯路,二是记录下自己的经历,做下总结。当然也希望认识结识一些对网络感兴趣的朋友。
岗位要求:
实时传输网络研发工程师
上海
研发 - 后端
社招
职位 ID:JYG6P
职位描述
1、字节跳动实时通信的后台业务研发;
2、实时网络SDN控制器、数据转发服务的开发和技术演进
职位要求
1、本科及以上学历,计算机、通信及相关专业;
2、熟练掌握Golang/C++/Java/Python语言,有较好的算法基础;
3、有扎实的网络技术基础,对socket通信、UDP/TCP/IP和HTTP有深刻的理解;
4、熟悉IPv4、IPv6、vlan、vxlan, ***等技术,熟练掌握Openflow, OSPF, BGP等协议;
5、良好的分析问题、解决问题的能力,具有一定的攻坚能力;
具备以下条件者优先:
1、有ODL、ONOS、VPP,Openvswitch 项目开发经验者优先;
2、有SDWAN相关项目经验者优先。
https://jobs.bytedance.com/experienced/position/6956158997100857631/detail
面试持续了一个小时,以下部分罗列出我被问到的问题:
操作系统部分:
1. 进程和线程的区别?
我:进程与线程主要区别是是否占用的资源的区别,一个进程可以对应多个线程,而每个线程只属于某一个进程。当某个线程被阻塞时,会阻塞属于同一个进程的所有线程。
2. 具体说说你讲的进程线程控制资源的事情。
我:……答不出来具体的
3. 堆和栈的区别
我:堆的空间大一点,栈的空间小一点。栈可以存储进程的PCB什么的,具体的我就不知道了,了解的不多。
4. 说说堆和栈是存储在哪儿的
我:不知道
5. 进程阻塞的四大条件
我:(头天刚看了书,之前华为od也问了这个问题)资源由某个进程独占,资源被占用后不能被重新取出来,还有什么保持并……稳住?最后一个忘了
网络部分
6. 了解各个协议层对应的机器吗
我:(王道408看了无数次了)从最底层到最顶层来数。物理层,两端口的是放大器或者中继器,多端口的是集线器。数据链路层,两端口的是网桥,多端口的是交换机。网络层,路由器。传输层及以上,不同书上的说法不同,通常来说统称网关,但是有的书上也称之为路由器。某些书上把路由器和网关混为一谈,甚至还有一些书把应用层的网关称为应用层网关。《自顶向下》是有应用层网关这东西的。
7. 选路算法有了解吗
我:这个就很多了,看怎么分。可以按照ISP内部和ISP外部划分,可以按照DV算法和LS算法划分。(还想继续说)
8. 那你说说具体的吧,说一种你比较熟悉的,比方说OSPF
我:OSPF是Open Shortest Path First算法。是一种用于ISP内部的LS算法,用的是迪杰斯特拉算法实现的。(说得很流畅,两次考研这部分都是重点,很熟悉了)
9. 讲讲四次挥手,每次信息传输的状态,和传递的消息
我:四次挥手了解得不多,主要看的还是三次握手
10. 那讲讲三次握手吧
我:客户端发送一个请求,服务器接收后发送一个确认,然后客户端收到之后再发送一个确认。ACK,SYN会在连接的过程中改变。
11. 仔细讲讲具体的,每一次连接的状态
我:(支支吾吾)
12. 讲讲为什么要三次握手四次挥手
我:(支支吾吾)
13. 192.168.1.1/24这个的网络号和广播地址是什么
我:网络号是192.168.1.0,广播地址是192.168.1.255
14. 说说为什么是这样的,讲讲过程
我:这个/24是CIDR化的前缀,至于为什么要用CIDR化的前缀呢,这里是有个历史过程的 。最开始是只有网络号,前面固定位数表示网络号。后面不够用了,就划分了子网号。再后来子网号划分也不够用了,就把网络号和子网号都混为一谈,成为CIDR化的前缀,除了CIDR化前缀这部分以外,其他的都是主机号。
语言部分
15. 说说你用的什么语法(这个问题他前后问了我两次)
我:C++
16. 说说struct和class的区别(之前新华三c驱动开发也问了我这个问题)
我:默认权限不一样,struct和class,一个默认是public,一个默认是private。另外好像class可以方便地继承和派生,然后struct就不行,其他的我就记不住了。
17. const int*和*const int是什么东西(好像是这么写的,我也记不住了)
我:我不知道,就猜猜看吧。const int*是const在前面,说明这个是个常量,而这个常量是什么呢,那就应该是个指向int型的指针。*const int应该是个指针,然后这个指针是个常量。(编不下去了)
算法部分
这个算法真是巨简单,力扣中easy中的easy,就是那种数据结构课上拿来入门的那种。可惜我这几天时间紧张,重点看了计算机网络,而忽视了编程实践。弄得连C++链表的语法都忘了,最后被我朋友说得一塌糊涂。
问题:有两个链表,求两个链表的第一个公共节点
具体解法就不讲了。我问面试官能百度下链表的语法吗,这个我忘了。他说不行。我就只好敲了一堆伪代码。三天后收到消息,确实是挂了。
趣事
工牌厂不愧是工牌厂。刚面试面试官就对我晃晃他的工牌,之前面试的其他公司都没秀过工牌的。好像是在再次确认身份一样。
#字节跳动面试##字节跳动##社招##内推#