总结: 被拷打"你不了解就不问了" , 手撕题目也G了.**1. C++ 相关*** 请做一下自我介绍。* 你主要使用的编程语言是 C++ 吗?* 能介绍一下 C++17 中有哪些常用的新特性吗?* 写 C++ 时常见的“坑”有哪些?你印象最深的是哪个?* 如何解决不同编译单元间 static 变量析构顺序不一致的问题?* C++ 中是否有语言特性可以解决上述析构顺序问题?* 如果在头文件中定义一个 static 变量,会发生什么?* 如何确保一个全局变量在程序中只有一个实例?* 在函数中声明一个对象但不初始化,会有什么问题?(针对基本类型)* 为什么函数内的局部变量(基本类型)如果不初始化,其值是不确定的?* 函数内的局部变量能否被“移动”到堆上?* 基本数据类型(如 int)是否可以通过 move 操作移动到堆上?* 对于一个类对象,move 操作会触发什么?* `const` 和 `constexpr` 有什么区别?* `#define` 有哪些用法?* 如何实现一个参数数量和类型都不固定的函数?* 能介绍一下什么是“完美转发”(Perfect Forwarding)吗?**2. 操作系统相关*** 你对操作系统比较熟悉,能介绍一下存储器的层次结构吗?(从速度高到低)* 请将存储器的访问速度进行排序。* 有没有比 L1 Cache 还快的存储器?* 线程间如何进行通信?* 除了加锁,线程间通信还有哪些无锁的方式?* 原子变量(Atomic Variables)都有哪些?* 原子变量修改值时,有哪些接口可以使用?(涉及内存序)* 多线程发生死锁应如何避免?* 死锁产生的条件有哪些? (四大条件? 不会。)* 针对死锁的各个条件,除了按顺序加锁外,还有哪些解决方案?**3. 网络与数据库相关*** 你了解哪些网络知识?(TCP/UDP)* 你实现过 TCP/UDP 的网络编程(如 socket)吗? (我说没有,只是了解, “那不问了”)* 能介绍一下 Redis 和 PostgreSQL 有什么不一样吗?* 这两个数据库哪个更快?* Redis 的 QPS 上限能到多少?**二、 项目*** 你觉得最难的地方在哪?对于项目, 问了一个很刁钻的问题。.....**三、 算法与数据结构*** 简单介绍一下数组和链表的区别。* 从内存利用率角度看,数组和链表哪个更高?* 数组和链表在增删改查操作上的时间复杂度有何区别?* 堆排序可以用什么数据结构实现?* 除了数组(vector),还可以用什么数据结构实现堆?* 如果用数组(vector)和二叉树(如红黑树)来实现堆,它们各自的优缺点是什么?* 删除堆中一个中间元素会发生什么?底层如何调整?* 动态规划(DP)和分治法有什么不一样?**四、 代码实战*** **题目**:模拟斗地主出牌。给定一副手牌(如17张),要求计算出清所有手牌所需的最少出牌次数。牌型包括单张、对子、顺子、三带一、三带二等,其中组合牌型(如顺子、三带)可以减少出牌次数。没做出来。