自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【MySQL】事务与锁

死锁是指两个或多个事务互相持有对方需要的锁,导致事务无法继续执行的状态。事务A持有记录1的S锁,等待记录2的X锁;事务B持有记录2的S锁,等待记录1的X锁;两者互相等待,形成死锁。互斥访问:锁只能被一个事务持有;不可抢占:锁只能由持有事务主动释放;保持与请求:事务持有一个锁后,再请求其他锁;循环等待:事务之间形成锁的循环依赖。原子性依赖UndoLog,持久性依赖RedoLog,隔离性依赖锁+MVCC;锁按粒度分为表级锁/行级锁,按模式分为S/X锁、意向锁、间隙锁等;

2025-11-29 22:25:25 839

原创 【MySQL】InnoDB存储引擎

InnoDB架构:内存(缓冲池为核心)+ 磁盘(表空间+日志)协同工作;存储结构:表空间→段→区→页→行,层层递进优化存储效率;核心保障:Undo Log(原子性)、Redo Log(持久性)、双写缓冲区(数据完整性);性能关键:缓冲池(缓存)、变更缓冲区(二级索引优化)、自适应哈希索引(内存查询加速)。

2025-11-29 21:56:33 1080

原创 【MySQL】SQL调优

SQL调优的核心是“索引优化+查询改写”:通过合理设计索引减少扫描行数,通过改写SQL避免索引失效和低效操作。执行计划看type(至少range)和Extra(无filesorttemporary索引优先覆盖索引,避免回表查询。规避10个索引失效场景,遵循最左原则。高频查询列建索引,低频列不建索引,定期清理无用索引。

2025-11-28 22:23:54 929

原创 【Linux】UDP

UDP编程的核心是“简单高效”,适合对实时性要求高、可容忍少量数据丢失的场景。

2025-11-23 22:17:27 1008

原创 【Linux】网络编程

网络基础的核心是“协议分层”和“地址标识”——分层解决了复杂通信的解耦合问题,IP+端口+Socket解决了“如何找到目标进程”的问题。掌握这些概念后,网络编程就有了清晰的逻辑框架。

2025-11-23 22:12:14 1186

原创 【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存

mmap通过内核将文件/设备的部分或全部内容映射到进程虚拟地址空间,进程直接操作这段内存即可完成对文件的读写。减少数据拷贝:跳过内核缓冲区与用户缓冲区的拷贝过程。统一接口:用内存操作(指针读写)替代文件I/O调用。支持共享:可通过共享映射实现进程间数据共享。mmap作为Linux系统的核心技术,其应用场景覆盖文件I/O、进程通信、内存管理、缓存设计等多个领域。基础用法:文件映射读写,替代传统read/write,提升I/O效率。进程通信:结合共享内存和同步机制,实现高效的IPC通信。高级应用。

2025-11-22 22:05:18 1666

原创 【Linux编程】线程同步与互斥

/ 任务类型:支持任意可调用对象线程安全:多个线程并发访问时,程序执行结果一致,无数据竞争。可重入:同一函数被多个执行流(线程或信号)重复调用时,结果正确。本文从线程互斥、同步的基础概念出发,逐步深入到生产者消费者模型、线程池设计等实战场景,覆盖了Linux线程编程的核心知识点。互斥用mutex,解决资源竞争;同步用条件变量/信号量,解决执行顺序。生产者消费者模型是同步与互斥的经典应用,解耦线程间交互。线程池通过复用线程提高效率,适合高并发短任务场景。

2025-11-22 22:00:33 818

原创 【Linux】线程

线程共享进程地址空间,拥有独立的上下文,创建和切换开销小。线程控制依赖POSIX线程库,核心API包括等。线程的内核实现本质是轻量级进程,通过clone系统调用创建,共享mm_struct。线程安全是多线程编程的核心问题,需通过同步机制(互斥锁、条件变量)避免竞态条件。实战中可封装线程类,简化线程的创建、启动和管理。

2025-11-21 21:42:36 1343

原创 【Linux】进程信号

信号产生:支持终端按键、命令、函数、软件条件、硬件异常5种方式。信号状态:未决(Pending)、阻塞(Block)、递达(Delivery),阻塞会阻止信号递达。信号处理:默认、忽略、自定义捕捉(推荐sigaction函数)。关键注意:避免在信号处理函数中调用不可重入函数,共享变量需加volatile。实战场景:清理僵尸进程(SIGCHLD)、定时器(SIGALRM)、异常处理(SIGSEGV。

2025-11-21 21:36:08 1303

原创 【Linux】进程间通信

管道(匿名/命名):简单易用,适合流式数据传输,无需复杂配置。共享内存:速度最快,适合大数据量通信,需配合同步机制使用。消息队列:支持按类型通信,适合小数据量、需异步通信的场景。信号量:不传递数据,专门用于同步互斥,保护临界资源。实战开发中,管道常用于父子进程通信,共享内存+信号量常用于高并发大数据量场景,命名管道用于非亲缘进程通信。

2025-11-18 22:34:51 924

原创 【Linux】动静态库

gcc main.c -I./stdc/include -L./stdc/lib -lmystdio # -I:指定头文件搜索路径 # -L:指定库文件搜索路径静态库适合独立部署场景,动态库适合多程序共享和频繁更新的场景ELF文件是Linux程序的基础,节头表和程序头表是理解其结构的核心静态链接是编译时重定位,动态链接是运行时延迟绑定,依赖GOT/PLT优化库的查找路径和链接语法是实战中最常遇到的问题,需熟练掌握解决方法。

2025-11-18 22:29:31 988

原创 【Linux】Ext系列文件系统

本文从磁盘物理结构入手,逐步深入Ext系列文件系统的核心机制,涵盖寻址方式、块组结构、inode映射、分区挂载及软硬链接实战,揭示了Linux文件存储的底层逻辑。

2025-11-17 22:31:52 798

原创 【Linux】基础IO

open函数的返回值就是文件描述符,本质是一个非负整数(小整数),是进程与打开文件之间的关联索引。缓冲区是内存中预留的一块存储空间,用于缓存输入/输出数据,减少系统调用次数和外设访问频率。本文从文件本质出发,逐步深入Linux基础IO的核心机制,涵盖C库IO、系统调用IO、文件描述符、重定向及缓冲区原理,最终通过增强版微型Shell将知识点落地。

2025-11-17 22:23:44 952

原创 【Linux】进程控制

内建命令与外部命令的区别:内建命令由Shell进程直接执行,外部命令通过子进程执行。环境变量的继承性:子进程会继承父进程的环境变量,Shell的环境变量修改会影响其创建的子进程。命令行解析的核心:将用户输入的字符串拆分为命令名和参数数组,为exec函数做准备。本文从进程创建、终止、等待、程序替换四个核心操作入手,结合实战代码解答了初学者的常见疑问,最终通过微型Shell的实现,将所有知识点串联起来。掌握这些内容后,你已具备Linux进程控制的核心能力。

2025-11-15 22:27:27 1193

原创 【Linux】进程概念

本文从冯诺依曼体系结构出发,逐步深入Linux进程的核心机制,涵盖进程创建、状态管理、优先级调度、环境变量及虚拟地址空间等关键知识点,并结合实战代码帮助理解。掌握这些内容是Linux编程进阶的基础,也是深入理解内核工作原理的关键。

2025-11-15 22:20:09 744

原创 【C++进阶】智能指针

智能指针是现代C++编程的核心工具,正确使用可以彻底解决内存管理问题,让开发者专注于业务逻辑而非资源管理细节。

2025-11-14 23:06:34 916

原创 【C++进阶】异常

C++异常处理提供了强大的错误处理机制:- **优势**:清晰的错误信息、简化的错误传播、构造函数错误处理- **挑战**:性能开销、代码复杂度、资源管理- **推荐用法**:使用RAII、自定义异常体系、明确的异常规范

2025-11-14 23:03:49 329

原创 【C++进阶】C++11

C++11是C++语言的重大更新,距离上一个标准C++03已有8年之久。这个标准带来了约140个新特性,修复了约600个缺陷,使得C++变得更现代化、更安全、更高效。

2025-11-13 22:34:31 285

原创 【C++进阶】哈希

在C++98中,STL提供了基于红黑树的关联式容器(map、set等),查询效率为O(log₂N)。但当数据量非常大时,这种对数级别的时间复杂度仍然不够理想。C++11引入了unordered系列容器,通过哈希表实现,平均情况下查询效率达到O(1)。

2025-11-13 22:31:54 946

原创 【C++进阶】map和set

在C++ STL中,容器分为两大类:序列式容器:vector、list、deque、forward_list等,底层为线性序列结构,存储元素本身关联式容器:map、set、multimap、multiset等,存储键值对,数据检索效率更高

2025-11-12 22:13:50 1012

原创 【C++进阶】二叉树进阶

二叉搜索树(BST)又称二叉排序树或二叉查找树

2025-11-12 22:03:30 903

原创 【C++进阶】C++中的多态

多态(Polymorphism)是面向对象编程的三大特性之一(另外两个是封装和继承)。通俗来说,多态就是多种形态,具体来说就是完成某个行为时,不同的对象去完成会产生不同的状态。

2025-11-11 22:29:05 811

原创 【C++进阶】C++中的继承

继承是面向对象程序设计中最核心的机制之一,它允许我们在**保持原有类特性的基础上进行扩展**,增加新的功能,从而产生新的类(派生类)。

2025-11-11 22:25:17 1059

原创 wsl2使用systemctl命令方法

wsl2使用systemctl命令方法。每次进入wsl2时出现wsl: Unknown key等的提示信息。

2025-07-02 09:09:56 692

原创 将Windows11下的Ubuntu应用移动到其他盘

在cmd(命令提示符)中输入:进入系统设置->点击“应用”->点击“安装的应用”->找到“Ubuntu”->点击“更多选项”->点击“修改”->点击“移动”

2025-05-27 22:03:11 259

原创 算法040(必备)——N皇后问题

研究的是如何将n个皇后放置在n × n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回不同的解决方案的数量。

2024-08-16 20:34:21 499

原创 算法038(必备)——常见经典递归过程解析

将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构。3.字符串里面可能有重复字符,但是返回的子序列不能有重复的子序列,比如"aab"的子序列只有"","a","aa","aab","ab","b",不能存在2个相同的"ab"1.子序列: 指一个字符串删掉部分字符(也可以不删)形成的字符串,可以是不连续的,比如"abcde"的子序列可以有"ace","ad"等等。返回的解集中,子集可以按。

2024-08-16 15:18:52 1155

原创 算法039(必备)——嵌套类问题的递归解题套路

返回所有原子的数量,格式为:第一个(按字典序)原子的名字,跟着它的数量(如果数量大于 1),然后是第二个原子的名字(按字典序),跟着它的数量(如果数量大于 1),以此类推。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。如果数量大于 1,原子后会跟着数字表示原子的数量。原子总是以一个大写字母开始,接着跟随 0 个或任意个小写字母,表示原子的名字。遍历完后,注意可能的尾部原子遗漏问题(遍历过程中,需要遇到字母才会更新容器)此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。

2024-08-16 09:11:15 893

原创 算法018(入门)——二叉树的三种非递归遍历

结合前序遍历的性质(头左右)可知,需要容器存储已经遍历过的节点以便于找到后面的节点,并结合遍历的顺序可知需要不断记录左再遍历左的左。而这一特征与栈的后进先出(接收左后,先加入右再加入左,一直保持左后进先出)的性质一致。分析前序遍历的方式,走完头再遍历左右(头弹出再进右左);,需要容器存储已经遍历过的节点以便于找到后面的节点,而栈的性质(后进先出)正好满足这一特点。结合前序遍历的顺序(头左右),将其改为头右左后将vec反转。结合前序遍历的性质(左头右)可知,需要不断找到。后序遍历顺序:左右头;

2024-08-14 14:33:38 442 1

原创 算法016(入门)——双端队列

设计实现双端队列。实现ktruefalsetruefalsetruefalsetruefalse-1-1truefalsetruefalse。

2024-08-14 08:15:10 163

原创 算法015(入门)——最小栈

设计一个支持pushpoptop操作,并能在常数时间内检索到最小元素的栈。实现MinStackMinStack()void pop()int top()

2024-08-14 07:58:25 141

原创 算法014(入门)——栈和队列的相互实现

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty。

2024-08-13 20:47:32 459

原创 算法012(入门)——划分链表

给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有x的节点都出现在x的节点之前。你应当两个分区中每个节点的初始相对位置。

2024-08-13 20:00:18 265

原创 算法011(必备)——两个链表相加

给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2024-08-13 17:35:40 358

原创 算法010(必备)——合并两个有序链表

将两个升序链表合并为一个新的链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

2024-08-13 17:27:01 190

原创 算法036(必备)二叉树高频题目——上

给你二叉树的根节点root,返回其节点值的。(即逐层地,从左到右访问所有节点)。

2024-08-13 14:54:33 1261

原创 算法037(必备)二叉树高频题目——下

中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(若左的最大值≥root的值和右的最小值≤root的值,则返回false;改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。所以结果应当返回修剪好的二叉搜索树的新的根节点。

2024-08-11 21:09:28 757

原创 Linux知识点

创建时,文件 默认666,目录默认777,减去umask的位就是结果。umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限.more命令:分屏显示文件内容,每次只显示一屏,只允许向前浏览。top命令可以看到总体的系统运行状态和cpu的使用率。less命令:与more相似,并且支持向前,向后浏览。cat命令:将文件内容一次全输出显示在屏幕上。

2024-08-01 16:38:36 224

原创 初识C++||Day03:内联函数,auto和NULL

在使用链表和二叉树时,需要修改节点内的指针指向的内容,此时引用无法替代指针。

2024-05-15 22:15:35 423

原创 初识C++||Day02:函数重载和引用

quest1:下列代码运行结果是什么?answer:结果输出2,namespace中的函数会向namespace域中查找i,而无法向其他区域查找,其他区域定义的i会在其区域将namespace中的i覆盖。

2024-05-09 19:07:48 247

空空如也

空空如也

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

TA关注的人

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