面经 字节跳动客户端提前批c++
通信渣,7.8-7.19中间陆续完成了面试,隔天被HR告知已通过,现在还在焦急地等待审核。之前看了很多大佬的面经,现在趁周末写个面经,复盘一下,另外希望分享能带来好运吧~
一面
自我介绍加聊一下项目
虚函数的作用和实现
快速排序的时间复杂度和稳定性
数据结构中的二叉树(我自己回答的时候聊到了多叉树)
多叉树的应用(我回答了MySQL中的索引用的b+树)
为什么用b+树不用二叉树
对http协议的了解
https为什么能实现安全传输(我回答的多加了SSL握手)
SSL握手的过程
数字证书的内容
对称加密与非对称加密的区别
非对称加密的具体算法你有了解吗(这个不会)
udp和tcp的区别
tcp协议是怎样实现可靠传输的
进程与线程的区别
为什么不用多进程而是要用多线程
虚拟内存的页面调度算法
代码题:感觉是一道鸡兔同笼问题,即刚好用100元买一百只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只。
二面
指针与引用的区别
new和malloc的区别
纯虚函数的定义和作用
一个父类指针指向new创建子类对象,问调用了哪些构造函数
tcp和udp的区别和各自的应用场景
进程和线程的区别
死锁的产生条件
代码题:链表去重
三面
自我介绍加聊一下项目
c++11 default关键字(我回答是强调该函数默认存在,感觉答得太简单了,应该可以结合一些使用场合和delete关键字一起扩展地多答一些的)
默认构造函数和拷贝构造函数
深拷贝和浅拷贝
深拷贝和浅拷贝哪个更好(我回答说看使用场景,都有需要使用的地方)
什么时候使用深拷贝什么时候使用浅拷贝
进程与线程的区别
c++11的多线程编程有了解吗
一共有几种锁
c++11里面的两种锁管理类了解吗(我于是就回答了一下我对lock_guard和unique_lock的了解,讲了一下作用和大概的实现)
互斥锁和自旋锁的区别和作用
tcp协议和udp协议(*3了。。)
http协议使用的是哪个协议进行传输,DNS使用的是哪个协议
DNS为什么要使用udp协议(我回答说查询速度快)
那你不是说udp协议不可靠吗,那不可靠怎么保证查询一定成功呢(我回答说在应用层实现一些类似tcp协议的功能,比如超时重传机制,来保证查询的成功)
编程题:数组的最长连续序列(leetcode128)
做的时候先是用排序再处理的方法先写出了一个解,然后面试官说分析一下时间复杂度,我说nlogn,面试官又问有时间复杂度更低的算法吗,我想了一会说用hash可以达到On的时间复杂度,
然后我写完代码没调通,面试官等了大概5-10分钟,紧张的我还是没调通,然后我把思路和面试官讲了一下,面试官安慰说可以了,还行。。。。
加面
估计是三面拉跨了,多加一轮考核
对自己哪方面的能力最有自信(上来感觉就和前面的不一样,泪目,我回答说学习能力)
然后面试官说不是问这么宽泛的东西,技术面还是说说你对你简历上写的这些技能里面哪部分最有自信(我回答说c++和数据结构)
说说你了解的纯虚函数
你说纯虚函数不能申明对象,那其实一般纯虚函数申明对象编译器会在编译阶段报错,你能写一个运行时报错的例子吗
父类的析构函数一般是要申明成虚函数,能说说原因吗(我答了内存泄漏)
那你能写一个这种情况下你说的内存泄漏的例子吗(这个面试官好喜欢叫人写bug啊~,所以说平时多写点bug也是有用的,笑)
写了一个网址,说说浏览器输入这个网址后的全过程
你刚才说了DNS,具体的说一说它(我答了使用udp协议以及DNS查询的全过程)
DNS为什么不用tcp,你说tcp多了握手和挥手的过程,但其实现在来说这个过程也很快,查询用时零点几秒和更短对人其实没太大感知,用tcp更可靠何乐不为呢,为什么一定要用udp(有点懵,我回答说如果输入的是一个生僻的网址的话,查它的ip地址需要递归的从根服务器查到最下层,这样每一级的延时叠加可能就会照成人的感知,乱答的,有大佬知道可以指点一下)
代码题:二叉树的右视图(leetcode199)
这道题做过,我用深度遍历秒杀,然后把广度遍历的思路也讲了一下
总的来说字节跳动的面试体验很好,HR小姐姐的通知和联系很舒心
但是我等得开始急了。。。问了一下说是在审核流程中,希望能顺利拿到offer~
许愿
也祝大家秋招顺利!