Android 系列面试题整理(View、Activity、Fragment、Bitmap、Handler、性能优化、设计模式等)

415 阅读6分钟

前言

想必不少伙伴担忧的情况——“晋升无望、收入见顶、生活开支飙升、财务危机如影随形”,小编之前精心收录整理了一些关于Android开发的知识点、面试题,推荐给大家化解成长的烦恼。

它们都是我平时也经常翻看、学习的一些珍藏资料,包括Java基础、Android进阶、架构设计、NDK、音视频开发、跨平台、底层源码等技术,还有往年一线大厂最新面试题集锦,都分享给大家,助大家学习路上披荆斩棘~ 能力得到提升,思维得到开阔~

View

  • 说下View 的绘制流程?
  • MotionEvent 是什么?包含几种事件?什么条件下会产生?
  • 描述一下 View 事件传递分发机制?
  • scrollTo()和 scollBy()的区别?
  • Scroller 是怎么实现 View 的弹性滑动?
  • invalidate()和 postInvalidate()的区别 ?
  • SurfaceView 和 View 的区别?
  • 自定义 View 如何考虑机型适配 ?

Activity

  • 说下 Activity 生命周期
  • Activity A 启动另一个 Activity B 会调用哪些方法?如果 B 是透明主题的 又或者是个 DialogActivity 呢 ?
  • 说下 onSaveInstanceState()方法的作用,何时会被调用?
  • 说下 Activity 的四种启动模式、应用场景
  • 了解哪些 Activity 常用的标记位 Flags
  • 说下 Activity 跟 window,view 之间的关系
  • 横竖屏切换的 Activity 生命周期变化
  • 如何启动其他应用的 Activity
  • Activity 的启动过程

Fragment

  • Fragment 为什么会被称为第五大组件
  • Fragment 加载到 Activity 的 2 种方式
  • Fragment 与 ViewPager 的搭配使用
  • Fragment 的生命周期
  • 在 Fragment 中调用 Activity 中的方法
  • 在 Activity 中调用 Fragment 的方法
  • 在 Fragment 中调用另外一个 Fragment 的方法
  • Fragment 的切换方式
  • 谈谈 Activity 和 Fragment 的区别
  • Fragment 中 add 与 replace 的区别(Fragment 重叠)
  • getFragmentManager、getSupportFragmentManager 、 getChildFragmentManager 之间的区别
  • FragmentPagerAdapter 与 FragmentStatePagerAdapter 的区别与使用场景

Bitmap

  • Bitmap 使用需要注意哪些问题
  • Bitmap.recycle()会立即回收么?什么时候会回收?如果没有地方使用这 个 Bitmap,为什么垃圾回收不会直接回收
  • 一张 Bitmap 所占内存以及内存占用的计算
  • Android 中缓存更新策略
  • LRU 的原理
  • Service及BroadcastReceiver
  • 谈一谈 Service 的生命周期
  • Service 的两种启动方式?区别在哪
  • 如何保证 Service 不被杀死
  • 能否在 Service 开启耗时操作 ? 怎么做
  • 用过哪些系统 Service
  • 了解 ActivityManagerService 吗?发挥什么作用
  • 广播有几种形式 ? 都有什么特点
  • 广播的两种注册方式
  • 广播发送和接收的原理了解吗 ?(Binder 机制、AMS)

Handler

  • 谈谈消息机制 Handler 作用 ?有哪些要素 ?流程是怎样的
  • 一个线程能否创建多个 Handler,Handler 跟 Looper 之间的对应关系
  • 软引用跟弱引用的区别
  • Handler 引起的内存泄露原因以及最佳解决方案
  • 为什么系统不建议在子线程访问 UI
  • Looper 死循环为什么不会导致应用卡死
  • 使用 Handler 的 postDealy 后消息队列会有什么变化
  • 可以在子线程直接 new 一个 Handler 吗?怎么做
  • Message 可以如何创建?哪种效果更好,为什么

性能优化

  • 图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理
  • 内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存
  • WebView 的性能优化
  • Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM
  • 内存回收机制与 GC 算法(各种算法的优缺点以及应用场景);GC 原理时机 以及 GC 对象
  • 内存泄露和内存溢出的区别 ?AS 有什么工具可以检测内存泄露
  • 性能优化,怎么保证应用启动不卡顿? 黑白屏怎么处理
  • 强引用置为 null,会不会被回收
  • ListView 跟 RecyclerView 的区别
  • ListView 的 adapter 是什么 adapter
  • LinearLayout、FrameLayout、RelativeLayout 性能对比,为什么

设计模式

  • 你所知道的设计模式有哪些
  • 谈谈 MVC、MVP 和 MVVM,好在哪里,不好在哪里
  • 封装 p 层之后.如果 p 层数据过大,如何解决
  • 是否能从 Android 中举几个例子说说用到了什么设计模式
  • 装饰模式和代理模式有哪些区别
  • 实现单例模式有几种方法 ?懒汉式中双层锁的目的是什么 ?两次判空的目的又是什么
  • 用到的一些开源框架,介绍一个看过源码的,内部实现过程
  • Fragment 如果在 Adapter 中使用应该如何解耦

线程

  • 线程池的好处? 四种线程池的使用场景,线程池的几个参数的理解
  • Android 中还了解哪些方便线程切换的类
  • 讲讲 AsyncTask 的原理
  • IntentService 有什么用
  • 直接在 Activity 中创建一个 thread 跟在 service 中创建一个 thread 之间 的区别
  • ThreadPoolExecutor 的工作策略
  • Handler、Thread 和 HandlerThread 的差别
  • ThreadLocal 的原理
  • 多线程是否一定会高效(优缺点)
  • 多线程中,让你做一个单例,你会怎么做
  • 除了 notify 还有什么方式可以唤醒线程
  • 什么是 ANR ? 什么情况会出现 ANR ?如何避免 ? 在不看代码的情况 下如何快速定位出现 ANR 问题所在

算法

  • ViewGroup的层级深度,转换为二叉树的层级深度
  • 查找两个字符串的交集和字符串1中有字符串2中没有的问题
  • String字符串的数字相加
  • 使用三个线程顺序打印有序的数组
  • 给定一个有序的数组和目标数,找出与目标数最近接的index,要求复杂度是log(n)的时间复杂度
  • 二叉树的深度和广度,要求一次遍历
  • 给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的case,并且打印
  • m*n的二维数组,做(0,0)出发,可以上下左右走,0为畅通,1为阻塞,目标位置(k,j),问是否能到达这个位置
  • int数组,除了一个数字外,其他数字都出现两次,找出这个只出现一次的数字
  • 一个无序的int数组,给一个target数字,找出数组中两个数字相加为target,并输出坐标
  • 数组中存有1-3的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序
  • 1~100盏灯,都是亮的,第一次将能被1整除的数的灯按下,变暗,第二次将能被2整除的数的等按下,变亮,第三次将能被3整除的数的等按下,变暗…第100次将能被100整除的数的灯按下,问,最后有多少盏灯是亮的

最后

希望通过这些学习文档能够帮助到大家学习,为了节省大家在网上搜索资料的时间,我以将这些学习资料上传至Github可点击查看,大家也可以分享给身边好友一起学习。

喜欢本文的话,不妨顺手点赞+评论,关注一波呗,后续还会更新内容。