自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高阶数据结构---跳表

跳表是一种基于有序链表的多层索引结构,通过随机层数实现高效查找(O(logn)时间复杂度)。相比平衡树,跳表实现更简单、空间消耗更低;相比哈希表,跳表支持有序遍历且无扩容损耗,但查询效率稍低。核心实现包括:1)节点随机层数生成;2)多层前驱节点定位;3)动态调整头节点层数。适用于需要有序查找且对实现复杂度敏感的场景,是平衡树和哈希表之外的重要查找结构选择。

2026-03-09 08:00:00 294

原创 B树系列在数据库中的应用

摘要:索引是帮助数据库高效获取数据的数据结构,MySQL中不同存储引擎对索引的实现方式不同。MyISAM使用B+树结构存储索引和数据地址,实现索引与数据分离;而InnoDB将数据文件本身组织为B+树索引,主键索引直接包含完整数据记录,普通索引则存储主键值。从MySQL 5.5.8开始,支持事务的InnoDB成为默认引擎。两种引擎的索引结构差异主要体现在数据存储方式和普通索引处理上。

2026-03-08 20:38:08 207

原创 B树系列(B-树、B+树、B*树)

本文摘要:文章探讨了大规模数据存储场景下的搜索结构优化问题。首先分析了传统搜索树(二叉搜索树、平衡树)和哈希表在磁盘存储环境中的性能瓶颈,指出其访问次数多或极端情况性能差的缺陷。然后重点介绍了B树及其变种(B+树、B*树)作为解决方案,详细阐述了B树的节点结构、插入操作的分裂过程,并通过代码示例展示了具体实现。文章比较了B树系列的优缺点,解释了它们更适合磁盘存储的原因(如降低树高度减少IO次数),并指出B+树在数据库中的广泛应用。最后提出B树系列在内存中未被广泛使用的原因分析。

2026-03-07 14:00:00 203

原创 LRU Cache

LRU(最近最少使用)是一种缓存淘汰算法,其核心思想是当缓存空间不足时优先移除最久未被使用的数据。该算法广泛应用于浏览器、数据库和操作系统缓存中,利用时间局部性原理提高缓存效率。高效实现需要O(1)时间复杂度的put和get操作,经典方案是结合哈希表(快速查找)和双向链表(快速插入删除)。哈希表存储键值映射,双向链表维护访问顺序,最近访问的置于链表头部,空间不足时移除尾部元素。这种数据结构组合能有效满足LRU算法的高效性要求。

2026-03-05 09:00:00 26

原创 图---最短路径

本文介绍了三种常见的最短路径算法:Dijkstra算法适用于正权图的单源最短路径问题,时间复杂度为O(N²),但不支持负权路径;Bellman-Ford算法可以处理负权图的单源最短路径问题,时间复杂度为O(N*E),并能检测负权回路;Floyd-Warshall算法则用于多源最短路径问题,通过三重循环动态更新所有顶点间的最短距离。三种算法各有特点,适用于不同场景:Dijkstra效率高但限制严格,Bellman-Ford适用范围广但效率较低,Floyd-Warshall适用于全局路径计算。

2026-03-04 14:00:00 647

原创 图---最小生成树

本文介绍了最小生成树的概念及两种构造算法。最小生成树是连通图的极大无环子图,包含n个顶点和n-1条边。Kruskal算法通过优先级队列选择最小边,利用并查集判环;Prim算法从起点出发,使用优先级队列和集合判环,逐步构建最小生成树。两种算法都采用贪心策略,每次选择局部最优解。文章详细阐述了两种算法的实现思路和代码流程,包括数据结构的使用和关键步骤的处理。通过比较可以看出,Kruskal算法基于边的选择,而Prim算法基于顶点的扩展。

2026-03-03 08:30:00 368

原创 图---BFS(广度遍历)和DFS(深度遍历)

本文介绍了图的两种遍历算法:BFS(广度优先搜索)和DFS(深度优先搜索)。BFS示例展示了层级传播过程,通过队列实现逐层遍历,并记录每层节点数。DFS则是深度优先的递归遍历,沿一条路径深入后再回溯。对于非连通图,可通过标记数组确保所有顶点都被访问,未访问顶点可作为新起点继续遍历。两种算法分别适用于不同场景:BFS适合最短路径等层级问题,DFS则适合路径探索和连通性分析。

2026-03-02 14:52:02 190

原创 图----图的概念和存储结构

本文摘要: 本文系统介绍了图论的基本概念和存储结构。主要内容包括:1)图的定义G={V,E}及分类:无向图、有向图、带权图、子图、连通图、强连通图、生成树和最小生成树;2)两种主要的图存储结构:邻接矩阵(使用二维数组存储边关系)和邻接表(使用链表存储边关系),并提供了相应的C++实现代码。文章详细阐述了每种存储方式的特点和实现细节,包括顶点索引管理、边添加操作等,为图算法的实现提供了基础数据结构支持。

2026-02-25 20:57:50 427

原创 高阶数据结构:并查集

并查集是一种处理不相交集合合并与查询的数据结构,核心操作包括查找元素所属集合(Find)和合并两个集合(Union)。它通过树形结构表示集合关系,数组存储父节点信息,负数表示根节点及其集合大小。典型应用包括朋友圈问题、省份数量统计等场景。实现时需处理路径压缩优化,并通过统计负数元素个数确定集合数量。在算法题中,如判断等式方程可满足性时,先合并等式两端元素,再检查不等式是否冲突。并查集高效解决连通性问题,时间复杂度接近常数级。

2026-02-23 14:28:02 527

原创 MySQL:表的约束

本文介绍了数据库中的约束类型及其应用场景。主要包括空属性、默认值、列描述、zerofill、主键、自增长、唯一键和外键等约束类型,通过具体示例说明其作用和实现方式。特别强调了主键和唯一键的区别,外键约束的重要性,以及如何通过约束保证数据完整性和业务逻辑合理性。最后通过一个综合示例展示了如何在实际业务场景中应用这些约束来设计商品、客户和购买三个关联表,确保数据的一致性和有效性。文章着重说明了约束在数据库设计中的关键作用,以及如何通过合理设置约束来避免数据异常和业务逻辑错误。

2025-10-20 16:28:43 681

原创 MySQL:数据类型

本文系统介绍了MySQL中的数据类型分类和使用规范。数值类型部分详细讲解了tinyint、bit、float、decimal等类型的语法特点、取值范围和注意事项,强调应根据实际需求选择合适的数据类型。字符串类型对比了char和varchar的存储机制、最大长度限制及适用场景。日期时间类型介绍了date、datetime、timestamp的使用方法。最后阐述了枚举(enum)和集合(set)类型的特性及查询技巧,特别指出集合查询应使用find_in_set函数。

2025-10-18 14:00:00 990

原创 MySQL:表的增删查改

本文介绍了MySQL数据库表的基本操作:1. 创建表语法:指定表名、字段、数据类型、字符集和存储引擎,示例创建了users表;2. 查看表结构使用desc命令;3. 修改表操作包括添加/修改/删除字段、修改表名和字段名等;4. 删除表使用drop table命令。文中通过具体示例演示了各项操作,并指出不同存储引擎会生成不同的表文件,同时强调了删除字段时的数据风险。

2025-10-18 08:30:00 1150

原创 MySql:库的操作

本文介绍了MySQL数据库的基本操作,包括创建数据库(可指定字符集和校验规则)、查看系统默认字符集与校验规则、校验规则对查询结果的影响(区分大小写)。同时讲解了数据库的修改、删除、备份与恢复操作,以及查看连接情况的方法。重点说明了不同备份方式的语法差异,并提醒谨慎执行删除操作。文章还强调了校验规则在查询和排序时对大小写敏感性的影响。

2025-10-17 19:00:00 940

原创 Centos 7 环境下mysql的安装及配置

本文介绍了MySQL服务的检查、安装及配置步骤。首先通过命令检查并停止现有MySQL/MariaDB服务,删除旧安装包。随后从官方获取yum源进行安装,可能需处理密钥问题。安装后启动mysqld服务,提供三种登录方式:使用临时密码、无密码直接登录,或通过修改my.cnf配置文件添加skip-grant-tables实现免密登录。最后需重启服务使配置生效。全文涵盖了从环境检查到服务配置的完整流程,适用于Linux系统下的MySQL安装部署。

2025-10-17 13:19:04 498

原创 Qt:界面优化

Qt通过引入QSS(类似CSS的样式表)和QML来增强GUI开发能力,支持控件样式定制和界面描述。QSS语法与CSS类似但更简单,支持多种选择器(如类选择器、ID选择器)和子控件选择器,并允许通过伪类选择器设置控件状态样式。QSS优先级高于代码设置的样式。Qt还提供绘图API(如QPainter、QPaintDevice)用于自定义控件绘制,需在paintEvent事件中调用以确保动态更新。这些特性使Qt在界面开发中兼具灵活性和易用性。

2025-10-15 14:00:00 2190

原创 Qt:网络

摘要:本文介绍了Qt框架中网络编程的核心API及使用方法。主要内容包括:1)UDP通信相关类QUdpSocket和QNetworkDatagram的核心方法及对应原生API;2)TCP通信关键类QTcpServer和QTcpSocket的功能说明;3)HTTP客户端开发涉及的QNetworkAccessManager、QNetworkRequest和QNetworkReply类及其用法。文章通过回显服务器/客户端示例展示了这些API的实际应用,并对比了Qt封装接口与原生网络编程API的异同。

2025-10-15 08:00:00 1924

原创 Qt:多线程

Qt多线程编程指南 本文介绍了Qt框架中的多线程实现方法。主要内容包括:1)使用QThread类创建线程,通过重写run()函数实现线程逻辑;2)QThread常用API如start()、sleep()、wait()等;3)线程间通信方式,重点讲解了connect()函数的五种连接类型;4)线程安全机制,包括互斥锁(QMutex)、条件变量(QWaitCondition)和信号量(QSemaphore)的使用方法。文章特别强调UI操作必须在主线程执行,并详细说明了各种同步机制的应用场景和注意事项。

2025-10-14 14:00:00 2149

原创 Qt:文件操作

Qt提供了丰富的文件操作类,主要包括QFile用于文件读写,QSaveFile保证安全写入,QTemporaryFile创建临时文件。所有I/O设备类继承自QIODevice基类,包括网络通信(QTcpSocket/QUdpSocket)、串口(QSerialPort)和蓝牙(QBluetoothSocket)等。文件操作需通过open()设置模式(如ReadOnly/WriteOnly),使用read()/write()读写数据后必须close()。QFileInfo类可获取文件信息如大小、时间等。

2025-10-14 08:30:00 764

原创 Qt:事件

本文介绍了Qt中的事件处理机制,主要包括:1.事件是信号槽的底层实现基础,所有Qt事件都继承自QEvent类;2.常见的鼠标事件(进入/离开、按下/释放、双击、移动、滚轮)及其处理方法;3.键盘事件处理及修改键的使用;4.定时器事件的两种实现方式(QTimerEvent和QTimer类);5.窗口事件处理。文章通过具体示例说明了各类事件的处理步骤和应用场景,为Qt事件编程提供了实用指导。

2025-10-13 14:45:00 1654

原创 Qt:窗口类

本文介绍了Qt框架中的主要窗口类及其组件。QMainWindow作为主窗口类,包含菜单栏(QMenuBar)、工具栏(QToolBar)、状态栏(QStatusBar)、浮动窗口(QDockWidget)和中心部件等核心组件。QDialog对话框类用于实现短期交互任务,包括文件对话框(QFileDialog)、颜色对话框(QColorDialog)、字体对话框(QFontDialog)等标准对话框类型。文章详细说明了各类组件的功能特点、常用方法及典型应用场景,为Qt应用程序的界面开发提供了基础指导。

2025-10-13 08:15:00 1089

原创 Qt:容器类和布局管理器

本文介绍了Qt中常用的容器类控件和布局管理器。容器类控件包括QGroupBox(分组框)和QTabWidget(标签页),前者用于分组显示控件,后者支持多页面切换。布局管理器包括QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)和QFormLayout(表单布局),用于实现灵活的界面布局,解决绝对定位的局限性。每种布局管理器都支持边距、间距等属性设置,并能嵌套使用。QGridLayout还支持行列拉伸系数,而QFormLayout专为表单设计。

2025-10-12 14:00:00 1005

原创 Qt:多元素控件

本文介绍了Qt中的多元素控件,包括QListWidget、QTableView、QTableWidget和QTreeWidget等。重点分析了Widget和View控件的区别,如QTableWidget封装了Model而QTableView需要手动关联Model。详细说明了各控件的核心属性、方法和信号,如QListWidget的currentRow属性、QTableWidget的cellClicked信号等。

2025-10-12 08:00:00 948

原创 Qt:输入类控件

摘要:本文介绍了Qt框架中常用的几种输入控件及其核心功能。QLineEdit用于单行文本输入,支持密码模式、输入格式约束等;QTextEdit是多行富文本编辑器,支持Markdown和HTML格式;QComboBox提供下拉选择功能,支持动态添加选项;QSpinBox/QDoubleSpinBox用于数值调节;QDateTimeEdit处理日期时间输入;QDial和QSlider分别是旋钮和滑动条控件,用于数值调节。每种控件都详细说明了核心属性、信号事件及典型应用场景,如密码输入验证、日期计算器、窗口透明度

2025-10-11 13:30:00 886

原创 Qt:显示类控件

本文介绍了Qt中几个常用控件的核心属性和功能:1. QLabel控件支持文本、图片显示,可设置文本格式、对齐方式、边距等属性,并能关联伙伴控件;2. QFrame作为QLabel的父类,可设置多种边框样式;3. QLCDNumber专门用于数字显示,支持多种进制和显示风格;4. QProgressBar用于显示进度条,可设置数值范围、方向、文本格式等;5. QCalendarWidget提供日历功能,可配置日期范围、显示格式等,并支持日期选择相关信号。这些控件都具备丰富的可定制属性,能满足不同界面开发需求。

2025-10-11 08:30:00 623

原创 Qt关于按钮相关类介绍

本文介绍了Qt中三种常见按钮控件的主要特性:1. QPushButton作为最常用的按钮控件,继承自QAbstractButton,支持文本、图标、快捷键设置,并具有自动重复触发功能;2. QRadioButton用于单选场景,默认具有排他性,可通过QButtonGroup实现分组;3. QCheckBox支持多选功能,核心属性checkable和checked继承自QAbstractButton。文章重点分析了各控件的特有属性及继承关系,并通过示例说明了QPushButton的图标、快捷键和自动重复等功能

2025-10-10 14:00:00 483

原创 应用层:五种IO模型

本文介绍了五种I/O模型:阻塞I/O(系统调用等待数据)、非阻塞I/O(循环轮询)、信号驱动I/O(内核信号通知)、多路复用I/O(同时监控多个文件描述符)和异步I/O(内核完成拷贝后通知)。重点分析了多路复用技术,包括select(存在效率问题)、poll(改进select但仍有遍历开销)和epoll(高效的事件驱动机制)。epoll支持边缘触发和水平触发模式,通过事件回调机制提升性能。最后提及Reactor模式,包括单进程版和多线程epoll版本,展示了I/O多路复用的实际应用框架。

2025-10-10 08:30:00 1068

原创 数据链路层:以太网、ARP协议

数据链路层是确保网络通信​​可靠、高效​​的关键。它将不稳定的物理传输转化为一条相对可靠的数据链路,为上层网络协议提供了“一站直达”的本地传输服务。没有数据链路层对帧、地址、差错和访问的控制,IP数据包将无法在本地网络中被正确投递,整个互联网的通信也就无从谈起。

2025-10-09 14:30:00 869

原创 网络层:IP协议

本文系统介绍了IP协议及其相关技术。首先明确了主机、路由器和节点的概念,详细解析了IP协议报头结构。重点阐述了IP地址的网段划分原理,包括网络号和主机号的作用,并介绍了CIDR子网划分方案以解决传统分类地址的浪费问题。同时说明了私有IP与公网IP的区别,以及NAT技术在局域网与公网通信中的关键作用。最后讲解了路由器的子网构建功能和IP数据包的分片组装机制。全文从基础概念到实际应用,全面展现了IP协议在网络通信中的核心地位与实现原理。

2025-10-09 08:30:00 1171

原创 Linux环境基础开发工具

本文摘要介绍了Linux系统下的常用开发工具和命令:1) yum包管理器的核心功能(仓库管理、依赖解析)及常用指令;2) lrzsz文件传输工具;3) vim编辑器的批量注释和配置方法;4) gcc/g++编译器的编译过程及选项;5) makefile文件管理;6) gdb调试器常用命令,包括断点设置、变量查看、流程控制等20余项调试技巧。这些工具涵盖了Linux环境下的软件安装、代码编辑、编译构建和调试等完整开发流程。

2025-10-08 16:49:05 317

原创 传输层:TCP协议

本文摘要:TCP协议通过接收/发送缓冲区、确认应答、超时重传等机制实现可靠传输。关键点包括:TCP报文格式(首部长度、窗口字段)、6种标记位(SYN/ACK等)、可靠性机制(序列号、流量控制、拥塞控制)、滑动窗口、延迟应答等。文章还探讨了TCP异常处理、粘包问题,并对比UDP实现可靠传输的可能性,建议高可靠性场景优先使用TCP协议。

2025-10-08 14:00:00 777

原创 传输层:UDP协议

摘要:Linux网络工具netstat用于查看网络状态,常用选项包括-n(数字显示)、-l(监听状态)、-p(显示程序名)等。端口号分为知名端口(0-1023)和动态端口(1024-65535),常见服务如SSH(22)、HTTP(80)等使用固定端口。UDP协议特点包括无连接、不可靠和面向数据报,应用层协议如DNS、DHCP等基于UDP实现。

2025-10-07 11:32:08 946

原创 应用层:Http、Https

本文摘要:文章围绕HTTP协议展开,首先介绍了URL的结构及其重要性,强调清晰URL对用户体验和SEO的影响。随后解析了HTTP请求与响应报头格式,并演示了简单的HttpServer实现。详细讲解了HTTP中常用字段,包括GET/POST请求方式、状态码(如404、301/302)及常见Header(Content-Type、Host等)。特别讨论了长连接(keep-alive)、多资源请求场景以及Cookie的工作原理,同时指出Cookie可能存在的安全隐患。全文系统性地介绍了HTTP协议的关键知识点及其

2025-10-06 11:46:01 896

原创 C++11线程相关

C++11线程库提供了跨平台的线程封装,包含thread类、mutex互斥锁及RAII风格的锁管理类。thread类封装了系统线程API,支持join()、detach()等操作;this_thread命名空间提供线程控制接口。mutex提供基本的lock/unlock功能,使用时需注意参数传递(需用ref()或lambda捕获)。高级特性包括lock_guard/unique_lock自动管理锁生命周期,lock/try_lock多锁操作,以及call_once确保函数只执行一次。这些组件共同构成了C++

2025-10-05 12:09:23 902

原创 网络协议栈

要想深入理解网络编程,必须了解七层网络协议栈。

2025-10-04 15:23:26 365

原创 哈希:闭散列的开放定址法

开放式闭散列的哈希算法,存在一定的哈希冲突,可以通过扩容进行减少哈希冲突的问题,但是要付出相应的空间。

2025-06-01 19:50:57 618

原创 C++红黑树:插入与平衡操作详解

红黑树具有实际应用场景的数据结构,符合大多数运用场景,效率高效

2025-05-17 00:31:23 690 28

原创 Qt 中 QWidget涉及的常用核心属性介绍

QWidget的基本常用属性,详细的介绍可以参考Qt内置的文档助手

2025-05-11 14:53:31 1426 41

原创 C++ 深入解析 数据结构中的 AVL树的插入 涉及的旋转规则

具有高效率查找数据的结构之一,很好的解决了二叉搜索树的极端情况

2025-05-08 21:18:49 656 3

原创 C++ set和map系列(关联式容器)的介绍及使用

具有使用意义的容器,更贴近生活的逻辑需求

2025-05-07 19:22:54 1234 44

原创 C++ 渗透 数据结构中的二叉搜索树

二叉搜索树,在一般情况下,效率为O(log(N)),但在极端的场景下退化为类似链表结构

2025-05-06 23:22:54 1016 49

空空如也

空空如也

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

TA关注的人

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