自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(183)
  • 资源 (5)
  • 收藏
  • 关注

转载 Android Framework 系统架构学习

要理解framework层源码,掌握这3种基本的进程/线程间通信方式是非常有必要,当然Linux还有不少其他的IPC机制,比如共享内存、信号、信号量,在源码中也有体现,如果想全面彻底地掌握Android系统,还是需要对每一种IPC机制都有所了解。Google提供的5层架构图很经典,但为了更进一步透视Android系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android系统的全貌,阐述Android内部的环环相扣的内在联系。每个应用都在其自己的进程中运行,都有自己的虚拟机实例。

2023-05-06 16:13:09 850 2

原创 No variants found for ‘:app‘. Check build files to ensure at least one variant exists.

使用Terminal输入以下命令查看具体Log对应解决。

2024-01-16 15:45:45 463

原创 牛客剑指offer刷题其他算法篇

描述每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。然后,随机指定一个数 m ,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0… m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,哪个小朋友会得到这份礼品呢?

2023-12-04 14:57:11 500 1

原创 牛客剑指offer刷题模拟篇

要求:空间复杂度 O(1),时间复杂度 O(nlogn),本题也有时间复杂度 O(n) 的解法;现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。我们主要分析以下几种情况。

2023-11-30 11:11:19 545

原创 牛客剑指offer刷题位运算篇

然后采用递归的思想,将计算base^exponent分解为求 base^(exponent/2) * base^(exponent - exponent/2),而exponent/2最终结果不是为0就是为1,即可以轻松计算出结果;编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。a & b 的结果为 a+b 二进制运算进位的情况,当发生进位操作时,使用

2023-11-29 10:01:47 548

原创 牛客剑指offer刷题排序篇

在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1;使用HashSet的性质进行判断处理即可;

2023-11-27 09:34:38 503

原创 牛客剑指offer刷题回溯篇

请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。采用回溯法思想,对于矩阵中各个坐标一个个尝试,并递归查找对应位置上下左右位置,直到查找完毕;

2023-11-24 10:13:58 431

原创 浅谈对于Android CMakeLists文件的理解

浅谈对于Android CMakeLists文件的理解。

2023-11-22 19:19:10 321

原创 牛客剑指offer刷题动态规划篇

Math.max(prev + num[i],num[i]),其中prev表示以-2结尾的连续子数组的最大值,num[i]对应当前下标值;那对应的子数组只有2组,分别为[-2,1]和[1],很明显最大值数组为后者,那对应到公式应该为。以nums = [-2,1,-3,4,-1,2,1,-5,4]数据为例。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]输入:nums = [1]

2023-11-20 14:13:46 103

原创 牛客剑指offer刷题算法篇

对于排序数组,首先想到的就是二分法,通过不断二分查找到相同数字的第一个出现位置和最后出现位置,则可计算出出现次数;输入: scores = [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target = 4。某班级考试成绩按非严格递增顺序记录于整数数组 scores,请返回目标成绩 target 的出现次数。输入: scores = [1, 2, 3, 5, 7, 9], target = 6。

2023-11-16 10:32:04 123 1

原创 牛客剑指offer刷题队列&栈篇

分别定义一个push栈和一个pop栈,当push元素时,丢到push栈中,当pop和peek时,先判断pop栈是否为空,如果不为空,直接从pop栈中取,如果为空,则需要将push中元素倒入push栈中,以满足队列先进先出性质;请你仅使用两个栈实现先入先出队列。boolean empty() 如果队列为空,返回 true;否则,返回 false。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。

2023-11-14 09:42:42 76

原创 牛客剑指offer刷题二叉树篇

采用递归的思想,分别计算根节点左右子树深度,然后比较左右子树深度大小,最大的值+1即为所求结果;二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。给定一个二叉树 root ,返回其最大深度。

2023-11-01 09:03:17 161

原创 牛客剑指offer刷题链表篇

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。则首先需要计算两条链表的长度得到长度差,而从将链表移动到相同长度位置,然后同时遍历两条链表,则第一个相同节点即为所求节点;从头依次比较各个节点大小,哪个链表当前节点小,则取出当前节点,移动到下一个节点处,继续递归比较得到最终结果;遍历各个节点,修改指针指向前一节点实现,需要定义两个变量记录前一节点以及当前节点;给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。利用栈后进先出的性质实现;

2023-10-24 10:27:13 103

原创 Java 贪心算法经典问题解决

Java常见贪心算法实现

2023-07-24 11:30:53 1853

原创 Java实现字典树单词插入、查找以及删除

字典树又称为前缀树或Trie树,是处理字符串常见的数据结构。字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间,比如插入"abc"、“abcd”、“abd”、“bc”、"bcd"之后,字典树结构如下【图中结点表红,表示有单词以此结点结尾】:根节点没有字符路径。除根节点外,每一个节点都被一个字符路径找到。从根节点出发到任何一个节点,如果将沿途经过的字符连接起来,一定为某个加入过的字符串的前缀。每个节点向下所有的字符路径上的字符都不同。ღ( ´・ᴗ・` )

2023-07-21 14:56:41 267

原创 Java实现岛问题

Java实现岛问题

2023-07-21 11:00:29 276

原创 Java 实现并查集查询、合并

【题目描述】给定一个没有重复值的整型数组 arr,初始时认为 arr 中每一个数各自都是一个单独的集合。请设计一种叫 UnionFind 的结构,并提供以下两个操作。1)boolean isSameSet(int a, int b):查询 a 和 b 这两个数是否属于一个集合。2)void union(int a, int b):把 a 所在的集合与 b 所在的集合合并在一起,原本两个集合各自的元素以后都算作同一个集合。【要求】

2023-07-21 10:24:06 314

原创 Java 设计RandomPool结构

【要求】 Insert、delete和getRandom方法的时间复杂度都是 O(1)由于要求时间复杂度为0(1),因此考虑使用。

2023-07-13 14:10:02 80

原创 LeetCode Java实现 222. 完全二叉树的节点个数

Java LeetCode完全二叉树节点个数

2023-07-12 17:36:37 277

原创 Java 判断一颗二叉树是否是平衡二叉树、二叉搜索树、完全二叉树

平衡二叉树也称AVL树,其任意结点左右子树的高度差小于等于1【平衡二叉树不一定是排序二叉树平衡二叉树详解 通俗易懂二叉搜索树可以为空,也可以不为空;非空左子树的所有键值小于等于其根结点的值;非空右子树的所有键值大于等于其根结点的值;左右子树都是二叉搜索树;在一颗二叉树中,如果每个结点都存在左子树和右子树,并且所有叶节点都在同一层上,这样的树为满二叉树。

2023-07-12 13:56:14 335

原创 Java 实现二叉树序列化以及反序列化

将数据持久化存储到磁盘中,我们以字符串的方式将二叉树结构打印出来,方便我们在处理二叉树相关问题的时候进行验证。采用前序遍历方式,依次保存各个结点对应的值,中间以进行分割;如果当前结点为null,则字符串拼接上NULL;ღ( ´・ᴗ・` )

2023-07-12 10:17:27 254

原创 Java 查找二叉树中某一结点的前驱结点以及后继结点

给定二叉树结点定义Node结构如下,其中parent结点指向当前Node结点的父结点,根结点指向null/*** 指向父结点,头结点指向null} }在二叉树的中序遍历的序列中,Node的下一个节点叫作Node的后继节点。在二叉树的中序遍历的序列中,Node的前一个节点叫作Node的前驱节点。ღ( ´・ᴗ・` )

2023-07-11 23:17:20 495

原创 Java 递归和非递归方式实现二叉树的前、中、后序遍历

前序遍历递归方式实现非递归方式实现图文解读中序遍历递归方式实现非递归方式实现图文解读后序遍历递归方式实现非递归方式实现图文解读结语如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )

2023-07-11 11:02:44 357

原创 Android JetPack深入分析DataBinding源码

数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。支持双向绑定,数据变化的时候界面跟着变化,界面变化也同步给数据;在MVVM模式中使用比较多,双向绑定机制实现了View和Model的同步更新。通过APT技术于编译期生成相关辅助类,当调用方法时帮助我们完成布局控件绑定工作,减少操作,当调用数据更新操作时,数据作为被观察者,会绑定到虚引用对象上,更新过程中会使用Lifecycle进行生命周期判断,最终通过调用包下的辅助工具类完成控件更新操作;

2023-07-06 17:16:15 372

原创 Android JetPack深入分析LiveData源码

Google Android开发者 LiveData概览在了解LiveData源码之前,建议先了解LifeCycleAndroid JetPack深入分析Lifecycle源码定义LiveData是一种可观察的数据存储器类。与常规的可观察类不同,LiveData具有生命周期感知能力,意指它遵循其他应用组件(如 activity、fragment 或 service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。LiveData是一个数据存储类,能够感知。

2023-07-04 17:18:24 287

原创 Android JetPack深入分析Lifecycle源码

用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观察此状态。它是一个抽象类,具体实现类为;内部提供了addObserver(LifecycleObserver observer) 添加观察者removeObserver(LifecycleObserver observer)移除观察者方法;内部封装了State【状态】Event【事件】枚举类,以及一系列事件状态处理方法;

2023-07-03 19:05:46 226

原创 Android JetPack 深入分析ViewModel源码

本文主要分析ViewModel相关源码,相关使用不再赘述,可参考Android ViewModel使用;ViewModel 概览Google官方给的ViewModelViewModel类旨在 ` 以注重生命周期的方式存储和管理界面相关数据 `。ViewModel类 ` 让数据可在发生屏幕旋转等配置更改后继续留存 `。定义主要提到两个关键点:生命周期上图是Google官网提供的ViewModel生命周期图示,可以看到ViewModel的生命周期是从onCreate创建到完成并销毁Finished。

2023-06-29 17:04:09 1469

原创 LeetCode Java两个单链表相交的一系列问题

采用快慢指针方式,快指针每次走两步,慢指针每次走一步,如果遍历结束也不相遇,则此链表无环,当两者相遇时,移动快指针到链表头,然后快慢指针每次走一步,再次相遇,则此节点必是入环节点;如果两个链表长度一致,则直接遍历链表,找到同一个节点返回即可,如果长度不一致,则需要先对齐链表长度,然后再遍历链表,找到同一个节点返回;给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到 O(N+M),额外空间复杂度请达到O(1)。

2023-06-27 14:11:02 428

原创 LeetCode 138. 复制带随机指针的链表

深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。用一个由 n 个节点组成的链表来表示输入/输出中的链表。你的代码 只 接受原链表的头节点 head 作为传入参数。

2023-06-27 09:50:47 366

原创 将单向链表按某值划分成左边小、中间相等、右边大的形式

给定一个单向链表的头节点head,节点的值类型是整型,再给定一个 整 数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。例如:链表9->0->4->5- >1,pivot=3。调整后链表可以是1->0->4->9->5,也可以是0->1->9->5->4。总 之,满 足左部分都是小于3的节点,中间部分都是等于3的节点(本例中这个部 分为空),右部分都是大于3的节点即可。先将链表转化为数组,采用。

2023-06-27 09:23:59 73

原创 LeetCode 反转单向和双向链表

分别实现反转单向链表和反转双向链表的函数。

2023-06-26 16:12:10 215

原创 剑指 Offer 29. 顺时针打印矩阵

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5]

2023-06-26 14:50:55 311

原创 LeetCode面试题 01.07. 旋转矩阵

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。面试题 01.07. 旋转矩阵。不占用额外内存空间能否做到?给定 matrix =给定 matrix =

2023-06-26 14:48:32 364

原创 Java栈和队列基础问题实现

ღ( ´・ᴗ・` )

2023-06-16 15:50:13 53

原创 Java排序算法之桶排序

ღ( ´・ᴗ・` )

2023-06-16 13:38:56 219

原创 深入源码分析RecyclerView缓存复用原理

是Android日常开发中经常使用的控件,了解其源码,明白其中的缓存复用机制是十分有必要的;ღ( ´・ᴗ・` )

2023-06-09 17:44:27 1672

原创 Java排序算法总结与复杂度分析

时间复杂度简单的说就是一个程序运行所消耗的时间,叫做时间复杂度,我们无法目测一个程序具体的时间复杂度,但是我们可以估计大概的时间复杂度。一段好的代码的就根据算法的时间复杂度,即使在大量数据下也能保持高效的运行速率,这也是我们学习算法的必要性。ღ( ´・ᴗ・` )

2023-06-07 20:03:57 1176

原创 Java使用钉钉定时发送邮件到企业邮箱

ღ( ´・ᴗ・` )

2023-06-06 15:53:06 360

原创 Android深入源码分析事件分发机制流程

对于Android中的触摸事件即指手指触摸到屏幕时产生的点击事件;epoll详解创建 epoll 对象,会占用一个fd值,在linux下可以通过查看/proc/进程id/fd/,可以看到具体的fd,在epoll使用完毕后,需要调用close()进行关闭;epoll的事件注册函数,它不同于select()函数是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型;收集在epoll监控的事件中已经发送的事件;函数调用成功,返回对应I/O上已准备好的文件描述符数目。返回0表示已超时;

2023-05-26 11:09:09 954

原创 Java位运算

与&:0&0=0 0&1=0 1&0=0 1&1=1。或|:0|0=0 0|1=1 1|0=1 1|1=1。无符号左移:忽略符号位,空位都以0补齐。右移>>:正数左补0,负数左补1,右边丢弃。左移

2023-05-16 17:30:29 34

StickyDemo分组错乱解决demo

关于使用Sticky实现分组效果出现分组错乱的情况处理方式

2017-11-26

android aidl开发实例

android开发艺术探索一书中关于aidl的实例demo,主要模仿服务端向客户端展示图书列表,同时每5秒向客户端推送新书消息通知。

2017-09-16

aidl实例代码(android开发艺术探索)

android开发艺术探索一书中aidl的相关代码,主要功能是服务端向客户端提供服务端的图书信息,以及每5秒向客户端推送新书。

2017-09-16

git使用帮助

git文档的使用

2017-08-21

Android常见的面试题

一些Android常见的面试题集,对于刚找工作的朋友非常合适。

2017-03-10

空空如也

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

TA关注的人

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