Java
文章平均质量分 87
雪中亮
爱好技术、爱好开源、爱好分享。曾在 .NET、Android、Web 前端等领域搬砖,目前致力于 Java 后端开发与学习,靡不有初,鲜克有终。
展开
-
集成测试实战(1)理论基础
程序猿如何看待自测?为什么要关注测试?怎么进行测试?本文基于相关问题进行了总结,其中很多内容来自于极客时间专栏「程序员的测试课」。下一篇文章聚焦在集成测试的实践上。原创 2022-02-13 16:27:48 · 767 阅读 · 0 评论 -
Java代码中字符串拼接方式分析
本文研讨的字符串拼接方式为以下4种:“+”号、StringBuilder、StringJoiner、String#join,对比分析及探讨最佳实践。原创 2022-02-13 16:26:08 · 880 阅读 · 0 评论 -
动手实践Redis主从复制、Sentinel主从切换、Cluster分片
背景简介Redis 提供的如下技术「Redis Sentinel『主从切换』、Redis Cluster『分片』」,有效实现了 Redis 的高可用、高性能、高可伸缩性,本文对以上技术进行亲自动手实践。1. Redis Sentinel「主从切换」监控主从节点的在线状态,并根据配置自行完成切换「基于raft协议」。主从复制从容量角度来说,还是单机。2. Redis Cluster「分片」通过一致性 hash 的方式,将数据分散到多个服务器节点:设计了 16384 个哈希槽,并分配到多台 r转载 2021-06-13 09:36:26 · 274 阅读 · 0 评论 -
搭建基于 docker 的 Kafka 集群及 Spring Boot 应用访问
需求搭建一个 3 节点 kafka 集群,测试功能和性能实现 Spring kafka 下对 kafka 集群的操作一、搭建精简版 kafka 集群参考排名第一的 kafka 镜像 wurstmeister/kafka 的官方文档,进行如下操作:创建 docker-compose.yml 文件,内容如下:version: '1'services: zookeeper: image: zookeeper container_name: bitkylin-kafka-原创 2021-03-27 14:59:31 · 336 阅读 · 0 评论 -
仿照Kafka,从零开始自实现 MQ
仿照Kafka,从零开始自实现 MQ,实现了 Kafka 中 80% 的基础功能。学习 Kafka 的话如果只是看文章和源码,可能不久就会忘了,还是自己实现一个「精简版」的 Kafka 吧,实现功能概览1、基于内存Queue实现生产和消费API 1) 创建内存Queue, 作为底层消息存储 2) 定义Topic, 支持多个Topic 3) 定义Producer, 支持Send消息 4) 定义Consumer, 支持Poll消息2、设计自定义Queue,实现消息确认和消费offset 1原创 2021-02-19 16:32:23 · 460 阅读 · 2 评论 -
亲自动手设计一个高并发的秒杀系统
一、需求有多款商品,每款商品均100件,每人限每款商品最多购买一件。在X月X日 X时X分0秒开启购买。在约定时间之前,只能看到产品页面,购买按钮置灰。二、活动预估预计每种商品数万人参与活动开始后半分钟内,预计每种商品收到10W次交易请求,预计总TPS:20W/s活动开始半分钟后,预计绝大多数商品已售罄,剩下的商品仍支持秒杀,预计总TPS:2000/s三、系统现状系统可保持长期稳定运行的最大TPS:1000/s短时间「1分钟内」系统未拒绝服务的最高TPS:1500/s四、设计预原创 2021-01-30 20:00:12 · 301 阅读 · 1 评论 -
Multi Module Spring Boot集成测试使用JaCoCo生成测试覆盖率
一般的SpringBoot项目会由多Module组成,每个Module为不同的功能模块。项目启动时,多个Module提供不同的服务,共同支持了本项目所提供的服务。若采用启动SpringBoot的方式进行多Module集成测试,一般test case会放在SpringApplication类所在的Module中,该Module一般仅提供了服务的入口,并无太多实际业务功能「简单来说,业务代码都不在这个Module中」。本文探讨运行集成测试,对多Module测试覆盖率合并统计的方法。项目结构本文所述的项目具有原创 2020-08-22 12:23:24 · 1105 阅读 · 1 评论 -
「原理分析」Spring Boot启动时基于spring.factories自动读取远端Environment实现的原理源码分析
采用Spring标准的事件/监听器模型,通过Spring SPI的方式,在Spring Boot启动时,自动读取远端「远程服务器、本地硬盘等」Environment配置,方便在Spring Boot启动前,对配置进行灵活调整,增加灵活性,减少硬编码。本文先从原理进行分析,表明其可行性,下一篇文章再展示具体的代码实现。首先从SPI的基础开始讲起。1. 服务发现的基础:SPI注:此小节内容描述主要参考此文章 spring.factories在Spring Boot中有一种非常解耦的扩展机制:Spring原创 2020-07-26 01:12:12 · 402 阅读 · 0 评论 -
Spring Boot + MongoDB 应用的 Docker 化实践
本文旨在通过将一个具体的 Spring Boot + MongoDB 项目进行 Docker 化处理,从而对 Docker 的基本用法进行一次实践。该项目 Docker 化后,后端服务访问数据库正常,仍然可以打开后端服务托管的单页 Web 应用,总之项目运行状态符合预期。具体使用的项目见 这个 GitHub 仓库。学习 Docker 的基本原理、基本用法可以参考这本开源电子书《Docker —...原创 2018-06-05 14:26:17 · 584 阅读 · 0 评论 -
基于 Netty 的可插拔业务通信协议的实现「3」业务注册及实际工作流程
本文为该系列的第三篇文章,设计需求为:服务端程序和众多客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多。上一篇文章以一个具体的需求为例,探讨了指定的 Java 消息对象与其相应的二进制数据帧相互转换的方法。本文仍以该实例为例,探讨该自定义通信协议的具体工作流程,以及如何以注册的形式灵活插拔通信消息对象。1. 以注册的形式实现通信消息对象的统一管理通过该系列的第二篇文章...原创 2018-04-27 14:04:40 · 318 阅读 · 0 评论 -
基于 Netty 的可插拔业务通信协议的实现「2」特定业务消息对象的设计
本文为该系列的第二篇文章,设计需求为:服务端程序和众多客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多。上一篇文章详细描述了该通信协议的二进制数据帧格式以及基本 Java 消息类,假设通信双方「服务端、客户端」均由 Netty 框架构建而成,双方在程序内部使用 Java 消息对象,通信双方信息交互采用的是自定义二进制帧格式,本文通过一个具体实例,探讨指定的 Java 消息对象与其...原创 2018-03-29 23:48:57 · 257 阅读 · 0 评论 -
使用 Maven 构建 Java 项目
Maven 是基于项目对象模型「POM」,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。本文总结了 Maven 的基本用法。原创 2017-03-21 17:44:06 · 620 阅读 · 0 评论 -
基于 Netty 的自定义帧高可靠性读取方案
本文采用 Netty 这一最流行的 Java NIO 框架,作为 Java 服务器通信部分的基础框架,探索使用一个通道、一台服务器对多个客户端提供服务。完成客户端 - 服务器通信,需要基于 TCP 协议之上,自定义一套简单的通信协议,其中数据交换方式需要使用自定义帧。为实现以上方案,本文采用 Netty 框架实现 Java 服务器的通信部分。原创 2017-05-05 16:19:57 · 2049 阅读 · 0 评论 -
Netty 框架总结「ChannelHandler 及 EventLoop」
学习了一段时间的 Netty,将重点与学习心得总结如下,本文主要总结ChannelHandler 及 EventLoop 的知识点和基本用法,本文章节排序参照《Netty in Action》的章节排序。原创 2017-05-05 16:21:54 · 1264 阅读 · 0 评论 -
Maven 常用技巧总结
Maven 的常用技巧总结,包括设置 Java JDK 的版本为 JDK 1.8,构建生成可执行的 Jar,读取 resources 目录中的资源文件等。原创 2017-04-06 15:52:49 · 601 阅读 · 0 评论 -
JavaFX 8 下简化自定义控件的外部调用以及流式布局示例
本文探讨在 JavaFX 8 环境下实现自定义控件的相关方法,以及自定义控件在流式布局中的布置方式,由于自定义控件使用时需要同时引用布局文件和控制器类,较为繁琐,故也探讨了其简化方式。原创 2017-05-21 23:22:45 · 5183 阅读 · 1 评论 -
Maven 集成 JavaFX 8 以及「fx:root」问题探讨
本文探讨使用 Maven 构建集成 JavaFX 8 的可执行程序的方法,以及 `<fx:root>` 根节点问题。翻译 2017-05-22 13:12:33 · 3209 阅读 · 0 评论 -
基于 Netty 的帧调度策略,自行实现流量控制及可靠性通信
Java 服务器和硬件设备通信的过程中,众多的硬件设备可能数据帧处理能力较差,可靠性较差,所以在 Netty 模块中使用了帧调度算法。服务器大规模下发数据帧时,可进行有效的拥塞控制、超时重发,可有效提升集群设备的可靠性,降低集群设备的研发难度。原创 2017-07-19 17:21:38 · 4110 阅读 · 0 评论 -
基于 Netty 的可插拔业务通信协议的实现「1」协议描述及基本消息对象设计
开发工程中,有一个常见的需求:服务端程序和多个客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多,并且客户端的数量可能有数万个。为此,双方需要约定尽可能丰富、灵活的数据帧「数据包」协议,方便后续业务功能的设计。本文设计了一种通信协议,为压缩数据量,该协议的数据帧以二进制方式进行传输并识别,即其基本单位为字节,必要时将部分字节流手动转化为可读文本。通过设定功能位来实现丰富的通信消...原创 2018-02-28 16:37:12 · 367 阅读 · 0 评论 -
SLF4J 和 Logback 在 Maven 项目中的使用方法
本文介绍 SLF4J 和 Logback 在 Maven 项目中的用法,包括日志框架的依赖、使用,以及 XML 配置文件的引入。本文的精华内容翻译 Base22,文章来源见文末。原创 2017-04-17 22:47:57 · 14539 阅读 · 1 评论