自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 收藏
  • 关注

原创 【笔记】mac安装jdk的默认文件夹位置

/Library/Java/JavaVirtualMachines/

2024-06-20 11:18:01 290

原创 线程池吞掉异常的case:源码阅读与解决方法

有一天给同事CR,看到一段这样的代码你这段代码是利用并发降低RT对吧,如果func内部抛异常,你确定可以catch到吗可以啊, 为什么不可以(...不如你run一把,在func mock一个异常出来试试我靠还真是你可以用execute,改动比较小那么是为什么呢。

2024-06-17 22:16:04 845

原创 sql优化之利用聚簇索引减少回表次数:limit 100000,10

产品:我要对订单列表页做一个分页功能,每页10条数据,商家可以根据金额过滤订单功能演示时,产品点击第1000万页,页面因为接口超时空白,查看sql耗时10000ms技术:(汗流浃背)这么简单的sql怎么会超时,...

2024-06-15 19:15:13 381

原创 【Leetcode 42】 接雨水-单调栈解法

维持栈单调递减,一旦出现元素大于栈顶元素,就可以计算雨水量,同时。单调栈通常保存的是下标,用于计算距离。

2024-05-06 23:43:21 274

原创 【LeetCode 121】买卖股票的最佳时机

所谓代码的复杂性来源于业务的复杂性,如果能够想清楚业务实现逻辑,就能够轻松写出代码;假设当前是第i天,如何在第i天赚到最多的钱?需要在第i天之前以最低价买入股票;所以需要求出每一天之前的最低价,求最大差价。

2024-05-06 22:10:39 268 1

原创 【Leetcode 42】 接雨水

问题转化成了,如何用最短时间计算所有位置左侧最高点和右侧最高点,这是一个简单的动态规划问题,时间复杂度O(n)(1)需要将问题最小化,首先计算第i个位置最多容纳多少雨水(细长的一条水柱),然后求和就是总的雨水量;

2024-05-06 22:02:10 317

转载 【解决】修改idea.vmoptions导致idea无法启动

Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2023.3。

2024-04-07 15:29:32 122 1

原创 【LeetCode 23】合并K个升序链表

题目描述:存在k个有序链表,实现多路归并。思路:与二路归并类似,需要每次从所有头结点挑选最小的连接到结果链表;二路归并直接比较两个链表的头即可,但是K路的话,每次需要比较K个,使用堆或者红黑树会比较好维护,采用PriorityQueue或者TreeSet。 public ListNode mergeKLists(ListNode[] lists) { if(lists==null||lists.length==0){ return null;

2020-09-03 15:09:19 188

原创 concurrent mode failure

【https://blog.csdn.net/yangguosb/article/details/79857844】concurrent mode failure是什么?  CMS垃圾收集器特有的错误,CMS的垃圾清理和引用线程是并行进行的,如果在并行清理的过程中老年代的空间不足以容纳应用产生的垃圾(也就是老年代正在清理,从年轻代晋升了新的对象,或者直接分配大对象年轻代放不下导致直接在老年...

2020-04-02 17:26:12 5513 3

原创 经典的GC收集器组合

常用的组合为(1)Serial+Serial Old实现单线程的低延迟垃圾回收机制;(2)ParNew+CMS,实现多线程的低延迟垃圾回收机制;(3)Parallel Scavenge和Parallel Scavenge Old,实现多线程的高吞吐量垃圾回收机制;(4)另外,Serial Old是一款比较万能的老年代收集器。ParNew可以和Serial Old结合使用,Paral...

2020-04-02 15:21:57 472

原创 JVM初始大小和最大堆大小

可以用命令直接查询:java -XX:+PrintFlagsFinal -version | grep HeapSize或者使用java代码:​Runtime.getRuntime().maxMemory();官方文档:1. client模式初始堆大小:物理内存的1/64,但最小是8MB。最大堆大小:在物理内存达到192MB之前,JVM最大堆大小为...

2020-03-31 21:37:05 3812

原创 HashMap的resize()过程简述版本

初始默认大小为16,默认负载阈值0.751. 如果oldCap已经超出最大容量。将Integer.MAX_VALUE赋给阈值,返回旧表;2. 如果oldCap以及oldCap*2是介于16和最大容量之间(多落在这个分支),oldCap*2得到新容量,oldThr*2得到新阈值;3. 如果oldCap==0并且oldThr>0,那么oldThr直接赋给newC...

2020-03-30 23:08:23 1260

原创 ArrayList添加元素扩容过程简述

size表示数组元素数量,length表示数组长度;minCapacity=size+1为最小容量(当前元素放进去最少需要size+1的容量)1. 判断初始状态。如果数组为初始状态,将初始容量(10)和最小容量之间的较大值赋值给minCapacity;2. 判断是否需要扩容。如果minCapacity超出了length,那么需要扩容;3. 设置扩容的容量。...

2020-03-30 22:14:06 702 1

原创 Java线程的状态;WAITING、TIMED_WAITING与BLOCKED的区别;Object.wait()和Thread.sleep()

1. Java线程的状态包括:NEW、READY、RUNNING、WAITING、TIMED_WAITING、BLOCKED2.WAITING、TIMED_WAITING与BLOCKED的区别:(1)WAITING:进入等待状态,方式:wait/join/park方法进入无限等待,通过notify/notifyAll/unpark唤醒;(2)TIMED_WAITING:与WA...

2020-03-30 14:48:11 10661 2

原创 【收集】java IO操作类的关系图

1. 按照操作类型(按照常用):缓冲、文件、基本类型、序列化、数组、管道、打印,以及字节流/字符流转换。也不太难记忆-.-【图片来自javaguide】2. 按照字节流/字符流:除了Filter开头的,其它为基础字节流或基础字符流;Filter开头的是装饰接口。3. 输入字节流(inputStream)的继承关系图(输出流类似)InputStream为抽象类,...

2020-03-29 18:46:43 366

原创 try的return和finally相关问题

(1)try块的return和finally的执行顺序。try执行之后,return之前会跳转到finally执行代码。(2)是否有可能执行了try不执行finally?如果在try调用了system.exit(0),就不会执行到finally。(3)finally何时会影响返回值?如果返回值是基础类型,finally中的修改不会影响try的return。以下代码输出为10....

2020-03-28 22:52:34 447

原创 【LeetCode 406】根据身高重建队列

思路:来自力扣官方(因为没看懂题目,所以...直接看了答案)【https://leetcode-cn.com/problems/queue-reconstruction-by-height/solution/gen-ju-shen-gao-zhong-jian-dui-lie-by-leetcode/】(1)对于两个人i和j,如果i的身高大于j的身高,那么j的站位对于i是没有任何影响的...

2020-03-27 17:49:51 315

原创 【LeetCode 148】 排序链表

题目要求:在O(nlogn)的时间复杂度与常数空间复杂度对链表排序。思路:归并排序。相关问题:如何快速确定链表的中间结点。 public ListNode sortList(ListNode head) { if(head==null||head.next==null) return head; //快慢指针拆分为两个链表 //...

2020-03-27 16:01:28 89

原创 【LeetCode 105】从前序与中序遍历序列构造二叉树

思路:观察发现,首先从preorder获得根结点,从inorder找到根结点所在位置index,inorder[i]之前的内容为左子树,之后的内容为右子树。 public TreeNode buildTree(int[] preorder, int[] inorder) { TreeNode root=buildTreeCore(preorder, 0, preorder...

2020-03-27 15:24:28 88

原创 【LeetCode 64】 最小路径和

思路:1. 简单递归,时间复杂度较高,因为会重复计算。 public int minPathSum(int[][] grid) { int n=grid.length; int m=grid[0].length; return minPathSumCore(grid,n,m,0,0); } ...

2020-03-22 21:30:10 97

原创 【LeetCode 96】不同的二叉搜索树

思路:动态规划。依次选择每一个元素作为根结点,假如选择第i个元素作为根结点,树的可能数量=(i-1)个元素构成左侧搜索树的数量*(n-i)个元素构成的右侧搜索树的数量。因为二叉搜索树的构成仅与元素的大小有关系,所以{1,2,3}与{4,5,6}构成的二叉搜索树的数量是一样的,因此中间结果可重用。 public int numTrees(int n) { int[...

2020-03-22 17:17:44 251

原创 【LeetCode 136】只出现一次的数字

简单题目,采用异或,直接上代码: public int singleNumber(int[] nums) { if(nums==null||nums.length==0) return 0; int answer=nums[0]; for(int i=1;i<nums.length;i++){ answer...

2020-03-22 15:50:38 91

原创 【LeetCode 238】除自身以外数组的乘积

思路:求解除自身以外的所有数字的乘积,就是求解自身左侧的乘积与右侧乘积的乘积,可以分为两个子问题:自左向右求解累乘结果;自右向左求解累乘结果。已经计算的结果可以重复使用。代码如下: public int[] productExceptSelf(int[] nums) { if (nums == null || nums.length == 0) { ...

2020-03-22 15:47:06 89

原创 【LeetCode 48】 旋转图像

思路:转置+镜像 public void rotate(int[][] matrix) { if(matrix==null) return; int n=matrix.length; //转置 for(int i=0;i<n;i++){ for(int j=i;j<n;j++){ ...

2020-03-22 15:08:59 111

原创 【LeetCode 114】二叉树展开为链表

思路:通过观察可以发现,所谓展开就是按照前序遍历将二叉树重新连接,使用递归。首先记录root的右子树;对root的左子树递归展开,并返回根节点,连接到root的右边;对root的右子树递归展开,连接到当前链表的末尾。 public void flatten(TreeNode root) { flattenCore(root); } pu...

2020-03-22 14:40:46 265

原创 【LeetCode 206】翻转链表

1. 循环写法 public ListNode reverseList(ListNode head) { if(head==null||head.next==null) return head; ListNode p1=head,p2=head.next,p3=p2.next; head.next=null; whi...

2020-03-21 23:23:41 81

原创 【LeetCode 39】组合总和

极为经典的回溯题目思路:套用模板即可,需要说明的是:1. 循环的起点,元素可以重用,并且不允许答案重复,起点选择当前元素。2. 终止条件:当target等于0,那么就存在一组解;如果target不为0,需要判断target与可用元素最小值(就是当前元素),判断是否还可能出现解,不可能就进行剪枝,已经包括了target被减为负值的情况。 public List<Li...

2020-03-21 22:42:08 76

原创 【LeetCode 94】使用迭代返回二叉树的中序遍历结果

常用递归问题的非递归算法,常常使用栈书写。第一种:使用栈的非递归中序遍历算法思路:中序遍历的直观理解。入栈操作:跟结点出发,将left结点不断添加到栈,到达最后一个结点之后,开始执行出栈操作;出栈操作:检查栈顶结点是否存在右子树,如果不存在,直接将当前结点弹出并且记录结果;如果存在右子树,在弹出当前结点之后,需要将右子树入栈。 public List<Inte...

2020-03-21 21:56:42 124

原创 【LeetCode 104】二叉树的最大深度

简单题目,代码如下:import java.lang.Math;class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; return 1+Math.max(maxDepth(root.left),maxDepth(root.right)); ...

2020-03-21 15:40:45 59

原创 【LeetCode 22】括号生成

深搜+剪枝的两种解法:1. 自上而下的深搜遍历与检查,一开始持有n个左括号与n个右括号,每次选择向路径中加入左括号或右括号,当某一种括号剩余量为0剪枝。对可能的结果使用栈检查合法性。效率比较低下,因为检查的过程耗费时间。 public List<String> generateParenthesis(int n) { List<String...

2020-03-21 15:22:41 86

原创 【LeetCode 226】翻转二叉树

题目简单,直接上代码。 public TreeNode invertTree(TreeNode root) { if(root==null||(root.left==null&&root.right==null)){ return root; } TreeNode tmp=root...

2020-03-20 22:28:09 79

原创 ArrayList<Integer>的remove(Object)与remove(index)方法调用时候会选择哪一个

有一天写代码,遇到ArrayList<Integer>的remove(Object)与remove(index)方法调用时候会选择哪一个的问题,其实并不复杂,这里还是进行记录。例如:ArrayList<Integer> list=new ArrayList<>();int a=1;list.add(a);list.remove(a);此时会报...

2020-03-20 21:44:58 1043

原创 【LeetCode 338】比特位计数

这是一个动态规划题目,主要思路就是利用已经计算的结果获得当前求解的结果,递推式通常通过反推获得。方法1:获得一个比当前数字小的数字,最简单的方法就是右移。查阅(当前数字>>2)的结果,如果当前数字是偶数,直接返回,如果当前数字是奇数,需要加上最低位的一个1。方法2:通过列举的方法寻找规律。...010001100100011101001000...

2020-03-19 22:51:01 80

原创 【LeetCode 461】汉明距离

思路:简单题目,一笔带过。异或然后循环数1的数量。 public int hammingDistance(int x, int y) { int answer=0; int XorAnswer=x^y; int point=1; for(int i=0;i<32;i++){ ...

2020-03-19 12:04:13 60

原创 【LeetCode 78】子集

第一种:回溯解法 public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> answer=new ArrayList<>(); if (nums == null || nums.length == 0) { ...

2020-03-19 11:11:18 94

原创 回溯总结-惭愧惭愧

关于回溯有一个很好的博客【https://leetcode-cn.com/problems/subsets/solution/xiang-xi-jie-shao-di-gui-hui-su-de-tao-lu-by-reedf/】回溯法有一个书写模板,大致如下:void func(index, currAns, answer) if(达到终止条件){ //判断当前结果是否符合条件 ...

2020-03-18 11:44:44 115

原创 idea ultimate调整字体

三个位置:1. appearance&behavior的Appearance顶部,勾选use custom font之后可以设置idea边框的字体;2. editor的font,可以设置代码字体格式;3. editor的color scheme下面的color scheme font与console font,可以覆盖以上字体设置。另外:如果设置后点击apply无效,...

2020-01-09 11:15:19 250

原创 【LeetCode19】删除链表的倒数第N个节点

思路:双指针,搞定。注意:需要判断几种特殊情况,主要考察细节。详见代码。 public ListNode removeNthFromEnd(ListNode head, int n) { if(head==null) return null; //三个指针,因为涉及删除操作 ListNode pointer0=head,point...

2019-12-09 15:40:54 77

原创 【LeetCode17】电话号码的字母组合

思路:采用递归思想,穷举即可。写法有很多种,比如从第一个数字的每一种取值,递归剩下字符串答案,拼接即可。 public List<String> letterCombinations(String digits) { if(digits==null||digits.length()==0) return new ArrayList<>();...

2019-12-07 17:34:45 78

原创 【LeetCode15】三数之和

思路:这道题目有两数之和衍生,只需要在两数之和的外部套上一层O(n)的循环即可。重点:乱序数组两数之和的思路有两种,复杂度都是O(nlogn):(1)排序,对每一个元素使用二分查找的方式寻找它的另一半,复杂度O(nlogn+n*logn);(2)排序,使用双指针,分别指向前段与尾端,比较当前和与目标值的大小,移动指针,复杂度O(nlogn+n);第二种是需要重点记住的,如果给的...

2019-12-06 12:42:18 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除