4 却把清梅嗅

我要认证

女儿奴,Android,分享者 & 见证者,观众途径序列1,端茶递水工程师。

等级
TA的排名 7k+

反思|官方也无力回天?Android SharedPreferences的设计与实现

反思|官方也无力回天?Android SharedPreferences的设计与实现反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。起源就在前几日,有幸拜读到 HiDhl 的文章,继腾讯开源类似功能的MMKV之后,Google官方维护的 Jetpack DataStore 组件横空出世——这是否意味着无论是腾讯三方还是Google官方的角度,SharedPreferences都彻底告别了这个时代?无论是MMKV的支持者还是DataStore的拥趸,SharedPrefe

2020-10-17 16:36:37

反思|Android 输入系统 & ANR机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述对于Android开发者而言,ANR是一个老生常谈的问题,站在面试者的角度,似乎说出 「不要在主线程做耗时操作」 就算合格了。但是,ANR机制到底是什么,其背后的原理究竟如何,为什么要设计出这样的机制?这些问题时时刻刻会萦绕脑海,而想搞清楚这些,就不得不提到Android自身的 输入系统 (Input System)。Android自身的 输入系统 又是什么?一言以蔽之,任何与Android设备的交互——我们称之为 输.

2020-08-24 22:14:25

反思|Android源码模块化管理工具Repo分析

「反思」 系列是笔者对于 学习归纳 一种新的尝试,其起源与目录请参考 这里 。起源随着Android项目 模块化 或 插件化 项目业务的愈发复杂,开发流程中通过版本控制工具(比如Git)管理项目的成本越来越高。以大名鼎鼎的 Android源代码开源项目 (Android Open-Source Project,下文简称 ASOP)为例,截止2020年初,Android10的源码项目,其模...

2020-05-05 16:10:17

反思|Android 事件拦截机制的设计与实现

「反思」 系列是笔者一个新的尝试,其起源与目录请参考 这里 。概述完整的掌握 Android 事件分发体系并非易事,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(ViewRootImpl + Window + WindowManagerService)、View层级的 事件分发机制 等等一系列的环节。事件拦截机制...

2020-04-15 23:37:00

哈希映射用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。用法哈希映射 是用于存储 (key, value) 键值对的一种实现。使用哈希映射的第一个场景是,我们 需要更多的信息,而不仅仅是键。然后通过哈希映射 建立密钥与信息之间的映射关系。另一个常见的场景是 按键聚合所有信息。我们也可以使用哈希映射来实现这一目标。例题1、两数之和...

2020-03-09 01:06:01

哈希集合用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。用法哈希集 是集合的实现之一,它是一种存储 不重复值 的数据结构。因此,通常,使用哈希集来检查该值是否已经出现过。让我们来看一个例子:给定一个整数数组,查找数组是否包含任何重复项。这是一个典型的问题,可以通过哈希集来解决。你可以简单地迭代每个值并将值插入集合中。 如果...

2020-03-09 01:05:19

哈希表原理及简单设计

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。介绍哈希表 是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。有两种不同类型的哈希表:哈希集合 和 哈希映射。哈希集合是 集合 数据结构的实现之一,用于存储 非重复值。哈希映射是 映射 数据结构的实现之一,用于存储(key, value)键值对。通过选择合适的...

2020-03-09 01:04:44

运用递归解决二叉树相关问题

在之前的章节中,我们已经介绍了如何解决树的遍历问题。我们也已经尝试过使用递归解决树的为 前序遍历 、 中序遍历 和 后序遍历 问题。事实上,递归 是解决树相关问题的最有效和最常用的方法之一。本节中,我们将会介绍两种典型的递归方法。解决方案本小节内容节选自 LeetCode:运用递归解决树的问题 .递归是解决树的相关问题最有效和最常用的方法之一。我们知道,树可以以递归的方式定义为一个...

2020-03-04 00:30:19

二叉树的递归与迭代遍历

二叉树的递归与迭代遍历本文将针对二叉树中几种常见的遍历方法进行介绍。遍历方式前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。中序遍历中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。后序遍历后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。递归实现递归实现二叉树的遍历是非常简单的,其核心就是 深度优先搜索(DFS) 算法。由于比较简单,...

2020-02-16 00:36:14

栈和深度优先搜索(DFS)

与 BFS 类似,深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法。也可以在更抽象的场景中使用。正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历。在这三个遍历顺序中有一个共同的特性:除非我们到达最深的结点,否则我们永远不会回溯。这也是 DFS 和 BFS 之间最大的区别,BFS永远不会深入探索,除非它已经在当前层级访问了所有结点。模版递归...

2020-02-13 23:00:44

栈的设计与算法例题

栈的实现栈的实现比队列容易。动态数组 足以实现堆栈结构。这里LeetCode官方提供了一个简单的实现供参考:// "static void main" must be defined in a public class.class MyStack { private List<Integer> data; // store elements...

2020-02-12 01:50:10

队列和广度优先搜索

广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径。思路1. 结点的处理顺序在第一轮中,我们处理根结点。在第二轮中,我们处理根结点旁边的结点;在第三轮中,我们处理距根结点两步的结点;等等等等。与树的层序遍历类似,越是接近根结点的结点将越早地遍历。如果在第 k 轮中将结点 X 添加到队列中,则根结点与 X 之间的最短路径的长度恰好是 k。也就是说,第一次找到目标结点时...

2020-02-08 02:34:42

循环与循环双端队列

循环队列 是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为 环形缓冲器。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。为什么使用循环队列?这里我们先对 队列 的简单实现进行简单展示,队...

2020-01-20 23:12:12

弗洛伊德的乌龟与兔子

弗洛伊德的乌龟与兔子Floyd 判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。结论1、如果链表上存在环,那么在某个环上以不同速度前进的2个指针必定会在某个时刻相遇;2、根据结论1找到的相遇点可找...

2020-01-19 22:06:14

面向功利编程,面向Star开源? 一个开发者的2019反思总结

我是 却把清梅嗅 ,GitHub开源社区内的一个 功利 的爱好者。去年的这个时候,我同样做了一个简短的年终总结:《2018我的博客历程:你带来微笑,我有幸得到》我不是喜欢一个花时间写非技术类型文章的人,但是每年一篇年终总结于个人确实有所裨益——时隔一年再看,这篇文章段落中的一些吹嘘自己的文字,多少都让我有点尴尬。同时,我看到了过去自己一些 不成熟的想法 ,与一年后的自己的理念有所冲突,我...

2019-12-27 01:02:04

反思|Android 列表分页组件Paging的设计与实现:架构设计与原理解析

本文是Android Jetpack Paging系列的第二篇文章;强烈建议 读者将本系列作为学习Paging 阅读优先级最高的文章,如果读者对Paging还没有系统性的认识,请参考:反思|Android 列表分页组件Paging的设计与实现:系统概述前言Paging是一个非常优秀的分页组件,与其它热门的分页相关库不同的是,Paging更偏向注重服务于 业务 而非 UI 。——我们都知道...

2019-12-01 23:39:36

反思|Android 列表分页组件Paging的设计与实现:系统概述

本文将对Paging分页组件的设计和实现进行一个系统整体的概述,强烈建议 读者将本文作为学习Paging 阅读优先级最高的文章,所有其它的Paging中文博客阅读优先级都应该靠后。

2019-10-23 23:17:47

反思|Android 事件分发机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以整体事件分发机制为例,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(ViewRootImpl + Window + WindowManagerService)、事件分发 等等...

2019-08-28 18:25:42

反思|Android LayoutInflater机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以LayoutInflater本身为例,其整个流程中除了调用inflate()函数 填充布局 功能之外,还涉及到了 应用启动、调用系统服务(进程间通信)、对应组件作用域内单例管理、额外功能扩展 等等一系列复杂的逻辑。本文笔者将针对LayoutInla...

2019-08-19 16:52:14

反思|Android View机制设计与实现:布局流程

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android本身的View体系非常宏大,源码中值得思考和借鉴之处众多,以View本身的绘制流程为例,其经过measure测量、layout布局、draw绘制三个过程,最终才能够将其绘制出来并展示在用户面前。相比 测量流程 ,布局流程 相对简单很多,如果读者不了解 测量流程 ,建议阅读这篇文章:反思 | An...

2019-08-13 18:03:09

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户