![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java技术
文章平均质量分 87
夜夜流光相皎洁_小宁
九零后技术大叔,从事信息安全行业,架构师,JavaWeb、大数据、移动应用开发,关注移动应用安全、大数据安全、云原生安全、网络安全渗透、攻防等领域;喜欢交流和分享,喜欢读书,什么书都会读一读,比较杂;闲暇时间喜欢做技术总结,喜欢探索技术、解锁新技能。
展开
-
分布式锁实现方案-基于Redis实现的分布式锁
在当今大数据、高并发的互联网时代,分布式系统已经成为了许多企业架构设计的首选。而在分布式系统中,实现并保证数据一致性和线程安全性是一个极具挑战性的问题。Redis作为一个高性能缓存框架,它的setnx()指令具有独占性、互斥性,满足分布式锁的特性要求,因此基于Redis可以实现分布式锁。今天我们就来看下,基于Redis,如何实现单机锁和RedLock锁。Redlock分布式锁作为一种解决方案,在高并发场景下能够提供可靠的分布式锁服务。然而,Redlock分布式锁也并非完美无缺,它在高并发环境下仍面临一些问题原创 2024-06-23 10:15:18 · 809 阅读 · 1 评论 -
分布式锁实现方案-基于zookeeper的分布式锁实现(原理与代码)
分布式锁是一种用于控制分布式系统中对共享资源访问的同步机制,它确保在多个节点或进程中访问共享资源时的排他性。分布式锁的应用场景广泛,如防止多个用户同时修改数据、控制分布式系统中对共享资源的并发访问等。分布式锁的实现方式主要有三种,包括:基于数据库的实现方式。基于缓存(如Redis或Memcached)的实现方式。基于ZooKeeper的实现方式等。在选择和使用分布式锁时,需要考虑到具体的业务需求、性能要求以及系统的可用性和可扩展性。今天我们就来看下如何基于Zookeeper实现分布式锁。原创 2024-04-20 20:29:33 · 1432 阅读 · 4 评论 -
并发编程-CAS介绍(结合源码和hostpot说明)
CAS全称 Compare And Swap(比较与交换),是一种无锁算法,是线程并发运行时用到的一种技术。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。在学习并发编程的时候,CAS乐观锁是不可获取的内容,它的优点在于竞争资源的过程没有阻塞线程,是一种无锁化设计,不涉及操作系统用户模式和内核模式的转换,但是它的缺点也很明显,比如自旋问题,ABA问题、还有它本身的局限性。今天我们就系统的来看下这个CAS乐观锁。原创 2024-03-12 11:18:25 · 1203 阅读 · 2 评论 -
并发编程-AQS介绍(结合源码说明)
AQS全称为AbstractQueuedSynchronizer,它提供了一个FIFO(First in First out 先入先出)队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。想要学习并发编程,就不得不学习AQS,我们一起来看看这个神奇的队列吧,看他是如何实现的锁。原创 2024-03-11 16:10:23 · 972 阅读 · 2 评论 -
Java 三大并大特性-有序性介绍(结合代码、分析源码)
在并发编程中分析线程安全的问题时往往需要切入点,这其中就包含三条性质:原子性,有序性和可见性。JMM(Java内存模型)就是基于这三个特性展开的,前面的文章中我们已经分析了原子性,现在我们结合代码和字节码、以及jvm hotspot源码一起来看下有序性。原创 2024-03-11 15:31:54 · 1066 阅读 · 2 评论 -
系统并发性能指标与测试工具介绍
作为开发人员来说,想要开发出高并发、高性能的程序,了解相关并发编程和可扩展、可伸缩的架构技术很重要,但是对于如何验证和测试系统的性能,找出系统的性能瓶颈和缺陷,也很重要,准确了解系统的性能测试指标的概念和含义,对于准确做出性能测试方案很重要,今天我们就来聊下性能测试相关的指标,且介绍下市面上常见的商业、开源测试工具软件原创 2024-03-10 12:33:33 · 1044 阅读 · 2 评论 -
Java 汇编源码查看环境搭建
JVM的学习很多时候得看着字节码和汇编代码才好理解,而作为Java程序员来说,其实更希望在开发环境中能查看汇编代码,这样其实更有助于我们平时的代码调优和JVM的学习。那么我们应该如何搭建呢?跟着我一起动手来搭建下吧原创 2024-03-10 11:26:39 · 948 阅读 · 2 评论 -
Java 三大并大特性-可见性介绍(结合代码、分析源码)
在并发编程中分析线程安全的问题时往往需要切入点,这其中就包含三条性质:原子性,有序性和可见性。JMM(Java内存模型)就是基于这三个特性展开的,前面的文章中我们已经分析了原子性,现在我们结合代码和字节码、以及jvm hotspot源码一起来看下可见性。原创 2024-02-13 13:41:45 · 1258 阅读 · 2 评论 -
Java并发三大特性-原子性介绍(结合代码,分析源码)
在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心 :JMM抽象内存模型以及happens-before规则,三条性质:原子性,有序性和可见性。今天就来讲讲高并发特性中的原子性。原创 2024-02-08 12:16:17 · 1268 阅读 · 1 评论 -
Spring Framework(6.x)源码编译与源码阅读入门
通过阅读源码,我们可以得到很多好处,比如:加强编程语言理解、提高代码质量和可维护性、提升自我学习能力、增强系统理解和设计能力、开阔视野等。而Spring 技术框架体系,在编程界,特别是Java Web 开发领域,可谓是撑起半边天的存在,而且里面包含很多优秀的设计和宏大的编程思想,为我们技术人员成长的提供很好的学习资料和素材,今天我们就来编译下Spring Framework的源码,为后面的源码阅读做好准备。原创 2024-02-02 12:53:52 · 1429 阅读 · 1 评论 -
JDK1.8源码环境搭建介绍
阅读源代码的能力算是程序员的一种底层基础能力之一,这个能力之所以重要,原因在于我们日常工作中不可避免的需要阅读或者接手他人的项目;在我们升级打怪的职业生涯中,学习优秀的源码,能帮助我们提高编程能力,提升编程思维,领略世界优秀编程工程师的风采。JDK作为Java编程的核心基础,我们有必要去学习和阅读JDK的源代码,但是很多初级工程师在阅读优秀的源码之前,都会遇到搭建环境的问题,今天我们一起来动手搭建下JDK的源码环境。原创 2024-02-01 15:28:26 · 893 阅读 · 1 评论 -
Java线程的基础概念介绍(结合代码说明)
Java是一种通过解释方式来执行的语言,其语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言,是一种广泛使用的编程语言,它的设计旨在结合功能的强大性和易用性。本文章主要讲解一下Java 进程、线程、多线的概念,解析什么是串行、并行、并发,举例说明同步、异步、阻塞、非阻塞、同步阻塞、同步非阻塞、异步阻塞、异步非阻塞等的相关概念,结合代码说明线程创建的四种方式、线程的相关使用和线程结束的四种方式等相关线程内容。原创 2024-01-28 15:02:39 · 871 阅读 · 1 评论 -
Drools规则案例实战(消费积分案例)
Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现;由推理引擎发展而来,是一种嵌入在应用程序中的组件,它实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策规则。今天我们通过一个案例来给大家演示下如何实现Drools规则引擎实现决策业务。原创 2024-01-25 10:59:01 · 1161 阅读 · 1 评论 -
Drools高级语法讲解(结合代码实例讲解)
Drools 是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来。Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。今天我们来介绍下Drools高级语法规则。原创 2024-01-24 11:52:47 · 1367 阅读 · 2 评论 -
中介者模式介绍
中介者模式定义一个单独的(中介)对象,来封装一组对象之间的交互,将这组对象之间的交互委派给予中介对象交互,来避免对象之间的交互。中介者对象就是用于处理对象与对象之间的直接交互,封装了多个对象之间的交互细节。中介模式的设计跟中间层很像,通过引入中介这个中间层,将一组对象之间的交互关系从多对多的网状关系转换为一对多的星状关系。原来一个对象要跟N个对象交互,现在只需要跟一个中介对象交互,从而最小化对象之间的交互关系,降低代码的复杂度,提高代码的可读性和可维护性。今天我们就来讲解下中介者设计模式。原创 2024-01-24 10:23:23 · 1253 阅读 · 2 评论 -
Drools 规则属性讲解(结合代码实例讲解)
Drools规则引擎的基本概念包括将过程中的对象与实现这些过程的逻辑分离,逻辑则通过编写规则来进行定义。对于每个过程,规则引擎将识别要应用的规则以及要对其执行操作的对象。如果逻辑发生变化,可以通过更新规则而不影响系统的整体架构。今天我们就结合代码实例来聊一聊Drools规则引擎的规则属性。原创 2024-01-23 11:47:56 · 1082 阅读 · 2 评论 -
解释器模式介绍
解析器模式用于定义语言的语法规则表示,并提供解释器来处理句子中的语法。解释器模式使用频率不算高,通常用来描述如何构建一个简单“语言”的语法解释器。它只在一些非常特定的领域被用到,比如编译器、规则引擎、正则表达式、SQL 解析等。不过,了解它的实现原理同样很重要,能帮助你思考如何通过更简洁的规则来表示复杂的逻辑。今天我们就来讲解下解析器设计模式。原创 2024-01-23 10:37:30 · 1211 阅读 · 2 评论 -
Drools规则文件结构与语法讲解(结合代码讲解语法)
Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。释义JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。Drools是一套业务规则管理系统(BRMS)解决方案,今天我们就来讲解下Drools的规则文件结构并结合代码讲解下语法内容。原创 2024-01-22 10:59:59 · 1340 阅读 · 2 评论 -
命令模式介绍
命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不 同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、撤销等 (附加控制)功能。核心是将指令信息封装成一个对象,并将此对象作为参数发送给接收方去执行,达到使命令的请求与执行方解耦,双方只通过传递各种命令对象来完成任务。在实际的开发中,如果你用到的编程语言并不支持用函数作为参数来传递,那么就可以借助命令模式将函数封装为对象来使用。今天我们就来讲讲命令设计模式。原创 2024-01-22 10:20:50 · 1153 阅读 · 2 评论 -
备忘录模式介绍
备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。该模式提供了一种对象状态的撤销实现机制,当系统中某一个对象需要恢复到某一历史状态时可以使用备忘录模式进行设。今天我们就来介绍下备忘录设计模式。原创 2024-01-19 10:46:21 · 937 阅读 · 1 评论 -
访问者模式介绍
访问者模式允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离。该模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展。今天我们就来介绍下访问者模式。原创 2024-01-19 10:25:31 · 1793 阅读 · 1 评论 -
迭代器模式介绍
迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需要暴露该对象的内部细节。在软件系统中,容器对象拥有两个职责:一是存储数据,而是遍历数据。从依赖性上看,前者是聚合对象的基本职责。而后者是可变化的,又是可分离的。因此可以将遍历数据的行为从容器中抽取出来,封装到迭代器对象中,由迭代器来提供遍历数据的行为,这将简化聚合对象的设计,更加符合单一职责原则。今天我们就来介绍下迭代器设计模式。原创 2024-01-18 11:13:55 · 1023 阅读 · 3 评论 -
状态模式介绍
状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中(用类来表示状态) ,使得对象状态可以灵活变化。今天我们就来介绍下状态设计模式。原创 2024-01-18 10:53:34 · 1143 阅读 · 3 评论 -
模板方法模式介绍
模板方法是在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。模板方法中的算法可以理解为广义上的业务逻辑,并不是特指某一个实际的算法。定义中所说的算法的框架就是模板,包含算法框架的方法就是模板方法。模板方法模式是一种基于继承的代码复用技术,它是一种类行为模式。模板方法模式其结构中只存在父类与子类之间的继承关系。今天我们就来介绍下模板方法模式。原创 2024-01-17 14:35:24 · 1173 阅读 · 3 评论 -
观察者模式介绍
观察者模式定义对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖项都会自动得到通知和更新。观察者模式它是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应的作出反应。观察者模式的应用场景非常广泛,小到代码层面的解耦,大到架构层面的系统解耦,再或者一些产品的设计思路,都有这种模式的影子。今天我们就来介绍下观察者模式。原创 2024-01-17 12:26:27 · 1088 阅读 · 1 评论 -
Redis主从+哨兵集群(基于CentOS-8.0)高可用部署方案
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库;它的使用场景很多,比如在分布式场景下,基于Redis实现注册中心,基于Redis实现分布式锁,分布式ID等,也可基于Redis的发布/订阅模式实现广播消息,在高并发场景下,还可以使用Redis作为缓存,提高数据查询速率和减少数据库并发压力等等。今天我们就来分享下,如何部署高可用的Redis集群。原创 2024-01-16 15:57:53 · 1456 阅读 · 1 评论 -
享元模式介绍
享元模式摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,从而让我们能在有限的内存容量中载入更多对象。享元模式要解决的核心问题就是节约内存空间,使用的办法是找出相似对象之间的共有特征,然后复用这些特征。所谓“享元”,顾名思义就是被共享的单元。今天我们就来学习下享元模式。原创 2024-01-16 15:19:23 · 1224 阅读 · 1 评论 -
组合模式介绍
组合模式就是将对象组合成树形结构以表示整个部分的层次结构。组合模式可以让用户统一对待单个对象和对象的组合。组合模式更像是一种数据结构和算法的抽象,其中数据可以表示成树这种数据结构,业务需求可以通过在树上的递归遍历算法来实现。今天我们就来介绍下组合设计模式。原创 2024-01-16 12:32:43 · 1194 阅读 · 5 评论 -
外观模式介绍
外观模式为子系统中的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。今天我们就来介绍下外观模式。原创 2024-01-16 12:18:41 · 1108 阅读 · 1 评论 -
适配器模式介绍
适配器模式就是将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。今天我们就来介绍下适配器模式。原创 2024-01-16 11:30:46 · 1210 阅读 · 1 评论 -
装饰器模式介绍
装饰器模式就是动态的给一个对象添加一些额外的职责。就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系。今天我们就来介绍下装饰器设计模式。原创 2024-01-16 10:50:30 · 976 阅读 · 3 评论 -
桥接模式介绍
桥接模式属于结构型模式,它用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中类的个数 (避免了继承层次的指数级爆炸).。今天我们就来介绍下桥接模式。原创 2024-01-16 10:20:11 · 1341 阅读 · 1 评论 -
基于MyCat2.0实现MySQL分库分表方案
虽然说现在市场上出现了很多类型的数据库,比如MongoDB、时序数据库InfluxDB、内存数据库Redis等等,但是关系型数据库仍然是不可替代的,开源关系型数据库MySQL更是大受欢迎;在高并发场景中,MySQL基于主从架构实现的一主多从,多主多从部署方式,多个服务器共同分摊压力,解决了单机性能问题,实现了数据库的高可用,但是对于单表、大表的读写性能问题,只依赖MySQL本身提供的机制并不能解决;本文就介绍下基于第三方MyCat中间件实现MySQL读写分离以及分库分表的方案。原创 2024-01-05 11:26:57 · 1379 阅读 · 9 评论 -
Java内存屏障
内存屏障,也称内存栅栏,内存栅障,屏障指令等, 是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。程序编译优化、cache访问优化、多核等导致CPU指令乱序执行,最终程序运行不符合我们预期。内存屏障会设置一个同步点,保障屏障前后的多核内存访问数据的一致性。原创 2023-06-21 10:02:35 · 31507 阅读 · 1 评论 -
聊聊指令重排序
java语言规范规定JVM线程内部维持顺序化语义。即只要程序的最终结果与它顺序化情况的结果相等,那么指令的**执行顺序可以与代码顺序不一致,此过程叫指令的重排序。**原创 2023-06-19 20:27:26 · 30987 阅读 · 1 评论 -
聊聊Java内存模型(JMM)
它本身只是一个抽象的概念,并不真实存在,它描述的是一种规则或规范,是和多线程相关的一组规范。通过这组规范,定义了程序中对各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。需要每个JVM 的实现都要遵守这样的规范,有了JMM规范的保障,并发程序运行在不同的虚拟机上时,得到的程序结果才是安全可靠可信赖的。Java内存模型围绕着在并发过程中如何处理这三个特性而建立的模型。原创 2023-06-18 16:51:05 · 30946 阅读 · 1 评论 -
Java深浅拷贝介绍
本文介绍了Java中的深浅拷贝技术,同时介绍了实现深浅拷贝的原理和实践案例原创 2023-06-11 11:25:35 · 30843 阅读 · 1 评论 -
Java中创建对象的几种方式
本文介绍了Java中对象创建的几种方式:new 、反射、clone、反序列化操作等原创 2023-06-11 11:14:13 · 232 阅读 · 1 评论 -
Java中重载和重写的区别
本文介绍了Java中重载和重写的区别以及其各自的特点原创 2023-06-10 20:37:04 · 104 阅读 · 0 评论 -
Java中的四种对象引用类型
本文介绍了Java中的四种对象引用类型以及其使用场景原创 2023-06-10 20:31:12 · 170 阅读 · 0 评论