自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JAVA入门中

继续前行

  • 博客(211)
  • 资源 (6)
  • 收藏
  • 关注

原创 CompletableFuture任务流水线工具

CompletableFuture是JDK8+开始,自携带的一款并发控制工具,这个工具可以支持设计人员自定义编排多个任务间的执行关系和执行顺序。为了降低多任务编排的开发门槛,减少代码维护工作量,Java为这种需要编排多个任务执行关系、执行顺序的场景准备了CompletableFuture并发控制工具,所以CompletableFuture工具也可以称为任务流水线控制工具。

2024-07-21 20:49:55 700

原创 软件设计不是CRUD(24):系统耦合性变化对性能的影响以及优化措施

本节内容,我们试图以一个示例场景进行切入,为读者讲解基于业务抽象的设计思想进行的解耦设计时,为什么会对系统的既有性能产生影响,这些对性能的影响又可以通过哪些常规手段进行补偿。

2024-07-15 08:53:32 2192 2

原创 软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码

本文通过一个可以同时兼容多种型号测速雷达的数据采集过程,介绍如何在数据处理系统中应用业务抽象的设计思想。本文选择Apache Flink作为实战案例的落地,会假定读者已经对Apache Flink有了一个大致了解,并能在Flink上独立完成一些数据处理脚本的开发工作。

2024-06-18 22:27:50 2985

原创 软件设计不是CRUD(22):在流式数据处理系统中进行业务抽象落地——设计思考

本文通过一个可以同时兼容多种型号测速雷达的数据采集过程,介绍如何在数据处理系统中应用业务抽象的设计思想。本文选择Apache Flink作为实战案例的落地,会假定读者已经对Apache Flink有了一个大致了解,并能在Flink上独立完成一些数据处理脚本的开发工作。

2024-06-18 22:06:17 1442

原创 软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析

本文主要介绍如何在数据处理系统中应用业务抽象的设计思想。目前业界流行的数据处理方式是流式处理,主流的流式处理引擎有Apache Spark,Apache Flink等等。本文选择Apache Flink作为实战案例的落地。由于本文主要是讲解设计思想和流式处理引擎相结合的方法,所以本文不会讲解如何使用Apache Flink,也不会讲解Apache Flink的脚本语法。本文会假定读者已经对Apache Flink有了一个大致了解,并能在Flink上独立完成一些数据处理脚本的开发工作。

2024-05-31 15:50:20 1370

原创 InfluxDB时序数据库基本使用介绍

InfluxDB就是一种时序数据库,除此之外目前业界流行的时序数据库还有Kdb、TDengine、Prometheus(本身内置了一个时序数据库)、Victoriametrics(另一个推荐的时序数据库)。InfluxDB由InfluxData公司开发,使用Go编程语言编写,适用于存储和检索操作监控、应用指标、物联网传感器数据和实时分析等领域的时间序列数据。它的数据模型基于时间序列,其中时间戳作为索引,不支持对过去数据的修改,因此特别适合。

2024-07-01 20:19:13 988

原创 Google Guice超轻量级依赖注入容器

Google Guice是Goolge开源的一款超轻量级依赖注入容器,超轻量的特点主要体现在:可与其它依赖注入容器混合使用,例如和Spring/Spring Boot的IOC容器混合使用;不需要任何配置信息,只需要引入几个有限的依赖包即可以使用;使用简单,只需要掌握几个有限的注释就可以使用;相对更重的依赖注入容器,Google Guice运行速度更快,消耗更少的系统资源。

2024-06-06 20:33:16 741

原创 软件设计不是CRUD(20):像搭积木一样搭建应用系统(下)——微服务化系统的搭建

之前几篇文章,我们讨论的都是单体应用系统如何进行模块化设计,最多也就是集群化在集群环境中工作的单体应用系统(实际上单体应用是集群化部署,还是单节点部署,都不影响其设计过程)。但是如今应用系统的建设环境,相当一部分是在服务化场景下进行的。也就是说建设的应用系统,实际上是多个新建的和已有的应用系统共同构成的一个系统平台,并联合对外提供服务。那么这样的服务化的、平台化的系统,是否也适用基于业务抽象的建设方式呢?

2024-05-16 21:54:58 4594

原创 软件设计不是CRUD(19):像搭积木一样搭建应用系统(中)——微服务化系统搭建过程存在的问题

之前几篇文章,我们讨论的都是单体应用系统如何进行模块化设计,最多也就是集群化在集群环境中工作的单体应用系统(实际上单体应用是集群化部署,还是单节点部署,都不影响其设计过程)。但是如今应用系统的建设环境,相当一部分是在服务化场景下进行的。也就是说建设的应用系统,实际上是多个新建的和已有的应用系统共同构成的一个系统平台,并联合对外提供服务。那么这样的服务化的、平台化的系统,是否也适用基于业务抽象的建设方式呢?

2024-05-16 21:52:24 1104

原创 VFS-FUSE用户态文件系统设计说明

针对文件系统操作的特异性需求,可以用过操作系统内核中提供的一种基于用户态的文件系统开发接口,由应用程序开发人员自行实现一个由上层应用系统支持的文件系统。这个统一的用户态文件系统接口就是FUSE。本文主要介绍FUSE编程的基础知识。

2024-04-28 08:48:48 4145

原创 软件设计不是CRUD(18):像搭积木一样搭建应用系统(上)——单个应用系统的搭建过程

之前的文章本专题花了大量文字篇幅,介绍如何基于业务抽象的设计方式完成应用系统各个功能模块的设计工作。而之所以进行这样的功能模块设计无非是希望这些功能模块在具体的项目实施过程中,能够按照当时的需求快速的、简易的、稳定的、最大可能节约开发成本的形成可用的应用系统。接着,如果有必要,这些系统能够在更高的构建层面,共同形成服务平台。那么从本篇文章开始,我们就来一起讨论一下,功能模块如何以“积木搭建”的方式形成符合特定需求的系统,以及这些系统在有必要的时候,如何形成服务平台的问题。

2024-04-15 23:00:01 1317

原创 软件设计不是CRUD(17):低耦合模块设计理论——总结

本文将已经介绍的低耦合设计理论梳理成一张思维导图,便于各位读者下载浏览。感兴趣但未阅读VIP文章的读者,可以解锁相关详细内容。

2024-04-03 16:00:00 3142

原创 软件设计不是CRUD(16):低耦合模块设计理论——行为抽象与设计模式(下)

本节内容我们主要讨论整个控制逻辑串联多个业务控制点的行为抽象设计落地方式,也就是整个控制逻辑的行为抽象落地方式。为了便于讨论能够由浅入深,能够对问题具象化,本节我们还是借鉴上一节的讨论方式:既是列出归纳后的可能场景,并从最简单的场景开始进行介绍。

2024-03-29 15:55:09 921

原创 软件设计不是CRUD(15):低耦合模块设计理论——行为抽象与设计模式(中)

本节内容我们主要讨论整个控制逻辑串联多个业务控制点的行为抽象设计落地方式,也就是整个控制逻辑的行为抽象落地方式。为了便于讨论能够由浅入深,能够对问题具象化,本节我们还是借鉴上一节的讨论方式:既是列出归纳后的可能场景,并从最简单的场景开始进行介绍。

2024-03-25 09:12:25 4248

原创 软件设计不是CRUD(14):低耦合模块设计理论——行为抽象与设计模式(上)

行为抽象,既是基于已提取的模块业务维度、模块分层和模型,明确模块中的各个数据变化场景的过程;也是为每个数据变化场景归纳涉及的业务维度,最终分析出控制逻辑,以及控制逻辑和业务逻辑的交互设计方案的过程。

2024-03-11 09:31:09 4300 1

原创 软件设计不是CRUD(13):低耦合模块设计理论——业务抽象:抽象模型的操作

进行模型抽象是基于业务抽象的设计思想,从原始需求到模块设计落地的第三个重要步骤。进行模型抽象的工作本质就是确认“怎样最小信息量模型就是可以定义业务的模型”,其工作目标是依据已经分析得到的模块业务维度和模块分层规划,确定业务维度应归属的业务主体,以及业务维度在业务主体的体现方式。

2024-02-22 15:19:37 1096

原创 软件设计不是CRUD(12):低耦合模块设计理论——业务抽象:模块分层操作

对系统中的模块分层原则和分层规划方式进行了详细描述,并使用了一个仓储管理场景演示了如何进行模块分层规划。完成了模块分层规划后,我们就可以基于前期已经提取的业务维度,以及这个刚完成的模块分层规划,进行模型抽象工作和行为抽象工作了。实际上本文在讲解分层规划方式时,已经讲解了一些模型和行为的设计要点,例如讲解了业务主体、业务主体的关联信息以及业务主体和行为的对应方式。

2024-02-22 15:14:45 4606

原创 软件设计不是CRUD(11):低耦合模块设计理论——业务抽象:规划模块分层

确认模块分层,并不是直接将需求按照用户描述的业务调用关系进行上下层确认,而是依据抽取的业务维度的复杂程度、变化风险程度进行模块分层。为了尽可能减少需求变化给整个系统带来的设计变化风险,尽可能减少需求变化带来的涟漪效果,变化风险程度越高的模块应该越位于模块分层的更上层。那些没有业务性的工具类功能模块或者业务关联性很小的功能模块,应该越位于模块分层的更下层。进行模块分层设计时,应该保证所有模块的依赖关系都是单向的,杜绝循环依赖的出现。此外,还应该尽可能减少模块的间接依赖长度。

2024-01-30 15:43:44 10316

原创 Apache-Common-Pool2中对象池的使用方式

Apache Common-Pool2 组件最重要的功能,就是向开发人员提供一个稳定的、高性能的对象池。我们在实际开发过程中最常用、最典型的对象池就是数据库连接池。对象池可以在数据库连接对象被调用前,预先生成和管理一批可以使用的对象,用空间换时间的方式提升应用程序对数据库的操作性能。

2024-01-14 10:13:30 1280

原创 软件设计不是CRUD(10):低耦合模块设计理论——业务抽象:从需求中提取业务维度

业务抽象是一种将需求落地成模块功能的设计思想,是对业务需求和技术设计进行转换、隔离的一种分析方法。经过业务抽象后的业务模块一般具有较高的业务屈服度,能更大程度满足模块设计中的基本原则要求。进行业务抽象设计有以下几个关键工作步骤:提取业务维度、确认模块分层、抽象模型、抽象行为

2024-01-14 10:10:55 1412

原创 软件设计不是CRUD(9):低耦合模块设计理论——设计落地所面临的挑战

系列文章试图将模块化设计从概念到落地进行体系化的讲解。本节开始我们首先介绍应用程序设计中的模块化概念,以及落地这个概念所需要面临的一些挑战。然后本系列文章将推导这些挑战、问题的解决办法,最后进行示例实战。

2023-12-25 10:31:17 8276 1

原创 软件设计不是CRUD(8):低耦合模块设计实战——组织机构模块(下)

上文中我们介绍了如何研发一个具有较低耦合强度的组织机构模块(包括模块的SDK和模块的默认本地数据库实现),接着我们就可以在一个应用程序中使用这个组织机构模块了。实际上应用程序研发团队不只是使用这个模块,研发团队还在应用程序开发时收到了客户方的新需求。

2023-12-13 20:25:15 305

原创 软件设计不是CRUD(7):低耦合模块设计实战——组织机构模块(中)

组织机构功能是应用系统中常见的业务功能之一,但是不同性质、不同行业背景、不同使用场景的应用系统对组织机构功能的要求可能完全不一样。所以使用这样的功能对低耦合模块设计进行示例性的讲解是比较具有代表性的。在后续的几篇文章中,我们会首先进行示例的详细讲解,然后再基于这个示例进行理论讲解。

2023-12-10 13:55:31 4901

原创 软件设计不是CRUD(6):低耦合模块设计实战——组织机构模块(上)

组织机构功能是应用系统中常见的业务功能之一,但是不同性质、不同行业背景、不同使用场景的应用系统对组织机构功能的要求可能完全不一样。所以使用这样的功能对低耦合模块设计进行示例性的讲解是比较具有代表性的。在后续的几篇文章中,我们会首先进行示例的详细讲解,然后再基于这个示例进行理论讲解。

2023-11-24 11:33:45 2779

原创 软件设计不是CRUD(5):耦合度的强弱(下)

在讨论如何稳定系统内各模块的分层设计前, 本文先介绍一下目前判断各模块间耦合度强弱的度量方式。这些度量方式,在实际工作中读者应该都涉及过,只是可能没有去做详细的划分归类。

2023-11-06 17:05:13 401

原创 软件设计不是CRUD(4):耦合度的强弱(上)

在讨论如何稳定系统内各模块的分层设计前, 本文先介绍一下目前判断各模块间耦合度强弱的度量方式。这些度量方式,在实际工作中读者应该都涉及过,只是可能没有去做详细的划分归类。

2023-11-06 17:01:22 654

原创 软件设计不是CRUD(3):降低模块间耦合性——设计实战

本系列文章专注于讨论在业务系统设计时,如何降低业务系统中各个模块的耦合度,已提供更好的业务扩展性。本系列文章还会具体演示设计模式如何被用于实际的业务模块设计过程中。(注意:本系列文章会假设读者已经知晓常用的设计模式,并已经有真实的业务系统开发经历)

2023-10-19 09:45:50 648 2

原创 软件设计不是CRUD(2):降低模块间耦合性——需求场景

本系列文章专注于讨论在业务系统设计时,如何降低业务系统中各个模块的耦合度,以提供更好的业务扩展性。本系列文章还会具体演示设计模式,特别是行为模式如何被用于实际的应用系统设计过程中。(注意:本系列文章会假设读者已经知晓常用的设计模式,并已经有真实的业务系统开发经历)

2023-10-19 09:41:23 934

原创 Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(3)

本文承接上文继续介绍Spring MVC进行HTTP请求处理的第二大步骤。

2021-09-09 22:16:51 2442 5

原创 Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(2)

上一篇文章本专题详细分析了可能产生这些问题的场景和细节,本篇文章开始本专题将详细介绍Spring MVC组件是如何解决这些问题的。

2021-08-24 19:44:00 2408 4

原创 Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)

本文透过上文讲解的使用方式,重点介绍SpringMVC是如何将HTTP/HTTPS请求映射成SpringMVC Controller层的具体方法,并完成调用的(本文基于的Spring版本为5.1.X,不同的版本对于相关实现有细微差异)。

2021-08-12 22:00:48 2607 2

原创 Spring/Boot/Cloud系列知识:HttpMessageConverter转换器使用方式

在本专题之前介绍HTTP请求传参的时候,提到了关于参数值转换的主要控制接口HttpMessageConverter,并承诺在本专题的后续内容中对HttpMessageConverter接口和其实现进行详细讲解,本文就负责完成这个工作(后续本专题的内容还会讲解工作原理)。

2021-07-29 17:28:05 4493 3

原创 应用软件设计不是CRUD:如何进行应用系统功能模块的耦合性设计

应用软件开发,就是对数据库进行增删改查操作?软件架构选型,就是选择几款流行的中间件?软件架构设计,就是把几个中间件串在一起?如果真的这么认为,那么对软件设计可能还存在理解的深度。本篇文章从应用软件的模块设计层面讲述软件设计的真正要求。

2021-07-23 21:49:02 8109 19

原创 Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)

为了便于开发人员实现更好的抽象性也便于简化取值过程,SpringMVC提供了一种基于URL匹配符的参数传递方式,示例代码如下所示:

2021-07-13 21:05:30 7291 4

原创 Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)

本文所述内容适用于Spring Boot 2.1.5(Spring 5.1.7)及以上版本。1、页面参入传入的常见情况SpringMVC组件接收参数值的方式,根据HTTP/HTTPS请求信息格式的不同而不同。而HTTP/HTTPS请求通常的值传入方式包括以下几种(本文不涉及介绍HTTP协议的基本结构,并且会默认读者已知晓这些结构):1.1、通过URL结构的Query部分进行传递以下为URL的标准格式:protocol: // hostname [:port] / path / [;paramet

2021-07-08 11:27:39 2586 5

原创 Java我的2020年终盘点

这段时间一直在忙着工作上的事情和新书的筹备。但都2021年了,怎么都应该写一点,算不上总结回顾,只能算闲聊胡扯。2020年TIOBE’s对于各种编程语言排名情况的总结是:“Python is TIOBE’s Programming Language of 2020”。这无疑是对我自己这个写了20年Java程序的老屌丝相当有震撼力的一句话,曾几何时自己调侃delphi、调侃Ruby的样子和最近些年轮着自己被调侃的样子,是不是感觉是有些五味杂陈?Python的快速发展、Java的被赶超、Ruby的夕阳余晖有

2021-01-12 15:05:34 27907 55

原创 源码阅读(40):Java中线程安全的Queue、Deque结构——LinkedTransferQueue(3)

LinkedTransferQueue是从JDK 1.7+版本开始提供的一个无界阻塞式队列,它是Java容器框架中一种比较特殊的阻塞式队列,特殊性体现在它实现的TransferQueue接口。后者的特点是可定义一种数据对象消费者和生产者的配对交换方式,保证了生产者线程和消费者线程的配对处理(注意,不是数据配对而是线程配对),这样做的好处是,可以使用CAS原理进行LinkedTransferQueue队列集合的线程安全性控制,而不是使用AQS原理。

2020-06-16 22:27:09 2896 12

原创 源码阅读(39):Java中线程安全的Queue、Deque结构——LinkedTransferQueue(2)

LinkedTransferQueue是从JDK 1.7+版本开始提供的一个无界阻塞式队列,它是Java容器框架中一种比较特殊的阻塞式队列,特殊性体现在它实现的TransferQueue接口。后者的特点是可定义一种数据对象消费者和生产者的配对交换方式,保证了生产者线程和消费者线程的配对处理(注意,不是数据配对而是线程配对),这样做的好处是,可以使用CAS原理进行LinkedTransferQueue队列集合的线程安全性控制,而不是使用AQS原理。

2020-06-16 22:24:20 2322

原创 源码阅读(38):Java中线程安全的Queue、Deque结构——LinkedTransferQueue(1)

LinkedTransferQueue是从JDK 1.7+版本开始提供的一个无界阻塞式队列,它是Java容器框架中一种比较特殊的阻塞式队列,特殊性体现在它实现的TransferQueue接口。后者的特点是可定义一种数据对象消费者和生产者的配对交换方式,保证了生产者线程和消费者线程的配对处理(注意,不是数据配对而是线程配对),这样做的好处是,可以使用CAS原理进行LinkedTransferQueue队列集合的线程安全性控制,而不是使用AQS原理。

2020-06-16 22:20:18 2790 3

原创 源码阅读(37):Java中线程安全的Queue、Deque结构——PriorityBlockingQueue

PriorityBlockingQueue是一种无界阻塞队列,其内部核心结构和我们前文中已经介绍过的PriorityQueue队列集合类似,都是基于小顶堆树进行工作。本文不会赘述介绍PriorityQueue时已经详解过的内容,例如小顶堆树的工作原理等。本文将集中精力在几个PriorityBlockingQueue队列集合的核心方法的介绍上,这些方法都是,帮助PriorityBlockingQueue队列在多线程场景下正确工作的重要方法。

2020-05-31 17:53:12 2373

基于业务抽象设计思想完成的Flink流式处理示例

该实例主要配合 《软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析》 《软件设计不是CRUD(22):在流式数据处理系统中进行业务抽象落地——设计思考》 《软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码》 这三篇文章进行代码落地的详细讲解。 其中的示例主要内容是多种测速雷达的数据收集和数据清洗、数据落库工作。 注意,其中的kafka、flink集群都需要读者自行进行安装,然后可用本源代码进行打包运行。

2024-06-18

使用业务抽象思想设计的具有低耦合性的组织机构模块(示例)

对应业务抽象专栏低6、7、8三篇文章 其中有两个目录 simple-org:存放示例组织机构模块的完整代码 simple-for-org-boot:存放应用程序启动脚手架(使用spring-boot)

2023-12-11

命令模式实现事务补偿2

这个是最新的版本,之前那个上传的资源不完善,请不要下载。这是一个使用命令模式自行实现的事务补偿机制,用于跨平台多原子服务协调调用异常时的逆向操作。

2017-02-08

命令模式实现事务补偿

这是一个使用命令模式自行实现的事务补偿机制,用于跨平台多原子服务协调调用异常时的逆向操作。

2017-02-03

图片服务系统工程代码

这个图片服务系统工程代码配合我的博文http://blog.csdn.net/yinwenjie/article/details/54016015进行下载阅读。

2017-01-18

自己设计ESB组件的主要代码

这个资源是我的专题“系统间通信”中第41篇到44篇文章的主要代码。其中包含了ESB-Client的主要代码和ESB-Broker的主要代码。详细的资源说明可以查看我的博客:http://blog.csdn.net/yinwenjie/article/details/52141093

2016-08-11

OASIS Advanced Message Queueing Protocol (AMQP) Version 1.0

ISO/IEC组织定义的AMQP协议的标准规范。目前版本号为version 1.0

2016-03-14

zookeeper + thrift实现的RPC 服务治理框架演示

服务治理框架,一般存在与RPC的上一层,用来在大量RPC服务至上,协调客户端和服务器的调用工作。这个示例工程和我的博客《架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇》(http://blog.csdn.net/yinwenjie/article/details/49869535)相对应。相关的设计和代码说明,请参见我的博客。另外,工程已经测试过了,可以直接下载导入eclipse运行,您需要maven的支持。

2015-11-22

空空如也

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

TA关注的人

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