自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 认识设计模式——工厂模式

定义一个工厂类,通过静态方法(或普通方法)根据传入的参数,创建并返回不同类型的产品实例。产品需继承自同一抽象基类(或接口)。将简单工厂的“单一工厂类”拆分为**“工厂抽象基类+具体工厂子类”**,每个具体工厂只负责创建一种具体产品。新增产品时,只需新增对应的产品类和工厂子类,无需修改原有代码。抽象工厂模式用于创建一系列相关或相互依赖的产品(产品族),它定义了一个抽象工厂接口,每个具体工厂实现该接口,负责创建一个产品族中的所有产品。

2026-01-01 20:12:27 845

原创 TCP 解析:头部格式、三次握手与四次挥手

今天是2026年第一天,新的起点,祝大家在新的一年身体健康,技术之路稳定向前,收获满满!😍😍😍⏮回顾我们先回顾一下什么是TCP,什么是UDP?TCP是面向连接的可靠的基于字节流的传输层通信协议,其核心目标是保证数据从源端到目的端的完整、有序、无丢失、无重复;而UDP是无连接的不可靠的基于数据报的传输层通信协议,核心目标是以最小的开销实现高速数据传输,不保证数据的可靠交付。㊙️TCP与UDP的头部格式TCP的头部格式。

2026-01-01 14:54:10 1042

原创 应用层:把冰冷的 0 和 1,变成你能看懂的视频、消息和网页

打开微信发消息、刷抖音看视频、发邮件传文件……我们每天接触的所有网络操作,最终都要靠应用层来实现。如果说传输层是“端到端的物流管家”,网络层是“跨网调度中心”,那应用层就是“网络世界的服务窗口”——直接对接用户和应用程序,把抽象的网络传输,变成我们能看懂、能使用的具体服务。核心结论:应用层是TCP/IP协议栈的最顶层,核心使命是“为应用程序提供网络通信服务。

2025-12-25 22:39:58 692

原创 物流梗讲透传输层:TCP 靠谱慢递 vs UDP 高效快车

16位端口号的范围是0-65535,其中0-1023是“知名端口”(固定分配给常用协议,比如80、443),1024-49151是“注册端口”,49152-65535是“动态端口”(客户端临时使用)。一般情况下,动态端口足够用,因为一个连接断开后,端口会被释放,可重复使用。如果一台主机需要同时建立大量连接(比如服务器),可以通过调整系统参数增加动态端口范围,或者用多个IP地址分担端口压力。

2025-12-24 11:43:41 530 1

原创 没想到你是这样的网络层[特殊字符]~

用“跨城寄快递”的场景类比,你就能瞬间get网络层的核心工作:你(源主机)要寄一个包裹(数据)到外地的朋友(目标主机)家,不会直接自己送过去,而是交给快递员,快递员送到本地分拣站,再经过多个中转枢纽(路由器),最终到达朋友所在城市的分拣站,最后派送到家。而支撑这一切的核心,就是我们常说的IP协议。理解了网络层,你就能明白平时“网速慢”可能是路由选择出了问题,“网页打不开”可能是ICMP反馈了“目标不可达”,“IP地址冲突”会导致无法上网的原因——这些网络故障,都能在网络层的逻辑里找到答案~

2025-12-07 16:35:55 897

原创 认识STLstack容器

适配器(adaptor)是 STL 的核心设计模式之一,其作用是对现有容器的接口进行封装和改造,屏蔽原有容器的部分功能,只暴露符合特定使用场景的接口。stack 就是典型的适配器:它并不直接管理内存,而是“复用”deque(或vectorlist)的底层内存结构和操作,仅提供栈所需要的“入栈、出栈、访问栈顶”等核心接口,隐藏了序列式容器的随机访问、中间插入/删除等无关功能。自定义类型需提供默认构造函数、拷贝构造函数(或移动构造函数),否则无法入栈;

2025-12-02 21:04:02 1386

原创 了解计算机网络的“物理根基”——物理层与数据链路层

编码方式核心特点适用场景不归零码简单,有直流分量早期低速传输(已淘汰)曼彻斯特编码时钟同步,无直流分量以太网(网线)差分曼彻斯特抗干扰强,时钟同步光纤、高速数字传输。

2025-11-29 15:39:38 1595

原创 浅谈deque的底层机制

在C++STL序列式容器中,deque(双端队列)是一个兼顾了vector随机访问和list双端高效操作的容器,支持首尾O(1)增删,也支持随机访问,其底层通过分段连续内存实现。dequedeque和vector的最大差异,一是deque允许在常数时间内对两端元素进行插入或删除,二是deque没有所谓容量(capacity)观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来。换句话说,像vector。

2025-11-25 22:11:01 1195

原创 从三个方面初步认识计算机网络

计算机网络是由若干节点(计算机、集线器、交换机、路由器等)和连接这些节点的链路组成,以实现计算机之间的数据通信和资源共享为主要目的的系统。

2025-11-23 15:24:28 976 1

原创 认识STL序列式容器——List

在C++STL的序列式容器中,list是一个独特的存在——它是基于双向链表实现,与vector的连续内存空间形成鲜明对比。🔁一、​​​​​​​list的底层结构——双向链表list的核心是双向链表,这意味着它的元素在内存中非连续存储,并且通过指针相互连接。

2025-11-23 00:40:34 760

原创 认识设计模式——单例模式

讲设计模式之前,我们先了解一下设计模式三要素:设计模式三要素就是对一个类而言,应该只提供一种功能,尽量使类的功能单一化,避免类的臃肿。对于扩展是开放的,对于修改是封闭的。对于已经封装好的类应该避免对其内部进行修改, 如果要添加其他功能,应在类外部再进行其他类的定义和实现。高层模块不应该依赖低层模块,两个都应该依赖抽象抽象不应该依赖细节,细节应该依赖抽象高层:理解为上层应用,就是业务层的实现低层:理解为低层接口,封装好的API、动态库等抽象:指的是抽象类或者接口,在c++中没有接口,只有抽象类。

2025-11-11 22:38:58 1877

原创 从底层了解STL的vector容器的扩容机制

GCC 中 vector 的核心成员封装在private:// 指向第一个元素的指针// 指向最后一个元素之后的位置(已用内存的末尾)// 指向已分配内存的末尾// ... 其他成员和方法。

2025-11-09 01:30:50 1611

原创 初识——STL之Array

的可修改迭代器,用于标记容器范围的结束。

2025-11-05 17:09:43 1420

原创 C++——初识STL

STL包括六大组件,分别为容器、算法、迭代器、仿函数、适配器、分配器以下是各组件的概念容器(Containers)用于存储和管理数据的类模板,提供了多种数据结构(如数组、链表、树、栈、队列等),方便我们直接使用。容器分为序列式容器、关联式容器和无序容器。算法(Algorithms)用于操作容器中数据的函数模板,涵盖排序、查找、遍历、修改、数值计算等常见操作(如sortfindfor_each算法独立于容器,通过迭代器访问容器元素,具有通用性。迭代器(Iterators)

2025-11-03 00:30:00 954

原创 C++的异常管理——编写健壮代码的关键技术

必须继承。

2025-11-02 01:04:02 1017

原创 初始——正则表达式

今天简单地用几个例子来讲一下正则表达式,确保能够看得懂。至于能不能写出来,因为毕竟现在AI工具挺多的,我觉得可以不用花费太多的精力在这上面,当然前提是能看得懂💓。💓💓💓正则表达式是一种用简洁语法描述文本模式的工具,核心用于匹配、提取和替换符合特定规则的文本,广泛应用于编程、数据处理和表单验证等场景。一、📚核心功能二、⚔示例a-zA-Z0-9{3,16}

2025-10-24 21:10:15 1280

原创 C++泛型编程——模板

C++ 模板是泛型编程的核心机制,它允许开发者编写与具体类型无关的代码,通过 “参数化类型” 实现代码的复用。模板不是直接编译执行的代码,而是编译器生成具体代码的 “蓝图”,编译器会根据实际传入的类型参数自动生成对应版本的函数或类。下面从其底层原理、分类、特性以及高级用法来进行讲解:💫一、模板的核心是 “类型参数化”,也就是把代码中具体的类型(比如intdouble)抽象为一个 “类型变量”(通常用T表示)。T上述代码中,add函数模板会被实例化为两个函数:add<int>

2025-10-20 17:51:21 1560

原创 C++的四种类型转换

✨为什么需要四种类型转换?在 C 语言中,我们使用 Type b = (Type)a来进行所有的类型转换,也就是万物皆可转。所以C++ 引入了四种命名的转换运算符,让转换的,让编译器能进行,从而提升代码的安全性和可维护性。✨一、 静态转换(static_cast):编译期的 “安全” 转换用于编译器可验证的、低风险的类型转换,仅仅在编译期检查合法性,不涉及运行时开销适用场景广,但需要精准把控边界。

2025-10-17 19:59:16 1286

原创 C++内存管理——malloc/free和new/delete

C++ 提供了多种内存管理方式,包括传统的 C 风格的 malloc和 free,以及 C++ 专用的 new和 delete。理解这些内存管理方法对于编写高效、安全的 C++ 程序至关重要。一、了解内存分区自动管理内存内存分配和释放速度快,但空间有限动态分配与释放灵活但易出错(如内存泄漏、悬挂指针)。程序启动时分配,程序结束时释放static存储常量,不可修改,程序结束时释放存储程序的二进制指令,只读。

2025-10-14 10:48:55 1303

原创 C++多态——编译时多态和运行时多态

在程序运行时才确定具体调用哪个函数的机制,因此也称为 “晚绑定”。特性编译时多态(静态绑定)运行时多态(动态绑定)确定调用时机编译阶段运行阶段实现方式函数重载、运算符重载、模板虚函数 + 继承底层机制编译器直接匹配函数地址虚函数表(Vtable)+ 虚表指针(vptr)适用场景同一功能的不同参数 / 类型版本同一接口的不同实现(多态行为)效率高(无运行时开销)略低(额外指针寻址)扩展性差(新增类型需重新编译)好(新增派生类无需修改基类代码)

2025-10-11 17:48:17 1276

原创 C++11新特性之——constexpr

仅能修饰成员函数,表示 “不修改对象状态”):无没有“编译期计算” 能力,只能在运行时调用。是 C++11 给 “编译期” 加的 “计算权限”—— 让变量 或者 函数能在编译时 “干活”,而不是等程序run起来才开始。用它修饰的变量或者函数,可以在编译阶段计算出结果,而不是在运行时,既保证了常量的正确性,又提升了程序效率。并且constexpr。函数,既可以像普通函数在运行时调用,也能在编译期被 “计算出结果”(比如给constexpr。:强制区分了“编译期常量” 和 “运行时常量”,减少因const。

2025-10-09 20:54:00 1046

原创 C++11所支持的线程库

C++11 之前,在 C++ 中进行多线程编程通常需要依赖平台特定的库,如 Windows 下的 Windows API,Linux 下的线程库(pthread)。不同平台的接口差异很大,代码移植性差。C++11 引入了<thread>等相关头文件组成的线程库。

2025-10-07 19:12:10 639

原创 C++11的基于范围的for循环

优先使用避免不必要的拷贝修改元素时使用auto&避免在循环中修改容器结构注意临时对象的生命周期复杂类型使用 auto 简化代码。

2025-10-05 14:56:46 360

原创 C++11的智能指针

为什么需要智能指针:在传统的C++中,程序员一般都使用new和delete来手动管理内存,这就带来了① 忘记delete:在分配内存后,由于复杂的程序逻辑或者异常而忘记delete,那么这块内存在程序结束前都无法被释放② 异常:如果程序在new和delete之间抛出了异常,delete语句可能不会执行其核心思想:就是将一个原生指针封装在一个智能指针对象当中,而当该对象离开作用域时,它的析构函数会自动调用delete来释放其管理的内存。也被称为。

2025-09-30 00:06:36 253

原创 左值、右值、左值引用、右值引用、移动转发、完美语义

简单说,std::move的核心是“标记”(把左值转成右值,同时告诉编译器这个对象的资源可以“搬空”),而真正的“资源转移”是由目标对象的移动构造、赋值运算符完成的。核心思想:当对象是临时的、即将销毁的右值时,可以直接将它的资源转移给新对象,而不是创建一个完整的副本。一个临时的、短暂的、即将被销毁的表达式。左值引用只能引用左值,不能直接引用右值,但是const 左值引用二者都可以引用。右值引用只能引用右值,不能直接引用左值,但可以引用被move的左值。左值引用就是对左值的引用,为已存在的左值取别名。

2025-09-26 23:50:43 894

原创 C++11的Lambda表达式

捕获列表: 控制外部变量访问 如:[=] 、[&] 、[x, &y]参数列表: 和普通函数一样传入形参 如:(int a, double b)返回类型: 可以自动推导或者显示指定 如: -> intmutable: 允许修改值捕获的变量 如: [x]()mutable {x++;

2025-09-23 20:00:00 170

原创 C++11的可调用对象包装器和绑定器

直接存储成员函数指针时,缺少this对象信息,所有该类对象的实例(&obj)用来代替成员函数隐藏的this指针,而std::bind用来绑定this指针和参数。std::bind 将可调用对象的部分或者全部参数“提前绑定”为固定值,生成一个新的可调用对象(适配std::function)如:std::function<int(int, int)> 包装了接收两个int参数,返回int的可调用对象。基本语法:std::bind(可调用对象, 绑定参数1, 绑定的参数2, . . .)在上述代码中,有这一段。

2025-09-22 11:05:01 246

原创 C++11引入的列表初始化

列表初始化,就是使用一对花括号来初始化对象的一种语法,旨在为各种类型的初始化提供一种统一的语法。

2025-09-20 00:22:05 362

原创 C++11引入的新关键字decltype

decltype 是 C++11 引入的类型推导关键字,核心作用是依据指定。

2025-09-17 13:51:13 478

空空如也

空空如也

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

TA关注的人

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