字节一二面凉经
第一次在牛客上写面经,因为自己也看了很多别人的面经,所以也写一下分享给大家参考一下。
一面
项目
1、简历上的项目问了10多分钟。
C++
2、虚函数的实现原理。
3、多继承时,虚函数表的个数、虚函数表指针的个数。
4、多继承时,会出现什么问题以及怎么解决。
5、子类重写了父类的虚函数,那强制转换为父类时,是怎么找到父类的虚函数。
6、epoll、select、poll的区别。
7、epoll的实现原理。
8、epoll的水平触发和边缘触发的区别。
计算机网络
9、TCP的流量控制10、为什么有了流量控制还有拥塞控制。
11、介绍拥塞控制算法。
操作系统
12、进程和线程的区别。13、内存空间布局。
14、一个进程独立的4G虚拟地址空间,那Linux是怎么防止一个进程去访问另一个进程的内存空间。(类似于游戏中的外挂、修改器之类的,如何去防止和发现外挂)
算法
leetcode31 下一个排列,做完让用二分优化了一下。
体验
总体感觉很不错,问的都是一些常见的八股,面试官会循序引导,反问的时候也被夸基础很不错,建议可以去学学redis、mysql这些数据库。
过了半个小时就约二面了。
二面
上来先问有没有实习经历,说了没有之后很失望的样子。
然后问为什么没有去实习。
然后问我可以实习多久。???我投的提前批啊,不是实习啊。
数据结构
1、说一下了解的数据结构以及特性。
2、如何用栈实现一个队列。
3、怎么判断一个链表有没有环。
当时说了快慢指针、面试官问还有呢?
然后想了下哈希表也可以,面试官又问还有呢?
再想,递归也能判断,面试官又问还有呢?
除了这三个方法没想出其他的,面试官好像很失望,但我真不知道了,其他两种都是现想的,知道的小伙伴可以留言。
4、为什么快指针和慢指针一定就能够相遇。
5、求出慢指针和快指针相遇的时候走了多少步。
给定链表长度为m,不是环的部分是n,用数学表达式写出慢指针走的步数。
6、B树和B+树的区别。
当时说的是数据库中B树和B+树的区别,面试官说我问的是数据结构中的区别,不是数据库中的区别。
操作系统
7、进程和线程。
8、介绍有哪些锁。
9、怎么实现互斥锁?
10、怎么实现信号量?
11、怎么实现读写锁?
12、怎么实现自旋锁?
项目
13、介绍了高并发内存池的项目。
针对项目开始轮番轰炸,问了很多问题,答得不好,有点紧张,所以介绍项目和回答问题的时候思路很乱,很多都没表达清楚,所以大家一定要对简历中写的项目很清晰,以及介绍的时候语速慢一点,不要紧张,把自己知道的有条不紊的表达出来。
算法
leetcode56 区间合并
本来前面被怼得很惨,心想终于出了道常规的算法题可以抢救一下,但事实证明我太天真了。
先让介绍思路,然后就说了最常见的先排序然后再遍历合并的方法,然后被问还有没有其他方法,没想出来,然后面试官就让先写。
很快就写完了,也没问题。但是面试官就很不满,直接就说你给我一种是刷题刷出来的感觉,这道题是一道很经典的算法题,有很多种解法,但是你却只知道一种。
反问
问有哪些需要改进的方面?
1、没有实习经历是很大的劣势,现在有很多大一大二的都取实习的,你快研三了都没有实习经历这个很难,尽量多去实习。
2、面试的时候有点紧张,回答问题的时候有很明显的背书迹象,回答之前先思考,不要急着回答,比如回答项目的时候给我一种很乱的感觉,有很多东西都没表达清楚。
那如何增加实际项目开发经验?
3、多去看github上面一些项目,看看别人是怎么做的,你可以怎么进行改进。
4、找一位有经验的前辈带你。
体验
1、这一面的面试官很明显是个技术大佬,回答问题的时候,像有些问题我不太确定的,用了"应该"这样的字眼,直接就打断我说,不要用“应该”。
2、然后问一个问题,会一直拓展得很深入,上面提到的这些问题,每一个基本都拓展的很深,因为拓展部分很多不会,所以也忘了拓展问了些啥了。
包括上面提到的链表判断环和区间合并,一直问其他的方法,所以大家做题的时候,不要只是通过了就行,多看看leetcode一些点赞高的题解,看看别人的思路,今年这卷的程度不是算法做出来就能过了,会让你写多种解法。
3、面试的时候紧张不可避免,但大家一定不要慌,一慌就容易表达不清楚,这给面试官感觉很不好,建议大家私下多练习如何介绍项目,并且多准备几个版本,比如简略的介绍和详细的介绍,突出项目每个部分是如何实现的,该部分的难点,以及你是怎么解决的。
过一个小时就收到感谢信了。蓝瘦香菇。