Java
文章平均质量分 81
HiJBoss
胸有大志,却只会crud
展开
-
码出高效-java笔记-JVM
字节码java所有指令200个左右,一个字节(8位)可以保存256种不同的指令信息加载或存储指令将局部变量加载到操作栈中从操作栈顶存储到局部变量表将常量加载到操作栈顶(极为高频)运算指令类型转换指令对象创建与访问指令操作栈管理指令方法调用与返回指令同步指令jvm使用方法结构中的acc_synchronized标志同步方法,Synchronize语义通过monitorenter和monitorexit实现.java文件不是可执行文件,需要编原创 2021-11-17 21:45:06 · 762 阅读 · 0 评论 -
码出高效-java笔记——面向对象
关于面向对象里氏代换原则LSP:任何父类能够出现的地方,子类都能够出现谨慎使用方法继承方法继承带来的危害性:方法污染:父类具备的行为通过继承传递给子类,子类不具备执行此行为的能力方法爆炸:指继承树不断扩大JDK进化史JDK8:Lambda表达式、函数式接口、Stream流等JDK9:模块化、进程改善和锁机制优化、代码分段缓存等JDK10:改进GC和内存管理等JDK11:提供实验性质的可扩展的低延迟垃圾收集器ZGC等JDK12 :Switch表达式功能增强、G1收集器优化原创 2021-10-21 21:35:27 · 60 阅读 · 0 评论 -
关于线程创建的方式
总结:线程创建常用的方式有三种,分别是:继承Thread类实现Runnable接口实现Callable接口继承Thread类的方式public class threadClassDemo extends Thread{ int count = 1; @Override public void run() { count++; System.out.println("当前线程:"+Thread.currentThread().getNam原创 2020-08-12 22:47:13 · 179 阅读 · 0 评论 -
hashMap长度为什么是2的幂次方
HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法;这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1),hash%length==hash&(length-1)的前提是length是2的n次方;为什么这样能均匀分布减少碰撞呢...转载 2020-03-01 11:09:56 · 7206 阅读 · 6 评论 -
关于List的subList原理分析
今天在看Java开发手册的时候看到这么一句话:如果需要对list某个范围内的元素进行操作,可以使用subList,任何对子列表的操作最终都会反映到原列表中。例如list.subList(0,2).clear;这样的操作便会对原列表进行修改,修改的结果是截取除了0-2位置的元素,下面写下代码试一下:运行结果:我们看到原列表已经被修改,那么为什么对子列表的修改会影响到原列表呢,我们进入...原创 2019-12-18 11:19:58 · 3534 阅读 · 0 评论 -
fastCSV实现上传CSV文件
实现上传CSV文件的工具有很多,下面直接上代码首先是添加依赖:<dependency> <groupId>de.siegmar</groupId> <artifactId>fastcsv</artifactId> <version>1.0.3</...原创 2019-12-09 11:37:06 · 1226 阅读 · 0 评论 -
关于Java并发中的volatile与synchronized关键字
synchronized关键字在介绍之前,首先从场景出发,思考一下下面的场景: public List<String> list = new ArrayList<>(); public void dealList(List<String> list){ /*对list进行增删处理*/ /*list.add(); ...原创 2019-11-27 10:03:23 · 168 阅读 · 0 评论 -
使用MyBatis查询结果,并返回List结果集时的坑
今天在看一个老项目的时候,有这么一段语句怎么看怎么不顺眼,之前当返回结果是一个DTO对象时,判空直接使用了null和size,没有考虑代码是否有效,在这个list判空时,又直接使用了,没有考虑,通过查阅资料,了解到使用Mybatis查询结果,并以List返回结果时,这个list是在一开始就会被new一个,所以不论是否有结果被返回,其返回的list一定是一个存在的对象,即不为null,所以,上...原创 2019-04-23 16:05:59 · 5015 阅读 · 0 评论 -
线程池笔记
最近了解一下线程池,下载其中的代码并运行。https://howtodoinjava.com/core-java/multi-threading/when-to-use-countdownlatch-java-concurrency-example-tutorial/其中ApplicationStartupUtil这个类package com.chujianyun;import com.c...转载 2019-04-22 17:26:18 · 120 阅读 · 0 评论 -
Java字符串连接
字符串连接方式:1.使用“+”号,可以连接多个字符串(效率最差)System.Out.println(str1+str2);2.使用concat函数,一次只能连接一个(较好)System.Out.println(str1.concat(str2));3.借助StringBuffer的append方法进行连接(稍逊join)StringBuffer bu = new StringBuff...原创 2019-04-19 15:29:08 · 627 阅读 · 0 评论 -
在DTO中使用注解的形式检验数据是否为空,为什么这么做
如上图,在一个DTO中使用了注解的形式进行参数的非空验证,为什么要这么做呢?为什么不直接在使用时对参数进行非空验证呢?首先说一下DTO的作用,表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象(POCO就是简单CLR对象(Plain Old CLR Object),概念来源于Java中的POJO),它 的目的只是为了对领域对象进行数据封装,实现层与...原创 2019-04-18 10:57:15 · 4765 阅读 · 0 评论 -
关于String对象的compareTo方法实现原理
通常在对String对象进行比较时使用jdk给我们提供的compareTo方法可以说是非常轻松方便的,但是compareTo方法的实现是怎么实现的呢?下面通过看一下源码来研究一下:通过查看源码,我们可以发现,通过将两个字符串存储在char类型数组中,选择最短的一个字符串,然后从第一位遍历两个数组,返回第一个不相同字符的ASCII码(十进制)相减的结果;如下: "abcd".compa...原创 2019-11-12 16:10:34 · 916 阅读 · 0 评论 -
使用IDEA导入包时避免自动引入import.*包
使用IDEA时,有时一个工程要重复引入一个包下的各种子包,此时当你重复的次数达到一定标准,IDEA便会自动将你的子包简化为*,这样在自己的工程中没有什么问题,但在工作中,一定要避免这样的修改,以免修改了其他人的代码,这样如果发生事故,根据代码提交记录,便会由你来背锅,下面来写一下如何修改IDEA中重复导入包的限制次数,避免自动引入import.包红色方框内的数字自己可以自己设置,当重复导入的...原创 2019-11-11 16:14:50 · 13205 阅读 · 1 评论 -
关于Java8中stream的笔记
简介java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合操作...转载 2019-08-29 09:29:23 · 131 阅读 · 0 评论 -
关于日志打印中的占位符的使用
在日志打印时,多数是推荐使用占位符来进行参数的设置的,今天使用sonarqube扫描代码时,发现一些日志打印时的占位符与参数数量不匹配的问题,很多都是占位符数量多于参数数量,我便产生了疑惑,如果数量不匹配,占位符没有赋值的位置会怎么显示,于是便敲了一个小demo验证一下,结果如图:上图是占位符数量与参数数量一致时,打印结果是正常的,下面测试一下缺少一个参数时:结果显示没有进行赋值,这里只是...原创 2019-08-06 11:43:02 · 17665 阅读 · 0 评论 -
Java多线程-线程池ThreadPoolExecutor构造方法和规则
为什么用线程池有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等...转载 2019-08-05 11:42:52 · 105 阅读 · 0 评论 -
关于Java中关于继承的思考记录
今天看到JVM机时突然想到一个问题,就是面向对象中的继承,为什么要使用继承呢,继承就全都是优点吗?继承中子类继承父类后继承得到的属性方法是复制到子类内存空间中的吗,如果不是那还能用什么方法,指针引用也不行呀,都知道子类继承后使用点运算符对继承属性的修改是不会影响父类的,那么子类对继承属性的修改必然是使用一块不同于父类内存的新内存块,为了验证子类继承后地址与父类地址不同,并且修改后的继承属性对父类...原创 2019-08-03 14:37:43 · 194 阅读 · 0 评论