C++软件开发
2021-07-14 17:43:04 10 举报
AI智能生成
C++软件开发学习建议
作者其他创作
大纲/内容
数据库
关系型数据库
MySQL
MySQL的架构
MySQL的数据类型
体系结构
连接层
服务层
引擎层
存储层
MySQL的引擎
InnoDB
InnoDB引擎的特性
插入缓冲(insert buffer)
二次写(double write)
自适应哈希索引(ahi)
预读(read ahead)
异步IO
MyISAM
MEMORY
MERGE
存储引擎的选择
MySQL的索引
索引优缺点
索引结构
BTREE 索引
B+ TREE 结构
B+树的结构
B+树的优点
MySQL中的B+Tree的改进
数据库为什么使用B+树而不是B树
HASH 索引
R-tree 索引(空间索引)
Full-text (全文索引)
索引分类
主键索引
唯一索引
普通索引
全文索引
聚簇索引和非聚簇索引
索引设计原则
最左前缀匹配原则
回表查询
其它原则
索引失效情况
事务
事务的四大特性
原子性
一致性
隔离性
持久性
事务出现的问题
脏读
幻读
不可重复读
更新丢失
下面哪个隔离界别能对应解决这些问题
隔离级别
READ-UNCOMMITTED(读取未提交)
READ-COMMITTED(读取已提交)
REPEATABLE-READ(可重复读)
SERIALIZABLE(可串行化)
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC(多版本并发控制)
锁机制
并发事务带来的问题:并发读写
锁的类型
读锁与写锁
行锁与表锁、间隙锁
悲观锁、乐观锁
MySQL的加锁详细过程
多版本并发控制MVCC
SQLite
特性
适用场景
如何解决并发写问题
SQL的编写
语法
优化
SQL注入
表设计的三大范式
数据库优化
非关系型数据库
Redis
Qt框架
元对象系统
Meta Object Compiler(MOC)
生成过程
内容
元对象的反射机制
元对象的属性系统
Q_OBJECT
信号与槽
connect函数原型
连接方法
如何在组织管理结构
使用场景
信号与槽的底层原理
怎么管理
如何通知
如何调用槽方法
与回调函数相比
QThread
线程的两种管理方式
线程安全的方法
基础库
UI
QChat
QNetwork
Qt封装的容器特点
设计模式
软件架构
MVC
MVVM
MVP
设计模式
工厂
代理
策略
观察者
适配器
其它
开源项目
工作方向
软件开发:PC、移动端
后台开发
游戏开发
音视频SDK开发
嵌入式
其它
C++语言
语法基础
数据类型
字节对齐
const限定符
数组、字符串
static关键字
引用和指针
容器
容器的种类、功能
各种容器的适用场合
泛型(了解即可)
异常
作用域与命名空间
extern、union、volatile等
C++11特性
类型转换
智能指针
需会实现简易版的
线程安全问题
有哪些优缺点
Lambda表达式
左值、右值
其它
面向对象
分装、多态、继承
类
三/五法则
成员,需深入
目的
抛出异常的处理
深浅拷贝
友元
友元函数
友元类
友元和继承
继承
单继承
多继承
虚继承
作用域
成员函数、成员数据访问的过程
派生访问说明符
重载、覆盖(重写)、隐藏
抽象基类
编译时、运行时安全检查概念
对象模型
this指针
继承关系下,对象构造和析构顺序
数据成员和成员函数
两者的内存中的存储方式大不相同,分清对象和类的关系
static 成员函数和数据
多态的三大条件
继承
虚函数
虚函数指针
虚函数表
是同一个类共用的
存放什么
单个多态基类的虚函数表
继承以及多次单继承 时的虚函数表
多重继承(同时继承多个基类)的虚函数表
虚继承的虚函数表
如何规避虚函数机制
析构函数设置成虚函数
哪些函数必不能是虚函数?
父类指针或者引用访问派生类的虚函数
对象数据和函数的觅名和检查过程
对象的类型转换
向上转换
向下转换
在容器中存放具有继承关系的对象会有什么问题
内存模型
ChildTopic
进程内存模型
C/C++的内存五区或四区的分法
虚拟地址空间布局
各区存放进程的哪些数据,什么时候初始化
堆和栈的区别
C内存管理
malloc/free的实现原理
是不是真的低效?有什么缺点
free掉的内存是释放到哪里去,为什么
指针、数组的安全访问
缓冲区溢出
越界访问
空指针、野指针
C++的内存管理
new、delete关键字
过程
异常如何处理
operator new、operator delete
如何重载
如何限定一个对象的创建内存空间
placement new
用在哪些场景
allocator类
优缺点
使用过程
动态数组new[]和delete[]
new[]和new创建对象的内存模型是怎样的
对于内置类型(POD类型)
对于没有自定义析构函数的自定义类类型
对于有自定义析构函数的自定义类类型
new[]和delete[]的配套使用
混用的时候会发生什么问题(对应上面三种情况)
是否都一定要配套使用
对比C和C++的动态内存管理方式,每种方法的差异
内存安全
内存泄漏
经典内存错误问题
如何排查、检测内存安全
STL源码剖析
空间置配器
STL的一级、二级置配器模型
仿照STL实现自己的空间置配器
1、思考用链表管理空余内存怎么有效利用指向下一个空余块指针的空间
2、分清malloc、new、operator new、allocator的层次关系
3、内存池的设计,如何申请、分配、回收内存
容器
序列式容器
关联式容器
每种容器的源码、实现原理
容器的使用场景
迭代器
迭代器在STL里面的地位
迭代器的种类、以及他们的层次关系
每种容器对应的迭代器
算法
常用算法的实现原理:sort、copy、lower_bound、upper_bound等
涉及容器的算法,对迭代器的限制
怎么通过可调用函数进行配置自己想要的功能,同时学习STL的封装、泛型思想
配接器
常见的stack、queue
仿函数
要会写
实现部分函数
string类
c标准库里的字符串函数
多线程
POSIX线程
C++11的线程库
操作系统
操作系统基本概念
体系结构
运行机制
系统调用
中断
异常
字序
大端
小端
进程管理
进程
概念
结构组成
PCB
数据段
代码段
进程的状态和转换
进程和线程
进程栈
进程通信IPC
线程
线程实现方法,以及属性
用户级线程
内核线程
组合线程
多线程和多进程的选择策略
线程的状态转换
线程安全
线程同步
方法
经典问题解决:交替打印,读写者、生产者消费者、哲学家进餐等
线程同步的方法选择
惊群效应
线程互斥
竞争条件
死锁
产生原因
死锁的必要条件
解决方法
处理机调度
概念
进程优先级
调度方式
调度准则
CPU利用率
等待时间
响应时间
吞吐量
调度算法
先来先服务
短作业优先
高响应比优先
时间片轮换
多级反馈队列
协程
内存管理
程序执行过程
编译、链接、装载
逻辑地址以及物理地址
连续分配
单一连续分配
固定分区分配
内部碎片
动态分区分配
外部碎片
分配算法
非连续分配
页式存储管理
页表
寻址过程
快表
段式存储管理
段表
寻址过程
段的共享与保护
段页式存储管理
段表、页表
寻址过程
虚拟内存
概念
局部性原理
虚拟内存解决的问题以及特征
请求分页
组成
页表机构
缺页中断机构
地址转换机构
页面置换算法
最佳置换
先进先出FIFO
Belady异常
最近最久未使用LRU(动手实现)
最不经常使用策略LFU(动手实现)
时钟置换算法
页面分配策略
预调页策略
请求调页策略
抖动现象
文件管理
概念
文件加载过程
简单了解文件系统
实现
目录结构
文件控制块FCB
索引节点
目录结构
文件共享与保护
文件存储空间管理
空闲表发
空闲链表法
位示法
成组链接法
编译原理
预处理
编译
汇编
链接
目标文件类型以及组成
Windows: PE格式
Linux等类UNIX:ELF格式
可重定位目标文件
结构、目的
每节存放的内容
符号重定位过程
可执行目标文件
结构
如何加载到内存中执行程序
每段的数据从哪加载以及何时初始化
静态链接以及动态链接
程序加载的过程
计算机网络
OSI层次结构
物理层
数据链路层
帧
设计
差错控制
流量控制
滑动窗口流量控制
停止-等待流量控制
后退N帧ARQ(GBN)
选择重传ARQ(SR)
交换机
网络层
路由功能
路由器分组转发过程
了解路由选择算法
拥塞控制和流量控制
IPV4
IPv4分组的格式,需要熟记
IP数据分片
IPv4地址分类
网络地址装换(NAT)
子网划分
分类子网划分
无分类域间路由选择(CIDR)
地址解析协议ARP
网际控制报文协议(ICMP)
IPv6
格式;了解即可
传输层
端口号
作用
端口号分类和范围
常用端口号
UDP
面向报文的尽最大努力交付传输层协议
UDP的特点
UDP和IP的联系
UDP常用于哪些场景
UDP的首部格式
各个字节的内容
UDP校验方式
TCP
面向连接的可靠传输层协议
TCP的特点
TCP报文段
各个字节的内容
校验方式
TCP选项之MSS
TCP连接建立
3次的过程中,为了解决什么问题
三次握手过程
缺了第三次的会有什么问题
半连接状态
SYN泛洪攻击
原因
解决
初始序号
TCP断开连接
四次挥手的过程
为什么不采用“3次挥手”释放TCP连接
为什么发送最后一次握手报文之后,要等待2MSL的时间
为什么建立连接是三次握手,关闭连接却是四次挥手
第四次挥手时一直丢包了怎么办
TCP的保活计数器
原理
各个时间段
如何设置
TCP Keepalive 和 HTTP Keep-Alive 的关系
TCP可靠连接的保证是什么
流量控制
解决什么问题
通过哪个字段告知
和拥塞控制的区别
拥塞控制
经典的四个算法
拓展:Quick UDP Internet Connections(QUIC)
粘包/拆包问题的发生以及解决方案
拓展:如何在UDP的基础上,使得可靠传输
应用层与传输层间的一个抽象层,编程接口:Socket
Socket的原语和含义
三种连接方式
面向连接的套接字工作过程
服务器端
客户端
无连接的套接字工作过程
对等模式
C/S模式
用任意库实现一下
会话层
表示层
应用层
域名系统(DNS)
4种域名服务器,他们负责管理的是什么
域名解析的过程
DNS劫持
本地DNS劫持
DNS解析路径劫持
篡改DNS权威记录
应对方法
HTTPDNS
文件传输协议FTP
万维网
HTTP
特点
无状态
无连接
HTTP报文结构
请求报文
请求行中的方法
常用的几种
本质上没区别,但是什么要区分?
典型的请求头
响应报文
响应行中的状态码
经典的响应头
HTTP缓存
强缓存
协商缓存
重定向与转发
HTTP长连接与短连接
短连接
长连接
使用场景
如何解决HTTP的无状态性
Session
Cookie
HTTP各个版本
HTTP1.0
HTTP1.1
HTTP2.0
影响一个 HTTP 网络请求的因素
HTTPS
HTTP协议存在的问题,主要是中间人攻击
通信使用明文(不加密),内容可能被窃听
无法证明报文的完整性,所以可能遭篡改
不验证通信方的身份,因此有可能遭遇伪装
围绕三个问题展开解决
数据隐私性
数据完整性
身份认证
HTTP和HTTPS的区别
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的原理
解决内容可能被窃听的问题——加密
对称加密
非对称加密
解决报文可能遭篡改问题——数字签名
解决通信方身份可能被伪装的问题——数字证书
简述HTTPS的流程
简述HTTPS的优缺点
浏览器输入一个网址后的全过程
TCP/IP层次结构
分层思想
数据结构与算法
数据结构
线性结构
线性表
链表
单链表
循环链表
双向链表
顺序表
堆
大、小根堆
索引堆
栈
顺序栈
链式栈
队列
顺序队列
链式队列
循环队列
树形结构
二叉树
二叉排序树
完全二叉树
哈夫曼树
并查集
图形结构
存储结构
邻接矩阵
邻接表
图的遍历
最短路径算法
Dijkstra
Floyd
算法
排序算法
插入类
直接插入排序
希尔排序
交换类
冒泡排序
快速排序
单路
双路
三路
选择类
选择排序
堆排序
归并排序
多路归并
基数排序
Top K问题
桶排序
查找算法
树
hash
二分
回溯算法
动态规划
贪心算法
0 条评论
下一页
为你推荐
查看更多