秋招总结02:字节(已意向)
我的23届秋招基本上也快接近尾声了,后面开的大厂 估计我也没有啥资格去竞争了, 对自己的能力还是有清晰的认识的。所以准备开这个帖子把自己三个多月的面试经历都整理一下,算是做个总结把。
本人基本情况是双非本,985硕,非科班、无实习。这些全让我占了,没有实习真的对于今年来说太难受了。真的今年秋招太难了,特别是成都应届生,今年八月份一个月真的是经历了太多了:高温、限电、疫情、地震。真的太难了。
三个多月来大大小小公司投了三四十家公司,给了我面试机会的就十多家,基本上给了面试机会都走到了终面了。就包括有大华、禾赛科技、景嘉微、联发科、中兴、深信服、字节、百度、米哈游、小米、海康威视、华为等。唯一二面挂了就是百度,(运气不好出了个极度偏门的题目+已经过了80%样例但是面试官死磕然后挂了)。
目前情况
已收到offer:联发科、中兴、景嘉微、深信服
已收意向待开奖:字节、米哈游、禾赛科技
面完泡池子中:华为、小米、海康威视、大华
字节后端开发一面 7.28 1h
1、自我介绍
2、介绍项目,做这个项目原因
3、项目中表结构的设计?
4、通信的协议是什么?群聊是如何实现?群聊这个模块聊了很久 实际设计起来很复杂 (20min)
- 面试官指出了我设计的不合理处,千人聊天性能会有很大性能瓶颈,后续再聊如何进行优化,涉及到了如何做数据落盘保证数据可靠传输、群聊数据如何存储? 群聊的表该如何涉及? 群聊场景下转发是否合理?消息队列如何实异步处理群聊消息。面试官逐步引导深入的。
5、手撕算法: 大数相加
做完题目继续问八股 25min+
6、tcp三次握手和四次挥手过程?
7、udp和tcp区别?
8、如何把udp改造成tcp一样的可靠的通信方式
9、进程和线程的区别?
10、redis的数据结构?
11、redis的大key
11、mysql的innodb的数据结构?
12、mysql的事务四大特性?
13、事务的隔离级别有哪些?
14、c++堆和栈的区别
15、c++中内存回收机制
16、如何用一个数组实现一个队列?设计的结构体需要哪些成员变量?
17、如果初始队列长度为10的话,数组长度需要多大? -- 11
18、哈希表如何实现?使用拉链法,当数据量大了,链表变长了,该如何优化?(红黑数/rehash)
19、rehash扩容的过程
字节后端开发二面 8.4 50min
1、项目介绍
2、说一下发一条消息的整个流程
3、你项目的提高并发是怎么做的?
4、提出来新需求要求实现,已读未读如何实现?未读数存在哪里?(mysql上) 说一下表结构大概会怎么设计?怎么判断他已读,以及如何整个的设计流程?
5、已读未读数定义成全局变量存放再内存中,如果服务器宕机了,数据不就丢失了吗?
我的回答是因为存储了所有的消息,因此即使宕机了,我们只需统计一下我们的数据表的信息,重新把已读未读数统计出来。
6、群聊的人数上限是多少?为什么只设置100的上限?
7、说一下你整个rpc项目怎么来调用的, 怎么实现的?
我把项目介绍说了一遍,中间介绍到服务注册中心模块时面试官就打断了我
8、问我什么时候去把服务注册到zk上?我回答先把rpc服务注册到zk上之后才会打开我们的网络模块
9、再问另外一台服务上线后怎么去zk上面去找的,如何知道这台服务?
10、rpc与http的区别?
11、项目中碰到的难点?
12、布隆过滤器?
13、一致性哈希 --说了很多面试官打断了我,说get到点了 不需要继续说了
14、红黑树比平衡二叉树的优势?
15、项目中MQ用到了吗?了解kafka这些吗(不了解)
16、分布式锁如何实现?--面试官又继续打断了我扩展
17、redis的过期机制?
18、redis的大key有了解吗?
19、mysql的间隙锁?
20、比如表里只有100条数据,我select id大于5, 会加间隙锁吗?--我答成自增主键严格递增了 不会加间隙、
面试官又换了一个说法,表里面是两个字段:id和age, 当select age>5的时候会加间隙锁吗?
我回答会加间隙锁, 他说那如果加间隙锁后续成千上万查询不都的等着吗?严重影响效率我后面反应回来 是不会加锁 需要使用select where age > 5 for update; 需要加上update 关键字
21、说一下undu log和redo log?
22、sql题: 查询被两个用户以上听过的歌曲 (5min)
如何区分不同的人
手撕环节: 有序数组,查找两两组合成x的对数,有重复数字,需要统计到一起(10min)
{-3,-3, 0,1,2,3,3} x=0;则对数有4对。
小插曲 憨憨行为:样例输错了调了十分钟,思路对的怎么结果不对,后面发现样例输错了,导致结果对不上
22、反问环节
二面完立刻约了三面, 但后续面试官说是出差又调换了时间。
字节三面面经 8.12 1 h
1、自我介绍
2、进程和线程的区别
3、单进程多线程的环境下, 三个线程协作,交替打印1-n个数字如何实现;
4、你notify的时候是指定线程还是所有线程? 你是如何保证对应线程抢占到锁(条件变量,面试官估计开始没听我怎么设计的)
5、极端境况下 线程2一直抢占不到锁 该怎么处理?
- 线程饥饿-两种方案:1)sleep 2)加双锁
6、socket实现一个tcp连接如何实现?
7、基于刚刚server 如果两个请求过来,如何实现? io复用+reactor模型 引入了c10k问题
8、reactor模型具体实现是怎么处理的?是多进程还是多线程?
- 介绍了muduo中one loop per thread的这个架构
9、一般开多少个线程?
10、如果真的有10k个连接过来,每个线程处理请求时串行处理还是并行处理?每个工作线程具体执行的任务是什么任务?
- 讲了下集群聊天服务器中如何实现的
11、任务队列顺序处理有可能会出现前面任务执行时间太久 导致后面任务都已经超时了,该怎么处理?
- 设置最大工作时间,超时则丢弃
12、操作系统的内存分配过程?
- 答了malloc实现,面试官说让我说操作系统的底层是怎么实现的 我把从虚拟内存到物理内存的访问都说了一遍 - 页表查询-缺页中断 内存回收(swap机制) -oom机制都说了一下
算法题环节:先讲思路在写题
1、下一个排列( 三分钟秒了)
2、奇偶排序-需要自己定义节点结构体, 自己输出结果 (写了十多分钟)
13、身边有哪个人是你值得学习的,是你的榜样?
14、你对自己的规划是什么样子?
反问环节
三面完立刻就约了hr面
HR面:8.15 30min
就是简单聊学习生活
#23届提前批##23届秋招##字节跳动##C++工程师#