自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [C++高频精进] 网络编程:IO模型与高并发

本文摘要:IO模型与高并发架构核心要点 五大IO模型各有特点:阻塞IO简单但低并发,非阻塞IO需忙等,IO多路复用(select/poll/epoll)是高并发核心,信号驱动IO少用,异步IO最理想但兼容性差。其中epoll采用事件驱动O(1)复杂度,是Linux首选。同步IO需等待IO完成,异步IO则由内核回调。高并发推荐Reactor模式,百万级并发采用"epoll ET+线程池",中高并发选epoll/poll+有限线程,低并发用BIO+线程池即可。注意epoll虽高效但仍属同步

2025-12-05 09:55:36 933

原创 [C++高频精进] 网络编程:问题与机制

本文摘要:网络编程核心要点速览 网络编程涉及字节序转换、TCP/UDP特性、并发模型、可靠性保障、序列化与安全防护等关键技术。TCP需解决粘包/半包问题,常用消息头+消息体方案;UDP则无粘包但可能丢包。高并发场景推荐epoll模型,通过心跳和超时机制保障连接可靠性。数据序列化可选Protobuf或JSON等方案,安全防护需防范SYN洪水并加密传输。掌握这些核心技术可构建高效稳定的网络应用。

2025-12-04 10:11:13 722

原创 [C++高频精进] 网络编程:网路基础

本文摘要:本文介绍了TCP/IP协议栈的核心概念,包括四层模型(应用层、传输层、网络层、数据链路层)及其功能。重点对比了TCP和UDP协议的特性:TCP面向连接、可靠但开销大,适用于文件传输等场景;UDP无连接、高效但不可靠,适合实时通信。详细解析了TCP三次握手建立连接和四次挥手断开连接的机制,以及TIME_WAIT状态的作用。最后说明了Socket编程接口的使用方法,包括关键函数和TCP/UDP的编程流程差异。这些知识是理解网络通信和进行网络编程的基础。

2025-12-03 11:10:10 1100

原创 [C++高频精进] 并发编程:线程同步

本文摘要:总结了C++多线程同步的核心机制与问题解决方案。主要内容包括:1)互斥锁(std::mutex等)实现临界区独占访问;2)条件变量(std::condition_variable)实现线程间等待-通知机制;3)原子操作(std::atomic)提供无锁同步;4)读写锁(std::shared_mutex)优化读多写少场景。同时分析了死锁、活锁、饥饿等常见问题及其应对策略,强调RAII管理锁、条件变量配合谓词检查等最佳实践。文章通过对比表格清晰展示各同步机制的适用场景,并解答了条件变量必须配锁、

2025-12-02 10:15:24 544

原创 [C++高频精进] 并发编程:线程基础

本文摘要: C++11的std::thread实现了跨平台线程操作。线程相比进程更轻量,共享进程资源但拥有独立栈空间,通信成本更低。创建线程支持函数、Lambda和成员函数三种方式,需注意参数传递(引用需用std::ref)。线程管理必须调用join()(等待回收)或detach()(分离运行),否则会抛出异常。通过std::thread::id可获取唯一线程标识,std::this_thread命名空间提供休眠、让出CPU等工具函数。常见错误包括未管理线程、分离后访问失效资源、重复join等。线程状态分为

2025-12-01 14:14:50 703

原创 [C++高频精进] 现代C++特性:Lambda表达式

本文摘要:C++ Lambda 表达式核心要点 Lambda 表达式是 C++11 引入的匿名函数对象,语法为捕获列表mutable->返回类型{函数体}。捕获方式包括[=]值捕获、[&]引用捕获、混合捕获[=,&x]等,C++14 新增移动捕获[x=std::move(y)]。使用时需注意悬垂引用、mutable误用等陷阱。无捕获 Lambda 可转为函数指针,有捕获需用std::function包装。C++14/17 新增泛型 Lambda、constexpr等特性。Lambda

2025-11-30 11:06:03 1584 2

原创 [C++高频精进] 现代C++特性:右值引用和移动语义

本文摘要:C++ 右值引用与移动语义核心要点 左值右值区分: 左值有持久地址,可&取址(如变量) 右值是临时对象/字面量,不可取址 右值引用(T&&)特性: 仅绑定右值,延长其生命周期 支持修改绑定对象 相比const T&具有可修改性 移动语义优势: 通过移动构造/赋值转移资源 避免深拷贝提升性能 支持不可拷贝对象的转移 关键操作: std::move:强制左值转右值引用 std::forward:完美转发保持参数属性 注意事项: 移动后原对象不应再使用 移动构造函数应声明

2025-11-29 10:08:56 1373

原创 [C++高频精进] 现代C++特性:自动推导

本文摘要:C++类型推导机制包括auto、decltype和模板类型推导。auto忽略顶层const/引用,C++14扩展至函数返回值和lambda参数;decltype精确保留类型(含const/引用),支持表达式推导;模板类型推导分为按值/引用/万能引用三类,需特殊处理数组与函数名。进阶技巧包括decltype(auto)结合两者优势,auto&&适配多值类别,以及万能引用与std::forward配合实现完美转发。核心区别在于:auto简化声明,decltype精确获取类型,模板推导侧

2025-11-28 10:12:07 621 1

原创 [C++高频精进] 现代C++特性:结构化绑定

本文摘要:本文介绍了C++结构化绑定的核心特性与使用要点。结构化绑定允许通过auto [var1, var2]语法简洁地解构复合类型,支持public成员的结构体/类、pair/tuple、固定大小数组等类型。相比std::tie,结构化绑定语法更简洁且支持const/引用绑定。文章详细说明了适用类型、底层依赖机制、常见陷阱(如悬垂引用)以及C++20扩展特性(constexpr绑定、auto&&右值绑定)。同时对比了结构化绑定与std::tie的差异,并解答了常见问题,帮助开发者正确使用这

2025-11-27 09:55:27 417

原创 [C++高频精进] 文件IO:二进制与文本处理

本文摘要:文本处理与二进制处理的核心区别在于数据存储形式和读写转换方式。文本处理基于字符编码,适合人类可读场景(如日志、配置),但效率较低;二进制处理直接操作原始字节流,效率高但不可读,适用于结构化数据(如图片、结构体)。操作上,文本模式使用>>/<<等格式化函数,二进制模式需指定ios::binary并使用read()/write()。选择模式时需考虑数据用途、效率和跨平台兼容性,避免混用导致数据失真。

2025-11-26 14:35:30 550

原创 [C++高频精进] 文件IO:文件操作

本文摘要:对比了C++中文本文件与二进制文件的读写操作。文本文件采用字符编码存储,通过>>/<<和getline()读写,会自动处理换行符转换,适用于日志、配置等场景,但需注意缓冲区刷新和读写混用问题。二进制文件直接操作原始字节流,使用read()/write()方法,效率更高,适合图片、结构体等非文本数据,但需处理字节对齐、字节序和数据类型长度等跨平台兼容问题。此外,文件指针函数如seekg()/seekp()支持随机访问。包括模式区分、读写混用、字节对齐和跨平台兼容等核心问题。

2025-11-25 09:33:42 643

原创 [C++高频精进] 文件IO:文件流

本文摘要:C++文件操作的核心要点包括:三类文件流(ifstream、ofstream、fstream)分别用于读、写和读写操作,继承自标准I/O流类;五种文件打开模式(in/out/app/ate/binary)可通过位或组合使用;操作遵循打开→检查→读写→关闭四步流程,强调错误检查和资源释放;提供四个状态检测函数(eof/fail/bad/good)判断操作状态。特别注意事项:二进制操作需处理字节对齐和避免使用string类型,文本模式下需正确处理getline与>>的混用问题,区分app与

2025-11-24 20:03:42 778

原创 [C++高频精进] 异常处理:标准库异常与自定义异常

本文摘要:C++异常处理核心要点速览:标准库异常以std::exception为基类,分为逻辑错误(可预判)和运行时错误(不可预知)两大类,需通过what()方法获取错误描述。自定义异常应继承标准基类并重写what()(必须加noexcept),确保语义清晰且兼容标准处理。使用原则:优先复用标准异常,自定义异常需信息完整,杜绝基本类型异常,避免异常滥用。关键要区分错误类型选择合适异常,并确保异常安全。

2025-11-23 09:31:39 933

原创 [C++高频精进] 异常处理:异常传播与栈展开

本文摘要: C++异常传播机制在无匹配catch时,会沿调用栈逐层向上传递直至捕获或触发std::terminate()。传播过程中会执行栈展开,自动逆序销毁局部对象(按构造顺序相反),确保资源回收。关键规则包括:析构函数禁止抛出异常(避免双重异常)、未完全构造对象不执行析构。异常安全依赖栈展开的原子性和RAII机制。异常匹配优先精确/继承兼容类型,捕获const引用可避免异常切片问题。

2025-11-22 12:03:02 1434

原创 [C++高频精进] 异常管理:异常基础与语法

本文摘要:C++异常处理通过throw、try和catch三个关键字实现错误检测与处理分离。try监控可能出错的代码,throw抛出异常对象后立即终止当前执行,catch按声明顺序匹配处理异常,子类异常需在父类前捕获。未匹配的异常会向上传播,最终导致程序终止。推荐使用类类型异常以携带详细信息,避免基本类型导致语义模糊。catch(...)作为万能捕获必须放在最后,防止屏蔽后续处理。异常处理机制实现了错误检测与处理的逻辑分离,提高了代码可维护性。

2025-11-21 10:43:46 794

原创 [C++高频精进] 内存管理:RAII

本文摘要:RAII机制:C++资源管理核心思想 RAII(Resource Acquisition Is Initialization)是C++核心资源管理模式,其核心思想是将资源获取绑定到对象构造,资源释放绑定到对象析构。实现方式为封装资源为类成员,通过构造函数获取、析构函数释放,并可选禁止拷贝操作。 典型应用包括智能指针(如unique_ptr/shared_ptr)、互斥锁管理(lock_guard)、文件句柄和网络连接等。这种机制具有四大优势: 1)确保资源自动释放,避免泄漏; 2)提供异常安全保障

2025-11-20 09:24:38 636

原创 [C++高频精进] 内存管理:内存分区

本文摘要:本文系统梳理了程序内存的五大分区及其特性。栈区用于自动管理的临时变量,堆区支持手动分配动态内存,全局/静态区存储持久变量,常量区存放只读数据,代码区保存程序指令。重点对比了栈与堆在管理方式、效率、连续性等方面的差异,解析了const变量的存储位置规则,并介绍了线程局部存储的隔离特性。同时总结了全局/局部/静态变量的存储位置、生命周期和作用域差异,为理解程序内存布局提供了清晰框架。

2025-11-19 16:53:27 946

原创 [C++高频精进] 内存管理:动态内存

本文摘要:本文系统讲解C++动态内存管理,对比C/C++分配方式差异,指出手动管理易出现内存泄漏、野指针和悬空指针等问题。重点介绍C++11智能指针机制:unique_ptr实现独占所有权,shared_ptr通过引用计数共享内存,weak_ptr解决循环引用。分析各类智能指针特性、适用场景及使用陷阱,强调RAII自动管理优势。最后解答智能指针底层实现原理,阐明其通过类模板封装指针实现自动资源释放。

2025-11-18 10:30:10 627

原创 [C++高频精进] 模板与STL:STL

本文摘要:STL核心组件包括容器、算法、迭代器、仿函数、适配器和分配器。容器分为序列式(vector/list/deque)、关联式(有序/无序)和适配器(stack/queue等)。关键考量包括底层实现、迭代器失效问题、容器选择(如随机访问选vector,频繁增删选list,查找选择map或unordered_map)以及内存与效率的平衡。算法通过迭代器操作容器,仿函数实现自定义逻辑。选型需根据具体需求(随机访问、增删频率、查找方式等)综合评估性能和功能需求。

2025-11-17 09:39:09 823

原创 [C++高频精进] 模板与STL:模板

本文摘要:C++模板核心速览 模板通过类型参数化实现代码复用与类型安全。主要分为函数模板(隐式实例化)和类模板(显式实例化)。模板参数支持类型参数(typename T)和非类型参数(编译期常量)。特有机制包括特化(全特化/偏特化)解决特定类型需求,惰性实例化优化代码生成。相比宏,模板具有类型检查、支持重载/特化等优势,是STL实现的基础。注意模板定义需完整可见,通常将实现与声明放在同一文件。

2025-11-16 09:32:20 742

原创 [C++高频精进] 面向对象编程:友元与运算符重载

本文摘要:C++友元机制打破封装性,允许外部访问类的私有成员(友元函数/类/成员函数)。运算符重载通过operator关键字为自定义类型定义运算规则,包括成员函数和友元函数两种实现方式。其中<<和>>运算符需用友元函数重载,而赋值运算符=必须作为成员函数,涉及动态资源时需手动实现深拷贝。友元关系具有单向性和非传递性,运算符重载需遵守不可改变优先级、操作数个数等限制条件。

2025-11-15 09:11:52 1404

原创 [C++高频精进] 面向对象编程:继承与多态

本文摘要:继承机制允许派生类复用基类成员,通过 public/protected/private 继承方式控制访问权限。构造顺序先基类后派生类,析构顺序相反。基类虚析构函数确保正确释放资源。菱形继承通过虚继承(virtual)避免数据冗余和访问二义性。 多态分为静态(编译期,如函数重载/模板)和动态(运行期)。实现动态多态需满足:基类虚函数、派生类重写、基类指针调用。虚函数表(vtable)和虚指针(vptr)实现动态绑定。纯虚函数(=0)定义抽象类接口。 关键区分: 重写(Overrid

2025-11-14 09:38:30 945

原创 [C++高频精进] 面向对象编程:类与对象

本文摘要: 访问控制:public(接口)、private(实现)、protected(继承) const成员:const成员变量需初始化列表初始化;const成员函数不可修改成员变量 static成员:静态成员变量类共享、类外初始化;静态成员函数无this指针、仅访问静态成员 构造函数:可重载、非虚函数;含默认/带参/拷贝/移动构造 析构函数:不可重载;基类需设为虚函数避免资源泄漏 类大小:仅取决于非静态数据成员,遵循内存对齐 封装是核心特性,通过访问控制符隐藏实现细节暴露接口。构造函数

2025-11-13 09:06:14 772

原创 [C++高频精进] 数组与字符串:字符串

本文摘要:C++字符串处理技术要点对比 C风格字符串: 以'\0'结尾的字符数组 依赖cstring库函数(strcpy/strcat等) 存在安全隐患(缓冲区溢出风险) C++ std::string: 自动内存管理的字符串类 提供安全接口和丰富操作方法 支持小字符串优化(SSO)提升性能 支持运算符重载(+, ==等) 字符串拷贝: C用strcpy(不安全)、strncpy(需手动补'\0')、strlcpy(安全但非标准) C++可直接使用拷贝构造/赋值操作 建议:现代C++开发优先使用

2025-11-12 10:54:59 1157

原创 [C++高频精进] 数组与字符串:数组

本文摘要: 本文深入解析C/C++数组核心特性与使用规范,重点包括:1)数组名本质上是首元素地址,仅在sizeof、&数组名和decltype场景下不退化;2)数组传参必然退化为指针,一维数组需手动传递长度,二维必须指定第二维长度;3)C风格字符串以'\0'结尾,strlen与sizeof计算结果不同;4)数组与vector对比,前者编译期定长、手动管理,后者动态扩容、自动管理。文章通过代码示例详细说明了数组初始化、参数传递和字符串处理中的常见问题与解决方案。

2025-11-11 09:34:57 584

原创 [C++高频精进] 函数与指针:指针与引用

本文对比了C++中指针和引用的核心特性与差异。指针是存储内存地址的变量,支持空值、动态指向和多级访问,但存在野指针风险;引用是变量的别名,必须初始化且不可改指向,语法更简洁安全。两者访问效率相近,适用场景不同:需空值或动态指向时用指针,需简洁安全时用引用。文章详细解析了指针的野指针、空指针、函数指针等概念,以及引用的初始化、不可改指向等特性,并提供了语法示例和对比表格,帮助开发者根据需求选择合适机制。

2025-11-10 11:03:20 843

原创 [C++高频精进] 函数与指针:函数

本文摘要:函数声明与定义:函数可多次声明但仅能一次定义,声明与定义需参数类型/个数匹配(返回类型不影响) 参数传递: 值传递:创建副本,不影响实参 引用传递:直接操作实参,无拷贝开销 指针传递:通过地址间接修改实参 函数重载:同名函数通过参数类型/个数/顺序区分(返回类型不参与重载) 内联函数:inline建议编译器将短函数嵌入调用处(不含循环/递归) 默认参数:必须从右向左连续指定,不能跳过右侧参数 返回值:禁止返回局部变量引用,大型对象返回有编译器优化(RVO/NRVO)

2025-11-09 09:13:57 719

原创 [C++高频精进] 语法与数据结构:运算符与表达式

本文摘要:C++运算符特性解析 逻辑运算符:&&和||具有短路特性,当左操作数已确定结果时,右操作数不会执行 逗号运算符:从左到右依次执行各表达式,返回最右表达式的值,优先级最低 右结合运算符:包括赋值运算符(=)、条件运算符(?:)和单目运算符,优先级相同时从右向左计算 注意事项:避免在可能短路的右侧放置重要操作,区分逗号运算符与其他语法中的逗号,理解运算符优先级和结合性对表达式求值的影响

2025-11-08 10:09:15 1141

原创 [C++高频精进] 语法与数据结构:数据类型与变量

本文摘要:C++数据类型可分为基本类型(如int、float)、复合类型(指针、结构体等)和自定义类型。基本类型具有固定内存大小和取值范围,复合类型用于组合或间接访问数据。变量特性包括存储类别(如static、extern)、初始化方式及作用域。常量分为const(只读)和constexpr(编译期常量)。类型转换包括隐式转换(自动类型提升)和显式转换(四种强制转换方式)。文章详细比较了指针与引用的区别,结构体与联合体的内存分配差异,以及不同存储类别的特性,为C++基础语法提供了系统性的总结。

2025-11-07 09:45:34 451

原创 [C++高频精进] 语法与数据结构:程序结构与预处理

本文系统介绍了C++程序的编译流程及预处理技术。程序执行流程分为预处理、编译、汇编、链接四个阶段,各阶段使用不同工具并产生特定中间文件。重点解析了预处理指令:#include实现头文件包含,#define定义宏(含常量宏和函数宏)及其注意事项,条件编译实现跨平台适配和调试控制。同时比较了静态链接与动态链接的特点,前者编译时完成但体积大,后者运行时加载更灵活。文章还详细阐述了常见的宏定义陷阱及解决方案,为开发者提供实用的编程指导。

2025-11-06 21:23:39 800

原创 从编译器视角看C++:这些代码为什么比你想象的更慢?

你以为的优化,可能在编译器眼里只是徒劳。让我们揭开C++代码在编译器层面的真相。作为C++开发者,我们常常自信地写出"优化过"的代码,但你真的了解编译器是如何看待你的代码的吗?今天,让我们从编译器的视角,重新审视那些看似高效实则低效的C++代码。

2025-10-26 00:41:34 320

原创 Leetcode1044.最长重复子串的RK算法通俗理解

给你一个字符串 s ,考虑其所有 重复子串 :即 s 的(连续)子串,在 s 中出现 2 次或更多次。这些出现之间可能存在重叠。返回 任意一个 可能具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 “”。时,在豆包的帮助下逐渐理解了RK算法,发现好像也不是这么难,有感而发,贴一下我的理解。

2025-10-06 11:14:24 341

空空如也

空空如也

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

TA关注的人

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