- 博客(34)
- 收藏
- 关注
原创 【Android源码学习】关于@hide
在阅读SDK源码的时候经常看到@hide隐藏的方法,我们只能通过反射来调用它,但是一直不太清楚SDK是怎么做到的,是通过权限控制吗? Android @hide 详解 看了这篇文章,才知道跟我理解的不一样,它没有权限控制那么复杂。简单来说编程工具(AndroidStudio等)是引用SDK中的android.jar,这个包里没有hide和internal相关的类、属性和方法的,它是个删减版。当a
2017-02-17 13:03:39
1057
原创 【Android问答】Android面试常问问题
今年秋招颗粒无收,校招公司基本上都跪在了算法,社招小公司因为面试没有体现出深度表现平平,自然也因为期望太高而告吹。仔细总结一下,发现主要原因是没有模拟问答练习,在面试时不能牢记于心倒背如流,自然也不能达到好效果了。 下面这些问题基本是面试必问,但是网上的答案都是通篇大论,没有人给出篇幅适中而又不失水准的“答案”。 一、Android中View的绘制流程。 答:总的来说分为测量、布局和绘制。
2017-01-06 18:12:20
522
原创 【Android源码学习】View的layout和draw流程
关于View的layout和draw流程,各路大神们的博客都讲解的很清晰,View绘制流程,本文仅写出自己的理解和总结,方便加强印象。 一、layout measure是通过父布局推荐的大小确定各个子View最终的大小,同样,layout通过父布局推荐的位置确定各个子View最终的位置。它的入口是ViewRootImpl的performLayout,ViewGroup.layout(DecorV
2016-12-26 17:47:21
512
原创 【Java基础】变长参数、Object[]类别、System.out.println异常
变长参数、Object[]类别和System.out.println异常
2016-12-24 21:40:30
601
原创 【Android源码学习】View的measure流程
我们都知道View的绘制主要有三个流程:测量、布局和绘制。但是面试时却不知道如何去详细介绍,这是因为对其内部原理和机制不够熟练或者理解不够透彻。 一、View的测量 带着问题学习Android中View的measure测量和Android View测量过程源码解析这两篇博文对measure方法讲解的非法详细。 总结一下,测量类似于给对象分配空间,measure方法类似于预分配,传入的参数值是父
2016-12-24 18:14:10
425
原创 【数据结构与算法】单链表排序
以前一直没有考虑过对单链表的排序,直到遇到Leetcode 一、快速排序 单链表的快速排序需要用到快速排序的单向扫描法,总体思路是用一快一慢两个指针,快指针用来寻找小于key的结点,慢指针用来指向当前找到的较小结点应该存储的位置。 public static int partition(int[] nums,int start,int end){ int fast=star
2016-12-19 21:01:47
851
原创 【Android源码学习】事件分发机制
关于Android事件分发机制,一直半清不楚。Android事件传递机制——这篇博客实验做的很好,不过对于dispatchTouchEvent的返回值解释错误。直到看到这篇博文,才有了比较清晰的认识Android事件分发流程——这篇博客图文较多便于理解但是没有涉及原理。这篇文章对原理讲解的比较清楚以伪代码的形式展示事件分发结果,配合第二篇博客效果非常好
2016-11-24 21:28:15
377
原创 【Android源码学习】应用启动过程
1、手机启动完成后,显示的桌面Launcher其实也是一个应用(它继承于Activity)。手机上所安装的用户app都会显示在Launcher应用的界面上,类似于文件浏览器。 2、当我们点击某一个应用图标时,触发Launcher的onClick事件,它根据点击的内容(文件夹或应用图标)来实施相应的操作。因为点击的是应用图标(相于当快捷方式),所以执行的操作是启动这个应用。 3、启动应用时强制添加
2016-11-24 14:50:18
408
原创 【Android源码学习】子线程更新UI
一直都认为子线程不能更新UI,觉得这是Android系统规定的,所以也没想过为什么。直到今天刷题时看到一个言论说在onResume之前子线程是可以更新UI的。经测试,确实如此,并且在onResume时也可以用子线程更新UI,在onPause或点击时都会报错。
2016-11-22 18:42:33
325
原创 【剑指offer】包含min函数的栈
首先第一个想到用一个临时变量何存当前栈中的最小值。每次入栈时,先比较入栈元素与当前最小值确定是否更新。但是如果此时出栈一个元素,并且栈内不为空时,min函数就无法工作了。也就是说我们必须保存入栈前的最小值序列,以保证出栈后能恢复最小值。很容易想到也用一个栈来保存最小值。public class
2016-11-18 17:36:53
245
原创 【剑指offer】顺时针打印矩阵
主要思想是递归打印最外面一圈,打印每一圈时按照顺时针方法,先顶部从左至右,然后右边从上至下,然后底部从右至左,最后左边从下至上。 思路简单,但是实现起来困难,主要是打印次数的判断,以及矩阵只有一行或只有一列或只有一个数时的判断条件。
2016-11-18 16:48:33
324
原创 【剑指Offer】反转单链表
反转单链思路简单,但是需要仔细实现,不能遗漏细节,不自己独立写一遍永远不知道自己错在哪。 public static ListNode reverseList(ListNode head) { if(head==null) return null; ListNode pre=null; ListNode cur=head; Lis
2016-11-18 11:28:31
350
原创 【数据结构与算法】基数排序
基数排序是一种多关键字排序。以扑克牌排序为例,每张扑克牌有两个“关键码”:花色和面值,花色的权重大于面值,如红桃A小于黑桃2。 通常有最高位优先MSD (Most Significant Digit first)和最低位优先LSD (Least Significant Digit first)两种实现方式。
2016-11-16 22:09:47
826
原创 【数据结构与算法】桶排序
桶排序的思想是划分区间(桶),后一个区间中的数总是比前一个区间的大。例如按薪水排序,处于月薪数W元区间的任何一个人的薪水肯定比处于月薪数K元区间的所有人多。 分好区后,再选择某一种算法对这个区内的元素排序。最后根据区的优秀级依次取出元素,这样整个序列就有序了。
2016-11-16 11:08:28
459
原创 【数据结构与算法】快速排序
快速排序也使用了分治策略,它每次将待排序列分成两部分,前一部分的元素值都不比后一部分的元素值大。也就是前一部分都不比某个数大,后一部分都不比这个数小。这个基准的选择会直接影响快速排序的效率。 划分 固定第一个数为基准,以{5,4,3,5,6,12,11,-3,4,5,7}为例,用临时变量保存5,相当于挖了个坑,然后从后往前找到第一个小于基准的数,填入当前坑,原位置形成新坑,然后从前往后找到第一
2016-11-15 15:27:55
364
原创 【数据结构与算法】归并排序
归并排序的利用了分治的思想,将待排序列分为前后部分,分别进行归并排序,然后将这两个有序的部分合并使之达到整体有序。 合并 因为两个待合并子序列都是已经排序的,它们的第一个值在其序列中永远是最小(最大)的,故而整体最小(最大)的值必然是这两个中的一个,就像年级的第一名,永远是从各班的第一名中产生。 因而我们可以每次比较两个待合并序列的第一个,选取其中一个值放入到结果中,并从原序列中移除。
2016-11-14 10:44:49
426
原创 【数据结构与算法】计数排序
计数排序只适用于分布较密的整数,它的思想是将元素当作辅助数组的下标,对应的值代表元素出现的次数。因为数组下标从小到大不需要排序,即而当前下标和之前下标的次数累加和即此下标在原数组中的位置。 注意:当数组元素分布广泛时会造成极大的空间浪费。传入参数min和max是数组中的最小值和最大值,如果不知道,可以传入一个大概的值,只要分别比实际最小值小和实际最大值大就行 public static in
2016-11-11 22:20:49
480
原创 【数据结构与算法】冒泡排序
冒泡排序的思想是,从前往后(或从后往前)扫描,每找一个逆序对,就将它更正过来,这样每一轮总可以找到一个最大值或最小值。
2016-11-11 21:42:18
517
原创 【数据结构与算法】二分查找
二分查找的思想是在已经排序(升序)的数组中,如果要查找的数比中位数小,那么其位置只可能在左半部分,相反只能在右半部分。这样每次把查找区间缩小一半,比顺序查找效率快得多。非递归写法: public static int binarySearchInAscLooply(int[] nums,int start,int end,int t){ if(nums==null||nums.leng
2016-11-11 11:30:30
494
原创 【数据结构与算法】插入排序
假设数组a[N]已经排好序,现在需要插入一个新的数。假设我们将数插入某个位置,那么这个位置之后的所有元素都必须后移一位。 public static void straightInsertSort(int[] nums,int start,int end){ if(nums==null||nums.length<=end) throw new IllegalArgumentExceptio
2016-11-10 15:16:32
291
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人