背景
作为一个资历不浅的Android开发,这几年我面试过不少人。发现大多数面试者,虽然看起来工作努力,但他们表现出来的能力水平,却不足以通过面试,或拿不到期望的薪资。
在我看来,造成这种情况的原因,主要有这么两方面:
第一,“知其然不知其所以然”。做了几年技术,开发了一些业务应用,但没有思考过这些技术选择背后的逻辑。所以,我很难定位他们日后的成长潜力,也不会放心把有一定深度的任务交给他们。
第二,知识碎片化,不成系统。事实上,当面试者无法完整、清晰地描述自己所开发的系统或使用的相关技术时,面试官就会怀疑他是否具备解决复杂问题、设计复杂系统的能力。
所以,如果你平时只知道埋头苦干,或过于死磕某个实现细节,没有抬头审视过这些技术,那么在准备面试时,很有必要好好梳理一下 Android 知识体系,这样才能拿下满意的 Offer。
那么,作为Android 开发者,该怎样规划自己的学习路线,然后一步一个脚印的向中高级进阶呢?本篇文章根据自己的一些见解梳理一下。
Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?
我发现好多人始终停留在两三年的水平上没有突破。
那么为什么很多人会一直停留在两三年的水平上,而后一直在重复以往的经验?
我认为最主要的一点就是主观能动性,或者说兴趣,如果你对Android开发没有太大的兴趣,那么还是尽早换方向吧。有了兴趣,然后就是要有一个比较正确的钻研路线,不要这也搞那也抓,最后什么都没精通又好像什么知道。
我觉得一个比较好的路线是,把日常开发常用的各种系统库,开源库,代码好好研究一遍,比如我用了butternife就要了解背后的apt,以及apt衍生出来的一系列库比如Hugo。当然这大部分情况是初级进阶的第一步。这个阶段应该是尽量很好的用技术完成业务需求。
第二个阶段,我觉得可以尝试去了解Android Framework比较细节的一些东西,比如activity启动流程,顺便分析清除Activity stack的管理,比如了解Android的资源加载机制,顺便了解aapt是如何打包Android资源的;又比如Java的类加载机制,这里配合资源的加载机制,很自然的就可以去了解Android的hotpatch机制,插件化的实现,开一些这方便的开源库或者自己撸一个也就自然而然。
第三个阶段,横向扩展,到这个阶段并不是说比第二个阶段更加高级了,而是对第二个阶段的一些补充,比如你是不是可以了解一下web开发,这样做hybrid开发的时候就会更顺手。是不是要了解一下这么火爆的ReactNative&Weex技术,甚至可以把他们的一些思想拿过来自己用,比如我司内部就有很多项目是用了JSCore和CssLayout来实现一些更轻量的动态化技术的。正如科学领域很多重大贡献都是在交叉学科领域出现的。技术上到了这个阶段甚至可以做到技术影响业务,技术驱动业务。
不要学得太杂太乱!学习Android开发只要记住这几点!
我也已经做了好几年开发了,还记得刚出来工作的时候觉得自己很牛逼,现在回想起来也蛮好笑的。懂的越多的时候你才会发现懂的越少。因为如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。
最近看到很多Android新手问Android学习路线,学习方法啊,如何入门啊,所以我以我的工作经验给大家总结一下,让大家少走弯路,提取一些工作中经常用到的技术。当然,说一千道一万,最重要的还是学以致用,把学过的知识融会贯通。
如何知道我需要学什么
相信大家在觉得迷茫的时候,经常会选择自暴自弃、或者完全按照自己的喜好去学习,这是有利有弊的,总体来说弊大于利。我一直认同一个观点,就是“你的认知比你的知识更加重要”,换句话说,也就是“你知道你需要去学什么,比你所学的知识更加重要”,如何知道自己缺乏什么,应该去学习哪些技能,这才是从思维上、思想上改变你对学习的态度!
如何知道自己应该具备哪些技能呢?或者说,我自己还缺乏哪些技能呢?
这个问题一直是困扰着很多人,解答这个问题其实很简单,这个问题的回答,往往离不开行业的最新动态:从下面培训机构的培训清单、招聘信息的招聘要求就可以看出来。下面先介绍如何从培训机构的培训清单开出行业的动态。
培训机构一直是互联网行业的风向标,培训机构的嗅觉是十分敏锐的,他们必须关注行业的最新技术方向、最新技术。所以,在一定程度上面,虽然我们大多数人都挺抵触培训机构,但是培训机构的培训清单可以作为我们学习的风向标、学习清单!
例子1:(介绍一下往高级Android开发工程师进阶需要具备的哪些知识)
- 架构师筑基必备技能:深入Java泛型 注解深入浅出 并发编程 数据传输与序列化 Java虚拟机原理 反射与类加载 动态代理 高效IO
- Android高级UI与FrameWork源码:高级UI晋升 Framework内核解析 Android组件内核 数据持久化
- 360°全方面性能调优:设计思想与代码质量优化 程序性能优化 开发效率优化
- 解读开源框架设计思想:热修复设计 插件化框架解读 组件化框架设计 图片加载框架 网络访问框架设计 RXJava响应式编程框架设计 IOC架构设计 Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系 底层图片处理 音视频开发
- 微信小程序:小程序介绍 UI开发 API操作 微信对接
- Hybrid 开发与Flutter:Html5项目实战 Flutter进阶
其实这个培训清单我个人觉得是目前来说总结得比较好的Android进阶资料。基本涵盖了各种企业开发必备的新技术:RN、异步操作RXJava库、热修复、插件化、设计模式、性能优化等知识。这些其实都是我们学习的方向标,按照这些清单,自己去找各种资料学习。
其实对于Android基础的话,不外乎四大组件的基本使用、UI控件、布局的使用、版本控制工具、NDK基础等等。
当然随着Android技术的日新月异,Android开发对开发人员的基础知识的要求就更上一层楼了,比如说:动态权限管理、Kotlin基础、Gradle基础、AndroidStudio基本使用等等。
例子2:(从招聘信息上了解目前互联网大厂需要学习的一些热门技术)
我一直都强调要多看招聘信息,虽然我们不一定要找工作,但是按照企业的招聘要求,一定程度上也可以知道我们需要什么,并且同时可以知道,越高级的Android开发有什么更高的要求。
我们常见的招聘网站有:智联招聘、拉勾网、boss直聘等,这里大家手机上安装一个对应的APP,吃饭或者上班路上没事可以翻一翻。那么如何通过招聘信息获取我们需要什么呢?那么就需要我们仔细分析下面几份招聘信息。
大家第一时间关注的肯定是薪水问题,20K到50K,可以看到,这是一份相对来说比较高级Android开发工程师的招聘信息,根据上面的要求,其实我们可以知道更多。
一般人可能会觉得这是一份很普通的招聘要求,但是在我的角度来看,可以看出很多有用的信息,下面我带着大家来分析解读一下这份招聘要求吧。
1. Android底层的机制的熟悉,关于这个问题,其实在这里我并不想谈论太多,因为本系列文章的后续我会专门有一篇文章讲这个怎么去学习。一句话总结就是,熟悉Android底层机制,或者说Android源码,对上层应用的编程开发是有很多好处的,例如写出高可复用性、高效率、高质量的代码。其中,面试常问的源码分析有消息机制、四大组件、进程间通信、WMS、PMS等等。
2. 各种架构设计能力,这就需要大家多去学习设计模式、各种软件架构、设计思想上的东西,例如MVC、MVP、MVVM、重构、代码规范等等。
3. 在一般的互联网公司,网络通信是最重要的,因此我们就有必要掌握基本的Socket编程、各种网络请求框架,比如Retrofit2等等,进阶的话,就需要自己去研究分析这些框架的源码、自己动手用组件化的思想去封装这些框架,防止代码的侵入性等等。
4. 新技术的调研与学习,企业需要的是在尽量少的时间,开发出最优秀的产品,因此新技术是必不可少的。因此我们也需要保持不断学习充实自己的习惯。这里提到“研究新技术”,既然是研究,那么公司为了减少大家的学习成本,肯定是需要你将研究的成功通过文档的形式输出,以方便其他员工的快速上手,因此这里隐含了文档的输出能力。
5. 经验,关于这个也没有什么好说的,很多东西,如果你遇到过就有经验了,处理起来就比较快了。但是有一些难题你从来没有遇到过,那么难度就是无限大的,经验需要一点一滴地积累,多向大牛取经往往是实现弯道超车的最好办法。
6. 成熟项目的工作经验,这是作为应聘者一个最有闪光点的地方,也是在校生校招的一个最有说服力的点。当然,除了在公司工作,也推荐大家去一些培训网站上面学习一些项目的实战视频教程,这也是一种快速学习的方法,但是学习完一定要加以总结,最好以文档、博客的方式进行输出,并保持分享,互相交流才能知道自己的错误、不足,才能获取更多技术,进步更加快。
7. 性能优化,这是面试常见的问题。性能优化跟一个APP的用户体验息息相关,很多公司都十分重视这方面的知识。
为什么高级程序员不必担心自己的技术过时?
程序员是吃青春饭的吗?等我们老了,技术过时了,公司有什么理由不裁掉我们,去雇一些既有活力、薪资要求又低的年轻人呢?这个老生常谈的问题困扰着诸多渐入中年的程序员。接下来讲解教你如何增强自己的核心竞争力,在知识飞速更新的行业中站稳脚跟,跨过“初级工程师”和“高级工程师”之间的鸿沟。
我认为开发者中有很多我们不太重视的软技能,这些软技能都有可能成倍地增加我们工作的影响力(作为个人贡献者和技术负责人)。这些软技能包括:
- 代码审查礼节;
- 如何优雅地遏制范围蔓延;
- 如何向其他部门直观的方式解释高科技问题;
- 如何在生产任务爆满和日以继夜的比赛中保持镇定自若等。
作为一名程序员 ,编码硬实力固然很重要,但是这些软技能也同样重要,这决定着你的核心竞争力的强弱。
高级开发者,会在工作中解决问题,而非制造问题。
他们减少压力。他们按时完成任务。他们知道如何编写经得起时间考验、可维护的代码。他们值得更高的工资。他们对项目的方向可以有准确的把控。他们可以发现当前流程中的缺陷,并使每个人都接受他们的想法以进行改进。他们可以指导应届毕业生。他们处事冷静,不会在周二与你的最大客户的电话会议上情绪崩溃、破口大骂。
Android学习的方向
学习一线大厂的各项技术:
大厂是我们的技术先驱,不仅仅是各种技术,还有很多令你大开眼界的使用方法,学习这些有利于自己竞争力的提高,深入理解后也可以提升你的学习效率。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
1.2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码
2.Jetpack架构组件从入门到精通
- Android Jetpack - Navigation
- Android Jetpack - Data Binding
- Android Jetpack - ViewModel & LiveData
- Android Jetpack - Room
- Android Jetpack - Paging
- Android Jetpack - WorkManger
- Android Jetpack架构组件之Lifecycle
- Android Jetpack Compose 最全上手指南
3.Framework精编内核解析
主要内容包含:
- 深入解析Binder
- 深入解析Handler
- Dalvik VM 进程系统
- 深入解析 WMS
- PackagerManagerService
4.Kotlin强化实战(附Demo)
- 第一章 Kotlin入门教程
- 第二章 Kotlin 实战避坑指南
- 第三章 项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程:suspend
5.Android设计思想解读开源框架
- 热修复
- 插件化
- 组件化框架设计
- 图片加载框架
- 网络请求框架
- RXJava 响应式编程框架设计
- IOC 架构设计
- Android架构组件Jetpack
6.NDK模块开发
- NDK 模块开发
- JNI 模块
- Native 开发工具
- Linux 编程
- 底层图片处理
- 音视频开发
- 机器学习
定期面试:
光学习了大厂的技术还不够,如何了解当下Android市场需要哪些技术呢?
定期的面试足以让你了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,也可以督促自己学习提升(小伙子,你了解的技术有点落伍了呀…)
万一拿到了高薪Offer,岂不是更赚?
多看大佬的学习笔记,学习大佬的设计思想:
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。