- 博客(33)
- 收藏
- 关注
原创 【Linux】shell原理
Shell是连接用户与操作系统的命令解释器,负责解析和执行命令。常见的Shell类型包括Bash、Zsh和Fish,各有特色。Shell工作流程包括命令读取、解析扩展和执行三个阶段,支持交互模式和非交互模式。核心组件涉及命令行解析、环境变量、内置/外部命令及脚本执行机制。Shell还管理进程与作业控制,处理信号等系统交互。理解Shell原理有助于提升命令行操作效率,编写更健壮的脚本程序,更好地控制系统行为。
2025-07-07 21:45:00
744
原创 【C++】stack与queue的实现
C++中的栈(Stack)和队列(Queue)分别遵循LIFO和FIFO原则,标准库提供std::stack/std::queue作为容器适配器,默认基于std::deque实现。自主实现可优化性能、控制内存并扩展功能。栈推荐动态数组实现(缓存友好),队列可采用循环数组(固定大小)或链表(无界)。关键实现要点包括异常安全处理、边界检查、内存预分配和批量操作优化。性能对比显示不同实现各有优劣,应根据应用场景选择合适的数据结构。
2025-07-06 11:30:00
353
原创 【数据结构】排序算法:归并与堆
归并排序和堆排序作为两种经典O(nlogn)排序算法,各有特点。归并排序采用分治策略,通过递归分解、排序子数组后合并实现,具有稳定性且适合大数据处理,但需O(n)额外空间。堆排序利用堆数据结构实现原地排序,空间复杂度O(1)但不稳定,适合内存受限场景。实际选择需考虑稳定性、数据规模及内存限制等因素,现代系统常采用混合策略优化性能。两种算法分别体现了分治思想和完全二叉树的应用价值。
2025-07-05 21:30:00
384
原创 【Linux】进程管理
进程是操作系统资源分配的基本单位,具有独立地址空间和执行环境。Linux进程管理包括创建(fork)、调度(CFS)、通信(管道/信号)和生命周期控制。开发中需掌握进程监控(ps/top)和编程接口(fork/wait/signal),正确处理资源释放和进程同步。良好的进程管理对提升系统可靠性和性能至关重要,是构建稳定高效应用的基础。
2025-07-03 21:34:01
325
原创 【C++】list
C++ 中的 std::list 是标准库提供的双向链表容器,相比 vector 和 deque 具有独特的优势。其主要特点包括:任意位置插入/删除时间复杂度为 O(1)、迭代器稳定性强(增删操作不会使其他迭代器失效)、非连续内存存储结构。std::list 特别适合需要频繁中间插入/删除、不需要随机访问的场景,如实现 LRU 缓存、文本编辑器缓冲区或游戏对象管理。虽然其随机访问性能较差(O(n)),但对于大对象或非拷贝类型数据存储效率较高。使用时可通过成员函数 sort()、merge() 和 splic
2025-07-03 11:45:00
428
原创 【数据结构】排序算法:冒泡与快速
本文对比分析了冒泡排序和快速排序两种经典算法。冒泡排序通过相邻元素比较交换实现排序,时间复杂度O(n²),适合小规模数据;快速排序采用分治策略,平均时间复杂度O(nlogn),适合大规模数据。文章提供了完整的C语言实现代码,包括优化版本,并建议实际开发中优先使用标准库qsort函数。理解这两种算法有助于开发者根据数据特征选择合适的排序方法。
2025-07-02 22:30:00
682
原创 【Linux】冯诺依曼结构体系
冯诺依曼结构是现代计算机的基础架构,包含运算器、控制器、存储器、输入和输出五大部件。其核心特点是二进制系统和存储程序原理。尽管存在顺序执行瓶颈,但通过多级缓存、流水线等技术得以优化。Linux系统完美体现了该架构,通过CPU调度、虚拟内存和DMA技术实现高效运行。性能优化实践包括缓存优化、内存调优和I/O加速。实用工具如perf、vmstat和iostat可帮助分析系统性能。冯诺依曼结构仍是计算机设计的黄金标准,理解该模型有助于系统级性能分析和优化。(150字)
2025-07-02 11:30:00
429
原创 【C++】std::vector 全面指南
《C++ std::vector核心特性与高效使用指南》摘要: std::vector作为C++中最常用的动态数组容器,具有连续存储、自动扩容和类型安全等核心特性。相比原始数组和链表,vector在随机访问、内存局部性方面表现优异,特别适合需要频繁访问元素或不确定元素数量的场景。文章详细介绍了vector的初始化、元素访问、迭代器使用、插入删除操作等基本用法,重点讲解了容量管理策略(如reserve/resize)和性能优化技巧(预分配内存、emplace_back、移动语义)。通过对比不同操作的复杂度(如
2025-07-01 19:50:40
533
原创 【数据结构】排序算法:插入与选择
本文深入解析了两种经典排序算法——插入排序和选择排序的核心原理与实现细节。插入排序通过逐个将元素插入已排序序列的适当位置实现排序,在最优情况下(已有序数组)时间复杂度可达O(n),适合处理小规模或部分有序数据。选择排序则通过反复选择未排序部分的最小元素进行排序,始终保持O(n²)的时间复杂度,但实现更为简单直观。
2025-06-28 12:00:00
275
原创 【Linux】ghb工具
GDB是Linux系统中最强大的命令行调试工具,主要用于C/C++程序调试。文章介绍了GDB的安装方法、基础调试命令(启动、断点管理、变量查看等),以及高级调试技巧(观察点、条件断点、多线程调试等)。同时提供了段错误调试、死锁检测等实战示例和常见问题解决方法。GDB作为程序员调试利器,能有效定位程序问题,建议从基础命令开始逐步掌握其强大功能。
2025-06-27 21:30:00
380
原创 【C++】String的使用
C++字符串处理指南:介绍了std::string类的基础概念与操作,包括初始化、访问字符、修改操作和字符串查找;详述了数值转换、大小写转换等高级处理技巧;提供了字符串分割和正则表达式应用方案;强调通过预分配内存和使用string_view进行性能优化。相比C风格字符串,std::string提供更安全、高效的文本处理方式,是现代C++开发必备技能。
2025-06-27 11:30:00
149
原创 【数据结构】堆
堆是一种特殊的完全二叉树,主要分为最大堆和最小堆两种类型。它通常用数组实现,核心操作包括插入时的上浮调整和删除时的下沉调整,时间复杂度均为O(logn)。堆在优先队列、堆排序、TopK问题等领域有广泛应用,标准库如C++的priority_queue和Python的heapq都提供了堆的实现。优化方面可采用B叉堆布局和内存预分配等技巧。堆排序具有O(nlogn)的时间复杂度,而求TopK问题可以通过维护大小K的最小堆高效解决。
2025-06-26 21:00:00
357
原创 【Linux】make工具
Make是Unix/Linux系统中经典的自动化构建工具,通过分析文件依赖关系实现增量编译,显著提升大型项目效率。其核心规则包括:目标文件:依赖文件→编译命令,支持变量定义(CC/CFLAGS)和自动变量($@/$^)。Makefile可实现基础C项目编译、多文件自动检测,并包含条件判断、子Makefile包含等高级功能。典型错误包括Tab键误用和并行构建冲突。作为项目构建的"智能管家",Make能让编译流程更高效,建议开发者通过实践逐步掌握这个强大的工具,编写清晰易懂的Makefile
2025-06-26 11:00:00
241
原创 【C++】模板
C++模板:代码复用的利器 C++模板是实现泛型编程的核心工具,它允许开发者编写可处理多种数据类型的通用代码。模板分为函数模板和类模板,前者用于通用函数,后者用于通用类。模板通过类型参数(T)实现代码复用,编译器会根据实际使用类型自动生成具体代码。标准库容器如vector、map等都基于模板实现。使用模板能提高代码复用率、保持高性能,但需注意可能导致的编译错误和代码膨胀问题。模板技术体现了"一次编写,多处使用"的编程理念,是提升C++开发效率的重要手段。
2025-06-25 20:51:06
338
原创 【数据结构】二叉树
二叉树是一种每个节点最多有两个子节点的树结构,具有根节点、叶子节点等基本概念。主要类型包括满二叉树、完全二叉树、二叉搜索树和平衡二叉树(AVL),各有特点和适用场景。存储方式有链式和顺序两种,遍历方法包括深度优先(前序、中序、后序)和广度优先遍历。二叉树支持插入、删除等核心操作,并广泛应用于数据库索引、哈夫曼编码等领域。平衡二叉树能保证O(logn)的时间复杂度,避免普通二叉树的退化问题。
2025-06-25 10:00:00
1298
原创 【Linux】gcc/g++工具
摘要:GCC/G++是Linux下核心的C/C++编译器工具链。GCC默认处理C语言,G++专为C++设计并自动链接标准库。编译流程分预处理、编译、汇编和链接四阶段,可用g++一键完成。常用选项包括调试(-g)、优化(-O2)和警告控制(-Wall)。调试时建议搭配GDB和Valgrind工具,重点关注链接错误和内存问题。掌握这些工具和技巧是Linux开发的基础能力。
2025-06-24 21:30:00
394
原创 【C++】内存管理
C++内存管理需要开发者手动控制内存分配和释放,既带来了性能优势也增加了复杂性。文章详细介绍了C++的内存分区模型(栈区、堆区、全局/静态区和常量区),对比了new/delete与malloc/free的区别,并分析了常见内存问题及其防范措施。重点阐述了智能指针(unique_ptr、shared_ptr和weak_ptr)的使用,以及内存池、RAII等高级内存管理技术。最后建议优先使用智能指针和容器,配合内存检测工具确保代码安全性。
2025-06-23 10:30:00
535
原创 【数据结构】树的概念与结构
本文系统介绍了树这一基础数据结构的概念、存储方式和遍历算法。主要内容包括:1)树的基本术语解析(根节点、深度、高度等);2)两种存储结构(孩子兄弟表示法和双亲表示法)及其C语言实现;3)深度优先和广度优先遍历算法;4)基本操作(计算高度、查找节点)的实现;5)内存管理的注意事项;6)公司组织结构树的应用实例。文章强调树结构在计算机科学中的核心地位,指出掌握树的实现对理解更复杂数据结构和算法至关重要,特别展示了C语言指针和内存管理在树实现中的关键作用。
2025-06-22 21:15:00
430
原创 【Linux】vim工具
Vim是一款高效的文本编辑器,尤其适合编程和服务器管理。摘要:Vim是vi编辑器的增强版,具有轻量级、高度可定制和跨平台的特点。其核心在于四种模式(正常、插入、可视、命令行)的组合使用,支持全键盘操作。适用于远程服务器编辑、编程开发和日志分析等场景。配置方面可通过.vimrc自定义,针对C++开发可安装代码补全等插件。相比Nano和Emacs,Vim学习曲线较陡但效率更高。典型操作包括hjkl移动、dd删除、yy复制等命令组合,以及多文件编辑功能。
2025-06-22 10:30:00
909
原创 【C++】运算符重载
运算符重载是C++的核心特性,允许自定义类型使用类似内置类型的运算符语法。可重载的运算符包括算术、关系、逻辑等,但不能重载如::和.等特殊运算符。重载可通过成员函数或非成员函数实现,成员函数隐含this指针,非成员函数常用于I/O操作。常见重载包括算术运算符、关系运算符和I/O运算符,特殊场景如[]下标、()调用和类型转换也支持重载。最佳实践强调语义一致性、性能优化和异常安全,建议谨慎使用逻辑运算符重载。运算符重载使自定义类型操作更直观,但应避免过度使用导致代码晦涩。
2025-06-21 22:00:00
756
原创 【linux】yum工具篇
Yum是RedHat系Linux的核心包管理工具,通过自动解决依赖关系简化软件管理。其工作流程包括仓库配置、元数据下载、依赖解析和事务执行四个阶段。文章详细介绍了Yum的基础命令、仓库管理、高级应用技巧和故障排除方法,并对比了新一代DNF工具的改进。最佳实践包括配置稳定镜像源、使用事务历史记录功能以及掌握离线部署方案。Yum作为Linux系统管理的重要工具,在传统服务器环境中仍发挥着不可替代的作用。
2025-06-21 10:45:00
1651
原创 【C++】拷贝构造函数
摘要:拷贝构造函数是C++中用于对象复制的特殊构造函数,通过同类型对象初始化新对象。它适用于对象初始化复制、函数传参等场景。默认的浅拷贝仅复制成员值,对含指针的类可能导致资源冲突;需自定义深拷贝来实现安全复制。C++11引入移动构造函数优化性能,与拷贝构造形成五法则(析构、拷贝构造/赋值、移动构造/赋值)。实际应用中可通过禁用拷贝、智能指针等方式管理资源,并注意异常安全。这一机制是C++对象生命周期管理的基础。
2025-06-20 21:00:00
864
原创 【C++】构造函数与析构函数详解
C++类默认成员函数精要:每个类自动生成6个默认成员函数(未显式定义时),包括构造函数(默认、拷贝、移动)、赋值运算符(拷贝、移动)和析构函数。构造函数用于对象初始化,支持重载和初始化列表;析构函数负责资源清理,遵循RAII原则。特别强调拷贝与移动构造函数的区别,以及现代C++的移动语义提升效率。通过Buffer类示例展示了资源管理的完整实现,体现构造函数/析构函数作为对象生命周期管理核心机制的重要性,是C++高质量编程和资源管理的基础。
2025-06-20 10:30:00
410
原创 【Linux】用户与权限
Linux用户管理包括三类用户:超级用户(root)、系统用户(UID 1-999)和普通用户(UID≥1000),可通过su、sudo等命令切换或提权。权限管理涉及三类角色(所有者、组、其他用户)和三种权限(读、写、执行),使用ls -l查看、chmod/chown/chgrp修改权限。目录权限具有特殊性,还可设置粘滞位(t)限制文件删除权限。这些机制共同保障了Linux系统的安全性和多用户环境下的文件管理。
2025-06-19 19:15:03
381
原创 【数据结构】栈和队列
栈和队列是两种常用的数据结构。栈像叠盘子,最后放的先拿(后进先出);队列像排队,先来的先走(先进先出)。它们在编程中有很多实际用途,比如栈用于函数调用,队列用于任务排队。虽然刚开始学习时容易混淆,但掌握它们对理解更复杂的数据结构很有帮助。主要内容:栈:后进先出,用于撤销操作、括号匹配等队列:先进先出,用于排队系统、打印任务等两者的区别和使用场景
2025-06-19 10:30:00
331
原创 【C++】 类和对象:面向对象编程的核心
C++中的类和对象是面向对象编程的核心。类作为用户自定义数据类型,通过访问控制实现封装,将数据和操作封装成整体。关键概念包括:构造函数/析构函数管理对象生命周期,静态成员提供共享机制,运算符重载增强对象操作直观性,继承和多态构建类层次结构。类成员分为私有(private)、公有(public)和保护(protected)三种访问权限,通过getter/setter方法可控制对私有成员的访问。此外,友元机制允许特定函数或类访问私有成员。掌握这些特性是编写模块化、可维护C++代码的基础,也是理解现代软件设计模式
2025-06-18 20:55:02
321
原创 【Linux】基本命令
Linux命令是操作系统的核心技能,支撑着云计算、服务器和超级计算机。本文系统介绍了六大关键操作:1) 文件目录管理(ls/cd/mkdir等);2) 文件查看编辑(cat/grep/vim);3) 权限用户管理(chmod/sudo);4) 系统进程监控(top/ps);5) 网络配置诊断(ping/curl);6) 压缩归档工具(tar/gzip)。强调命令行在效率、自动化和资源节省方面的优势,建议从基础命令开始循序渐进学习,培养解决问题的思维模式。
2025-06-18 11:00:00
384
原创 【数据结构】链表
本文全面解析了链表这一基础数据结构,涵盖其基本概念、类型特点、操作实现及优化技巧。链表由节点组成,具有动态内存分配特性,主要分为单向链表、双向链表和循环链表三类。文章详细介绍了链表的插入、删除、反转等基本操作的实现方法,并指出常见陷阱如边界条件处理和内存管理问题。针对链表操作中的难点,提出了使用哑节点、快慢指针等优化技巧。链表作为程序设计的核心知识,深入理解其原理和应用对开发者至关重要。本文旨在帮助读者系统掌握链表相关知识,提升数据结构运用能力。
2025-06-17 20:07:17
446
原创 【数据结构】顺序表
顺序表是一种线性表的数据结构,它的数据元素按照一定次序依次存储在计算机存储器中,使用连续的存储空间来存储。顺序表中每个数据元素的位置都有一个序号,这个序号也称为元素在顺序表中的下标。
2024-08-07 15:36:26
1088
1
原创 记录一下第一篇博客
大家好,我是来自于二本的一名网络空间安全小白,因为疫情和大一的贪玩使得自己的基础十分薄弱,所以第二学期要开始下功夫来学习编程。没有很明确的想进入哪家公司,只希望自己可以找到一份好工作,减轻父母的压力,让父母不用再外出打工了。每周用至少20个小时来学习编程(学校课程太多,作业也多,时间真感觉不够用)认真上课听讲和多刷题来补自己的基础与不足,形成一套自己的逻辑思维。2.加深对编程语言的理解,以便更好地学习有关专业的知识。1.将自己的基础打好,以便跟上后续的学习进度。3.尽量多学一些编程语言。
2023-04-02 18:39:02
88
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人