![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaSE
文章平均质量分 65
问明
胸藏文墨怀若谷,腹有诗书气自华
展开
-
JavaSE面试总结
一.基础什么是正则表达式?记录文本转换规整的代码。Java中的String类提供了支持正则表达式的方法,如:matches()、replaceAll()、replaceFirst()、split()等。int和Interger的区别?Interger是int的包装类。为了能够将基本数据类型当成对象操作,故引入了包装类什么是自动装箱和自动拆箱?自动装箱:将基本数据类型转化为对...原创 2020-01-01 18:20:34 · 476 阅读 · 1 评论 -
java中i++和++i、+=和=+的区别
i++和++i的区别public static void main(String[] args) { int a = 1; int b = 1; int c = 4; int d = 4; c = a++; // a++是先将a的原始值1赋值给c,再进行加1操作 d = ++b; // ++b是先执行++b,即b=1+1=2后,再将b的值赋值给d,即d=b=2 System.out.println("c="原创 2022-05-06 22:10:16 · 760 阅读 · 0 评论 -
当构造方法参数过多时使用 builder 模式——《effective-java》
//Builder Patternpublic class NutritionFacts{ public final int servingSize; public final int servings; public final int calories; public final int fat; public final int sodium; public final int carbohydrate; //静态内部类Builder转载 2020-08-13 10:26:42 · 104 阅读 · 0 评论 -
阻塞队列大全
ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列PriorityBlockingQueue:支持优先级排序的无界阻塞队列DelayQueue:使用优先级队列实现的无界阻塞队列SynchronousQueue:不存储元素的阻塞队列LinkedTransferQueue:由链表结构组成的无界阻塞队列LinkedBlockingQeque:由链表结构组成的双向阻塞队列...原创 2020-04-14 10:44:57 · 186 阅读 · 0 评论 -
一文搞定死锁的前世今生
一. 什么是死锁? 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程。二. 死锁产生的原因?系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥...转载 2020-03-28 15:51:49 · 112 阅读 · 0 评论 -
如何设计一个不可变类?
一. 什么是不可变类?不可变类是指,一旦一个类的对象被创建出来,在其整个生命周期中,它的成员变量就不能被修改。如说String、BigInteger、BigDecimal。二. 优缺点优点直接复用。就像String对象池那样,相同的对象只需要创建一个,这样可以极大地节省空间。可以共享。不可变对象本质上是线程安全的,多个线程并发访问同一个对象不会造成任何线程安全性问题。不可变类可以很...转载 2020-03-23 16:09:57 · 683 阅读 · 0 评论 -
乐观锁、悲观锁、公平锁、非公平锁
乐观锁、悲观锁:https://blog.csdn.net/qq_35190492/article/details/104691668公平锁、非公平锁:https://blog.csdn.net/qq_35190492/article/details/104943579转载 2020-03-23 10:03:39 · 148 阅读 · 0 评论 -
集合框架之concurrentHashMap
一. 简介 CurrentHashMap是线程安全的、采用数组+链表实现的Key-Value结构。二. 原理为什么要将CurrentHashMap线程安全?原创 2020-02-20 10:15:07 · 171 阅读 · 0 评论 -
集合框架之HashMap详解
一. 简介 HashMap是底层采用数组+链表实现的线程不安全的Key-Value结构。二. 原理插入元素通过put()方法传递键值对时,键先调用hashCode()方法,并返回一个hash值,通过hash值对数组长度取余(即index = HashCode(Key) % Array.length)找到数组对应的位置,再遍历链表判断链表中是否有此Key,如果链表中已有此Key(即发......原创 2020-02-18 20:38:34 · 237 阅读 · 0 评论 -
集合框架之ArrayList详解
一. 简介ArrayList即数组列表,是线程不安全的,底层采用数组(即Object[] elementData)实现了数据的存储,故其查询快,增删慢。二. 扩容源码解析若未添加数据,则默认容量为0;若通过add()方法添加数据后,默认的初始容量为10;当数组满了,再新增数据时,会以1.5的倍数进行扩容(如:原容量为10,扩容后为15),再将原数组中的数据复制到新数组中。...原创 2020-02-18 16:05:23 · 138 阅读 · 0 评论 -
线程池的七大参数
参数作用corePoolSize(核心线程数)1. 创建线程池时,默认线程数为0; 2. 当有任务请求时,如果线程数小于核心线程数,线程池会创建一个线程去执行此任务;如果线程数大于等于核心线程数,把任务放到缓存队列中maximumPoolSize(最大线程数)1. 线程数 >= 核心线程数,且任务队列已满,线程池会创建新的线程执行任务; 2. 线程数 = 核心线......原创 2019-12-26 16:06:26 · 1094 阅读 · 0 评论 -
扩容机制
ArrayList· 默认大小:10· 扩容倍数:1.5倍+1HashMap· 默认大小:16· 扩容倍数:2倍Redis· 默认大小:· 扩容倍数:2倍原创 2020-01-02 23:20:30 · 623 阅读 · 0 评论 -
short a = 1;a = a + 1;a += 1的错对原因
为什么a = a + 1是错,而a += 1是对?分析因为1是int类型,因此a + 1也是int类型,故需要将int类型强转为short类型,所以a = a + 1是错的;而 a += 1之所以正确,是因为它进行了不为人知的类型转换,即a = (short)(a + 1)。...原创 2020-02-20 09:42:37 · 991 阅读 · 1 评论 -
快速失败(fail-fast)和安全失败(fail-safe)
一. 快速失败(fail-fast)原理迭代器遍历集合时,迭代器中维护了一个modCount 变量,当遍历下一个元素前,都会判断modCount 的值是否为expectedModCount,若为expectedModCount则返回遍历结果;否则抛出ConcurrentModificationException异常,终止遍历。快速失败之HashMapHashMap中的Iterato...原创 2020-02-19 17:44:15 · 281 阅读 · 0 评论 -
Queue的add()和offer()及remove()和poll()的区别
一. add()方法和offer()方法二者均是向队列尾部添加元素;当超出队列界限的时,add()方法会抛出异常,offer()方法会返回false。二. remove()方法和poll()方法二者均是从队列头部输出元素;当超出队列界限的时,remove()方法会抛出异常,poll()方法会返回null。...原创 2020-02-04 10:14:03 · 641 阅读 · 0 评论 -
反射机制
一. 反射机制的作用得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。【重要作用】在运行时动态地创建类的对象二. 代码示例Base类public class Base { public void f() { System.out.println("Base"); }}Sub类publi...原创 2020-01-16 20:46:09 · 114 阅读 · 0 评论 -
java程序初始化顺序
一. 初始化三原则静态对象(变量)优于非静态对象(变量),且静态对象(变量)只初始化一次,非静态对象(变量)可能初始化多次;父类优与子类;按照成员变量的定义顺序初始化。二. 代码示例父类public class Father { static { System.out.println("父静态代码块"); } { Sys...原创 2020-01-16 15:25:22 · 141 阅读 · 0 评论 -
泛型详解(Java1.5新特性)
一. 思维导图二. 示例代码泛型类//泛型类public class ClassDemo<T> { private T key; public T getKey() { return key; } public void setKey(T key) { this.key = key; }}...原创 2019-12-15 16:00:55 · 148 阅读 · 0 评论