Android面试题集

Android面试题集(来自网络整理)

一、几点建议

  1. 简历要如实写,相关的知识点一定要烂熟于心。
  2. 基础扎实,android和java相关的知识树网上有很多资料,看过但让你讲出来未必能说的好。
  3. 提前总结,你还擅长什么其他技术?这种开放问题要看知识面了。
  4. 学会提问,你有什么问题要问我吗?这种礼貌性问题也是一个了解对方的好机会。
  5. 良好的心里素质,无论遇到什么情况,面试官迟到、面试官态度冰冷说话不客气、质疑你的回答等等各种问题都不要慌也不要排斥,一定要沉住气,耐心积极的思考并回答对方的提问。
  6. 推荐几本书,也是好几次面试后发现里面涵盖了大部分答案。《Android开发艺术探索》《Android源码设计模式-解析与实战》《Android进阶之光》《深入理解Java虚拟机》,《Android音视频开发》多看几遍。

二、HashMap相关

包含知识点:散列表,散列冲突,散列均衡,散列扩充,哈希算法,哈希算法怎么应用在散列表上,负载因子;jdk1.8后HashMap引入了红黑树

  1. HashMap源码,SpareArray原理
  2. HashMap实现原理,ConcurrentHashMap的实现原理,原子类
  3. jdk1.5?SparseArray和ArrayMap各自的数据结构,前者的查找是怎么实现的,与HashMap的区别
  4. HashMap是如何解决Hash冲突的?
  5. HashMap和HashTable区别?
  6. Android对HashMap做了优化后推出的新的容器类是什么?比如使用SparseArray和ArrayMap
  7. HashSet和HashMap怎么判断集合元素重复
  8. LruCache底层实现原理
  9. ArrayList,LinkedList源码要看

三、哈希、加密相关

  1. MD5是加密方法么?Base64呢

四、架构、框架

  1. MVC,MVP,MVVM分别是什么?
  2. 项目组件化的理解
  3. app的架构是怎么样的,并且为什么这样,有什么优缺点?
  4. MVP、MVVM、MVC解释和实践
  5. Jetpack
  6. app的架构是怎么样的,并且为什么这样,有什么优缺点?
  7. MVP、MVVM、MVC解释和实践
  8. 如果用了一些解耦的策略,怎么管理生命周期的?
  9. 有用什么模式么,逻辑什么的都在Activity层?怎么分离的
  10. MVC,MVP,MVVM分别是什么?

五、UI

  1. 讲解Activity和Window,View的关系,以及DecorView结构
  2. 计算一个view的嵌套层级
  3. 封装view的时候怎么知道view的大小(ps:可能是宽高?)
  4. 自定义View如何考虑机型适配
  5. view渲染
  6. 自定义View里面OnMeasure参数的意义
  7. 自定义View,ViewGroup注意哪些回调?
  8. View绘制熟悉么,介绍下,能说下实现原理么
  9. Canvas的底层机制,绘制框架,硬件加速是什么原理,canvas lock的缓冲区是怎么回事
  10. surfaceview, suface,surfacetexure等相关的,以及底层原理
  11. View 事件传递机制
  12. down、move、up事件的传递
  13. 事件的传递方式,View,ViewGroup
  14. ACTION_CANCEL什么时候触发,触摸button然后滑动到外部抬起会触发点击事件吗,再滑动回去抬起会么
  15. 怎么处理嵌套View的滑动冲突问题
  16. Scroller有什么方法,怎么使用的。
  17. TextView调用setText方法的内部执行流程。
  18. RecyclerView 和Listview的区别,性能
  19. CoordinatorLayout、CollapsingToolbarLayout原理以及使用
  20. 介绍下SurfView

六、图片

  1. 图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预防OOM
  2. listview图片加载错乱的原理和解决方案
  3. 图片加载原理
  4. 基于自身工作经验和计算机相关知识,给出 移动端地图局部加载 瓦片大小的像素大小估值
  5. 图片加载三级缓存,有一个功能,做一个能放大缩小的图片查看器,加载一张巨大的图片,怎么做
  6. 图片加载框架优劣比较,以及之前项目选用加载框架时候的考虑
  7. glide缓存策略?同一个图片跟size有关么?

七、网络

  1. 网络请求缓存处理,okhttp如何处理网络缓存
  2. https相关,如何验证证书的合法性,https中哪里用到了对称加密,哪里用来非对称加密,对加密算法(如RSA)等是否有了解
  3. 视频加密传输
  4. https请求慢的解决办法,DNS,携带数据,直接访问IP
  5. TCP与UDP区别与应用(三次握手和四次挥手)涉及到部分细节(如client如何确定自己发送的消息被server收到) HTTP相关 提到过Websocket 问了WebSocket相关以及与socket的区别
  6. 网络请求相关,主要是网络请求优化。网络请求的时候遇到的问题
  7. 网络请求的开源框架:OKHttp介绍,写过拦截器么
  8. 数据层有统一的管理么,数据缓存是怎么做的,http请求等有提供统一管理么?
  9. HttpClient和HttpConnection的区别
  10. Https是怎么回事?
  11. Android长连接,怎么处理心跳机制。

八、Android基础

8.1 启动流程

  1. 答题说清一个应用程序安装到手机时发生了什么
  2. App是如何沙箱化,为什么要这么做
  3. 权限管理系统(底层的权限是如何进行grant的)
  4. App启动流程,从点击桌面开始
  5. 系统启动流程Zygote进程 ->SystemServer进程 ->各种系统服务 ->应用进程
  6. Manifests原理,APP启动流程,APK打包流程
  7. FW(Framework) 层熟悉么,源码看过么
  8. 介绍下app架构和通信

8.2 四大组件

  1. 画出Android的大体架构图
  2. BroadcastReceiver,LocalBroadcastReceiver区别
  3. 广播(动态注册和静态注册的区别,有序广播和标准广播)
  4. 怎么启动service,service和activity怎么进行数据交互
  5. Service基础概念,生命周期,通信。四大组件是基础,常见问题都要掌握
  6. service用过么,基本调用方法
  7. IntentService生命周期是怎样的,使用场合等
  8. activity栈
  9. intent-filter
  10. 下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
  11. Activity的四种启动模式以及相关概念,Activity栈,常见情境下的生命周期分析,异常关闭页面之后的恢复
  12. Activity的生命周期,finish调用后其他生命周期还会走么
  13. ActivityA跳转ActivityB然后B按back返回A,各自的生命周期顺序,A与B均不透明。
  14. Activity的生命周期有哪些,知道onRestart么,介绍下
  15. Activity的启动模式有哪些?栈里A-B-C,先想直接到A,BC都清理掉,有几种方法可以做到?这几种方法产生的结果是有几个A的实例?
  16. 都熟悉哪些命令?知道怎么用命令启动一个Activity么?
  17. 非UI线程可以更新UI吗?
  18. 有什么工具可以看到Activity栈信息么?多个栈的话,有方法分别得到各个栈的Activity列表么

8.3 控件

  1. 想改变listview的高度,怎么做
  2. RecyclerView和ListView有什么区别?局部刷新?前者使用时多重type场景下怎么避免滑动卡顿。懒加载怎么实现,怎么优化滑动体验。
  3. SurfaceView和View的最本质的区别?
  4. 如何实现右滑finish activity?
  5. 如何在整个系统层面实现界面的圆角效果。(即所有的APP打开界面都会是圆角)
  6. LinearLyout、FrameLayout、RelativeLayout性能对比,为什么

8.4 存储

  1. android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储
  2. Android中的存储类型
  3. android文件存储,各版本存储位置的权限控制的演进,外部存储,内部存储

8.5 Fagment及其他

  1. savedInstanceState知道么,干什么用的,什么时候有值,什么时候为空,平时是怎么用的
  2. Android中main方法入口在哪里
  3. 为什么 Google 会推出Fragment ,有什么好处和用途? 直接用 View 代替不行么?
  4. Fragment的replace和end的区别?
  5. SharedPrefrences的apply和commit有什么区别?
  6. Bundle机制
  7. 动态加载
  8. android api层的源码熟悉哪些?解释一下
  9. 推送消息有富文本么
  10. 是否熟悉Android jni开发,jni如何调用java层代码
  11. webwiew了解?怎么实现和javascript的通信?相互双方的通信。@JavascriptInterface在?版本有bug,除了这个还有其他调用android方法的方案吗?
  12. ReactiveNative了解多少

8.6 gradle、打包、编译

  1. 描述点击Android Studio的build按钮后发生了什么
  2. gradle熟悉么,自动打包知道么
  3. gradle打包流程熟悉么

九、进程、线程、协程

  1. synchronize用法
  2. volatile用法
  3. 进程保活
  4. TreadLocal原理
  5. SP是进程同步的吗?有什么方法做到同步
  6. 线程间操作List
  7. 进程和Application的生命周期
  8. handler机制(需要关注细节:如何线程如何建立和退出消息循环等)
  9. 多线程(关于AsyncTask缺陷引发的思考)
  10. 进程间通信的方式
  11. 多线程断点续传原理
  12. Android系统为什么会设计ContentProvider,进程共享和线程安全问题
  13. 线程挂起,休眠,释放资源相关,唤醒,线程同步,数据传递,问了很多线程的问题,问了20分钟大概
  14. static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
  15. handler发消息给子线程,looper怎么启动
  16. BC三个线程,C线程要等A和B线程的结果,AB并行,问,跟什么数据结构类似....,不是问生产者消费者或者信号量什么的,>
  17. 线程同步的问题,常用的线程同步
  18. AsyncTask内部实现,关注默认线程池是一个串行的线程池;
  19. 讲解一下HandlerThread
  20. 同步的问题,常见的那些,锁机制,sychronized关键字,concurrent包下的数据结构,atom包下的数据结构
  21. 线程之间怎么通信
  22. 对应用里的线程有做统一管理么?
  23. 进程间通信方式?Binder的构成有几部分?
  24. Synchronize关键字后面跟类或者对象有什么不同。
  25. ThreadLocal是什么?Looper中的消息死循环为什么没有ANR?
  26. Runnable与Callable、Future、FutureTask的区别,AsyncTask用到哪个?- AsyncTask是顺序执行么,for循环中执行200次new AsyncTask并execute,会有异常吗
  27. 如果在当前线程内使用Handler postdelayed 两个消息,一个延迟5s,一个延迟10s,然后使当前线程sleep 5秒,以上消息的执行时间会如何变化?
  28. Android中进程内存的分配,能不能自己分配定额内存?
  29. 下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
  30. CrashHandler实现原理?
  31. 怎么控制另外一个进程的View显示(RemoteView)?

十、性能优化

  1. 统计启动时长,标准
  2. 如何保持应用的稳定性
  3. 性能优化,如何保证应用启动不卡顿
  4. 怎么去除重复代码
  5. Android相关优化(如内存优化、网络优化、布局优化、电量优化、业务优化)
  6. 界面卡顿的原因以及解决办法
  7. 内存泄漏如何派出,MAT分析方法以及原理,各种泄漏的原因是什么比如
  8. Handler为什么会泄漏
  9. apk包大小有限制么?怎么减少包大小
  10. ANR是怎么回事,怎么查?Service会引起ANR么?
  11. anr是什么原因产生的,怎么排查
  12. 界面卡顿怎么排查和优化
  13. 界面上的话,有什么优化措施么?比如列表展示之类,平时遇到过内存问题吗?怎么优化
  14. 有什么提高编译速度的方法?
  15. 上线后的app性能分析检测有做么
  16. 内存优化,OOM的原因和排查方法

十一、JVM

  1. 谈谈classLoader
  2. 类加载器
  3. GC回收策略
  4. 对Dalvik、ART虚拟机有基本的了解
  5. DexClassLoader和PathClassLoader的区别
  6. 直接引用和符号引用相关
  7. GC回收机制熟悉么,分代算法知道么
  8. java的类加载原理
  9. gc相关的算法
  10. JVM的引用树,什么变量能作为GCRoot?GC垃圾回收的几种方法

十二、Java

  1. 内部类和静态内部类和匿名内部类,以及项目中的应用
  2. 泛型是什么以及在项目中的应用
  3. JNI和NDK熟悉么?Java和C方法之前的相互调用怎么做?
  4. java里带$的函数见过么,是什么意思

十三、数据库

  1. 数据库数据迁移问题
  2. 微信的聊天数据再本地都是加密处理的(防止root了被破解),设计一个类似的本地数据存储系统
  3. SQLite的数据库升级用过么

十四、项目相关

  1. 问项目,根据项目引申:主要有Asynctask和线程池,多进程以及IPC,GC相关(四种引用,怎么判断哪些内存该GC,GC算法),why,when,how 这些都是要从项目里面举出来例子

十五、适配

  1. dp是什么,sp呢,有什么区别
  2. Android8.0有哪些新特性
  3. 曲面屏的适配

十六、数据结构+算法

  1. 快速排序
  2. JSON字符串解析算法及优化
  3. 求一个字符串的最长回文
  4. 给定一个数,以及有序数组,求出来数组里面两个数的和等于给定数的下标
  5. 二叉树中序遍历,深度优先广度优先,不用递归算法的方法
  6. 求二叉树第k层节点个数;
  7. 实现一个栈push,pop,getMaxElementValue,时间复杂度要求0(1)
  8. 有序数组0(n)时间复杂度求一组和为sum的数组下标
  9. 算法熟悉么?给了一个二叉排序树,出了个给定结点找到它的下一个元素(只的是大小顺序的下一个)的算法题
  10. 三个算法题选一个并写出测试用例:打印n-m之间所有的素数;计算n-m之间1出现的次数;指定数字序列的排序;
  11. 微信跳一跳外挂怎么实现,检测怎么做的?
  12. 一张纯色背景下怎么有效检测各个矩形?

十七、开源库

  1. EventBus实现原理

十八、衍生话题

  1. Android相关你最擅长哪一块
  2. 自己负责过哪些模块,跟同事相比自己的优势是什么
  3. 遇到过什么印象深刻的问题,怎么解决的
  4. 项目团队多少人,怎么分配工作
  5. 比如:多人协同开发可能对一些相同资源都各自放了一份,有没有办法自动检测这些重复之类
  6. 为什么找工作,自己的优势是什么
  7. 平时用过什么开发工具,分析工具
  8. 有博客和github,主要是写的什么?有哪些关注
  9. 任意提问环节:其实可以问之前面试中遇到的问题:比如,多模块开发的时候不同的负责人可能会引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?
  10. 工作中有没有用过或者写过什么工具?脚本,插件等等
  11. 除了日常开发,其他有做过什么工作?比如持续化集成,自动化测试等等
  12. 开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题。
  13. 分享下项目中遇到的问题

十九、动画

  1. Android中的动画有哪些

二十、JNI

  1. 写过native的底层代码
  2. 对接的so算法了解么,有接触过相关的库么
  3. jni的算法提供都是主线程的?是不是想问服务类的啊

二十一、设计模式

  1. 平时用过哪些设计模式
  2. Android中常用的设计模式,说三个比较高级的?
  3. 单例的DCL方式下,那个单例的私有变量要不要加volatile关键字,这个关键字有什么用

二十二、热修复

  1. 热修复相关的原理,框架熟悉么

二十三、权限

  1. 没有给权限如何定位,特定机型定位失败,如何解决?
  2. Android程序运行时权限与文件系统权限

二十四、Json

  1. 实现一个Json解析器(可以通过正则提高速度)。

二十五、版本控制工具

  1. 如何解决git冲突?

二十六、杂

  1. Jenkins持续集成。

二十七、gradle和打包

  1. Debug跟Release的APK的区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值