自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

锐云游

思想的交换可以让我们彼此更加强大,一个技术交流的平台

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

原创 java代码运行“找不到符号”报错解决?

【代码】java代码运行“找不到符号”报错解决?

2024-05-07 14:45:30 243

原创 Zookeeper特性详解及实战

Zookeeper特性与节点数据类型详解Zookeeper经典应用场景实战一Zookeeper经典应用场景实战二

2024-05-04 19:22:58 143 2

原创 Abstract Factory抽象工厂模式详解

提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

2024-04-14 14:48:32 337

原创 FactoryMethod工厂方法模式详解

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实例化延迟到子类。

2024-04-13 15:25:14 694

原创 Singleton单例设计模式详解

保证一个类只有一个实例,并且提供一个全局访问点。

2024-04-13 14:10:37 777

原创 如何在微服务架构中使用领域驱动设计?

实现领域服务、实现微服务接口、使用通信协议进行微服务交互以及实现数据存储等步骤来构建出高质量的微服务架构。总之,在微服务架构中使用领域驱动设计可以。

2024-04-04 13:46:52 455

原创 DDD 中的限界上下文是什么?有什么用?

在DDD中,"限界上下文"是一个非常重要的概念,它指的是一个边界内的领域模型和与之相关的语义环境。每个限界上下文都代表了一个明确定义的、有边界的领域模型,用于描述业务领域的一部分。在微服务设计中,不同服务之间的边界是很重要的,而限界上下文可以帮助我们更好地理解和规划这些服务的边界。限界上下文可以看作是一种语义上的边界,它可以将领域模型与外部环境隔离开来,保证领域模型的独立性和纯净性。在这个边界内,领域模型的概念和操作都有着明确的含义,不会受到外部因素的干扰和影响。

2024-04-04 13:42:27 161

原创 在 DDD 中,如何处理跨多个实体的复杂业务?

处理跨多个实体的复杂业务是DDD中的一个关键挑战,需要深入理解业务领域、合理划分聚合、制定适当的领域服务和规则,以及不断进行建模和迭代来满足实际需求。领域驱动设计的方法和模式可以帮助团队更好地理解和应对这种复杂性。在DDD中,跨多个实体的复杂业务通常需要交由领域服务进行协调。

2024-04-04 13:39:09 50

原创 什么是领域驱动设计中的 CQRS 模式?

总之,在DDD中,CQRS模式可以将领域模型与查询功能进行分离,使一些复杂的查询摆脱领域模型的限制,以更为简单的DTO形式展现查询结果。虽然引入CQRS模式会引入额外的复杂性和技能要求,但在面对大型业务系统和复杂的业务流程时,使用CQRS模式可以帮助将命令和查询进行拆分,使领域模型与数据模型的边界更加清晰。在CQRS模式中,命令和查询应在两个独立的系统中处理,这两个系统一般是指两个独立部署的应用程序,在某些特殊情况下,也可以部署在同一个应用内的不同接口上。命令通常是不返回数据的,它们只用于触发状态变化。

2024-04-04 13:34:20 42

原创 在 DDD 中,如何处理领域对象的持久化?

在 DDD 中,领域对象的持久化工作通常是通过仓库 Repository 和工厂 Factory 实现的。仓库是一种用于访问领域对象的机制。他负责将领域对象从内存中保存到持久存储,如数据库中,以及从持久存储中检索领域对象。而工厂则负责从持久存储中组装领域对象。总之,在DDD中,仓库和工厂是两个核心的概念,它们的设计应该考虑到应用的需求、领域模型的结构、数据的访问和修改等方面。通过合理的设计,可以提高系统的可维护性、可扩展性和可重用性。

2024-04-04 13:33:32 86

原创 DDD 中的实体和值对象有什么区别?

综上所述,实体和值对象在DDD中是两种不同的概念。在 DDD 中,实体通常用于表示有唯一表示以及状态变化的领域概念,而值对象通常用于表示无唯一标识以及不可变的属性集合。值对象形式上是一个对象,但是其本质则和一个属性值是等价的。在DDD中,实体 Entity 和值对象 Value Object 是两个基本的概念,它们之间有一些重要的区别。

2024-04-04 13:28:26 58

原创 在 DDD 中,如何处理模型的聚合和聚合根?

总之,在DDD中,处理模型的聚合和聚合根需要仔细考虑聚合的设计和实现,包括聚合的组成、聚合根的选择、聚合内部的关系、聚合的行为以及聚合服务的暴露等方面。通过合理的设计和实现,可以提高系统的可维护性、可扩展性和可重用性。在DDD中,聚合是指一组紧密关联的实体和值对象,它们共同完成一个特定的业务逻辑,并由一个聚合根进行管理。聚合根是聚合的根节点,它作为聚合内堆外暴露的唯一访问入口,负责管理聚合内部的对象状态,并协调它们之间的交互。

2024-04-04 13:26:59 69

原创 DDD 中的贫血模型和充血模型有什么区别?

总的来说,贫血模型更注重简单性和易上手,而充血模型更注重业务复杂的系统开发。选择使用哪种模型取决于具体的业务需求和开发团队的技术能力。DDD中的贫血模型和充血模型都是领域模型的表现形式,但是它们在设计和实现上有着显著的区别。

2024-04-04 13:24:04 54

原创 DDD 的四层领域模型是怎样的?包含哪些基础概念?

在DDD中,还有一些基础概念需要了解。其中,聚合根是一个很重要的概念,它代表了一个业务对象群在领域模型中的根节点,可以包含其他多个实体和值对象。聚合根负责管理其包含的对象的状态,以保证其整体的一致性。另外,DDD还提倡使用限界上下文来构建子域,每个限界上下文代表了一个独立的业务能力或主题,可以包含特定的业务逻辑和数据。这些基础概念可以帮助开发人员更好地理解和构建领域模型。在四层领域模型中,展现层与应用层组成了前端应用,领域层与基础设施层组成了后端应用。前后端应用通过API进行通信。

2024-04-04 13:12:32 415

原创 什么是 DDD 领域驱动设计?

领域驱动设计的目标是通过清晰的领域模型、领域语言和领域边界来理解和解决业务问题。通过领域驱动设计,开发团队可以更好地与业务领域专家进行沟通,减少误解,提高软件的质量和可维护性。DDD 的核心思想是将实现连接到持续进化的模型,通过领域模型驱动系统设计。它倡导统一语言,提出了一系列概念,包括实体、值对象、聚合根等,以帮助团队更好地理解和表达业务模型。领域驱动设计(Domain-Driven Design,DDD)是一种软件设计方法,它重点关注软件开发中涉及的领域概念,旨在帮助团队在复杂系统中实现业务逻辑。

2024-04-04 13:01:02 27

原创 信息安全就是国家安全,带大家了解一下安全算法

摘要算法是一种将任意长度的数据转换为固定长度字节串的算法。它具有以下特点和应用。首先,摘要算法能够生成一个唯一且固定长度的摘要值,用于验证数据的完整性和一致性。无论输入数据有多长,生成的摘要值始终是固定长度的,且即使数据只改变了一点点,生成的摘要值也会大不相同。其次,摘要算法是单向的,即无法从摘要值推导出原始数据。这种性质保证了数据的安全性,对于同一个输入数据,只要计算后的摘要值相同,可以认为原始数据也是相同的。

2024-04-04 12:33:14 441

原创 分布式架构中一些常用算法的理解

一致性哈希算法是一种分布式算法,用于解决数据分布和负载均衡问题。它通过将数据和节点映射到一个哈希环上,实现了数据在节点之间的均匀分布和最小化数据迁移。一致性哈希算法的核心思想是将数据和节点都映射到哈希环上。每个节点在哈希环上有一个位置,根据哈希值进行排序。存储或查找数据时,通过哈希函数找到数据在环上的位置,并顺时针找到离它最近的节点,将数据存储在该节点上。一致性哈希算法的优势在于节点增删时最小化数据迁移。只有相邻节点之间的数据会受影响,不影响整个环上的数据分布,提高了系统的稳定性和性能。

2024-04-04 12:02:49 630

原创 算法思想堪比哲学,你知多少否?

分治算法是一种将复杂问题划分为规模较小的子问题,并递归地解决这些子问题,最后将它们的解合并为原问题的解的算法思想。它具有以下几个关键步骤:分解、解决和合并。通过将大问题分解为小问题,每个小问题都可以独立求解,然后将它们的解合并起来,最终得到原问题的解。分治算法适用于具有重叠子问题性质的问题,能够降低问题的复杂度。它的优点是能够充分利用计算资源,方便问题的并行化处理。然而,使用分治算法解决问题需要满足一些条件,如子问题应是独立且相互类似的,原问题应能通过子问题的解合并得到,子问题的规模应足够小。

2024-04-04 11:24:56 800

原创 说说对排序算法的一些理解

冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历数组,每次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。这样,每一次遍历都会将当前未排序部分的最大元素“冒泡”到数组的末尾,重复执行直到整个数组排好序。冒泡排序的时间复杂度为O(n^2),效率相对较低,但它的实现简单,易于理解和调试,并且不需要额外的空间,因此在一些小规模或特殊场合下仍然被广泛使用。但对于大规模数据的排序来说,冒泡排序的效率远不如其他更高级的排序算法,例如快速排序、归并排序等。

2024-04-03 16:58:50 946

原创 浅谈图数据结构的理解

在计算机科学中,图是由一些点(节点或顶点)和连接这些点的线(边或权重)组成的数据结构。遍历是对图进行搜索的过程,它可以访问所有节点,并按照一定顺序处理它们。图遍历分为深度优先搜索和广度优先搜索两种方法。● 深度优先搜索先访问一个节点及其相邻未访问过的节点,直到无法继续访问为止,然后回溯到上一个节点并继续访问其它子节点。● 广度优先搜索则从起始节点开始,首先遍历所有与该节点直接相邻的节点,然后遍历与这些节点相邻的尚未访问过的节点。重复这个过程,直到所有节点都被访问。

2024-04-03 16:11:55 324

原创 说说你对数据结构-树的理解

在哈夫曼树中,字符出现频率越高的节点越靠近树的根部,这样可以让频率高的字符拥有较短的编码,而频率低的字符拥有较长的编码。如果某个字符在当前节点的子节点中不存在,则创建一个新的子节点,并将该字符放入子节点中。通过这样的方式,构建出的前缀树能够有效地存储大量的字符串,并且支持快速的插入和查找操作。前缀树的一个重要特点是,每个节点存储的字符序列为从根节点到该节点的路径上的字符集合。将新的父节点放回节点集合中,并重复这个过程,直到节点集合中只剩下一个节点,即哈夫曼树的根节点。前缀树的应用非常广泛。

2024-04-03 15:25:20 1078

原创 讲讲你对数据结构-线性表了解多少?

数组可以通过索引来读取和修改元素,索引从0开始。数组的访问时间复杂度为O(1),即常数时间。但在插入和删除元素时,需要移动其他元素以保持连续存储的特性,导致时间复杂度为O(n)。当谈到线性表时,数组和矩阵是两种常见的数据结构。

2024-04-03 13:01:04 422

原创 Java面试题之分布式/微服务篇

分布式容错框架阻止故障的连锁反应,实现熔断快速失败,实现优雅降级提供实时的监控和告警资源隔离:线程隔离,信号量隔离线程隔离:Hystrix会给每一个Command分配一个单独的线程池,这样在进行单个服务调用的时候,就可以在独立的线程池里面进行,而不会对其他线程池造成影响信号量隔离:客户端需向依赖服务发起请求时,首先要获取一个信号量才能真正发起调用,由于信号量的数量有限,当并发请求量超过信号量个数时,后续的请求都会直接拒绝,进入fallback流程。

2024-02-22 22:48:30 1459

原创 Java面试题之Redis

多个 Socket 可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个 Socket,会将 Socket 放入一个队列中排队,每次从队列中取出一个Socket 给事件分派器,事件分派器把 Socket 给对应的事件处理器。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。

2024-02-22 19:12:37 1059

原创 Java面试题之LeetCode经典算法篇

【代码】Java面试题之LeetCode经典算法篇。

2024-01-24 22:36:49 672

原创 Java面试题之基础篇

java中的编译器和解释器Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做 字节码(即扩展名为 .class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。

2024-01-23 22:09:30 1065

原创 Java解析Excel文件并把数据存入数据库

使用SpingMVC和hibernate框架实现。

2024-01-05 00:14:49 954

原创 java EasyExcel实现动态列解析和存表

本文介绍了使用 EasyExcel 组件来进行导入,实现公共列和动态列组合类型的导入,以及如何存储的功能,主要利用反射和字典分别来维护公共列和动态列的表头和字段的对应关系,利用此关系对数据进行解析。

2024-01-04 23:58:49 427

原创 11-GraalVM元原生时代的Java虚拟机

大部分脚本语言或者有动态特效的语言都需要一个语言虚拟机运行,比如CPython,Lua,Erlang,Java,Ruby,R,JS,PHP,Perl,APL等等,但是这些语言的虚拟机水平很烂,比如CPython的VM就不忍直视,而HotSpotVM是虚拟机的大神级别,如果能用上HotSpot,能用上顶级的即时编译器(JIT)、性能优化、垃圾回收等技术,岂不爽歪歪!实际上,在充分预热的情况下,Java 程序中的热点代码早已经通过即时编译转换为二进制码,在执行速度上并不亚于静态编译的 C++ 程序。

2023-12-25 22:31:41 1086

原创 10-让Java性能提升的JIT深度剖析

在 HotSpot 虚拟机中的热点探测是 JIT 优化的条件,热点探测是基于计数器的热点探测,采用这种方法的虚拟机会为每个方法建立计数器统计方法的执行次数,如果执行次数超过一定的阈值就认为它是“热点方法”C1 编译器是一个简单快速的编译器,主要的关注点在于局部性的优化,适用于执行时间较短或对启动性能有要求的程序,例如,GUI 应用对界面启动速度就有一定要求,C1也被称为 Client Compiler。热点代码,就是那些被频繁调用的代码,比如调用次数很高或者在 for 循环里的那些代码。

2023-12-25 21:25:16 1122

原创 09-为Java开疆拓土的ZGC深度剖析

停顿时间不超过10ms(JDK16已经达到不超过1ms);停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆,JDK15后已经可以支持16TB。这么去想,如果使用ZGC来做Java项目,像对STW敏感的证券系统,游戏的系统都可以去用Java来做(以前都是C或者C++的市场),所以ZGC的出现就是为了抢占其他语言的市场(卷!

2023-12-25 19:36:52 862

原创 08-JVM调优实战及常量池详解

s0还是常量池 中"zhuge”的引用,s1因为无法在编译期确定,所以是运行时创建的新对象”zhuge”的引用,s2因为有后半部分 new String(”ge”)所以也无法在编译期确定,所以也是一个新创建对象”zhuge”的引用;在编译期其字符串常量的值就确定下来,故上面程序最终的结果都为true。分析:JVM对于字符串引用,由于在字符串的"+“连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即"a” + bb无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给b。

2023-12-23 16:27:18 842

原创 07-JVM调优工具详解及调优实战

这个因为之前已经大概知道Young GC的频率,假设是每5分钟一次,那么可以执行命令 jstat -gc pid 300000 10 ,观察每次结果eden,survivor和老年代使用的变化情况,在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出。使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如19663。

2023-12-23 15:57:04 930

原创 06-垃圾收集器G1&ZGC详解

默认年轻代对堆内存的占比是5%,如果堆大小为4096M,那么年轻代占据200MB左右的内存,对应大概是100个Region,可以通过“-XX:G1NewSizePercent”设置新生代初始占比,在系统运行中,JVM会不停的给年轻代增加更多的Region,但是最多新生代的占比不会超过60%,可以通过“-XX:G1MaxNewSizePercent”调整。如果这时候对象在GC时被移动了,接下来JVM就会加上一个读屏障,这个屏障会把读出的指针更新到对象的新地址上,并且把堆里的这个指针“修正”到原本的字段里。

2023-12-22 13:25:56 935

原创 05-垃圾收集器ParNew&CMS与底层三色标记算法详解

对于对象年龄应该为多少才移动到老年代比较合适,本例中一次minor gc要间隔二三十秒,大多数对象一般在几秒内就会变为垃圾,完全可以将默认的15岁改小一点,比如改为5,那么意味着对象要经过5次minor gc才会进入老年代,整个时间也有一两分钟了,如果对象这么长时间都没被回收,完全可以认为这些对象是会存活的比较长的对象,可以移动到老年代,而不是继续一直占用survivor区空间。当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。

2023-12-22 12:14:18 1203

原创 04-JVM字节码文件结构深度剖析

接下来49个字节: 63 6F 6D 2F 74 75 6C 69 6E 67 2F 6A 76 6D 2F 54 75 6C 69 6E 67 42 79 74 65 43 6F 64 65 表示字符串com/tuling/jvm/TulingByteCode。#21为常量池类型的nameAndType类型,分别指向我们的常量池第#5(utf-8类型的常量)的位置表示我们的字段的名称userName,#6指向的是常量池第六个位置,类型是utf-8类型的值为:Ljava/lang/String;

2023-12-22 03:15:37 1179

原创 03-JVM对象创建与内存分配机制深度剖析

jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩jvm配置参数:UseCompressedOops,compressed–压缩、oop(ordinary object pointer)–对象指针启用指针压缩:-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOops。

2023-12-22 00:44:04 1305

原创 02-JVM内存模型深度剖析与优化

如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值。对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。

2023-12-20 16:19:07 774

原创 JVM性能调优辅助手册之JVM指令

【代码】JVM性能调优辅助手册之JVM指令。

2023-12-19 18:18:55 516

原创 JVM性能调优准备之Visual GC插件

代表虚拟机内存分布情况。从图中可以看出,虚拟机被分为Metaspace、Old、Eden、S0、S1注意:如果对每个区域基本概念不是很熟悉的可以先了解下java虚拟机运行时数据区概念。1.1)perm:英文叫做Permanent Generation,我们称之为永久代。(根据深入java虚拟机作者说明,这里说法不是很正确,因为hotspot虚拟机的设计团队选择把GC分代收集扩展至此而已,正确的应该叫做方法区或者非堆)。

2023-12-19 17:56:10 1088

JAVA_JNI_Demo.7z

java和c互通。Java 本地接口(JNI)提供了将Java与C/C++、汇编等本地代码集成的方案,二进制兼容,效率高,功能强。

2020-06-16

数据库建表空间及用户.docx

欢迎使用!本文档包含oracle监听配置、实例导入、建立表空间、建立用户等,有问题评论去见哦

2020-05-21

安装vsftpd.docx

Linux系统安装vsftpd服务实现远程ftp上传下载,有不明白如何配置的,可以下方评论留言哦,欢迎交流分享!

2020-05-21

俄罗斯方块

对于初学java者有益,特别在面向对象和API这块

2015-04-23

单片机音乐频谱显示

不知道对你是否有用 。请下载后再加评论。

2012-12-15

空空如也

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

TA关注的人

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