自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Elson的博客

github文章地址:https://github.com/Love667767/Tech-blog

  • 博客(190)
  • 资源 (8)
  • 收藏
  • 关注

原创 Lock(二) — 队列同步器(AQS)浅析

队列同步器 AQS 一、概述二、同步器的方法1. 同步器可重写的方法2. 同步器中的模板方法三、独占式1. 获取同步状态( acquire(int arg) )四、共享式一、概述队列同步器 AbstractQueuedSynchronizer(简称AQS),是用来构建锁或者其他同步组件的基础框架。AQS 依托于一个 volatile 修饰的变量 state 进行状态管理,AQS 内部提供了如...

2020-03-14 22:55:38 99

原创 Executor框架(四) — ThreadPoolExecutor源码解析

ThreadPoolExecutor源码解析一、概述二、ThreadPoolExecutor 执行任务示意图三、ThreadPoolExecutor 源码分析1. 构造参数的含义2. 常量补码的相关知识runState 几种状态的说明3. 提交任务execute()submit()4. addWorker(Runnable firstTask, boolean core) 方法5. Worker ...

2020-03-08 12:34:38 91

原创 Executor框架(一) — 浅析 Executor 框架设计

本文介绍来 JDK中 Executor 框架,分析来框架的调度模型、类图之间的关系。

2016-10-19 21:28:03 247

原创 Maven系列(一) — Nexus 下载及配置

Nexus 是 Maven 仓库管理器,如果我们使用 Maven,可以从 Maven 中央仓库下载所需要的构件(artifact),但这会受到 Maven 中央仓库是影响 (诸如:带宽),因此我们可以在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。

2020-06-21 16:34:50 150

原创 Maven系列(二) — 发布项目到 Maven 仓库私服

上一篇我们搭建好了 Maven 仓库私服,接下来我们来了解一下如何将本地文件上传到 Maven 私仓。

2020-06-21 16:34:06 100

原创 Glide系列(二) — Glide 注册模块分析

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。Glide 框架的优点如下:1. 加载类型多样化:Glide 支持 Gif、WebP 等格式的图片。2. 生命周期的绑定:图片请求与页面生命周期绑定,避免内存泄漏。3. 高效的缓存策略: 1. 支持多种缓存策略 (Memory 和 Disk 图片缓存)。 2. 根据 ImageView 的大小来加载相应大小的图片尺寸。 3. 内存开销小。

2020-06-08 11:04:45 192

原创 Glide系列(一) — Glide 框架结构浅析

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。Glide 框架的优点如下:1. 加载类型多样化:Glide 支持 Gif、WebP 等格式的图片。2. 生命周期的绑定:图片请求与页面生命周期绑定,避免内存泄漏。3. 高效的缓存策略: 1. 支持多种缓存策略 (Memory 和 Disk 图片缓存)。 2. 根据 ImageView 的大小来加载相应大小的图片尺寸。 3. 内存开销小。

2020-06-08 11:00:22 1302

原创 RxJava(四) — 实现一个简易版的 RxJava 框架

RxJava 是一个响应式编程框架,里面代码比较复杂,本系列文章将从以下几个角度来分析这个框架。1. RxJava 的链路调用流程。2. RxJava 的常用操作符 `map、flatmap`。3. RxJava 的线程调度。4. 自己实现一个简易版的响应式框架。

2020-06-01 16:46:33 88

原创 RxJava(三) — 线程调度实现原理

RxJava 是一个响应式编程框架,里面代码比较复杂,本系列文章将从以下几个角度来分析这个框架。1. RxJava 的链路调用流程。2. RxJava 的常用操作符 `map、flatmap`。3. RxJava 的线程调度。4. 自己实现一个简易版的响应式框架。

2020-05-31 22:28:27 142

原创 RxJava(二) — 常用操作符之 map & flatmap

RxJava 是一个响应式编程框架,里面代码比较复杂,本系列文章将从以下几个角度来分析这个框架。1. RxJava 的链路调用流程。2. RxJava 的常用操作符 `map、flatmap`。3. RxJava 的线程调度。4. 自己实现一个简易版的响应式框架。

2020-05-31 14:18:41 96

原创 RxJava(一) — 链路调用流程分析

RxJava 是一个响应式编程框架,里面代码比较复杂,本系列文章将从以下几个角度来分析这个框架。1. RxJava 的链路调用流程。2. RxJava 的常用操作符 map、flatmap。3. RxJava 的线程调度。4. 自己实现一个简易版的响应式框架。

2020-05-30 20:06:00 147

原创 设计模式 — 观察者模式

观察者模式一、概述二、类图三、推模型的示例代码四、拉模型的示例代码一、概述观察者模式又称订阅者模式,是一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自己更新自己。在观察者模式中,又分为推模型和拉模型两种方式:推模型: 主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。.拉模型: 主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对

2020-05-30 10:02:48 72

原创 SPI 机制(二) — AutoService 解析

SPI 全称为`Service Provider Interface`,是JDK内置的一种服务提供发现机制。简单来说,它是一种动态替换发现机制。例如,在设计组件化路由框架的时候就会使用到 SPI 设计思想。

2020-05-29 13:21:22 161

原创 SPI 机制(一) — ServiceLoader 解析

SPI 全称为`Service Provider Interface`,是JDK内置的一种服务提供发现机制。简单来说,它是一种动态替换发现机制。例如,在设计组件化路由框架的时候就会使用到 SPI 设计思想。

2020-05-29 11:56:12 117

原创 BlockCanary 源码分析

BlockCanary 源码分析一、概述二、实现原理三、源码分析1. 初始化流程2. 堆栈信息采集过程3. CPU信息采集过程四、小结一、概述在 Android 开发过程中,经常会遇到 UI 卡顿的问题,那怎么去监测 UI 的卡顿呢?今天我们就来分析一款监测 UI 卡顿的框架:BlockCanary。BlockCanary 是一个轻量的,非侵入式的性能监控组件,目前采集了 UI 卡顿相关的 线程堆栈信息 和CPU 使用信息,用于分析定位问题。Github 传送门: https://github.co

2020-05-24 11:02:33 90

原创 LeakCanary 源码分析

LeakCanary 源码分析一、概述二、原理三、源码分析1. LeakCanary 的初始化2. Activity 的监测3. 如何判断观察对象是否内存泄漏一、概述在 Android 开发过程中会遇到内存问题,在内存问题的分析中有一项必不可少的环节是对 hprof 文件的分析,常见的 MAT 和 Leakcanry 都是针对hprof文件的分析工具。本文我们来分析一下 Leakcanry 的检测原理。二、原理弱引用: 在垃圾回收时,无论内存是否充足,都会将弱引用包装的对象回收。当JVM进行垃

2020-05-22 00:02:02 73

原创 ClassLoader (二) — 浅析 PathClassLoader 和 DexClassLoader 的区别

浅析 PathClassLoader 和 DexClassLoader 的区别一、概述二、 PathClassLoader 和 DexClassLoader 构造方法的区别三、optimizedDirectory 参数的使用1. DexPathList 中的流程2. DexFile 中的流程3. Native 层的流程4. 流程图四、Android 8.0 的版本五、参考一、概述在 Andr...

2020-05-08 18:45:37 102

原创 ClassLoader (一) — Android 中的 ClassLoader 体系

Android 中, DVM 或 ART虚拟机加载的是 Dex 文件,因此 Androd 中自定义了部分 ClassLoader 来实现类的加载。Android 中的 ClassLoader 类型分为两种:1. 系统类加载器。系统类加载器主要包括 3 种,分别是BootClassLoader 、 PathClassLoader 和 DexClassLoader。2. 自定义加载器。

2020-05-08 18:45:15 127

原创 Window系列 (二) — WindowManagerService 浅析

WindowManagerService 详解一、概述二、一、概述二、

2020-04-26 21:45:02 122

原创 Window系列 (三) — Activity、Window、DecorView 的关系

Activity、Window、DecorView 的关系一、概述一、概述

2020-04-26 15:27:55 104

原创 Window系列 (四) — Touch 事件是如何传递到 Activity ?

Touch 事件是如何传递到 Activity ?一、概述一、概述

2020-04-26 11:59:12 91

原创 Window系列 (一) — WindowManager 详解

WindowManager 详解一、概述二、WindowManager 体系1. 类图2. 源码分析2.1 `ViewManager` 的结构2.2 PhoneWindow 对象何时创建?2.3 WindowManagerImpl 类三、Window 的属性 (类型和显示次序)四、Window 的操作1. Window 的添加过程2. Window 的更新过程3. Window 的删除过程4. I...

2020-04-26 11:58:24 720

原创 View系列 (五) — Draw 流程详解

Draw 流程详解一、概述二、单一 View 的 Draw 过程1. 流程图2. 源码分析三、ViewGroup 的 Draw 过程1. 流程图2. 源码分析一、概述在执行完 measure 流程、layout 流程后,如果我们要将 View 展示在界面上,需要执行 draw 流程 。与 measure 流程、layout 流程 类似, draw 流程 也分为以下两种场景。View...

2020-04-26 11:58:02 91

原创 View系列 (四) — Layout 流程详解

Layout 流程详解一、概述二、单一 View 的 Layout 过程1. 流程图2. 源码分析3. 小结三、ViewGroup 的 Layout 过程1. 流程图2. 源码分析四、Layout 过程跟 Measure 的一个区别1. 以 LinearLayout 为例,Measure 流程对应代码2. 以 LinearLayout 为例,Layout 流程对应代码一、概述在 View 的 ...

2020-04-26 11:57:50 130

原创 View系列 (三) — Measure 流程详解

Measure 流程详解一、概述二、单一 View 的测量流程1. 流程图2. 源码分析三、ViewGroup 的测量流程1. 流程图2. 源码分析一、概述测量过程分为 View的measure过程 和 ViewGroup的measure过程。View的类型measure 过程单一的View (如 ImageView)只测量自身ViewGroup遍历测量该 Vi...

2020-04-26 11:57:27 103

原创 View系列 (二) — MeasureSpec 详解

MeasureSpec 详解一、概述二、MeasureSpec 的构成1. MeasureSpec 中的常量2. MeasureSpec 提供的方法三、MeasureSpec 的使用1. 根 View 大小的测量2. 非根 View 大小的测量一、概述在 View 的测绘 (measute()) 过程中,会用到 MeasureSpe (测量规格)。MeasureSpec的作用确切来说,M...

2020-04-26 11:57:02 67

原创 View系列 (一) — Android 坐标系

自定义View — Android 坐标系一、概述二、坐标系1. Android 坐标系2. View坐标系一、概述Android 中 View 分为两种类型,一种为内部可以包含其它子 View 的 ViewGroup 类型,另一种内部不可以再包含其它子 View 的 View 类型。一个页面上的元素大致如下图所示:类型控件View:TextView、Button...

2020-04-26 11:56:08 69

原创 EventBus 源码分析

EventBus源码分析一、概述二、类图三、源码分析四、小结五、参考一、概述为了实现组件间通信的简单性和高效性,出现了事件总线的设计。 EventBus 便是其中的一个实现方案,它是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者来简化 Android 的事件传递。在分析源码之前,我们先来看一下 EventBus类图,了解一下其主要成员类,这可以帮助我们从全貌去审视框架的结构...

2020-04-14 12:47:27 73

原创 网络基础(三) — HTTPS

HTTPS一、概述二、明文传输的问题三、通信方身份伪装的问题四、报文完整性的问题五、HTTPS1. HTTPS 安全通信机制2. SSL 的劣势一、概述HTTP的不足通信使用明文(不加密),内容可能会被窃听。不验证通信方的身份,因此有可能遇到伪装。无法验证报文的完整性,所以有可能已遭篡改。下面针对以上3点给出解决方案。二、明文传输的问题问题:已知 HTTP 的不足,信息在网...

2020-03-28 15:30:28 91

原创 网络基础(二) — HTTP

HTTP一、概述二、HTTP 持久连接、管线化三、HTTP请求方法四、HTTP 报文4.1 响应状态码2XX 成功3XX 重定向4XX 客户端错误5XX 服务端错误一、概述HTTP (HyperText Transfer Protocol): 超文本传输协议。HTTP 是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP 是无状态协议,即每次 HTTP 请求之间都是...

2020-03-27 00:20:16 81

原创 OkHttp(二) — Interceptor 拦截器

Interceptor 拦截器一、概述二、RetryAndFollowUpInterceptor三、BridgeInterceptor四、CacheInterceptor五、ConnectInterceptor六、CallServerInterceptor一、概述OkHttp 版本: 3.14.7在 OkHttp(一) — OkHttp 调用流程分析 中,我们介绍了一个请求的调用流程。请求...

2020-03-22 16:38:51 116

原创 OkHttp(一) — OkHttp 调用流程分析

OKHttp 调用流程分析一、概述二、三、四、一、概述二、三、四、

2020-03-21 19:24:13 134

原创 并发容器(四) — DelayQueue 源码解析

DelayQueue 源码解析一、概述二、源码解析1. 入队2. 出队3. 延迟功能的实现一、概述DelayQueue 是一个无界阻塞队列,它提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素 (通过最小堆实现)。DelayQueue 队列本身不具备存储能力,而是在内部通过 PriorityQueue 队列来实现存储功能和获取最近过期元素功能。PriorityQueue ...

2020-03-19 18:18:15 56

原创 并发容器(三) — PriorityBlockingQueue(优先队列)源码解析

PriorityBlockingQueue源码解析一、概述二、三、一、概述PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。队列内部使用 数组 存储数据。由于数组初始化时,长度已经确定,而PriorityBlockingQueue又是一个无界队列,因此内部存在自动扩容机制 (类似ArrayList)。PriorityBlockingQueue 使用最小堆来实现...

2020-03-19 14:36:12 77

原创 数据结构 — 二叉堆

二叉堆一、概述二、堆的两种类型1. 最大堆2. 最小堆三、代码实现一、概述二叉堆本质上是一种完全二叉树,二叉堆有两种类型:最大堆最小堆完全二叉树:数据结构—完全二叉树二、堆的两种类型1. 最大堆什么是最大堆呢?最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。2. 最小堆什么是最小堆呢?最小堆任何一个父节点的值,都小于等于它左右孩子节点的值。三、代码实现...

2020-03-18 23:16:32 83

原创 并发容器(二) — ArrayBlockingQueue源码解析

ArrayBlockingQueue源码解析一、概述二、源码解析1. 构造函数2. 实际入队、出队的操作3. 有阻塞功能的入队、出队操作4. 有超时且非阻塞的入队、出队操作三、小结一、概述ArrayBlockingQueue 是一个用数组实现的有界阻塞队列。ArrayBlockingQueue的数据结构:上图涉及:ReentrientLock、Condition、BlockingQueu...

2020-03-17 16:27:10 59

原创 并发容器(一) — 综述

综述一、概述二、三、一、概述在并发编程中,有时需要使用线程安全的队列。实现一个线程安全的队列有两种方式:第一种方式:使用阻塞算法,使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。第二种方式:使用非阻塞算法。非阻塞的实现方式是使用循环CAS的方式来实现。JDK中提供了如下并发容器。二、三、...

2020-03-17 14:05:21 60

原创 Lock(五) — LockSupport 和 Condition接口

LockSupport 和 Condition接口一、概述二、Condition 接口与示例1. 使用示例2. Condition 接口三、Condition 实现原理1. 等待队列2. 等待3. 通知4. Condition 的应用四、LockSupport一、概述任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上)。主要包括 wait()、wait(lo...

2020-03-15 22:15:57 85

原创 Lock(四) — 可重入锁(ReentrantLock)源码解析

ReentrantLock源码解析一、概述二、ReentrantLock 类图三、源码解析1. ReentrantLock 的使用2. ReentrantLock 锁的获取四、小结1. 如何实现公平锁?2. 如何实现非公平锁?一、概述重入锁: 当该锁被线程A持有时,线程A仍可以重新获取该锁。公平锁: 在获取锁时,如果线程A先对锁进行获取,则当锁释放后,线程A优先获得锁。非公平锁: 在获取锁...

2020-03-15 17:03:57 154

原创 Lock(三) — 自定义AQS (实践)

自定义AQS一、概述二、自定义AQS三、调试一、概述上一篇分析了 Lock(二) — 队列同步器(AQS)浅析 后,这里自己实现一个AQS。二、自定义AQS// 自定义一个独占锁(同一时刻,只有一条线程可以访问资源)public class CustomLock implements Lock { // 自定义同步器 class Sync extends AbstractQ...

2020-03-15 10:13:06 79

数据结构与算法分析(中文版)_韦斯

数据结构与算法是计算机编程的一个重要组成部分,在通往高级工程师的道路上是一段不可绕过的路程;

2018-04-14

automate_online-materials

Python自动化的配套课程资源 包含Excel处理、PDF处理、Word处理、图像处理、邮件定时发送等功能

2018-02-06

Python 让繁琐的工作自动化

包含Excel处理、PDF处理、Word处理、图像处理、邮件定时发送等功能 配套资源http://download.csdn.net/download/love667767/10241718

2018-02-06

Python爬虫(网络数据采集)

Python网络爬虫、数据爬取、分析。。。。。。。。。。。。。

2018-02-03

停用词资源文件

‘停用词’ 资源文件,配合解析文本,获取有效的词汇,去除无意义的词汇。

2018-02-02

Two Scoops of Django 1.11- 2017(Daniel Greenfeld).pdf

英文原著 Two Scoops of Django 文档字体清晰 喜欢看原版的可以直接下载本文档 英文原著 Two Scoops of Django 文档字体清晰 喜欢看原版的可以直接下载本文档 英文原著 Two Scoops of Django 文档字体清晰 喜欢看原版的可以直接下载本文档

2017-09-10

simian(代码重复检测工具)|simian-2.3.35.tar.gz

simian(代码重复检测工具)

2016-12-10

graphviz-2.37

2016-11-28

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除