自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode862. 和至少为 K 的最短子数组

给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1 。子数组 是数组中 连续 的一部分。示例 1:输入:nums = [1], k = 1输出:1示例 2:输入:nums = [1,2], k = 4输出:-1示例 3:输入:nums = [2,-1,2], k = 3输出:3提示:1 <= nums.length <= 10^5-10^5 <= num

2022-04-12 00:43:58 1107 2

原创 Leetcode1438. 绝对差不超过限制的最长连续子数组

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

2022-04-10 17:32:11 156

原创 Leetcode1425. 带限制的子序列和

给你一个整数数组 nums 和一个整数 k ,请你返回 非空 子序列元素和的最大值,子序列需要满足:子序列中每两个 相邻 的整数 nums[i] 和 nums[j] ,它们在原数组中的下标 i 和 j 满足 i < j 且 j - i <= k 。数组的子序列定义为:将数组中的若干个数字删除(可以删除 0 个数字),剩下的数字按照原本的顺序排布。示例 1:输入:nums = [10,2,-10,5,20], k = 2输出:37解释:子序列为 [10, 2, 5, 20] 。示例 2

2022-04-07 21:13:27 290

原创 LeetCode1751.最多可以参加的会议数目 II---动态规划题解

1751. 最多可以参加的会议数目 II给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相

2021-11-26 01:00:54 333

原创 LeetCode397.整数替换---记忆化递归、贪心题解

397. 整数替换给定一个正整数 n ,你可以做如下操作:如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。n 变为 1 所需的最小替换次数是多少?示例 1:输入:n = 8输出:3解释:8 -> 4 -> 2 -> 11 <= n <= 2^31 - 1解法1看到题目给出 n 有两种状态,分别对应不同操作时,首先想到动态规划。但是再看一眼数据范围,无法创建动态规划数组,会爆内存。退一步想,d

2021-11-19 11:40:04 120

原创 LeetCode115.不同的子序列---动态规划题解

LeetCode 115.不同的子序列给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:s = “rabbbit”, t = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 s 中得到 “rabbit” 的方案。

2021-11-15 17:24:15 751

原创 Java泛型详解

文章目录第一次接触泛型 完成泛型概念好处泛型与多态无关泛型类基本原理泛型方法类型参数的限定泛型的上界泛型接口泛型通配符无限定通配符 `<?>`有限定通配符 `<? extends >`超类型通配符`< ? super >`泛型擦除为什么进行泛型擦除?运行时获取泛型信息泛型擦除与静态类型第一次接触泛型 完成使用容器类时ArrayList<Integer> list = new ArrayList<>();list.add(123);Inte

2021-08-03 18:24:55 220

原创 Java异常详解

文章目录异常 Exception,错误 Error异常/错误处理机制异常处理原理简述ExceptionCheckedException 受检异常RuntimeException 运行时异常Error名字相似的 Exception ,Error抛出 throw 、throwsthrow 主动抛出异常浅谈 fail-fast 机制浅谈 fail - safe 机制throws 主动声明异常方法声明异常也是多态的一种体现方法声明的异常算在 Java 方法特征签名中吗?方法声明异常与代码复用接住(捕获) catch

2021-07-17 13:35:13 260 6

原创 Java反射及原理

一、反射是什么?学习反射,首先要知道"反"是什么意思,"正"又是什么。对于 Java 来说,已知类型创建对象是"正":Object o = new Object(); ,编译期间已知要创建的对象 o 的静态类型为 java.lang.Object。通过对象映射到类型信息是"反":例如 Class clazz = Class.forName("xxx");,编译期间无法得知要创建的对象的静态类型。只能在运行期间根据给出的类的全限定名加载类型。Java 为了让我们能够使用反射在运行期间检查类型信息,将类

2021-07-12 20:58:14 444 18

原创 深入了解JVM中的对象

1.对象的创建方式及是否调用构造方法new 无参/有参构造clone 不调用构造方法,由 JVM 创建新的对象并赋值字段。反序列化 调用第一个没有实现序列化接口的父类的无参构造,如果没有,则调用 Object 类的无参构造Class.newInstance 无参构造,实际上是调用 5 的无参构造Constructor.newInstance(…args) 无参/有参构造2.对象的创建流程public class Test { private int anInt = 1; p

2021-07-08 16:45:27 252 9

原创 java基础-深、浅克隆

1.Cloneable 接口空的接口,用于标记,让 JVM 知道这个类具有浅克隆功能。如果不实现此接口,在调用 clone() 方法时会抛出 CloneNotSupportException。1.1浅克隆只是将对象的内容拷贝一份给新对象。对象的内容分为1.基本类型数据 2.引用类型数据拷贝基本类型数据就是拷贝值而已,很简单。拷贝引用类型数据也只是拷贝对象引用而已。单纯的拷贝导致克隆后的两个对象中的引用类型数据指向堆中同一个地址。浅克隆public class CloneTest { p

2021-07-07 17:48:14 86 1

原创 借助HSDB工具解析JVM中的对象及this&super关键字

this 关键字this 关键字是什么? this 指代的是被调用的实例方法的所有者,称为方法接收者(Receiver),以下代码中对于 test() 方法来说,person 就是接收者。public class ThisTest { static class Person{ private int anInt; private static int anStaticInt; public Person(){

2021-06-25 16:30:37 308 9

原创 Java如何更新Cookie失效时间

如何更新 cookie 失效时间cookie.setMaxAge(0);cookie 在创建时设置了什么参数,在删除时就要设置什么参数response.addCookie(cookie); 删除原 cookie创建新 cookie,设置相同参数response.addCookie(cookie); 添加新 cookie创建 Cookie:Cookie cookie = new Cookie("token",token);cookie.setMaxAge(60); //60scookie

2021-06-21 17:30:29 1992

原创 Java方法调用(静态解析,方法分派)

1.两个概念先给出两个概念 1.静态类型 2.实际类型,下面这行代码中 Father 是静态类型,编译期间已知。Son 是实际类型,编译期间不能确定,在运行期代码执行到这里时才能知晓。Father guy = new Son();为什么说不可知晓呢?例如下面的代码,只有运行到 Random 才能知晓方法返回对象的实际类型。public static void main(String[] args) { Father guy = new Random().nextBoolean()

2021-06-20 22:13:18 654 4

原创 Java中字段不参与多态

字段不参与多态学习到这里的时候很好玩,记录一下。直接来个例子,如果你能答对,也就不用看这这篇文章了。public class FieldHasNoPolymorphic { static class Father{ public int money = 1; public Father(){ System.out.println("father`s constructor is invoked by:" + this);

2021-06-20 22:06:19 273 7

原创 javap—跟在new指令屁股后面的dup指令

每当我查看反编译结果时,经常会看到 dup 字节码指令跟在 new 字节码指令之后,又不知道它是干嘛的,很影响阅读,所以就有了这篇博客~JVM 中的字节码指令操作是基于操作数栈的,栈操作一个数据只能通过先出栈计算,再将结果压栈的方式。操作数栈主要用于保存执行过程的中间结果:配合局部变量表,将中间结果保存在变量槽中;需要使用局部变量时,读取局部变量表对应变量槽中的元素压入栈顶再出栈。以下代码创建了 CreateObjectTest 对象,并使用局部变量 createObjectTest 保存实例的引用。

2021-06-13 21:56:51 472 2

原创 配合JVM+javap解析Java中参数的传递方式与方法返回值方式

1. 参数的传递方式首先给出答案:Java 中只有值传递,没有引用传递值传递和引用传递都是一种求值策略,它们的区别并不在于传递的是什么东西,而在于传递方式。1.1 值传递是什么不论传递的是什么,值传递会拷贝一份将要被传递的变量,然后将拷贝传递给方法。例子1:public static void anInt(int i){ i = 6;}int i = 1;System.out.println(i);//1anInt(i);System.out.println(i);/

2021-06-04 18:48:12 334 9

原创 清晰理解java的instanceof关键字

通过重写 Object 的 equals 方法开始本文 ( instanceof 详解跳转)由于 Object 类中 equals 方法实际上就是 == ,所以大部分类都按需重写了 equals 方法。public class EqualsFather { private int father; @Override public boolean equals(Object o) { if (this == o) return true; if.

2021-06-03 11:24:45 350 3

原创 深入理解java静态、非静态内部类

1.内部类的存在意义是什么?如果有两个类A、B,关系紧密,且 B 类的设计初衷只是为了帮助 A 类的实现。那么类 B 可以作为类 A 的成员,也就是内部类。2.有几种类型我们知道,类的成员分为两种,静态成员和实例成员(非静态成员)。那么内部类也就自然分为两种,静态内部类,成员内部类。静态内部类是为了帮助外部类静态部分的实现,成员内部类是为了帮助外部类实例部分的实现。我们还知道,静态成员与类关联,实例成员依赖于对象。静态成员由类调用,实例成员由对象调用。那么同样静态内部类与外部类关联,成员内部

2021-05-30 15:44:14 486 4

原创 jvm+反编译深入了解final,static关键字的作用

1.final 可以修饰什么类变量方法2.static 可以修饰什么内部类成员变量代码块方法3.final 的作用保证数据的一致性。3.1 类被 final 修饰的类被称为最终的类 / 不可变类。例如 String 类,设计者认为 String 已经完美了,不想因为 String 被随意继承、重写方法而导致的错误。光使用 final 修饰一个类还达不到不可变类的标准,还要保证:1. 成员变量私有化,并被 final 修饰。2.不向外提供修改成员变量的方法 3.当类中含有可变

2021-05-27 18:39:25 354

原创 深入浅出Java基础——字符串拼接

字符串拼接(jdk8)public static void main(String[] args) { String str1 = "string"; 代码1. String str2 = str1 + "merge"; 代码2. String str3 = "string" + "merge1"; }字符串拼接可以说是我们日常中的基本操作中的基本操作,就是两个 String 对象相加一下就完事了。可你有没有想过,两个对象怎么能相加呢,对象存储的不是内存

2021-05-20 21:16:23 214

原创 深入经典面试题:new String(“123“) 创建了几个String对象

经典面试题 String str = new String(“hello world”);创建了几个对象。学习 java 准备面试,不能光背面试题的答案,更要深入面试题,了解面试题背后的java基础。那么让我们来看一下 String str = new String("hello world");这段代码到底涉及到了多少 java 基础。我知道的创建 String 对象的方式共有五种。new String(char[ ])通过 char 数组创建 String 对象new Strin.

2021-05-18 21:53:32 441

原创 深入浅出Java基础——字符串常量池

String Table(jdk8)1.字符串常量池是什么字符串常量池用于存储编译期间存在的所有字符串实例的引用,以及运行时动态添加的引用。字符串常量池是全局的,只有一个。当我们以 String str = "123"形式创建字符串实例时,首先会去判断字符串常量池中是否有引用指向相同内容的实例,如果有则返回该实例。否则在堆中创建 String 对象并将引用驻留在字符串常量池中。2.为什么要有字符串常量池的存在想象现在有这样一个场景:一个内容为 username 的字符串需要经常使用,没有字符串常量池

2021-05-13 15:00:14 1143 9

原创 java基础——String的不可变性

String & Immutable1.概念String 类被 final 修饰,类似的被 final 修饰的类还有 Integer、Double等等包装类。我们小学二年级时候都学过,被 final 修饰的类是不可被继承的,在 Java 中,被 final 修饰的类被称为 “不可变类”。好奇的同学可能会问了,1.这些类为什么需要被 final 修饰呢?2.为什么不能改变呢,不可变有什么好处?我们以 String 为例,进行探讨。2.不可变 (immutable)如果你阅读了 String 方

2021-05-07 08:09:33 585 6

原创 深入浅出Java包装类

1.包装类1.1 基本数据类型对应的包装类都有哪些基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble1.2自动装箱 AutoBoxing,自动拆箱 AutoUnboxing1.2.1 什么是装箱、拆箱​ 我们以 Integer 为例。​ 首先,什么是装箱、拆箱。又何来自动一说?让

2021-04-23 09:31:25 858 6

原创 Java基础——基本数据类型

1.基本数据类型类型位字节特点byte81char162short162int324java 中整数的默认类型long648需要在数字末尾加上 Lfloat324需要在数字末尾加上 F / fdouble648java 中浮点数的默认类型boolean没有给出精确的定义没有给出精确的定义1.1基本数据类型的级别整型数中 byte < short < int < .

2021-04-22 08:00:11 342 2

原创 深入理解单例模式与破解单例模式

一、五种实现方式饿汉式public class HungrySingleton { private static HungrySingleton instance = new HungrySingleton(); private HungrySingleton(){} public static HungrySingleton getInstance(){ return instance; }}饿汉式单例模式:当加载这个类时就创建对象,以空间

2021-04-08 18:14:50 817 12

原创 Java基础——类的加载

类的加载过程类的加载分为三个步骤,细分为5个步骤加载 loading :Java 将字节码文件从不同数据源中读取到 JVM 中,并将文件映射为 JVM 认可的数据结构(Class 对象) ,如果输入数据不是 Class 结构,则抛出 ClassFormatError 错误链接 linking验证 : 验证字节信息是否符合 JVM 规范,否则就会被认为验证错误(Verify Error),这一阶段防止了恶意信息或者不合规范的信息危害 JVM 的运行。准备 : 创建类或接口中的静态变量,并为静态变

2021-03-28 21:11:35 657 7

原创 运行时异常与非运行时异常有什么区别?

运行时异常与非运行时异常有什么区别?运行时异常 RuntimeException 又称为非检查异常 uncheck exception。是 Exception 的子类。在 Java 中,异常可以分为两种。Error 和 Exception,它们的父类是 Throwable。Error一些底层的类出错,无法用 java 程序来解决。例如:内存泄露Exception分为 运行时异常 和 非运行时异常。运行时异常是指 RuntimeException 或者它的子类。不需要在方法签名声明

2021-03-06 17:06:52 2023 1

原创 Tomcat 目录下各个文件夹的作用

1、bin:存放各个平台下的启动 / 停止等 Tomcat 服务的脚本文件.bat : windows 下的执行文件 .sh:linux 下的执行文件2、conf:存放各种配置文件,修改参数,例如端口等等。3、lib:Tomcat 服务需要的各种 jar 包,最常用到 jsp-api.jar ,servlet-api.jar。4、logs:存放日志文件,记录 tomcat 的运行状况,方便运维人员去排查问题。5、temp:Tomcat 运行时的临时文件,客户端上传文件到服务器时,需要通过 .

2021-01-27 22:58:08 1274 2

原创 HashMap学习笔记(二)put(),hash(),putVal()方法

put(),hash()public V put(K key, V value) { return putVal(hash(key), key, value, false, true); // hash方法:key的散列值与key的高16位(>>>16)按位异或(^),获得hash值}static final int hash(Object key) { int h; return (key == null) ? 0 : (h = ke

2021-01-15 21:12:25 256 1

原创 JDK动态代理

要知道动态代理,首先要知道代理模式。代理模式下,有两个角色,核心任务的完成者叫做委托类,另一个叫做代理类。委托类的“能力”封装成接口,而代理类实现了委托类的所有接口,表示代理类和委托类具有相同的能力,代理类可以为委托类代理完成所有业务,但核心业务还是委托类完成。代理模式分为两种,静态代理以及动态代理。动态代理就好比一个万能的工具人,啥都能干,卖手机,卖汽车,买房…,只要有委托类将任务交给代理类代理,它就能干。动态代理相较于静态代理只能代理已知功能,灵活性更高。不需要像静态代理一样,一个功能就需要编写一

2021-01-13 12:27:24 160 1

原创 HashMap学习笔记(一)构造方法及重要属性

HashMap中重要的成员变量/** * The default initial capacity - MUST be a power of two. */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //当无参构造创建 HashMap 时,不创建哈希桶;等到使用 put 方法向 hashMap 中插入 kv 时, //调用 resize 方法,按需创建哈希桶,默认初始容量为 16/**

2021-01-05 13:59:15 289

原创 ArrayList动态扩容

ArrayList动态扩容/** * Constructs an empty list with an initial capacity of ten. */public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}阅读源码时,看到ArrayList 的一个无参构造函数的注释 “构造一个初始容量为10的空的集合”,找不到哪里有10这个数字,很懵逼。跟 elementData 有关系?tran

2020-12-19 14:56:38 227 1

原创 ConcurrentModificationExpection

在使用Iterator迭代器循环遍历ArrayList时, 在循环中使用了ArrayList.remove() 移除元素ArrayList 类继承了 AbstractList 类在AbstractList 类中定义了一个成员变量 modCount (被修改次数) 初始值为0//ArrayList 中的remove 方法public E remove(int index) { rangeCheck(index); modCount++; E old

2020-12-18 14:33:43 3058 6

空空如也

空空如也

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

TA关注的人

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