学习记录
文章平均质量分 69
Shelbyh
这个作者很懒,什么都没留下…
展开
-
日常学习记录14:单例模式
单例模式是常考考点之一,盘一下。1.单例模式保证一个类仅有一个实例,提供一个全局访问点。有饿汉式与懒汉式之分:懒汉式:在初始化时就实例化饿汉式:在第一次被引用时才实例化,即第一次调用getTest()时实例化2.具体代码主要有三种,本篇盘的均为懒汉式的:(1)普通有缺陷的单例模式在多线程场景下可能会多次new:例如线程1判断到t == nullptr,于是进去执行new,但是在线程1 new出来对象之前线程2判断到t == nullptr,于是也进去new。没有析构函数的释放,造成内存泄原创 2021-08-01 01:47:04 · 177 阅读 · 0 评论 -
日常学习记录13:C++运算符优先级
在平时的编程与做题的时候会遇到运算符优先级有关的问题,这篇文章盘一下。先看优先级表:这里的结合性是指在同优先级的情况下,运算顺序的方向。总结一下,大致可以归结为三条规律:(1)后缀 > 前缀(2)一元 > 二元(3)计算类 > 大小关系类 > 位运算类 > 与或 > 三目运算符 > 赋值类...原创 2021-07-24 14:02:47 · 159 阅读 · 0 评论 -
日常学习记录12:char*、char[]、string的相互转换
char*、char[]、string的相互转换是让人挺头晕的,也经常会用到,这篇文章盘一下。1.char* //(1)string --> char* char *s_p1 = const_cast<char*>(s_test.c_str()); char *s_p2 = "123";//编译器可能会警告 //(2)char[] --> char* char *a_p1 = a_test;(1)因为string用c_str()转出来的是原创 2021-07-15 00:59:40 · 200 阅读 · 0 评论 -
日常学习记录11:ICMP协议
ICMP协议是网络中需要了解的知识之一,这篇文章盘一下。目录1.ICMP是什么2.ICMP的用途3.ICMP报文的格式4.ICMP存在的安全问题参考文献1.ICMP是什么ICMP == Internet Control Message Protocol == Internet控制报文协议,是网络层的协议之一,用于当IP数据报传输失败时,向发送方反馈失败信息等。注意:ICMP报文的实际传输是放在IP的数据部分中进行传输的,还是通过TCP/IP协议族传输。2.ICMP的用途主要用途有差错通知和信息原创 2021-07-12 19:06:13 · 347 阅读 · 0 评论 -
日常学习记录10:内核态、用户态、异常、系统调用、内核空间
内核是操作系统中很重要的概念,尤其是对Linux系统来说,但是内核两个字又很抽象,此外还有内核态、用户态等等概念,这篇文章来盘一下。1.什么是内核?一句话的回答:“内核是操作系统常驻存储器的部分” ——援引自《深入理解计算机系统》P504详细一点点:内核是为应用程序提供对硬件安全访问的软件,具有管理进程、管理内存、管理硬件设备IO等能力。2.什么是内核态、内核模式 | 用户态、用户模式?内核态 = 内核模式用户态 = 用户模式在处理器中用了某寄存器的一个bit来描述应用程序当前享有的权力原创 2021-06-25 00:22:12 · 222 阅读 · 0 评论 -
日常学习记录9:虚拟内存、共享内存、内存映射
虚拟内存也是必会必掌握概念,盘一下1 虚拟内存1.1 虚拟内存是什么虚拟内存是一种内存管理方式,它通过把程序切成小块,只把目前需要的部分放入物理内存中,其他的部分暂存在磁盘上,也被称为虚拟存储器。物理存储器和虚拟存储器都被分割为许多大小相同的块,分别称为物理页与虚拟页,二者之间的映射关系用页表记录。1.2 虚拟内存的好处1.扩大地址空间;2.内存保护:每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。3.公平内存分配。采用原创 2021-06-14 15:15:44 · 1339 阅读 · 0 评论 -
日常学习记录8:select、poll、epoll
select、poll、epoll是后端必掌握知识,这篇文章来盘一下。1. select、poll、epoll是什么东西select、poll、epoll是linux下I/O多路复用的三个系统调用那什么是I/O多路复用?见日常学习记录7:I/O模型总结2. select模型select维护了一个记录要监听的socket的集合fd_set,当调用select()时,由内核根据IO状态在线修改fd_set的内容,由此来通知哪些被监视的socket或文件可读。(1)每次调用select都会把fd从用户原创 2021-06-11 18:24:59 · 150 阅读 · 0 评论 -
日常学习记录7:I/O模型总结
1.什么是I/O模型I/O是指数据在设备和内存之间的输入输出,有内存IO、网络I/O、磁盘I/O三种。在进行I/O时,会先把数据拷贝到操作系统缓冲区中,然后再从操作系统缓冲区(内核空间、内核态)拷贝到应用程序的地址空间(用户空间、用户态)。内核空间是内核代码运行的地方,用户空间是用户程序代码运行的地方。I/O模型我认为是进行I/O的方式,这里的I/O主要指网络I/O,本质是对socket的读取。I/O模型有5种:同步阻塞同步非阻塞I/O多路复用信号驱动异步2.什么是同步、异步我认为原创 2021-06-11 15:11:48 · 154 阅读 · 0 评论 -
日常学习记录6: 快速排序代码、原理、复杂度
快排重要性不用说,直接背诵代码,每天敲一遍,但是要知道快排的原理和复杂度分析,这两个比代码本身更重要。1.代码:vector<int> Sort::QuickSort(vector<int> &num, int left, int right){ if(left < right) { int p = Partition(num, left, right); QuickSort(num, left, p - 1);原创 2021-06-05 00:34:34 · 123 阅读 · 0 评论 -
日常学习记录5:通俗理解各种锁(互斥、读写、自旋、排他、共享、悲观、乐观)
锁机制用来实现进程线程的同步互斥,保证操作数据的正确性/一致性,来一个一个盘一下:1.互斥锁:就是经常见到的mutex,每个线程在对共享资源(比如一个作为缓冲区的全局数组)进行操作前先申请互斥锁,申请到的可以进行操作,没申请到的要阻塞阻塞阻塞!互斥锁的释放只能由加锁的那个线程来释放。互斥锁只有加锁、解锁两种操作。2.读写锁:读写锁适合用于读操作多的场景。拥有读锁的线程可以读资源,拥有写锁的线程可以写资源。某线程对资源加读锁时,其他线程可以也可以加读锁,但是不能加写锁(意味着有人在读的时候,其他人也原创 2021-05-28 20:09:49 · 1498 阅读 · 0 评论 -
日常学习记录4:socket编程
记录一下socket编程的流程,分为服务端与客户端。 1.服务端(TCP)1.1 地址结构体声明1.2 创建socket1.3 地址结构体赋值1.4 绑定socket与地址结构体1.5 设置监听模式1.6 等待客户端连接1.7 与客户端通信1.8 关闭socket释放资源2.客户端(TCP)2.1 地址结构体声明2.2 创建socket2.3 地址结构体赋值2.4 连接服务器2.5 与服务端通信2.6 关闭socket释放资源3.完整代码3.1 服务端3.2 客户端1.服务端(TCP)1.1 地址结构原创 2021-05-19 21:15:30 · 661 阅读 · 0 评论 -
日常学习记录3:数值的补码存储
1.计算机中的数字存储计算机里都是用补码存储数值的,原码、反码、补码的转换(有符号数):原码->反码:符号位不变,其它位置取反 == >0001->0110 1001->1110原码->补码(正数):不变,原码补码相等 ==> 0001->0001原码->补码(负数):原码->反码后+1 ==> 1001->1110->1111补码->原码(正数):不变,原码补码相等 ==> 0001->0001补码-&原创 2021-05-18 12:22:03 · 327 阅读 · 0 评论 -
日常学习记录2:auto和decltype
1.auto关键字用于自动推断类型,根据等号右边变量的类型或字面值e.g.1:int i1= 1;double d1 = 2.1;auto i2= i1;//i2是int型auto i3= 5;//i3是int型auto d2= d1;//d2是double型e.g.2:一句auto可以声明并初始化多个变量,但是等号右边变量必须是同一基本类型int i1 = 1, i2 = 2;double d = 1.1;auto a = i1, b = i2;//合...原创 2021-01-27 02:06:43 · 132 阅读 · 0 评论 -
日常学习记录1:基本类型占用字节、字节补齐、cosnt
1.C++基本类型所占字节数类型 16位 32位 64位 char 1 1 1 char*(指针变量) 2 4 8 short 2 2 2 int 2 4 4 unsigned int 2 4 4 long 4 4 8 unsigned long 4 4 8 long long 8 8 8 float原创 2021-01-19 18:20:09 · 165 阅读 · 0 评论