- 博客(65)
- 收藏
- 关注
原创 高阶数据结构——并查集
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。
2024-07-13 18:46:31 756
原创 网络其他重要协议(DNS、ICMP、NAT)
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称例如com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.应用层的作用: 满足我们日常需求的网络程序, 都是在应用层能够根据自己的需求, 设计应用层协议.了解HTTP协议.
2024-05-27 20:01:20 1380
原创 网络层协议——IP协议
在学习TCP时,我们学习了TCP保证的是能将一个数据可靠的传输到另一个主机上。主要是数据的可靠传输。而网络层和数据链路层则是帮助我们如何将数据传输到另一台主机上。我们在应用层给对方发数据时,数据并不是直接传输给对方的,而是需要自顶向下贯穿协议栈。其中经过传输层,网络层,数据链路层和物理层,每一层都需要添加对应的报头。报文通过网络的传输,到达目标主机。再从下至上贯穿协议栈,每一层会对报文进行解包分用,并向上交付。所以站在每一层的角度都是和对方的对应层直接通信。
2024-05-20 22:02:33 672
原创 应用层协议——HTTP协议
HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。超文本的意思就是超越普通的文本,http允许传送文字,图片,视频,音频等,协议我们前面也说过,就是一种约定。HTTP协议在应用层,主要是解决如何处理对端发送过来的数据,关于对端数据如何发送过来,丢包了怎么办等问题,不是应用层要考虑的,在传输层,网络层,数据链路层会帮我们解决这些问题,他只关心如何处理对端数据。
2024-05-07 21:52:14 879
原创 任务管理与守护进程
在上一章中,我们实现了一个Tcp服务器,但是这个服务器还存在一些问题,例如,我们将云服务器(xshell)关闭之后,服务器就无法使用了。但是真正的服务器肯定不是这样的,启动之后不受用户影响,除非主动将这个服务器kill掉。我们考虑将服务器修改成为守护进程守护进程(Daemon)是在计算机操作系统中以后台形式运行的一类特殊进程。。它们不依赖于任何用户交互,也不与任何终端相关联。
2024-04-17 20:54:42 662
原创 TCP网络程序
上一章我们基于UDP实现了几个网络程序,这一章我们开始使用TCP。可以看到TCP是有链接的,而UDP是无连接的,有无连接体现在接口上面(listen,connect),话不多说,直接开始。
2024-04-16 15:27:32 947
原创 UDP网络程序
上一章中,我们介绍了socket,以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。
2024-04-12 22:32:59 1048
原创 网络编程套接字
我们可以将sockaddr看成基类,sockaddr_in和sockaddr_un看成子类,构成了多态。IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型, 16位端口号和32位IP地址.IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容.
2024-04-12 16:04:22 1132
原创 计算机网络基础
起初,计算机以单机模式被广泛使用(这种方式也叫独立模式)。但是单机模式有很大的缺陷,就是数据无法共享。假设现在有三台主机,分别存储一部分客户的数据。现在我们需要对这些数据做处理,那么我们只能等一台计算机处理完之后将数据传递给下一个计算机,而下一个计算机在没有收到数据之前,一直处于等待状态。这样效率十分低下,于是提出了网络的概念。有人将这几台计算机连接到一起,将数据放到服务器中集中管理,每台计算机也就可以共享这些数据了。局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
2024-04-01 18:52:37 628
原创 MySQL使用C语言连接
连接数据库前,我们需要创建一个MySQL对象参数为null时,函数自动返回一个MySQL对象,如果参数为一个地址,函数会在该地址处帮你完成初始化。MYSQL是 C api中一个非常重要的变量(mysql_init的返回值),里面内存非常丰富,有port,dbname,charset等连接基本参数。它也包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。
2024-03-31 21:16:13 1441
原创 MySQL视图
这张表生成之后,我们发现v_ename_dname这张表只有 .frm文件(表信息),没有 .ibd文件(表数据),也证明了我们前面的视图的特性:视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表。我们现在做一个测试,我们在视图中将姓名为WARD的员工的部门名换一个名字,如果原表中的数据也发生了改变,就说明视图的数据会影响到基表。前面说过视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。我们创建完之后会发现多了一张表。
2024-03-31 11:26:14 354
原创 MySQL事务
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。就需要多条 MySQL 语句构成,那么所有这些操作合起来,就构成了一个事务。一个 MySQL 数据库,存在大量事务在运行,而每条事务至少一条 SQL ,这样如果大家都访问同样的表数据,在不加保护的情况,就绝对会出现问题。
2024-03-30 12:09:08 2830
原创 MySQL索引
索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于。接下来,通过一个案例,来看看索引能提高多少检索效率。1。我们先创建一个有着八百万条数据的表。2。我们要在这八百万条数据中找到指定的一条。可以看到查找的时间大概是4.5秒左右。3。我们建立索引之后再次查找。
2024-03-29 16:29:36 953
原创 MySQL内置函数
如果当前数据库存储的是密码,并且是以明文的形式保存的,如果被黑客攻击了,拿到了数据库中所有人的密码,那就麻烦了,针对这种情况,保存密码可以使用md5形成一个32位的数据摘要。-> );mysql> insert into user(name, password) values('张三', 1234);mysql> insert into user(name, password) values('李四', md5('1234'));| 1 | 张三 | 1234 |
2024-03-25 16:57:52 1607
原创 MySQL表的约束
为什么要有约束,其实是为了,在上一章中我们说到数据类型其实就是一种约束,比如tinyint类型的取值范围是-128-127,如果超过了这个范围,就直接报错,而不是发生c语言中的截断,这样可以倒逼程序员必须插入合法的数据。
2024-03-22 21:10:26 1199
原创 MySQL数据类型
而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,....最多64个。所以MySQL中的数据一定是合法的,所以数据类型就是一种约束,关于约束的话题,我们下一章再说。set是一个位图结构(从左往右看),第一次我们插入的是2,对应二进制为01,所以是游泳,第二次是3,对应二进制位11,就是登山和游泳。
2024-03-21 15:56:22 1241
原创 MySQL表的操作
之前的comment是用户的图片,在修改属性之后,就被覆盖掉了。在birthday字段后面增加一个image_path;我们想把刚刚加的image_path的大小改成20。需要注意的是这样会把comment属性给覆盖掉。
2024-03-21 11:26:42 382
原创 MySQL库的操作
创建两个数据库,一个校验集为utf8_general_ci(不区分大小写),一个为utf8_bin(区分大小写),然后我们插入若干字母(有大写和小写),进行比较。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。写入和读取的编码集必须是相同的,就像你使用汉语写了一段信息,使用英文是无法获取这段信息的内容的。查看mytest.sql 文件里的内容,会发现其实把我们整个创建数据库,建表,导入数据的语句。创建一个utf8字符集数据库。
2024-03-20 16:52:19 520
原创 MySQL基础
存储数据用文件就可以了,为什么还要弄个数据库?文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。
2024-03-19 21:21:46 208
原创 linux编辑器-vim
vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。
2023-09-08 20:26:40 619
原创 类和对象(上篇)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。(函数规模较小,且不是递归)public//成员函数_a* = NULL;_size = 0;private://成员变量int _a;
2023-07-24 15:16:08 31
原创 数据结构---二叉树
列如这颗树, 如果是前序遍历, 我们先访问根, 也就是1这个结点, 我们将1打印之后再访问根的左子树, 到了2号结点, 此时2号结点就是一个新的根, 我们访问2号结点,将2打印出来, 再访问2号的左子树三号结点, 将3打印出来之后, 访问三号结点左子树, 发现是空,返回三号结点, 去访问三号结点的右子树, 发现还是空, 就返回二号结点, 去访问二号结点的右子树, 右子树为空, 返回一号结点访问一号结点的右子树。:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。
2023-06-04 19:16:48 100 1
原创 数据结构----队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。
2023-05-18 22:16:40 72
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人