面试复盘|字节跳动三轮面试总结

面试复盘|字节跳动三轮面试总结

双非本科艰难求职,昨天终于面完了三面,晚上hr说我过了,写一篇总结一下三轮面试,摘要一些难点。
最近也会把我秋招的复习笔记整理出来,都是面试中遇到的问题。
因为项目每个人写的都不一样,所以我不描述自己的项目相关问题了。

一面20210722

  1. 分库分表?
    这是今年比较常考的问题,他这个时候问我我还不会呢,不过每家都问,我也不能一直不会。
    简单说一下:垂直拆分,按照列拆分。水平拆分,根据id取模,时间,地点分表。
    xdm可以在评论区补充一下这个问题。
  2. time_wait过多怎么办,可不可以不要time_wait。
    我觉得面试官想要的可能是这个答案:timewait快速回收和重用。快速回收:通过修改参数启用快速回收,此时timewait只有一个rto的时间。重用有两个条件,1.新连接的初始序列号比TW老连接的末序列号大。2.如果使用了时间戳,那么新到来的连接的时间戳比老连接的时间戳大。并且同一个ip和端口号的才能重用。
  3. redis的持久化策略。
    这个很常考。我主要从这几个方面说,rdb和aof都是什么,都有哪些策略,是否阻塞主进程,aof的重写,实际使用时怎么用(aof和rdb混合使用)。
  4. 先递增再递减的数组,查出不重复数字的个数。

一面面经,https://www.nowcoder.com/discuss/689084。

二面20210806

  1. 你知道synchronized吗,介绍一下他的原理。
    我就喜欢这样宽泛的问题,这样我就可以源源不断的扯了。首先说个锁升级,这中间就涉及到自旋锁,markword这些东西;然后带出来reentrantlock,说一下reentrantlock的构成和两者的对比,深入到aqs源码级别;然后时两者的wait和notify机制的不同和具体的实现,对于aqs就说一下condition的实现。整个一套组合拳打完,五分钟没问题。
  2. 线程池。
    从线程池的调度入手,解释七个参数分别对应着什么。这个因为我的项目中用到了,所以几乎每一家都会问,背烂了。
  3. 进程和线程的区别,进程间通信方式。
    常考问题。
  4. hashmap的原理,红黑树按照什么排序的?
    主要说一下第二个问题,如果key实现了compareable接口,那可以利用compare排序;如果没有实现接口,根据类名字排序;类名字一样就按照hashcode排序。
  5. 算法:k个一组反转链表,但是要求从后向前k个一组的反转。

二面面经:https://www.nowcoder.com/discuss/699799。

三面20210824

  1. c和Java的区别?
    我自己主动提出了内存泄漏,c语言很容易内存泄漏,Java并不会,因为垃圾收集了,但是也会存在这种情况,比如threadlocal。
    但是我根本不理解c语言的内存泄漏是什么,我只好说一下threadlocal为什么内存泄漏。
  2. 归并排序的空间复杂度为什么On,为什么稳定?
    对于空间复杂度,我说因为每次只开辟一个新的临时数组,用完就释放了,所以最后是On。
    面试官:那你这么说,这个空间复杂度和你使用的语言有关,Java和c还不一样?
    我:。。。。
    对于稳定性,我觉得和写的归并算法有关,然后描述了一遍代码逻辑。
  3. 智力题,nim博弈。算法:90°旋转二维数组。

三面面经:https://www.nowcoder.com/discuss/718027

总结提问

  1. 归并排序的空间复杂度到底怎么说?
    我上极客时间查了一下,原文是这样的:

    实际上,递归代码的空间复杂度并不能像时间复杂度那样累加。刚刚我们忘记了最重要的一点,那就是,尽管每次合并操作都需要申请额外的内存空间,但在合并完成之后,临时开辟的内存空间就被释放掉了。在任意时刻,CPU 只会有一个函数在执行,也就只会有一个临时的内存空间在使用。临时内存空间最大也不会超过 n 个数据的大小,所以空间复杂度是 O(n)。

    确实是释放了,我知道Java自动收集了,但是c语言难道需要主动释放?应该也不是吧?

  2. 分库分表怎么答好一些,实际操作中需要注意哪些点?
    这个我只能零散说几句,这套组合拳怎么打

#面试复盘##面经##字节跳动##校招##Java工程师#
全部评论
真简单
4 回复 分享
发布于 2021-08-25 08:54
恭喜同学加入字节大家庭~感谢干货分享哦
3 回复 分享
发布于 2021-08-25 14:58
大佬,太强了
3 回复 分享
发布于 2021-08-25 08:35
我二面被怼了两个小时怼傻了。感觉楼主问的好简单啊😆
2 回复 分享
发布于 2021-08-25 10:13
想问一下楼主做的是什么项目
点赞 回复 分享
发布于 2021-09-18 23:13
老哥是什么项目
点赞 回复 分享
发布于 2021-09-09 09:25
老哥为啥都这么短呀,其他都在对项目吗
点赞 回复 分享
发布于 2021-09-01 20:35
楼主  有关于redis持久化讲的好的资料么?总感觉自己对redis持久化不太了解  感谢感谢!!
点赞 回复 分享
发布于 2021-08-29 17:43
楼主项目是如何解决的呢,是之前有实习还是自己网上做了开源项目呢?
点赞 回复 分享
发布于 2021-08-29 15:58
大佬们,线程池阻塞队列容量为10w合不合理
点赞 回复 分享
发布于 2021-08-26 21:41
问一下楼主,三面之后没有hr面吗?
点赞 回复 分享
发布于 2021-08-26 15:40
楼主,每一面完多久通知的下一面啊
点赞 回复 分享
发布于 2021-08-26 14:01
 const int rto = (icsk-> icsk_rto << 2)-(icsk-> icsk_rto >> 1); // tw_recycle开启后在 3.5*RTO 内回收。 define TCP_RTO_MAX ((unsigned)(120*HZ)) // rto最大为120s define TCP_RTO_MIN ((unsigned)(HZ/5))      // rto最小为200ms 因此,tw_recylce开启后TIME_WAIT将在3.5*RTO内进行回收,RTO的时间范围不定,在200ms~120s之间
点赞 回复 分享
发布于 2021-08-26 10:05
真的不难 完全的基础题目
点赞 回复 分享
发布于 2021-08-26 08:43
想问下字节一面 内推挂了 没怎么准备 上来 SQL 就忘了 能有复盘希望么? 有的话 再次内推🤣
点赞 回复 分享
发布于 2021-08-26 01:17
    private void mergeRange(int[] nums, int left, int mid, int right, int[] tempArray) {         int i = left;         int j = mid + 1;         int tempIndex = 0;         while (i <= mid && j <= right) {             if (nums[i] < nums[j]) {                 tempArray[tempIndex++] = nums[i++];             } else {                 tempArray[tempIndex++] = nums[j++];             }         }         while (i <= mid) {             tempArray[tempIndex++] = nums[i++];         }         while (j <= right) {             tempArray[tempIndex++] = nums[j++];         }         tempIndex = 0;         for (int k = left; k <= right; ++k) {             nums[k] = tempArray[tempIndex++];         }     } 可以复用tempArray,所以是O(n)空间复杂度
点赞 回复 分享
发布于 2021-08-25 22:24
大佬!
点赞 回复 分享
发布于 2021-08-25 22:05
大佬之前在哪里实习的啊
点赞 回复 分享
发布于 2021-08-25 21:49
沾沾喜气,19号三面结束,许愿意向书
点赞 回复 分享
发布于 2021-08-25 21:11
恭喜大佬,希望我也可以拿到一份offer
点赞 回复 分享
发布于 2021-08-25 20:59

相关推荐

牛客845590724号:单学校就够拷打了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
41
277
分享

创作者周榜

更多
牛客网
牛客企业服务