<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sinat_38714329的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sinat_38714329</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_38714329]]></copyright><item><title><![CDATA[Ubuntu 下 GitLab 磁盘爆满？LVM 在线扩容全指南]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/163374585</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/163374585</guid><author>sinat_38714329</author><pubDate>Fri, 31 Jul 2026 20:07:17 +0800</pubDate><description><![CDATA[一看，根分区却只有 19GB，而且已经用了 14GB，剩余不到 4GB，自然撑不住 GitLab 的持续运行。最近遇到这样一个场景：在 Ubuntu 20.04 服务器上部署了 GitLab，运行一段时间后，GitLab 突然报错连接不上，日志里提示。，否则无法在虚拟机设置中直接扩展磁盘。可明明当初创建虚拟机时分配了 40GB 的硬盘，用。，完全在线操作，不影响服务（但建议在业务低峰期进行）。（把增量分配给根分区并 resize）（在虚拟机管理软件中增加磁盘容量）如果是上述情况，就需要在线扩容。]]></description><category></category></item><item><title><![CDATA[Python 并发编程深度解析：从 GIL 到 asyncio]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/162876544</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/162876544</guid><author>sinat_38714329</author><pubDate>Wed, 15 Jul 2026 17:40:42 +0800</pubDate><description><![CDATA[场景Python 方案Java 对比IO 密集，同步代码同样有线程池，但线程是真并行IO 密集，新建项目`asyncio`虚拟线程（Java 21+），更易用CPU 密集直接用线程池即可，无 GIL 限制线程安全原子操作必须加锁共享内存天然支持（同一 JVM 进程内）核心要点：1. GIL 让 Python 的线程不能并行计算，但 IO 密集型任务不受影响。2. CPU 密集用 `multiprocessing`，IO 密集用 `threading` 或 `asyncio`。]]></description><category></category></item><item><title><![CDATA[虚拟机安装tailscale 出现连接不上问题解决]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/162896048</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/162896048</guid><author>sinat_38714329</author><pubDate>Wed, 15 Jul 2026 11:21:50 +0800</pubDate><description><![CDATA[直接上图。]]></description><category></category></item><item><title><![CDATA[深入理解 Java 中的 wait、notify 和 notifyAll]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161611631</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161611631</guid><author>sinat_38714329</author><pubDate>Tue, 02 Jun 2026 08:56:08 +0800</pubDate><description><![CDATA[在 Java 多线程编程中，线程间的协作与通信是一个核心话题。wait()notify()和是 Java 提供的用于线程间通信的最基础的机制，它们定义在Object类中，因此每个对象都天然具备了这些方法。/*** 标准模板 - 请牢记！*/// 等待方模板while (!condition) { // 1. while 循环// 2. 释放锁并等待// 3. 条件满足，执行业务// 通知方模板// 1. 改变条件// 2. 通知所有等待线程。]]></description><category></category></item><item><title><![CDATA[Matplotlib.pyplot 完全入门指南]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161519458</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161519458</guid><author>sinat_38714329</author><pubDate>Sat, 30 May 2026 09:05:00 +0800</pubDate><description><![CDATA[Matplotlib 是 Python 数据可视化领域最基础、功能最强大的库之一，而则为其提供了一个类似 MATLAB 的绘图接口。无论你是做数据探索、算法调试，还是撰写论文、发布报告，掌握pyplot的用法都能让你高效地生成高质量图形。plot()函数接受可选的格式字符串或关键字参数来控制线条外观。常用的格式字符串如'r--'表示红色虚线，'go'表示绿色圆点标记（无线条）。plt.show()]]></description><category></category></item><item><title><![CDATA[Streamlit 用法详解（二）]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161487940</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161487940</guid><author>sinat_38714329</author><pubDate>Thu, 28 May 2026 16:00:33 +0800</pubDate><description><![CDATA[括号里传入的就不是数字（列数），而是一个数值型列表，这个列表元素个数表示列数，元素的数字表示每列占比。按照前面学到的内容写页面的话，所有元素都是从上往下布局的。时，默认每列的宽度都是一样的。的默认值是1，也就是选中下标为 1 的那项。它接收一个字符串作为按钮文本，可以将点击结果赋值给一个变量。差不多，也是可以设置提示语、默认值、最大值、最小值以及步长。接收到的文件可以赋值给一个变量，这个变量接收到文件后可以通过。如果你想在页面中，增加一个logo图标，可以使用。单选按钮也可以使用一个变量来接收结果。]]></description><category></category></item><item><title><![CDATA[Streamlit 用法详解（一）]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161368447</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161368447</guid><author>sinat_38714329</author><pubDate>Tue, 26 May 2026 07:26:48 +0800</pubDate><description><![CDATA[官方网站：https://streamlit.io/能在几分钟内把Python脚本变成可分享的网站。只需使用纯Python，无需前端经验。甚至，你只需要懂markdown，然后按照一定规则去做也能搞个网页出来。它还支持免费部署，感动到落泪。]]></description><category></category></item><item><title><![CDATA[PyCharm安装]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161359589</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161359589</guid><author>sinat_38714329</author><pubDate>Mon, 25 May 2026 07:30:52 +0800</pubDate><description><![CDATA[安装完毕后，我们可以看到这里提示我是否需要从其他的开发工具中，导入配置信息，这里我们直接选择 skip Import 跳过。打开PyCharm进入欢迎页面后，可以设置一个主题颜色，语言等信息，可以根据自己的喜好，进行调整。勾选一下创建桌面快捷方式 PyCharm，然后点击 "下一步"。确认没问题之后，直接点击 创建。然后选择 "安装"。]]></description><category></category></item><item><title><![CDATA[Python安装文档]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161356389</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161356389</guid><author>sinat_38714329</author><pubDate>Sun, 24 May 2026 10:04:06 +0800</pubDate><description><![CDATA[然后选择自定义安装 "Customize installation"。然后进入特性选择页面，什么都不用操作，直接点击 Next 下一步。进入安装页面，在这个页面中要选择Python的安装路径（开发类的软件尽量安装在一个没有中文，不带空格的目录下），这里呢，将软件安装在了 D盘下的 develop 这个目录下，在这个目录下创建一个文件夹Python，用来存放python的安装文件。选择好了安装路径之后，直接点击Install，就可以执行安装了。安装完毕直接点击 close。]]></description><category></category></item><item><title><![CDATA[Ollama-安装使用]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161347935</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161347935</guid><author>sinat_38714329</author><pubDate>Sat, 23 May 2026 22:48:13 +0800</pubDate><description><![CDATA[手动部署最简单的方式就是使用Ollama，这是一个帮助你部署和运行大模型的工具。官网如下：https://ollama.com/注意：Ollama默认安装目录是C盘的用户目录，如果不希望安装在C盘的话（其实C盘如果足够大放C盘也没事），就不能直接双击安装了。需要通过命令行安装。在所在目录打开cmdOllamaSetup.exe /DIR=你要安装的目录位置2). 配置环境变量OK，安装完成后，还需要配置一个环境变量，更改Ollama下载和部署模型的位置。]]></description><category></category></item><item><title><![CDATA[RocketMQ Dledger 集群与 Raft 协议]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161323642</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161323642</guid><author>sinat_38714329</author><pubDate>Fri, 22 May 2026 21:49:53 +0800</pubDate><description><![CDATA[在分布式系统的漫漫征途中，“共识” 问题始终是绕不开的核心命题。当消息中间件 RocketMQ 需要从主从架构走向真正的自动容灾时，Dledger 与 Raft 协议的组合方案应运而生。本文将深入剖析这一组合背后的设计哲学、技术原理及演进脉络RocketMQ Dledger 选用 Raft 协议，是分布式系统演进中一次典型的工程化选择。它不是理论上的唯一解，但却是最务实、最可控、生态最完备的路径。]]></description><category></category></item><item><title><![CDATA[SQL出现filesort 一定慢吗]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161293622</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161293622</guid><author>sinat_38714329</author><pubDate>Thu, 21 May 2026 22:11:54 +0800</pubDate><description><![CDATA[filesort 出现在当无法使用索引排序时，MySQL 必须自己计算排序顺序，这个过程称为filesort。EXPLAIN的Extra字段会出现。常见触发场景：排序列不在索引中，或顺序/方向与索引不一致ORDER BY包含RAND()等函数跨表排序（如JOIN后对非驱动表的列排序）查询范围过大（如WHERE条件不能有效缩小索引前缀匹配）首选：用索引避免 filesort这是性能最佳的方案，彻底消除排序开销。次选：接受内存 filesort如果无法索引排序，但。]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap：computeIfAbsent 的陷阱]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161264416</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161264416</guid><author>sinat_38714329</author><pubDate>Wed, 20 May 2026 21:42:56 +0800</pubDate><description><![CDATA[是 Java 并发编程中使用频率最高的数据结构之一，而computemerge等一批“复合操作”方法更是提升了并发场景下的编码效率。然而，这些看似便利的 API 背后，隐藏着不少容易踩坑的细节。禁止在映射 / 合并函数中修改同一个，尤其禁止递归调用compute*系列方法。确保函数快速且无副作用。耗时操作（网络 IO、磁盘读写）应移到函数外部，考虑使用Future或异步加载。避免依赖函数被调用的次数。的函数可能只调用一次，merge的函数可能重试多次——不要让这些次数影响业务正确性。优先使用处理延迟初始化。]]></description><category></category></item><item><title><![CDATA[UUID作为主键：深入剖析与最佳实践]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161179144</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161179144</guid><author>sinat_38714329</author><pubDate>Tue, 19 May 2026 07:35:13 +0800</pubDate><description><![CDATA[在数据库设计中，主键的选择往往被低估，但它对系统性能、可扩展性和维护成本有着深远影响。自增 ID（AUTO_INCREMENT）长期占据主流地位，但随着分布式系统、微服务架构的普及，UUID（Universally Unique Identifier）逐渐成为另一热门选项。然而，UUID 并非银弹——它带来全局唯一性的同时，也引入了诸如页分裂、存储膨胀等棘手问题。场景推荐主键方案理由单机 MySQL，高写入 OLTP自增 bigint最高写入性能，最小存储开销分布式系统，无严格顺序要求。]]></description><category></category></item><item><title><![CDATA[全链路压测深潜：流量标与影子库，你真的用对了吗？]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161177441</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161177441</guid><author>sinat_38714329</author><pubDate>Mon, 18 May 2026 08:21:59 +0800</pubDate><description><![CDATA[流量标，业内也叫“流量染色”。本质上，你给每个压测请求注入一个特殊的“身份ID”，就像给每只羊打上耳标一样。通常的做法是在HTTP请求的Header中加一个自定义字段，比如或。当这个标识在请求链路中被一路携带，每一个服务、每一个中间件都能认出它：“哦，这是个压测流量，别把它当真实业务处理。]]></description><category></category></item><item><title><![CDATA[RocketMQ 主从切换：你真的理解“短暂连不上”与数据丢失吗？]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161143456</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161143456</guid><author>sinat_38714329</author><pubDate>Sun, 17 May 2026 07:13:38 +0800</pubDate><description><![CDATA[在分布式消息队列领域，高可用性是系统设计的核心目标之一。RocketMQ 通过主从架构实现服务的高可用保障，当主节点发生故障时，从节点能够接管服务，确保业务连续性。然而，主从切换过程中客户端连接状态的变化是一个关键问题，直接关系到业务的稳定性。以下将从 RocketMQ 的主从复制模式、切换机制、客户端行为等多个维度，深入剖析主从切换过程中客户端是否会出现短暂连接断开的问题。以下“主从切换”特指Broker 集群的角色切换，NameServer 仅作为注册中心，不参与选举，只负责路由变更通知。]]></description><category></category></item><item><title><![CDATA[RocketMq是CP模型还是AP模型]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161129861</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161129861</guid><author>sinat_38714329</author><pubDate>Sat, 16 May 2026 10:28:44 +0800</pubDate><description><![CDATA[CAP 理论指出，分布式系统无法同时满足以下三个特性：- C（Consistency）一致性：所有节点在同一时刻看到的数据完全一致- A（Availability）可用性：每个请求都能得到非错误的响应，不保证是最新数据- P（Partition Tolerance）分区容错性：系统在遇到任意网络分区故障时仍能继续运行在实际生产环境中，网络分区是不可避免的，因此系统必须在 C 和 A 之间做出选择。CP模型：放弃部分可用性（A）来确保数据的强一致性（C）。]]></description><category></category></item><item><title><![CDATA[CMS垃圾回收]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161054533</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161054533</guid><author>sinat_38714329</author><pubDate>Thu, 14 May 2026 15:30:46 +0800</pubDate><description><![CDATA[就是当灰色对象要删除指向白色对象的引用关系时， 就将这个要删除的引用记录下来， 在并发扫描结束之后， 再将这些记录过的引用关系中的灰色对象为根， 重新扫描一次，这样就能扫描到白色的对象，将白色对象直接标记为黑色(目的就是让这种对象在本轮gc清理中能存活下来，待下一轮gc的时候重新扫描，这个对象也有可能是浮动垃圾)就是当黑色对象插入新的指向白色对象的引用关系时， 就将这个新插入的引用记录下来， 等并发扫描结束之后， 再将这些记录过的引用关系中的黑色对象为根， 重新扫描一次。CMS 不会移动存活对象。]]></description><category></category></item><item><title><![CDATA[线程池队列详解]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/161010849</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/161010849</guid><author>sinat_38714329</author><pubDate>Wed, 13 May 2026 14:53:19 +0800</pubDate><description><![CDATA[理解线程池队列的核心脉络：1. 队列类型决定了线程池的扩容行为：无界队列让 `maxPoolSize` 失效；直接传递队列让排队缓冲失效；有界队列是两者之间的平衡点。2. 队列的锁设计直接影响吞吐量：`LinkedBlockingQueue` 的双锁适合高并发读写分离的场景；`ArrayBlockingQueue` 的单锁在容量小时竞争不高且实现简单可靠；`SynchronousQueue` 的无锁 CAS 适合匹配快速的场景。]]></description><category></category></item><item><title><![CDATA[Java原子累加器深度解析(二)]]></title><link>https://blog.youkuaiyun.com/sinat_38714329/article/details/160987711</link><guid>https://blog.youkuaiyun.com/sinat_38714329/article/details/160987711</guid><author>sinat_38714329</author><pubDate>Tue, 12 May 2026 07:01:36 +0800</pubDate><description><![CDATA[技术应用位置说明CAS无锁原子更新，替代 synchronizedvolatile保证可见性，禁止指令重排自旋longAccumulate()的死循环忙等待替代阻塞退避/重哈希CAS 失败后换 Cell 而不是硬怼两阶段冲突collide标志连续两次 CAS 失败才扩容，减少不必要的数据迁移分段锁cells 数组将全局竞争分散到多个 Cell缓存行填充@Contended防止不同 Cell 的伪共享锁分离cellsBusy。]]></description><category></category></item></channel></rss>