自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 25. 图

3. 完全图:在,若,即,则称此图为,比如上图G1;在中,若,即,则称此图为,比如上图G4。。在有向图中,,其中顶点v的,记作indev(v);顶点v的,记作outdev(v)。注意:对于,即dev(v) = indev(v) = outdev(v)。5.路径长度:对于;对于。6.连通图:在中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。7.强连通图:在中,若在生成树:一个称作该图的生成树。。

2025-08-04 10:11:40 1181

原创 14. Reactor 反应堆模式

Reactor 反应堆模式,本质是让框架帮你 “等事件、分任务”,你只需要写 “事件发生后做什么”。像餐厅经理:盯着所有事件(新客、加菜),有事就喊对应服务员处理。用事件驱动替代轮询,把 “人等事” 变成 “事找人”,大幅提升高并发场景下的效率。理解 Reactor 后,再看 Nginx、Redis 的网络模型,就会发现它们都是这套逻辑的延伸ovo基于 Reactor 模式的 TCP 服务器框架设计。

2025-08-02 10:13:34 793

原创 13. 多路转接 epoll

epoll用红黑树管理监控的fd,用就绪链表快速返回事件,靠回调机制实现自动通知,让内核和用户态高效配合,处理高并发 I/O 事件。epoll用生产者 - 消费者模型管理就绪事件,epoll_wait不怕缓冲区小(没拿完下次继续),epoll_ctl负责 “插节点 + 注册回调”,且接口线程安全,用户处理事件时不用额外校验,拿到的都是真・就绪事件当某一进程调用方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与 epoll的使用方式密切相关....

2025-08-02 10:13:13 1009

原创 12. 多路转接 select

系统提供select函数来实现多路复用输入输出模型•select 系统调用是用来让我们的程序监视多个文件描述符的状态变化的;•程序会停在 select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变;

2025-08-01 11:21:16 934

原创 11. 五种 IO 模型与阻塞 IO

IO为什么比较慢?为什么访问外设会比较慢?IO了,你想读,就一定有数据吗?--所以,什么叫做IO效率高?--

2025-08-01 11:21:01 820

原创 10. NAT,代理服务,内网穿透

NAT技术当前解决IP地址不够用的主要手段是路由器的一个重要功能;•NAT 能够将私有IP对外通信时转为全局IP.也就是就是一种将私有IP和全局 IP 相互转化的技术方法•很多学校,家庭公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局 IP;•全局 IP要求唯一但是私有IP不需要;在不同的局域网中出现相同的私有IP 是完全不影响的;

2025-07-31 10:48:07 675

原创 9. 数据链路层

用于两个设备(同一种数据链路节点之间进行传递。

2025-07-31 10:47:42 1357

原创 8. 网络层

在复杂的网络环境中确定一个合适的路径。

2025-07-30 18:39:29 970

原创 7. 传输层协议 TCP

TCP全称为传输控制协议要对数据的传 输进行一个详细的控制。

2025-07-30 18:39:12 1020

原创 6. 传输层协议 UDP

负责数据能够从发送端传输接收端.

2025-07-29 08:11:57 884

原创 5.应用层协议 HTTP

HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息 --- 无状态,会给用户造成困扰,不会记录用户信息,就要手动输入,扫码。。。所以,引入cookie,session。

2025-07-29 08:11:39 792

原创 4.应用层自定义协议与序列化

程序员写的一个个解决我们实际问题满足我们日常需求的网络程序都是在应用层。

2025-07-28 22:08:04 997

原创 3. Socket 编程 TCP

1. TCP网络程序1. TCP网络程序。

2025-07-28 22:07:47 1061

原创 2.Socket 编程 UDP

实现一个简单的英译汉的网络字典。

2025-06-10 16:30:29 664

原创 1. 网络基础

• TCP/IP 协议的本质是一种解决方案• TCP/IP 协议能分层,前提是因为问题们本身能分层。

2025-06-10 16:29:45 1240

原创 9.贪心算法(随想录)

还有动态规划方法。

2025-06-08 12:21:45 223

原创 8. 二叉树(随想录)

反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。最后如果左右子树都不为空,返回左右子树深度最小值 + 1。所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。1.中序转化为数组后比较;2.利用双指针一次遍历比较。

2025-06-08 12:21:13 160

原创 5.排序算法

希尔排序法⼜称缩⼩增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap = n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。它是在直接插⼊排序算法的基础上进⾏改进⽽来的,综合来说它的效率肯定是要⾼于直接插⼊排序算法的。创建前后指针,从左往右找⽐基准值⼩的进⾏交换,使得⼩的都排在基准值的左边。lomuto前后指针。

2025-06-08 12:20:26 163

原创 4.二叉树

在⽂件系统中,树结构被⼴泛应⽤,它通过⽗结点和⼦结点之间的关系来表⽰不同层级的⽂件和⽂件夹之间的关联。对于Top-K问题,能想到的最简单直接的⽅式就是排序,但是:如果数据量⾮常⼤,排序就不太可取了(可能数据都不能⼀下⼦全部加载到内存中)。⼀个⼆叉树,如果每⼀个层的结点数都达到最⼤值,则这个⼆叉树就是满⼆叉树。也就是说,如果⼀个⼆叉树的层数为 K。⼀般堆使⽤顺序结构的数组来存储数据,堆是⼀种特殊的⼆叉树,具有⼆叉树的特性的同时,还具备其他的特性。将根结点最⼤的堆叫做最⼤堆或⼤根堆,根结点最⼩的堆。

2025-06-08 12:20:04 325

原创 26. LRU Cache

LRU是的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM(随机存取存储器), 通常它不像系统主存那样使用 DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘 之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache──称为。

2025-06-08 12:04:03 285

原创 12. 线程同步与互斥

线程是共享地址空间的-》线程会共享大部分资源-》公共资源-》导致各种情况的数据不一致问题-》为了解决这些问题:同步和互斥。

2025-06-08 10:07:49 834

原创 11. 线程概念与控制

进程 = 内核数据结构 + 代码和数据(执行流)线程 = 是进程内部的一个执行分支(执行流)【线程在进程地址空间内执行】执行流 <= 进程进程:承担分配系统资源的基本实体线程:CPU调度的基本单位执行流轻量级进程进程强调独占,部分共享(比如通信的时候)线程强调共享,部分独占。

2025-06-08 10:07:34 823

原创 10.Linux进程信号

编号34以上的是实时信号;这些信号各⾃在什么条件下产⽣,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal。

2025-06-07 23:54:04 857

原创 9.进程间通信

为啥要有进程间通信?如果未来进程之间要协同呢?一个进程要把自己的数据交给另一个进程!进程是具有独立性的,所以把一个进程的数据交给另一个进程----基本不可能!必须通信起来,就必须要有另一个人的参与:操作系统!

2025-06-07 23:53:33 1039

原创 8.库制作与原理

库是写好的现有的,成熟的,可以复⽤的代码。

2025-06-07 23:53:14 829

原创 7. Ext系列文件系统

已知,真正找到磁盘上的文件的并不是文件名,而是inode。其实在linux中可以让多个文件名对应于同一个inode1.可知软链接是一个独立的文件,因为他有独立的inode;软链接相当于windows中的快捷方式,链接文件类型;软链接指向的文件的路径字符串文件 = 属性 + 内容2.硬链接不是一个独立的文件,因为他没有独立的inode;他本质是在指定目录下,建立新的文件名和目标inode的映射关系,并没有在系统层面创建新的文件。

2025-06-03 14:59:55 1027

原创 6. 基础IO

缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间⽤来缓冲输⼊或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输⼊设备还是输出设备,分为输⼊缓冲区和输出缓冲区。5.2为什么要引入缓冲区机制。

2025-06-03 14:59:30 1118

原创 7. 栈与队列(随想录)

2025-04-21 17:23:50 244

原创 5. 进程控制

fork函数从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进程为⽗进程。所以,在C/C++上申请空间malloc or new 的时候,需要在物理内存里开辟空间吗??开辟虚拟空间即可!!(惰性空间开辟)真正使用的时候,OS才会给你做内存级申请->构建完整的映射关系。(对于用户来说,完全透明,她不知道,也无需知道)

2025-04-21 07:52:36 1415

原创 4.回溯算法(随想录)

还有一种方法隐藏了回溯(利用形参不改变实参)

2025-04-20 20:22:04 254

原创 6. 字符串(随想录)

太6了(真不是人做的)

2025-04-20 20:21:26 211

原创 4.进程概念

本地变量:只在父进程(bash)内部有效!环境变量,为什么具有全局属性?环境变量被子进程继承下去,然后会子子孙孙哈哈哈内建命令:大部分命令是可执行程序。需要通过创建子进程的性质执行,linux中,有一部分命令,执行的时候,没有风险,需要bash自己执行,这种命令叫做内建命令5.程序地址空间。

2025-04-19 08:17:30 974

原创 3.基础开发工具

在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂ 件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数, 但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则 需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。2.动态库与之相反,在编译链接时并没有把库⽂件的代码加⼊到可执⾏⽂件中,⽽是在程序执⾏时由 运⾏时链接⽂件加载库,这样可以节省系统的开销。其后缀名⼀般为“.a ”

2025-04-19 08:17:10 1038

原创 ​2.linux权限

命令:su 【用户名】功能:切换用户*身份匹配,只会从拥有者,所属组,other的顺序,匹配成功一次2.chown功能:修改文件的拥有者格式:chown【参数】 用户名 文件名3.chgrp功能:修改文件或目录的所属组格式:chgrp 【参数】用户组名 文件名4.umask语法:file [选项⽂件或⽬录...

2025-04-18 14:09:57 226

原创 1.Linux基础指令

使用XShell 远程登录 Linux使用XShell 远程登录 Linux1.查看 Linux 主机 ip在终端下敲ifconfig指令, 查看到 ip 地址2.XShell 下的复制粘贴复制:粘贴:语法:ls [选项] [目录/文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。语法:pwd功能:显示用户当前所在的目录语法:cd⽬录名功能:改变工作目录。将当前工作目录改变到指定的目录下。语法:touch [选项。

2025-04-18 14:09:44 784

原创 24.并查集

在一些应用问题中,需要。。在此过程中。适合于描述这类问题的抽象数据类型称为。1.2.3.

2025-04-17 12:30:38 247

原创 23.智能指针的使用及其原理

1.智能指针的使用场景分析1.智能指针的使用场景分析下⾯程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后⾯的delete没有得到执⾏,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本⾝也可能抛异常,连续的两个new和下⾯的Divide都可能会抛异常,让我们处理起来很⿇烦。智能指针放到这样的场景⾥⾯就让问题简单多了。2.RAII和智能指针的设计思路3.C++标准库智能指针的使用4.智能指针的原理。

2025-04-17 12:30:20 372

原创 5.链表(随想录)

快慢指针。

2025-04-16 09:06:39 192

原创 22.异常

1.异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。2.C语⾔主要通过错误码的形式处理错误,错误码本质就是对错误信息进⾏分类编号,拿到错误码以后还要去查询错误信息,⽐较麻烦。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。

2025-04-16 09:05:23 707

原创 21.C++11

调试时发现一个问题ovo。

2025-04-15 17:36:55 1643

空空如也

空空如也

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

TA关注的人

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