Java基础
未读
StringBuilder和StringBuffer的区别
StringBuilder 可变字符串序列 线程不安全 执行速度快 StringBuffer 可变字符串序列 线程安全 执行速度慢
Java基础
未读
Stream API
1、概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stre
Java基础
未读
Set如何判断一个对象是否存在
底层实现HashMap,数据保存在HashMap的key中,value中存储一个常量对象(在同一个线程中所有的Set的value中都是这常量对象)。 先计算Hash值判断对应的位置是否有元素,有元素的话在使用equals进行比较,所以使用HahSet必须实现hashCode方法和equals方法。
Java基础
未读
Serializable接口为什么需要定义serialVersionUID常量
【得分点】 兼容性、自定义 【参考答案】 标准回答 serialVersionUID是序列化版本,为一个类定义序列化版本,是出于兼容性的考虑。如果某个类随着项目进行了升级,那么对于升级之前序列化的数据,在升级之后反序列化时就很可能出现不兼容的情况。如果事先定义了序列化的版本,则在反序列化的时候,只要
Java基础
未读
PreparedStatement与Statement
1、PreparedStatement效率为什么高 PreparedStatement会讲SQL语句进行预编译,每次执行的时候只需要将参数设置给相应的占位符就可以运行。而使用Statement时,SQL语句时每次都要进行编译,所以PreparedStatement的效率相对较高。 1.1、具体分析
Java基础
未读
Java泛型上下界通配符
前言 和是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。 <? extends T>:是指“上界通配符(Upper Bounds Wildcards)” <? super T>:是指“下界通配符(Lower Bounds Wildcards)”; 1、为什么使用通
Java基础
未读
Java对象是在什么时候创建的?
我们都知道,创建 java 类对象的方式: new + 类的构造方法(可能是有参构造或者无参构造)! 在大多数初学者眼中,执行构造方法就是创建实例,其实不然。这一点可以从 this 关键字来看出: public class User{
public User(){
this.
Java基础
未读
HashMap的扩容机制
【得分点】 三个条件、翻倍扩容 【参考答案】 标准回答 1.7 第一次put时,容量扩容初始化:其容量变为不小于指定容量的2的幂数(默认为16) 不是第一次put时,扩容:新容量 = 旧容量 * 2 ,新阈值 = 新容量 * 加载因子 1.8 向HashMap中添加数据时,有三个条件会触发它的扩容行
Java基础
未读
CopyOnWriteArrayList的底层原理是怎样的
在CopyOnWriteArrayList中,当多个线程同时对列表进行写操作时,它们不会直接修改原始列表,而是先将原始列表进行复制,然后在复制的副本上进行修改,最后再将副本替换为原始列表。这个过程中,读操作仍然直接访问原始列表,因此可以避免读写冲突。 多线程同时写入:add方法内部使用synchor