
java
文章平均质量分 72
余生之君
越努力,越幸运
展开
-
java探针之修改类字节码文件
java探针利用了javaAgent + ASM字节码注入工具实现了动态修改类文件的功能。像skywalking和arthas都使用到了这个技术。具体原理为:jdk1.5以后引入了javaAgent技术,javaAgent是运行方法之前的拦截器。我们利用javaAgent和ASM字节码技术,在JVM加载class二进制文件的时候,利用ASM动态的修改加载的class文件,在监控的方法前后添加计时器功能,用于计算监控方法耗时,同时将方法耗时及内部调用情况放入处理器,处理器利用栈先进后出的特点对方法调用先原创 2020-10-11 11:10:19 · 2395 阅读 · 0 评论 -
Java探针之JavaAgent揭秘
java探针利用了javaAgent + ASM字节码注入工具实现了动态修改类文件的功能。javaAgentJavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。JavaAgent 是运行在 main方法之前的拦截器,它内定的方法名叫 premain ,在JVM启动的时候,会从agent包中找到MAINIFEST.MF中配置的Class,执行其实现的premain方法,而且这一步是在main方法之前执行的。这样就可以在JVM启动执行main方法之前做一些其他而外的操作了。agen原创 2020-10-11 11:03:57 · 1401 阅读 · 1 评论 -
问到ConcurrentHashMap不要再提Segment了
HashMap是面试中的高频问题,前面已经介绍了JDK7he JDK8下hashMap的区别。但他是线程不安全的,而本文则重点介绍ConcurrentHashMap实现的细节HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占。JDK8的ConcurrentHashMap结构相比较JDK1.7发生了很大的变化。取消...原创 2020-01-09 15:54:53 · 1097 阅读 · 0 评论 -
String字符串相等判断
== :比较的是内存地址值equals: 比较的是值,对象的equals()可以被重写java中字符串的比较:==我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题String a="abc";String b="abc"那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象...原创 2019-10-25 16:28:53 · 15815 阅读 · 2 评论 -
面试再也不怕问到HashMap(二)
1.7和1.8的HashMap的不同点(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法就是能够提高插入的效率,但是也会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩容后数据存储位置的计算方式也不一样:在JDK1....原创 2019-10-17 15:45:10 · 988 阅读 · 0 评论 -
面试再也不怕问到HashMap(一)
1.源码解析1.1 构造方法HashMap有四个构造方法:无参构造方法HashMap()构造一个空的HashMap,初始容量为16,负载因子为0.75 /** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the...原创 2019-10-15 16:33:24 · 561 阅读 · 0 评论 -
如何高效安全的将资源同步到本地数据库
背景 现在软件开发很多是多系统多模块,经常会遇到要将设备、人员、区域等资源同步到本系统数据库保存一份。资源同步常用的方案为全量同步和增量同步结合的方式,全量同步一般情况下为项目启动时和每天定时任务去同步所需资源,增量同步一般利用mq去接收资源的变更(增删改)通知然后修改到本地数据库。这里介绍下如何进行高效安全的全量同步。全量同步准备工作:假设要同步的表为region表,关键字段为(id,...原创 2019-06-25 11:27:54 · 650 阅读 · 0 评论 -
java8中stream最实用总结和调试技巧
背景 java8推出的集合操作流stream极大的方便了我们的开发,但stream支持的功能十分丰富,网上的介绍文章很全面但是不够实用不能很好满足开发中实际需要,在开发中也发现有些人对stream并不熟悉,或者只会使用简单的功能。如在代码审核中发现这样一段代码:` /** * 从前10名中(可能存在重复)筛选出前五名 */privat...原创 2019-05-30 15:55:06 · 7737 阅读 · 1 评论 -
利用LocalDate获取每月几号,每周几
jdk8为我们提供了非常好用的时间日期工具类。下面的工具类即利用LocalDate来获取指定范围内的日期,每周四,每月31号(没有则略过)import java.time.DayOfWeek;import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.time.temporal.Chr...原创 2018-12-08 23:23:43 · 15958 阅读 · 0 评论 -
阿里巴巴java开发手册学习
对阿里巴巴java开发手册中需要注意的点予以记录1.编程规约类名中包含领域模型如DO/BO/DTO/VO时要 全部大写,如UserDTO.抽象类要以Abstract或Base开头,异常类以Exception结尾,测试类要以所测试的类开头,Test结尾。杜绝不规范的缩写将设计模式体现在类名中,有利于阅读者快速理解架构,如OrderFactory LoginProxy Resource...原创 2018-08-12 11:17:57 · 891 阅读 · 0 评论