自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雪中亮

GitHub: https://github.com/bitkylin 简书: http://www.jianshu.com/u/bd2e386a6ea8

  • 博客(40)
  • 收藏
  • 关注

原创 集成测试实战(1)理论基础

程序猿如何看待自测?为什么要关注测试?怎么进行测试?本文基于相关问题进行了总结,其中很多内容来自于极客时间专栏「程序员的测试课」。下一篇文章聚焦在集成测试的实践上。

2022-02-13 16:27:48 606

原创 Java代码中字符串拼接方式分析

本文研讨的字符串拼接方式为以下4种:“+”号、StringBuilder、StringJoiner、String#join,对比分析及探讨最佳实践。

2022-02-13 16:26:08 839

转载 动手实践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 235

原创 搭建基于 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 307

原创 仿照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 398 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 265 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 1003 1

原创 基于 Hexo + NexT + GitHub 的静态博客,2020 年 8 月升级过程记录

早在 2017 年,我基于 Hexo + NexT 搭建了 GitHub 托管的静态博客。到现在快 3 年了,发生了很多变化,比如 Hexo 脚手架升级了 2 个大版本「目前最新 5.0 版」,Node.js 也升级了多个大版本,静态博客的功能进行了很多增强,为了赶上时代的潮流,故需要对之前搭建的静态博客底层框架进行全方面的升级。本文记载了完整的升级过程。本文演示在 Mac 系统下的操作过程。首先展示升级后,主页最终效果:本次升级方案如下:使用最新版脚手架工具创建新的静态博客项目将文章、Next

2020-08-09 12:52:58 276

原创 「原理分析」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 372

原创 Ubuntu 下 Oh My Zsh 的最佳实践「安装及配置」

Oh My Zsh 是一款社区驱动的命令行工具,是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能,如:主题配置,插件机制,内置的便捷操作等,可以给我们一种全新的命令行使用体验。下文对 oh-my-zsh 的安装及配置方法进行总结,只总结最佳的实践。1. 安装 oh-my-zsh第一步:安装 zsh# 安装 zshsudo apt install zsh# 将z...

2018-06-14 02:44:51 2239 1

原创 Spring Boot + MongoDB 应用的 Docker 化实践

本文旨在通过将一个具体的 Spring Boot + MongoDB 项目进行 Docker 化处理,从而对 Docker 的基本用法进行一次实践。该项目 Docker 化后,后端服务访问数据库正常,仍然可以打开后端服务托管的单页 Web 应用,总之项目运行状态符合预期。具体使用的项目见 这个 GitHub 仓库。学习 Docker 的基本原理、基本用法可以参考这本开源电子书《Docker —...

2018-06-05 14:26:17 557

原创 基于 Netty 的可插拔业务通信协议的实现「3」业务注册及实际工作流程

本文为该系列的第三篇文章,设计需求为:服务端程序和众多客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多。上一篇文章以一个具体的需求为例,探讨了指定的 Java 消息对象与其相应的二进制数据帧相互转换的方法。本文仍以该实例为例,探讨该自定义通信协议的具体工作流程,以及如何以注册的形式灵活插拔通信消息对象。1. 以注册的形式实现通信消息对象的统一管理通过该系列的第二篇文章...

2018-04-27 14:04:40 220

原创 基于 Netty 的可插拔业务通信协议的实现「2」特定业务消息对象的设计

本文为该系列的第二篇文章,设计需求为:服务端程序和众多客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多。上一篇文章详细描述了该通信协议的二进制数据帧格式以及基本 Java 消息类,假设通信双方「服务端、客户端」均由 Netty 框架构建而成,双方在程序内部使用 Java 消息对象,通信双方信息交互采用的是自定义二进制帧格式,本文通过一个具体实例,探讨指定的 Java 消息对象与其...

2018-03-29 23:48:57 243

原创 基于 Netty 的可插拔业务通信协议的实现「1」协议描述及基本消息对象设计

开发工程中,有一个常见的需求:服务端程序和多个客户端程序通过 TCP 协议进行通信,通信双方需通信的消息种类众多,并且客户端的数量可能有数万个。为此,双方需要约定尽可能丰富、灵活的数据帧「数据包」协议,方便后续业务功能的设计。本文设计了一种通信协议,为压缩数据量,该协议的数据帧以二进制方式进行传输并识别,即其基本单位为字节,必要时将部分字节流手动转化为可读文本。通过设定功能位来实现丰富的通信消...

2018-02-28 16:37:12 341

原创 Windows 10 用于 Linux 子系统的一键构建、打包脚本「 Node、Gradle 项目」

最近正在开发一个 Java & Vue.js 全栈项目,该项目由以下几部分组成:Java 后端服务器、基于 Vue.js 的单页应用、基于 JavaFX 的 GUI 客户端以及其他辅助工具等。如果对项目中的某个子模块进行修改,需要对其手动编译、移动,再对父模块进行编译,操作繁琐,本文探讨通过 Windows 10 的 Linux 子系统运行 Shell 脚本简化上述操作并进行扩展。

2018-02-22 21:39:41 942

原创 使用 Linux 子系统部署 Node、Gradle 项目的构建工具

最近的一个项目,由三个 Gradle「Java」工程以及一个 Node「Vue.js」工程组成。为了使用 Linux 下的各种工具提升效率,本文探讨 Linux 子系统的使用及在该系统下,Java、Node.js、Gradle 等工具的配置。并在后一篇文章中,探讨该项目的一键构建、打包脚本,从而根本上提升开发效率。1. Windows 10 秋季创意者更新下的 Linux 子系统我目前...

2018-02-17 09:46:41 294

原创 基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计

本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果。并且基于 Vue.js 2.0 全家桶。具体效果如下图所示:最终效果可以翻到文章最后观看。1. 背景视频 Web 页面的既有实现方式国外有一个很好的网站「Coverr」,提供了完善的教

2018-01-17 00:53:12 23452 16

原创 经典排序算法及其 Java 实现

网上有很多排序算法的总结,不过有很多缺点,比如有些根本就是错的,无法通过测试用例,有些过于冗长。所以我总结了一套短小精悍的 Java 实现,经测试,该套实现可通过牛客网的关于此的所有测试用例。1. 冒泡排序public class BubbleSort implements KySort { public void kySort(int[] a, int size) {

2018-01-17 00:47:47 186

原创 基于 Netty 的帧调度策略,自行实现流量控制及可靠性通信

Java 服务器和硬件设备通信的过程中,众多的硬件设备可能数据帧处理能力较差,可靠性较差,所以在 Netty 模块中使用了帧调度算法。服务器大规模下发数据帧时,可进行有效的拥塞控制、超时重发,可有效提升集群设备的可靠性,降低集群设备的研发难度。

2017-07-19 17:21:38 4026

翻译 Maven 集成 JavaFX 8 以及「fx:root」问题探讨

本文探讨使用 Maven 构建集成 JavaFX 8 的可执行程序的方法,以及 `<fx:root>` 根节点问题。

2017-05-22 13:12:33 3150

原创 JavaFX 8 下简化自定义控件的外部调用以及流式布局示例

本文探讨在 JavaFX 8 环境下实现自定义控件的相关方法,以及自定义控件在流式布局中的布置方式,由于自定义控件使用时需要同时引用布局文件和控制器类,较为繁琐,故也探讨了其简化方式。

2017-05-21 23:22:45 5119 1

原创 Netty 框架总结「ChannelHandler 及 EventLoop」

学习了一段时间的 Netty,将重点与学习心得总结如下,本文主要总结ChannelHandler 及 EventLoop 的知识点和基本用法,本文章节排序参照《Netty in Action》的章节排序。

2017-05-05 16:21:54 1232

原创 基于 Netty 的自定义帧高可靠性读取方案

本文采用 Netty 这一最流行的 Java NIO 框架,作为 Java 服务器通信部分的基础框架,探索使用一个通道、一台服务器对多个客户端提供服务。完成客户端 - 服务器通信,需要基于 TCP 协议之上,自定义一套简单的通信协议,其中数据交换方式需要使用自定义帧。为实现以上方案,本文采用 Netty 框架实现 Java 服务器的通信部分。

2017-05-05 16:19:57 1991

原创 加速访问基于 Github Pages 和 Hexo 的博客

本文探讨如何加速访问基于 Github Pages 和 Hexo 的博客。大家搭建博客广泛采用了 Hexo + NexT + Github Pages 的方式。众所周知,这种类型的博客未经优化,打开速度比较慢,本文探讨优化的方法,包括修改依赖的字体资源,更换博客托管平台等方式,加速博客的访问。

2017-04-19 22:24:48 8157 1

原创 SLF4J 和 Logback 在 Maven 项目中的使用方法

本文介绍 SLF4J 和 Logback 在 Maven 项目中的用法,包括日志框架的依赖、使用,以及 XML 配置文件的引入。本文的精华内容翻译 Base22,文章来源见文末。

2017-04-17 22:47:57 14427 1

原创 Maven 常用技巧总结

Maven 的常用技巧总结,包括设置 Java JDK 的版本为 JDK 1.8,构建生成可执行的 Jar,读取 resources 目录中的资源文件等。

2017-04-06 15:52:49 568

原创 为你的简书和 GitHub 设定个性域名

为你的简书和 GitHub 设定个性的二级域名。

2017-03-26 11:10:35 4793 3

原创 使用 Maven 构建 Java 项目

Maven 是基于项目对象模型「POM」,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。本文总结了 Maven 的基本用法。

2017-03-21 17:44:06 589

原创 关于 OkHttp 依赖冲突问题的解决过程

OkHttp 是一个流行的开源网络请求库。许多第三方库的底层都是使用 OkHttp 实现网络请求,所以 OkHttp 相关的依赖冲突问题就变得很难避免,下文是我所遇到的一次关于 OkHttp 的依赖冲突问题,通过对Gradle工具及Android Studio的灵活使用,解决了此问题。

2016-11-18 16:03:22 24320 3

原创 基于 LNMP 搭建个人网站的填坑之旅

本文讨论使用 LNMP 安装包构建网站底层服务后,包括域名解析,MySQL 的管理等的一系列填坑历程。

2016-11-16 10:45:24 10720

原创 基于 WPF 的酷炫 GUI 窗口的简易实现

本文要实现基于WPF的酷炫GUI窗口,力图实现一个真正可用且实用的GUI窗口。

2016-11-07 11:42:13 10174

原创 荣耀v8 真机调试时不显示 Logcat 日志的解决办法

荣耀V8真机调试时不显示 Logcat 日志的解决方法

2016-11-06 13:03:10 5552 4

原创 WPF 下的自定义控件以及 Grid 中控件的自适应

本文主要总结使用 C# 及 .NET 在 WPF 框架下,自定义控件的绘制以及窗体中控件的自适应。

2016-10-12 16:39:29 27095

原创 用于 C# 的 SQL 基本语法总结

本文目前用于 Visual Studio 2015 平台的 SQLite3 , 其他用法以后总结。

2016-09-25 21:48:40 1458

原创 MySQL 数据库的自动备份操作

MySQL 数据库中,对指定表实现按天自动备份的功能是比较有用的。

2016-09-12 20:26:23 434

原创 Android Studio 第三方库的导入「以 Volley 为例」

传统风格以及 Gradle 的第三方开源库,导入 Android Studio 工程的方法总结。

2016-06-11 15:17:55 4364

原创 Qt 程序在 Windows 下的发布

本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法。

2016-06-04 15:01:05 4401 4

转载 电子地图坐标系统研究整理

电子地图坐标系统研究整理总汇。

2016-04-15 15:49:32 1111

转载 识别独立安卓设备

通过生成唯一的识别码,识别独立的安卓手机的几种方法

2016-04-15 15:46:25 521

原创 Sublime Text 3 基本配置教程

这是本人总结的Sublime Text 3的基本配置技巧,作为备用。

2016-04-15 15:44:30 1309

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除