9月6日字节跳动后端开发(技术中台)一面面经
热身
2、别的语言感兴趣吗?特别大概率转Go,除非特殊需求用到Java以外,进字节都是用GO的。(没想到这么开门见山)
通用语言基础
3、深拷贝和浅拷贝?对象实现深拷贝应该怎么做?如何做到即使新增字段也不用修改深拷贝方法?
4、类中的静态变量和实例变量的区别?类A有三个实例,他们相等吗?
5、程序运行时的堆区和栈区,它俩有什么区别?类A的三个实例,这三个对象放在哪?
操作系统
6、进程和线程的区别?
7、两个线程交换数据和两个进程交换数据,哪个比较简单一些?
8、进程间通信有哪些方法?
9、死锁是怎么产生的?给你A、B两个进程,给你两个互斥资源,模拟一下进程死锁?
网络原理
10、TCP和UDP的区别?为什么UDP更快但不稳定?怎么样理解TCP的稳定性?(这个是我给自己挖的坑)TCP怎么保证数据不丢不错?UDP有校验和吗?
11、服务端接受客户端的请求,分配端口跟客户端通信,然后有一天被告知端口被分配完了,检查发现,这些端口都处于close-wait的状态,这个状态是怎么产生的?考虑代码错误的话,因为哪一步没做,导致close-wait状态?
12、网桥工作在哪一层?(数据链路层)网桥端口连了很多主机,刚连接上主机,收到一条信息,要去某个MAC地址,网桥应该怎么做?(尽力转发,广播)总不能一直广播吧?(自学习,转发表)
算法和数据结构
13、你知道的排序算法有哪些?(十大排序算法)
14、说一下快排算法思想?一次操作时间复杂度是多少?快排算法本身的时间复杂度?最坏的时间复杂度?什么情况下复杂度最坏?有什么办法让O(n^2)的情况下尽可能少的出现?
编程题
15、最长连续序列
-
给定一个未排序对数组,返回这个数组最长的连续序列的长度
输入:[100,4,200,1,3,2]
输出:4 (最长连续序列是 [1,2,3,4])
思路:刚开始说排序,然后遍历对比,时间复杂度为O(nlogn)。在面试官循循善诱下,想到用set去重以后,再遍历。遍历到100,移除set,找99是否存在,找下去;然后找101是否存在,找下去,对比最大值。由于set的add、contains、remove等方法的时间复杂度都是O(1),最后时间复杂度降为O(n)。
#字节跳动##面经##后端开发#