自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-05-22 23:09:29 927 4

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

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

2024-05-22 09:30:00 1346 6

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

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

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

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

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

2024-05-18 18:01:54 928 11

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

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

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

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

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

2024-05-13 09:30:00 731

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

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

2024-05-11 09:15:00 661

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

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

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

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

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

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

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

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

2024-04-22 17:22:39 818

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

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

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

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

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

2024-02-28 18:59:30 1019

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原创 AI工程师在崛起,我们如何做到快速转型

AI工程师是专注于设计、开发和维护人工智能系统的专业人士。这一职业领域涉及到多个技术领域,包括机器学习、深度学习、自然语言处理、计算机视觉等。AI工程师需要有广泛的技术知识,同时也需要对特定行业和应用领域有一定的了解,以便能够开发出符合特定需求的AI解决方案。AI工程师需要设计、实施和优化机器学习和深度学习模型。这可能包括选择适当的算法、处理和准备数据、进行模型训练和调优等工作。AI工程师通常需要具备扎实的编程技能,熟悉编程语言如Python、Java、C++等。

2023-11-13 08:30:00 1215 41

原创 模拟实现string类——【C++】

🍔前言:我们已经将STL中的string类重要接口全部认识并熟练掌握,为了让我们对string与C++类与对象更深层次的了解,我们这篇博客将string类进行模拟实现。

2023-11-12 15:06:33 264 25

原创 【C++历练之路】SLT容器中string的所有关键接口

1. 字符串是表示字符序列的类2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设1. string是表示字符串的字符串类2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3. string在底层实际是:basic_string模板类的别名,typedef basic_stringstring;4. 不能操作多字节或者变长字符的序列。

2023-11-10 01:14:58 202 31

原创 C++的Odyssey之旅——STL

STL(Standard Template Library)是C++的一个重要组成部分,它提供了一组通用的模板类和函数,用于实现常见的数据结构和算法。STL的设计目标是提供一种通用、高效、可复用的方法来处理数据结构和算法,使C++程序员能够更容易地编写高质量的代码。

2023-11-09 08:00:00 352 30

原创 让你的代码原地起飞——C++模板

泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。

2023-11-08 10:44:13 607 27

原创 优化C++资源利用:探索高效内存管理技巧

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。自定义类型new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放

2023-11-06 08:30:00 486 30

原创 静态、友好、内在:解析C++中的这些特殊元素和对象复制的优化

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。友元分为:友元函数和友元类静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

2023-11-05 12:01:35 399 44

原创 探索C++中的不变之美:const与构造函数的深度剖析

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。const对于我们有语言基础的人并不陌生,就是关于修饰变量使其成为一个不可修改的内容。在C++中也是如此,但是C++中类的出现,伴随的出现的就是一系列的成员函数,而被const修饰的成员函数就是const成员函数。

2023-11-01 21:16:47 457 29

原创 Linux玩物志:好玩却无用的软件探秘

是我们已经学习了yum指令,可以在Linux中安装一些软件的指令。下面我们就盘点一些可玩性很高但是却没有什么用的软件,在枯燥的学习中增添一丝乐趣!这些应用程序展示了Linux社区的创造力和幽默感。它们或多或少地为Linux用户提供了一些娱乐,同时也向人们展示了命令行界面的多样性。请记住,尽管这些应用程序可能不太实用,但它们确实增加了Linux的乐趣和趣味性。

2023-10-31 09:00:00 1093 30

原创 Linux开发者的利器:深入了解环境开发工具之yum篇

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.

2023-10-31 08:30:00 468 22

原创 Linux权限大揭秘:深入理解系统安全

关于权限的总结:目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。!!t=N7T8。

2023-10-27 09:00:00 2814 50

原创 探索C++赋值运算符重载的内部机制:手把手教你精通

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。前一篇博客中我们已经了解并学习了初始化和清理模块中的构造函数与析构函数,还有拷贝复制中的拷贝复制函数,它们都是类与对象中重要的成员,今天我们要来讲一下拷贝复制模块中另一个非常重要的内容——赋值重载,但是在学习赋值重载的同时我们应该先学习运算符重载,话不多说我们直接开始!

2023-10-24 09:00:00 257 28

原创 C++之构造函数、析构函数、拷贝构造函数终极指南:玩转对象的诞生、生命周期与复制

在上篇内容里,我们初识了C++中的类与对象,了解了类的定义、类的实例化、 类的作用域等等,今天我们将继续深入了解类与对象的相关内容,学习构造函数、析构函数与拷贝构造函数,话不多说我们发车!!!

2023-10-22 09:00:00 343 33

原创 掌握C++魔法:深入解析类与对象(上篇)

C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定

2023-10-18 20:12:10 422 44

原创 C++:超越C语言的独特魅力

函数重载、引用、内联函数函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:水浒传中的林冲,被称

2023-10-17 09:00:00 1934 35

原创 “权限之舞:Linux安全之道”

Linux权限是指在Linux操作系统中用于管理文件和目录访问的安全机制。它允许系统管理员和文件所有者控制谁可以读取、写入或执行文件,以及哪些用户或组可以访问它们。Linux权限是一个关键的概念,有助于确保系统的安全性和数据的完整性。在之前的Linux博客中,我们学习了基础的Linux指令,具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中,只有在root账号中有询问或只能在root账号中添加未安装的指令呢?今天我们来讲一下Linux的一些权限,长话短说我们开始今天的内容!

2023-10-16 20:36:26 1012 32

原创 C++初阶(1)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。这个与结构体有一定的相似程度,当我们使用namespace关键字进行空间的命名时,这段空间就i成为了封闭的。// why是命名空间的名字,一般开发中是用项目名字做命名空间名。// 命名空间中可以定义变量/函数/类型int val;当我们创建了这个命名空间时,这就让这个结构体与函数有了空间隔离。

2023-10-15 02:04:57 663 20

原创 C++从入门到入土

C++的出现可以追溯到20世纪80年代,它的诞生是为了满足一些编程语言的需求和解决一些问题。以下是一些导致C++出现的主要原因:1.扩展性:C语言在系统编程和应用程序开发中非常成功,但它在面向对象编程(OOP)方面存在一些不足。C++的创建是为了将OOP的特性引入C语言,从而更好地处理大型和复杂的项目。这种扩展性使得C++能够同时支持传统的过程性编程和OOP,使其更灵活。2.继承和代码重用:C++引入了类和对象的概念,允许开发者创建具有继承和多态性质的数据结构,这有助于提高代码的可重用性和可维护性。这

2023-10-11 18:11:39 981 39

空空如也

空空如也

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

TA关注的人

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