Java
文章平均质量分 70
Megustas_JJC
change the world by program
展开
-
UUID/签名/加解密工具并发场景下隐藏的性能瓶颈问题
在线上运行的服务,偶发观测到部分服务有Block Thread的现象,排查发现是生成UUID造成的,那么看一下为什么一个static会造成block。看下实现可以发现:UUID.randomUUID底层共用同一个SecureRandom对象,ng.nextBytes(randomBytes)会调用其engineNextBytes方法,该方法签名存在对象同步锁sun.security.provider.SecureRandom#engineNextBytes ,在高并发的情况下会存在线程间的锁竞争,存在性原创 2021-11-06 00:30:11 · 1068 阅读 · 1 评论 -
震惊,IDEA会私自执行你的代码?--- IDEA在debug时调用toString()方法的问题及解决
what?IDEA在debug时会自动私自调用我们的代码么?是的,会调用对象的toString()方法。一般在debug时很难发现这种现象,并且多数情况下调用一下toString()方法没有什么问题(但是一些客户端服务端交互的项目,会有意想不到的问题出现。例如Dubbo的AbstractConfig类,对这个类的debug会导致其子类ReferenceConfig的initialized属性错误的被修改为true,进而无法正确的生成Dubbo代理。),就使我们更不容易察觉。但是今天在debug一个本地模拟原创 2021-05-09 21:19:27 · 1006 阅读 · 0 评论 -
浅谈RPC及Netty在RPC中的应用
什么是RPCRPC协议:只是定义数据传输格式和传输方式,是一种应用层协议。传输方式:有基于HTTP传输数据的RPC Over HTTP,也有基于TCP的RPC Over TCP等。数据格式:双方协商定义,一般包括以下几点:1、类名2、方法名3、参数类型(用来确定具体执行的方法,有方法重载)4、参数值(个人对于网络协议这里了解的不够深入,只能广义上讲下对rpc的认识)官方说明:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP原创 2021-05-06 00:07:56 · 592 阅读 · 3 评论 -
Java性能分析工具Jconsole及visualvm初体验
jconsolejconsole是jdk自带的Java监视和管理控制台,在终端输入:jconsole就可以进行启动这里可以连接本地进程。也可以进行远程监控,这就需要知道远程的连接的端口用户名密码等信息。visualvm1.下载插件在plugins中搜索插件,然后安装2.重启完后进行配置 prefences->other settings->visuialvmmac...原创 2020-04-20 15:49:05 · 545 阅读 · 0 评论 -
G1 垃圾收集器参数配置及调优
列表为 G1 GC垃圾收集器常用配置参数: 可选项及默认值 描述 -XX:+UseG1GC 采用 Garbage First (G1) 收集器 -XX:MaxGCPauseMillis=n 设置最大GC 暂停时间。这是一个大概值,JVM 会尽可能的满足此值 -XX:Initiat...原创 2020-04-12 15:49:03 · 7246 阅读 · 0 评论 -
java.lang.NumberFormatException: For input string: “null”的坑
话不多说,先上代码: String value = String.valueOf(conditionMap.get(reason)); return StringUtils.isEmpty(value) ? -1 : Integer.valueOf(value);按照预期,conditionMap获取不到值,最后应该return一个-1,但是实际却抛了异常,java.lang.Num...原创 2020-03-23 11:27:09 · 2186 阅读 · 0 评论 -
Thrift
本文从概念及用法等层面对Thrift进行一个总结,对于IDL方式的实现还没有实际进行过相关代码编写。定义Thrift 最初由Facebook开发,而后捐献给Apache,目前已广泛应用于业界。Thrift 正如其官方主页介绍的,“是一种可扩展、跨语言的服务开发框架”。目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RE...原创 2018-08-31 17:05:58 · 490 阅读 · 0 评论 -
Lombok
官网下载地址https://projectlombok.orglombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然,这带来的副作用就是不易阅读…不过,还是能看得懂吧,废话不多说,先看一下lombok支持的一些常见的注解。@NonNull@Cl...转载 2018-07-17 17:13:14 · 233 阅读 · 0 评论 -
浅谈Python和Java的多进程与多线程的异同
最近在学习Python多线程相关的部分,遇到了这样的一句话:“对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行”,即Python中的多线程是“假的多线程”,是什么原因造成这样的说法,搜集查阅了一些资料,并且对比Java,如下是个人对于这个问题的一些理解:解释型语言编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进原创 2018-01-20 20:00:04 · 9082 阅读 · 6 评论 -
String类的不可变性及StringBuilder原理
String类不可变性的好处String s="ABC";s.toLowerCase();s.toLowerCase()并没有改变“ABC”的值,而是创建了一个新的String类“abc”,然后将新的实例指向变量s。String类设置为不可变类的好处:(1)提高Java字符串池(String Pool)的效率和安全性。当知道一个对象是不可变的,那么拷贝这个对象的内容时,就不用赋值它的本身而只是复制原创 2017-09-20 10:08:35 · 2402 阅读 · 0 评论 -
JVM加载class文件的一些理解
Java是一种动态解释型语言,类(class)只有被加载到JVM中后才能运行。每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出。JVM实例通过调用类的main()方法来启动一个Java程序。当运行指定程序时,JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成一个完整的Java应用程序。 类的加载方式分为隐式加载和显式加载,隐式原创 2017-08-23 20:43:09 · 888 阅读 · 0 评论 -
对Java中的深复制和浅复制的一些理解
Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。浅复制与深复制概念浅复制(浅克隆) :被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象原创 2017-08-10 15:31:57 · 610 阅读 · 0 评论 -
IntelliJ IDEA的注册机及tomcat配置
将以下代码保存成keygen.javaimport java.math.BigInteger;import java.util.Date;import java.util.Random;import java.util.zip.CRC32;public class keygen{ /** * @param s * @param i * @param bytes * @re转载 2017-06-01 14:55:45 · 881 阅读 · 0 评论 -
Java中Scanner用法总结
最近在做OJ类问题的时候,经常由于Scanner的使用造成一些细节问题导致程序不通过(最惨的就是网易笔试,由于sc死循环了也没发现,导致AC代码也不能通过。。。),因此对Scanner进行了一些总结整理。Scanner类简介Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何原创 2017-04-03 15:19:52 · 94856 阅读 · 13 评论 -
Java移位操作>>,>>>与<<
带符号数右移>>,如果是正数,则在最高位补0,负数则补1 无符号右移>>>,在最高位补0 public static void main(String[] args) { int a = -1; System.out.println(a>>1); System.out.println(a>>>1); }结果:-12147483647解原创 2017-03-13 15:53:51 · 520 阅读 · 0 评论 -
serialVersionUID的作用以及设置方法
serialVersionUID的作用以及设置方法设置 serialVersionUID默认的生成方式: private static final long serialVersionUID = 1L; serialVersionUID的作用:serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会...原创 2018-09-04 17:23:43 · 2270 阅读 · 0 评论 -
将Java对象转为JsonNode
在RPC接口调用的时候,经常会遇到这样的问题,本身是一个JsonNode对象,但是由于对象接口的返回形式,只获取到了Map或Object等其他形式的对象,为了方便进行属性值的获取,需要进行对象的转换,可以利用import com.fasterxml.jackson.databind.JsonNode与 import com.fasterxml.jackson.databind.ObjectMap...原创 2018-09-12 17:16:06 · 7571 阅读 · 0 评论 -
Java8 DateTimeFormatter使用
已经9102年了,别再使用simpledateformat了,和SimpleDateFormat不同的是,DateTimeFormatter不但是不变对象,它还是线程安全的。因为SimpleDateFormat不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而DateTimeFormatter可以只创建一个实例,到处引用。public class DataTimeUtils { ...原创 2019-09-28 17:22:12 · 3256 阅读 · 0 评论 -
gradle打印依赖树
gradle -q :模块名:dependencies --configuration compile >> test.txt原创 2019-09-24 10:56:05 · 4471 阅读 · 0 评论 -
Map转为JavaBean(支持自动类型转换)
背景是有如下一个map目标转换为如下的JavaBean:即需要三点:1.下划线的key转为驼峰2.字段匹配3.类型自动转换为JavaBean的类型具体实现:1.下划线的key转为驼峰public class GuavaUtils { /** * LOWER_HYPHEN test-data * LOWER_UNDERSCORE test_data...原创 2019-09-10 22:37:24 · 1239 阅读 · 0 评论 -
Idea注解不生效的解决办法
例如使用了@Slf4j进行打日志,可能提示log没有声明,具体解决办法:For the lombok plugin to function correctly, please enable itSettings -> build -> compiler -> annoation processors设置让注解生效即可...原创 2019-07-26 11:22:23 · 6522 阅读 · 0 评论 -
java try后面括号的作用
Java7新特性,支持使用try后面跟随()括号管理释放资源例如通常使用try代码块try { fis = new FileInputStream(source); fos = new FileOutputStream(target); byte[] buf = new byte[8192]; int i; ...转载 2019-04-09 10:48:44 · 672 阅读 · 0 评论 -
java中switch 与 else if 性能比较
https://mp.weixin.qq.com/s/8Q87XZPEfGhfInbAuRAeWA转载 2018-11-22 11:19:16 · 563 阅读 · 0 评论 -
gson解析json字符串
String retJson = HttpRequestUtil.sendGet1(url, auth, null);JsonParser parser = new JsonParser();JsonObject ret = parser.parse(retJson).getAsJsonObject();Integer totalCount = ret.get("data").getAsI...原创 2018-10-17 11:17:29 · 1456 阅读 · 0 评论 -
分层领域模型:Entity转为BO
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。进行对外接口的编写,往往需要返回BO,但是通过DAO层我们获取到的往往是Entity的形式,因此往往需要进行Entity到BO的转换,因此写了一个工具接口,完成这种转换: public static&lt;S extends Object,D extends Object&gt; Lis...原创 2018-09-13 12:34:15 · 1500 阅读 · 1 评论 -
详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法及Dto
生成方法:https://blog.csdn.net/qq_35246620/article/details/77686098 (选中类,并 alt + enter,即可生成ID)DTO:https://www.cnblogs.com/xt0810/p/3654574.html转载 2018-09-12 18:10:33 · 954 阅读 · 0 评论 -
J2EE之DAO设计模式及简单实现
JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端:客户端层:DHTML(Dynanic HTML:HTML+CSS+JavaScript)、JavaApplication(带有main函数的Java程序)服务器端web层(接收请求,生成响应):S原创 2016-12-21 15:59:07 · 2850 阅读 · 0 评论 -
通过内存模型深入理解参数传递方式
无论是什么语言,要讨论参数传递方式,就得从内存模型说起,主要是我个人觉得从内存模型来说参数传递更为直观一些。闲言少叙,下面我们就通过内存模型的方式来讨论一下Java中的参数传递。 这里的内存模型涉及到两种类型的内存:栈内存(stack)和堆内存(heap)。基本类型作为参数传递时,传递的是这个值的拷贝。无论你怎么改变这个拷贝,原值是不会改变的。看下边的一段代码,然后结合内存模型来说明问题:publ转载 2016-10-26 22:08:00 · 375 阅读 · 0 评论 -
构造器内的多态方法
构造器调用的层次结构带来一个问题,如果在一个构造器的内部调用正在构造的对象的一个动态绑定方法,会出现什么情况? 在一般的方法内部,动态绑定的调用是在运行时决定的,因为对象无法知道它是属于方法所在的那个类,还是属于那个方法的导出类。如果要调用构造器内部的一个动态绑定方法,就要用到那个方法的被覆盖后的定义。然而,这个顶用的效果很难预料,因为被覆盖的方法在对象被完全构造之前就会调用。这一定会造成一些难以原创 2016-09-01 20:41:20 · 370 阅读 · 0 评论 -
第十一章:持有对象《thinking in Java》学习笔记
Java实用类库提供了一套相当完整的容器类,其中基本的类型是List,Set,Queue和Map。这些对象也被称作集合类,其提供了完善的方法来保存对象。(1)泛型和类型安全的容器 一个类如果没有显式的声明继承与哪个类,那么它自动继承自Object类。因此假如有一个ArrayList,因为ArrayList保存的是Object类,因此你可以将Apple(自定义的类)放进这个容器中,还可以添加Oran原创 2016-09-12 21:49:46 · 441 阅读 · 0 评论 -
Map集合
Map集合没有继承 Collection接口,其提供的是key到value的映射。Map中不能包含相同的key值,每个key只能映射一个value,key决定了存储对象在映射中的存储位置。举一个简单的例子: 创建Map集合,创建Emp对象,并将Emp对象添加到集合中(Emp对象的id作为key进行hash映射,Emp的name值作为value,并将id为“015”的对象从集合中移除):public原创 2016-08-09 20:49:31 · 652 阅读 · 0 评论 -
数组初始化问题
数组初始化与泛型原创 2016-08-09 15:26:32 · 385 阅读 · 0 评论 -
static与final的区别
final定义的变量可以看做一个常量,不能被改变; final定义的方法不能被覆盖; final定义的类不能被继承。 final static 就是再加上static的特性就可以了static 和final是没有直接关系的static 是在内存中分配一块区域,供整个类通用,所有的类的对象都享有它的共同的值static 和final的区别 一、static : 什么情况下我们要使用原创 2016-08-30 21:46:06 · 314 阅读 · 0 评论 -
AWT与Swing
AWT与Swing原创 2016-08-08 21:37:12 · 507 阅读 · 0 评论 -
java异常处理机制
前言: java 中的异常处理机制你真的理解了吗?掌握了吗? catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 return 怎么办?相信你在处理异常的时候不是每次都把它 throws 掉就完事了,很多时候异常是需要我们自己来 catc转载 2016-08-08 20:42:09 · 445 阅读 · 1 评论 -
重载与多态,接口与继承
重载与多态,接口与继承原创 2016-08-07 11:07:31 · 448 阅读 · 0 评论 -
冒泡排序
冒泡排序原创 2016-08-02 21:03:30 · 318 阅读 · 1 评论 -
数组操作
java中有关于数组的一些操作原创 2016-08-02 20:52:37 · 356 阅读 · 0 评论 -
数字格式化
数字格式化在解决实际问题时使用非常普遍,例如保留几位小数,是否分组显示等。 例如求一个圆的面积,用半径作为参数,将结果保留五位小数:原创 2016-08-05 20:15:37 · 316 阅读 · 0 评论 -
java字符串操作
java字符串操作原创 2016-08-02 16:02:03 · 399 阅读 · 0 评论