C++ Acemyzoe

title: C++ tags:

  • code

C++

C++基础

参考书籍:《C++ Primer》、《STL源码剖析》、《深度探索C++对象模型》

  • 面向对象的三大特性:封装、继承、多态
  • 类的访问权限:private、protected、public
  • 类的构造函数、析构函数、赋值函数、拷贝函数
  • 移动构造函数与拷贝构造函数对比
  • 深拷贝与浅拷贝的区别
  • 空类有哪些函数?空类的大小?
  • 内存分区:全局区、堆区、栈区、常量区、代码区
  • C++与C的区别
  • struct与class的区别
  • struct内存对齐
  • new/delete与malloc/free的区别
  • 内存泄露的情况
  • sizeof与strlen对比
  • 指针与引用的区别
  • 野指针产生与避免
  • 多态:动态多态、静态多态
  • 虚函数实现动态多态的原理、虚函数与纯虚函数的区别
  • 继承时,父类的析构函数是否为虚函数?构造函数能不能为虚函数?为什么?
  • 静态多态:重写、重载、模板
  • static关键字:修饰局部变量、全局变量、类中成员变量、类中成员函数
  • const关键字:修饰变量、指针、类对象、类中成员函数
  • extern关键字:修饰全局变量
  • volatile关键字:避免编译器指令优化
  • 四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
  • 右值引用
  • std::move函数
  • 四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
  • shared_ptr中的循环引用怎么解决?(weak_ptr)
  • vector与list比较
  • vector迭代器失效的情况
  • map与unordered_map对比
  • set与unordered_set对比
  • STL容器空间配置器

计算机网络

参考书籍:《计算机网络》(第5版)、《TCP/IP详解卷1:协议》、《图解HTTP》

  • OSI7层网络模型:应用层、表示层、会话层、运输层、网络层、链路层、物理层

  • TCP/IP四层网络模型:应用层、运输层、网际层、接口层

    综合OSI与TCP/IP模型,学习五层网络模型:

    从上向下架构:应用层、运输层、网络层、链路层、物理层

链路层

  • MTU

  • MAC地址

    网络层

  • 地址解析协议

  • 为啥有IP地址还需要MAC地址?同理,为啥有了MAC地址还需要IP地址?

  • 网络层转发数据报的流程

  • 子网划分、子网掩码

  • 网络控制报文协议ICMP

  • ICMP应用举例:PING、traceroute

    运输层

  • TCP与UDP的区别及应用场景

  • TCP首部报文格式(SYN、ACK、FIN、RST必须知道)

  • TCP滑动窗口原理

  • TCP超时重传时间选择

  • TCP流程控制

  • TCP拥塞控制(一定要弄清楚与流量控制的区别)

  • TCP三次握手及状态变化。为啥不是两次握手?

  • TCP四次挥手及状态变化。为啥不是三次挥手?

  • TCP连接释放中TIME_WAIT状态的作用

  • SYN泛洪攻击。如何解决?

  • TCP粘包

  • TCP心跳包

  • 路由器与交换机的区别

  • UDP如何实现可靠传输

    应用层

  • DNS域名系统。采用TCP还是UDP协议?为什么?

  • FTP协议(了解)

  • HTTP请求报文与响应报文首部结构

  • HTTP1.0、HTTP1.1、HTTP2.0对比

  • HTTP与HTTPS对比

  • HTTPS加密流程

  • 方法:GET、HEAD、POST、PUT、DELETE

  • 状态码:1、2、3、4、5

  • cookie与session区别

  • 输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)

操作系统

参考书籍:《Unix环境高级编程》、《Linux多线程服务器端编程》

  • 进程与线程区别
  • 线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
  • 互斥锁与自旋锁的底层区别
  • 孤儿进程与僵尸进程
  • 死锁及避免
  • 多线程与多进程比较
  • 进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
  • 管道与消息队列对比
  • fork进程的底层:读时共享,写时复制
  • 线程上下文切换的流程
  • 进程上下文切换的流程
  • 进程的调度算法
  • 阻塞IO与非阻塞IO
  • 同步与异步的概念
  • 静态链接与动态链接的过程
  • 虚拟内存概念(非常重要)
  • MMU地址翻译的具体流程
  • 缺页处理过程
  • 缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法

网络编程

参考书籍:《Unix网络编程》

  • IO多路复用:select、poll、epoll的区别
  • 手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
  • 线程池
  • 基于事件驱动的reactor模式
  • 边沿触发与水平触发的区别
  • 非阻塞IO与阻塞IO区别

数据结构与算法

参考书籍:《大话数据结构》

  • 数组
  • 链表
  • 队列
  • 二叉树:二叉搜索树、平衡树、红黑树
  • B树、B+树
  • 哈希表及哈希冲突
  • 排序算法:冒泡排序、简单选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序
  • 二分法:旋转数组找target
  • 回溯法:全排列、复原IP地址
  • 动态规划(掌握基本的动态规划的几个题如:斐波那契数列、接雨水、股票的最佳买入时机)

mySQL数据库

参考书籍:《高性能MySQL》

  • 数据存储引擎:InnoDB、myISAM、Memory
  • 数据库索引类型及原理:B+树索引、哈希表索引
  • 锁:悲观锁、乐观锁
  • 事务:事务的四大特性(ACID)、事务并发的三大问题、事务隔离级别及实现原理
  • 多版本并发控制实现机制(MCVV)原理