【干货】Android 一线互联网面试题汇总,13 模块 200
描述一下你知道的数据存储方式
SharedPreferences 的应用场景,核心原理是什么
SharedPreferences 是线程安全的吗?
描述一下图片存储在本地的方式
sqlite 升级,增加字段的语句
数据库框架对比和源码分析
数据库的优化
数据库数据迁移问题
5.网络
描述一次网络请求的流程
HTTP 报文结构
HttpClient 和 HttpURLConnection 的区别
Volley,okhttp,retrofit 之间的区别和核心原理和使用场景
描述一下 https
https 中哪里用了对称加密,哪里用了非对称加密,对加密算法(如 RSA)等是否有了解?
说一下三次握手,四次挥手的具体细节
描述一下 socket 是什么东西
从网络加载一个 10M 的图片,说下注意事项
TCP 与 UDP 的区别
client 如何确定自己发送的消息被 server 收到?
WebSocket 与 socket 的区别
网络请求缓存处理,okhttp 如何处理网络缓存的
自己去设计网络请求框架,怎么做?
6.图片
说一下 OOM 的原因,如何避免
说一下三级缓存的原理
描述一下内存缓存的容器
图片库对比
图片库的源码分析
图片框架缓存实现
LRUCache 原理
自己去实现图片库,怎么做?
说说 Glide 内存缓存的具体实现?
7.布局
说一下布局性能的排序,谁的效率最高
描述一下约束布局
关于布局优化的方案
怎么检测布局深度
LinearLayout、RelativeLayout、FrameLayout 的特性及对比,并介绍使用场景。
8.性能优化
性能优化包括:内存,处理效率,视觉流畅度,CPU,电量,流量等方面,针对手机的性能去做相应的方案。个人认为更应该把握好内存优化、处理效率(代码质量)、视觉流畅度(布局优化)。
ANR 产生的原因是什么?
oom 是什么?
什么情况导致 oom?
有什么解决方法可以避免 OOM?
Oom 是否可以 try catch?为什么?
内存泄漏是什么?
什么情况导致内存泄漏?
如何防止线程的内存泄漏?
内存泄露的解决方法
内存泄漏和内存溢出区别?
如何对 Android 应用进行性能分析以及优化?
怎么去除无用代码?
性能优化如何分析 systrace?
用 IDE 如何分析内存泄漏?
Java 多线程引发的性能问题,怎么解决?
启动页白屏及黑屏解决?
启动太慢怎么解决?
怎么保证应用启动不卡顿?
App 启动崩溃异常捕捉
自定义 View 注意事项
现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的 5 层都可以涉及)。
Https 请求慢的解决办法(提示:DNS,携带数据,直接访问 IP)
如何保持应用的稳定性
RecyclerView 和 ListView 的性能对比
ListView 的优化
RecycleView 优化
View 渲染
Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM
java 中的四种引用的区别以及使用场景
强引用置为 null,会不会被回收?
9.JNI
请介绍一下 NDK
什么是 NDK 库?
如何在 JNI 中注册 native 函数,有几种注册方式?
Java 如何调用 c、c++语言?
JNI 如何调用 java 层代码?
你用 JNI 来实现过什么功能吗?怎么实现的?
10.进程间通信(简称:IPC)
进程间通信的方式?
Binder 机制的作用和原理
简述 IPC?
什么是 AIDL?
AIDL 解决了什么问题?
AIDL 如何使用?
Android 进程分类?
进程和 Application 的生命周期?
进程调度
谈谈对进程共享和线程安全的认识
11.WebView
描述一下 Webview 的作用
WebView 的内核是什么
描述一下 WebView 与 js 的交互方式
描述一下 WebView 的缓存机制
关于 WebView 的优化你知道哪些
有没有用过第三方 WebView 组件?讲一讲优势
12.进程保活
做过进程保活吗?
5.0 下和 5.0 上的保活方式了解吗?
描述一下进程回收的过程
如何降低进程的 oom_adj
其他
Handler 机制和底层实现
Handler、Thread 和 HandlerThread 的差别
handler 发消息给子线程,looper 怎么启动?
关于 Handler,在任何地方 new Handler 都是什么线程下?
ThreadLocal 原理,实现及如何保证 Local 属性?
请解释下在单线程模型中 Message、Handler、Message Queue、Looper 之间的关系
AsyncTask 机制
AsyncTask 原理及不足
如何取消 AsyncTask?
为什么不能在子线程更新 UI?
LruCache 默认内存缓存大小
ContentProvider 的权限管理(解答:读写分离,权限控制-精确到表级,URL 控制)
如何通过广播拦截和 abort 一条短信?
广播是否可以请求网络?
广播引起 anr 的时间限制是多少?
描述一下 Activity 栈
Android 线程有没有上限?
线程池有没有上限?
ListView 重用的是什么?
Android 为什么引入 Parcelable?
有没有尝试简化 Parcelable 的使用?
混合开发有了解吗?
知道哪些混合开发的方式?说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,H5,小程序,WPA 等)
屏幕适配的处理技巧都有哪些?
服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?
动态布局的理解
画出 Android 的大体架构图
Recycleview 和 ListView 的区别
ListView 图片加载错乱的原理和解决方案
动态权限适配方案,权限组的概念
Android 系统为什么会设计 ContentProvider?
下拉状态栏是不是影响 activity 的生命周期
Bitma
p 使用时候注意什么?
Bitmap 的 recycler()
Android 中开启摄像头的主要步骤
ViewPager 使用细节,如何设置成每次只初始化当前的
点击事件被拦截,但是想传到下面的 View,如何操作?
描述一下微信主页面的实现方式
invalidate 和 postInvalidate 的区别及使用
Activity-Window-View 三者的差别
谈谈对 Volley 的理解
ActivityThread,AMS,WMS 的工作原理
LaunchMode 应用场景
SpareArray 原理
请介绍下 ContentProvider 是如何实现数据共享的?
IntentService 原理及作用是什么?
ApplicationContext 和 ActivityContext 的区别
封装 View 的时候怎么知道 view 的大小
AndroidManifest 的作用与理解
结尾
去好公司面试,能答出来只是第一步,延伸问答、灵活运用才是面试官的目的,你越能答,他们越能问。我希望读者们能知道深入了解的含义,这真的是一个过程。
自己的知识准备得怎么样,这直接决定了你能否顺利通过一面和二面,所以在面试前来一个知识梳理,看需不需要提升自己的知识储备是很有必要的。
关于知识梳理,这里再分享一下我面试这段时间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结:
最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些 2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题
等等,可以很好地帮助我们深刻理解 Android 相关知识点的原理以及面试相关知识。
这份资料把大厂面试中常被问到的技术点整理成了 PDF ,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学 Android 路线、面试题集合/面经、及系列技术文章等,资源持续更新中...
最后复习的差不多的同学,请花一两个小时认真准备这些东西:
评论