Android面试题记录

生命周期

View绘制,需要看一遍源码

事件分发

设计模式


java垃圾回收算法,可达算法

对象已死吗

1.引用计数算法

有人引用这个对象,+1,失效一个引用,-1;但是有个问题,有两个对象,互相引用,但是他们都没用了,怎么办?

2.可达算法

从根节点开始找寻,如果断了,就88。树的形式。不过就算断了,也不能直接宣判死刑。发现断了,会进行一次标记。至少进行2次标记才能干掉他。标记条件是啥,重写了finalize方法或者,finalize方法没有表调用过。这两种情况会进入一个队列,将会去执行他们的finalize方法,但是不一定会等这个方法运行结束。

垃圾回收算法

1.标记清除,统一回收,但是会有内存碎片。

2.复制算法。就是一半一半。每次就用一半,在回收的时候,把活着的对象弄到另一边,把死的清理了。但是利用率低了。

3.同上,811,用9。

4.老年代是一般存活15次以上的,对于老年代要用整理算法,死掉的,空出来的位置,后面的顶上,使之尽量整块化。


1.一个变量,一个数组,进行一个数组的倒置

如果知道长度,开个一半的循环就可以解决;但是长度如果是未知的,就不太明白了。

2.mn矩阵,右下会依次增大,如何在O(m+n)内找到一个数

我觉得dfs可以,全部遍历一遍。百度了一下,是杨氏矩阵查找。Android面试题记录

怎么想出来的呢?从0,0开始无法判断0,1和1,0的大小。但是从4,1开始就可以!

Android面试题记录

  1. bool search_in_young_matrix(int arr[][4], int x, int y, int target)  
  2. {  
  3.     if((x==width)||(y==height))  
  4.         return false;  
  5.     if(target<arr[x][y])  
  6.         return false;  
  7.     if(target==arr[x][y])  
  8.         return true;  
  9.     else  
  10.     {  
  11.         return search_in_young_matrix(arr,x+1,y,target) || search_in_young_matrix(arr,x+1,y,target);  
  12.     }  
  13. }  
其实就是分治法(在这题等同于回溯法),虽然方法栈空间大了点,但是时间是符合的,最差是m+n,和我的思想一致。(这里的x+1错了,应该是y+1)

面向对象

邮件系统,收件箱,发件箱,联系人,黑名单,应该设计哪几个类,A发给B的时候,这几个类是怎样的,B收到的时候,这几个类会怎样的,收发邮件这个操作应该是方法还是类。