谁都想升职加薪进大厂,谁也都希望自己开发的app极致的流畅和顺滑~
很多半路出家,甚至科班出身、工作好几年的Android开发在面试的时候会遇到很多基础能力方面的面试,面试内容往往离不开Java语言本身,比如 JVM、并发 就是面试必问的地方...
虽然普通开发涉及不到JVM,但App性能与它有着千丝万缕的联系,每个App都会有自己的art虚拟机,甚至每一个进程都是有自己独立的虚拟机,内存的回收是由虚拟机来管理的,GC回收算法怎样,adj内存管理,这一切都基于虚拟机,虚拟机自然就变成大厂面试的香饽饽了。
JVM将运行时数据区分为线程私有和共享数据区两大类。其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含 Java 堆、方法区,在方法区内有一个常量池。
内存泄露就是系统回收不了那些分配出去但是又不使用的内存, 形象点的比喻就像是水龙头没有拧紧,漏水了。
内存泄露分为常发性内存泄漏,偶发性内存泄漏,一次性内存泄漏,隐式内存泄漏。
其中要数隐式内存泄漏危害性最大,因为较之于常发性和偶发性内存泄漏更难被检测到。内存泄漏的堆积,将会消耗系统所有的内存!
要想避免出现这些问题,我们必须要熟悉JVM!
之前提到的并发编程也是属于高级工程师所必会的技术,我们平时开发中用得非常少,在大厂面试中却必问,这是为什么呢?
事实上,并发编程是一项非常重要的技术,虽然并发出问题是小概率事件,可一但出现问题,就非常恶心人,App直接crash都有可能发生……
我们平时项目中使用的各种技术,如okhttp、retrofit、glide、rxjava、aroute等,都由框架的设计人员把这些问题都考虑在内了,以至于普通开发人员并不关心这项技术。
但在一线大厂,公司的内部框架往往都是需要高工们和架构师们自已进行维护和扩展的,这时就显现出并发编程的重要性,一个不会并发的程序员,是不可能担任重要技术职位的。
而且,通过并发编程还有以下几点好处: