
java
自驱
ALOHA HEJA HE
展开
-
【java】程序员基础能力测试33问,持续整理中
例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。面向对象,主要就是将现实中的对象抽象成一个类,这个对象具有一定的属性和行为,面向对象的主要目的,就是为了实现程序的可扩展性和可维护性。封装:就是将对象的属性和行为进行处理,隐藏需要隐藏的数据,只向外界提供最简单的接口;这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。Java通过API中。原创 2022-12-14 09:11:44 · 533 阅读 · 0 评论 -
[AIX] IBM机器卸载java
2 向下滚动并通过按 F7 键(或 ESC+7 键)选择“JavaX.jre”、“JavaX.sdk”、“JavaX_64.jre”和/或“JavaX_64.sdk”文件集。1 lslpp -hac | grep -i java // 确认系统上当前安装了 IBM Java for AIX。1 在“删除已安装的软件”面板上,滚动到“软件名称”字段,然后按 F4 键(或 ESC+4 键)查看已安装软件列表。”字段,然后按 TAB 键将值更改为“是”或“否”,具体取决于是否应删除相关软件。原创 2022-11-16 18:50:40 · 826 阅读 · 0 评论 -
【dubbo】 软负载均衡自定义实现
1 代码实现(实现根据userID在不同的应用之间跳转转发)@Slf4jpublic class CustomStageLoadBalance implements LoadBalance { private static Map<String,Map<String, List<String>>> appIpOpenIdMappings = Maps.newHashMap(); static{ Map<String, .原创 2021-03-22 16:45:18 · 219 阅读 · 0 评论 -
【GO】闭包的理解
1 闭包是什么?怎么用? // Go语言中闭包是引用了自由变量的函数 // 被引用的自由变量和函数一同存在, // 即使已经离开了自由变量的环境也不会被释放或者删除, // 在闭包中可以继续使用这个自由变量,因此,简单的说: // 函数 + 引用环境 = 闭包 这个和java中的匿名类对象特别类似,比如dubbo的调用链构建代码如下 // 闭包(Closure)在某些编程语言中也被称为 Lambda 表达式。 // 闭包对它作用域上部的变量可以进行修改,修改引用的变量会对变.原创 2021-03-22 15:54:11 · 529 阅读 · 1 评论 -
【JVM】Synchronized C++ 源码
1 Synchronized 本质本质是对一个对象监视器(monitor)进行获取在Java虚拟机执行到monitorenter指令时,1⃣️首先它会尝试获取对象的锁,如果该对象没有锁,或者当前线程已经拥有了这个对象的锁时,它会把计数器+1;然后当执行到monitorexit 指令时就会将计数器-1;然后当计数器为0时,锁就释放了。2⃣️如果获取锁 失败,那么当前线程就要阻塞等待,直到对象锁被另一个线程释放为止。// monitorbool has_monitor() const { ..原创 2021-03-09 23:48:52 · 472 阅读 · 0 评论 -
【JVM】多图搞明白!基于栈的字节码解释执行引擎
1 基于栈的字节码解释执行引擎public int calc() { int a = 100; int b = 200; int c = 300; return (a + b) * c;}2 多图解释原创 2021-03-06 10:02:20 · 182 阅读 · 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:43 · 469 阅读 · 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:25 · 118 阅读 · 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:52 · 144 阅读 · 0 评论 -
【ALGO】100盏灯问题
1 题目有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的2 题解过程思考:需要把每个灯泡的开关次数计算出来,其实这里需要你抽象转化为求一个数字的约数个数问题---->只要一个数字的约数是奇数个,那么这盏灯就是点亮的。而且一个数的约数是成对出现的,那么什么数字的约数(A==B)呢?原创 2021-03-03 12:25:14 · 394 阅读 · 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:40 · 103 阅读 · 0 评论 -
【ALGO】07 动态规划精准复习--不要等过了山丘才发现无人守候
1 算法解释动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能 完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问 题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规 划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。 动态规划是自下而上的,即先解决子问题,再解决父问题;而用带有状态记原创 2021-02-26 13:16:52 · 267 阅读 · 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:33 · 402 阅读 · 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:07 · 275 阅读 · 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:10 · 155 阅读 · 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) { pare原创 2021-02-23 19:02:37 · 108 阅读 · 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:50 · 172 阅读 · 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:11 · 120 阅读 · 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:25 · 201 阅读 · 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:39 · 186 阅读 · 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:19 · 259 阅读 · 1 评论 -
【java】基础 quick review all-in-one
1. JAVA 异常分类及处理1.1 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception.1. Error (比如ThreadDeath) 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果 出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 2. Exception(RuntimeException、CheckedException)又有两个分支,一个是运行时异常 Check原创 2021-02-18 21:27:48 · 200 阅读 · 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:55 · 179 阅读 · 0 评论 -
【JVM】 jvm quick review知识 all-in-one
1 总体结构2 运行过程:① Java 源文件—->编译器—->字节码文件② 字节码文件—->JVM—->机器码用户线程: 这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。 Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把.原创 2021-02-18 19:25:08 · 206 阅读 · 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:42 · 192 阅读 · 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:15 · 2040 阅读 · 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:31 · 180 阅读 · 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:54 · 179 阅读 · 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:24 · 109 阅读 · 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 Bas原创 2020-11-10 18:26:59 · 7047 阅读 · 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 // 基础属性设置 iOSApnsEn原创 2020-10-23 18:19:18 · 670 阅读 · 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 be原创 2020-08-16 15:09:29 · 107 阅读 · 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:44 · 227 阅读 · 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:45 · 7510 阅读 · 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:23 · 350 阅读 · 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.class原创 2020-03-29 16:48:33 · 1001 阅读 · 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:00 · 301 阅读 · 0 评论 -
【线程池】线程池的线程遇到异常后去哪里?怎么处理?
1 四种解决任务代码抛异常的方案:在我们提供的Runnable的run方法中捕获任务代码可能抛出的所有异常,包括未检测异常 使用ExecutorService.submit执行任务,利用返回的Future对象的get方法接收抛出的异常,然后进行处理 重写ThreadPoolExecutor.afterExecute方法,处理传递到afterExecute方法中的异常 为工作者线程设置Un...原创 2020-03-29 16:33:58 · 1545 阅读 · 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:44 · 975 阅读 · 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:02 · 534 阅读 · 0 评论