字节跳动 后端面经
今天刚过的二面,下周五三面写个面经攒攒人品
=======================================
一面
上来先自我介绍,问了项目职责的一些问题。对于自学的电商秒杀项目问了些业务逻辑实现的问题。
1. TCP/UDP的区别,答了连接可靠新和报文的冗余度。又问了下应用场景
2. 问了Java的垃圾回收器,介绍了串行和CMS然后说可以了
3. 问了下MySQL的隔离级别,回答的时候特别引导了下MVCC,下个问题果然就是MVCC的实现。从头到尾介绍一遍
算法
1. 二叉树的Z字形打印,经典老问题。没有让用输入输出,自己写TreeNode然后建个树。测试通过
2. 还有时间,下一题。一个图里面检测有没有环,开始看成链表了想快慢指针,提醒之后直接DFS回溯+set判断。基本边写边说思路,面试官有疑问解释了下,最后认可了方案。
反问环节
1. 面试评价:不方便透露,等下要梳理一下
2. 业务:音乐部门,做海外那个啥APP的
3. 使用技术栈:golang(难怪感觉java的部分他也不怎么清除),微服务+云
======================================
二面
首先自我介绍,因为我是通信专业的所以问了下通信项目做的哪一个网络层次。我回答是物理层的,以此为开端开始继续
1. 物理层的协议有些啥,因为做移动通信就举了一些3GPP标准和IEEE协议
2. 传输层主要职责
3. 传输层有没有IP地址参与,这个答的不好,似乎校验和那块需要IP伪首部
4. 看项目有用Redis和SpringBoot,掌握程度如何?不敢说掌握很好,只能举一下我知道哪些东西,什么单线程模型、持久化、主从同步、读写分离、SpringBoot的自动装配啥的
5. 那就聊聊Redis的线程模型,说了Reactor模型和相关的知识,扯到了底层的实现
6. 再问一个问题吧,进程之间能不能共享逻辑和物理地址,当然可能有相同的逻辑地址,共享物理地址我说可以共享内存资源,比如共享内存。感觉给自己挖坑了哈哈
7. 共享内存的使用场景,这真的不熟,只能扯用过Netty,知道调用epoll时候使用的是共享内存。Linux里有mmap和sendFile支持。
算法
在一个数中去掉8个数,使得剩下的数字最小。这个后来看在leetcode有原题https://leetcode-cn.com/problems/remove-k-digits/
我开始有点懵,说回溯dfs能做,但是复杂度很高。面试官让我算下复杂度,实际就是穷举所有可能,用排列组合算下是O(n!)的复杂度
临时加问,和O(2^n)复杂度比哪个高,想一想就行了。
最后我自己摸出来一个O(n)的复杂度的方法,说完以后面试官觉得如果不是去掉8个而是k个就变成O(kn)了,同意,面试官表示小火汁回去再想想最优解
然后看还有时间,就来个智力题吧:如果你加入字节,每年涨薪20%,多少年后涨到2倍
我上来直接求log解出来,面试官表示小火汁你不讲武德。让我想程序怎么做。我就说遍历呗,数值又很小。然后加附加条件,不是求离散值的几年,而是2.34523这种年份。
答:因为(1.2)^n单调递增,那么找到一个i使得(1.2)^i < 2,再找一个j使得(1.2)^j > 2。然后开心二分法。相当于一种插值算法。面试官似乎挺惊讶,说可以。但是回去可以了解下能直接估出来的方法。
经典反问环节
我当时有点虚,问了下建议。结果反馈说我思路挺对的,建议是答题扩展别太多突出重点,最后又补了句我扩展多但是说的倒挺对的(笑)。
感觉总体上和一面很不一样,常有些神经刀的问题,还是挺有意思的一次面试。