自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux线程篇】线程之力:Linux并发编程指南

Linux线程控制是指在Linux操作系统中,通过特定的系统调用和库函数来创建、同步和管理线程的操作。线程控制通常包括线程的创建(如使用`pthread_create`)、同步(如使用互斥锁`pthread_mutex_t`和条件变量`pthread_cond_t`)、通信以及终止(如使用`pthread_join`和`pthread_exit`)。这些操作允许程序员编写并发程序,以提高应用程序的性能和响应性。简而言之,Linux线程控制是操作系统提供的一种机制,用于管理和协调程序中的多个执行流。

2024-07-11 09:15:00 900

原创 【Linux线程篇】探索Linux多线程:并行编程的入门指南

Linux线程作为现代操作系统中不可或缺的并发机制,其在内核层和应用层的深入理解和应用对于开发高性能、高可靠性的软件系统至关重要。本文提供了一个全面的视角,帮助读者从理论到实践,构建对Linux线程的全面认识,并在实际开发中游刃有余地应用线程技术。

2024-07-08 23:43:08 1044

原创 【Linux信号篇】Linux中的信号拦截与响应

在Linux中,信号的阻塞和捕捉是进程管理意外事件的关键技术。通过信号阻塞,进程可以在执行关键任务时忽略某些信号,防止操作中断。信号捕捉则允许进程为特定信号设置处理函数,使得当信号发生时能够立即响应,进行必要的操作,如资源清理或状态记录。这两种策略共同提升了程序的稳定性和健壮性。

2024-07-08 09:30:00 652

原创 【Linux信号篇】进程控制的幕后英雄:信号概念和信号的产生

inux信号是操作系统用来通知进程发生了某些事件的一种机制。它们是进程间通信的一种形式,允许内核或其他进程向目标进程发送信息,告知其发生了某些需要处理的情况。信号可以由硬件事件(如键盘中断)或软件事件(如另一个进程请求终止)产生。Linux系统定义了多种信号,例如SIGINT(中断信号,通常由Ctrl+C产生)和SIGTERM(终止信号,用于请求进程优雅地结束)。进程可以忽略信号、捕获信号以执行自定义操作,或者设置默认处理行为。正确地处理信号对于编写稳定和健壮的Linux程序至关重要。

2024-07-06 09:00:00 849

原创 【Linux进程通信】system V下的共享内存

之前我们已经掌握了进程间的管道通信,匿名管道和命名管道。匿名管道必须进程要血缘关系,而命名管道不需要血缘关系,两个毫不相干的进程就可以进行通信。上面两种是基于文件的通信,今天我们继续来学习本地进程间的通信——共享内存

2024-07-01 09:30:00 759

原创 数据库大作业——音乐平台数据库管理系统

本项目设计并实现了一个音乐管理系统,旨在为用户提供一个高效、直观的音乐资源管理平台。系统核心功能包括用户管理、音乐库维护、播放列表编辑、智能搜索和个性化推荐。采用关系型数据库技术,确保数据的安全性和稳定性。本文详细介绍了系统的需求分析、系统设计、数据库设计、功能实现以及测试过程。在需求分析阶段,我们通过问卷调查和用户访谈收集了用户的需求和期望。系统设计阶段,我们采用了模块化设计方法,确保了系统的可扩展性和可维护性。数据库设计部分详细描述了数据模型、表结构和关系。功能实现部分展示了系统的主要界面和交互流程。

2024-06-18 23:52:56 1367

原创 【Linux进程通信】Linux进程间的无声对话:匿名管道与命名管道技术

Linux提供了两种进程间通信(IPC)机制:匿名管道和命名管道。匿名管道允许父子进程单向通信,生命周期仅限于进程及其子进程。而命名管道则支持多个不相关进程通过文件系统中的命名实体进行通信,具有更广泛的应用场景。两者均支持单向数据流,但可通过特定配置实现双向通信。开发者应根据通信需求、安全性和生命周期选择合适的IPC方式。

2024-06-18 09:30:00 1640

原创 【Linux文件篇】软硬链接与动静态库链接的实用指南

在软件开发中,链接技术是实现代码复用和模块化的关键。软硬链接和动静态库链接提供了不同的解决方案,以适应不同的开发需求。硬链接是文件系统中的一个指针,直接指向文件数据,允许多个文件名访问相同的数据块。软链接则类似于快捷方式,它包含指向另一个文件或目录的路径。静态库在编译时被整合进可执行文件,减少了运行时依赖,但增加了文件体积。动态库则在程序运行时加载,节省了磁盘空间,便于库的更新,但可能增加启动时间。

2024-06-13 23:53:11 924

原创 【Linux文件篇】磁盘到用户空间:Linux文件系统架构全景

本文简要概述了文件管理系统从磁盘硬件到操作系统的整合过程。文章首先描述了磁盘硬件的工作原理,包括磁盘结构和数据存储方式。随后,讨论了文件系统如何利用这些硬件特性来实现数据的逻辑组织,包括文件和目录的创建、存储和检索。文章强调了操作系统中文件系统的关键功能,如权限控制、数据一致性和错误恢复机制。同时,指出了现代文件系统面临的挑战,例如高并发访问、大数据管理以及跨平台兼容性。

2024-06-13 09:30:00 2236

原创 【Linux文件篇】优化文件读写,加速数据处理策略——缓冲区

文件缓冲区是计算机编程中用于临时存储数据的内存区域,它在文件输入/输出操作中扮演着至关重要的角色。通过缓冲区,程序能够以更高效的方式处理数据,因为它减少了对磁盘等存储设备的直接访问次数,从而降低了I/O操作的开销。文件缓冲区的工作原理是将数据先写入到内存中的缓冲区,而不是直接写入磁盘。当缓冲区满时,数据才会被一次性写入磁盘,这个过程称为"刷新"。同样地,在读取数据时,操作系统会先从磁盘读取一定量的数据到缓冲区,程序再从缓冲区中读取所需的数据。

2024-06-10 21:46:59 813

原创 【Linux文件篇】系统文件、文件描述符与重定向的实用指南

本文深入探讨了Linux操作系统中的文件系统,特别是系统文件的重要性和文件描述符的高效管理。文章首先介绍了系统文件的概念、作用以及它们在Linux系统中的组织结构。随后,详细解释了文件描述符的工作原理,包括它们是如何在程序中被创建、使用和关闭的。此外,文章还重点讨论了重定向技术,这是一种强大的命令行工具,允许用户改变程序的输入和输出流,从而提高数据处理的灵活性和效率。通过实际的命令示例和场景分析,本文旨在帮助读者更好地理解和掌握Linux文件系统的核心概念和高级技巧,无论是对于系统管理员还是开发人员,都能从

2024-06-10 09:30:00 1046

原创 【C++历练之路】C++11中的列表初始化&&声明新方法&&深入标准模板库的变革

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中。

2024-06-07 09:30:00 934

原创 【Linux进程篇】Linux进程管理应用——虚假的shell脚本

本文探讨了通过仿写Shell脚本来提高自动化任务效率的方法。首先概述了Shell脚本的基础知识,然后重点介绍了如何分析和优化现有脚本。文章还涵盖了错误处理和调试技巧,最后总结了一些高级脚本编写技巧,旨在帮助读者创建更高效、更稳定的自动化工具。

2024-06-05 23:13:47 991

原创 【Linux进程篇】Linux中的等待机制与替换策略

进程等待和进程替换是操作系统中管理进程的两个关键概念。进程等待是当一个进程需要等待某个资源或事件时,它将暂停执行,直到条件满足。这有助于避免资源冲突和死锁,同时允许系统更高效地处理任务。进程替换则是在系统资源受限时,将某些进程从内存中移除,以便为其他更重要或更紧急的进程腾出空间。这种策略有助于优化系统性能,确保关键任务的顺利执行。通过合理设计进程管理策略,可以提高系统的稳定性和响应性。本文将深入探讨进程等待和进程替换的工作原理,包括它们的实现机制、调度算法以及在不同操作系统中的应用。

2024-06-05 09:30:00 955

原创 【Linux进程篇】Linux进程管理——进程创建与终止

进程的创建和终止是操作系统中管理进程生命周期的两个基本操作。进程创建涉及为新程序分配资源、设置执行环境,并将其加入到调度队列中。这通常发生在程序启动、系统调用或父进程生成子进程时。进程终止则标志着一个进程的生命周期结束,无论是因为正常完成、异常退出还是外部干预。终止进程需要进行资源回收、状态清理,并确保不会留下悬挂的依赖或资源泄露。这两个过程对维护系统的稳定性和效率至关重要,它们要求操作系统具备精细的资源管理和调度策略。有效的进程管理能够提高系统性能,优化资源利用率,并确保用户和应用程序的流畅体验。

2024-05-29 22:55:46 1168 1

原创 【Linux进程篇】Linux内核——程序地址空间的初构

在Linux操作系统中,每个进程都拥有独立的地址空间,这是操作系统隔离进程和保护系统安全的重要机制。进程地址空间由虚拟内存管理单元(MMU)进行管理,它允许进程通过虚拟地址访问物理内存。Linux进程地址空间是操作系统内存管理的核心组成部分,它不仅确保了系统的稳定性和安全性,还为程序提供了灵活的内存使用方式。了解地址空间的布局和管理机制对于开发高效、安全的应用程序至关重要。

2024-05-29 09:30:00 1384 2

原创 【Linux进程篇】掌握进程优先级与环境变量:提升系统效能的秘诀

Linux操作系统以其强大的多任务处理能力而闻名,这在很大程度上归功于其进程管理和调度机制。本文旨在探讨Linux中的进程优先级和环境变量这两个关键概念,以及它们如何影响系统的运行和程序的行为。进程优先级是Linux内核用于决定哪些进程应该首先执行的机制。每个进程都有一个优先级值(nice值),它影响进程获得CPU时间的比例。用户可以通过调整nice值来控制进程的相对优先级,从而优化系统性能。环境变量在Linux中扮演着配置信息存储的角色,它们允许应用程序和系统管理员在不同环境之间共享配置信息。

2024-05-27 23:47:44 1326 2

原创 【Linux进程篇】父子进程fork函数||进程生死轮回状态||僵尸进程与孤儿进程

深入地理解fork()函数和进程状态,以及如何避免僵尸进程和孤儿进程。fork()函数作为进程管理的核心,允许创建新的进程,是多任务和并发编程的基础。进程状态的总览,以及僵尸进程和孤儿进程这两种异常进程状态。僵尸进程是一种特殊的进程状态,发生在子进程终止后,父进程尚未调用wait()或waitpid()系统调用读取其退出状态。孤儿进程是指父进程在子进程终止前已经结束,使得子进程没有父进程。孤儿进程最终会被系统回收,但在此之前,它们可能会消耗系统资源,并在系统崩溃时留下未处理的进程。

2024-05-27 09:30:00 1089 2

原创 【Linux进程篇】——从零开始:进程初始化与PCB精粹

进程(Process)是操作系统中一个非常重要的概念,它指的是正在执行的程序的一个实例。每个进程都有自己的地址空间、系统资源和执行状态。进程是系统资源分配和调度的基本单位。进程控制块(Process Control Block, PCB)是操作系统用来管理进程的数据结构。它包含了进程的描述信息,如进程状态、程序计数器、CPU寄存器、内存管理信息、I/O状态信息等。PCB是操作系统进行进程管理的核心。

2024-05-22 23:09:29 1306 5

原创 【Linux进程篇】——深入冯诺依曼体系,掌握操作系统核心原理

在计算机科学领域,冯·诺依曼体系结构是现代计算机设计的基础。这一架构不仅定义了计算机硬件的基本组成,而且对操作系统(OS)的设计和功能产生了深远的影响。本文旨在探讨冯·诺依曼体系与操作系统之间的联系,并概述两者的关键概念和重要性。

2024-05-22 09:30:00 1622 9

原创 【Linux玩物志】Linux环境开发基本工具使用(终章) ——git与gdb调试器

Git,一个由Linus Torvalds设计的开源分布式版本控制系统,已经成为代码版本控制的行业标准。它以其无与伦比的速度、强大的分支管理功能以及对大型项目的支持而受到广泛赞誉。Git不仅仅是一个代码仓库的守护者,更是团队协作的桥梁,它让代码的迭代、合并和回滚变得简单而高效。GDB,即GNU Debugger,是GNU项目中的一个开源调试器。它为开发者提供了一个强大的工具来诊断程序中的问题。无论是追踪程序的执行流程,检查变量的值,还是分析程序的内存使用情况,GDB都能提供必要的支持,帮助开发者深入理解

2024-05-18 22:08:17 758 2

原创 【Linux玩物志】Linux环境开发基本工具使用(2) ——gcc/g++与make/makefile

在Linux环境下开发软件时,编译器和构建工具的选择至关重要。gcc作为GNU编译器集合的核心组件,提供了对C、C++等多种编程语言的支持。它不仅能够编译源代码生成可执行文件,还提供了优化选项,以提高程序的运行效率。另一方面,make工具通过读取makefile文件来管理编译过程。makefile定义了项目的构建规则和依赖关系,允许开发者指定如何编译源文件,链接库文件,以及生成最终的可执行文件。这使得编译过程自动化,减少了重复劳动,并且可以轻松地管理复杂的项目结构。

2024-05-18 18:01:54 1057 12

原创 【Linux玩物志】Linux环境开发基本工具使用(1)——vim

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

2024-05-16 09:30:00 601 1

原创 【C++历练之路】哈希思想的应用——位图、布隆过滤器

我们使用hash思想学习了哈希表,进行了模拟实现unordered_set与unordered_map。这些都是用hash思想实现出来的数据结构,今天我们来学习一下hash的应用——位图、布隆过滤器。

2024-05-13 09:30:00 756

原创 【C++历练之路】unordered_map与unordered_set的封装实现

前言:我们已经认识并实现了哈希底层的逻辑,创建出了其开散列。现在我们要进行封装,类比STL中的unordered_set 与 unordered_map。

2024-05-11 09:15:00 682

原创 【C++历练之路】STL中的哈希——手搓哈希底层逻辑

unordered_map在线文档说明1. unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内。

2024-05-08 22:28:11 1136 7

原创 【C++历练之路】红黑树——map与set的封装实现

RED,BLACK, _kv(kv),_col(RED){}在节点定义时我们默认将节点设置成红色节点,这样如果出现连续的红色节点时,我们可以进行变色操作,通过维护一个子树来使红黑树合法,但是如果插入一个黑色节点时,我们就无法下手,因为每条路的黑色节点数必须相同,这样我们无法很好的进行操作使其合法化。

2024-05-08 09:00:00 1377 9

原创 【C++历练之路】AVL树:自平衡二叉搜索树的优雅解决方案

AVL树是一种自平衡的二叉搜索树,它的特点是在插入或删除节点时会通过旋转操作来保持树的平衡。AVL树的平衡性是通过确保任意节点的左子树和右子树的高度之差不超过1来实现的。这种平衡性保证了在最坏情况下对树进行查找、插入和删除操作的时间复杂度都是O(log n),其中n是树中节点的数量。AVL树是由Adelson-Velsky和Landis在1962年提出的,它是最早被发明的自平衡二叉搜索树之一。与其他自平衡树结构相比,AVL树的平衡调整操作相对简单,并且由于其严格的平衡条件,查询性能稳定。在AVL树中,每

2024-04-22 17:22:39 839

原创 如何正确的万无一失的学习python?

在当今数据驱动的时代,Python已经成为最受欢迎的编程语言之一,无论是在数据科学、机器学习、Web开发还是自动化任务中,Python都扮演着关键的角色。其简洁的语法、强大的库支持以及庞大的社区,使其成为初学者和经验丰富的开发者都优先考虑的语言。系统学习Python不仅仅是为了掌握一门编程语言,更是为了解锁现代技术领域中的无限可能性。不论你的目标是成为一名数据科学家、Web开发者、软件工程师还是仅仅为了提高工作效率,深入学习Python都将是你职业道路上的一笔宝贵财富。

2024-02-28 19:17:19 944 1

原创 【C++历练之路】map与set的必备使用指南

C++作为一门历史悠久且功能强大的编程语言,其标准模板库(STL)为开发者提供了一套丰富的数据结构和算法,极大地促进了软件开发的效率和质量。在STL的众多容器中,`map`和`set`是两种广泛使用的关联容器,它们基于红黑树实现,提供了优秀的元素查找和访问性能。了解和掌握这两种容器的使用对于C++程序员来说至关重要,无论是在应对日常编程任务还是解决复杂的算法问题时,`map`和`set`都能发挥出色的作用。

2024-02-28 18:59:30 1030

原创 【C++历练之路】二叉搜索树的学习应用及其实现

欢迎来到搜索二叉树的幽静林荫,这里充满了关于排序和搜索的魔法。在这个编码的森林中,我们将一同踏上发现搜索二叉树之美的探险之旅。本文将深入解析搜索二叉树的内部工作原理,剖析它是如何通过精妙的排序和快速的搜索,为我们的数据提供一个优雅而高效的家园。

2024-02-04 23:46:08 1354 4

原创 校园网网络规划与设计——计算机网络实践报告

深入理解网络工程的三层层次设计模型;掌握网络拓扑结构设计、网络地址规划与设计、综合布线设计等技术;3. 可以对各种网络设备进行规划、设计、安装、连接与设置,掌握小型校园网络设计和组建方法硬件环境:笔记本电脑软件环境:Cisco Packet Tracer。

2024-02-01 21:54:25 3698 1

原创 [C++历练之路]C++多态底层逻辑知多少

在C++的编程世界中,多态性是一门神奇的艺术,让我们的代码展现出无穷的灵活性和智慧。本文将深入底层,揭示多态性的幕后机制,为你呈现一场关于虚函数、虚函数表和动态绑定的奇妙探险。我们将解码编译器如何在底层实现多态性,揭开虚函数表的神秘面纱。跟随我们的脚步,你将深入理解对象在运行时是如何通过多态性展现其灵活性的。本文不仅探讨了虚函数的构建过程,还描绘了编译器是如何在内存中安排虚函数表的细节。准备好迎接一场关于C++多态底层机制的深度探索吧!

2024-02-01 08:00:00 913 1

原创 【C++历练之路】探秘C++三大利器之一——多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写那什么是虚函数呢?我们在继承中学习到了虚继承使用了Virtual关键字,那现在我们来看一下虚函数。上述就是多态的全部内容,底层内容我们下一次来讲解,感兴趣的可以期待博主下一篇博客。

2024-01-29 23:35:35 1209 14

原创 [C++历练之路]C++中的继承小学问

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。用通俗的话术来说,当我们想要建立一个图书管理系统时,需要许多对象的引入。老师、学生……他们直接有一些共同点,也有一些不同点。我们可以单独的为此创建对象,也可以将其进行复用,利用继承进行创建。

2024-01-29 08:00:00 1776 18

原创 [C++历练之路]C++模板还能这么玩,已经走了好多弯路,后悔没有早点学会到。

在C++中,模板是一种泛型编程(Generic Programming)的工具,它允许程序员编写通用的、与数据类型无关的代码。使用模板,你可以编写函数或类,使其能够适用于多种数据类型而不需要重复编写多份相似的代码。函数模板允许你编写一个通用的函数,其中的某些类型或值可以是参数化的。例如,你可以编写一个通用的排序函数,可以对整数数组、浮点数数组或其他类型的数组进行排序,而不需要为每种类型都编写一个独立的排序函数。T temp = a;a = b;b = temp;这里,typename T。

2023-11-24 20:25:41 3787 47

原创 [C++历练之路]优先级队列||反向迭代器的模拟实现

优先队列以及反向迭代器模拟实现。在C++中,仿函数(Functor)是一种重载了函数调用操作符operator()的对象。它实际上是一个类或者结构体,通过重载operator(),使得该对象可以像函数一样被调用。仿函数可以像函数一样接受参数,并返回结果,同时可以包含状态信息,因此它们在C++中被广泛用于实现函数对象,

2023-11-24 08:30:00 1032 19

原创 【C++历练之路】stack||queue||底层原理知多少

在这篇【C++历练之路】的文章中,我们深入探讨了C++标准模板库(STL)中的两个重要容器——stack(堆栈)和queue(队列),以及它们的底层实现。通过对它们的接口和底层原理进行详细的讲解,我们希望读者能够更全面地了解这两个容器在C++编程中的应用。通过使用stack,我们可以轻松实现后进先出(LIFO)的数据结构,模拟堆栈的操作,并在实际开发中提高代码的可读性和可维护性。同时,queue作为一种先进先出(FIFO)的数据结构,为处理需要按顺序进行的任务提供了便捷的解决方案。

2023-11-21 23:28:08 988 55

原创 【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2023-11-19 12:29:23 2097 60

原创 [C++历练之路]vector的介绍以及底层模拟实现

1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2023-11-16 15:46:23 881 48

空空如也

空空如也

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

TA关注的人

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