ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-20 22:06:03  阅读:162  来源: 互联网

标签:体系 区别 学废 如何 Activity 原理 Android 优化


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

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

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

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

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

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

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

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

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基础以及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开发之家,自行访问查阅。

数据结构与算法

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

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

数组与矩阵

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

栈队列堆

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

双指针

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

链表

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

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

贪心思想

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

二分查找

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

分治

  • 数值的整数次方

搜索

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

排序

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

动态规划

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

数学

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

位运算

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

其它

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

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

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

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开发之家,自行访问查阅。

性能优化

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

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

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

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

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

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

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

开源库源码/原理

现在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开发之家,自行访问查阅。

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开发之家,自行访问查阅。

标签:体系,区别,学废,如何,Activity,原理,Android,优化
来源: https://blog.csdn.net/River_ly/article/details/123036591

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有