自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机网络:传输层

传输层为运行在不同主机上的应用进程提供端到端的逻辑通信服务:通过端口号实现多路复用与分解。提供可靠(TCP)及不可靠但高效(UDP)的数据传输。实现流量控制避免接收方过载、拥塞控制缓解网络拥堵、以及连接管理。同时处理数据分段与重组(适配链路 MTU 限制)并辅以差错检测机制。最终屏蔽底层网络的不可靠性,为应用层提供高效可控的端到端数据传输能力。多路复用与多路分解进程要提供网络服务,必须先通过系统调用(如bind())将自身绑定到一个特定的端口上,这样传输层收到目标端口的数据后,才能准确转发给该进程。

2025-12-23 14:01:18 340

原创 计算机网络:网络层

网络层是计算机网络体系结构中负责跨网络端到端通信的层次,其核心是解决不同网络如何互联的问题,屏蔽底层物理网络(如以太网、WIFI、广域网)的差异,为传输层的segment 提供跨网络的端到端传递能力。网络层通过封装 - 解封装发送端封装:传输层将应用数据分段为segment后,交给网络层。网络层为其添加IP 头部,形成IP 数据报(segment 是数据报的数据部分)。接收端解封装:目的主机的网络层收到 IP 数据报后,校验头部,然后剥离 IP 头,将内部的segment交给传输层。主机作为通信的。

2025-12-22 15:56:35 937

原创 进程同步与死锁

是指当进程在等待进入临界区时,应主动释放处理机(CPU),将自身阻塞并加入等待队列,让其他就绪进程有机会运行。这样可以避免CPU空转,提高系统效率。:通过关闭中断来保证互斥,但在此期间系统无法进行进程调度,当前进程独占CPU,若它不进入临界区也不释放CPU,则其他进程无法运行。,因此都无法满足让权等待的要求。:常用于实现自旋锁(Spinlock),进程会在循环中反复执行这些指令尝试获取锁,同样属于忙等待,不会主动释放CPU。等机制,这些机制可以在进程等待时将其阻塞并切换至其他进程,从而实现真正的让权等待。

2025-12-15 21:18:48 655 1

原创 处理机调度

比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心响应时间,也并不区分任务的紧急程度,因此对于用户来说,交互性很差。SJF 算法是选择一个执行时间最短的作业为其服务,但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题。多级反馈队列调度算法则是对其他算法的折中权衡。

2025-12-15 17:52:16 763

原创 进程的描述与控制

进程是分配系统资源的单位,因此各进程拥有的内存地址空间相互独立。是一组不可中断的原子操作集合,是操作系统内核中的最小执行单元,要么完整执行完毕,要么完全不执行,中间不允许被任何中断打断。进程的创建、调度、终止本质上都是对 PCB 的操作,其存储位置通常位于操作系统的内核空间,用户进程无法直接访问。,有创建、就绪、运行、阻塞、终止的动态过程,占用 CPU、内存、文件等系统资源,一个程序可对应多个进程。,无生命周期(存储在磁盘上,永久存在),不占用资源(仅占用磁盘空间),一个进程只能对应一个程序。

2025-12-15 16:51:15 364

原创 操作系统:IO系统

CPU 干预的频率很频繁,I/O 操作开始之前、完成之后需要 CPU 介入,并且在等待 I/O 完成的过程中 CPU 需要不断地轮询检查。使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)。每次读 / 写一组数据块,数据的流向在通道的控制下进行,CPU、通道、I/O 设备可并行工作,资源利用率很高,但实现复杂,需要专门的通道硬件支持。

2025-11-24 20:32:06 620 1

原创 输入输出系统

输入输出系统是硬件(设备 + 接口 + 通路)+ 控制逻辑(查询 / 中断 / DMA / 通道)+ 软件(驱动 + 管理程序 + 应用)的有机整体。

2025-11-24 12:40:53 210 1

原创 操作系统:文件管理

文件的逻辑结构是指文件在用户面前所呈现的形式,也就是用户如何看待文件中的数据组织。这种结构对于用户来说是透明的,用户不需要关心数据在存储介质上如何存放,只需要通过文件系统提供的接口来访问文件内容。文件的逻辑结构主要分为两种:字符流式文件(无结构文件)和记录式文件(有结构文件)。字符流式文件:文件是连续的、无固定格式的字节序列,仅以文件开始和文件结束为边界,内部没有预定义的记录划分。操作系统不解析文件内容,仅将其视为字节的集合,只提供字节级的读写接口,用户需自行定义数据的格式和解析规则,无需遵循固定格式。

2025-11-11 12:08:06 612 1

原创 数据链路层概述

数据链路层是OSI参考模型中的第二层,位于物理层与网络层之间,负责在网络节点间建立、维护和释放数据链路连接,通过帧传输实现相邻节点间的可靠数据传输。其核心功能包括封装成帧、差错检测、流量控制及链路管理。该层协议体系分为逻辑链路控制(LLC)与媒体访问控制(MAC)两个子层,前者通过停止等待ARQ协议实现差错控制,后者解决信道竞争问题并执行MAC寻址。

2025-11-08 19:30:53 827 2

原创 虚拟存储器

是保底策略,确保进程能访问到所有需要的页面,是虚拟内存中最基本的页面调入时机。已使用页面通过对换区保留修改状态,且对换区 I/O 效率较高,是一种经典的平衡策略。一般来说驻留集的大小不能小于工作集的大小,否则进程会因频繁触发缺页中断,陷入换页 - 缺页的恶性循环,最终导致抖动。如只读属性程序代码段,直接从文件区调入内存,因为文件区有原始副本,换出时无需写回磁盘,下次需要时再从文件区调入。已使用过的页面若需换出,写回对换区,下次需要时从对换区调入。页面的换入换出需要磁盘IO,会有较大的开销,

2025-11-07 16:04:21 739

原创 内存:存储器管理

— 哪怕进程本身只有 1KB(只需要 1 个页面),也得分配 4MB 连续内存存页表,这是巨大的浪费。程序运行时,CPU 只能识别物理地址,但程序本身只有逻辑地址 —— 如果直接用逻辑地址访问内存,会找不到对应存储单元,所以需要转换。段的长度却不固定,决定于用户编写的程序,所以在进行地址变化的时候需额外根据段表中记录的段长来判断段内地址是否越界。段号段内地址段号的位数决定了每个进程最多可以分几个段,段内地址位数决定了每个段的最大长度是多少。,通过页表建立逻辑页与物理页框的映射,以。

2025-11-05 12:59:48 748 2

原创 网络层:数据平面

网络层是计算机网络体系结构中负责跨网络端到端通信的关键层次,其核心使命是解决不同网络如何互联的问题,屏蔽底层物理网络(如以太网、WIFI、广域网)的差异,为传输层的segment 提供跨网络的端到端传递能力。发送端封装:传输层将应用数据分段为segment后,交给网络层。网络层为其添加IP 头部,形成IP 数据报(segment 是数据报的数据部分)。接收端解封装:目的主机的网络层收到 IP 数据报后,校验头部,然后剥离 IP 头,将内部的segment交给传输层。网络层协议运行在。

2025-10-23 20:27:19 623

原创 拥塞控制原理

原理:TCP 连接建立初期,通过拥塞窗口(CongWin)的指数级增长,在不引发网络拥塞的前提下,快速探测网络的可用带宽。针对长存活期的 TCP 连接,忽略 超时事件后的慢启动阶段。假设在连接持续期间,往返时间(RTT) 和丢包时的拥塞窗口大小(W) 几乎不变。

2025-10-21 19:59:40 1085

原创 回溯:LetCode77组合&&LetCode39组合总和

回溯算法(Backtracking)是一种通过。它非常适合解决组合、排列、子集、棋盘(如 N 皇后)等需要穷举所有可能的问题,关键是设计好和,并通过优化效率。

2025-10-09 13:31:26 242 1

原创 控制器概述

本文分析了CPU时序控制的两种方式:三级时序硬部件控制器和微程序控制器。三级时序控制器采用周期-节拍的时间框架,执行速度快但灵活性差,适合简单指令集;微程序控制器通过微指令序列产生控制信号,设计灵活但速度较慢,适合复杂指令集。文章详细比较了两者的工作原理、优缺点及适用场景,并介绍了现代FSM控制器的设计理念,最后以MIPS32指令为例说明控制信号生成逻辑。

2025-09-25 15:57:34 554 1

原创 中央处理器概述

比较寄存器值,add/addi其加法运算这一核心执行动作可直接在执行周期内通过ALU结合相应节拍完成,无需单独的计算周期;为核心循环,同时通过分支处理实现程序流程控制,通过中断响应处理外部事件。CPU主要由运算器、控制器、寄存器组等部分组成,其中还包括。取指周期通过 T1-T4 节拍从内存读取指令并更新 PC;所有指令执行后进入公共操作阶段,检查并处理外部中断请求。计算周期因指令类型不同而动作有别,执行周期完成各指令核心功能,指令周期各阶段的数据流。从内存读数据到寄存器,将寄存器数据写入内存,

2025-09-24 11:47:57 366 1

原创 中央处理器:指令系统

指令的操作类型CISC|RISC🦈🦈🦈...

2025-09-22 12:30:22 380

原创 开放神经网络交换格式--ONNX | 大模型量化

在深度学习中,权重(Weights)是模型训练过程中学习到的固定参数,激活(Activations)是每一层输入经过权重计算后输出的中间结果。而量化的核心对象正是这两者:将原本以高精度(如 FP32)存储和计算的权重与激活,转换为低精度格式(如 INT8、FP16 等)。高精度:FP32(单精度浮点数,32 位)、FP64(双精度,64 位),数值范围广、精度高,但存储和计算成本高。

2025-09-21 18:29:19 1039

原创 自动语音识别--Zipformer ASR模型

Zipformer是新一代kaldi团队最新研发的序列建模模型。相比较于Conformer、Squeezeformer、E-Branchformer等主流ASR模型,Zipformer具有效果更好、计算更快、更省内存等优点。Zipformer在LibriSpeech、Aishell-1和WenetSpeech等常用数据集上取得了当前最好的ASR结果。

2025-09-21 16:51:29 1279 1

原创 PortAudio--Cross-platform Open-Source Audio I/O Library

其能够在 Windows、macOS、Linux、iOS、Android 等多种操作系统上使用,支持多种音频设备和多种常见的音频数据格式,并且提供了简洁且一致的 API,使得开发者可以相对轻松地实现音频设备的打开、关闭,音频流的启动、停止,以及音频数据的读写等操作。当音频流的状态发生改变(如启动、停止、出错)时,PortAudio 也会调用回调函数,并通过参数告知用户当前的状态,以便进行对应的处理。的核心,它由 PortAudio 内部的音频驱动线程自动调用,而非用户代码直接触发。

2025-09-20 18:16:19 821 2

原创 Linux底层-内核数据接口:/proc

Linux底层-内核数据接口:/proc

2025-09-16 17:05:24 427

原创 Protobuf

互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同。例如:TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象(class)转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。

2025-09-15 19:53:00 1071

原创 Ubuntu根分区扩容

亲测有效。

2025-08-23 14:48:05 575

原创 C++设计模式:建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个。的构建与它的表示分离,通过分步构建的方式创建对象,使得。建造者模式有四个主要角色,分别是。建造者模式的优势体现。

2025-08-18 16:53:05 546 2

原创 C++设计模式:面向对象设计原则

单一职责原则要求类 / 接口专注于单一职责,避免功能混杂;开放 - 封闭原则强调对扩展开放、对修改关闭,通过抽象实现灵活扩展;里氏替换原则确保子类可安全替换父类而不破坏程序逻辑;依赖倒置原则主张依赖抽象而非具体实现,降低模块间耦合;接口隔离原则反对 “胖接口”,倡导拆分出专一接口以避免客户端依赖无关方法;迪米特法则要求对象仅与直接朋友交互,减少对其他对象的了解;合成复用原则优先通过组合 / 聚合复用代码,而非继承,以提高灵活性。👉👈.

2025-08-16 11:43:29 922 3

原创 C++设计模式:类间关系

类之间的关系强弱顺序是这样的:继承(含接口实现) > 组合 > 聚合 > 关联 > 依赖。在实际设计中,应优先使用低耦合关系(如关联、聚合、组合),避免过度依赖继承,以提高代码的灵活性和可维护性。

2025-08-15 17:07:38 398

原创 高速缓冲存储器cache

高速缓冲存储器是现代计算机系统中位于 CPU 和主存之间的高速小容量存储器,其诞生是为了解决 CPU 运算速度与主存读写速度不匹配的问题。,包括时间局部性和空间局部性。为了配合 Cache 按 “块” 加载数据的机制,主存地址通常会被划分为两个关键部分:高m位和低b位2^m=M则表示主存的块数。同样,缓存地址也分为两段,高c位的缓存块号,低b位的块内地址,2^c=C表示缓存块数。CPU 从主存读取数据时,核心差异在于主要可分为“Cache 命中” 和 “Cache 未命中”。

2025-08-12 17:48:23 620

原创 LeetCode:347.前K个高频元素

用小顶堆只保留前 k 个高频元素,每次插入后若超过 k 就弹出最小的,效率更高,尤其当。

2025-08-07 15:11:47 243 1

原创 LeetCode:239.滑动窗口最大值

时,队头元素即为当前窗口的最大值。之后每移动一步就收集一次队头最大值。每个元素最多入队和出队各一次,总时间复杂度为。更大,且位置更靠后,会在窗口中停留更久。因此可以安全地移除这些尾部元素。(而非值),便于判断元素是否在当前窗口内。,避免窗口外的元素影响最大值的判断。比队列尾部的元素大,那么尾部元素。

2025-08-07 14:19:47 211

原创 LeetCode:1408.数组中的字符串匹配

这个方法遍历所有字符串对,通过find函数判断其中较短的字符串是否是较长字符串的子串,收集所有满足条件的较短字符串,去重后返回。,来确定它是否是其他字符串的子串。因为自身会出现一次,若额外出现一次则必是其他字符串的子串。将所有字符串拼接成一个大字符串,通过判断某个字符串在拼接后的字符串中是否出现。来判断一个字符串是否是其他字符串的子串。这个代码的做法非常巧妙,核心是通过。

2025-08-06 12:33:01 288 1

原创 字符串匹配:KMP算法

KMP 算法的核心原理是,从而将字符串匹配的时间复杂度从暴力法的 O (n*m) 优化到 O (n + m)。其本质是利用模式串自身的「前缀后缀重复信息」,在匹配失败时快速定位下一次比较的位置。。

2025-08-06 12:19:32 1290

原创 LeetCode:209.长度最小的子数组&&3.无重复字符的最长子串

本题的边界就是要求子数组内元素总和大于等于目标值,维护的就是最小满足条件的子数组长度。当子数组总和不满足target,右指针移动,纳入新元素;当子数组总和满足target,左指针移动,并且用while做持续收缩来优化结果。与窗口内字符重复时,可能需要连续收缩多次才能移除所有重复影响,所以收缩时应该用while连续收缩。,且需要对区间内的元素进行整体处理(如求和、计数、判断是否满足条件)时,我们可以优先使用滑动窗口。右移以移除左侧字符,收缩窗口范围,直至窗口内无重复字符。本题也是一个滑动窗口的问题,

2025-08-04 14:09:55 468

原创 LeetCode:219.存在重复元素||&&220.存在重复元素|||

此题可以利用其 “有序性” 相关的范围查询很方便来解决。,一旦出现重复,直接返回结果,无需存储重复元素。220.也是同理,维护的是一个。实现,元素会按照默认的比较规则。

2025-08-04 11:29:36 206 2

原创 LeetCode:15.三数之和&&18.四数之和

其实这个思路是正确的,但是不同于相加问题,我们有一个非常棘手的问题,就是题目中说的不可以包含重复的三元组。把符合条件的三元组放进vector中,然后再去重,这样是非常费时的。,配合外层循环固定其他元素,最终找到符合条件的组合。这里的指针移动是基于 “和的大小” 调整,和太大则右指针左移,和太小则左指针右移,匹配离散元素,处理。,一旦排序之后原数组的索引就被改变了。如果两数之和要求返回的是数值的话,就可以使用双指针法了。像我们之前提到的:两数之和 就不能使用双指针法,因为两数之和要求返回的是索引下标,

2025-08-04 10:27:25 405

原创 Leetcode:1.两数之和

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素比配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下表,这样才能找到与当前元素相匹配的(也就是相加等于target)

2025-08-03 16:31:02 465

原创 简述计算机主存

存储器的分类可以用下图总结:存储器的层次结构是计算机系统为平衡速度、容量、成本三者矛盾而设计的多级存储体系。离 CPU 越近的存储器,速度越快、容量越小、成本越高;离 CPU 越远的存储器,速度越慢、容量越大、成本越低。通过这种层次化设计,让 CPU 优先访问高速存储(满足速度需求),同时利用低速存储提供海量空间(满足容量需求),最终实现整体性能最优。计算机主存又称内存,是计算机系统中用于临时存储 CPU 正在使用的数据、程序指令及运算中间结果。

2025-07-29 11:44:41 1554

原创 Modbus

Modbus是一种串行通信协议,顾名思义,它是一个Bus,即总线协议,是一种广泛应用于工业控制领域的通信协议。它支持多种传输方式:Modbus RTU (二进制格式,常用于串口通信)Modbus ASCII (ASCII字符格式)Modbus TCP (基于以太网的实现)以上三种协议,一个设备只会有一种协议,如果你的设备使用的是Modbus-RTU,只需查看以下对应部分,一般来说大部分的设备都是Modbus-RTU协议的。Modbus采用的是主从架构主站(Master)

2025-07-17 17:04:37 1975 3

原创 Python部分基础操作

循环是最常用的迭代工具,用于遍历可迭代对象(如列表、字符串、字典等)。是一个内置函数,用于生成一系列连续的整数,常与。:将对象转换为字符串并打印到标准输出(控制台)。:从标准输入(键盘)读取一行文本,并返回字符串。(Python 3.6+):最简洁灵活的方式。返回的始终是字符串,需要手动转换为其他类型。对象),具有高效存储和生成整数序列的特点。:多个参数之间的分隔符(默认是空格)。可以用元组捕获多种异常(统一处理)。(大多数内置异常的基类)兜底。:用空格分隔,再分割并转换。for else子句。

2025-06-30 15:14:05 1086 4

原创 简述C++ nlohmann/json 库

JSON(JavaScrip Object Notation)是一种轻量级、跨语言的数据交换格式。它基于 ECMAScript 子集,以独立于编程语言的文本格式存储和表示数据,简洁清晰的结构使其成为理想的数据交换语言,易读、易写且便于机器解析生成,能提升网络传输效率。Json中主要有两种数据格式:Json数组和Json对象,并且这两种格式可以交叉嵌套使用。Json数组使用 [] 表示,[]里边是元素,元素和元素之间使用逗号间隔。

2025-06-23 14:43:13 1195

原创 简述CMake部分构建指令

CMake 是一款跨平台的开源构建工具,通过编写 CMakeLists.txt配置文件描述项目结构、编译选项和依赖关系,自动生成不同平台的原生构建文件(如 Makefile、Visual Studio 项目),实现 “一次配置,多平台编译”,大幅简化了复杂项目的构建流程,同时支持测试、打包、安装等全生命周期管理,广泛应用于 C/C++ 等语言的大型项目开发。add_definitions(-D宏名称)demo:add_definitions(-DDEBUG)后终端就会输出DEBUG!!!

2025-06-22 17:06:25 1156

空空如也

空空如也

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

TA关注的人

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