自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单调栈与单调队列:高效解决经典算法问题

本文介绍了单调栈和单调队列这两种数据结构及其应用。单调栈通过维护栈内元素的单调性,能以O(n)时间复杂度解决"下一个更大/更小元素"、接雨水等问题;单调队列则通过双端操作处理滑动窗口最值问题。两者的核心都是通过剔除不满足单调性的元素来保持结构特性。文章详细解析了它们的实现逻辑、代码框架和典型应用场景,并对比了两者的区别,为面试常见的相关问题提供了系统性的解决方案。

2026-06-14 22:39:42 483

原创 跳表:高效查找的链表黑科技

跳表是一种基于概率平衡的数据结构,通过在有序链表上建立多层索引实现高效查找。它采用"空间换时间"策略,高层索引跳过大量节点,底层索引精确定位,使得查找、插入和删除的时间复杂度均为O(logn)。跳表的关键在于随机决定节点层数,无需复杂平衡操作,实现简单且性能媲美平衡树。相比红黑树,跳表更易实现并发控制和范围查询,被广泛应用于Redis、LevelDB等系统。核心操作包括:查找时从高层向右向下搜索;插入时随机生成层数并在各层插入;删除时在各层移除节点并更新最大层数。跳表以简洁实现获得高效性

2026-06-14 15:46:02 319

原创 关键路径解析:项目管理的工期奥秘

摘要: 关键路径用于计算项目最短工期,识别不可延迟的任务。基于AOE网(边表活动),通过计算事件的最早(ve)和最晚(vl)发生时间,确定关键活动(ee=el)。算法步骤:1)拓扑排序正向计算ve;2)逆拓扑序反向计算vl;3)对比ee与el筛选关键活动。示例代码通过邻接矩阵实现,输出关键路径及总工期。关键路径是图中最长路径,决定项目总时长,适用于项目管理优化。

2026-06-12 22:18:05 319

原创 HTTP进化史:从1.0到3.0的核心变革

本文系统梳理了HTTP协议从1.0到3.0的演进历程。HTTP/1.0引入头部但使用短连接;HTTP/1.1通过长连接和管道化提升性能,但仍存在HTTP层面的队头阻塞;HTTP/2采用二进制分帧和多路复用解决HTTP阻塞,但保留TCP层的队头阻塞;HTTP/3革命性地基于UDP的QUIC协议,实现0-RTT连接、彻底消除队头阻塞,并支持连接迁移。文章对比了各版本核心特性,解释了队头阻塞问题的演变过程,并提供了关键技术点的面试题解答。HTTP的演进展现了从文本协议到高性能二进制协议的完整技术发展路径。

2026-06-12 14:10:02 392

原创 C++ 智能指针完全指南(三):weak_ptr 与循环引用

本文介绍了C++中weak_ptr的作用及使用场景。weak_ptr是shared_ptr的弱引用搭档,它指向shared_ptr管理的对象但不增加引用计数,因此不会影响对象的生命周期。主要解决shared_ptr循环引用导致的内存泄漏问题,当两个对象互相持有对方的shared_ptr时,改用weak_ptr可打破循环。weak_ptr通过lock()方法原子地获取shared_ptr来安全访问对象,常用于观察者模式、缓存系统等场景。文章通过代码示例演示了循环引用的形成及weak_ptr的解决方案,并对比了

2026-06-11 22:06:58 448

原创 并查集:10行代码搞定连通性问题

本文系统介绍了并查集(DSU)数据结构,包括其核心概念、优化方法及实际应用。主要内容包括: 基本结构:使用parent数组表示元素归属,通过find和union操作实现集合管理 优化策略: 路径压缩:查找时将节点直接连接到根,降低后续查询复杂度 按秩合并:根据树高合并集合,保持结构平衡 高效实现:双优化后均摊时间复杂度达O(α(n)),接近常数级 典型应用:Kruskal算法、社交网络分析、环检测等场景 代码模板:提供带双优化的完整实现方案 该数据结构以简洁代码(核心不足10行)高效解决元素分组和连通性问题

2026-06-11 13:21:41 321

原创 TLS握手全解析:从1.2到1.3的加密演进

本文详细解析了TLS握手过程,重点对比了TLS1.2和TLS1.3的差异。TLS握手需要完成加密协商、身份验证和密钥生成三个核心任务。TLS1.2采用2-RTT(两次往返)握手流程,支持RSA和ECDHE两种密钥交换方式,其中ECDHE具有前向安全性。TLS1.3则优化为1-RTT握手,移除RSA仅保留ECDHE,强制实现前向安全性,并加密更多握手信息。文章通过图解和抓包示例展示了具体流程,最后总结了常见面试问题,帮助理解TLS如何保障HTTPS通信安全。

2026-06-10 21:46:14 468

原创 C++ 智能指针完全指南(二):shared_ptr 深度详解

本文详解 C++ `shared_ptr` 的原理与使用。核心是引用计数机制:每个 `shared_ptr` 指向对象和控制块,拷贝时计数加一,销毁时计数减一,归零自动释放。推荐用 `make_shared` 一次分配对象和控制块,比 `new` 方式更省内存。引用计数本身线程安全,但对象操作需额外加锁。从 `this` 创建 `shared_ptr` 需继承 `enable_shared_from_this`。`shared_ptr` 大小 16 字节,适用于多个 owner 共享同一对象的场景。

2026-06-10 17:30:15 271

原创 C++ 智能指针完全指南(一):unique_ptr 深度详解

C++智能指针系列:独占所有权利器unique_ptr 本文深入解析C++11引入的unique_ptr智能指针,解决手动内存管理的三大痛点:内存泄漏、异常安全问题和所有权混乱。通过对比原始指针的缺陷,展示了unique_ptr如何通过RAII机制实现自动资源释放。核心特性包括:独占所有权(不可拷贝只可移动)、三种创建方式(推荐make_unique)、灵活的对象访问方法。文章详细介绍了unique_ptr在函数返回值、容器存储和工厂模式中的典型应用场景,以及如何通过自定义删除器管理非new分配的资源(如文

2026-06-09 21:00:54 655

原创 HTTPS加密原理:图解安全传输全流程

HTTPS通过TLS加密层解决HTTP明文传输的安全隐患,采用混合加密机制:非对称加密(如RSA/ECDHE)安全交换密钥,对称加密(如AES)高效传输数据。数字证书由权威CA签发,浏览器通过内置CA公钥验证证书真实性,防止中间人攻击。HTTPS三大安全机制包括防窃听(加密传输)、防篡改(MAC校验)和防冒充(CA认证),在443端口实现安全通信。典型面试题涵盖加密原理、证书验证及抓包工具解密原理等核心知识点。

2026-06-09 18:25:03 828

原创 图论实战:最小生成树与拓扑排序精解

本文介绍了图论中的两大核心算法:最小生成树和拓扑排序。最小生成树部分详细讲解了Prim算法(从顶点出发逐步扩展)和Kruskal算法(按边权排序配合并查集),对比了两者的适用场景和时间复杂度。拓扑排序部分阐述了Kahn算法(基于入度的BFS实现),用于解决有向无环图的依赖关系排序问题。文章包含完整的C语言代码实现和测试示例,通过图表和对比表格帮助理解不同算法的特点,最后用简洁的总结帮助记忆各算法的核心思想和应用场景。

2026-06-08 22:28:58 334

原创 C++11右值引用与移动语义深度解析

本文深入解析了C++11中的右值引用和移动语义。右值引用(T&&)只能绑定右值,通过移动构造函数实现资源的高效转移,避免深拷贝开销。移动构造直接接管源对象资源并将源置空,时间复杂度O(1)。std::move仅执行左值到右值引用的类型转换,不实际移动数据。关键点包括:移动构造函数和移动赋值运算符应标记为noexcept以保证容器操作效率;编译器自动生成规则;移动后源对象处于有效但未指定状态。移动语义特别适用于临时对象和不再使用的左值,是提升C++性能的重要特性。

2026-06-08 16:44:32 384

原创 数据结构进阶(五):最短路径——Dijkstra 与 Floyd 算法

本文介绍了两种经典的最短路径算法:Dijkstra算法和Floyd算法。Dijkstra算法采用贪心策略,适用于单源最短路径问题(无权图或边权非负),时间复杂度为O(n²)。Floyd算法通过动态规划求解所有顶点对的最短路径,时间复杂度为O(n³),但实现更简洁。两者均不支持负权边,需结合具体场景选用:单源问题用Dijkstra,全源问题用Floyd。文中提供了完整的C语言实现代码,并通过示例图演示了算法执行过程,最后对比了两者的核心特性和适用场景。

2026-06-07 18:00:00 575

原创 HTTP 完全指南(最终篇):CORS 跨域资源共享深度详解

本文深入解析了CORS(跨域资源共享)机制。首先解释了同源策略的概念及其限制范围,指出不受同源策略限制的资源加载方式(如JSONP原理)。然后详细区分了简单请求与非简单请求的条件和处理流程,特别强调了预检请求的作用。对于带Cookie的跨域请求,文章给出了前后端的具体配置方案,包括必须设置Access-Control-Allow-Credentials和禁用通配符等关键点。最后对比了CORS、JSONP等跨域解决方案的优缺点,并总结了CORS的核心流程和关键响应头,帮助开发者全面理解并正确处理跨域问题。

2026-06-07 12:56:55 484

原创 HTTP 完全指南(三):Cookie、Session 与 Token 深度详解

本文深入解析HTTP无状态问题的三种解决方案:Cookie、Session和Token(JWT)。Cookie是浏览器存储的小数据,自动随请求发送;Session将数据存于服务器,仅通过Cookie传递session_id;JWT则是自包含的加密令牌,需手动携带。三者对比显示:Session适合传统Web登录,JWT更适用于API和分布式系统。文章详细介绍了各方案的技术实现、安全属性和适用场景,并提供了JWT的实战代码示例,最后总结了防御XSS/CSRF等攻击的最佳实践。核心结论:Session维护服务器状

2026-06-06 22:10:16 281

原创 C++完美转发与引用折叠全解析

本文摘要:C++完美转发与引用折叠机制解析 本文深入讲解C++11的完美转发和引用折叠机制。主要内容包括: 万能引用的定义与推导规则:T&&配合模板推导时,传入左值T推导为引用类型 引用折叠的核心规则:只要有左值引用参与,结果就是左值引用 std::forward原理:根据T的类型还原参数的原始值类别,实现完美转发 实际应用场景:对比std::move(无条件转右值)与std::forward(有条件保持原样),分析emplace_back等容器的内部实现 完整示例展示工厂函数如何通过完美转

2026-06-06 17:10:24 541

原创 LRU缓存算法:双向链表+哈希表实现

本文详细介绍了LRU缓存淘汰算法的实现原理与C语言实现。LRU算法通过结合双向链表(维护访问顺序)和哈希表(快速查找)实现高效缓存管理,时间复杂度均为O(1)。文章包含完整的代码实现,包括双向链表操作、哈希表设计(拉链法处理冲突)以及核心API(创建、获取、插入、销毁)。测试案例验证了缓存淘汰策略的正确性,并分析了各操作的时间复杂度。双向链表的prev指针在实现O(1)时间删除尾部节点时发挥了关键作用,相比单向链表具有明显优势。该实现可作为面试高频考点LRU算法的标准参考方案。

2026-06-05 19:26:18 326

原创 HTTP 完全指南(二):缓存机制深度详解

HTTP缓存机制是提升网页性能的关键技术,分为强缓存和协商缓存两类。强缓存通过Expires(绝对时间)或Cache-Control(推荐,相对时间)控制,有效期内直接从本地读取(200 from cache)。协商缓存在缓存过期后触发,通过Last-Modified/ETag向服务器验证资源是否变更,返回304(继续用缓存)或200(下载新资源)。实际应用中,建议:HTML使用no-cache确保实时性,带哈希的静态资源(如style.a3f2b1c.css)采用长期强缓存,图片设置适中缓存周期。关键区别

2026-06-05 19:25:44 460

原创 HTTP 完全指南(一):请求与响应报文结构深度详解

本文系统讲解了HTTP协议的核心内容,包括请求/响应报文结构、常见请求方法(GET/POST等)、状态码(301/302、401/403等)和关键头部字段(Content-Type、Cache-Control等)。重点对比了GET与POST的语义差异,分析了幂等性和安全性概念,并解释了长短连接机制。文章还提供了使用curl抓包的方法和常见HTTP面试题解析,帮助开发者深入理解这一基础协议,为掌握缓存、Cookie等高级特性奠定基础。全文采用对比表格和真实报文示例,突出HTTP协议的关键技术要点。

2026-06-04 16:12:32 768

原创 C++11移动语义:右值引用与高效资源转移

摘要: 本文深入解析C++11的右值引用与移动语义,通过对比拷贝和移动操作,阐述如何高效转移资源所有权。右值引用(T&&)标识可被“窃取”资源的临时对象,移动构造函数和移动赋值运算符直接接管指针资源并将源对象置空,避免深拷贝开销。关键点包括:std::move的本质是左值到右值的类型转换;移动构造需标记noexcept以确保容器(如vector)扩容时优先使用移动而非拷贝;自定义资源管理类时需显式定义移动操作。示例代码演示了移动语义在字符串类和动态数组中的应用,强调移动后源对象处于“有效但未

2026-06-04 15:07:05 290

原创 C++左值与右值:核心判断法则详解

本文系统讲解了C++中左值和右值的核心概念。左值是可寻址、有身份的表达式(如变量、数组元素),右值则是临时对象或字面量(如算术结果、字面量)。文章详细介绍了判断法则:能用&取地址的是左值,反之是右值。特别指出const左值引用的"万能"特性,以及右值引用变量本身是左值这一易混淆点。通过大量代码示例,阐释了赋值表达式、自增操作等特殊情况下的值类别判断规则,为理解C++引用机制和移动语义奠定了坚实基础。

2026-06-03 21:57:41 834

原创 图论入门:从基础到遍历算法

本文系统介绍了图数据结构的基本概念、存储方式和遍历算法。作为非线性结构,图通过顶点和边表达多对多关系,广泛应用于社交网络、地图导航等领域。文章详细比较了邻接矩阵(适合稠密图)和邻接表(适合稀疏图)两种存储方式的实现与复杂度,并提供了C语言代码示例。核心遍历算法部分,深入讲解了深度优先搜索(DFS)的递归/非递归实现和广度优先搜索(BFS)的队列实现,对比了两者在路径查找、空间复杂度等方面的特性差异。最后通过完整测试代码演示了不同场景下的图操作,为后续学习最短路径、最小生成树等高级图算法奠定基础。

2026-06-03 12:36:47 358

原创 C++四大设计模式:单例、工厂、观察者、策略

本文介绍了C++中四种常用设计模式:单例模式确保类仅有一个实例(通过私有构造+静态访问点实现);工厂模式将对象创建逻辑封装(简单工厂集中创建,工厂方法每个产品对应工厂);观察者模式实现一对多依赖通知(Subject维护Observer列表);策略模式封装可互换算法(通过接口和组合实现运行时切换)。这些模式解决了代码组织问题,提升可维护性、扩展性和复用性,是经过验证的最佳实践。掌握它们能写出更优雅的C++代码。

2026-06-02 18:05:37 300

原创 掌握C++ std::bind:参数绑定与灵活调用

本文介绍了C++中的std::bind函数绑定机制,主要包含以下内容: 基本语法:通过<functional>头文件和占位符(_1,_2等)实现参数绑定,可固定部分参数或重排参数顺序。 常见用法: 绑定普通函数、成员函数(需传递对象指针)、仿函数和Lambda表达式 使用ref/cref传递引用参数 配合STL算法(如find_if、transform)使用 与Lambda对比: bind在参数重排时更灵活,但可读性和性能不如Lambda 现代C++推荐优先使用Lambda,bind仅用于特殊场

2026-06-02 15:18:35 314

原创 STL算法全解析:从遍历到集合运算

本文摘要: STL算法是标准模板库的核心组件之一,提供100多种通用算法,主要包括:遍历算法(如for_each)、查找算法(find/binary_search等)、排序算法(sort/partial_sort)、修改算法(copy/transform/replace等)和集合运算(set_union等)。这些算法通过迭代器与容器解耦,可作用于多种数据结构。关键注意事项包括:remove/unique需配合erase真正删除元素,二分查找和集合运算要求有序序列。算法主要分布在<algorithm&g

2026-06-01 13:36:37 335

原创 C++ Lambda表达式:从入门到精通

本文系统介绍了C++11引入的Lambda表达式。主要内容包括:1. Lambda基本语法结构(捕获列表、参数、返回类型、函数体);2. 捕获列表的多种方式(值捕获、引用捕获及混合捕获);3. mutable关键字的作用;4. Lambda的本质是编译器生成的匿名仿函数类;5. 典型应用场景(STL算法、回调函数、多线程等);6. 与仿函数、函数指针的对比;7. 使用注意事项(悬空引用问题等)。文章通过丰富示例演示了Lambda的核心特性,强调其作为现代C++重要编程范式在简化代码、提高可读性方面的优势。

2026-06-01 13:35:59 487

原创 哈希表:从O(1)查找到冲突解决全解析

哈希表是一种通过哈希函数将键直接映射到存储位置的数据结构,理想情况下可实现O(1)时间复杂度的查找。其核心三要素包括键、哈希函数和桶数组。哈希表的核心问题是如何处理键映射冲突,常见方法有拉链法和开放定址法(线性探测、二次探测、双哈希)。好的哈希函数需具备计算快、分布均匀和确定性特征,常用方法包括除留余数法、乘法哈希和字符串哈希。负载因子超过阈值时需要扩容并重新哈希所有元素。哈希表广泛应用于unordered_map、Redis键值存储、数据库索引和布隆过滤器等场景,相比平衡树具有更快的平均查找速度但不支持有

2026-05-31 20:59:13 483

原创 C++ STL 仿函数完全指南:从内置仿函数到自定义实现

STL仿函数(Functor)解析:从基础到实战应用 摘要:STL仿函数是重载了operator()的类对象,能够像函数一样被调用。本文系统介绍了仿函数的核心特性和应用场景:1)对比函数指针和Lambda,突显仿函数可保存状态和内联优化的优势;2)分类详解STL内置的算术、关系和逻辑仿函数;3)展示在排序、容器自定义和算法变换中的典型用法;4)提供自定义仿函数实现案例,包括带状态的复杂仿函数;5)对比仿函数与Lambda的适用场景,建议复用逻辑用仿函数,一次性逻辑用Lambda。文章附有仿函数速查表和典型应

2026-05-31 14:54:04 394

原创 Redis位图实战:海量数据高效处理

本文介绍了Redis位图(Bitmap)的原理与应用。位图是String类型的特殊用法,通过每个bit表示0/1状态,具有极致的内存效率(1字节可存8个状态)。文章详细讲解了位图的核心命令:SETBIT/GETBIT设置和获取位值,BITCOUNT统计1的数量,BITPOS查找位位置,以及BITOP进行位运算。典型应用场景包括用户签到系统、活跃用户统计和权限管理,相比传统方案可节省数百倍空间。最后指出了位图的局限性和解决方案,并提供了C语言操作示例。位图特别适合海量布尔数据的存储和统计需求。

2026-05-30 17:51:38 428

原创 深入解析STL中的stack、queue与priority_queue

本文介绍了C++ STL中的三种容器适配器:stack(栈)、queue(队列)和priority_queue(优先队列)。stack遵循后进先出(LIFO)原则,只允许操作栈顶;queue遵循先进先出(FIFO)原则,操作限于队头和队尾;priority_queue则按优先级出队,默认最大元素优先。三者都是基于其他容器(默认deque)实现的适配器,通过限制接口提供特定功能。文章详细讲解了它们的创建方法、核心操作和使用场景,并对比了它们的特性与底层容器选择,最后总结了适配器的设计思想和使用要点。

2026-05-30 17:29:25 309

原创 排序算法完全指南(八):归并排序深度详解

归并排序是一种稳定的O(nlogn)排序算法,采用分治思想:先将数组递归拆分为单个元素,再两两合并有序数组。其核心Merge操作通过比较两个有序数组的元素,优先取左边元素(使用<=保证稳定性)来合并。虽然需要O(n)额外空间,但时间复杂度始终稳定在O(nlogn),没有快排的最坏退化问题。归并排序特别适合需要稳定排序、链表排序和外部排序的场景,是快速排序和堆排序之外的重要补充。

2026-05-29 22:18:35 529

原创 B+树:数据库索引的终极奥秘

B+树是B树的优化变体,专为数据库索引设计。其核心改进包括:1)数据仅存于叶子节点;2)内部节点仅存储索引;3)叶子节点通过链表连接。这使得B+树相比B树具有三大优势:范围查询效率更高(直接顺序扫描)、树高更低(内部节点更轻)、查询性能更稳定(必须到叶子节点)。MySQL等数据库采用B+树主要因其在磁盘I/O和范围查询上的卓越表现,其中InnoDB的聚簇索引和辅助索引均基于B+树实现。B+树通过空间换时间,实现了比B树更优的数据库查询性能。

2026-05-29 19:26:18 408

原创 Redis 发布订阅模式完全指南

Redis发布订阅功能是一种轻量级的消息通信模式,允许发布者向频道发送消息,订阅者实时接收。文章介绍了基础命令(SUBSCRIBE/PUBLISH/UNSUBSCRIBE)、模式订阅(PSUBSCRIBE)、频道状态查看及实际应用场景(如实时聊天、系统通知)。同时指出了其局限性(消息不持久化、无确认机制)并提供了C语言实现示例。Redis发布订阅适合实时通知等场景,但不适用于关键业务消息处理。

2026-05-28 17:20:58 490

原创 排序算法完全指南(七):堆排序深度详解

堆排序是一种高效的O(nlogn)排序算法,利用完全二叉树的堆结构特性实现。算法分为建堆和排序两个阶段:首先从最后一个非叶子节点开始调整数组为大顶堆(时间复杂度O(n)),然后反复将堆顶最大值与末尾元素交换并重新调整堆(时间复杂度O(nlogn))。堆排序具有原地排序(空间复杂度O(1))和最坏情况下仍保持O(nlogn)的优点,但不稳定且缓存不友好。相比快速排序和归并排序,堆排序在空间效率上更优,但实际运行速度通常较慢。

2026-05-28 12:44:26 453

原创 MySQL 存储过程与触发器完全指南

本文介绍了MySQL中存储过程和触发器的使用。存储过程是一组预编译SQL语句,通过CALL调用,支持参数传递和变量操作,适用于封装业务逻辑;触发器则在表数据变更时自动执行,常用于审计日志和数据校验。文章详细讲解了创建、调用存储过程的方法,以及各种参数类型、流程控制和游标使用,同时演示了触发器的创建和应用场景。通过C语言调用示例展示了存储过程的实际应用。这些技术能有效减少网络开销,提升数据一致性和安全性。

2026-05-27 20:15:11 524

原创 B树:数据库索引的高效基石

B树是一种多路平衡搜索树,专为减少磁盘I/O操作而设计。相比二叉树,B树每个节点可存储多个键和子节点,形成"矮胖"结构,显著降低树高。其核心操作包括查找、插入和删除,其中插入采用分裂策略,删除通过借键或合并保持平衡。B树的时间复杂度均为O(logn),特别适合处理大规模磁盘存储场景,是数据库索引和文件系统的底层基础。通过节点内部有序存储和多路分支特性,B树有效解决了传统二叉树在磁盘环境下I/O次数过多的问题。

2026-05-27 16:30:00 701

原创 MySQL 多表查询完全指南:JOIN 与子查询

本文系统讲解MySQL多表查询的核心技术,涵盖三大板块。JOIN连接查询部分,详解INNER JOIN(内连接取交集)、LEFT JOIN(左外连接保留左表全部)、CROSS JOIN(笛卡尔积)和自连接四种类型,配合学生-课程-成绩三表关联的完整示例。子查询部分,梳理WHERE子查询(IN/比较符/EXISTS)、FROM子查询(临时表)、SELECT子查询三种嵌套方式,对比各自适用场景。聚合统计部分,介绍COUNT、AVG、MAX、MIN等常用函数,以及GROUP BY分组统计和HAVI

2026-05-26 21:38:40 516

原创 Linux 文本处理三剑客(二):sed 完全指南

本文介绍了流编辑器sed的基础用法,重点讲解了替换、删除、插入等核心操作。主要内容包括:1)基础语法格式;2)最常用的替换操作(基本替换、全局替换、指定行替换);3)删除操作;4)插入、追加和替换整行;5)多命令组合;6)正则表达式应用;7)实战场景如批量修改配置、日志处理等。文章还对比了sed与awk的特点,指出sed擅长按行编辑而awk擅长按列分析,两者常配合使用。最后提供了sed命令速查表,帮助读者快速掌握这个强大的文本处理工具。

2026-05-26 13:07:29 956

原创 排序算法完全指南(六):希尔排序深度详解

摘要:希尔排序是插入排序的改进算法,通过分组跳跃式排序提升效率。它先以大间隔(gap)分组进行插入排序,逐步缩小间隔直至1,最终完成排序。时间复杂度平均为O(n^1.3~1.5),优于O(n²),空间复杂度O(1)。算法不稳定,性能取决于gap序列选择,Hibbard和Sedgewick序列较优。相比插入排序,希尔排序更适合中等规模数据排序,在简单实现和高效性能间取得平衡。核心思想是"大步跳跃+逐步精细"的分组插入策略。

2026-05-25 19:50:19 509

原创 Linux 文本处理三剑客(一):awk 完全指南

本文详细介绍了Linux文本处理工具awk的使用方法。awk擅长按列处理数据,基本语法为awk '条件{动作}' 文件名,可进行条件过滤、计算统计等操作。文章通过学生成绩文件示例,讲解了打印指定列、按行号/内容过滤、求和/平均值计算等常见用法,并介绍了BEGIN/END块、分隔符处理等进阶技巧。实战场景包括日志分析、磁盘使用率计算和SQL生成等。awk的核心思想是逐行读取、按列处理,内置变量$0、$1、NR、NF等可灵活获取行列信息,是处理结构化文本的强大工具。

2026-05-25 14:49:37 431

空空如也

空空如也

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

TA关注的人

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