高质量安卓面试题2018

刷题

公司一

  • 说下你所知道的设计模式与使用场景
  • java语言的特点与是OOP思想
  • 说下java中的线程创建方式,线程池的工作原理。
  • 说下handle原理,为什么会出现内存泄漏,为什么继承Handle就不会出现能存泄漏
  • 说下Activity的启动方式,生命周期,两个Activity跳转的生命周期,如果一个Activity跳转另一个Activity再按下Home键在回到Activity的生命周期是什么样的
  • 说下Activity的横竖屏的切换的生命周期,用那个方法来保存数据,两者的区别。触发在什么时候在那个方法里可以获取数据等。
  • 是否了SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。
  • 如何实现进程保活
  • 说下冷启动与热启动是什么,区别,如何优化,使用场景等。
  • Android中的线程有那些(我提到HandlerThread,AsyncTask又问了他们的原理与各自特点)
  • 给定命题,一串字符串中有通配符与占位符,如何化简优化(方法忘记可以简写)
  • 说下产生OOM,ANR的原因,三级缓存原理,如何优化ListView。
  • 说下你对Collection这个类的理解。
  • 说下AIDL的使用与原理
  • 说下你对广播的理解
  • 说下你对服务的理解,如何杀死一个服务。服务的生命周期(start与bind)。
  • 是否接触过蓝牙等开发
  • 设计一个ListView左右分页排版的功能自定义View,说出主要的方法。
    -说下binder序列化与反序列化的过程,与使用过程
  • 是否接触过JNI/NDK,java如何调用C语言的方法
    -如何查看模拟器中的SP与SQList文件。如何可视化查看布局嵌套层数与加载时间。
  • 你说用的代码管理工具什么,为什么会产生代码冲突,该如何解决
  • 说下你对后台的编程有那些认识,聊些前端那些方面的知识。
  • 说下你对线程池的理解,如何创建一个线程池与使用。
  • 说下你用过那些注解框架,他们的原理是什么。自己实现过,或是理解他的工作过程吗?
  • 说下java虚拟机的理解,回收机制,JVM是如何回收对象的,有哪些方法等
  • 一些java与Android源码相关知识等
    大学成绩
    大学那些专业,你哪方面学得好
    单片机,嵌入式,电子线路。
    毕业设计什么,几个人实现的,主要功能是什么
    还有些其他硬件相关知识
    自己的职业规划与发展方向

公司二

  • 数据结构与算法相关
  • 实际开发中的内存优化,APK体积优化,代码优化,资源优化,缓存,数据库等
  • 各大平台打包上线的流程与审核时间,常见问题(主流的应用市场说出3­4)
  • 支付宝与微信的支付功能接入,常见问题
  • 如何和后台交互,post请求的数据格式定义在那里定义,手写出来。
  • http与https的理解与4层都是哪4层,在一个请求过程中都是什么时候走这些流程与各自的作用
  • http的结构有那些(请求头,请求行之类的)
  • session与cookie的区别
  • 如何在后台没有给接口的情况下如何开发应用
  • 你是如何封装网络请求,数据缓存,优化,文件下载,线程池,OKHttp3源码的理解,如何提交
  • post请求,如何处理返回数据,异常处理,实体定义等实际开发中与后台协作相关知识。
  • 说下Android中特有的数据结构与常见的java数据结构(熟悉那个说那个),存储过程,源码与底层实
    现。

公司三

  • dp是什么,sp呢,有什么区别
  • 自定义View,ViewGroup注意那些回调?
  • 界面卡顿的原因以及解决方法
  • android中的存储类型
  • service用过么,基本调用方法
  • Handler机制
  • LinearLayout、FrameLayout、RelativeLayout性能对比,为什么
  • Activity的生命周期,finish调用后其他生命周期还会走么?
  • FW层熟悉么,源码看过么
  • GC回收机制熟悉么,分代算法知道么
  • Java的类类加载原理
  • 内存泄漏如何排查,MAT分析方法以及原理,各种泄漏的原因是什么比如
  • Handler为什么会泄漏
  • gradle熟悉么,自动打包知道么
  • 介绍下先的app架构和通信
  • 自己负责过哪些模块,跟同事相比自己的优势是什么
  • 遇到过什么印象深刻的问题,怎么解决的

公司四

  • 最近都做了哪些工作?
  • 遇到了什么印象深刻的问题。A:会顺着你介绍的项目问下具体实现。
  • 推送消息有富文本么?
  • 热修复了解么,用的什么?
  • apk包大小有限制么?怎么减少包大小?
  • 工作中有没有用过或者写过什么工具?脚本,插件等等
    比如:多人协同开发可能对一些相同资源都各自放了一份,有没有方法自 动检测这种重复之类的
  • 写过native的底层代码么
  • view的绘制熟悉么,介绍下
  • gc相关的算法
  • anr是因为什么产生的,怎么排查
  • 界面上的话,有什么优化措施么?比如列表展示之类的,平时遇到过内存问题吗,怎么优化的?
  • 平时用过哪些设计模式?
  • 介绍下最近一年主要做了什么工作
  • 会对简历上突出的技能进行详情的询问:
    比如:音频合成的具体步骤,以及遇到的一些问题和细节处理。
    会根据面试发散一些问题,问到,seek方法播放到末尾后重新播放会有一些卡顿的不流畅问题,怎么避免,从交互设计或者技术角度。(个人表示没怎么关注这种)。
  • 项目团队多少人,怎么分配工作
  • 线程之间怎么通信的?
  • app的架构是怎么样的,并且为什么这样,有什么优缺点?
  • 算法熟悉么?给了一个二叉排序树,出了一个给定节点找到它的下一个元素(指的是大小顺序的下一个)的算法题。
  • 为什么找工作,自己的优势是什么
  • 介绍下自己主要负责的工作
  • Activity的生命周期有哪些,知道onRestart么,介绍 savedInstanceState知道么,干什么用的,什么时候有值,什么时候为空,平时是怎么用的
    View绘制熟悉么,介绍下,能说下是实现原理么?
  • 平时用过什么开发工具,分析工具?
  • ANR是怎么回事?怎么查?Service会引起ANR么?
  • Activity的启动模式有哪些?栈里是A­B­C,先想直接到A,BC都清理掉,有几种方法可以做到?这几种方法产生的结果是有几个A的实例?
  • 有什么工具可以看到Activity栈信息么?多个栈话,有方法分别得到各个栈的Activity列表么
  • 都熟悉哪些命令?知道怎么用命令启动一个Activity么?
  • SharedPrefrences的apply和commit有什么区别
  • java里带$的函数见过么,是什么意思
  • MD5是加密方法么,Base64呢
  • 有博客和github,主要是写的什么?有哪些关注
  • android 8.0 有哪些新特性

公司五

glide缓存策略?同一个图片跟size有关么
android中的动画有哪些
View事件传递机制
界面卡顿怎么排查和优化?
Fragment的replace和end??的区别?
MVP,MVVM,MVC解释和实践
项目之外的,对技术的见解,拓展知识
微信跳一跳外挂怎么实现,检测怎么做的?
一张纯色背景下怎么有效检测各个矩形?
对接的so算法了解么,有接触过相关的库么?
三个算法题选一个并写出测试用例:打印n­m之间所有的素数;计算n­m之间1出现的次数;指定数
字序列的排序;
android api层的源码熟悉哪些?解释一下
ACTION_CANCEL什么时候触发,触摸button然后滑动到外部抬起会触发点击事件吗,在+ + 滑动
回去抬起会么
怎么处理嵌套View的滑动冲突问题
热修复相关的原理,框架熟悉么
gradle打包流程熟悉么
任意提问环节:其实可以问之前面试中遇到的问题:比如,多模块开发的时候不同的负责人可能会
引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?
Canvas的底层机制,绘制框架,硬件加速是什么原理,canvas lock的缓冲区是怎么回事
surfaceview, suface,surfacetexure等相关的,以及底层原理
android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储
上层业务activity和fragment的遇到什么坑??页面展示上的一些坑和优化经验
网络请求的开源框架:OKHttp介绍,写过拦截器么

公司六

数据层有统一的管理么,数据缓存是怎么做的,http请求等有提供统一管理么?
有用什么模式么,逻辑什么的都在Activity层?怎么分离的
如果用了一些解耦的策略,怎么管理生命周期的?
有什么提高编译速度的方法?
对应用里的线程有做统一管理么?
jni的算法提供都是主线程的?是不是想问服务类的啊
边沿检测用的啥?深度学习相关的有了解么?
上线后的app性能分析检测有做么
进程间通信方式?Binder的构成有几部分?
HttpClient和HttpConnection的区别
View的事件传递机制
MVC,MVP,MVVM分别是什么?
Android中常用的设计模式,说三个比较高级的?
内存优化,OOM的原因和排查方法
想改变listview的高度,怎么做
Https是怎么回事?
除了日常开发,其他有做过什么工作?比如持续化集成,自动化测试等等

公司七:

ActivityA跳转ActivityB然后B按back返回A,各自的生命周期顺序,A与B均不透明。
Synchronize关键字后面跟类或者对象有什么不同。
单例的DCL方式下,那个单例的私有变量要不要加volatile关键字,这个关键字有什么用
JVM的引用树,什么变量能作为GCRoot?GC垃圾回收的几种方法
ThreadLocal是什么?Looper中的消息死循环为什么没有ANR?
Android中main方法入口在哪里
jdk1.5?SparseArray和ArrayMap各自的数据结构,前者的查找是怎么
实现的,与HashMap的区别
Runnable与Callable、Future、FutureTask的区别,AsyncTask用到哪个?AsyncTask是顺序执行
么,for循环中执行200次new AsyncTask并execute,会有异常吗
IntentService生命周期是怎样的,使用场合等
RecyclerView和ListView有什么区别?局部刷新?前者使用时多重type场景下怎么避免滑动卡顿。
懒加载怎么实现,怎么优化滑动体验。
SQLite的数据库升级用过么
开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题。
Scroller有什么方法,怎么使用的。
分享下项目中遇到的问题
webwiew了解?怎么实现和javascript的通信?相互双方的通信。@JavascriptInterface在?版本有
bug,除了这个还有其他调用android方法的方案吗?
ReactiveNative了解多少
JNI和NDK熟悉么?Java和C方法之前的相互调用怎么做?

公司八:

fragment的生命周期
事件分发机制,以及涉及到的设计模式
onMeasure的测量模式与特点
线程间通信和进程间通信
ArrayList删除元素
写出你认为最优的懒汉式单例模式
activity意外退出时信息的储存与恢复,onCreate正常进入时的判断。
谈谈性能优化
JS的交互理解吗?平时工作用的多吗,项目中是怎么与Web交互的?
MVC ­> MVP ­> MVVM 这样变化的原因,MVP的不足,MVVM为什么代替了MVP
MVC的情况下怎么把Activity的C和V抽离
各个网络框架之间的差异和优缺点,网络框架代替进化的原因
图片缓存框架的差异和优缺点,有没有比Glide更好的图片加载框架?
项目框架里有没有Base类,BaseActivity和BaseFragment这种封装导致的问题,以及解决方法
框架里是怎样实现MVC的
Reftofit用过没有,注解实现的好处?
项目中的的界面既然是基于View的,有没有动画的处理?
为什么不推荐软引用,软引用在dvm上的垃圾回收机制和jvm上一样吗?
LRUCache的删除条件,LRU是什么意思
启动页缓存设计 白屏问题
网络图片怎么加载?Glide如何确定图片加载完毕
项目框架中对多View的支持?
Http的request和response的协议组成
RecyclerView和ListView相比有哪些好处,为什么ListView被RecyclerView代替?

公司九

Java

  1. 多线程并发
    sleep 和 wait 区别
    join 的用法
    线程同步:synchronized 关键字等
    线程通信
    线程池
    手写死锁
  2. Java 中的引用方式,及各自的使用场景
  3. HashMap 的源码
  4. GC(垃圾回收)是什么?如何工作的?回收算法有哪些
  5. Error 和 Exception 区别?
  6. 反射和注解了解吗?项目中有使用过吗?
  7. 网络相关:
    http 状态码
    http 与 https 的区别?https 是如何工作的?
  8. Java 中 LRUCache 是如何实现的(源码角度)?为什么要用 LinkedHashmap?
  9. 设计模式:
    手写单例,volitate 关键字的原理
    手写生产者消费者模式
    项目中都使用过哪些设计模式?
    编码常遵循的设计原则:单一职责、开闭原则、里氏替换等
  10. ArrayList 和 LinkedList 区别?
    Android
  11. 源码相关:
    Activity 启动过程
    事件分发源码,以及由此衍生的事件拦截如何实现
    消息机制:Handler 源码(结合Looper、MessageQueue),以及取不到消息时会怎样?
    View.post 为什么可以拿到宽高?
  12. 自定义 View
    流程:onMeasure, onLayout, onDraw
    onMeasure 中的 MeasureSpec 是如何计算的?
  13. 优化:
    内存泄漏,以及 LeakCanary 源码
    内存优化:大对象占用、内存抖动
    布局优化:层级、过度绘制等
    网络优化
  14. 如何捕获应用全局异常?
  15. Service 是使用,bind 和 start 的区别?
  16. Android 中的 IPC 机制有哪些?(接着往下问)
  17. 属性动画源码?
  18. 大图加载。
  19. ANR 如何定位,如何分析?(trace 日志)
  20. 项目中使用了哪些开源库?挑一个说说源码?
  21. MVC 和 MVP 区别?
  22. Activity:
    A 启动 B,生命周期是怎么走的?(注意区分B是否是透明的)
    启动模式
  23. AsyncTask 原理?
  24. Android 新特性(考察对新技术、新方向的观察)

公司十

Service的源码
Handler的实现,Looper怎么终止。
项目是MVC,那根据自己负责的项目讲下Model、View、Controller层
问了下昼夜模式、多语种、屏幕适配的问题,追问了下,如果要关闭昼夜模式功能怎么办?很多类
的话,一个个去关吗?
有没有接触过JNI和NDK?
ListView的错位问题原因以及如何处理?
如何设计一个抽奖系统,比如满200抽20,满500抽50

公司十一

Android:
1.内存泄漏的场景,Handler机制
2.四大组件
3.进程间通信
4.自定义view
5.Binder的使用
6.性能优化
Java:
1.接口和抽象类区别
2.继承和重写
3.ArrayList和LinkedList区别
4.死锁产生条件和应用场景
5.Java的修饰符的使用,static final修饰原理
6.多线程空指针解决方法
7.异常处理流程,何时必须要catch
操作系统
1.进程和线程区别
2.多线程同步和异步问题
3.同步死锁应用场景
设计模式
1.代理模式
2.单例模式以及双重锁原理
3.观察者模式应用场景
数据结构和算法
1.无序数组建立二叉搜索树
2.前序和中序遍历二叉树(我写了递归和非递归)
1.四大引用区别和引用场景
2.内存泄漏的场景,Handler内存泄漏的原因以及解决方法
3.Handler机制,主线程如何向子线程发送消息,Handler能否多进程通信
4.多线程并发,sychronized,类锁和对象锁
5.线程安全类,StringBuffer和StringBuilder
6.jvm工作内存和主内存,volatile原理,jvm的静态块,内存屏障的实现原理
7.一个m*n的棋盘,一个虫子从左上走到右下方,只能向右或者向下,有多少种走法,可以用组合
数学的知识解答
8.静态广播和动态广播区别,service启动的两种方式区别

1.将知道的操作系统说一遍,引入操作系统的最终目的(计算的功能),进线程区别,虚拟地址的
原理和作用,指针是物理地址还是虚拟地址,指针的地址长度的影响因素,32位系统是4个字节,
64位系统是8个字节。
2.Java的三大特性,写一个多态的例子,注意命名的规范
3.一个很大的数组,其中有一个数出现的次数是奇数次,其他都是偶数次。求这个数。除了异或写
另外一种方法
1.Android的体系架构,深入到framework,native层
2.单例模式的几种实现具体的区别,工厂模式的种类以及区别
3.对C语言的理解
4.Android的触摸事件分发流程
5.Android第三方框架的源码实现原理

公司十二

1.讲一下项目,主要是深入框架的源码
2.Java忘记问啥了,Android问启动模式的时候,对四种启动模式的实际运用问得比较深,还有触
摸事件的细节问得深
3.sp的commit和apply区别
4.左连接和右连接区别
5.算法:输出二叉树每层的最大值
1.集合类,线程安全如何实现,写一个算法ArrayList删除所有值是50的。
这里有坑:http://blog.csdn.net/lazy_p/article/details/7365324
除了遍历还有更优的方法吗?想不出来。换成LinkedList性能如何?
2.异常类的继承结构,如何捕捉异常,如何全局捕捉异常并上报
3.数据的存储方式与其的应用场景,ContentProvider的底层实现,如何保证多进程读写安全
4.类加载,jvm内存模型
5.自旋锁
6.Linux的fork
7.数据库的ACID
8.手写反转链表
1.intent是什么来的?为什么不是动作,用来干什么的?
(什么向什么表现什么意图)
2.为什么设置tcp三次握手,四次挥手
3.hashmap的底层实现
4.场景题分析:手机扫网页端的二维码如何提起的登录的过程,是如何实现的?

公司十三

一面(Android Leader)
请举出你认为你在工作中挑战最大的事例;
RecyclerView 一个适配器如何适配多种布局,不考虑根据不同 Type 设置不同 ViewHolder;
用过数据库么?如何防止数据库读写死锁?
可以考虑采用 ContentProvider && 单例实现。
CardView 真的好么?除了 CardView 还能用什么方式实现圆角等?假设我们有上千个 Shape 文
件,如何维护?
了解过 MVVM 么?它和 MVP 有什么差距?
是否用过 DataBinding?ButterKnife 是怎么做到布局绑定的?
使用过什么图片加载库,Glide 的源码设计哪里很微妙?
知道 Linux 的线程间通信么? Android 为啥会采用 Binder?Binder 的机制又是怎样的?
讲讲 AIDL。
如何能保证随时随地都能拿到一个 Activity 的当前生命周期?
会用 Kotlin 么?
可见 Kotlin 自从成为了谷歌首推语言后,确实还挺重要的,必须学习一下了。
Android 7.0 都适配了什么?
你还有什么想问我的?
二面(移动端 Leader)
讲讲 HTTPS 是怎么做加密的?讲讲非对称加密算法。
Android 8.0 都有些什么新特性?
画中画;
自适应 icon;
WebView 增强;
通知分类别,增加圆点,通知延后,通知增加背景,同样增加历史,通知超时自动清除;
自动填充信息(类似浏览器的选择保存的账号密码功能)
后台执行增加限制(主要是服务和广播);
蓝牙提升。支持蓝牙低功耗 5.0 标准;
智能文本选择与智能共享;
WLAN 感知;
取消屏幕纵横比限制;
多显示器支持;
可下载字体、XML 定义字体;
自适应 TextView,统一布局边框;
更丰富的色彩管理功能;
可以声明应用类别。
使用过 Gradle 的哪些功能。
RecyclerView 滑动卡顿,请分析原因,并提供解决方案。TraceView 都能看到哪些成分?
操作系统里面的一个「虚拟内存」是指的什么?
虚拟内存指的是一个对内存和外存进行调度,只是从逻辑上扩充了内存,但实际上不存在的内存存
储器。
原理是:基于局部性原理,在程序装入的时候,可以将程序的一部分装入内存,而在其余部分留在
外存,就可启动程序执行;在程序执行时,当所访问的信息不在内存的时候,由操作系统所需要的
部分调入内存,然后继续执行程序;操作系统再将内存中暂时不使用的内容换出到外存上,从而腾
出空间存放将要调入内存的信息。
Android 是如何做的性能调优?
讲讲适配器模式中适配器是干嘛的?在开发中都在哪里有用到?
都用过哪些开源库?
会用 KotLin 么?
你还有什么想问我的?
三面:技术总监
为什么大多数 API 会选择短连接而不是长连接?
为什么会选择用 RxJava?
MVVM 模式到底有什么好处?
详细讲讲 Android 8.0 新特性。
Kotlin 学习的怎么样了?
你的职业规划是怎么样的?
你有什么想问我的?
四面:HR
你目前是在职还是已经离职?
你为什么离职?
对咕咚 APP 的了解?
你是一个自律的人么?
你的职业规划是怎么样的?
五面:CT0
先做个自我介绍。
你在原来公司发展挺好的,但你为什么离职?
你们的 APP 采用蓝牙协议了么?

公司十四

一面(Android 技术)
讲讲你工作开发的项目是干嘛的。
手写快排;
手写二分查找,并分析时间复杂度;
讲讲 APK 是如何做瘦身的?
说说你项目中挑战最大的一件事。
讲讲 HTTPS 是如何做加密的,说下非对称加密算法;
说一下 HTTP 协议请求头我们常用的 3 个字段;
讲讲你这个图片压缩库是怎么做的?
进程保活怎么做?进程拉活现在还可以做么?
用过线程池么?讲讲 AsyncTask 的原理。
讲讲 HashMap 的原理。
讲讲 Android 如何做性能调优?
你们是如何做 UI 的机型适配的?
讲讲你们的多渠道打包是怎么做的?
bugly 是干嘛用的?Handler 怎么处理内存泄漏,除了使用弱引用。你还知道哪些地方需要注意内
存泄漏?
Bitmap 使用需要注意哪些问题?Bitmap.recycle() 会立即回收么?什么时候会回收?如果没有地方
使用这个 Bitmap,为什么垃圾回收不会直接回收它?
如何存储一个大图,但显示在 UI 上的是小图。
官方为什么会把 HttpClient 和 HttpUrlConnection 替换为 OkHttp 默认实现?它有什么好处?
你的 GitHub 上都开源了些什么东西?都为哪些开源库贡献了源码?ImagePicker 为啥会出现有些
图片拿不到?
了解二叉树的遍历么?讲一讲他们。
讲讲 SVN 和 Git 的差别,Git 的优势是什么。
讲讲 MVVM,主要是为了解决 MVP 和 MVC 的什么问题?
equals() 和 hashCode() 的区别是什么?平时有重写过它们么?什么情况下会去重写。
讲下为什么在 Android 下推荐使用 ArrayMap,相比 HashMap 它到底有什么优势?

整理来自公众号 秦子帅

推荐阅读更多精彩内容