-
工作流--Activiti
摘要:一、工作流 1、工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标, 或者促使此目标的实现”。 2、工作流实现方式 在没有专门的工作流引擎之前,我们之前
阅读全文
-
并发编程相关面试题四
摘要:一、Java开发中用过哪些锁 1、乐观锁 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,在Java中java.util.concurre
阅读全文
-
并发编程相关面试题三
摘要:一、Java当中线程状态有哪些 线程的五大状态分别为:创建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Dead)。 (1)新建状态:即单纯地创建一个线程,创建线程有三种方式,在我的博客:线程的创建,可以自行查看! (2)就绪状态:在
阅读全文
-
并发编程相关面试题二
摘要:一、进程、线程、协程之间的关系 1、进程 电脑的应用程序,都是进程,它有自己的地址空间 包括文本区域(text region)数据区域(data region)和堆栈(stack region) 文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程
阅读全文
-
并发编程相关面试题一
摘要:一、volatile 1、volatile的应用 在多线程并发程序中synchronized和volatile都扮演者着很重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性,能够防止脏读,被volatile关键字修饰的变量,如果值发生了改变,其他
阅读全文
-
AQS
摘要:一、AQS原理 AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。 AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包 二
阅读全文
-
原子类
摘要:原子类 java.util.concurrent.atomic包:原子类的小工具包,支持在单个变量上解除锁的线程安全编程 原子变量类相当于一种泛化的 volatile 变量,能够支持原子的和有条件的读-改-写操作。AtomicInteger 表示一个int类型的值,并提供了 get 和 set 方法
阅读全文
-
CAS无锁模式
摘要:一、java内存模型:JMM 在内存模型当中定义一个主内存,所有声明的实例变量都存在于主内存当中,主内存的数据会共享给所有线程,每一个线程有一个块工作内存,工作内存当中主内存数据的副本当更新数据时,会将工作内存中的数据同步到主内存当中; 二、什么是CAS CAS:Compare and Swap,即
阅读全文
-
Java锁的深度化--重入锁、读写锁、乐观锁、悲观锁
摘要:Java锁 锁一般来说用作资源控制,限制资源访问,防止在并发环境下造成数据错误 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)等等 ) 。这些已经写好提供的锁为我们开发提供了便利。 一、重入锁 重入锁,
阅读全文
-
并发队列
摘要:并发队列 在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 一、ConcurrentLinkedQueue ConcurrentLinkedQueue:是一个适
阅读全文
-
Callable的Future模式
摘要:一、线程实现方式 1.继承Thread类 2.实现Runnable接口 3.线程池 4.Callable 二、无论使用继承Thread类还是实现Runnable接口,还是使用线程池都没有办法解决2个问题 1.线程执行没有返回值结果 2.线程执行没有办法抛出异常,只能自己通过try-catch解决 三
阅读全文
-
线程池
摘要:线程池 一、什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等
阅读全文
-
并发工具类
摘要:并发工具类 一、CountDownLatch CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。 CountDownLatch是一个同步计数器,初始化的时候传入需要计数的线程等待数,可以是需要等待执行完成的线程数,或者大于; 作用:用来协
阅读全文
-
并发编程专题
摘要:一、概述 串行:一个线程在处理操作; 并行:多个线程在处理操作; 并发编程:在多线程环境下,应用程序的执行; 并发编程的目的:同分运用到资源,提供程序的效率 什么情况下用到并发编程: 1.在线程阻塞时,导致应用程序停止; 2.处理任务时间过长,可以创建子任务,来进行分段处理; 3.间断任务执行; 二
阅读全文
-
HashMap底层源码剖析
摘要:HashMap底层源码剖析 1、HashMap底层用到的数据结构 数组+单向链表+红黑树 数组:数组每一项都是一个链表,其实就是数组和链表的结合体 单向链表:当法神hash碰撞时,首先会找到数组对应位置,然后1.8采用尾插入法(1.7采用头插入法),形成一个单项链表结构 红黑树:当数组中每项的链表长
阅读全文
-
ConcurrentHashMap底层实现
摘要:ConcurrentHashMap底层实现 1、ConcurrentHashMap和HashTable区别 ConcurrentHashMap融合了hashtable和hashMap二者的优势; hashTable是做了同步的,hashMap没有同步,所以hashMap在单线程情况下效率高,hash
阅读全文
-
双列集合Map相关面试题
摘要:一、了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二、HashMap和HashTable之间的区别 1、定义 HashMap底层基于数组+单向链表(红黑树),非线程安全,允许有空的键和值
阅读全文
-
Map与HashMap
摘要:一、Map 1、关系 Map: 双列数据,存储key-value对的数据 类似于高中的函数:y = f(x) HashMap: 作为Map的主要实现类;线程不安全的,效率高;存储null的key和value LinkedHashMap: 保证在遍历map元素时,可以按照添加的顺序实现遍历。 原因:在
阅读全文
-
单列集合List
摘要:1、Vector和ArrayList以及LinkedList区别和联系、应用场景 线程安全: Vector:如果创建Vector时没有指定容量,则默认容量为10,底层基于数组实现,线程是安全的,底层采用synchronized同步方法进行加锁 Vector与ArrayList一样,也是通过数组实现的
阅读全文
-
类加载器
摘要:一、类加载 JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。 二、类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、链接(验证
阅读全文
-
Tomcat8优化--代码优化
摘要:代码优化 优化,不仅仅是在运行环境进行优化,还需要在代码本身做优化,如果代码本身存在性能问题,那么在其他方面再怎么优化也不可能达到效果最优的。 1、尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,
阅读全文
-
Tomcat8优化--JVM字节码
摘要:JVM字节码 前面我们通过tomcat本身的参数以及jvm的参数对tomcat做了优化,其实要想将应用程序跑的更快、效率更高,除了对tomcat容器以及jvm优化外,应用程序代码本身如果写的效率不高的,那么也是不行的,所以,对于程序本身的优化也就很重要了。 对于程序本身的优化,可以借鉴很多前辈们的经
阅读全文
-
Tomcat8优化--调整tomcat参数和JVM参数进行优化
摘要:一、调整tomcat参数 1、禁用APJ服务 ①、修改conf目录下的service.xml文件 #关闭服务 ./shutdown.sh #切换到conf目录 cd ../conf/ #编辑server.xml文件 vi server.xml 启动服务: #切换目录 cd ../bin #启动服务
阅读全文
-
Tomcat8优化--Apache JMeter测试
摘要:一、部署测试java web项目(压力测试环境搭建) 1、mysql环境 #切换到mysql目录 cd /usr/local/mysql #查看mysql环境 rpm -qa | grep -i mysql 2、创建dashboard数据库 ①、登陆到mysql service mysql star
阅读全文
-
Tomcat8优化
摘要:一、Tomcat8优化 Tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对Tomcat的优化也变得非常重要了。 对于Tomcat的优化,主要是从2个方面入手,一是,Tomcat自身的配置,另一个是Tomcat所运行的jvm虚拟机的调优。 二、Tomcat配置优化 1、环境 虚拟机I
阅读全文
-
可视化GC日志分析工具
摘要:一、GC日志输出参数 前面通过-XX:+PrintGCDetails可以对GC日志进行打印,我们就可以在控制台查看,这样虽然可以查看GC的信息,但是并不直观,可以借助于第三方的GC日志分析工具进行查看。 在日志打印输出涉及到的参数如下: ‐XX:+PrintGC 输出GC日志 ‐XX:+PrintG
阅读全文
-
垃圾收集器以及内存分配
摘要:一、分类 在jvm中,实现了多种垃圾收集器,包括:串行垃圾收集器、并行垃圾收集器、CMS(并发)垃圾收集器、G1垃圾收集器 二、串行垃圾收集器 串行垃圾收集器,是指使用单线程进行垃圾回收,垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停,等待垃圾回收的完成。这种现象称之为STW(
阅读全文
-
JVM垃圾回收
摘要:一、什么是垃圾回收 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。 1、C/C++语言的垃圾回收 在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,通过delete关键字释放内存资源。
阅读全文
-
VisualVM工具的使用
摘要:概述 VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。 VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。 内存信息 线程信息
阅读全文
-
jstack的使用
摘要:一、概述 有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增高了、出现了死锁、死循环等,我们该如何分析呢? 由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要看下jvm的内部线程的执行情况,然后再进行分析查找出原因。 这个时候,就需要借助于j
阅读全文
-
jmap的使用以及内存溢出分析
摘要:一、jmap的使用以及内存溢出分析 前面通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容,如:内存使用情况的汇总、对内存溢出的定位与分析 1、查看内存使用情况 jmap -heap 29720 2、查看内存中对象数量及大小 #查看所有对象,包括活跃以及非活跃的 jm
阅读全文
-
jvm的内存模型
摘要:一、jdk1.7的堆内存模型 1、Young 年轻区(代) Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Surv
阅读全文
-
jvm运行参数
摘要:1、我们为什么要对jvm做优化? 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负载突然升高 在多线程应用下,如何分配线程的数量? 2、jvm的运行参数 在jvm中有很多的参数可以进
阅读全文
-
Spring Data ElasticSearch的使用
摘要:一、Spring Data ElasticSearch简介 1、什么是Spring Data Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA
阅读全文
|