自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++数据结构与算法(第三弹)

1、归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。2、时间复杂度:O(N*logN)3、空间复杂度:O(N)4、稳定性:稳定。

2026-03-14 19:23:06 418

原创 C/C++数据结构与算法(第二弹)

所以我们只需要对树进行。

2026-03-13 22:39:49 611

原创 C/C++数据结构与算法(第一弹)

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或者多种特定关系的数据元素的集合。2.什么是算法?算法(Algorithm):就是定义良好的计算过程,它取一个或者一组的值为输入,并产生出一个或者一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

2026-03-04 21:28:46 413

原创 MySQL基础(第三弹)

要求显示exam_result表中的信息,显示格式为:“xxx的语文是xxx分,数学xxx分,英语xxx分”查询工资高于500或者岗位为MANAGER的雇员,同时还要满足他们的姓名首字符为大写的J。:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10号自己的。:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包括自己部门的员工):显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资。

2026-02-23 10:12:17 847

原创 MySQL基础(第二弹)

目录表的约束1. 空属性2. 默认值3. 列描述4. zerofill5. 主键1.创建表的时候直接在字段上指定主键2. 主键约束:主键对应的字段中不能重复,一旦重复,操作失败。3.当表创建好以后但是没有主键的时候,可以再次追加主键。4. 删除主键5. 复合主键6. 自增长自增长的特点:索引:7. 唯一键8. 外键1.先创建主表2.再创建从表3.正常插入数据4. 如何理解外键约束9. 综合案例表的增删查改(CRUD)1.Create1.1 单行数据+全列插入1.2 多行数据+指定列插入1.3 插入否则更新1

2026-02-21 12:07:51 1026

原创 MySQL基础(第一弹)

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:1.文件的安全性问题。2.文件的不利于数据查询和管理。3.文件不利于存储海量数据。4.文件在程序中控制不方便。数据库存储介质:1.磁盘2.内存为了解决上述问题,专家们设计出更加利于管理数据的东西----数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2026-02-20 12:35:42 999

原创 Linux高级IO

epoll的使用过程就是三步走。

2026-02-17 16:09:34 987

原创 Linux网络编程(第四弹)

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。域名使用 . 连接1.com:一级域名,表示这是一个企业域名,同级的还有“net(网络提供商)”,“org(非盈利组织)”等。2.baidu:二级域名,公司名。3.www:这是一种习惯用法。之前人们在使用域名的时候,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。1.数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据。

2026-02-16 18:57:05 966

原创 Linux网络编程(第三弹)

可靠的实现tcp全双工连接的终止。

2026-01-17 14:27:06 1301 1

原创 Linux网络编程(第二弹)

加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文再进行一系列变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥(正确发音yue第四声,不过大家平时都读作yao四声)。1.数字指纹(数据摘要),其基本原理是利用单向散列函数(hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。2.摘要常见算法:有MD5。

2026-01-15 13:01:50 563

原创 Linux网络编程(第一弹)

负责光电/电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。:负责设备之间的数据帧的传送和识别。例如在IP协议中,通过IP协议来标识一台主机,并通过路由表的方式规划处两态主机之间的数据传输的路线(路由),路由器(Router)工作在网络层。它的最大优点是将服务、接口和协议这三个概念明确的区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

2026-01-14 10:28:22 1039 1

原创 Linux网络编程套接字

1.sockfd:为套接字描述符。2.level:指定选项所在的协议层SOL_SOCKET:通用套接字选项IPPROTO_IP:IPv4协议选项:IPv6协议选项:TCP协议选项:UDP协议选项3.optname:(选项名称)常见的有:允许重用本地地址(快速重启服务器):允许多个套接字绑定到相同端口:启用TCP保活机制SO_RCVBUFSO_SNDBUF:设置接收/发送缓冲区大小:设置接收/发送超时SO_LINGER:控制close()的行为:禁用Nagle算法(立即发送小数据包):保活参数。

2026-01-13 11:00:08 1002

原创 Linux进程地址空间详解

上图我们发现,子进程和父进程指向的g_val的地址是一样的,那如果我们在子进程,或者父进程中对g_val变量进行赋值,那不会就互相修改对方了吗,从而造成混乱。所谓的进程地址空间,本质上是一个描述可视范围的大小,地址空间内一定要存在各种区域划分,对线性地址进行start和end即可。----->有几个进程,就有几份用户级页表。-----进程具有独立性。建立映射,从此往后,我们执行的任何代码,都是在我们的进程地址空间中进行执行。对于进程的地址空间,我们先来探究下面的代码。我们发现,地址雀氏是像下图这样存放的。

2026-01-11 12:45:27 365 1

原创 Linux多线程(详细全解)

1.在一个程序的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。2.一切进程至少都有一个执行线程。3.线程在进程内部运行,本质是在进程地址空间内运行。4.在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。5.透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。Linux中没有真正意义上的线程,而是用“进程”模拟的线程。上图才是真正的进程!!!1.在Linux中,线程在进程“内部”执行。

2026-01-10 13:53:41 1459 1

原创 Linux进程信号

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义 #define SIGINT 2编号34以上的是实时信号,在这里我们只讨论34号以下的信号,不讨论实时信号。1.上面所说的所有信号产生,最后都要OS来执行,为什么?---因为OS是进程的管理者。2.信号的处理是否是立即处理的?----是在合适的时候。3.信号如果不是被立即处理,那么信号是否需要暂时被进程记录下来?记录在哪里最合适呢?

2026-01-09 15:47:55 1295

原创 Linux进程间通信

1.数据传输:一个进程需要将它的数据发送给另一个进程。2.资源共享:多个进程之间共享同样的资源。3.通知事件:一个进程需要向另一个或另一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并且能够及时知道它的状态改变。管道式Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。申请信号量,本质是对计数器减减P操作。

2025-12-29 12:23:01 1183 4

原创 Linux文件系统I/O

pathname, intflags, mode_tmodepathname:要打开或者创建的文件名。flags:打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。O_RDONLY:只读打开。O_WRONLY:只写打开。O_RDWR:读,写打开。这三个常量,必须指定一个且只能指定一个。O_CREAT若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限。O_APPEND:追加写。返回值成功:新打开的文件描述符。失败:-1。

2025-12-23 21:38:21 753 3

原创 Linux关于进程控制(第二弹)

如,子进程运行完成,结果对还是不对,或者是否正常退出。4.

2025-12-22 10:03:24 1566 2

原创 Linux关于进程(第一弹)

先描述,再组织计算机管理硬件1.描述起来,用struct结构体。2.组织起来,用链表或其他高效的数据结构。

2025-12-19 12:39:48 1381 3

原创 Linux中的常见指令汇总以及权限认识

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

2025-12-18 12:40:31 1304 6

原创 C++ 数据结构关于二叉搜索树

对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树的平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。2.左右两个孩子都在的情况,可以使用结点替换法,先找cur的左子树中的最右结点(左子树中最大的那个结点值),然后交换cur和leftMax的结点值,再对leftMax的左边是否为空进行判断就可以。情况d:在它的右子树中寻找中序下的第一个结点(关键值最小),用它的值填补到被删除结点中,再来处理该结点的删除问题---替换法删除。

2025-12-17 20:15:44 1035 3

原创 C++特殊类设计与类型转换

并且将其。

2025-12-16 13:15:22 1067 3

原创 C++的IO流

在C语言中,如果想要将一个整型变量的数据转化为字符串格式,如何去做?1、使用itoa()函数。2、使用sprintf()函数。但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢?就不太好界定,而且转化格式不匹配时可能还会的到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须包含头文件<sstream>。

2025-12-15 12:11:10 933 3

原创 关于Git

这样的标签来标识里程碑的意义。这样有什么用呢?

2025-12-12 13:25:15 1801 5

原创 C++11一些新特性

在C++11之前,涉及到多线程问题,都是与平台相关的,比如windows和Linux下各自有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作时还引入了原子类的概念。要使用标准库中的线程,必须包含<thread>头文件。函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数fn,args1,args2,...为线程函数的参数get_id()

2025-12-10 11:55:22 1469 7

原创 C++ 智能指针

什么是内存泄漏:内存泄漏是指因为疏忽或错误造成程序未能释放已经不再使用的内存情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存之后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。//1.内存申请了忘了释放//2.异常安全问题Func();//这里Func函数抛异常导致delete[]p3未执行,p3没被释放。

2025-12-09 16:12:52 1187 7

原创 C++ 异常

实际使用中很多公司都会自己定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛出异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。服务器开发中通常使用的异常继承体系public:,_id(id){ }protected:int _id;

2025-12-08 19:55:35 962 4

原创 C++中的map和set

1.set是按照一定的次序存储元素的容器。2.在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3.在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4.set容器通过key访问单个元素的速度通常比unordered_set容器慢,但是它们允许根据顺序对子集进行直接迭代。5.set在底层是用二叉搜索树(红黑树)实现的。

2025-12-07 11:41:19 974 7

原创 C++中的多态

多态是在不同继承关系的类对象,去调用同一个函数,产生了不同的行为。比如Student也继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1.必须通过基类的指针或者引用调用虚函数。2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。在虚函数的后面写上=0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承之后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。

2025-12-06 09:14:46 1857 6

原创 C++中的继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected://继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。//这里体现出了Student和Teacher复用Person的成员。

2025-12-05 08:12:24 1193 6

原创 C++模版与STL

class 类模板名//类内成员定义//动态顺序表//注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:,_size(0){}//使用析构函数演示:在类中声明,在类外定义。~Vector();//注意:类模板中函数放在类外进行定义时,需要加模板参数列表!!

2025-12-04 14:11:57 1065 6

原创 C++ Stack和queue

stack的文档介绍1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被发现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:1)empty:判空操作。2)back:获取尾部元素。

2025-12-03 13:01:08 863 5

原创 C++ list深度读解剖及模拟实现

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

2025-12-02 14:46:36 1154 6

原创 C++ STL中的vector深度剖析与模拟实现

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

2025-12-02 10:24:25 812 4

原创 C++中的string类与string类的模拟实现

在构造时,将资源的计数给成1,没增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源,如果引用计数为1,说明该对象是资源的最后一个使用者,将该资源释放。C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库还提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太复合OOP的思想,而且底层空间还需要用户自己管理,稍不留神课能还会越界访问。2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。

2025-12-01 16:56:57 922 4

原创 C/C++中的内存管理

int main()//new/delete 和malloc/free最大区别就是 new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;//内置类型是几乎一样的free(p3);delete p4;free(p5);return 0;

2025-11-30 12:47:33 847 4

原创 C++中关于类和对象

/类体:由成员函数和成员变量组成//这里要注意有分号class为定义类的关键字,classname为类的名字,{}中为类的主体,注意类定义结束时,后面的分号不能省略!类体中内容称为类的成员:类中变量称为类的属性或者成员变量;类中的函数成为类的方法或者成员函数。1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。成员函数名前需要加类名::一般情况下,更期望采用第二种方式。

2025-11-29 21:15:52 1337 4

原创 C++入门知识

定义命名空间,需要使用namespace关键字,后面跟命名空间的名字,然后接上一对{}即可,{}中为命名空间的成员。//1.正常的命名空间定义//命名空间中可以定义变量/函数/类型int val;//2.命名空间可以嵌套int a;int b;int c;int d;//3.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。//ps:一个工程中的teset.h和上面test.cpp中两个N1会被合并成一个//test.h。

2025-11-28 17:30:04 638 7

空空如也

空空如也

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

TA关注的人

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