- 博客(102)
- 收藏
- 关注
原创 【MySQL】C语言链接访问
mysql_get_client_info()是 MySQL C API 提供的一个基础函数,核心作用是获取当前程序所链接的 MySQL 客户端库的版本信息。若mysql_field_count(mysql) > 0:表示 SQL 语句应该返回结果集但失败了(如SELECT语法错误),需通过mysql_error()获取错误信息。在使用库之前一定要先初始化,因为返回值mysql是一个复杂的结构体,需要提前分配资源、设置默认参数,才能正常进行后续的连接、查询等操作,是作为后续数据库合法操作的载体。
2025-12-22 09:10:49
699
原创 【MySQL】视图+用户管理
2.标准 SQL 的约束:纯视图不建议加ORDER BYSQL 标准中,ORDER BY是 “结果展示层面的操作”,而视图是 “关系表(无序的)”—— 理论上视图不应包含ORDER BY,只有搭配LIMIT(或数据库扩展语法)时,视图里的ORDER BY才被允许。2.创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响(本质是把单次复杂查询的性能代价,放大到每次视图访问—— 原查询的慢、耗资源,会因为视图 “无存储、重复执行” 的特性,从单次问题变成高频问题)为什么视图的ORDER BY会被覆盖?
2025-12-19 12:19:33
596
原创 【MySQL】事务
其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平 衡点。不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样说明: mysql 默认的隔离级别是可重复读,一般情况下不要修改上面的例子可以看出,事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的时候,即都没有commit的时候,影响会比较大。
2025-12-17 11:29:32
802
原创 【MySQL】索引
现在已经能够在硬件层面定位,任何一个基本数据块了(扇区)。但是在系统软件上,不直接按照扇区(512字节,部分4096字节),进行IO交互,原因如下:1.如果操作系统直接使用硬件提供的数据大小进行交互,那么系统的IO代码,就和硬件强相关,换言之,如果硬件发生变化,系统必须跟着变化。与硬件耦合性太强2.从目前来看,单次IO 512字节,还是太小了。IO单位小,意味着读取同样的数据内容,需要进行多次磁盘访问,会带来效率的降低。
2025-12-05 17:55:42
794
原创 【MySQL】复合查询+内外连接
当子查询作为表(派生表)出现在FROM子句中(无论和其他表做笛卡尔积、JOIN 还是 LEFT JOIN),都必须给子查询起别名关于join:JOIN(内连接):只留 “两表都有匹配数据” 的记录(相当于 “交集”);LEFT JOIN(左连接):先保留 “左表所有记录”,再匹配右表数据 —— 右表有匹配项就显示,没有就显示 NULL(相当于 “左表全部 + 两表交集”)。想 “只留两表都匹配的数据”→ 用 JOIN(内连接);
2025-11-27 15:26:28
852
原创 回溯算法专题
什么是回溯算法:1.回溯算法是⼀种经典的递归算法,通常⽤于解决组合问题、排列问题和搜索问题等2.回溯算法的基本思想:从⼀个初始状态开始,按照⼀定的规则向前搜索,当搜索到某个状态⽆法前进时,回退到前⼀个状态,再按照其他的规则搜索。回溯算法在搜索过程中维护⼀个状态树,通过遍历状态树来实现对所有可能解的搜索。3.回溯算法的核⼼思想:“试错”,即在搜索过程中不断地做出选择,如果选择正确,则继续向前搜索;否则,回退到上⼀个状态,重新做出选择。
2025-11-25 18:13:25
614
原创 【MySQL】内置函数
注意:历史命令中有设置,如果触发一些关键字如密码之类的,不会再提供给用户查看历史命令的权利,也就是按上下键不再回显,为了保证数据的隐私性和安全性。发现,当创建表的字段指明的日期格式时,实际插入会截断,只插入有效的部分,虽然多个函数都可以使用,但最好使用最匹配的那一个,展示需求。2.rand获取随机数,可以配合fomat格式化使用,再通过缩放,就可以获得任意区间内浮点数或整数的随机值。实际应用:查询在一定时间内发布的贴子,以两分钟为例。3.mod负数页正常取模。
2025-11-25 10:06:24
735
原创 二叉树中的深搜
用一个全局变量的字符串数组来存储每条路径的结果,需要知道一个概念“恢复现场”,指的是在递归回溯的过程中,需要恢复前驱节点的状态,该题中由于是要统计路径,所以回溯时需要去掉叶子节点的路径,如果使用全局变量来记录路径,删除起来比较复杂,所以采取临时变量的方式,每次递归调用时传入一个参数,这样每一层就会生成一个path的临时变量来记录当前层的路径,层与层之间互不影响,所以回溯的过程中恢复现场的过程被函数自动完成了。3.否则,将当前节点值加上 “->” 作为路径的分隔符,继续递归遍历当前节点的左右子节点。
2025-11-24 17:47:54
1113
原创 【MySQL】基本查询
curd操作、where条件、select的别名问题、删除与截断、分组聚合、group by子句、having与where区别、一切皆表的理解
2025-11-24 16:14:38
882
2
原创 【MySQL】表的约束
我们可以简单理解成,主键更多的是标识唯一性的。int()括号中默认创建的数字代表数据的范围,有符号位和无符号位,分别用11位和10位来表示,无符号数最大值对应2^32-1,42亿多,对应十位二进制数,所以默认显示为int(10),有符号数由于多一位符号表示位,所以默认为int(11)场景:选课系统,一门课程只能被学生选择一次,一个学生可以选择多门课程,所以需要给这两个字段设置主键,约束了两个不能都同时重复出现,单独重复出现的情况允许,比如一名学生选了多门课,一门课被不同的学生选了。
2025-11-22 18:12:46
1196
原创 递归专题集
递归:搜索:回溯:回溯:基于 “选 - 试 - 回” 的循环,在分叉路口选择一个选项深入探索,直到走到 “终点(找到解)” 或 “死胡同(无解)”,再退回上一个分叉路口,撤销之前的选择,换另一个选项继续探索,本质是穷举所有可能路径的通用方法。剪枝:是回溯 / DFS 的效率优化技巧:在探索路径的过程中(无需走到尽头),根据问题的约束条件(如数值限制、去重要求等),预判某条路径 “一定无法达到目标”,直接终止该路径的后续探索,避免无效的递归和回退,减少不必要的计算。
2025-11-21 19:50:27
542
原创 【MySQL】数据类型
MySQL 的表数据以 “行” 为单位存储,每行包含所有字段的内容(除非字段是 TEXT/BLOB 且行外存储)。例如一张表有 id、name、age 三个字段,每一行的数据会把这三个字段的值按结构打包存储,形成一个 “行记录”。t7表中有id字段,占用了大小的配额,会影响varchar可创建的总大小。上限是所有行内字段的 “存储字节 + 元数据开销” 的总和。2.varchar是行内存储变长字段,即字段数据与其他字段一起存储在 “行” 的结构中。
2025-11-21 09:41:13
573
原创 【MySQL】表的操作
datatype 后面还可以跟comment给field添加说明文字,是字段注释语法,后跟字符串用单引号包裹,对表的功能无影响,仅作为文档说明。展示表的完整创建语句(包括字段定义、数据类型、约束、索引、存储引擎、字符集等所有建表细节),跟一个\G选项可以优化显示的格式。注意:这里是覆盖写,如果只修改了name长度,没有修改comment,那么查看表时对应字段就为空。插入新字段后对原来表中的数据没有影响,相当于多了一个字段没有数据设为空。使用change,注意修改的新字段需要完整信息,比如大小。
2025-11-20 08:12:52
724
原创 【MySQL】库的操作
MySQL 服务是通过配置文件(/etc/my.cnf 或 /etc/mysql/my.cnf)指定的 “数据目录” 来管理数据的,默认是 /var/lib/mysql 目录,所以进行数据库操作时先要进入到该目录下,如果想在自己创建的目录下进行操作那么需要修改配置文件。mkdir 只做了 “建目录” 这一个最表层的动作,缺少了 MySQL 识别、管理、保护数据的核心环节,只是 “空文件夹”,不是 MySQL 认可的 “合法数据容器”,所以永远要通过sql语句来创建数据库!
2025-11-19 18:34:19
1016
原创 【MySQL】数据库基础
数据库是 “高效、安全、可共享的海量数据管理工具”,其中MySQL是一套提供数据存取服务的网络程序。一般人们所说的数据库指的是,在磁盘或内存中存储的特定结构组织的数据(在磁盘或内存中存取的一套方案)mysql是数据库服务到底客户端,mysqld是服务器端,mysql本质是基于C(mysql)S(mysqld)模式(客户端服务端)的一种网络服务。存储数据为什么不用文件,还要创建数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据。
2025-11-18 21:27:41
1261
原创 【Linux】Reactor
1.隔离创建目录,在其中隔离生成编译产生的中间文件编译过程会生成大量中间文件,隔离目录可以避免污染源代码,可以同时支持debug和release模式,不用全部删除重新来;若重新构建,直接删除对应的构建目录(如 rm -rf build_debug),重新创建并执行 cmake 即可,没有任何残留;多人协作时,每个人都在自己的 build 目录构建,不会因环境不同产生冲突(CMake 会在各自的 build 目录生成独立的缓存和 Makefile)
2025-11-17 21:53:39
1297
原创 【Linux】高级IO
当条件满足时,首先将数据向上层交付,给tcp的接收队列,当内核发现某个fd的状态发生变化,就会检查该fd是否被epoll监听,如果是就会调用ep_poll_callback回调函数,将内核中eventpoll结构体中红黑树的对应epitem节点添加到就绪队列中去,然后唤醒epoll_wait,遍历就绪队列将其中存储的节点拷贝到用户态的epoll_event数组中去,最后返回给应用程序。ET 模式的设计初衷是高效处理高并发场景,其核心是 “一次触发后,用非阻塞读写循环处理完所有数据,避免重复触发事件”。
2025-11-12 18:29:39
647
原创 【Linux】网络层与数据链路层中重点介绍
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.
2025-11-07 22:11:45
900
1
原创 【动态规划】两个数组的dp
二. (1035.) 不相交的线如果要保证两条直线不相交,那么下一个连线的元素必须在上一个连线的两个元素后面,这就变成了求最长公共子序列的模型了三. (115.) 不同的子序列初始化时注意,选择多增加一行一列的方式,来避免边界情况的判断比如原字符串为空的情况,这样进行动态规划时原字符串为空的情况就默认包含了,当t为空时,s初始化为1。二维dp表中,一定是t在前,s在后,以目标子串为基础去遍历子序列四. (44.) 通配符匹配五. (10.) 正则表达式匹配六. (97.) 交错字
2025-11-04 10:55:29
221
原创 【Linux】TCP协议
tcp复杂的原因是要保证可靠性又要尽可能提高效率可靠性:校验和序列号(按序到达)确认应答超时重发连接管理流量控制拥塞控制提高性能:滑动窗口快速重传延迟应答捎带应答其他:定时器(超时重传定时器, 保活定时器, TIME_WAIT定时器等基于TCP应用层协议HTTPHTTPSSSHTelnetFTPSMTP当然, 也包括自己写TCP程序时自定义的应用层协议tcp和udp对比。
2025-11-03 20:33:30
1036
1
原创 【动态规划】回文子串问题
理解回文串的概念,连续的字串,单个字符也算,只要起始位置不同就算,该题使用动态规划的最大价值就是利用二维数组可以表示所有的字串是否回文,二维对应字串的起始位置。注意填表顺序,从下往上。回文字串问题一般要通过二维dp表来表示一段区间,这样才能清除字串状态才能更好划分子问题。为什么状态表示用i结尾表示不行,因为无法判断加入一个字符后是否还是回文子序列。
2025-10-29 12:07:26
314
4
原创 【Linux】HTTPS协议
区分:所有数据指纹都是数据摘要,但不是所有数据摘要都是数据指纹—— 只有当数据摘要被用于 “标识数据身份、唯一性识别” 时,才被称为数据指纹。数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成⼀串固定长度的数字摘要。数字指纹并不是⼀种加密机制,但可以用来判断数据有没有被窜改。• 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
2025-10-28 23:32:37
836
2
原创 【动态规划】子数组问题
与上题区别在于,不仅需要考虑数组内连续的区域,也要考虑数组首尾相连的区域,对于前者直接求最大值即可,对于后者可以进行转化,求数组内连续区域的最小值,再用数组和减去最小值即可得最大值。首先要理解什么是湍流数组,就是元素间排列一大一小趋势的数组。
2025-10-23 17:16:42
332
原创 【linux】tcp网络程序
TCP网络程序的简单实现、服务器的6种实现方式以及通过守护进程方式运行,前后台任务,全双工特性,了解telnet程序、tcp通信时所需的接口
2025-10-20 10:17:41
607
原创 【动态规划】简单多状态dp问题
注意建dp表,不限制交易次数,只要在限制范围内即可,每一个位置记录三种交易的可能,即每个交易次数的收益情况。初始化时由于[i][j]位置要用到[i-1][j-1]位置的值正常情况下要初始化一行一列,对关于j次数变化的状态转移方程做转化,变为两条语句,判断了j交易次数的合法情况,避免了j在0位置依赖-1位置初始化的情况。学会运用状态机来表示每个状态之间的关系,罗列不同的状态,划线,线的起点代表上一个位置的状态,箭头指向当前状态,过程中代表做了些什么,总体要表示由什么状态可以到达当前状态。
2025-10-18 12:59:39
333
原创 解决拓扑排序
拓扑排序(Topological Sorting)是对有向无环图(DAG, Directed Acyclic Graph) 顶点的一种排序方式,核心是让图中任意一条有向边对应的 “前驱顶点” 始终排在 “后继顶点” 之前,最终得到一个满足所有边的方向约束的顶点序列。它不是唯一的 —— 一个 DAG 可能存在多个合法的拓扑序列。入度:有多少边指向我,作用是判断顶点是否具备开始条件,入度 = 0:无任何前置边,是 “无依赖的起点”(如拓扑排序的初始节点、项目中的 “启动任务”)
2025-10-14 15:18:31
417
2
原创 多源BFS
从中间的1遍历找边界有点无从下手,所以采取正难则反的思想,从边界上的1做bfs搜索,能搜索到的证明可以走到边界,标记状态并且下标入队列,继续搜索直到没有连着的1为止。这⼀种⽅式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。与01矩阵思路一样,唯一注意读题,会先给你一个矩阵告诉你什么代表陆地和水域,你需要自己创建一个矩阵来计算每个格子的高度,其中水域格子高度为0,以这些格子来进行多源bfs。一个个去判断,进行两次bfs,一次判断是否能走到边界,第二次用来标记状态避免重复判断,会超时。
2025-10-13 08:36:55
538
1
原创 BFS解决最短路径问题
注意:用队列进行BFS 求解最短路径时,需要按 “层” 处理节点 —— 同一层的所有节点属于 “同一步”,需一次性次性处理完当前层的所有节点后,再进入下一层。与floodfill算法区别在于最短路径问题需要记录层数(步数),而 Flood Fill 更关注是否遍历完所有连通节点。
2025-10-10 19:04:22
237
2
原创 【Linux】网络基础(一)
了解局域网和广域网、了解网络协议、理解TCP/IP五层结构模型、理解网络传输基本流程、了解以太网通信原理、认识ip与mac地址,理解跨网络传输基本流程
2025-10-07 11:43:58
606
4
原创 BFS解决FloodFill算法
是一种从指定起点开始,向周围相邻区域扩散并填充相同 / 相似属性元素的算法,核心思想类似 “水波纹扩散”—— 从初始点出发,逐步将周围符合条件的像素、单元格等 “染色”(替换为目标值),常用于图像编辑、地图区域标记、迷宫路径搜索等场景。核心原理:“扩散 + 条件判断”1.确定起点:选择一个初始位置(如图像中的某个像素坐标 (x,y));2.扩散规则:检查起点周围的相邻元素(如上下左右,或包含对角线的 8 个方向);
2025-10-05 22:17:43
635
1
原创 【BFS算法】队列+优先级队列
思路:由于要用最大的两个元素计算,可以创建大堆来计算,c++中优先级队列默认就是大堆。我们可以创建⼀个⼤根堆;然后将所有的⽯头放⼊⼤根堆中;每次拿出前两个堆顶元素粉碎⼀下,如果还有剩余,就将剩余的⽯头继续放⼊堆中public:q.push(0);//防止队列为0,也可以直接判断来返回//最大值q.pop();//最大两元素相等情况else {//第二大值q.pop();
2025-09-19 12:26:06
768
1
原创 【linux】进程信号
信号的概念、硬件中断、信号的5种产生方式、coredump、信号的保存、内核中的三张表、信号集处理函数和系统调用、信号的捕捉、重谈进程地址空间(3)、SIGCHLD的特例问题
2025-09-17 17:22:55
650
1
原创 【算法】栈专题
完美符合栈的特性,后进先出,后入栈的元素和栈顶元素相比较,等于就使栈顶元素出栈,不等于就自己进栈,但本题要求返回string,用栈得到结果后还要转化为string,可以直接用数组来模拟栈,在数组的尾部进行尾插尾删,实现栈的进栈和出栈。⼀直让元素进栈,进栈的同时判断是否需要出栈。当所有元素模拟完毕之后,如果栈中还有元素,那么就是⼀个⾮法的序列。1.用双栈来实现,每次遇到’]'时拿出字符栈顶元素(记为m)和数字字符栈顶元素(记为n),让m拼接n次,pop掉字符和数字栈原来的栈顶元素,push到新的栈顶元素后。
2025-09-11 21:46:37
418
25
原创 【Linux】进程间通信
匿名管道、命名管道,简单进程池实现、简单日志实现、共享内存详解、IPC系统调用接口介绍、了解消息队列和信号量、理解IPC在内核数据结构中的设计
2025-09-11 21:06:38
908
11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅