-
Fail-fast机制
参考博文fail-fast机制面试官:说说快速失败和安全失败是什么Java快速失败(fail-fast)和安全失败(fail-safe)区别Fail-fast机制 在 JDK 的 Collection 中我们时常会看到类似于这样的话: ArrayList 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提...…
-
最短路径问题解决方案
最短路径SPF问题解决方案 深度优先遍历DFS /** * 深度优先遍历Depth-First Transverse * * @param cur * @param dis * @param n * @param dest * @param edges * @param visited */ public static void dfs(int cur, int dis, int n, i...…
-
ReentrantReadWriteLock源码分析
参考博文独享锁 VS 共享锁ReentrantReadWriteLock总体设计public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { /** Inner class providing readlock */ private final ReentrantReadWriteLock.ReadLock readerLock; /** Inner ...…
-
ReentrantLock使用和源码分析
参考博文ReentrantLock使用和源码分析总体设计public class ReentrantLock implements Lock, java.io.Serializable { private final Sync sync; /** * Base of synchronization control for this lock. Subclassed * into fair and nonfair versions below. Uses ...…
-
JDK1.8中的HashMap
参考博文https://www.bilibili.com/video/av55783082/Put操作 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } // jdk8中hash方法较为简单,因为即便是在有冲突的情况下,红黑树的查询效率依然很高 static final int hash(Object key) { int...…
-
JDK1.8中的ConcurrentHashMap
参考博文https://www.e-learn.cn/content/qita/1039497Put操作 public V put(K key, V value) { return putVal(key, value, false); } JDK1.8中segment被取消,锁之间被加在了每个链表的头结点上。synchronized (f) { if (tabAt(tab, i) == f) { if (fh >= 0) { ...…
-
JDK1.7中的LinkedList
参考博文LinkedList 的实现原理结构特征 实现了双端队列Dequepublic class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializableprivate static class Node<E> { E item; ...…
-
JDK1.7中的LinkedHashSet
参考博文LinkedHashSet 的实现原理总结 LinkedHashSet继承与HashSet,并且其内部是通过LinkedHashMap来实现的。// HashSet(包访问权限)HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); } 双重链接列表,accessO...…
-
JDK1.7中的LinkedHashMap
参考博文构造方法public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { /...…
-
以数组定和问题谈对回溯的认识
原创 数组定和问题:数组中和为target的元素组合返回结果 // 返回结果 private static List<List<Integer>> ans = new ArrayList<>(); // 临时结果 private static List<Integer> temp = new ArrayList<>();数组中的元素可以取任意多次(后面的元素能出现在前面) 例如:[1, 1, 1], ...…
-
JDK1.7中的ArrayList
参考博文ArrayList 的实现原理构造方法 支持随机访问,支持增删改查操作、克隆、序列化。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializablepublic ArrayList(int initialCapacity) { ...…
-
Command Line L2
Git常用命令总结1. 读图知意2. 命令清单3. 博文参考致谢常用Git命令清单常用Git命令使用教程GIT CHEAT SHEET…
-
Command Line L1
Linux常用命令总结一、文件和目录1.1 cd命令 cd /home 进入'/home'目录cd .. 返回上一级目录cd ../.. 返回上两级目录cd 进入个人的主目录cd ~user1 进入个人的主目录cd - 返回上次所在的目录 1.2 pwd命令 pwd 显示工作路径 1.3 ls命令 ls 查看目录中的文件ls -l 显示文件和目录的详细资料ls -a 列出全部文件,包含隐藏文件ls -R 连同子目录的内容一起列出(...…
-
Java Reflection R2
反射1. 静态代理和动态代理 代理设计模式的原理: 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 静态代理。interface ClothFactory { void produceCloth();}// 代理类class NikeClothFactory implements ClothFactory { @Override public ...…
-
Java Reflection R1
第一章 反射1. 什么是反射? 能够分析类能力的程序称之为反射,被视为动态语言的关键。反射机制有以下功能:其一,在运行时判断任意一个对象所属的类;其二,在运行时构造任意一个类的对象;其三,在运行时判断任意一个类所具有的成员变量和方法;其四,在运行时调用任意一个成员变量的类型和方法;其五,生成动态代理。2. Class类2.1 什么是Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。...…
-
Java org.json HE Json-lib
org.json和Json-lib联系与区别1. 联系 下面代码中 org.json 和 net.sf.json 的构造和解析是相同的。public static JSONObject construct() { JSONObject jsonObj = new JSONObject(); jsonObj.put("name", "inITial2"); String[] likes = new String[]{"JAVAScript", "Skiing...…
-
Java Concurrent P5
第三章 JAVA 并发编程(精通篇之设计模式)1. 单例模式 饿汉模式:类加载的时候,就进行对象的创建,系统开销较大,但是不存在线程安全问题。 懒汉模式:多数采用饿汉模式,在使用时才真正的创建单例对象,但是存在线程安全问题。 静态内部类单例:兼具懒汉模式和饿汉模式的优点。 饿汉示例public class SingletonOne { private static SingletonOne singletonOne = new Single...…
-
Java Concurrent P4
第三章 JAVA 并发编程(精通篇之线程池)1. newCachedThreadPool newCachedThreadPool是具有缓存性质的线程池,线程最大空闲时间60s,线程可重复利用(缓存特性),没有最大线程数限制。任务耗时端,数量大。 public class NewCachedThreadPoolDemo { public static void main(String[] args) { ExecutorService cacheTh...…
-
Java Concurrent P3
第三章 JAVA 并发编程(精通篇之Concurrent同步工具类)1. CountDownLatch类 CountDownLatch是一个辅助工具类,它允许一个或多个线程等待一系列指定操作的完成。CountDownLatch以一个给定的数量初始化。countDown()每被调用一次,这一数量就减一。通过调用 await()方法之一,线程可以阻塞等待这一数量到达零。public class CountDownLatchDemo { //注意:可以引入多个计数器Cou...…
-
Java Concurrent P2
第二章 JAVA并发编程(进阶篇)1. Volatile关键字 作用:强制线程到共享内存中读取数据,而不从线程的工作内存中读取,从而使变量在多个线程间可见。public class DemoThread13 { /** * 共享内存的可见性 */ private List<String> list = new ArrayList<>(); private volatile boolean canGet = fals...…