我比较了解Android这块,我就直接从Android的角度出发吧。java
至于说转管理的事,忽略了,程序员转管理确定是可取的,可是本文只从技术的角度来讲一个程序员如何作到年薪50万。(Ps:略长,相信能够给看完的朋友一点帮助)git
一个Android程序员达到年薪50万的同时,他也是一名架构师了。(这里防杠一下:月薪是月薪,年薪是年薪,月薪1w必定比年薪12w要高,缘由有:年末多薪、年终奖以及各类福利待遇等)程序员
那么,一个年薪50万的Android程序员(架构师)应该要具有哪些知识呢?面试
咱们一个一个分开来说~算法
**项目经验是程序员们最重要的财富,也是面试中必问的问题。**通常面试官都会借着项目经验来考查应聘者的沟通能力和思考能力。但实际咱们大部分的状况都是作产品的一个功能或一个模块,虽然咱们能很好的完成工做上的要求,可是对于面试这确定是不够的。对于面试来讲,咱们还要完成如下四点。编程
(Ps:**“面试造火箭,工做拧螺丝”**你们内心要有杆秤,自行衡量)小程序
Android应用是由Java语言进行开发的,SDK也是由Java语言编写,因此咱们要学习java语言。另外,虽然说kotlin语言获得了Android官方的热推,可是kotlin也是编译成了java语言再运行的。对于Android来讲,只要SDK没有用kotlin重写,那么Java语言是都须要学习的。并且Android apk的后台服务器程序大几率是java语言构建,因此学习java也是一种必然。windows
那么Java中哪些东西是咱们Android程序员须要学习的呢?因为Android程序员习惯了 C V 代码块,因此与Android中比较相关的稍微比较难的Java基础几乎都是一个门槛,像:泛型、多线程、反射、JVM、Java IO、注解、序列化等,都是被 CV 的对象,而不少程序员是不懂其原理的,具体的学习内容如图所示。微信小程序
1.泛型原理与Android网络库数据解析应用原理分析设计模式
2.无所不能的反射原理及Android类加载核心
3.Java虚拟机原理
Dalvik虚拟机与JVM的区别
4.多线程及线程池原理技能拔高
多线程与Android线程性能优化
线程在RxJava中的实战
5.Java I/O核心原理及其在Android中的内核应用
6.注解原理与dagger2/retrofit的密切关系
7.序列化与数据自动解析原理
JSON
这块知识是现今使用者最多的,咱们称之为Android 2013~2016年的技术。可是,即便是这样的技术,Android开发者也每每由于网上Copy代码习惯了而致使对这块常常“使用”的代码熟悉而又陌生:熟悉的是几乎每天在和它们打交道,每天在复制这些代码;陌生的是虽然每天和这些代码打交道,可是并无深刻研究过这些代码的原理、代码深处的内涵。因此咱们须要重新的角度去分析这些知识点,深刻研究他们,要学习源码,模仿源码,而后再hook源码,这样才能说本身懂这块的知识。
这些都是作Android开发,作高级工程师的基础。
1.职业生涯规划
2.面向Android中的一切实体(高级UI/Framework)
2.1Activity与View相关实体知识体系
2.1.1Task启动原理与调用栈内核
2.1.2ViewGroup源码解析
2.1.3View源码分析与高级自定义View项目实战
2.1.4事件分发的核心机制
2.1.5Handler通讯原理与框架手写
2.1.6Hook Resource源码实现 theme项目实战
2.2FrameWork源码
2.2.1Service内核原理
2.2.2Fragment内核
2.2.3XMS生命周期与内核管理原理
2.2.4Intent数据传输原理和内核
3.实体间的通讯方案
3.1各实体之间通讯原理与方法
3.2Apk之间通讯方案原理总结
4.实体中数据存储专题
一个app的性能好很差咱们须要从两个层面努力。
如何写出高性能的代码呢?
那就须要咱们具有深厚的代码功底,这就是代码的基础,如:数据结构达到能够根据应用场景写出符合当前场景的特殊结构,好比google针对Android平台特征研发了sparseArray替代HashMap。
另外,对经常使用的算法有本身独到的看法,leetcode上有刷个上百道题,这样差很少能够达到精通最经常使用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构若是配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。
另一个就是对写好的代码进行调优,那么调优的方向就是使用Profiler工具进行测试和检查,看哪里有性能消耗大的操做,而后分析对于代码的问题。调优的方向就变成了如何对内存调优,对耗电调优,对网络流量调优,固然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的缘由等进行分析和调优。最后再加上一个屏幕适配相机适配。
1.高性能代码编码实战
1.1难以想象的OOM
…
1.4View过渡渲染层级优化
1.5设计模式
1.6数据结构
1.7排序算法
1.8查找算法
2.用户体验及资源消耗优化
…
2.5图片库的选择
…
2.8网络优化
2.9Profiler
3.手机适配
4.代码质量调优
音视频、高清大图片、人工智能、直播、抖音等等这些年与用户最紧密,与咱们生活最相关的技术一直都在寻找最终的技术落地平台,之前是windows系统,而如今则是移动系统了,移动系统中又是以Android占比绝大部分为前提,因此Android NDK技术已是咱们必备技能了。
要学习好NDK,其中关于C/C++、jni、Linux基础都是须要学习的。除此以外,音视频的编解码技术、流媒体协议、ffmpeg这些都是音视频开发必备技能,并且OpenCV、OpenGl这些又是图像处理必备知识,这些在学习的过程当中都应该有原理级的实战项目。
1.基础开发流程
2.图像处理与热修复应用
3.音视频开发应用
4.人工智能应用
如今去不少公司面试,除了你具有基本的可以写一个高性能app的能力后,通常都会在本身的app里面加一些现有的相对较为“666”的技术(或者是“无奈本人没文化,一句卧槽走天下”的技术),这些技术咱们称之为前沿技术。他们通常包含热升级,热修复,App Instant,强制更新,组件化路由架构Arouter,RxJava,IOC架构方法,Hook技术等等。
固然,这些技术你不能只会用,你须要知道他的原理,有时候,你还须要知道如何对这些架构进行改进。
另外,很是重要的一点,不少Android开发者不肯意接受新知识,因此对于如今Google推出的新的技术方案毫无感受,这些都是被 control C 和control V所毒害的结果,开源让开发者失去了自我,失去了基本的编码能力,失去了深刻学习的信心和毅力,因此对于不少google推出的新技术、好组件(Google I/O 大会新技术)、好框架已经不肯意去学习了。这确定是不可取的,做为一个程序员若是不能不断地提高自我、自发的进阶的话,30、35这种在网上看到的别人的焦虑,也会发生在你的身上,缘由很简单,就是**“技术更替”**,老的技术渐渐被遗忘,新的技术又不会,学习能力尚未应届生强,一旦公司效益很差要裁人,你猜猜谁才是这个“幸运儿”?
1.热升级
2.热修复
3.App Instant
4.强制更新
5.组件化框架设计
6.图片加载框架设计
7.网络访问框架设计
8.RXJava响应式编程框架设计
9.IOC架构设计
10.Google I/O大会最新技术及技术更新
11.Hook技术
架构师不是天生的,是在项目中磨练起来的,因此,咱们学了技术就须要结合项目进行实战训练,那么在Android里面最经常使用的架构无外乎 MVC,MVP,MVVM,可是这些思想若是和模块化,层次化,组件化混和在一块儿,那就不是一件那么简单的事了,咱们须要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。
“工欲善其事必先利其器”
如何提升开发的效率?
不少开发者在开发的过程当中因为gradle不会用致使加载代码很是耗时,这些就是工做成本。
还有就是git的使用能够帮咱们管理好咱们的代码,这个很是关键,由于这个工具可让咱们修改的代码不会由于错误的操做而致使代码丢失。
另外,做为移动开发者,咱们至少须要知道如何抓取网络包吧,其中,最经常使用的stetho就是一个很好的能够进行网络抓包的工具。
移动架构师不可不学习微信小程序。
1.小程序介绍
2.UI开发
3.API操做
4.微信对接
5.任务清单项目
6.电影榜单项目
7.本地生活项目
8.购物商场项目
混合开发的flutter如今已经逐渐变成了主流的混合开发框架,另外因为阿里系的强大存在,致使阿里系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向将来必不可少的基本技能。
1.Html5项目实战
2.Flutter
2.1你好,Flutter
2.2Flutter编码语言Dart详解系列
2.3Flutter框架原理与使用技巧
2.4Flutter架构知识落地实现
漫漫开发之路,咱们只是其中的一小部分……只有不断的学习、进阶,才是咱们的出路!才跟得上时代的进步!
我作事不喜欢光说不练,既然指出了年薪50万的程序员要会这些知识,那我也把个人一些库存都分享给你们。
我从事Android开发十多年了,今年年初我花两个月的时间收录整理了一套知识体系,包括移动开发高级架构技术脑图、架构学习视频和面试专题文档,有想法深刻的系统化的去学习的,能够加入Android开发交流群(820198451),我会把我收录整理的资料都送给你们,帮助你们更快的进阶。
上述的图片都来自于**《移动开发高级架构技术脑图》**想要这个能够另外说明清楚
Android架构师之路很漫长,一块儿共勉吧!