摘要: TCP 的通讯双方需要发送 3 个包(即:三次握手)才能建立连接,本文将通过 3 副图来解释为什么需要 3 次握手才能建立连接。 TCP 连接的建立过程本质是通信双方确认自己和对方都具有通信能力的过程。TCP 通信双方都需要发送数据和接收数据,通信能力包括:客户端发送数据能力,客户端接收数据能力,服 阅读全文
posted @ 2020-12-31 11:51 Robothy 阅读(986) 评论(0) 推荐(0) 编辑
摘要: Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层。本文介绍了 Java socket 简单用法。 1. 传输层协议 传输层包含了两种协议,分别是 TCP (Transmission Control Protocol,传输控制协议) 和 UDP (User D 阅读全文
posted @ 2020-12-31 10:09 Robothy 阅读(8175) 评论(0) 推荐(1) 编辑
摘要: HashMap 是 Java 中最常见数据结构之一,它能够在 O(1) 时间复杂度存储键值对和根据键取值。本文将分析其内部实现原理(基于 jdk1.8.0_231)。 1. 数据结构 HashMap 是基于哈希值的一种映射,所谓映射,即可以根据 key 获取到相应的 value。例如:数组是一种的映 阅读全文
posted @ 2020-12-29 15:50 Robothy 阅读(349) 评论(0) 推荐(0) 编辑
摘要: ArrayDeque 是双端队列的动态数组实现,可以当作栈和队列来使用。作为栈时,它的效率比 Stack 更高,作为队列时,效率比 LinkedList 更高。ArrayDeque 大部分操作的时间复杂度都是 O(1)。本文将介绍 ArrayDeque 的核心 API 以及其内部实现的算法。 1. 阅读全文
posted @ 2020-12-15 13:22 Robothy 阅读(589) 评论(0) 推荐(0) 编辑
摘要: Deque 是一种支持在两端进行操作的线性结构,包含了栈和队列的功能。Java 中建议使用 Dqueue 的实现来替代遗留的 Stack 类。本文将介绍 Deque 提供的主要 API。 阅读全文
posted @ 2020-12-14 16:10 Robothy 阅读(758) 评论(0) 推荐(0) 编辑
摘要: LinkedList 是 List 接口和 Deque 接口的双向链表实现,它所有的 API 调用都是基于对双向链表的操作。本文将介绍 LinkedList 的数据结构和分析 API 中的算法。 数据结构 LinkedList 的数据结构是一个双向链表,它有两个成员变量:first 和 last,分 阅读全文
posted @ 2020-12-14 16:02 Robothy 阅读(591) 评论(0) 推荐(0) 编辑
摘要: ArraysList 基于动态数组实现了 List 接口。实现了所有的列表相关操作,它允许操作所有的元素(包括 null)。ArrayList 几乎和 Vector 一样,区别在于 ArrayList 是非线程安全的。本文从源码的角度分析 ArrayList 的实现细节。 jdk1.8.0_231 阅读全文
posted @ 2020-11-23 23:37 Robothy 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 第一感觉是一样的,盲猜后者调用了前者,并传入参数 0。但无论是 Java 7 还是 Java 8,这两个方法构造的结果都是不一样的。JDK 开发人员在一些方面作了优化。 阅读全文
posted @ 2020-11-14 19:14 Robothy 阅读(1465) 评论(0) 推荐(0) 编辑
摘要: 泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码。本文总结了 Java 泛型的三种形式以及泛型实现原理。 1. 泛型 泛型的本质是对类型进行参数化,在代码逻辑不关注具体的数据类型时使用。例如:实现一个通用的排序算法,此时关注的是算法本身,而非排序的对 阅读全文
posted @ 2020-11-09 23:30 Robothy 阅读(5988) 评论(0) 推荐(5) 编辑
摘要: equals() 和 hashCode() 在 Object 类中以本地方法的形式存在,Java 中所有的类都继承了 Object 类,因此所有的类中都包含了这两个方法。这两个方法在 Java 开发中使用及其频繁,熟系这两个方法的使用是掌握 Java 语言的必要条件。这里总结了重写这两个方法的两点原 阅读全文
posted @ 2020-11-06 16:43 Robothy 阅读(182) 评论(0) 推荐(0) 编辑