【面经】字节抖音电商-后端开发(社招)

一面
1.开头没有自我介绍,直接开始问项目了,问了比如 常用的 Web 组件有哪些(回答了自己经常用到的 SpringBoot,Redis,Mysql 等等,字节这边基本没有用 Java 的后台,所以感觉面试官不大会问 Spring,Java 这些东西,反倒是对数据库和中间件比较感兴趣)Kafka 相关,如何保证不会重复消费,Kafka 消费组结构等等(这个只是凭着感觉和面试官说了,因为 Kafka 自己确实准备得不充分,但是心态稳住了)Mysql 索引,B+树(必考嗷同学们)
2.还有一些项目中的细节,这些因人而异,就不放上来了,提示一点就是要在项目中介绍一些亮眼的地方,比如用了什么牛逼的数据结构,架构上有什么特点,并发量大小还有怎么去 hold 住并发量
3.后面就是算法题了,一共做了两道判断平衡二叉树(这道题总体来说并不难,但是面试官在中间穿插了垃圾回收的知识,这就很难受了,具体的就是大家要判断一下对象在什么时候会回收,可达性分析什么时候对这个对象来说是不可达的,还有在递归函数中内存如何变化,这个是让我们来对这个函数进行执行过程的建模,只看栈帧大小变化的话,应该有是两个峰值,中间会有抖动的情况)
二分查找法的变种题,给定target和一个升序的数组,寻找下一个比数组大的数.这道题也不难,靠大家对二分查找法的熟悉程度

二面
1.二面一上来就是先让我自我介绍,当然还是同样的套路,同样的香脆
2.问了我一些关于 Redis 的问题,比如 zset 的实现(跳表,这个高频) ,键的过期策略,持久化等等,这些在大多数 Redis 的介绍中都可以找到,就不细说了。
3.还有一些数据结构的问题,比如说问了哈希表是什么,给面试官详细说了一下java.util.HashMap是怎么实现(当然里面就穿插着红黑树了,多看看红黑树是有什么特点之类的)的,包括说为什么要用链地址法来避免冲突,探测法有哪些,链地址法和探测法的优劣对比
4.后面还跟我讨论了很久的项目,所以说大家的项目一定要做好,要有亮点的地方,在这里跟面试官讨论了很多项目优化的地方,还有什么不足,还有什么地方可以新增功能等等
5.一边讨论的时候噼里啪啦敲了很多,应该是对个人的面试评价一类的
6.后面就是字节的传统艺能手撕算法了
一二道是连在一起的.给定一个规则S_0 = {1} S_1={1,2,1} S_2 = {1,2,1,3,1,2,1} S_n = {S_n-1 , n + 1, S_n-1}.第一个问题是他们的个数有什么关系(1 3 7 15... 2 的 n 次方-1,用位运算解决). 第二个问题是给定数组个数下标 n 和索引 k,让我们求出 S_n(k)所指的数,假如S_2(2) = 1,我在做的时候没有什么好的思路,如果有的话大家可以分享一下。7.mvcc怎么实现的8.explain命令关注哪些9.redis分布式锁10.redis如何批量查找11.scan的时间复杂度12.事务1:upate A set a = 2 where a = 1事务2:update A set a = 3 where a=1 事务2提交了事务1 能执行吗13.最长公共子序列  二面的问题难度高了很多。。redis的批量查找回答了keys和scan,大佬们知道其他的吗?sql那个问题大家觉得能执行吗?


HR面1.觉得前几轮面试怎么样2.为什么一年不到就看机会3.公司的业务方向是什么4.现在部门的架构是怎么样的5.现在面了哪些6.期望薪资是多少



总结1.基础很重要!这次准备到的 Redis,Mysql,JVM 原理等等都有问到了,(网络这一块没问,但是也是要好好准备的,对于后台来说,网络知识不仅仅是面试,还是以后工作的知识基础).当然自己也有准备不足的地方,比如 Kafka 等中间件,只会用不会原理是万万不行的.并且这些基础知识不能只靠背,面试官还会融合在项目里面进行串问 2.问到了不会的不要慌,因为面试官是在试探你的技术深度,有可能会针对某一个问题,问到你不会为止,所以你出现不会的问题是很正常的,心态把控住就行. 3.无论是做题,还是回答问题的时候,牢记你不是在考试,而是在交流,和面试官有互动和沟通是很重要的,你说的一些疏漏的地方,如果你及时跟面试官反馈,还是可以补救一下的
4.最重要的一点字节的面试就是算法一定要牢固,每一轮都会有手撕算法的,这个不用想,LeetCode+剑指 Offer 走起来就对了,心态很重要,算法题不一定都是你会的,要有一定的心理准备,遇到难题可以先冷静分析一波.而且写出Bug free的代码也是很重要的,我前面的几题算法因为在牛客网上进行面试,所以要运行出来.


#面经##社招##字节跳动##后端开发#
全部评论
楼主Base是哪里啊?
点赞 回复
分享
发布于 2021-08-10 22:32
1面的第6题 数组n,索引k, 如果k = (2的(n+1)- 1)/2,说明就在中点,即 n +1 若大于,则说明落到了 S(n-1)的区间,需要根据k换成 其内的index 若小于,则说明落到了 S(n-1)的区间,索引不需要改变 不管大于还是小于 n都要-1,循环这个步骤判断,最终的话没有落在某个中点,那都会收敛到S(0),值也就是1了 public int getNum(int n, int k){         while (n > 0){             if (k == ((int)Math.pow(2, n + 1) -1)/2){                 return n+1;             }             else if (k > ((int)Math.pow(2, n+1) -1)/2){                 k = k - (int)Math.pow(2, n);             }             n--;         }         return 1;     }
点赞 回复
分享
发布于 2021-08-12 19:41
联想
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
上来算法题:二叉树转双向链表然后让我介绍了一下之前的实习,根据之前实习的内容拷打八股。 1. 你用MongoDB做了什么,为什么用MongoDB,MongoDB有什么优点? 2. 是因为MongoDB对点边数据结构有什么优化吗? 3. 那MongoDB和MySQL的索引有什么差异? 4. 那MySQL有没有字段索引? 5. 你刚提到了主键索引,那主键索引和字段索引有什么区别? 6. HTTP/2和 HTTP/1.1有什么区别? 7. 具体讲讲多路复用 8. 多路复用具体解决了HTTP1.1中的什么问题? 9. 多路复用是在TCP协议中的优化吗?10. IO中也有多路复用,讲一下Linux中的多路复用IO?(应该讲select、poll和epoll,但这里我还没背,这里我讲的java的NIO)11. NIO解决了什么问题?12. 能解释一下异步IO吗?13. Go语言有什么特点?(我只是说我最近开始在学Go,但没背过Go的八股)14. 为什么Go对高并发友好?你知不知道协程?15. 那聊点别的,操作系统如何管理内存?16. 内存程序之间是怎么做到隔离的?17. 不同程序之间的虚拟地址是互相独立的吗?18. 在一个很大的数组找到前K个大的数,怎么做比较好?19. 讲一下session20. 那么服务器怎么知道是谁发送的cookie呢?cookie和用户如何对应?反问环节,问问业务和流程就结束了
点赞 评论 收藏
转发
3 51 评论
分享
牛客网
牛客企业服务