
Java SSM
文章平均质量分 56
Top5硕士,先后在京东、字节从事后端开发、大数据开发。专栏包含Java/JVM基础知识、Spring/Mybatis等框架集成、日常报错、面试题目、数据结构等,均为博主精心总结。从企业实战出发,提高开发中解决问题的能力。
二十六画生的博客
国内Top5硕士,先后在京东、字节从事多年后端开发、大数据开发。
展开
-
@RefreshScope原理
修改了配置值,能自动刷新设置成最新值。原创 2023-07-25 11:43:24 · 663 阅读 · 0 评论 -
Fastjson 解析不固定key
end原创 2022-06-16 18:44:39 · 608 阅读 · 0 评论 -
堆外内存 jvm
换句话说:堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。JVM堆外内存 - 晓风残月的博客Full GC时才会回收堆外内存。----Java 内存之直接内存(堆外内存) · 日常学习 · 看云----Major GC和Full GC的区别是什么?触发条件呢? - 知乎针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:Major GC通常是跟full GC是等价的,收集整原创 2022-06-13 16:00:18 · 724 阅读 · 0 评论 -
Java,重写Comparable比较方法,重写equals方法, Long 与 Long equals,Long 与 Long == ,Long 与 long ==
jdk1.8,1 重写Comparable比较方法2 重写equals方法3 Long 与 Long equals,Long 与 Long == ,Long 与 long ==原创 2022-04-13 17:25:54 · 1383 阅读 · 0 评论 -
Java list1=list2;list2=null ? list1=list2;list2.clear()?
Java list1=list2;list2=null ? list1=list2;list2.clear()?原创 2022-04-10 13:27:57 · 1016 阅读 · 0 评论 -
Java char int 转换/char[]char数组 字符串 转换 String.valueOf/Arrays.sort/int[]数组初始0/Integer[]数组初始null
public static void main(String[] args) { int[] crr = new int[200]; char a = 'a'; System.out.println(crr[a]);//0 System.out.println(crr[a]--);//0 System.out.println(crr[a] + 2);//1 /////////////////////...原创 2022-04-08 23:13:10 · 419 阅读 · 0 评论 -
Java 发送 post请求
import java.io.IOException;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.原创 2021-09-27 20:00:19 · 825 阅读 · 0 评论 -
Java 异常 由近及远 打印出来
java1.8end原创 2021-08-18 16:16:18 · 211 阅读 · 0 评论 -
FlinkSQL split报错No match found for function signature 使用UDF ScalarFunction/TableFunction
1 用TableFunction报错,用ScalarFunction正常 stEnv.registerFunction("SplitLine",new SplitLine("_")); //报错SqlValidatorException: No match found for function signature SplitLine(<CHARACTER>) Table result = stEnv.sqlQuery("SELECT name,原创 2021-03-10 11:06:24 · 11626 阅读 · 0 评论 -
Jstack 分析哪一行代码慢 ?jvm 打印出线程栈分析
面试题:后台只有一台服务器,上线后发现,只有1个接口请求很慢,其他接口的请求和反应时间很正常,该怎么分析?怎么找出是哪行代码导致的慢?是在线上,当然不能测试或单步调试。答案:打印出线程栈分析。举例:/** * @Author liuyazhou * @Date 2021/2/25 16:30 * @Version 1.0 * @Desc *//** * 同步线程 */class SyncThread implements Runnable { private原创 2021-02-27 18:44:30 · 973 阅读 · 0 评论 -
JVM 内存分析MAT使用方法
Shallow Size (对象自身占用的内存大小)Retained Size (被GC后Heap上释放的内存大小)with outgoingreferences(查看对象为什么消耗内存,查看对象引用的其他对象)with incoming references(查看对象被谁引用)https://www.cnblogs.com/hanlinhu/p/10174185.htmlMAT工具介绍工欲善其事必先利其器,学会使用工具也是一种本领。本篇文章就把自己之前工作中用到的一个内存分析工具.转载 2021-02-27 17:45:11 · 897 阅读 · 0 评论 -
JVM MAT分析器中的shallow heap 和 retained heap详解
shallow heap:对象本身的大小,如果是数组或集合则是各个元素的总大小。retained heap:对象本身的大小 + 引用的其他对象的大小。一个对象的shallow heap的大小指的是该对象在没有引用其他对象的情况下本身占用的内存大小。一个普通对象的shallow heap 的大小(不包括数组类型)依赖于它含的方法,元素的大小。而一个数组类型的shallow heap的大小则依赖于数组的长度和数组里面元素的类型。集合类型的shallow heap的大小则指的是集合所包含的所有对象的大小.转载 2021-02-27 17:28:12 · 9756 阅读 · 0 评论 -
JVM 频繁full gc / oom内存溢出/ 分析工具 jmap/Jconsole 用法
分析解决方法:1 用JVisualVM 或Jconsole 分析 进程(不用jmap dump出镜像,JVisualVM功能比Jconsole强大)2 先用jmap dump出镜像,再导入mat分析-------------------------Java内存分析工具MAT(Memory Analyzer Tool)JVisualVM是一个集成多个JDK命令行工具的可视化工具。可以作为Java应用程序性能分析和运行监控的工具。Jconsole是JDK自带的监控工具,在JDK/b.原创 2021-02-27 12:47:02 · 1633 阅读 · 0 评论 -
JVM性能监控于故障处理工具 jps/ jstat/jinfo/jmap/jhat/jstack/HSDIS/jconsole/jvisualvm
1 jps:虚拟机进程状况工具:查看当前运行的java进程id,后面的许多命令都是基于此命令找到pid再进一步排查问题。2 jstat:虚拟机统计信息监视工具,如每隔10s监视jvm的运行状态3 jinfo:用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。特别说明两个命令 -->jinfo -flag [ + | - ]name pid开启或者关闭对应名称的参数。使用 ji.原创 2021-02-27 12:38:36 · 409 阅读 · 0 评论 -
mac 如何查看 java程序的进程id ?
尝试在终端中使用ps aux | grep APP_NAME。92249 就是这个Java应用的进程id原创 2021-02-27 12:18:18 · 3556 阅读 · 0 评论 -
数据结构 小顶堆建堆过程 构建过程
【一】简介最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。 最小堆示例:【二】最小堆的操作最小堆的构建:初始数组为:9,3,7,6,5,1,10,2按照完全二叉树,将数字依次填入。填入完成后,从最后一个非叶子结点(本示例为数字6的节点)开始调整。根据性质,小的数字往上移动;至此,第1次调整完成。注意,被调整的节点...转载 2021-02-26 18:53:20 · 10066 阅读 · 0 评论 -
Java 为什么数组下标只能为int不能为long?int32位,为何最大值不是2^32 -1 ?
一个小标为int的byte数组全部放满东西需要的内存为(2^31-11)*1b=2Gb=0.25GB一个小标为long的byte数组全部放满东西需要的内存为(2^63+1)*1b 需要的内存太大 !!请问,你的机器有这么大的内存吗?https://bbs.csdn.net/topics/390207278byte:byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byte 类...原创 2021-01-30 13:00:48 · 1535 阅读 · 0 评论 -
Java单例模式 双重校验锁 2021
package com.company;/** * @Author you guess * @Date 2021/1/29 09:32 * @Version 1.0 * @Desc 懒汉式 双重校验锁 */public class SingletonTest { //变量私有 private volatile static SingletonTest instance = null;//用volatile static 修饰 //构造方法私有 priva.原创 2021-01-29 09:46:09 · 287 阅读 · 0 评论 -
Java ConcurrentSkipListMap 跳表
到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。 红黑树:插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数据天然有序。 然而,这次介绍第三种实现key-value的数据结构:SkipList。SkipList有着不低于红黑树的效率,但是其原理和实现的复杂度要比红黑树简单多了。SkipLi转载 2021-01-28 22:14:18 · 575 阅读 · 0 评论 -
Mybatis JDBC 事务隔离级别/脏读 不可重复读 幻读(虚读)
一般数据库的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√: 可能出现×: 不会出现 脏读 不可重复读 幻读 说明 Read uncommitted √ √ √ 直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别 的...转载 2021-01-19 11:45:35 · 1627 阅读 · 0 评论 -
根据CPU核心数确定线程池并发线程数
一、抛出问题关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下:第一派:《Java Concurrency in Practice》即《java并发编程实践》,如下图:如上图,在《Java Concurrency in Practice》一书中,给出了估算线程池大小的公式:Nthreads=Ncpu*Ucpu*(1+w/c),其中Ncpu=CPU核心数Ucpu=cpu使用率,0~1W/C=等待时间与计算时间的比率第..转载 2021-01-19 10:41:23 · 1222 阅读 · 2 评论 -
Java random随机数/ seed 种子 / System.nanoTime() 的理解 与 使用
伪随机(preundorandom):通过算法产生的随机数都是伪随机!!只有通过真实的随机事件产生的随机数才是真随机!!比如,通过机器的硬件噪声产生随机数、通过大气噪声产生随机数Random生成的随机数都是伪随机数!!!是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)Random类拥有两个构造方法,用于实现随机数生成器:Random( ) 构造一个随机数生..原创 2021-01-16 11:39:07 · 1743 阅读 · 1 评论 -
Java Collections.sort 排序发生异常时结果是?
抛出异常时,记录会放到末尾(不再比较,不再往后按照新的属性比较)package com.company;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * @Author you guess * @Date 2021/1/8 11:05 * @Version 1.0 * @Desc */class M.原创 2021-01-08 11:24:50 · 1225 阅读 · 0 评论 -
Java List Iterator ConcurrentModificationException异常原因
package com.company;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * @Author you guess * @Date 2021/1/7 12:33 * @Version 1.0 * @Desc */public class Main26 { public static void main(String[] args) { .原创 2021-01-07 15:51:02 · 555 阅读 · 0 评论 -
JVM堆内存是如何划分的?为什么会堆内存溢出?/Xmx/Xms
JAVA堆内存管理是影响性能主要因素之一。堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的。先看下JAVA堆内存是如何划分的,如图:JVM内存划分为堆内存和非堆内存,堆内存分为年轻代(Young Generation)、老年代(Old Generation),非堆内存就一个永久代(Permanent Generation)。 年轻代又分为Eden和Survivor区。Survivor区由FromSpace和ToSpace组成。Eden区占大容量转载 2021-01-05 15:49:28 · 1123 阅读 · 0 评论 -
Java 冒泡排序 优化后
package com.usual;import java.util.Arrays;/** * @Author you guess * @Date 2021/1/4 11:10 * @Version 1.0 * @Desc */public class BubbleSort { public static void main(String[] args) { BubbleSort main = new BubbleSort(); //int[].原创 2021-01-04 11:33:13 · 222 阅读 · 0 评论 -
Java单例模式 双重校验锁 为何两次if判断?
内层判断:如果内层不加if判断,就会实例化多次,这是显而易见的,这就违背了单例模式的单例二字。外层判断:试图想想一种情况,当线程1走完了内层判断,对象实例化了,线程3也调用了getInstace函数,如果没有加外层的判断线程3还是要继续等待线程2的完成,而加上外层判断,就不需要等待了,直接返回了实例化的对象。我的理解:外层的判断是为了提高效率【不必synchronized等待】,里层的判断就是第一次实例化需要。转自:https://blog.csdn.net/weixin_38983929/..转载 2020-12-28 22:35:03 · 3302 阅读 · 1 评论 -
Java单例模式 双重校验锁 为啥要用volatile修饰
public class Single {private static volatile Single single;public static Single getSingle(){if (single==null){synchronized (Single.class){if (single==null){single=new Single();}}}return null;}}因为如果不用volatile修饰的话,在 single=new Sing.转载 2020-12-28 22:25:36 · 1421 阅读 · 1 评论 -
Java,报错UnsupportedOperationException,Arrays.asList
package com.company;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @Author you guess * @Date 2020/12/17 19:11 * @Version 1.0 java1.8 * @Desc */public class Main21 { public static void main(String[] args) {.原创 2020-12-17 19:48:49 · 314 阅读 · 0 评论 -
Java List<List<Integer>> 的contains 是校验子集合的每个元素是否都一致
1:public static void main(String[] args) { List<List<Integer>> res = new LinkedList<>();//保证输出的顺序就是插入的顺序 List<Integer> list; list = Arrays.asList(1, 2, 3, 4); res.add(list); list = Ar..原创 2020-11-26 12:16:43 · 3420 阅读 · 0 评论 -
Java List转字符串,Set转字符串,集合转字符串,数组转集合
Set<String> set1 = new HashSet<>(); set1.add("a"); set1.add("b"); System.out.println(StringUtils.join(set1.toArray(), ","));//a,b List<String> list1 = new ArrayList<>(); System.out.println(..原创 2020-07-11 15:47:54 · 13298 阅读 · 2 评论 -
HashMap引用传递,对象直接赋值,修改的是同一个对象,new HashMap「」(Map)才是生成新的对象
HashMap引用传递;对象直接赋值,修改的是同一个对象 Map<String, String> srcMap = new HashMap<>(); srcMap.put("a","a"); Map<String, String> addMap2 = srcMap; Map<String, String> removeMap2 = srcMap; addMap2.put("b","原创 2020-07-11 15:43:54 · 3789 阅读 · 0 评论 -
Mac 安装jd-gui 反编译jar
1使用brew安装 ,打开终端窗口,输入下面命令brew cask install jd-gui2选中jar,在打开方式中选择jd-gui,报错:MacOs 无法打开xxx ,因为无法验证开发者禁用掉就好了sudo spctl --master-disable...原创 2020-06-19 12:17:54 · 7019 阅读 · 0 评论 -
SLF4J: Failed to load class "StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further...原创 2020-04-28 21:24:01 · 1391 阅读 · 0 评论 -
java,self4j,输出异常信息
1 public String f3() { try { String s = null; return s.replaceAll("1", "2"); } catch (Exception e) {// e.printStackTrace(); logger...原创 2020-04-27 22:37:43 · 442 阅读 · 0 评论 -
java, split(regex) 和 split(regex, limit)用法
limit是正整数时表示分割成几个字串,先分割前面的limit是负整数时表示完全分割,子串可能会是""limit是0时,与split("分割符")同义,子串不会是"" String str = "a,b,c,,"; String[] strAry = str.split(","); System.out.print(strAry.lengt...原创 2020-04-27 22:18:42 · 1005 阅读 · 0 评论 -
java,catch时依然返回结果
public String f3() { try { String s = null; return s.replaceAll("1", "2"); } catch (Exception e) { e.printStackTrace(); return "...原创 2020-04-27 22:03:53 · 450 阅读 · 0 评论 -
java,if else if else if 成立时只会走其中一个路径,不成立时才会一个一个走
public int f4() { if (1 == 1) { if (2 == 3) { return 1; } else if (3 == 4) { return 1; } } else if (2 == 2) { ...原创 2020-04-27 22:02:29 · 4361 阅读 · 0 评论 -
fastjson 序列化 反序列化 2大常用用法
1 转为字符串JSONObject.toJSONString(对象名); //对象转为json字符串UserB userB2 = new UserB("lisi", ""); System.out.println(JSONObject.toJSONString(userB2));//{"addr_city":"","first_name":"lisi"}2转...原创 2020-04-27 16:23:40 · 490 阅读 · 0 评论 -
Guava包,ImmutableSet,ImmutableList,ImmutableMap,Collections.unmodifiableList,不可变类,区别用法
public void testJDKImmutable() { List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); //通过list创建一个不可变...原创 2020-04-26 22:44:48 · 763 阅读 · 0 评论