<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>Norlcayn的博客</title><link>http://100.86.201.90:8090/</link><atom:link href="http://100.86.201.90:8090/feed.xml" rel="self" type="application/rss+xml"/><description>Norlcayn的博客</description><generator>Halo v2.27.1</generator><language>zh-cn</language><lastBuildDate>Sun, 25 Oct 2026 13:21:01 GMT</lastBuildDate><item><title><![CDATA[Hello Halo]]></title><link>http://100.86.201.90:8090/archives/hello-halo</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Hello%20Halo&amp;url=/archives/hello-halo" width="1" height="1" alt="" style="opacity:0;">如果你看到了这一篇文章，那么证明你已经安装成功了，感谢使用 Halo 进行创作，希望能够使用愉快。]]></description><guid isPermaLink="false">/archives/hello-halo</guid><dc:creator>Administrator</dc:creator><category>默认分类</category><pubDate>Sat, 24 Oct 2026 06:21:24 GMT</pubDate></item><item><title><![CDATA[状态机]]></title><link>http://100.86.201.90:8090/archives/4631b1c1</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E7%8A%B6%E6%80%81%E6%9C%BA&amp;url=/archives/4631b1c1" width="1" height="1" alt="" style="opacity:0;">什么是状态机 需求说明 在订单模块中订单共设计了7种状态，如下图 订单会在多个状态间进行转换，这就需要开发人员都去记忆这些转换关系，这是非常麻烦的 if(订单状态 == 待支付){ //如果用户支付成功，执行此场景下的业务逻辑，更新订单状态为派单中 update(id,派单中) ) if(]]></description><guid isPermaLink="false">/archives/4631b1c1</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 11:22:18 GMT</pubDate></item><item><title><![CDATA[数据表设计规范]]></title><link>http://100.86.201.90:8090/archives/885d9d8a</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E6%95%B0%E6%8D%AE%E8%A1%A8%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83&amp;url=/archives/885d9d8a" width="1" height="1" alt="" style="opacity:0;">设计范式 数据库设计三范式： 第一范式：数据表中的每一列都是原子的，不可再拆分 第二范式：每张表中的一条记录只描述一个实体 第三范式：数据表中不要存在冗余字段（可以通过其他字段推导出的字段） 1）第一范式：数据表中的每一列都是原子的，不可再拆分 有一张用户考勤表设计如下 id 用户名 考勤时间 1]]></description><guid isPermaLink="false">/archives/885d9d8a</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:59:54 GMT</pubDate></item><item><title><![CDATA[缓存优化]]></title><link>http://100.86.201.90:8090/archives/a47e7bb3</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E7%BC%93%E5%AD%98%E4%BC%98%E5%8C%96&amp;url=/archives/a47e7bb3" width="1" height="1" alt="" style="opacity:0;">针对系统中访问频率很高的页面，常见的优化方案如下： 将页面做页面静态化处理 如果静态化之后依旧无法满足需求，可以将静态资源转移到CDN服务器 页面上变动的内容可以异步请求后端服务器获取数据，后端可以添加缓存来减轻数据库的压力 数据库方面可以通过合理的存储引擎选择、表字段设计、索引设计等进一步提高查询]]></description><guid isPermaLink="false">/archives/a47e7bb3</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:59:54 GMT</pubDate></item><item><title><![CDATA[事务失效]]></title><link>http://100.86.201.90:8090/archives/e4dbeca2</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E4%BA%8B%E5%8A%A1%E5%A4%B1%E6%95%88&amp;url=/archives/e4dbeca2" width="1" height="1" alt="" style="opacity:0;">事务失效问题 如果只对其中的一段代码添加事务，比方只对其中的**this.save(orders);**一行添加事务 想实现的话有两种方案： 使用Spring的编程式事务，这种方式控制粒度更精准，但是缺点是代码耦合度高，需要自己写代码处理事务 将需要控制事务的那段代码单独提到一个方法中去，然后仅仅对]]></description><guid isPermaLink="false">/archives/e4dbeca2</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:59:54 GMT</pubDate></item><item><title><![CDATA[冷热分离]]></title><link>http://100.86.201.90:8090/archives/fa6c2e75</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E5%86%B7%E7%83%AD%E5%88%86%E7%A6%BB&amp;url=/archives/fa6c2e75" width="1" height="1" alt="" style="opacity:0;">需求分析 随着时间的推移，订单数据会逐渐增加，而在这些数据中，超过15天的订单是无法再进行变化的 因此一笔订单在15日之后的访问频率就会大大降低，为了提高订单表的查询效率，可以它转移到单独的库中 也就是将订单数据分到两个库中进行存储 订单库：存储15日之内的订单（数据量较小，访问频率高，属于热数据）]]></description><guid isPermaLink="false">/archives/fa6c2e75</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:59:54 GMT</pubDate></item><item><title><![CDATA[订单重复提交问题]]></title><link>http://100.86.201.90:8090/archives/844bc377</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E8%AE%A2%E5%8D%95%E9%87%8D%E5%A4%8D%E6%8F%90%E4%BA%A4%E9%97%AE%E9%A2%98&amp;url=/archives/844bc377" width="1" height="1" alt="" style="opacity:0;">订单重复提交 订单重复提交指的是同一个订单多次提交的情况，常见原因如下： 重复点击：用户可能会因为网络延迟、手抖、页面加载缓慢等原因，多次点击下单提交按钮 页面刷新：用户在订单提交后，如果刷新页面，浏览器可能会重新发送上一次的表单提交请求 防止订单重复提交的本质就是保证下单方法不要被重复调用，这首先]]></description><guid isPermaLink="false">/archives/844bc377</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:58:37 GMT</pubDate></item><item><title><![CDATA[分库分表]]></title><link>http://100.86.201.90:8090/archives/a3a0c28e</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8&amp;url=/archives/a3a0c28e" width="1" height="1" alt="" style="opacity:0;">随着用户不断的进行下单，MySQL订单表中的数据会不断的增多，其存储及查询性能也会随之下降 当数据量没有那么大的时候，可以通过添加索引和缓存来进行查询优化，但是数据量过大，就只能分库分表了 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储 一般认为，当MySQL单表行数超]]></description><guid isPermaLink="false">/archives/a3a0c28e</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:55:40 GMT</pubDate></item><item><title><![CDATA[超卖方案（线程锁）]]></title><link>http://100.86.201.90:8090/archives/f5515ed1</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E8%B6%85%E5%8D%96%E6%96%B9%E6%A1%88%EF%BC%88%E7%BA%BF%E7%A8%8B%E9%94%81%EF%BC%89&amp;url=/archives/f5515ed1" width="1" height="1" alt="" style="opacity:0;">超卖方案 Java锁 jvm提供了很多锁，它们都可以解决线程安全问题，大致可以分为两类：悲观锁和乐观锁 悲观锁 悲观锁认为当前线程在操作共享资源期间，总会有其它线程修改数据 为了保证线程安全，就要在操作前总是先加锁，操作完成后释放锁 像Java中的synchronized、ReentrantLock]]></description><guid isPermaLink="false">/archives/f5515ed1</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:47:48 GMT</pubDate></item><item><title><![CDATA[责任链模式]]></title><link>http://100.86.201.90:8090/archives/6208627e</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F&amp;url=/archives/6208627e" width="1" height="1" alt="" style="opacity:0;">基本理论 责任链模式允许请求沿着处理链进行传递，链中的每个处理者都要决定是自己处理，还是交给下一环处理 在这里有一个很经典的案例就是请假审批，比如我们有这样一个需求，就是当员工请假时，审批规则如下： 请假天数少于3天，组长审批 请假天数在3-5天，主管审批 请求天数大于5天，经理审批 此时就可以使用]]></description><guid isPermaLink="false">/archives/6208627e</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:38:19 GMT</pubDate></item><item><title><![CDATA[策略模式]]></title><link>http://100.86.201.90:8090/archives/72e3b671</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F&amp;url=/archives/72e3b671" width="1" height="1" alt="" style="opacity:0;">问题说明 当前项目中，订单的状态比较多，不同状态下取消订单的逻辑是不同的；而且用户不同，可操作的内容也不同 普通用户：可取消待支付、派单中、待服务的订单 运营人员：可取消派单中、待服务、服务中、完成的订单 因此最终实现取消订单的代码逻辑如下所示： public void cancel(OrderCa]]></description><guid isPermaLink="false">/archives/72e3b671</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 10:38:19 GMT</pubDate></item><item><title><![CDATA[EasyExcel（报表导出）]]></title><link>http://100.86.201.90:8090/archives/4c776360</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=EasyExcel%EF%BC%88%E6%8A%A5%E8%A1%A8%E5%AF%BC%E5%87%BA%EF%BC%89&amp;url=/archives/4c776360" width="1" height="1" alt="" style="opacity:0;">技术方案 Java解析、生成Excel比较经典的技术是Apache poi，但它存在一个严重的问题就是非常的耗内存 基于这种情况，阿里团队就开发了一个新的技术，叫EasyExcel，它解决了耗费内存的问题 官网：https://easyexcel.opensource.alibaba.com/ 读取]]></description><guid isPermaLink="false">/archives/4c776360</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 09:04:36 GMT</pubDate></item><item><title><![CDATA[XXL-JOB]]></title><link>http://100.86.201.90:8090/archives/30ee4bff</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=XXL-JOB&amp;url=/archives/30ee4bff" width="1" height="1" alt="" style="opacity:0;">介绍 为了程序更具备健壮性，需要使用定时任务更新缓存 可以用来做定时任务的框架有很多，常见的有： SpringTask：单节点定时任务框架，只能用在单体项目中 XXL-JOB：分布式定时任务框架，适用于单体项目和分布式项目 XXL-JOB是一个轻量级分布式任务调度平台，它的主要角色有两个： 调度中心]]></description><guid isPermaLink="false">/archives/30ee4bff</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 08:58:34 GMT</pubDate></item><item><title><![CDATA[Jmeter快速入门]]></title><link>http://100.86.201.90:8090/archives/27717283</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Jmeter%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8&amp;url=/archives/27717283" width="1" height="1" alt="" style="opacity:0;">1.安装Jmeter Jmeter依赖于JDK，所以必须确保当前计算机上已经安装了JDK，并且配置了环境变量。 1.1.下载 可以Apache Jmeter官网下载，地址：http://jmeter.apache.org/download_jmeter.cgi 当然，我们课前资料也提供了下载好的安装]]></description><guid isPermaLink="false">/archives/27717283</guid><dc:creator>Administrator</dc:creator><category>运维</category><pubDate>Fri, 16 Jan 2026 08:43:23 GMT</pubDate></item><item><title><![CDATA[Canal]]></title><link>http://100.86.201.90:8090/archives/2040d45d</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Canal&amp;url=/archives/2040d45d" width="1" height="1" alt="" style="opacity:0;">Canal的工作原理 Canal伪装自己为MySQL的从节点，向MySQL主节点发送dump协议 MySQL主节点一旦收到dump请求，开始推送binlog给canal Canal会接收并解析这些变更事件并解析binlog，并发送到其它服务器（比如es、redis等等） 环境安装 MySQL-Can]]></description><guid isPermaLink="false">/archives/2040d45d</guid><dc:creator>Administrator</dc:creator><category>云岚到家相关技术栈</category><pubDate>Fri, 16 Jan 2026 08:30:26 GMT</pubDate></item><item><title><![CDATA[ElasticSearch]]></title><link>http://100.86.201.90:8090/archives/d48132d3</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=ElasticSearch&amp;url=/archives/d48132d3" width="1" height="1" alt="" style="opacity:0;">前情提要 黑马商城作为一个电商项目，商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的，存在很多问题 首先，查询效率较低 由于数据库模糊查询不走索引，在数据量较大的时候，查询性能很差。黑马商城的商品表中仅仅有不到9万条数据，基于数据库查询时，搜索接口的表现如图： 改为]]></description><guid isPermaLink="false">/archives/d48132d3</guid><dc:creator>Administrator</dc:creator><category>微服务</category><pubDate>Fri, 16 Jan 2026 08:30:26 GMT</pubDate></item><item><title><![CDATA[RabbitMQ]]></title><link>http://100.86.201.90:8090/archives/b543ced0</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=RabbitMQ&amp;url=/archives/b543ced0" width="1" height="1" alt="" style="opacity:0;">微服务一旦拆分，必然涉及到服务之间的相互调用，而目前服务之间调用采用的都是基于OpenFeign的调用。这种调用中，调用者发起请求后需要等待服务提供者执行业务返回结果后，才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态，因此称这种调用方式为同步调用，也可以叫同步通讯。但在很多场景下，需]]></description><guid isPermaLink="false">/archives/b543ced0</guid><dc:creator>Administrator</dc:creator><category>微服务</category><pubDate>Fri, 16 Jan 2026 08:17:52 GMT</pubDate></item><item><title><![CDATA[Redis面试篇]]></title><link>http://100.86.201.90:8090/archives/9f857a82</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Redis%E9%9D%A2%E8%AF%95%E7%AF%87&amp;url=/archives/9f857a82" width="1" height="1" alt="" style="opacity:0;">Redis主从 单节点Redis的并发能力是有上限的，要进一步提高Redis的并发能力，就需要搭建主从集群，实现读写分离 主从集群结构 下图就是一个简单的Redis主从集群结构： 搭建主从集群 在同一个虚拟机中利用3个Docker容器来搭建主从集群，容器信息如下： 容器名 角色 IP 映射端口 r1]]></description><guid isPermaLink="false">/archives/9f857a82</guid><dc:creator>Administrator</dc:creator><category>微服务</category><pubDate>Fri, 16 Jan 2026 08:00:14 GMT</pubDate></item><item><title><![CDATA[Sentinel]]></title><link>http://100.86.201.90:8090/archives/1408c19</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Sentinel&amp;url=/archives/1408c19" width="1" height="1" alt="" style="opacity:0;">在微服务远程调用的过程中，还存在几个问题需要解决 首先是业务健壮性问题： 例如在之前的查询购物车列表业务中，购物车服务需要查询最新的商品信息，与购物车数据做对比，提醒用户。设想一下，如果商品服务查询时发生故障，查询购物车列表在调用商品服务时，是不是也会异常？从而导致购物车查询失败。但从业务角度来说，]]></description><guid isPermaLink="false">/archives/1408c19</guid><dc:creator>Administrator</dc:creator><category>微服务</category><pubDate>Fri, 16 Jan 2026 07:36:45 GMT</pubDate></item><item><title><![CDATA[Seata]]></title><link>http://100.86.201.90:8090/archives/8d9a091c</link><description><![CDATA[<img src="http://100.86.201.90:8090/plugins/feed/assets/telemetry.gif?title=Seata&amp;url=/archives/8d9a091c" width="1" height="1" alt="" style="opacity:0;">分布式事务 项目中的下单业务整体流程如下： 由于订单、购物车、商品分别在三个不同的微服务，而每个微服务都有自己独立的数据库，因此下单过程中就会跨多个数据库完成业务。而每个微服务都会执行自己的本地事务： 交易服务：下单事务 购物车服务：清理购物车事务 库存服务：扣减库存事务 整个业务中，各个本地事务是]]></description><guid isPermaLink="false">/archives/8d9a091c</guid><dc:creator>Administrator</dc:creator><category>微服务</category><pubDate>Fri, 16 Jan 2026 07:22:06 GMT</pubDate></item></channel></rss>