Bilibili | C++ 工程师|面经汇总|2020.12|
26403
2020.12.03
发布于 中国

image.png
{:align=left}

语言

  • C 和 C++ 的区别
  • 指针和引用的区别
  • malloc 和 new,free 和 delete 的区别
  • extern C 的作用
  • 常用的容器有哪些
  • volatile 关键字的作用
  • 有哪几种强制类型转换以及使用场景
  • c++11 新特性
  • C++ 20 新特性
  • C++ 的三大特性
  • C++的多态实现原理
  • 什么是虚函数
  • 什么是纯虚函数
  • 虚表指针的大小
  • 虚函数表的存放内容
  • 构造函数可以是虚函数吗
  • 析构函数可以是虚函数吗
  • 一个空类会生成哪些函数
  • 左值和右值
  • 什么是智能指针,有哪几种,作用,实现原理
  • 如何避免循环依赖
  • unique_ptr 中 std::move() 作用
  • static 关键字的使用
  • const 关键字的使用
  • define 和 online 的区别
  • 面向对象的设计原则
  • C++ 编译过程
  • 函数调用的具体实现

计算机网络

  • 三次握手和四次挥手
  • 四次挥手为什么要有 close_wait 状态
  • tcp 长时间不断开连接会不会断连
  • tcp 超时重传机制
  • tcp 如何保证可靠传输
  • TCP 和 UDP 的区别
  • TCP 报文长度字段设置在哪里
  • 哪些协议是 TCP 的,哪些是 UDP 的
  • UDP 怎么实现可靠传输
  • HTTP 请求报文结构
  • http 和 https 的区别
  • 怎么解决粘包问题
  • 拥塞控制
  • 流量控制
  • 拥塞控制和流量控制的区别
  • 如何判断网络拥塞
  • GET 和 POST 的区别
  • cookie 和 session 区别
  • DNS 的原理

数据结构

  • 什么是跳表
  • 一个两层的跳表查询时可以降低倒多大的复杂度
  • vector 和 list 的区别
  • vector 的扩容原理
  • map 底层实现
  • map 和 unordered_map 的区别
  • 如何计算循环链表的长度
  • 二叉搜索树和平衡二叉树,红黑树的区别
  • 红黑树删除数据是怎么调整的
  • 什么是哈希表,哈希函数,怎么解决冲突
  • stl sort 函数的实现

数据库

  • redis 的数据类型
  • redis 的缓存删除策略
  • redis 怎么实现的定期删除
  • mysql 中使用的锁有哪些?什么时候使用行锁,什么时候会使用表锁
  • mysql 的 binlog 日志什么时候会使用
  • undo 日志和 redo 日志分别是干嘛的
  • 事务还没执行完数据库挂了,重启的时候会发生什么
  • 数据库的 MVCC 的实现原理
  • 事务隔离级别

操作系统

  • 操作系统分段、分页
  • 定时器的实现
  • 读写锁
  • 如果读写锁占用很长时间,并且后续还有读者不断占用读锁,这就造成了写者饥饿的问题,怎么解决?
  • 自旋锁
  • 乐观锁和悲观锁
  • select、poll 和 epoll 的区别
  • 为啥 epoll 为啥能突破文件上限大小
  • 水平触发和边缘触发的区别
  • 线程和进程的区别
  • 进程之间的状态转换
  • 如何创建多线程
  • 如何实现线程同步
  • 进程之间的通信方式
  • 什么是协程,什么情况下可以使用协程
  • 了解线程模型吗?用户态的线程怎么和内核态的线程映射的
  • 动态链接和静态链接的区别
  • 如何创建一个守护进程
  • 孤儿进程和僵尸进程
  • 系统是如何检测孤儿进程的
  • Docker 的优缺点
  • 虚拟内存的实现原理
  • 内存泄漏和内存溢出是指什么,内存溢出有什么危害

算法

评论 (27)