一次Android面试题

来源:互联网 发布:菜鸟网络 高科技园区 编辑:程序博客网 时间:2024/04/28 05:13

这是一次在qq群里,有群友拍照贴上来的Android面试题,有不少高手进行了部分解答,后来,我做了一次系统整理,当然某些部分也加了些自己的理解,有不同意见的同学,欢迎讨论。

题目如下:

第一二部分

第三四部分

第五部分

下面是我总结的答案:

一,基本数据类型的大小(单位:bit)

Byte:8Short:16Char:16Int:32Long:64

分析:两个注意点:1,以bit为单位;2,Char是2字节,与C语言的1字节,不要混淆了。

二,字符串比较,s1==s2的结果
答案:结果是false。原因:String是引用类型的,不同对象有不同的地址,两个对象的地址,是不同的。

三,Thread类

下面哪个动作,明确的停止一个执行中的线程?

wait()notify()yield()suspend()sleep()

分析:
wait():线程调用该方法后,线程状态将从running 变为 waiting。

notify():线程调用notify(),将随机的从wait队列中挑选一个线程,将其状态从waitting 变为 runningable。

yield:调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间. 调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间。

suspend()方法就是将一个线程挂起(暂停)。

sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。

答案:suspend()

四,编码能力

1,类的设计。鸟、兽、蝙蝠的故事,3个类一个接口。

    //兽类,能吃肉    public abstract class Beast {        public abstract void EatMeat();    }       //飞行接口    public interface InterfaceFly{        void Fly();    }    //鸟类,有飞行能力    public class Bird implements InterfaceFly{        public void Fly(){}    }       //蝙蝠,是兽类,能吃肉;同时,它还拥有飞行能力    public class Bat extends Beast implements InterfaceFly {        public void EatMeat(){}        public void Fly(){}         }

2,算法,洗牌,有序数组转无序

提供了3种方式,核心都是使用随机数。

    //随机取两张牌,交换位置。    private int[] shuffle_mix(int[] ayCardValue){        Random random = new Random();                   int temp=0;        int index1=0;        int index2=0;        int len=ayCardValue.length;        for(int i=0;i<len;i++)        {            index1 = random.nextInt(len);            index2 = random.nextInt(len);            temp = ayCardValue[index1];            ayCardValue[index1] = ayCardValue[index2];            ayCardValue[index2] = temp ;        }               return ayCardValue;    }    //把第一位的牌与一个随机位置的牌进行交换    private int[] shuffle_buluma(int[] ayCardValue){        Random random = new Random();               int temp=0;        int index=0;                int len=ayCardValue.length;        for(int i=0;i<len*2;i++)        {            index = random.nextInt(len);                    temp = ayCardValue[0];            ayCardValue[0] = ayCardValue[index];            ayCardValue[index] = temp ;        }               return ayCardValue;    }    //随机取走一张牌,用最后一张填充    private int[] shuffle_ahui(int[] ayCardValue){        int index_ramdom=0;             int len=ayCardValue.length;        int[] retCard=new int[len];        Random random = new Random();        for(int i=0;i<len;i++)        {               index_ramdom = random.nextInt(len-i);                   retCard[i]=ayCardValue[index_ramdom];//转移            ayCardValue[index_ramdom] = ayCardValue[len-i-1];//补充        }               return retCard;    }

五,Android

1,Service的生命周期方法

通过startService启动: Service会经历 onCreate –> onStart 。
stopService的时候直接onDestroy 。
如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。 下次调用者再起来仍然可以stopService。

通过bindService启动: Service先运行onCreate(),然后执行onBind(),这个时候 调用者和Service绑定在一起。
调用者退出了,Service就会调用onUnbind–>onDestroyed

2,分辨率

hvga:480*320    (half vga)qvga:320*2401/4 vga)wvga:800*480    (wide vga)

3,aidl概念及作用

aidl: Android Interface definition language的缩写,是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

0 0