自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Liunx】进程地址空间和页表基本概念

本文通过代码实验验证了进程内存空间布局,重点分析了进程地址空间与物理内存的关系。实验结果显示:1) 父子进程共享相同虚拟地址但内容不同,说明操作系统使用虚拟地址管理内存;2) 通过打印变量地址验证了内存布局(代码区、全局变量区、堆栈区等)和生长方向;3) 静态变量存储在全局数据区。文章进一步解释了进程地址空间的本质是内核数据结构(mm_struct),页表实现虚拟地址到物理地址的映射,并具有访问控制功能。这种机制带来三大优势:统一内存视角、防止越界访问、解耦进程与内存管理。最后补充了惰性加载机制如何支持大程

2025-12-18 17:52:14 638

原创 【Linux】环境变量

本文介绍了Linux环境变量的基本概念和常见用途。环境变量是操作系统运行环境的重要参数,具有全局特性,可通过env命令查看。重点讲解了PATH和HOME两个核心变量,以及如何通过getenv函数获取环境变量值。同时阐述了main函数命令行参数和环境变量表的关系,说明子进程会继承父进程的环境变量。还区分了环境变量与本地变量的差异,以及内建命令与常规命令的执行机制差异。通过export和unset命令可以创建或删除环境变量,实现变量类型的相互转换。

2025-12-18 17:48:00 578

原创 【算法】深度优先遍历/搜索(递归、回溯、剪枝)

本文系统讲解了递归算法的核心概念与应用技巧。首先阐述了递归的本质是主问题分解为相同结构的子问题,并通过函数自我调用来解决。其次详细介绍了递归设计方法:分解问题、明确参数、设计函数头和函数体,并强调信任递归黑盒和设置终止条件的重要性。通过汉诺塔、链表合并、排列组合等经典例题,展示了递归在树形结构和线性结构中的不同应用场景。同时讲解了回溯和剪枝的优化技巧,以及记忆化搜索如何避免重复计算。最后以数独、N皇后等问题为例,演示了递归在复杂搜索问题中的实际应用,为算法学习提供了清晰的思路框架。

2025-12-09 14:05:09 1024

原创 【C++】IO流

本文摘要:文章系统介绍了C/C++中的输入输出机制。在C语言部分,重点讲解了scanf()和printf()函数的使用方法及输入输出缓冲区的作用。C++部分详细阐述了流的概念及其特性,分析了标准IO流(cin/cout等)的工作原理和使用注意事项,包括类型转换和循环判断机制。同时介绍了文件IO流的操作流程,通过示例展示了二进制文件和文本文件的读写方法,并说明了C++流对内置类型和自定义类型的统一处理优势。文章内容由浅入深,涵盖了从基础概念到实际应用的关键知识点。

2025-11-29 15:41:52 1028

原创 【C++】类型转换

C++类型转换机制解析 C++提供了两种类型转换方式:隐式转换(编译器自动完成)和显式强制转换。传统C风格强制转换存在可读性差、安全性低等问题。C++引入了四种新的类型转换操作符:static_cast用于相关类型转换,reinterpret_cast用于不相关类型的位模式重解释,const_cast用于去除const属性,dynamic_cast用于安全的向下转型(需父类含虚函数)。这些新转换方式提高了代码可读性和安全性,能有效避免越界访问等潜在问题。特别是dynamic_cast会在转换前进行检查,失败

2025-11-24 16:25:10 540

原创 【C++】特殊类设计

摘要:本文介绍了5种C++类的特殊设计方法:1)禁止拷贝的类(C++98/11实现);2)只能在堆上创建对象的类(通过私有构造函数或析构函数实现);3)只能在栈上创建对象的类(禁用new/delete运算符);4)不可继承的类(C++98私有构造函数或C++11 final关键字);5)单例模式(饿汉式和懒汉式实现)。每种方法都提供了代码示例和实现原理说明,涵盖了构造函数控制、运算符重载、静态成员等关键技术点,适用于不同场景下的特殊类设计需求。(149字)

2025-11-22 19:53:29 915 2

原创 【C++】智能指针

本文介绍了C++智能指针的核心概念和使用方法。首先阐述了使用智能指针的必要性,它能自动管理内存资源,避免内存泄漏问题。然后详细讲解了智能指针的RAII原理,以及auto_ptr、unique_ptr、shared_ptr等主要类型的实现机制。特别分析了shared_ptr的引用计数原理和循环引用问题,并介绍了weak_ptr的解决方案。最后讨论了定制删除器的实现方式,以处理特殊资源释放需求。智能指针通过对象生命周期自动管理资源,大大提高了C++内存管理的安全性和便利性。

2025-11-22 16:55:50 843 1

原创 【C++】C++11

C++11新特性摘要:C++11是继C++98/03后的重要更新,带来约140个新特性。主要改进包括:1) 统一的列表初始化语法,支持所有内置和自定义类型;2) 右值引用和移动语义,解决深拷贝效率问题;3) 自动类型推导(auto)和类型获取(decltype);4) lambda表达式简化匿名函数编写;5) 可变参数模板支持更灵活的泛型编程;6) 完美转发(std::forward)保持参数类型属性;7) 新增移动构造和移动赋值默认成员函数;8) 包装器(std::function)统一函数对象调用方式。

2025-11-12 16:12:42 723

原创 【数据结构】位图和布隆过滤器

本文探讨了两种高效处理海量数据查询的方法。位图法适用于无符号整数查询,通过比特位映射实现O(1)时间复杂度的存在性判断(40亿数约需512MB内存)。布隆过滤器则扩展了位图功能,通过多个哈希函数处理字符串查询,具有空间效率高的特点(m≈4.3*n),但存在误判可能。文章还介绍了哈希切分技术解决超大文件交集问题,通过哈希分片使相同元素必然落入同编号文件,实现内存友好的精确查询。三种方法分别适用于不同场景:位图处理精确数值查询,布隆过滤器适合允许误判的字符串存在性检测,哈希切分则用于超大规模数据的精确匹配。

2025-11-09 14:50:12 719

原创 【数据结构】unordered 系列容器底层结构和封装

哈希容器对比与实现原理 摘要:无序容器(unordered_set/map)基于哈希表实现,提供平均O(1)的查找性能,但元素无序且迭代器可能失效;有序容器(set/map)基于红黑树实现,保持O(logn)的稳定查找性能,元素有序且迭代器稳定。哈希冲突解决方法包括开放定址法(线性/二次探测)和链地址法(哈希桶),其中哈希桶通过链表解决冲突更高效。哈希函数设计直接影响性能,常用方法包括直接定址和除留余数法。实现时需考虑扩容机制(负载因子0.7-0.8)、模板特化处理不同键类型,以及迭代器的正确实现。封装un

2025-11-08 15:34:26 908

原创 【数据结构】红黑树

红黑树是一种平衡二叉搜索树,通过颜色标记和五条规则维护近似平衡。规则包括:根节点黑色、红色节点不连续、任意路径黑节点数相同。相比AVL树,红黑树插入删除效率更高,查找性能稍差但差别可忽略。插入操作分两步:按二叉搜索树规则插入后调整颜色和旋转。调整分情况处理,包括变色和单旋/双旋操作。红黑树验证需检查颜色规则和黑高一致性,确保最长路径不超过最短路径两倍。红黑树适合频繁修改场景,其近似平衡特性在性能和实现复杂度间取得良好平衡。

2025-11-05 13:38:55 1230

原创 【算法】宽度优先遍历

摘要:宽度优先搜索(BFS)是一种按层遍历的图搜索算法,其核心思想是通过队列实现"由近及远"的访问顺序,保证首次到达目标即为最短路径。BFS具有完备性和最优性特点,适用于无权图的最短路径、迷宫求解等问题。在树结构中可应用于层序遍历(如LeetCode 102、103题);在图结构中可处理FloodFill算法(如LeetCode 733、200题)。BFS还能有效解决边权为1的最短路径问题(如LeetCode 1926、433题)以及拓扑排序(如LeetCode 207题)。算法实现时需

2025-10-19 20:08:19 1072

原创 PS笔记12345

Photoshop常用快捷键与操作技巧总结:1. 模式转换需先转灰度再转位图;2. 基础操作包括历史记录调整(ctrl+R)、标尺辅助线(ctrl+')、网格显示(ctrl+T);3. 图层操作快捷键:Alt+左键复制、Shift+左键链接、Alt/Ctrl+Delete填充前景/背景色;4. 选区技巧:反选(Ctrl+Shift+i)、羽化设置、Ctrl+左键加载选区;5. 其他:D键恢复默认颜色、Alt+点击展开更多选项。掌握这些技巧可提升PS操作效率。

2025-10-14 21:51:35 392

原创 【数据结构】AVL树

本文介绍了AVL树的基本原理和实现细节。AVL树是一种自平衡二叉搜索树,通过维护节点的平衡因子(左右子树高度差不超过1)来保证查询效率。文章详细阐述了AVL树的节点结构、插入操作(包括四种旋转调整方式:左旋、右旋、左右旋和右左旋)以及验证方法。AVL树适合查询频繁但数据相对静态的场景,其时间复杂度为O(logN)。文中还提供了C++的模拟实现代码和调试技巧,包括验证平衡性和正确性的方法。最后给出了两个测试用例来验证AVL树的实现效果。

2025-10-12 16:07:57 1295

原创 【算法】用字符串进行高精度运算

本文介绍了两种字符串模拟数值运算的方法:1、n进制数相加:通过逆序处理字符串,逐位相加并处理进位,最后反转结果字符串。2、十进制数相乘:采用"无进位相加"策略,先逆序字符串,进行位相乘后存储到临时数组,再统一处理进位,最后反转结果字符串。两种方法都避免了低效的头插操作,通过逆序处理简化了数位对齐问题。

2025-10-09 23:26:49 278

原创 【算法】分治

本文介绍了快速排序和归并排序两种高效排序算法的原理与实现。快速排序采用分治思想,通过选取基准值将数组分割为三部分(小于、等于和大于基准值),然后递归处理左右子序列。归并排序则是将数组不断二分,先排序子数组再合并有序子数组。文章详细分析了两种算法的递归实现框架、关键步骤及优化技巧,并给出了LeetCode相关例题的解法,包括颜色分类、数组中的第K大元素、统计逆序对等问题,展示了这两种排序算法在实际问题中的应用。

2025-09-27 12:38:49 898

原创 【算法】位运算

本文总结了常见位运算操作及其应用。主要内容包括:1)7种基本位运算操作(按位与、或、异或等);2)位运算经典例题解析,包括查找数组中只出现一次的数字、判断字符串字符唯一性、寻找缺失数字等;3)多种解法对比,如位运算、哈希表、数学法等。通过位运算技巧(如提取最右侧1、位图思想等),可以高效解决相关问题,时间复杂度和空间复杂度较优。

2025-09-05 19:31:51 699

原创 【算法】前缀和

本文介绍了前缀和在数组和矩阵中的高效应用。一维前缀和通过预处理构造前缀和数组,可在O(1)时间查询任意区间和;二维前缀和通过递推公式预处理矩阵,快速计算子矩阵和。两者均需注意边界处理(下标从1开始)。时间复杂度为预处理O(N)或O(N²)加每次查询O(1),适用于频繁求和的场景。文章包含实现代码和例题,并指出前缀和思想可扩展至统计其他聚合值(如最大值、方差等),还介绍了后缀和的概念及其应用。

2025-08-27 20:00:17 805

原创 【Linux】操作系统及进程的基本概念

本文摘要: 计算机系统采用层状结构处理用户请求,以读取文件为例,展示了从用户层到硬件层的完整交互流程。冯诺依曼体系结构是计算机基础架构,包含输入单元、CPU、存储器和输出单元,强调所有设备只能通过内存交互。操作系统通过进程管理实现多任务并发,采用"先描述再组织"方式维护进程控制块(PCB)链表。进程状态包括运行(R)、睡眠(S)、磁盘休眠(D)、停止(T)和僵尸(Z)等,优先级通过PRI和nice值调整。系统调用是用户程序与内核交互的唯一安全通道,Shell和库函数提供对系统调用的封装。

2025-08-25 21:42:46 772

原创 【算法】二分查找

本文系统介绍了二分查找算法的原理与应用。算法核心是通过判断中间值性质,每次排除一半元素,将O(n)复杂度降至O(logn)。文章详细讲解了标准二分查找模板和两种常用变体模板(寻找左/右端点),重点分析了不同场景下二段性特征的划分方法。通过7个典型例题(如查找边界、平方根、旋转数组最小值等),演示了如何根据不同问题特性设计二分策略,包括终止条件、中间值计算和边界更新的处理技巧。特别强调了防溢出写法mid=left+(right-left)/2的重要性,并对比了不同模板的适用场景和注意事项。

2025-08-24 19:59:20 947

原创 【C++】异常

本文系统介绍了C++异常处理机制。首先对比了C语言通过终止程序或返回错误码的传统错误处理方式,指出其局限性。重点阐述了C++异常概念,包括throw、catch、try关键字的使用方法,详细讲解了异常的抛出捕获规则、栈展开机制和重新抛出等特性。针对异常安全问题,提出了构造函数和析构函数中的异常处理建议。文章还介绍了自定义异常体系的设计方法,说明如何通过继承构建规范的异常类层次结构,并分析了C++标准库异常体系的不足。最后从优缺点两方面进行总结:异常能清晰传递错误信息、简化错误处理流程,但也存在执行流混乱、资

2025-08-14 17:37:40 1048

原创 【C++】map和set

本文介绍了STL中关联式容器map和set的实现原理与使用方法。关联式容器通过键值对存储数据,采用红黑树作为底层结构,具有高效的数据检索能力。文章详细分析了set和map的特性:set存储唯一元素,map存储键值对;两者都支持迭代器遍历和使用insert操作。重点探讨了红黑树的实现机制,包括迭代器设计、插入操作处理,以及map和set在底层实现上的差异。通过模拟实现RBTree、set和map类,展示了关联式容器的核心功能,如元素插入、遍历和平衡维护。这些容器通过严格的有序存储和高效的查找性能,在C++编程

2025-08-14 10:24:16 1075

原创 【C++】优先级队列

本文介绍了优先级队列(priority_queue)的概念和特性。优先级队列是一种容器适配器,其首元素始终是最大值,底层通常使用vector实现堆结构。文章详细说明了优先级队列的使用方法,包括创建大堆和小堆的示例代码。重点讲解了仿函数的概念及其优势:保持状态、参数传递灵活、模板编程支持、内联优化和多态行为。最后提供了一个模拟实现的优先级队列代码框架,包含adjustup和adjustdown等关键操作来维护堆结构。该实现支持自定义容器类型和比较方式,展示了优先级队列的核心功能实现原理。

2025-08-08 14:35:19 749

原创 【C++】stack和queue

本文介绍了三种重要的容器适配器:栈(stack)、队列(queue)和双端队列(deque)。栈基于LIFO原则实现,队列基于FIFO原则实现,都通过封装底层容器(vector、deque或list)提供特定操作。deque结合了vector和list的特性,支持两端高效操作(O(1))和随机访问(O(1)),但中间操作较慢(O(n))。相比vector,deque在两端操作和内存扩容方面更优;相比list,deque在内存利用率和随机访问上更优。文章还提供了stack和queue的简化实现代码,展示了它们

2025-08-07 20:21:20 710

原创 【C++】多态

【摘要】本文深入探讨了C++中的多态机制。多态分为静态多态(函数重载)和动态多态(虚函数重写+父类指针调用)。构成多态需要满足两个条件:通过基类指针/引用调用虚函数,且派生类必须重写基类虚函数。文章详细分析了虚函数表原理,指出虚函数表存储虚函数指针,同类对象共享同一虚表。通过单继承和多继承案例,演示了虚函数表的构成方式,并介绍了override和final关键字的使用。最后讨论了菱形虚拟继承下的多态处理及二义性解决方案。多态机制实现了运行时的动态绑定,使不同对象对同一行为表现出不同形态。

2025-08-02 14:06:24 904

原创 【C++】继承

本文系统介绍了C++继承机制的核心概念与应用。重点阐述了继承的定义方式、访问权限控制、对象赋值转换规则、作用域处理、派生类默认成员函数实现等关键技术要点。深入分析了菱形继承问题及其虚拟继承解决方案的原理,通过虚基表指针和偏移量实现数据共享。对比了继承(is-a)与组合(has-a)的差异,指出组合在耦合度和封装性方面的优势。最后反思了C++多继承带来的复杂性,建议谨慎使用以避免菱形继承问题。文章通过大量代码示例展示了继承机制的实际应用,为面向对象程序设计中的代码复用提供了系统指导。

2025-07-27 11:26:37 771

原创 【C++】list

本文主要介绍了C++中list容器的使用和实现原理。文章首先讲解了list的构造函数、迭代器和常用操作,包括正向/反向迭代器、splice函数和remove函数的使用方法。重点分析了list迭代器失效问题,指出删除操作会导致指向被删除节点的迭代器失效,并给出了正确使用迭代器的示例代码。文章还通过对比vector容器,详细展示了list的模拟实现过程,包括节点类、迭代器类和list类的定义,涵盖了构造、析构、插入、删除等核心功能的实现细节。通过这段代码可以清晰地理解list作为双向循环链表的数据结构特点及其操

2025-07-21 18:02:13 416

原创 【C++】vector

C++ vector容器详解 vector是C++标准库中的动态数组容器,相比原生数组,它能够自动管理内存并动态调整大小。vector内部使用连续存储空间,支持随机访问,在末尾插入/删除元素效率较高(O(1)),但在中间操作效率较低(O(n))。 核心特性: 动态扩容策略:vs按1.5倍增长,g++按2倍增长 迭代器失效问题:扩容、插入、删除等操作可能导致迭代器失效 常用操作:push_back/pop_back、insert/erase、sort排序等 模拟实现要点:三个指针标记存储空间(_start/_

2025-07-18 09:42:06 2672

原创 【C++】string

本文详细介绍了C++中string类的使用方法和实现原理,提供了完整的string类模拟实现代码

2025-07-16 14:46:41 994

原创 【C++】迭代器

C++迭代器类型及实现机制概述 摘要:C++迭代器分为五类:输入迭代器(只读单向)、输出迭代器(只写单向)、前向迭代器(可读写多次遍历)、双向迭代器(支持前后移动)和随机访问迭代器(支持任意跳转)。高级别迭代器可替代低级别使用。迭代器实现上,连续内存容器(如vector)可能使用原生指针,而非连续容器(如list)需封装结构体重载操作符。范围for循环本质基于迭代器实现,编译时会转换为标准迭代器遍历形式。反向迭代器通过封装正向迭代器实现,++操作对应正向的--操作。operator->具有递归调用特性

2025-07-16 14:41:42 354

原创 【Linux】环境基础和开发工具

如何使用 yum ,如何用 vim 编辑文本,gcc/g++ 编译器的使用,make 和 makefile ,gdb调试器,git

2025-07-03 17:01:33 1013

原创 【Linux】权限

权限管理是Linux系统安全的重要机制,合理设置权限可以有效保护系统资源。

2025-06-26 20:23:35 778

原创 【Linux】 基本指令

ls、pwd、cd等基本指令,以及一些简单说明,适合 Linux 初学者学习

2025-06-26 10:17:29 674

原创 【C++】模板

本文系统介绍了C++模板编程的核心内容,主要包括:1. 函数模板:基本语法、实例化方式(隐式/显式)、参数匹配原则及注意事项;2. 类模板:定义格式、实例化特点、成员函数定义规范;3. 非类型模板参数的使用限制;4. 模板特化机制:函数模板特化步骤、类模板全特化与偏特化;5. 模板分离编译问题及其解决方案。文章通过具体代码示例,详细解析了模板编程中的常见问题与最佳实践,如类型推断规则、显式实例化场景、特化应用等核心概念,为掌握C++泛型编程提供了全面指导。

2025-05-31 11:57:38 1023

原创 【C++】内存管理

本文介绍了C++内存管理的核心概念,主要包括: 内存区域划分:栈(局部变量)、堆(动态分配)、数据段(全局/静态变量)和代码段(常量) C++内存管理方式:new/delete操作符的使用及与malloc/free的区别 内存泄漏的危害:长期运行程序的内存泄漏会导致性能下降甚至系统崩溃 new/delete相比malloc/free的优势在于自动调用构造/析构函数、类型安全、异常处理等特性。文章通过具体示例详细说明了各内存区域的特征、new/delete的实现原理以及不同内存分配方式的适用场景。

2025-05-18 18:49:00 823

原创 【C++】类和对象

本文系统介绍了C++中类与对象的核心概念,涵盖类的定义、访问限定符、实例化、存储方式等基础内容。重点讲解了this指针原理、六大默认成员函数(构造/析构/拷贝构造等)的实现细节,以及运算符重载、const成员函数等进阶特性。文章对比了struct与class的区别,深入探讨了初始化列表、静态成员、友元等关键概念,并通过栈类等实例说明封装思想。最后介绍了内部类和匿名类的特殊用法,帮助读者全面掌握面向对象编程中的类设计技巧。

2025-05-16 20:07:18 1057

原创 【C++】入门预备知识

域、命名空间、输入输出、缺省参数、函数重载、引用、auto、内联函数

2025-04-20 00:26:04 1045

原创 【算法】排序

快速排序、希尔排序、堆排序、归并排序、插入排序、冒泡排序、选择排序

2025-04-11 20:00:34 1212

原创 【数据结构】完全二叉树叶子结点数量的计算

5. 第10层的490个节点是由第9层的 \( \lceil 490 / 2 \rceil = 245 \) 个节点生成的。2. **层数的计算错误**:在计算树的层数时,可能会混淆 \( 2^h \) 和 \( 2^h - 1 \)。4. **度为1的节点数的假设**:在验证时,可能会忽略完全二叉树中度为1的节点数最多为1的情况。3. **对于任何二叉树,度为0的节点(叶子节点)数 = 度为2的节点数 + 1**。2. **高度为h的二叉树最多有2^h - 1个节点**(即满二叉树的情况)。

2025-03-31 10:56:33 639

原创 【数据结构】二叉树

本文系统介绍了树和二叉树的基本概念、结构及操作实现方法。主要内容包括:1. 树的基本概念和表示方法,重点讲解了孩子兄弟表示法;2. 二叉树的性质、存储结构和实现,包括顺序存储和链式存储;3. 堆的概念、实现和堆排序算法;4. 二叉树的遍历方式(前序、中序、后序、层序)及实现;5. 二叉搜索树的概念和基本操作(查找、插入、删除)。文章详细讲解了各种数据结构的实现细节,并分析了相关算法的时间复杂度,为理解和应用树形数据结构提供了全面的理论基础和实践指导。

2025-03-22 10:22:37 1311

空空如也

空空如也

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

TA关注的人

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