/android-interview-questions-cn

最全面的高质量 Android 面试指南。

Apache License 2.0Apache-2.0

AndroidInterviewQuestions

Android 面试指南

关于

android-interview-questions 项目启发,这里想发挥众多 Android **开发者的力量,整理一份高质量、范围全的 Android 面试指南,旨在帮助更多的 Android 开发者提升技术,找到工作。

现在还是项目初期,项目背景见这里:想跟大家一起做件小事,也欢迎关注微信公众号 stormzhang,后续有任何进展我都会在公号进行通知的。

目前该项目有如下初步的计划:

  1. 翻译 android-interview-questions 项目,不过翻译仅是我们的第一步而已,这个比较简单,目前第一步翻译工作已经被认领完毕;

  2. 因为原项目很多只是列了一些问题,但是都没有答案的,所以第二步我们就是认领问题,整理答案,务必保证高质量、易理解,因为问题很多,所以这一步需要花费不少精力,也需要更多的同学参与进来,目前还在第一步阶段;

  3. 第三步是补充与完善,原项目虽然列了不少领域,但是总归有些遗漏的,比如 Android 安全、插件化、Kotlin 等等,第三步是找在某一领域研究比较深的同学加入进来,对一些领域进行补充、完善,甚至会推出一些专题等;

Contents

数据结构与算法

关于数据结构与算法,问题的难度完全取决于你所申请的公司

  • 数组
  • 链表
    • 链表看起来更像树,而不是数组,它使用一组结点来表示一个序列。每一个结点都包含数据和一个指针。在链表中,结点中的数据可以为任意类型,而指针则是指向下一结点的引用。链表包含一个头结点和一个尾结点。头结点是链表中的第一个结点,尾结点是最后一个结点。链表不是一个循环数据结构,所以尾结点没有指向头结点的指针,指针为空。一些基础方法的时间复杂度如下:

      算法 平均 最差
      空间 (Space) O(n) O(n)
      查找 (Search) O(n) O(n)
      插入 (Insert) O(1) O(1)
      删除 (Delete) O(1) O(1)
  • 双向链表
  • 队列
  • 优先队列
  • 动态编程
  • 字符串操作
  • 二叉树
  • 二叉搜索树
  • 排序算法
  • 哈希表与哈希图
  • 广度优先搜索
  • 深度优先搜索
  • 贪心算法

Android 核心

  • 阐述一下 Activity 的生命周期。

  • 谈谈 Android 的四大组件。

  • Service 与 IntentService 的区别。Link

  • Android 应用的结构是什么?

  • Android 应用中如何保存数据。

  • 如何在 Android 应用中执行耗时操作。

  • 两个 Fragment 之间如何通信。

  • 阐述一下 Android 的通知系统。

  • 两个不同的 app 之间如何交互。

  • 什么是 Fragment?

  • 为什么建议只使用默认的构造方法来创建 Fragment?Link

  • 为什么 Bundle 被用来传递数据,为什么不能使用简单的 Map 数据结构?

  • 阐述一下 Fragment 的生命周期。Link

  • 如何理解 Android 的 Dialog ?

  • 解释下 Android 的 View 。

  • 你能创建自定义 View 吗?具体是如何创建的?

  • 什么是 ViewGroup ,它与 View 的区别在哪里?

  • Fragment 和 Activity 有什么区别?它们之间又有什么关系?

  • 谈谈 Serializable 接口和 Parcelable 接口的区别。在 Android 中最好使用哪种接口?

  • Activity 的启动模式有哪些?Link

  • 解释一下 Android 中的 Intent 。Link

  • 什么是隐式 Intent ?

  • 什么是显式 Intent ?

  • 解释一下 AsyncTask 。

  • 如何理解 Android 中的广播。Link

  • 如何理解 Android 的 LocalBroadcastManager 。Link

  • 什么是 JobScheduler ?Link

  • 什么是 DDMS ?你可以用它来做什么?

  • 解释一下什么是 support libary ,以及为什么要引入 support library ?Link

  • 如何理解 Android 中的 ContentProvider 。它通常用来干什么?

  • 什么是 Data Binding ?Link

  • Android 的核心组件具体都有什么?Link

  • 什么是 ADB ?

  • 什么是 ANR ?如何避免发生 ANR ?

  • AndroidManifest.xml 是什么?

  • 解释一下 broadcast 和 intent 在 app 内传递消息的工作流程。

  • 当 Bitmap 占用较多内存时,你是怎么处理的?

  • Android 应用有哪些不同的存储数据的方式?

  • 什么是 Dalvik 虚拟机?

  • AsyncTask 的生命周期和(它所属的) Activity 的生命周期有什么关系?这种关系可能会导致什么 样的问题? 如何避免这些问题发生?

  • Intent filter 是用来做什么的?

  • 什么是 Sticky Intent?Link

  • 什么是 AIDL ?列举一下通过 AIDL 创建被绑定的服务(bounded service)的步骤。

  • Android 的权限有多少个不同的保护等级?

  • 在转屏时你如何保存 Activity 的状态?Link

  • 相对布局和线性布局的区别。

  • 如何实现 XML 命名空间?

  • View.GONE 和 View.INVISIBLE 之间的区别。

  • Bitmap 和 .9(nine-patch)图片之间有什么区别?

  • 谈谈位图池。Link

  • 在 Android 中如何避免内存泄漏?

  • Android 桌面的小部件是什么?

  • 什么是 AAPT ?

  • 你是如何在 Android 应用程序中发现内存泄漏的?

  • 你如何排查应用崩溃的原因?

  • 为什么你应该避免在主线程上运行非用户界面相关的代码?

  • 你是如何适配不同分辨率的手机的?

  • 如何理解 Doze 模式。如何理解应用程序待机模式(App Standby)。

  • 在 Android 中,你可以使用什么来进行后台操作?

  • 什么是 ORM ?它是如何工作的?

  • 什么是 Loader ?

  • 什么是 NDK ,为什么它是有用的?

  • 如何理解严格模式(StrictMode)。 Link

  • 什么是 Lint ?它的用途是什么?

  • 什么是 SurfaceView ?

  • ListView 和 RecyclerView 有什么区别?

  • 什么是 ViewHolder 模式?为什么我们应该使用它?

  • 什么是 PendingIntent ?

  • 你能手动调用垃圾回收吗?

  • 周期地更新页面的最好方式是什么?

  • 有哪些类型的广播?

  • 你开发过组件吗?请描述一下。Link

  • 如何理解上下文(Context)。怎么使用它?Link

  • 你知道什么是视图树(View Tree)吗?怎样优化它的深度?

  • onTrimMemory() 方法是什么?

  • Android 应用可以使用多进程吗?怎样使用?

  • 内存溢出(OutOfMemory)是怎么发生的?

  • 文本样式接口(Spannable)是什么?

  • 什么是过度绘制(overdraw)?

  • 什么是渲染脚本(renderscript)?Link

  • Dalvik 虚拟机模式和 ART(Android Runtime)虚拟机模式的区别。

  • FlatBuffers 和 JSON 的区别。Link

  • 谈谈 Android 的注解。Link1, Link2

  • 描述一下约束布局(Constraint Layout)。Link

  • 阐述一下 Android 中的 HashMap , ArrayMap 和 SparseArray 。Link

  • 阐述一下 Looper, Handler 和 HandlerThread 。Link

  • 如何降低 Android 应用的耗电量?Link

  • SnapHelper 是什么?Link

  • 在 Android 中怎么处理多点触控?link

贡献者

感谢这些无私的贡献者,排名不分先后。

mengxninnovatorCLSmartNJZhiwinnovatorCL

License

   Copyright (C) 2017 stormzhang

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.