自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shared_ptr创建方式以及循环引用问题

shared_ptr 是 C++ 标准库提供的智能指针,用于管理动态分配的对象,通过引用计数实现资源的自动释放。它是现代 C++ 中避免内存泄漏的核心工具之一。

2025-07-20 19:29:27 639

原创 dynamic_cast的实现原理

dynamic_cast 是 C++ 中用于在继承层次间进行安全向下转型(downcasting)或交叉转型(crosscasting)的运算符,其核心原理基于运行时类型信息(RTTI)和虚函数表(VTable)。

2025-07-20 17:47:35 256

原创 decltype是什么,什么作用?

当类型涉及复杂的成员指针时,用decltype自动推导int age;// ptr 指向 Person::age,类型是 int Person::*// 1. 访问对象的成员// 等价于 p.age(通过对象访问)// 等价于 p.age(通过指针访问)// 2. 修改对象的成员// 等价于 p.age = 21;

2025-07-18 18:55:17 250

原创 malloc如何分配内存?

malloc 是 “中间人”,通过 brk 和 mmap 两种系统调用实现内存分配,同时管理空闲块以减少系统调用开销。brk 负责堆的连续扩容,适合小内存;mmap 负责独立大内存块,释放更彻底。两者配合让 malloc 兼顾效率与灵活性,满足不同场景的内存需求。

2025-07-18 13:13:07 680

原创 模拟C++简易配置系统(模板类 + 全局管理)

是核心接口,确保所有配置都能转为字符串(方便存储)和从字符串恢复。修改值后,所有获取该配置的地方都会拿到新值(全局唯一)。:全局管理所有配置,负责创建、查找和维护配置的唯一性。:提供统一接口,让不同类型的配置能被全局存储和管理。统一管理所有配置对象的生命周期。将基类指针转为具体类型指针(如。),确保操作的是正确类型的配置(:存储具体类型的配置值(如。),实现类型安全的读写。),丢失了具体类型信息。

2025-07-15 16:03:00 294

原创 CMake是什么,如何使用?

生成平台特定的构建文件(如 Linux 的 Makefile、Windows 的 Visual Studio 项目),无需为不同平台编写不同的构建脚本。特别是大型项目,手动维护 Makefile 非常繁琐。同一套 CMakeLists.txt 可以在 Linux、Windows、macOS 等平台生成对应构建文件。支持子目录、子项目,方便组织大型项目。

2025-07-13 13:55:59 859

原创 C++实习面试题

因为解引用空指针,会触发未定义行为 int a、int b 只是声明指针参数,不算解引用,不会报错 而* a(函数里操作指针指向内容时)才时解引用,会真正访问指针指向的内存。原因:C++中引用(int&)必须绑定到有效对象,nullptr是空指针常量,无法绑定到引用,编译器会直接报错。C++里面,引用时变量的"别名",必须邦绑定到"已存在的有效的对象"(不能绑定“非法内容” 指无法被引用正确绑定的、不存在或无效的实体,比如未初始化的内存、已释放的内存、空地址对应的 “内容” 等。

2025-07-10 18:23:33 898

原创 YAML:C++配置文件如使用(socket为例)?

对于包含大量参数的网络程序(如支持 SSL 的服务器、多客户端连接池),YAML 的分层结构可将配置按功能模块分组(如。对象的属性,分别存储字符串和整数类型的值。),避免代码中出现冗长的参数列表。或 Python 中的。,相当于 C++ 中的。

2025-06-28 16:18:38 719

原创 两阶段提交

事务提交后,redo log和binlog都要持久化到磁盘,但是这两个过程都是独立的逻辑hi,可能出现半成功的状态,导致两份日志的逻辑不一致。两阶段提交是为了解决(InnoDB事务日志)与(MySQL归档日志)的数据一致性,确保:事务提交后,两者要么都持久化要么都不持久化,避免因日志不全导致主从复制或数据恢复时出现不一致。

2025-06-06 18:50:41 444

原创 MySQL日志

实现事务回滚,保障事务的原子性,事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK(回滚)语句,MySQL可以利用undo log中的历史数据将数据恢复到事务开始之前的状态。实现MVCC(多版本并发控制)关键因素之一:MVCC时通过ReadVIew +undo log实现的。undo log为每条记录保存多份历史数据,MySQL在执行快照读(普通select语句)的时候,会根据事务的Read View里的信息,顺着undo log的版本链找到满足其可见性的记录。

2025-06-04 17:11:27 511

原创 可重复读和读提交是如何工作的?

可重复读隔离级别是启动事务时生成一个Read View,然后。

2025-06-03 16:41:57 1024

原创 Read View在MVCC里如何工作

了解到Read View的字段,我们需要了解聚簇索引记录的两个隐藏列。控制并发事务访问同一个记录时的行为就叫MVCC(多版本并发控制)

2025-06-03 16:01:59 567

原创 MySQL中的锁

含义:Flush Table with Read Lock的缩写,它会锁定整个数据库实例,让所有表都处于只读状态。之后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞:对数据增删改操作,比如insert,update,delete等语句;对表结构的更改操作,比如alter table,drop table等语句。

2025-06-02 17:38:06 998

原创 MySQL中的事务

InnoDB引擎通过什么技术来保证事务的这四个特性呢?

2025-06-02 13:30:25 1101

原创 B树和B+树

二叉搜索树,左子节点小于父节点发值,右子节点大于父节点的值。如果需要查找8,需要三次,而顺序查找需要6次。同样是二叉搜索树,下图的情况查找效率会很低,从而引出平衡二叉树(AVL树),平衡二叉树要求任何节点的子树高度最大差为1。平衡性确保查找的速度可以很快,避免了二叉搜索树的极端情况。

2025-06-02 11:08:13 1003

原创 MySQL中怎么看是否走了索引

explain最快:直接判断结果中的key是否为NULL。

2025-05-30 16:22:26 764

原创 索引的分类

索引的出现是为了提高数据的查询效率,就像目录一样。如果想快速的找到其中的一个知识点,在不能借助目录的情况下,会花费一段时间,同样,对于数据库的表而言,索其实就是它的"目录"。同样索引也会带来许多负面影响:创建索引和维护索引需要耗费时间,这个事件随着数据量的增加而增加:索引需要占用物理空间,不光是表需要要占用数据空间,每个索引也需要占用物理空间,当对表进行增删改查的时候也需要动态维护,这样就降低了数据的维护速度:对于数据库来说,索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说。

2025-05-30 11:53:04 722

原创 虚拟内存是什么?

是计算机系统内存管理的一种结束,用于解决物理内存不足的问题,核心原理是将部分数据从内存临时转移到硬盘(虚拟内存文件),释放内存空间供当前运行程序使用。

2025-05-29 18:56:18 1022

原创 什么是协程?用法又是什么

协程是一种,允许程序在执行过程中主动暂停和恢复,而不需要像传统线程那样依赖操作系统的调度。协程就是子程序在执行是中断并转去执行别的子程序,在适当的时候有返回来执行。这种子程序间的跳转不是函数调用,也不是多线程执行,所以省去了线程切换的开销,效率很高,并且不需要多线程间的锁机制,不会发生写冲突。

2025-05-15 19:37:30 452

原创 C++中RAII作用及应用场景

RAII即资源获取即初始化 ,是 C++ 等编程语言中管理资源、避免资源泄漏的编程惯用法。核心是把资源获取绑定于对象构造,资源释放绑定于对象析构。对象创建时获取资源(如内存分配、文件打开、锁获取等),对象生命周期内掌控资源访问使其有效,对象销毁时(超出作用域或程序结束等)自动释放资源。这样能确保资源在任何情况(包括异常)下都正确释放,简化资源管理,增强代码异常安全性与可维护性 ,像智能指针管理内存、std::lock_guard管理锁等都是其典型应用。

2025-05-06 19:09:31 330

原创 设计模式如何使用?使用场景?

也被叫做被观察对象,它是被观察的核心对象,维护着一个或多个观察者的引用,能够动态地添加、删除观察者,并且在自身状态发生改变时,负责向所有注册的观察者发出通知。

2025-03-25 20:05:38 972

原创 委托构造函数用法及如何使用?

委托构造函数是 C++ 11 引入的特性,它允许一个构造函数调用同一个类的其他构造函数。通过这种方式,可以将对象的初始化逻辑进行分离和复用,使得代码更加清晰和易于维护。

2025-03-24 19:00:24 530

原创 继承构造用法?如何使用?

继承构造是 C++11 引入的一项特性,它允许派生类(子类)直接继承基类(父类)的构造函数,而无需在派生类中显式地重新定义这些构造函数。通过继承构造,可以避免在派生类中重复编写与基类构造函数逻辑相似的代码,提高代码的复用性和简洁性。在派生类中,使用using声明来继承基类的构造函数,其语法形式为using 基类名::基类名;。这样,派生类就可以像调用自己的构造函数一样调用从基类继承来的构造函数。

2025-03-24 18:26:57 399

原创 模拟读写锁的底层实现

读写锁,由读锁和写锁两部分组成,读取资源时用读锁,修改资源时用写锁。其特性为:写独占,读共享(读优先锁)。

2025-03-18 19:36:22 276

原创 回调函数的意义与其作用场景?

回调函数是指,当特定的事件或条件发生时,被传递的函数(回调函数)会被调用执行。

2025-03-18 11:13:15 441

原创 Python中闭包与装饰器的关系?装饰器如何的使用?

简单来说,闭包是指有权访问另一个函数作用域中变量的函数。即使该外部函数已经执行完毕,其作用域内的变量也不会被销毁,而是会被闭包 “捕获” 并保留下来。形成闭包需要满足:存在嵌套函数,内部函数引用外部函数的变量,外部函数返回内部函数。是一种特殊的函数,它接收一个函数作为参数,然后返回一个新的函数,新函数会在原函数的基础上添加额外的功能。装饰器通常使用 @ 语法来简化代码,本质上是闭包的一种应用场景。

2025-03-17 14:43:35 472

原创 C++四种类型转换(解释)

可以为分为四个方面是 C++ 中的一种类型转换运算符,主要用于非多态类型的转换,在编译时进行类型检查。它可以用于基本数据类型之间的转换,以及类层次结构中的上行和下行转换(下行转换不进行运行时类型检查)。

2025-03-07 13:00:45 867

原创 动态规划之背包问题

【代码】动态规划之背包问题。

2025-03-02 20:14:00 229

原创 动态规划基本算法

明确问题的状态表示。

2025-02-08 09:54:01 906

原创 函数重写(覆盖)和函数隐藏

定义:子类重新定义父类中相同的名称,返回值和参数的虚函数,主要在继承关系中出现。函数隐藏定义:在子类中只要和父类函数名字相同不是重写,一定是函数隐藏。

2025-01-23 16:19:04 281

原创 C++虚函数

虚表指针是一个特殊的指针,存在于每个包含虚函数的类的对象中。它通常存储在对象的内存布局的起始位置,用于指向该对象所属类的虚函数表(vtable)。这个指针的主要作用是实现C++的动态绑定(也称为动态多态或运行时多态)。纯虚函数是在基类中声明的一种特殊的虚函数,它在基类中没有实现,只有函数声明,使用=0来标记。在当类中有了纯虚函数这个类也称为抽象类。

2025-01-19 18:13:17 968

原创 滑动窗口算法

滑动窗口算法是一种在计算机科学中用于解决各种子数组或子字符串问题的技术。它通过维护一个固定大小的窗口在数组或字符串上移动,从而在较短的时间内解决一些复杂的问题。滑动窗口算法的核心思想是通过一对指针(通常为左指针和右指针)来定义一个“窗口”,并在窗口内进行动态计算‌。

2025-01-18 22:19:18 607

原创 C++动态多态

利用基类指针指向不同子类对象,在运行时根据对象实际类型(是哪种动物子类)来动态调用对应的函数版本(如不同动物的发声函数)。例如可以在基类定义获取动物名字的函数,在不同子类复用这个函数框架,通过多态性实现各自具体的名字获取方式,减少代码复杂度,提高代码复用程度。当添加新的动物子类(如新增动物类型),只需创建新子类并重写相关虚函数,原调用虚函数的代码部分(如展示动物发声的函数)几乎不用修改,方便扩展系统功能。多态分为静态多态和动态多态,静态多态是在编译期间就能确定的多态,动态多态是在运行期间确定的多态。

2025-01-16 20:36:01 435

空空如也

空空如也

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

TA关注的人

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