自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

周先生丶的博客

学一学,记一记

  • 博客(137)
  • 资源 (14)
  • 收藏
  • 关注

原创 自己动手写任务调度平台

本文项目Github地址:https://github.com/zhouhuanghua/z-job什么是任务调度平台呢?暂时不做解释,先来看一下定时器的发展历史吧!首先,new Thread + while (true) + Thread.sleep的方式,虽然很low但是起码能够实现对吧——这种方式的问题是过于占用资源,定时任务一多就暴露出来了。然后,就是利用一些框架,比如JDK提...

2019-07-11 18:16:35 1982

原创 自己动手写MyBatis框架

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。至于怎么使用,源码分析就不讲了,来直接实...

2019-01-26 16:31:06 1683 1

原创 自己动手写RPC框架

在上一篇博客中,介绍了RPC的主要概念和实现原理,然后基于TCP协议实现了一个非常简单的RPC小案例(点此回顾)。现在,自我挑战一下,动手写一个RPC框架。高能预警:本文涉及到的知识点如下Spring Boot2:起步依赖、自动配置,让应用开发变得简单 Spring的Java Bean配置,条件注解:灵活控制注入 基于JDK接口的动态代理(了解一下?):发起远程调用对服务消费者来说...

2019-01-13 02:08:02 3859 18

原创 利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性

作为一名专门写bug的Java程序猿,相信大家都会遇到过这样的问题:项目的业务逻辑很复杂,而且还经常变化,今天的一个办理条件是小于5,明天就变成了大于10或者条件作废。这就很头疼了,里面的数字可以抽取到配置文件,但是大于和小于呢?条件作废呢?对于业务规则的复杂性,我们可以使用一些规则引擎来解决代码可读性差的问题。市面上也有不少的规则引擎框架,开源的不开源的,收费的不收费的,我们这里推荐使用的是...

2018-12-19 17:05:43 16124 14

原创 Kafka整合WebFlux

1、引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency> <groupId>io.projectreactor.kafka</groupId>

2021-07-22 01:10:35 1015

原创 Java线上问题排查

1、CPU使用率高模拟代码 public static void main(String[] args) { while (true) { // run } }2、内存占用高3、内存溢出

2021-06-12 23:20:58 1488 2

原创 模块化开发---实现模块的动态加载与卸载

在工作中,由于我是主要负责直播APP的运营活动开发,这些活动代码有两大特性活动周期短,通常只是一个节日、一个星期、十天、一个月等,所以导致代码用于运行的时间短。

2021-05-30 17:13:25 1404 4

原创 编程题:随机抢红包---面向对象版

太晚了,直接放代码吧!1、红包池工厂用于创建一个红包池,保证其正确性和完整性。package red_bag;/** * 红包池工厂 */public class RedBagPoolFactory { /** * 创建红包池 * * @param number 个数 * @param totalMoney 总共金钱(分) * @param maxMoney 单个最大金钱(分) * @param minMoney

2021-05-30 00:50:17 703

原创 Sharding-JDBC实现分库分表和读写分离

在遇到数据量大、性能瓶颈的时候,分库分表和读写分离能够很好解决此类问题。分库分表包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式。...

2021-05-29 13:42:23 921 1

原创 DDD随便整理

一、DPDomain Primitive:Domain Primitive是一个在特定领域里,拥有精准定义的、可自我验证的、拥有行为的Value Object。DP是一个传统意义上的Value Object,拥有Immutable的特性 DP是一个完整的概念整体,拥有精准定义 DP使用业务域中的原生语言 DP可以是业务域的最小组成部分、也可以构建复杂组合在DDD里,DP可以说是一切模型、方法、架构的基础,而就像Integer、String一样,DP又是无所不在的。可以带来的好处:接口的清

2021-05-16 17:10:37 1026 2

原创 Java Instrument实践应用:运行中修改程序的Class

Provides services that allow Java programming language agents to instrument programs running on the JVM. The mechanism for instrumentation is modification of the byte-codes of methods.【用于允许Java编程语言代理检测运行在JVM上的程序提供服务。检测的机制是修改方法的字节码。】这是java.lang.instrum...

2021-04-24 04:21:32 961 1

原创 Filebeat+Elasticsearch+Kibana进阶:格式化日志

“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。Logstash虽然功能强大,但是很笨重。Filebeat是轻量型的单一功能数据采集器,占用资源更少

2021-04-18 03:40:38 2350

原创 总结一下线程池

一、线程池的优点和处理流程1、优点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。2、处理流程二、扩展知识1、corePoolSize和maximumPoolSize可以在创建之后使用setCorePoolSize()、setMaximumPoolSize(

2021-02-09 16:45:21 384

原创 实现优先级队列的线程池

回顾一下线程池的优点和原理优点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。原理在实际的开发中,会将各种不同的异步任务提交到线程池执行,它们有轻重缓急。如果任务量少,一来就有空闲线程处理,哦那没事了。如果任务量多,我们希望任务队列根据任务的优先级有序存

2021-02-08 16:28:21 3340 1

原创 编程题:斐波那契数列(兔子繁衍问题)---面向对象版

最简单的版本:每一项等于前两项之和,这个用递归或者循环就可以解决。这里我们延伸出一个生活中兔子繁衍的实际案例:一开始有 A 只兔子,每只兔子 B 个月后可以生出 C 只小兔子,兔子在第 D 个月之后会死亡。如图展示了A=1,B=2,C=2,D=3的情况下兔子繁衍过程这里我们使用面向对象的思维解决????首先是建模:第一个我们定义兔子窝,它有窝里兔子、兔子寿命、兔子繁殖年龄、兔子每次繁殖数量4个属性,还有增加兔子、移除兔子、获取N月后兔子数量3个行为。第二个我们定义兔子,它有年龄1

2021-01-15 16:55:54 2176

原创 编程题:约瑟夫问题---面向对象版

/** * 约瑟夫问题是个有名的问题: * N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。 */public class Josephus { public static void main(String[] args) { Game.create(10, 3, 1).start(); } /** * 游戏 */ static class.

2021-01-15 00:10:26 1129

原创 编程题:猴子分桃---面向对象版

题目猴子分桃:3只猴子抢着分100只桃子,每只抢到的猴子分去剩余桃子的一半。使用多线程模拟这一过程。分析面向对象就是抽取模型:第一个是猴子很简单,它有桃子数量的属性和抢桃的行为;第二个,表面上是桃子,但其实是一堆桃子,这里我们建模为桃篮子,它有桃子数量的属性和减少一半的行为。编码首先定义猴子。为了方便跟踪抢的过程我们加了一个名称属性,并且重写toString方法。在抢桃行为里我们把桃篮子传递进去,然后不断地拿走一半加到自己的数量里,直到无桃可抢。用多线程模拟,那就让猴

2021-01-09 16:08:09 1377 4

原创 责任链模式计算一个过去时间在xxx年/月/周/天/时/分/秒之前

有时候,需要计算一个过去时间在xxx年/月/周/天/时/分/秒之前。比如我们经常看到的文章评论时间、动态发表时间、代码提交时间等,如下怎么实现呢?逻辑是这样的:1、判断时间差是否超过1年,是的话直接计算xxx年前,否则往下走;2、判断时间差是否超过1个月,是的话直接计算xxx月前,否则往下走;3、判断时间差是否超过1个星期,是的话直接计算xxx周前,否则往下走;4、判断时间差是否超过1天,是的话直接计算xxx天前,否则往下走;5、判断时间差是否超过1小时,是的话直接计算xxx小时

2021-01-07 10:52:58 539 1

原创 Java程序将视频转化为动图

1、引入依赖 <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId>

2020-11-03 12:20:30 1985 8

原创 使用建造者模式书写Hadoop MapReduce作业代码

Hadoop的MapReduce作业提交代码,都是相对固定的一段八股文,如下现在,我们就对Job对象的构建封装一个工厂类,以便简化书写。非空的属性放在Builder的构造函数里。/** * MapReduce Job 构造器 * * @author Zhou Huanghua */public class MapRedJobFactory { private MapRedJobFactory() { throw new UnsupportedOperatio

2020-09-22 21:41:34 453

原创 Redis杂谈

Redis,K-V数据库,属于NoSQL中的一员。一、Redis的Value有哪几种类型?String set(String key, String value)String set(String key, String value, String nxxx, String expx, long time)String get(String key)Long exists(String... keys)Boolean exists(String key)Long del(String..

2020-05-27 00:16:48 422

原创 如何搭建高性能、高可用、可伸缩、可扩展的网站

本文只是对所读书籍做一些总结,不代表博主的实战经验,#_#一、高性能也叫高并发,主要指标有响应时间、并发数、吞吐量等。1、Web前端方面浏览器:缓存、压缩、合并请求、减少Cookie传输、延迟加载JSCDN、反向代理:缓存静态资源2、应用服务方面使用缓存:本地缓存、分布式缓存、多级缓存尽量异步:MQ、异步方法搭建集群:横向扩展优化编码:多线程、算法、数据结构、对象复用(池化)、GC3、数据库字段优化:类型、建立索引、冗余走索引:执行计划、避免失效缓存

2020-05-26 03:58:35 705

原创 Java的单继承多实现问题

最近突然想到一个老生常谈的问题:为什么Java的类不支持多继承(接口支持的哈)?抛开高司令不想搞得太复杂的说法,大概答案就是若子类继承的多个父类拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。 若子类继承的多个父类拥有相同的方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。那么一个类实现了多个接口,就没有这个问题了吗?在Java 8之前,很容易解释接口定义的变量都是常量,编译时就确定调用关系,使用接口名可

2020-05-10 15:50:35 1172

原创 Redis的数据结构操作命令及应用场景

目录 键:key 字符串:String 哈希:Hash 列表:List 集合:Set 有序集合:sorted set 键:key 命令 说明 Jedis方法 Redisson方法 DEL key key 存在时删除 key del DUMP key 序列化给定 key ,并返回被序列化的值 ...

2020-03-28 18:26:36 205

原创 简易小爬虫项目

最近疏于学习不知道写什么了,干脆就把去年跟同学打算做的一个招聘信息小程序半成品

2020-03-14 16:08:53 825

原创 Java使用Jsoup和Selenium抓取西瓜小视频

最近在家里无聊每天刷头条,看到一个很可爱的小姐姐,突然蹦出一个主意,就是想把它这些视频全部搞下来存到本地。网上搜了一下,发现这些视频其实是来自西瓜视频,根据用户名搜索就找到了。刚好会一点爬虫,这下就好办了。跟Python的requests和bs4一样,Java也有HttpClient和Jsoup分别用于发送请求和解析网页。因为Jsoup同时也具备发送请求的功能,并且本例也不涉及复杂的请求,...

2020-02-04 23:40:08 4050 2

原创 使用POI导入导出大数据量的Excel

昨天,产品提了一个紧急需求,让把十一月份已发货的商品数据导出来,写好SQL发给DBA执行之后,得到了三十多个100W数据的Excel文件。有一个属性是以JSON格式存在表中一个字段里面的,需要加工Excel文件将其单独取出来(如图的第四列)。处理程序也在数据导出的过程中写好了,大概思路就是读入Excel构建Workbook对象,然后对指定列的值进行转换,最后写回原文件。想法很奈斯,结果很悲...

2020-01-11 19:09:31 3268

原创 好玩的编译时注解处理工具——APT

大家对Java中的注解(Annotation)应该都不陌生吧,JDK1.5就引进来了,它本质上只是一种元数据,和配置文件一样。利用反射在运行时解析处理能够实现各种灵活强大的功能,比如Spring就将其作用发挥得淋漓尽致。至于用法,这里就不说了,我的其它文章里面很多地方有用到过,可以参考一下。一、运行时注解与编译时注解我们看到的大部分注解,它们都是在代码运行时才使用的,所以一般定义成这样...

2020-01-05 19:21:21 1623 3

原创 简单聊一下RabbitMQ

RabbitMQ凭借着其异步和解耦的两大核心特性在分布式系统应用中大放异彩。虽然在平时工作中经常用到,但是却很少去深入研究。这两天看了一下《RabbitMQ实战》,总结了平时不太注意的几个点。1、ErlangRabbitMQ是用Erlang语言开发的,听说Erlang在处理通信和并发时很是擅长。2、AMQPRabbitMQ是一个实现了AMQP(Advanced Message Qu...

2019-12-14 19:20:35 268

原创 Java中的Type家族简单介绍

之前用反射的时候,基本都是Class。最近弄生成接口文档工具的时候,又接触了一下ParameterizedType,偶然的机会发现两者居然有联系:顶级的接口都是Type。于是就统一整理下Type家族的东西。Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。原始类型:Class类的实例表示正在运行的Java应用程序中的类和接口。枚...

2019-12-10 22:45:28 215 3

转载 字节码操纵技术探秘

大家可能已经非常熟悉下面的处理流程:将一个“.java”文件输入到 Java 编译器中(可能会使用 javac,也可能像 ANT、Maven 或 Gradle 这样的构建工具),编译器对其进行分析,最终生成一个或多个“.class”文件。图 1:什么是 Java 字节码?如果从命令行中运行构建,并启用 verbose 的话,我们能够看到解析文件直到生成“.class”文件这一过程的输出...

2019-11-08 16:32:47 427

原创 布隆过滤器原理解析

在撸码的时候,经常要判断一个元素是否已经存在。常用的做法是,把已经存在的元素全部存储到一个集合里,然后新的元素查一下看它是否在集合里来确定是否已经存在。这个集合的数据结构,一般我们会采用HashMap,它可以在O(1)的时间复杂度内返回结果,效率奇高。但是会带来一个问题,就是每条数据都完整地存储在集合里,量大的时候,占据的内存空间是个问题。如果你刚好遇到这方面的问题,那么可以考虑一下布隆过滤器...

2019-11-07 23:20:38 633

原创 SpringBoot+Mybatis配置多数据源并且实现事务一致性

最近博客写得少,不知道怎么说开场白了。呃,本文一共分三部分:SpringBoot+Mybatis环境搭建、两种方式配置多数据源、两种方式实现跨数据源事务,您可以直接跳到喜欢的部分,不过按顺序看完也不会花很多时间。。。一、搭建SpringBoot+Mybatis框架环境看标题就知道,这部分不是重点,所以简单说一下(如果你是小白那对不起了~)。1、引入依赖Mybatis整合包和jdbc...

2019-10-28 00:43:54 15766 10

原创 Java获取一个类继承的父类或者实现的接口的泛型参数

泛型的作用就不多介绍了,如果你想具备架构设计能力,那么熟练使用泛型是必不可少的。不多说了,先定义泛型父类和泛型接口:package cn.zhh;public class Parent<T1, T2> {}package cn.zhh;public interface Interface<T> {}然后,定义一个子类,分别继承和实现以上的父类...

2019-10-24 22:58:56 3289

原创 elasticsearch-head 5连接elasticsearch 6.x无法显示数据的解决办法

在docker安装了elasticsearch-head:5和elasticsearch:6.3.2(相关博客点这里)之后,打开界面连接es时发现数据无法展示。于是网上查了下原因,说是elasticsearch 6增加了请求头严格校验的原因,并且返回结果是{ "error" : "Content-Type header [application/x-www-form-urlencoded]...

2019-08-17 10:45:32 2240 6

原创 Spring Data Jpa将实体类相同属性抽取到基类导致找不到主键的解决方法

有时候我们在使用Spring Data Jpa的时候,会将实体类的一些相同属性抽取成一个公用的基类,这样可以减少代码的重复。但是,一些基本的属性还好,但是将主键也抽取的话,会遇到这样子一个问题:Caused by: org.hibernate.AnnotationException: No identifier specified for entity:XXXXXX说没有指定主键,但是分明...

2019-07-31 12:50:45 1376 1

原创 Docker安装ES,以及界面、中文分词器的插件

前提条件:确保你的机器上面已经安装了Docker和Java。一、安装ElasticSearch1、下载镜像docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2用docker images查看已下载的镜像(可选)对镜像命名:docker tag IMAGEID(镜像id) REPOSITORY:TAG(...

2019-07-24 23:48:55 2533

原创 使用Docker搭建Hadoop单机版

其实,直接安装也很简单,官方说明文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html。使用Docker安装只是为了不想污染我的云服务器...首先确保你的机器关了防火墙(或者安装完后开启指定端口的白名单),然后就是已经有了Docker,还没安装的可以参考我的另一篇博...

2019-07-21 01:46:03 5508

原创 使用Selenium实现直播平台的自动刷屏

本文项目Github地址:https://github.com/zhouhuanghua/auto-flood-screen最近,电竞圈LOL届最大的瓜非"蓝公主"莫属。本来,我也只是一名吃瓜群众,感觉都无所谓。但是,后面Baolan的亲妈粉闪现开团:嘲讽皇族官宣香锅退役是蹭热度,抢走了宝蓝生日的风头。这就不能忍了,作为RNG的忠实铁粉,而且还是香锅退役这么隆重的事情。怎么办呢?只能去最多人可...

2019-07-19 21:56:42 2833

原创 解密JUC——构建锁和同步器的AQS

AQS,本名:AbstractQueuedSynchronizer,是Java 5引入的一个并发工具类。它提供了一个基于FIFO(先进先出)队列,可以用于构建锁或者其他相关同步装置的基础框架。它的名字翻译为抽象队列同步器,可以分为三个词:抽象、队列、同步器。正好不知道怎么开始,那么现在我们就以名字的三个词作为切入点。但是为了逻辑讲得清晰,我调了一下顺序:同步器->抽象->队...

2019-07-02 23:58:04 357

自己动手写任务调度平台项目源代码

自己动手写任务调度平台项目源代码,更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/95396253

2019-07-11

根据数据库表自动生成实体类的源代码

用一个根据数据库表自动生成实体类代码的案例讲解了代码生成器的核心思路,相关博客地址:https://blog.csdn.net/qq_31142553/article/details/93673384。

2019-06-26

Apollo配置中心客户端使用案例源码

Apollo配置中心客户端使用案例源码。更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/87769239

2019-02-24

自己动手写MyBatis框架项目源代码

自己动手写基于Spring Boot的注解版MyBatis框架项目源代码,更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/86655951

2019-01-26

自己动手写SpringMVC框架项目源代码

自己动手写SpringMVC框架项目源代码,更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/86582066

2019-01-25

利用Aspect/Javassist/动态代理/Lombok等方式省略Controller的参数校验结果处理代码

利用Aspect/Javassist/动态代理/Lombok等方式省略Controller的参数校验结果处理代码,更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/86547201

2019-01-19

自己动手写基于动态代理,使用ZooKeeper作为注册中心,以Netty进行网络通信的RPC框架

自己动手写基于动态代理,使用ZooKeeper作为注册中心,以Netty进行网络通信的RPC框架。更多详情请查看相关博客:https://blog.csdn.net/qq_31142553/article/details/86316654

2019-01-13

NIO相关代码和文档资料

Java NIO相关代码和文档资料,详细信息请参考博客文章:https://mp.csdn.net/postedit/85925718

2019-01-06

dubbo-admin的war包和zookeeper的安装压缩包

包含dubbo-admin的war包、zookeeper的安装压缩包,相关博客:https://mp.csdn.net/postedit/85333379

2019-01-02

利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性的项目源码

利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性的项目源码,具体详情请查看相关博客https://blog.csdn.net/qq_31142553/article/details/85013989

2018-12-19

借鉴p6spy,实现自己的SQL执行监控器项目源代码

借鉴p6spy开源框架部分源码,实现自己的SQL执行控制器。详情请查看相关博文:https://blog.csdn.net/qq_31142553/article/details/84405154

2018-11-25

Spring Advice插件平台开发项目源代码

Spring Advice插件平台开发项目源代码,具体项目详情请看https://blog.csdn.net/qq_31142553/article/details/81298171

2018-08-05

自定义maven插件:自动生成API的word文档源代码

自己实现的自定义maven插件:可以根据配置的接口类和参数类,生成对应的word版本的API文档。还可以自定义自己的模板文件。

2018-07-30

Maven插件源码:根据库表生成实体类&根据实体类生成库表

自定义Maven插件:根据配置的数据库信息,生成对应的Java实体类文件,并自动生成备注、长度、是否为空等的doc注释。也可以根据已有的实体类,在数据库生成对应的库表。

2018-07-28

空空如也

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

TA关注的人

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