- 博客(30)
- 收藏
- 关注
原创 Java 中 volatile 的深入讲解
内存屏障是一种指令,用于限制指令重排序和确保内存操作的可见性。原子性:volatile 变量的读写操作是原子的,但复合操作(如 i++)不是原子的,需要使用 synchronized 或 Atomic 类来保证复合操作的原子性。禁止指令重排序优化:volatile 变量在写操作之前的操作不会被重排序到写操作之后,同样地,volatile 变量在读操作之后的操作不会被重排序到读操作之前。读操作:当一个线程读取一个 volatile 变量时,JMM 会将该线程的本地内存设置为无效,并从主内存中读取最新的值。
2024-07-08 17:25:40 688
原创 领域驱动设计 (DDD)
定义限界上下文的边界,确保每个上下文内的模型独立且一致。使用上下文映射图(Context Map)来表示上下文之间的关系。
2024-07-03 17:07:16 418
原创 微服务架构拆分
微服务架构是一种软件开发方式,将应用程序分解为一组小的、独立部署的服务。每个服务都围绕一个特定的业务功能构建,能够独立开发、部署和扩展。微服务通过轻量级的通信机制(通常是HTTP或消息队列)进行交互。按业务功能拆分是最常见的微服务拆分方法,将系统按照业务功能模块进行分割。按数据拆分是根据数据的归属和访问频率,将系统按数据进行分割。按团队拆分是根据开发团队的组织结构,将系统按团队进行分割。微服务架构的拆分是一个复杂而关键的过程,需要根据业务需求、数据模型和团队结构等多方面因素进行合理规划。
2024-07-02 10:53:44 290
原创 分布式事务
分布式事务是指跨越多个独立的资源(如数据库、消息队列等)的一组操作,这些操作必须要么全部成功,要么全部失败,从而确保系统的一致性。分布式事务的实现需要在多个独立的节点之间进行协调,这带来了诸多挑战。两阶段提交协议 (2PC) 是一种经典的分布式事务协议,分为两个阶段:准备阶段和提交阶段。三阶段提交协议 (3PC) 是对两阶段提交协议 (2PC) 的改进,增加了超时机制和预提交阶段,以减少阻塞和单点故障问题。
2024-07-02 10:40:30 464
原创 微服务架构:深入浅出
微服务架构通过将复杂系统拆分为多个独立服务,提升了系统的灵活性和可扩展性。然而,实施微服务也带来了运维和管理的挑战。通过合理的服务划分、使用现代容器化技术和编排工具,以及实施全面的监控和日志系统,可以有效地应对这些挑战,实现高效的微服务架构。希望这篇博客能帮助你理解微服务的基本概念、优势、挑战和实现方法。如果你有任何问题或想法,欢迎在评论区留言讨论!作者: Kevin发布日期: 2024年6月20日。
2024-06-20 15:34:16 334
原创 dependencyManagement
同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。今天创建了一个多模块的工程,在父模块中已经添加了依赖,但是在子模块中的代码里还是依旧提示缺少依赖。
2023-04-23 10:45:10 172
原创 springBatch批处理框架(二)实战
一·、概览之前我们了解了如何创建一个springBatch的项目,这篇文章我们一起来学习一下,如何应用框架进行数据。
2022-05-02 23:00:59 1496 4
原创 利用策略模式优化if-else
一、定义策略模式(Strategy Pattern):策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化.二、优缺点优点:1.策略模式符合开闭原则。2.可以避免使用多重条件判断。例如(if...else...等)3.使用策略模式可以提高算法的保密性和安全性。缺点:1.使用方必须知道所有的策略,并且自行决定使用哪一个策略。2.代码中会产生大量的策略类,增
2022-04-24 16:04:30 1855
原创 SpringBatch 批处理框架 (一)
一、批处理特点1.程序幕后的过程,无需用户交互 即可运行。2.在固定的数据集(eg: mysql,oracle等)上执行,直到获取全部预期的数据集。3.可以结合定时任务使用。二、使用场景1.报表数据统计通常我们会获取一段时间的数据,进行数据清洗、整合,最后形成一个可视化的报表,那么这个背后离不开批处理。2.数据交换例如我们将mysql的数据导入到oracle,同时我们还需要进行一些数据的筛选,梳理,那么我们也可以用到批处理。三、SpringBatch (介绍:来自官网)
2022-04-23 22:23:50 2728
原创 Netty介绍与实战(三)之粘包拆包
一、传统NIO架构step1. 我们传统的nio架构已经解决了多路复用,零拷贝等问题,已经十分优秀了,那为什么我们现在Netty如此火热呢?1) 首先他使用简单,基本上都是模板化,我们可以更专注业务。具体使用可参考Netty介绍及实战2)社区活跃,成熟稳定。3)提供编解码功能,和处理粘包、拆包的功能。4)替我们修复了NIO的大量bug , 不需要考虑复杂的网络协议。step2.什么是粘包、拆包?1)上图我们可以看到,所有的message都会放到我们对应的缓冲区当中。缓
2022-04-21 16:32:03 999
原创 Netty介绍及实战(二)之IO与NIO和多路复用与零拷贝
一、Netty到底是什么?什么是多路复用?什么叫做零拷贝?Netty是一个NIO客户端服务器框架,可以快速、轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和简化了网络编程,避免了程序本身去处理断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流等操作,也避免了程序直接对NIO的操作。使我们更加专注于业务的实现。二、性能方面有哪些优势1.更高的吞吐量,更低的延迟2.减少资源消耗3.最小化不必要的内存拷贝三 、why?他是如何做到这么强大的step1.首先我们了解一下什么
2022-04-20 22:25:05 896
原创 AWS从入门到实战 之 创建账户
一、自述一个偶然的机会,加了外企,感受了不同于国内企业的工作氛围和技术文化,在此非常感谢我的各位leader和同事对我工作上的帮助和支持。工作中用到了一些AWS相关的一些组件,但是一直没有系统的学习,总是知其然,希望通过这次系统的学习可以知其所以然,并把学习经历和大家分享。二、如何创建AWS账号1.AWS官网地址:Cloud Computing Services - Amazon Web Services (AWS)AWS提供了一年免费试玩,后面会和大家一一分享常用的服务。2.按
2022-04-17 16:27:26 1989
原创 观察者模式--ApplicationContext
一、观察者模式定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。 目标与观察者之间建立了一套触发机制。缺点:目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。二、 spring.
2021-08-13 11:46:23 163
原创 ArrayList 和 LinkedList 的区别比较
ArrayList:优点:ArrayList 是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询 操作效率会比较高(在内存里是连着放的)。缺点:因为地址连续,ArrayList 要移动数据,所以插入和删除操作效率比较低。LinkedList:优点:LinkedList 基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等 一个连续的地址。对于新增和删除操作,LinkedList 比较占优势。LinkedList 适用于要头尾操 作或插入指定位置的场景。..
2021-08-12 15:46:48 164
原创 软件开发规范
前沿:由于项目前期任务重,时间短等其他原因导致的开发不规范,引起后期维护比较复杂。一、目前存在问题 1)项目分支较多,命名不规范。 2)代码注释不完善,函数名称自注释性较差。 3)缺少长链路功能的技术方案设计和流程图。 4)数据库注释较少,脚本执行容易遗漏。二、解决方案 1)开发阶段统一代码风格,遵守、但可不严格执行《阿里巴巴java开发手册》 2)定期做codeReivew,对复杂...
2021-08-12 15:35:02 275
转载 Docker使用教程超详细
Table of Contents1. Docker 简介 1.1. Docker 守护进程 1.2. Docker 客户端 1.3. Docker 内部 1.3.1. Docker 镜像 1.3.2. Docker 仓库 1.3.3. Docker 容器 1.4. libcontainer 1.5. 命名空间「Namespaces」 1.5.1. pid namespace 1.5.2. mnt namespace 1.5.3. net nam
2021-08-11 15:04:25 13173
原创 redis监听key过期事件
import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;import org.springframework.data.redis.listener.RedisMessageListenerContainer;imp.
2021-08-11 09:33:30 149
原创 Callable结合CountDownLatch实战应用
一、需求场景描述1.批量上传1000个文件,并根据返回结果进行crud操作。二、具体coding如下
2021-08-10 11:38:15 665
原创 springcloud-alibaba 实战之springboot结合nacos
springcloud-alibaba 实战之springboot结合nacos 最近在学习springCloud相关的知识,看了网上的一些博客,里面还是有一些小坑的。故在学习之时整理了相关的实战记录,知识共享、方便你我他。如有不对的地方,欢迎留言指出提示:本文是基于macOs搭建的,windows大同小异,如有问题,可留言。springboot+nacos实战springcloud-alibaba 实战之springboot结合nacos前言一、nacos是什么?二、使用步骤1.官网下载na
2021-08-09 17:29:29 408
原创 springboot1.x集成flyway
一、flyway简介 1.Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步. 2.运行流程如下: a、 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history b、 紧接着Flyway将开始扫描文件系统或应用程序...
2021-08-09 16:20:45 201
原创 synchronized和ReentrantLock的区别
synchronized原理:依赖操作系统底层互斥锁实现的,会在使用synchronized代码块前后加上monitorEnter和monitorExist指令实现的。当多个线程进入同步代码块后,首先进入entryList,当一个线程获取到monitor锁之后,就赋值给当前线程,并且技术器加1。线程执行完毕,释放锁,计数器减1,当前线程设置为null.如果执行了wait命令则进入waitSet队列,使用notify活着notify之后重新加入entryList队列ReentrantLock原理:是基
2021-06-14 16:23:13 86
原创 java相关面试题汇总
一、spring相关的面试题1.JDK动态代理和cgLib的区别jdk:jdk动态代理只提供接口的代理,不支持类的代理。核心是InvocationHandler和proxy类
2021-03-14 22:31:07 77
转载 spring1.x实现读写分离
转载文章:https://www.jb51.net/article/106555.htm如有侵权立即删除本文实现案例场景:某系统除了需要从自己的主要数据库上读取和管理数据外,还有一部分业务涉及到其他多个数据库,要求可以在任何方法上可以灵活指定具体要操作的数据库。为了在开发中以最简单的方法使用,本文基于注解和AOP的方法实现,在spring boot框架的项目中,添加本文实现的代码类后,只需要配置好数据源就可以直接通过注解使用,简单方便。一配置二使用启动类注册动态数据源配置文件中配置多个
2020-08-12 15:33:49 155
原创 java程序员工作随笔-抽象工厂模式
抽象工厂模式学习笔记1.抽象工厂模式百度定义:**抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。2...
2020-03-01 14:11:56 196
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人