- 博客(713)
- 收藏
- 关注
原创 【HMAC加密算法介绍】
摘要: HMAC(基于哈希的消息认证码)是一种广泛用于验证消息完整性和来源认证的技术,基于哈希函数(如SHA-256)和对称密钥实现。其核心构造通过两次哈希(内层和外层)确保安全性,依赖密钥的保密性和哈希函数的强度。HMAC不提供加密,仅用于认证,需注意密钥管理、防时序攻击(如使用hmac.compare_digest)和选择强哈希算法。常见应用包括API签名、Cookie防篡改等。示例展示了Python、Java和Node.js中的HMAC实现,强调密钥随机性、常数时间比较和Base64编码。正确使用HM
2026-03-11 20:36:42
373
原创 【专家系统介绍】
专家系统是一种模拟人类专家决策过程的AI系统,通过显式知识表示和可解释推理解决特定领域问题。其核心架构包括知识库、推理机、工作记忆等组件,采用规则(if-then)、事实、框架等方式表示知识,支持前向链和后向链两种推理策略。专家系统在医疗诊断、故障排查等需要强可解释性的领域仍具价值,示例展示了基于前向链规则的医疗诊断原型系统实现,能根据症状推导诊断并解释推理过程。
2026-03-11 20:26:23
533
原创 【3DES加密算法介绍】
3DES(三重DES)是对DES算法的扩展,通过三次DES操作(加密-解密-加密)提升安全性。支持2-key和3-key模式,密钥长度分别为168位和112位有效位。3DES兼容性好但效率较低,分组长度64位,需配合CBC等模式使用。安全性方面需避免ECB模式、使用随机IV并添加消息认证。代码示例展示了Python和Java中的3DES-CBC实现,包含密钥派生、加密解密及Base64编码流程。实际应用中建议使用更现代的AES算法替代3DES。
2026-03-08 11:17:19
413
原创 【AES加密算法介绍】
AES(高级加密标准)是一种对称加密算法,支持128位、192位和256位密钥长度。它采用分组加密方式,每次处理128位数据块,并支持多种操作模式如ECB、CBC等。AES具有高效、安全、灵活等优点,但也存在密钥管理复杂等问题。文章详细介绍了AES的工作原理、加解密流程,并提供了Java和Python的实现示例。AES广泛应用于无线通信、银行交易等领域,是当前主流的加密标准之一。
2026-03-08 11:05:52
517
原创 【Linux系统编程介绍】
本文介绍了Linux系统编程的核心概念与技术要点,主要包括:1)Linux系统编程的本质是与内核交互,涉及系统调用、进程线程管理、网络编程等;2)必备的开发环境和工具,如gcc、gdb等;3)基础系统调用的使用方法,包括文件I/O、进程控制、信号处理等;4)进程间通信(IPC)的各种方式及其实现;5)高性能I/O多路复用技术,对比了select、poll和epoll的特点。文章通过代码示例展示了关键系统调用的实际应用,为Linux系统编程提供了实用指南。
2026-03-07 12:38:42
304
原创 【Linux man命令介绍】
man是UNIX/Linux系统的在线手册工具,按章节组织文档内容(如命令、系统调用、库函数等)。基本用法包括man <命令>查看手册,man <章节> <名称>指定章节查看。常用操作有:man -k/apropos关键词搜索、whatis查看简介、man -w显示手册文件路径。支持查看本地文件(man -l)、更新索引(mandb),并可通过环境变量配置查找路径。替代工具包括info、tldr等。典型场景如man 3 printf查看库函数、man -k socket搜
2026-03-07 12:33:58
465
原创 【Shell变量替换与测试】
本文系统介绍了Shell脚本中的变量替换与条件测试功能。在变量替换部分,详细讲解了默认值处理、字符串长度计算、子串提取、模式删除、字符串替换等语法,并提供了实用的去空格技巧。条件测试部分对比了[ ]、[[ ]]和(( ))的差异,列举了文件、字符串和数值的常见测试方法,强调了引号使用的重要性。文章还包含进阶技巧,如引号处理、POSIX兼容性建议和性能优化提示。这些知识点对编写健壮高效的Shell脚本至关重要,特别适合需要处理复杂文本和条件判断的场景。
2026-02-19 17:48:07
790
原创 【Linux strace命令介绍】
本文介绍了Linux系统调用跟踪工具strace的使用方法。strace通过ptrace机制记录进程执行的系统调用及其参数、返回值和耗时,是调试、性能分析和安全审计的重要工具。文章详细说明了安装方法、常用选项(如跟踪子进程、过滤系统调用类型、输出到文件等),并提供了多个实用示例,包括跟踪命令执行、显示完整参数、附加到运行进程等。还介绍了高级功能如文件描述符映射显示和用户态栈回溯。该工具能有效帮助开发者理解程序与内核的交互过程,定位异常行为。
2026-02-19 17:43:52
660
原创 【Shell 函数库介绍】
本文介绍了Shell函数库的概念与使用。函数库是包含多个函数的.sh文件,用于被其他脚本加载复用,提高代码复用性和维护性。文章详细讲解了函数定义方式、参数获取、返回值机制,并给出了函数库的编写规范与示例。关键点包括:通过source加载函数库、防止重复加载、命名规范、严格模式设置等。最后对比了函数库与可执行脚本的区别,强调函数库中应避免使用exit命令以免影响主脚本执行。
2026-02-14 17:23:44
392
原创 【Shell 变量作用域详解】
本文介绍了Shell脚本中的变量作用域,重点对比了全局变量和局部变量的区别。全局变量默认在整个脚本中可访问,但容易被修改;局部变量使用local关键字定义,仅在函数内部有效,更安全规范。通过多个示例展示了两种变量的使用场景,并指出全局变量可能导致的问题。文章建议优先使用局部变量以避免命名冲突和数据污染,提升脚本可维护性。最后提供了函数计算和文件统计的实际案例,演示了局部变量的正确用法。
2026-02-14 17:17:55
708
原创 【数据清洗中拉格朗日插值法原理】
拉格朗日插值法是一种通过已知数据点构造多项式来估计未知点的方法。其数学原理是利用Lagrange基函数构建插值多项式P(x)。该方法优点包括计算简洁、适用性广,但存在计算复杂度高和数值稳定性差的缺点。Python实现中,通过定义lagrange_interpolation函数计算插值结果,并可视化展示插值曲线。该方法适用于数据稀疏且规律性强的场景,但当数据点较多时可能出现数值不稳定问题。
2026-01-24 11:01:13
692
原创 【SHA加密算法介绍】
SHA(Secure Hash Algorithm)是一类密码学散列函数,将任意长度数据映射为固定长度摘要。主要分为SHA-1(已不安全)、SHA-2(如SHA-256)和SHA-3三类。SHA-256算法包括填充、分块、初始化哈希值、64次压缩循环等步骤。使用时需注意:SHA是哈希而非加密,密码存储应加盐并使用PBKDF2等慢哈希算法,避免直接使用SHA-1。文中提供了Python实现示例,包括基本哈希、文件校验、HMAC和密码存储应用。
2026-01-24 10:51:14
835
原创 【RC4加密算法介绍】
RC4是一种经典的流加密算法,由Ron Rivest于1987年设计,曾广泛应用于SSL/TLS等协议中。其核心是通过密钥调度算法(KSA)初始化256字节状态数组,再通过伪随机生成算法(PRGA)逐字节生成密钥流,与明文进行异或运算实现加密。RC4具有实现简单、加密速度快等优点,但由于密钥流前字节存在偏差,易受统计分析攻击,已被证明不安全,不再推荐使用。现代加密场景应选择更安全的算法替代RC4。
2026-01-17 17:37:26
1015
原创 【DES加密算法介绍】
DES是一种对称加密算法,由IBM在1970年代提出,1977年被采纳为标准。它采用64位分组加密和56位有效密钥长度,通过16轮Feistel结构实现加密。核心包括初始置换、F函数(含扩展置换、S盒替换和P置换)和子密钥生成。由于密钥较短,DES安全性不足,已被3DES和AES取代。Java实现需使用Cipher类,密钥需8字节。1998年DES被暴力破解证实其不再安全,推荐使用更安全的替代算法。
2026-01-17 17:31:22
841
原创 【Shell脚本函数介绍】
Shell函数是一段可重复调用的脚本代码块,支持参数传递和返回值。定义方式有两种:普通写法和带function关键字的写法。调用时直接写函数名即可。函数通过特殊变量获取参数,如$1表示第一个参数,$#表示参数个数。返回值有两种方式:return返回状态码(0-255),echo返回字符串等数据。默认函数内变量是全局的,使用local可定义局部变量。
2025-12-27 15:14:15
303
原创 【操作系统之请求分段存储管理】
摘要:本文介绍了请求分段存储管理技术。分段将程序逻辑地址空间划分为代码段、数据段等逻辑单元,每个段包含段号和偏移量。请求分段的核心是按需加载,仅在段首次被引用时装入内存。地址转换通过段表完成,涉及段缺失处理等流程。相比请求分页,分段具有语义匹配性好、便于共享等优点,但存在外部碎片问题。现代系统常采用段页式混合策略,兼顾分段语义和分页效率。实现要点包括段表管理、装入替换策略、共享保护机制等,需硬件和操作系统协同支持。
2025-12-27 14:33:08
908
原创 【字典树 C++ 实现】
字典树(Trie)是一种高效的多叉树结构,主要用于处理字符串的前缀查询和存储。其核心特点包括:根节点代表空字符串,每个边对应一个字符,节点标记单词结尾(isEnd)。主要操作包括插入(O(L))、查找(O(L))、前缀判断(O(P))和删除(O(L)),其中删除需要递归处理无用节点。Trie适用于自动补全、敏感词过滤等场景,优点是查询高效,缺点是内存消耗较大。C++实现中通过26个子节点指针数组处理小写字母,并提供自动补全功能。测试案例验证了search、startsWith等基本功能。
2025-12-13 18:15:07
959
原创 【NGINX 介绍与安装】
NGINX是一款高性能的开源HTTP服务器和反向代理工具,采用事件驱动架构处理高并发请求,具有低内存消耗、模块化设计等特点。它支持负载均衡、缓存加速、Gzip压缩等功能,广泛应用于各大网站。安装方式包括包管理器安装和源码编译。核心配置文件为nginx.conf,包含events、http、stream等指令块。NGINX可作为反向代理转发请求到后端服务器,并支持轮询、最少连接、IP哈希等多种负载均衡策略。通过proxy_cache_path和expires等指令可实现高效缓存,提升响应速度。
2025-12-13 18:10:38
1849
原创 【MongoDB 数据库介绍】
本文介绍了MongoDB的基础概念、安装配置和基本操作。MongoDB作为NoSQL数据库,采用文档模型存储数据,具有高性能和高扩展性。文章详细说明了在Windows和Linux上的安装步骤,以及数据库、集合、文档等核心概念。同时提供了CRUD操作示例、索引创建和高级功能如聚合查询、事务支持。最后还介绍了数据备份与恢复方法,为MongoDB的使用提供了全面指导。
2025-12-07 16:32:29
1041
原创 【Redis 数据库介绍】
Redis是一个开源的内存型键值数据库,支持字符串、哈希、列表、集合、有序集合等多种数据结构。它采用内存存储+持久化机制,具有极高的读写性能和低延迟。Redis适用于缓存、会话存储、消息队列、排行榜等场景,特别适合需要高并发和低延迟的应用。与传统关系型数据库相比,Redis缺乏复杂查询能力,但性能更优。Java可通过Jedis等客户端操作Redis,实现高效的数据存取。在实际应用中,Redis常与传统数据库配合使用,发挥各自优势。
2025-12-07 16:26:57
831
原创 【requests.session介绍】
requests.Session 是 Python requests 库提供的会话对象,用于在多个 HTTP 请求间保持会话状态。与直接使用 requests.get/post 不同,Session 可以自动管理 cookies、headers 等参数,实现跨请求的状态保持。通过创建 Session 实例,可以设置默认请求头、cookies,并复用这些设置发送多个请求。Session 特别适用于需要登录验证的场景,能自动携带服务器返回的认证信息。使用时需注意线程安全问题和资源释放,建议及时调用 close(
2025-12-06 19:25:13
428
原创 【数据结构之树状数组】
本文介绍了树状数组(Fenwick Tree)这一高效数据结构,用于在O(log n)时间内完成前缀和查询与单点修改。文章阐述了其核心概念:通过lowbit运算将数组划分为区间块,每个bit[i]存储特定区间的元素和。详细说明了两个基本操作(前缀和查询和单点更新)的实现原理,并给出了区间和的计算方法。最后提供了C++实现代码示例,展示了树状数组在动态维护数组前缀和方面的应用,其构建复杂度为O(n log n),单次操作复杂度均为O(log n),空间复杂度为O(n)。
2025-12-06 19:17:33
417
原创 【Shell变量替换】
本文介绍了Bash脚本中的变量替换和条件测试两大核心功能。 在变量替换部分,详细讲解了${}语法的各种用法:包括默认值处理(:-、:=、:+、:?)、字符串长度(#)、子串截取(:offset)、模式删除(#、%、##、%%)以及字符串替换(//、/#、/%)等操作,并提供了实用示例。 在条件测试部分,对比了test、[ ]和[[ ]]的用法差异,列举了文件测试(-e、-f、-d)、字符串测试(-z、-n、=)和数值比较(-eq、-lt等)的常用操作符,强调了变量引用的引号使用规范。 文章还提供了进阶技巧,
2025-10-25 10:44:03
802
原创 【平衡树与AVL简介】
AVL树:动态有序集合的高效平衡方案 摘要:AVL树是一种自平衡二叉搜索树,通过维护严格的高度平衡(任意节点左右子树高度差≤1)来保证O(log n)的操作效率。本文介绍了平衡树的概念、AVL树的特性及其四种旋转操作(LL/RR/LR/RL),详细解析了插入和删除的实现逻辑,并提供了完整的C++代码实现。AVL树通过动态调整树结构,避免了普通BST退化为链表的风险,适用于需要高效查找、插入和删除的场景。其核心在于平衡因子监控和旋转修复机制,为系统设计提供了可靠的有序数据结构解决方案。(150字)
2025-10-25 10:29:49
1199
原创 【编译原理之上下文无关文法】
本文介绍了上下文无关文法(CFG)及其在编译原理中的应用。CFG由终结符、非终结符、产生式规则和开始符号组成,用于定义编程语言的语法结构。编译器通过CFG进行词法分析、语法分析、语义分析等阶段,构建抽象语法树(AST)并生成目标代码。CFG在语法分析中起关键作用,能有效检测语法错误并提高编译效率。相比上下文有关文法,CFG更简单实用;相比正则表达式,CFG具有更强的表达能力。CFG为编译器设计提供了基础框架,使语言结构定义和代码解析更加规范高效。
2025-10-19 13:49:18
945
原创 【Java 集合框架介绍】
Java集合框架包含两大根接口:Collection(List/Set/Queue)和Map(键值对)。主要实现类包括ArrayList、HashSet、HashMap等,辅以Collections、Arrays等工具类。集合选择需考虑操作复杂度:ArrayList随机访问快(O(1)),LinkedList适合频繁插入(O(1)),HashSet/HashMap查找高效(O(1))。关键特性包括:List有序可重复,Set去重,Map键唯一。注意equals()与hashCode()的规范实现,以及Com
2025-10-19 13:38:39
987
原创 【优先队列介绍】
优先队列是一种根据元素优先级决定出队顺序的数据结构,不同于普通队列的FIFO规则。它常用于任务调度、图算法等场景。优先队列可通过数组/链表或堆实现,其中堆(如二叉堆)效率更高,插入和删除操作时间复杂度为O(log n)。C++标准库提供了priority_queue容器适配器,默认实现大根堆,也可通过std::greater改为小根堆,分别支持优先级从高到低或从低到高的出队顺序。示例代码展示了如何使用C++实现大根堆和小根堆的优先队列。
2025-10-16 20:57:26
504
原创 【B树与B+树详解】
B树与B+树是专为减少磁盘I/O设计的平衡多路搜索树,广泛应用于数据库索引和文件系统。B树具有多节点结构(每个节点最多2t-1个关键字),保持高度平衡,通过节点分裂和合并维护特性。搜索复杂度为O(log N),插入需处理满节点分裂,删除涉及关键字调整和节点合并。C++实现包括节点类定义、查找、插入(含非满插入和子节点分裂)及遍历功能。B树通过优化磁盘访问显著提升大数据量下的查询效率。
2025-10-16 20:52:03
1453
原创 【单调栈详解】
单调栈算法摘要 单调栈是一种特殊的栈结构,通过维护栈内元素的单调性(递增或递减)来高效解决特定问题。其核心思想是利用栈的特性,在O(n)时间内解决诸如"寻找元素在某个方向上的第一个更大/更小元素"这类问题。典型应用包括:下一个更大元素、柱状图最大矩形、接雨水问题、每日温度等。单调栈通过确保每个元素最多被处理一次来实现线性时间复杂度,通常使用索引存储和哨兵边界等技巧优化实现。该算法在解决数组元素间关系问题时表现出色,是优化暴力解法的有效工具。
2025-10-02 10:42:35
858
原创 【数据清洗中的牛顿插值法原理】
牛顿插值法是一种基于差商的多项式插值方法,用于在给定数据点上构造通过所有点的多项式函数。它通过递归计算差商并构建插值多项式,相比拉格朗日插值法具有更高的计算效率和数值稳定性。在数据清洗中,该方法可用于填补缺失值、平滑数据及估计未知点。文章介绍了差商计算原理、多项式构造步骤,并提供了Python实现示例,展示了如何通过牛顿插值生成平滑曲线拟合离散数据点。
2025-10-01 11:13:43
1136
原创 【MD5 算法详解】
MD5是一种广泛使用的128位哈希算法,由Ronald Rivest于1991年设计。它将任意长度输入转换为固定长度摘要,具有计算速度快、输出固定等优点,曾用于文件校验、数据完整性验证等场景。然而MD5存在严重安全缺陷:容易遭受碰撞攻击,可构造不同输入产生相同摘要,且存在预映像攻击风险。因此已不适用于密码存储、数字签名等高安全需求场景。在非关键应用中仍可使用MD5进行快速校验,但建议安全敏感场景改用SHA-2/SHA-3等更安全的算法。现代系统若必须使用MD5,应采用加盐、多次哈希等增强措施。
2025-10-01 10:48:53
1995
原创 【高级语言范型介绍】
本文概述了编程语言范型及其分类。高级语言范型是人们对编程风格进行分类的思路,许多现代语言支持多范型。文章重点介绍了三种主流范型:(1) 命令式/过程式,强调显式执行步骤,如C语言;(2) 面向对象,以对象封装数据和行为,如Java;(3) 函数式,注重无副作用和不变性,如Haskell。此外还简要提及声明式、逻辑编程等范型。每种范型各有优缺点,适用于不同场景,开发者需根据需求选择合适的编程范式。
2025-09-28 19:20:31
1077
原创 【Python进程详解】
本文介绍了Python中的多进程编程,重点讲解了multiprocessing模块的使用。主要内容包括:进程与线程的区别、Process类创建进程、进程间通信(队列、管道、共享内存)、进程池管理、进程同步机制(锁)以及Manager共享变量。此外,还对比了multiprocessing和concurrent.futures模块的异同。多进程适合CPU密集型任务,能充分利用多核CPU,提高程序运行效率。文章通过代码示例详细演示了各种进程操作的实际应用。
2025-09-28 18:34:52
883
原创 【C++ 启发式搜索算法】
启发式搜索是一种利用启发函数引导搜索方向的智能算法,能显著提高路径规划效率。文章以A算法为例,介绍了其核心思想:通过综合实际代价g(n)和启发式估计h(n)来指导搜索过程。详细展示了C++实现步骤,包括网格地图定义、节点结构设计、曼哈顿距离启发函数以及算法主逻辑。测试案例演示了从(0,0)到(4,4)的最优路径搜索过程。A算法在游戏寻路、机器人导航等领域具有广泛应用,其性能关键取决于启发函数的设计合理性。
2025-09-06 20:14:11
1295
原创 【C++ 双指针技巧】
双指针是一种高效的算法技巧,通过两个指针在数据结构中的协同遍历来优化性能。主要包括对撞指针(从两端向中间移动)和快慢指针(同向不同速移动)两种类型。该技巧适用于多种场景:有序数组去重(快慢指针)、两数之和判断(对撞指针)、字符串反转(对撞指针)、链表环检测(快慢指针)以及容器盛水问题(对撞指针)。相比暴力法的O(n²)复杂度,双指针通常能将时间复杂度降至O(n)或O(nlogn),特别适合处理有序数据结构和需要跳跃遍历的问题,具有显著的时间和空间优势。
2025-09-06 20:11:06
547
原创 【数据结构之哈夫曼树与编码实现】
哈夫曼编码是一种基于字符频率的最优前缀编码方法,通过构建哈夫曼树实现数据压缩。其核心步骤包括:统计字符频率,构建最小堆,合并节点生成二叉树,遍历树生成可变长度编码表。高频字符分配短编码,低频字符分配长编码,确保总编码长度最小且无歧义解码。C++实现示例展示了频率统计、优先队列构建、递归生成编码表及解码过程。该方法广泛应用于文件压缩(ZIP)和图像压缩(JPEG)等领域,兼具高效性与实用性。
2025-07-07 21:05:09
1551
原创 【Servlet资源转发介绍】
Servlet资源转发是Java Web开发中服务器端请求处理的重要机制,通过RequestDispatcher实现请求内部传递,保持URL不变的同时共享请求数据。与重定向相比,转发性能更优但不可跨站,适用于同一应用内的MVC模式。转发方式分为forward(完全移交处理)和include(嵌入资源片段),需注意路径规则和响应提交限制。典型应用包括登录校验后的页面跳转和JSP页面组件复用,转发路径通常置于WEB-INF目录下确保安全访问。开发时需根据场景选择转发或重定向,前者适合服务器内部流程控制,后者用于
2025-07-07 20:57:15
920
原创 【HTTP协议概述与示例】
HTTP是互联网信息交互的核心协议,作为应用层协议,它具有无状态、灵活和可扩展的特点。HTTP报文分为请求和响应,包含首行、首部和消息体。通信流程包括建立连接、发送请求、处理响应等步骤。文章通过Python示例演示了GET/POST请求的实现(使用requests库和socket手动构造),以及如何用Python搭建简易HTTP服务器。最后简要介绍了HTTP/2的二进制分帧、多路复用和HTTP/3基于QUIC的改进。这些内容覆盖了HTTP的基础概念和实际应用。
2025-07-01 18:14:11
992
原创 【希尔排序介绍】
摘要: Shell排序是插入排序的高效改进版本,通过分组插入和逐步缩小间隔的策略提升性能。其核心原理是先将数据按间隔分组排序,再逐渐缩小间隔直至为1完成最终排序。增量序列的选择(如Shell原始序列、Knuth序列等)显著影响效率。C++实现显示,Shell排序在中等规模数据上表现优异,适合实际应用。测试示例验证了其高效性,时间复杂度介于O(n)和O(n²)之间,具体取决于增量序列。
2025-07-01 18:10:48
1179
原创 【数据结构中的位运算】
位运算通过直接操作二进制位实现高效计算与存储优化。文章介绍了位运算的基本操作符(&、|、^等)及其特性,并给出典型应用示例:奇偶判断、位翻转、变量交换、获取最低位1、判断2的幂等。在数据结构方面,重点展示了位图(bitset)和Fenwick树的核心应用,其中Fenwick树利用i&-i技巧实现高效区间查询。位运算能以极低时间常数和空间消耗显著提升算法性能,是高性能程序设计的重要优化手段。
2025-06-30 21:39:05
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅