Java
一蓑烟雨任平生2024
这个作者很懒,什么都没留下…
展开
-
史上最全HashMap面试题汇总
1.HashMap的数据结构?哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过8时,链表转换为红黑树。2.HashMap的工作原理?HashMap底层是hash数组和单向链表实现,数组中的每个元素都是链表,由Node内部类(实现Map.Entry<K,V>接口)实现,HashMap通过put&get方法存储和获取。存储对象时,将K/V键值传给put()方法: ①、调用hash(K)方法计算K的hash值,然后结合数组长度,计算得数组下标;转载 2020-07-13 19:44:14 · 22670 阅读 · 13 评论 -
Java-集合容器常见面试题
注:层次关系:实线边框为实现类,折现边框是抽象类,点线边框的是接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可...原创 2020-06-10 11:11:04 · 662 阅读 · 1 评论 -
computeIfAbsent 和 putIfAbsent
computeIfAbsent 和 putIfAbsent 都是在 Map 接口的实现类中用于有条件地插入键值对的方法,但它们之间有重要的区别。下面是关于这两个方法的详细对比:功能:尝试将指定的值与指定的键关联,但仅当键尚未映射到值时才这样做。参数:键和要插入的值。返回值:返回与键先前关联的值,或者如果键没有映射到任何值,则返回 null。使用场景:当你想要在 Map 中插入一个值,但只有当键不存在时才这样做,以避免覆盖现有的值。原创 2024-07-20 11:33:18 · 791 阅读 · 0 评论 -
引用拷贝、浅拷贝、深拷贝
在这个深拷贝的例子中,我们利用了Java的序列化和反序列化机制。通过将对象写入字节流再从字节流读取,可以实现深拷贝,确保所有嵌套的对象也都会被复制一份新的实例。因此,即使修改了原始对象内嵌对象的属性,也不会影响到深拷贝后的对象。另外,对于复杂的数据结构,可能需要设计更复杂的深拷贝逻辑,尤其是涉及循环引用或非序列化对象时。的引用拷贝,它们指向相同的内存地址,因此当原始对象的属性发生改变时,通过引用拷贝得到的对象也会反映出这些变化。因此,即使进行了浅拷贝,修改原始对象内嵌对象的属性仍会影响到拷贝后的对象。原创 2024-04-15 20:28:31 · 263 阅读 · 0 评论 -
Synchronized锁升级过程
当一个线程首次访问同步块时,如果此对象无锁状态且偏向锁未被禁用,JVM 会将该对象头的锁标记改为偏向锁状态,并记录下当前线程的 ID。如果持有偏向锁的线程还活跃,则需要撤销偏向锁,升级为轻量级锁。进行偏向锁撤销时,会遍历堆栈的所有锁记录,暂停拥有偏向锁的线程,并检查锁对象。如果这个过程中发现有其他线程试图获取这个锁,JVM 会撤销偏向锁,并将锁升级为轻量级锁。轻量级锁通过线程自旋来等待锁释放。当有两个或以上线程竞争同一个偏向锁时,偏向锁模式不再有效,此时偏向锁会被撤销,对象的锁状态会升级为轻量级锁。原创 2024-04-02 22:02:38 · 360 阅读 · 0 评论 -
Java中字符串有长度限制吗?
字符串有长度限制吗?是多少?首先字符串的内容是由一个字符数组char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB。但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了.转载 2021-04-02 13:45:26 · 529 阅读 · 1 评论 -
StringBuilder 拼接去除最后一个多余字符
【代码】StringBuilder 拼接去除最后一个多余字符。原创 2023-05-08 20:55:32 · 2850 阅读 · 0 评论 -
Integer比较大小
Integer比较原创 2023-02-19 10:49:16 · 7610 阅读 · 0 评论 -
取List集合排行前n的元素
方法一: List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); //将list排列顺序逆转顺序,升序就变成了降序 Collections.sort(integers,Comparator.reverseOrder()); //取前三个元素 Stream<Integer> limit = integers.stream().li.原创 2021-05-13 20:17:14 · 2575 阅读 · 0 评论 -
Java Map集合的遍历
Map<String,String> map = new HashMap<String,String>(); map.put("1","aaa"); map.put("2","bbb"); map.put("3","ccc"); /* *说明:根据阿里开发手册,不建议使用这种方式, *因为迭代两次。keySet获取Iterator一次, *还有通过get又迭代一次,降低性.原创 2021-05-12 21:01:11 · 126 阅读 · 0 评论 -
java stream()的使用
https://blog.csdn.net/justloveyou_/article/details/79562574https://blog.csdn.net/mu_wind/article/details/109516995原创 2021-05-10 09:44:35 · 134 阅读 · 0 评论 -
java 获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式
方法一(线程不安全, 不建议使用)private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 Date now = new Date(); String time = sdf.format(now);方法二(线程安全,建议使用)import java.time.LocalDateTime;import java.time.format.DateTimeFormatter; p转载 2021-05-05 14:51:16 · 47667 阅读 · 4 评论 -
Java——String类的substring()方法
截取字符串,在java语言中的用法1、 public String substring(int beginIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。参数:beginIndex - 开始处的索引(包括),返回:指定的子字符串,异常:如果 beginIndex 为负或大于此 String 对象的长度,则抛出IndexOutOfBoundsException例 :"unhappy".substring(2) ...转载 2021-04-26 08:49:59 · 9045 阅读 · 0 评论 -
Java生成随机数的方法
一.使用Math.random()方法直接使用Math.random()这个静态的方法,random()方法返回一个[0,1)的随机数;Math.random() 产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机int ran = Math.random()*100//1-10的随机数int random=(int)(Math.random()*10+1);//1-50的随机数new Random().nextInt转载 2021-04-25 22:53:42 · 14705 阅读 · 0 评论 -
Collections.sort的使用
1.对于String或Integer这些已经实现Comparable接口的类来说,可以直接使用Collections.sort方法传入list参数来实现默认方式(正序)排序;2.如果不想使用默认方式(正序)排序,可以通过Collections.sort传入第二个参数类型为Comparator来自定义排序规则;3.自定义的类也可以通过实现Comparable接口的compareTo方法来进行;package com.java.demo.CollectionsUtils;import..原创 2021-04-25 10:32:48 · 1614 阅读 · 0 评论 -
后端开发:新入职一家公司如何快速进入团队?
转自:https://www.cnblogs.com/hunternet/p/14675348.html转载 2021-04-20 09:26:59 · 316 阅读 · 0 评论 -
如何实现“三高”——高并发 高可用 高性能
https://www.cnblogs.com/hxz-nl/p/11799780.html转载 2021-03-16 22:44:06 · 515 阅读 · 0 评论 -
Java自定义注解
https://blog.csdn.net/zt15732625878/article/details/100061528https://www.cnblogs.com/liangweiping/p/3837332.html原创 2020-11-08 10:36:02 · 129 阅读 · 0 评论 -
Java创造对象的五种方式
五种方法创建java对象作为Java开发人员,我们通常每天都会创建许多对象,但是我们总是使用新的或依赖管理系统(例如Spring)来创建这些对象。但是,有更多方法可以创建本文中将要研究的对象。用Java创建对象的共有5种核心方式,下面将以其示例加以说明,然后介绍创建对象的行的字节码。但是,有很多API可以为我们创建对象,但是这些API还将间接使用这5种核心方式之一,例如Spring BeanFactory。如果您将执行最后给出的程序,则会看到方法1、2、3使用构造函数创建对象,而4、5没有调原创 2020-10-20 15:16:15 · 739 阅读 · 0 评论 -
String转成基本类型
如何将字符串转化成基本类型在日常开发中,我们一般都会把字符串byte,short,int,long,float,double,这些类型然后在做一些操作。我们一般用parse方法 例如Integer.parseInt下面是java的Number自带的方法java.lang.BytepublicstaticbyteparseByte(Strings)throwsNumberFormatExceptionjava.lang.Shortpublicstat...原创 2020-10-19 14:33:55 · 657 阅读 · 0 评论 -
int转换为String常用的四种方法
int i = 100;方法一:String s1 = i + " ";方法二:String s2 = String.valueof(i);方法三(先转换为Integer类型,在调用toString方法):Intrger i2 = new interger(i); String s3 = i2.toString();方法四:String s4 = ...原创 2020-10-19 10:17:30 · 19065 阅读 · 1 评论 -
JDK 动态代理与 Cglib 动态代理
AOP(Aspect Oriented Programming),即面向切面编程,最主要的思想就是纵向重复,横向抽取。要想实现 AOP,其底层实现是使用了动态代理技术,在 Spring 中,动态代理技术分为传统的JDK 动态代理和Cglib 动态代理。这两种代理机制区别是: JDK 动态代理:针对实现了接口的类进行代理 Cglib 动态代理:针对没有实现接口的类进行代理,底层是字节码增强技术,生成当前类的子类对象。 假设我们有一个 UserService 接口,其中具有 CRUD..原创 2020-10-11 21:10:41 · 209 阅读 · 1 评论 -
Integer.parseInt()和Integer.valueOf()的区别
new Integer.valueof()返回的是Integer的对象。 Integer.parseInt() 返回的是一个int的值。 new Integer.valueof().intValue();返回的也是一个int的值。 parseInt public static int parseInt(String s, int radix) throws NumberFormatException 以第二个参数所指定基数将字符串参数分析为一个带符...原创 2020-10-03 14:41:09 · 445 阅读 · 0 评论 -
Java中short、int、long、float、double的取值范围
一、基本数据类型的特点,位数,最大值和最小值。1、基本类型:short二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE=32767 (2的15次方-1)2、基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)最大值:Integer.MAX_VALUE= 2147.原创 2020-10-03 11:32:49 · 878 阅读 · 0 评论 -
java三元运算符与类型强制转换
在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下: 1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,,那么返回的结果就是范围大 (精度高)类型 2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型 3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型而jvm在给数值分配数据类型的时候会选取刚好能装下该数据大小精度的数...原创 2020-09-29 13:03:30 · 1798 阅读 · 0 评论 -
java随机生成三位数
/** * 生成随机三位数 */ public static void test3(){ int i=(int)(Math.random()*900)+100; int j= new Random().nextInt(900)+100; System.out.println(i); }也就是要bai求100到999之间的随机数,Math.random()返回的是0到1之间的随机数,返回类型为double型,大...原创 2020-09-28 16:40:28 · 15440 阅读 · 0 评论 -
Java读写大文本文件(2GB以上)
Java读写大文本文件(2GB以上)如下的程序,将一个行数为fileLines的文本文件平均分为splitNum个小文本文件,其中换行符'r'是linux上的,windows的java换行符是'\r\n':package kddcup2012.task2.FileSystem; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import jav转载 2020-09-25 08:22:57 · 1729 阅读 · 0 评论 -
JAVA字符串如何转换成数字(StringToNumber)
public class StringToNumber { public static void main(String[] args) { String str = "123"; Integer num1 = new Integer(str); int num2 = Integer.parseInt(str); Integer num3 = Integer.valueOf(str); System.out.p.原创 2020-09-23 21:45:43 · 12677 阅读 · 0 评论 -
java中将数字转换成字符串(int转换为string)
String s = "123";int n= 12;方法一:通过包装类来实现String ss = String.valueOf(n);方法二:直接通过空字符串+数字的形式转换为字符串String ss= ""+n;//方法三:强制类型转换String ss= (String)n;原创 2020-09-22 22:38:32 · 1444 阅读 · 0 评论 -
java——一个数组给另一个数组赋值(拷贝)
本文探讨Java中数组中的赋值问题。在探讨这个问题之前必须先弄懂一件事,Java中的数组到底是什么东西?是类,是对象,还是什么其他奇奇怪怪的东西。答案是:Java中的数组本质上是对象。但是这个对象不是通过某个类实例化来的,而是JVM创建的,这也就不难解释对于一个数组对象arr,我们可以直接通过arr.length访问数组的长度。 现在我们知道了Java中数组本质上是对象,那么我们来看一下这样的代码合理不合理:int[] a = {1,2,3};int[] b = new int[3];...原创 2020-09-22 22:37:24 · 24647 阅读 · 3 评论 -
entity、bo、vo、po、dto、pojo如何理解和区分?
Entity最常用实体类,基本和数据表一一对应,一个实体一张表。Bo(business object)代表业务对象的意思,Bo就是把业务逻辑封装为一个对象(注意是逻辑,业务逻辑),这个对象可以包括一个或多个其它的对象。通过调用Dao方法,结合Po或Vo进行业务操作。形象描述为一个对象的形为和动作,当然也有涉及到基它对象的一些形为和动作。比如处理一个人的业务逻辑,该人会睡觉,吃饭,工作,上班等等行为,还有可能和别人发关系的行为,处理这样的业务逻辑时,我们就可以针对BO去处理。再比如投保人是转载 2020-09-22 07:46:16 · 1374 阅读 · 0 评论 -
java中移位运算<<左移 >>右移 <<<无符号右移 详解
java中移位运算<<左移 >>右移 <<<无符号右移 详解目录java中移位运算<<左移 >>右移 <<<无符号右移 详解概念代码举例过程解释<<左移>>右移>>>无符号右移实际应用概念<<:左移 左边最高位丢弃,右边补齐0>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1>>>:无原创 2020-09-20 13:00:57 · 11351 阅读 · 3 评论 -
String的一些常用方法
String 类的常用方法:equals:字符串是否相同 equalsIgnoreCase:忽略大小写后字符串是否相同 compareTo:根据字符串中每个字符的Unicode编码进行比较 compareToIgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较 indexOf:目标字符或字符串在源字符串中位置下标 lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标 valueOf:其他类型转字符串 charAt:获取指定下标位置的字符.原创 2020-09-19 16:46:57 · 278 阅读 · 0 评论 -
abstract的方法能否与static,native,synchronized连用?
1、abstract与static (what) abstract:用来声明抽象方法,抽象方法没有方法体,不能被直接调用,必须在子类overriding后才能使用 static:用来声明静态方法,静态方法可以被类及其对象调用java中抽象类中的抽象方法不可以使用static 构成静态抽象方法,抽象类是不能实例化的,即不能被分配内存;而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。...转载 2020-09-16 22:32:16 · 1149 阅读 · 0 评论 -
try-with-resources关闭资源
try-with-resources是jdk1.7加入的机制,可以保证资源使用后正常关闭,并使代码更加简洁。try-catch-finally使用实例:public void handle(String fileName) { BufferedReader reader = null; try { String line; reader = new BufferedReader(new FileReader(fileName)); ..原创 2020-09-13 19:50:43 · 802 阅读 · 0 评论 -
字符串String操作的12个小技巧
目录01、如何在字符串中获取不同的字符及其数量?02、如何反转字符串?03、如何判断一个字符串是前后对称的?04、如何删除所有出现的指定字符?05、如何证明字符串是不可变的?06、如何统计字符串中的单词数?07、如何检查两个字符串中的字符是相同的?08、如何判断一个字符串包含了另外一个字符串?09、如何在不用第三个变量的情况下交换两个字符串?10、如何从字符串中找出第一个不重复的字符?11、如何检查字符串中只包含数字?12、如何实现字符串的深度拷贝?.转载 2020-09-10 19:54:38 · 520 阅读 · 0 评论 -
深拷贝和浅拷贝的区别
目录深拷贝和浅拷贝值类型 vs 引用类型赋值 vs 浅拷贝 vs 深拷贝对象赋值浅拷贝深拷贝浅拷贝代码实现深拷贝代码实现深度遍历式拷贝利用反序列化实现深拷贝深拷贝和浅拷贝浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。浅复制:仅仅是指向被复制的.转载 2020-08-27 11:19:12 · 4575 阅读 · 4 评论 -
Cookie、Session、Token、JWT
目录什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials)什么是 CookieCookie 和 Session 的区别什么是 Token(令牌)Acesss TokenRefresh TokenToken 和 Session 的区别什么是 JWT生成 JWTJWT 的原理JWT 的使用方式项目中使用 JWTToken 和 JWT 的区别常见的前后端鉴权方式常见的加密算法.转载 2020-08-24 08:31:12 · 350 阅读 · 0 评论 -
java8-lambda函数式接口
lambda使用案例函数式接口使用Lambda时,要记住的就两点: Lambda返回的是接口的实例对象 有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口 方法引用...原创 2020-08-22 22:37:13 · 193 阅读 · 0 评论 -
理解一下5种I/O模型
目录1、IO2、5 种 IO 模型2-1、阻塞 IO 模型2-2、非阻塞 IO 模型2-3、IO 复用模型2-4、信号驱动 IO 模型2-5、异步 IO 模型3、IO 模型比较3-1、阻塞 IO 调用和非阻塞 IO 调用、阻塞 IO 模型和非阻塞 IO 模型3-2、同步 IO 和异步 IO5 种 IO 模型分别是阻塞 IO 模型、非阻塞 IO 模型、IO 复用模型、信号驱动的 IO 模型、异步 IO 模型;前 4 种为同步 IO 操作,只有异步 IO 模型是异步转载 2020-08-19 09:32:28 · 385 阅读 · 1 评论