028_计算机网络传输层
在计算机网络中,传输层(Transport Layer)负责在网络端点之间传输数据。它是 OSI 模型中的第四层,提供了关键的功能,以确保数据在网络中能够有效、可靠地传输。以下是传输层的一些主要功能和作用: 传输层的主要功能1. 数据分段和重组传输层将应用层传递下来的数据分割成更小的段(segments),每个段包含必要的控制信息。接收方传输层会将这些段重组成原始的数据流。 2. 传输控制传输层确保数据可靠传输。常见协议如 TCP(传输控制协议)提供了数据包的确认(acknowledgment)、序号(sequence numbering)、超时重传(retransmission)、流控制(flow control)和拥塞控制(congestion control)等机制。 3. 端到端通信传输层建立并管理端到端的通信连接。TCP 协议通过三次握手(three-way handshake)建立连接,确保通信双方准备就绪,而 UDP(用户数据报协议)则是不可靠的连接,通常用于实时应用如视频流和在线游戏。 4....
027_GOF设计模式分类
GOF 设计模式是经过总结、优化的代码设计经验,用于解决软件设计中的特定问题。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。以下是每个分类中的常见设计模式: 创建型模式这些模式处理对象的创建问题,并提供更灵活、可复用的创建机制。 单例模式(Singleton Pattern): 确保一个类只有一个实例,并提供全局访问点。 工厂方法模式(Factory Method Pattern): 定义一个创建对象的接口,但由子类决定要实例化的类。 抽象工厂模式(Abstract Factory Pattern): 提供一个创建一系列相关或依赖对象的接口,而无需指定具体类。 生成器模式(Builder Pattern): 将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。 原型模式(Prototype Pattern): 通过复制现有对象来创建新对象,避免了对象的重复初始化。 结构型模式这些模式关注类和对象的组合关系,解决系统的结构问题。 适配器模式(Adapter Pattern):...
026_gitignore
Git 忽略文件的规则 语法.gitignore 文件是用来告诉 Git 哪些文件或目录在版本控制中应该被忽略的。这对于排除编译生成的文件、临时文件、日志文件以及敏感数据等非常有用。下面是一些编写 .gitignore 文件的基本规则和示例: 文件名匹配规则: *:匹配零个或多个字符。 ?:匹配任意一个字符。 []:匹配方括号内的任意一个字符。 !:在模式前加上感叹号表示取反,即排除匹配的文件或目录。 注释:以 # 开头的行表示注释,Git 会忽略这些行。 示例: 忽略所有 .a 文件: 1*.a 但是跟踪 lib.a,即使在忽略 .a 文件的规则下: 1!lib.a 忽略所有以 .o 结尾的文件: 1*.o 忽略所有以 ~ 结尾的临时文件: 1*~ 忽略 TODO 文件: 1TODO 忽略 build/ 目录下的所有文件: 1build/ 忽略 doc/notes.txt 文件,但不包括 doc/server/arch.txt 文件: 1doc/notes.txt 忽略 doc/ 目录下的 .pdf 文件: 1doc/*.pdf 忽略 doc/...
025_PR和MR的区别
PR(Pull Request)和 MR(Merge Request)是代码版本控制系统中的两个概念,它们主要用于在多人协作开发项目时合并代码变更。这两个术语在功能上非常相似,但在不同的代码托管平台上有不同的称呼。 PR(Pull Request) 定义: Pull Request 是 GitHub、Bitbucket、GitLab 等平台上用于代码合并的一种请求机制。当开发者在自己的分支上完成了一组代码更改后,他们可以创建一个 Pull Request 请求,将这些更改合并到主分支(例如 main 或 master)或者其他目标分支。 使用场景: 开发者完成功能或修复后,创建 PR 并向代码库的维护者或团队成员发出请求,要求对这些更改进行审查。 审查通过后,维护者可以批准并合并 PR,将这些更改合并到目标分支中。 平台: PR 这个术语主要用于 GitHub 和 Bitbucket 等平台。 MR(Merge Request) 定义: Merge Request 是 GitLab 上使用的术语,功能上与 Pull Request 类似。MR...
024_cpp初始化
介绍下 c++ 的初始化 一. 自动初始化为 0 的情况在 C++中,初始化为 0 的情况取决于变量的类型、存储位置和初始化方式。以下是 C++中会自动初始化为 0 的几种情况: 1. 全局变量和静态变量 全局变量(包括命名空间作用域的变量)和静态变量(static)在定义时会被自动初始化为 0。 这种自动初始化包括整型初始化为 0,浮点型初始化为 0.0,指针初始化为nullptr,类对象会调用默认构造函数。 示例: 1234567int globalVar; // 自动初始化为0static int staticVar; // 静态变量自动初始化为0int main() { static int funcStaticVar; // 函数内部的静态变量自动初始化为0 return 0;} 2. 类中的非静态成员变量(使用值初始化) 如果对象的非静态成员变量没有显式初始化,在值初始化时这些成员变量会被自动初始化为...
023_c++折叠表达式
C++中的折叠表达式(Fold Expressions)是一种简化变参模板函数编写的语法,从 C++17 开始引入。折叠表达式可以对可变参数模板进行自动折叠,从而简化代码。 基本概念折叠表达式可以将可变参数模板中的所有参数,通过特定的运算符折叠为一个结果。常见的运算符包括加法+、乘法*、逻辑与&&、逻辑或||等。折叠表达式主要有四种形式: 一元左折叠:从左到右依次折叠,例如:(args + ...) 一元右折叠:从右到左依次折叠,例如:(... + args) 二元左折叠:用于指定初始值,从左到右依次折叠,例如:(init + ... + args) 二元右折叠:用于指定初始值,从右到左依次折叠,例如:(args + ... + init) 示例以下是每种折叠表达式的代码示例: 1. 一元左折叠123456789template<typename... Args>auto sum(Args... args) { return (args + ...); // 将参数依次相加}int main() { ...
022_c++结构化绑定
介绍下 c++ 的结构化绑定 结构化绑定(Structured Binding)是 C++17 引入的新特性,允许我们将结构体、数组或元组中的多个元素同时绑定到多个变量上。 以下是几个常见的使用场景: 绑定 tuple: 12std::tuple<int, std::string, double> tuple{1, "hello", 3.14};auto [id, name, value] = tuple; // 自动解包到三个变量 绑定 pair: 1234std::map<std::string, int> map{{"one", 1}};for (const auto& [key, value] : map) { // 遍历map时直接获取键值 std::cout << key << ": " << value <<...
021_主题皮肤推荐
好用的主题皮肤推荐 工具 主题皮肤 备注 vscode Night Owl fav One Dark Pro foggy typora Vue fav Github Juejin
020_如何修改 Linux 栈区大小
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。和堆相比,栈通常很小。在 Linux 系统中,栈区的大小是固定的,通常为 8 MB。然而,在某些情况下,我们可能需要修改栈区的大小。本文将介绍如何修改 Linux 栈区大小。 1. 查看当前栈区大小1ulimit -s // 一般为8192KB, 即8MB 注:线程栈大小默认为 8M,8192 KB。 2. 修改栈区大小临时修改1ulimit -s 102400 // 改为100MB 注:ulimit -s ulimited 不限制。 永久修改有两种方法: 方法一:可以在/etc/rc.local 内加入 ulimit -s 102400 则可以开机就设置栈空间大小,任何用户启动的时候都会调用 方法二:修改配置文件/etc/security/limits.conf 手动添加: 1* soft stack 102400 自动添加: 1echo -ne "* soft stack...
019_Linux 查看库中是否包含指定函数
在 Linux 系统中,我们经常需要确认某个函数是否在特定的库文件中。以下是几种常用的查找方法。 1. nm 命令(最常用)nm 命令用于查看库文件中的符号表,是最直接的方法。 12345# 基本语法nm -D /path/to/library.so | grep 'function_name'# 实际示例nm -D /usr/lib/libc.so.6 | grep 'printf' 2. objdump 命令(详细信息)objdump 提供了更详细的库文件信息。 12345# 基本语法objdump -T /path/to/library.so | grep 'function_name'# 实际示例objdump -T /usr/lib/libc.so.6 | grep 'printf' 3. readelf 命令(ELF 文件专用)专门用于分析 ELF 格式文件的工具。 12345# 基本语法readelf -Ws /path/to/library.so | grep...