自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(226)
  • 资源 (7)
  • 收藏
  • 关注

原创 Glide系列(四) — Glide缓存流程分析

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。基于 Glide 优秀的缓存管理策略和生命周期关联的特点,目前市面上对 Glide 的使用非常广,因此我们有必要深入研究下 Glide 相关的实现原理,便于更好的使用它。

2022-10-31 16:05:23 1415

原创 DiskLruCache 源码分析

我们知道 Glide 图片框架的内存缓存用的是 LruCache,磁盘缓存是 DiskLruCache,它们用的都是LRU算法。内存缓存的 LRU 还比较好理解,那么文件是如何按照 LRU 的思想进行管理的呢?本文将以 Glide 框架内的 DiskLruCache 代码来分析它的实现方式。

2022-10-27 23:08:03 666

原创 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 19930 1

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

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

2016-10-19 21:28:03 419

原创 NDK(四):Native与Java互调

JNI(全名Java Native Interface)Java native接口,它可以让一个运行在Java虚拟机中的Java代码被调用或者调用native层的代码。简单理解为就是一个连接Java层和Native层的桥梁。

2023-03-24 17:12:54 539 1

原创 源码分析 — Sytem.loadLibrary 解析

在我们实际开发中,经常会调用so库的一些功能,那么他们是如何工作的呢?本文我们就来分析一下 so库的加载原理。

2023-03-24 14:55:19 2333 1

原创 NDK(五):JNI静态注册与动态注册

我们知道,JNI是Java层与Native层的桥梁,可以通过 JNI层实现Java层与Native层的互调。那么JNI是如何将 Java方法与 Native方法关联起来的呢?

2023-03-23 22:06:04 1513

原创 NDK(二):JNI 的数据结构

JNI(全名Java Native Interface)Java native接口,其可以让一个运行在Java虚拟机中的Java代码被调用或者调用native层的用C/C++编写的基于本机硬件和操作系统的程序。简单理解为就是一个连接Java层和Native层的桥梁。开发者可以在native层通过JNI调用到Java层的代码,也可以在Java层声明native方法的调用入口。

2023-03-23 20:42:34 444

原创 NDK(三):JNIEnv解析

JNIEnv(Java Native Interface Environment) 是一个JNI接口指针 (每个线程独有一个 JNIEnv 指针),指向了本地方法的一个函数表,该函数表中的每一个成员指向了一个JNI函数,本地的方法通过JNI函数来访问JVM中的数据结构。

2023-03-23 20:26:39 867

原创 NDK(一):NDK 的集成

介绍了JNI开发环境的配置流程。

2023-03-23 13:59:51 517

原创 Flutter渲染机制(二):Element

在Flutter渲染机制(一):Widget 树一文中,我们介绍了 Widget 树,发现每一种类型的 Widget 都会创建与之相对应的 Element,那这个 Element 又是什么,有什么作用呢?Element 是 Widget 的实际内容,并且会根据 Widget 的位置,配置自己在书中的位置。Element 会形成一棵树,有的 Element 有一个子节点,有的有多个子节点。

2023-03-20 15:21:09 266

原创 Flutter渲染机制(一):Widget

Widget 是我们构建页面UI的基本元素,如设置间距用的Padding、行排列用的Row、流式布局用的 Wrap。Widget内的所有属性都是 final 类型,它是一个配置文件,是 Element 的描述性信息。Widget 的作用类似于 Android Native 开发中的 xml 角色。

2023-03-19 23:06:36 280

原创 网络基础(四) — QUIC协议

QUIC(Quick UDP Internet Connections)协议是一种全新的基于 UDP 的 web 开发协议(应用层协议)。本文主要来分一下 QUIC 协议相对于 TCP 协议的优势。

2023-03-17 15:08:21 731

原创 渲染机制(四):硬件加速

硬件加速的主要原理是通过将CPU不擅长的图形计算转换成GPU专用指令,让更擅长图形计算的GPU来完成渲染,从而提升了整体的渲染速度。

2023-03-16 22:25:07 696

原创 渲染机制(二):Choreographer 源码解析

在引入 Vsync 之前,系统渲染一帧是通过Message来实现的,Msg中间没有间隔。但由于Msg的消费时长不确定,这直接导致了帧率不稳定,从而产生了Jank现象,画面撕裂等问题。为了优化这些问题,Android 在4.1之后引入了 `Choreographer + SurfaceFlinger + Vsync + TripleBuffer` 这一套机制,保证了 Android App 可以以一个稳定的帧率运行(60fps),减少帧率波动带来的不适感。

2023-03-14 22:15:39 640

原创 渲染机制(一):Android渲染机制的演进

在Android中,当我们谈到布局优化、卡顿优化时,通常通过减少布局层级、减少主线程耗时操作来减少丢帧。如果丢帧比较严重,那么界面可能会有明显的卡顿感。本文我们来探究下Android的渲染机制。

2023-03-13 19:16:01 934

原创 渲染机制(三):Vsync信号

本文主要介绍了 VSync 相关的内容。

2023-03-13 19:08:33 399

原创 算法:模拟类

常见模拟类算法。

2023-03-09 11:49:21 111

原创 算法:动态规划

动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化递归,自底向上就是递推。

2023-03-07 00:11:30 268

原创 算法:链表

链表(Linked List)是最简单的线性的、动态数据结构。理解它是理解树结构、图结构的基础。链表在插入数据的时候可以达到 O(1) 的复杂度,但是查找一个节点或者访问特定编号的节点则需要 O(n) 的时间。

2023-03-02 22:04:18 311

原创 算法:二分法查找

二分查找算法 ,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

2023-03-02 14:26:05 55

原创 算法:二叉树

常见二叉树的算法

2023-03-01 16:12:44 57

原创 算法:二叉查找树

二叉搜索树的常见算法。

2023-03-01 15:11:09 135

原创 算法:接雨水

LeetCode接雨水

2023-02-27 21:16:18 162

原创 算法:LRU算法

LRU算法的特点是:当资源不足需要清除数据时,最近被使用过的数据不会被清除(即:只会清除最近没有使用的数据)。要实现这个特点,就需要维护一个链表来表达数据被使用的顺序。同时我们知道链表的查询效率较低,所以需要结合散列表的特点(查询效率高)来实现这个数据结构。

2023-02-27 14:32:10 82

原创 算法:排序算法

几种常见排序算法的代码实现。

2023-02-26 13:44:51 42

原创 数据结构(Tree) — 二叉树

二叉树前序、中序、后序的遍历方式,及二叉树的构建。

2023-02-25 21:33:21 71

原创 面试:OkHttp

OkHttp常见面试题

2023-02-23 14:25:48 421

原创 面试:网络基础

常见的网络基础知识点

2023-02-21 15:10:36 67

原创 Glide系列(五) — Request 构建流程分析

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。基于 Glide 优秀的缓存管理策略和生命周期关联的特点,目前市面上对 Glide 的使用非常广,因此我们有必要深入研究下 Glide 相关的实现原理,便于更好的使用它。

2022-11-11 11:13:17 418

原创 Glide系列(三) — LoadProvider、ModelLoader、DataFetcher和ResourceTranscoder关系

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。基于 Glide 优秀的缓存管理策略和生命周期关联的特点,目前市面上对 Glide 的使用非常广,因此我们有必要深入研究下 Glide 相关的实现原理,便于更好的使用它。

2022-10-30 15:59:45 601 2

原创 RecyclerView(二) — 缓存机制分析

本文主要介绍了 RecyclerView 缓存机制实现原理。

2022-10-26 21:25:54 1693

原创 RecyclerView(一) — 绘制流程分析

RecyclerView继承自ViewGroup,其最根本的功能是添加子View。当子View过多时,超出屏幕部分的子 View 就显示不出来,这时引入滑动机制来解决问题。当子 View 数量很多时,又会产生另一个新问题 (内存占用大)。这种场景有个特点,即屏幕展示的子 View 有限,大部分子 View 都不可见。所以新增View的复用机制,通过回收并复用不可见的View 来实现优化。这便是 ListView、RecyclerView存在的价值。本文主要分析RecyclerView的实现方案。

2022-10-26 16:27:49 914

原创 面试题:HashMap & ConcurrentHashMap

关于 HashMap 和 ConcurrentHashMap 的面试题。

2022-10-25 14:50:30 473

原创 并发容器(五) — ConcurrentHashMap 源码分析(JDK1.8)

在高并发下 HashMap是线程不安全的,主要原因是在同一个桶中并发操作会带来问题,为此我们只需要解决并发操作同一个桶的安全性问题即可,因此在SDK提供的ConcurrentHashMap类中通过分段锁(JDK1.7)或CAS+Sync(JDK1.8)来保证操作的安全性。

2022-10-25 13:32:56 397

原创 并发容器(五) — ConcurrentHashMap 源码分析(JDK1.7)

我们知道,在高并发下 HashMap是线程不安全的,主要原因是在同一个桶中并发操作会带来问题。为此我们只需要解决并发操作同一个桶的安全性问题即可,因此在SDK提供的ConcurrentHashMap类中通过分段锁(JDK1.7)或CAS+Sync(JDK1.8)来保证操作的安全性。

2022-10-24 22:32:58 617

原创 HashMap(三) — HashMap 高并发场景下的问题分析

高并发下的HashMap我们知道不管是哪个版本的HashMap都是线程不安全的。本文主要分析JDK1.7 中HashMap环状链表的形成过程。

2022-10-24 11:34:19 1461

原创 Android 虚拟机 (Dalvik & ART)

我们知道Android的程序虽然也是使用Java/Kotlin语言编码,并生成.class字节码,但并不能运行在JVM上,而是运行在自己的VM上。而Android程序之所以不能在JVM上运行的根本原因是.class字节码文件并不是Android的最终可执行文件,而是一个过渡产物,最终会生成dex文件在Android VM上执行。Dalvik 虚拟机和 ART 虚拟机。

2022-10-22 13:52:21 4143

原创 JVM — 字节码文件分析

本文以一个具体的实例来分析一下字节码文件的格式。

2022-05-27 11:01:24 221

原创 JVM(二) — 字节码指令

Java虚拟机是基于操作数栈而非寄存器的架构,其操作指令由`操作码`和`操作数(0或多个操作数)`组成。- 操作码:操作码的长度为一个字节(0~255),因此操作码总数不能超过256条。- 操作数:一条指令可以有零或者多个操作数,且操作数可以是1个或者多个字节。...

2022-05-26 16:29:20 404

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

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

2018-04-14

automate_online-materials

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

2018-02-06

Python爬虫(网络数据采集)

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

2018-02-03

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(代码重复检测工具)

2016-12-10

graphviz-2.37

2016-11-28

停用词资源文件

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

2015-08-16

空空如也

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

TA关注的人

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