- 博客(87)
- 收藏
- 关注
原创 MySQL————mysql connect
在函数执行过程中,mysql_store_result 会通过 malloc 动态分配一片内存空间,用于存储从服务器读取的所有数据 —— 值得注意的是,MySQL 会将查询结果中表格的所有内容都以字符串形式读取,再由 mysql_store_result 对这些字符串数据进行归置整理,形成结构化的结果集。MYSQL *mysql:指向 MYSQL 结构体的指针(需先通过 mysql_init() 初始化),用于存储连接相关的状态和信息,是函数操作的核心对象。运行结果如果是mysql的版本号,那么就没问题。
2025-10-25 23:07:04
654
原创 MySQL————用户管理
host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆。authentication_string: 用户密码通过password函数加密后的。MySQL中的用户都存储在系统数据库mysql的user表中。1.完成相关操作后,即可使用新账号和新密码进行登录。注意:如果发现赋权限后没有生效,执行如下指令。刚创建的用户没有任何权限,需要给用户授权。不要轻易添加允许从任意地址登录的用户。*_priv: 用户拥有的权限。权限列表,多个权限用逗号分开。用户修改指定用户的密码。
2025-10-23 23:23:54
318
原创 MySQL————事务
这意味着事务并非数据库系统与生俱来的组件,而是专门为应用层服务的机制,通过封装复杂的底层处理逻辑,让应用程序在操作数据(包括处理一行行记录)时,能更高效、安全地保障数据一致性,无需陷入对底层异常场景的繁琐考量。设置隔离级别的核心目的,是解决多事务并发执行时的隔离性问题:事务从begin到CURD再到commit存在执行阶段,多个事务的操作会交织进行,为确保事务 “有先有后” 的逻辑顺序,需通过隔离级别控制不同事务能看到的数据范围 —— 即先来的事务是否应看到后来事务的修改,从而平衡并发效率与数据一致性。
2025-10-23 01:04:02
824
原创 MySQL————索引
也就是说,磁盘这个硬件设备的基本单位是 512 字节,而 MySQL(InnoDB存储引擎)在IO交互时,以16KB为基本单位与操作系统交互,而操作系统以4KB为单位和磁盘交互,其中MySQL的16KB单位相当于4个操作系统的4KB单位(即4*4KB),通过这种分层的IO单位适配,实现了MySQL在高IO场景下的效率提升。磁盘是计算机中的一个机械设备,相比于计算机其他电子元件,磁盘效率是比较低的,在加上IO本身的特征,可以知道,如何提交效率,是 MySQL 的一个重要话题。虽然你很优秀,但是有更优秀的。
2025-10-18 22:36:42
915
原创 MySQL————表的内外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。如果联合查询,左侧的表完全显示我们就说是左外连接。如果联合查询,右侧的表完全显示我们就说是右外连接。显示SMITH的名字和部门名称。外连接分为左外连接和右外连接。表的连接分为内连和外连。
2025-10-17 02:12:00
187
原创 MySQL————复合查询
多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。解决多表的本质:想办法将多表转化成为单表,所以mysql中,所有select的问题全部都可以转换成单表问题。in关键字:查询和10号部门的工作岗位相同的雇员的名字、岗位、工资、部门号,但是不包含10号部门自己的。子查询语句出现在from子句中时,这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。
2025-10-17 01:31:22
253
原创 MySQL————内置函数
注意:length函数返回字符串长度,以字节为单位。4.5 ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。4.2 md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。4.4 password()函数,MySQL数据库使用该函数对用户加密。比如:字母、数字算作一个字节,中文表示多个字节数(与字符集编码有关)1.5 date函数:返回date参数的日期部分。1.6 在日期的基础上加日期。2.8 replace函数。2.3 instr函数。
2025-10-15 23:50:45
315
原创 C++特殊类的设计
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。5.2 单例模式的定义与使用场景5.2.1 定义一个类只能创建一个对象,即单例模式。5.2.2 使用场景。
2025-10-15 21:57:32
870
原创 MySQL————表的增删改查
1.增加 insert创建读取Update(更新Delete(删除)1.增加 insert1.1 语法1.2 案例创建一张学生表。1.2.11.2.3 多行指定列插入1.2.4 多行全列插入。
2025-10-14 08:39:24
903
原创 MySQL————表的约束
建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许插入。理论上,在上面的例子中,如果我们不创建外键约束,就正常建立学生表以及班级表,该有的字段我们都有。auto_increment:当对应的字段不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值进行 +1操作得到一个新的不同的值。约束本质是通过技术手段倒逼程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据都是符合数据约束的。
2025-10-11 21:01:06
1044
原创 MySQL————数据类型
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844(因为utf中,一个字符占用3个字节)。而且出于效率 考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。案例:有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中多选,(男,女)中单选。M表示每个值的位数,范围从1到64。char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。
2025-10-09 23:56:10
587
原创 MySQL————表的操作
在项目实际开发中,经常修改某个表的结构,比如字段名字、字段大小、字段类型、表的字符集类型、表的存储引擎等等。我们还有需求,添加字段、删除字段等等,这时我们就需要修改表。不同的存储引擎,创建表的文件不一样。校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。字符集,如果没有指定字符集,则以所在数据库的字符集为准。注意:删除字段一定要小心,删除字段及其对应的列数据都没了。插入新字段后,对原来表中的数据没有影响。4.1.2 修改字段属性(一列的属性)users.MYD:表数据。4.1.1 修改表名。
2025-10-08 12:55:46
166
原创 MySQL————库的操作
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集 utf8,校验规则是 utf8_ general_ ci。if not exists:如果系统没有 db_name 的数据库,则创建一个名叫 db_name 的数据库,如果有则不创建。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建。
2025-10-08 10:22:38
824
原创 MySQL————数据库基础
(注意:一般的文件也具备数据的存储功能,但是从用户角度看,文件并没有提供非常好的数据管理能力)mysqld是数据库服务的服务器端(可执行程序名字中的 d 代表守护进程,说明它是一个网络服务,mysqld就是mysql的后端)它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的。:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。在数据库内建立表,本质就是在linux下创建对应的文件。
2025-10-07 15:47:21
843
原创 网络层————IP协议
例如:某 IPv4 数据包第一字节低 4 位(IHL)= 6,表示报头长度为 6×4 = 24 字节(其中包含 4 字节选项字段),16 位总长度字段值为 0x02A0(即 672 字节),则有效载荷长度 = 672 − 24 = 648 字节,从第 25 字节起为传输层或应用层数据。信号在长距离传输中会衰减,距离越远、时间越长,衰减越明显。潜在问题:实际操作过程中并不建议分片,因为会增加丢包概率,在IP中,如果其中任何一个分片丢失了,IP组装失败的报文会直接整体丢失,这样会要求对方重发整体报文。
2025-10-06 23:27:40
869
原创 传输层————TCP
如果2001-3000的报文已被接收方收到,但返回的ACK在传输中丢失,而1001-2000、3001-5000的ACK均正常返回,接收方会根据“确认序号为x表示x之前所有报文已全部收到”的规则,直接确认到5001。在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是 "一发一收" 的,这意味着客户端给服务器说了 "How are you",服务器也会给客户端回一个 "Fine, thank you"。但刷新几次后又能进入页面,是因为之前的请求超时释放了队列空间,新的请求才有机会被处理。
2025-09-21 15:40:09
1389
原创 传输层————UDP
用UDP传输100个字节的数据:如果发送端调用一次sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom接收100个字节;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致(乱序);如果缓冲区满了,再到达的UDP数据就会被丢弃。如果我们需要传输的数据超过64K,所以就需要在应用层手动的分包,多次发送 , 并在接收端手动拼装。UDP没有真正意义上的 发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
2025-09-14 15:07:11
891
原创 应用层————HTTPS协议
所以,因为HTTP内容是明文传输的,明文数据会经过路由器、WiFi热点、通信服务运营商、代理服务器等多个物理节,如果信息在传输过程中被劫持,传输的内容就完全暴露了。加密的方式有很多,但是整体可以分成两大类:对称加密和非对称加密。如果强行篡改客户端收到该证书后发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。就算中间人篡改了证书的明文,由于他没有CA机构的私钥,所以无法哈希之后用私钥加密形成签名,那么也就没有办法对篡改后的证书形成匹配的签名。
2025-09-08 23:16:37
869
原创 应用层————HTTP
示例:在 http://www.example.jp/dir/index.htm 中,/dir/index.htm 是文件路径 ——/ 为 Web 根目录,dir 是根目录下的子目录,index.htm 是 dir 目录下的目标文件。uid=1 中,uid=1 是查询字符串,代表请求 “uid 为 1 的用户信息”。如果浏览器设置成cookie文件的保存在文件中,浏览器特定的安装路径下会存在文件级的cookie,而文件在磁盘中,即便将浏览器关闭,重启电脑时,再访问b站照样不用登录。HTTPS会讲解加密。
2025-09-08 00:19:09
1094
原创 应用层————序列化和反序列化
接收方反序列化处理:接收方收到服务器转发的字符串后,需遵循与发送方完全一致的规则,将字符串重新还原为包含“消息内容、昵称、时间”的结构化数据(即打散还原为原结构体),这个从传输格式还原为结构化数据的过程即为反序列化。的实际情况,对数据进行合并或拆分后再发送,这就使得接收方无法直接将读取到的数据与发送方的单次发送操作对应起来,需要额外的机制来解决数据的正确解析问题。无论何种方案,只要保证 “发送方构造的数据能被接收方正确解析”,即为有效的应用层协议,而序列化与反序列化是实现该目标的关键技术。
2025-08-31 23:19:25
930
原创 -守护进程-
当关闭一个会话时,其中的前台进程会随会话终止而退出,但后台进程不会直接退出,它们会被系统进程(PPID 显示为 1)“领养”,此时会话虽被保留,但 TPGID 会显示为 -1(当前进程与终端的关联状态异常或未明确初始化),这表明后台进程仍会受到用户登录和退出的影响。若要让后台进程完全不受用户登录与注销的影响,需要将其进行守护进程化处理,具体可通过让其自成一个新会话来实现,使其脱离原终端和会话的控制,成为独立运行的系统级进程,这样之前的会话不管如何登录、注销,都不会对这个新会话中的进程产生影响。
2025-08-26 14:48:52
859
原创 网络编程套接字
在Linux系统中,执行 ls /dev/pts/ 命令可以查看 /dev/pts 目录下的内容,该目录存放着当前系统中所有伪终端(Pseudoterminal)的设备文件,这些文件以数字(如0、1、2等)命名,每个数字对应一个正在运行的伪终端实例,通常关联着当前打开的终端窗口、SSH连接、远程登录会话等交互界面,能反映出系统中正在使用的所有“虚拟终端会话”的标识。由于缓冲区是用户管理的,每次调用可以使用不同的缓冲区,或者在重复使用同一缓冲区前做好数据保存,因此不会出现覆盖前一次结果的问题。
2025-08-25 21:37:12
836
原创 Linux————网络基础1
因此,对于软件学习者而言,更适合从TCP/IP的5层模型入手,即物理层、数据链路层、网络层、传输层和应用层,TCP/IP模型为简化设计,将表示层和会话层的功能整合到了应用层,这种划分更贴合实际网络环境和开发需求。此外,主机在网络中进行数据的读写操作,实际上也是通过进程来完成的,这些进程共同作用于局域网这一共享资源,实现主机间的通信与数据交互。为此,网络通信中设置了不同层级的协议,每层协议都有明确的分工,专门负责处理自身对应层级的特定问题,通过这种分层协作的方式,确保数据能够高效、稳定地完成远距离传输。
2025-08-15 23:08:04
637
原创 linux----线程
同步方案流程中,等待队列负责对需访问共享资源的执行流进行排队:先通过锁管理资源访问,未获得锁的执行流进入等待队列阻塞,待持有锁的执行流释放锁后,按顺序唤醒队列中的下一个执行流获取锁,确保资源访问有序。而线程间代码的分离,关键在于让不同线程执行不同的函数——在C和C++中,所有变量和代码均使用虚拟地址,定义的多个函数会被编译器以平坦模式赋予不同的线性编址,即每个函数拥有唯一的虚拟地址,因此只需为每个线程指定不同的函数去执行,就能凭借函数地址的天然差异,在代码层面实现线程间的地址空间划分,达成代码分离。
2025-08-12 18:53:53
745
原创 页表结构&&内存访问机制
一级页表是页表系统的 “根”,仅存在 1 个,最多可关联 2¹⁰=1024 个二级页表(每个目录项对应一个二级页表入口),但二级页表按需创建,并非全部存在。因此,内存管理中缺页中断的判定,主要依赖于页表本身是否存在(通过一级页表目录项的标记)、页表项与物理内存的映射关系是否存在(通过二级页表项的标记),以此确定对应的页框是否已在物理内存中。寻址逻辑:所有变量通过 “起始地址 + 偏移量” 定位,x86 架构 CPU 通过起始地址确定数据块起点,依据类型确定偏移范围(需读取的字节数),完成对变量的完整访问。
2025-08-02 00:24:31
1065
原创 进程通信————system V 消息队列 && 信号量
资源形式:由操作系统提供的消息队列功能 1:使进程双方能看到同一个队列,为通信提供基础功能 2:允许不同进程向内核发送带类型(用于区分发送方)的数据块。
2025-07-28 17:00:42
1076
原创 进程间通信————system V 共享内存
操作系统先在物理内存中开辟一块专用空间,作为进程间共享的基础资源;借助页表机制,将这块物理空间映射到参与通信的进程各自地址空间的共享区域,建立虚拟地址与物理地址的关联;向应用层返回映射后的虚拟地址起始位置,进程即可通过该地址直接读写共享内存,实现数据交互。
2025-07-28 17:00:22
859
原创 进程通信————命名管道
写操作需等待读方打开管道,否则会处于阻塞状态;读操作若缓冲区为空且没有写方,同样会阻塞。数据按 “先进先出”(FIFO)规则传递,一次交互完成后缓冲区会被清空。
2025-07-24 22:34:18
669
原创 文件操作----文件描述符
在C语言文件操作中,使用 `fwrite(message, strlen(message), 1, fp)` 写入字符串时无需添加 `+1`,因为 `strlen` 返回的是不含终止符 `'\0'` 的字符串长度。先把之前创建的log.txt删除,然后编译运行myfile.c,当前工作目录下就会有新创建的log.txt文件,查看里面的内容,就是我们写入的一行hello Linux message。我们每运行一次myfile,会发现里面会多一行abcd的内容,这体现了’a’参数追加写入的功能。
2025-07-21 20:05:56
754
原创 静态库和动态库
静态库实际上就是多个.o文件的归档集合。通过ar命令将多个.o文件打包成一个.a文件,方便在链接时统一使用。在链接阶段,链接器会从静态库中提取需要的目标文件,合并到最终的可执行文件中。定义全局变量myerrno(模拟系统 errno)当div(10,0)执行时:if(y==0){myerrno=1;// 用1标识“除数为0”错误return -1;// 返回值无法单独表示错误调用者通过检查myerrno的值,即可判断函数是否执行出错及错误类型。
2025-07-21 20:05:06
978
原创 程序替换----exec系列函数
使用execl等exec系列函数执行其他程序后,原程序中exec调用之后的代码(eg:和return 0))不会执行。无论替换为lstop等任何程序,均表现为:只执行被替换程序,原进程后续代码被完全跳过。exec系列函数用于在当前进程中替换程序(加载新程序执行),核心功能相同,差异主要体现在参数传递方式和程序查找方式。execlexeclpexecleexecvexecvpexecvpeexecve(其他库函数均基于execve实现)
2025-07-09 16:17:46
1021
原创 进程控制----进程终止
退出码:进程向父进程(或 Shell)传递的执行状态标识。接收者:作用:查看命令行中最近一个正常终止进程的退出码。(三)代码示例:退出码的设置与应用1.基础示例:返回成功 / 失败码2.系统错误码示例(文件打开失败) 运行后输出,对应错误描述为 "No such file or directory"。3.自定义错误码体系三、错误码的解析与转换(一):错误码转文本描述 作用:将整数错误码转换为可读字符串(需包含)。 示例:打印系统错误码描述
2025-07-05 19:28:54
725
原创 Linux调试器-gdb
l 0l mainmainb 19mainb addToTopinfo bd 1rsaddToTopnprintfp ip &idisplay i(每次暂停自动显示i变量值)(显示所有设置了的持续变量)(取消编号2的自动显示)until 11cq。
2025-05-10 09:45:09
853
原创 C++11----智能指针
public:SmartPtr(T* ptr) : _ptr(ptr) {} // 构造时获取资源~SmartPtr() { // 析构时释放资源} // 行为像指针private:T* _ptr;// 使用示例:自动释放资源,无需手动deletevoid f() {// 解引用// 指针访问div();// 若抛异常,sp1/sp2/sp4析构时自动释放//浅拷贝问题:SmartPtr未自定义赋值导致内存泄漏sp1 = sp2;
2025-05-10 09:44:49
1137
原创 Linux进程概念
环境变量是操作系统维护的key-value(键值对)形式的全局配置参数,以name=value格式存在,用于描述系统运行环境信息,具有全局属性,可被子进程继承 (后面会详细讲解)。核心作用:路径定位:如PATH指定可执行文件搜索路径。用户配置:如HOME存储用户主目录,USER记录当前用户名。程序运行:影响程序行为(如LANG设置语言编码)。
2025-05-09 16:31:11
848
原创 C++11新特性
/ 标准构造方式// 列表初始化方式// 隐式调用构造函数(有explicit会报错,因为无法隐式类型转换)// 显式直接构造// 临时对象绑定,临时对象具有常性// 错误:非常引用不能绑定临时对象// 正确:常引用延长临时对象生命周期。
2025-04-30 17:10:33
2000
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅