安卓 rxjava 面试,面试一路绿灯 Offer 拿到手软,吊打面试官系列!
前言
九月裸辞从长沙跑到上海,跑了一个月的面试,本月中旬终于拿到了爱奇艺的高级工程师 offer。
做 Android 开发整 4 年有余,但是这一年才是最充实的,我花一年时间努力,送给了自己一个完美的蜕变!
寒冬裁员潮给我的危机感
我普通本科毕业,在长沙待了四年,其中只换过两家公司。去年这个时候,公司业绩不好要裁人。主管平时跟我关系比较好,说我本来也在被裁的考率名额中的,他帮我跟领导说了一堆好话才没事。我请主管吃了一顿火锅。
但是我无法像以前那么心安理得混日子了。因为我去年首付买了房。原本想着每个月稳定税后拿个 8k 的工资。挺满足的(8k 在长沙算中高水平了)
想不到我要求这么低还差点被淘汰了??
内存泄漏是什么?
内存泄漏即 ML (Memory Leak)
指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象
内存泄漏有哪些情况,对应的解决方案?
内存泄漏的原因归根到底就是当需要被回收变量的内存被其他变量引用持有,导致内存回收失败
常见的原因有:
1.非静态内部类/匿名类
原因 1:
非静态内部类/匿名类 Handler
持有外部的Activity/Fragment
对象的引用,导致Activity/Fragemnt
被销毁的时候没有被回收解决方案:
将 Handler 类改为静态内部类 + 弱引用(
WeakReference
)持有Activity
引用(静态类默认不持有外部的引用)当外部类(一般是
Activity/Fragment
)结束生命周期时,清空 Handler 队列原因 2:
非静态内部类的实例(对象)
=静态实例
(其生命周期 = 应用的生命周期)解决方案:
将该类改为静态类(静态类默认不持有外部的引用)
将该类抽出来封装成为一个单例
原因 3:多线程 工作线程正在处理任务时外部类需要销毁,此时工作线程持有外部类的引用导致无法被回收
解决方案:
将该线程类类改为静态类(静态类默认不持有外部的引用)
当外部类结束生命周期时强制结束线程
2.集合类
原因:集合类添加元素之后持有集合元素的引用,导致该集合元素不可被回收,导致内存泄漏
解决方案:
集合类使用完元素对象后,必须将该元素从集合中删除(由于一个集合中有多个元素,所以最简单的方案就是清空集合对象(clean)&设置为 Null)
3.资源对象使用后未关闭
原因:资源对象使用后未关闭,在 Activity/Fragemnt 销毁时没有关闭/注销这些资源,将导致无法回收 例如:
广播BraodcastReceiver
、文件流Fire
、图片资源Bitmap
、数据库游标
等解决方案:
Activity
销毁时及时关闭/注销资源
4.Static 关键字修饰成员变量
原因:Static 关键字修饰成员变量的生命周期 = 应用的生命周期 例如
private static Context mContext = context
那么 context 上下文对应的Activity
则无法被回收解决方案:
尽量不要使用 Static 成员变量引用,使用弱引用代替强引用
使用单例模式
4.其他使用
原因 1:Context:当拥有
Activity context
的引用的对象仍在使用,则该Activity
需要销毁时无法回收解决方案:
对
context
的引用不要超过它的生命周期使用
ApplicationContext
代替原因 2:WebView:不再使用 WebView 对象后没有及时销毁,导致内存占用
解决方案:
通过多线程对不再使用的
WebView
对象进行销毁原因 3:Adapter:滑动 ListView、RecycleView 获取新 View 时 都在 getView()中重新实例化一个 View 对象,浪费资源,使内存占用越来越大
解决方案:
使用缓存的
convertView
直接使用
ViewHolder
要如何成为 Android 架构师?
搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的 Android 架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;
对应这份技术大纲,我也整理了一套 Android 高级架构师完整系列的视频教程,主要针对 3-5 年 Android 开发经验以上,需要往高级架构师层次学习提升的同学,点击这里腾讯文档免费分享,希望能帮你突破瓶颈,跳槽进大厂;
最后我必须强调几点:
1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识 3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪 40W 一定不是终点,技术无止境
评论