本文共 1527 字,大约阅读时间需要 5 分钟。
技术面试备考内容总结
一、语言与编程基础
static关键字作用
- 加static:将变量或函数限定在当前类或文件中,仅在文件内可见。
- 不加static:变量或函数在整个程序范围内可见。
const关键字与宏定义的区别
- const:常量,表示只读,编译时已知类型,运行时不可修改。
- 宏定义:预处理阶段展开,支持类型检查,但不具备类型安全性。
虚函数实现
- 虚函数表:记录类的虚函数地址,用于子类重写父类虚函数。
- 虚函数指针:指向当前对象的虚函数表,存在于每个对象中。
进程与线程区别
- 线程:进程的轻量级执行单元,共享地址空间和资源,生命周期短。
- 进程:资源分配独立,地址空间独占,生命周期长。
线程同步与通信
- 线程间:全局变量、自定义消息、
std::promise等。 - 进程间:管道、共享内存、信号量、套接字等。
常见线程模型
- 单线程模型:简单的任务执行。
- 多线程模型:并发执行多任务,适合资源密集型任务。
快排时间复杂度与实现
- 时间复杂度:O(N log N),平均每次比较log N次。
- 实现:分治策略,递归或迭代方式。
二、算法与数据结构
二叉树中序遍历
- 递归实现:直接递归访问左、右节点。
- 非递归实现:使用栈或队列模拟递归过程。
寻找两个有序数组中的第N大元素
分糖果问题
常见排序算法
- 堆排序:适合稳定排序,时间复杂度O(N log N)。
三、操作系统与网络
进程与线程切换
- 进程切换:资源分配,频繁切换效率低。
- 线程切换:更高效,适合I/O密集型任务。
TCP与UDP通信
- TCP:可靠传输,三次握手建立连接。
- UDP:无连接,传输速度快。
网络协议
- HTTP与HTTPS:HTTP明文传输,HTTPS加密传输。
- HTTP状态码:常见状态码包括200、301、404、500等。
网络设备与OSI模型
- 路由器:负责将数据包从一个网络接口发送到另一个网络接口。
- OSI模型:七层协议架构,包括物理层、数据链路层等。
四、数据库与系统设计
数据库索引
- 适合建立索引:查询字段频繁访问或区分度高的字段。
- 不适合建立索引:非键字段、经常更新字段。
数据库事务与隔离性
- 事务特性:原子性、一致性、隔离性、持久性。
- 实现隔离性:通过锁机制或读写红蓝机制。
缓存策略
- FIFO:先进先出,简单实现。
- LRU:按访问频率或最近使用时间淘汰。
五、高级编程与系统优化
智能指针
- 四种智能指针:
shared_ptr、unique_ptr、weak_ptr、intrusive_ptr。
内存管理与垃圾回收
- 动态内存分配:使用
new和delete。 - 智能指针:自动管理内存生命周期。
多态与虚函数
- 多态实现:通过虚函数和虚函数表。
- 钻石继承:避免多个虚函数引起的异常。
线程与进程同步
- 互斥机制:确保多个线程/进程访问同一资源时不发生冲突。
- 同步机制:信号量、互斥锁、临界点等。
六、其他常见问题
TCP四次握手
- 四次握手:确保数据可靠传输,防止丢失。
- 2MSL等待:防止数据丢失和已失效报文段。
网络协议与 socket 编程
- socket:描述符用于网络通信,支持TCP和UDP协议。
- I/O多路复用:
select、poll、epoll均用于监控多个I/O事件。
内存管理与缓存
- 缓存策略:FIFO、LRU、LFU等。
- 内存泄漏:避免使用
new和delete不匹配,或不释放动态内存。
数据结构与算法
- 树与图:应用场景包括排序、搜索、网络路由等。
- 图遍历:深度优先搜索、广度优先搜索等。
以上内容涵盖了常见的技术面试问题,结合实际开发经验,可针对性地进行准备和练习。
转载地址:http://yeev.baihongyu.com/