java基础和并发编程
文章平均质量分 89
java基础和并发编程
yangyanping20108
这个作者很懒,什么都没留下…
展开
-
一次线上环境YoungGC 停顿超长时间调优
JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响。在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解。同时,在进行性能调优前,您需要理解并掌握以下的相关基础理论知识。原创 2023-11-06 13:52:26 · 559 阅读 · 0 评论 -
基于 Spring 实现观察者模式
观察者模式又称为 发布-订阅模式,定义了对象之间一对多依赖关系,当目标对象(被观察者)的状态发生改变时,它的所有依赖者(观察者)都会收到通知。一个观察目标可以对应多个观察者,而这些观察者之间没有相互联系,所以能够根据需要增加和删除观察者,使得系统更易于扩展,符合开闭原则;并且观察者模式让目标对象和观察者松耦合,虽然彼此不清楚对方的细节,但依然可以交互,目标对象只知道一个具体的观察者列表,但并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。原创 2023-06-28 20:57:12 · 692 阅读 · 0 评论 -
审批流设计
审批流原创 2022-07-30 10:30:12 · 2747 阅读 · 1 评论 -
动态代理之jdk和cglib
CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。................................................原创 2022-07-04 09:37:33 · 330 阅读 · 0 评论 -
热部署系统实现
是指在不关闭或重启服务的情况下,更新Java类文件或配置文件,实现修改内容生效;通过热部署,可提高开发效率,节省程序打包重启的时间,同时,可实现生产环境中需要不停机或重启的服务的升级......原创 2022-06-28 18:02:07 · 3960 阅读 · 0 评论 -
Javassist字节码编程
Javassist是可以动态编辑Java字节码的类库。它可以在Java程序运行时定义一个新的类,并加载到JVM中;还可以在JVM加载时修改一个类文件。Javassist使用户不必关心字节码相关的规范也是可以编辑类文件的..............................................................................原创 2022-06-14 20:57:15 · 99 阅读 · 0 评论 -
数据结构四之符号表
符号表的概念符号表最主要的目的是将一个键和一个值关联起来,符号表能够将存储的数据元素是一个键和一个值共同组成键值对数据,我们可以根据键来查找对应的值。原创 2022-04-12 09:43:05 · 397 阅读 · 0 评论 -
数据结构三栈和队列
栈百度百科栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的概念栈是一种基于先进先出FIFO的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在原创 2022-04-09 21:49:07 · 244 阅读 · 0 评论 -
系统设计六-单元测试和Mock的应用
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。原创 2022-04-07 16:30:01 · 923 阅读 · 0 评论 -
数据结构三链表
链表是一种物理存储单元上非连续,非顺序的存储结构。其物理结构不能直观的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表的指针连接顺序实现的。链表由一系列的结点组成,链表中的每一个元素称为结点,结点可以在运行时动态生成。原创 2022-04-02 20:44:39 · 446 阅读 · 0 评论 -
数据结构一入门介绍
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。...原创 2022-03-29 20:36:25 · 155 阅读 · 0 评论 -
数据结构二顺序表
线性表数据结构有很多种,一般来说,按照数据的逻辑结构对其进行简单的分类,包括线性结构和非线性结构两类。线性结构简单地说,线性结构就是表中各个结点具有线性关系。如果从数据结构的语言来描述,线性结构应该包括如下几点:[5]1、线性结构是非空集。[5]2、线性结构有且仅有一个开始结点和一个终端结点。[5]3、线性结构所有结点都最多只有一个直接前驱结点和一个直接后继结点。[5]线性表就是典型的线性结构,还有栈、队列和串等都属于线性结构。...原创 2022-04-01 00:06:51 · 505 阅读 · 0 评论 -
系统设计五-JavaBean转换利器MapStruct
JavaBean转换利器MapStruct原创 2022-02-20 13:14:01 · 826 阅读 · 0 评论 -
系统设计之四-妙用lombok和lombok实现原理
lombok简介Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注解,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。lombok官网地址:Project Lomboklombok maven坐标 <dependency> <groupId>org.projectlombok</groupId&g..原创 2022-02-20 10:45:25 · 833 阅读 · 0 评论 -
系统设计之二妙用验证器Validator改善代码
使用 Preconditions 验证入参在开发中,我们常常会使用 Preconditions 来验证接口的入参是否符合要求,代码如下@Componentpublic class FlowCmdServiceImpl implements FlowCmdService { @Override public void withdraw(@Valid FlowWithdrawCmd cmd) { Preconditions.checkArgument(cmd !=原创 2021-11-15 17:18:08 · 843 阅读 · 1 评论 -
系统设计之一妙用泛型改善代码
ParameterizedType泛型/参数化类型public interface java.lang.reflect.ParameterizedType extends Type方法摘要 Type[] getActualTypeArguments()返回表示此类型实际类型参数的Type对象的数组。 Type getRawType()返回Type对象,表示此类型是其成员之一的类型 ...原创 2021-11-11 10:36:09 · 820 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。使用多个简单的对象一步一步构建成一个复杂的产品对象。使用建造模式可以使客户端不需要知道所生成的产品对象有哪些零件,每个产品的对应零件彼此有何不同,是怎么样建造出来的,以及怎么样组成产品。原创 2021-03-15 20:46:50 · 90 阅读 · 0 评论 -
设计模式之命令模式
命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能原创 2021-03-07 17:52:06 · 195 阅读 · 0 评论 -
Java并发编程八之CopyOnWriteArraySet
阅读目录什么是CopyOnWrite容器CopyOnWriteArraySet实现原理什么是CopyOnWrite容器CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想原创 2021-01-28 09:08:50 · 232 阅读 · 0 评论 -
Java并发编程六之CopyOnWriteArrayList
阅读目录CopyOnWriteArrayList是什么为什么使用CopyOnWriteArrayListCopyOnWriteArrayList实现CopyOnWriteArrayList是什么CopyOnWriteArrayList 是jdk1.5以后并发包中提供的一种并发容器,写操作通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也成为“写时复制容器”,类似的容器还有 CopyOnWriteArraySet。为什么使用CopyOnWriteArrayList众所周知,集合框架原创 2021-01-22 13:47:09 · 243 阅读 · 1 评论 -
Java并发编程五之ReentrantLock
阅读目录什么是CLH什么是CLHCLH锁即Craig, Landin, and Hagersten (CLH) locks,CLH锁是一个自旋锁,能确保无饥饿性,提供先来先服务的公平性。CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋。...原创 2021-01-30 10:09:58 · 137 阅读 · 1 评论 -
Java并发编程四之线程
阅读目录什么是线程为什么要使用线程线程的简单使用线程的类图什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。同一进程中的多条线程将共原创 2021-01-25 14:44:17 · 113 阅读 · 0 评论 -
Java并发编程三之Future
Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。(因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果)原创 2021-01-17 08:52:12 · 252 阅读 · 0 评论 -
Java并发编程二之线程池
阅读目录什么是线程池为什么使用线程池线程池是什么线程池的实现原理什么是线程池线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。为什么使用线程池因为 Java 中创建一个线程,需要调用操作系统内核的 API,操作系统要为线程分配一系列的资源,成本很高,所以线程是一个重量级的对象,应该避免频繁创建和销毁。使用线程池就能很好地避免频繁创建和销毁。线程池是什么线程池是一种生产者——消费者模式原创 2021-01-14 22:52:22 · 148 阅读 · 0 评论 -
Java并发编程一之ThreadLocal
从名字我们就可以看到ThreadLocal叫做本地线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,不可见的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。原创 2021-01-12 16:54:18 · 153 阅读 · 0 评论 -
Java并发编程七之手写lock锁
我们先演示一下在多线程环境下,对共享资源操作不使用锁可能存在的问题。在介绍jvm 的锁synchronized ,java并发包的CAS 以及AQS 中的lock 锁。后面我们会模仿AQS自己手写一个简单的lock 锁原创 2020-09-03 19:57:32 · 475 阅读 · 0 评论