本文作者
作者: Future
前段时间,公司入职了一个安卓工程师,说是工作3年多了。 吃饭的时候经常听到其他同事吐槽那个人太菜了。 我心想,能有多菜,总不至于基本工作都做不了吧?
最近他被调到了我们小组,负责接手某个app的后续开发。那个app已经是个半成品,按理说,不出半个月肯定做完了。
可是每天看他愁眉苦脸的鼓捣,也不知道做的咋样了。
某天 中午 他趁着大家都出去吃饭,让我帮他看看。我一看,这个项目基本没什么进展啊,反而漏洞百出。装上这个应用之后,十分卡顿,随便点点,就有三个地方报错了,经常使用一段时间就莫名其妙的闪退,而且时不时跳出应用异常,建议卸载的提示。一登录就三处报错,什么鬼???一进行检查,发现里面有大量的内存泄漏和内存抖动问题。
我问他你不是工作3年了吗?怎么能做成这个样子?
他支支吾吾半天,才说自己是自学了3年。我问他Java掌握的怎么样?他说,做andriod还要掌握Java吗?
我震惊了!这TM怎么通过面试的???
刚好老板路过,我正准备抱怨一番。没想到他先开口了:“二舅,一起去吃饭吗?”
老板笑着和他一起走了,只剩下我在风中凌乱…
本故事纯属虚构,如有雷同,可能是巧合吧。
Android应用程序开发是以Java语言为基础的 (kotlin也是对java的封装) ,你做Android开发的时候经常遇到的各种问题,其实都是因为java基础没打好,其中最重要的无疑是 JVM !Java本身有一个很好的管理内存的机制—— GC。然而,GC却经常会遇到无法回收的内存,即内存泄漏,内存抖动,结果可能是OOM。
我们普通开发涉及不到JVM,然而App性能与它有着千丝万缕的联系,每个App都会有自己的art虚拟机,甚至每一个进程都是有自己独立的虚拟机,内存的回收是由虚拟机管理的,GC回收算法,adj内存管理, 这一切都基于虚拟机 。
然而很多半路出家、甚至科班出身、工作好几年的安卓开 发者,对JVM的核心原理并不了解。这些大厂关于JVM的面试题,你能不能答上来?
1.为什么栈区中需要程序计数器?
2.虚拟机栈主要由哪些部分组成,他们的作用分别是?
3.内存抖动发生的根本原因是?
4.为什么GC会造成APP运行过程中会出现卡顿?
5. 如何判断对象应该被回收?
6.为什么Surivor区是两块内存空间?
7.请问如何用插桩技术实现用户行为统计?
为了帮助大家深刻理解JVM核心原理和面试相关知识,我特邀前东芝资深架构师Jett与前爱奇艺高级工程师Lance老师为大家带来 《 JV M核心原理与性能优化技术实战》 系列直播分享,带你 深度掌握JVM核心原理,通过实战字节码插桩技术,掌握大厂项目开发中必用的实战内存优化技术 ,很适合想要稳固自己基础,渴望突破自己的安卓开发者。
在线实时答疑,让你将JVM核心知识、面试题一网打尽!
《 JV M核心原理与性能优化技术实战 》
前东芝、东方集团资深架构师,有16年项目开发经验,熟悉汇编,java,c/c++开发语言;
专精领域: 对系统底层,web开发和移动端开发有较深入研究。
Lance老师:
某游戏公司主程,前爱奇艺高级工程师;
专精领域: 移动平台开发,NDK、架构、性能优化;
课程 大纲
7.14
1.运行时数据区栈区详解
2.class字节码运行过程分析
3.栈原理实战字节码插桩
4.插桩技术实现性能监控
7.15
1.运行时数据区堆区详解
2.市场常用内存工具使用 (profile,MAT等)
3.内存泄漏与内存抖动分析技术
▲附赠安卓开发必备资料、JVM图谱 (xmind格式)
扫码添加月亮小姐姐报名
如遇扫码受限,请添加微信: xxkt-moon
“你见过最菜的安卓工程师啥样?”