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
Java基础
未读
ConcurrentHashMap的实现原理
【得分点】 数组 + 链表 + 红黑树、锁头节点 【参考答案】 标准回答 在 JDK8 中,ConcurrentHashMap 的底层数据结构与 HashMap 一样,也是采用“数组 + 链表 + 红黑树”的形式。同时,它又采用锁定头节点的方式降低了锁粒度,以较低的性能代价实现了线程安全。底层数据结
优雅的开发技巧
未读
妙用Java 8中的 Function接口 消灭if...else
处理 if 分支操作 定义函数式接口 创建一个名为 BranchHandle 的函数式接口,接口的参数为两个 Runnable 接口。这两个两个 Runnable 接口分别代表了为 true 或 false 时要进行的操作 /**
* 分支处理接口
**/
@FunctionalInterfac
优雅的开发技巧
未读
Thread.sleep(0)有什么用
这篇文章要从一个奇怪的注释说起,就是下面这张图: 我们可以不用管具体的代码逻辑,只是单单看这个 for 循环。 在循环里面,专门有个变量 j,来记录当前循环次数。 第一次循环以及往后每 1000 次循环之后,进入一个 if 逻辑。 在这个 if 逻辑之上,标注了一个注释:prevent gc. pr
优雅的开发技巧
未读
Lombok中好用的注解
@EqualsAndHashCode 是否在子类的equals和hashCode中加入父类的属性判断。参数callSuper默认为false(即不对父类的属性进行判断)。 如果不加的话在进行子类队形判断时不会对父类的对象进行判断,这回导致比较的结果不正确。 Bean 中的链式风格 @Accessor