不断地也听见不少人在谈作Android是否还有前途、Android研发在走下坡路了、Android的工做太难找了,对于这些其实个人见解很简单,如今真的还没到说Android开发已经无路可走的地步,固然将来怎样我没法预判。前端
如今各大公司其实都很缺Android研发(中高级),不断的在招人,就拿不少一线互联网来讲,别说来面试的人了,就简历都拿不到太多,须要花不少时间去找简历。linux
因此,对于有Android开发经验的同窗,更多应该想一想怎么往深探索,而不是一味想着换方向,无论换到哪一个方向,都会面对从初级到高级到资深再到专家的时间点。因此我认为正确的职业规划应该是金字塔形,核心竞争力必定要扎实!android
对于如今的Android及移动互联网来讲,咱们须要掌握的技术,我作了一个清单:ios
泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶注解原理丶序列化 Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等) 代码框架结构优化(数据结构丶排序算法丶设计模式) APP性能优化(用户体验优化丶适配丶代码调优) 热修复丶热升级丶Hook技术丶IOC架构设计 NDK(c编程丶C++丶JNI丶LINUX) 如何提升开发效率? MVC丶MVP丶MVVM 微信小程序 Hybrid Flutterc++
1.数据结构和算法git
数据结构和算法实际上是分开的东西,咱们须要先掌握各类数据结构,再去加深算法,数据结构和算法其实也属于基础,可是它如今愈来愈重要,因此我就单独拿出来讲了。程序员
数据结构怎么深刻一样我也推荐你们去看清华或者浙大《数据结构》公开课,特别是清华的,值得反复研究。面试
至于算法,首先要作的就是动手,LeetCode上直接干!算法
第二阶段就是要总结各类算法的思想和套路,像递归、动态规划等这些算法都是有套路的,在LeetCode上也有按数据结构和算法分类的筛选,你们能够针对性练习和总结。编程
固然,对于一个Android程序员,能作到天天在LeetCode上刷题就很是不错了,因此必定要坚持,等你坚持到必定的时间,你会发现你愈来愈游刃有余,我从18年末开始在LeetCode上刷题,目前已经刷了200多道了,小米的面试也很是注重算法,还要能写。
并且对一些特别注重算法的公司,算法这块的考核很是严苛,对,就是严苛,而不是严格。
2.设计模式
设计模式中包括了设计原则,其实对于Android开发人员来讲,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,通常面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深刻了解和使用,它的优缺点,因此,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。
例如建造者模式,Andoird中的Dialog建立就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中很是经常使用的设计模式,也是在面试中出现频率很高的。
3.语言学习开发语言
Android应用是由Java语音进行开发的,SDK也是由Java语言编写的,因此咱们要学习Java语言。另外,虽说Kotlin语言也获得Android官方的热推,可是Kotlin也是编译成了Java语言在运行的。对于Android开发来讲。
只要SDK没有用Kotlin重写,那么Java语言都是须要学习的。并且Android apk的后台服务器程序大几率是Java语言构建,因此学习Java是一个必然。
那么Java中那些东西是咱们Android中比较相关的稍微比较难的Java基础几乎是一个门槛,像泛型丶多线程丶反射丶JVM丶JavaIO丶注解丶序列化等等。
4.APP开发框架知识
这块知识是现今使用者最多的,咱们称之为Android2013-2016年的技术。可是,即便是这样的技术,不少开发者也每每由于网上不少copy代码的习惯而致使对这块的使用的代码熟悉而陌生,熟悉的是每天和它们打交道每天在复制,陌生的是每天打交道却没有深刻研究过他们,要学习源码,模仿源码,而后在hook源码,这样才能说懂这块的知识。
5.App性能优化
一个app的性能好很差咱们须要从两个层面分析:
一、从写代码的时候就注意,让本身的代码是高性能高可用的代码,这个过程是书写高性能代码
二、对已经成型的代码经过工具检测代码问题,经过检查到问题来指导咱们进行代码的删改这个过程被称为调优
这里提供一份性能优化方面的学习思路给你们:
那如何写出高性能的代码呢?
须要咱们具有深厚的代码功底,这就是代码的基础,如:数据结构达到能够根据应用场景写出符合当前场景的特殊结构,好比google针对Android平台特征研发了SparseArray代替HashMap.另外,对经常使用的算法也有本身独到的看法
6.NDK模块开发
音视频丶高清大图片丶人工智能丶抖音直播等这些年与用户紧密相关,与咱们生活最相关的技术一直都在寻找最终的技术落地平台,之前是Windows系统,而如今是移动系统了。而移动系统中Android比例又是最大的。因此NDK能够说是必备要学习的,除此以外,音视频的编解码技术流媒体协议,ffmepeg,c,c++,JNI,linux都是音视频开发必备技能。并且OpenCV \OpenGI这些又是图像处理必备。
关于NDK模块开发的学习思路:
7.如何提升开发效率?
工欲善其事必先利其器,如何提升开发效率,不少开发者在开发中因为gradle不会用致使加载代码很是耗时,这些都是你的工做成本的浪费。还有就是git的使用也能够帮助咱们管理好咱们的代码,这个很是关键,由于这个工具可让咱们修改的代码不会由于错误操做而致使丢失。另外,对移动开发者咱们至少须要知道如何抓取网络包。其中,最经常使用的stetho就是一个很是好用的能够抓取网络包的工具。
8.混合开发
混合开发的flutter如今已经逐渐成了主流的混合开发框架,另外因为阿里系的强大存在,致使阿里系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向将来必不可少的基本技能的。
Flutter学习思惟导图:
跟不少人同样,刚毕业时我以为做为程序员,只要努力,加上少量天赋即可以得到一些成绩。
工做一段时间后,对本身和其余人的认识也愈来愈清晰,逐渐的发现程序员之间的差距或许比人和猴子之间的差距还大,接受这个事实这让我郁闷了好久。
再过一段时间,发现本身已经可以客观的评价本身的能力,也意识到了距离并非那么重要,只要想办法跑的更快,就足够了。
不论遇到什么困难,都不该该成为咱们放弃的理由!
不少人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,好比学了一段时间感受没有方向感, 我的认为android开发者在两到三年后会出现这种现象.缘由和下述基本一致:
不过你们能够参考上面的建议,或者走音视频,高级Android开发工程师,或者转向后台,前端开发,时代在演进,咱们也去多思考下,为咱们的未来作计划!
感谢你们能耐着性子,看完我啰哩啰嗦的文章。
愿与各位坚守在Android开发岗位的同胞们互相交流学习,共同进步!
在这里我也分享一份本身收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助你们学习提高进阶,也节省你们在网上搜索资料的时间来学习,也能够分享给身边好友一块儿学习
若是你有须要的话,能够点赞+评论,关注我