<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[孙琛斌的专栏]]></title><description><![CDATA[不积跬步无以至千里，不积小流无以成江海]]></description><link>https://blog.youkuaiyun.com/sun5769675</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sun5769675]]></copyright><item><title><![CDATA[实现阿里云MySQL数据库实时同步到AWS的MySQL数据库]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/135405210</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/135405210</guid><author>sun5769675</author><pubDate>Fri, 05 Jan 2024 11:18:21 +0800</pubDate><description><![CDATA[通过上述步骤，我们成功实现了阿里云MySQL数据库到AWS MySQL数据库的实时数据同步。这个过程涉及到了多个技术组件，包括Canal、Kafka、Confluent和Kafka Connect JDBC，每个组件都有自己的配置要求和使用方法。但是，只要我们遵循上述步骤和配置方法，就可以顺利实现数据同步。]]></description><category></category></item><item><title><![CDATA[Kafka实战：消息队列系统的构建与优化]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/135286220</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/135286220</guid><author>sun5769675</author><pubDate>Fri, 29 Dec 2023 11:05:19 +0800</pubDate><description><![CDATA[如果设置为非0值，比如5（毫秒），则生产者会等待5毫秒，让更多的消息有机会加入到当前的批量中，如果在这5毫秒内，新的消息到来，那么它们就会被加入到批量中一起发送；如果5毫秒过去了，新的消息还没有到来，那么生产者就会发送当前的批量。通常情况下，Kafka生产者会尽可能地将多个消息打包成一个批量，然后一次性发送给broker，这样可以提高网络传输的效率。但是，如果在一个批量被发送前，新的消息一直没有到来，那么这个批量就会一直等待，导致延迟。所以，如果生产的消息非常大，或者产生的速度非常快，那么可能会在。]]></description><category></category></item><item><title><![CDATA[HTTP 原理]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/128186573</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/128186573</guid><author>sun5769675</author><pubDate>Mon, 05 Dec 2022 14:48:35 +0800</pubDate><description><![CDATA[HTTP是一个无状态的协议。无状态是指客户机（Web浏览器）和服务器之间不需要建立持久的连接，这意味着当一个客户端向服务器端发出请求，然后服务器返回响应(response)，连接就被关闭了，在服务器端不保留连接的有关信息.HTTP 遵循请求(Request)/应答(Response)模型。客户机（浏览器）向服务器发送请求，服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。传输流程1：地址解析如用客户端浏览器请求这个页面：http://localhost.com:8080/inde]]></description><category></category></item><item><title><![CDATA[Redis这一篇就够了]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/117072718</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/117072718</guid><author>sun5769675</author><pubDate>Thu, 20 May 2021 14:39:29 +0800</pubDate><description><![CDATA[概述
什么是Redis


Redis(Remote Dictionary Server) 是一个使用 C 语言编写的，开源的（BSD许 可）高性能非关系型（NoSQL）的键值对数据库。


Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串，值 支持五种数据类型：字符串、列表、集合、散列表、有序集合。


与传统数据库不同的是 Redis 的数据是存在内存中的，所以读写速度非常快， 因此 redis 被广泛应用于缓存方向，每秒可以处理超过 10万次读写操作，是已 知性能快的Key-V]]></description><category></category></item><item><title><![CDATA[是什么导致了CommunicationsException, druid version 1.1.16]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/115875315</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/115875315</guid><author>sun5769675</author><pubDate>Wed, 21 Apr 2021 11:21:02 +0800</pubDate><description><![CDATA[CommunicationsException, druid version 1.1.16, jdbcUrl : jdbc:mysql://rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com:3306/db_xxxxx_prod?useSSL=false&amp;useAffectedRows=true&amp;useUnicode=true&amp;characterEncoding=UTF-8, testWhileIdle true, idle millis 5]]></description><category></category></item><item><title><![CDATA[Squaretest 自动生成Mock单元测试]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/111043213</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/111043213</guid><author>sun5769675</author><pubDate>Fri, 11 Dec 2020 17:41:05 +0800</pubDate><description><![CDATA[今天来介绍一款工具Squaretest，它是一款自动生成单元测试的插件，为什么会用到它也是因为最近公司上了代码质量管控的指标，会考评各个项目的单元测试覆盖率，以及sonar扫描出来的各种问题，很多老项目老代码，或者着急交付的项目，单元测试严重缺失，覆盖率只有5%不到，所以几个小伙伴这几天就在疯狂的堆单元测试，3个人堆了2天才堆到30%，于是我也来上手帮忙写了两个，写到第二个的时候就发现，这个活不应该是人干的，要去看原来的代码，然后根据逻辑写各种Mock，感觉是有迹可循的东西，所以就查了下，发现果然有插件帮我]]></description><category></category></item><item><title><![CDATA[Jenkins + Docker 自动化微服务发布平台实战]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/109246446</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/109246446</guid><author>sun5769675</author><pubDate>Sat, 24 Oct 2020 08:52:28 +0800</pubDate><description><![CDATA[论述
近几年一直很流行CI/CD自动化构建发布平台，各大公司也都在搞比较适合自己业务的CI/CD平台，他不仅能够节省时间提升发布效率，同时也能够降低发布风险，因为以前都是会有人工介入为发布增加了很多不确定性，有了CI/CD平台能够更好的管控发布规范。
今天我们来简单的介绍下比较基础班的CI/CD平台的搭建，前期准备：

git上有一个springboot项目
有一台linux服务器，本文使用的是centos7.3系统

Jenkins篇
第一步：安装JDK
// 移出旧版本JDK
yum remove -y]]></description><category></category></item><item><title><![CDATA[开源框架mybatis-enhance-actable.1.1.0.RELEASE新版本迭代]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/106391614</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/106391614</guid><author>sun5769675</author><pubDate>Wed, 27 May 2020 21:58:33 +0800</pubDate><description><![CDATA[五年前作为一名工作一年的程序渣的我，开始了思考，为了降低重复性及含金量低的技术工作，我准备结合自己的痛点写一个小插件，因为当时对mybatis和hibernate都有接触，总结分析后，觉得mybatis的灵活性更大未来前景广泛，而且入门难度最低，但同时**在当时**他的缺陷也很明显。

首先他不具备跟hibernate一样的自动建表能力，表结构稍有变化需要，准备sql脚本，然后去改自己的实体类，这种过程是很无聊的，而且万一上生产忘记执行某个sql脚本，或用了错误的脚本就尴尬了，毕竟人做的事情不如机器做的靠谱]]></description><category></category></item><item><title><![CDATA[采用Nginx的limit模块实现限流]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/105663441</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/105663441</guid><author>sun5769675</author><pubDate>Mon, 27 Apr 2020 13:38:00 +0800</pubDate><description><![CDATA[先说一下背景，为什么要做限流？ 一个系统吞吐量通常由QPS（TPS）、并发数两个因素决定，每套系统这两个值都有一个相对极限值，在应用场景访问压力下，只要某一项达到系统最高值，系统的吞吐量就上不去了，如果压力继续增大，系统的吞吐量反而会下降，原因是系统超负荷工作，上下文切换、内存等等其它消耗导致系统性能下降。
也就是并发越高，系统的处理能力就会越低，TPS也就越低，这样对于用户体验来讲是十分不友好的...]]></description><category></category></item><item><title><![CDATA[Jedis3.0以上版本关闭连接时遇到的坑]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/104966366</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/104966366</guid><author>sun5769675</author><pubDate>Thu, 19 Mar 2020 14:03:08 +0800</pubDate><description><![CDATA[在高并发场景业务日志频发出现jedis如下异常信息
redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool
	at redis.clients.util.Pool.returnBrokenResourceObject(Pool.java:103)
	at redis.clien...]]></description><category></category></item><item><title><![CDATA[三个类告诉你MyBatis是如何用动态代理实现的]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/104445516</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/104445516</guid><author>sun5769675</author><pubDate>Sat, 22 Feb 2020 16:35:07 +0800</pubDate><description><![CDATA[今天来讲一下mybatis的实现原理，我们都知道mybatis是使用动态代理的方式实现的一套ORM框架，那么他是怎么实现的呢？
在回答这个问题之前，我们先来捋一下mybatis框架的使用流程，一般我们会把他跟spring一起结合使用，spring容器来统一管理所有对象，使用mybatis时首先要进行几个配置。

dao的包路径（也就是接口对象的包路径）
xml文件的路径

我们都知道使用mybat...]]></description><category></category></item><item><title><![CDATA[CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/103737280</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/103737280</guid><author>sun5769675</author><pubDate>Fri, 27 Dec 2019 19:09:05 +0800</pubDate><description><![CDATA[最近负责的一个老项目CPU时不时的就会飘到90%以上，然后宕掉，这个项目是一个汽车类的商城支持在线下单预约试驾等功能，咨询品牌方说是做了一波投放，但是没有提前通知我们，看了一波日志其实请求量也不是特别大。

    我们的系统是部署在阿里云上的，下面是简单的系统机构图：



    理论上按照这个配置没理由cpu利用率没理由飙升这么高，以至于品牌方和PM频繁收到阿...]]></description><category></category></item><item><title><![CDATA[商城拍卖活动设计方案 瞬时并发高可用]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/102683621</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/102683621</guid><author>sun5769675</author><pubDate>Tue, 22 Oct 2019 15:53:04 +0800</pubDate><description><![CDATA[然后是看下我们的小程序页面其实很简单的，就登陆成功后到列表页开始倒计时，然后点击详情，倒计时结束，进入拍卖中的倒计时，需要交保证金，交完保证金，去竞价即可，活动时间结束，谁拍到了就去付尾款。接口层部分做了如下8个接口，当然还有8个数据维护的接口这里就不列举了，就是针对表数据的一个增删改查，后面看DB设计即可知晓，流程没有画的特别详细但是主要流程都写了。这边设计的后台数据维护功能是一个拍卖活动下，可以配置多个单位级的拍卖商品，是一对多的关系。4. 拍卖阶段叫价（最后一秒有人出价会延时5分钟）]]></description><category></category></item><item><title><![CDATA[是什么导致了Spring Aop失效了？]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/95187532</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/95187532</guid><author>sun5769675</author><pubDate>Tue, 09 Jul 2019 14:41:53 +0800</pubDate><description><![CDATA[使用Spring Aop遇到的问题

    我们在做一些统一操作的功能时，经常会使用到Spring的Aop技术，比如要在每个方法进入前做点什么事情，结束后做点什么事情，这个时候我们就会想到用到Aop去做，详细的使用方法这里就不展开了，默认大家都会用，如果不会用没有概念的话，可能没办法看懂下面的问题场景，这边主要面向的是对Spring和Aop有过实战的同学，好，题外话不说，看下面几种Aop...]]></description><category></category></item><item><title><![CDATA[网站访问突然变慢一系列解决思路]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/90273296</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/90273296</guid><author>sun5769675</author><pubDate>Thu, 16 May 2019 22:15:20 +0800</pubDate><description><![CDATA[1. 首先看下机器的CPU资源是否过高，如果CPU资源过高会导致网站响应变慢，如果是那么需要看下哪个服务占用了CPU的资源，然后详细排查过高的原因

1) 通过top命令找出占用CPU高的PID

2) 通过ps aux | grep pid 可以进一步确定这个pid运行的是什么服务

3)查看线程列表ps -mp pid -o THREAD,tid,time，观察这个服务的哪几个线程占用了CPU...]]></description><category></category></item><item><title><![CDATA[开源框架springboot-mybatis-wr-separation实现springboot+mybatis读写分离]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/90261668</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/90261668</guid><author>sun5769675</author><pubDate>Thu, 16 May 2019 13:23:22 +0800</pubDate><description><![CDATA[最近做springboot+mybatis的项目想要用到读写分离，查了一圈发现大家都是自己写的，没用通用现成的读写分离架构，因此就写了一个比较简单好用的小插件，来帮助大家简单的实现读写分离的功能，项目已开源并已经上传到maven中央仓库，欢迎提出宝贵意见，共同改进。

springboot-mybatis-wr-separation

介绍
springboot-mybatis-wr-separa...]]></description><category></category></item><item><title><![CDATA[手机浏览器唤起支付宝并打开指定页面]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/89634633</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/89634633</guid><author>sun5769675</author><pubDate>Sun, 28 Apr 2019 11:42:17 +0800</pubDate><description><![CDATA[支付宝的红包功能让一批人先富了起来，很多大大小小的网站都嵌入了领红包的脚本一点就直接唤起了支付宝，并且打开领红包的页面，那么这个功能是怎么实现的呢？

支付宝提供了专门的接口通过scheme启动，scheme可以理解为一种特殊的URI，格式与URI相同，具体使用如下：

支付宝客户端的标准scheme为：alipays://platformapi/startapp?appId=

如果是某些运营页...]]></description><category></category></item><item><title><![CDATA[编写简单的Web容器TomDog（揭Web容器面纱）]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/83026805</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/83026805</guid><author>sun5769675</author><pubDate>Fri, 12 Oct 2018 15:29:12 +0800</pubDate><description><![CDATA[从事Java Web编程的朋友都知道，一个web应用的组成必须要有web.xml，因为这个是web应用程序的入口，通常我们会选择一种Web容器来发布我们的Web项目，比如Tomcat、Weblogic等容器服务程序。

这些程序都遵从一个标准的Web工程标准，他们启动时都会去主动读取指定位置的web.xml文件，web.xml中的各个节点都是既定的标准，Web容器会去按照规则读取配置信息将各种Cl...]]></description><category></category></item><item><title><![CDATA[一段代码引发对泛型的重新认识]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/82253377</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/82253377</guid><author>sun5769675</author><pubDate>Fri, 31 Aug 2018 11:12:20 +0800</pubDate><description><![CDATA[故事背景：小伙伴在开发一个导出功能时在处理数据结构的过程中，产生了一个诡异的数据结构，在一个List&amp;lt;String&amp;gt;这个类型的变量中，他的值列表却不是我们认为的String类型，而是String和Double的混合数据，由于他的业务复杂，我这边根据他代码的基本思想写出了如下demo代码。


public static void main(String[] args){
		List&amp;...]]></description><category></category></item><item><title><![CDATA[springmvc架构和springboot架构通用的引入配置方式]]></title><link>https://blog.youkuaiyun.com/sun5769675/article/details/81482963</link><guid>https://blog.youkuaiyun.com/sun5769675/article/details/81482963</guid><author>sun5769675</author><pubDate>Tue, 07 Aug 2018 16:02:05 +0800</pubDate><description><![CDATA[当我们在写一些插件或者通用功能时，可能会把他们打成jar包，如果是给web项目使用时，可能会出一个部署文档，比如要配置一些什么配置用来支持我们这个jar包里面的功能，这里建议这些可配置的参数在我们jar包中的引入方式使用@Value(&quot;${wechat.appid}&quot;)这个对于不同架构方式下都可以很容易的配置出来，下面举了三个常见的例子：


1. 使用了spring的项目需要配置xml的项目在注...]]></description><category></category></item></channel></rss>