面试复盘|字节、百度、虾皮、拼多多,其他面经整理中...
写在前面:
先简单说一下背景吧:
- 211本,985硕,科班出身
- 有一段大厂实习经历
- 投的都是后端开发,主要技术栈是C++
已经拿到的offer:
面经汇总:
百度:
一面:
1、封装的作用
2、继承的作用
3、多态相关
①多态是为了解决什么问题
②多态的底层实现
③虚函数表和虚指针的具体细节问题,在子类中是怎么体现的?子类的虚函数表、虚指针和父类的有什么关系?
④如果没有多态,B继承A,其中有同名函数,那么B的对象调用同名函数则会调用B本身的函数,而不是A的函数。
4、容器相关
①vector的底层实现原理和扩张策略
②vector的size和容量(capacity)有什么含义
③迭代器是怎么实现遍历、增删操作的?他本质是什么?为什么要封装成迭代器?
5、C++11
①auto的作用?怎么实现的?
②右值引用的作用?
二面:
两个算法题:
1、abbccccaaa压缩为a1b2c4a3
2、链表:将1 2 3 4 5 6变为1 6 2 5 3 4
小问题:
三面:
三面就到经理面了,主要就是谈一些规划、意向之类的。这个就是看自己想怎么聊了。字节:
一面(也算是直通车终面,结果玩嗨了,裸面直接挂掉了):
1、sql和DB相关知识
2、http3.0协议
3、计算机网络的五层结构
4、Wifi连接协议在哪一层?为什么?
5、HashMap,C++里的unordered_map底层是怎么实现的?介绍一下哈希表和冲突解决。
6、红黑树和二叉搜索树的区别?各自的优势?
二面:
1、C++ inline的原理?Inline和虚函数的区别?他们各自的优缺点和适用场景?(比如inline在编译阶段完成,函数在动态链接时起作用)
2、C++智能指针的实现原理?内存回收是怎么实现的?
3、https和http的差别?https是怎么实现加密的?ssl和https的关系?
4、TCP和udp的区别?有哪些应用层协议是基于TCP的(http),哪些是基于UDP(dns域名解析协议)的?理由?
5、对分布式相关的了解吗?
6、平常通过什么渠道学技术?
三面:
有个环,上面有是个结点,编号为0~9。从0出发,每次走一步,可以顺时针走,也可以逆时针走。问从0出发走n步,最后回到0,有多少种走法?
1、说说操作系统中多进程和多线程的相关知识点(我从引入的角度来说,也讲了资源切换的问题)
2、说说操作系统中的内存管理(我从内存分配和内存回收的角度来说,讲了动态分区算法,内存管理成组链接法,bitmap内存回收,还应该讲一讲虚拟内存)
3、说说网址查询涉及到的知识点
给了一个sql题,没写出来。。
拼多多:
一面:
最长上升子序列,O(nlgn)的时间复杂度
问题:
1、介绍一下项目,是否了解一致性哈希负载均衡
2、讲一下编译原理的流程
3、STL里vector、map、unordered_map查找和增删的复杂度
4、STL里unordered_map的底层实现?冲突解决是什么流程?扩容是什么流程?
5、计算机网络:在app上点击一个按钮,后续会经过哪些协议?(替代问题,输入一个域名后的处理流程)
6、网络编程:IO多路复用模型
7、多线程编程:线程池的原理和作用
8、本科时候的比赛,研究生时候的项目
二面:
问题:
面试官对我实习的相关东西很熟,问的都是实习工作周边的问题,可惜系统太大,时间太短,我只对自己的工作比较了解,对其他知识不够深入。场景题:
有24个512G的日志文件,其中每个query有一个唯一的时间戳,内存有256G。
虾皮:
一面:
1、关注数据结构(本科特别熟的哈弗曼树忘了怎么构造了。。离大谱)
2、重点关注计算机网络相关:TCP协议,HTTP协议
3、操作系统:进程间的通信方式
消息队列,管道,共享内存,socket,信号量, 条件变量
主要是消息队列、共享内存、socket的同步机制
4、数据库(太差了):隔离级别
二面:
- 针对实习项目进行深挖,探索,又设计了其他场景考察项目知识点
- https的加密过程,秘钥是怎么交付的?这只是客户端对服务端的单端验证,怎么保证双端验证(加上服务端对客户端的验证)?有没有其他安全相关的了解,比如保证内容安全、链路安全?
- TCP的三次握手,四次挥手?
- 如何判断链表有环?进一步地,如何在最短时间内判断?
HR面:
1、给自己的实习表现打分?给自己的实习公司、实习经历打分?
2、是否有转正的意向?如果拿到了怎么选择offer?