- 博客(27)
- 收藏
- 关注
原创 线程安全——多线程中执行fork引发的问题及如何解决
POSIX 标准定义了一组 "async-signal-safe" 函数,这些函数可以安全地在。在设计程序时,应尽量避免在多线程环境中使用。,其他线程不会被复制到子进程中。,那么在子进程中应尽量只执行简单操作,并尽快调用。会替换整个进程映像,从而避免锁状态不一致的问题。线程安全函数通常使用互斥锁来保护共享资源,但在。时,操作系统会创建一个新进程,这个新进程。函数,可以注册三个回调函数,分别在。如果可能,尽量避免在多线程程序中使用。之后,这些锁的状态可能变得不一致。,或在子进程中尽快执行。
2025-09-03 15:15:00
687
原创 C++:std::move 与 std::forward 的区别
std::move 并不保证移动发生,取决于类是否实现移动构造/移动赋值。:在模板函数中保留参数的左值或右值属性转发给其他函数。左值是有固定存储位置、可以取地址、可修改的表达式。右值是没有固定存储位置、不可取地址、临时的表达式。:将左值转换为右值引用,触发移动构造/移动赋值。与引用折叠规则,根据参数类型返回正确引用。:编译期类型转换,不产生运行时开销。保证参数类型正确,否则可能转发失败。:转移资源而非拷贝,提高效率。:左值在作用域内一直存在。:保留参数左/右值属性。:可以赋值或修改内容。
2025-09-02 22:19:59
517
原创 Linux更改文件权限
在 Linux 系统中,文件权限是保障系统安全和多用户协作的基础。理解并灵活掌握文件权限的修改方法,不仅能避免误操作带来的风险,还能更高效地管理文件和目录。本文将从基础概念、常用命令、实际案例和注意事项四个方面,带你全面了解 Linux 文件权限管理。
2025-09-02 16:41:42
548
原创 C++智能指针
在 C++ 中,使用new操作符分配的动态内存,需要手动使用delete操作符进行释放。一旦在复杂的程序逻辑中忘记释放内存,就会导致内存泄漏,随着程序的运行,内存占用不断增加,最终可能使系统性能下降甚至崩溃。此外,当指针所指向的对象被释放后,如果没有及时将指针置空,就会形成悬空指针,后续对悬空指针的解引用操作将导致程序出现未定义行为。
2025-05-03 22:01:56
1263
原创 MySQL 分库分表
对于使用 MySQL 作为数据库管理系统的应用来说,当数据量达到一定规模时,单库单表的架构会面临性能瓶颈,如查询缓慢、写入性能下降等问题。为了解决这些问题,可以使用分库分表技术。
2025-05-03 17:05:28
1016
1
原创 IP 地址和 MAC 地址是如何转换的
在计算机网络的世界里,IP 地址和 MAC 地址就像是网络设备的两个重要 “身份证”,各自承担着不同的职责。IP 地址基于网络层,用于在复杂的网络环境中定位设备;MAC 地址则是固化在网卡上的物理地址,是设备的硬件标识。那么,这两种地址之间是如何实现转换的呢?答案就藏在 ARP 协议(地址解析协议,Address Resolution Protocol)中。
2025-04-30 16:54:42
2188
原创 MySQL 主从复制
数据的高可用性、读写分离以及数据备份是至关重要的需求。MySQL 作为一款广泛使用的开源关系型数据库,其主从复制功能为解决这些问题提供了有效的方案。本文将详细介绍 MySQL 主从复制的原理、搭建步骤以及实际应用。
2025-04-28 22:51:08
1043
2
原创 深入剖析二叉树家族:二叉树、平衡二叉树、满二叉树与搜索二叉树
二叉树是一种树形数据结构,其每个节点最多拥有两个子节点,分别称作左子节点和右子节点。二叉树可以为空,仅含一个根节点,或者由根节点和左右子树构成,且左右子树同样为二叉树。平衡二叉树,即 AVL 树,是一种自平衡的二叉搜索树。在 AVL 树中,每个节点的左右子树的高度差的绝对值不超过 1,且左右子树也都是平衡二叉树。满二叉树是一种特殊的二叉树,其中每个内部节点(非叶子节点)都有两个子节点,并且所有叶子节点都处于同一层。
2025-04-28 16:50:54
512
原创 单链表常见操作的实现与解析
通过上述代码,我们实现了单链表的就地逆置、删除倒数第k个节点、检测链表是否有环以及检测两个链表是否相交等常见操作。这些操作都可以在 \(O(n)\) 的时间复杂度内完成。
2025-04-27 22:37:30
556
原创 MySQL 慢 SQL 优化实战指南
在企业级应用开发中,MySQL 作为最常用的关系型数据库之一,其性能表现直接影响整个系统的响应速度和用户体验。当业务规模不断扩大,数据量呈指数级增长时,慢 SQL 问题就像一颗 “定时炸弹”,随时可能引发系统性能瓶颈。本文将深入探讨 MySQL 慢 SQL 的优化策略,帮助你快速定位和解决性能问题。
2025-04-26 14:10:45
1642
原创 力扣hot100:买卖股票的最佳时机
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。最大总利润为 4。
2025-04-24 20:56:12
431
原创 C++核心特性解析
本文将带您了解现代C++(C++11/14/17/20)的核心特性,并通过实例展示如何利用这些特性编写更高效、更安全的代码。
2025-04-23 20:39:25
1455
原创 C++构造函数
一个构造函数接受一个不同于其类类型的形参,可以将它的形参转换为类的一个对象。当一个类没有构造函数时,如果满足下列四个条件,则会默认生成构造函数。函数的参数是类的对象,当函数被调用时,类的复制构造函数将被调用。函数的返回值是类的对象,当函数返回时,类的复制构造函数将被调用。用移动(移动语义)而不是深拷贝的方式初始化含有指针成员的类对象。当该类含有一个类类型的成员变量,且该类型含有默认构造函数。当该类含有一个类类型的成员变量,且该类型含有拷贝构造函数。用旧的对象初始化一个新的对象,会调用拷贝构造函数。
2025-04-21 20:08:35
254
原创 《深入剖析单例模式:饿汉与懒汉的原理、实现及应用》
一个类不管创建多少次对象, 永远只能得到该类型一个对象的实例。常用到的场景;日志模块,数据库模块步骤;1;构造函数私有化,拷贝构造函数和赋值重载函数都要delete掉2;提供一个唯一的实例化对象,(静态成员函数)3;定义一个可以获取唯一实例对象的静态成员方法。
2025-03-31 20:37:54
487
原创 五大算法之分治算法
规模为n的原问题的解无法直接求出,进行问题的缩减,划分子问题(子问题相互独立,和原问题的解的性质相同,只是问题规模缩小了)如果子问题的规模仍然不够小,再进行子问题的划分,如此递归下去,直到问题的解小到已知或者很容易求解,将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。基准数所在位置之前的数字都比基准数小,后面的数字都比基准数大,用每次返回的基准数的位置判断找第k大/小的元素,不用排序。4,原问题所分解出的子问题是相互独立的,子问题之间不包含公共的子问题。
2025-03-30 22:38:14
392
原创 力扣;哈希表
使用哈希表,将字符串里的字符进行排序生成一个新的字符串储存在哈希表的first中,将原字符串中的位置储存到哈希表的second中,定义一个结果 遍历哈希表,将哈希表中的second放入这个结果中,并返回结果。前缀和表示数组中从起始位置到当前位置元素的和,例如;是否在哈希表中,如果存在,说明存在以当前位置结尾的子数组和等于。遍历数组,计算从数组开始到当前位置的前缀和。,并记录每个前缀和出现的次数。是由重新排列源单词的所有字母得到的一个新单词。子数组是数组中元素的连续非空序列。,将其出现的次数累加到结果中。
2025-03-18 16:12:31
732
原创 C/C++ 基础:sizeof、strlen、指针大小与静态元素作用
5,在 C++ 里,类可以有静态成员函数。1,C++中的静态成员变量需要在类外定义,类的静态成员变量类中的所有对象都可以共享,多个对象能够访问和修改同一个对象,因此可以进行数据共享。3,函数里的静态变量在函数首次调用时初始化,之后每次调用函数时不会再次初始化,而是保留上一次调用结束时的值,有助于保持函数状态信息。函数内部的静态变量在函数首次调用时被初始化,之后每次调用函数时不会再次初始化,而是保留上一次调用结束时的值。4,静态变量在程序的整个生命周期内只分配一次内存,节省内存开销,程序执行效率高。
2025-03-17 20:14:35
440
原创 深入剖析 MySQL:存储引擎、索引及执行计划
用于排序操作:由于 B + 树索引的叶子节点是有序的,所以在进行排序操作时,如果排序字段上有 B + 树索引,可以直接利用索引的有序性来实现快速排序,避免额外的排序操作。可存储大量数据:B + 树的节点可以存储多个键值和指针,能够有效地存储大量数据,并且通过多层索引结构,可以快速定位到所需数据,减少磁盘 I/O 操作。数据量较小且更新频繁的表:对于数据量较小的表,哈希索引的空间占用较小,而且在数据更新时,哈希索引的维护成本相对较低。索引可以提高查询的效率,但是过多的索引会导致CPU的使用率居高不下,
2025-03-16 21:54:34
1072
原创 数据结构必备:深度剖析八大经典排序算法
原理:将前面的数据看作已经排序完成的有序数据,将后面的数据插入前面数据中首个小于等于它自身的位置之后,重复上述过程直到数据有序。原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。然后,从最低位开始,依次进行一次排序。原理:选择一个合适的基准数,把小于基准数的元素调整到基准数的左边,把大于基准数的数字调整到基准数的右边。原理:通过相邻元素之间的比较和交换,将最大(小)的元素逐步 “冒泡” 到序列的末尾。
2025-03-08 15:08:00
1361
原创 解锁内存池:从原理到实战的深度剖析
通过这些测试,可以比较自定义内存池和标准库内存管理函数在不同场景(单线程、多线程,操作系统)下的性能差异,上述内存池的方案并不完美,用的伙伴系统虽能减少外部碎片,但对于非 2 的幂次方大小内存块的频繁分配和释放,易产生内部碎片,导致内存利用率不高。内存池是一种内存管理方法,用于高效地分配和回收内存。在传统的内存分配中我们经常使用操作系统提供的malloc()/new()来动态分配内存,每次分配和释放内存都需要与操作系统进行交互,产生一定的开销,在频繁的分配和释放过程中会产生内存碎片,降低内存的使用效率。
2025-03-04 12:12:35
1115
原创 用Lex和Bison实现简单的计算器
运用Lex和Bison实现一个简单的命令行计算器,支持基本的四则运算(加、减、乘、除),并允许使用括号来改变运算优先级。用户可以在命令行输入一个算术表达式,程序会计算该表达式的值并输出结果。打开终端,输入以下命令来安装 Bison(通常同时也会安装 Flex,它是 Lex 的 GNU 版本)
2025-03-03 12:17:16
332
原创 编译原理简单词法分析
Flex 是一个用于生成词法分析器的工具,在大多数 Linux 发行版中,可以使用包管理器进行安装。运行生成的可执行文件,并输入需要进行词法分析的文本。可以直接在终端中输入文本,输入完成后按。)编译生成的 C 文件,生成可执行文件。文件转换为 C 代码。(在 Windows 上按。将上述代码保存为一个以。为扩展名的文件,例如。使用 Flex 工具将。使用 C 编译器(如。
2025-02-25 21:52:36
265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅