java
文章平均质量分 77
工作QQ感冒的石头
这个作者很懒,什么都没留下…
展开
-
java 中台架构设计
DDD包括战略设计和战术设计两部分,它们分别从不同的视角出发,完成领域建模和微服务的拆分和设计。战略设计是从业务视角出发,划分业务的领域边界,建立基于通用语言和业务上下文语义边界的界限上下文,构建领域模型。而界限上下文就可以作为微服务拆分和设计的边界。战术设计则是从技术视角出发,侧重于对领域模型的技术实现,按照领域模型完成微服务的开发和落地。在战术设计上会有聚合、聚合根、实体、值对象、领域服务、领域时间、应用服务、仓储等领域对象,这些领域对象会以代码的形式映射到微服务中,完成设计和系统落地。原创 2022-12-17 11:18:06 · 845 阅读 · 0 评论 -
java DDD领域分层架构设计思想
优点:相比于三层方式,更关注领域服务,即业务核心逻辑的划分、收敛缺点:分层复杂, 如果业务逻辑简单没有必要适应场景:业务复杂的业务原创 2022-12-17 10:55:49 · 2448 阅读 · 0 评论 -
java 项目--》阿里分层架构设计和实现
这是显而易见的,明明我们可以在接收到请求后直接查询和操作数据库,却偏偏在中间插入了多个层次,并且每个层次可能只是简单的做数据传递,有时候增加一个小小的需求也可能要修改一整个链路上的代码,这个时候如果还增加了同事的负担那一定是会引来不少吐槽的。大家开发过的系统中应该都有一个用户服务,最基本的接口就是查询用户信息接口,它的请求链路是,DTO -> Controller -> Service . DTO层接收前端传入的请求参数,序列化后传入给 Controller层调用Service层接口。原创 2022-12-17 10:28:37 · 1466 阅读 · 0 评论 -
java netty
等待补充,先参考:面试题-Netty篇 - 泉水姐姐。 - 博客园原创 2022-12-17 10:20:15 · 210 阅读 · 0 评论 -
spring cloud 分布式事务Seata
一文详解,分布式事务Seata - 知乎等待写入 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。Seata 是阿里开源的分布式事务框架,属于二阶段提交模式。首先我们回顾一下在单体应用中,例如一个业务调用了3个模块,他们都使用同一个数据源,是靠本地事务来保证事务一致性。但在微服务架构中,这3个模块会变为3个独立的微服务,各自有自己的数据源,调用逻辑就变为:Seata 如何处理呢?1、原创 2022-12-02 23:58:53 · 282 阅读 · 0 评论 -
java设计模式-责任链模式
责任链模式:也叫职责链模式、功能链模式、命令链模式等原创 2022-12-02 12:29:12 · 162 阅读 · 0 评论 -
java设计模式-享元模式
日常开发中,能够共享的内部状态是有限的,因此通过享元模式共享的对象一般都设计为较小的对象,它所包含的内部状态较少,这种对象也称为细粒度对象。所谓内部状态较少说白了就是对象的属性大部分外部使用时都可以根据自己需要来设置。享元模式核心就是相同或者相似对象的共享复用,分享的是对象相同的部分,而不同的部分用接口暴露出去根据环境动态的设置,而这在享元模式中分别叫做内部状态与外部状态。享元模式很重要一点是分离对象变与不变的部分,变化的部分通过接口提取,共享对象时需要外部自己设置,不变的部分可以共享出去。原创 2022-12-01 15:14:09 · 165 阅读 · 0 评论 -
Java 编程性能调优
JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具类,可以帮助你编写出高性能代码。课程从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个层级重点讲解。Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。数据库最容易成为整个系统的性能瓶颈,这里刘超会重点解析一些数据库的常用调优方法。原创 2022-11-28 00:07:34 · 1271 阅读 · 0 评论 -
设计模式6大原则
耦合的方式很多,依赖,关联,组合,聚合等。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。把创建 Pet 类做成抽象类(或者接口),并提供一个抽象的 shout方法,让子类去实现即可,这样我们有新的宠物种类时,只需要让新的宠物类继承 (或者实现)Pet,并实现 shout 方法即可,使用方的代码就不需要修 -> 满足了开闭原则。也就是采用接口隔离原则。原创 2022-11-07 20:26:23 · 124 阅读 · 0 评论 -
JDK1.8 的 8 个新特性
jdk1.8 的一些新特性简化了代码的写法,减少了部分开发量。转载 2022-11-01 14:51:13 · 662 阅读 · 0 评论 -
springcloud 项目搭建---》自己用
服务和模块介绍:应用服务 bankintegral-boot-server主要包括 token解析、用户uri权限拦截、日志、黑白名单等功能。认证模块: bankintegral-oauth主要包括 登录接口、获取用户权限接口、常用数据接口(如前端获取的字典、枚举接口)等接口和功能。权限模块: bankintegral-authority主要包括 组织机构管理、岗位管理、用户管理、系统设置、权限配置等功能。文件模块: bankintegral-file。原创 2022-10-20 14:56:26 · 834 阅读 · 0 评论 -
前后端开发规范
源码(java/vue)、开发工具、jdk、mysql、redis、rabbitmq、nacos等存放路径禁止包含中文、空格、特殊字符等。5、删除的方法用remove/delete做前缀 ---->deleteUser。4、插入的方法用save/insert做前缀 ---->insertUser。6、修改的方法用update做前缀 ---->updateUser。3、获取统计值用count做后缀 ----->userCount。1、获取单个对象用 get做前缀 ---->getUser。原创 2022-10-10 10:37:19 · 676 阅读 · 0 评论 -
activiti工作流
2) act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。2) act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息。5) act_hi_detail 历史详情表,提供历史变量的查询。1) act_ru_execution 运行时流程执行实例表。6) act_hi_procinst 历史流程实例表。原创 2022-09-29 17:21:50 · 269 阅读 · 0 评论 -
token和JWT token区别、登录安全、页面权限、数据权限、单点登录
包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等 2)Plubic Claims, 3)Private Claims,交换信息的双方自定义的声明 { "sub": "1234567890", "name": "John Doe", "admin": true } 同样经过Base64Url编码后形成第二部分。{ "alg": "HS256", "typ": "JWT" } 这会被经过base64Url编码形成第一部分。原创 2022-09-27 23:04:50 · 4343 阅读 · 1 评论 -
数据签名和数据加密区别
A的签名只有A的公钥才能解签,这样B就能确认这个信息是A发来的;也就是保证整个过程的端到端的唯一确定性,这个信息是A发出的(不是别人),且是发给B的,只有B才被获得具体内容(别人就算截获信息也不能获得具体内容)。数据加密使用的是接受方的密钥对,任何知道接受方公钥的都可以向接受方发送消息,但是只有拥有私钥的才能解密出来;2、得到解密后的明文后用A的公钥(PUB_A)解签A用A自己的私钥(PRI_A)的签名。密钥有公钥和私钥之分。1、用自己的私钥(PRI_B)解密A用B的公钥(PUB_B)加密的内容;原创 2022-09-22 14:45:53 · 655 阅读 · 0 评论 -
java国密加密SM2
在线生成工具:在线看用证书加密数据工具:java(加签、验签、加密、解密):原创 2022-09-22 12:00:19 · 591 阅读 · 0 评论 -
java部分工具类快捷使用技巧
4、PropertyUtils和BeanUtils的功能基本一致,唯一的区别是BeanUtils在对Bean赋值时会进行类型转化,而PropertyUtils不会对类型进行转化,如果类型不同则会抛出异常!建议基本类型在源目标类型一致的情况下使用PropertyUtils效率会更高。复杂类型的拷贝可以使用Dozer。3、以上是在只考虑基本类型的情况下比较的,dozer如果深拷贝或者关联拷贝时,效率应该会更慢。2、十万次以上的效率beanutils的效率和dozer差不多。...................原创 2022-07-28 13:54:56 · 264 阅读 · 0 评论 -
使用postman上传文件
后端项目(springboot)如下所示: /** * 图片上传测试 * @param multipart * @param model * @param pid * @return * @throws IOException */@ApiOperation(value = "图片上传测试")@RequestMapping(value = "/testimage", method = RequestMethod.POST)public Comm原创 2022-06-16 11:47:06 · 1805 阅读 · 0 评论 -
maven打包命令
以前文章讲述了maven基础命令,这次主要讲解maven打包命令1、多环境打包命令一般的,开发环境有dev, test 和 pro,他们的配置多有不同,那么就可以使用 这个参数进行多环境打包clean install clean package -P prod --打包环境为prod项目目录结构:/src /main /java /resources /static /templates原创 2022-06-03 20:41:15 · 3133 阅读 · 0 评论 -
高并发压测服务端报异常org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
异常信息如下:020-09-22 18:21:08 ERROR http-nio-8095-exec-16916 io.renren.common.exception.RRExceptionHandler java.io.IOException: Broken pipeorg.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.apache.catalina.connect...原创 2020-09-23 16:05:40 · 5951 阅读 · 1 评论 -
java 高内存排查
搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。Java内存模型是描述Java程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将...原创 2020-02-13 18:39:06 · 848 阅读 · 0 评论 -
java CPU 100% 排查
文章来源:http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环或者死锁等等当CPU 100%那么可能无法直接用jvisualvm等相关工具来连接,那么如何该排查呢。如下案列:以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。...原创 2020-02-13 17:31:50 · 210 阅读 · 0 评论 -
RabbitMQ的死信队列详解
死信队列详解:https://www.iteye.com/blog/huan1993-2432175https://www.jianshu.com/p/986ee5eb78bc原创 2020-02-10 19:34:26 · 270 阅读 · 0 评论 -
RabbitMQ防止消息丢失
RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证系统高可用,我们必须作出更好完善措施,保证系统的稳定性。1、消息持久。2、confirm 机制3、ACK确认机制4、设置集群镜像模式5、消息补偿机制6、死性队列第一:消息持久化RabbitMQ 的消息默认存放在内存上面,如果不特别声明设置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外crash掉...原创 2020-02-10 18:27:48 · 583 阅读 · 0 评论 -
高并发下如何快速使用MQ实现缓冲流量,削峰填谷
为什么使用原因是?服务之间的传递常用的调用就是直接调用(RPC框架)和消息MQ推送两种,但是都有一个缺点,下游消息接收方无法控制到达自己的流量,如果调用方不限速,很有可能把下游压垮。举个例子,秒杀业务:上游发起下单操作下游完成秒杀业务逻辑(库存检查,库存冻结,余额检查,余额冻结,订单生成,余额扣减,库存扣减,生成流水,余额解冻,库存解冻等等)上游下单业务简单,每秒发起了100...原创 2020-02-04 20:34:17 · 2619 阅读 · 0 评论 -
TCC分布式事务
首先讲解下两段提交协议与三段提交协议以及弊端两段提交协议:一个是准备阶段,一个是提交阶段,准备阶段锁定资源,但并不提交,提交阶段要么成功要么失败,是强事务三段提交协议:在两段提交协议中增加了一个询问阶段,询问阶段可以确保尽可能早的发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生,属于强事务两阶段提交协议弊端(缺点):如果协调者宕机,参与者没有协调者指挥,则会...原创 2020-01-19 18:20:34 · 259 阅读 · 0 评论 -
java之反射底层实现
反射使用场景无处不在,常用jdk动态代理底层设计到的主要类,Method(方法),Field(属性值),constructor(构造器),modifier(修饰工具类) 第一种基本用法:Class p1 = Class.forName("com.example.demo.Test");System.out.println(p1.getName());Method m1 = p1.ge...原创 2020-01-10 20:44:50 · 595 阅读 · 0 评论 -
java 多线程按照顺序执行任务
1、多线程按照顺序执行任务,方法如下:使用线程的join方法 使用主线程的join方法 使用线程的线程池方法 使用线程的CountDownLatch(倒计数)方法 使用线程的CyclicBarrier(回环栅栏)方法 使用线程的Semaphore(信号量)方法2.多线程并发执行,等全部执行完成后在继续执行往下程序,方法如下:使用线程的CountDownLatch(倒计数)方法...原创 2020-01-10 18:06:50 · 2840 阅读 · 0 评论 -
Java之AQS详解
ReentrantLock底层实现方式就是AQS。AQS是AbustactQueuedSynchronizer的简称,提供了一种基于CLH队列实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,它使用一个int成员变量(state)表示同步状态,通过内置的FIFO队列来完成资源获取的排队工作。许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLa...原创 2020-01-03 20:45:27 · 645 阅读 · 0 评论 -
java 之常量池
常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。结构存储:常量池都存在堆中,Double,Float不是常量并没有常量池,凡是new 一个对象就不是常量在java中 ==表示引用地址比较,equals表示值的比较常量池例子:String s1 = "Hello";String s2 = "H...原创 2019-12-29 19:57:05 · 208 阅读 · 1 评论 -
java之并发工具类屏障(CyclicBarrier )以及CountDownLatch 、Semaphore之间区别
1、CountDownLatch :能够使一个或多个线程等待其他线程完成各自的工作后再执行2、CyclicBarrier : 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。3、Semaphore : 用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源4、Exchanger: 用于线程间...原创 2019-12-29 15:11:50 · 521 阅读 · 1 评论 -
java之并发工具类计数器(CountDownLatch)
java并发工具类1、CountDownLatch :能够使一个或多个线程等待其他线程完成各自的工作后再执行2、CyclicBarrier : 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。3、Semaphore : 用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源4、Exchanger...原创 2019-12-29 14:44:40 · 2296 阅读 · 1 评论 -
springcloud之微服务Hystrix 组件原理实现
springcloud常用组件1、服务注册与发现:Eureka2、服务网关: Zuul3、服务负载均衡:Ribbon4、服务之间调用:Feign5、服务熔断:Hystrix---因官网不继续维护,可以使用阿里提供的Alibaba Sentinel轻量级的流量控制、熔断降级 Java 库6、配置中心:config---如果不想自己维护,可以使用阿里云nacos作为配置中...原创 2019-12-25 20:42:14 · 845 阅读 · 1 评论 -
限流之漏桶算法和令牌桶算法实现区别
问题描述?某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的请求对系统压力过大而引起的系统瘫痪,当流量过大时,可以采取拒绝或者引流等机制。1、漏...原创 2019-12-24 20:02:03 · 1458 阅读 · 0 评论 -
springcloud之微服务zuul/GateWay组件实现
springcloud常用组件1、服务注册与发现:Eureka2、服务网关: Zuul3、服务负载均衡:Ribbon4、服务之间调用:Feign5、服务熔断:Hystrix---因官网不继续维护,可以使用阿里提供的Alibaba Sentinel轻量级的流量控制、熔断降级 Java 库6、配置中心:config---如果不想自己维护,可以使用阿里云nacos作为配置中...原创 2019-12-24 17:57:58 · 1005 阅读 · 1 评论 -
java之并发工具类信号量(Semaphore)
java并发工具类1、CountDownLatch :能够使一个或多个线程等待其他线程完成各自的工作后再执行2、CyclicBarrier : 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。3、Semaphore : 用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源4、Exchange...原创 2019-12-21 17:11:12 · 266 阅读 · 0 评论 -
spring 基础知识
1.控制反转(IOC): 在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的...原创 2019-12-20 16:08:13 · 432 阅读 · 1 评论 -
mybatis 底层原理
https://blog.csdn.net/qq_41737716/article/details/83552103https://blog.csdn.net/qq_30125555/article/details/87954347后期补充原创 2019-12-14 16:39:54 · 120 阅读 · 0 评论 -
springboot 启动流程
后期补充https://www.jianshu.com/p/ef6f0c0de38f原创 2019-12-14 16:34:33 · 158 阅读 · 0 评论 -
springbean 的加载流程
https://www.jianshu.com/p/9ea61d204559原创 2019-12-14 16:33:37 · 162 阅读 · 0 评论