字节跳动 C++/QT PC客户端面试 凉经 (社招)
在这里祝大家新年快乐,过完年就是春招了,祝大家春招顺利啊。
我第一次面试字节的时候,是去年7月份,当时是我面试的第一家,技术还太稚嫩了,后来二面挂了。
一面的面试官,是团队里的大牛,面的问题,会更基础一些。重点考察基础的C++技术
1.父子继承时候,它构造函数和析构函数的顺序?析构时候,如何让父子类里所有的析构都调用一遍?
2.一个函数,如何让它在main函数之前执行?
3.可以在C++的成员函数里调用delete this吗?
4.class A;
class B
{
A a;
}
能不能允许?
5.如何保证只打开一个exe.当打开了exe1的时候,如果再打开exe1第二次,会将exe1之前打开的旧窗口调出,并最大化显示.
6.一个浏览器的网页,包含前进和后退功能,使用哪种数据结构来存放历史网页,比较合适。
7.C++的类型转换有哪些。_cast
8.C++有哪些智能指针
9.如何使用C++发送http请求,并下载文件。
编程:
1.手写一个装饰器模式
2.找出给定数组中,两个数加起来等于目标值的数,找出那两个数的下标。(NC61两数之和)
二面的面试官,是团队里的Leader。考察的问题,就更加深入了,当时我还是菜鸟,大部分问题,都没答出来。
1.GPU渲染和CPU渲染,之间的区别是什么
2.集成显卡的用户,使用集显进行渲染的时候,在编码阶段,是走硬编还是软编
3.硬编还是软编,和“GPU渲染还是CPU渲染”,是一回事吗
4. QCoreApplication::setAttribute(Qt::AA_UseOpenGLES) 是什么用处
5. QWidget和QML的区别,在渲染层面
6.有没有尝试过win11
7. windows系统下,是怎么实现窗口刷新(窗口刷新机制);是立即刷新,还是异步刷新;每次我需要一个窗口刷新,他都能立马刷新吗
8.父子窗口间的刷新管理?兄弟窗口间的刷新管理?如何让子窗口刷新,父窗口不刷新?
9.兄弟窗口,想刷新他们的重叠部分,请问流程是什么样的,刷新的顺序是什么样的?
10.Windows下UAC安全机制.
10.说说windows系统的内存管理,怎么实现共享内存?操作系统层面是如何完成这个过程的?
11.如何分析dump文件
12.如何排查出代码里已经存在的内存泄漏问题,线上的内存泄漏
13. QString和string的区别, 的实现方式
14.QT下如何使用多线程
15.show() exec()区别
16.qobject parent的用处
17.class前项申明和include的区别
18.多继承的问题
19.int,long long占多少字节
编程:
1.找出数组里的下一个更大的数字。(可以循环查找)
输入 【2,5,3,7,2,6,9,3】
输出 【5,7,7,9,6,9,-1,5】
隔日告诉我,没过,7月面试到此结束。
后来过了几个月,我又来面试了。还是同一个岗位,再来试一次。
这次一面,就换了一个面试官。考察的也是基础问题,不过更加深入了一些。
1. Qt Remote Object的序列化与反序列化
2.软件如果出现问题,如何去定位的,如何处理的?静态扫描和动态检测,有哪些方法.
3. QWidget和QML的技术本质和使用上,有什么区别?
4. QT的信号与槽,有哪几种连接方式,对应的应用场景是什么?(第五个参数)
5.信号与槽,是如何去提高它的匹配性能的,一个信号,如何高效地去找它的槽函数
6. QT的多线程,你用了哪些技术.哪些是只有Qthread能做的,QtConcurrent办不到的.
7.线程池,申请多少个线程池,比较合适?会不会使用GPU?
8.用QT实现一个三角形的按钮,会如何实现?
9.什么情况下,delete需要加一个中括号[]
10. new malloc区别?
11. int占多少个字节,long long,long,这几个一定是占这么多空间吗?
12.纯虚函数和普通的虚函数有什么区别
13.虚继承的作用
14.代码题:判断一棵树是否是平衡二叉树.
二面的面试官,没换。
1.装饰器模式/门面模式/中介者模式,他们的代码实现和优缺点
2.使用QT渲染的时候,有没有遇到显卡适配的问题?
3.共享内存的流程(底层原理)
4. QT的信号与槽机制的优缺点
5.制作一个按钮,会躲避鼠标,鼠标一旦移动上去,按钮就会跑
6.除了用鼠标移动去控制指针以外,我们还有很多方式去控制,他都会触发mouseMove事件吗?
7.鼠标指针,可以移动,除了鼠标键盘可以控制,某些触摸板/触控屏,他们触发的都是mouseEvent吗?
8. QT的指针指针,QSharePoint和shared_ptr有什么区别,weak_ptr呢?
9. QShareDataPoint作用
10. shared_ptr内部的引用计数,怎么实现的?
11.自己有没有实现过读写锁?
12.乐观锁和悲观锁的区别,自旋锁,是一种乐观锁吗?
13.多线程加锁,会劣化性能,请问有什么优化的手段?
14.死锁怎么解决?
15. dynamic_cast怎么保证安全的?
16.代码题: 平移之后的升序序列。nums = [4,5,6,7,0,1,2] ,target = 0 ,输出4, 输出查找到的target的下标,若找不到,返回-1
三面,是个更年轻的面试官。原本是部长来面试,部长临时有事,就换了另一位leader。
1. qgraphscene/ qgraphitem的填充模式,任意一个多边形,它的填充模式有哪些?
2. qgraphscene的内存开销,刷新的性能
3.设计模式里的 备忘录模式,如何实现撤销和恢复.
4.备忘录的结构体,怎么保证扩展性,如果需要新增内容,怎么办
5.如果我撤销了20次,如果我希望,从第0次,直接跳到第20步,要怎么做(不是一直迭代20次,而是一步到位).
6.云计算建立的连接,是长连接吗,请问在哪一层建立的连接
7.服务器的轮询策略,怎么做的
8. protobuf的问题
9.对性能和质量这一块,如何考量的.
10. CPU并行化的方法,说一个你熟悉的
11.静态扫描和动态检测.C++内存的运行时的动态检测,要怎么做
12.如果有一块内存,如何知道内存是被人正在使用的,还是忘记delete导致内存泄漏的?
13.堆内存分配的时候,需要找寻足够大的内存,如果没有足够大的内存怎么办
14.静态扫描检测,的具体方法
15.工程效率方面 ,build system用的哪一块,qmake还是cmake.你们三方库管理,仓库管理,开发的模式,是怎么做的.
16.算法工程师打包好动态库,是直接拖入你们的仓库里吗,你们是如何管理的
17.有没有自动化的过程,工程效率相关的
18.有CI/CD的部署吗,持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)
19. sever的上线部署的流程是怎么样的
20.代码题:给一个二叉树,节点都为正数.请找到父节点到子节点,总路径和为SUM的路径,都有哪些.
总结来说,感觉字节的面试,一面是看重对于C++/QT的基础技术水平,二面更看重对底层功能的实现和对源码的理解,三面更偏向于项目的整体流程开发经验和带队的领导能力。
相比较腾讯的神仙面试,感觉还是字节的实在,实实在在地考察考生的基础本领。不像腾讯,神仙考题……
春节假期这会儿,复习的小伙伴应该不少。祝大家在即将到来的春招,再接再厉,旗开得胜啦。