在阅读ArrayList的源码时,你会发现这样一个接口:RandomAccess。接下来让我们探索一下这个接口。 首先,这是一个标识性接口,不包含实际方法。官方API中的介绍...
在阅读ArrayList的源码时,你会发现这样一个接口:RandomAccess。接下来让我们探索一下这个接口。 首先,这是一个标识性接口,不包含实际方法。官方API中的介绍...
阿里巴巴Java开发手册中有这样一条规定: 【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需...
基本概念 持续集成(Continuous integration,CI)指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个: 快速发现错误。每完成一点更新,就集成...
Java序列化可以将对象转换为二进制序列,以方便对象持久化和网络传输。 基本用法 要实现序列化的对象必须实现java.io.Serializable这个接口,并借助IDE生成...
在浏览器中输入一个网址,会发生什么? 第一步,浏览器获取域名后向DNS服务器请求获得该域名对应的服务器的IP地址,这一步使用了UDP协议 第二步,浏览器和该服务器发起TCP的...
TCP底层会根据TCP缓冲区的实际情况对网络传输的数据流进行包的划分,而不会根据上层业务数据的具体含义来划分,所以,一个在业务逻辑上完整的包在实际传输中可能会被拆分成多个包进...
select、poll、epoll等系统调用都是IO多路复用的操作系统层面的实现机制。IO多路复用是一种同步非阻塞的网络IO模型,“复用”是指通过对一个线程的复用使其能够同时...
如果明明有这个类存在但仍然提示cannot access,这可能是IDE的bug,可以清除缓存并重启: 尝试 File->Invalidate Caches /Restart...
策略模式简介 当我们因不同的外部条件需要对某个对象执行不同的算法时,我们就可以把具体的算法实现从具体的业务处理中独立出来,把它们实现成为单独的算法类,从而形成一系列的算法,并...
推荐使用Angular 团队的规范,其格式如下: 分为三个部分(使用空行分割): 标题行: 必填, 描述主要修改类型和内容 主题内容: 描述为什么修改, 做了什么样的修改, ...
LockSupport简介 LockSupport工具类用来挂起和唤醒线程,底层使用Unsafe类实现,其最核心的方法是park和unpark: park:该方法用来阻塞线程...
AQS是JUC包中的基础组件,许多同步器例如ReentrantLock、Semaphore等都是基于AQS实现的,如果不懂AQS,怎敢说自己懂并发编程? AQS的作用简述 A...
HashMap在并发环境下会出现死循环等问题,其不是并发安全的。使用并发安全的HashTable或者Collections.synchronizedMap(hashMap),...
费曼学习法的精髓在于用自己的语言把学习的知识给他人讲懂 下面有一些问题,并附有答案和对该知识点的详解,如果你能用自己的语言把该问题讲解清楚,那恭喜你,该知识点你掌握了! 1....
HashMap的设计简述 JDK1.8中的HashMap由数组+链表+红黑树构成,通过hash函数求下标值往数组里插入,当发生冲突时使用拉链解决,当拉链长度小于8时,使用链表...
顾名思义,Netty中的FastThreadLocal要比JDK中的ThreadLocal更快,那FastThreadLocal是怎么做到的呢? FastThreadLoca...
ThreadLocal的使用 多线程访问共享变量时会出现竞争问题,可以使用加锁等手段来解决问题,另一种解决问题的思路是让共享变量在线程内拥有对应的本地变量,从而消灭了共享变量...
Java内存模型的抽象结构 Java线程之间的通信由Java内存模型(JMM,Java Memory Model)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见...
我们首先来看一个标准二分查找的写法: 对于标准的二分查找,你只需要记住以下几点,就可以写得又快又好: 左闭右开区间。我们要始终保持区间的左闭右开,主要体现在:left和rig...
当你学Java的并发包JUC时,不可避免,会经常遇见乐观锁、自旋锁、CAS等字眼,实际上它们都是对同一个技术不同层面的一些描述。volatile变量的读写和CAS可以实现线程...