阿里巴巴Android客户端面试部分问题及答案

这个是上周五参加阿里第一轮面试的题目。

1.Android序列化的两种方式:

在Android这个Linux系统中,无法将对象的引用传递给Activities或者Fragments,只有将这些对象放到Intent或者Bundle里面,才能进行传递。序列化表示的是将一个对象转换成可存储或可传输的状态,既可以在本地也可以在网络中进行传输。

1)Serializable Java自带,将一个对象转换为二进制文件字节序列。

2)Parcelable Android专用,将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的类型。

使用场景:

       使用内存 Serializable在序列化的时候会产生大量的临时变量,而引起频发的GC,Parcelable比Serializable效率高,所以推荐使用Parcelable.

使用磁盘:

      Parcelable在外界持续有变化的情况下,不能很好的保持数据的有效性,尽管Serializable效率低,但是还是建议使用Serializable。

2.Android应用启动黑白屏问题

         当我们在启动一个应用时,系统会去检查是否已经存在这样一个进程,如果没有则系统对应用进行冷启动,系统和APP本身都有很多工作需要做。首先系统的服务会先检查startActivity中的intent的信息,然后再去创建进程,最后才是执行启动Acitivy的操作。黑白屏的问题,就是在这段时间内产生的。 
        系统在绘制页面加载布局之前,首先会初始化窗口(Window),而在进行这步操作时,系统会根据我们设置的Theme来指定它的Theme主题颜色。Window布局的顶层是DecorView,StartingWindow显示一个空DecorView,我们在Style中的设置就决定了显示的是白屏还是黑屏。

解决方法 :

      黑白屏是根据我们设置的Theme来决定了,那我们就可以直接从启动页的Theme入手,我们给启动页设置一个全屏的背景图片,这样就不用显示默认的主题颜色了,这样就能避免白屏问题了。

另附:

    1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

 2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

3.如何收取用户使用APP的ANR信息?

      一般情况下应用无响应的时候回产生一个日志文件,位于/data/anr/文件夹下面,trace文件是Android Davik虚拟机在收到异常终止信号时产生的,最常见的一个触发条件就是Android应用中产生了FC(force close)。我们可以定期将用户trace.txt文件关于本APP的部分收集并发送到服务器。

4.三大类设计模式,六大设计原则,在项目中的应用。

    答案详见我上一篇博客。

5.阅读过的开源框架

    说自己用过的即可,要了解原理。

6.使用.so库的坑

    这个是面试官自己在开发时候遇到的一个坑,我并没有遇到这个问题,猜测是否是版本的问题导致的,他给予了肯定的回答。

7.版本控制工具

    我说自己目前所在的公司用的是SVN,不过自己在京东云上搭建过Git服务器。

小结:

       剩下的问题记不太清了,面试官都是在谈话的不经意间抛出个小问题,感觉面试官很注重Android操作系统 Application层的知识,同时要有很丰富的组件设计功底。这只是第一面,问了一些基础的问题,明天我还要继续参加面试所以就先到这里,等所有公司的面试都结束,我会对Android面试题做个总结,也会反思自己的不足。

 

 

你可能感兴趣的:(安卓开发)