- C++11新特性了解哪些
- 什么是移动语义
- 面试官给了一个线程池代码,给五分钟读代码,然后给面试官讲解一遍(C++11写的)
- 万能引用的作用
- 线程池中vector<std::thread> 有什么用,thread的资源在堆上还是在栈上
- vector扩容,什么时候触发扩容
- 除了mutex还用过其它的锁吗
- 讲讲C++17的读写锁
- unique_lock 和 lock_guard 的区别
- 问线程池代码中,有两处用到了unique_lock,问能不能替换为lock_guard (条件变量调用wait时使用的unique_lock不能换,因为wait函数内部会有解锁和加锁的操作)
- 平时编程什么情况会抛异常
- 异常和返回错误码的区别和优缺点
- 条件变量notify_one 和notify_all的区别
- 条件变量的wait函数,第二参数接受一个返回值为bool的可调用对象,有什么用(防止虚假唤醒)
- 为什么会有虚假唤醒(不会,寄)
- 如果nofitfy在wait之前调用,导致notify丢失,有什么解决方式(再用一个条件变量对notify进行同步)
- 条件变量wait的原理
- join、detach区别
- 既不join也不detach会发生什么(子进程先结束会产生僵尸进程,父进程先结束导致程序崩溃)
- 为什么父进程先结束会崩溃(线程共享资源,父进程结束对资源进行回收)
- 什么是死锁、怎么防止死锁(严格按顺序加锁、原子性的加锁,要么都加要么都不加)
- 严格按顺序加锁可以防止死锁,那么解锁顺序可以乱序吗(不造,答了应该不影响)
- 说说智能指针
- weak_ptr原理(寄,只答了shared_ptr的控制块里面不仅只有引用计数,还有弱引用计数)
- unique_ptr大致是怎么实现
- make_shared的好处
- using 作用
- typename有什么用(访问模板类中的自定义类型时需要加上typename为编译器指出这是一个类型而不是一个成员变量)
- malloc 与new区别
- new 和 new[] 的区别,对new[] 使用delete 有什么问题 (内存泄漏)
- 介绍一下HTTP
- TCP和UDP区别
- 结构体内存对齐,发了一段结构体代码,解释结构体占用大小,哪些位置会产生空洞
- 代码到可执行文件的过程
- 说说shared_ptr原理,然后手撕一遍shared_ptr
算法题:加起来和为目标值的组合(二)
太菜了,居然没做出来,脑子嗡嗡的,还差一点完成面试官让讲思路
反问:
流程: 3 + 1
半小时后收到邮件约了二面
#24届软开秋招面试经验大赏#