自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——位运算

每一位比特位的判断都会出现这4种情况,假设n==1,要么出现3个0(b),还有1个0(a)要么是其他三种情况。当我们把它们的总和%3就可以发现如果结果为1则代表该位上一定是构成a的必要比特位~所以我们只需要遍历每一位比特位的和并%3就可以得到最后的结果a~a^b就代表是无进位相加的结果,而(a&b)<<1则代表进位结果,当出现进位就意味着计算还没有结束,属于让二者进行相加,直到没有进位出现。这个更简单了,直接用知识点总结的异或规律即可。

2025-01-25 23:39:31 468

原创 动态规划(路径问题)

dp[i][j]:表示走到i,j位置时,一共有多少种方法~其实动态规划核心就在于初始化和状态转移方程,之所以初始化主要考虑的就是填表边界情况,把特殊情况考虑了才方便让dp表一次到位。而状态转移方程尤其需要注意最近一步,一定得分析是如何到这一步的~

2025-01-23 22:13:20 624

原创 动态规划(多状态)

【代码】动态规划(多状态)

2025-01-20 23:44:29 458

原创 秒懂Linux之Reactor 反应堆模式

关于Reactor反应堆一些粗略地分析,后期会作更详细的说明解析

2024-12-25 13:48:53 622

原创 秒懂Linux之多路转接 epoll

poll并不是我们本次学习的重点,下面我们来谈谈epoll~

2024-12-20 14:48:21 710 1

原创 秒懂Linux之多路转接 select

系统提供select函数来实现多路复用输入输出模型. 可以对应到前文的钓鱼例子~select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;参数nfds是需要监视的最大的+1;分别对应于需要检测的,可写文件描述符的集合及异常文件描述符的集合;参数timeout为结构timeval,用来设置select()的NULL:则表示select()没有timeoutselect将一直被阻塞,直到某个文件描述符上发生了事件;0。

2024-12-18 23:08:49 1091 1

原创 秒懂Linux之五种 IO 模型与阻塞 IO

首先要理解一点:通信的本质就是IO,而IO的本质就是input(输入)output(输出),如果我们的读取条件不满足那么recv就会被阻塞,直到识别到可读取数据。我们把文件变为非阻塞IO后,没有读取到数据系统调用直接返回,当然也可以正常读取到,但不会像之前一样只为了等待数据的出现,没有出现那就不会等待。高效的IO并不是专注于拷贝,这是硬件层面的工作,而是在单位时间内,等待的比重越低则IO效率越高。我们先尝试正常阻塞IO的情况,可以看出如果键盘不输入那么IO就会一直阻塞等待可读取的数据。

2024-12-18 15:52:21 852 2

原创 秒懂Linux之数据链路层、代理服务、内网穿透

目录 以太网帧格式认识 MTU 理解 MAC 地址和 IP 地址ARP 协议代理服务器正向代理功能特点反向代理应用场景NAT 和代理服务器正向代理和反向代理内网穿透内网打洞在以太网中,主机A并不会直接向主机D发送报文,而是向以太网中的所有主机发送,如果是非目标主机收到它们会在核实后在链路层把该报文丢弃,最终主机D成功收到主机A发送的报文。不过在这个过程中其他主机都不能发送报文,否则会干扰到主机A。所以我们引入了交换机的概念,经过它的时候就跟之前一样,还是要避免干扰。当主机在其同一侧通信时,交换机会收集它们的

2024-12-17 23:33:13 694 1

原创 秒懂Linux之网络层协议

IP协议ip就是负责主机之间的定位与路由选择。核心在于它提供了一种能力,将数据从A点跨越网络到达B点,这是网络层ip协议负责的,而数据间的可靠性则是传输层tcp协议负责~协议头格式: 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4.4 位头部长度: IP 头部的长度是多少个 32bit, 也就是 length4 的字节数. 4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节.

2024-12-16 17:08:33 1001 1

原创 秒懂Linux之传输层协议UDP/TCP

在前面套接字的讲解中我们已经接触到了UDP/TCP它们各自的使用方法,而本次我们来深入了解它们背后蕴含的原理~

2024-12-04 22:22:51 985 1

原创 秒懂Linux之- HTTPS协议原理

这里我们利用非对称加密的密钥对对称密钥X进行加密,这样就可以确保密钥在传输过程中的安全性了,如果中间商没有截取到s(公钥)是无法获取到对称密钥X的,也就无法得知对称通信过程中的所有内容。中间商很是狡猾,在截取到s(公钥)后替换为自己的密钥然后再次加密发送迷惑客户端,最终在双方不知情的情况下获取到了双发的对称通信密钥X。在非对称加密中,一方密钥专门进行加密,另一方专门进行解密,但还是有一个弊端,在密钥传输的过程中需要进行加密,不可以明文形式传输。保证证书的合法性,进一步保证证书中携带的服务端公钥权威性。

2024-11-24 23:05:39 705 1

原创 秒懂Linux之cookie与session

首先我们要知道,http协议是无状态,无连接的。那么我们往常发送的请求它是如何处理的?每一次不是意味着都是新的请求吗?浏览器又是如何做到保持我们的登录状态的呢?而这就跟我们下面要学到的cookie有关了~定义(也称为Web Cookie、浏览器Cookie或简称Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等.

2024-11-21 23:44:24 823

原创 秒懂Linux之应用层协议 HTTP

在互联网世界中,HTTPyperextransferrotocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)。HTTP协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是一个的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

2024-11-16 23:15:49 843

原创 秒懂Linux之序列化及反序列化

约定方案一•客户端发送一个形如"1+1"的字符串;•这个字符串中有两个操作数都是整形;•两个数字之间会有一个字符是运算符运算符只能是•数字和运算符之间没有空格;约定方案二•定义结构体来表示我们需要交互的信息;•发送数据时将这个结构体按照一个规则转换成字符串接收到数据的时候再按照相同的规则把字符串转化回结构体;•这个过程叫做序列化和反序列化我们先把话题放在这里,下面我们来学习一种模式:模板方法模式。

2024-11-08 00:15:07 892

原创 秒懂Linux之Socket编程(四)

第一种:1.fork&&pipe 2.dup(管道重定向)3.exec(执行外部命令函数) 3.dup。接下来我们要把一些安全指令加载进Command中,只有识别到是安全命令才会去执行。当前我们是把处理命令的业务交给回调函数去执行,服务端只需要读取命令即可~基本流程:由客户端发送命令,然后服务端接收并执行命令~第二种:popen:底层自动建立管道与子进程。不过也有太死板的地方,我们再来改进一下~接下来我们来对命令方面的处理进行封装~但在学习前我将提出几点疑问~

2024-11-02 21:00:24 818

原创 秒懂Linux之Socket编程(三)

不过进程成本过高,我们接下来再尝试一下线程池的版本~

2024-10-29 23:09:34 707

原创 秒懂Linux之Socket编程(二)

设计思路:通过服务端接收来自各个客户端的信息,然后把信息传递给通信模块,让通信模块把数据传递到线程池中,由多线程分发给各个客户端信息达到客户端之间共享信息的目的~最后需要理解的就是回调函数func的调用以及如何利用bind来解决参数问题~最后关键的一步就是我们应该如何利用function让服务端接入翻译功能。在多线程的情况下线程应该是争抢任务?目前还无法理解,如同第一点。各个客户端是怎么保持通信即消息同步的?如何正确理解多个bind?

2024-10-25 00:29:22 460

原创 秒懂Linux之Socket 编程(一)

跨网路由器的分析演示:认识端口号我们上网无非就两种动作:1.把远程的数据拉取到本地。2.把我的数据发送到远方。大部分的网络通讯行为都是用户触发的,那在计算机中谁代表用户呢?——进程~把数据发送到目标主机不是目的,而是手段,真正的目的是把数据交给主机上的某一个服务进程。既然是要把数据交给这些服务进程,那么它们必须具有唯一的标识:端口号。网络通信的本质其实是进程在帮我们进行网络通信,无论是服务端还是客户端,而IP(标识唯一主机)+port(该主机唯一进程) = 互联网唯一的进程。

2024-10-21 23:44:33 1055

原创 秒懂Linux之网络初识

独立模式计算机之间相互独立~网络互联多台计算机连接在一起完成数据共享;局域网LAN:计算机数量更多了通过交换机和路由器连接在一起广域网WAN:将远隔千里的计算机都连在一起;

2024-10-19 00:32:17 1068

原创 秒懂Linux之线程(下)

秒懂Linux之线程(中)-优快云博客秒懂Linux之线程-优快云博客基于环形队列的生产消费模型原理我们继续延用生产消费模型搭配环形队列来说明信号量原理~之前我们把队列当作整体资源用锁来保护,现在我们把整体资源拆分成多个小份放在环形队列中,用信号量进行保护~单生产单消费演示机制:当然可以,在该条件下生产不用顾虑队列已满,消费也不用担心队列已空。是可以做到生产与消费的并发的~是不同于阻塞队列的,看似并发,实际上仍是依靠提醒(signal)机制。

2024-10-16 21:21:52 798

原创 秒懂Linux之线程(中)

在前面的文章中我们主要接触单线程下的场景,那么现在我们来尝试一下多线程等等更多的新知识点~秒懂Linux之线程-优快云博客。

2024-10-15 00:06:54 857

原创 秒懂Linux之线程

给不同线程分配不同的区域,本质上就是让不同的线程各自看到全部页表的子集~

2024-10-03 02:43:44 946 2

原创 秒懂Linux之信号

我们也可以去修改进程接收到信号的默认动作~signal函数本质是根据修改的信号让其进入handler回调函数来实现信号的自定义处理~//不终止进程,而是让该信号打印一句话int main()while(1)sleep(1);return 0;需要注意的是调用signal后回调函数handler并不会立刻执行,而是等接收到对应的信号才执行~

2024-09-27 00:33:45 943

原创 秒懂Linux之消息队列与信号量(了解)

消息队列与信息量目前已经不常用了,大家也可以参考共享内存去了解基本原理即可。

2024-09-21 01:09:18 887 1

原创 秒懂Linux之共享内存

一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,前的管道通信是通过创建管道这种特殊文件让不同进程在内核中通过打开同一个文件来建立通信。返回值:成功返回一个非负整数,即该共享内存段的标识码;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。返回值:成功返回一个指针,指向共享内存第一个节;指向一个保存着共享内存的模式状态和访问权限的数据结构。注意:将共享内存段与当前进程脱离不等于删除共享内存段。由九个权限标志构成,它们的用法和创建文件时使用的。返回的共享内存标识码。

2024-09-21 01:04:51 1013

原创 秒懂C++之类型转换

自定义类型之间->自定义类型之间,本质借助构造,隐式类型转换 如:initializer_list和容器。这个还是很不错的,可以有效避免父类指针指向父类对象时转换为子类指针的越界访问问题~学完C++后我们可以见到以下三种场景。我们再来根据使用场景来划分~感觉很少见到,了解即可~就是强制类型转换的标识~

2024-09-18 23:27:52 753

原创 秒懂C++之特殊类设计

多个单例类有初始化启动依赖关系,饿汉无法控制。假设:A和B两个单例,假设要求A先初始化,B再初始化,饿汉无法保证。想让一些数据,当前程序只有一份,那就可以把这些数据放到这个类里面,再把这个类设计成单例,这个数据就只有一份了。懒汉优点:第一次使用实例对象时,创建对象。多个单例实例启动顺序自由控。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊,初始化网络连接啊,读取。文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。

2024-09-18 22:28:17 643

原创 秒懂C++之智能指针

为了解决抛异常所造成的内存泄漏等问题~秒懂C++之异常-优快云博客~我们来学习智能指针的相关用法~智能指针的使用及原理RAIIRAII)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。int div()

2024-09-17 16:40:48 1152

原创 秒懂Linux之管道通信

两个进程之间可以进行数据的直接传递吗?——不可以,进程必须得具备独立性。进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

2024-09-12 23:44:50 1062 2

原创 秒懂C++之异常

传统的错误处理机制:1.终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。2.返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误。

2024-09-11 23:28:31 970

原创 秒懂C++之C11新特性

介绍了C11出现的一些新的特性

2024-09-10 00:50:33 1394

原创 秒懂Linux之动静态库

所以小明就只把汇编后的.o文件发给小强,让他自己去和main函数进行链接~

2024-09-07 00:02:53 589

原创 秒懂C++之哈希的应用

增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小,与数据量大小无关哈希函数相互之间没有关系,方便硬件并行运算布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势数据量很大时,布隆过滤器可以表示全集,其他数据结构不能使用同一组散列函数的布隆过滤器可以进行交、并、差运算。

2024-09-03 23:39:00 1096

原创 秒懂Linux之文件系统

进程打开文件时,是否意味着系统内的所有文件都被打开了呢?不是的,大部分文件不会被打开,那么没打开的文件又会被保存在哪里呢?存储在磁盘,SSD中~按理来说OS是不会涉及磁盘内容的~但为了让用户更快更方便找到文件,OS里的一个管理模块(文件系统)会专门来管理这些未打开的文件。以类比进行举例:我们平时存快递的菜鸟驿站就相当于磁盘,而菜鸟驿站的老板就是OS所属的管理模块之一(文件系统),通过有效的管理帮助用户快速查找未打开的文件~

2024-09-03 23:34:52 960 2

原创 秒懂C++之哈希

这种除留余数法虽然可以解决空间浪费的问题,但是却有不同的值映射到相同位置的风险~这种扩容方式的麻烦之处就在于遍历旧表插入新表时还得按下面插入的内容再走一次~这样遍历旧表插入新表的时候就可以用成员函数insert进行复用。这里我们不直接用容器list的原因是方便自己写一个迭代器。最后我们再来写一下关于字符串取模的类模板~当遇到删除的标记,查找则继续往下遍历~删除我们得考虑在这之后节点之间的链接~下面的状态标记帮我们解决了问题~插入是解决了,那么删除的问题呢?

2024-09-01 19:54:37 1094 2

原创 秒懂C++之set、map的封装

这就有点奇怪了,红黑树设置kv模型第一个参数为pair就行了,为什么这里有两个参数?前我们还面临一个问题,key是不支持修改的~而我们现在只能通过降低传参权限去限制~我们修改获取_data数据的方式就行了~

2024-08-24 22:45:17 1072

原创 秒懂C++之红黑树

秒懂C++之AVL树-优快云博客。

2024-08-23 21:08:19 726

原创 秒懂Linux之缓冲区

当我们写入数据到文件调用my_fwrite的时候先不要着急调用系统接口,而是把数据拷贝到我们的缓冲区中。然后再等到缓冲区积累一定数据再统一拷贝给系统接口就可以很好提高效率了~可是这样会频繁去调用我们的系统接口~有没有减少该成本的办法呢?

2024-08-22 02:03:54 880

原创 秒懂C++之AVL树

最后我们来总结一下关于旋转的规律~插入节点后如果遇到这种折线型那就从下半部位看起,然后再去判断上半部位,而最终的效果图都会呈现出向上箭头~通过以上例子我们得出了平衡因子的变化情况,以及变化后对祖先节点的影响情况~下面我们来把这些示例转化为代码进行实现~写法二是利于后序的思路先从叶子节点开始判断并且返回其高度,这样做的好处就是不用重复计算高度差,但是写法难理解~_parent存在的意义就是为了后续插入节点时可以去观察其祖先节点的变化情况,看是否会连环出现变化~这是抽象图的理解,我们再来拿具体例子进行说明~

2024-08-21 23:09:48 476

原创 秒懂Linux之文件

在我们学习文件之前得先明白文件是什么?——文件 = 内容 + 属性——文件是谁打开的呢?——文件由进程调度打开,当然前提是文件必须先加载入内存中~我们在访问文件之前必须得先打开,修改文件就是通过执行代码的方式进行修改——文件都是呈现被进程打开的状态吗?——虽然一个进程可以打开很多个文件,但并不是会全部打开,不去访问的文件会存储在磁盘中等待——

2024-08-20 23:03:39 1011

空空如也

空空如也

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

TA关注的人

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