articles
articles copied to clipboard
我的原创文章,包括且不限于技术 blog,历史,文学写作,日常心得等
**目录** - **1 三次握手建立连接** - **2 四次挥手断开连接** ### 1 三次握手建立连接[Top] 关于 TCP 为什么需要三次握手建立连接、四次挥手断开连接,网上有很多标准的答案,很多讲的都非常不错。这里总结一下三次握手四次挥手中我认为最能帮助理解的原因分析。 先看一下三次握手建立连接的图示:  为什么需要三次握手呢?关键的原因是 **通信双方为了相互确认对方收发信息的能力都是正常的**。这也是 TCP 建立连接的目的。具体而言: 1. 客户端先向服务器发送 SYN 报文,如果服务器收到之后,便能确认客户端发送信息能力正常,但此时还不确定客户端接收信息能力是否正常。 2. 然后,服务器返回给客户端 SYN+ACK 报文,SYN...
**目录** - **1 一个 Android 进程都有啥** - **2 Zygote 进程的生成** - **3 startActivity 的流程** - **4 Zygote IPC 为何采用 socket 而不是 binder** ### 1 一个 Android 进程都有啥[Top] 众所周知,Android 是基于 Linux...
**目录** - **1 Parcelable 是一种内存持久化数据** - **2 Parcelable 不能保存在当前进程空间中** - **3 Parcelable 保存在服务进程中** - **4 Parcelable IPC 序列化流程** ### 1 Parcelable 是一种内存持久化数据[Top] 说到 Parcelable 就往往离不开讨论 Serializable,前者是面向 Android 这种便携设备环境中的数据序列化方法,后者是 Java 的通用数据序列化方案。其主要区别在于性能的差异:...
**目录** - **1 两种事件流** * 1.1 事件冒泡 * 1.2 事件捕获 - **2 DOM2 规范** - **3 事件拦截** - **4 与 Android 触摸事件比较** ### 1 两种事件流[Top] 因为历史原因,Web 的很多标准都是厂商竞争的产物,浏览器事件标准也不例外。所谓 **事件流** 是指事件在 DOM...
**目录** - **1 问题抽象** - **2 Union-Find 的实现** * 2.1 快查找(quick find)实现 * 2.2 快合并(quick union)实现 - **3 Union-Find 的优化** * 3.1 基于权重的优化 * 3.2 路径压缩优化 - **4 Union-Find 的应用**...
**目录** - **1 包装数据类型** - **2 一个例子** - **3 为什么需要包装缓存** ### 1 包装数据类型[Top] 在 JDK 中为了适应一些特定的需求(比如:容器泛型类型),对应每个基础数据类型都提供了对应的包装类,具体如下: ``` boolean -> Boolean byte -> Byte short -> Short char -> Character int...
**目录** - **1 Handler消息队列读取模型** - **2 空闲任务执行** - **3 空闲任务应用场景** ### 1 Handler消息队列读取模型[Top] 我们知道,在 Handler 机制中,Looper 负责轮询读取 MessageQueue 中的消息。实际上,对 MessageQueue 的读取过程分为两个主要的阶段——忙时和闲时。其读取模型如下所示:  其要点如下: - Looper...
**目录** - **1 Looper 中事件通知的疑问** - **2 基于阻塞IO的事件通知机制** - **3 Looper 实现阻塞IO** - **4 Looper 阻塞IO技术选型思考** - 参考 ### 1 Looper 中事件通知的疑问[Top] 我们知道,在 Android 中的大部分事件通知(比如 Activity 的生命周期通知)都是通过 Handler 机制来实现的。在 [线程间通信模型——Handler](https://github.com/huanzhiyazi/articles/issues/4)...
**目录** - **1 预备知识——斐波拉契散列** - **2 ThreadLocal 核心结构** - **3 ThreadLocal 散列表读写** * 3.1 散列表的清理 * 3.2 散列表的冲突 * 3.3 散列表的扩容 ### 1 预备知识——斐波拉契散列[Top] Java ThreadLocal 的作用是在当前线程维护一块线程独立(除了本线程外,其它线程无法访问到)的数据区来规避并发问题。其中为了实现对线程独立数据区的快速访问,ThreadLocal 将这块数据区保存在一个散列表中。我们暂且将该散列表叫做 **ThreadLocal散列表**。 ThreadLocal散列表采用...
**目录** - **1 乘法散列** - **2 斐波拉契散列** - **3 斐波拉契散列改造** - **4 原理初探** - **5 参考** ### 1 乘法散列[Top] 斐波拉契散列是 **乘法散列** 的一种特例。乘法散列的散列函数表示如下:  其中,`K` 是键值,`M` 是散列规模或散列范围,所以应有:`0 ≤...