<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ShanMengChi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ShanMengChi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ShanMengChi]]></copyright><item><title><![CDATA[java springboot deepseek流式对话集成示例]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147745454</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147745454</guid><author>ShanMengChi</author><pubDate>Tue, 06 May 2025 19:00:10 +0800</pubDate><description><![CDATA[【代码】java springboot deepseek流式对话集成示例。]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 内存管理]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517380</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517380</guid><author>ShanMengChi</author><pubDate>Wed, 30 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[如果是 1，就将 R 位清 0，并把该页面放到链表的尾端，修改它的装入时间使它就像刚装入的一样，然后继续从链表的头部开始搜索。在缓存系统中，缓存的大小有限，当有新的缓存到达时，需要淘汰一部分已经存在的缓存，这样才有空间存放新的缓存数据。下图为一个编译器在编译过程中建立的多个表，有 4 个表是动态增长的，如果使用分页系统的一维地址空间，动态增长的特点会导致覆盖问题的出现。LRU 将最近最久未使用的页面换出。NRU 优先换出已经被修改的脏页面（R=0，M=1），而不是被频繁使用的干净页面（R=1，M=0）。]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 链接]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517353</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517353</guid><author>ShanMengChi</author><pubDate>Tue, 29 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[在给定的文件系统中一个库只有一个文件，所有引用该库的可执行目标文件都共享这个文件，它不会被复制到引用它的可执行文件中；链接阶段：将可重定位目标文件和 printf.o 等单独预编译好的目标文件进行合并，得到最终的可执行目标文件。在内存中，一个共享库的 .text 节（已编译程序的机器代码）的一个副本可以被不同的正在运行的进程共享。可重定位目标文件：可与其它可重定位目标文件在链接阶段合并，创建一个可执行目标文件；共享目标文件：这是一种特殊的可重定位目标文件，可以在运行时被动态加载进内存并链接；]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 进程管理]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517335</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517335</guid><author>ShanMengChi</author><pubDate>Mon, 28 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[注意，不能先对缓冲区进行加锁，再测试信号量。消费者不能进入临界区，因为生产者对缓冲区加锁了，消费者就无法执行 up(empty) 操作，empty 永远都为 0，导致生产者永远等待下，不会释放锁，消费者因此也会永远等待下去。类似地，在进行进程切换时，涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置，而线程切换时只需保存和设置少量寄存器内容，开销很小。线程是独立调度的基本单位，在同一进程中，线程的切换不会引起进程切换，从一个进程中的线程切换到另一个进程中的线程时，会引起进程切换。]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 概述]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517286</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517286</guid><author>ShanMengChi</author><pubDate>Sun, 27 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[地址空间的页被映射到物理内存，地址空间的页并不需要全部在物理内存中，当使用到一个没有在物理内存的页时，执行页面置换算法，将该页置换到内存中。由 CPU 执行指令以外的事件引起，如 I/O 完成中断，表示设备输入/输出处理已经完成，处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。在微内核结构下，操作系统被划分成小的、定义良好的模块，只有微内核这一个模块运行在内核态，其余模块运行在用户态。互斥共享的资源称为临界资源，例如打印机等，在同一时刻只允许一个进程访问，需要用同步机制来实现互斥访问。]]></description><category></category></item><item><title><![CDATA[集群 详解]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517259</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517259</guid><author>ShanMengChi</author><pubDate>Sat, 26 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[一个用户的 Session 信息如果存储在一个服务器上，那么当负载均衡器把用户的下一个请求转发到另一个服务器，由于服务器没有用户的 Session 信息，那么该用户就需要重新进行登录等操作。例如下图中，服务器 1 被赋予的权值为 5，服务器 2 被赋予的权值为 1，那么 (1, 2, 3, 4, 5) 请求会被发送到服务器 1，(6) 请求会被发送到服务器 2。该算法比较适合每个服务器的性能差不多的场景，如果有性能存在差异的情况下，那么性能较差的服务器可能无法承担过大的负载（下图的 Server 2）。]]></description><category></category></item><item><title><![CDATA[缓存 详解]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517240</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517240</guid><author>ShanMengChi</author><pubDate>Sat, 26 Apr 2025 00:00:00 +0800</pubDate><description><![CDATA[产生原因：缓存系统通常采用 hash 函数将 key 映射到对应的缓存节点，随着缓存节点数目的增加，键值分布到更多的节点上，导致客户端一次批量操作会涉及多次网络操作，这意味着批量操作的耗时会随着节点数目的增加而不断增大。为了防止缓存服务器宕机出现的缓存雪崩，可以使用分布式缓存，分布式缓存中每一个节点只缓存部分的数据，当某个节点宕机时可以保证其它节点的缓存仍然可用。传统的哈希分布算法存在一个问题：当节点数量变化时，也就是 N 值变化，那么几乎所有的数据都需要重新分布，将导致大量的数据迁移。]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 设备管理]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517417</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147517417</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 17:21:20 +0800</pubDate><description><![CDATA[如果新到达的磁道请求总是比一个在等待的磁道请求近，那么在等待的磁道请求会一直等待下去，也就是出现饥饿现象。电梯算法（扫描算法）和电梯的运行过程类似，总是按一个方向来进行磁盘调度，直到该方向上没有未完成的磁盘请求，然后改变方向。因为考虑了移动方向，因此所有的磁盘请求都会被满足，解决了 SSTF 的饥饿问题。其中，寻道时间最长，因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。电梯总是保持一个方向运行，直到该方向没有请求为止，然后改变运行方向。计算机操作系统 - 设备管理。按照磁盘请求的顺序进行调度。]]></description><category></category></item><item><title><![CDATA[攻击技术 网络攻击]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516846</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516846</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 17:02:16 +0800</pubDate><description><![CDATA[跨站请求伪造（Cross-site request forgery，CSRF），是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作（如发邮件，发消息，甚至财产操作如转账和购买商品）。拒绝服务攻击（denial-of-service attack，DoS），亦称洪水攻击，其目的在于使目标电脑的网络或系统资源耗尽，使服务暂时中断或停止，导致其正常用户无法访问。XSS 利用的是用户对指定网站的信任，CSRF 利用的是网站对用户浏览器的信任。]]></description><category></category></item><item><title><![CDATA[分布式 详解 原理]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516827</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516827</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 17:01:31 +0800</pubDate><description><![CDATA[Acceptor X 收到 Proposer B 发来的 [n=4, v=5] 的 Prepare 请求，因为之前接收到的提议为 [n=2, v=8]，并且 2 <= 4，因此就发送 [n=2, v=8] 的 Prepare 响应，设置当前接收到的提议为 [n=4, v=5]，并且保证以后不会再接受序号小于 4 的提议。其它的 Acceptor 类似。Acceptor 接收到 Accept 请求时，如果序号大于等于该 Acceptor 承诺的最小序号，那么就发送 Learn 提议给所有的 Learner。]]></description><category></category></item><item><title><![CDATA[SQL详解]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516777</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516777</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 17:00:20 +0800</pubDate><description><![CDATA[优先处理 AND，当一个过滤表达式涉及到多个 AND 和 OR 时，可以使用 () 来决定优先级，使得优先级关系更清晰。为结束符，而存储过程中也包含了分号，因此会错误把这部分分号当成是结束符，造成语法错误。UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表，其中 NEW 是可以被修改的，而 OLD 是只读的。来组合两个查询，如果第一个查询返回 M 行，第二个查询返回 N 行，那么组合查询的结果一般为 M+N 行。分为左外连接，右外连接以及全外连接，左外连接就是保留左表没有关联的行。]]></description><category></category></item><item><title><![CDATA[SQL 语法]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516742</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516742</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 16:59:16 +0800</pubDate><description><![CDATA[优先处理 AND，当一个过滤表达式涉及到多个 AND 和 OR 时，可以使用 () 来决定优先级，使得优先级关系更清晰。为结束符，而存储过程中也包含了分号，因此会错误把这部分分号当成是结束符，造成语法错误。UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表，其中 NEW 是可以被修改的，而 OLD 是只读的。来组合两个查询，如果第一个查询返回 M 行，第二个查询返回 N 行，那么组合查询的结果一般为 M+N 行。分为左外连接，右外连接以及全外连接，左外连接就是保留左表没有关联的行。]]></description><category></category></item><item><title><![CDATA[SQL 练习]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516725</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516725</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 16:58:42 +0800</pubDate><description><![CDATA[我们想要的结果是，把分数相同的放在同一个排名，并且相同分数只占一个位置，例如上面的分数，Id=2 和 Id=3 的记录都有相同的分数，并且最高，他们并列第一。涉及到 Person 和 Address 两个表，在对这两个表执行连接操作时，因为要保留 Person 表中的信息，即使在 Address 表中没有关联的信息也要保留。对 class 列进行分组之后，再使用 count 汇总函数统计每个分组的记录个数，之后使用 HAVING 进行筛选。只保留相同 Email 中 Id 最小的那一个，然后删除其它的。]]></description><category></category></item><item><title><![CDATA[Socket]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516696</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516696</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 16:57:28 +0800</pubDate><description><![CDATA[Redis 是速度非常快的非关系型（NoSQL）内存键值数据库，可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串，值支持五种数据类型：字符串、列表、集合、散列表、有序集合。Redis 支持很多特性，例如将内存中的数据持久化到硬盘中，使用复制来扩展读性能，使用分片来扩展写性能。]]></description><category></category></item><item><title><![CDATA[Redis教程]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516678</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516678</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 16:56:36 +0800</pubDate><description><![CDATA[Redis 是速度非常快的非关系型（NoSQL）内存键值数据库，可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串，值支持五种数据类型：字符串、列表、集合、散列表、有序集合。Redis 支持很多特性，例如将内存中的数据持久化到硬盘中，使用复制来扩展读性能，使用分片来扩展写性能。]]></description><category></category></item><item><title><![CDATA[MySQL教程]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516511</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/147516511</guid><author>ShanMengChi</author><pubDate>Fri, 25 Apr 2025 16:52:14 +0800</pubDate><description><![CDATA[mysql教程]]></description><category></category></item><item><title><![CDATA[设计模式 - 适配器设计模式（Adapter）]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/144543079</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/144543079</guid><author>ShanMengChi</author><pubDate>Tue, 17 Dec 2024 19:45:23 +0800</pubDate><description><![CDATA[设计模式 - 适配器设计模式（Adapter）]]></description><category></category></item><item><title><![CDATA[设计模式 - 责任链模式（Chain Of Responsibility）]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/144543032</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/144543032</guid><author>ShanMengChi</author><pubDate>Tue, 17 Dec 2024 19:43:19 +0800</pubDate><description><![CDATA[设计模式 - 责任链模式（Chain Of Responsibility）]]></description><category></category></item><item><title><![CDATA[计算机操作系统 - 死锁详解]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/144542949</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/144542949</guid><author>ShanMengChi</author><pubDate>Tue, 17 Dec 2024 19:39:37 +0800</pubDate><description><![CDATA[计算机操作系统 - 死锁详解]]></description><category></category></item><item><title><![CDATA[设计模式 - 策略模式]]></title><link>https://blog.youkuaiyun.com/ShanMengChi/article/details/144542889</link><guid>https://blog.youkuaiyun.com/ShanMengChi/article/details/144542889</guid><author>ShanMengChi</author><pubDate>Tue, 17 Dec 2024 19:35:42 +0800</pubDate><description><![CDATA[设计模式 - 策略模式]]></description><category></category></item></channel></rss>