- 博客(679)
- 收藏
- 关注
原创 【数据结构之哈夫曼树与编码实现】
哈夫曼编码是一种基于字符频率的最优前缀编码方法,通过构建哈夫曼树实现数据压缩。其核心步骤包括:统计字符频率,构建最小堆,合并节点生成二叉树,遍历树生成可变长度编码表。高频字符分配短编码,低频字符分配长编码,确保总编码长度最小且无歧义解码。C++实现示例展示了频率统计、优先队列构建、递归生成编码表及解码过程。该方法广泛应用于文件压缩(ZIP)和图像压缩(JPEG)等领域,兼具高效性与实用性。
2025-07-07 21:05:09
1179
原创 【Servlet资源转发介绍】
Servlet资源转发是Java Web开发中服务器端请求处理的重要机制,通过RequestDispatcher实现请求内部传递,保持URL不变的同时共享请求数据。与重定向相比,转发性能更优但不可跨站,适用于同一应用内的MVC模式。转发方式分为forward(完全移交处理)和include(嵌入资源片段),需注意路径规则和响应提交限制。典型应用包括登录校验后的页面跳转和JSP页面组件复用,转发路径通常置于WEB-INF目录下确保安全访问。开发时需根据场景选择转发或重定向,前者适合服务器内部流程控制,后者用于
2025-07-07 20:57:15
708
原创 【HTTP协议概述与示例】
HTTP是互联网信息交互的核心协议,作为应用层协议,它具有无状态、灵活和可扩展的特点。HTTP报文分为请求和响应,包含首行、首部和消息体。通信流程包括建立连接、发送请求、处理响应等步骤。文章通过Python示例演示了GET/POST请求的实现(使用requests库和socket手动构造),以及如何用Python搭建简易HTTP服务器。最后简要介绍了HTTP/2的二进制分帧、多路复用和HTTP/3基于QUIC的改进。这些内容覆盖了HTTP的基础概念和实际应用。
2025-07-01 18:14:11
828
原创 【希尔排序介绍】
摘要: Shell排序是插入排序的高效改进版本,通过分组插入和逐步缩小间隔的策略提升性能。其核心原理是先将数据按间隔分组排序,再逐渐缩小间隔直至为1完成最终排序。增量序列的选择(如Shell原始序列、Knuth序列等)显著影响效率。C++实现显示,Shell排序在中等规模数据上表现优异,适合实际应用。测试示例验证了其高效性,时间复杂度介于O(n)和O(n²)之间,具体取决于增量序列。
2025-07-01 18:10:48
1030
原创 【数据结构中的位运算】
位运算通过直接操作二进制位实现高效计算与存储优化。文章介绍了位运算的基本操作符(&、|、^等)及其特性,并给出典型应用示例:奇偶判断、位翻转、变量交换、获取最低位1、判断2的幂等。在数据结构方面,重点展示了位图(bitset)和Fenwick树的核心应用,其中Fenwick树利用i&-i技巧实现高效区间查询。位运算能以极低时间常数和空间消耗显著提升算法性能,是高性能程序设计的重要优化手段。
2025-06-30 21:39:05
342
原创 【桶排序介绍】
桶排序是一种利用空间换时间的排序算法,尤其适合处理数据分布均匀、范围已知的场景。其核心思想是将元素分配到多个桶中,分别排序后合并。在数据均匀分布时,平均时间复杂度可达线性O(n)。实现步骤包括:确定范围与桶数量、初始化桶容器、映射元素到桶、桶内排序以及合并结果。桶排序适用于浮点数或整数排序,以及大数据分布式处理等场景。C++示例展示了如何对整数数组进行桶排序,通过扫描确定范围,使用std::sort进行桶内排序。该算法在理想情况下性能优异,但需注意桶数量选择和边界处理。
2025-06-30 21:34:45
897
原创 【基数排序介绍】
本文详细介绍了非比较类排序算法——基数排序(Radix Sort),适用于大规模整数排序。其核心思想是通过逐位排序(从低位到高位),结合稳定的计数排序完成排序。文章提供了C++实现代码,分析其时间复杂度为O(d×(n+k)),空间复杂度O(n+k),强调其稳定性和适用场景(如非负整数、大数据量)。对比其他排序算法后,指出基数排序在特定场景的优势,并扩展了处理负数的方法。总结认为基数排序在整数排序和大数据场景中性能突出,是传统比较排序的有效补充。
2025-06-27 10:27:04
661
原创 【插入排序介绍】
插入排序是一种简单直观的原地、稳定排序算法,它通过将未排序元素逐一插入到已排序序列中的合适位置来构建有序序列;其最坏和平均时间复杂度均为 O(n²),最好情况(几乎有序)为 O(n),空间复杂度为 O(1)。在 C++ 中,核心实现只需两层循环:外层遍历待插入元素并保存为 `key`,内层从已排序部分向前扫描,将大于 `key` 的元素后移,最后将 `key` 插入空出的位置。
2025-06-27 10:23:17
441
原创 【联盟链与XuperChain介绍】
摘要: 联盟链是区块链技术在企业级应用中的关键方案,具有可控参与权限、高性能、灵活治理、数据隐私与安全等优势,适用于供应链金融、贸易金融、跨机构数据共享等场景。XuperChain作为开源联盟链平台,提供高性能、可插拔架构、安全权限管理和跨链支持等核心特性。通过XuperChain可快速搭建联盟链环境,并支持多语言智能合约开发,满足企业级区块链应用需求。
2025-06-26 20:56:23
768
原创 【字符串匹配算法介绍】
本文介绍了三种经典的字符串匹配算法及其C++实现。首先讲解朴素匹配算法,通过逐个字符比较实现简单但效率较低。重点分析了KMP算法,利用next数组避免重复匹配,达到线性时间复杂度,并给出详细的代码实现。最后简要介绍BM算法的启发式跳跃策略。这些算法在不同场景下各有优势,为字符串匹配问题提供了高效解决方案。
2025-06-26 09:44:49
929
原创 【JS与TS区别与联系】
JavaScript(JS)和TypeScript(TS)是密切相关的编程语言,TS作为JS的超集,通过静态类型检查增强了代码质量和开发体验。JS作为动态脚本语言,灵活但缺乏类型安全;TS则提供静态类型系统、接口、泛型等特性,适用于中大型项目。两者生态兼容,所有JS代码均可作为TS使用。主要区别在于类型检查时机(编译时vs运行时)、开发体验(智能提示)和项目适用性。迁移时可逐步引入TS配置,混合开发新旧文件。工具链支持完善,推荐在复杂项目中使用TS以获得更好的可维护性。
2025-06-26 09:40:48
1426
原创 【操作系统之设备驱动程序】
设备驱动程序是操作系统与硬件设备之间的桥梁,负责将系统指令翻译为硬件可识别的信号。驱动可分为字符设备(如键盘)、块设备(如硬盘)、网络设备(如网卡)和虚拟设备(如虚拟光驱)。其工作原理包括寄存器映射、中断处理和DMA技术。开发流程涵盖设备识别、初始化、系统调用接口实现、中断处理和资源释放。文中提供了一个Linux字符设备驱动示例,展示了注册设备、实现open/read操作等关键步骤。驱动程序使应用程序无需直接操作硬件,提高了系统安全性和兼容性。
2025-06-25 16:50:59
697
原创 【操作系统缓冲区管理】
文章摘要:本文系统介绍了计算机系统中的缓冲区管理技术。首先阐述了缓冲区在用户态I/O、内核态缓存、设备驱动和网络协议中的多种应用场景及其核心作用。然后重点剖析了内核缓冲区缓存的运作机制,包括读写策略、替换算法和缓存优化技术。接着通过C语言示例详细解析了设备驱动中环形缓冲区的实现方法及并发处理要点。最后简要说明了用户态I/O缓冲的应用实践。全文从底层原理到实践实现,多维度展现了缓冲区如何有效提升I/O性能、优化系统资源管理。(148字)
2025-06-25 10:20:52
732
原创 【sklearn库介绍】
scikit-learn(sklearn)是Python中广泛使用的开源机器学习库,提供高效的数据预处理、模型训练和评估工具。它基于NumPy、SciPy和matplotlib,以一致易用的API著称,涵盖分类、回归、聚类、降维等算法。最新稳定版本为1.7.0(2025年6月)。核心功能包括数据标准化、交叉验证、网格搜索调参,并支持自定义转换器和Pipeline。适用于中小规模数据集的快速建模,与pandas等库无缝集成,是机器学习和数据科学的实用工具。
2025-06-25 10:15:18
1048
原创 【数据结构中哈希函数与哈希表】
哈希表是一种高效的键值存储数据结构,通过哈希函数将数据映射到固定空间,实现O(1)时间的插入、删除和查找操作。文章介绍了哈希函数的工作原理和常见实现方式,详细分析了哈希冲突的两种解决方案:拉链法和开放地址法(包括线性探测)。通过性能对比表格展示了哈希表的优劣,并演示了C++ STL中unordered_map的使用方法和词频统计的实际应用。哈希表在数据库索引、缓存系统等场景中具有广泛用途。
2025-06-15 10:33:02
524
原创 【数据结构中的堆】
本文介绍了堆(Heap)数据结构的基本概念和应用。堆是一种完全二叉树,分为大根堆和小根堆,常用于实现优先队列。文章详细讲解了堆的存储方式、插入删除操作(通过Heapify-Up/Down调整),以及堆排序算法。堆在优先队列、Top K问题(时间复杂度O(N log K))和Dijkstra最短路径算法中有重要应用。通过C++和Python代码示例展示了堆的实现,并总结了堆在数据流处理、任务调度等场景中的高效性和实用性。堆因其O(log N)的操作复杂度成为数据结构中的重要组成部分。
2025-06-15 10:22:37
644
原创 【SpringMVC 入门介绍】
SpringMVC是基于Spring框架的Web开发模块,采用MVC架构模式,提供高效的结构化Web开发方案。核心组件包括DispatcherServlet(前端控制器)、HandlerMapping(处理器映射)、Controller(业务逻辑处理)和ViewResolver(视图解析器)等。其工作流程为:用户请求通过DispatcherServlet分发,经HandlerMapping匹配控制器,执行业务处理后返回视图。配置简单,通过XML或注解方式即可快速搭建项目,支持JSP、Thymeleaf等多种
2025-06-14 15:02:42
906
原创 【Python 爬虫 防盗链】
Python爬虫常因网站防盗链机制受阻,该技术通过检查HTTP请求头中的Referer字段验证请求来源。本文介绍了防盗链原理及两种绕过方法:使用requests和urllib库设置合法的Referer值,模拟浏览器访问行为。此外还建议配合设置User-Agent等字段提升成功率,为开发者提供了实用的反爬解决方案。
2025-06-14 14:58:20
1094
原创 【序列化与反序列化详解】
序列化是将对象转换为可存储或传输的格式,反序列化是将数据恢复成对象。常见格式包括 JSON(轻量)、XML(可扩展)、二进制(高效)、Protocol Buffers(高性能)。不同编程语言提供了不同的序列化方案,如 Python、Java、C++。安全性是序列化的关键,避免反序列化漏洞、数据篡改和信息泄露。
2025-05-03 15:34:12
1225
原创 【Java Lambda表达式详解】
Lambda表达式是Java 8引入的新特性之一,它极大地简化了代码,特别是在处理集合和使用函数式接口时。通过Lambda表达式,我们可以将函数作为参数传递,提高了代码的简洁性和可读性。本文将介绍Lambda表达式的语法、应用场景以及常见用法。Lambda表达式是一种匿名函数,用于简化对接口的实现。在没有Lambda之前,我们通常通过匿名内部类的方式来实现接口,而使用Lambda可以用更简洁的方式表示。函数式接口是只包含一个抽象方法的接口,可以使用注解进行标记。Lambda表达式可以简化对函数式接口的实现。
2025-05-03 15:28:35
2187
1
原创 【Spring Boot 过滤器】
在Web开发中,我们常常需要对请求做一些统一的处理,例如:请求日志记录、权限验证、跨域处理等。Spring Boot 中除了可以使用拦截器(Interceptor)和AOP,还可以使用过滤器(Filter)。Filter是 Servlet 规范中的一个组件,用于在请求到达 Servlet 之前或响应返回客户端之前进行预处理或后处理。请求日志记录用户认证与权限检查参数过滤与包装编码设置防止 XSS 攻击等它的核心接口是。
2025-04-12 10:36:17
1548
原创 【操作系统调度解析】
在多道程序设计环境下,多个进程可以同时驻留在内存中,为了更有效地利用CPU资源,操作系统需要决定哪个进程先使用CPU,这就引出了进程调度的概念。调度是指操作系统根据某种策略,从就绪队列中选择一个进程,将CPU的使用权交给它运行的过程。最大化CPU利用率最小化响应时间提高系统吞吐量公平地分配CPU资源。
2025-04-12 10:32:14
1041
原创 【MySQL 查询语句详解】
查询所有列,但在实际项目中不建议使用,效率较低,且容易导致冗余数据传输。用于限制查询结果的行数,常用于分页。✅ 别名在查询结果中显示为指定名称。查询左表所有记录,右表没有匹配时以。查询右表所有记录,左表没有匹配时以。✅ 只查询所需的列,提高查询效率。子查询即嵌套查询,常用于复杂查询。在 MySQL 中,查询语句以。子句用于指定查询条件。
2025-04-11 10:43:22
2530
原创 【MySQL修改操作详解】
✅ 如果年龄小于 30 岁则加 2 岁,否则减 2 岁。条件至关重要,若遗漏该条件,可能会修改整个表的数据。将用户表按年龄升序排序,修改最年轻用户的城市为。在实际开发中,修改操作有时涉及多表操作,使用。✅ 避免频繁的单条更新,使用批量修改提高性能。在 MySQL 中,修改数据的主要语句为。常用于限制修改范围,防止误修改所有数据。✅ 分批处理,避免锁表和性能问题。✅ 根据年龄范围修改城市信息。条件,很容易修改所有数据。
2025-04-11 10:40:24
1532
原创 【MySQL 删除数据详解】
在 MySQL 中,可以使用DELETETRUNCATE和DROP语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。DELETETRUNCATE和DROP的用法和区别DELETE语句的高级用法删除操作的注意事项和最佳实践✅DELETE:按条件删除数据,记录日志,可回滚。✅TRUNCATE:清空表数据,不记录日志,不可回滚。✅DROP:删除表及数据,无法恢复。使用LIMIT限制删除条数,防止误删大量数据。多表关联删除,提高操作灵活性。
2025-04-10 16:23:47
3232
原创 【MySQL数据添加操作详解】
当插入数据时,如果表中存在主键或唯一索引冲突,可以使用。在进行数据添加之前,先创建一张测试表。在 MySQL 中,可以使用。查询结果插入到另一张表中。,用于演示各种插入操作。MySQL 支持通过。
2025-04-10 16:19:32
1151
原创 【Python生成器详解】
在 Python 中,生成器(Generator)是一种特殊的迭代器,通过yield关键字生成值,具备惰性求值特性。这意味着生成器在每次迭代时计算下一个值,而不是一次性生成所有值。与普通列表相比,生成器更节省内存,适合处理大数据流或无限序列。yield生成器通过yield实现惰性求值,按需生成数据,节省内存。与return不同,yield会在暂停位置恢复执行。使用send()方法可与生成器进行双向通信。生成器适合处理大数据、流数据或无限序列,显著提高程序性能。
2025-04-05 09:38:45
831
原创 【Python异步编程详解】
在Python中,异步编程是一种并发编程模型,可以在单线程中高效地执行多个任务,特别适用于 I/O 密集型任务,例如网络请求、文件读取和数据库操作。本文将介绍Python异步编程的核心概念、常用模块(asyncio和)、协程、任务和事件循环,并通过示例进行讲解。协程、事件循环、任务和。使用进行多线程或多进程并发编程。异步编程适合 I/O 密集型任务,如网络请求、文件读取和数据库访问。✅ 异步编程能够显著提升程序性能,但需要注意在计算密集型任务中不适合使用asyncio,而应考虑。
2025-04-05 09:20:09
1504
原创 【Java Stream详解】
Java Stream 是 Java 8 引入的一项强大特性,主要用于处理集合数据。它提供了类似于函数式编程的方式,使代码更加简洁、易读,同时提高了效率。本文将详细介绍 Stream 的基本概念、常用操作、使用场景。Stream过滤、映射、排序、统计、收集等。Stream 提供了链式操作方式,使代码简洁且易读。Stream 提供了简洁、易读的集合操作方式,常用于数据过滤、映射、聚合等操作。中间操作返回新的流对象,不执行终端操作不会触发计算。终端操作触发流的计算并返回结果。并行流。
2025-04-04 18:18:39
1546
原创 【Java网络编程详解】
Java网络编程是开发分布式应用程序的重要技能,它通过套接字(Socket)进行数据传输,支持TCP和UDP协议。本文将介绍Java网络编程的基础知识,包括Socket、ServerSocket、TCP通信、UDP通信、常用类和示例代码。网络编程是指在计算机之间通过网络进行数据传输和通信的编程方式。Java提供了强大的java.net包,封装了底层的网络协议,简化了网络编程。:面向连接,可靠传输,保证数据按序到达,适合文件传输、Web通信等。:面向无连接,不可靠但速度快,适合视频通话、广播消息等。
2025-04-04 18:14:25
794
原创 【计算机网络应用层】
应用层是计算机网络体系结构的最高层,负责为用户提供网络服务。常见的应用层协议包括 HTTP、FTP、DNS、SMTP、POP3、IMAP 等,它们支撑着互联网的各种服务,如网页浏览、文件传输、电子邮件等。本文将详细介绍计算机网络应用层的功能、主要协议及其工作原理。应用层协议是计算机网络的重要组成部分,常见的 HTTP、DNS、FTP、SMTP 等协议支撑着互联网服务。应用层的协议模型主要包括C/S(客户端-服务器)和P2P。在现代互联网环境下,安全性是应用层协议设计的重要考虑因素。知识点总结✅。
2025-04-03 09:06:11
1205
原创 【计算机网络中的网桥设备】
在计算机网络中,网桥(Bridge)是一种用于连接两个或多个网络段的设备,能够在数据链路层(OSI 模型的第二层)工作。透明网桥是最常见的一种网桥,它在网络中是透明的,不会影响网络的逻辑拓扑结构。此类网桥主要用于 Token Ring 网络中,数据帧的源设备负责提供完整的路径信息,而网桥根据路径信息进行转发。网桥在接收到数据帧时,会检查帧的源 MAC 地址,并将其存入 MAC 地址表中,同时记录该设备所在的端口。在企业网络或校园网中,网桥可以用于连接多个网络段,扩展网络的覆盖范围,同时减少网络拥塞。
2025-04-03 09:00:16
936
原创 【操作系统分页存储管理方式详解】
在现代操作系统中,分页存储管理是一种重要的内存管理技术,它能够高效地管理进程的内存使用,避免外部碎片,提高内存利用率。本文将详细介绍分页存储管理的基本概念、工作原理、页表管理以及其优缺点。分页存储管理(Paging)是一种将进程的逻辑地址空间划分成固定大小的页(Page),并将物理内存划分成相同大小的页框(Frame),进程的页可以被映射到物理内存的任意页框中。分页存储管理是一种高效的内存管理方式,它通过将逻辑地址空间划分为固定大小的页,并利用页表进行地址映射,从而提高了内存的利用率,并支持进程的动态扩展。
2025-04-02 09:57:50
1248
原创 【闭包详解与应用】
闭包是编程语言中一个重要的概念,尤其在 JavaScript、Python 和 Go 等语言中广泛应用。它能够在函数内部保存局部变量的状态,使得变量在函数调用后依然能够被访问。闭包(Closure)是指函数与其相关的引用环境组合而成的实体。在大多数语言中,闭包允许你在外部函数执行完毕后,依然能够访问该函数的局部变量。函数嵌套:闭包必须包含在另一个函数中。外层变量的引用:闭包能够访问外层函数作用域中的变量。数据持久化:即使外层函数已经执行完毕,闭包仍然能够引用并保持外层变量的状态。闭包的核心特性。
2025-04-02 09:52:42
1168
原创 【操作系统中的信号量机制】
在多任务操作系统中,进程同步与互斥是关键问题,而信号量(Semaphore)是一种常见的同步机制。本文将介绍信号量的概念、分类、实现方式以及典型应用案例,帮助理解信号量在进程间同步与互斥中的作用。信号量是用于进程同步的机制,提供P(wait)和V(signal)操作。计数信号量允许多个进程访问资源,而二进制信号量用于互斥控制。通过等待队列和进程阻塞/唤醒机制实现信号量。信号量常用于互斥访问、生产者-消费者、读者-写者等经典同步问题。信号量 vs 互斥锁。
2025-04-01 10:18:00
1250
原创 【操作系统内存管理】
内存管理是操作系统中的核心功能之一,它负责为进程分配和回收内存,同时提供内存保护与共享机制。本文将介绍内存管理的主要内容,包括内存分配、内存保护、地址映射、分页与分段机制,以及虚拟内存等内容。
2025-03-31 13:35:03
658
原创 【Python 面向对象编程 (OOP) 详解】
Python 是一门支持多种编程范式的语言,其中面向对象编程 (OOP) 是其核心特性之一。OOP 通过“类”和“对象”来组织代码,使其更加模块化、可复用和易维护。本篇博客将详细介绍 Python 的面向对象编程,包括类的定义、继承、多态、封装等概念,并提供实战案例。面向对象编程 (OOP, Object-Oriented Programming) 是一种以“对象”为核心的编程思想。它通过封装 (Encapsulation)继承 (Inheritance)和多态 (Polymorphism)
2025-03-31 13:30:23
1099
原创 【C语言动态开辟内存空间】
动态内存分配允许程序在运行时申请和释放内存,以灵活管理数据。malloc():分配指定字节的内存,但不会初始化。calloc():分配指定数量和大小的内存,并将内存初始化为0。realloc():调整已经分配的内存大小。free():释放分配的内存。代码区:存放程序的可执行代码。静态区:存放全局变量和静态变量。栈区:由编译器自动分配和释放,主要用于存放函数参数、局部变量和返回地址。堆区:由程序员手动分配和释放,用于存放动态分配的内存。动态内存分配。
2025-03-30 10:11:30
970
原创 【数据结构之二叉搜索树(BST)】
在数据结构中,二叉搜索树(Binary Search Tree,简称 BST)是一种非常重要的树形结构。它在查找、插入和删除操作中具有良好的性能,广泛应用于数据库索引、内存管理、集合操作等场景。本文将详细介绍 BST 的概念、基本操作、实现方式及其复杂度分析。每个节点最多有两个子节点,分别是左子节点和右子节点。左子树上所有节点的值均小于根节点的值。右子树上所有节点的值均大于根节点的值。左右子树本身也是二叉搜索树。
2025-03-30 10:07:41
1245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人