<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shajjs的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shajjs</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shajjs]]></copyright><item><title><![CDATA[MYSQL 使用C语言链接]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161366047</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161366047</guid><author>shajjs</author><pubDate>Sun, 24 May 2026 19:37:11 +0800</pubDate><description><![CDATA[做一下准备工作。我们创建了需要的用户和数据库，接下来我们需要下载mysql链接c语言的库。apt install libmysqlclient-dev -y 通过这个语句安装一下我们就可以使用了。就在这个目录下的mysql.h中。连上服务器只要这个代码能跑就没问题。]]></description><category></category></item><item><title><![CDATA[mysql视图和用户管理]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161344826</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161344826</guid><author>shajjs</author><pubDate>Sun, 24 May 2026 15:35:56 +0800</pubDate><description><![CDATA[视图视图视图是一个虚拟表，其内容由查询定义。同真实的表一样，视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表，基表的数据变化也会影响到视图。]]></description><category></category></item><item><title><![CDATA[MYSQL事务]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161193791</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161193791</guid><author>shajjs</author><pubDate>Sat, 23 May 2026 17:00:37 +0800</pubDate><description><![CDATA[事务就是一组DML语句组成，这些语句在逻辑上存在相关性，这一组DML语句要么全部成功，要么全部 失败，是一个整体。MySQL提供一种机制，保证我们达到这样的效果。事务还规定不同的客户端看到的 数据是不相同的。事务就是要做的或所做的事情，主要用于处理操作量大，复杂度高的数据。假设一种场景：你毕业了， 学校的教务系统后台 MySQL中，不在需要你的数据，要删除你的所有信息一般不会:) ),那么要删除你的 基本信息(姓名，电话，籍贯等。]]></description><category></category></item><item><title><![CDATA[MYSQL索引]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161147077</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161147077</guid><author>shajjs</author><pubDate>Mon, 18 May 2026 13:40:42 +0800</pubDate><description><![CDATA[索引：提高数据库的性能，索引是物美价廉的东西了。不用加内存，不用改程序，不用调sql，只要执行 正确的 create index，查询速度就可能提高成百上千倍。但是天下没有免费的午餐，查询速度的提高是以插入、更新、删除的速度为代价的，这些写操作，增加了大量的IO。所以它的价值，在于提高一个海量数据的检索速度。常见索引分为：主键索引唯一索引(unique)普通索引(index)全文索引解决中子文索引问题。我们看一下我们不加索引查找的效率。begin。]]></description><category></category></item><item><title><![CDATA[MYSQL的基本查询]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161117078</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161117078</guid><author>shajjs</author><pubDate>Sat, 16 May 2026 16:58:36 +0800</pubDate><description><![CDATA[就是插入相同的东西，你就想插入，你就可以使用后面的语句把前面的替换了。这时候是没有发生冲突，跟插入语句差不多。此时出现了2行受到影响，此时说明冲突了。是先删除原来的，然后再删除。]]></description><category></category></item><item><title><![CDATA[MYSQL表的约束]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161111628</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161111628</guid><author>shajjs</author><pubDate>Fri, 15 May 2026 15:57:37 +0800</pubDate><description><![CDATA[意思就是说，如果你设置了NOT NULL，并且没有设置默认值此时你就不能跳过这一行，必须插入数据，这个约束的是客户忽略这一列的插入时候的报错，这个NOT NULL是约束用户必须插入合法的数据，不能插入空值，一个是忽略的时候，一个是实际的插入的时候，二者互补。我们的class表中，我们想删除1号班级，此时报错了，因为你的1号班级中还存在学生，肯定不能删除啊，所以此时就报错了，但是下面你只要把这个学生从学生表中删除使得一号班机没有人了，此时才能删除，这两张表互相约束。这个属性，括号内的数字是毫无意义的。]]></description><category></category></item><item><title><![CDATA[MySQL数据类型]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161024023</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161024023</guid><author>shajjs</author><pubDate>Fri, 15 May 2026 13:03:30 +0800</pubDate><description><![CDATA[测试一下范围我们发现插入-129超过范围了，此时就报错了。我们C/C++使用的时候，这个char a = 1234567 不会报错，但是我们的MySQL在使用的时候，就会被拦截了，这就导致我们程序员必须正确的插入数据。]]></description><category></category></item><item><title><![CDATA[库的操作和表的操作]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161018528</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161018528</guid><author>shajjs</author><pubDate>Tue, 12 May 2026 17:07:21 +0800</pubDate><description><![CDATA[四种指定对应的编码的格式。不区分大小写创建一个数据库，校验规则使用不区分大小写。use test1;]]></description><category></category></item><item><title><![CDATA[Mysql]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/161016348</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/161016348</guid><author>shajjs</author><pubDate>Tue, 12 May 2026 15:04:17 +0800</pubDate><description><![CDATA[存储数据用文件就可以了，为什么还要弄个数据库?文件保存数据有以下几个缺点：文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库存储介质：磁盘内存为了解决上述问题，专家们设计出更加利于管理数据的东西——数据库，它能更有效的管理数据。]]></description><category></category></item><item><title><![CDATA[五种IO模型与⾮阻塞IO]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160532740</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160532740</guid><author>shajjs</author><pubDate>Tue, 28 Apr 2026 16:40:27 +0800</pubDate><description><![CDATA[我们read/recv 读的时候，本质就是IO，就是等+拷贝，不就是需要等待我们有人写入内容吗，有内容就从就收缓冲区中拷贝下来，我们之前也讲过。等就是等待IO条件就绪，读事件就绪->接收缓冲区中有数据，写事件就绪就是tcp发送缓冲区中有空间。什么叫做高效的IO呢？？单位时间内可以拷贝更多的数据。本质就是减少等待的时间。比如举个钓鱼的例子，你怎么判断一个人钓鱼是否厉害呢？？就是相同时间内钓的鱼更多吗，此时你不就认为它钓鱼很厉害吗。他为什么钓鱼厉害呢？因为它打窝打得好，前提条件准备的好。]]></description><category></category></item><item><title><![CDATA[NAT、代理服务、内⽹穿透]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160530032</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160530032</guid><author>shajjs</author><pubDate>Sun, 26 Apr 2026 20:04:51 +0800</pubDate><description><![CDATA[NAT IP转换过程NAT技术背景之前我们讨论了, IPv4协议中, IP地址数量不充⾜的问题NAT技术当前解决IP地址不够⽤的主要⼿段, 是路由器的⼀个重要功能;NAT能够将私有IP对外通信时转为全局IP. 也就是就是⼀种将私有IP和全局IP相互转化的技术⽅法:很多学校, 家庭, 公司内部采⽤每个终端设置私有IP, ⽽在路由器或必要的服务器上设置全局IP;全局IP要求唯⼀, 但是私有IP不需要;在不同的局域⽹中出现相同的私有IP是完全不影响的；NAT IP转换过程。]]></description><category></category></item><item><title><![CDATA[数据链路层]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160527989</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160527989</guid><author>shajjs</author><pubDate>Sun, 26 Apr 2026 17:05:58 +0800</pubDate><description><![CDATA[在讲这个之前思考两个问题。你为什么要把数据交给路由器F？？是因为我们的IP报文和目的IP不在一个子网内，需要跨子网通信，由目的网络的网络号决定的。你怎么把数据交给路由器F？？这个就是我们这里要讲的东西了。网络层是解决你为什么要交给路由器的，而数据链路层是解决你如何给它的。以太⽹帧格式以太⽹的帧格式如下所⽰：mac帧如何做到解包？？固定长度报头，如何分用？帧类型，2位表示，通过它的类型交给上层协议。认识MAC地址MAC地址⽤来识别数据链路层中相连的节点;]]></description><category></category></item><item><title><![CDATA[⽹络层11]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160504183</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160504183</guid><author>shajjs</author><pubDate>Sun, 26 Apr 2026 15:10:35 +0800</pubDate><description><![CDATA[⽹络层。]]></description><category></category></item><item><title><![CDATA[传输层协议UDP和TCP]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160474706</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160474706</guid><author>shajjs</author><pubDate>Sat, 25 Apr 2026 16:27:21 +0800</pubDate><description><![CDATA[为什么要三次握手呢？？答案是是建立连接最快的方式。FIN标志位：通知对方，本端要结束了，我们称携带FIN标识的为结束报文段。就是我客户端要和你断开连接，就是我客户端把FIN置为1，服务器看到了，知道了你要和我断开连接啊，我服务器给你发送ACK标识我收到了，然后服务器再给我发送FIN，我客户端在发送ACK。这叫做四次挥手。你客户端和我断开连接的时候恰恰我服务器也要和你断开连接，此时我ACK确认了并且FIN直接捎带应答给你发送FIN，然后客户端在发送ACK表示收到，此时也可以是三次挥手，这种情况太少了。]]></description><category></category></item><item><title><![CDATA[应用层Http协议]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160409428</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160409428</guid><author>shajjs</author><pubDate>Fri, 24 Apr 2026 14:11:45 +0800</pubDate><description><![CDATA[HTTP协议HTTP协议虽然我们说, 应⽤层协议是我们程序猿⾃⼰定的. 但实际上, 已经有⼤佬们定义了⼀些现成的, ⼜⾮常好⽤的应⽤层协议, 供我们直接参考使⽤. HTTP(超⽂本传输协议)就是其中之⼀。在互联⽹世界中，HTTP（HyperText Transfer Protocol，超⽂本传输协议）是⼀个⾄关重要的协议。它定义了客⼾端（如浏览器）与服务器之间如何通信，以交换或传输超⽂本（如HTML⽂档）。HTTP协议是客⼾端与服务器之间通信的基础。]]></description><category></category></item><item><title><![CDATA[应用层的协议]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160257235</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160257235</guid><author>shajjs</author><pubDate>Wed, 22 Apr 2026 14:37:50 +0800</pubDate><description><![CDATA[我们定义了结构体，给了两个数字和符号，C通过这个结构体发送给S，S通过拿这个结构体去解析C发过来的东西。这种方法是可以的。但是是在不同OS内核间使用这种方案。但是不是很好。比如你的电脑和手机发送，但是存在几个问题：1.内存对齐 2.大小端问题  3.跨语言问题       ，通常是这几个问题很重要，因为手机和电脑端的系统什么的都可能不同，此时就会考虑上面的几个问题了。编译器为了CPU 访存效率，会自动在结构体成员之间塞空白字节。不同编译器、编译选项、平台，填充规则完全不一样x86：小端。]]></description><category></category></item><item><title><![CDATA[网络基础概念]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/160114012</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/160114012</guid><author>shajjs</author><pubDate>Fri, 17 Apr 2026 18:19:51 +0800</pubDate><description><![CDATA[一. 计算机⽹络背景一. 计算机⽹络背景⽹络发展独⽴模式: 计算机之间相互独⽴;⽹络互联: 多台计算机连接在⼀起, 完成数据共享。局域⽹LAN: 计算机数量更多了, 通过交换机和路由器连接在⼀起;⼴域⽹WAN: 将远隔千⾥的计算机都连在⼀起；所谓 "局域⽹" 和 "⼴域⽹" 只是⼀个相对的概念. ⽐如, 我们有 "天朝特⾊" 的⼴域⽹, 也可以看做⼀个⽐ 较⼤的局域⽹。初始协议。]]></description><category></category></item><item><title><![CDATA[线程的同步和互斥]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/159953989</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/159953989</guid><author>shajjs</author><pubDate>Thu, 09 Apr 2026 18:30:23 +0800</pubDate><description><![CDATA[互斥量mutex进程线程间的互斥相关背景概念共享资源临界资源：多线程执⾏流被保护的共享的资源就叫做临界资源临界区：每个线程内部，访问临界资源的代码，就叫做临界区互斥：任何时刻，互斥保证有且只有⼀个执⾏流进⼊临界区，访问临界资源，通常对临界资源起保护作⽤原⼦性（后⾯讨论如何实现）：不会被任何调度机制打断的操作，该操作只有两态，要么完成，要么未完成。]]></description><category></category></item><item><title><![CDATA[进程间通信（vscode）]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/159278653</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/159278653</guid><author>shajjs</author><pubDate>Wed, 08 Apr 2026 18:59:39 +0800</pubDate><description><![CDATA[这个数组本身不占用结构体内存空间，仅作为一个。]]></description><category></category></item><item><title><![CDATA[Linux线程]]></title><link>https://blog.youkuaiyun.com/shajjs/article/details/159694061</link><guid>https://blog.youkuaiyun.com/shajjs/article/details/159694061</guid><author>shajjs</author><pubDate>Wed, 08 Apr 2026 12:04:01 +0800</pubDate><description><![CDATA[页表构建映射关系，是按照字节映射的吗？        当然不是了。        看这个图中我们的计算，如果我们有4GB的空间，此时如果按照字节映射，此时需要4GB=4*1024*1024*1024个地址来存放，一个地址又占四个字节物理和虚拟映射需要2倍的空间，所以就需要8*4GB=32GB空间来物理地址来存放这块虚拟地址了，这还是一个进程的，当然不可能是这样子了。        以32位计算机为例。                其实都是按照4KB的形式进行的4KB的映射或者刷新也是4KB。       ]]></description><category></category></item></channel></rss>