- 博客(14)
- 资源 (12)
- 收藏
- 关注
原创 数据结构(三), 弄懂红黑树(多图警告!!!)
个人博客传送门 红黑树 && BST 红黑树就是在 BST 的基础上加入了一些自己的特征 一、特征 符合 BST 所有特征 节点有两色, 红, 黑 根是黑 所有叶子节点是黑 (叶子是NIL节点) 每个红色节点必须有两个黑节点 任意节点到每个叶子节点的路径都包含相同数量的黑节点 这些特征保证了, 根到叶子节点的最长路径, 最长不会超过最短路径的 2 倍 因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的, 而不同
2021-04-11 18:27:23 216
原创 数据结构(二), AVL平衡二叉树
个人博客传送门 一、须知须会 平衡因子: 二叉树的 左子树 - 右子树 = 高度的差值,在平衡树中可能的值(-1 ,0 ,1) 平衡: 平衡因子 的绝对值小于 2 (下图第一张为平衡树, 第二张为不平衡树) 平衡树且平衡因子==0 非平衡树且平衡因子==-2 树的旋转: 参考维基百科 树的旋转 转轴的移动方向来决定它是左旋还是右旋, 本文中称转轴右移为右旋反之则是左旋 右旋: (Q为树的根节点, P为转轴, 转轴最终被右移) 右旋时, 转轴的右孩子 = 树的根节点;
2021-04-11 18:19:51 135
原创 数据结构(一), 二叉查找树BST
个人博客传送门 一、别名 二叉搜索树, 有序二叉树, 排序二叉树, Binary Search Tree 二、特征 左子树的所有节点的值均小于根节点 右子树下所有节点的值均大于更节点 所有节点的值都不相同 任意节点的左子树和右子树也都是BST 三、节点结构 public static class Node { // 数据区 private int data; // 左节点 private Node left; //
2021-04-11 18:15:32 117
原创 Android Glide 3.7.0 源码解析(九) , gif 的加载实现
个人博客传送门 一、涉及类目 GlideDrawableImageViewTarget.java GifDrawable.java GifFrameLoader.java GifDecoder.java 二、原理概述 老规矩先介绍原理的框架,免得看源代码迷路 GlideDrawableImageViewTarget 会调用加载的 GifDrawable 来启动动画 GifDrawable 会在 draw() 中绘制当前帧, 并委托 GifFrameLoader 去加载下一帧 GifFrameLoader
2021-04-05 20:32:13 420
原创 Android Glide 3.7.0 源码解析(八) , RecyclableBufferedInputStream 的 mark/reset 实现
个人博客传送门 一、mark / reset 的作用 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码有提到过RecyclableBufferedInputStream 对于 mark(int marklimit) 和 reset() 方法的作用, 本文则是探讨具体的实现思路 mark(int marklimit) 的作用是在流中创建一段起点是 markPos 长度是 markLimit 的可被重复读取区域, 当调用 reset() 方法时流的读取位置会回到 markPos
2021-04-01 14:59:36 452
原创 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码
概览 Glide 3.7.0 里面涉及的图形变换主要是 大小缩放, CenterCrop , FitCenter, 其中大小缩放是基于Downsampler(解码工具) 实现的, 而剩余两个则是 Transformation(图形变换) 接口的两个实现类. 所以本文主要介绍3点: CenterCrop FitCenter 大小缩放 Android Glide 3.7.0 源码解析 (二) , 从一次图片加载流程看源码文中的流程可以看出是在 DecodeJob 里面进行 解码 --> 图形变换
2021-03-31 17:47:23 394
原创 Android Bitmap(一), 资源重用
一、为什么Bitmap需要资源重用 Android 中图片显示的实体其实是一个 Bitmap 对象, 每次图片显示时, 都会构建一个 Bitmap 对象, 不用时再销毁, 假设, 在一个长列表且列表的每项都有一个图片显示, 持续滑动这个列表, 内存中的行为就是, 持续的创建 Bitmap 对象和产生不用的 Bitmap 对象, 当量级到达一定程度, 会触发 GC, 这样持续滑动界面, 势必会频繁触发 GC, 导致界面卡顿 二、Bitmap 内存管理的演变 以下内容参考官文: 管理位图内存 Androi
2021-03-30 17:21:29 373
原创 Android Glide 3.7.0 源码解析(六) , 缓存结构详述
结构总览 内存缓存是由 LruResourceCache 和 activeResources 组成, 缓存的是 EngineResource 类型 第一级缓存: LruResourceCache 是一个最终是一个 LinkedHashMap 来实现 Lru , 存储的是没有被界面使用的缓存资源, 并由LRU控制缓存大小 第二级缓存: activeResources 是由一个 Map<Key, WeakReference<EngineResource<?>>> 构成, 存
2021-03-27 19:48:51 245
原创 Android Glide 3.7.0 源码解析(五) , 如何获得ImageView的宽高
前言 通过前面的 Android Glide 3.7.0 源码解析 (二) , 从一次图片加载流程看源码 我们知道 Request(真实) 只有在图片组件的大小准备好了才会开始真正的加载 // GenericRequest public void begin() { startTime = LogTime.getLogTime(); if (model == null) { onException(null); return;
2021-03-20 15:13:30 258
原创 Android Glide 3.7.0 源码解析(四), BitmapPool作用及原理
Android 中图片显示的实体其实是一个 Bitmap 对象, 每次图片显示时, 都会构建一个 Bitmap 对象, 不用时再销毁 假设: 一个长列表每项都有个图片需要显示, 我们在快速滑动长列表的时候, 会产生什么? Bitmap 对象被频繁的创建和释放, 导致 GC 频繁 如何解决上述问题? BitmapPool , 一个 Bitmap 的对象池, 让一个新的图片资源复用在旧的 Bitmap对象上, 假设, 长列表一页有 20 个图片资源, BitmapPool 大小也刚好是 20 , 那么当滑动列表
2021-03-17 22:20:58 640
原创 Android Glide 3.7.0 源码解析(三), 生命周期绑定
Android Glide 3.7.0 源码解析(三), 生命周期绑定 如果是主线程就注册创建一个无界面的 Fragment 加到 Fragment / Activity , 依赖这个Fragment 来监听生命周期 如果是非主线程 , 就创建一个 Application 级别的 Lifecycle , 模拟生命周期 在 1. 中创建的 Fragment 可以反馈 内存 和 界面 的 生命周期 , 这就完成了对内存和界面的监听 可以根据 1. 中 Fragment , 来决定是否监控 网络状态 ( 如果界面
2021-03-15 11:24:34 220
原创 Android Glide 3.7.0 源码解析(二), 从一次图片加载流程看源码
Glide.with(activity).load(url).into(imageView); Glide.with 方法, 创建 RequestManager 实例 RequestManager.load 方法, 创建 GenericRequestBuilder 实例, 并打包编/解码, 转码, 图形转换, 下载等工具 解码: File, InputStream 转换成 Bitmap, Drawable 编码: 将数据写入缓存区
2021-03-10 21:41:16 249
原创 github 提速方案, 亲测有效!
一、正常下载 Glide 源代码 git clone https://github.com/bumptech/glide.git 二、提速方案下载 Glide 1. 下载 我们将原本的网站中的 github.com 进行替换为 github.com.cnpmjs.org git clone https://github.com.cnpmjs.org/bumptech/glide.git 2. 查看 origin 配置 git config --list 发现: remote.origin.url
2021-03-08 22:56:31 1026
原创 Android Glide 3.7.0 源码解析(一), 准备工作
Android Glide 3.7.0 源码详解 (一) , 准备工作 Android Glide 3.7.0 源码解析 (二) , 从一次图片加载流程看源码 Android Glide 3.7.0 源码解析(三) , 生命周期绑定 Android Glide 3.7.0 源码解析(四) , BitmapPool作用及原理 Android Glide 3.7.0 源码解析(五) , 如何获得ImageView的宽高
2021-03-08 22:40:30 138
jdk_1_8_linux_x64_.zip
2019-07-21
MarkDown编辑器
2019-04-27
Notepad++(32位+64位)
2019-04-27
XMind(破解版)
2019-04-27
Listary for windows
2019-04-27
viewpagerTouchNone
2016-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人