虎牙 C++客户端 一面二面三面hr面(已oc)

9.15 1h 一面
项目
1、客户端不同功能是单线程还是多线程
2、登录页面的密码传输安全性是否保证
3、上传大文件传输效率被限速怎么办

C++
1、构造函数可以设置为虚函数吗
2、析构函数可以设置为虚函数吗
3、C++11新特性
4、智能指针的介绍
5、栈与堆的区别 生长方向为何不同

STL
1、STL容器有哪些
2、set的底层实现
3、set的迭代器如何实现的

反问
1、建议
1)提高自身特长竞争力
2)项目全面性考虑,鲁棒性考虑
3)对自己项目涉及知识面的全面性了解与参照
2、新人培训
1)视频教学
2)导师指导
3)最重要的能力是将学习的东西结合到实践

ps:面试官太耐心太温柔了,不会的还给我举例子说明,对我的建议也是语重心长说了很多东西,全程真的一点都不紧张!

___________________________________________________________________________________


9.24 1h 二面
八股
1、如何避免野指针和内存泄漏
2、智能指针的实现原理
3、多态实现的几种办法
4、栈与堆的区别
5、使用过哪些容器
其他
1、如何对一个自定义类型实现sort编程
2、如何用你已知的数据结构实现一个QQ的最近联系人
3、如何将网络层线程数据传输到UI线程,即window的线程切换
4、如何实现程序的单实例运行
建议
1、东西需要学深而不是随便一个方向工作几年
2、毕业刚出来几年努力,很大程度决定你之后的处境
3、面对困难的时候,学会如何用现有书本知识去解决问题

ps:是同一个面试官,依旧是对我不会的问题好几个方向去引,我真的太幸运了,面完就被发终面邮件了!

___________________________________________________________________________________


复盘
1、如何避免野指针和内存泄漏
野指针:指针初始化为nullptr、释放内存后指针指向nullprt、访问数组时注意边界条件
内容泄漏:配套使用new/delete、使用智能指针、基类析构函数设置为虚函数

2、智能指针的实现原理
auto_ptr——new出来的内存实现自动delete
unique_ptr——实现一指针指向一对象
share_ptr——实现多指针指向一对象
weak_ptr——解决共享指针的循环引用问题

3、多态实现的几种办法
编译多态(静态多态):函数重载(函数名字相同但是参数列表不同)、模板(不去管参数的具体类型,面向处理逻辑编程)
运行多态(动态多态):基类指针指向子类对象实现对应版本的虚函数调用

4、栈与堆的区别
1)申请方式不同:栈是系统自动分配的,寄存器存在对栈操作的指令,效率高;
堆是程序员自己手动分配的,效率没那么高,用起来方便但容易出现问题,容易产生碎片;
2)响应方式不同:当前栈空间大小大于等于申请的栈空间系统则分配,否则提示栈溢出;
当申请堆空间则是遍历空闲链表寻找第一个大于等于申请空间的节点,并将多余部分合并回链表;
3)生长方式不同:栈是从高地址到低地址生长,是一段连续的空间,有预先分配的空间大小限制,默认初始化8M;
堆是从低地址到高地址生长,是一段不连续的空间,堆的大小取决与虚拟内存的大小;
4)存储内容不同:栈用于存储函数的参数与局部变量;
堆用于存储程序员自定义的内容;

5、STL容器
序列容器:vector、deque、list、forward_list
关联容器:set、multiset、map、multimap
无序容器:unordered_set、unordered_multiset、unordered_map、unordered_multimap
适配容器:stack、queue、priority_queue

1、如何对一个自定义类型实现sort编程
sort泛型编程:实现一个自己的class test,创建一个vector<test> test_vector,使用sort(test_vector.begin(),test_vector.end(),cmp)完成排序
重载运算符'<'/'>':实现一个自己的class test,为该类重载'<'/'>',创建一个vector<test> test_vector,使其可以直接调用sort(test_vector.begin(),test_vector.end())完成排序
使用自定义的类对象:自定义类对象Cmp实现class test的()调用函数符重载,创建一个vector<test> test_vector,使用sort(test_vector.begin(),test_vector.end(),Cmp)完成排序
对funtional基类派生:引入funtional头文件,自定义类对象Cmp实现class test的()调用函数符重载,创建一个vector<test> test_vector,使用sort(test_vector.begin(),test_vector.end(),Cmp)完成排序

2、如何用你已知的数据结构实现一个QQ的最近联系人
要求:增删查O(1)
思路:哈希表能实现O(1)查找,链表可实现O(1)增删,将两个数据结构结合使用
实现:unordered_map<qq_id,Node* node> map,list<Node*node> qq_list
注意:value是指向链表节点的指针,实现链表位置的快速定位,链表使用双向链表,可以实现当前节点的删除

3、如何将网络层线程数据传输到UI线程,即window的线程切换

4、如何实现程序的单实例运行
1)扫描进程列表——相同进程名时出现误报
2)扫描窗口列表——漏掉无窗口程序
3)互斥体实现——通过加锁判断是否成功来实现单例
4)共享内存实现——通过对共享内存标记的更改判断是否可创建对象
___________________________________________________________________________________
9.29 25mins 三面
项目
1、心跳机制实现前的思考逻辑
2、客户端想实时接收文件怎么做
3、为什么文件整个做了校验文件块还要做
4、半连接会导致服务器哪方面的负载
5、运行但不工作的线程为啥会占用CPU资源
反问
1、为什么那么快面完
2、岗位用到的图像处理
3、面试多久出结果

ps:人生第一次经历技术三面,万万没想到半小时结束了,也不知道面试官满不满意,咱也不敢问,那就在牛客许愿一下虎牙的hr面叭~
___________________________________________________________________________________
10.9 8mins hr面
1、岗位偏向
2、地方偏向
3、目前求职进程
4、为什么选择虎牙
5、新人培训流程(反问)
6、可否提前实习(反问)
___________________________________________________________________________________
10.11 收到信息审核邮件
___________________________________________________________________________________
10.12 收到意向书
#虎牙直播##面经##C++工程师#
全部评论
楼主,加油!我面试都没面试官提示和反问环节,遇到好的面试官是一辈子修来的福气呀!
2 回复 分享
发布于 2021-09-16 21:14
楼主加油😃
1 回复 分享
发布于 2021-09-16 10:55
楼主是少有的把项目问的问题po出来的,谢谢宁!
1 回复 分享
发布于 2021-09-20 16:55
楼主最后会选虎牙吗?
1 回复 分享
发布于 2021-10-01 18:59
详细 谢谢楼主
点赞 回复 分享
发布于 2021-09-28 23:32
楼主,hr有说啥时候有反馈吗
点赞 回复 分享
发布于 2021-10-12 14:10

相关推荐

字节 ios客户端 月薪略高2k,年终奖多2,3个月
重邮精神病人:我同学刚字节客户端试用期不过
点赞 评论 收藏
分享
18 120 评论
分享
牛客网
牛客企业服务