<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[雪中亮]]></title><description><![CDATA[GitHub: https://github.com/bitkylin 简书: http://www.jianshu.com/u/bd2e386a6ea8]]></description><link>https://blog.youkuaiyun.com/llmmll08</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; llmmll08]]></copyright><item><title><![CDATA[集成测试实战（1）理论基础]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/122910544</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/122910544</guid><author>llmmll08</author><pubDate>Sun, 13 Feb 2022 16:27:48 +0800</pubDate><description><![CDATA[程序猿如何看待自测？为什么要关注测试？怎么进行测试？本文基于相关问题进行了总结，其中很多内容来自于极客时间专栏「程序员的测试课」。下一篇文章聚焦在集成测试的实践上。
]]></description><category></category></item><item><title><![CDATA[Java代码中字符串拼接方式分析]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/122910526</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/122910526</guid><author>llmmll08</author><pubDate>Sun, 13 Feb 2022 16:26:08 +0800</pubDate><description><![CDATA[本文研讨的字符串拼接方式为以下4种：“+”号、StringBuilder、StringJoiner、String#join，对比分析及探讨最佳实践。]]></description><category></category></item><item><title><![CDATA[动手实践Redis主从复制、Sentinel主从切换、Cluster分片]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/117868626</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/117868626</guid><author>llmmll08</author><pubDate>Sun, 13 Jun 2021 09:36:26 +0800</pubDate><description><![CDATA[背景简介
Redis 提供的如下技术「Redis Sentinel『主从切换』、Redis Cluster『分片』」，有效实现了 Redis 的高可用、高性能、高可伸缩性，本文对以上技术进行亲自动手实践。
1. Redis Sentinel「主从切换」

监控主从节点的在线状态，并根据配置自行完成切换「基于raft协议」。
主从复制从容量角度来说，还是单机。

2. Redis Cluster「分片」

通过一致性 hash 的方式，将数据分散到多个服务器节点：设计了 16384 个哈希槽，并分配到多台 r]]></description><category></category></item><item><title><![CDATA[搭建基于 docker 的 Kafka 集群及 Spring Boot 应用访问]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/115265169</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/115265169</guid><author>llmmll08</author><pubDate>Sat, 27 Mar 2021 14:59:31 +0800</pubDate><description><![CDATA[需求

搭建一个 3 节点 kafka 集群，测试功能和性能
实现 Spring kafka 下对 kafka 集群的操作

一、搭建精简版 kafka 集群
参考排名第一的 kafka 镜像 wurstmeister/kafka 的官方文档，进行如下操作：

创建 docker-compose.yml 文件，内容如下：

version: '1'

services:
  zookeeper:
    image: zookeeper
    container_name: bitkylin-kafka-]]></description><category></category></item><item><title><![CDATA[仿照Kafka，从零开始自实现 MQ]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/113867076</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/113867076</guid><author>llmmll08</author><pubDate>Fri, 19 Feb 2021 16:32:23 +0800</pubDate><description><![CDATA[仿照Kafka，从零开始自实现 MQ，实现了 Kafka 中 80% 的基础功能。学习 Kafka 的话如果只是看文章和源码，可能不久就会忘了，还是自己实现一个「精简版」的 Kafka 吧，
实现功能概览
1、基于内存Queue实现生产和消费API

 1） 创建内存Queue， 作为底层消息存储
 2） 定义Topic， 支持多个Topic
 3） 定义Producer， 支持Send消息
 4） 定义Consumer， 支持Poll消息

2、设计自定义Queue，实现消息确认和消费offset

 1]]></description><category></category></item><item><title><![CDATA[亲自动手设计一个高并发的秒杀系统]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/113445562</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/113445562</guid><author>llmmll08</author><pubDate>Sat, 30 Jan 2021 20:00:12 +0800</pubDate><description><![CDATA[一、需求

有多款商品，每款商品均100件，每人限每款商品最多购买一件。
在X月X日 X时X分0秒开启购买。在约定时间之前，只能看到产品页面，购买按钮置灰。

二、活动预估

预计每种商品数万人参与
活动开始后半分钟内，预计每种商品收到10W次交易请求，预计总TPS：20W/s
活动开始半分钟后，预计绝大多数商品已售罄，剩下的商品仍支持秒杀，预计总TPS：2000/s

三、系统现状

系统可保持长期稳定运行的最大TPS：1000/s
短时间「1分钟内」系统未拒绝服务的最高TPS：1500/s

四、设计预]]></description><category></category></item><item><title><![CDATA[Multi Module Spring Boot集成测试使用JaCoCo生成测试覆盖率]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/108166421</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/108166421</guid><author>llmmll08</author><pubDate>Sat, 22 Aug 2020 12:23:24 +0800</pubDate><description><![CDATA[一般的SpringBoot项目会由多Module组成，每个Module为不同的功能模块。项目启动时，多个Module提供不同的服务，共同支持了本项目所提供的服务。若采用启动SpringBoot的方式进行多Module集成测试，一般test case会放在SpringApplication类所在的Module中，该Module一般仅提供了服务的入口，并无太多实际业务功能「简单来说，业务代码都不在这个Module中」。本文探讨运行集成测试，对多Module测试覆盖率合并统计的方法。
项目结构
本文所述的项目具有]]></description><category></category></item><item><title><![CDATA[基于 Hexo + NexT + GitHub 的静态博客，2020 年 8 月升级过程记录]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/107892674</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/107892674</guid><author>llmmll08</author><pubDate>Sun, 09 Aug 2020 12:52:58 +0800</pubDate><description><![CDATA[早在 2017 年，我基于 Hexo + NexT 搭建了 GitHub 托管的静态博客。到现在快 3 年了，发生了很多变化，比如 Hexo 脚手架升级了 2 个大版本「目前最新 5.0 版」，Node.js 也升级了多个大版本，静态博客的功能进行了很多增强，为了赶上时代的潮流，故需要对之前搭建的静态博客底层框架进行全方面的升级。本文记载了完整的升级过程。本文演示在 Mac 系统下的操作过程。
首先展示升级后，主页最终效果：

本次升级方案如下：

使用最新版脚手架工具创建新的静态博客项目
将文章、Next]]></description><category></category></item><item><title><![CDATA[「原理分析」Spring Boot启动时基于spring.factories自动读取远端Environment实现的原理源码分析]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/107588243</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/107588243</guid><author>llmmll08</author><pubDate>Sun, 26 Jul 2020 01:12:12 +0800</pubDate><description><![CDATA[采用Spring标准的事件/监听器模型，通过Spring SPI的方式，在Spring Boot启动时，自动读取远端「远程服务器、本地硬盘等」Environment配置，方便在Spring Boot启动前，对配置进行灵活调整，增加灵活性，减少硬编码。
本文先从原理进行分析，表明其可行性，下一篇文章再展示具体的代码实现。首先从SPI的基础开始讲起。
1. 服务发现的基础：SPI
注：此小节内容描述主要参考此文章 spring.factories
在Spring Boot中有一种非常解耦的扩展机制：Spring]]></description><category></category></item><item><title><![CDATA[Ubuntu 下 Oh My Zsh 的最佳实践「安装及配置」]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/80687274</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/80687274</guid><author>llmmll08</author><pubDate>Thu, 14 Jun 2018 02:44:51 +0800</pubDate><description><![CDATA[Oh My Zsh 是一款社区驱动的命令行工具，是基于 zsh 命令行的一个扩展工具集，提供了丰富的扩展功能，如：主题配置，插件机制，内置的便捷操作等，可以给我们一种全新的命令行使用体验。下文对 oh-my-zsh 的安装及配置方法进行总结，只总结最佳的实践。



1. 安装 oh-my-zsh

第一步：安装 zsh



# 安装 zsh
sudo apt install zsh

# 将z...]]></description><category></category></item><item><title><![CDATA[Spring Boot + MongoDB 应用的 Docker 化实践]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/80580865</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/80580865</guid><author>llmmll08</author><pubDate>Tue, 05 Jun 2018 14:26:17 +0800</pubDate><description><![CDATA[本文旨在通过将一个具体的 Spring Boot + MongoDB 项目进行 Docker 化处理，从而对 Docker 的基本用法进行一次实践。该项目 Docker 化后，后端服务访问数据库正常，仍然可以打开后端服务托管的单页 Web 应用，总之项目运行状态符合预期。具体使用的项目见 这个 GitHub 仓库。

学习 Docker 的基本原理、基本用法可以参考这本开源电子书《Docker —...]]></description><category></category></item><item><title><![CDATA[基于 Netty 的可插拔业务通信协议的实现「3」业务注册及实际工作流程]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/80107194</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/80107194</guid><author>llmmll08</author><pubDate>Fri, 27 Apr 2018 14:04:40 +0800</pubDate><description><![CDATA[本文为该系列的第三篇文章，设计需求为：服务端程序和众多客户端程序通过 TCP 协议进行通信，通信双方需通信的消息种类众多。上一篇文章以一个具体的需求为例，探讨了指定的 Java 消息对象与其相应的二进制数据帧相互转换的方法。本文仍以该实例为例，探讨该自定义通信协议的具体工作流程，以及如何以注册的形式灵活插拔通信消息对象。



1. 以注册的形式实现通信消息对象的统一管理

通过该系列的第二篇文章...]]></description><category></category></item><item><title><![CDATA[基于 Netty 的可插拔业务通信协议的实现「2」特定业务消息对象的设计]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79751181</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79751181</guid><author>llmmll08</author><pubDate>Thu, 29 Mar 2018 23:48:57 +0800</pubDate><description><![CDATA[本文为该系列的第二篇文章，设计需求为：服务端程序和众多客户端程序通过 TCP 协议进行通信，通信双方需通信的消息种类众多。上一篇文章详细描述了该通信协议的二进制数据帧格式以及基本 Java 消息类，假设通信双方「服务端、客户端」均由 Netty 框架构建而成，双方在程序内部使用 Java 消息对象，通信双方信息交互采用的是自定义二进制帧格式，本文通过一个具体实例，探讨指定的 Java 消息对象与其...]]></description><category></category></item><item><title><![CDATA[基于 Netty 的可插拔业务通信协议的实现「1」协议描述及基本消息对象设计]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79402502</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79402502</guid><author>llmmll08</author><pubDate>Wed, 28 Feb 2018 16:37:12 +0800</pubDate><description><![CDATA[开发工程中，有一个常见的需求：服务端程序和多个客户端程序通过 TCP 协议进行通信，通信双方需通信的消息种类众多，并且客户端的数量可能有数万个。为此，双方需要约定尽可能丰富、灵活的数据帧「数据包」协议，方便后续业务功能的设计。

本文设计了一种通信协议，为压缩数据量，该协议的数据帧以二进制方式进行传输并识别，即其基本单位为字节，必要时将部分字节流手动转化为可读文本。通过设定功能位来实现丰富的通信消...]]></description><category></category></item><item><title><![CDATA[Windows 10 用于 Linux 子系统的一键构建、打包脚本「 Node、Gradle 项目」]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79349742</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79349742</guid><author>llmmll08</author><pubDate>Thu, 22 Feb 2018 21:39:41 +0800</pubDate><description><![CDATA[最近正在开发一个 Java & Vue.js 全栈项目，该项目由以下几部分组成：Java 后端服务器、基于 Vue.js 的单页应用、基于 JavaFX 的 GUI 客户端以及其他辅助工具等。如果对项目中的某个子模块进行修改，需要对其手动编译、移动，再对父模块进行编译，操作繁琐，本文探讨通过 Windows 10 的 Linux 子系统运行 Shell 脚本简化上述操作并进行扩展。]]></description><category></category></item><item><title><![CDATA[使用 Linux 子系统部署 Node、Gradle 项目的构建工具]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79331737</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79331737</guid><author>llmmll08</author><pubDate>Sat, 17 Feb 2018 09:46:41 +0800</pubDate><description><![CDATA[最近的一个项目，由三个 Gradle「Java」工程以及一个 Node「Vue.js」工程组成。为了使用 Linux 下的各种工具提升效率，本文探讨 Linux 子系统的使用及在该系统下，Java、Node.js、Gradle 等工具的配置。并在后一篇文章中，探讨该项目的一键构建、打包脚本，从而根本上提升开发效率。



1. Windows 10 秋季创意者更新下的 Linux 子系统

我目前...]]></description><category></category></item><item><title><![CDATA[基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79080739</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79080739</guid><author>llmmll08</author><pubDate>Wed, 17 Jan 2018 00:53:12 +0800</pubDate><description><![CDATA[本文讲述如何实现拥有酷炫背景视频的登录页面，浏览器窗口随意拉伸，背景视频及前景登录组件均能完美适配，背景视频可始终铺满窗口，前景组件始终居中，视频的内容始终得到最大限度的保留，可以得到最好的视觉效果。并且基于 Vue.js 2.0 全家桶。具体效果如下图所示：

最终效果可以翻到文章最后观看。



1. 背景视频 Web 页面的既有实现方式

国外有一个很好的网站「Coverr」，提供了完善的教]]></description><category></category></item><item><title><![CDATA[经典排序算法及其 Java 实现]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/79080729</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/79080729</guid><author>llmmll08</author><pubDate>Wed, 17 Jan 2018 00:47:47 +0800</pubDate><description><![CDATA[网上有很多排序算法的总结，不过有很多缺点，比如有些根本就是错的，无法通过测试用例，有些过于冗长。所以我总结了一套短小精悍的 Java 实现，经测试，该套实现可通过牛客网的关于此的所有测试用例。



1. 冒泡排序



public class BubbleSort implements KySort {
    public void kySort(int[] a, int size) {]]></description><category></category></item><item><title><![CDATA[基于 Netty 的帧调度策略，自行实现流量控制及可靠性通信]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/75424662</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/75424662</guid><author>llmmll08</author><pubDate>Wed, 19 Jul 2017 17:21:38 +0800</pubDate><description><![CDATA[Java 服务器和硬件设备通信的过程中，众多的硬件设备可能数据帧处理能力较差，可靠性较差，所以在 Netty 模块中使用了帧调度算法。服务器大规模下发数据帧时，可进行有效的拥塞控制、超时重发，可有效提升集群设备的可靠性，降低集群设备的研发难度。]]></description><category></category></item><item><title><![CDATA[Maven 集成 JavaFX 8 以及「fx:root」问题探讨]]></title><link>https://blog.youkuaiyun.com/llmmll08/article/details/72625514</link><guid>https://blog.youkuaiyun.com/llmmll08/article/details/72625514</guid><author>llmmll08</author><pubDate>Mon, 22 May 2017 13:12:33 +0800</pubDate><description><![CDATA[本文探讨使用 Maven 构建集成 JavaFX 8 的可执行程序的方法，以及 `<fx:root>` 根节点问题。]]></description><category></category></item></channel></rss>