自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 29. 关键字decltype

decltype是C++11引入的编译期类型查询机制,能够根据表达式的值类别(lvalue、xvalue、prvalue)精确推导出类型,包括引用和cv限定。C++14进一步引入了decltype(auto),用于完美转发初始化器的值类别。decltype在模板编程中常用于后置返回类型与完美转发函数,以保持类型与引用语义。使用时需注意括号的影响及与auto的细微差别,以避免意外产生引用或丢失限定符。decltype(auto)在函数模板中特别有用,可以保留函数返回值的引用语义,实现完美转发。常见陷阱包括避免

2025-05-19 08:00:00 876

原创 28. Lambda表达式

C++11引入了Lambda表达式,用于定义匿名函数,使代码更简洁灵活。Lambda表达式包含参数列表、返回值类型和函数体,常用于与STL算法结合,如自定义排序规则或打印操作。Lambda表达式的捕获列表是其核心特性,允许以值或引用的方式捕获上下文变量。常见的捕获方式包括[](不捕获)、[=](按值捕获所有)、[&](按引用捕获所有)等。编译器将Lambda表达式转换为一个类,并重载operator()来实现其功能。Lambda表达式在C++中广泛用于简化代码,提升可读性和可维护性。

2025-05-18 08:00:00 829

原创 27. 右值引用和左值引用

左值和右值是C++中的基本概念,左值可以取地址,通常位于等号左边,而右值无法取地址,通常位于等号右边。左值引用只能指向左值,而右值引用(使用&&)专门指向右值,但可以通过std::move将左值强制转换为右值,使右值引用可以指向左值。std::move本身并不移动数据,只是进行类型转换。右值引用和std::move的主要应用场景是实现移动语义,避免深拷贝,从而提升性能。例如,在STL容器中,移动构造函数和移动赋值运算符重载函数通过右值引用实现,避免了不必要的拷贝操作。在实际编程中,建议在需要拷贝且被拷贝者之

2025-05-17 03:49:06 1161

原创 B 树插入的两种分裂

B树是一种多路平衡搜索树,其节点可以包含多个键值,使其相比二叉树更“矮胖”,从而提升插入效率。插入时,若目标节点已满(键值数达到2t-1),需进行节点分裂以维持B树性质。分裂操作有两种方式:自顶向下和自底向上。自顶向下插入在发现子节点已满时提前分裂,避免递归回溯,适用于工程实践;自底向上插入在插入完成后再回溯处理分裂,实现简单,常用于教学场景。自顶向下插入的核心流程包括从根节点向下查找插入位置,若遇到满子节点则先分裂,将中间键值提升到父节点,并继续向下插入直至叶子节点。代码实现中,B树节点类(BTreeNo

2025-05-14 20:00:00 359

原创 磁盘存储链式的 B 树与 B+ 树

每个节点最多有 m 个子节点,m ≥ 3每个非叶子节点最少有 ⌈m/2⌉ 个子节点每个节点中存储k个 key,满足:k = 子节点数 - 1所有叶子节点在同一层(平衡性节点 key 保持升序排列。

2025-05-13 20:00:00 914

原创 分析红黑树工程实用的特点

红黑树是一种自平衡二叉搜索树,广泛应用于工程实践中,特别是在需要高效插入、删除和有序遍历的场景中。其核心优势包括:最坏情况下的时间复杂度受控(O(log n))、插入和删除效率优于AVL树、支持懒平衡机制,适合高频增删的系统。相较于其他数据结构,红黑树在有序性和查找效率上表现优异,尽管在并发支持上不如跳表,但在系统底层和内核应用中更具优势。典型应用包括Linux的CFS调度器和内存管理(VMAs),以及Java的TreeMap和C++的std::map。工程实践中,红黑树适合高频增删和有序遍历的场景,但在大

2025-05-12 22:21:15 1286

原创 红黑树的线程安全的做法

红黑树在并发场景下必须加锁推荐使用 C++17 提供的实现读写分离如果需要极致性能,需要进一步研究无锁算法(例如 epoch-based reclamation)

2025-05-11 08:00:00 274

原创 红黑树删除的实现与四种情况的证明

int val;删除是红黑树最复杂操作,逻辑较多但结构稳定建议多画图分析每种情况自己实现一棵树,从插入到删除,打印中序遍历验证。

2025-05-10 23:00:00 742

原创 红黑树插入的三种情况与修复原理和证明

插入后看红红,叔叔红就上染色,叔叔黑看方向,先内变外再右抽。

2025-05-10 08:00:00 492

原创 手撕红黑树的 左旋 与 右旋

可能会破坏其五条性质,比如高度不平衡或连续红节点。来“调整树形结构”,保持平衡。为了恢复红黑性质,我们采用。

2025-05-09 23:00:00 648

原创 红黑树的数学证明与推导

这是你理解红黑树为什么能做到“自平衡”的关键部分,也是后续手撕实现的理论基础。

2025-05-09 08:00:00 519

原创 红黑树的应用场景 —— 进程调度 CFS 与内存管理

CFS 会把每个可运行进程放入红黑树中,key 是进程的“虚拟运行时间 vruntime”,值是指向进程控制块(task_struct)的指针。为了提高查找效率,Linux 使用红黑树来辅助管理。CFS 是 Linux 的默认调度器(从 2.6.23 起),它使用红黑树维护就绪队列。每次调度器都从红黑树中找出 vruntime 最小的进程运行 —— 实现了“完全公平”。查找“某个地址属于哪个区间”,在红黑树中通过地址作为 key 可以高效进行。插入删除相对简单,平衡性足够,速度快,适合系统场景。

2025-05-08 23:00:00 533

原创 随处可见的红黑树

红黑树(Red-Black Tree)是一种自平衡的二叉搜索树(BST),它通过颜色规则在插入和删除时维持平衡,最坏情况下的高度是O(log n)。

2025-05-08 14:22:18 560

原创 26.C++中的左值和右值是什么?++i是左值还是右值,++i和i++那个效率更高?

但对于自定义类型(如迭代器),),现代编译器可能优化掉。: 对于基本类型(如。

2025-05-08 01:38:43 591

原创 25.描述一下面向过程和面向对象?

【代码】25.描述一下面向过程和面向对象?

2025-05-08 01:38:10 505

原创 27.介绍一下vector、list的底层实现原理和优缺点?

访问第 i 个元素需要遍历链表,时间复杂度 O(n)。:节点分散存储,缓存局部性差(CPU缓存不友好)。直接计算地址,访问极快(CPU缓存友好)。:扩容时需要拷贝所有元素,可能引发性能抖动。指针(64位系统每个指针占 8 字节)。需要移动元素,时间复杂度 O(n)。只需调整指针,时间复杂度 O(1)。:动态增删节点,不会发生内存拷贝。:无额外指针开销,存储密度高。在大多数情况下是 O(1)。(例如扩容后删除大量元素)。

2025-05-08 01:37:09 857

原创 24.多线程为什么会发生死锁,死锁是什么?死锁产生的条件,如何解决死锁?

某些场景(如短期运行程序)可接受死锁,直接重启程序(如开发调试阶段)。,导致所有线程都无法继续执行,程序卡死。死锁的发生必须同时满足以下四个条件,

2025-05-03 05:00:00 489

原创 23.父类的构造函数和析构函数是否能为虚函数?这样操作导致的结果?

派生类部分未析构,导致资源泄漏。

2025-05-02 08:00:00 548

原创 22.类的声明周期?

资源管理(如文件句柄、锁)应与对象生命周期绑定,构造时获取资源,析构时释放。: 若析构函数可能抛异常,需捕获并处理,否则程序可能终止(如栈展开时)。

2025-05-01 08:00:00 427

原创 21. socket中的多路复用,及其优缺点,epoll的水平和边缘触发模式?

当某个FD就绪(可读/可写/异常)时通知程序处理,避免阻塞等待。的技术,核心是通过系统调用。

2025-04-30 08:00:00 1545

原创 20. 进程之间的通信方式有哪些?

单向通信,父子进程间使用(匿名管道),或通过文件系统(命名管道)。

2025-04-29 08:00:00 331

原创 18.class和struct的区别?

语法区别:仅默认访问权限和继承方式不同。设计意图用struct强调数据公开(如坐标点、配置参数)。用class强调数据封装(如银行账户、网络连接)。代码一致性:团队应统一约定使用风格。

2025-04-28 08:00:00 589

原创 19.内存对齐是什么?为什么要进行内存对齐?内存对齐有什么好处?

内存对齐通过强制数据地址满足特定倍数要求,优化CPU访问效率并兼容硬件限制。其核心价值在于平衡存储空间与运行时性能,是底层编程和高性能计算的关键优化点。

2025-04-28 08:00:00 513

原创 17.原子操作是什么?

硬件原子指令(如x86的LOCK前缀、ARM的缓存一致性协议(如MESI)编译器与操作系统的协作理解原子操作是掌握多线程编程、无锁编程和同步机制(如锁、信号量)的基础。

2025-04-27 08:00:00 388

原创 什么是代码仓库?有什么作用呢?

代码仓库(Code Repository)是用于存储、管理和跟踪项目代码变更的系统化存储空间。它不仅是存放源代码的地方,更是一个完整的版本控制生态系统,记录着每一次代码修改的历史轨迹。完整记录所有代码变更历史支持多人并行协作开发提供版本回溯能力管理不同版本的软件发布代码仓库已从简单的版本控制工具发展为现代软件开发的神经中枢。它不仅是代码的存储库,更是团队协作、质量保障、项目管理和持续交付的核心平台。

2025-04-27 05:34:56 1035

原创 16.锁的底层原理是什么?

锁的底层实现是硬件原子指令 + 操作系统调度 + 内存模型硬件提供原子操作保证互斥;操作系统管理线程阻塞与唤醒;内存屏障确保多核缓存一致性。理解锁的底层原理有助于避免死锁、优化高并发场景性能。

2025-04-26 08:00:00 974

原创 程序员需要知道的代码仓库github,giteeg,gitcode,gitlab你认识那些?

**全球最大的开发者社区**:用户基数庞大,开源项目丰富,适合国际协作。**完善的生态工具**:集成 CI/CD(GitHub Actions)、代码扫描、项目管理(Projects)、Pages 静态托管、包管理(Packages)等功能。

2025-04-25 17:34:18 1304

原创 15.程序的运行步骤

【代码】15.程序的运行步骤。

2025-04-25 15:20:34 725

原创 13-14,指针空间清理,`#define`和`const`的区别。

系统通过内存分配时隐藏的元数据(如大小、元素数量)来确定释放空间的大小。这种机制依赖于编译器和内存分配器的实现,但核心原理是统一的:元数据存储在用户不可见的区域,释放时通过指针偏移读取。理解这一点有助于避免内存泄漏和悬空指针问题,同时为手动内存管理提供底层逻辑支持。

2025-03-26 11:47:34 729

原创 10-12. 深浅拷贝,智能指针,弱指针计数吗?以及malloc内存分配方式?

方式拷贝行为是否有二次释放问题是否独立内存浅拷贝仅复制指针地址可能会有共享同一块内存深拷贝复制指针指向的内容不会各自独立智能指针共享或独立管理资源不会取决于指针类型不会增加对象的引用计数,但会维护一个弱引用计数。控制块中存储了强引用计数和弱引用计数,控制块通常是在第一个创建时分配的。的主要作用是解决的循环引用问题,并且可以通过lock()方法临时获取一个来访问对象。

2025-03-17 14:03:41 385

原创 3-9 final、虚函数、智能指针、匿名函数、右值引用,左值引用和指针。

每个对象在内存中会包含一个指向虚函数表的指针(vptr)。当通过基类指针或引用调用虚函数时,程序通过vptr找到虚函数表,再根据函数在表中的偏移量调用对应的函数。

2025-03-12 01:57:14 929

原创 2. 多态的实现原理(实现方式)是什么?以及多态的优点(特点)?

多态是C++面向对象设计的核心特性,通过虚函数表和动态绑定实现运行时灵活性,显著提升代码的可维护性、扩展性和抽象能力。在面试中,可结合具体场景(如游戏开发、图形渲染)说明其实际应用价值。

2025-03-11 13:08:52 391

原创 c++八股文理解篇

由于本人即将毕业,但是知识不是很牢固,所以出一个系列的文章用于复习,也供大家参考!如果需要面试篇:请参考。

2025-03-10 12:26:50 468

原创 frp(最新版本toml)

frp是一个简单高效的内网穿透工具。但是我在安装使用frp来内穿透我自己的家用服务器的时候,出现了大量的问题,比如格式不对,连接拒绝等等错误,导致我连续弄了好几天才搞明白。所以我出一集我自己理解的最新版本的(相对于.ini的文件).toml的内穿透教程。

2025-03-10 02:32:00 1264 1

俄罗斯方块.md

俄罗斯方块.md

2022-11-09

表白网站.xmind

表白网站.xmind

2022-11-08

空空如也

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

TA关注的人

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