
java
文章平均质量分 59
马各阿牛
这个作者很懒,什么都没留下…
展开
-
生产者 - 消费者模型
1. 使用syncronize实现 static Object[] items = new Object[100]; static int takePoint = 0, putPoint = 0; static AtomicInteger cnt = new AtomicInteger(0); public synchronized static void produce(Object o) throws InterruptedException { w原创 2021-05-27 15:14:09 · 304 阅读 · 2 评论 -
Java应用JVM内存使用情况分析方法
方法一 通过JVM提供的内存分析命令具体步骤如下:①使用ps -ef命令查看java应用的进程pid。②输入命名查看JVM内存使用情况jmap:用来输出所有内存中对象的工具,常用用法:jmap -heap <pid> (打印heap的概要信息,GC使用的算法,heap的配置及JVM堆的使用情况)jmap -histo[:live] <pid> (打印每个class的实例数目,内存占用,类全名信息,live子参数加上只统计活的对象数量)jinfo:用来查看ja.原创 2021-05-25 17:36:47 · 1087 阅读 · 0 评论 -
UML图 - 线段表示
原创 2021-04-19 19:49:59 · 378 阅读 · 0 评论 -
Spring整合Mybatis Mapper接口
编程式给Spring注入Bean方法一,通过BeanDefinition来定义package com;import com.config.AppConfig;import com.model.User;import org.springframework.beans.factory.support.AbstractBeanDefinition;import org.springframework.beans.factory.support.BeanDefinitionB...原创 2021-04-13 08:55:34 · 239 阅读 · 0 评论 -
Bean生命周期
1. 生成BeanDefinition2. 合并BeanDefinition3. 加载类4. 实例化前5. 推断构造方法6. 实例化7. BeanDefinition的后置处理8. 填充属性9. 执行Aware -BeanNameAware - BeanClassLoaderAware - BeanFactoryAware10. 初始化前 a. ApplicationContextAwareProcessor...原创 2021-04-12 11:25:22 · 98 阅读 · 0 评论 -
java jar解压,替换.class,重新打包
#!/bin/shcd /APP/APPecho "当前工作目录"cp APP.jar APP.back.jarecho "备份APP.jar 到 APP.back.jar"pwdmkdir tempecho "创建临时文件夹"cp APP.jar tempecho "拷贝jar包到temp"cd tempjar -xvf APP.jarrm -f APP.jarmv ../APPlcgc/APPlcgc.class ./BOOT-INF/classes/com/APP/il...原创 2021-01-20 15:25:43 · 813 阅读 · 1 评论 -
JDK8_HashMap PUT和RESIZE操作
1. put操作源码 /** * Implements Map.put and related methods. * * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent if true, don't change existing value * @param evict.原创 2021-01-16 12:42:58 · 350 阅读 · 0 评论 -
问题摘录
1. 一致性hash一致性hash算法分布式系统常用的宕机移除和新机器加入的算法把每个节点计算的hash值mod 2^31 - 1, 加入一个hash环为防止数据倾斜等问题,加入虚拟节点的概念, 每次都对新加入的节点虚拟化,使其尽可能均匀的分布在环上当有一个输入进来, 使用treemap找到下一个节点2. java有了基本类型的包装类为什么还要有基本类型我们都知道在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如.原创 2020-12-24 23:45:06 · 201 阅读 · 0 评论 -
注解式开发 - ConstraintValidator,框架级字段校验
例子: 如果存在某个字段为中文,框架直接返回报错annotation注解:import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.*;/** * validator 注解, 判断是否有中文 * 属性 allowBlank :是否允许为空。 * allowBlank为true时,空字符串会通过校验,反之,allowBlank为false时,不会通过校验原创 2020-11-20 10:15:04 · 852 阅读 · 3 评论 -
JAVA - 线程池
https://www.jianshu.com/p/c9b97d2a9abc原创 2020-09-28 19:23:58 · 98 阅读 · 0 评论 -
JAVA - 线程池问题汇总
1. JAVA线程是内核级线程,还是用户级线程 "内核控制线程"是对java线程的描述。 在windows操作系统下, 启动java线程池, 资源监控是能感知到线程的创建的, 所以java线程不是纯用户级线程。 证明java线程不是纯粹用户级线程:java中有个fork join框架,这个框架是利用多处理技术进行maprudce的工作,也就证明了内核是可以感知到用户线程的存在,因此才会将多个线程调度到多个处理器中。还有,java应用程序中的某个线程阻塞,是不会引起整个进程的...原创 2020-08-14 17:29:58 · 195 阅读 · 0 评论 -
Elastic Search 资料索引
官网https://www.elastic.co/cn/JAVA 客户端资料 rest-high-level-clienthttps://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html常用命令查看节点curl -u 905:b9hDgXW3o8BfzxN http://55.10.30.233:8200/添加数据POST li03_msg_rdx/docs{...原创 2020-06-30 16:57:56 · 194 阅读 · 0 评论 -
基于@Aspect的AOP
一、execution表达式首先,先简单了解下execution表达式例如:execution(* com.sample.service.impl..*.*(..))解释如下:符号 含义 execution() 表达式的主体 第一个" *"符号 表示返回值的类型任意 com.sample.service.impl AOP所切的服务的包名,即,我们的业务部分 包名后面的" .." 表示当前包及子包, 一个点的话表示当前包 第二个"*" .原创 2020-05-30 12:18:44 · 351 阅读 · 0 评论 -
java并发---线程不安全类及其同步容器
平时中我们使用的很多类都是线程不安全的,那么下面给出线程不安全的类及其对应的同步容器。同步容器只是加了锁,并不代表并发安全,一般项目不推荐使用。ArrayList------------------------->Vector, StackHashMap------------------------>HashTableCollections.syncronizedXXX(List, ...原创 2018-05-01 14:38:13 · 197 阅读 · 0 评论 -
初级Java工程师面试问题清单
1. sychronized与lock的区别,使用场景,sychronized源码。 简单来说synchronized较为常用,可读性好。lock粒度更细,容易出事,除非性能要求特别高,一般不用lock;2.jvm的minor GC与Full GC触发机制。 Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-t...原创 2018-08-11 19:48:48 · 7381 阅读 · 3 评论 -
Spring aop的实现原理
转载:https://www.cnblogs.com/lcngu/p/5339555.html 简介 前段时间写的java设计模式--代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理。 说起AOP就不得不说下OOP了,OOP中引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一...转载 2018-08-12 16:39:27 · 17522 阅读 · 3 评论 -
设计模式------工厂模式
这里就不介绍静态工厂模式了,因为他的扩展性比较差,实际使用比较少直接上代码,主要包括两个抽象类,Factory和Product,客户端直接调具体的factory类abstract class Factory { public abstract Product manufacture();}public abstract class Product { public abstr...原创 2018-08-22 08:39:31 · 132 阅读 · 0 评论 -
Spring---Annotation注释和Bean生命周期笔记---查询资料
本文仅做查询资料,不对细节进行论述一、常用注释@Configuration:一般用在IOC配置@Bean类头@Bean: IOC注入对象,无论@ComponentScan扫没扫到@ComponentScan: 扫描文件@Controller,@Service,@Repository,@Component 自动扫描组件&指定扫描规则; 自定义Typ...原创 2018-08-19 20:17:12 · 205 阅读 · 0 评论 -
设计模式------单例
/** * 最好的饿汉模式实现方法 * @author 80256848 * */public enum EnumSingletonBest2 { INSTANCE;}class Main{ public static void main(String[] args){ EnumSingletonBest2 instance = EnumSingletonBest2.IN...原创 2018-08-21 10:03:57 · 127 阅读 · 0 评论 -
java--大量switch-case代码加入枚举类型进行优化
当项目存在大量的switch-case条件判断时,会把让整个项目看起来非常low,以下tich提出一种优化方法,可提高代码的维护性,让代码变得更加简洁,易维护。先看原代码: String jrnDDZName = null; String trsDDzName = null; String wkeCodName =...原创 2018-09-25 19:38:22 · 5814 阅读 · 2 评论 -
强引用、软引用、弱引用、幻象引用有什么区别?
强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?典型回答不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用("Strong" Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域...原创 2018-10-05 17:42:33 · 554 阅读 · 0 评论 -
Effective java总结
第二章 创建和销毁对象一、考虑使用静态工厂方法代替构造函数优点: 1.与构造函数不同,静态工厂方法具有名字,增加代码可读性; 2.与构造函数不同,静态工厂每次被调用的时候,不要求非得创建一个新的对象; 3.与构造函数不同,他们可以返回一个返回类型的子类型的对象;(不是很明白)缺点: 1.类如果不含公有(public)的或者受保护(protected)的构造函...原创 2018-10-13 16:21:14 · 315 阅读 · 0 评论 -
mysql————设置自增序列,且根据日期归零 ____last_insert_id
last_insert_id: SELECT LAST_INSERT_ID(); LAST_INSERT_ID() LAST_INSERT_ID(expr) 自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值。如果要设置自增序列,且根据日期归零,可以使用一下神器: UPDATE bfm_cnt_seq...原创 2019-01-21 16:56:24 · 987 阅读 · 0 评论 -
JVM-内存溢出、调优笔记
前言 首先默认大家知道新生代,老年代和永久代的概念,不懂的请自行百度。1.堆内存溢出 新生代+老年代 = 堆内存,(OutOfMemoryError:Java heap space) 是指堆溢出 可以通过设置-Xms:1024m, -Xmx:2048,来设置堆内存大小,其中,-Xms:表示初始化堆大小,-Xmx:表示最大堆大小2.永久代溢出...原创 2019-04-18 21:49:04 · 224 阅读 · 0 评论 -
Java锁---偏向锁、轻量级锁、自旋锁、重量级锁
转自:https://www.cnblogs.com/linghu-java/p/8944784.html理解锁的基础知识 如果想要透彻的理解java锁的来龙去脉,需要先了解以下基础知识。基础知识之一:锁的类型锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在...转载 2019-07-18 22:25:15 · 129 阅读 · 0 评论 -
JAVA线程安全计数器
通过CAS的方式实现计数器代码有测试用例,最简单的就是最可靠的。package Offer.thread;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class Counter { private Ato...原创 2019-07-24 23:13:06 · 653 阅读 · 0 评论 -
Spring @Transactional 事务笔记
本文针对项目常用点进行笔记,并非小白科普。本文从两个方面介绍:1.“spring的事务传播属性”2.“spring的事务隔离级别”例如正常的spring标签会这么写:@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.SERIALIZABLE)propagation:事务传播属性is...转载 2019-08-19 19:44:31 · 276 阅读 · 0 评论 -
transaction注解发生的异常,事务不会回滚
解决方案:方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理方案2.在service层方法的catch语句中增加:TransactionAsp...原创 2019-08-20 16:53:25 · 877 阅读 · 0 评论 -
转:分布式系统中,Redis缓存一致性问题
来源:https://www.douban.com/note/729458065/前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,先操作数据库还是先操作缓存呢?先思考一下,可能会存在哪些问题,再往下看。下面我分几种方案阐述。缓存维护方案一假设有一写(线程A)一读(线程B)操作,先操作缓存,在操作数据库。如下流程图所示:1)线程A发起一个写操作,第一步...转载 2019-08-20 22:32:13 · 584 阅读 · 0 评论 -
算法------冒泡排序算法优化
代码地址:https://github.com/luoweian/optimalSortingAlgorithm/通用代码,交换两个数的位置 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; ...原创 2018-06-27 21:03:34 · 213 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第四章习题(JAVA)
package code_04_chapter;import java.math.BigDecimal;/* *Created by William on 2018/6/19 0019 */public class QuestionsInChapter4 { static int[] ints = new int[10]; public QuestionsInCha...原创 2018-06-19 20:46:16 · 269 阅读 · 0 评论 -
java并发--- 转:BlockingQueue
· 前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结...转载 2018-05-04 16:03:48 · 164 阅读 · 0 评论 -
java并发--- 转:Callable、Future和FutureTask
转载地址:https://blog.youkuaiyun.com/javazejian/article/details/50896505创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种方式都有个缺点,那就是在任务执行完成之后无法获取返回结果,从JAVA SE 5.0开始引入了Callable和Future,通过它们构建的线程,在任务执行完成后就可以获取执行结果,今天我...转载 2018-05-04 15:07:56 · 189 阅读 · 0 评论 -
java并发---用JMeter高并发测试接口
postman做高并发测试还是太鸡肋,用专业的JMeter来测试。首先添加线程组。 填好参数添加http请求选好以下参数添加监听器添加查看结果树打开log viewer点击开始即可,然后点击Graph Results 和查看结果。...原创 2018-04-26 16:32:24 · 4545 阅读 · 0 评论 -
java并发--- AQS下的ReentrantReadWriteLock和StampedLock
ReentrantReadWriteLock 是ReadWriteLock接口的实现类。ReadWriteLock接口的核心方法是readLock(),writeLock()。实现了并发读、互斥写。但读锁会阻塞写锁,是悲观锁的策略。JDK1.8下,如图ReentrantReadWriteLock有5个静态方法:Sync:继承于经典的AbstractQueuedSynchronizer(传说中...原创 2018-05-03 20:14:17 · 415 阅读 · 0 评论 -
java并发---转:ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结来源:https://blog.youkuaiyun.com/qq838642798/article/details/65441415可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数...转载 2018-05-03 16:46:18 · 211 阅读 · 0 评论 -
java并发---AbsractQueuedSynchronizer - AQS
AbsractQueuedSynchronizer - AQS谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)!本文介绍CountDownLatch、Semaphore、CyclicBarrier的原理和用法。它的两种底层数据结构如下: 使用Node实现FIFO队列,可以用于构建锁和或者其他...原创 2018-05-03 11:05:18 · 192 阅读 · 0 评论 -
java并发---线程不安全类及其对应安全的并发容器J.U.C
线程安全-并发容器J.U.C线程不安全--------->线程安全的并发容器ArrayList----------->CopyOnWriteArrayListHashSet------------>CopyOnWriteArraySetTreeSet------------->ConcurrentSkipListSetHashMap----------->Concur...原创 2018-05-01 21:58:46 · 249 阅读 · 0 评论 -
java并发---使用Joda-Time完全替代SimpleDateFormat
SimpleDateFormat是个线程不安全的类,可参考:https://blog.youkuaiyun.com/paincupid/article/details/77531362并且Joda-Time无论在安全还是其他方面都完胜SimpleDateFormat,可以全部使用Joda-Time以下将如何实现Joda-Time一,配置pom.xml <dependency> ...原创 2018-05-01 10:18:48 · 1416 阅读 · 0 评论 -
java并发---线程封闭-基于SpringBoot的ThreadLocal的实现
线程封闭一般通过以下三个方法: 1.Ad-hoc线程封闭:程序控制实现,最糟糕,忽略 2.堆栈封闭:局部变量,无并发问题 3.ThreadLocal线程封闭:特别好的封闭方法方法2是最常用的,变量定义在接口内,本文主要讲解方法三。本例程是基于SpringBoot框架,并使用两个拦截器,分别为Filter和HandlerInterceptorAdapter 第一步,先定义...原创 2018-04-30 19:04:26 · 4646 阅读 · 1 评论