大总结

终极总结

C++基础

  1. 对const的理解?const指针和引用的区别?
  2. #define和const的区别?
  3. 说说static关键字的用法?
    https://blog.csdn.net/ypshowm/article/details/89030194
  4. inline函数的使用?
  5. 知道#pragma pack(n)吗?怎么实现内存对齐的?
  6. 解释下”extern C”,在什么时候会用到?
  7. 用struct实现下继承?
  8. 解释下friend关键字?
  9. 多态的实现方式?
  10. 虚析构函数?虚构造函数?
  11. 说说虚表的内存布局?
  12. 纯虚函数?虚继承?
  13. 模板继承?模板特化/偏特化?
  14. 虚函数可以是内联函数吗?
  15. 构造函数能是虚函数吗,析构函数呢?
  16. c++四大强制类型转换?
  17. 四大类型转换发生的时间?编译/执行
  18. 构造函数初始化列表和函数内部赋值的区别?

C++11

  1. decltype用过吗?
  2. 左值引用和右值引用是什么?
  3. 移动语义和完美转发说说?
  4. 智能指针有哪些?
  5. 说说每个的实现原理和应用场景?

C++内存

  1. new/delete 和malloc/free区别?
  2. ralloc/alloca
  3. 双重free会发生什么?
  4. 如何定义一个只能在栈/堆上生成的对象?
  5. 讲下ptmalloc?
  6. 讲下tcmalloc?
  7. 讲下jemalloc?
  8. 知道哪些强制类型转换?(static_cast等)

STL

  1. 五大组成部分?
  2. 有哪些容器?
  3. vector/map/哈希/deque底层实现?
  4. sort算法实现是什么?全都是快排吗?

计算机网络

  1. TCP三次握手,四次挥手详细流程?
  2. 三次握手两次行不行?
  3. sock函数和三次握手的对应?
  4. 服务器大量TIME_WAIT怎么办?
  5. TCP粘包?
  6. TCP拥塞控制?
  7. http1.0/1.1/2.0区别?
  8. TLS/HTTPS握手过程?
  9. ARP协议?
  10. PING命令实现原理?
  11. Traceroute命令实现原理?

操作系统

  1. 进程和线程?
  2. 内核态和用户态?
  3. 进程间通信方式每个详细说?优缺点?
  4. 线程间通信方式详细说?
  5. 进程线程拥有的资源集合?
  6. 讲讲死锁?
  7. 线程池实现一下?
  8. 主机字节序和网络字节序?如何判断大端小端?写个程序。
  9. 虚拟内存?
  10. 页表工作原理,MMU底层原理?
  11. 进程虚拟空间地址text段下面保留的128M空间是干嘛的,为什么不能是256M?
    • 128M空间是保留的C语言库,至于为啥不是256M,目前未知(节省空间?).

数据结构

  1. B树/B+树/红黑树有什么区别?
  2. 红黑树旋转?
  3. 排序算法复杂度?

数据库

  1. MYSQL索引作用?索引失效?
  2. MYSQL引擎?
  3. MYSQL锁?
  4. MYSQL事务?
  5. 实现一个堆?

中间件

  1. redis基本数据结构?
  2. redis跳表?具体操作插入删除?
  3. redis的zset?
  4. redis缓存策略?
  5. redis淘汰策略?
  6. redis哨兵模式、集群模式?
  7. redis哨兵模式和集群模式优缺点?
  8. redis持久化?
  9. redis缓存和主库不一致?

场景设计

智力题

  1. 有十个机器,九个生产的金币是5g,只有一个生产是4g,给你一个称,怎么一次找出那个生产4g的机器。

将机器从1开始编号到10,每个机器取对应编号个硬币,共计55个硬币。
假设每个机器生产的硬币都是5g,则这55个硬币总总量为275g;
与实际的重量做差值,即为生产4g硬币对应机器的编号。
(如果是1号机器,因为只取了1个硬币,重量比2

  1. 给一个硬币,要求生成1/5的概率。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int g1() {
    return 1 / random() > 0.5 ? 1 : 0;
    }
    ing getAns(){
    int res = 0;
    do {
    res = (g1() << 2) + (g1() << 1) + g1();
    } while (res == 7 || res == 6 || res == 5);
    return res;
    }