2022年春招面试复盘
2022年3月7日字节跳动面试复盘(挂)
C++:
1. 挑两个C++11特性说明
2. shared_ptr代码实现:私有成员裸指针和引用计数指针
3. shared_ptr共享的内存在堆还是栈?
4. 介绍一下C++STL的容器
5. reserve函数的功能:扩容
6. unordered_map的底层原理是什么?哈希表
7. vector和unordered_map的at函数的功能?检查是否越界/键是否存在
8. static关键字的作用,越全越好。
设计模式:
1. 单例模式代码实现:静态私有成员
2. 挑两种设计模式说明
算法:
1. 岛屿数量:Leetcode原题
2. 快速排序
总结反思:
1. 没看过源码,问源码相关的内容答不上来,只能根据自己的理解随机应变
2. 这个面试官提示我的话,都是在引导正确答案
2022年3月15日美团一面复盘
数据结构
1. 向量和链表的区别
2. 栈的实现
数据库
1. UNION ALL和UNION的区别
2. 有哪些JOIN语句
3. SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.ID<3和
SELECT * FROM A LEFT JOIN B WHERE A.ID=B.ID AND B.ID<3的区别
4. 有哪些删除语句
5. MySQL的索引B+树
6. 为什么B+树非叶子节点不存数据
7. 聚集索引和非聚集索引
8. 为什么要建立索引
9. 你使用过哪些索引
10. 联合索引树和主键索引树有什么区别
11. 你怎么建立索引,a=1 AND b=2 AND c>3 AND d=4怎么建立索引:c放最后比较好,因为其他可以筛掉更多的数据
12. 隔离级别,默认隔离级别,为什么使用这种默认隔离级别
13. MySQL是长连接还是短连接,什么时候使用短连接
算法
1. 通过先序遍历和中序遍历还原二叉树
2. SQL查询分段统计、首次消费时间在某个时间点之前
2022年3月18日美团二面复盘(挂)
数据结构
1. 向量和链表在什么时候使用
2. 能否通过二叉树的任意两种遍历还原二叉树:不能,必须要中序遍历
数据库
1. 数据库的三大范式
2. 如果不满足第三大范式会出现什么情况
3. 千万级数据的B+树通常多高:2-5层。考察的是数据的敏感度,我记得看过这题。
4. 表A 表B
ID ID
1 1
2 2
3 3
执行
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.ID<3;
SELECT * FROM A JOIN B WHERE A.ID=B.ID AND B.ID<3;
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID AND B.ID<3;
第一个是对A和B按照A.ID=B.ID建立左连接再查询B.ID<3的数据(因为是左连接,所以B有的A一定有),第二个是查询A.ID=B.ID并且B.ID<3的数据,第三个是对A和B.ID<3的B按照A.ID=B.ID建立左连接再查询所有数据的数据
输出
第一个和第二个
ID ID
1 1
2 2
第三个
ID ID
1 1
2 2
3 NULL
5. B+树相对于B树的优点
6. 索引失效的情况
算法
1. 查询成绩第二的所有记录:需要考虑是否存在成绩第二,是否有重复成绩(我记得这道题在牛客网上做过)
总结:这次面试犯了很多错误。
上次问过的问题只是简单复盘逻辑,没有及时运行加深理解;
MySQL的题多长时间没练了;
C++
1. 多态的类型:编译时多态(重载多态,参数多态(模板))、运行时多态(虚函数,强制类型转换)
2. 重载和重写的区别
3. C可以重载吗?为什么?C++是怎么实现重载的?
4. 虚函数,构造函数可以是虚函数吗?为什么?
5. 内联函数的作用,可以是虚函数吗,为什么,什么时候会失效?
内联函数将代码直接嵌入到使用位置,节省调用函数的开销(参数压栈,参数返回),相对于宏定义多了类型检查,更安全。
不可以,时期不同,内联在编译器,虚函数在运行期。
虚函数内联,带有循环或递归,通过函数指针调用内联函数 内联失效
6. 强制类型转换有哪些,具体说说动态类型转换?
Const:const转非const
Static:隐式类型转换,类之间转换时,子类转父类安全,父类转子类不安全
Dynamic:类之间转换,父类转子类时进行类型检查
Reinterpret:什么都可以转
7. 智能指针,shared_ptr存在的问题以及怎么解决
8. C++可以多继承吗?多继承会存在哪些问题?同名函数会怎么样
9. extern C:让编译器以C的形式编译修饰的C++代码
数据结构
1. vector的push_back需要考虑哪些?扩容
2. 大顶堆/小顶堆删除元素需要做哪些事?
3. map的底层实现,红黑树的优点
4. unordered_map的底层实现,哈希表怎么解决哈希冲突
5. B树和B+树的区别以及应用场景
计算机网络
1. TCP和UDP的区别
2. TCP四次挥手:
操作系统
1. 进程和线程的区别
2. 线程私有和共享的资源
3. 有哪些锁,怎么避免死锁?
4. 进程间通信的方式:管道,消息队列,共享内存,信号量,套接字
5. 进程上下文切换操作系统需要做的事:PCB、PC程序计数器、资源
6. IO多路复用:
Select:用bitmaps表示文件描述符,拷贝到内核态,遍历判断事件发生,拷贝回用户态,遍历判断事件
poll:使用链表表示文件描述符,其他和select一致
epoll:在内核使用红黑树,避免整个文件描述符的拷贝和O(n)复杂度的遍历;使用链表维护一个事件队列
7. 可执行文件操作系统需要做的事
8. 僵尸进程:子进程结束,父进程没有回收子进程的资源,使得已经结束的子进程在进程表中仍然占了一个位置。
杀死僵尸进程:
9. 孤儿进程:父进程不等待子进程先结束,init进程接收孤儿进程
网络编程
Socket编程
算法
2022年4月18日灵犀互娱一面复盘
C++
1. C++随机数函数rand()是什么分布,怎么实现的:默认均匀分布;线性同余
2. 解决哈希冲突的方法
3. struct和class的区别
4. 怎么限制对象只能在栈上创建(控制访问权限):
怎么限制对象只能在堆上创建:
5. 运行期,main函数前执行的代码:
6. 如何数值计算sin函数
计算机网络
1. TCP三次握手中使用哪些函数
2. TCP面向字节流的缺点
3. 输入一条URL后的全过程
4. HTTP长连接和短连接怎么实现:
5. HTTP是有状态还是无状态,怎么解决
6. Cookie和session的区别
操作系统
1. 协程和纤程:为什么使用协程,协程相对于线程少了什么
2. 死锁的条件
3. 实现互斥,操作系统需要做什么
4. 系统调用(写的程序怎么让操作系统使用)
5. 中断,怎么知道有中断
算法题
1. 栈实现队列
2. 爬楼梯:动态规划
3. 括号匹配
2022年4月18日灵犀互娱二面复盘
C++
1. 纯虚函数,引入纯虚函数的原因
2. 内存分区
3. extern关键字
数据结构
1. 二叉搜索树,平衡二叉树
2. 红黑树,红黑树怎么旋转
3. B树,B+树
4. 压缩算法,哈夫曼编码树
计算机网络
1. TCP和UDP的区别
2. TCP怎么保证数据有序
3. CLOSED_WAIT状态的理解
操作系统
1. 进程间通信方式
2. 多线程存在的困难,线程怎么同步
3. 虚拟内存,怎么实现
2022年4月26日灵犀互娱HR面复盘
1. 自我介绍
2. 对这个岗位的优势和劣势
3. 评价做过的项目,有哪些提升空间
4. 为什么本科没有实习经历,是觉得实习不重要吗
5. 最成功的一件事
6. 压力最大的一件事
7. 想要工作的地点
8. 其他在谈的公司
反思:
是不是有些话不应该说? 我自己反复强调自己不稳定这一点,使得HR有顾虑;
#2022春招##春招##实习##面经#