随笔分类 -  JAVA基础

摘要:代理模式 为其他对象提供一个代理以控制对某个对象的访问。代理类和被代理类通常会存在关联关系(即持有被代理对象的引用),代理类本身不实现服务,而是通过调用被代理类中的方法来提供服务。 具体参考:设计模式(二)结构型模式 JDK动态代理 JDK动态代理采用字节重组,重新生成对象来替代原始对象,以达到动态 阅读全文
posted @ 2026-03-20 12:25 鄙人取个名字好难 阅读(4) 评论(0) 推荐(0)
摘要:布隆过滤器主要用于判断一个元素是否在一个集合中,它可以使用一个位数组简洁的表示一个数组。它的空间效率和查询时间远远超过一般的算法,但是它存在一定的误判的概率,适用于容忍误判的场景。如果布隆过滤器判断元素存在于一个集合中,那么是可能存在在集合中(称之为误判);如果它判断元素不存在一个集合中,那么一定不 阅读全文
posted @ 2021-03-13 11:16 鄙人取个名字好难 阅读(294) 评论(0) 推荐(0)
摘要:线程池优势 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗; 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; 方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程 阅读全文
posted @ 2021-02-17 10:50 鄙人取个名字好难
摘要:ReentrantLock VS ReentrantReadWriteLock VS StampedLock 锁 特性 是否支持重入 是否支持锁升级 是否支持Condition 适合场景 ReentrantLock 独占可重入 是 无 是 纯写入 ReentrantReadWriteLock 非独占 阅读全文
posted @ 2021-02-16 17:47 鄙人取个名字好难
摘要:ThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每个线程有自己的独立副本从而实现线程封闭的机制。Thread类有一个类型为ThreadLocal. 阅读全文
posted @ 2021-02-14 14:38 鄙人取个名字好难
摘要:并发编程中的三个概念 原子性:即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 可见性:可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。 有序性:即程序执行的顺序按照代码的先后顺序执行。 内存模型JMM以及共享变 阅读全文
posted @ 2021-02-12 14:23 鄙人取个名字好难
摘要:synchronized是Java中的关键字,是一种同步锁,按类型可以分为同步方法和同步代码块。 非同步实例方法&同步实例方法: 非同步实例方法: public class TestSync { public static void main(String[] args) throws Interr 阅读全文
posted @ 2021-02-12 14:21 鄙人取个名字好难
摘要:进程vs线程 在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。 某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。 阅读全文
posted @ 2021-02-12 11:05 鄙人取个名字好难
摘要:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。 1.责任链模式(Chain of Responsibility) 为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。 阅读全文
posted @ 2021-02-11 00:30 鄙人取个名字好难
摘要:用于描述如何将类或对象按某种布局组成更大的结构,关注类和对象的组合。 1.适配器模式(Adapter) 作为两个不兼容的接口之间的桥梁,将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器,将内存卡 阅读全文
posted @ 2021-02-09 23:37 鄙人取个名字好难
摘要:创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵 阅读全文
posted @ 2021-02-08 22:13 鄙人取个名字好难
摘要:TreeMap TreeMap是红黑树的java实现。相比HashMap来说,TreeMap多实现了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同:HashMap的key是无序的,TreeMap的key是有序的。 源码展示: public class T 阅读全文
posted @ 2021-02-01 10:39 鄙人取个名字好难
摘要:HashMap基于哈希表的Map接口实现,是以key-value存储形式存在(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同)。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不 阅读全文
posted @ 2021-01-29 23:47 鄙人取个名字好难
摘要:Hash的定义 散列(哈希)函数:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,是一种压缩映射。hashCode是Object的一个方法,返回的是对象的存储地址。 public int hashCode() { int lockWord = shadow$_monitor_; 阅读全文
posted @ 2021-01-28 20:29 鄙人取个名字好难
摘要:数组与链表在处理数据时各有优缺点,数组查询速度很快而插入很慢,链表在插入时表现优秀但查询无力。哈希表则整合了数组与链表的优点,能在插入和查找等方面都有不错的速度。 Map Map也是基于key-value的数据格式,并且key值不可以重复,每个key对应的value唯一。Map的key也可以为nul 阅读全文
posted @ 2021-01-27 14:40 鄙人取个名字好难
摘要:数据结构 LinkedBlockingQueue是一个底层为单向链表的,有界的,FIFO阻塞队列;访问和移除操作是在队头,添加操作在队尾进行,并且使用不同的锁进行保护。 LinkedBlockingQueue中维持两把锁,一把锁用于入队,一把锁用于出队,这也就意味着,同一时刻,只能有一个线程执行入队 阅读全文
posted @ 2021-01-27 12:52 鄙人取个名字好难
摘要:ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,遵循队列的FIFO原则,队尾入队,队首出队。其非阻塞的方式使用自旋CAS(Compare and swap,即比较并交换)的方式来实现。 ConcurrentLinkedQueue 由 head 节点和 tail 节点组 阅读全文
posted @ 2021-01-26 23:48 鄙人取个名字好难
摘要:ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问;有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当 阅读全文
posted @ 2021-01-26 18:10 鄙人取个名字好难
摘要:Queue源码解析 Queue是Java集合框架中的一员,继承于Collection接口。与List、Set相同的是,Queue也实现了一种数据结构,这就是队列。队列是计算机中的一种数据结构,保存在其中的数据具有“先进先出(FIFO,First In First Out)”的特性。 public i 阅读全文
posted @ 2021-01-25 11:26 鄙人取个名字好难
摘要:HashSet源码分析 底层是HashMap public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { static final long serialVer 阅读全文
posted @ 2021-01-25 09:51 鄙人取个名字好难