- 博客(159)
- 收藏
- 关注
原创 从 Redis 到分布式架构
本文分享了Redis核心原理与分布式架构设计的实践经验。首先解析Redis高性能的底层逻辑,包括单线程模型、高效数据结构和IO多路复用机制。重点总结了缓存穿透、击穿、雪崩三大问题的解决方案,以及Redis集群的分片与主从同步机制。在分布式架构方面,分析了垂直与水平拆分的策略,并探讨了数据一致性、服务可用性和分布式锁等核心问题。最后强调架构设计需要权衡成本与性能,指出技术方案的本质是解决性能、可用性和扩展性问题。文章为开发者提供了从单机到分布式系统演进的实用指南。
2025-12-20 22:00:15
463
1
原创 每日一题(一)
本文分享了5道LeetCode中等难度高频面试题的解法与核心思路:1)轮转数组的三次反转法;2)跳跃游戏的贪心算法;3)除自身外数组乘积的左右前缀积法;4)环形链表入环点的快慢指针法;5)字符串匹配的KMP算法。这些题目考察数组操作、链表遍历、字符串匹配等常见算法,通过典型解法如反转、贪心、双指针等技巧,可以在O(n)时间复杂度内高效解决问题,是面试必备的算法基础。
2025-12-12 23:03:21
744
14
原创 Qt 实战-Music 播放器
本文介绍了基于Qt框架开发的QQMusic音乐播放器项目。该项目采用模块化分层设计,包含界面层、控件层、业务层和数据层,实现了本地音乐加载、播放控制、歌词同步和数据持久化等核心功能。关键技术包括Qt Designer界面设计、QSS样式优化、QMediaPlayer媒体播放、SQLite数据存储等。项目亮点在于自定义控件开发、模块化架构设计和完整业务闭环实现。通过该项目可以掌握Qt的核心开发技能,包括信号槽机制、动画效果、文件IO操作等,是Qt进阶学习的优质实践案例。
2025-12-09 23:23:08
651
5
原创 QT-项目(音乐)(二)
本文介绍了Qt界面开发中动态交互效果的实现方法。通过QPropertyAnimation创建线条呼吸动画,结合信号槽机制管理按钮状态,实现流畅的界面切换效果。主要内容包括:1)使用几何属性动画实现按钮组动态线条效果;2)封装按钮控件统一管理图标、文本和状态;3)通过stackedWidget和信号槽实现多页面切换;4)设计带滑动效果的推荐内容展示区布局方案。文章重点阐述了动画实现原理、界面状态管理和交互设计要点,为开发具有良好用户体验的界面提供了实用解决方案。
2025-11-28 01:40:54
570
8
原创 QT-项目(音乐)(一)
本文介绍了Qt界面开发中的两个关键操作:1)去除原生窗口边框并解决不可关闭/拖动问题:通过setWindowFlag实现无边框,重写鼠标事件实现拖拽功能,添加关闭按钮事件;2)界面美化技巧:使用QGraphicsDropShadowEffect设置阴影效果,结合半透明背景实现立体视觉。同时详细解析了logo和输入框的样式设置方法,包括背景图居中显示、圆角输入框等CSS样式实现。这些方法可帮助开发者打造更美观、交互友好的Qt自定义界面。
2025-11-26 21:24:04
999
7
原创 QT-界面优化(下)
本文介绍了Qt绘图API的核心使用方法和实践技巧。主要内容包括:1)Qt绘图体系四大核心类(QPainter、QPaintDevice、QPen、QBrush)的功能分工;2)正确的绘图时机应在paintEvent事件中;3)图形绘制基础(线段、矩形、椭圆);4)样式定制(画笔样式、填充效果);5)文字绘制注意事项;6)图片显示与处理(原始显示、缩放、旋转)。文章通过代码示例详细演示了各项功能的具体实现,为开发者提供Qt绘图开发的实用指南。
2025-11-25 21:51:37
1498
10
原创 QT-界面优化(中)
本文解析了QSS盒模型的核心概念及其在Qt控件样式定制中的应用。盒模型将控件分为外边距、边框、内边距和内容区四个层次,通过margin、padding、border等属性可精准控制控件布局。文章详细介绍了复合属性的拆分与简写规则,并以按钮样式为例展示实际应用。此外,还讲解了如何通过子控件选择器和伪类定制复选框、输入框等控件的细节样式,以及使用qlineargradient实现渐变效果。针对QWidget背景失效问题,提出通过嵌套QFrame控件的解决方案,有效实现窗口背景美化。掌握这些QSS技巧可以显著提升
2025-11-25 16:52:19
625
5
原创 QT-界面优化(上)
本文系统介绍了Qt样式表(QSS)的核心知识点,包括语法结构、使用方式和层叠特性。QSS沿用了CSS的语法,通过选择器和属性键值对实现控件样式定制。文章详细讲解了三种使用方式:控件级局部样式、父控件级包含子控件的样式以及全局样式,并分析了样式叠加和覆盖的层叠规则。此外,还提出了QSS工程化管理的两种方案:将样式代码分离到独立文件和在QtDesigner中直接编辑样式,解决了样式与逻辑混编的问题。最后,文章深入解析了QSS选择器类型及其优先级规则,包括基础选择器、子控件选择器和伪类选择器等,帮助开发者精准控制
2025-11-24 23:10:03
1121
5
原创 C++11
C++11新特性解析:提升编程效率与性能 本文系统介绍了C++11标准引入的关键新特性。主要内容包括:统一的列表初始化({}初始化与initializer_list)、变量类型推导(auto/decltype/nullptr)、右值引用与移动语义、lambda表达式、可变参数模板、类功能增强(默认成员函数/成员初始化/default&delete/final&override)以及包装器(function/bind)。这些特性显著提升了代码简洁性、运行效率和灵活性,并通过逆波兰表达式求值案例
2025-11-23 23:00:02
1143
7
原创 QT-系统(网络)
本文系统介绍了Qt框架下UDP、TCP和HTTP三种网络协议的编程实现方法。在UDP部分,详细解析了QUdpSocket和QNetworkDatagram类的使用,并实现了带界面的回显服务器;TCP部分重点讲解了QTcpServer和QTcpSocket的应用,解决了粘包问题;HTTP部分则通过QNetworkAccessManager等类实现了可视化客户端。文章还简要介绍了Qt多媒体模块的声音播放功能。每种协议都包含核心类解析、实战代码示例和实际应用场景分析,展示了Qt在网络编程中的跨平台优势和信号槽机制
2025-11-23 15:35:39
875
9
原创 特殊类的设计
本文探讨了C++中特殊类的设计技巧,包括控制对象创建方式(仅堆/仅栈实例化)、限制类行为(禁止拷贝、不可继承)和实现单例模式(饿汉/懒汉)。通过构造函数私有化、运算符禁用和静态成员函数等方法,可以精准控制对象创建位置和类行为。单例模式采用饿汉式(线程安全)或懒汉式(双检查锁优化)实现全局唯一实例。这些技巧能有效提升代码的健壮性和设计合理性,在框架开发和资源管控等场景中具有重要应用价值。
2025-11-21 21:36:33
660
7
原创 QT-系统(多线程)
本文系统介绍了Qt多线程开发的核心技术与实践方案。首先对比了Linux原生API、std::thread和QThread三种多线程实现方式,重点剖析了QThread基于子类化和run函数重写的工作原理,并通过倒计时案例演示了线程与主线程的信号槽联动机制。针对客户端开发场景,阐述了多线程避免主线程阻塞的核心价值,特别强调了密集IO操作的处理策略。在线程安全方面,详细讲解了QMutex的基础用法及常见陷阱,推荐使用QMutexLocker的RAII机制确保锁安全释放,并介绍了QReadWriteLock在多读少
2025-11-21 21:31:23
1079
4
原创 热题100-95
本文介绍了字符串处理中的经典问题——编辑距离,通过动态规划方法求解将一个字符串转换成另一个字符串所需的最少操作次数(插入、删除或替换)。文章详细阐述了状态定义、初始状态和状态转移方程,当字符相等时继承前状态,不等时取三种操作的最小值。给出了C++代码实现,分析时间复杂度为O(n×m),空间复杂度为O(n×m),并通过示例验证了算法正确性。该方法逻辑清晰,能高效处理字符串转换问题。
2025-11-19 15:40:59
307
1
原创 QT-系统部分(事件)
Qt事件处理机制详解:从底层事件到高层封装 摘要: 本文系统介绍了Qt的事件处理机制,重点对比了底层事件处理与高层封装的特点。Qt通过封装系统API实现跨平台能力,其事件处理分为两类:1) 底层事件如鼠标、键盘、定时器事件,通过重写event函数实现精确控制;2) 高层封装如信号槽和QShortcut,提供更简洁的开发方式。在定时器实现上,详细对比了timerEvent与QTimer的适用场景,建议优先使用QTimer。文章还包含窗口移动、大小改变等事件处理示例,展示了Qt事件系统既灵活又高效的特性,开发者
2025-11-18 21:55:32
1159
2
原创 高级IO-poll
本文深入剖析了poll机制在网络编程中的实现原理和优势。作为select的改进版,poll通过struct pollfd结构体数组解决了select的fd数量限制和事件集重复初始化问题。文章详细介绍了poll的核心数据结构、函数原型,并通过一个完整的TCP服务器实现展示了poll的实际应用。相比select,poll具有输入输出分离、无需计算maxfd等优势,但仍存在遍历开销和数据拷贝问题。poll适用于中小并发场景,而高并发场景需要更高效的epoll等技术。理解poll的设计思路是掌握多路复用技术演进的关
2025-11-15 22:56:58
856
13
原创 QT-窗口-内置对话框(下)
本文介绍了Qt中的5个常用对话框组件:1. QMessageBox - 用于消息提示和用户决策,支持标准按钮和自定义交互 2. QColorDialog - 提供颜色选择功能,可应用于界面样式设置 3. QFileDialog - 实现文件打开/保存路径选择,支持单文件和多文件选择 4. QFontDialog - 用于字体样式选择,可获取字体家族、大小等属性 5. QInputDialog - 提供多种输入方式(整数、浮点数、字符串、列表选择) 这些对话框都采用模态交互方式,简化了用户输入流程,开发者只需
2025-11-09 16:35:55
988
19
原创 LRU 缓存的设计与实现
本文详细讲解了LRU(最近最少使用)缓存的设计与实现。LRU缓存通过结合哈希表和双向链表,实现了O(1)时间复杂度的get和put操作:哈希表快速定位键值,双向链表维护使用顺序。当容量满时,链表尾部的最久未使用项会被淘汰。文章从需求分析、数据结构选择、核心方法实现到完整代码测试,系统性地阐述了LRU缓存的工作原理,为理解这种经典缓存淘汰策略提供了清晰的实现思路。
2025-11-08 21:57:10
852
7
原创 Qt窗口教程(上)
本文介绍了Qt界面开发中常见组件的使用方法。主要内容包括:1. QMenuBar菜单栏的创建与优化,包含添加快捷键、子菜单、分割线和图标;2. QToolBar工具栏的使用及与菜单栏的核心区别;3. QStatusBar状态栏的基本操作和临时消息显示;4. QDockWidget浮动窗口的创建、停靠设置和内部控件布局管理;5. QDialog对话框的基础使用、内存管理方案以及模态/非模态实现。文章重点讲解了各组件在实际开发中的正确使用方式,并特别强调了内存管理问题,提供了Qt::WA_DeleteOnClo
2025-11-07 10:54:24
792
9
原创 数独系列算法
本文探讨了数独问题的两种核心算法:验证数独有效性和求解数独。验证数独有效性采用哈希表技术,通过三个数组记录行、列和3×3子网格的数字分布,实现O(1)时间复杂度的快速验证。解数独则运用回溯算法,在满足数独规则的前提下尝试填充数字,通过DFS递归和剪枝策略有效降低复杂度。两种算法分别体现了约束验证和搜索优化的经典思想,其方法论可推广至八皇后等约束满足问题。文章详细解析了两种算法的实现逻辑、复杂度分析和应用场景差异,为处理类似问题提供了算法范式。
2025-11-02 16:38:16
1126
11
原创 数据结构之图的邻接矩阵
本文系统解析了邻接矩阵这一基础图存储结构。通过泛型类实现,详细阐述了其核心原理:顶点存储映射、边权矩阵表示及有向/无向图的控制机制。文章对比了邻接矩阵与邻接表的特性差异,指出矩阵O(1)查询优势和O(n²)空间局限,并通过社交关系图等案例演示具体应用。最后强调根据图密度选择存储方式:稠密图适用矩阵,稀疏图推荐邻接表。该内容为学习图遍历、最短路径等算法奠定重要基础。
2025-11-01 22:09:45
937
10
原创 数据结构-并查集
本文深入解析并查集数据结构,介绍其通过树形结构管理不相交集合的核心原理,包括查找(带路径压缩)、合并(按大小合并)和统计集合数量三大操作。文章展示了并查集的通用类实现,并通过省份数量计算、等式方程判断等算法案例演示其应用。此外,还列举了在图连通性、网络分析、生物信息等领域的拓展应用。并查集以近乎常数级的时间复杂度,成为解决集合管理类问题的高效方案,既适用于算法竞赛,也能培养抽象建模能力。
2025-10-26 22:08:59
845
23
原创 Linux 信号控制
是进程 “主动控制哪些信号可以打扰自己” 的工具;sigpending是进程 “查看有哪些被屏蔽的信号在排队等待处理” 的窗口;信号屏蔽与未决机制,是 Linux 系统中进程对信号 “精细管控” 的核心手段,在系统编程、服务器开发等场景中有着广泛应用。希望这篇博客能帮大家穿透代码,真正理解信号屏蔽与未决的底层逻辑~
2025-10-22 10:42:26
797
15
原创 理解 Linux 进程间通信(IPC)
本文介绍了Linux系统中的进程间通信(IPC)机制,重点解析了SystemV IPC的三种核心方式:共享内存提供最高效的数据共享但需配合信号量保持同步;消息队列实现可靠的异步通信,适合解耦进程;信号量作为"红绿灯"控制进程同步与互斥。文章对比了各类IPC的适用场景,强调资源管理的重要性,并给出实践建议。掌握这些IPC技术能帮助开发者构建高效可靠的多进程应用系统。
2025-10-21 14:39:45
708
7
原创 Linux通信-管道
本文深入解析Linux进程间通信(IPC)的核心机制——管道(Pipe),从内核数据结构、系统调用实现、进程管理到实战应用四个维度展开。首先剖析了struct file、task_struct等关键数据结构如何支撑管道通信,详细介绍了pipe()系统调用的工作原理及其缓冲区管理机制。通过父子进程通信的代码示例,演示了匿名管道的典型应用场景,并分析了其局限性(如仅支持亲缘关系进程、单向通信等)。文章进一步探讨了命名管道(FIFO)等优化方案,并展示了管道在进程池实现中的进阶用法,通过父进程分发任务、子进程执行
2025-10-19 20:32:39
1100
13
原创 QT-常用控件
本文介绍了Qt框架中各类控件的核心属性与使用方法,涵盖基础控件、输入输出、布局管理等多个方面。主要内容包括:1)基础控件如QPushButton、QLabel等的属性和信号槽机制;2)输入类控件如QLineEdit、QTextEdit的文本处理功能;3)显示类控件如QProgressBar、QLCDNumber的数据展示方式;4)布局管理类如QVBoxLayout、QGridLayout的界面组织方法;5)特殊控件如QCalendarWidget的日期处理,以及QDateTimeEdit在跨时区计算中的注意
2025-10-18 15:29:23
1133
9
原创 刷题笔记:从全排列到二叉树
本文总结了回溯算法和二叉搜索树(BST)相关的经典LeetCode题目解题思路。全排列(LeetCode46)通过回溯法删除已选元素避免重复;验证BST(LeetCode98)利用中序遍历的严格递增特性;BST中第K小元素(LeetCode230)同样基于中序遍历计数;二叉树所有路径(LeetCode257)采用回溯法记录路径,遇到叶子节点保存结果。这些题目展示了算法思想的复用性:回溯法适用于排列组合和路径问题,中序遍历则能有效处理BST的特性问题。解题关键在于理解算法核心逻辑而非死记代码,才能在遇到新问题
2025-10-15 15:29:41
608
6
原创 QT-信号与槽
本文介绍了Linux信号与Qt信号的基础概念及差异,重点阐述了Qt中connect函数的使用方法和技巧。文章通过关闭小窗口的示例演示了信号与槽的连接方式,讨论了自定义槽函数的两种实现方法,并详细说明了自定义信号的声明和使用规则。文中还探讨了带参数信号和槽函数的匹配规则,解释了参数个数可以不同的原因。最后总结了信号和槽机制的意义,包括解耦和多对多操作特性,以及disconnect函数的使用场景。文章为Qt开发者提供了信号与槽机制的实用指南。
2025-10-05 21:11:37
1367
12
原创 Leetcode刷题
本文总结了三个经典算法问题的解法:1. 环形链表问题(141/142题)使用快慢指针判断环及入环点;2. 字符串处理问题(942/409题)通过双指针和字符统计解决匹配与回文构造;3. 数组贪心问题(870题)利用排序和双指针实现优势最大化。这些解法涵盖了快慢指针、贪心算法和哈希统计等核心算法思想,展示了不同数据结构的处理技巧,为算法学习提供了典型范例。
2025-10-05 17:07:40
714
7
原创 Leetcode热题100(8-12)
本文精选LeetCode经典题目,深入解析滑动窗口、哈希表、优先队列等核心算法技术。通过最小覆盖子串、字母异位词、子数组和等问题,详细剖析解题思路与代码实现,包括双指针控制、哈希表优化、前缀和技巧等关键点。特别针对滑动窗口最大值问题,比较了优先队列与单调队列的优劣。文章还涉及无重复字符子串等典型例题,并强调算法思维与C++工程实践的结合,为算法进阶提供系统指导。
2025-10-02 23:09:24
1097
9
原创 LeetCode热题100(1-7)
本文分享了LeetCode中数组操作、查找与哈希、数组进阶等经典题目的解题思路和C++实现。重点介绍了双指针法(移动零、盛水容器、接雨水)、哈希表(两数之和、字母异位词分组)和排序技巧(三数之和、最长连续序列)的应用。通过分析这些题目,总结出常见算法思维:双指针处理数组问题、哈希表优化查找效率、排序解决重复和连续性问题、原地操作降低空间复杂度。文章旨在帮助算法爱好者掌握核心解题技巧,提升编程能力。
2025-09-30 21:14:16
1248
12
原创 动态规划实战
摘要:本文通过分析LeetCode五道经典动态规划题目,系统阐述了动态规划的核心思想和解题方法。以二叉搜索树计数、组合总和、盈利计划等问题为例,详细讲解了状态定义、转移方程推导和遍历顺序选择等关键步骤。文章指出动态规划的本质在于将复杂问题分解为重叠子问题,通过多维状态转移实现高效求解。针对不同问题类型(如排列/组合、01背包/完全背包),文章对比了遍历顺序的差异,并总结了动态规划的四步解题方法论:明确状态、推导方程、确定顺序、处理初始条件。
2025-09-29 22:12:30
856
6
原创 QT文件解析与乱码问题
Qt工程文件解析.pro文件是qmake生成的配置文件,用于生成Makefile。widget.h使用Q_OBJECT宏实现信号与槽机制,Ui::Widget*ui指针用于访问界面组件。main.cpp创建QApplication对象管理事件循环,通过Widget窗口实例显示界面。widget.ui以XML格式定义界面组件和布局。输出乱码问题是因Qt(UTF-8)与iostream(GBK)编码标准不同,可使用qDebug替代cout解决。
2025-09-28 17:42:14
420
10
原创 QT 初识
本文介绍了Qt项目创建的基本流程和关键概念。首先详细说明了项目模板分类,包括Application(应用程序)、Library(库)等类型,以及各类文件模板(C++、Qt、Python等)。接着通过创建图形化HelloWorld示例,演示了从选择模板到界面设计的完整过程,重点讲解了Qt对象树机制和内存管理原理,强调使用this初始化控件的重要性:1)实现内存自动回收,避免泄漏;2)确保界面层级正确显示。最后对比了图形化与代码两种创建方式,为开发者提供了Qt项目创建的实用指导。
2025-09-27 16:45:43
1068
9
原创 解析01背包
本文介绍了01背包问题的动态规划解法。首先定义二维状态dp[i][j]表示前i个物品在容量j时的最大重量。通过状态转移方程,比较选与不选当前物品的情况,实现基础解法。随后提出空间优化方案,利用逆序遍历将二维数组压缩为一维数组,降低空间复杂度至O(V)。文章通过示例验证解法正确性,并强调该优化方法适用于各类01背包变种问题。核心思路是动态规划的状态定义和转移过程,通过二维到一维的优化实现高效求解。
2025-09-25 19:13:27
1067
8
原创 经典字符串与数组题目
本文总结了LeetCode中8道经典字符串与数组题目,重点分析了动态规划的应用解法。包括718最长重复子数组(二维DP)、712最小ASCII删除和(状态转移)、97交错字符串(布尔DP)、10正则表达式匹配(复杂条件处理)、7整数反转(溢出处理)、8字符串转整数(边界判断)、44通配符匹配(星号处理)和115不同子序列(计数DP)。每道题都提供了清晰的解题思路和C++代码实现,展示了如何通过DP数组定义和状态转移方程解决字符串匹配、子序列等核心问题。这些题目涵盖了字符串处理中的典型场景和常见陷阱,是提升算
2025-09-24 22:05:08
593
10
原创 动态规划-详解回文串系列问题
本文总结了回文字符串问题的五种常见变体及其动态规划解法:1. 最长回文子串(LeetCode5):通过dp[i][j]记录子串是否为回文,并跟踪最长回文;2. 回文子串计数(LeetCode647):类似方法统计所有回文子串数量;3. 分割回文串(LeetCode1745/132):先预处理回文信息,再枚举分割点或计算最少分割次数;4. 最长回文子序列(LeetCode516):处理不连续子序列的最长回文;5. 最少插入次数(LeetCode1312):通过动态规划计算使字符串成为回文的最少插入操作。所有问
2025-09-17 19:43:48
1696
14
原创 动态规划解决系列子序列问题
这些子序列问题都可以通过动态规划来解决,核心是找到合适的状态定义以及状态转移方程。不同的问题根据其特定的条件,状态定义和转移方式有所不同,但整体思路都是利用动态规划来记录子问题的解,从而推导出原问题的解。通过这些问题的练习,可以更好地掌握动态规划在子序列问题中的应用。
2025-09-16 15:57:23
858
12
原创 动态规划在子数组/子串问题
本文介绍了动态规划在解决子数组/子串问题中的应用,通过6个LeetCode经典题目详解了不同场景下的解题思路。包括最大子数组和、环形子数组最大和、乘积最大子数组、乘积为正数的最长子数组、等差数列划分、最长湍流子数组等问题。每个问题都给出了状态定义、转移方程和实现代码,重点分析了如何根据问题特性设计动态规划方案。文章强调动态规划的核心在于合理定义状态和转移方程,通过多练习可以掌握这类问题的解题模式。
2025-09-15 15:04:19
1063
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅