金三银四的面试黄金季节,Android面试题来了!

codeGoogler / 文 发表于2018-03-13 08:59 次阅读 android进阶,面试,android

金三银四的跳槽季节,你准摆好了吗?

首先我们分享一个Android知识图谱。

请看Android知识图谱

下面是一些面试官基本必问的问题,请一定要去了解!

  • 基础知识 – 四大组件(生命周期,使用场景,如何启动)

  • java基础 – 数据结构,线程,mvc框架 通信 – 网络连接(HttpClient,HttpUrlConnetion),Socket
  • 数据持久化 – SQLite,SharedPreferences,ContentProvider
  • 性能优化 – 布局优化,内存优化,电量优化 安全 – 数据加密,代码混淆,WebView/Js调用,https
  • UI– 动画
  • 其他 – JNI,AIDL,Handler,Intent等
  • 开源框架 – Volley,Gilde,RxJava等(简历上写你会的,用过的) 拓展 – Android6.0/7.0/8.0特性,kotlin语言,I/O大会
整理了部分面试题,带答案

1、Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出 runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?

会,比如nullpointerException。我遇到过,比如textview.setText()时,textview没有 初始化。会导致程序无法正常运行出现forceclose。打开控制台查看logcat信息找出最新 Android面试题异常信息并修改程序。

2、IntentService有何优点?

Acitivity的进程,当处理Intent的时候,会产生一个对应的Service; Android的进程 处理器现在会尽可能的不kill掉你;非常容易使用

3、如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存 当前状态?

重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在 activity被回收之前调用。通过重写onRestoreInstanceState()方法可以从中提取保存好的数据

4、如何将一个Activity设置成窗口的样式。

<activity>中配置:android :theme="@android:style/Theme.Dialog"
另外 android:theme="@android:style/Theme.Translucent" 是设置透明

5、如何退出Activity?如何安全退出已调用多个Activity的Application?

对于单一 Activity 的应用来说,退出很简单,直接 finish()即可。

当然, 也可以用 killProcess()和 System.exit()这样的方法。 对于多个 activity

  • 1、记录打开的 Activity:每打开一个 Activity,就记录 下来。在需要退出时,关闭每一个 Activity 即可。
  • 2、发送特定广播:在需要结 束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。
  • 3、递 归退出:在打开新的 Activity 时使用 startActivityForResult,然后自己加标 志,在 onActivityResult 中处理,递归关闭。为了编程方便,最好定义一个 Activity 基类,处理这些共通问题。
    但是要注意的是:
  • 在 2.1 之前,可以使用 ActivityManager 的 restartPackage 方法。 它可以直接结束整个应用。在使用时需要权限 android.permission.RESTART_PACKAGES。 注意不要被它的名字迷惑。 可是,在 2.2,这个方法失效了。
  • 在 2.2 添加了一个新的方法,killBackground Processes(), 需要权限 android.permission.KILL_BACKGROUND_PROCESSES。可惜的是,它和 2.2 的 restartPackage 一样,根本起不到应有的效果。 另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法, forceStopPackage()。它需要权限 android.permission.FORCE_STOP_PACKAGES。并且 需要添加 android:sharedUserId="android.uid.system"属性
    同样可惜的是

    该方法是非公 开的,他只能运行在系统进程,第三方程序无法调用。 因为需要在 Android.mk 中添加 LOCAL_CERTIFICATE := platform。 而 Android.mk 是用于在 Android 源码下编译程序用的。 从以上可以看出,

  • 在 2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。 现提供几个方法,供参考:
  • 1、抛异常强制退出: 该方法通过抛异常,使程序 Force Close。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出 Force Close 的窗口。
  • 2、记录打开的 Activity: 每打开一个 Activity,就记录下来。在需要退出时,关闭每一个 Activity 即可。 -3、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。
  • 4、递归退出 在打开新的 Activity 时使用 startActivityForResult,然后自己加标志,在 onActivityResult 中处理,递归关闭。

除了第一个,都是想办法把每一个 Activity都结束掉,间接达到目的。但是这样做同样不完 美。你会发现,如果自己的应用程序对每一个 Activity都设置了 nosensor,在两个 Activity 结束的间隙,sensor 可能有效了。但至少,我们的目的达到了,而且没有影响用户使用。 为了编程方便,最好定义一个 Activity基类,处理这些共通问题。

6、AIDL的全称是什么?如何工作?能处理哪些类型的数据?

全称是:AndroidInterface Define Language

在 Android 中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到 Service.

在不同的进程中, 怎样传递对象呢?显然, Java中不允许跨进程内存共享.因此传递 对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE 中,采用RMI 的方式,可以通过序列化传递对象.在 Android 中, 则采用 AIDL 的方式. 理论上 AIDL 可以传递 Bundle,实际上做起来却比较麻烦。

  • AIDL(AndRoid 接口描述语言)是一种借口描述语言;
  • 编译器可以通过aidl 文件生成一段代 码
  • 通过预先定义的接口达到两个进程内部通信进程的目的.
    • 如果需要在一个 Activity中, 访 问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数),
    • 然后使用 AIDL 来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.
  • AIDL 的 IPC 的机制和 COM 或 CORBA 类似, 是基于接口的,但它是轻量级的。
  • 它使用代 理类在客户端和实现层间传递值.
  • 如果要使用 AIDL, 需要完成 2 件事情:
    1. 引入AIDL 的相 关类.;
  • 2.调用aidl 产生的 class.
AIDL 的创建方法: AIDL

语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型. 下面是些 AIDL 支持的数据类型:

    1. 不需要 import 声明的简单 Java 编程语言类型(int,boolean 等)
    1. String, CharSequence 不需要特殊声明
    1. List, Map 和 Parcelables 类型,这些类型内所包含的数据成员也只能是简单数据类型, String 等其他比支持的类型.

      7、请解释下Android程序运行时权限与文件系统权限的区别。

      运行时权限 Dalvik(android 授权) 文件系统 linux 内核授权

      8、系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

      通过直接发送 Uri 把参数带过去,或者通过 manifest 里的 intentfilter 里的 data 属性

      9、android系统的优势和不足

      Android 平台手机 5 大优势:
  • 一、开放性 在优势方面,Android 平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到 Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富, 一个崭新的平台也将很快走向成熟。开放性对于 Android 的发展而言,有利于积累人气,这 里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
  • 二、挣脱运营商的束缚 在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。从去年 iPhone 上市 ,用户可以更加方便地连 接网络,运营商的制约减少。随着 EDGE、HSDPA 这些2G 至 3G 移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,当你可以通过手机 IM软件方便地进行即时聊天时,再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头Google 推动的 Android 终端天生就有网络特色,将让用户离互联网更近。
  • 三、丰富的硬件选择 这一点还是与 Android 平台的开放性相关,由于 Android 的开放性,众多的厂商会推出千奇 百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件 的兼容,好比你从诺基亚 Symbian 风格手机 一下改用苹果 iPhone ,同时还可将 Symbian 中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移,是不是非常方便呢?
  • 四、不受任何限制的开发商 Android 平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如可控制正是留给 Android 难题之一。 五、无缝结合的 Google 应用 如今叱诧互联网的 Google 已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google 服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而 Android 平台手机将 无缝结合这些优秀的 Google 服务。 再说 Android 的
5 大不足:
  • 一、安全和隐私 由于手机 与互联网的紧密联系,个人隐私很难得到保守。除了上网过程中经意或不经意留 下的个人足迹,Google 这个巨人也时时站在你的身后,洞穿一切,因此,互联网的深入将 会带来新一轮的隐私危机。
  • 二、首先开卖 Android 手机的不是最大运营商 众所周知,T-Mobile 在 23日,于美国纽约发布 了 Android 首款手机 G1。但是在北美市场, 最大的两家运营商乃 AT&T 和 Verizon,而目前所知取得 Android 手机销售权的仅有 T-Mobile 和 Sprint,其中 T-Mobile 的 3G 网络相对于其他三家也要逊色不少,因此,用户 可以买账购买 G1,能否体验到最佳的 3G 网络服务则要另当别论了! 三、运营商仍然能够影响到 Android 手机在国内市场,不少用户对购得移动定制机不满,感觉所购的手机被人涂画了广告一般。这样的情况在国外市场同样出现。Android 手机的另一发售运营商 Sprint 就将在其机型中内置其 手机商店程序。
  • 四、同类机型用户减少 在不少手机论坛都会有针对某一型号的子论坛,对一款手机的使用心得交流,并分享软件资 源。而对于 Android 平台手机,由于厂商丰富,产品类型多样,这样使用同一款机型的用户 越来越少,缺少统一机型的程序强化。举个稍显不当的例子,现在山寨机泛滥,品种各异,就很少有专门针对某个型号山寨机的讨论和群组,除了哪些功能异常抢眼、颇受追捧的机型以外。
  • 五、过分依赖开发商缺少标准配置 在使用 PC 端的 Windows Xp 系统的时候,都会内置微软 Windows Media Player 这样一个 浏览器程序,用户可以选择更多样的播放器,如 Realplay 或暴风影音等。但入手开始使用 默认的程序同样可以应付多样的需要。在 Android 平台中,由于其开放性,软件更多依赖第 三方厂商,比如 Android 系统的 SDK 中就没有内置音乐 播放器,全部依赖第三方开发,缺 少了产品的统一性。

    10、Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥 有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认 为是同一个概念。

11、sim卡的EF文件是什么?有何作用

sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操 作系统,EF就是作存储并和手机通讯用的

12、嵌入式操作系统内存管理有哪几种, 各有何特性

页式,段式,段页,用到了MMU,虚拟空间等技术

13、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的 速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用 于工业控制、军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这 就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。

14、一条最长的短信息约占多少byte?

中文70(包括标点),英文160,160个字节。

15、有一个一维整型数组int[]data保存的是一张宽为width,高为height的图 片像素值信息。请写一个算法,将该图片所有的白色不)像素点透明(0xffffffff 的透明度调整为50%。

16、如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件 复制到res aw目录中

17、如何将打开res aw目录中的数据库文件?

在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时 将该文件复制到手机内存或 SD 卡的某个目录中,然后再打开该数据库文件。 复制的基本方法是使用 getResources().openRawResource 方法获得 res aw 目录中资源的InputStream 对象,然后将该 InputStream对象中的数据写入其他的目录中相应文件中。在 Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase 方法来打开任意目录中 的 SQLite 数据库文件。

18、DDMS和TraceView的区别?

DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是 程序性能分析器

19、java中如何引用本地语言 可以用JNI(java native interface java 本地接口)接口

20、谈谈Android的IPC(进程间通信)机制

  • IPC 是内部进程通信的简称,是共享"命名管道"的资源。
    • Android 中的 IPC 机制是为了 让 Activity 和 Service 之间可以随时的进行交互,故在 Android 中该机制,只适用于 Activity 和 Service 之间的通信,类似于远程方法调用,类似于 C/S 模式的访问。
    • 通过定义 AIDL 接 口文件来定义 IPC 接口。Servier 端实现 IPC 接口,Client 端调用 IPC 接口本地代理。

21、NDK 是什么

  • NDK 是一些列工具的集合
  • NDK 提供了一系列的工具,帮助开发者迅速的开发 C/C++的动 态库
  • 并能自动将 so 和 java 应用打成 apk 包。 - NDK 集成了交叉编译器,并提供了相应的 mk文件和隔离 cpu、平台等的差异
  • 开发人员 只需简单的修改 mk文件就可以创建出 so

22.一道简单不易的算法题

        int  a = 10;  
        int b=5;
        怎么在不引入其他变量的情况下,让a和b互换?

    ```
    public class Test {
       int  a = 10;  
       int b=5;
    public static void main(String[] args) {
       a = a+b;
       b=a-b;
       a =a-b; 
       System.out.println("b="+b);
       System.out.println("a="+a);
     }
    }
    ----输出:
    b=10
    a=5      
    ```

23.你最近几年的计划是什么?

24.你的项目中遇到了比较难以解决的问题?你又是如何解决的? (提示:考察的是你分析问题和解决问题的能力)

25.一些框架基本原理,设计模式的优势。

26.自我介绍,(逻辑清晰,不可自我矛盾)

27.你写过那些自定义组件?说一说是怎么使用的?

27.tinker热修复的基本原理 : 一定要形成自己的话术

28.性能优化

29.JVM和Dalvik虚拟机的工作原理

30.APP的启动过程

部分答案为整理,见后续!

关于更多

屏幕适配之尺寸的相关概论《一》

什么是dp,dip,sp和px及他们之间的的关系《二》

适配不同尺寸屏幕几个关键点分享<三>

给程序员,这几条建议你中招了吗

NDK项目实战—高仿360手机助手之卸载监听

最新2017(Android)面试题级答案(精选版)

相信自己,没有做不到的,只有想不到的

微信公众号:终端研发部

技术+职场

收藏 赞 (1) 踩 (0)