自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 linux篇【17】:网络IP层协议

协议头格式,网络层分片,网段划分,私有IP地址和公网IP地址,NAT技术,路由

2023-03-15 09:06:54 803 6

原创 linux篇【16】:传输层协议<后序>

滑动窗口,流量控制,拥塞控制,延迟应答,拥塞控制,捎带应答——tcp应答真相,面向字节流解释

2023-03-06 15:15:58 720 6

原创 linux篇【16】:传输层协议<前序>

再谈端口号,UDP协议协议段格式,TCP协议协议段格式,可靠性问题,确认应答(ACK)机制,tcp的发送和接收缓冲区,TCP三次握手,超时重传机制,连接管理机制,listen的第2个参数

2023-02-21 16:50:44 703 5

原创 linux篇【15】:应用层-网络https协议

HTTPS介绍,HTTPS 的⼯作过程探究,对称加密

2023-02-14 18:33:58 886 5

原创 linux篇【14】:网络http协议

认识URL,http协议的请求与响应,telnet 命令,初步使用html,表单,GET Vs POST

2023-01-13 11:33:35 2909 14

原创 linux篇【13】:网络应用层—网络版计算器,序列化

1.应用层;2.序列化,反序列化;3.网络版计算器;json 序列化和反序列化;

2023-01-10 18:57:58 1032 16

原创 计算机组成原理【1】初识硬件

数据就是计算机想要的货物,CPU不同于菜鸟驿站的地方:CPU不仅可以取数据也可以写数据MAR:地址寄存器,用于指明要读/写哪个存储单元。其位数反映存储单元数量MDR:数据寄存器,用于暂存要读/写的数据。其位数=存储字长注意:MAR、MDR逻辑属于主存,但是现在的计算机通常把MAR、MDR也集成在CPU内。

2023-01-01 10:20:24 1035 6

原创 linux篇【12】:网络套接字<后序>—tcp接入线程池并改为守护进程

父进程的id。进程本身的id。当前进程所属的进程组。(同组进程的第一个进程一般是进程组的组长)当前进程的会话id。COMMAND:命令。进程启动的时长。用户名映射后的数字,用户UID。TPGID:当前进程组和终端相关的信息,-1 说明进程和终端无关系,非-1说明有关。哪一个终端用户登录时会建立一个会话,会话内部会构建一个前台进程组 和 0个或者多个后台进程组,linux下客户端登录时 会给我们加载bash,bash就是前台进程组。

2022-12-24 19:42:06 764 20

原创 linux篇【12】:网络套接字<中序>——tcp

查看TCP网络服务器情况和端口使用情况。

2022-12-15 13:43:19 1064 23

原创 linux篇【12】:网络套接字<前序>—网络基础+udp套接字

目录一.网络基础1.认识 "协议"2.协议分层(1)软件分层(2)协议分层3.OSI七层模型4.TCP/IP五层(或四层)模型5.网络和操作系统之间的关系6.数据包的封装(封包)和解包,分用(1)下图为数据封装,解包的过程 (2)分用7.局域网(以太网)通信的原理(1)局城网中两台主机可以互相通信(2)局域网通信原理(3)MAC地址和IP地址(4)数据包传输通过路由器转发软件是可以分层的,为什么要分层?1.软件在分层的同时,也把问题归类的2.分层的本质:软件上解耦3.便于工程师进行软件维护网络本身的

2022-12-05 17:47:58 3026 17

原创 linux篇【11】:linux下的线程<后序>

POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但POSIX可以用于线程间同步。信号量本质是一个计数器。信号量是一个计数器,这个计数器对应的PV操作(V ++ P --)是原子的。信号量的PV操作:V ++归还资源,P --申请资源申请mutex 访问临界资源之前被切换走了有问题吗?——没问题。资源预定::因为只要我拿到了锁,当前的临界资源就是我的!1.信号量申请成功了,就一定能保证你会拥有一部分临界资源吗?

2022-11-29 21:28:14 1201 16

原创 linux篇【11】:linux下的线程<中序>

加锁范围:临界区,只要对临界区加锁,而且加锁的力度越细越好加锁本质:加锁的本质是让线程执行临界区代码串行化加锁是一套规范,通过临界区对临界资源进行访问的时候,要加就都要加锁保护的是临界区, 任何线程执行临界区代码访问临界资源,都必须先申请锁,前提是都必须先看到锁!那这把锁,本身不就也是临界资源吗?锁的设计者早就想到了pthread_mutex_lock: 竞争和申请锁的过程,就是原子的!申请锁的过程不会中断,不会被打扰。难度在加锁的临界区里面,就没有线程切换了吗????

2022-11-23 20:28:39 1491 21

原创 linux篇【11】:linux下的线程<前序>

1.在进程内部运行的执行流(线程在进程的虚拟地址空间中运行)2.线程比进程力度更细调度成本更低3.线程是CPU调度的基本单位线程(执行流)是系统调度的基本单位!linux下没有真正的线程,Linux的线程是用进程模拟的,他叫做 轻量级进程。线程执行力度比进程更细,调度成本更低(进程切换时不需要切换页表,电地址空间等,只需要切换线程的上下文数据),因为他执行的是进程的一部分,访问的是进程的一部分资源,使用进程的一部分数据曾经:进程——内核数据结构+进程对应的代码和数据承担分配系统资源的基本实体。

2022-11-21 20:04:56 1079 20

原创 linux篇【10】:进程信号

(捕捉)①因为一些系统调用例如open(),用户态—>内核态,处理完open的代码后②本来可以返回代码继续执行了,但是正好处于内核态,就顺便去检测信号,并处理信号。③处理信号:若是阻塞或无信号(忽略/默认)就直接内核态—>用户态返回即可 / 若是非阻塞并有信号的自定义捕捉,就内核态—>用户态执行对应的handler方法。(执行handler方法为什么只能是用户态?解释:内核态是什么都可以做的,如果让内核态做用户自定义代码,万一用户写的是一段恶意代码呢???

2022-11-13 08:48:08 3339 19

原创 linux篇【9】:进程间通信(共享内存)——<后序>

先让不同的进程看到同一份资源进程问通信的前提是:先让不同的进程,看到同一份资源!

2022-11-09 16:53:20 1709 14

原创 linux篇【9】:进程间通信——<前序>

一.通信背景一.通信背景1.进程是具有独立性的!——导致进程为什么要通信:需要多进程进行协同处理一件事情2.不要以为,进程独立了,就是彻底独立,有时候,我们需要双方能够进行一定程度的信息交互数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

2022-11-03 19:07:45 860 24

原创 linux篇【8】:基础IO—<后序>

假如要找第3234个扇区,假如有4个磁盘面,4个磁盘面放在一个数组,一面假设是1000个扇区,3234/1000=3,第一面是0~1000,第二面是1000~2000,第三面是2000~3000,第四面是3000~4000。管理整个分区内一个块的数据,即:记录1GB的block group的属性,例如:有多少inode,起始的inode编号,有多少个inode被使用,有多少block被使用,还剩多少,你的总group大水是多少。对如何管理500GB的文件,变成了对一个1GB的小组数据的管理。

2022-10-26 20:49:02 1313 29

原创 linux篇【8】:基础IO—<前序>

(2)当我们以w方式打开文件,准备写入的时候,其实文件已经先被清空!——不能,所有的上层访问文件的操作,都必须贯穿操作系统。当我们的文件程序,运行起来的时候,才会执行对应的代码,然后才是真正的对文件进行相关的操作。6.通常我们打开文件,访问文件,关闭文件,是谁在进行相关操作?7.学习文件操作:就是学习——进程和打开文件的关系!r+和w+都是既读又写,只是w+多了一个文件不存在就创建文件。默认的进程工作路径是在它所处的路径下,不过这个路径是可以改的。1.当我们向文件写入的时候,最终是不是向磁盘写入?

2022-10-22 17:41:14 1047 21

原创 C++:C++的IO流

EOF)如何终止?答:ctrl z+换行 是规定,ctrl c 是发送信号杀死进程(一般不建议ctrl c)。operator bool:本质是为了支持Date对象转换成boolistream类型对象转换为逻辑条件判断值实际上我们看到使用while(cin>>i)去流中提取对象数据时,调用的是operator>>,返回值是istream类型的对象,那么这里可以做逻辑条件值,源自于istream的对象又调用了operator。

2022-10-22 17:40:51 1787 6

原创 linux篇【7】:进程程序替换

带e的都是可以传环境变量的(execle,execvpe)但是会覆盖系统原有的环境变量,把自己传的环境变量交给进程;2.让子进程执行磁盘中一个全新的程序(shell,想让客户端执行对应的程序,通过我们的进程,执行其他人写的进程代码等等),c/c++ -> c/c++/Python/Shell/Php/Java...答:不用判断返回值(但是还是需要返回值),因为一旦替换成功,就不会有返回值,也不会执行返回语句,因为int ret 这个返回值也是当前进程的代码和数据,execl一旦替换成功,是将。

2022-10-19 11:28:19 845 11

原创 C++:特殊类设计

2. 提供一个静态的成员函数:提供返回构造函数的公有函数时,发现没对象调不了,对象还得通过调用这个函数去构造生成——先有鸡还是先有蛋的循环,所以给这个成员函数加上static,静态的成员函数没有this指针,可以直接通过类域调用该函数,在该静态成员函数中完成堆对象的创建。①这里我们创建静态变量,为了只有一个实例对象,需要把构造函数私有,这个对象为了能访问私有的构造函数,我们需要把它放在类中声明,让它成为类的成员,可以在类外定义。拷贝构造声明成私有,防止别人调用拷贝在栈上生成对象。

2022-10-15 20:17:14 571 10

原创 C++:C++的类型转换

在C语言中,如果。1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2. 显式类型转化:需要用户自己处理C风格的转换格式很简单,但是有不少缺点的:1. 隐式类型转化有些情况下可能会出问题:比如数据精度丢失2. 显式类型转换将所有情况混合在一起,代码不够清晰因此C++提出了自己的类型转化风格,注意。

2022-10-10 11:44:36 3249 13

原创 C++:智能指针

借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。

2022-10-08 16:24:21 642 10

原创 C++:异常

此时throw抛异常的地方直接跳到catch中,抛的异常类型要对上,所以这里跳到catch (const char* errmsg){// 当b == 0时抛出异常";try{Func();}3. 异常的使用3.1 异常的抛出和捕获异常的抛出和匹配原则1. 异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个catch的处理代码。2. 被选中的处理代码。

2022-10-01 13:23:52 213 6

原创 C++11:lambda表达式

lambda表达式就是定义了一个可调用的匿名函数,一般在局部。1.格式mutable捕捉列表 参数去const(单词意思易变的)返回值 函数体};2. lambda表达式各部分说明,该列表总是出现在lambda函数的开始位置,,。捕捉的参数都是自带const的,想要去掉const属性可以用mutable,但是捕捉的对象(变量)仍是一份拷贝,外部的a,b无法被修改,所以mutable 很少用,意义不大,不如用 [&]引用捕捉 ( )引用传参。

2022-09-30 22:05:22 16197 9

原创 C++:C++11

移动构造:拷贝将亡值时不能对将亡值深拷贝,应直接把将亡值的资源交给新的对象,就是把将亡值指向资源的地址直接给新的对象{{public:// 移动构造string(string&& s) 右值匹配{cout

2022-09-22 18:22:47 942 10

原创 C++:位图,布隆过滤器

方法:用两个 bitset 数组 _bs1,_bs2记录,x对应两个数组的比特位来记录这个数出现的次数,_bs1对应比特位是0,_bs2对应比特位是0,就是出现0次;_bs1对应比特位是0,_bs2对应比特位是1,就是出现1次;_bs1对应比特位是1,_bs2对应比特位是0,就是出现2次;原本4个字节存一个数,现在1个bit存一个数的状态,1字节=8bit,4字节=32bit,16G/32=500MB,现在消耗500MB即可。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一。

2022-09-15 23:00:58 480 10

原创 C++:哈希,unordered_map和unordered_set

unordered_map和unordered_set和map/set用法一样,不同就是unordered_map和unordered_set不排序,map/set自动排序。

2022-09-07 15:45:24 2246 5

原创 linux篇【6】:进程等待

linux会维护一张废弃的数据结构链表叫 obj,若释放进程,对应的进程的数据结构会被维护到这个链表中,这个链表没有释放空间,只是被设成无效,需要时就拿,节省开辟时间(这样的链表也称 内核的数据结构缓冲池,操作系统叫:slab分派器)打印的是上一次 echo $?通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副 本。fork之后,父子共享所有的代码,但fork之前的代码也是父子共享的,只不过子进程只能执行fork之后的。新进程为子进程,而原进程为父进程。.

2022-08-30 18:51:37 888 11

原创 linux篇【5】:环境变量,程序地址空间

基本指令也是程序,为什么我们的代码程序运行要带路径,而系统的指令不用带路径?我们给main所数传递的argc,char*argv[], 命令行参数,传递的是,命令行中输入的程序名和选项!——①把自己的程序拷贝进环境变量中,就可以直接myproc执行程序了,拷贝的过程就是安装软件,但是。——②把myproc自己的文件加入环境变量PATH中,export PATH=——同一个程序,通过传递不同的参数,让同一个程序有不同的执行逻辑,执行结果。答:系统中是存在相关的环境变量,保存了程序的搜索路径的!........

2022-08-28 12:32:41 927 14

原创 linux篇【4】:进程与操作系统

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。输入输出设备不和CPU直接打交道,而是把数据放到内存中。CPU也是直接从内存中读数据。输入:键盘,话筒,摄像头,磁盘,网卡...输出:显示器,音响,磁盘,网卡,显卡...(运算器+控制器) [CPU]:算数计算+逻辑计算存储器:就是内存。.......................................

2022-08-24 17:51:21 1058 11

原创 C++:红黑树

1.红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。(最长的路径不超过最短路径的2倍,近似平衡)2.红黑树的性质1.每个结点不是红色就是黑色2.根节点是黑色的3. 如果一个节点是红色的,则它的两个孩子结点是黑色的(没有连续的红色节点)

2022-08-21 23:27:46 1411 5

原创 C++:AVL树

二叉搜索树虽可以缩短查找的效率,但。

2022-08-19 14:17:41 845 6

原创 C++:map和set

set 是一个K模型的搜索二叉树 #includemap是KV模型的搜索二叉树,insert和[]用法是重点,其他用法参考set用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。............

2022-08-18 13:11:15 2747 7

原创 C++:搜索二叉树

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:①若它的左子树不为空,则左子树上所有节点的值都小于根节点的值②若它的右子树不为空,则右子树上所有节点的值都大于根节点的值③它的左右子树也分别为二叉搜索树即:任意一个子树都需要满足,左子树的值........................

2022-08-16 18:38:03 674 12

原创 C++:多态 详解

多态的概念:通俗来说,就是多种形态,。举个例子:比如,当买票时,是全价买票;买票时,是半价买票;买票时是优先买票。再举个栗子:最近为了,支付宝年底经常会做诱人的的活动。那么大家想想为什么有人扫的红包又大又新鲜8块、10块...,而有人扫的红包都是1毛,5毛....。其实这背后也是一个多态行为。支付宝首先会分析你的账户数据,比如你是新用户、比如你没有经常支付宝支付等等,那么你需要被鼓励使用支付宝,那么就你扫码金额=;.................................

2022-08-05 18:09:55 28901 22

原创 C++:封装,继承

定义:类设计层次的复用下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了Student和Teacher复用了Person的成员。下面我们使用监视窗口查看Student和Teacher对象,可以看到变量的复用。调用Print可以看到成员函数的复用。...........................

2022-08-04 18:20:32 786 7

原创 C++:array,模板特化 详解

array对比原生数组,还是有一些越界检查的优势的。但是实际中我们统一直接用vector更香!5.非类型模板参数(1)非类型模板参数是常量,不可修改全特化即是将模板参数列表中所有的参数都确定化半特化/偏特化 :1、将模板参数类表中的一部分参数特化。2、偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来class Data{public:}private:T1 _d1;T2 _d2;};// 全特化 :全特化即是将模板参数列表中所有的参数都确定化。.........

2022-08-02 21:33:11 916 4

原创 C++:栈与队列,优先级队列(+仿函数,反向迭代器,typename)

优先级队列的问题优先级队列默认大的优先级高,传的是less仿函数,底层是一个大堆;想控制小的优先级高,传greater仿函数,底层是一个小堆。这个反过来的,算是设计的一个失误。(实际上less——大堆,greater——小堆,greater可理解为小堆下面越来越大)...........................

2022-07-31 11:17:46 541 6

原创 C++:stl_List的介绍与模拟实现

stl_List的介绍与模拟实现

2022-07-27 22:10:13 599 16

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除