- 博客(82)
- 收藏
- 关注
原创 从L1到L3:程序员必须掌握的CPU缓存优化实战手册
在计算机系统中,CPU高速缓存(英语:CPU Cache,在本文中简称缓存)是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。
2025-05-27 18:17:28
11251
51
原创 MySQL事务
本文介绍了数据库事务的基本概念和特性。事务是一组逻辑相关的SQL语句集合,具有原子性(全部执行或全部回滚)、隔离性(并发事务互不干扰)、持久性(提交后永久生效)和一致性(数据完整性)四个核心特性(ACID)。文章通过购票系统的并发问题案例,说明了事务的必要性。详细演示了事务的基本操作(开始、提交、回滚、保存点)和隔离级别(读未提交、读提交、可重复读、串行化),并解释了MVCC机制如何通过隐藏字段和undo日志实现事务隔离。最后指出事务隔离级别决定了select操作是读取最新数据(当前读)还是历史版本(快照读
2025-11-30 22:46:49
638
原创 MySQL索引特性
本文摘要: MySQL通过缓冲区机制提高IO效率,使用16KB的page作为基本交互单位。索引是优化查询性能的关键,包括主键、唯一、普通和全文索引四种类型。B+树因其矮胖结构、高效范围查询和更少IO次数成为MySQL首选索引结构,优于链表、二叉树和哈希等其他数据结构。InnoDB采用聚簇索引(数据与索引共存),MyISAM使用非聚簇索引。索引创建需遵循原则:频繁查询字段适合建索引,但唯一性差、更新频繁或不在where子句中的字段不宜建索引。合理使用索引可显著提升查询效率,但会降低写入性能。
2025-11-29 21:37:55
1522
4
原创 MySQL复合查询
文章摘要:本文介绍了MySQL多表查询的几种方法。首先创建了EMP员工表、DEPT部门表和SALGRADE工资等级表三张测试表,并通过示例演示了多表联合查询、自连接和子查询的应用。重点讲解了笛卡尔积、表别名、单行/多行/多列子查询的区别,以及UNION和UNION ALL合并查询的使用方法。文中提供了大量SQL查询实例,如查询员工及部门信息、自连接查询上级领导、使用IN/ALL/ANY关键字进行子查询等,帮助读者掌握复杂查询的实现技巧。
2025-11-29 20:41:44
961
2
原创 MySQL的CRUD操作(基本查询)
本文介绍了MySQL中对表数据进行增删查改(CRUD)的基本操作方法。主要内容包括:1)Create操作:通过INSERT语句实现数据插入,包括单行/多行插入、全列/指定列插入,以及处理插入冲突的更新和替换方案;2)Retrieve操作:使用SELECT语句实现数据查询,涵盖列查询、表达式计算、结果去重、WHERE条件筛选、排序和分页显示等功能;3)Update操作:通过UPDATE语句修改表中数据;4)Delete操作:使用DELETE和TRUNCATE语句删除数据,并比较了两者的区别。文章通过学生表和成
2025-11-28 19:56:54
1126
原创 MySQL表的约束
本文介绍了MySQL数据库中常见的表约束类型及其作用。主要包括:空属性约束(NOT NULL)确保关键字段不为空;默认值(DEFAULT)为常用数据提供预设值;列描述(COMMENT)说明字段含义;zerofill属性实现数字补零显示;主键(PRIMARY KEY)保证数据唯一性且不为空;自增长(AUTO_INCREMENT)实现自动编号;唯一键(UNIQUE)确保字段值不重复但可为空;外键(FOREIGN KEY)建立表间关联并维护数据一致性。这些约束通过强制规范数据输入,有效保障了数据库的完整性和业务逻
2025-11-27 18:09:10
798
原创 MySQL数据类型
本文详细介绍了MySQL中的主要数据类型,包括数值类型(tinyint、bit、float、decimal)、字符串类型(char、varchar)、日期时间类型(date、datetime、timestamp)以及枚举类型(enum、set)。重点分析了各种类型的特点和使用场景,如tinyint的有符号与无符号区别、float与decimal的精度差异、char与varchar的存储机制区别等。同时说明了enum和set类型的单选与多选特性,以及set类型的特殊查询方法。文章通过具体示例演示了各数据类型的
2025-11-27 16:54:58
1001
原创 必备技能:MySQL 库和表操作全攻略
本文介绍了MySQL数据库和表的基本操作。数据库操作包括创建(指定字符集/校验集)、删除、查看、修改(字符集/校验集)、备份与还原。其中特别说明了字符集与校验集的关系,以及校验规则对数据查询的影响。表操作部分涵盖了创建表、查看表结构、修改表(增删改字段、修改表名)和删除表等命令。文章还详细介绍了数据库备份还原的原理(通过保存历史操作语句实现),并强调了修改数据库名称只能通过删除重建实现。
2025-11-26 15:12:43
518
原创 MySQL数据库基础
操作系统一切皆文件。存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便但是我们也听过,操作系统执行原则就是先描述再组织,所以,在这个基础上,我们就需要引入数据库把数据组织起来。数据库其实就是一个网络服务,本质上来说它是一个软件集合,是为用户提供较为便捷的数据存取服务的软件集合。MySQL是数据库的一种,其中MySQL有客户端叫mysql,也有服务端mysqld。
2025-11-26 13:45:29
906
原创 C++11 现代语法入门:解锁移动语义,告别冗余拷贝(上篇)
摘要: 本文介绍了C++11引入的几个重要特性:1.统一的列表初始化语法,可使用{}初始化任意类型;2.decltype类型推导机制;3.nullptr空指针常量;4.STL新增容器和方法;5.右值引用和移动语义,通过移动构造和移动赋值减少资源拷贝;6.完美转发技术,使用万能引用和std::forward保持参数类型属性。这些特性显著提升了C++的类型安全、语法简洁性和运行效率,特别是移动语义解决了深拷贝的性能问题,完美转发实现了参数类型的精确传递。 (149字)
2025-11-15 19:38:46
894
原创 算法面试必刷:双指针8道高频例题全解析(附最优代码)
本文系统介绍了双指针算法的两种主要形式及其应用。对撞指针通过从两端向中间移动解决有序数组问题,快慢指针则用于处理环形结构或循环情况。文章以多个LeetCode题目为例,详细展示了双指针在具体问题中的应用技巧:移动零问题通过划分数组解决;复写零采用逆向处理;快乐数利用快慢指针检测循环;盛水容器问题优化为O(n)复杂度;三角形个数通过固定最长边优化;两数之和利用有序特性简化查找;三数之和和四数之和则在排序基础上结合双指针与去重策略。这些案例充分展示了双指针算法在提升效率方面的优势。
2025-11-15 18:18:48
846
原创 《C++ STL哈希容器全解析:哈希拓展位图以及布隆过滤等高阶应用》
比如:二、布隆过滤器引言:我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的? 用服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。 如何快速查找呢?大意是不同的数据结构有不同的适用场景和优缺点,你需要仔细权衡自己的需求之后妥善适用它们,布隆过滤器就是践行这句话的代表。布隆过滤器是一个 bit 向量或者说 bit 数组如果我们需
2025-11-05 20:39:24
977
1
原创 《C++哈希表技术深度解析:高效存储与检索的实现原理与优化实践》
大厂面试中,'请实现一个哈希表'是经典考题。要给出满分答案,必须掌握:哈希函数设计原则、装载因子与扩容的关系、各种冲突解决方案的优劣比较。本文不仅涵盖这些核心知识点,更会揭示面试官期待的加分项——比如如何评估哈希函数的雪崩效应,或是解释Java HashMap与C++ unordered_map的关键差异。
2025-11-05 10:00:00
648
原创 《红黑树核心机制解析:C++ STL中map/set高效实现原理与工程实践》
为解决这个问题,我们在 map 和 set 这两个容器层,分别实现了仿函数 MapKeyOfT 和 SetKeyOfT,并将它们传递给红黑树的 KeyOfT 模板参数。,无法直接判断模板参数 T 具体是单纯的键类型 K(如:set 的场景 ),还是键值对类型 pair<K, V>(如:map 的场景 )这样一颗红黑树,既能适配 set 的 “纯 key 搜索场景”,也能适配 map 的 “key/value 搜索场景”。在 SGI - STL30 版本的源代码里,map 和 set 相关的实现代码分布在。
2025-10-24 22:03:52
620
4
原创 《C++ STL核心剖析:set/map深度应用指南》
在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比如我们前两篇所学的AVL,RBTree包括后两篇学的哈希表都是关联式容器。
2025-10-24 08:00:00
1051
4
原创 《从理论到实践:红黑树的自平衡机制与C++高效实现指南》
红黑树是一种高效的自平衡二叉搜索树,通过颜色标记和旋转操作维持近似平衡。它具有五个核心性质:节点非红即黑、根节点为黑、无连续红节点、叶节点为黑、路径黑高相同。插入操作遵循BST规则,新节点默认为红色,通过检测和修复双红冲突(变色、旋转)来维持平衡。红黑树在Linux内核、STL map等系统中广泛应用,保证了O(logn)的时间复杂度。实现时需要处理三种插入情况:叔叔节点为红、为黑或不存在,通过变色和旋转调整树结构。
2025-10-18 15:27:12
909
32
原创 《C++ STL源码剖析与性能优化:基于AVL树的关联容器实现原理》
AVL树:是一种 自平衡二叉搜索树,由苏联数学家 Georgy Adelson-Velsky 和 Evgenii Landis 在 1962 年提出,其名称来源于这两位发明者的名字缩写。AVL树要么是空树,要么是满足以下性质的二叉搜索树:其左、右子树也都是 AVL 树并且左、右子树的高度差的绝对值不超过 1假如以pParent为根的子树不平衡,即pParent的平衡因子为2或者-2,分以下情况考虑。
2025-10-18 07:00:00
664
21
原创 《C++二叉引擎:STL风格搜索树实现与算法优化》
本文介绍了二叉搜索树(BST)的基本概念及其C++实现。BST是一种高效的数据结构,具有O(logn)的平均查找、插入和删除效率。文章详细讲解了BST的节点结构设计,以及插入、查找、删除和中序遍历等核心操作的实现方法,包括递归和非递归版本。特别针对删除操作,分析了三种不同情况的处理逻辑。此外,还介绍了BST的两种应用模型:K模型(纯键值)和KV模型(键值对),并提供了字典查询和统计功能的完整代码示例。通过具体实现,展示了BST在数据存储和检索方面的实用价值。
2025-10-12 17:01:34
1253
33
原创 《从虚函数表到动态类型检查:C++多态机制的实现原理与高效应用指南》
在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。public:// 纯虚函数:没有函数体,必须由派生类实现。
2025-10-12 07:00:00
820
51
原创 《穿透式理解C++继承:虚函数表、对象切片与多重继承陷阱》
继承是C++面向对象的核心,既能优雅地复用代码,也可能带来隐藏的陷阱。从基础的class B : public A到复杂的虚继承体系,每个语法细节背后都影响着对象的内存布局和运行时行为。本文将剖析继承的本质,帮助你写出更健壮的C++代码。
2025-10-09 17:50:19
1100
19
原创 《C++模板元编程进阶:非类型参数解析、typename关键字的双重语义与显式特化设计》
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。return 0;分析如下:在传统C++编程中,我们通常将函数声明放在头文件(.h)中,实现放在源文件(.cpp)中。但对于模板,这种分离会导致编译器无法实例化模板,从而产生链接错误。模板是"蓝图"而非实际代码模板实例化发生在编译阶段。
2025-10-05 22:55:19
1224
7
原创 《C++容器适配器核心技术解构:stack的底层机制与工程实践(下)》
deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1)。与vector比较,头插效率高,不需要搬移元素。与list比较,空间利用率比较高。但是deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:deque的底层结构双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上。
2025-10-05 09:00:00
655
3
原创 《C++容器适配器工程实践:从stack典型应用看适配器设计模式(上篇)》
在C++17标准下,栈(stack)和队列(queue)作为STL容器适配器,通过封装底层序列容器(默认deque)实现了严格的数据结构约束:栈遵循LIFO原则仅开放push/pop/top操作,队列遵循FIFO原则限定front/back访问。
2025-10-02 21:38:12
918
4
原创 《STL list容器终极解析:底层实现、迭代器失效与高性能应用(下)》
*--------------------定义类型别名--------------------*///1.重命名“list节点”的类型:list_node<T> ---> Node//2.重命名“list迭代器”的类型:list_iterator<T,Ref,Ptr> ---> Self/*--------------------定义成员变量--------------------*///迭代器内部存储的节点指针,指向当前位置。
2025-10-02 06:00:00
975
6
原创 《STL list容器实战指南:高效插入删除的工程实现(上)》
List也是C++标准模板库(STL)中的一种容器,它的内存存储特点与string、vector不同,它的存储不是连续的,List将元素存储在不连续的内存中,通过指针连接前一个节点和后一个节点。就是另一种vector:只是内存存储变成了不连续。
2025-09-28 12:00:00
308
11
原创 《STL vector实现原理深度解析:从内存管理到迭代器失效(模拟实现篇)》
迭代器失效:是指在 C++ 中,当容器的结构发生某些变化时,原本有效的迭代器变得不再有效,无法再正确地指向容器中的元素。迭代器失效的原理迭代器本质上是一种抽象的指针————指向容器内部元素的指针或指针封装,用于指向容器中的元素,方便对容器元素进行遍历和操作容器内部通过维护一定的数据结构来存储元素,当容器执行某些操作(如:插入、删除元素,改变容量等)时,其内部数据结构可能发生改变。例如:内存重新分配、元素位置调整等。
2025-09-26 17:52:08
1043
24
原创 《STL核心容器精要:vector特性解析与高性能应用场景(上篇)》
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的。
2025-09-26 09:00:00
1123
18
原创 《STL字符串现代实现:从UTF-8处理到写时拷贝的线程安全难题(终章)》
其实就是为了解决浅拷贝导致的问题 (析构多次,程序崩溃;一个对象的修改影响另一个对象)
2025-09-23 20:31:35
654
7
原创 《STL核心框架解析:从标准库架构到string容器实现原理》
我们首先来看,什么是stl,我们常说stl是标准模板库。其实这样不对。标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。什么意思呢?STL是标准库的一部分!当然IO流和智能指针我们后面讲,这里仅做列举。
2025-09-13 15:19:55
874
2
原创 C和C++内存管理对比优化
new的原理1.调用operator new函数申请空间2.在申请的空间上执行构造函数,完成对象的构造delete的原理1.在空间上执行析构函数,完成对象中资源的清理工作2.调用operator delete函数释放对象的空间new T[N]的原理1.调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请2.在申请的空间上执行N次构造函数delete[ ]的原理。
2025-08-19 16:04:14
1015
1
原创 类和对象(下)
现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:1. 用户先要对现实中洗衣机实体进行抽象---即在人为思想层面对洗衣机进行认识,洗衣机有什么属性,有那些功能,即对洗衣机进行抽象认知的一个过程。
2025-08-19 14:39:42
1110
原创 类和对象(中)默认成员函数
构造函数是特殊的成员函数 需要注意的是构造函数虽然名称为 构造 , 但 是构造函数的主要任务并不是开辟空间,创造对象(我们常使用的局部对象是栈帧创建时 , 空间就开好了) , 而是对象实例化时 初始化对象。构造函数的本质是要替代我们以前 Stack 和 Date 类中写的 Init 函数的功能 , 构造函数自动调用的特点就完美的替代了 Init。其特征如下:1. 函数名与类名相同。2. 无返回值。3. 对象实例化时编译器自动调用对应的构造函数。4. 构造函数可以重载。
2025-08-17 17:49:43
1076
原创 类和对象(上)
本文主要对比了C与C++的编程思想差异,重点阐述了C++面向对象的核心特性。C语言采用面向过程方式,通过函数分解问题;而C++基于对象,将问题拆分为对象间的交互。文章详细讲解了C++类的定义方式、访问限定符(public/protected/private)、封装思想、类作用域、实例化过程、对象内存模型以及this指针机制。通过栈的实现对比,展示了C++封装管理的优势:数据与操作结合、访问权限控制、隐含this传递等特性使代码更安全规范。最后指出封装本质上是一种更严格的代码管理方式,体现了C++面向对象的设
2025-08-06 17:24:17
759
1
原创 c++入门系统对比第一课(下)
本文主要介绍了C++中的几个重要特性:1.引用是变量的别名,与实体共享内存,使用时需初始化且类型匹配;2.内联函数(inline)通过代码展开提高效率,适合短小频繁调用的函数;3.auto关键字可自动推导变量类型;4.基于范围的for循环简化数组遍历;5.nullptr替代NULL解决指针空值问题。这些特性优化了代码性能与安全性,是C++区别于C的重要改进。
2025-08-06 15:33:33
650
1
原创 c++入门系统对比第一课(上)
/ 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型//2. 命名空间可以嵌套int a;int b;int c;int d;同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.h命名空间可以定义变量、函数以及类型。但是需要注意的是在定义结构体类型时,在访问时是要在 struct 后面写的。
2025-07-06 16:27:36
827
2
原创 七大排序:极简精华一看就会版
本文详细介绍了七种常见排序算法:插入排序、希尔排序、选择排序、堆排序、快速排序(包括原始hoare、挖坑法和前后指针三个版本)、归并排序。每种算法都分析了基本思想、时间复杂度(O(N^2)到O(NlogN)不等)、空间复杂度和稳定性特点,并提供代码实现。重点讨论了快速排序的优化方案,如三数取中、三路划分和内省排序(结合快排和堆排)。文章通过比较各算法性能,指出不同场景下的适用性,强调理解算法思路的重要性,为学习者提供了全面的排序算法知识体系。
2025-06-16 20:24:46
971
2
原创 一篇搞懂双向链表
本文系统讲解了链表的分类与实现。链表主要分为8种类型(222),关键维度包括:单向/双向(遍历方向)、带头/不带头(是否使用哨兵位)、循环/不循环。实际常用的是单链表(单向不带头不循环)和双链表(双向带头循环),后者实现更简单但结构复杂。重点介绍了双链表的接口实现,包括初始化、尾插/头插、尾删/头删、查找、指定位置插入/删除等核心操作,强调哨兵位简化判断的优势。通过图示和代码示例详细解析了每个操作的实现逻辑,建议结合画图理解指针操作。
2025-05-27 16:26:48
810
42
原创 链表面试题10之随机链表的复制
这篇文章讲解了如何复制带随机指针的链表。主要思路是先忽略随机指针,复制每个节点并插入原节点后面;然后处理随机指针,通过将复制节点的random指向原节点random的next来实现;最后拆分出复制链表并复原原链表。这种方法通过三次遍历完成复制:第一次复制节点,第二次复制随机指针,第三次拆分链表。时间复杂度为O(n),空间复杂度为O(1)。文章提供了详细的分步图解和完整代码实现,帮助理解这种巧妙的链表复制方法。
2025-05-26 18:43:55
496
7
原创 链表面试题9之环形链表进阶
本文讨论了如何利用双指针算法解决环形链表问题,特别是如何找到环形链表的入口节点。文章首先回顾了使用快慢指针判断链表是否为环形的基本方法,然后进一步探讨了在已知链表为环形的情况下,如何确定环的入口节点。通过数学推导,文章解释了为什么从头节点和相遇点同时出发的两个指针,以相同的步长移动,最终会在环的入口节点相遇。此外,文章还提供了相应的C语言代码实现,并分析了算法的时间复杂度和空间复杂度。最后,文章强调了理解算法思路的重要性,并鼓励读者通过实践逐步掌握这一技巧。
2025-05-20 23:10:17
6159
35
【数据库优化检索系统】基于C++与Drogon框架的检索系统设计:负载均衡与缓存策略配置管理实现(免费开源)
2025-10-08
oj上题目的讲解,这里给大家总结了一下四大排序基本语法框架
2024-11-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅