参考链接:
https://blog.csdn.net/qq_27678917/article/details/70224813
https://blog.csdn.net/kuweicai/article/details/82779648
https://github.com/huihut/interview
C++
关键字
static
1.修饰普通变量:决定该变量的存储区为静态区和生命周期(在main函数运行前已经分配空间),可以默认初始化(随机值)
2.修饰普通函数:规定函数作用范围仅限定义该函数的文件内才能使用
3.修饰成员变量:使所有对象只保存一个该变量,而且不需要生成对象就可以访问该成员
4.修饰成员函数:使得不需要生成对象就可以访问该函数,但在static函数内不能访问非静态成员
const
1.修饰变量----->常量,该变量不可被改变
2.修饰指针----->常量指针和指针常量
3.修饰引用---->常量引用,常用于形参类型,避免拷贝,避免函数对值的修改
4.修饰成员函数------>该成员函数内不能修改成员变量
条款02:尽量以const,enum,inline替换#define
sizeof()
1.sizeof(数组): 整个数组空间大小
2.sizeof(指针): 指针本身占空间大小
对比
struct&class
- 访问权限: struct数据访问是public的,class默认的成员变量的访问是private
- 默认继承权限: struct是public的,class是private
malloc&new
定义&声明
(1)定义:给变量分配内存,只能定义一次
int i; //既是定义也是声明
extern int i; //声明而非定义
(2)声明不分配内存空间,可以声明多次,如函数声明,使用extern关键字对函数变量声明等。
指针&引用
1.本质区别:
(1)指针为指向一个变量的地址
(2)引用为变量的别名,实质还是变量。
2.使用方式区别:
(1)引用需要初始化,且初始化后不可更改,指针可以为空,并且可以改变
(2)可以有const 指针,没有const引用
(3)指针可以有多级,引用只有一级
(4)如果返回动态分配的对象或变量,应当返回指针,返回引用可能导致内存泄漏
(5)参数传递:
指针作为函数参数传递时,本质是值传递,传递的是值的地址,会将实参拷贝给形参,可以直接取地址改变原先变量
引用作为函数参数传递时,传递的是值本身,避免了拷贝操作,同时也可以对原变量直接操作。
堆&栈
(1) 堆存放动态分配的对象——即那些在程序运行时分配的对象,比如局部变量,其生存期由程序控制;
(2) 栈用来保存定义在函数内的非static对象,仅在其定义的程序块运行时才存在;
(3) 静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;
(4) 栈和静态内存的对象由编译器自动创建和销毁。
面向对象特性(封装\继承\多态)
多态
STL
空间配置器
vector
- 简介: 动态空间,由内部空间配置器自动扩充空间容纳新元素,存储空间连续,支持随机存取
- 实现: 动态增加大小时, 先分配一个俩倍于当前空间的内存,拷贝原内容,释放原空间,添加新元素.因此,一旦空间重新分配,指向原空间的迭代器失效.
操作系统
进程&线程
网络编程
OSI七层模型和TCP/IP四层模型
TCP三次握手四次挥手过程
TCP&UDP
网络字节序&本地字节序
本地字节序: 小端存储(低地址-低字节, 高地址-高字节)
网络字节序: 大端存储(低地址-高字节, 高地址-低字节)
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
HTTP&HTTPS
- http 的URL 以http:// 开头,https以https:// 开头
- http 标准端口是80 ,https是443
- https 协议需要到ca申请证书,http不需要。
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
- http 的连接很简单,是无状态的,https协议是由SSL(Secure Socket Layer安全套接层)+http协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
- SSL协议工作在(应用层与传输层之间)
优点: - 通过证书可以更信任服务器
- 更安全,防篡改
缺点: - https 需要证书。
- 因为对传输进行加密,会一定程度增加cpu消耗。
- 由于https 要还密钥和确认加密算法的需要,所以首次建立连接会慢一些。
- 带宽消耗会增加。