学废了,堪称Android开发最全的知识体系与面试体系

虽然马上就要金三银四了,面试的人应该不少,写这篇文章的目的主要是梳理下知识,能对复习有点帮助就行,本文主要针对Android知识体系相关,涉及的内容有:

  • 计算机网络
  • Java基础
  • Android
  • 数据结构与算法
  • Framework
  • 性能优化
  • 开源库源码/原理
  • Kotlin
  • Flutter
  • C/C++/音视频

不过Android是真的内卷啊,内容是真多,配合知识体系还丢了点面试题作为参考,并且也把自己学习过程中的大佬笔记放了上来,说不定对大家也有帮助呢?

以上基本涵盖Android整个知识体系。

有人对自己的能力感觉受限也正常,由于Android体系本身内容比较多,本文也只是整理下,没必要全部都关注,只是目前的一个趋势而已。

目前的Android领域方向主要有:

  • 应用开发
  • IoT
  • Framework
  • 性能优化
  • 游戏
  • 音视频
  • 跨端
  • 逆向安全

后续内容巨量干货预警!!!建议收藏的同时不要忘记点赞评论支持一下~

Android知识体系

学废了,堪称Android开发最全的知识体系与面试体系

后面就是面试题的整理,以及复习笔记相关内容,相关的一些知识点解析都已经做了收录整理上传至公号中:Android开发之家,大家可以自行访问查阅。

计算机网络

  • 各层结构和功能,以及都有哪些协议
  • TCP三次握手和四次挥手
  • TCP,UDP协议的区别
  • 在浏览器中输入url地址 >> 显示主页的过程
  • 状态码概括
  • HTTP短连接和长连接
  • Cookie的作用是什么?和Session有什么区别
  • URI和URL有什么区别
  • HTTP和HTTPS的区别

Java基础

面试过程中,BATJ这些大公司都要求有扎实的Java语言基础,掌握虚拟机底层原理,这一个部分就是Android开发中最常用的Java相关知识。

重点:序列化、注解、泛型、反射、多线程、动态代理、并发、类加载机制、Android虚拟机原理剖析、dex运行机制、Android内存

面试题如下:

注解

  • 注解的分类和底层实现原理
  • 自定义注解

泛型

  • 你可以把List传递给一个接受List参数的方法吗?
  • Array中可以用泛型吗?
  • Java中List和原始类型List之间的区别?

反射

  • 什么是反射
  • 反射机制的相关类
  • 反射中如何获取Class类的实例
  • 如何获取一个类的属性对象 & 构造器对象 & 方法对象
  • Class.getField和getDeclaredField的区别,getDeclaredMethod和getMethod的区别
  • 反射机制的优缺点

Jvm

  • Jvm的内存模型,每个里面都保存的什么
  • 类加载机制的几个阶段加载、验证、准备、解析、初始化、使用、卸载
  • 对象实例化时的顺序
  • 类加载器,双亲委派及其优势
  • 垃圾回收机制

多线程

  • Java中创建线程的方式,Callable,Runnable,Future,FutureTask
  • 线程的几种状态
  • 谈谈线程死锁,如何有效的避免线程死锁?
  • 如何实现多线程中的同步
  • synchronized和Lock的使用、区别,原理;
  • volatile,synchronized和volatile的区别?为何不用volatile替代synchronized?
  • 锁的分类,锁的几种状态,CAS原理
  • 为什么会有线程安全?如何保证线程安全
  • sleep()与wait()区别,run和start的区别,notify和notifyall区别,锁池,等待池
  • Java多线程通信
  • 为什么Java用线程池
  • Java中的线程池参数,共有几种

复习内容主要是这个:

学废了,堪称Android开发最全的知识体系与面试体系

Android知识

这部分主要是Android基础以及UI,还有动画、事件分发机制、嵌套滑动机制这些知识点,近几年热门的Jetpack现在基本是属于必问的问题了,Jetpack Compose个人建议先了解,如果有需要可以随时深入研究,目前大部分应该是属于加分项(反正几乎没有被问到,问到的基本是试探对新技术的敏感性),实际面试公司不同略有差异。

重点是原理(手动狗头)

Activity

  • Activity的启动流程
  • onSaveInstanceState(),onRestoreInstanceState的掉用时机
  • activity的启动模式和使用场景
  • Activity A跳转Activity B,再按返回键,生命周期执行的顺序
  • 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
  • onStart 和 onResume、onPause 和 onStop 的区别
  • Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
  • Activity的onNewIntent()方法什么时候会执行
  • 显示启动和隐式启动
  • scheme使用场景,协议格式,如何使用
  • ANR 的四种场景
  • onCreate和onRestoreInstance方法中恢复数据时的区别
  • activty间传递数据的方式
  • 跨App启动Activity的方式,注意事项
  • Activity任务栈是什么
  • 有哪些Activity常用的标记位Flags
  • Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的

Service

  • service 的生命周期,两种启动方式的区别
  • Service启动流程
  • Service与Activity怎么实现通信
  • IntentService是什么,IntentService原理,应用场景及其与Service的区别
  • Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
  • bindService和startService混合使用的生命周期以及怎么关闭

BroadcastReceiver

  • 广播的分类和使用场景
  • 广播的两种注册方式的区别
  • 广播发送和接收的原理
  • 本地广播和全局广播的区别

ContentProvider

  • 什么是ContentProvider及其使用
  • ContentProvider,ContentResolver,ContentObserver之间的关系
  • ContentProvider的实现原理
  • ContentProvider的优点
  • Uri 是什么

View绘制

  • View绘制流程
  • MeasureSpec是什么
  • 子View创建MeasureSpec创建规则是什么
  • 自定义Viewwrap_content不起作用的原因
  • 在Activity中获取某个View的宽高有几种方法
  • 为什么onCreate获取不到View的宽高
  • View#post与Handler#post的区别
  • Android绘制和屏幕刷新机制原理
  • Choreography原理
  • 什么是双缓冲
  • 为什么使用SurfaceView
  • 什么是SurfaceView
  • View和SurfaceView的区别
  • SurfaceView为什么可以直接子线程绘制
  • SurfaceView、TextureView、SurfaceTexture、GLSurfaceView
  • getWidth()方法和getMeasureWidth()区别
  • invalidate() 和 postInvalidate() 的区别
  • Requestlayout,onlayout,onDraw,DrawChild区别与联系
  • LinearLayout、FrameLayout 和 RelativeLayout 哪个效率高
  • LinearLayout的绘制流程
  • 自定义 View 的流程和注意事项
  • 自定义View如何考虑机型适配
  • 自定义控件优化方案
  • invalidate怎么局部刷新
  • View加载流程(setContentView)

View事件分发

  • View事件分发机制
  • view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者优先级
  • onTouch 和onTouchEvent 的区别
  • ACTION_CANCEL什么时候触发
  • 事件是先到DecorView还是先到Window
  • 点击事件被拦截,但是想传到下面的View,如何操作
  • 如何解决View的事件冲突
  • 在 ViewGroup 中的 onTouchEvent 中消费 ACTION_DOWN 事件,ACTION_UP事件是怎么传递
  • Activity ViewGroup和View都不消费ACTION_DOWN,那么ACTION_UP事件是怎么传递的
  • 同时对父 View 和子 View 设置点击方法,优先响应哪个
  • requestDisallowInterceptTouchEvent的调用时机

RecycleView

  • RecyclerView的多级缓存机制,每一级缓存具体作用是什么,分别在什么场景下会用到哪些缓存
  • RecyclerView的滑动回收复用机制
  • RecyclerView的刷新回收复用机制
  • RecyclerView 为什么要预布局
  • ListView 与 RecyclerView区别
  • RecyclerView性能优化

Viewpager&Fragment

  • Fragment的生命周期 & 结合Activity的生命周期
  • Activity和Fragment的通信方式, Fragment之间如何进行通信
  • 为什么使用Fragment.setArguments(Bundle)传递参数
  • FragmentPageAdapter和FragmentStatePageAdapter区别及使用场景
  • Fragment懒加载
  • ViewPager2与ViewPager区别
  • Fragment嵌套问题

WebView

  • 如何提高WebView加载速度
  • WebView与 js的交互
  • WebView的漏洞
  • JsBridge原理

动画

  • 动画的类型
  • 补间动画和属性动画的区别
  • ObjectAnimator,ValueAnimator及其区别
  • TimeInterpolator插值器,自定义插值器
  • TypeEvaluator估值器

Bitmap

  • Bitmap 内存占用的计算
  • getByteCount() & getAllocationByteCount()的区别
  • Bitmap的压缩方式
  • LruCache & DiskLruCache原理
  • 如何设计一个图片加载库
  • 有一张非常大的图片,如何去加载这张大图片
  • 如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的。
  • 如果在hdpi、xxhdpi下放置了图片,加载的优先级。如果是400800,10801920,加载的优先级。

Window&WindowManager

  • 什么是Window
  • 什么是WindowManager
  • 什么是ViewRootImpl
  • 什么是DecorView
  • Activity,View,Window三者之间的关系
  • DecorView什么时候被WindowManager添加到Window中

Jetpack

  • LiveData为什么可以自动取消订阅,如何避免内存泄漏?
  • LiveData设置相同的值,会不会回调?
  • LiveData有什么坑?如何实现LiveDataBus?
  • Jetpack MVVM 下的页面通信怎么做?
  • LiveData “数据倒灌” 是什么情况,如何解决?

其他

  • JNI
  • NDK
  • MVC MVP MVVM原理和区别?
  • 可以说一下MVC->MVP->MVVM演进过程吗?
  • 低版本SDK如何实现高版本api?
  • 异性屏的适配
  • Jetpack Compose了解过吗?

参考复习内容主要是:

学废了,堪称Android开发最全的知识体系与面试体系

学废了,堪称Android开发最全的知识体系与面试体系

如果需要我的复习资料借鉴学习,可以顺手帮我点赞评论一下,前往公号中:Android开发之家,自行访问查阅。

数据结构与算法

在很多人看来,数据结构与算法这一类的东西没什么用,日常工作实践中都不常用,所以很容易忽视部分内容,但是在很多公司看来,尤其是BATJ等一线大厂,数据结构和算法这种东西确实最有用,而且经常在笔试和面试中出现。

这部分也属于通用的能力,不管是前端后端客户端都是重点中的重点,技术更新迭代快,语言层出不穷,但是数据结构,算法,计算机原理这类的东西没有变。引用罗翔教授的一句话“天变地变,道义不变”

数组与矩阵

  • 数组中重复的数字
  • 二维数组中的查找
  • 替换空格
  • 顺时针打印矩阵
  • 第一个只出现一次的字符位置

栈队列堆

  • 用两个栈实现队列
  • 包含 min 函数的栈
  • 栈的压入、弹出序列
  • 最小的 K 个数
  • 数据流中的中位数
  • 字符流中第一个不重复的字符
  • 滑动窗口的最大值

双指针

  • 和为 S 的两个数字
  • 和为 S 的连续正数序列
  • 翻转单词顺序列
  • 左旋转字符串

链表

  • 从尾到头打印链表
  • 在 O(1) 时间内删除链表节点
  • 删除链表中重复的结点
  • 链表中倒数第 K 个结点
  • 链表中环的入口结点
  • 反转链表
  • 合并两个排序的链表
  • 复杂链表的复制
  • 两个链表的第一个公共结点

  • 重建二叉树
  • 二叉树的下一个结点
  • 树的子结构
  • 二叉树的镜像
  • 对称的二叉树
  • 从上往下打印二叉树
  • 把二叉树打印成多行
  • 按之字形顺序打印二叉树
  • 二叉搜索树的后序遍历序列
  • 二叉树中和为某一值的路径
  • 二叉搜索树与双向链表
  • 序列化二叉树
  • 二叉查找树的第 K 个结点
  • 二叉树的深度
  • 平衡二叉树
  • 树中两个节点的最低公共祖先

贪心思想

  • 剪绳子
  • 股票的最大利润

二分查找

  • 旋转数组的最小数字
  • 数字在排序数组中出现的次数

分治

  • 数值的整数次方

搜索

  • 矩阵中的路径
  • 机器人的运动范围
  • 字符串的排列

排序

  • 调整数组顺序使奇数位于偶数前面
  • 把数组排成最小的数
  • 数组中的逆序对

动态规划

  • 斐波那契数列
  • 矩形覆盖
  • 跳台阶
  • 变态跳台阶
  • 连续子数组的最大和
  • 礼物的最大价值
  • 最长不含重复字符的子字符串
  • 丑数
  • n 个骰子的点数
  • 构建乘积数组

数学

  • 数组中出现次数超过一半的数字
  • 圆圈中最后剩下的数
  • 从 1 到 n 整数中 1 出现的次数

位运算

  • 二进制中 1 的个数
  • 数组中只出现一次的数字

其它

  • 打印从 1 到最大的 n 位数
  • 正则表达式匹配
  • 表示数值的字符串
  • 数字序列中的某一位数字
  • 把数字翻译成字符串
  • 扑克牌顺子
  • 求 1+2+3+…+n
  • 不用加减乘除做加法
  • 把字符串转换成整数

这部分建议一个字“刷”,经常刷《剑指Offer》+ LeetCode,建议《剑指Offer》全部刷完,LeetCode主要是强化、开阔我们的算法思想

题外话:因为这部分被刷下来的简历不少……

学废了,堪称Android开发最全的知识体系与面试体系

Framework

Framework始终穿插在 App 整个研发生命周期中,不管是从 0 到 1 的建立阶段,还是从 1 到 N 打磨阶段,都离不开Framework

像掉帧监控,函数插桩,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

另外 Framework 作为 Android 框架层,为 App 提供了众多 API 去调用 ,但是很多机制都是 Framework 包装好了给 App 来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。

Framework 知识广泛应用在Android各个领域中,重要性显而易见。

Framework是Android开发的深水区,也是衡量一个Android程序员能力高低的标准

Binder

  • Android中进程和线程的关系,区别
  • 为何需要进行IPC,多进程通信可能会出现什么问题
  • Android中IPC方式有几种、各种方式优缺点
  • 为何新增Binder来作为主要的IPC方式
  • 什么是Binder
  • Binder的原理
  • Binder Driver 如何在内核空间中做到一次拷贝的?
  • 使用Binder进行数据传输的具体过程
  • Binder框架中ServiceManager的作用
  • 什么是AIDL
  • AIDL使用的步骤
  • AIDL支持哪些数据类型
  • AIDL的关键类,方法和工作流程
  • 如何优化多模块都使用AIDL的情况
  • 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题
  • Binder 驱动加载过程中有哪些重要的步骤
  • 系统服务与bindService启动的服务的区别
  • Activity的bindService流程
  • 不通过AIDL,手动编码来实现Binder的通信

Handler

  • Handler的实现原理
  • 子线程中能不能直接new一个Handler,为什么主线程可以
  • 主线程的Looper第一次调用loop方法,什么时候,哪个类
  • Handler导致的内存泄露原因及其解决方案
  • 一个线程可以有几个Handler,几个Looper,几个MessageQueue对象
  • Message对象创建的方式有哪些 & 区别?
  • Message.obtain()怎么维护消息池的
  • Handler 有哪些发送消息的方法
  • Handler的post与sendMessage的区别和应用场景
  • handler postDealy后消息队列有什么变化,假设先 postDelay 10s, 再postDelay 1s, 怎么处理这2条消息
  • MessageQueue是什么数据结构
  • Handler怎么做到的一个线程对应一个Looper,如何保证只有一个MessageQueue
  • ThreadLocal在Handler机制中的作用
  • HandlerThread是什么 & 好处 &原理 & 使用场景
  • IdleHandler及其使用场景
  • 消息屏障,同步屏障机制
  • 子线程能不能更新UI
  • 为什么Android系统不建议子线程访问UI
  • Android中为什么主线程不会因为Looper.loop()里的死循环卡死
  • MessageQueue#next 在没有消息的时候会阻塞,如何恢复?
  • Handler消息机制中,一个looper是如何区分多个Handler的
  • 当Activity有多个Handler的时候,怎么样区分当前消息由哪个Handler处理
  • 处理message的时候怎么知道是去哪个callback处理的
  • Looper.quit/quitSafely的区别
  • 通过Handler如何实现线程的切换
  • Handler 如何与 Looper 关联的
  • Looper 如何与 Thread 关联的
  • Looper.loop()源码
  • MessageQueue的enqueueMessage()方法如何进行线程同步的
  • MessageQueue的next()方法内部原理
  • 子线程中是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程
  • ANR和Handler的联系

系统启动

  • android系统启动流程
  • SystemServer,ServiceManager,SystemServiceManager的关系
  • 孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote
  • Zygote的IPC通信机制为什么使用socket而不采用binder

AMS

  • ActivityManagerService是什么?什么时候初始化的?有什么作用?
  • ActivityThread是什么?ApplicationThread是什么?他们的区别
  • Instrumentation是什么?和ActivityThread是什么关系?
  • ActivityManagerService和zygote进程通信是如何实现的
  • ActivityRecord、TaskRecord、ActivityStack,ActivityStackSupervisor,ProcessRecord
  • ActivityManager、ActivityManagerService、ActivityManagerNative、ActivityManagerProxy的关系
  • 手写实现简化版AMS

WMS

  • 什么是WMS
  • WMS是如何管理Window的
  • IWindowSession是什么,WindowSession的创建过程是怎样的
  • WindowToken是什么
  • WindowState是什么
  • Android窗口大概分为几种?分组原理是什么
  • Dialog的Context只能是Activity的Context,不能是Application的Context
  • App应用程序如何与SurfaceFlinger通信的
  • View 的绘制是如何把数据传递给 SurfaceFlinger 的
  • 共享内存的具体实现是什么
  • relayout是如何向SurfaceFlinger申请Surface
  • 什么是Surface

多看!多想!永远就是多看、多想,最重要的是学会看源码,而不仅仅是学会源码

给大家几个小建议:

  1. 看不懂的多读:刚开始看源码一定是晦涩难懂的,很难坚持。不过一定要强迫自己去看,看不懂的地方多读几遍,Framework的代码也是代码,不少晦涩难懂的代码如果一步一步串联起来,或者是站在整体去看,一切就都顺理成章了
  2. 不重要的少读:先站在整体读代码,这个时期所有的细节代码都是不重要的;后期可以参考大佬学习的路线,当你能懂得一部分再继续往下读的时候,慢慢就可以分辨出哪些是不重要的部分
  3. 边读边思考:一定要带着问题去阅读源码,这段代码是什么意思?为什么这里需要这么做?这样的实现优雅还是俗套?有没有更好的实现办法?如果让你来写,会怎么写?长此以往便能够形成自身的理解,而不是看网上博客人云亦云。
  4. 不是所有的都需要思考:Framework的代码也是由程序员写的,有百读不厌的精华,自然也会有不合理的地方,也会有食之无味的。我们在读源码的过程不需要对着每一段代码都问个十万个为什么。同一个问题通常有很多种解决方案,当时的设计者选择目前这种实现,有兼容问题有历史原因,还有它自己的理解,不是所有的实现在现在看来都是很好的实现,所以,追问这些问题很多时候都没有意义,不要过度解读。
  5. 记得做笔记:记下自己在现阶段自己的理解,当你更进一步的时候回头再看当初的理解,想想哪里是对的,哪里又有问题。就像是让你现在看过去自己写的代码~

这部分主要参考:

学废了,堪称Android开发最全的知识体系与面试体系

如果需要我的复习资料借鉴学习,可以顺手帮我点赞评论一下,前往公号中:Android开发之家,自行访问查阅。

性能优化

想要搞清楚性能优化,那么必须对各种底层原理有着深度的了解,对各种 case非常丰富的经验;很多朋友经常遇到措手不及的问题,大多是因为对出现问题的情况和处理思路模糊不清,导致此原因就是因为没有彻底搞懂底层原理。

像常见的启动优化、UI渲染优化、崩溃优化、内存优化、卡顿优化、存储优化、网络优化、耗电优化、多线程并发优化、安装包优化,**每一个都是深水区,**也是衡量一个程序员能力高低的标准。

在大厂面试环节,性能优化基本是必问项,你可以展示出个人实力。一旦你进入大厂,对性能优化了解越多,你能够做的事情就越多,产出也会越多,而且可以持续不断的去做。

  • 你们做了哪些稳定性方面的优化?
  • 性能稳定性是怎么做的?
  • 业务稳定性如何保障?
  • 如果发生了异常情况,怎么快速止损?
  • 启动优化是怎么做的?
  • 是怎么异步的,异步遇到问题没有?
  • 启动优化有哪些容易忽略的注意点?
  • 版本迭代导致的启动变慢有好的解决方式吗?
  • 如果提高启动速度,设计一个延迟加载框架或者 sdk 的方法和注意的问题
  • 你们内存优化项目的过程是怎么做的?
  • 你做了内存优化最大的感受是什么?
  • 如何检测所有不合理的地方?
  • 如何避免内存抖动?(代码注意事项)
  • 你在做布局优化的过程中用到了哪些工具?
  • 布局为什么会导致卡顿,你又是如何优化的?
  • 做完布局优化有哪些成果产出?
  • 你是怎么做卡顿优化的?
  • 你是怎么样自动化的获取卡顿信息?
  • 卡顿的一整套解决方案是怎么做的?
  • TextView setText 耗时的原因,对 TextView 绘制层源码的理解?
  • 优化一个列表页面的打开速度和流畅性如何做
  • APP瘦身是怎么做的?
  • 设计一个网络优化方案,针对移动端弱网环境。
  • APP电量优化是怎么做的?
  • 提高 app 安全性的方法?
  • 安卓的 app 加固如何做?
  • 安卓的混淆原理是什么
  • 为什么 WebView 加载会慢呢?
  • 如何优化自定义 View
  • FC(Force Close)什么时候会出现?
  • Java 多线程引发的性能问题,怎么解决?
  • TraceView 的实现原理,分析数据误差来源。
  • mmap + native 日志优化?

对App进行性能优化,**是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。**一个简单的应用,它不仅包含了应用代码本身,还和虚拟机、存储、网络等紧密相关,线上应用一旦出现了性能问题,需要我们从多方面去考虑。

真正的分水岭是对底层原理的理解。

这部分参考复习内容主要是:

学废了,堪称Android开发最全的知识体系与面试体系

开源库源码/原理

现在Android面试中,对于各种框架的源码都会刨根问题,从而判断候选人的技术底蕴与技术边界。但是很多开发者在日常开发过程中习惯直接CV,对各种框架的源码都没有过深入研究,甚至是常用框架都不了解原理,在面试时被一通爆锤,简历被刷就是意料之中了。

  • Okhttp源码流程,线程池

  • 说说 Okhttp 请求复用与缓存方式

  • Okhttp拦截器,addInterceptor 和 addNetworkdInterceptor区别

  • OkHttp 连接池复用原理

  • OkHttp 责任链模式如何运行的?

  • Dispatcher 分发流程

  • Retrofit核心实现原理?

  • 如果让你实现Retrofit的某些核心功能,你会考虑怎么去实现?

  • 怎么更好的处理Retrofit工具类中将拦截到401状态码?

  • 为什么用Glide,而不选择其它图片加载框架?

  • Glide怎么绑定生命周期

  • Glide缓存机制,内存缓存,磁盘缓存

  • 有看过Glide的源码吗?跟其它图片框架相比有哪些优势?

  • 假如不用开源库,需要你自己写一个图片加载框架,你会考虑哪些方面的问题,说说大概的思路。

  • LruCache原理

  • LeakCanary弱引用,源码流程

  • 介绍一下 EventBus 以及它的优点

  • 为什么要使用 EventBus 来替代广播呢?

  • EventBus 是如何做到发送粘性消息的?

  • 说下 EventBus 的原理

  • 什么是模块化

  • 什么是组件化

  • 组件化优点和方案

  • 组件独立调试

  • 组件间通信

  • Aplication动态加载

  • ARouter原理

  • 插件化的优势

  • 插件化框架对比

  • 插件化流程

  • 插件化类加载原理

  • 插件化资源加载原理

  • 插件化Activity加载原理

  • 热修复和插件化区别

  • 热修复原理

这部分参考复习内容主要是:

学废了,堪称Android开发最全的知识体系与面试体系

如果需要我的复习资料借鉴学习,可以顺手帮我点赞评论一下,前往公号中:Android开发之家,自行访问查阅。

Kotlin

经过官方主推,目前不少公司也纷纷迁移至Kotlin,也是未来的一个趋势。此前也问过不少同行,大多表示越用越香,面试时出现的频率也是越来越高。

  • 说一下使用kotlin的三大好处。
  • 解释一下extension函数。
  • kotlin中的null safety是什么意思?
  • 为什么kotlin跟Java具有互相的操作性?
  • 在kotlin中是否存在三元条件操作符?
  • 在kotlin中如何声明一个变量?
  • 在kotlin中有多少构造函数?
  • kotlin支持哪种编程类型?
  • 说一下kotlin中对Java.io.file的的扩展方法。
  • 在kotlin中如何处理null异常?
  • 有哪些特点, kotlin有,但是Java没有?
  • 解释一下kotlin中数据类的作用。
  • 我们能把Java代码转成kotlin代码吗?
  • kotlin允许macros吗?
  • 说一下kotlin类的缺省行为。
  • kotlin是否支持原始数据类型?
  • 什么是range操作符?
  • kotlin对标准的Java库和类提供额外的功能吗?
  • kotlin中的抽象有什么作用?
  • 在kotlin中如何比较两个字符串?

Flutter

可以不用,但最好要了解,跨端技术深受企业宠爱,对于降低成本提升效率有很大的帮助,之前网上有扒过Flutter的使用情况,很多大厂APP都或多或少的使用了Flutter。特定的岗位会非常重视,不过大多数情况都是作为加分项出现。

  • flutter为什么既要支持运行时编译又要支持运行前编译
  • dart传参的基本方式
  • 都了解过哪些跨平台技术并聊一下其优缺点
  • Flutter生命周期介绍
  • 说一下你了解的一些dart语法规范
  • js了解多少
  • final与const区别,
  • with关键字的作用
  • ?、??、??=三者的区别
  • 如何捕捉异常,同步异步
  • Map如何转Modal
  • stateless和stateful的区别,为什么根Widget要使用stateless,
  • 如何在启动图消失之前初始化信息
  • Provider的使用,
  • 使用GestureDetector碰到的坑
  • flutter的两种路由方式
  • 如何使用Controller调用子节点的方法
  • 动画及自定义动画
  • 如何做全局路由
  • flutter项目如何抓包
  • 聊一聊flutterboost的使用场景
  • 如何将Flutter 模块嵌入纯Native项目,及都需要注意哪些事项
  • 如何维护一个路由栈
  • 说下Widgets、RenderObjects 和 Elements的关系
  • Flutter 是如何与原生Android、iOS进行通信的?
  • 设计一个日志系统
  • flutter项目的性能优化
  • Flutter里的各种key
  • 了解过持续化集成不
  • 设计一个性能监控系统
  • flutter的通信原理
  • flutter渲染原理
  • 事件循环

C/C++/音视频

很多开发者都知道Android音视频开发这个概念,音视频开发不仅需要掌握图像、音频、视频的基础知识,并且还需要掌握如何对它们进行采集、渲染、处理、传输等一系列的开发和应用,因此,音视频开发是一门涉及到很多内容的领域。

随着5G的普及,市场对于音视频人才的需求越来越大,招聘音视频岗位薪资亦是水涨船高,大致能比同层级应用开发高出30%,也是未来一个非常有潜力的领域。

  • 列举一些音频编解码常用的实现方案。
  • 叙述MPEG视频基本码流结构
  • 叙述AMR基本码流结构
  • 预测编码的基本原理是什么
  • 常见的数字音频编码文件格式有哪些,并简述其特点
  • 说说对FFmpeng的了解
  • Android中播放视频音频的方式有哪些?
  • Android中播放网络地址视频有哪些出色的开源库?
  • 流媒体服务器了解吗?
  • 谈谈你对编码格式的理解。
  • 视频硬解码和软解码的区别?
  • MediaPlayer和SoundPool区别

Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。

这部分参考复习内容主要是:

学废了,堪称Android开发最全的知识体系与面试体系

最后

整理这些,一部分算是总结,一部分也是属于自己的学习以及巩固,马上金三银四了,兄弟们加油!

如果需要我的复习资料借鉴学习,可以顺手帮我点赞评论一下,前往公号中:Android开发之家,自行访问查阅。

上一篇:Java程序员必备的辅助开发神器(2022年版),建议收藏


下一篇:关于Android实现短信验证倒计时显示的问题