恭喜发现宝藏!微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。 作者@TechGuide【全网同名】 点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝
- 一面:
- 候选人A: 1h10min(8.6)
- 候选人B: 86min
- 二面:
- 候选人A: 45min(8.9)
- 候选人B: 45min(8.9)
- 三面:
- 候选人A: 45min (8.11)
- 候选人B:
-
自我介绍
-
问项目,问有没有什么高并发的操作(并没有)
-
问使用过redis没有(并没有),redis使用场景,特点(扯到了淘汰算法)
-
那现写一个lru算法吧(先用linkedlist和hashmap写出来了,然后面试官让用linkedhashmap写一个,然后我卡在移除节点上,后来面试官指导用迭代器写出来了)
-
讲讲JVM的各种GC算法
-
标志整理算法如何判断结点存活?然后举例比如A指向B,B指向A。(不知道)
-
问了s’y’nchronized,lock,和volitale的底层实现和一些细节
-
线程池参数,添加线程池流程,还有几个细节问题
-
如何判断select的sql语句是否命中索引
-
Explain有什么用
-
索引的结构,B树和B+树区别
-
反问
面试岗位:C++/GO/PHP研发工程师 面试部门:搜索技术平台研发部
- MySQL索引如何实现?
索引底层是用B+树实现的,B+树非叶子节点存储的都是索引,只有叶子节点才存储真正的数据,并且叶子节点用链表连接起来,主要是方便范围查找。
- B+树与红黑树有什么区别?为什么MySQL索引不用红黑树?
经典八股文,我竟一时想不起来,沉默了一会儿我说忘记了,面试官继续下一个问题。
- 谈谈你对I/O多路复用的理解?select与epoll有什么区别?
项目中有用到I/O多路复用,所以问了。
- 实习项目中的解耦与优化具体是做了什么?
我是接手的一个QT项目,之前的开发人员把所有功能函数全都写在一个mainWindow文件中了,导致文件很臃肿,改起来很累,于是我把每个页面单独拆分成一个文件,函数根据功能分成字符串处理类、I/O类、按钮功能类等等,根据类拆分到不同的文件中,这样就是解耦了。
- 聊天室项目最大的难点是?以及一些实现细节?
网上找的一个很简单的项目,总共只有六百行代码,基于命令行的项目。之前面试的时候面试官都不屑于问我项目相关的东西,没想到这次终于问了,结果因为太久没复习了,答得不是很好,项目具体用了哪些数据结构都记不清了。
- 介绍快排原理?
首先快排是不稳定排序,因为它是通过交换元素来实现的,接着说了快排实现原理,这里就不详细展开了,然后说了快排适用于完全乱序的序列,不适用与基本有序或基本逆序的序列。
-
介绍虚函数? 虚函数是为了实现C++的多态性,运行时多态。在基类中声明一个虚函数,在其派生类中重写该函数,在程序运行时就可以根据指针所指对象的类型来调用对应的方法,而不是根据指针本身的类型来调用方法,这是虚函数的一个用法;
-
一个大文件中存了很多URL,如何找出相同的URL(应该是问找出重复出现过的URL)?
一般来说遍历文件对每个URL建哈希表,就可以得出重复出现过的URL。但是对于大文件,有可能几十甚至几百个G,不可能对其建哈希表,因为内存放不下,像这种大文件数据处理首先是要想到分而治之,将其拆分成若干个小文件,具体拆分成多少个,取决于文件大小以及所给内存大小。比如我要拆分成1000个小文件,先遍历整个大文件,对其中每个URL做哈希计算,或者其他单向散列算法,计算出一个数值,将这个值对1000取模,最后得到的值作为小文件编号,该URL存入此编号的小文件,因为是单向散列算法,所有的URL都会较均匀的分布到这1000个小文件中。又因为相同的URL计算出来的散列值相同,所以相同的URL必定会分到同一个小文件内,这时只要逐个遍历小文件建立哈希表就可以得到相同的URL了,因为小文件的话内存是能够装下的。
在函数中能返回局部变量的地址吗?返回后在main函数中是否能根据此地址取到该局部变量的值? 不能,因为局部变量在函数返回后就销毁了,再到它的地址去取值是没有意义的;
- 追问:为什么局部变量在函数返回后会销毁?
我想是因为局部变量是存储在栈上的,栈空间由系统来分配,当局部变量离开作用域,其内存空间就会自动被释放,只有用new或者malloc分配在堆上的空间才是不会被自动释放的。
- 你目前还面试了哪些公司?
秋招的话,百度是我第一家面试的公司,目前还没有面其他公司。
- 算法题部分
手撕反转链表 手撕约瑟夫环问题 内存管理算法LRU思路
- 反问环节
-
自我介绍
-
Try catch finally执行顺序
-
类和方法的区别(我直接问号)
-
讲讲静态的方法,静态类的特征
-
Jvm gc收集器 收集算法
-
创建多线程有哪几种方法
-
问了s’y’nchronized,lock,和volitale的底层实现
-
线程池参数,添加线程池流程
-
讲讲联合索引
-
如何判断select的sql语句是否命中
-
Explain后执行计划中的不同type的性能区别 从高到低说说
-
索引手画索引结构,并模拟插入过程
-
算法判断链表有环
-
算法找到有环链表的入口
-
写一个单例模式
-
反问
因为和一面有些类似的问题所以答得挺流畅,题目也都做过所以很快就结束了。
候选人B: 45min(8.9)-
介绍项目
-
Zookeeper的节点有几种类型?临时顺序节点有什么应用知道吗
-
Zookeeper是怎么保证其高可用的,听说过zab吗?
-
Redis怎么设置分布式锁
-
锁续期不好使了怎么办,怎么能尽可能减小损失
-
Tcp三次握手四次挥手
-
Tcp的半连接队列知道吗
-
上述半连接队列满了怎么办,syn cookie知道吗
-
Csrf知道吗,知道的话说说怎么处理
-
Raft算法知道吗
-
现在在学什么技术?
-
Mysql范式讲一讲
-
Mysql事务说一下
-
Mysql事务能应用到分布式吗
-
算法(双向链表的反转)
-
算法(和最大连续子数组)
-
反问
-
自我介绍
-
聊项目
-
从项目问到和人协作的问题
-
聊人生
-
反问
候选人感想:总的来说三次面试体验非常好,流程很快,面试官很有耐心,说错了也会安慰说没关系,许愿还有后续呜
候选人B:面试岗位:java后端开发 面试部门:百度基础架构部(inf)
1.说一下项目(基本没问什么,看不上这个项目,问我有不有别的,这里就凉了一半)
2.虚拟内存说一下
3.页面置换算法说说
4.逻辑地址物理地址怎么转换
5.手撕LRU(第一次写,撕了半天,忘记一些细节处理了,最后还是没整好,挺可惜的,到这里基本就凉了)
6.mmap
7.为什么不考计算机的研
8.mvcc说一下
9.oom怎么处理
10.反问(居然还有反问,就很神奇)
候选人感想:三轮面试官真的都很好,很耐心,给我的体验特别好,在此感谢他们!!