- 博客(167)
- 收藏
- 关注
原创 C/C++对MySQL的访问
该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api基本就是读取MYSQL_RES 中的数据。它也包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。
2026-05-25 00:07:15
328
1
原创 MySQL用户管理
MySQL中的用户,都存储在系统数据库mysql的user表中第二条指令字段解释:(1)host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆。(2)user: 用户名。(3)authentication_string: 用户密码通过password函数加密后的。(4)*_priv: 用户拥有的权限。
2026-05-23 22:30:42
198
原创 MySQL视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
2026-05-23 15:07:11
57
原创 MySQL索引
(1)MySQL 中的数据文件,是以page为单位保存在磁盘当中的。(2)MySQL 的 CURD 操作,都需要通过计算,找到对应的插入位置,或者找到对应要修改或者查询的数据。(3)只要涉及计算,就需要CPU参与,而为了便于CPU参与,一定要能够先将数据移动到内存当中。(4)在特定时间内,数据一定是磁盘中有,内存中也有。后续操作完内存数据之后,以特定的刷新策略,刷新到磁盘。而这时,就涉及到磁盘和内存的数据交互,也就是IO了。而此时IO的基本单位就是Page。
2026-05-23 14:39:50
661
原创 IO多路转接之epoll
(1)调用epoll_create创建一个epoll句柄。(2)调用epoll_ctl,将要监控的文件描述符进行注册。(3)调用epoll_wait,等待文件描述符就绪。epoll的优点(和select的缺点对应)(1)接口使用方便:虽然拆分成了三个函数,但是反而使用起来更方便高效,不需要每次循环都设置关注的文件描述符,也做到了输入输出参数分离开。
2026-05-19 14:06:31
687
1
原创 IO多路转接之poll
(2)pollfd结构包含了要监视的event和发生的event,不再使用select"参数—值”传递的方式,接口使用比select更方便。(3)同时连接的大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。(1)不同于select使用三个位图来表示三个fdset的方式,poll使用一个pollfd的指针实现。(1)poll和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。
2026-05-19 13:48:08
230
原创 IO多路转接Select
(1)系统提供select函数来实现多路复用输入/输出模型(2)select系统调用是用来让我们的程序监视多个文件描述符的状态变化的。(3)程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。
2026-05-19 13:41:18
378
原创 五种IO模型和非阻塞IO
1、在应用层的这些read和write函数,本质就是把数据从用户层写给操作系统,这些函数本质也是拷贝函数。2、对IO的理解应该是:IO时间=等待时间+拷贝时间3、要进行拷贝,就必须判断条件是否成立(比如读就要看接受缓冲区是否有数据,写就要看发送缓冲区是否有数据),而这个条件就被称为读写事件。4、高效IO就是之单位时间内拷贝的数据量大,也就是说,在单位时间内,IO过程中,等的比重越小,IO的效率越高。5、几乎所有提高IO效率的办法,都是减小等的比重。
2026-05-16 16:44:48
365
原创 NAT、内网穿透、代理服务
反向代理服务器是一种网络架构模式,其作为Web服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
2026-05-16 16:31:46
473
原创 C++11线程库
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含<thread>头文件。
2026-05-16 15:43:17
370
原创 网络层IP协议
首先我们要明确IP协议的本质就是提供一种能力,将数据跨网络行A主机送到B主机,而用户需要的是将数据可靠的跨网络从A主机到B主机,而这种可靠性就是由传输层,TCP提供策略实现的。传输层提供可靠性,而网络层将数据从A主机发送到B主机。
2026-05-11 01:15:28
428
原创 传输层协议TCP
TCP全称为"传输控制协议(TransmissionControlProtocol"),也就是要对数据的传输进行一个详细的控制。注意:由于用户通过read、recv等接口将数据从用户缓冲区拷贝到TcP的发送缓冲区后,数据什么时候发?一次发送多少?出错了怎么办?都是有TCP控制的,所以叫传输控制协议.(1)源/目的端口号:表示数据是从哪个进程来,到哪个进程去。(2)32位序号/32位确认号:代表了本报文段所携带的数据的第一个字节的序号。(3)4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少
2026-05-11 00:55:25
663
原创 应用层HTTPS协议
数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。
2026-05-05 16:13:28
527
原创 应用层协议HTTP
HTTPSession是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP协议是无状态的(每个请求都是独立的),因此服务器需要通过Session来记住用户的信息。
2026-05-05 15:58:26
393
原创 进程之间的关系与守护进程
其实每一个进程除了有一个进程ID(PID)之外还属于-一个进程组.进程组是一个或者多个进程的集合,一个进程组可以包含多个进程.每一个进程组也有一个唯一的进程组ID(PGID),并且这个PGID类似于进程ID,同样是一个正整数,可以存放在pid_t数据类型中。接下来启动4个后台进程:/process进程单独启动,sleep的三个进程一起启动:(1)进程组组长的作用:进程组组长可以创建一个进程组或者创建该组中的进程(2)进程组的生命周期:从进程组创建开始到其中最后一个进程离开为止。
2026-05-02 21:18:10
239
原创 TCP套接字编程
注意:多进程版本的只需要在服务端的代码上进行更改,客户端的代码就和前面的一样注意:进程池与前面一样,只需要加入进程池即可注意:客户端代码实现了断联后重新与服务器连接等功能if (argc!// 创建重连模块doreturn 1;// tcp客户端也要进行绑定,但是也是系统进行绑定,绑定随机端口// 客户端在发起connect的时候,进行随机绑定if (n < 0)// 连接失败cnt--;
2026-04-27 14:45:29
249
原创 UDP套接字编程
但是在centos7上测试,并没有出现问题,可能内部的实现加了互斥锁。以上只是基于IPv4的socket网络编程,sockaddrin中的成员struct in_addr sin_addr表示32位的IP地址。注意:因为inetntoa会把结果放到自己内部的一个静态存储区,这样第二次调用时的结果会覆盖掉上一次的结果那么如果有多个线程调用inet_ntoa,是否会出现异常情况呢?UDP套接字是全双工的,是允许同时被写入和同时读出的,所以我们可以创建两个或者多个线程进行同时的收发信息。
2026-04-24 13:21:30
358
原创 C++IO流
在C语言中,如何将一个整形变量的数据转化为字符串格式:1. 使用itoa()函数2. 使用sprintf()函数但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。
2026-04-19 12:20:29
416
原创 C++之四种强制类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2. 显式类型转化:需要用户自己处理缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。
2026-04-18 17:03:07
242
原创 C++特殊类的设计(单例模式)
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。方法一:C++98的实现方法将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。原因:1. 设置成私有:如果只声明没有设置成private,用户自己如果在类外定义了,就可以不能禁止拷贝了2. 只声明不定义:不定义是因为该函数根本不会调用,定义了其实也没有什么意义,不写反而还简单,而且如果定义了就不会防止成员函数内部拷贝了。
2026-04-18 14:54:59
569
原创 C++智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。
2026-04-17 23:53:40
680
1
原创 C++11之包装器
function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。通过上面的程序验证,我们会发现useF函数模板实例化了三份。包装器可以很好的解决上面的问题function在头文件<functional>类模板原型如下模板参数说明:Ret : 被调用函数的返回类型Args…:被调用函数的形参。
2026-04-17 19:23:53
259
原创 C++11(右值引用、移动语义、可变模版参数等...)
在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。C++11中废弃auto原来的用法,将其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初始化值的类型。int i = 10;std::map<std::string, std::string> dict = { {"sort", "排序"}, {"insert", "插入"} };
2026-04-16 21:22:47
420
原创 哈希的应用(布隆过滤器和位图)
一道面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中【腾讯】解决思路:1. 遍历,时间复杂度O(N)---不行2. 排序(O(NlogN)),利用二分查找: logN---不行3. 位图解决---可以数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。
2026-04-13 14:02:02
418
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅