目录
能否不使用锁保证多线程安全?
面向对象的三个特性是什么?请分别解释。
构造函数和析构函数能否被继承?
C++ 中函数重载是如何实现的?
C 语言中是否支持函数重载?
什么是左值和右值?请举例说明。
C++ 中子类的构造和析构顺序是怎样的?
C++ 中虚函数表的变化过程是怎样的?
C++ 中 STL 的六大组件分别是什么?在项目中使用过哪些组件?
vector 的底层实现原理是什么?resize、reserve 和 insert 方法的工作机制分别是什么?
vector 如何实现扩容?是否可以不拷贝元素实现扩容?
vector 和 list 的使用场景有何区别?
vector 和数组的本质区别是什么?
map 和 unordered_map 的底层实现和扩容机制分别是什么?
如何实现 vector 扩容时不拷贝元素?
C++ 内存管理机制是如何设计的?
请解释智能指针 unique_ptr 的使用场景和实现原理。
weak_ptr 的作用是什么?如何避免使用 weak_ptr 导致崩溃?
常用的设计模式有哪些?请举例说明。
工厂模式和单例模式的主要区别是什么?
如何定位和解决死锁问题?
信号量和互斥量的底层设计原理是什么?
socket 通信的基本流程是什么?
TIME_WAIT 状态出现在哪个阶段?其作用是什么?
HTTPS 通信过程是怎样的?会话密钥如何生成?
影响网络服务器性能的因素有哪些?除了多线程和 IO 多路复用,还有哪些优化方法?
TCP 和 UDP 的主要区别是什么?各自适用于哪些场景?
ARP 协议的工作原理是什么?
描述 TCP 建立连接的三次握手和断开连接的四次挥手过程。
TCP 的流量控制机制是如何实现的?
什么是 MySQL 的深分页问题?
深分页会带来哪些性能问题?
如何优化 MySQL 的深分页查询?
C++ 和 C 语言的主要区别有哪些?
能否不使用锁保证多线程安全?
在多线程编程中,锁(如互斥锁、信号量)是实现线程同步的传统方式,但并非唯一方式。不使用锁保证多线程安全的核心思路是避免共享状态、使用原子操作或采用线程本地存储。以下从几个方面详细阐述:
无锁数据结构:无锁数据结构通过原子操作(如 CAS,Compare-And-Swap)实现线程安全。CAS 是一种原子指令,它比较内存中的值与期望值,如果相同则更新为新值。例如,实现一个无锁的计数器:
#include <atomic>clas