<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Superkom666的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Superkom666</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Superkom666]]></copyright><item><title><![CDATA[如何快速上手FastAPI]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/158649859</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/158649859</guid><author>Superkom666</author><pubDate>Wed, 04 Mar 2026 10:39:15 +0800</pubDate><description><![CDATA[在 Python 中，async和awaitasync def：定义一个异步函数await：等待异步任务完成，但不会阻塞整个线程# 同步写法（传统方式）# 异步写法（适用于异步数据库或外部请求）tips：只有当内部调用的是异步库（如asyncpghttpx等）时，才能带来真正的性能收益。如果你的代码里都是同步操作（如普通的 SQLAlchemy），使用async反而会增加开销。FastAPI 的强大之处很大程度上依赖于Python 的类型注解。# 没有类型注解（传统写法）]]></description><category></category></item><item><title><![CDATA[docker重新搭建redis集群]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/149429915</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/149429915</guid><author>Superkom666</author><pubDate>Thu, 17 Jul 2025 20:24:04 +0800</pubDate><description><![CDATA[Redis集群故障重建方案：针对原Redis集群全挂导致项目无法连接的问题，通过Docker重新部署包含主从复制和哨兵监控的高可用集群。方案包括：1）配置1主2从Redis节点（端口6379/6380/6381）；2）配置3节点Sentinel集群（端口26379-26381）监控主从切换；3）使用Docker命令清理旧容器后，依次启动Redis主从节点和Sentinel节点。关键配置要点包括绑定地址、主从复制关系、哨兵监控参数及节点间通信设置。最后通过docker ps命令验证服务状态。（149字）]]></description><category></category></item><item><title><![CDATA[当项目中的properties文件不以UTF-8的编码显示]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/149249601</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/149249601</guid><author>Superkom666</author><pubDate>Thu, 10 Jul 2025 14:35:04 +0800</pubDate><description><![CDATA[当文件不以UTF-8的形式显示，而是以默认的iso-8859的情况显示。]]></description><category></category></item><item><title><![CDATA[CPU利用率和CPU负载的区别]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/141575113</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/141575113</guid><author>Superkom666</author><pubDate>Mon, 26 Aug 2024 22:30:53 +0800</pubDate><description><![CDATA[CPU利用率和负载虽然相关,但确是两个不同的概念]]></description><category></category></item><item><title><![CDATA[【Java并发编程】对于Java线程池的一些研究]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/141166940</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/141166940</guid><author>Superkom666</author><pubDate>Tue, 13 Aug 2024 16:21:46 +0800</pubDate><description><![CDATA[线程池是Java中利用池化技术创建一组线程来进行管理和复用的机制，目的在于提高系统的性能和保护CPU资源不会被耗尽。]]></description><category></category></item><item><title><![CDATA[在Java中利用GeoHash实现高效的‘附近xxx‘功能]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/140797973</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/140797973</guid><author>Superkom666</author><pubDate>Tue, 30 Jul 2024 15:24:07 +0800</pubDate><description><![CDATA[GeoHash是一种高效的地理编码系统，它通过将地球表面划分为网格并用字母数字组合的字符串来表示每个区域。这种编码方法将二维的经纬度坐标转换为一维的字符串，使得地理位置的存储和检索变得更加简单。GeoHash的核心原理是将经纬度坐标转换为二进制，然后交替取位组合，最后转换为base32编码。这种方法的一个重要特性是，相邻区域通常会有相同的GeoHash前缀，这使得它非常适合用于快速查找附近位置。]]></description><category></category></item><item><title><![CDATA[学习网络系统的心得体会]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/140657508</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/140657508</guid><author>Superkom666</author><pubDate>Wed, 24 Jul 2024 11:06:14 +0800</pubDate><description><![CDATA[PageCache实际上就是内核缓冲区，作用有两个，一个是缓存最近被访问的数据另一个是预读功能。读取磁盘的时候优先从PageCache里面找，有就直接返回数据，没有就从磁盘中读取然后缓存到PageCache中。举个例子，假如read方法每次只能够读取100k，虽然read刚开始只会读0100k的数据，但是内核会把后面的101200k的数据都给写入到PageCache中，这样就减少了与磁盘交互的次数。]]></description><category></category></item><item><title><![CDATA[记一次使用“try-with-resources“的语法导致的BUG]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/140207979</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/140207979</guid><author>Superkom666</author><pubDate>Fri, 05 Jul 2024 14:28:42 +0800</pubDate><description><![CDATA[在try块结束时，括号()中声明的资源会自动关闭，无需手动调用close()方法，也就是说不需要再使用finally来关闭资源。最近使用try-catch的时候遇到了一个问题，背景是这样的：当第一次与数据库建立连接以后执行查询完毕并没有手动关闭连接，但是当我第二次获取连接的时候报错了，显示数据库连接失败，连接已经关闭。这个时候也就真相大白了，原因就在于当第一次与数据库建立连接以后执行查询完毕并没有手动关闭连接但是由于使用了"try-with-resources"的语法所以已经自动关闭了数据库连接。]]></description><category></category></item><item><title><![CDATA[通过索引优化和缓存更新策略的实际应用快速响应百万级数据查询]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/140126246</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/140126246</guid><author>Superkom666</author><pubDate>Tue, 02 Jul 2024 14:38:55 +0800</pubDate><description><![CDATA[最后选择的第三种方案，我觉得是最合适的，由于查询出来的数据量其实很少，只是查询花费的时间很多，所以使用定时任务每隔一个小时就跑一次数据，将数据存储在本地缓存里面，同时这张表的数据是更新的频率比较低，所以缓存和数据库数据不一致的问题虽然存在，但是发生的概率比较小。通过这样的做法，查询全国的数据接口的响应时间直接降低到了300ms以内。统计全国的数据，原本的方案是首先获取到所有的父类类型，然后再去查父类类型下所有拥有的子属性，也就是自身对应的属性，然后再去根据地区来进行统计父类属性和子类属性的数量。]]></description><category></category></item><item><title><![CDATA[阅读源码解析dynamic-datasource-spring-boot-starter中是如何动态切换数据源的]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/139604496</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/139604496</guid><author>Superkom666</author><pubDate>Tue, 11 Jun 2024 17:33:47 +0800</pubDate><description><![CDATA[dynamic-datasource-spring-boot-starter是苞米豆提供的一个动态切换数据源的工具，可以帮助企业或者个人实现多数据源的切换，这里通过阅读源码的方式解析是如何动态的切换数据源的，采用的版本是3.5.1。]]></description><category></category></item><item><title><![CDATA[关于Git的commit message规范]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/138543586</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/138543586</guid><author>Superkom666</author><pubDate>Tue, 07 May 2024 20:02:49 +0800</pubDate><description><![CDATA[前几天在提交代码的时候突然发现自己的commit message写的有点问题，然后到网上查了下发现Git的commit message也是有规范的，下面我总结了三条我认为最重要的。：重构（即不是新增功能，也不是修改bug的代码变动）3.避免过于笼统的使用"fix"，而是要。1.commit message需要。：文档（documentation）： 格式（不影响代码运行的变动）：新功能（feature）：构建过程或辅助工具的变动。您修复的是什么问题或bug。]]></description><category></category></item><item><title><![CDATA[造成并发安全的三大源头：可见性、原子性、有序性]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/138097486</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/138097486</guid><author>Superkom666</author><pubDate>Mon, 22 Apr 2024 23:52:53 +0800</pubDate><description><![CDATA[线程2也进入到if (demo3 == null)这个判断中，此时线程2发现demo3不为null了直接返回demo3，但此时的demo3还没有初始化完成，所以线程2返回的demo3对象是不完整的，也就导致到线程安全问题。此时假设线程1和线程2同时想要创建demo3这个对象，线程1先进入到if (demo3 == null)这个判断中以后线程1执行1、3还没有执行2的时候，时间片刚好用完切换到线程2执行任务。一个线程对共享变量的修改，另外一个线程能够立刻看到，我们称为。程序按照代码的顺序执行叫做有序性。]]></description><category></category></item><item><title><![CDATA[如何通过Elasticsearch实现搜索的关键词达到高亮的效果]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/137212968</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/137212968</guid><author>Superkom666</author><pubDate>Mon, 01 Apr 2024 00:20:14 +0800</pubDate><description><![CDATA[方法返回一个 Text 对象数组，每个 Text 对象表示高亮字段中的一个文本片段，最后将其中的文本片段拼接成一个字符串，最终存储到结果对象的相应属性中，最后实现高亮效果。方法返回一个包含文档中高亮字段的映射,然后从高亮字段映射中获取名为 “SUBJECT_NAME” 的高亮字段（也就是题目名字），从高亮字段中提取相关的文本片段，凸显了“高亮效果”。现在有一个场景：输入相关的面试题题目返回的结果中题目出现高亮效果，类似这样的效果。在设置好高亮的相关条件以后，就得从ES中查询相关的数据了并且处理相关的数据。]]></description><category></category></item><item><title><![CDATA[快速熟悉ElasticSearch的基本概念]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/137026739</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/137026739</guid><author>Superkom666</author><pubDate>Mon, 25 Mar 2024 22:37:22 +0800</pubDate><description><![CDATA[ElasticSearch是开源的分布式搜索和数据分析引擎，它专门用于处理大规模的文本数据和实现高性能的全文检索，如果有要实现搜索的场景，那么ElasticSearch是一个很好的选择。]]></description><category></category></item><item><title><![CDATA[如何在linux环境上部署单机ES（以8.12.2版本为例）]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136928680</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136928680</guid><author>Superkom666</author><pubDate>Fri, 22 Mar 2024 09:41:48 +0800</pubDate><description><![CDATA[然后进入到jvm.options中进行运存的配置，不配置很有可能把服务器的内存吃满导致启动失败，我这里设置的是1gb大小，大家可以根据自己的实际情况来进行配置。这个时候就已经配置好了，现在要创建另一个对象然后去启动ES，因为ES官方处于安全考虑不允许root用户启动ES。这将创建一个名为 myuser 的用户，并且 -m 选项会自动创建用户的家目录。创建用户：可以使用 useradd 命令来创建用户。切换用户：可以使用 su 命令来切换到新创建的用户。切换到这个用户之后进入到 es 的文件夹。]]></description><category></category></item><item><title><![CDATA[使用gradle工程打包失败-Execution failed for task ‘:test‘的解决方案]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136837580</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136837580</guid><author>Superkom666</author><pubDate>Tue, 19 Mar 2024 11:55:13 +0800</pubDate><description><![CDATA[把这段代码输入进去，表示打包跳过test。再次build就能够成功打出jar包了。这个错误通常表明测试任务执行失败。首先找到gradle。]]></description><category></category></item><item><title><![CDATA[在Java中使用Float或者Double而导致的精度丢失问题是如何产生的？]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136785551</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136785551</guid><author>Superkom666</author><pubDate>Sun, 17 Mar 2024 17:15:41 +0800</pubDate><description><![CDATA[其中float表示的32个比特位，第1位为符号位表示正数还是负数，第2位到第8位表示指针数，剩下的表示有效数字，而对于double来说，第1位为符号位表示正数还是负数，第2位到第13位表示指针数，剩下的表示有效数字。假如说是0.2那么在有效数字位里面存储的就应该是0011-0011-0011-0011...这样无限循环下去，但是由于存储有效数字位有限也就导致了不能完整的存储无限循环的0011-0011-0011-0011...换句话说float能表示32个比特位而double能表示64个比特位。]]></description><category></category></item><item><title><![CDATA[gradle工程报错：Caused by: java.lang.NoClassDefFoundError: org/gradle/api/plugins/MavenPlugin]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136741339</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136741339</guid><author>Superkom666</author><pubDate>Fri, 15 Mar 2024 15:34:00 +0800</pubDate><description><![CDATA[当你的build.gradle文件里面的东西都是正常的时候但是还是报这个插件异常的错误可以试试我这个方案。首先下载好一个gradle到本地，找一个文件夹存着然后打开setting。然后配置好再重新build一下，就可以成功解决了！]]></description><category></category></item><item><title><![CDATA[使用CompletableFuture在主线程捕获子线程异常]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136161173</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136161173</guid><author>Superkom666</author><pubDate>Mon, 19 Feb 2024 00:53:19 +0800</pubDate><description><![CDATA[其作用是返回一个新的CompletableFuture，如果原CompletableFuture以异常的方式完成，则使用提供的方法来计算新CompletableFuture的值。场景：我们使用线程池的时候，假如说某个线程出现了异常此时我们需要将异常捕获打印出相应的异常日志。这个时候就可以用到CompletableFuture的。exceptionally方法，下面给出代码演示一下。]]></description><category></category></item><item><title><![CDATA[left join 和 right join 以及 inner join 之间的区别]]></title><link>https://blog.youkuaiyun.com/Superkom666/article/details/136002832</link><guid>https://blog.youkuaiyun.com/Superkom666/article/details/136002832</guid><author>Superkom666</author><pubDate>Sat, 03 Feb 2024 00:05:09 +0800</pubDate><description><![CDATA[right join 是右连接，使用right join 连接两张表以后，会返回右表中的所有字段以及左表中所匹配的信息。left join 是左连接，使用left join 连接两张表以后，会返回左表中的所有字段以及右表中所匹配的信息。可以看到，返回了左表中的所有信息以及右表中所匹配的信息，如果右表中没有与之匹配的信息就会以null进行代替。inner join 相当于 join，都是内连接，会返回左右表中所匹配的信息。test2中字段如下。test1中数据如下。test2中数据如下。]]></description><category></category></item></channel></rss>