2022秋春招/提前批面经汇总GitHub地址:https://github.com/0voice/interview_experience
目前已有187份,持续更新中,欢迎大家star,添加自己的一份面经分享!!
时间:7:00 pm-8:22 pm
· 自我介绍
· 然后问我两个项目:
o Raft协议的项目,问了比较久
§ 如果外部一个客户端需要提交一个数据,什么时候返回成功?是大多数复制完成之后再返回?
o 因为项目的Go实现的,继续问了Go语言的特性,Go调度器的实现了解过没有?协程如何调度的。
o 毕设的文件系统:
§ PMEM的延时
§ 调度算法
· 网络编程:多线程和多进程的程序写过没有,主要关心实战情况
o socket编程
o select/poll/epoll了解过吗?
· 网络中传输数据如何分包,应该是问TCP粘包问题
o 顺便问了知不知道protobuf
o gRPC实现protobuf的关键点在哪?
§ 跨平台,跨语言
§ 不同机器下定义的基本数据类型长度不同,考虑大端存储还是小端存储
· 进程的通信方式
· 数据库:
o MySQL使用的引擎:InnoDB之类
o 如何建索引?为哪个键建索引?
o Reids的情况,哪里用过
· TCP的三次握手,四次挥手,TIME_WAIT
算法:<= 20min,vscode,共享屏幕,手写,手动构造样例。两道大水题。
· 反转链接
· 二分查找
>面试官迟到40+ min。。。。。。10:40+am-11:40+am
· 问项目,raft协议
o 脑裂的情况如何解决
o 日志复制的具体过程
o CAP理论,日志的理解:日志只是记录操作,并不一定数据的直接修改
· 后面问Go的知识:
o GMP了解过没有?没有,还是继续问。
o GMP如果一个协程阻塞了,如何调度?
o Context有没有了解过。
o Go语言哪些是按引用传递的。
· C++知识:
o map的实现:红黑树
§ 用迭代器访问元素,然后tmp = it, it = it->next,然后把把tmp删了,后面迭代器还可以继续执行吗?
o malloc的实现
· 进程和线程的区别
· 程序的内存布局
· Go的协程和线程的优势
· I/O密集型和计算密集型哪一个适合Go的协程。
一面80min
自我介绍
1.虚函数的作用
2.模板的作用,解决了什么问题
3.TCP特点
4. 拥塞控制
代码:
1. Leetcode.54螺旋矩阵
2.一个数组如nums = [ 3,2,5,6,2,3,4],输出一个数组ans = [2,1,3,7,1,2,3],ansi代表numsi左边和右边比自己大的第一个数之间数的个数(有点绕。。)
反问
二面50min
自我介绍
1.两个栈实现队列2.两个队列实现栈 (push O(1)和pop O(1))3.一个队列实现栈 4.B+树优点5.B树区别,B树范围查找复杂度6.哈夫曼树,哈夫曼树构造过程7.三次握手过程,第三次丢包,一定会RST异常么8.TCP怎么保证可靠传输9.拥塞控制
10.虚拟内存,虚拟内存解决了什么问题,如果内存足够大,还需要虚拟内存么
11.HTTPS加密原理,为什么不一直用非对称加密,为什么能确保对称加密所用的密钥是安全的
12.线程进程区别13.100本书,每次取1-5本,自己先取,怎么取到最后一本
反问
三面70min
自我介绍
从项目切入,聊一些相关知识
1.项目为什么用TCP
2.拥塞控制(每次都问。。)
3.UDP怎么保证可靠
4.是否了解业界存在的基于UDP的可靠传输协议(谷歌QUIC)
5.QUIC具体怎么实现(不了解。。)
6.HTTP基于什么协议
7.网页发送文件给其他人,HTTP怎么知道文件发送完了
8.HTTP有哪些方法
9.输入url显示网页全过程
10.项目为什么不用HTTP
11.线程同步的手段, 事件如何使用
12.信号量本质,和互斥量区别
13.C++11或者C++14新特性
14.lamda 表达式
15.智能指针原理
16.子函数形参里有 shared_ptr,主函数里定义一个shared_ptr,这个shared_ptr作为参数传入子函数中时,智能指针的计数count变化过程
17.shared_ptr存在的问题,怎么解决
代码
左右最值最大差
反问
HR面 13min
没有自我介绍
1.技术面面了几轮
2.申请岗位的方向
3.在申请岗位的方面有什么积累知识
4.讲一下项目
5.项目中遇到最大困难,如何解决的
6.项目中最复杂的地方
7.现在时间点这么晚,为什么还在找实习
8.有其他offer么
9.如何来实习的话,觉得自己有哪些方面需要补充
10.入职之前有时间补充相关知识么
11.父母做什么的,独生么
12.兴趣爱好
13.压力来源
14.自己优势,劣势
反问
一面(40min)
1.简单自我介绍+项目(10min)
2.进程线程的区别
3.进程的调度算法
4.如何设计一个哈表表
5.数据库索引为什么不用红黑树
6. B+树的特性
7.联合索引
8.如果两个索引都用到了范围查询但必须使用索引如何解决
算法:
重排链表
二面(1h)
1.自我介绍+项目(20min)
2. a是主键索引,b是普通索引,问对b查询索引怎么走
3. fork()函数
4.计算机启动的时候内存做了什么
5.虚拟内存
6.输入一个URL
7.数据是如何拷贝到网卡的
8.场景题:有一个1T的记录了用户id以及ip的日志,内存只有1G,要求根据Ip出现的频率对用户进行排序(分区+堆)
9.常见的排序算法以及空间复杂度
10.插入排序最优的空间复杂度是多少
11.哪些是稳定的排序
算法:
LRU
三面(50min)
1.自我介绍
2. C++智能指针
3. C++局部变量与全局变量
4.面向对象的三个特性
5.给一张数据表,你应该考虑从哪些方面建立索引
算法:
阿拉伯数字转中文大写