字节后端开发-基础架构一面(也不知道过没过)

开头自我介绍,开始吟诵,面试官对我的qt+硬件+服务器项目不感兴趣便开始询问使用语言是否为cpp。
1.使用过哪些cpp11以上新特性。
答:智能指针三剑客(shared_ptr, unique_ptr, weak_ptr).....

2.开始询问shared_ptr的底层实现。
答:引用计数器+裸指针。

3.shared_ptr 解决了普通指针的什么问题。
答:RAII对象创建和析构时能自动管理资源,解决内存泄露。

4.是否能设计一个shared_ptr,这个shared_ptr里面有哪些成员变量。只答出来:裸指针+引用计数器,也许对数组需要记录长度,析构时范围释放。

面试官不语。

5.weak_ptr是否使用过,具体api调用。答:创建对象时需要指向shared_ptr, 拿指针时需要lock。
是否能设计一个weak_ptr。(😅给菜鸡干懵了,便开始临时发挥。)
答:也需要一个引用计数器来记录shared_ptr的引用计数器,当lock时,若shared_ptr引用计数器为0时,他返回空指针。

6.unique_ptr的使用场景,我就往单例上靠。

7.进程间通信哪些方式。开始吟唱。
提到了共享内存和消息队列,消息队列怎么实现😅,开始说是一个单向队列(不知道linux系统底层是但还是双),就答一个消费者模型的单向queue。还问了本地套接字的使用api调用过程。

8.线程同步方式。开始吟唱。
提到了互斥锁,互斥锁底层实现😂。哥们不行了,提到了线程阻塞和休眠。问,怎么实现线程阻塞和休眠,答涉及线程调度,深了不会了。

9.一道设计题,主线程创建一个资源在子线程消费完之前wait住,简单的用mutex对一个int val加锁和std::thread实现了对这个共享变量的访问。面试官看完能运行就放我走了。

看到的面试官都好累(上班不容易呀),明天又要干那b横项,希望能早日毕业,早日放我实习,😖。
全部评论
大哥你这个是base哪里的
点赞 回复 分享
发布于 03-07 07:12 江苏
请问学长在官网投的吗,我没看到基础架构部门呢
点赞 回复 分享
发布于 03-07 12:59 四川

相关推荐

03-06 18:29
南京大学 Java
上来就是一小时四道题:1. 给定字符串version1和version2,如果version1>version2返回1,否则返回-1,相等返回0。不考虑前置0,例如“1.001”和“1.1”两者视为相等。2. 设计一个类snapshotArray(忘记名字了)类,支持操作:    - snapshotArray(int length):初始化长度为length的数据结构;    - set(int idx, int val):设置索引idx处的值为val;    - int snap():生成调用时刻的快照,返回快照id,快照id为调用snap的次数-1;    - int get(int snap_id, int idx):返回快照snap_id处索引位为idx的值。    要求:整体空间复杂度O(N^2),snap时间复杂度O(1)3. 定义特殊数组:任意两个相邻元素的奇偶性不同。给定一个数组和查询数组(每个元素对应一次查询),返回结果数组,表示每个查询的区间内是否为特殊数组。要求:时间复杂度为O(N)4. 命令行,统计/tmp/a.txt的行数;硬链接和符号链接的区别;命令行,查找日志文件中所有包含user_a的内容(实习+项目)1. Redis实现发布订阅模型的底层和kafka有什么区别?2. 消息丢失怎么办?3. 除了Redis发布订阅模型有没有了解过其他队列?kafka底层是什么样的架构?4. 如何使用kafka实现顺序消费?(给了个用户下单的场景,其中下单和支付将作为两个消息,如何保证下单和支付处理的先后顺序)5. mysql索引底层数据结构?为什么不使用红黑树?6. seata有哪些模式?八股:1. HTTPS如何做身份认证?2. 知道数字签名吗?3. 多线程模型和多进程模型的区别?多进程有什么多线程没有的优势?4. 知道字节序吗?5. 知道epoll吗?6. 设计模式了解哪些?适配器模式?一共面了两个小时出头,当场就感觉要挂了因为很多问题没有答好,但整整拖了我九天才挂,实在是有点恶心人了,再也不面wxg了
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客企业服务