【360】C++岗-后端开发面经(已offer)
360 一面
IO模型
面向对象的理解?c++的特性
封装、继承、多态
- c++类的成员变量和成员函数内存分布情况
成员函数不占用对象内存,所有函数是放在代码区的。对象大小和对象中数据成员大小是一致的。 - class 和struct的区别,结构体可以定义其他函数吗?
class默认访问权限为private
struct是public。struct可以包含成员函数,能继承,能实现多态。 - nullptr和NULL区别
NULL在c++中为0(在C中是void*类型)c++中不允许隐式转换成其他类型。
nullptr在任何情况下都代表空指针。 - 互斥锁和自旋锁的区别
- new和malloc区别,free和delete区别
- 设计模式
- linux显示一个文件大小的指令 ls –lh
- SGD与adam 区别 项目训练怎么调参
计算目标函数关于当前参数的梯度
根据历史梯度计算动量
计算当前时刻下的下降梯度
根据下降梯度进行更新
adam是自适用矩阵估计,会计算二阶动量
SGD下降速度慢 - 怎么把一个程序放在后台
在命令后面加上 ./test &
在前台执行的命令,放到后台执行:ctrl+z bg % 1
在退出shell时继续运行:nohup ./test &
查看当前终端所有任务PID,状态 jobs –l
查看当前所有进程:ps –aux
杀死一个进程:前台ctrl+c,后台:kill PID
将后台中的命令调至前台继续运行:fg %xxnumber - TCP怎么实现可靠传输?
- 拥塞控制
- TCP Time_wait状态过多怎么办?
打开系统time_wait的重用和快速回收
重用:tcp_tw_reuse=1,默认为0,表示关闭.
socket中设置选项,跳过四次挥手(不建议)
修改net.ipv4.tcp_max_tw_buckets,调整time_wait状态上限个数.当连接数超过该参数,新关闭连接直接关闭; - close_wait状态过多怎么办?
出现原因:被动关闭方未关闭socket造成 - 构造函数为什么不能为虚函数
- vector实现机制
维护一块连续的线性空间,空间不足时,重新配置空间,移动数据,释放原空间,会造成迭代器失效 - unordered_map与map的区别
- shared_ptr
共享智能指针,多个智能指针可以指向相同的对象,使用控制块管理引用计数,当计数器等于0时,资源会被释放。可以传入unique_ptr,weak_ptr来构造,也可用new构造 - 网络编程了解吗
- int p[10] 和int (p)[10] intp[10]强调数组,表示含有int 指针的一个数组p
- 编程题:反转链表
360二面:
项目详细
const *p如果程序运行时向里面写值会出问题吗?什么问题?
多个CPU怎么允许
快排时间复制度 一个树的遍历的时间复制度
socket write成功返回之后,其数据在哪里
write函数调用瞬间,将数据移到输出缓冲; read函数调用瞬间,从输入缓冲读取数据。 write函数在数据移到输出缓冲时返回。