Java-基础
文章平均质量分 58
IT匠人
38989725@qq.com
展开
-
arthas 阿里巴巴java诊断工具的简单实用
1.源代码地址arthas: Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具2.简单启动方法下载:https://alibaba.github.io/arthas/arthas-boot.jar启动java -jararthas-boot.jar选择:选择需要监控的进程监控:http://127.0.0.1:3658/命令:(插件)arthas idea - IntelliJ IDEs Plugin | Marketplace右击方法,.原创 2021-10-19 10:41:36 · 116 阅读 · 0 评论 -
Maven生命周期详解
Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的.转载 2021-08-25 14:32:05 · 94 阅读 · 0 评论 -
避免HashMap扩容的正确姿势
设置HashMap的初始容量HashMap在Java的使用中占据着很重要的地位,平时使用的时候,相信很多Java程序员都知道在定义HashMap的时候,给它设置一个初始容量,以便减少hashMap扩容(resize)带来的额外开销,比如像我同(zi)事(ji)的这段代码:@Testpublic void longLongAGo() { int count = 1000000; System.out.println("---------------- 不设置hashMap初始容量转载 2021-04-19 23:06:09 · 1797 阅读 · 1 评论 -
java Stream的Collectors.toMap 用法
直接上代码:importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;publicclasstest4{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubList<UserBo&g...原创 2021-04-19 21:02:37 · 4094 阅读 · 0 评论 -
ArrayList 扩容原理 及 性能分析
ArrayList 扩容原理面试中经常问到的问题之一就是List的扩容机制了,他是怎么做到扩容的,大家都能答出来底层是数组,复制一个数组来扩容,但是再具体一点来说,大家就不知道该怎么说了,如果不看源码说这么多确实就差不多了,但是看了源码你会说的更多,更详细,更具体,本篇主要看的是jdk1.8 至于其他版本大同小异,看看就知道了,言归正传1)List扩容实现步骤 总的来说就是分两步:1、扩容...原创 2021-04-10 00:11:59 · 300 阅读 · 0 评论 -
cron表达式获取上次执行时间和下次执行时间
package com.***;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.quartz.CronExpression;import org.quartz.CronScheduleBuilder;import org.quartz.Cr.转载 2021-04-07 23:44:35 · 5872 阅读 · 5 评论 -
System.out.println对性能的影响
讲讲你不知道的System.out.println在开发或者调试bug的过程中,有些同学经常用到System.out.println语句,输出到控制台,用来查看数据是否正常。开发或者调试完毕,很可能就忘记删除,直接就发布到生产中去了。在一些对性能要求比较高的项目当中,忘记删除的这些代码,就成为将为需要清除优化的对象了。System.out.println 这个语句 对性能有影响吗?答案是肯定的,下面用实例给大家验证一下:public class Test01 { ...转载 2021-04-03 22:17:21 · 2066 阅读 · 0 评论 -
Arrays.toList() 和Collections.singletonList()的区别
Arrays.asList()、Collections.singletonList()Arrays.asList(strArray)返回值是仍然是一个可变的集合,但是返回值是其内部类,不具有add方法,可以通过set方法进行增加值,默认长度是10Collections.singletonList()返回的是不可变的集合,但是这个长度的集合只有1,可以减少内存空间。但是返回的值依然是Collections的内部实现类,同样没有add的方法,调用add,set方法会报错java.lang.Unsuppor转载 2021-03-30 14:56:56 · 280 阅读 · 0 评论 -
事务隔离级别、脏读、不可重复读、幻读 介绍
事务是现代关系型数据库的核心之一。在多个事务并发操作数据库(多线程、网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题:第一类丢失更新(Lost Update)在完全未隔离事务的情况下,两个事务更新同一条数据资源,某一事务完成,另一事务异常终止,回滚造成第一个完成的更新也同时丢失 。这个问题现代关系型数据库已经不会发生,就不在这里占用篇幅,有兴趣的可以自行百度。脏读(Dirty Read)A事务执行过程中,B事务读取了A事务的修改。但是由于某些原因,A事务可能没有完成提交,发生原创 2021-02-08 15:46:42 · 386 阅读 · 0 评论 -
三种单例模式的终极写法(包括反射攻击)
一、饿汉式的反射攻击及解决方法public class HungrySingleton { //直接声明一个需要被单例的对象,在静态块中初始化对象 private final static HungrySingleton hungrySingleton; static { hungrySingleton=new HungrySingleton(); } //私有的构造器,不被外部所访问 private HungrySingleton(){原创 2021-02-07 10:04:02 · 195 阅读 · 0 评论 -
CSRF攻击原理以及防御方法
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。...转载 2021-01-28 15:20:06 · 541 阅读 · 2 评论 -
Map集合循环遍历的几种方式
** * Map 集合的循环遍历 * @data 2018.1.21 * */public class TestMap { public static void main(String[] args) { Map<String, Object> map = new HashMap<String, Object>(); map.put("aaa", 111); map.p.原创 2020-11-25 18:09:38 · 457 阅读 · 0 评论 -
centos8.0安装java环境
1.下载java版本到本机3.安装(1)创建安装目录mkdir /usr/local/java/(2)解压到新建目录tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/java/4.设置环境变量打开文件vim /etc/profile在文件末尾添加export JAVA_HOME=/usr/local/java/jdk1.8.0_171export JRE_HOME=${JAVA_HOME}/jree.原创 2020-11-06 15:08:10 · 1061 阅读 · 0 评论 -
Java8 Stream Lambda 对象转换
User 转SchoolResponseList<User> usrLst = userMapper.selectList();List<SchoolResponse> schoolLst = usrLst.stream().map(tmp->{ SchoolResponse school = new SchoolResponse(); school.setSchool(tmp.getSchool()); ...原创 2020-11-02 17:03:52 · 1893 阅读 · 0 评论 -
Java8 Stream Lambda sorted()之正序倒序
下面代码以自然序排序一个listlist.stream().sorted() 自然序逆序元素,使用Comparator提供的reverseOrder()方法list.stream().sorted(Comparator.reverseOrder())使用Comparator来排序一个listlist.stream().sorted(Comparator.comparing(Student::getAge)) 把上面的元素逆序list.stream().sorted(...原创 2020-10-27 16:08:13 · 30422 阅读 · 1 评论 -
Java8 Stream Lambda 组合使用
Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读放大招,流如何简化代码如果有一个需求,需要对数据库查询到的菜肴进行一个处理: 筛选出卡路里小于400的菜肴 对筛选出的菜肴进行一个排序 获取排序后菜肴的名字 菜肴:Dish.javapublicclassDish{privateStringname;privateboolean...原创 2020-10-22 12:35:29 · 840 阅读 · 0 评论 -
List Collections.sort 排序
Collections.sort(list, new Comparator<Entity>() { @Override public int compare(Entity obj1, Entity obj2) { return obj1.isRecommend != obj1.isRecommend; } });原创 2020-09-29 17:20:19 · 152 阅读 · 0 评论 -
Mysql 保留小数点后指定位数 进位(向上取)
计算百分比代码:private BigDecimal calcDiscount(BigDecimal price,BigDecimal otPrice) { BigDecimal discount = BigDecimal.ZERO; discount = price.divide(otPrice,2,BigDecimal.ROUND_UP); return discount; }mysql写法select price,ot_price,ceil((pr原创 2020-08-12 11:55:22 · 1277 阅读 · 0 评论 -
gson 泛型对象 转换
JsonUtil.fromJson(body, new TypeToken<BaseReqVo<EnterNotifyReqVo>>(){}.getType());用TypeToken 构造一个BaseReqVo<EnterNotifyReqVo> 的 type public static <T> T fromJson(String str, Type type) { return getGsonInstance().f...原创 2020-07-15 13:02:09 · 640 阅读 · 0 评论 -
Java日志系统相关包的梳理
1.常见的日志框架日志框架 介绍 jul(java.util.logging) jdk1.4加入,为了对抗log4j,效率灵活性较差使用较少 log4j 最广泛应用的日志框架,成为事实上的标准 logback 基于slf4j-api接口实现,性能高于log4j log4j2 重写了log4j,性能高于log4j,logback 注:log...转载 2019-04-18 10:00:40 · 380 阅读 · 0 评论 -
关于BeanUtils.copyProperties的用法和优缺点
一、简介: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。二、用法: BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyPropert转载 2017-11-22 19:24:28 · 2647 阅读 · 0 评论 -
深入理解Java中的String
一、String类想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:public final class String implements java.io.Serializable, Comparable, CharSequence{ /** The value is used for character storage. *转载 2017-06-18 01:08:22 · 238 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2017-06-14 00:00:37 · 184 阅读 · 0 评论 -
transient的用途
transient的用途Q:transient关键字能实现什么?A:当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。例如,当反序列化对象——数据流(例如,文件)可能不存在时,原因是你的对象中存在类型为java.io.InputStream转载 2017-07-01 15:43:28 · 329 阅读 · 0 评论 -
Java反射机制详解
概要:Java反射机制详解| |目录·反射机制是什么·反射机制能做什么·反射机制的相关API·通过一个对象获得完整的包名和类名·实例化Class类对象·获取一个对象的父类与实现的接口·获取某个类中的全部构造函数 - 详见下例·通过反射机制实例化一个类的对象·获取某个类的全部属性·获取某个类的全部方法·通过反射机制调用某个类的方法·通过反射机制操作某个类的属性·反射机制的动态转载 2017-07-01 17:46:10 · 246 阅读 · 0 评论 -
java反射机制剖析— Class Loader
反射机制总结:为Java提供了运行时加载类的能力,也就是动态性。Class是信息提供者,Class Loader是加载工具,二者都是反射机制最基础的部分。那么所谓的反射就是解除耦合,方式就是通过Class取得未知类的信息,而后实例化。当然Class Loader的所做的工作是隐藏的,是Class对象去调用的。所以无需显示的自己调用。简介 ClassLoader是负责加转载 2017-07-01 18:01:01 · 234 阅读 · 0 评论 -
for(;;)和while(true)的区别
再看JDK源码的时候发现,“死循环”有两种写法:for(;;)和while(true),我就疑问,两者有啥区别,有啥源码中多数是for( ; ; )这种形式的,编译前 编译后 while (1); mov eax,1 test eax,ea转载 2017-07-03 11:17:46 · 208 阅读 · 0 评论 -
@SuppressWarnings 手册
一、前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了。这时我们可以在方法前添加 @SuppressWarnings("unused") 去除这些“感叹号”。 二、 @SuppressWarin转载 2017-08-10 11:57:47 · 216 阅读 · 0 评论 -
注解(Annotation)自定义注解入门
深入理解Java:注解(Annotation)自定义注解入门 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说转载 2017-08-10 12:16:44 · 144 阅读 · 0 评论 -
注解(Annotation)--注解处理器
深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Jav转载 2017-08-10 12:17:57 · 194 阅读 · 0 评论 -
基于Spring的AOP实现自定义annotation操作日志
引入项目需要的AOP包 dependency> groupId>org.springframeworkgroupId> artifactId>spring-aopartifactId> version>4.1.7.RELEASEversion> dependency> dependency> groupId>aspect转载 2017-08-10 12:24:28 · 306 阅读 · 0 评论 -
JDK基础概念及目录结构
JDK,JRE,JVM等基础概念我们通常所说的JDK,其实是指Java开发包,里面包含Java开发用到的工具集。JDK(Java Development ToolKit),包含了Java运行环境(JRE)和开发工具(编译器,调试器,javadoc等)。我们就是依靠JDK来开发和运行Java程序的。JDK的编译器Javac[.exe],会将Java代码编译成字节码(.class文件)。编转载 2017-07-26 11:41:48 · 5275 阅读 · 1 评论 -
Javac编译原理
Javac编译原理java源代码(符合语言规范)-->javac-->.class(二进制文件)-->jvm-->机器语言(不同平台不同种类)如何让java的语法规则适应java虚拟机的语法规则?这个任务由javac编译器来完成java语言规范转换成java虚拟机语言规范。编译流程:流程:词法分析器:将源码转换为Token流将转载 2017-07-28 10:09:56 · 248 阅读 · 0 评论 -
JVM加载class文件的原理浅析
1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中2.Java中的类大致分为三种: 1.系统类 2.扩展类 3.由程序员自定义的类 3.类装载方式,有两种 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加转载 2017-07-28 10:24:23 · 300 阅读 · 0 评论 -
pinyin4j使用示例(支持多音字)
pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j是一个支持将中文转换到拼音的Java开源类库。支持简体中文和繁体中文字符;支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字;支持多音字,即可以获取一个中文转载 2017-09-15 10:18:44 · 6314 阅读 · 0 评论 -
Object转byte[]←→byte[]转Object
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public cl转载 2017-09-15 10:22:18 · 2205 阅读 · 0 评论 -
java 合并两个byte数组
//java 合并两个byte数组 public static byte[] byteMerger(byte[] byte_1, byte[] byte_2){ byte[] byte_3 = new byte[byte_1.length+byte_2.length]; System.arraycopy(byte_1, 0, byte_3,转载 2017-09-15 10:22:51 · 912 阅读 · 0 评论 -
对象复制
publicObject deepClone(Object obj){//将对象写到流里ByteArrayOutoutStream bo=newByteArrayOutputStream();ObjectOutputStream oo=newObjectOutputStream(bo);oo.writeObject(obj);//从流里读出来ByteArrayInputSt转载 2017-06-05 23:32:35 · 173 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
1.如果要操作少量的数据用:String2.单线程操作字符串缓冲区 下操作大量数据:StringBuilder3.多线程操作字符串缓冲区 下操作大量数据:StringBufferStringBuilder:线程非安全的StringBuffer:线程安全的转载 2017-06-05 23:40:19 · 130 阅读 · 0 评论