遗漏知识点

什么是RAII?

RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。

通过构造函数获取资源,通过析构函数释放资源

std::lock_guard(轻锁)std::unique_lock(重锁)区别_lockguard与uniquelock区别-优快云博客

进程相关

进程简说:进程就是程序的一次执行。

弄懂“进程”(上):3个组成部分、4个基本特征、4个基本状态_进程有哪四个特征-优快云博客

同一进程下的线程共享资源

进程是资源分配的最小单位 线程是资源调度的最小单位

一个进程可以包含多个线程 线程共享进程的资源

创建一个进程的开销更大  系统会为进程分配独立的地址空间 还需要维护数据段 堆栈段等资源

而线程只需要共享进程这些资源

进程之间通信更加复杂 同一进程下的线程共享全局变量 静态变量等数据 通信更加方便

因为进程有独立的地址空间 一个进程崩溃不会对另一个进程产生影响 当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃

切换成本低 切换时间更快

线程切换需要成本(需要进去内核空间),如果task是轻量级任务,就不划算

线程和进程的区别(面试必备)_进程和线程的区别-优快云博客

哈希表

哈希表hash table(key,value) 的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。

而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。

时间复杂度为 O(1)。如果只知道数据或者数据中的部分内容,想在数组中找到这个数据,还是需要遍历数组,时间复杂度为 O(N)

拉链法优点:删除更方便,直接在对应的链表中到找

缺点:需要额外的空间去维护链表

线性探测法的优点在于其实现简单且时间复杂度较低。由于其基于开放寻址法,因此不需要额外的空间来存储元素和键值对。此外,当哈希表大小固定时,线性探测法的查找效率较高。然而,线性探测法也存在一些缺点。当发生大量冲突时,可能会导致哈希表中的元素分布不均匀,从而降低查找效率。此外,如果发生哈希表已满的情况,可能需要重新哈希或扩容操作,这会增加额外的计算和空间开销。

堆和栈

程序使用的栈内存超出最大的值,运行的时候就会发出栈溢出的错误,比如定义了一个很大的数组或者函数的嵌套调用

c++内存泄漏和内存碎片的问题_c++ 资源泄露和内存泄露-优快云博客

内存泄漏

用户态和内核态

       用户态只能受限的访问内存, 且不允许访问外设(硬盘、网卡等);在用户态下如果要进行文件操作、网络通信等都操作需要通过系统调用来实现。当应用程序发出系统调用时,会触发上下文切换,将CPU的控制权交给操作系统内核,进入内核态。

     内核态下拥有最高的权限。内核态下运行的程序可以访问系统的所有资源,包括CPU、内存、I/O等。

系统调用过程

运行在用户态下的应用程序会发起系统调用请求,通常会涉及到系统调用号和参数,该请求会触发一个中断,导致cpu从用户态切换到内核态并保存现场以便之后可以恢复,系统内核会根据系统调用号和参数查询系统调用表,之后会返回一个结果给应用程序,处理完请求之后会进行恢复现场的操作。

中断和异常

移动构造函数和拷贝构造函数

使用一个已经创建完毕的对象来初始化一个新对象

md5

MD5是一种哈希函数,它将输入数据(如密码)转换为固定长度(通常是128位)的哈希值。这个过程是不可逆的。

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。

2、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

步骤:数据填充、添加消息长度、数据处理、运算 

结构体对齐

select比epoll高效

红黑树

深入理解红黑树的演变、变色、旋转!从此告别背诵面试题!_红黑树为什么有两种颜色-优快云博客

红黑树具有良好的效率,它可在 O(logN) 时间内完成查找、增加、删除等操作。

C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)_怎么在devc++里面把c文件变成汇编语言-优快云博客

详解C++代码从源代码到可执行文件的整个编译过程(预处理、编译、汇编和链接)-优快云博客

c++编译过程

编译的输出是一个或多个汇编代码文件,通常以.s为扩展名。

封装

linux常见命令

【Linux】Linux常用命令60条(含完整命令语句)-优快云博客

linux中如何统计一个文件中的字符出现次数-百度经验 (baidu.com)

【ps aux】该命令用于查看当前所有运行的进程。

cd..返回上一级目录

【Linux】sort排序、uniq去重、wc统计_sort 去重-优快云博客

chmod修改权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值