Java
RogerXue12345
这个作者很懒,什么都没留下…
展开
-
Maven仓库应用
1. clean - install: 可以在本地仓库生成jar包2. Idea-maven-Runner-VM Options:-DarchetypeCatalog=internal: 优先从本地仓库拉取jar包原创 2021-06-22 16:53:25 · 116 阅读 · 0 评论 -
Java锁
前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之处。那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一了。高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则转载 2020-09-16 09:23:37 · 75 阅读 · 0 评论 -
HashMap和ConcurentHashMap的区别
HashMap和ConcurentHashMap的主要区别是HashMaP是线程不安全,ConcurentHashMap是线程安全1. JDK 1.7(1)HashMap的线程不安全主要是发生在扩容函数中,即根源是在transfer函数中,由于采用头插法,在多线程高并发环境下会造成死循环或数据丢失问题。(2)ConcurentHashMap采用分段锁,可重入锁Segment类,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也..原创 2020-09-10 15:07:30 · 851 阅读 · 0 评论 -
Java位移操作
1. 左位移: 位移一位乘以2,比如1<< 4为16,即1*2*2*2*2=162. 右位移:位移一位除以2,比如16 >>4为1,即16/2/2/2/2=1原创 2020-09-09 11:00:32 · 175 阅读 · 0 评论 -
Cron表达式
当前时间是:2020-08-22 17:17:001. 0(秒) 5(分) 0/1(时) * * ? *: 从0秒5分开始执行,每隔1小时执行一次(不会立即执行),执行如下2020-08-22 18:05:002020-08-22 19:05:002020-08-22 20:05:002. 0(秒) 0/30(分) *(时) * * ? *: 从0秒开始执行,每隔30分钟执行一次(不会立即执行),执行如下2020-08-22 17:30:002020-08-22 18:00:0...原创 2020-08-22 17:33:46 · 9647 阅读 · 0 评论 -
加密算法
1. 对称加密:AEC,需要秘钥2. 非对称加密:MD5 RSA加密:公钥加密,私钥解密原创 2020-08-13 14:22:54 · 123 阅读 · 0 评论 -
解决jvm GC过于频繁的问题
JVM配置是这样的: jre1.8, 堆的最大空间是3G,线程执行栈的大小是256K,新生代的大小是1G,老年代的大小是2G.如下图:结果在日志发现了这个错误:Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded这个错误产生的原因是,jvm在进行gc的时候, 使用大于98%以上的时间去释放小于2%的heap空间时,才会报这个异常。这其实是jvm预判将会发生OutOfMemery异常,就提早抛出这个...原创 2020-08-07 15:44:37 · 10174 阅读 · 1 评论 -
JVM老年代垃圾回收Full GC
老年代GC:FullGC 是老年代的GC,在新生代如果说存在的对象或者说新创建 出来的对象由于某些原因需要移动到老年代中,但是老年代中压根就没有这么大的内存空间去容纳这个对象, 那么就会引发一次FullGC,如果在执行完FullGC之后,还是没有办法给这些对象分配内存,那么凉了,该抛出异常了,异常类型就是OutOfMemoryError。而FullGC使用的是和MinorGC不一样的算法,它使用的是标记清除算法,听名字,挺好理解的,来波图示解析一波。深入了解JVM一书中的图示是这个样子的,看名.原创 2020-08-07 13:53:56 · 4466 阅读 · 0 评论 -
Java接口的幂等性
投资理财的案例,用户可以充值、投资、提现,使用第三方支付进行充值,过程如下:step1:用户网站中输入充值金额step2:后端创建充值订单入库,此时订单是待支付状态step3:跳转到第三方支付页面,输入银行卡,然后确认支付step4:第三方支付通过我方提供的回调接口异步将充值结果告知我方问题出在了step4,逻辑如下://返回通知处理结果,true:处理成功;false:处理失败,第三方会继续重试publicbooleanrechargeNotice(第三方支付充值结果){..原创 2020-07-20 10:57:16 · 1502 阅读 · 0 评论 -
Java List 排序
1. 对于普通类型(Stirng、Integer)升序:Collections.sort(arrayList),降序:Collections.reverse(arrayList) public void testSortData(){ ArrayList<String> arrayList = new ArrayList<String>(5); arrayList.add("AAAA"); arrayList.add("CC原创 2020-05-28 15:15:25 · 221 阅读 · 0 评论 -
Java注解
Java注解又称Java标注,Java语言中的类、方法、变量、参数和包等都可以被标注。和Javadoc不同,Java标注可以通过反射获取注解内容。在编译器生成类文件时,注解可以被嵌入到字节码中。Java虚拟机可以保留注解内容,在运行时可以获取到注解内容。1、内置注解Java 定义了一套内置注解,如下所示:(1)、作用在代码的注解是@Override- 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 @Deprecated- 标记过时方法。如果使..原创 2020-05-22 15:58:53 · 124 阅读 · 0 评论 -
Java反射
反射是指java语言在运行时,能够通过类名动态获取此类的构造体、字段、方法。(1)获取构造体 public static void getConstructor(){ try { Class clazz = Class.forName("reflected.Student");//Student.class; Constructor[] arrayCon = clazz.getConstructors(); for(Constructor c : arrayCon){原创 2020-05-22 11:37:29 · 107 阅读 · 0 评论 -
Servlet
1. 简介:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。2. 架构:下图显示了 Servlet 在 Web 应用程序中的位置。3. 用法:(1) web.xml中配置(2)servlet.Hello(3) Listener: tomcat.原创 2020-05-16 16:49:42 · 129 阅读 · 0 评论 -
多线程终止线程
停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。以下 3 种方法可以终止正在运行的线程:1. 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。2. 使用 interrupt 方法中断线程。3. 使用 stop() 方法强行终止线程,但是这方法安全,不推荐使用这个方法,已被弃用。...原创 2020-05-09 14:41:15 · 240 阅读 · 0 评论 -
多线程CountDownLatch
CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行,使用一个计数器进行实现。计数器初始值为线程的数量,当每一个线程完成自己任务后,计数器的值就会减一,当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。(1)典型用法:某一线程...原创 2020-05-08 11:25:06 · 274 阅读 · 0 评论 -
多线程wait/notify
Object类中关于等待/唤醒的API详细信息如下:方法 方法说明 notify() 唤醒在此对象监视器上等待的单个线程。 notifyAll() 唤醒在此对象监视器上等待的所有线程。 wait() 让当前线程处于等待(阻塞)状态,直到其它线程调用此对象的notify()或notifyAll()方法,当前线程被唤醒(进入就绪状态)。 wait(long...原创 2020-04-30 18:22:40 · 136 阅读 · 0 评论 -
多线程锁
1.可重入锁 如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申...原创 2020-04-29 16:20:00 · 135 阅读 · 0 评论 -
多线程Lock
1.可重入锁如果锁具备可重入性,则称作为可重入锁。synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。2. 读写锁读写锁将对一个资源(比如文件、Map、List)的访问分成了2个锁,一个读锁和一个写锁。读锁,可以让多个线程之间的读操作不会发生冲突。ReadWriteLock就是...原创 2020-04-29 16:00:13 · 194 阅读 · 0 评论 -
多线程Volatile
在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型。 (1)Java所有变量都存储在主内存中 (2)每个线程都有自己独立的工作内存,里面保存该线程的使用到的变量副本(该副本就是主内存中该变量的一份拷贝) (1)线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接在主内存中读写 (2)不同线程之间无法直接访问其他线程工作内存中的变量...原创 2020-04-28 09:29:01 · 303 阅读 · 0 评论 -
Java正则
假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“/”。 图一:匹配所有123-12-1234形式的社会安全号码 假设进行搜索的时候,你...原创 2020-04-27 10:01:23 · 316 阅读 · 0 评论 -
Java Math方法
1. ceil:向上取整 Math.ceil(1.8987d) = 2.0;2. floor: 向下取整 Math.floor(1.8987d) = 1.0;3. round: 四舍五入取整 Math.round(0.5789) = 1;Math.round(0.5789*100) = 58;...原创 2020-04-13 16:16:36 · 97 阅读 · 0 评论 -
Java集合使用总结
1. ArrayList(1) 由数组组成(2) 初始化容量为10(3) 每次扩容为原来的1.5倍(4) 查询速度快,增删改速度慢(5) 支持重复元素及null元素(6) 开发建议:在已知容量的情况下,需要初始化容量; 如果已知容量小于10,则不需要指定容量;2. LinkedList(1) 由链表组成(2)查询...原创 2020-04-07 14:59:11 · 212 阅读 · 0 评论 -
Java 8 Stream
public class SteamUse { public static void main(String[] args){ List<Customer> customerList = new ArrayList<>(); customerList.add(new Customer(1, "xue", "xue@h3c.com...原创 2020-04-02 17:34:16 · 94 阅读 · 0 评论 -
jackson json转bean忽略没有的字段
@JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用...原创 2020-03-19 14:16:26 · 2207 阅读 · 0 评论 -
@RequestParam和@PathVariable的用法与区别
SpringBoot: @PathVariableURL变量Web应用中的URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1和http://weibo.com/user2。我们不能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,也就是说,对于相同模式的URL(例如不同用户的主页,他们...原创 2020-01-13 14:26:40 · 114 阅读 · 0 评论 -
RestTemplate基本用法
首先导入springboot 的 web 包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> ...转载 2020-01-10 17:12:25 · 236 阅读 · 0 评论 -
@Configuration 和 @Bean
1. @Bean:1.1 定义从定义可以看出,@Bean只能用于注解方法和注解的定义。 @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) 1.2 spring文档中对 @Bean的说明用@Bean注解的方法:会实例化、配置并初始...原创 2020-01-06 11:02:42 · 162 阅读 · 0 评论 -
Windows下在后台运行jar包
新建一个bat文件,输入:@echo offstart balabala -jar xxx.jarexit执行这个批处理程序就可以在后台运行jar包了注意: balabala只是一个名字,可以随便定义。写个停止脚本 stop.bat 内容如下@echo offtaskkill -f -t -im XXX.exeexit...原创 2019-12-26 10:32:29 · 352 阅读 · 0 评论 -
类加载器与双亲委派模型
加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪...转载 2018-07-11 17:49:54 · 112 阅读 · 0 评论 -
JVM图解类加载机制
一、目录二、类加载机制流程1、什么是类加载机制? JVM把class文件加载到内存里面,并对数据进行校验、准备、解析和初始化,最终能够被形成被JVM可以直接使用的Java类型的过程。2、类加载流程图3、加载将class文件加载在内存中。将静态数据结构(数据存在于class文件的结构)转化成方法区中运行时的数据结构(数据存在于JVM时的数据结构)。在堆中生成一个代表这个类的java.lang.Cl...转载 2018-07-10 17:44:21 · 143 阅读 · 0 评论 -
JVM新生代垃圾回收MinorGC
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大...原创 2018-07-03 16:59:27 · 172 阅读 · 0 评论 -
JVM GC参数
-Xmn:设置新生代大小-XX:NewRatio (1)新生代(eden+2*s)和老年代(不包含永久区)的比值 (2)4 表示 新生代:老年代=1:4,即年轻代占堆的1/5-XX:SurvivorRatio (1)设置两个Survivor区和eden的比 (2)8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10...原创 2018-07-03 16:29:53 · 140 阅读 · 0 评论 -
关于异常、堆内存溢出、OOM的几种情况
1、堆内存溢出【情况一】: java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: < jvm-arg>-Xms3062m < / jvm-arg> < jvm-arg>-X...转载 2018-06-28 11:40:20 · 388 阅读 · 0 评论 -
GC日志分析
参数设置为:-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M参数解释:-XX:+PrintGCDetails 启用日志-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用-XX:Survivo...转载 2018-06-29 17:25:23 · 194 阅读 · 0 评论 -
JVM内存
(1)类加载的时候,会将静态方法和静态变量常驻于方法区,不会被垃圾回收(2)堆:存放实例化对象,对象中的方法此时不会占用内存(3)栈:存放基本数据(int, float, double)类型(4)当执行对象中方法时,会从堆中的对象方法拉到栈中执行,当执行静态方法时,会从方法区拉到栈中执行(5)普通方法在对象结束引用后,会被垃圾回收,静态方法会常驻内存,不会被...原创 2018-05-31 14:20:44 · 144 阅读 · 0 评论 -
JVM 类加载机制详解
一 类加载机制JVM类加载分为5个过程:加载,验证,准备,解析,初始化,使用,卸载,如下图所示: 下面来看看加载,验证,准备,解析,初始化这5个过程的具体动作。1.1 加载加载主要是将.class文件(并不一定是.class。可以是ZIP包,网络中获取)中的二进制字节流读入到JVM中。 在加载阶段,JVM需要完成3件事: 1)通过类的全限定名获取该类的二进制字节流; 2)将...转载 2018-07-11 17:51:06 · 101 阅读 · 0 评论 -
Java连接AD域
1. 获取连接,验证用户名和密码是否合法/** * 使用java连接AD域 * @throws 异常说明 * @param host 连接AD域服务器的ip * @param post AD域服务器的端口 默认389 * @param username 用户名 需要带域,如:h3c\\x12355或x12355@h3c.huawei-3com.com * @param pa...原创 2018-12-13 14:50:31 · 2595 阅读 · 0 评论 -
Java日期处理
1、如何将java.util.Date转化为java.sql.Date?java.util.Date utilDate=new java.util.Date();java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());2、如果要插入到数据库并且相应的字段为Date类型那么可以用PreparedStatement.set...原创 2018-12-05 16:54:10 · 134 阅读 · 0 评论 -
Java应用总结
1. 可变参数: T... a,底层转换为数组 public <T> void testParameter(T... a){ for(T s : a){ System.out.println(s); } } testParameter("1","2", "3", "4"); testParamete...原创 2018-10-11 11:05:51 · 113 阅读 · 0 评论 -
Java泛型详解
引言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个简单的Box类: 1 2 3 4 5 public class Box { private String ob...原创 2018-09-17 16:45:02 · 107 阅读 · 0 评论