Android 架构师成长之路,如何成为一名 Android 架构师?
其实倒挂的现象确实存在,一般有两种情况:
一种是应届生倒挂,这个一般可以归因于每一年大厂对外录取新同学的基本薪资可能有所变化。
而一年的时间,也很难有涨薪的情况,所以可能会出现例如:在相同水平线的情况下,16 年入职的新同学,没有 17 年入职的同学薪资高。
还有一种情况在于,同一级别下,老员工没有跳槽过来的员工薪资高,这个主要是跳槽 buff 加成。
“互联网大年”或者“跳槽 buff”确实能够让一些同学尝到一点甜头。
但是跳槽这种事,需要足够年限的间隔,以及个人技术水平的跨越,如果你不注意这两点很可能适得其反。
所以完美的解法应该是在尽可能短的时间内,去不断提升个人的技术水平。
例如现在 Android 新技术非常多,这些新技术的发展,对于我们来说既是机会,也是挑战。不断学习新知识是不可避免的,不过更重要的是需要确立自己未来的发展方向以及提升自身竞争力。
对于移动端研发来说,长期的职位发展一般为:
初级研发工程师
->高级研发工程师
->资深研发工程师
->技术专家/架构师/技术经理
->…
大多数情况下,在大厂到了技术专家/架构师这个级别就已经非常厉害了。
那么话说回来,什么是架构师?成为一名优秀的移动端架构师又需要具备哪些能力呢?
架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。
要想成为一名优秀的移动端架构师,不仅要有硬技能,还要有软技能。
作为一名普通研发,又该如何迅速逆袭成为移动端架构师呢?
通常来说至少需要掌握下面这些技术:
======================================================================
Android 以 Java 语言为基础,以虚拟机为核心,经过 Daivlk 虚拟机再到 Art 虚拟机演变,所以需要学两大底层:一个是 Java 语言底层,一个是虚拟机底层
Java 底层涵盖:Java 序列化、泛型与反射、JDK 高级动态代理、 Java 高级并发原理详解。
虚拟机底层涵盖:虚拟机层类加载机制、Android 虚拟机原理剖析、dex 运行机制,Android 内存,高级数据结构与算法
Android 应用是在虚拟机上运行的,如果不清楚虚拟机的底层原理,我们将很难理解 APP 的运行过程,同时 Android 也是由 java 语言开发的。
那么 Java 中哪些东西是我们 Android 程序员需要学习的呢?
由于很多 Android 程序员习惯了 C V 代码块,所以与 Android 中比较相关的稍微比较难的 Java 基础几乎都是一个门槛,像泛型原理、多线程底层、反射、虚拟机、注解、序列化等
面试过程中:BATJ 这些大公司都要求有扎实的 Java 语言基础和虚拟机底层原理,这一个部分就是 Android 开发中最常用的 java 语言相关知识。在这个部分里面,结合了 Dex 文件加密实战和热修复实战可以让大家深刻体会 Java 语言体系的重要性以及在 Android 开发中的地位
====================================================================================
在 Android 中,Framework 泛指系统架构层。Framework 的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常 Framework 都会隐藏 main 函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework 具体的工作也就是为 Android 应用开发的开发人员提供了一系列的服务和 API 的接口。
UI 其实并不是单纯指用户看到的效果。因为在 Android 开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会 UI 不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从 Activity 的创建,XML 的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等
知识点。还有谷歌提供的一些 UI 框架也是我们要掌握的对象,比如 Jetpack 组件库、Material Design 等。
=======================================================================
**性能优化是一个项目必须要经历的过程,你的应用好与坏都是在用户使用的过程中反映出来的,如果性能优化没有做好,对于你的应用来说影响是非常大的。**尤其是现在的 Android 市场竞争非常激烈,如果你的应用体验没有竞品的好,那么用户流失是必然的。
性能优化不是一件简单的事情,每个应用的性能好与坏无法由一个人来决定,因为性能优化的维度有太多了,从我们项目的整体架构,到我们代码的每一个细节,再到应用使用环境的测试,只有步步为营,才能做好一个项目的优化。大部分开发者把性能优化指向与不闪退就行,但是实际上性能优化包含了很多方面,比如从简单的启动优化、 UI 优化、 卡顿优化、 崩溃优化、 安全性优化,到深层次的弱网优化、 大图加载优化、 储存优化、 高效传输优化、 极限瘦身优化,再到实际开发过程中的 OOM 问题原理解析、 ANR 问题解析、 Crash 监控方案。
要想把这些优化流程做好,我们不仅从项目架构、代码规范等方面入手,还要学会利用第三方的检测工具来检测项目性能,最主要是,我们需要一套完整的性能优化方案,这正是我们所缺少的,所以我们必须要把缺少的补上, 打造一套真正的完整的性能优化体系,把性能优化流程化、常态化。
========================================================================
为什么现在各大企业都需要 NDK 优先?以 NDK 开发作为人才筛选条件之一?就在于 NDK 具有不可替代性。
这里并不是说某些功能只能使用 C/C++实现,就比如音视频开发,实现相关的音视频数据的编解码,其实就是进行字节操作使用算法进行数据压缩,难道就不能用 Java 实现吗?其实是可以的。但是 java 是需要虚拟机解释执行的字节码,而不是能够直接执行的机器码。因此针对这种非常庞大密集的计算,性能就完全比不上 C/C++了。使用 java 开发的功能执行可能耗时太久,甚至都无法忍受。这也是为什么关于音视频的编解码算法的实现都是使用 C/C++。
从未来的大趋势来看,随着 5G 时代的到来,音视频慢慢变成人们日常生活中的必需品。除了在线教育、音视频会议、即时通讯这些必须使用音视频技术的产品外,其它的产品也需要加入音频、视频元素。
评论