自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux系统】线程的基本概念及使用

本文深入解析Linux线程本质:线程是进程内的执行流,Linux复用task_struct模拟线程,进程是资源分配单位,线程是CPU调度单位。详细讲解pthread库的创建、等待、退出、取消、分离接口,LWP与tid区别,线程独立栈与局部存储,以及多线程编程要点。

2026-09-09 22:05:33 160

原创 【Linux系统】进程信号

本文系统讲解了Linux进程信号机制。内容涵盖信号的基本概念、产生方式,内核保存原理,信号捕捉,信号处理等。重点介绍了信号屏蔽、未决状态的操作函数,以及signal和sigaction捕获函数的使用。此外,文章还探讨了信号处理中的可重入函数、volatile关键字应用,并详细分析了SIGCHLD(17)信号在子进程回收与僵尸进程处理中的关键作用。

2026-08-29 16:56:57 246

原创 【Linux系统】进程通信

本文系统介绍了Linux进程通信(IPC)的核心机制。内容涵盖匿名管道与命名管道的原理、接口及进程池实现,深入剖析System V中 共享内存、消息队列和信号量的系统调用与特性。此外,文章还探讨了IPC在内核中的数据结构设计,揭示了ID与内核对象的映射关系,帮助读者从应用层到内核层全面理解Linux进程通信的实现原理。

2026-08-25 22:36:54 325 1

原创 VS Code连接Linux远端服务器的方法

要在Linux服务器上快速写代码,可以在Windows下借助 VS Code 的来写,但是需要先将我们的Linux服务器连接到本地的 VS Code。本文主要记录了我自己学习时连接的方法。(纯步骤)

2026-08-14 00:00:10 580 2

原创 【Linux系统】动静态库

本文详细介绍了Linux系统中库的概念、分类及使用方法。主要内容包括:1. 库的本质是编译后的.o文件集合,分为静态库(.a)和动态库(.so)两种类型,前者在编译时链接到可执行文件,后者在运行时加载;2. 静态库的制作使用ar命令打包.o文件,使用时需指定头文件路径(-I)、库路径(-L)和库名(-l);3. 动态库制作需加-fPIC选项生成位置无关代码,使用时要解决加载路径问题(四种方法);4. 深入分析了动态库的共享机制和加载原理,解释了位置无关代码的必要性;等内容。

2026-08-12 23:21:58 372 1

原创 【Linux系统】理解文件系统以及软硬连接

本文深入探讨了磁盘硬件结构、文件系统原理及软硬链接机制。主要内容包括:1. 磁盘物理结构分析:详细介绍了磁道、扇区等基本概念,以及CHS和LBA两种寻址方式。2. ext2文件系统解析:阐述了超级块、inode表、数据块等核心组件,解释了文件存储和管理的底层逻辑。3. 文件操作原理:说明了创建、删除、查找文件时系统底层的具体操作。4. 软硬链接比较:分析了软链接(独立inode)和硬链接(共享inode)的区别及各自特点。5. 内存与磁盘交互:介绍了4KB为单位的交互机制和操作系统内存管理方式。

2026-08-06 16:00:22 390

原创 【Linux系统】基础 IO

本文深入探讨了Linux文件系统的底层原理,从C语言文件IO操作到系统调用接口,再到文件描述符和缓冲区机制。主要内容包括:1. 文件操作的系统调用(open/write/close)及其与C库函数的关系;2. 文件描述符的本质是数组索引,指向内核中的文件对象;3. 重定向的实现原理是通过修改文件描述符表中的指针;4. 缓冲区的分级机制(用户缓冲区和内核缓冲区)及其刷新策略;5. 一切皆文件的设计思想源于VFS的抽象层。文章还通过实现简易C语言缓冲区代码,展示了文件系统的底层运作机制。

2026-07-31 17:00:33 229

原创 【Linux系统】进程控制

本文系统介绍了Linux进程管理相关概念和编程方法。主要内容包括:1. 进程创建:通过fork()创建子进程,创建多个进程。2. 进程终止:正常/异常退出方式,exit()与_exit()的区别,以及退出码。3. 进程等待:使用wait/waitpid回收子进程资源,阻塞与非阻塞等待。4. 进程替换:详细分析exec函数族的使用,动态加载。5. Shell实现:综合运用所学知识,实现一个简单的命令行解释器,支持基本命令和环境变量管理。文章结合代码示例,深入浅出地讲解了Linux进程管理的核心机制。

2026-07-23 15:13:12 258

原创 【Linux系统】程序地址空间(初识)

文章摘要:本文深入探讨了C/C++程序的内存空间分布和进程地址空间的概念。首先介绍了32位系统下内存的基本分布情况和验证方法。然后重点讲解了进程地址空间和虚拟地址的概念,页表的作用机制,包括写时拷贝、权限检查等功能。最后阐述了进程地址空间的重要意义:提供统一内存视图、实现内存安全检查和实现进程管理与内存管理的解耦。

2026-07-17 23:22:43 266

原创 【Linux系统】环境变量

本文摘要:本文系统介绍了Linux环境变量的概念、查看方法、获取方式、设置与取消操作,以及环境变量的继承性特点。主要内容包括:1.环境变量定义及其作用(如PATH);2.通过env、echo等命令查看环境变量;3.三种获取环境变量的编程方法(main参数、environ变量、getenv函数);4.使用export/unset设置和取消环境变量;5.验证环境变量的继承性特点;6.区分本地变量与环境变量。文中通过代码示例和命令行操作演示了环境变量的实际应用,并解释了内建命令与外部命令的区别。

2026-06-28 13:53:21 257

原创 【Linux系统】进程概念

本文系统介绍了Linux进程管理的核心概念与机制。首先阐述了进程的本质(内核PCB+代码数据)。其次详细讲解了进程标识符(PID/PPID)的查看与获取方法,以及fork系统调用的创建原理。随后分析了Linux特有的七种进程状态(R/S/D/T/t/X/Z)。最后深入探讨了进程优先级调整(nice值修改)及Linux 2.6内核的O(1)调度算法实现,包括双队列结构和位图查找机制。全文从内核视角揭示了进程管理的底层逻辑

2026-06-27 12:43:40 207 1

原创 【算法】数据结构_带权并查集

带权并查集是在普通并查集基础上为每个节点增加权值,用于表示节点间的关联信息(如距离、关系等)。文章介绍了带权并查集的基本概念,并通过距离版本的实现详细讲解了初始化、查询根节点(find)、合并(union)和查询距离(query)等核心操作。此外,文章结合两个例题(洛谷P2024食物链和P1196银河英雄传说)展示了带权并查集的实际应用,分别解决了环形关系判断和战舰队列合并问题。通过权值维护和路径压缩,带权并查集能够高效处理复杂的关系和距离查询问题。

2026-06-20 14:25:43 326 1

原创 【算法】数据结构_扩展域并查集

扩展域并查集是对普通并查集的扩展,用于处理元素间存在多种关系的问题。它通过将每个元素拆分为多个域(如朋友域、敌人域)来维护复杂关系。例如在朋友-敌人问题中,通过合并不同域来维护敌人的敌人是朋友的关系。在食物链问题中,则使用三个域(同类、捕食、被捕食)来维护三种生物关系。文章通过洛谷的两道典型例题(P1892团伙和P2024食物链)展示了扩展域并查集的具体实现和应用。

2026-06-07 18:23:00 278

原创 【算法】数据结构_并查集

本文介绍了并查集的概念、实现和应用。并查集是一种用于维护元素所属集合的数据结构,通过双亲表示法实现森林结构,支持查询、合并和判断操作。文章详细讲解了并查集的实现方法,包括初始化、查询(含路径压缩优化)、合并和判断操作,并通过洛谷的几道例题(P3367、P1551、P1596、P1955)展示了并查集的实际应用,如亲戚关系判断、连通块计数和约束条件验证。文章还提及了离散化优化技巧以处理大数据范围问题。

2026-06-06 17:18:40 507

原创 【算法】数据结构_单调队列

本文介绍了单调队列的概念及其应用,重点解决了滑动窗口中的最大值和最小值问题。单调队列是一种特殊的双端队列,存储的元素保持单调递增或递减的顺序。通过两个例题(洛谷P1886滑动窗口和P2251质量检测),演示了如何使用单调队列来求滑动窗口极值问题,并给出了相应的C++代码实现。总结指出:求最大值时使用递减队列,求最小值时使用递增队列,关键在于正确判断队尾元素的出队条件。这种方法不仅能解决滑动窗口问题,还可用于优化动态规划等场景。

2026-06-04 23:42:57 297

原创 【算法】数据结构_单调栈

本文介绍了单调栈的概念、原理及其应用。单调栈是一种具有单调性的栈结构,主要用于解决“寻找最近更大/更小元素”的问题。文章通过四种典型情况(寻找左侧/右侧最近更大/更小元素)详细讲解了单调栈的实现原理,并提供了对应的代码模板。此外,文中还通过三个具体例题(洛谷P5788、P1901和SP1805)演示了单调栈的实际应用,展示了其在解决数组相关问题中的高效性。最后,文章总结了单调栈的使用规律,帮助读者快速掌握这一数据结构的使用方法。

2026-06-04 10:24:12 703

原创 【Linux】从冯·诺依曼体系到操作系统的理解

本文从硬件和软件两个层面介绍了计算机系统的基本原理。硬件方面重点阐述了冯·诺依曼体系结构,包括其五大组成部分(输入/输出设备、存储器、运算器、控制器)及数据必须通过内存流动的设计原理,并以QQ聊天为例说明了数据流动过程。软件方面讲解了操作系统的定义、作用和管理机制,强调其先描述,再组织的核心管理思想,通过驱动程序作为中间层实现对硬件资源的管理。文章通过大学管理的类比,形象说明了操作系统如何通过数据结构来管理系统资源,展现了计算机系统软硬件协同工作的基本原理。

2026-05-26 14:31:42 484 1

原创 【前端】前端学习四之JavaScript(Web API -- DOM)

本文介绍了WebAPI中的DOM操作,主要包括元素获取、事件处理、属性修改、样式操作和节点操作等内容。最后通过猜数字、表白墙和待办事项三个案例,展示了DOM操作的实际应用。这些知识为前端开发提供了基础的操作页面内容、结构和样式的方法。

2026-05-23 17:48:42 449 1

原创 【Linux】第一个小程序:进度条

本文介绍了从缓冲区现象的理解用到如何利用缓冲区特性实现倒计时和进度条功能介绍的内容有回车换行的区别,分析了缓冲区现象及强制刷新方法,倒计时程序的实现过程,包括同一行显示、缓冲区刷新和位数对齐处理。最后深入讲解了进度条的设计原理,从基础实现到优化改进,包括样式调整、颜色设置和封装应用。

2026-05-11 11:20:06 569 1

原创 【数据结构】图论基础_基本概念_存储_遍历

本文系统介绍了图论的基本概念和存储实现方法。主要内容包括:1)图的基本概念:定义有向图/无向图、简单图/多重图、稠密图/稀疏图、顶点度、路径、连通性等核心术语;2)图的存储方式:详细讲解邻接矩阵和邻接表(vector数组和链式前向星)的实现原理及C++代码;3)图的遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)的实现方法,针对不同存储方式给出具体代码示例。文章从基础概念出发,循序渐进地介绍了图论知识体系,并提供了完整的代码实现,适合图论初学者系统学习。

2026-05-09 19:38:22 663

原创 【前端】前端学习三之初识JavaScript

本文介绍了JavaScript的基础语法与应用,涵盖概述、书写形式、变量定义、数据类型、运算符、流程控制、数组、函数和对象等核心内容,重点讲解了ES6的class、static和继承特性,通过代码示例展示JavaScript的核心概念和实际用法。

2026-05-06 00:05:34 592

原创 Linux中常见问题及技巧总结

Linux问题及方法总结,主要供个人参考。

2026-04-16 10:24:38 218

原创 【Linux】Linux工具(yum、vim、gcc/g++、make/makefile、gdb)的详细介绍

本文介绍了Linux系统下的五大常用开发工具:yum软件包管理器、vim文本编辑器、gcc/g++编译器、make/makefile自动化构建工具以及gdb调试器。yum解决了软件安装的依赖问题,提供便捷的软件管理;vim作为多模式编辑器,详细讲解了命令模式、插入模式和底行模式的使用方法;gcc/g++部分阐述了代码编译的四个阶段和动静态链接的区别;make/makefile重点说明了依赖关系和自动化构建原理;gdb部分则完整介绍了调试模式下的17个核心命令。

2026-04-16 10:14:39 659 1

原创 【前端】前端学习二之CSS

本文系统介绍了CSS的核心概念与应用,主要内容包括:1. CSS基础:解释CSS作为层叠样式表的作用和基本语法结构;2. 样式表使用方式:内部样式表、行内样式表和外部样式表三种方法;3. 选择器分类:讲解基础选择器(标签、类、ID、通配符)和复合选择器(后代、伪类)的使用;4. 元素属性设置:涵盖字体样式、文本控制、背景属性、显示模式、盒模型和弹性布局等重要属性的配置方法;5. 开发工具:简要介绍Chrome浏览器调试工具查看CSS属性的功能。文章通过大量代码示例直观展示各类CSS属性的实际应用。

2026-04-04 18:01:41 533

原创 【前端】前端学习一之HTML从入门到精通

本文作为前端入门首篇,系统介绍了HTML基础。文章首先阐述HTML定义网页结构的核心作用,并明确了HTML与CSS、JS的分工协作关系,然后指导使用VSCode搭建开发环境。主体部分详细解析了标题、段落、图文、超链接、表格、列表及表单等常用标签的语法与属性,辅以实例演示。最后,文中还涵盖了特殊字符的转义规则。通过本文,读者可快速掌握HTML核心语法,为前端开发打下坚实基础

2026-03-24 09:28:24 569 1

原创 【算法】二分算法

本文系统介绍了二分查找算法的核心思想和两种经典模板。首先阐述了二分算法的本质是基于数组的二段性(通过特定规律将数组分为两部分),而非仅限于有序数组。重点讲解了两种模板实现:1)朴素二分查找,通过不断缩小搜索范围定位目标值;2)边界端点查找,分别通过不同中点计算方式定位目标值的左右边界。文章详细分析了两种模板的循环终止条件、中点计算方法和避免死循环的技巧,并提供了对应的代码实现。最后总结了二分查找的使用时机和记忆方法,强调关键在于分析数组的二段性。通过这两种模板,可以解决大部分二分查找相关问题。

2026-03-21 18:02:44 666 1

原创 【算法】前缀和

本文系统讲解了前缀和算法及其应用。前缀和通过预处理数组实现快速查询区间和,以空间换时间优化效率。文章首先介绍一维和二维前缀和的模板实现,包括递推公式和使用方法。随后通过三个经典例题展示前缀和的实际应用:寻找数组中心下标(使用前后缀和数组)、和为K的子数组(结合哈希表)、矩阵区域和(二维前缀和处理)。每种情况都详细分析了算法思路、边界处理及代码实现,展现了前缀和在降低时间复杂度方面的优势。前缀和算法将区间查询问题转化为预处理和公式计算,显著提升效率。

2026-03-21 09:00:00 640 1

原创 一文搞懂:你的代码是如何变成可执行程序的?——编译与链接详解

C语言程序从源代码到运行需要经历翻译环境和运行环境两个阶段。翻译环境包括编译(预处理、编译、汇编)和链接过程:预处理处理头文件、宏定义等;编译进行词法、语法分析并生成汇编代码;汇编转换为机器指令;链接合并目标文件和库文件。运行环境包括程序加载、执行、使用堆栈管理函数调用和变量,最后终止程序。整个过程将源代码转换为可执行程序并运行输出结果。

2026-03-14 22:05:43 437 1

原创 VS Code 的安装与如何搭建C/C++开发环境?

本文详细介绍了VSCode的安装配置及C/C++开发环境搭建方法。主要内容包括:1. VSCode下载安装及中文界面设置;2. 配置MinGW-w64编译器和系统环境变量;3. 创建C/C++项目、配置json文件实现代码编译运行;4. 处理多文件工程和C++项目的特殊配置;5. 使用launch.json文件实现调试功能。文章通过图文并茂的方式,逐步演示了从软件安装到项目调试的全过程,重点说明了关键配置文件的修改要点,为初学者提供了完整的VSCode开发环境搭建指南。

2026-03-08 19:02:39 1940 1

原创 【C++】IO流

本文系统介绍了C++中的I/O流机制。首先解释了流的概念,将其类比为数据流动的抽象模型,具有方向性和字节序列特性。接着对比了C与C++的I/O方式,指出C++通过类库实现更灵活的输入输出。重点阐述了三种流类型:标准I/O流(cin/cout)、文件I/O流(二进制/文本读写)和字符串流(ostringstream/istringstream)。每种流类型都详细说明了使用方法、注意事项和典型应用场景。最后简要提及序列化/反序列化概念。全文通过代码示例和类图说明,帮助读者理解C++流操作的核心机制和实际应用。

2026-03-03 19:45:41 608 1

原创 【C++】类型转换

本文对比了C和C++的类型转换机制。C语言采用隐式和显式两种转换方式,但存在安全性差、可读性低等问题。C++引入四种强制类型转换操作符:static_cast用于相关类型转换,reinterpret_cast用于位级重新解释,const_cast处理const/volatile限定符,dynamic_cast实现安全的向下转型。这些操作符通过明确语义和严格检查提高了类型转换的安全性和可读性,同时配合RTTI机制实现运行时类型识别。文章详细分析了每种转换的使用场景和注意事项,帮助开发者避免常见类型转换错误。

2026-03-03 09:00:00 634 1

原创 【C++】智能指针

本文介绍了C++智能指针的发展与应用。首先通过内存泄漏问题引出智能指针的必要性,随后详细讲解了C++中四种智能指针的实现原理:auto_ptr采用管理权转移但存在缺陷;unique_ptr通过防拷贝保证资源独占;shared_ptr使用引用计数实现资源共享;weak_ptr专门解决shared_ptr的循环引用问题。文章还提供了各智能指针的模拟实现代码,并重点分析了shared_ptr的引用计数机制和循环引用场景下的解决方案。最后通过weak_ptr的正确使用方式,展示了如何避免循环引用导致的内存泄漏问题。

2026-02-26 10:37:24 797 1

原创 【C++】异常

本文介绍了C++异常处理机制的概念与使用方法。主要内容包括:1.异常的基本概念,通过try、throw、catch实现异常捕获处理;2.异常使用原则,包括类型匹配、栈展开、基类捕获等;3.异常安全问题及解决方案;4.C++标准库异常体系;5.异常的优缺点分析。文章指出异常处理相比传统错误码方式具有信息丰富、避免层层检查等优势,但也存在流程跟踪困难、资源管理复杂等问题。建议在项目中规范使用异常机制,建立统一的异常继承体系。总体而言,异常处理利大于弊,是现代编程语言的主流错误处理方式。

2026-02-26 10:36:35 656

原创 【C++】C++11 - Lambda表达式+包装器

本文介绍了C++11中的Lambda表达式和包装器。Lambda表达式是一种匿名函数,可以简化自定义类型的排序规则定义,其语法包括捕获列表、参数列表、可变修饰符、返回类型和函数体。包装器function用于统一函数指针、仿函数和Lambda的类型,提高模板效率。bind绑定可以改变函数参数顺序和个数,适用于全局函数和类成员函数。这些特性使代码更简洁高效,底层实现都基于重载operator()的类。

2026-02-19 22:35:39 691

原创 【C++】C++11 常见特性

本文摘要: C++11引入了多项重要新特性,包括列表初始化({}和initializer_list)、新关键字(auto/decltype/nullptr)、范围for循环、STL容器改进等。重点讲解了右值引用和移动语义,通过移动构造和移动赋值减少拷贝开销,提高性能。还介绍了类的新功能(默认移动成员函数)、default/delete关键字、可变参数模板及其在STL emplace系列接口中的应用。这些特性显著提升了C++的表达能力和运行效率,使代码更简洁高效。

2026-02-19 09:00:00 1523

原创 【C++】位图+布隆过滤器+哈希切分

本文介绍了两种处理海量数据的高效数据结构:位图和布隆过滤器。位图通过比特位表示数据存在状态,显著节省内存空间,适用于判断元素存在性问题,并详细讲解了位图的实现原理和代码实现。布隆过滤器通过多个哈希函数减少误判率,适用于字符串等复杂数据的快速查询。文章还探讨了哈希切分技术,通过分治思想处理超大规模数据文件。最后给出了多个典型应用场景的解决方案,如查找重复IP、文件交集等。这些技术在大数据处理中具有重要应用价值。

2026-02-11 09:00:00 647 1

原创 【C++】unordered系列的封装

本文详细介绍了如何使用哈希表封装实现C++中的unordered_set和unordered_map容器。主要内容包括:1) 改造哈希表模板参数,通过KeyOfT仿函数适配set和map的不同需求;2) 实现哈希表迭代器,包括++操作和const迭代器支持;3) 封装unordered_set和unordered_map,处理迭代器类型转换问题;4) 实现map的[]操作符重载。文章提供了完整的哈希表改造代码,并解决了在封装过程中遇到的类型转换和迭代器兼容性问题。

2026-02-08 20:32:30 667 2

原创 【C++】哈希表

本文介绍了哈希表的基本概念与实现方法。哈希表通过哈希函数建立元素与存储位置的映射关系,实现O(1)时间复杂度的查找。主要内容包括:1)哈希函数(直接定址法和除留余数法);2)哈希冲突及其解决方法(闭散列和开散列);3)负载因子的概念;4)详细实现了两种冲突解决方法:闭散列(线性探测和二次探测)和开散列(链地址法),并提供了完整代码实现;5)比较了两种方法的优缺点。闭散列空间利用率高但易产生堆积,开散列处理简单但空间开销较大。

2026-02-07 08:00:00 714

原创 【C++】set和map的封装

本文详细解析了STL中set和map的底层实现原理。通过分析发现,set和map底层都是基于红黑树实现的,但存储结构不同:set存储Key类型,实际实现为rb_tree<Key,Key>;map存储Key-Value对,实现为rb_tree<Key,pair<Key,Value>>;。文章重点阐述了红黑树的改造过程,包括节点定义、插入操作的修改、迭代器实现等关键技术点。特别说明了如何通过模板参数和仿函数实现不同类型数据的统一处理,以及set和map在迭代器封装上的差异。

2026-02-05 08:30:00 1185

原创 【C++】红黑树

红黑树是一种平衡二叉搜索树。它通过节点颜色(红/黑)控制平衡,确保最长路径不超过最短路径的两倍。本文主要通过插入操作介绍了红黑树的实现原理。

2026-02-03 08:30:00 654 2

空空如也

空空如也

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

TA关注的人

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