自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java并发(一):并发基础

文章目录Java并发基础知识进程、线程、协程进程和线程的区别和联系:线程和协程的区别和联系多线程导致的问题死锁内存泄漏线程不安全线程的生命周期上下文切换Java并发基础知识进程、线程、协程进程:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。线程:进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个 进程的其它线程共享进程所拥有的全

2021-07-05 10:44:59 296

原创 Java类加载机制学习笔记

文章目录Java类加载类的加载时机会触发类初始化的场景类加载的过程1.加载2.验证3.准备4.解析5.初始化类加载器双亲委派模型Java类加载​ Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。​ 类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类的加载时机​ 一个类型从被加

2021-07-03 17:08:28 336

原创 关于JVM垃圾收集机制的笔记和一些思考

文章目录JVM垃圾回收1.JVM内存分配2.JVM如何判断对象存活状态3.垃圾收集算法3.1 标记-清除算法3.2 复制算法3.3 标记-整理算法3.4 分代收集算法4.垃圾收集器1.Serial 收集器2.ParNew 收集器3.Parallel Scavenge 收集器4.Serial Old 收集器5.Parallel Old 收集器6.CMS 收集器7.G1 收集器5.GC触发条件5.1 Minor GC5.2 Full GCJVM垃圾回收1.JVM内存分配​ Java的内存管理主要包含对象内

2021-07-02 11:27:46 290

原创 JVM内存泄漏的几种常见情况分析

内存泄漏的定义:不会再被使用的对象,其占用的内存却不能被回收,这就是内存泄漏。内存泄漏的本质是:长生命周期的对象持有短生命周期对象的引用在学习GC的过程中我们知道,JVM在垃圾回收时判断一个对象是否应该被回收,采用的是可达性分析算法。因此,从这个角度来理解,内存泄漏现象就是应该被回收的无用对象却由于某些原因在可达性分析算法中被判断为可达,因此无法被回收。内存泄漏的常见情况有以下几种:1.使用容器造成内存泄漏对象被加入容器内之后,就由容器对象持有该对象的引用。因此在该对象被使用完成之后,即使将

2021-07-01 11:18:32 2120

原创 对JVM内存模型的一些理解

文章目录JVM(Java virtual machine)1.JVM内存模型(JDK8)2.内存区域分类3.各区域的介绍及其作用详解3.1 程序计数器3.2 虚拟机栈3.3 本地方法栈3.4 堆3.5 方法区JVM(Java virtual machine)1.JVM内存模型(JDK8)Java1.8的改动:将永久代移除,取而代之的是元空间。元空间不再与堆是连续的物理内存,而是改为使用本地内存(Native Method)。也就意味着只要本地内存足够,就不会出现OOM(OutOfMemory)的

2021-06-30 16:21:21 382

原创 Java学习笔记之:对反射的理解与代码试验

反射:Java的反射机制就是,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能成为Java的反射机制。对反射机制的一点小小的测试首先定义一个类People,这个类主要用于测试反射的各种功能,因此特别分别声明了一些private和public的属性与方法。class People{ public int ID; private String name; public Pe

2021-06-22 20:56:23 144

原创 关于Java代理模式的一些理解

Java代理模式使用代理模式的一个好处:在不修改目标对象的基础上,实现目标对象的功能并且可以拓展。代理中的关键概念:代理对象与目标对象。代理对象是对目标对象的扩展, 并会调用目标对象。1.静态代理:代理类实现目标类的接口,传入目标对象作为自己的一个属性,在实现代理方法的时候实际上是调用目标对象的该方法,并在调用的前后进行拓展。//代理的接口public interface Hello{ public void sayHello();}//需要代理的目标类public class

2021-06-20 17:07:22 121

原创 2021年3月9日 Leetcode每日一题:1047. 删除字符串中的所有相邻重复项

删除字符串中所有的相邻重复项1.题目描述给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。2.示例示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以

2021-03-09 09:58:58 368

原创 2021年2月25日 Leetcode每日一题:867. 转置矩阵

转置矩阵1.题目描述给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。2.示例示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]3.解题思路模拟法即可。将矩阵的数字置于其转置后的位置之上。4

2021-02-25 14:29:30 218

原创 2021年2月24日 Leetcode每日一题:832. 翻转图像

翻转图像1.题目描述给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转[1, 1, 0]的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1]的结果是[1, 0, 0]。2.示例示例 1:输入:[[1,1,0],[1,0,1],[0,0,0]]输出:[[1,0,0],[0,1,0],[1,1,1]]解释:首先翻转每一行: [[0,

2021-02-24 19:06:56 137

原创 2021年2月22日 Leetcode每日一题:766. 托普利茨矩阵

托普利茨矩阵1.题目描述给你一个 m x n 的矩阵 matrix。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是托普利茨矩阵 。2.示例示例 1:输入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]输出:true解释:在上述矩阵中, 其对角线为: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"

2021-02-22 21:00:28 198

原创 2021年2月21日 Leetcode每日一题:1438. 绝对差不超过限制的最长连续子数组

绝对值不超过限制的最长连续子数组1.题目描述给你一个整数数组 nums ,和一个表示限制的整数limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于limit 。如果不存在满足条件的子数组,则返回0 。2.示例示例 1:输入:nums = [8,2,4,7], limit = 4输出:2 解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4. [8,2,4] 最大绝

2021-02-21 22:20:04 726

原创 2021年2月20日 Leetcode每日一题:697. 数组的度

数组的度1.题目描述给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。2.示例示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2,

2021-02-20 11:13:52 301

原创 2021年2月19日 Leetcode每日一题:1004. 最大连续1的个数 III

最大连续1的个数Ⅲ1.题目描述给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。2.示例示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3

2021-02-19 21:48:17 1024

原创 2021年2月17日 Leetcode每日一题:566. 重塑矩阵

重塑矩阵1.题目描述在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。2.示例示例 1:输入: nums = [[1,2], [3,4]]r = 1, c = 4输出: [

2021-02-17 21:35:05 162

原创 2021年2月16日 Leetcode每日一题:561. 数组拆分 I

数组拆分Ⅰ1.题目描述给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai,bi)min(ai, bi)min(ai,bi) 总和最大。返回该 最大总和 。2.示例示例 1:输入:nums = [1,4,3,2]输出:4解释:所有可能的分法(忽略元素顺序)为:1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1

2021-02-16 22:27:52 1334

原创 2021年2月13日 Leetcode每日一题:448. 找到所有数组中消失的数字

找到所有数组中消失的数字1.题目描述给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。2.示例示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]3.读题题目的意思是,在一个长度为n的数组中,里面填满了数字范围为1~n的数字,

2021-02-13 15:01:20 188

原创 2021年2月12日 Leetcode每日一题:119. 杨辉三角 II

杨辉三角Ⅱ1.题目描述给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。2.示例示例:输入: 3输出: [1,3,3,1]3.读题今天又是很简单的每日一题。这个题目本身不难,难点在于题目给出了附加挑战:你可以优化你的算法到 O(k) 空间复杂度吗?也就是说,不能使用额外空间,最多只能使用目标层长度的空间。但是,如果将杨辉三角左对齐,就能够发现两个规律:1.每层的第一个数都是12.每层除了第一个数,其他数字就等

2021-02-12 19:47:58 243

原创 2021年2月11日 Leetcode每日一题:703. 数据流中的第 K 大元素

数据流中的第K大元素1.题目描述设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val)将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。2.示例示例:输入:["KthLargest", "add", "add", "add", "add",

2021-02-11 13:35:43 166

原创 2021年2月10日 Leetcode每日一题:567. 字符串的排列

字符串的排列1.题目描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。2. 示例示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False3.读题这一题的题干和示例清晰明了,题目即说明了,需要判断第一个字符串的排列之一是第二个字符串的子

2021-02-10 22:09:57 239

原创 2021年2月9日 Leetcode每日一题:992. K 个不同整数的子数组

class Solution { public int subarraysWithKDistinct(int[] A, int K) { int count = 0; for(int i=0;i<A.length;i++){ int sum = 1; int[] map = new int[A.length+1]; map[A[i]] = 1; for(int j=i

2021-02-10 13:52:56 210

原创 2021年2月8日 Leetcode每日一题:978. 最长湍流子数组

最长湍流子数组1.题目描述当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子

2021-02-08 22:40:58 249

原创 2021-02-08 关于本博客

关于博客这个博客主要用来记录自己在做leetcode每日一题的过程中的解题思路、解法以及相应的代码。此外,对于一些感兴趣的算法的学习过程也会进行记录。希望感兴趣的朋友可以一起多多交流讨论。...

2021-02-08 11:12:42 77

空空如也

空空如也

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

TA关注的人

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