<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2201_76024104的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2201_76024104</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2201_76024104]]></copyright><item><title><![CDATA[【MySQL】库和表的基本操作]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/144119188</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/144119188</guid><author>2201_76024104</author><pubDate>Fri, 29 Nov 2024 11:12:47 +0800</pubDate><description><![CDATA[上篇博客我们讲了数据库的基本理解，对数据库有了一个大致的概念，下面我们来介绍一下库的基本操作。]]></description><category></category></item><item><title><![CDATA[【MySQL】数据库的基本认识和使用]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/144066944</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/144066944</guid><author>2201_76024104</author><pubDate>Wed, 27 Nov 2024 11:11:35 +0800</pubDate><description><![CDATA[首先mysql是数据库服务的客户端（只有有用户登录时才会有客户端进程），而上面查到的mysqld是数据库服务的服务端，所以mysql本质就是基于C（client）S（server）模式的一种提供数据存取的服务的网络服务。为什么数据库可以高效的插入或查询数据肯定是离不开数据库具体是如何架构的，它采用了什么样的方式。也可以说就是上面图片中展示的具体的一个个的数据库（在磁盘或内存中存储的特定结构组织的数据），这里说的数据库肯定是以文件的形式存在的，通常在下面的路径下。其实上面的h就代表host，要选择哪台主机；]]></description><category></category></item><item><title><![CDATA[【Linux】守护进程]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142925996</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142925996</guid><author>2201_76024104</author><pubDate>Sun, 17 Nov 2024 20:04:37 +0800</pubDate><description><![CDATA[我们在写完一些网络服务后，如果想让这个服务一直在云服务器的后台运行着，那该如何实现呢？其实就用到了这篇博客要讲的守护进程。]]></description><category></category></item><item><title><![CDATA[【网络】数据链路层]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143576539</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143576539</guid><author>2201_76024104</author><pubDate>Wed, 06 Nov 2024 19:56:52 +0800</pubDate><description><![CDATA[数据链路层是软件层的最底层协议，它的下面就是物理层，那么下面我们就来介绍一下它负责在网络通信中完成什么工作我们前面说的IP协议是解决如何进行跨网络转发的，也就是转发时的路径选择问题。比如一个主机A要跨公网转发到主机B，先不要说A如何到B，我们先说A如何到距离A最近的路由器（与A处于同一个子网，负责转发A的消息的路由器）的，这就需要用到数据链路层并且跨网络转发到目标主机本质就是一个报文经历了无数个子网所以数据链路层是解决同一个网段之间的主机的如何通信的问题的，即局域网通信。]]></description><category></category></item><item><title><![CDATA[【网络】网络层协议IP]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143460768</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143460768</guid><author>2201_76024104</author><pubDate>Sun, 03 Nov 2024 20:10:03 +0800</pubDate><description><![CDATA[IP是用来主机定位和路由选择的，它提供了一种能力，就是将数据从A点跨网络送到B点。并且这种能力并不是一定能完成，而是有较大概率能完成。我们在网络世界中追求的就是将数据可靠送达可靠用的策略是TCP，而送达用的就是IP的能力就是因为TCP和IP只是负责把数据送到，跟什么业务无关，所以可以做进操作系统我们平时也见过很多IP，IP都是由目标子网+目标主机构成的。]]></description><category></category></item><item><title><![CDATA[【网络】传输层协议TCP（下）]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143414441</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143414441</guid><author>2201_76024104</author><pubDate>Thu, 31 Oct 2024 20:15:13 +0800</pubDate><description><![CDATA[那如果B一直没空间，A就会给B发的报头中把PSH标记位 置一（当然PSH标记位的应用场景不只是会这么极端），就是让B尽快向上交付，当然取走缓冲区中的数据取决于应用层，这里的意思是应用层调用read的时候不要阻塞，即使要读走的内容很少，也要尽量读走。的状态，对这个就是等待一段时间，这个状态实际上是先调用close的一方收到对方的close并给应答后处于的一种状态，这个状态通常持续的时间是分钟级别的，所以我们也可以较容易的看到。A会向B发送窗口探测，B会向A发送窗口更新通知，这两种机制是会同时存在的。]]></description><category></category></item><item><title><![CDATA[【网络】传输层协议TCP]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143265708</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143265708</guid><author>2201_76024104</author><pubDate>Tue, 29 Oct 2024 20:34:25 +0800</pubDate><description><![CDATA[TCP的全称是传输控制协议（Transmission Control Protocol），也就是说，对于放到TCP发送缓冲区中的数据，如何发，什么时候发，出错了怎么办，这些都是有TCP协议控制的下面是TCP报文的基本格式标准报头是20个字节，并且在传输层，并不会像我们在应用层一样还需要序列化，传输层直接发送的就是结构化的数据，因为这样发送成本是最低的，发送带宽最小。那它不是会有跨平台，大小端的问题吗？]]></description><category></category></item><item><title><![CDATA[【网络】传输层协议UDP]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143264794</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143264794</guid><author>2201_76024104</author><pubDate>Sun, 27 Oct 2024 10:39:24 +0800</pubDate><description><![CDATA[之前我们已经把应用层http协议说完了，我们知道一些优秀的应用层协议会绑定知名端口号，就是说它们的端口号默认是固定的，比如http是80，https是443，ssh是22等，我们也可以通过查看下面的文件来查看知名端口号。指的是报头+正文的总长度（字节），16位表示的最大的数是2^16-1，也就是说UDP一次发送的报文长度是64kb-1，如果一次发送的数据超过这么多，sendto就会调用失败。这也就是为什么UDP是不可靠的，当然我们不能把它看成一种缺点，而是一种特点，因为不可靠也就决定了它是比较简单的；]]></description><category></category></item><item><title><![CDATA[【网络】HTTP协议（下）]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/143165889</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/143165889</guid><author>2201_76024104</author><pubDate>Wed, 23 Oct 2024 19:39:48 +0800</pubDate><description><![CDATA[上篇博客讲了http请求和响应的基本格式，那么其中请求是浏览器发给我们服务器的，也就是说，里面的字段都是浏览器填充的；而我们需要做的是分析请求内容，然后把目标文件发给客户端。]]></description><category></category></item><item><title><![CDATA[【网络】HTTP协议]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142963185</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142963185</guid><author>2201_76024104</author><pubDate>Sun, 20 Oct 2024 18:54:17 +0800</pubDate><description><![CDATA[url全称Uniform Resource Locator（统一资源定位符）我们可以给它大致分为三部分，那么如何理解呢？我们知道访问一个网站，实际上就是去服务器上获取资源，资源其实就是文件，那么如何找到这个文件（互联网中唯一的一个文件）呢？我们需要服务器的ip和文件在服务器上的路径即可所以上面的三部分就是http协议，ip，文件路径其实这个文件路径并不是说在根目录下的某个路径，而是跟进程有关的，我们叫做web路径，那其实就需要端口号，那为什么不体现在url中呢？]]></description><category></category></item><item><title><![CDATA[【网络】序列化和反序列化]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142600559</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142600559</guid><author>2201_76024104</author><pubDate>Sat, 12 Oct 2024 20:32:19 +0800</pubDate><description><![CDATA[在之前的博客中，我们已经是成功的利用UDP和TCP进行网络通信，但是不知道你发现没有，我们在用TCP时，发送数据和接收数据用的是write/read、send/recv这类接口，这类接口处理的数据都是字符串，那如果我们要传输一些“结构化的数据”怎么办呢？我们一般想到的就是把结构化的数据变成一个字符串，这样可以方便网络的发送这其实就是序列化和反序列化：发送数据时将这个结构体按照一个规则转换成字符串，收到数据时再按相同的规则转化回结构体。]]></description><category></category></item><item><title><![CDATA[【开源项目】Jsoncpp的简单使用]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142796062</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142796062</guid><author>2201_76024104</author><pubDate>Thu, 10 Oct 2024 19:49:13 +0800</pubDate><description><![CDATA[下面就是给我们json格式的字符串，我们如何转化为结构化的数据，我们无法得到json格式的字符串可以用上面的代码把生成的字符串写入到文件中。并且我们可以发现，打印格式是按名称首字母排序后打印的（a，n，s，w），而不是我代码中的赋值顺序（n，a，w，s）当然除了上面的格式，我们在定义输出格式对象的时候还可以定义下面的类的对象，这样字符串的格式就会发生变化。下面我们就来简单使用一下这个库：下面的就是简单的样例代码，我们只需要照猫画虎的套模板够用即可。安装完成之后我们就可以在如下的目录中查询到头文件。]]></description><category></category></item><item><title><![CDATA[【网络】TCP协议的简单使用]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142431759</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142431759</guid><author>2201_76024104</author><pubDate>Sun, 22 Sep 2024 20:28:11 +0800</pubDate><description><![CDATA[还有一种方法就是子进程马上创建孙进程，让孙进程去执行任务，之后子进程立马退出，父进程就可以直接wait到子进程，并且孙进程成为了孤儿进程，会由系统领养，我们就不用关心孙进程的回收问题了。此时我们就可以创建子进程让子进程去和客户端进行交互，父进程重新去获取连接，这样就是可以的，但是父进程是要回收子进程的，父进程也不可能去一直等待，那应该如何做呢？网络中read的返回值有不同的含义，大于0就是读到的字节的个数，小于0是读取出错，等于0是客户端退出并且关闭连接，我们就可以用返回值去判断客户端的状态。]]></description><category></category></item><item><title><![CDATA[vscode连Linux虚拟机（超简单）]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142437308</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142437308</guid><author>2201_76024104</author><pubDate>Sun, 22 Sep 2024 15:12:59 +0800</pubDate><description><![CDATA[首先我们需要设置好Linux虚拟机，我们需要下载vmware，我这里也有阿里云盘的下载链接，阿里云盘是非常快的，比百度云盘好使。其实vscode连虚拟机和云服务器是一样的，我在这里就讲述我的亲身经历（因为云服务器要到期了，所以打算向虚拟机过渡一下）之后我们需要下载Linux镜像文件，可以参考这篇博客。之后我们安装vscode，去官网即可。等到我们打开虚拟机，首先安装ssh。之后就配置虚拟机就可以了。找到虚拟机的IP地址，用。ssh 用户名@IP。]]></description><category></category></item><item><title><![CDATA[【网络】UDP协议的简单使用]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/142000000</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/142000000</guid><author>2201_76024104</author><pubDate>Sun, 08 Sep 2024 11:54:37 +0800</pubDate><description><![CDATA[UDP是基于socket进行网络通信的，那我们这篇博客就来介绍一下基于UDP通信的基本流程，先让服务端和客户端进行简单的跨网络通信。]]></description><category></category></item><item><title><![CDATA[【Linux】线程结束]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/141787678</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/141787678</guid><author>2201_76024104</author><pubDate>Sun, 01 Sep 2024 20:06:36 +0800</pubDate><description><![CDATA[自旋其实就是一个不断询问的过程，我们是否用自旋锁就跟线程在临界区中执行时间的长短有关了，如果执行时间长的话，比如有IO操作或者网络请求，我们就用之前学的普通的锁，线程会挂起等待；举一个更加普遍的例子，线程1需要先申请锁1再申请锁2才可以访问资源，线程2需要先申请锁2再申请锁1才可以访问资源，当线程1申请完锁1，线程2申请完锁2后由于它们再也申请不到另一把锁了，所以就会一直阻塞，就会出现死锁问题。：同一个函数被不同的执行流调用，当前一个执行流还没有执行完，就有其他的执行流再次进入，我们就称之为重入。]]></description><category></category></item><item><title><![CDATA[【Linux】线程池]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/141756214</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/141756214</guid><author>2201_76024104</author><pubDate>Sat, 31 Aug 2024 20:47:09 +0800</pubDate><description><![CDATA[这篇博客我们主要基于前面的知识实现一个，我们想要的效果就是说提前把线程都创建好，等到有任务的时候直接往任务队列里放任务，线程直接去任务队列中取任务并完成即可，其中我们要引入日志的概念，就是把进程运行的信息以打印到屏幕或打印到文件的形式让我们看见。其中有很多的语法细节等我们遇到了再说。]]></description><category></category></item><item><title><![CDATA[【Linux】POSIX版本 信号量]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/141647795</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/141647795</guid><author>2201_76024104</author><pubDate>Wed, 28 Aug 2024 21:11:37 +0800</pubDate><description><![CDATA[之前我们在System V版本的进程间通信说过信号量，这里我们说的是POSIX（）版本的并且会说的更加详细我们之前对于信号量也有一定的理解，我们说它就是要给计数器，用来记录所需资源的数量，因为这个计数器是被多个线程所共享的，所以它本身就是共享资源，为了保证共享资源的安全，所以我们说PV（对计数器--和++）操作是原子的今天我们还是想用信号量实现生产消费模型。]]></description><category></category></item><item><title><![CDATA[【Linux】线程同步和生产消费模型]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/140880315</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/140880315</guid><author>2201_76024104</author><pubDate>Thu, 08 Aug 2024 10:41:51 +0800</pubDate><description><![CDATA[超市内的资源就是共享资源，由于生产者们之间，消费者们之间，生产者和消费者之间不能同时访问超市这种资源，也就是说它们之间是互斥的（为了方便起见这么理解，实际情况复杂更多，并且实际的生产消费模型也就是较为简单的这种情况），所以我们需要对超市进行保护，让超市中的资源变成临界资源。，这个主要是通过引入缓冲区（超市）来实现的，如果没有缓冲区，生产者一会忙，一会闲，消费者就要被迫的这样，有了缓冲区消费者就可以平稳的执行任务，其实就是平衡二者之间处理能力的差异，减小等待时间，提高整体的效率。所以记录一下等待的人数，]]></description><category></category></item><item><title><![CDATA[【Linux】线程互斥]]></title><link>https://blog.youkuaiyun.com/2201_76024104/article/details/140839191</link><guid>https://blog.youkuaiyun.com/2201_76024104/article/details/140839191</guid><author>2201_76024104</author><pubDate>Fri, 02 Aug 2024 12:44:56 +0800</pubDate><description><![CDATA[同一进程内的各个线程都能访问的资源叫共享资源：把共享资源保护起来后就叫做临界资源（保护就是说一个只允许一个线程访问该资源）：访问临界资源的代码就叫做临界区，除了这临界区，就是非临界区：任何时刻，只有一个线程进入临界区访问临界资源这个就叫线程间互斥：一个操作要么没干，要么干完，此时就称该操作是原子的。]]></description><category></category></item></channel></rss>