To Future$ - CS基础
type: channel
link: https://blog.lvming.xin/index.php/category/cs-basics/
items: 蓝桥杯写题踩坑记录0329
items: 「操作系统」学习：（二）进程与线程 2.1 进程与线程
items: 「计算机网络」预习：（三）数据链路层
items: 「操作系统」学习：（一）计算机系统概述
items: 「计算机网络」预习：（二）物理层
items: 「计算机网络」预习：（六）应用层
items: 「计算机网络」预习：（一）计算机网络体系结构
items: Golang 入门语法（一）
items: CSAPP：第3章 程序的机器级表示 3.1 历史观点 & 3.2 程序编码 & 3.3 数据格式
items: CSAPP：第2章 信息的表示和处理 2.4 浮点数

蓝桥杯写题踩坑记录0329
type: item
date: 2026-03-29T22:44:44+08:00
description: 踩坑package java0329; import java.io.*; import java.util.*; public class Main1 { public static void main(String[] args) throws Exception { int count = 0; for (int i = 1; i <= 2025; i++) { long x = (long)i*i*i; if (x%10==3) count++; } System.out.println(count); } }long x = (long)i*i*i;一定加(long)，否则溢出import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print(409876661809331L); scan.close(); } }长数字后一定加L，否则溢出

「操作系统」学习：（二）进程与线程 2.1 进程与线程
type: item
date: 2026-03-01T12:19:00+08:00
description: 二、进程与线程（一）进程与线程1.进程的概念和特征(1) 进程的概念多道程序环境下，程序并发执行会失去封闭性，出现间断性和不可再现性，因此引入进程来描述和控制并发执行，实现操作系统的并发性与共享性。进程实体（进程映像）：由程序段、相关数据段和 进程控制块（PCB） 三部分构成。PCB：是进程存在的唯一标志，用于描述进程的基本情况和运行状态，控制和管理进程。创建 / 撤销进程的本质：创建 / 撤销进程实体中的 PCB。进程的定义：程序的一次执行过程。程序及其数据在处理机上顺序执行时所发生的活动。具有独立功能的程序在一个数据集合上运行的过程，是系统进行资源分配和调度的独立单位。传统操作系统定义：进程是进程实体的运行过程，是系统进行资源分配和调度的独立单位。(2) 进程的特征进程与程序是截然不同的概念，其基本特征如下：动态性：进程是程序的一次执行，有创建、活动、暂停、终止等生命周期，是动态产生、变化和消亡的，这是进程最基本的特征。并发性：多个进程可同存于内存，在一段时间内同时运行，这是进程和操作系统的重要特征。独立性：进程是能独立运行、独立获得资源和独立接受调度的基本单位，未建立 PCB 的程序不能作为独立单位参与运行。异步性：进程按各自独立、不可预知的速度向前推进，异步性会导致执行结果不可再现，因此操作系统需配置相应的进程同步机制。2.进程的状态与转换进程的 5 种状态运行态：进程在处理机上执行。单处理机中任一时刻只有 1 个进程处于运行态。就绪态：进程已获得除处理机外的所有所需资源，只要获得处理机即可立即运行。多个就绪进程会排成就绪队列。阻塞态（等待态）：进程因等待某一事件（如 I/O 完成、等待资源）而暂停运行，即使处理机空闲也无法执行。多个阻塞进程会根据阻塞原因排成不同的阻塞队列。创建态：进程正在被创建，尚未转到就绪态。步骤为：申请空白 PCB → 填写控制信息 → 分配资源 → 转入就绪队列（若资源不足则保持创建态）。终止态：进程从系统中消失，可能是正常结束或因其他原因退出。系统会先将进程置为终止态，再处理资源回收和 PCB 释放等工作。3 种基本状态间的转换：就绪态 → 运行态：处于就绪态的进程被调度程序选中，获得处理机时间片，开始执行。运行态 → 就绪态：进程的时间片用完，或有更高优先级进程进入就绪队列，调度程序将当前进程转为就绪态，让更高优先级进程执行。运行态 → 阻塞态：进程请求某一资源（如外设、系统调用）或等待某一事件（如 I/O 完成），主动放弃处理机，转为阻塞态。阻塞态 → 就绪态：进程等待的事件发生（如 I/O 操作完成、中断结束），由中断处理程序将其转为就绪态。进程从运行态变为阻塞态是主动行为，而从阻塞态变为就绪态是被动行为，需要其他相关进程协助（如中断处理程序）。就绪态和等待态是进程生命周期中最常见的两种状态，转换次数也最多。3.进程的组成(1) 进程控制块本质与作用PCB 是操作系统为每个进程创建的核心数据结构，是进程实体的一部分，也是进程存在的唯一标志。它常驻内存，贯穿进程的整个生命周期，系统通过 PCB 感知、控制和管理进程。主要功能存储进程的当前状态、优先级、程序和数据地址等关键信息。用于进程调度、切换、同步、通信及文件访问等所有操作。保存进程的处理机环境，确保进程被切换后能从断点继续执行。核心组成部分分类主要内容进程描述信息进程标识符（PID）、用户标识符（UID）等进程控制和管理信息进程当前状态、优先级、代码入口地址、程序外存地址、运行时间等资源分配清单代码段 / 数据段指针、文件描述符、I/O 设备信息等处理机相关信息通用寄存器、地址寄存器、控制 / 标志寄存器、状态字等组织方式链接方式：将同一状态的 PCB 链接成队列（如就绪队列、不同阻塞队列）。索引方式：将同一状态的进程组织在一个索引表中，表项指向相应 PCB（如就绪索引表、阻塞索引表）。(2) 程序段程序段就是能被进程调度程序调度到 CPU 执行的程序代码段。程序可被多个进程共享，即多个进程可以运行同一个程序。(3) 数据段一个进程的数据段，可以是进程对应的程序加工处理的原始数据，也可以是程序执行时产生的中间或最终结果。4.进程控制在操作系统中，一般把程序控制用的程序段称为原语，原语的特点是执行期间不允许中断，它是一个不可分割的基本单位。(1) 进程的创建父子进程关系父进程创建子进程，子进程可继承父进程资源；子进程撤销时归还资源，父进程撤销时通常一并撤销所有子进程。触发场景：终端用户登录、作业调度、系统提供服务、用户程序请求等。创建原语（步骤）分配唯一 PID，申请空白 PCB → PCB 不足则创建失败。分配运行资源（内存、文件、I/O、CPU 时间等）→ 资源不足则创建失败，进程处于创建态等待资源。初始化 PCB：标志信息、处理…

「计算机网络」预习：（三）数据链路层
type: item
date: 2026-03-01T12:16:20+08:00
description: 三、数据链路层（一）数据链路层的功能数据链路层在物理层提供服务的基础上向网络层提供服务，其主要作用是：加强物理层传输原始比特流的功能，将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路，使之对网络层表现为一条无差错的链路。1.为网络层提供服务无确认的无连接服务有确认的无连接服务有确认的面向连接服务帧传输过程：建立数据链路、传输帧、释放数据链路注：有连接就一定有确认，不存在无确认的面向连接服务。2.链路管理链路管理，指数据链路层连接的建立、维持和释放过程，主要服务于面向连接的通信。局域网等多站点共享同一物理信道时，信道的分配与管理也归属于数据链路层的链路管理范畴。3.帧定界、帧同步与透明传输帧封装两台主机传输信息时，网络层的分组需要被封装成帧进行传送。通过在一段数据的前后分别添加首部和尾部来构成帧，帧长等于数据部分长度加上首部和尾部后的总长度。帧定界帧的首部和尾部包含控制信息，其重要作用之一是确定帧的界限，即帧定界。帧同步指接收方能够从接收到的二进制比特流中区分出帧的起始与终止。例如，在 HDLC 协议中，使用标识位 F（01111110）来标识帧的开始和结束。透明传输当所传输的数据中恰好出现了与帧定界符相同的比特组合时，会导致接收方误判帧的结束。因此需要采取措施解决这个问题，实现透明传输，即无论所传数据是什么样的比特组合，都应当能在链路上正常传送。最大传送单元（MTU）为了提高帧的传输效率，应使帧的数据部分长度尽可能大于首部和尾部的长度，但每种数据链路层协议都规定了帧的数据部分长度上限，即最大传送单元（MTU）。4.流量控制流量控制实际上就是限制发送方的数据流量，使其发送速率不超过接收方的接收能力。这个过程需要通过某种反馈机制使发送方能够知道接收方是否能跟上自己，即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧，而在什么情况下必须暂停发送，以等待收到某种反馈信息后继续发送。流量控制不是数据链路层特有的功能，许多高层协议中也提供此功能。在 OSI 体系结构中，数据链路层具有流量控制的功能；而在 TCP/IP 体系结构中，流量控制功能被移到了传输层。5.差错控制差错控制是数据链路层用于确保数据正确传输的核心机制，主要处理位错和帧错两类问题：位错控制检测：采用循环冗余校验（CRC）等方法，在数据帧后附加冗余校验码，接收方据此检测传输中出现的比特错误。重传：通过自动重传请求（ARQ）机制，若接收方检测到错误则丢弃该帧，发送方超时后自动重传，直至确认接收正确。帧错控制针对帧的丢失、重复或失序等问题，在数据链路层引入定时器和编号机制，确保每一帧最终都能被正确、有序地交付给目的结点。（二）组帧组帧主要解决帧定界、帧同步、透明传输等问题。通常有以下4种方法实现组帧：1.字符计数法在帧头部使用一个计数字段来标明帧内字符数。缺点：如果计数字段出错，帧边界划分失效，无法继续帧同步。2.字符填充的首尾定界符法帧定界使用控制字符 SOH（Start of Header）表示帧的首部开始。使用控制字符 EOT（End of Transmission）表示帧的结束。透明传输当数据段中出现与定界符（SOH、EOT）相同的字符时，会在其前面插入转义字符 ESC（转义字符是 ASCII 码中的一个字符，而非 “E”“S”“C” 的组合），以避免被误判为帧边界。接收方收到数据后，会自动删除插入的 ESC 字符，从而还原原始数据。如果转义字符 ESC 本身也出现在数据中，则在其前面再插入一个 ESC 字符进行转义。3.零比特填充的首尾标志法零比特填充法允许数据帧包含任意个数的比特，也允许每个字符的编码包含任意个数的比特。帧定界使用特定的比特模式 01111110 作为帧的首尾标志，用于标识一帧的开始和结束。透明传输发送方处理：在信息位中，每遇到连续 5 个 “1”，就自动在其后插入一个 “0”，以避免信息位中出现与帧标志01111110相同的比特组合，防止被误判为帧边界。接收方处理：执行逆操作，每收到连续 5 个 “1”，就自动删除后面紧跟的 “0”，从而恢复原始信息。零比特填充法很容易由硬件实现，性能优于字符填充法。4.违规编码法违规编码法是一种在物理层实现帧定界的技术，它利用了物理层编码中的冗余特性。在物理层进行比特编码时，某些电平对或码型是违规的，即正常数据比特不会使用这些编码。例如，在曼彻斯特编码中：数据比特 “1” 被编码为 “高 - 低” 电平对。数据比特 “0” 被编码为 “低 - 高” 电平对。而 “高 - 高” 和 “低 - 低” 电平对在正常数据中是违规的。这些违规的编码序列可以被借用，用来定界帧的起始和终止。局域网 IEEE 802 标准 就采用了这种违规编码法来实现帧定界。常用组帧方法由于字符计数法中计数字段的脆弱性，以…

「操作系统」学习：（一）计算机系统概述
type: item
date: 2026-02-26T02:12:12+08:00
description: 一、计算机系统概述（一）操作系统的基本概念1.操作系统的概念操作系统是指：控制和管理整个计算机系统的硬件与软件资源，合理地组织、调度计算机的工作与资源的分配，进而为用户和其他软件提供方便接口与环境的程序集合。2.操作系统的特征(1) 并发操作系统的并发性是指计算机系统重同时存在多个运行的程序，因此它具有处理和调度多个程序同时执行的能力。在操作系统中引入进程的目的是，使程序能并发执行。操作系统的并发性是通过分时得以实现的。注意区分并发和并行。(2) 共享资源共享，系统中的资源可以供内存中多个并发执行的进程共同使用。分为互斥共享方式和同时访问方式。互斥访问方式同时访问方式【并发和共享的关系】：并发和共享是操作系统两个最基本的特征，两者之间互为存在的条件：没有并发就无法共享；没有共享就无法并发(3) 虚拟虚拟是指把一个物理实体变为若干逻辑上的对应物。虚拟处理器虚拟内存虚拟外部设备虚拟技术可以归纳为：时分复用技术（如处理器的分时共享）、空分复用技术（如虚拟存储器）(4) 异步在多道程序环境下，多个进程并发执行，但由于资源有限（比如 CPU 只有一个），进程会交替使用 CPU，执行过程是“走走停停”的，而不是一气呵成，这就是进程的异步性。异步性使操作系统运行在随机环境下，可能导致与时间有关的错误，如：多个进程访问同一全局变量，执行顺序不同可能导致结果不同。3.操作系统的目标和功能(1) 操作系统作为计算机资源的管理者处理机管理（处理机的分配和运行以进程为基本单位，因而对处理机的管理可归结为对进程的管理。）存储器管理文件管理设备管理(2) 操作系统作为用户与计算机硬件系统之间的接口命令接口：允许用户通过特定的命令来组织和控制作业（任务）的执行。联机命令接口（交互式命令窗口）脱机命令窗口（批处理命令窗口）程序接口：由一组系统调用（System Call）组成，允许运行中的程序请求操作系统内核提供服务（如申请内存、读写磁盘、创建进程等）。(3) 操作系统实现了对计算机资源的扩充没有任何软件支持的计算机称为裸机。操作系统提供的资源管理功能和方便用户的各种服务功能，将裸机改造成功能更强，使用更方便 的机器。我们把覆盖了软件的机器称为扩充机器或虚拟机。（二）操作系统的发展历程1. 手工操作阶段（无操作系统）特点：所有操作（装程序、运行、输出）均需人工干预，用户独占全机。缺点：资源利用率极低，CPU 频繁等待手工操作，效率低下。核心矛盾：人机速度不匹配，资源浪费严重。2. 批处理阶段（操作系统开始出现）为解决人机矛盾及 CPU 与 I/O 速度不匹配问题，批处理系统应运而生。单道批处理系统特征：自动性（无需人工干预）、顺序性（按进入顺序执行）、单道性（内存中仅一道作业）。局限：CPU 在作业 I/O 时仍需等待，资源利用率仍有提升空间。多道批处理系统（引入多道程序设计技术）特征：多道（内存中同时存放多道程序）、宏观上并行（程序都处于运行过程中）、微观上串行（程序轮流占用 CPU）。优点：资源利用率高，系统吞吐量大，CPU 和外设保持 “忙碌” 状态。缺点：用户响应时间长，无交互能力，无法干预或了解程序运行。3. 分时操作系统核心思想：将处理器时间划分为短时间片，按时间片轮转分配给多个终端用户。主要特征：同时性：允许多个用户同时使用一台计算机。交互性：用户可通过终端与系统对话，控制程序运行。独立性：用户间互不干扰，感觉独占计算机。及时性：用户请求能在短时间内获得响应。解决问题：良好的人机交互，满足用户对系统响应的即时性需求。4. 实时操作系统核心目标：在严格的时间限制内完成紧急任务，无需排队。分类：硬实时：任务必须在绝对规定的时间内完成（如飞行器控制）。软实时：偶尔超时不会造成严重后果（如机票预订）。特点：对外部信号响应及时，处理过程具有及时性和可靠性。5. 网络操作系统与分布式操作系统网络操作系统：将计算机网络中的各台计算机有机结合，提供统一、经济、有效的网络通信与资源共享服务。分布式操作系统：由多台计算机组成，系统中任意两台计算机可通过通信方式交换信息；所有计算机地位平等，可并行、协作完成同一任务，具有分布性和并行性。6. 个人计算机操作系统应用场景：广泛应用于文字处理、电子表格、游戏等，是目前使用最广泛的操作系统。常见代表：Windows、Linux、MacOS 等。（三）程序运行环境1.处理器运行模式CPU运行两种不同性质的程序：操作系统内核程序、应用程序。指令分为：特权指令、非特权指令。内核程序可以执行特权指令，应用程序不可以。CPU的运行模式划分为：用户态（目态）、核心态（管态、内核态）。与硬件关联紧密的模块（时钟管理等）和运行频率较高的程序（进程管理等）共同构成操作系统的内核。操作系统的内核包括4方面的内容：(1) 时钟管理向用户提供系统…

「计算机网络」预习：（二）物理层
type: item
date: 2026-02-24T20:43:00+08:00
description: 二、物理层（一）通信基础1.基本概念数据、信号与码元数据：连续变化的数据称为模拟数据；取值离散的数据称为数字数据。信号：连续变化的信号称为模拟信号；取值离散的信号称为数字信号。串行传输、并行传输码元：码元是指用一个固定时长的信号波形（数字脉冲）表示一位 k 进制数字，代表不同离散数值的基本波形，是数字通信中数字信号的计量单位。这个时长内的信号称为 k 进制码元，而该时长称为码元宽度。1 码元可以携带若干比特的信息量。例如，在使用二进制编码时，只有两种不同的码元：一种代表 0 状态，另一种代表 1 状态。信源、信道与信宿数据通信是数字终端间的通信，系统主要由三部分构成：信源：产生和发送数据的源头（如计算机）。信道：信号的传输媒介，是线路的逻辑部件，包含发送信道和接收信道。信宿：接收数据的终点（如计算机）。图示为一个单向通信系统的模型，实际的通信系统大多为双向的，包括一条发送信道和一条接收信道，信道可以进行双向通信。信道的分类：(1) 按传输信号形式模拟信道：传输模拟信号。数字信道：传输数字信号。(2) 按传输介质无线信道：如无线电波。有线信道：如双绞线、光纤。(3) 按传输信号类型基带信号：将数字信号 1 和 0 直接用不同电压表示，在数字信道上传输（基带传输）。宽带信号：将基带信号调制后形成频分复用模拟信号，在模拟信道上传输（宽带传输）。通信双方的交互方式：(1) 单向通信：仅一个方向通信，无反向交互，仅需一条信道。例：无线电广播、电视广播。(2) 半双工通信：双方均可发送 / 接收，但不能同时进行，需两条信道。(3) 全双工通信：双方可同时发送和接收信息，需两条信道。速率、波特与带宽速率也称数据率，指的是数据传输速率，表示单位时间内传输的数据量。可以用码元传输速率和信息传输速率表示。指标名称别名定义单位关键特性码元传输速率波特率、调制速率单位时间内传输的码元个数（脉冲 / 信号变化次数）波特（Baud）1 波特 = 每秒传输 1 个码元；与码元进制数无关，可适用于二进制 / 多进制信息传输速率信息速率、比特率单位时间内传输的二进制码元个数（比特数）比特 / 秒（b/s）反映实际有效信息的传输效率若一个码元携带 n 比特信息量，则：信息传输速率 = 码元传输速率 × n（单位：b/s）带宽存在物理本义和网络应用义两个核心维度，实际网络中以应用义为主。物理本义：指信号的频带宽度，反映信号的频率范围，单位为赫兹（Hz）。网络应用义：表示通信线路所能传输数据的最高能力，即单位时间内从一点到另一点可通过的最高数据率，此时单位为比特 / 秒（b/s）。带宽与数据率存在数值互换关系，是衡量网络通信线路传输能力的核心指标。2.奈奎斯特定理与香农定理奈奎斯特定理（奈氏准则）适用场景： 理想低通信道（无噪声、带宽有限）。核心公式： $C = 2W \log_2 V$ （单位：b/s）$W$：信道带宽（Hz）$V$：每个码元的离散电平数目（码元进制数）核心结论：任何信道的码元传输速率存在上限，超过则会产生严重码间串扰，导致接收端无法正确识别码元。信道带宽越宽，可支持的码元传输速率越高。奈氏准则仅限制码元传输速率，不限制每个码元携带的比特数。要提高数据传输速率，需采用多元制调制方法，让每个码元携带更多比特信息。香农定理适用场景： 带宽有限且受高斯白噪声干扰的信道。核心公式： $C = W \log_2 (1 + S/N)$ （单位：b/s）$W$：信道带宽（Hz）$S$：信号平均功率$N$：信道内部高斯噪声功率$S/N$：信噪比（无量纲），也可表示为分贝形式：$\text{信噪比(dB)} = 10 \log_{10}(S/N)$核心结论：信道带宽或信噪比越大，信息的极限传输速率越高。对于给定的带宽和信噪比，极限传输速率是确定的上限。只要传输速率低于该极限，理论上可找到无差错的传输方法。香农定理给出的是极限信息传输速率，实际信道能达到的速率远低于此值。两者对比：奈奎斯特定理： 仅考虑带宽，限制码元传输速率，未考虑噪声影响。香农定理： 同时考虑带宽和信噪比，给出了更现实的极限信息传输速率，指出一个码元对应的二进制位数是有限的。3.编码与调制数据无论是数字的还是模拟的，为了传输的目的，都必须转变成信号。把数据变换为模拟信号的过程称为调制，把数据变换为数字信号的过程称为编码。数字数据可以通过数字发送器转换为数字信号传输，也可以通过调制器转换成模拟信号传输；模拟数据可以通过PCM编码器转换成数字信号传输，也可以通过放大器调制器转换成模拟信号传输。数字数据编码为数字信号数字数据编码用于基带传输，核心目标是有效区分数字信号 “0” 和 “1”，同时兼顾自同步（时钟基准）与传输效率。基础编码类（核心区分 0/1）编码方式核心规则核心优势核心劣势关键考点(1) 归…

「计算机网络」预习：（六）应用层
type: item
date: 2026-02-23T23:50:00+08:00
description: 六、应用层（一）网络应用模型1.客户/服务器（C/S）模型在客户/服务器（C/S）模型中，有一个总是打开的主机称为服务器，它服务于许多来自其他称为客户机的主机请求。工作流程：服务器持续处于接收请求的待机状态；客户机向服务器发送服务请求，并等待响应结果；服务器接收请求后，完成解析、处理，将结果返回给客户机。主要特征：客户机是服务请求方，服务器是服务提供方主要特点还有：特点具体解读典型示例地位不平等网络中计算机分层管理，服务器可限制客户机权限，网络管理集中化服务器禁止客户机随意删除服务器端数据客户机不直连客户机之间无直接通信链路，需通过服务器中转Web 应用中，两个浏览器无法直接交互可扩展性受限受服务器硬件性能、网络带宽约束，支持的客户机数量存在上限高并发场景下，单台 Web 服务器易出现访问拥堵2.P2P模型C/S、P2P 对比C/S 模型痛点：性能依赖中心服务器，大量用户请求时服务器易成为系统瓶颈。P2P 模型核心：网络传输内容不存储于中心服务器，所有结点兼具下载、上传功能，权利与义务对等，无固定客户机与服务器划分。P2P模型看似去中心化，实则本质上仍然使用客户/服务器模式，每个结点均兼具 “客户”（访问资源）与 “服务器”（提供资源）双重身份，对等方（Peer）可直接通信。P2P 的优势：(1) 降低服务器依赖：减轻中心服务器计算压力，消除单点依赖，任务分布式分配，提升系统效率与资源利用率。(2) 支持点对点共享：多个客户机之间可直接共享文档等资源。(3) 可扩展性强：突破传统服务器的响应能力与带宽限制，能承载更多请求。(4) 网络健壮性高：单个结点失效不会影响其他结点的正常运行。P2P 的缺点：(1) 本地性能损耗：结点在获取服务的同时需为他人提供服务，占用大量内存，降低整机运行速度，频繁 P2P 下载还会损耗硬盘。(2) 网络拥塞问题：P2P 流量占互联网总流量的 50%~90%，易造成网络拥堵，因此多数 ISP（互联网服务提供商）对其持反对态度。（二）域名系统1.层次域名空间定义：因特网采用层次树状结构的命名方法，每个连接到因特网的主机或路由器都有一个唯一的层次结构名称，即域名（Domain Name）。标号规则英文不区分大小写。除连字符（-）外，不能使用其他标点符号。每个标号不超过 63 个字符，完整域名最长不超过 255 个字符。顶级域名（TLD）分类(1) 国家（地区）顶级域名（nTLD）：代表不同的国家或地区，如 .cn（中国）、.us（美国）、.uk（英国）。其下注册的二级域名由对应国家（地区）自行确定。(2) 通用顶级域名（gTLD）：常见的有 .com（公司）、.net（网络服务机构）、.org（非营利性组织）、.gov（政府部门）等。(3) 基础结构域名：只有一个，即 .arpa，用于反向域名解析，又称反向域名。域名空间的管理：域名空间是一个倒置的树状结构，每个域由不同的组织进行管理。管理组织可以将其域再分成一定数目的子域，并委托给其他组织管理。例如，中国管理 .cn 域，并将 edu.cn 子域授权给 CERNET 管理。2.域名服务器DNS 系统整体设计结构：因特网的域名系统（DNS）是一个联机分布式数据库系统，采用客户 / 服务器模型。核心任务：完成域名到 IP 地址的解析。特点：域名到 IP 地址的映射并非集中存储，而是分布在所有 DNS 服务器上，通过分布式设计实现了高可扩展性和健壮性。四种主要域名服务器类型(1) 根域名服务器地位：最高层次的域名服务器，是整个 DNS 体系的 “入口”。作用：存储所有顶级域名服务器的 IP 地址。当本地域名服务器无法解析时，会首先求助于根域名服务器。根服务器通常不直接转换域名，而是告知下一步应查询的顶级域名服务器地址。部署：因特网上共有 13 个根域名服务器，每个服务器实际上是一个冗余服务器集群，以保障安全性和可靠性。(2) 顶级域名服务器（TLD）作用：负责管理在该顶级域名（如.com、.cn）下注册的所有二级域名。响应：收到查询请求后，可能给出最终结果，也可能返回下一步应查询的授权域名服务器的 IP 地址。(3) 授权域名服务器（权限域名服务器）作用：每台主机都必须在授权域名服务器处登记，该服务器负责保存其管辖区域内所有主机的域名到 IP 地址的映射，并能将这些主机名转换为对应的 IP 地址。建议：为了可靠工作，一台主机最好至少配置两个授权域名服务器。许多域名服务器同时充当本地域名服务器和授权域名服务器。(4) 本地域名服务器作用：当一台主机发出 DNS 查询请求时，首先将请求发送给本地域名服务器。它对 DNS 系统的性能至关重要，是用户主机与整个 DNS 系统交互的入口。归属：通常由 ISP、大学或机构提供，我们在 Windows 系统中配置的 “DN…

「计算机网络」预习：（一）计算机网络体系结构
type: item
date: 2026-02-21T20:18:00+08:00
description: 计算机网络1、计算机网络体系结构2、物理层3、数据链路层4、网络层5、传输层6、应用层章节建议天数难度系数核心任务1. 体系结构1天⭐⭐⭐定基调：搞懂分层、服务、协议、SAP、原语2. 物理层1天⭐⭐重概念：信号、码元、速率、信道复用技术（不深究通信数学）3. 数据链路层2天⭐⭐⭐重逻辑：封装成帧、差错检测、流量控制、MAC协议（特别是以太网）4. 网络层3天⭐⭐⭐⭐⭐最难啃：IP协议、子网划分、路由算法（RIP/OSPF）、ARP协议5. 传输层2.5天⭐⭐⭐⭐最核心：TCP/UDP、三次握手/四次挥手、流量控制/拥塞控制6. 应用层1.5天⭐⭐轻应用：HTTP、DNS、FTP、SMTP（结合抓包工具体验最佳）一、计算机网络体系结构（一）计算机网络概述1.概念：3种观点，由低级到高级广义观点：强调物理层面的网络连通。——计算机网络发展低级阶段计算机网络是“用通信线路（如光纤、网线、微波）将分布在不同地理位置、具有独立功能的多台计算机系统（以及终端、外设）连接起来，以功能完善的网络软件（网络协议、操作系统等）实现数据通信的系统”资源共享观点：强调共享资源（软件、硬件、数据）——当前计算机网络的基本特征“以相互共享资源（硬件、软件、数据）为目的而连接起来的、具有各自独立功能的计算机系统的集合”用户透明性观点：分布式系统，强调服务与抽象——计算机网络未来发展理想状态“存在一个能为用户自动管理资源的网络操作系统，它能够调用用户所需要的资源，而整个网络就像一个虚拟的巨型计算机系统，对用户是透明的”比如你使用百度网盘时，你不需要关心你的文件存在哪个机房的哪块硬盘上，系统自动帮你完成了这一切，这即是“透明性”的体现。2.组成：3种角度从组成部分角度来看：计算机网络由硬件、软件、协议三大部分组成。从工作方式角度来看：计算机网络分为边缘部分和核心部分。从功能组成角度来看：计算机网络由通信子网和资源子网组成。3.功能：5大功能数据通信资源共享分布式处理提高可靠性负载均衡4.分类：6种角度按分布范围分类(1) 广域网(远程网)（WAN）(2) 城域网（MAN）(3) 局域网 （LAN）(4) 个人局域网（PAN）注：若中央处理器之间的距离非常近(如<=1m)，一般称为多处理器系统，而不称为计算机网络。按传输技术分类(1) 广播式网络(2) 点对点网络按拓扑结构分类(1) 总线形(2) 星形(3) 环形(4) 网状按使用者分类(1) 公用网(2) 专用网按交换技术分类(1) 电路交换网络(2) 报文交换网络(3) 分组交换网络按传输介质分类传输介质可以分为有线和无线两大类，因此网络可以分为：(1) 有线网络(2) 无线网络5.性能指标：7个指标带宽：最高数据传输速率，单位：比特/秒。时延：数据从网络的一段传送到另一端的总耗时。包括4部分：(1) 发送时延（传输时延）：发送时延 = 分组长度/信道宽度(2) 传播时延：传播时延 = 信道长度/电磁波在信道上的传播速率(3) 处理时延(4) 排队时延：在输入队列中排队、在输出队列中排队总时延计算：总时延 = (1) + (2) + (3) + (4)注1：计算时，(3)(4)一般忽略不计。注2：高速链路减少了发送时延而非传播时延。时延带宽积：链路管道可以容纳的比特数量。时延带宽积 = 传播时延 × 信道带宽往返时延：从发送端发出一个短分组，到收到确认的总时延。吞吐量：单位时间内通过某个网络的数据量。速率：数据传输速率。最高传输速率称为带宽。信道利用率：信道有数据通过的时间所占总时间的比例。信道利用率 = 有数据通过的时间/总时间（二）计算机网络体系结构与参考模型1.计算机网络分层结构不同机器上的同一层称为对等层，同一层的实体称为对等实体。第n层使用第n-1层的服务，向第n+1层提供服务，称为服务提供者。最高层向用户提供服务。下一层提供服务的实现细节对上一层透明；两台主机通信时，对等层在逻辑上有一条直接信道，表现为不经过下层就把信息传送到对方。2.计算机网络协议、接口、服务协议：网络协议只存在于对等层。协议由语法、语义、同步三部分组成。一个完整的协议通常具有线路管理、差错控制、数据转换等功能。接口：同一结点内，相邻两层之间交换信息的连接点。在典型的接口上，相邻两层的实体通过SAP（服务访问点）进行交互。服务：下层为上层提供的功能调用。上层使用下层提供的服务时，必须交换一些命令，在OSI参考模型中称为服务原语。OSI将服务原语分为4类：请求、指示、响应、证实。服务可以按照3种角度分类：(1) 面向连接服务与无连接服务(2) 可靠服务和不可靠服务(3) 有应答服务和无应答服务3.ISO/OSI参考模型和TCP/IP模型OSI参考模型ISO提出的网络体系结构模型，称为开放系统互连参考模型（OSI/RM），简称O…

Golang 入门语法（一）
type: item
date: 2025-12-19T09:44:00+08:00
description: Golang入门语法（一）1.变量声明var a int = 10 // 如果不指定值，默认赋值为 0 var b = 10 // 自动推断类型 c : = 10 // 只能在func函数体内实现多变量声明var a, b int var c, d int = 1, 2 var e, f = 100, "hello" // 可以是不同类型 var ( g int h bool ) // 这种分解写法，一般用于声明全局变量2.常量const LENGTH int = 10 const WIDTH int = 5枚举const ( Unknown = 0 Female = 1 Male = 2 )常量表达式中，函数必须是内置函数const ( a = "abc" b = len(a) c = unsafe.Sizeof(a) )unsafe.Sizeof(a)输出的结果是16。字符串类型在 go 里是个结构, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节，所以字符串类型大小为 16 个字节。iota自增长：简化了常量用于增长数字的定义const ( CategoryBooks = iota // 0 CategoryHealth // 1 CategoryClothing // 2 )iota 和表达式：type Allergen int const ( IgEggs Allergen = 1 << iota // 1 << 0 which is 00000001 IgChocolate // 1 << 1 which is 00000010 IgNuts // 1 << 2 which is 00000100 IgStrawberries // 1 << 3 which is 00001000 IgShellfish // 1 << 4 which is 00010000 )type ByteSize float64 const ( _ = iota // ignore first value by assigning to blank identifier KB ByteSize = 1 << (10 * iota) // 1 << (10*1) MB // 1 << (10*2) GB // 1 << (10*3) TB // 1 << (10*4) PB // 1 << (10*5) EB // 1 << (10*6) ZB // 1 << (10*7) YB // 1 << (10*8) )当把两个常量定义在一行时，iota 在下一行增长，而不是立即取得它的引用。const ( Apple, Banana = iota + 1, iota + 2 Cherimoya, Durian Elderberry, Fig ) // Apple: 1 // Banana: 2 // Cherimoya: 2 // Durian: 3 // Elderberry: 3 // Fig: 43.函数Go 函数可以返回多个值func swap(x, y string) (string, string) { return y, x }init、import、package、main：Go 里面有两个保留的函数：init 函数（能够应用于所有的package）和main函数（只能应用于package main）。这两个函数在定义时不能有任何的参数和返回值；go程序会自动调用init()和main()。虽然一个package里面可以写任意多个init函数，为了可维护性，建议用户在一个package中，每个文件只写一个init函数。每个package中的init函数都是可选的，但package main必须包含一个main函数。指针指针引用写法/* 定义交换值函数*/ func swap(x *int, y *int) { var temp int temp = *x /* 保持 x 地址上的值 */ *x = *y /* 将 y 值赋给 x */ *y = temp /* 将 temp 值赋给 y */ }调用：swap(&a, &b)4.defer 语句defer语句被用于预定对一个函数的调用。可以把这类被defer语句调用的函数称为延迟函数。如果一个函数中有多个defer语句，它们会以LIFO（后进先出）的顺序执行。func Demo() { defer fmt.Println("1") defer fmt.Println("2") defer fmt.Println("3") defer fmt.Println("4") } func main() { Demo() } // output: // 4 // 3 // 2 …

CSAPP：第3章 程序的机器级表示 3.1 历史观点 & 3.2 程序编码 & 3.3 数据格式
type: item
date: 2025-12-06T21:14:00+08:00
description: 第3章 程序的机器级表示IA32 是 x86-64 的 32 位前身。3.1 历史观点摩尔定律：集成电路上可容纳的晶体管数量，大约每经过26个月便会翻一番。3.2 程序编码gcc命令调用一整套的程序，将源代码转化成可执行代码。C预处理器扩展源代码，插入所有用#include命令指定的文件，并扩展所有用#define声明指定的宏；编译器产生源文件的汇编代码（.s文件）；汇编器将汇编代码转化成二进制目标代码（.o文件）；链接器将目标代码与实现库函数的代码合并，产生最终的可执行代码文件（.exe文件）。1.机器级代码两种抽象指令集架构（ISA），将程序的行为描述成好像每条指令都是按顺序执行的。虚拟地址，认为程序使用的内存模型是一个非常大的字节数组。x86-64 的机器代码和原始的 C 代码差别非常大。一些通常对 C 语言程序员隐藏的处理器状态都是可见的：程序计数器（PC。在x86-64中用 %rip表示）给出将要执行的下一条指令在内存中的地址。整数寄存器文件包含16个命名的位置，分别存储64位的值。这些寄存器可以存储地址或整数数据。有的寄存器被用来记录某些重要的程序状态，而其他的寄存器用来保存临时数据，例如过程的参数和局部变量，以及函数的返回值。条件码寄存器保存着最近执行的算术或逻辑指令的状态信息。它们用来实现控制或数据流中的条件变化，如实现if和while语句。一组向量寄存器可以存放一个或多个整数或浮点数值。C语言中的聚合数据类型，例如数组和结构，在机器代码中用一组连续的字节来表示。即使是对标量数据类型，汇编代码也不区分有符号或无符号整数，不区分各种类型的指针，甚至于不区分指针和整数。程序内存包含：程序的可执行机器代码，操作系统需要的一些信息，用来管理过程调 用和返回的运行时栈，以及用户分配的内存块（比如说用 malloc库函数分配的）。2.代码示例long mult2(long, long); void multstore(long x, long y, long* dest) { long t = mult2(x, y); *dest = t; }编译：linux> gcc -Og -S mstore.c汇编：linux> gcc -Og -c mstore.c反汇编：linux> objdump -d mstore.o下面是汇编代码：multstore: pushq %rbx movq %rdx, %rbx call mult2 movq %rax, (%rbx) popq %rbx ret3.关于格式的注解所有以.开头的行都是指导汇编器和链接器工作的伪指令。我们通常可以忽略这些行。对千一些应用程序，程序员必须用汇编代码来访问机器的低级特性。一种方法是用汇编代码编写整个函数，在链接阶段把它们和 C 函数组合起来。另一种方法是利用 GCC 的支持，直接在C程序中嵌入汇编代码。3.3 数据格式Intel 用术语”字(word)" 表示 16 位数据类型。因此，称 32 位数为“双字(double words)”，称 64 位数为“四字(quad words)”。大多数GCC生成的汇编代码指令都有一个字符的后缀，表明操作数的大 小。例如，数据传送指令有四个变种： movb(传送字节）、 movw(传送字）、 movl(传送双 字）和 movq(传送四字）。后缀 'l'用来表示双字，因为 32 位数被看成是“长字(long word)" 。汇编代码也使用后缀'l'来表示 4 字节整数和 8 字节双精度浮点数。这不会产生歧义，因为浮点数使用的是一组完全不同的指令和寄存器。

CSAPP：第2章 信息的表示和处理 2.4 浮点数
type: item
date: 2025-12-06T14:45:00+08:00
description: 2.4 浮点数（表示与运算）1.二进制小数定点表示法二进制小数点向左移动一位相当于这个数被 2 除；类似，二进制小数点向右移动一位相当于将该数乘 2。我们仅考虑有限长度的编码，那么十进制表示法不能准确地表达像1/3这样的数；类似的，小数的二进制表示法只能表示那些能够被写成x * 2^y的数，其他值只能够被近似的地表示。2.IEEE浮点表示基本表示方法IEEE浮点标准用V=(-1)^s M 2^E的形式来表示一个数：符号s，尾数M，阶码E。将二进制浮点数的位表示划分为三个字段，分别对这些值进行编码：一个单独的符号位 s 直接编码符号s；k 位的阶码字段 exp 编码阶码 E；n 位小数字段 frac 编码尾数 M，但是编码出来的值也依赖于阶码字段的值是否等于0。单精度与双精度在单精度浮点格式（float）中，s、exp、frac字段分别为1位，8位，23位；在双精度浮点格式（double）中，s、exp、frac字段分别为1位，11位，52位。单精度浮点格式为32位，双精度浮点格式为64位。分类给定位表示，根据exp的值， 被编码的值可以分成三种不同的情况（最后一种情况有两个变种），下面是单精度格式的情况。规格化的值exp的位既不全为0，也不全为1。偏置值：Bias。这是一个固定的偏移量，取决于浮点数格式。单精度（32位）：指数字段占 8位，能表示 0 到 255 共256个数。Bias = 2^(8-1) - 1 = 127。双精度（64位）：指数字段占 11位，Bias = 2^(11-1) - 1 = 1023。对于规格化数：阶码 e 的取值范围是：1 到 254。代入公式 E = e - Bias：当 e = 1（最小值）：E_min = 1 - 127 = -126当 e = 254（最大值）：E_max = 254 - 127 = 127所以，规格化数的真实指数范围是：-126 ≤ E ≤ 127编码（存储时）：e = E + Bias （将真实指数 E “偏置”为正数 e）解码（计算时）：E = e - Bias （将存储的阶码 e “去偏置”得到真实指数 E）小数字段 frac 被解释为描述小数值 f, 其中 0<=f<1，二进制小数点在最高有效位左边，尾数定义为 M = 1 + f。（隐含的以1开头的表示）我们总是能够调整阶码 E，使得尾数 M 在范围 1<=M<2 之中，我们第一位总是等于1，那么我们只需表示它的小数部分。非规格化的值当阶码域全为0时，所表示的数是非规格化形式。阶码值是E=1-Bias（而不是0-Bias），尾数M=f（而不是1+f）。两个用意：表示0。若使用规格化数，必须总是使M>=1，无法表示0；使用非规格化数，s=M=f=0时，得到+0.0，s=1且M=f=0时，得到-0.0。表示非常接近于 0.0 的数。它们提供了一种属性，称为逐渐溢出(gradual underflow)，其中，可能的数值分布均匀地接近于 0.0。特殊值阶码全为1时，表示特殊值。小数域全为0时，表示无穷：s=0表示+∞，s=1表示-∞。当把两个非常大的数相乘或者除以0时，无穷能够表示溢出的结果。小数域为非0时，表示NaN：例如计算根号-1等，或者表示未初始化数据。3.数字示例可以观察到，那些可表示的数并不是均匀分布的——越靠近原点处它们越稠密。4.舍入向零舍入：把正数向下舍入，负数向0舍入，得到|x^|<=|x|。向下舍入：把正数和负数都向下舍入，得到x-<=x。向上舍入：把正数和负数都向上舍入，得到x+>=x。向偶数舍入：向偶数舍入在大多数现实情况中避免了统一向一个方向舍入带来的统计偏差，在 50% 的时间里，它将向上舍入，而在 50% 的时间里，它将向下舍入。假设我们有4位精度（1位符号，3位尾数），要舍入：要存储的二进制数：1.1011（精确值）可表示的最近值：1.110 和 1.101计算距离：到 1.110 = 1.1011 - 1.101 = 0.0001到 1.110 = 1.110 - 1.1011 = 0.0001距离相等！是平局！应用向偶数规则：1.101 的二进制最后一位是 1（奇数）1.110 的二进制最后一位是 0（偶数）选择 1.110（因为它的最低位是偶数）5.浮点运算当参数中有一个是特殊值（如-0、-∞或 NaN)时， IEEE标准定义了一些使之更合理的规则。例如，定义 1/-0将产生-∞, 而定义 1/+0会产生+∞；+∞-∞=NaN)；NaN+x=NaN。整数（包括无符号和补码）加法形成了阿贝尔群。实数上的加法也形成了阿贝尔群，但是我们必须考虑舍入对这些属性的影响。浮点加法不具有结合性，这是缺少的最重要的群属性。另外，浮点乘法在加法上不具备分配性。eg. 单精度浮点情况下，表达式(…