Android面试总结



                                 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!

    经过大大小小的面试,同事说你出一份面试题总结吧,我说好;但一直由于各种原因没有总结,今天想起,先慢慢总结,给大家作为参考。这里面的问题有大公司,也有小公司,不具体指定。大家看的时候各自定位,不指明具体公司面试内容。


     一般情况下,首先会让你做个自我介绍,毕业时间、学校、专业,工作年限,做安卓的时间简单说一下,然后说几个做过的项目,最后拣一个自己最熟悉的项目讲下业务流程。接着面试官就会问你一些用过的技术,原则:懂就说,不懂就说没研究过,忘记就说记不清楚了(当然面试前要做好精心准备,不打无准备之仗)。

     

     下面不懂的你必须背下来,既是知识点,又是面试必备。



     笔记题:

 1、简要说明下列代码的运行结果

final int age = 19;


public void changeABC(String abc) {
abc += "def";
System.out.println(abc);
}

public void changeAge() {
age += 7;
}


public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
FinalSet finalSet = FinalSet.class.newInstance();
String abc =new String();
abc="abc";
finalSet.changeABC(abc);
}

这个题是来测试你对final的理解;首先String是个对象,其次它也是个基本数据类型,final值不能再改变,因此age+=7这句是要报错的;另外String对象被运算时,已经生成新的对象,所以值为abcdef,原来值并不改变,只是引用指向了新的值。


2、代码见第1题,问代码执行完,age是否被回收,abc是否被回收?类的执行要经过三个阶段,ClassLoader的装载、链接即解析类成可执行文件、初始化即常量和方法体,执行完之后变量和方法体随着类的存在而存在、消亡而消亡,但所引用的值和对象会被回收。总之age和abc都不会被回收。

3、boolean的三种赋值之间的差异(转自:http://chenqiangjsj.blog.51cto.com/2331729/550420)

Java生成Boolean对象的第一种常见方法是通过new操作符

Boolean boolean1 = new Boolean(1==1);
第二种是通过静态方法valueOf
Boolean boolean1 = Boolean.valueOf(1==1);
第三种是JDK1.5之后的自动装箱
Boolean boolean1 = 1==1;
这三种方法有什么区别呢?
先看一段代码
Boolean[] boolean1 = new Boolean[100];
Boolean[] boolean2 = new Boolean[100];
Boolean[] boolean3 = new Boolean[100];
for (int i = 0; i < 100;i++){
    boolean1[i] = Boolean.valueOf(1==1);
}
for (int i = 0;i < 100;i++){
    boolean2[i] = new Boolean(1==1);
}
for (int i = 0; i < 100;i++){
    boolean3[i] = 1==1;
}
System.out.println("valueOf: " + String.valueOf(boolean1[1] == boolean1[2]));
System.out.println("new Boolean: " + String.valueOf(boolean2[1] == boolean2[2]));
System.out.println("auto wrap: " + String.valueOf(boolean3[1] == boolean3[2]));
输出结果是:
valueOf: true
new Boolean: false
auto wrap: true
为什么会这样呢?
原因就在于用new创建的Boolean对象是不断的新创建一个实例对象,而valueOf则是返回Boolean类里的静态成员变量,不会产生大量相同的实例变量。自动包装和valueOf类似.
实际上jdk文档也是建议用valueOf代替new方式来创建Boolean类对象。

4、横竖屏切换的生命周期:其实是一样的!

横-》竖 onSaveInstanceState ->onPause->onStop->onDestroy->onCreate->onStart->onRestoreInstance->onPostCreate->onResume->onPostResume

竖-》横   onSaveInstanceState ->onPause->onStop->onDestroy->onCreate->onStart->onRestoreInstance->onPostCreate->onResume->onPostResume

加android:configChanges="keyboardHidden|orientation"后就不会再变。


面试题:

1、手机中应用的初始内存是多少?限制内存是多少?虚拟机可分配最大内存是多少?

回答,拿出自己root过的手机,打开cmd命令行,adb shell getprop 

[dalvik.vm.dexopt-flags]: [m=y]
[dalvik.vm.heapgrowthlimit]: [48m]  //进程最大可分配内存
[dalvik.vm.heapsize]: [128m] //虚拟机最大可分配内存
[dalvik.vm.heapstartsize]: [5m] //进程初始分配的内存
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]

2、手机系统的内存是如何进行自我管理的?

详见:Android统就如何管理自己内存的?

3、Socket连接,当连接后,一直是连接吗?

回答:不一定,可能是长连接,也可能是短连接。


软件工程:

1、快速原型法,快速给出一个初级版本,然后根据客户需求开发人员不断完善原型,直到客户满意再完善系统。这种开发方式经常在需求不明确的情况下进行。

2、瀑布式,明确需求,按部就班的从需求分析、软件设计、编码、测试、维护这个流程来走,并且重复这个过程,直到客户满意。这种开发方式一种用于一期、二期、三期这样长期大型项目的开发。


使用NDK的优点

保护代码

代码重用。

C运行速度快

可手动分配内存,如视频


你可能感兴趣的:(Android面试总结)