恭喜发现宝藏!微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。
作者@TechGuide【全网同名】
点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝
你好呀,我是番哥,今天和大家分享一下之前霸屏牛客热榜几天的的双非本科进字节的面经,非常详尽,读来有很多收获。
字节面试的特点想必大家都知道,热衷算法题,没事来一道智力题出来遛遛(虽然现在美团好像也开始好这口了),所以不提前准备准备多多少少有点猝不及防,新鲜热乎的面经刚好可以拿来学习一下。其实看别人的面经,很多人会觉得这些题目自己都会呀,如果碰到一样的题我表现得比他还好,但实际情况是,面试表现除了考察八股文之外,很多时候面试官(尤其是字节面试官)会引导候选人,在这个过程中考察候选人的逻辑思维能力和语言组织的能力。所以,面试也是门学问,如何将操作系统零拷贝原理像讲故事那样娓娓道来,如何将https协议结合加解密算法讲的逻辑自洽,清晰明了是很值得思考的,但是毋庸置疑的是,越面肯定越有感觉,恕我直言,面到最后,你都能有感情的背诵了,所以总结起来一句话,不要虚,上!
一面
-
自我介绍
-
字节实习项目相关
-
为什么要用阻塞队列?
-
线程池,核心线程数 max_thread的关系
-
项目 难点
-
数据库分库分表?没做过,通过id哈希分表吧
-
什么情况下需要分库分表,多大数据量?为什么?也不懂,我说一千行,他说怎么算的,我记得通过磁盘页算出来的,具体忘了。
-
联合索引和主键索引区别
sql题:
- 有readerid,bookid,tagid,查出指定bookid最热门的10个标签,readerid越多,越热门
我的答案是这个: select tagid from tb where bookid=1 group by tagid order by count(readerid) desc limit 10
-
redis 持久化AOF
-
怎么防止数据丢失,我说同时采用aof和rdb
-
跳表zset底层原理,两种结构
-
zset如何通过Key找score,不知道,异想天开的说了
-
TIME_WAIT状态连接过多的分析与解决,能复用链接吗?没了解过连接复用。2msl可以没有吗?感觉他的意思说可以没有。
-
TCP连接状态详解及TIME_WAIT过多的解决方法 - 沧海一滴 - 博客园
-
http怎么保证长连接, keep -alive
算法题:
数组先递增再递减,查出不重复数字的个数。{1,2,4,6,8,3,2,2}返回6,六个完全不一样的数字。
说了一个时间On,空间On的,这个大家都能想到,直接hashset,还可以优化空间。当场确实没思路,面试官给了点思路,才写出来。 leetcode 都没有原题,着实麻烦
二面
-
自我介绍
-
为什么没在飞书转正
-
Synchronized的原理(5min)
-
用过线程池嘛, 线程里面的任务抛出异常,线程会怎么样?这里不清楚, 百度 之后:实际上线程池会销毁这个线程创建一个新的。
线程工厂是做什么的?这个也没具体用过,只说了能自定义线程id,名字。他说还有别的功能吗? -
redis 用过吗。只用过Key-value,还有其他的吗?我说了解过分布式锁一些的实现,也没接着问。
-
进程和线程的区别
-
进程间通信方式
-
共享内存有什么注意点?我回答是并发处理。这里我直接讲了一遍线程之间并发处理的过程,volatile和mesi。
-
复制粘贴操作系统都做了啥?复制文本是复制到缓冲区,复制文件是只复制路径。
-
排序算法 ,时间复杂度,空间复杂度,是不是稳定的。这里就是自我发挥,我说了冒泡,快排,归并,堆 排序 ,桶 排序 的过程,时间,空间,稳定情况。
-
Hashmap和treemap了解嘛。不知道treemap,只说了hashmap。
-
红黑树 排序 依据?如果key有实现comparable接口,那么就用compare方法,否则就按照类的名字 排序 。
算法题:
n个一组 反转链表 ,但是是倒序的。也就是说1-2-3-4-5,k=2结果是1-3-2-5-4
也写出来了,先求了一边长度,看看剩几个,再进行反转。而且自己写输入输出,所以我只测试了样例数据,过了就过了,也没让我测别的数据。
三面
-
自我介绍,聊实习 项目
-
大学学了什么课程
-
. c和Java的区别是什么
-
Java的内存泄漏是什么,threadlocal为什么内存泄漏
-
归并 排序 时间复杂度,空间复杂度,空间为什么是On,为什么稳定。
算法题 :
90°旋转二维数组
智力题:
两堆苹果,一堆七个,一堆十个,你先拿,谁拿完最后一个就输,问你是必赢,还是必输,还是不确定。
解法:
很多人都在私信问我智力题怎么算,我说一下思路。
这是nim博弈的简化版,可以了解一下。
解题思路可以用dp,二维数组,dp[i][j]表示第一堆苹果剩i个,第二堆苹果剩j个。
那么很显然dp[0][0]=true,也就是我们赢。
大家可以推导一下整个dp的变化规律,会发现两堆都大于2的时候,i=j的时候,先手必输。
举个例子来说,dp[5][5]=false,取决于dp[0][5],dp[1][5],等等,也就是我每次取n个,n>1时,对方的状态。
所以最开始两堆苹果不相等时,7,10为例,我先拿走三个,变成7,7。
另一个人无论怎么拿,我都保证两堆相等就可以。
番哥觉得字节还挺喜欢考智力题的,这种题目通常比较考研灵活的思维和逻辑思考能力,而且现在大厂好像都喜欢在三面或者hr面来这一套。小伙伴们如果需要的话,我可以周末肝一份智力题合集出来,大家可以支持一下,点赞越多,更新越快哈~