<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[flw7758的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/flw7758</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; flw7758]]></copyright><item><title><![CDATA[idea上面的服务启动栏不见了，如何配置]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/145518425</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/145518425</guid><author>flw7758</author><pubDate>Sat, 08 Feb 2025 16:27:32 +0800</pubDate><description><![CDATA[可以通过下面路径重新配置。这个位置工具栏不见了。]]></description><category></category></item><item><title><![CDATA[docker中安装mysql，远程连接]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/134699473</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/134699473</guid><author>flw7758</author><pubDate>Wed, 29 Nov 2023 21:17:03 +0800</pubDate><description><![CDATA[搜索mysql镜像建议使用Oracle官方标记的拉取镜像启动mysql镜像需要做端口映射进入mysql容器，开放root账户授权。]]></description><category></category></item><item><title><![CDATA[redis 的Lua脚本调试，与开发]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/129760675</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/129760675</guid><author>flw7758</author><pubDate>Fri, 24 Mar 2023 23:45:58 +0800</pubDate><description><![CDATA[redis 的lua脚本调试,开发]]></description><category></category></item><item><title><![CDATA[LiteFlow 流程引擎]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/126576421</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/126576421</guid><author>flw7758</author><pubDate>Sun, 28 Aug 2022 23:57:44 +0800</pubDate><description><![CDATA[流程编排]]></description><category></category></item><item><title><![CDATA[电商网站如何规避二清风险]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/124976272</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/124976272</guid><author>flw7758</author><pubDate>Wed, 25 May 2022 23:36:09 +0800</pubDate><description><![CDATA[电商网站如何规避二清风险
什么是二清？
二清,通俗来说,就是二次清结算,是指有清结算资质的机构将资金结算给入网的商户后,该商户再将资金清结算给下游的子商户，着该商户没有清结算资质的话就属于二清了，二清的本质是没有清结算资质的机构。却提供清结算的服务。哪些机构可以做清结算呦?如:奥行、银联和银行具有清结算的资质,还有现在的第三方支付公司(有支付牌照的)都是合规合法的。
如何规避二清分析
1：电商系统内部建立虚拟账户
2：对接第三方持牌具有分账能力的支付机构
以微信支付为例：
1：交易系统收单以后，在微信创建预]]></description><category></category></item><item><title><![CDATA[如何设计一个高性能积分系统]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/124938002</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/124938002</guid><author>flw7758</author><pubDate>Tue, 24 May 2022 00:19:46 +0800</pubDate><description><![CDATA[#  如何设计一个高性能积分系统
功能说明
1：用户签到可以获得积分，需要按照用户维度每天进行用户总积分排行榜
2：需要近实时更新排行榜
3：在积分相同的情况下，需要按照先注册的用户排在前面
4：用户量100w
5：排行前20名称
6：实现积分新增，扣减，过期等能力。
排行榜设计
1：排行榜的实现可以借助redis的SortedSet数据结构实现排行榜，sortedSet可以按照我们给的score进行排序，
但是SortedSet的性能会随着元素的数量急剧下降。这里每次写入新的移除旧的数据，保证排行的数量在]]></description><category></category></item><item><title><![CDATA[如何实现一个排行榜]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/124286989</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/124286989</guid><author>flw7758</author><pubDate>Wed, 20 Apr 2022 00:00:34 +0800</pubDate><description><![CDATA[如何实现一个排行榜
场景
1：用户签到可以获得积分，需要按照用户维度每天进行用户总积分排行榜
2：需要近实时更新排行榜
3：在积分相同的情况下，需要按照先注册的用户排在前面
4：用户量100w
5：排行前20名称
设计
1：排行榜的实现可以借助redis的SortedSet数据结构实现排行榜，sortedSet可以按照我们给的score进行排序，
但是SortedSet的性能会随着元素的数量急剧下降。这里每次写入新的移除旧的数据，保证排行的数量在100个
2：用户每次签到都去更新排行榜，可能导致redis ]]></description><category></category></item><item><title><![CDATA[分布式系统debug日志链路日志-OnlineDebug]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/124239691</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/124239691</guid><author>flw7758</author><pubDate>Mon, 18 Apr 2022 00:07:32 +0800</pubDate><description><![CDATA[MDC 分布式日志调用日志系统-OnlineDebug
1、背景
在分布式系统中，在排查线上问题的时候我们希望可以通过请求的唯一ID（或者用户Id等），打印整个请求在多个系统中的全链路，帮助我们提升问题排查能力。
下面事我梳理的几个需求点：
1：可以通过动态配置userId，来全链路开启该userId的全链路日志。
2：在多线程池执行任务下，切换线程，也可以打印debug日志。
3：duboo调用其他服务，这个动态中的userId可以传递。
1：log4j2的MDC的能力
2：Dubbo的RpcContex]]></description><category></category></item><item><title><![CDATA[HashMap的源码关键解读]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/123764783</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/123764783</guid><author>flw7758</author><pubDate>Sat, 26 Mar 2022 21:57:35 +0800</pubDate><description><![CDATA[HashMap的源码关键解读
一：整体结构
hashMap的源码有太多文章解读了，这里只是记录关键点。对很多不重要的东西略过了。
java8以后对于hashMap的整体做了优化，是基于一个数组+链表+红黑树的实现。结构图如下：

二：key索引映射

当我们往hashMap里面put数据的时候，会先获key在数组中的位置。但是hashMap为了让我们的数据在数组中更加分散，在取模前进行了散列hash。

 static final int hash(Object key) {
        int h;
]]></description><category></category></item><item><title><![CDATA[RocketMq对于消费者对于消息的如何处理的]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/122799491</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/122799491</guid><author>flw7758</author><pubDate>Sun, 06 Feb 2022 16:55:31 +0800</pubDate><description><![CDATA[RocketMq对于消费者对于消息的如何处理的
1：如果设置了自动提交
返回：
ConsumeOrderlyStatus.COMMIT, ConsumeOrderlyStatus.ROLLBACK, ConsumeOrderlyStatus.SUCCESS ， 返回者三种状态都是会提交offset，
但是返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 会校验是否重试。达到重试次数（达到设定的重试次数会投递到重试队列，见下文）还是失败也会提交offe]]></description><category></category></item><item><title><![CDATA[装饰者设计模式在业务中的实践]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/122531065</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/122531065</guid><author>flw7758</author><pubDate>Sun, 16 Jan 2022 23:27:41 +0800</pubDate><description><![CDATA[装饰者设计模式在业务中的实践
​	装饰者设计模式在顾名思义就是在原来逻辑上进行一层装饰逻辑，从而实现不通过if-else实现对优雅的对基础逻辑的扩充。在JDK源码中的InputStream中就有使用了装饰者的设计模式。从而实现通过BufferedInputStream、DataInputStream等其他修饰InputStream，增加了缓存读取、类型读取等功能，相当于InputStream之上加了很多修饰功能，在所以它是一个装饰器模式。
​

这里inputStream作为一个被装饰的类，然后Buffer]]></description><category></category></item><item><title><![CDATA[Mybatis实现分包定义数据源]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/122395516</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/122395516</guid><author>flw7758</author><pubDate>Sun, 09 Jan 2022 16:43:29 +0800</pubDate><description><![CDATA[Mybatis实现分包定义数据库
背景
业务需求中需要连接两个数据库处理数据，需要用动态数据源。通过了解mybatis的框架，计划 使用分包的方式进行数据源的区分。
原理
前提：
我们使用mybatis都会有四个步骤
1：构建SqlSessionFactory
2：通过SqlSessionFactory 获取到sqlSession 对象
3：通过sqlSession对象获取Mapper的动态代理对象
4：通过执行动态代理对象获取返回值
其实点开sqlSessionFactory就的Configuration]]></description><category></category></item><item><title><![CDATA[JAVA日志体系发展史]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/121894323</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/121894323</guid><author>flw7758</author><pubDate>Sun, 12 Dec 2021 21:48:20 +0800</pubDate><description><![CDATA[JAVA日志发展史
第一阶段
2001年以前，Java是没有日志库的，打印日志全凭System.out和System.err
缺点:

产生大量的IO操作同时在生产环境中无法合理的控制是否需要输出
输出的内容不能保存到文件
只打印在控制台，打印完就过去了，也就是说除非你一直盯着程序跑
无法定制化，且日志粒度不够细

第二阶段
2001年，一个ceki Gulcü的大佬搞了一个日志框架 log4j后来( log4j成为Apache项目，Ceki加入Apache组织
Apache还曾经建议Sun引入Log4j到]]></description><category></category></item><item><title><![CDATA[关于订单库存扣减的应用实践]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/121111071</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/121111071</guid><author>flw7758</author><pubDate>Tue, 02 Nov 2021 22:34:35 +0800</pubDate><description><![CDATA[关于订单库存扣减的应用实践
一： 背景
​	在电商的业务场景中每个商品都是有库存的，而且可能存在很多限售的运营策略。我们团队面临社区电商的业务场景更为复杂。不仅仅是库存限售，存在区域，门店，用户，运营分组，物流等的限售策略。如何面对日单量千万级别（未来更多），和多个维度的限售策略而不超卖，少卖是一个必须解决的问题。
​	下面就是库存扣减的流程图。冲图种我们可以看出，要保证整个扣减库存不出问题，限购查询和库存的扣减必须是原子性的而且要单线程执行。
​	
​	现在处理这种场景存在多种方案。但是要保证高性能和高可]]></description><category></category></item><item><title><![CDATA[CompleteFuture实现简单的任务编排实践]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/120818790</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/120818790</guid><author>flw7758</author><pubDate>Mon, 18 Oct 2021 00:25:43 +0800</pubDate><description><![CDATA[CompleteFuture实现简单的任务编排实践
一：前言
​	CompleteFuture是java8 新提供的API，是对函数式编程思想的体现，提供了很多的对于函数式编程支持。不止有同步处理功能，还有异步处理能力。
通过函数式编程可以实现线程的简单任务编排。高效，整洁实现多线程异步编程。
二：详细介绍
​	CompleteFuture 提供的API中以ansy结尾的都是异步处理的。


异步执行任务，并返回结果：supplyAsync 异步处理，并返回结果，默认使用ForkJoinPool.commo]]></description><category></category></item><item><title><![CDATA[无状态状态机在代码中的实践]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/120791958</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/120791958</guid><author>flw7758</author><pubDate>Fri, 15 Oct 2021 22:39:33 +0800</pubDate><description><![CDATA[无状态状态机
一：前言
​	在项目中经常有一些工单，申请之类需要对状态进行流转。这种需求一般都是满足什么条件然后就翻转状态。这些流程结构相似得逻辑，感觉可以抽象处理。用一个通用得结构处理，可以让系统更加整洁，代码逻辑更加单一。
​	发现阿里开源一种，轻量级得无状态状态机得组件。仔细研究一下，确实很适合这种场景下对代码逻辑得解耦，相比于if-else代码更加让人容易理解，也更加优雅。
二：状态机的模型

State：状态
Event：事件，状态由事件触发，引起变化
Transition：流转，表示从一个状态到]]></description><category></category></item><item><title><![CDATA[git操作清单，问题答疑]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/120692424</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/120692424</guid><author>flw7758</author><pubDate>Sun, 10 Oct 2021 21:12:43 +0800</pubDate><description><![CDATA[git操作清单，问题答疑
一：git操作示意图


常见概念说明

Remote：远程分支
Repository：仓库
index：暂存区
workspace：工作空间



二：常见操作
1. 新建代码库
# 在当前目录新建一个Git代码库
$ git init

# 新建一个目录，将其初始化为Git代码库
$ git init [project-name]

# 下载一个项目和它的整个代码历史
$ git clone [url]

2. 配置
# 显示当前的Git配置
$ git config --li]]></description><category></category></item><item><title><![CDATA[【软件设计】如何画时序图]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/120684898</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/120684898</guid><author>flw7758</author><pubDate>Sun, 10 Oct 2021 12:37:13 +0800</pubDate><description><![CDATA[时序图
一：简介
​	 时序图（Sequence Diagram）是显示对象之间交互的图，这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有：对象（Actor）、生命线（Lifeline）、控制焦点（Focus of control）、消息（Message）等等。
二：时序图的元素：


角色（Actor）：系统角色，可以是人、及其甚至其他的系统或者子系统。


对象（Object）：对象代表时序图中的对象在交互中所扮演的角色


生命线（Li]]></description><category></category></item><item><title><![CDATA[发布订阅模式的最佳实践-guava的EventBus]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/120517980</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/120517980</guid><author>flw7758</author><pubDate>Mon, 27 Sep 2021 21:35:22 +0800</pubDate><description><![CDATA[发布订阅模式的最佳实践-guava的EventBus
一：背景
​	项目中大量有例如发送短信，记录日志的一些业务逻辑，这些业务逻辑，不属于业务逻辑的一部分，不应该耦合到业务逻辑中。
在这种场景下，发布订阅模式就可以解耦这种情况。
​	在google的guava组件中有一种EventBus的发布订阅模式的组件。我们可以借用这种组件实践发布订阅模式。
二：实现DEMO
​	我们基于Springboot，和guava实现简单的发布订阅模式。


定义一个IObserver的接口，所有观察者都需要实现这个接口。

]]></description><category></category></item><item><title><![CDATA[Typora 如何使用阿里云作为图床]]></title><link>https://blog.youkuaiyun.com/flw7758/article/details/119718025</link><guid>https://blog.youkuaiyun.com/flw7758/article/details/119718025</guid><author>flw7758</author><pubDate>Sun, 15 Aug 2021 19:01:44 +0800</pubDate><description><![CDATA[Typora 如何使用阿里云作为图床
一：购买阿里云的OSS服务
1)：阿里云购买一年40G的OSS服务。

作为图床，40G够用了。
2）：创建Bucket

3）：创建访问密钥


Keyld一定要复制文本中，keySecret一定要复制文本中
二：下载，配置pinggo
1）：下载pinggo，下载地址：https://picgo.github.io/PicGo-Doc/zh/guide/#%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85
2）：安装好picgo后选择配置pic]]></description><category></category></item></channel></rss>