自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你好,开发者

请移步公众号「开发者如是说」

  • 博客(17)
  • 收藏
  • 关注

原创 Android 高级面试-5:四大组件、系统源码等

1、四大组件1.1 ActivityQ:在两个 Activity 之间传递对象还需要注意什么呢?对象的大小。Intent 中的 Bundle 是使用 Binder 机制进行数据传送的。能使用的 Binder 的缓冲区是有大小限制的(有些手机是 2 M),而一个进程默认有 16 个 Binder 线程,所以一个线程能占用的缓冲区就更小了(有人以前做过测试,大约一个线程可以占用 128 KB...

2019-02-26 23:35:20 582

原创 数据结构与算法回顾-4:平衡查找树

二叉树虽然能解决查找的问题,但是在某些情况下,比如当任意相邻的两个元素之间是按照升序或者降序插入的话,那么得到的树将是一个链表的形状。当然这只是一种极端的情况,只是用来说明,树的形状对二叉查找的效率有很大的影响。这里的平衡二叉树能够让树保持完美的平衡,不会出现极端的成为链表等,而且我们也会试图去保持树的完美平衡。它实现这个平衡目的的方式是:对于 3-结点,如果再向其插入数据,就会使其变成 4-...

2019-02-26 00:23:23 293

原创 数据结构与算法回顾-3:二叉查找树

1、概念二叉查找树(BST) 是一种二叉树,它的每个结点都只有左右两个链接,分别指向自己的左子结点和右子结点,并且每个结点都大于其左子树中的任意结点的键,并且小于任意右子树的任意结点的键。(注意和堆的区别)2、代码实现2.1 使用循环的方式来进行查找和插入下面的代码中使用了循环的方式来将指定的键值对插入到表中。缺点:相比于使用递归的方式这里的代码显得比较冗长,而且在循环之中没办法统计和更新...

2019-02-26 00:06:26 243

原创 数据结构与算法回顾-2:排序算法小结

在下面的排序算法中会使用到的方法: protected static void exchange(Comparable[] arr, int fromPos, int toPos) { Comparable temp = arr[fromPos]; arr[fromPos] = arr[toPos]; arr[toPos] = temp; ...

2019-02-25 23:48:49 278

原创 数据结构与算法回顾-1:算法的度量和基本数据结构

1、数据结构数据结构是相互之间存在一种或多种关系的数据的集合。1.1 三要素数据结构三要素是:1.数据的逻辑结构;2.数据的物理结构;3.数据的运算。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。1.1.1 逻辑结构分为线性结构和非线性结构,线性结构:线性表、栈、队列非线性结构:树、图、集合1.1.2 存储结构即物理结构,分四种(存储数据时不只要存储元素的值...

2019-02-25 23:33:04 271

原创 Androd 应用启动过程的源码分析

在之前的文中,我们已经了解过了 Android 系统启动的过程。系统启动之后会由 PMS 安装系统应用,并启动 Launcher,也就是桌面程序。然后,我们安装的程序的图标将会显示到桌面上面。所谓应用启动过程分成两种情形,一个是应用进程已经建立,一种是应用进程没有建立的情况下。后者需要先创建应用进程,然后再执行启动的过程。安卓系统中的应用在源码中的位置是 platform/packages/a...

2019-02-24 18:06:49 266

原创 Android:解析 SurfaceView & TextureView

1、关于 SurfaceView 和 TextureView1.1 基础SurfaceView 以及 TextureView 均继承于 android.view.View,属于 Android 提供的控件体系的一部分。与普通 View 不同,它们都在独立的线程中绘制和渲染。所以,相比于普通的 ImageView 它们的性能更高,因此常被用在对绘制的速率要求比较高的应用场景中,用来解决普通 Vi...

2019-02-23 18:11:47 3509

原创 RxJava 系列-4:RxJava 源码分析

在之前的文章中我们介绍了 RxJava 2 的常用的 API 的方法总结、背压的概念以及 RxJava 2 在项目中的实际应用。在本节中,我们将要对 RxJava 2 的源码进行分析。下面是之前文章的一些链接,如果对 RxJava 2 的使用比较感兴趣,你可以通过下面的文章进行学习:RxJava2 系列-1:一篇的比较全面的 RxJava2 方法总结RxJava2 系列-2:背压和 Flow...

2019-02-22 23:31:14 256

原创 Android 高级面试-4:虚拟机相关

内存管理属于基础知识组织下语言即可,内存模型放在 Java 并发相关;虚拟机执行系统是重点,包括,类加载机制(类的加载、校验阶段,与热补丁原理相关)学习这一块的内容可以参考:《JVM 系列-1:虚拟机内存管理》《全面理解Java内存模型 JMM 及volatile关键字》1、内存管理GC 回收策略Java 中内存区域与垃圾回收机制垃圾回收机制与调用 System.gc() 区别...

2019-02-22 00:17:33 438

原创 Android 高级面试-3:语言相关

主要内容:Kotlin, Java, RxJava, 多线程/并发, 集合1、Java 相关1.1 缓存相关LruCache 的原理DiskLruCache 的原理LruCache 用来实现基于内存的缓存,LRU 就是最近最少使用的意思,LruCache 基于 LinkedHashMap 实现。LinkedHashMap 是在 HashMap 的基础之上进行了封装,除了具有哈希功能,...

2019-02-20 00:30:32 374

转载 [转] 字符编码 ASCII UNICODE UTF-8

本文整理自廖雪峰的 Python 教程中的字符串与编码一节,因为对于字符串编码的渊源讲解得比较好,故节选下来。(文末注明了详细的地址)因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用 8 个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是 255(二进制 11111111 = 十进制 255),如果要表示更大的整数...

2019-02-19 21:07:47 369

原创 并发编程专题 3:synchronized

1、synchronized 修饰的几种情形根据 synchronized 可以被用来修饰的对象可以分成下面几种情形,2、synchronized 的原理2.1 理论基础Java 虚拟机中的同步 (Synchronization) 基于进入和退出管程 (Monitor) 对象实现,无论是显式同步 (有明确的 monitorenter 和 monitorexit 指令,即同步代码块),还是...

2019-02-19 20:39:35 305

原创 Android 高级面试-2:IPC 相关

内容IPC 就是指跨进程通信。IPC 相关的内容,涉及的主要有:常见的 IPC 通信方式;Binder 相关;两种序列化方式及其对比;问题IPCAndroid 上的 IPC 跨进程通信时如何工作的简述 IPC?进程间通信的机制AIDL 机制Bundle 机制IPC 就是指进程之间的通信机制,在 Android 系统中启动 Activity/Service 等都涉及跨...

2019-02-18 19:59:11 349

原创 Android 高级面试-1:Handler 相关

要点难点:MQ 的 next() 方法,enqueueMessage() 方法,因为它们与 Native 层的 Looper 和 MQ 关联。重点:消息如何分发next() 方法如何退出Handler 与线程对应起来的原理题目Handler 实现机制(很多细节需要关注:如线程如何建立和退出消息循环等等)关于 Handler,在任何地方 new Handler 都是什么...

2019-02-18 19:56:45 1787

原创 并发编程专题 2:使用多线程编程

1、基础梳理进程和线程。1). 进程是操作系统正在执行的不同应用程序的一个实例,线程是操作系统分配处理器时间的基本单元。2). 每个进程运行在自己的地址空间,而线程共享数据内存和 IO 这些资源。线程的优缺点。优点:1). 程序的运行效率可能会更高;2). 可以使用线程把占用时间较长的任务放在后台去执行;3). 在一些等待耗时任务和交互事件的时候同时可以执行其他任务。缺点:1).如果有大量的...

2019-02-17 20:30:52 446

原创 并发编程专题-5:生产者和消费者模式

所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区中去获取数据,就不再需要关心生产者的行为。在实现生产者消费者问题时,可以采用三种方式:使用 Object 的 wa...

2019-02-17 15:50:49 484

原创 Java 基础回顾-6:HashMap 源码分析

要理解 HashMap 的实现原理需要数据结构方面的知识,这里给出之前整理的一些数据结构和 hashCode() 方法覆写相关的知识:《Java 基础回顾:几个比较重要的预定义类》 及 《Awesome-Java》见数据结构与算法部分。Java 集合 API 中的 HashMap 是使用拉链法来解决碰撞冲突的。所谓拉链法就是使用一个数组存储链表的头结点。对每个键值对,我们计算键的哈希码,并对得到...

2019-02-15 20:51:02 416

空空如也

空空如也

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

TA关注的人

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