- 博客(53)
- 收藏
- 关注
原创 Google Guava 工具包用起来太爽了!
其实除了Joiner/Splitter外,guava还提供了字符串匹配器:CharMatcher。当然,在不使用guava的情况下,我们是怎么避免上面的问题的呢?
2024-01-31 17:11:54
895
原创 多线程事务如何回滚?
1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主线程修改的数据则不会回滚,导致数据错误。3,下面用一个简单示例演示多线程事务。2,在spring中可以使用。
2024-01-30 18:03:34
1028
原创 8|数据库设计:怎样按领域模型设计数据库?
好,这节课的主要内容就讲完了,我们来总结一下。DDD 主张要根据领域模型来进行数据库设计,保证数据库和领域模型的一致,从而保证数据库和业务需求以及代码的一致性。在进行数据库设计时,我们可以用物理数据模型图,也可以直接用建表语句,两者基本是等价的。为了直观,我们采用了图示的方法。对数据表、字段等等的命名,应该依据词汇表,以便保证统一语言。一般来说,领域模型中的实体映射为数据库中的表;领域模型中的属性,映射成表中的字段。同时还要根据需求补充更多的字段。
2024-01-30 17:46:15
992
原创 7|领域建模原理:DDD领域建模和传统方法有什么区别?
在讨论什么是领域模型之前,咱们先说说什么是模型。先来看几个例子。比如说你去买房,售楼处都会有一个沙盘模型,这样你就可以看到楼的外观、朝向、周边环境等等。但是如果要盖这个楼盘,靠沙盘模型就不行了,需要有一套详细的建筑图纸,图纸也是模型。为了对大楼进行设计,还要进行各种计算,计算用的公式也是模型,称为数学模型。另外,小孩玩的玩具车、玩具枪什么的,也是模型。事实上,现代生产和生活中,充满着各种各样的模型。从这些例子里,咱们可以发现模型的几个共同特点。首先,模型是以解决特定问题为目的的。
2024-01-30 17:40:28
949
原创 06|领域建模实践(下):领域建模还有什么其他技巧?
好,这节课的主要内容就讲完了,下面来总结一下。今天我们在上节课的基础上,继续对项目管理和工时管理进行领域建模。在这个过程中进一步深化了对“多对多”关联的理解:我们可以通过引入一个表示关联的实体,将一个多对多关联拆成两个一对多关联。我们还通过取员工上级的逻辑,学习了为实体添加操作。当模型变得比较复杂时,可以把模型划分成多个模块,使模型更容易理解。在建立完领域模型之后,我们还进行了两项实践:完善业务规则和建立词汇表。
2024-01-26 20:45:08
857
原创 5|领域建模实践(上):怎样既准确又深刻地理解业务知识?
比如说,张三是员工,李四也是员工,我们可以说,员工指一类事物。这时我们可以用 UML 中的术语说,员工是领域对象的一个类,张三和李四是这个类的实例。但在我们的需求里,租户关注的是客户和提供云应用的供应商之间的协议,背后隐含的需求可能是云平台要为这个客户分配多少硬件资源、怎样收费、提供哪个级别的备份等需求。第二个问题是,一个员工其实可以不属于开发组,而只属于开发中心,比如开发中心的主管就是这样。这时你问我:“一个组织是开发中心,另一个是开发组,那么在业务术语上可以说,这两个组织具有不同的‘什么’呢?
2024-01-26 20:30:24
948
原创 SpringBoot分片上传、断点续传、大文件极速秒传功能
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。断点续传是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传或者下载未完成的部分,而没有必要从头开始上传或者下载。
2024-01-23 13:47:21
1078
原创 MQ 消息丢失、重复、积压问题,如何解决?
比如在 Kafka 中,一个 Topic 可以配置多个 Partition(分区),数据会被写入到多个分区中,但在消费的时候,Kafka 约定一个分区只能被一个消费者消费,Topic 的分区数量决定了消费的能力,所以,可以通过增加分区来提高消费者的处理能力。在分布式系统中,如果两个节点之间存在数据同步,就会带来数据一致性的问题。方案看似万无一失,每个阶段都能保证消息的不丢失,但在分布式系统中,故障不可避免,作为消息生产端,你并不能保证 MQ 是不是弄丢了你的消息,消费者是否消费了你的消息,所以,本着。
2024-01-22 17:59:49
522
原创 Spring重要知识点
IoC(Inverse of Control:控制反转)是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。IoC 在其他语⾔中也有应⽤,并⾮ Spring 所独有。IoC 容器是 Spring⽤来实现 IOC 的载体, IOC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IOC 容器来管理,并由 IOC 容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。
2024-01-18 15:50:58
1239
原创 如何控制Dolphinscheduler同一任务不能同时执行多个
本文详细介绍了如何控制Dolphinscheduler同一任务在同时刻不能同时执行多个,列举了详细过程以及代码
2024-01-15 10:34:42
511
原创 MongoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2023-07-13 11:03:40
1284
原创 04|事件风暴(下):事件风暴还有哪些诀窍?
现在,我们对这两节关于事件风暴的课程做一个总结。事件风暴是一种通过协作的方式捕获行为需求的方法,在这个过程里,业务人员和技术人员一起消化领域知识、形成统一语言、并为领域建模奠定基础。事件风暴分为识别领域事件、识别命令、识别领域名词三个步骤。这一节课讲的是后面两个步骤。“命令”是引发领域事件的操作,可以从领域事件“反推”出来。此外,还可以识别命令的两个附加信息,一个是发出命令的“执行者”,另一个是为了完成命令要查询出的数据。“领域名词”是隐含在命令和领域事件中的名词性概念。
2023-06-29 10:28:57
96
原创 03|事件风暴(上):怎样和业务愉快地聊需求?
下面我们来总结一下。这节课,我们首先解释了用事件风暴之类的方法梳理需求的必要性,包括从头脑中挖掘需求、补充遗漏的需求、使业务人员和技术人员理解一致,以及辅助识别领域对象四点。事件风暴是从识别领域事件开始的。“领域事件”是在业务过程中,业务人员关注的那些已经发生的事情。技术事件和查询功能都不算领域事件。领域事件意味着业务流程中每个步骤的结果。这种结果导向的思维方式更容易理清业务。事件风暴中的“事件”两个字就来源于领域事件。识别领域事件的过程可以分成了两大步:第一步是参加的人,各自写出领域事件;
2023-06-16 09:38:05
99
原创 2 | 迭代一概述:怎样开启一个麻雀虽小五脏俱全的项目?
好,今天就讲到这里,我们来总结一下。这节课,我们概述了迭代一的目的和需求,并且介绍了 DDD 的基本开发过程。咱们要开发的是一个基于 SaaS 的企业管理系统,它的需求主要包括租户管理、人员与组织管理、项目管理、人员分配和工时登记这几部分。在介绍需求的同时,我们也穿插着介绍了领域和领域专家的概念。领域就是软件要解决的业务问题。领域专家则是十分了解业务知识本质的人。DDD 开发的基本流程是以领域模型为核心的。整个流程可以分为模型的建立和模型的实现两部分。
2023-06-15 14:14:04
38
原创 1|DDD小传:领域驱动设计为什么这么火?
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2023-06-08 13:45:51
27
原创 HashMap
一、存储类型比较1.数组特点 存储区间是连续,且占用内存严重,空间复杂也很大,时间复杂为O(1)。优点:是随机读取效率很高,原因数组是连续(随机访问性强,查找速度快)。缺点:插入和删除数据效率低,因插入数据,这个位置后面的数据在内存中要往后移的,且大小固定不易动态扩展。2.链表特点 区间离散,占用内存宽松,空间复杂度小,时间复杂度O(N)。优点:插入删除速度快,内存利用率高,没有大小固定,扩展灵活。缺点:不能随机查找,每次都是从第一个开始遍历(查询效率低)。3.哈希表特点 以上数
2021-04-18 10:28:27
169
2
原创 zookeeper
ZooKeeper 是什么?ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。Zookeeper 保证了如下分布式一致性特性:顺序一致性原子性单一视图可靠性实时性(最终一致性).
2021-04-07 18:03:09
310
原创 spring
一、概述1.什么是Spring Spring诞生的目的是致力于全面的简化JAVA的企业级应用开发。 // 也可以理解为是一个管理型的框架 使用Spring框架开发, 对于项目的代码入侵性小。 Spring框架内部使用了众多的设计模式 : 工厂模式、 单例模式、原型模式、代理模式、策略模式 等等二、Spring事务1、事务控制1.1事务:事务是用户操作数据库的基本单元。组成事务的一组sql要么一起成功,要么一起失败。2.JDBC中如何手动控制事务:2.1 设置手动控制事务: conn.s
2021-03-16 18:45:25
115
原创 Quartz简介
一、Quartz相关介绍1.简介 1.1 Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 1.2 Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 1.3 Quartz 允许程序开发人员根据时间的间隔来调度作业。 1.4 Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。2.Quartz 核心概念 我们需要明白 Quartz 的几个核心概念,这样理解起 Q
2021-02-22 18:12:04
1594
原创 图数据库neo4简介以及与Java集成
一、neo4j介绍 Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。 你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。...
2020-12-01 11:29:04
3468
1
原创 spring学习记录
一、基本概念 Spring 是一个主流的 Java Web 开发框架,一个轻量级JaveEE解决方案。1,1、Spring优点轻量级,非侵入式对现有的类结构没有影响可以提供众多服务,如事务管理,WS等AOP的很好支持,方便面向切面编程,使得业务逻辑和系统服务分开对主流的框架提供了很好的集成支持,如hibernate,Struts2,JPA等,像一个胶水一样,把一些好的框架粘合在一起方便实用使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专
2020-11-18 15:46:18
131
原创 MyBatis
一、MyBatis相关知识1、讲MyBatis 的缓存 emsp;MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置3、Mybatis 是如何进行分页的?分页插件的原理是什么?答:1)Mybatis 使用 RowBounds 对象进行分页,也可以直接编写 sql 实现分页,也可以使用Mybatis
2020-11-18 11:46:15
122
2
原创 Java集合框架
一、Java集合框架ArrayList 和 Vector 的区别。这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet 之类的集合的最大不同处,HashSet 之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与 hashset 没有任何关系,但为了说清楚 Arra
2020-11-17 17:27:57
82
原创 多线程-高并发问题
一、多线程1. stop() 和 suspend() 方法为何不推荐使用? 反对使用 stop(),是因为它不安全。它会解除由线程获取的所有锁,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。 suspend() 方法容易发生死锁。调用 suspend() 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被 “挂 起” 的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用
2020-11-17 17:10:08
378
原创 Linux Crontab定时任务简介
一、简介1、cron介绍 crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。 /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名 /etc/crontab 这个文件负责调度各种管理和维护任务。 /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。2、cron常用命令查看crontab文件内容crontab -l
2020-11-10 17:59:48
100
原创 Mac Idea 日常使用快捷键
一、Mac Idea常用快捷键1.删除无应用的包:control+option+o2.抛异常:option+command+t
2020-11-04 16:10:43
169
原创 Flink
一、简介1.初始flink Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
2020-07-16 18:01:49
146
原创 Java集成presto查询
一、Java集成presto1.pom文件引入相关jar <dependency> <groupId>com.facebook.presto</groupId> <artifactId>presto-jdbc</artifactId> <version>0.234.1</version> </dependency>
2020-06-24 10:13:59
3803
1
原创 JAVA实现文件压缩与上传FTP
一、文件压缩1.pom文件引入相关jar<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <dependency&
2020-06-24 09:44:09
3031
2
原创 Spring常用注解作用
一、常用注解作用1.@ConfigurationProperties:读取配置文件的信息,自动封装成实体类public @interface ConfigurationProperties { @AliasFor("prefix") String value() default ""; //文件前缀 @AliasFor("value") String prefix() default ""; boolean ignoreInvalidFields() defa
2020-06-04 10:24:48
381
原创 springboot定时任务
一、定时任务配置1、创建一个 Spring Boot 项目,pom中添加 web 依赖 spring-boot-starter-web,项目创建成功后,添加 @EnableScheduling 注解,开启定时任务:@Component@EnableScheduling@Slf4jpublic class Tasks { //@Scheduled(cron = "0 * * * * ?") @Scheduled(fixedRate =60*1000) // every 60 seco
2020-05-27 16:06:48
218
原创 Elasticsearch简介
<center>Elasticsearch简介</center>一、简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业...
2020-05-14 10:38:41
265
原创 apache-atlas-2.0.0安装
一、前提条件1.安装jdk1.82.安装maven3.1以上版本二、资源下载1.maven下载 apache-maven-3.6.3-bin.tar.gz2.atlas下载 apache-atlas-2.0.0-sources.tar.gz三、安装步骤1.解压maventar -zxvf apache-maven-3.6.3-bin.tar.gz2.配置maven环境变量v...
2020-04-28 14:38:26
1313
原创 VMWare虚拟机配置固定IP
一、在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子网掩码和网关,后面修改静态IP会用到。二、进入虚拟机vi /etc/sysconfig/network-scripts/ifcfg-eth0······...
2020-04-28 10:28:17
284
原创 Spark简介
一、spark简介1、概述 Spark是一种快速、通用、可扩展的大数据分析引擎,项目是用Scala进行编写。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目,Spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算...
2020-04-21 17:35:15
1527
原创 Hadoop介绍
一、Hadoop1、Hadoop发展史 由Doug Cutting根据Google 的3 篇论文 Hadoop (HDFS MapReduce Hbase)编写而成,使用java语言编写,是一个分布式的大数据处理框架,它有很好的伸缩性,可扩展性,编程模型很简单。2、概念 HDFSHadoop是一个分布式的大数据处理框架,它有很好的伸缩性,可扩展性,编程模型很简单.3、 Hadoo...
2019-12-18 19:49:45
261
hive-jdbc-standalone.jar
2024-01-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人