- 博客(98)
- 收藏
- 关注
原创 C++离散化算法详解
在不考虑数据的绝对大小的情况下,不改变数据的相对大小,对数据进行压缩。有点抽象,怎么理解?举个例子:在数据范围是1-100000条件下,判断给出的10个数中出现最多的次数。如果我们直接使用位图,就要100000个bit来记录。但是,这道题只给10个数据,而且要计算的是次数,只需要考虑数据的相对大小即可,我们可不可以想一个办法,只使用10个bit存储相对大小,就可以大大减少空间的使用,这就是离散化。
2024-12-30 19:37:51
268
原创 any万能容器(c++17)
万能容器可以存储任意类型数据,可以提升程序的灵活度。例如:std::vector<std::any>就是一个可以存储多种数据类型的数组。
2024-12-06 19:24:32
303
原创 C/C++中使用MYSQL
首先要保证下载好mysql的库和头文件,头文件在/usr/include/mysql/目录下,库在/usr/lib64/mysql/目录下:一般情况下,在我们安装mysql的时候,这些都提前配置好了,如果没有就重装一下mysql。这些都准备好之后,就可以开始在c语言中使用mysql了!
2024-11-12 20:21:47
1991
原创 MYSQL——用户管理
mysql需要对登陆的用户进行管理,所有用户的信息都存放在名为mysql的数据库的user表中:密码不会明文显示,都是通过对密码做md5运算得到的。
2024-11-12 09:18:42
593
原创 MYSQL隔离性原理——MVCC
表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段,不理解也没有有关系,理解后面的undo log就懂了:DB_TRX_ID6 byte,最近修改修改插入事务ID,记录创建这条记录最后一次修改该记录的事务ID: 7 byte,回滚指针,指向这条记录的上一个版本(简单理解成,指向历史版本就行,这些数据一般在undo log中)DB_ROW_ID: 6 byte,隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以。
2024-11-09 15:41:29
1097
原创 MYSQL——事务管理
在数据库使用者角度,事务就是完成一个事件。例如一个员工信息数据库,要完成员工离职的事件,可能需要很多操作,比如删除员工基本信息以及员工在公司的表现,薪资水平等。而这一系列的操作就是为了完成员工离职这一个事件,这就是事务。事务可以是一个sql语句,也可以是多个。
2024-11-09 14:06:55
1216
原创 MYSQL——索引
索引可以大大提高搜索的效率,假如有十万个数据,没有索引直接遍历查询可能需要5s左右,因为mysql需要频繁的进行磁盘读取,但是有索引就可以很快查到。那么索引的原理是什么呢?
2024-11-03 19:41:11
998
原创 MYSQL复合查询
我们要查询的数据要使用的限制条件不是很简单的,可能要在一个限制条件下再次限制,比如要查找小美所在公司的平均薪资,就要先找到小美的公司,再求平均薪资。复合查询分两种,多表连接查询、子句查询和合并查询。
2024-10-31 16:18:00
1082
原创 MYSQL内置函数
当前日期date可以是日期或者日期时间type可以是year,month,day,hour,minute或second返回date加上n个单位时间的日期时间date可以是日期或者日期时间type可以是year,month,day,hour,minute或second返回date减去n个单位时间的日期时间例子:查看两分钟内插入的数据。
2024-10-28 14:14:19
689
1
原创 MYSQL数据类型
分为tinyint smallint int bigint,对应的大小为1 2 4 8byte。那么每个类型的数据范围也就确定了,和C语言中的char short int long 的范围相同。以tinyint为例:1byte的数据范围是-128~127,创建表,插入数据-129和128这两个数据超出范围,插入失败。。tinyint的无符号数据范围是0~255,插入-1和256会失败。
2024-10-17 15:07:47
1215
原创 网络层——IP
由32位二进制数组成,通常用点分的形式被分为四个部分,每个部分1byte,最大值为255。从功能的角度看,ip地址由两部分组成,网络号和主机号。网络号标识了ip所在的网段,主机号标识了在该网段中的唯一的一台主机。二者的区分又需要与掩码配合使用,例如192.168.1.2/24,24表示掩码255.255.255.0,将掩码与ip进行按位与操作,获得了192.168.1.0即为该主机所在网段。将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网。
2024-09-28 18:12:08
1600
原创 https加密原理
以为http的数据都是以明文传送,会有很大的安全问题,所以出现的https协议。https就是在http协议的基础上增加了一个安全层,可以对数据进行加密和解密(例如SSL、TLS等)。
2024-09-22 15:08:54
437
原创 http协议
url(union resource locator)就是我们常说的网址,通过服务器地址(DNS域名解析)就可以访问想要的服务。在某些情况下,获取到的数据可能含有与url中的特殊字符冲突的字符,要求BS(brows&server)两端对数据进行编码和解码。例如,搜索c++时,+会被编码为%2B。
2024-09-19 16:53:17
842
原创 TCP socket
TCP的socket和UDP大同小异,基本的代码结构都是相同的。一些相同的接口本文就不赘述了,例如,socket,bind,有需要看这篇文章。
2024-09-15 19:39:42
1072
原创 udp网络通信 socket
套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性,端口可以标定进程在主机的唯一性,那么socket通过IP+端口号就可以让两个在全网唯一标定的进程进行通信。套接字有三种:域间套接字:实现主机内部的进程通信的编程原始套接字:使用网络层或者数据链路层的接口进行编程,更难更底层,例如制作抓包等网络工具网络套接字:实现用户通信的编程。
2024-09-06 16:13:58
1292
原创 生产消费者(CP)模型
CP模型有三个部分:productor和consumer(由线程组成的功能块)还有一个特定结构的内存空间以超市为例,超市货物由供应商提供,超市暂时存储货物,消费者可以在超市购买货物。工作流程;生产者获取数据,生产任务并将任务放到仓库,消费者从仓库获取任务,处理任务“321”原则三种关系:生产者和生产者之间的关系:互斥消费者和消费者之间的关系:互斥生产者和消费者之间的关系:互斥,同步(必须生产者生产之后,消费者才能消费,要有顺序)二种角色:生产和消费一个交易所:特定的内
2024-08-06 16:57:22
405
原创 线程的同步互斥
互斥保证了在一个时间内只有一个线程访问一个资源。先看一段代码:三个线程同时对全局变量val进行--,同时val每自减一次其线程局部存储的全局变量++最终的结果val竟然出现了负数,为什么呢?因为线程函数的操作是非原子的,线程可能在任何一步被切换。这就会导致数据不一致问题,要想解决就必须使用锁。
2024-07-30 20:20:07
475
原创 线程控制
对线程的控制思路和进程相似,创建、等待、终止,只需要调用接口就行。但是在Linux下没有线程的概念,因为Linux的设计者认为,线程是一种轻量级的进程,毕竟创建线程只需要创建PCB。因此Linux中使用多线程必须使用第三方pthread库,线程库为用户提供接口。
2024-07-13 21:38:59
470
原创 线程(vs进程)
那怎么理解之前的进程定义呢?进程内核数据结构等就是操作系统分配的资源,只不过没有多个线程,只有一个执行流罢了。所以一开始的对进程的定义就是进程的一个特例,一个只有一个执行流的特例!
2024-07-13 16:48:53
482
原创 操作系统——信号
信号是由OS向进程发送的,信号就一定保存在进程中。普通信号有31个,以位图的形式储存到进程PCB的一个int类型中。实时信号与普通信号的区别就是:实时信号收到后必须立即处理不会等待,实时信号是存储在进程的一个队列中。所以发信号就是操作系统修改对应的int值或者队列。
2024-06-13 14:16:44
1675
原创 进程通信——共享内存
共享内存有点像动态库创建共享内存:操作系统在物理内存分配一段空间(Shared Memory Segment)将共享内存挂起:通过页表将共享内存映射到两个进程的共享区通信:拿到虚拟地址,写端直接在地址上写数据,读端直接在地址上读数据断开挂起,销毁共享内存和文件一样,共享内存也会有对应的内核结构体来描述,有对应的共享内存描述符。
2024-06-03 15:38:41
690
原创 进程通信——管道
什么是进程通信?进程通信是实现进程间传递数据信息的机制。要实现数据信息传递就要进程间共享资源——内存空间。那么是哪块内存空间呢?进程间是相互独立的,一个进程不可能访问其他进程的内存空间,那么这块空间只能由操作系统提供。进程通信的方式有多种,管道就是一种。管道是一种最简单的通信机制,管道分为匿名管道和命名管道。匿名管道通常用于父子进程之间。命名管道可实现任意两个进程通信。
2024-06-03 11:42:53
951
原创 打开文件,向文件写数据,我们的计算机都干了什么
调用高级语言库函数(例如C语言的fopen),库函数内部调用系统调用接口open,操作系统为其分配文件描述符。
2024-05-21 12:59:41
275
原创 深入理解文件系统
磁盘格式化并不是将磁盘的每个数据块的数据都抹除,不仅会降低效率而且会降低硬件的使用寿命。一般就是将分区的属性删除,将inode和数据块的位图都清除。因此,格式化不会将磁盘的数据都抹除只是修改了属性,如果误删了重要数据,最好的解决方法就是什么都不做,找专业的人使用专业的软件来恢复数据。软连接类似于Windows中的快捷方式,删除目标文件会导致软连接失效。硬连接是文件的等价副本,删除硬连接不影响文件内容,只有当所有硬连接都被删除时,文件内容才会被删除。
2024-05-20 13:25:42
937
原创 操作系统——文件fd
未指定路径会在默认在当前路径,为什么?进程属性cwd(current work directory)会有路径的信息,如果我们修改这个属性,文件就会创建到修改后的路径下:当前路径下并没有创建文件到我们修改的路径下面发现了我们写入的文件。
2024-05-17 12:11:32
786
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人