自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【初阶数据结构与算法】第十篇——八大排序算法(头脑风暴逻辑分析+动图详解一看就会+代码分析信手捏来)

💬**作者介绍:**自动化,大水生一枚,希望可以一起进步!🏆个人主页:企鹅不叫的博客​ 🌈专栏C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C++初阶和进阶⭐️ 博主码云gitee链接:代码仓库地址⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!https://gitee.com/royal-never-give-up)💙系列文章💙【初阶数据结构与算法】第一篇:算法中的时间复杂度和空间复杂度【初阶数据结构与算法】第二篇:顺序表【初阶数据结构与算法】第三篇..

2023-10-21 23:12:17 1995 53

原创 【初阶与进阶C++详解】第一篇:C++入门知识必备

​⭐️本篇博客我要给大家分享一下C++入门知识。希望对大家有所帮助。⭐️ 博主码云gitee链接:码云主页前言​💎一、C++关键字🧡C++又新增了31个关键字,一共63个关键字​💎二、命名空间🧡在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的,....

2022-04-07 13:40:46 1937 37

原创 【Linux】第十八章 Reactor模式

在读取完毕后,我们需要在协议里面定义一个根据应用层协议字段来分离报文的函数(避免 tcp 的粘包问题),最终会得到一个 string 的数组,每个数组成员都是一个完整的报文;主要使用单 Reactor 单线程,相当于请求到来时,判断请求是各种事件,然后将请求和事件和回调方法结合存放到红黑树当中,当时间就绪的时候回调对应事件的处理方法。最后,我们直接一个 for 循环,通过该 tcpserver 对象在初始化时候设置的 cb_函数回调指针,来处理每一个报文。有关套接字初始化,绑定,监听,接收。

2024-08-26 13:46:54 944

原创 【Linux】第十七章 多路转接(select+poll+epoll)

答:ET模式只有在变化的时候才会通知用户,如果是阻塞模式,客户端通知服务器取数据,然后服务器只取部分数据,剩下缓冲区中数据没有取出,文件描述符不会返回给客户端,客户端没有收到应答而不会继续发送数据,所以必须要采用。处理旧连接,调用read函数读取客户端发来的数据,调用read函数失败则poll服务器也直接关闭对应的连接,并将该连接对应的文件描述符从fds数组当中清除。处理新连接,调用accept函数将底层建立好的连接获取上来,调用epoll_ctl函数将获取到的套接字添加到epoll模型当中。

2024-08-26 13:45:28 696

原创 【Linux】第十六章 高级IO (五种IO模型+fcntl)

让IO变得高效,最核心的办法就是尽量减少“等”的时间。

2024-08-26 13:43:51 980

原创 【网络编程】第十一章 数据链路层 - 以太网(MAC+MTU+ARP+MSS+RARP)

地址解析协议协议,根据IP地址获取MAC地址的一个TCP协议,是 MAC 帧协议的 “上层”,因为同一个局域网中发消息需要知道对方mac地址,而我们一般只知道ip地址,所以需要arp协议将ip地址转换为mac地址。根据MAC地址获取IP地址的一个TCP/IP协议,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据。

2024-08-22 14:56:12 1256

原创 【网络编程】第十章 网络层-IP(分片组装+网段+路由+NAT)

将目的ip和路由表中子网掩码"按位与"之后得到网络地址,再和Destination比较,两者相等代表当前ip就是需要通过该项路由,此时通过Iface接口发出去,如果和Destination不相等,则继续与下一个子网掩码比较,以此类推,最后由default 默认路由发送出去。传输层一次向下交付的数据太多了会导致分片,数据链路层不支持过大的数据,这就需要在发送方网络层对数据进行分片,分片后的每片都有独立ip,分片会提高丢包的概率,影响传输速率。局域网中主机的私有IP 和 外网当中的某个公网IP之间的映射关系。

2024-08-22 14:55:28 1363

原创 【网络编程】第九章 传输层-tcp(协议格式+32序号+部首长度+标记位+窗口大小+三次握手四次挥手+滑动窗口+流量控制+拥塞控制+延时应答+捎带应答+面向字节流+粘包问题+UDP实现可靠传输)

一次握手没有回应不安全,两次握手,在服务器返回应答时如果丢包了,连接没有建立,也不安全。三次握手,第三次握手由服务器确认,说明第二次握手客户端收到了,此时就证明自己和客户端都是能发能收的,如果第三次握手服务器没有收到,服务器就会发送 RST 让客户端重新建立开始握手断开连接时要断开从客户端到服务器方向的通信信道,也要断开从服务器到客户端的通信信道,其中每两次挥手对应就是关闭一个方向的通信信道,因此断开连接时需要进行四次挥手。

2024-08-22 14:54:57 768

原创 【网络编程】第八章 传输层-udp(netstat+pidof+upd协议)

UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。UDP具有接收缓冲区。只是一味地接收,并不能保证报文的顺序;如果缓冲区满了,再到达的UDP数据就会被丢弃。UDP 报文中的 16 位长度字段,限制了 udp 报文的长度为 64KB,有效载荷选用 512 字节。UDP的socket既能读,也能写,因此UDP是全双工的。获取某个进程名的进程 pid。

2024-08-22 14:54:24 696

原创 【网络编程】第七章 应用层-http(url+telnet+请求+响应+https+加密+CA证书+DNS)

服务器得到签名数据,拆成数据和签名,签名用CA公钥解密得到散列完后的数据,在将原始数据散列,对比散列完后的数据和散列后原始数据,如果一样正确,否则错误,保证如果数据或者签名被修改则会被服务器发现。转义的规则:将需要转码的字符转为十六进制,然后从右到左,取4位(不足4位直接处理),每两位做一位,前面加上%,编码成%XY格式。客户端用 hash 函数对数据进行散列,散列完后的数据用CA密钥加密得到签名,最后签名和原始数据构成签名的数据。将html代码修改为以下代码,方法用get,之后运行服务器,在浏览器访问。

2024-08-22 14:53:19 884

原创 【网络编程】第六章 json(安装+使用)

源文件要用define 这样写#define MY_SELF 1使用命令行参数方式代替修改源文件中的define,加上-DMY_SELF对应makefile如下修改.PHONY:allclean:使用自己协议使用json,就把后面注释。

2024-08-22 14:52:31 306

原创 【网络编程】第五章 (协议+序列化反序列化+网络版计算器)

🏆​ 🌈⭐️⚡若有帮助可以【关注】,大家一起进步!

2024-08-22 14:51:06 524

原创 【Mysql】第十四章 使用C语言链接(环境配置+连接库+sql函数)

通过调用mysql_get_client_info来判断库是否引入成功,该函数的作用就是获取客户端的版本信息,使用的文件test.cc。解决libmysqlclient.so.18 => not found。注意:MYSQL_ROW本质就是char**类型。之后./test成功运行。

2024-08-06 17:48:08 771

原创 【Mysql】第十三章 用户管理(创建修改删除用户+赋予回收权限)

identified by '密码’可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。在数据库中有个mysql数据库,打开有个user表,之后用下面命令查找主机 用户 密码。库名.对象名:授予用户哪个数据库的哪个对象的权限。权限列表:授予用户何种权限,多个权限用逗号隔开。表示某个数据库的所有对象(表、视图、存储过程等)‘用户名’@‘登录地址’:给哪一个用户授权。root用户修改指定用户的密码。表示所有数据库的所有对象,查看该用户现有的权限。

2024-08-06 17:47:36 871

原创 【Mysql】第十二章 视图特性(概念+使用)

【代码】【Mysql】第十二章 视图特性(概念+使用)

2024-08-06 17:44:18 945

原创 【Mysql】第十一章 事务-重点(原子性+持久性+隔离性+一致性)

输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,否则会回滚,与是否设置autocommit无关没用begin或者start transaction,只要设置autocommit=1(自动提交),退出会自动保存没用begin或者start transaction,只要设置autocommit=0(手动提交),必须要通过commit提交,才会持久化隔离级别脏读不可重复读幻读加锁读读未提交(read uncommitted)√√√。

2024-08-06 17:43:41 961

原创 【Mysql】第十章 索引-重点(主键索引+唯一索引+普通索引+全文索引)

数据库服务端本质是一个进程,所以是在内存中,而数据库文件本质是保存在内存当中,对数据操作都是在内存中进行的。MySQL与磁盘交互的基本单位是16KB,叫做page,文件数据是以page为单位保存在磁盘当中,所以进行数据交互需要IO,为提升效率要减少IO的使用。IO交互使用的是page,不用page查5条数据要调用5次IO,用page只要调用一次IO,之后要查的数据直接在内存中进行,采用的是B+树。单个page,内部数据会按照主键进行排序。单个Page内创建页内目录。Page之上创建页目录。

2024-08-06 17:43:03 1009

原创 【Mysql】第九章 内外连接(内连接+左外连接+右外连接)

语法,right以右表为主,左表为辅,左表有的就加上,没有就null,相当于求表1集合,没有就不显示。语法,left以左表为主,右表为辅,右表有的就加上,没有就null,相当于求表1集合,没有就不显示。前面写法都是内连接,下面是标准写法,inner join相当于求两个表的交集。查询所有学生的成绩,就算这个学生没有成绩,也要将学生的个人信息显示出来。把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来。列出部门名称和这些部门的员工信息,同时列出没有员工的部门。显示SMITH的名字和部门名称。

2024-08-06 17:42:25 350

原创 【Mysql】第八章 复合查询-重点(多表查询+子查询+合并查询union)

上面查询会将表1,表2关联起来,如果表1有3行数据,表2有4行数据,那么多表查询就有3*4=12行数据。:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)显示高于每个自己部门平均工资的员工的姓名、部门、工资和部门的平均工资。:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。显示每个部门工资最高的员工的姓名、工资、部门和部门的最高工资。

2024-08-06 17:41:54 745

原创 【Mysql】第七章 内置函数(日期函数+字符串函数+数学函数等)

注意:内部数据形成摘要,不是明文存储,有利于保护数据。

2024-08-06 17:41:10 774

原创 【Mysql】第六章 表增删改查(insert+duplicate+replace+select+distinct+where+order by+limit+update+delete+truncat

/这在select后出现的列,在group by中也要出现,意思是被group by分组后的列,才能在select中打印。:group by的插入位置,执行顺序,where、group by、select、order by、limit。查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J。,分组之后再过滤行数大于1的,就表示同一个名字至少有2条记录,重复了。筛选等于null的数据,筛选等于null的数据,用。筛选不等于null的数据,筛选不等于null的数据。

2024-08-06 17:40:36 895

原创 【Mysql】第五章 表约束(null+default+comment+zerofill+primary key+auto_increment+unique+foreign key)

为保证数据合法性,对数据类型有很多约束。

2024-08-06 17:38:52 319

原创 【Mysql】第四章 数据类型(数值+字符串+日期+enum+set)

1对应0001是第一个,2对应0010是第二个,3对应0011是第一和第二个,4对应0100是第三个,以此类推。:mysql中的字符就是一个字符,一个字符可以是一个字母a也可以是一个汉字。无符号tinyint,占用1字节,取值范围为0~255。find_in_set(str,strlist)函数。占用一个字节,取值范围为-128~127。decimal比float精度更高。char和varchar区别。:set用的是用数字表示是。

2024-08-06 17:38:15 349

原创 【Mysql】第三章 表操作(增删改查)

]中间的内容可以省略,比如CHARSET(编码格式),COLLATE(校验方式),ENGINE(存储引擎)都可以省略,命令大小写都一样。:修改列属性是覆盖修改,如果修改没加上comment描述,那么修改后会覆盖原来的comment。:类型和后面的comment都可以省略,同时和modify一样都是覆盖式修改。**注意:**comment '用户名’这句话可以省略,表示注释。

2024-08-06 17:37:19 225

原创 【Mysql】第二章 库操作(增删改查+备份恢复+编码校验)

在root模式下(不是在mysql中),备份helloworld数据库为mytest.sql,输入下面命令后输入密码。创建一个名为helloworld的数据库,设置字符编码为gbk,直接在后面加上。注意:数据库名字加反引号``,是为了防止使用的数据库名刚好是关键字。创建一个名为helloworld的数据库,设置校验编码,直接加上。创建一个名为helloworld的数据库,相当于建立一个目录。改变数据库helloworld的编码为utf8。需要先进入对应的数据库,本质是创建文件。

2024-08-06 17:35:44 432

原创 【Mysql】第一章 (环境配置)

su -之后输密码mariadb是mysql的一个分支,也是数据库。

2024-08-06 17:32:42 278

原创 Python生成图形验证码

分享一个免费下载字体网站:http://www.webpagepublicity.com/free-fonts.html。我选的字体是Bajoran Regular.ttf。

2024-06-27 19:37:58 276

原创 学生管理系统(Python实现+包括管理员和用户注册)

内容分为登录部分和学生管理系统两个部分登录部分包括管理员登录和普通用户登录,在第一次使用软件时,系统会判断是不是第一次使用,如果是第一次使用就要初始化,不是第一次使用就进行用户类型选择,选择管理员用户要进行登录,选择用户要判断是否进行注册,如果注册,则需要先注册再登录创建系统标志文件flag.txt,初始化为0表示系统没有使用过,再首次启动后修改数据内容为1,管理员账户在程序中设计,为root-123456,普通用户保存到当前文件夹之下。

2024-06-24 10:58:10 454

原创 【C++高阶数据结构】跳表(skiplist)

🏆​ 🌈⭐️⚡若有帮助可以【关注】,大家一起进步!

2023-01-07 16:17:18 742 11

原创 【C++高阶数据结构】B树、B+树、B*树

🏆​ 🌈⭐️⚡若有帮助可以【关注】,大家一起进步!

2023-01-06 19:50:57 808 12

原创 【C++高阶数据结构】LRU

​ 🌈⭐️⚡若有帮助可以【关注】,大家一起进步!

2023-01-05 16:28:54 439

原创 【C++高阶数据结构】图

🏆​ 🌈⭐️⚡若有帮助可以【关注++】,大家一起进步!

2023-01-04 19:08:24 897 18

原创 【C++高阶数据结构】并查集

🏆​ 🌈⭐️⚡若有帮助可以【关注++】,大家一起进步!

2022-12-25 18:06:47 446 10

原创 【网络编程】第四章 网络套接字(守护进程+TCP英译汉+TCP通协议讯流程+TCP和UDP对比)

守护进程和后台进程的区别:守护进程和终端没有关系但是后台进程能往终端上输出东西和终端有关联守护进程关闭终端时不受影响而,后台进程会随着终端的退出而退出。

2022-12-23 11:47:46 1135 16

原创 【网络编程】第三章 网络套接字(TCP协议程序+多进程+多线程+线程池)

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)【网络编程】第二章 网络套接字(socket+UDP协议程序)

2022-12-03 18:04:04 685 8

原创 【网络编程】第二章 网络套接字(socket+UDP协议程序)

IP地址是用来标识网络中不同主机的地址。发送方主机的IP地址,保证响应主机“往哪放”接收方主机的IP地址,保证发送方主机“往哪发”

2022-11-29 17:44:59 750 13

原创 【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)

🏆​ 🌈⭐️⚡若有帮助可以【关注++】,大家一起进步!

2022-11-26 20:01:57 807 16

原创 KMP算法(求解字符串匹配)

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特一莫里斯―普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。来自-------百度百科。区别: KMP和BF唯一不一样的地方在,我主串的i并不会回退,并且j也不会移动到0号位置。

2022-11-24 17:03:50 707 3

原创 【Linux】第十五章 多线程(线程池)

存放任务记录线程池中创建的线程数互斥锁队列为空时的条件变量public :} //加锁 void lockQueue() {} //解锁 void unlockQueue() {} //判空 bool IsEmpty() {} //等待 void Wait() {} //唤醒 void WakeUp() {//线程池是否开始 int threadNum_;//线程池中线程的数量 queue < T > taskQueue_;

2022-11-23 18:26:06 937 17

原创 【Linux】第十四章 多线程(生产者消费者模型+POSIX信号量)

以单生产者、单消费者为例进行实现队列: 使用STL中的queue来实现容量: 阻塞队列的容量,由用户给定,我们也可以提供一个默认的容量互斥量: 为了实现生产者和消费者的同步,我们需要使用条件变量和互斥量来实现同步的操作生产者唤醒和等待的条件变量: 当队列满了,生产者等待条件满足,应该挂起等待,等待消费者唤醒消费者唤醒和等待的条件变量: 当队列为空,消费者等待条件满足,应该挂起等待,等待生产者唤醒框架:blockqueue.hpp。

2022-11-23 18:18:45 1608 10

空空如也

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

TA关注的人

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