
java
平静不绝望
ALOHA HEJA HE
-
原创 【JVM】多图搞明白!基于栈的字节码解释执行引擎
1 基于栈的字节码解释执行引擎public int calc() { int a = 100; int b = 200; int c = 300; return (a + b) * c;}2 多图解释2021-03-06 10:02:2029
0
-
原创 【红黑树】红黑树特征,哪里在用?为什么redis skiplist没有使用?
1 特征定义上两个图2 红黑树使用 java 8 hashMap 和 concurrentHashMap 都在使用3为什么redis skiplist没有使用 ? 看看作者怎么说吧? 1They are not very memory intensive,lessmemory intensive than btrees 内存不敏感 2 A sorted set is often target of many ZRANGE or ZREVRAN...2021-03-03 15:20:4328
2
-
原创 【ALGO】 二叉树公共祖先和之字形遍历(层次遍历)
1 源码javapackage classloader.tree;import java.util.Scanner;import java.util.*;import java.util.concurrent.ArrayBlockingQueue;public class Main { // 保存父节点 public static Map<Integer, TreeNode> parent = new HashMap<>(); // 保存遍2021-03-03 13:07:2511
0
-
原创 【ALGO】 唯一数字,其余数字出现三次
1 直接上题解// 唯一数字public static void main(String[] args) { int[] array = new int[]{1,1,1,2,3,3,3,5,5,5,6,2,2}; int ones = 0; int twos = 0; int threes; for (int x : array) { twos = twos | (ones & x);// 位或 统计 出现过两次的bit累计 .2021-03-03 12:27:5220
0
-
原创 【ALGO】100盏灯问题
1 题目有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的2 题解过程思考:需要把每个灯泡的开关次数计算出来,其实这里需要你抽象转化为求一个数字的约数个数问题---->只要一个数字的约数是奇数个,那么这盏灯就是点亮的。而且一个数的约数是成对出现的,那么什么数字的约数(A==B)呢?2021-03-03 12:25:1421
2
-
原创 【ALGO】二叉树镜像
1 题目2 源码public static void SetMirrorRecursively(BinaryTreeNode root) { if (root == null || (root.leftChild == null && root.rightChild == null)) { return; } // 交换 BinaryTreeNode tempNode =...2021-03-03 11:45:4012
0
-
原创 【ALGO】07 动态规划精准复习--不要等过了山丘才发现无人守候
1 算法解释动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能 完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问 题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规 划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。 动态规划是自下而上的,即先解决子问题,再解决父问题;而用带有状态记2021-02-26 13:16:5230
0
-
原创 【IO】Java异步非阻塞编程的几种方式
1 服务端执行,最简单的同步调用方式:缺陷: 服务端响应之前,IO会阻塞在: java.net.SocketInputStream#socketRead0 的native方法上:2 JDK NIO & Future java 1.5之后优点:主线程可以不用等待IO响应,可以去做点其他的,比如说再发送一个IO请求,可以等到一起返回; 缺点: 主线程在等待结果返回过程中依然需要等待,没有根本解决此问题;3 使用Callback回调方式优点:主线程完成发送请求后,再也不用关心这.2021-02-25 20:12:3314
0
-
原创 【LRU】LinkedHashMap 实现 LRUCache
1 结构示意图2 源码实现package classloader.lc;import java.util.LinkedHashMap;import java.util.Map;/** * LinkedHashMap实现Map的接口,和HashMap不同的是维持了一个所有entries的双向链表, * 并持有一个该有序链表的迭代器,并有两个Entry<K,V>引用transient LinkedHashMap.Entry<K,V> head,tail..2021-02-25 15:08:0719
0
-
原创 【ALGO】 替换后最长子串长度
1 java 源码 解析public class LongestCommonStr { public static void main(String[] args) { String LC = "ABABCCCCCC"; int k = 2; char[] chars = LC.toCharArray(); System.out.println(getMaxCommonLength(chars, k)); }2021-02-24 10:19:1012
0
-
原创 【ALGO】最深公共祖先
1 源码class Solution { Map<Integer, TreeNode> parent = new HashMap<Integer, TreeNode>(); Set<Integer> visited = new HashSet<Integer>(); public void dfs(TreeNode root) { if (root.left != null) { pare2021-02-23 19:02:3714
0
-
原创 【ALGO】中序遍历+后序遍历构造二叉树
1 源码import java.util.HashMap;public class LCP { HashMap<Integer,Integer> memo = new HashMap<>(); int[] post; public TreeNode buildTree(int[] inorder, int[] postorder) { for(int i = 0;i < inorder.length; i++)2021-02-23 18:31:5020
0
-
原创 【ALGO】买卖股票的最佳时机
1 算法public class GuPiao { public static void main(String[] args) { int[] array = new int[]{7, 1, 5, 3, 6, 4}; // 累加所有的上升期间之和就是 最大收益值 System.out.println(maxProfit(array)); } public static int maxProfit(int[] prices)2021-02-23 17:57:1118
0
-
原创 【算法】寻找第K个最小的数
1 直接上源码实现public class QuickSort { private static final int[] array = new int[]{4,1,2,3,5,6,7,8,9,0}; public static int quickSortFindK(int[] array, int begin, int end, int k){ if(begin >= end){ return array[begin];2021-02-22 19:33:2516
0
-
原创 【约瑟夫环】java 数组实现
package com.xiaodaka.rec.data.refresh.lc;public class YueSeFu { private static int[] peopleCircle = new int[41]; static { for(int i = 0; i < 41; i++){ peopleCircle[i] = 1; } } public static void main(Str.2021-02-21 20:11:3932
0
-
原创 【01背包问题】java 实现源码,解题思路
1 背包问题有N(4)件物品和一个容量为V(BeiBaoSpace = 8)的背包。第i件物品的占用空间是space,价值是value。求解将哪些物品装入背包可使价值总和最大。抽象模型如下:2 java 代码实现import com.google.common.collect.Lists;import lombok.Data;import java.util.List;import java.util.Map;import java.util.function.F.2021-02-21 17:40:1960
1
-
原创 【java】基础 quick review all-in-one
1. JAVA 异常分类及处理1.1 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception.1. Error (比如ThreadDeath) 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果 出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 2. Exception(RuntimeException、CheckedException)又有两个分支,一个是运行时异常 Check2021-02-18 21:27:4819
0
-
原创 【集合】java 集合 quick review all-in-one
3.1. 接口继承关系和实现1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。 2. Iterator:迭代器,可以通过迭代器遍历集合中的数据 3. Map:是映射表的基础接口Java 的 List 是非常常用的数据类型。List 是有序的 Collection。Java List 一共三个实现类:3.2. List分别是 ArrayList、Vector 和 LinkedList。3.2.1. ArrayList(数组2021-02-18 19:52:5524
0
-
原创 【JVM】 jvm quick review知识 all-in-one
1 总体结构2 运行过程:① Java 源文件—->编译器—->字节码文件② 字节码文件—->JVM—->机器码用户线程: 这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。 Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把.2021-02-18 19:25:0830
0
-
原创 【LOCK】 java lock all-in-one
9 JAVA 锁9.1 乐观锁(读多写少 java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作)9.2 悲观锁(写多java 中的悲观锁就是 Synchronized,AQS 框架下的非公平锁则是先尝试 cas 乐观锁去获取锁,获取不到, 才会转换为悲观锁,如 RetreenLock)9.3 自旋锁(持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁 的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋), 等持有锁的线程释放...2021-02-18 11:45:4226
0
-
原创 【MAP】 HashMap ConcurrentHashMap all-in-one
0 文章结构 HashMap 1.7 vs 1.8 ConcurrentHashMap 1.7 vs 1.81 HashMap 1.7 1.8(数组+链表OR红黑树)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记 录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导 致数据的不...2021-02-17 21:53:151818
5
-
原创 【ClassLoader】 类加载器all-in-one
1 类加载器的代理模式--Java 类是否相同两个类是由不同的类加载器实例来加载的,因此不被 Java 虚拟机认为是相同的。了解了这一点之后,就可以理解代理模式的设计动机了。代理模式是为了保证 Java 核心库的类型安全。所有 Java 应用都至少需要引用java.lang.Object类,也就是说在运行的时候,java.lang.Object这个类需要被加载到 Java 虚拟机中。如果这个加载过程由 Java 应用自己的类加载器来完成的话,很可能就存在多个版本的java.lang.Obj...2021-02-17 21:01:3139
0
-
原创 【java】集合操作常用方法
// 不可修改List @Override public List<MediaType> getSupportedMediaTypes() { return Collections.unmodifiableList(this.supportedMediaTypes); }// 新的写法 this.client = Objects.requireNonNull(restClient, "restClient must not be null")// 拼接字符串 StringU.2020-12-01 18:29:5451
0
-
原创 【快速排序】java 实现
1 思路 每次partition,找到head的位置 循环不变量,最终保持 [from, head] <= unsort[head] [head+1, to] >=unsort[head]public class MyQuickSort { public static void main(String[] args) { int[] unsort = new int[]{2,4,9,1,3,4,5,6,7,8}; qs...2020-11-24 15:29:2428
0
-
原创 org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return va
1 原因:缺失结果输出转换类型;原理很简单。2 追源码返回类型 如下都会失败 @Data public class BaseHomeVO { } 或者 public class BaseHomeVO { } 或者 @Data public class BaseHomeVO implements Serializable { private static final long serialVersionUID = -5728606615570613500L; } 或者 public class Bas2020-11-10 18:26:59823
0
-
原创 Jackson 序列化的坑 对象属性 iOSApnsEnv 序列化后变成了 iosapnsEnv why?why?why?
1 首先这个名字怎么来的呢?先看个示例,就明白了图 1-1如果使用 @Data 注解呢? 看下图也是坑!图 1-22 源码分析com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector#collectAllcom.fasterxml.jackson.databind.introspect.POJOPropertiesCollector#_addFields // 基础属性设置 iOSApnsEn2020-10-23 18:19:1864
0
-
原创 原汁原味 -java反射
Working with proxy 优点:Developers get many key benefits from separating property-implementing code. One benefit of this separation is low maintenance cost for applications. Each such property can be2020-08-16 15:09:2938
0
-
原创 【技能库】--Unsafe 调戏String (intern)(201)
public static Unsafe getUnsafeInstance() throws Exception{ Field unsafeStaticField = Unsafe.class.getDeclaredField("theUnsafe"); unsafeStaticField.setAccessible(true);2020-08-16 15:08:4437
0
-
原创 【TCP】Recv-Q和Send-Q 不要在有什么误解了
1 LISTEN状态:表示队列中的连接数量,非LISTEN状态为字节数量; 非 LISTEN 状态Recv-Q 表示 receive queue 中的 bytes 数量; Send-Q 表示 send queue 中的 bytes 数值。2 Recv-Q表示的当前等待服务端调用 accept 来三次握手的 listen backlog 数值,即图中的全连接队列值(最大值为Send_Q+1),当客户端通过connect() 去连接正在 listen() 的服务端时,这些连接回经过半连接队列..2020-05-30 20:47:451197
0
-
原创 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "desc"
1 直接给出两个解决方案import java.io.IOException;public class SerializeTest { @Data static class User{ private String name; private String desc; } @Data @JsonIgnorePro...2020-04-13 16:21:2378
0
-
原创 【agent打jar包】premain agent 单独打jar包
1 agent 总览2 运行时参数 -javaagent:InjectCode.jar3 打包agentjar -cfm InjectCustomCode.jar MANIFEST.MF /Users/XX/target/classes/com/gbrank/asm/custom/Main.class2020-03-29 16:48:33297
0
-
原创 【arthas】 分析java web程序利器
1 下载curl -O https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jardashboard2 dashboard 命令上面是先通过观察总体的线程信息,然后查看具体的线程运行情况。如果只是为了寻找 CPU 使用较高的线程,可以直接使用命令 thread -n [显示的线程个数...2020-03-29 16:38:00107
0
-
原创 【线程池】线程池的线程遇到异常后去哪里?怎么处理?
1 四种解决任务代码抛异常的方案:在我们提供的Runnable的run方法中捕获任务代码可能抛出的所有异常,包括未检测异常 使用ExecutorService.submit执行任务,利用返回的Future对象的get方法接收抛出的异常,然后进行处理 重写ThreadPoolExecutor.afterExecute方法,处理传递到afterExecute方法中的异常 为工作者线程设置Un...2020-03-29 16:33:58437
0
-
原创 【REDIS SCAN】scan清理无效key,导致慢日志飙升
1 问题现场 private List<String> scanWithLimit(String pattern, int limit, int type) { Preconditions.checkArgument(StringUtils.isNotBlank(pattern)); List<String> list = Lis...2020-03-29 16:24:44448
0
-
原创 【字节码编程】统计方法执行次数:ASM修改JDK (java/util/regex/Pattern$Loop)class文件
1 java代码private int mcounter = 0;public void do2() {System.out.println(mcounter++);}2 获取ASM源代码 (工具ASMifierClassVisitor)java -classpath /Users/sss/.m2/repository/org/glassfish/hk2/external/...2020-03-26 13:49:02148
0
-
原创 【JVM-沙箱】java 安全沙箱模型详解
起到第一道安全保障作用的”双亲委派类加载模型”双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。哪怕是同包下的类,只要他们不属于同一类装载器,都是相互隔绝的。这对一些有安全隐患的类起到了安全隔离的作用。使它不能冒充系统类来破坏程序正常运作。此外,...2020-02-02 21:17:12198
0
-
原创 【字节码增强ASM3.0】Java正则引发的思考--测试困惑--有解了
1 表情符号源代码https://github.com/zly394/EmojiRegex/blob/master/src/main/java/com/zly/utils/EmojiRegexUtil.java2 测试用例import java.lang.instrument.Instrumentation;public class Main2 { public st...2020-02-01 22:01:49117
0
-
原创 【JDI】at com.sun.tools.jdi.ConcreteMethodImpl.getVariables1(ConcreteMethodImpl.java:495)
import com.sun.jdi.*;import com.sun.jdi.connect.Connector;import com.sun.jdi.connect.LaunchingConnector;import com.sun.jdi.event.*;import com.sun.jdi.request.BreakpointRequest;import com.sun.j...2019-12-26 20:25:12104
0
-
原创 【Spring】Bean的创建和对象关系建立
1 Bean的创建时序图2 Bean对象关系创建3 UML 图4 入口点org.springframework.context.support.AbstractApplicationContext#refreshorg.springframework.context.support.AbstractApplicationContext#finishBeanFact...2019-12-15 10:58:2270
0
-
原创 【规则引擎】多种规则引擎(处理复杂业务逻辑)整理
1 规则引擎:(低耦合)2 全面介绍所有的规则引擎:https://www.jianshu.com/p/41ea7a43093c 包含了 业界常用的4-5种https://www.ibm.com/support/knowledgecenter/SSGHJR_5.1.0/com.ibm.isig.doc_5.1.0/CrossIdeas_Topics/RULES_ENGINE/RUD_I...2019-12-15 10:26:13336
0