Please enable JavaScript.
Coggle requires JavaScript to display documents.
复习回顾 (c++ (算法的五个特性 (可行性, 有穷性, 输入, 输出, 确定性), 冯诺依曼体系的五部分 (控制器, 存储器, 运算器,…
复习回顾
c++
算法的五个特性
可行性
有穷性
输入
输出
确定性
冯诺依曼体系的五部分
控制器
存储器
运算器
输入设备
输出设备
锁的种类和使用环境
互斥锁
自旋锁
条件锁
读写锁
链表与数组的区别
查找
索引
复杂度
链表O(n)
数组O(1)
遍历
复杂度都是O(n)
删除
数组
普通数组
复杂度是不可预测的
动态数组
复杂度是O(n)
链表
复杂度O(1)
插入
数组
普通数组
复杂度不可预测
动态数组
复杂度O(n)
链表
复杂度O(1)
new和malloc的区别
new只有c++可用,malloc都可用c和c++
new需要用delete释放
malloc要用free释放
抽象类的特性
抽象类不能实例化
不能做参数和返回值
可以定义做指针和引用
static的3种方式
声明静态全局变量
不能被外部文件使用
外部要使用静态变量时,需要使用extern来声明
声明静态函数
只能在本文件中使用,只能访问静态变量
声明静态局部变量
变量定义一次,不能被别的函数使用
深浅指针的拷贝
创建的对象,直接通过函数传递,通过系统默认的拷贝方式进行的拷贝都是浅拷贝
浅拷贝会让函数传入的临时对象的地址也指向主动创建的对象,在临时对象生命周期结束后,外围主动创建的对象内存也会随着一起被销毁,从而导致内存出错,程序崩溃
深拷贝是程序员自己实现的拷贝方法,重新new一块内存地址来存储对象内容,从而使两个对象的内存分开管理
指针常量与常量指针的区别
int const *num
const int *num
(指针常量)
指针常量指向的地址可以改变,但值不能改变
int* const num (常量指针)
常量指针指向的地址不可改变,但地址下的值可改变
堆栈的区别
堆是程序员自己分配管理的,分配在内存中
栈是系统分配的,程序的一些临时变量,就是分配在栈上,分配在闪存中
红黑树与AVL树普通树的不同
红黑树
插入以后会有2次旋转,删除以后最多旋转3次
AVL树
插入和删除以后树的旋转次数会有log n的次数
TCP/IP相关
三次握手
SYN_SEND to Server
SYN_RECV to Client
Established Finish
四次挥手
FIN to Client
ACK/FIN to Client
ACK to Server
Ack to Server Close
正反补码的计算
正数取反符号取反
负数的取反需要用补码
Vector的特殊性
插入删除操作会导致迭代器失效,迭代器需要重新赋值,再删除操作中需要注意
vector会自动扩容,自己重新分配容量,会新new内存,会有看不到的内存损耗
数据大小的计算
sizeof与strlen的使用区别
sizeof获取数据大小,字符串的话则包含'/0'结束符
strlen是获取字符串的长度,不包含结束符所以返回值会比sizeof少1
什么是平衡二叉树
平衡二叉树就是左右节点平衡,左右子树深度差(高度差)的绝对值不超过1的二叉树
类继承相关
父类析构函数为虚函数,释放父类指针时会正确释放子类的对象
位运算
位运算是从0位开始移动,比如1<<5则是左移5位,最后得到100000这个二进制数
运算符的优先级
注意+-*/和三目运算符,和位运算符的优先级
数组内存地址使用(指针偏移)
各数据结构的算法复杂度
Memcpy,MemMove,Memset,Strcpy的区别
八进制,十进制,十六进制的转换
go
协程
协程是一个能保存堆栈信息,随时可停止随时可唤醒的一个轻量级的线程
协程的有点
与线程不同,协程是自己主动让出CPU,并交付他期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制。
与线程不同,协程是自己主动让出CPU,并交付他期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制。