java
文章平均质量分 61
用于分类,子专栏内才是文章
诗水人间
要想走的更远,就需要思考更深层次的问题。冷静、智慧、深沉是我所向往的
展开
-
安装配置jdk环境变量
新版win10,高级系统设置旧版本找到安装的jdk目录,或者找到解压后jdk的目录,进入bin目录复制这个bin目录的全路径然后确定、确定、确定 就算完成了通过windows + x + a快速呼出powershell,输入java -version查看版本号,如下就算完成了至于JAVA_HOME的环境变量,少数软件会要求用,从jdk1.5开始,eclipse等ide环境不需要这个变量,但部分软件程序可能用到了这个环境变量的值,所以可以添加一个JAVA_HOME以下部.原创 2020-11-26 20:02:49 · 25419 阅读 · 0 评论 -
前后端 如何 快速的处理和传输 大数据 ?
压缩大数据,解决前后端之间大数据量传输问题。原创 2022-11-17 22:12:33 · 4558 阅读 · 1 评论 -
如何更优雅的使用 Java8 进行分组(尤其是多个字段的组合分组)。
在SQL中经常会用到分组,我们也常常遇到一些组合分组的场景。有下面的一个User类。原创 2022-07-17 07:53:01 · 12487 阅读 · 2 评论 -
visualVM设置字体大小
遇到这种类似的问题第一反应就是去社区找,因为相信有其他人提出来了,要么已解决,要么待解决。visualVM项目的issue 338条就有人提出在4k屏幕上字体显示太小,并且这个issue是已经解决了的,点进去看就知道怎么解决了。方案、快捷方式目标target后面加上–fontsize 20具体大小根据分辨率自行调整命令行下启动就是./visualvm.exe --fontsize 20你可以修改visualVM快捷方式属性的快捷方式shortcut,选项中的目标target在后面加上这个启动原创 2021-12-02 13:30:07 · 2389 阅读 · 0 评论 -
根据泛型得到实例对象,想要T t = new T();? 或者想要T.class ?
最近在写代码的过程中发行很多代码逻辑非常的相似,可以说80%的相似,而不同的就是具体的对象不同,整体的逻辑都相同。于是想要进行简化开发,抽取公用。在过程中遇到了一些问题。例如有些时候我想要直接:T t = JSONObject.paresObject(json,T.class)但是实际上是做不到的,因为这样是得不到.class的。如果是通过方法T t传入进去,那么在t不为null的情况下,可以使用 t.getClass()但是真正需要用的的时候,例如<T> void getT(List原创 2021-06-23 15:52:22 · 2095 阅读 · 0 评论 -
Excel导入导出框架 excel-import-export 的使用说明文档。
maven的仓库地址:excel-import-export选择一个最新版本(前面几个版本功能不是最新的,可能被替换)源码地址:github仓库源码地址码云地址:https://gitee.com/gnnu/excel-import-export使用方式第一步:引入依赖将仓库地址设置为新的aliyun镜仓,与dependencies标签同级,将本项目的仓库地址设置为新版本的ali镜像仓库。亦可以全局修改settings.xml中的mirrors将url修改为新的地址:https://mave原创 2021-06-04 16:40:52 · 2887 阅读 · 3 评论 -
自定义注解实现Excel导入和导出框架,下一个功能实现自定义单元格样式
纵向表头和横向表头默认处理的是横向的表头,也就是表头在上方,数据在下方。如果想要处理纵向表头,建议将纵向的表头通过excel的转置进行转置,然后再处理。处理完后的导入导出也都是横向的。因此想要纵向的使用excel自带的转置,将纵向的表头转换为横向的进行处理,处理完后再手动的转置回纵向的即可。Excel表格转换工具包注意导入的excel表格的单元标题顺序可以变不影响最终结果,因为就是根据标题来确定位置的。只要这个单元格标题和对应注解的信息是相同即可通过注解和工具类将,excel的数据并转换为Li原创 2021-05-30 16:57:56 · 1096 阅读 · 1 评论 -
论源码阅读的必要性。JDK14SourceCodeInterpretation
论源码阅读的必要性 自己曾经学过很多技术框架,学着学着,有些时候就会困惑。①为什么要学这些技术框架? 在大学这几年,我一直坚持每天学习,学着学着感觉市面上的框架基本上都学完了,至少在技术方面上已经不再是一个问题了。随着自己技术水平的不断增加,越发的觉得技术底层的原理重要性。 很多时候我也有疑惑,同样敲代码,凭什么人家能拿高薪,凭什么人家叫高级java开发工程师?自己与其他人的差别到底在哪里,框架用的六不六?。细想一下,框架使用的灵活不灵活并不能说明一个人的能力。学习框架的时候你是否也有疑原创 2021-05-27 22:54:19 · 806 阅读 · 13 评论 -
java报前置引用异常,Illegal forward reference的原因
你是否了解前置引用异常?例如下面的代码报异常的代码鼠标悬浮然后会提示你如果调整顺序后又不会报异常类似的情形正常的顺序是输出语句的问题?显然和输出语句无关思考这几种情况为什么不一样?之所以会报这个异常Illegal forward reference就是因为成员属性没有被初始化,然后去操作它,例如赋值、读取这些操作肯定是不合法的。因此会报这个非法前置引用。之所以报这个异常的原因是,jvm进行收集的时候,对于输出语句是可以执行的,以下面这张图为例:对于这个num报异常我的原创 2021-05-16 22:34:14 · 11509 阅读 · 4 评论 -
JDK的动态代理
JDK动态代理如下创建动态代理对象,与cglib非常的类似1、写一个代理类生成工厂import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JDKProxy implements InvocationHandler { private Object target; public JDKProxy(O原创 2021-04-11 02:57:41 · 338 阅读 · 0 评论 -
cglib代理原理----aop原理
maven环境下1、引入cglib依赖<!-- https://mvnrepository.com/artifact/cglib/cglib --><dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version></dependency><!原创 2021-04-11 00:22:50 · 374 阅读 · 0 评论 -
finnally一定会被执行吗?----不一定,因为有特例System.exit(0);
情形一执行下面的代码会发现finally中的"执行了finally。。。"并不会被打印。public class Demo { public static void main(String[] args) { try { System.exit(0); } catch (Exception e) { e.printStackTrace(); } finally {原创 2021-03-25 01:36:01 · 584 阅读 · 0 评论 -
Java接口的修饰符可以为?-----纠正很多人的一些常识错误,你是否也中招了,甚至很多面试题这道题答案都是错误的
接口我相信很多人都不陌生,而且对于接口的修饰符可以用什么我认为很多人都错了。private、static、protect 实际上是可以修饰接口的,很多人都没有考虑内部类这种形式,这种形式是运行用这些词修饰接口的,而static表面该接口是属于类的,而权限范围限定符,public、protect、private像private interface如下不会波浪线报错,加入main编译依然是成功的。同样的道理其它限定符也是可以的而内部类就是以static形式集成进类的,所以如果用static修饰会发现是原创 2021-03-25 01:27:50 · 1418 阅读 · 3 评论 -
java操作win10防火墙
win10防火墙微软官方文档地址微软防火墙文档地址如果是要开启ping规则提示:防火墙操作都需要有管理员权限!windows + x + a(快捷键)打开powershell(管理员身份),输入下面命令IPV4netsh advfirewall firewall add rule name= "All ICMP V4" protocol=icmpv4:any,any dir=in action=allowIPV6netsh advfirewall firewall add rule nam原创 2021-02-20 07:52:00 · 1903 阅读 · 1 评论 -
wait会释放锁?当然会释放锁,代码见真招!!!
我在网上看到很多人错误的理解,认为wait不会释放锁,然而它们并没有任何理由,仅凭自己的认知,然后很骄傲的和人讲,wait不会释放锁,你这是误人子弟。殊不知他自己才是误人子弟。我先讲一讲原理,然后用代码来证明它,让那些还认为wait不会释放锁的同志闭嘴。赶紧改错还来的及原理其实很好理解,从设计的角度很容易分析出wait是会释放锁的。线程在运行的时候占用了计算机的共享资源,因为当前线程在使用它,然而当前线程进行了休眠例如 wait() 很浅显的道理,当前线程已经停止了,那意味着这个资源空闲了下来。那原创 2021-02-18 00:17:22 · 8767 阅读 · 11 评论 -
为什么重写equals方法和hashCode方法?对象为什么可以强转,为什么强转后可以调用对象的方法,为什么定义接口进行实现,他们之间的作用是什么?
昨天中午做高铁回到了家,从厦门到江西上饶只需要4个小时,不得不感叹高铁的速度。回到家里第一件事情就是睡觉,一觉起来早上4点半左右,按照日常玩了一会三国杀,完成了三国杀日常任务后就起床,打开了我的电脑,思考了一会后,有感,想写一篇博客。写了那么多代码,相信很多java程序员都写过下面这段类似的代码下面是一个标准化的entity实体对象,实现序列化Serializable接口、重写hashCode和equals方法,如果还需要比较大小则还需要实现Comparable接口。import lombok.A原创 2021-01-24 16:56:08 · 677 阅读 · 0 评论 -
Servlet+Session+Cookie登录、校验、退出的逻辑代码
登录逻辑的实例代码,逻辑在我加的注释上,阅读代码就能掌握整个完整的 输入用户信息,进行校验,登录成功后的逻辑操作,登录失败后的逻辑操作下面用到的依赖:(maven仓库地址直链):servlet-api 、fastjson登录逻辑import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;import java.io.BufferedRe原创 2021-01-05 00:20:01 · 680 阅读 · 0 评论 -
java8以后字符串常量池的位置,以及元空间的探秘,使用VisualVM进行实战验证
在网上看了很多博客,解释也比较多,关于字符串常量池的具体位置难以分辨谁真谁假。 对于jdk8以后的版本有人说字符串常量池在元空间中,也有人说字符串常量池存在堆中。 到底谁说的对?他们的说法有依据吗? 今天让我们来一起探讨一下这个问题有人说字符串常量池在java堆中,可又有人说常量池存在元空间中。分享几篇知乎文章 关于jvm运行时数据区的模型:1、面试官 | JVM 为什么使用元空间替换了永久代?2、Java方法区与元空间为了解决这个问题,下面我们通过Idea、VisualVm原创 2020-12-08 03:56:29 · 32395 阅读 · 12 评论 -
策略模式的妙用(java8中 lambda表达式的灵活使用)
如果你还不熟悉java8的新特性,可以看下下面这篇文章 或者 B站红康师傅讲解的java8新特性,宋红康老师讲的不止有java8哦,乃至java 9-15的新特性都有,可以在B站中找到,或者尚硅谷官网可以免费获取到。 《B站尚硅谷官方运营号地址》想要了解四大类型(Consumer、Supplier、Predicate、Funtion)接口的看下前置文章: java8新特性—大总结–建议收藏、点赞、加关注!!!如果此前已经掌握了java8的新特性,至少lambda表达式是没啥大问题的。请听题原创 2020-12-07 11:11:59 · 26026 阅读 · 20 评论 -
ThreadLocal源码的解读--内存泄漏原理,以及处理方式
第一要提到的内容、ThreadLocal的常规使用( 后面有彩蛋!)使用set(T value)方法将值存入ThreadLocalMap,如果map不存在,则进入set()内部的else分支创建一个ThreadLocalMap并将值value存入map,在创建的过程中会将这个map保存到当前线程对象的成员属性上然后调用get()方法获取值,get()内部会先从线程对象取出ThreadLocalMap,然后再取出其中的值,并返回使用完后我们需要调用remove()方法清除ThreadLocalMap原创 2020-09-26 02:59:09 · 72611 阅读 · 3 评论 -
自定义注解+反射 实现给注解添加功能的效果
注解我们经常会用到,或者在jdk源码中也会看到,例如: @Deprecated以及我们在spring或者springboot中经常用到@Controller、@Service、@Repository、@Entity等注解。是否思考过他们是怎么工作的?下面我们使用 自定义注解 + 反射给注解加上功能先贴出整体效果图:源码:java8环境一、定义注解jdk提供了自定义注解的工具类,在 java.lang.annotation包下先看下自定义注解的模板:(模板后面有解释)import java原创 2020-12-01 02:51:16 · 26199 阅读 · 0 评论 -
用枚举代替写if-else的一个案例,看大佬是怎么写代码的,升职加薪就靠它了。
首先要感谢大佬 杭州-java-牧头的倾囊教授大佬的博客地址:http://googlevip8.com/平常使用过程中我们对于enum很少使用,实际上枚举有很多用处,下面是一个关于用枚举代替if-else的一个案例。可以让你的代码更具可扩展性,减少加班改需求的可能。下面是一个关于加减乘除四则运算的设计一般的写法是if-elseIf-else方式public class IfElse的方式 { public static void main(String[] args) {原创 2020-11-30 23:58:41 · 26988 阅读 · 3 评论 -
强引用、软引用、弱引用、虚引用的区别和作用,以及例子
引用大佬的博客: Java:强引用,软引用,弱引用和虚引用建议直接看大佬的博客,我这里只做总结。总结强引用 相当于 Object obj=new Object()这种引用就是强引用,即使OOM也不会被垃圾回收器进行回收软引用 如果将要发生了OOM(内存不够用了)则会将对象自动回收弱引用 只要发生了gc()就会进行回收虚引用的对象虚引用 主要用来跟踪对象被垃圾回收的活动。虚引用必须和引用队列关联使用。案例:import java.lang.ref.*;public class WeakRe原创 2020-11-29 00:20:45 · 25878 阅读 · 0 评论 -
jdk中提供的Collection、Collections、Collector、Collectors你分的清楚?
初次一看四个有点相似,而且有些时候一不小心还真有可能敲错,因为喜欢代码提示没仔细看提示,结果通过.去调用结果发现没有找到你想用的方法。所以写代码的时候需要注意一点这个区别Collection是集合类的一个接口,定义了集合的一些规范方法Collections是一个集合工具类,本身没有实现Collection接口,而是内部类实现了Collection接口,它的作用就是封装常用的集合操作。public static void main(String[] args) { ArrayList<In原创 2020-11-27 04:17:42 · 29882 阅读 · 3 评论 -
可重入锁和不可重入锁的区别
不可重入锁示例(同一个线程不可以重入上锁后的代码段)如下是一个不可重入锁的逻辑过程,会发现执行main方法控制台会打印执行doJob方法前,然后就会一直线程阻塞,不会打印执行doJob方法过程中,原因在于第一次上锁后,由于没有释放锁,因此执行第一次lock后isLocked = true,这个时候调用doJob()内部又一次调用了lock()由于上个线程将isLocked = true,导致再次进入的时候就进入死循环。导致线程无法执行System.out.println("执行doJob方法过程中");这原创 2020-10-22 21:40:16 · 83418 阅读 · 3 评论 -
Sentinel下载和使用,java -jar jar包 --server.port=自定义端口
sentinel官网下载sentinel地址:https://github.com/alibaba/Sentinel/releases下载 sentinel-dashboard-1.7.2.jar通过java -jar启动sentinel ,默认sentinel占用的端口是8080 --server.port=8888是将端口设置为8888,如果有改端口需求则更改对应端口即可java -jar .\sentinel-dashboard-1.7.2.jar --server.port=8888原创 2020-06-28 13:24:57 · 134407 阅读 · 0 评论 -
JVM架构内存结构图
在线分享地址:JVM内存结构图原创 2020-09-14 03:40:54 · 89435 阅读 · 0 评论 -
JVM的生命周期
①虚拟机的启动–>②虚拟机的执行–>③虚拟机的退出虚拟机的启动java虚拟机的启动时通过引导类加载器(Bootstrap ClassLoader)创建一个初始类(initial class)来完成,这个类是由虚拟机的具体实现指定的。虚拟机的执行执行一个java应用程序的时候就会启动一个java虚拟机进程。程序开始则虚拟机的执行就开始,程序结束虚拟机的执行就结束虚拟机的退出虚拟机的退出由以下几种情况程序正常执行结束执行过程中抛异常或错误操作系统执行出错执行Runtime类或原创 2020-09-13 22:46:00 · 119755 阅读 · 0 评论 -
java12/13新特性
java12新特性一:switch表达式jdk12以前的switch是这样的/** * 枚举 */enum Fruit { PEAR, APPLE, GRAPE, MANGO, ORANGE, PAPAYA;}public class SwitchTest { public static void main(String[] args) { int numberOfLetters; Fruit fruit = Fruit.APPLE;原创 2020-09-11 03:07:21 · 104281 阅读 · 0 评论 -
关于if和位运算比较的测试代码
本着学习严谨的态度,非常疑惑因此自己动手写了一下,进行测试改编于沉默王二的一篇博客点我传送原文地址如果进行Arrays.sort(data);排序 /** * @author 沉默王二,一枚有趣的程序员 */ // 声明数组 int arraySize = 32768; int data[] = new int[arraySize]; Random rnd = new Random();原创 2020-08-18 22:49:19 · 108111 阅读 · 0 评论 -
IDEA 中 Error:java: 警告: 源发行版 X 需要目标发行版 X
出现这种错误的原因是模块里源发行版本和模块的jdk版本不一致,并且模块中的jdk编译环境不同关于源版本的设置:关于目标版本的设置原创 2020-08-04 13:15:10 · 148711 阅读 · 11 评论 -
ArrayList扩容机制的发展过程
jdk1.2中扩容算法是这样的。1.5倍+1public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if原创 2020-08-04 02:53:10 · 112263 阅读 · 0 评论 -
面试时别再回答ArrayList的初始容量为10了!!!这里有更好的答案!
使用过ArrayList或者背过面试题的小伙伴都知道ArrayList的初始容量为10。但这个答案不完全正确,在jdk1.2到jdk1.6中的ArrayList的源码中,在构造方法上的确是创建了一个初始容量为10的容器。摘录jdk_1.6的源码,1.2到1.6都是直接创建一个长度为10的数组但是在jdk_1.7中的源码是这样写的调用构造方法时,如下说明从jdk_1.7开始,当你进行new ArrayList();创建的是一个空数组初始容量就不是10了,而是一个空数组从jdk_1.2开始到原创 2020-08-04 02:01:39 · 135495 阅读 · 2 评论 -
JVM专题20道面试题和答案
一、内存模型以及分区,需要详细到每个区放什么。JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放在方法区 new:方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字 节码)等数据堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要 在堆上分配栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操 作数原创 2020-08-02 13:29:57 · 117950 阅读 · 0 评论 -
VisualVM的配置和使用
下载VisualVM:官网下载页面解压缩后进入到etc目录修改visualvm.conf配置文件需要注意:我当时使用的visualVM是2.0.3这个版本的只支持jdk8以前的,我本地配置的环境变量是jdk14,但是又不想配置jdk8作为环境变量,直接修改配置文件,将这里的目录改成jdk8的javahome即可。然后运行VisualVM...原创 2020-08-01 12:20:31 · 113786 阅读 · 4 评论 -
java9新特性----大总结--建议收藏、点赞、关注 三连
文章导航:java8新特性—大总结–建议收藏、点赞、加关注!!!一、java9目录结构的改变java9引入模块的概念因此,目录发生了改变java8中java11中(和java 9一样的目录结构)下面框出来的是和java8不一致的地方legal是法律文件jmods里面存的是jmod文件,创建自定义运行时的映射值就需要修改jmod文件conf是jdk9中的配置文件二、新特性:模块化系统原先的名称是Jigsaw项目,后面命名为Modularity项目以前的项目是通过包名来拆分代码,方原创 2020-07-31 22:55:51 · 118487 阅读 · 0 评论 -
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet public class L原创 2020-07-29 04:44:50 · 100504 阅读 · 0 评论 -
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet 关于HashMap的源码是这原创 2020-07-29 04:44:29 · 100418 阅读 · 0 评论 -
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet
### 总结 HashSet:HashSet的底层是HashMap并且HashSet中的set相当于在HashMap的key,而value则是`new Object`出来的常量扩容条件则是按照HashMap的扩容规则进扩容原创 2020-07-29 04:44:04 · 98908 阅读 · 2 评论 -
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList
一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之ArrayList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之LinkedList一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashMap一文搞定ArrayList、LinkedList、HashMap、HashSet -----源码解读之HashSet 一、ArrayList 源码原创 2020-07-29 04:39:23 · 110180 阅读 · 0 评论