始终觉得Android 已发行多年,移动 App 已经趋近饱和,提升自身竞争力成了首要选择

前言

现在的终端开发已经开始进入稳定期,在这个阶段大厂压力很大小厂更会收到挤压,人们使用的App越来越固定,即使是大厂,几年前平台级应用发个Push就能引流几十万,现在这些的作用也越来越小,特别到了今年,想要在Top 100的App里突然出现一个来自不知名团队的爆款已经基本不可能。在这种情况下对于开发者来说带来的变化我认为主要有两点:

1. 开发者的门槛越来越高:

小厂的机会少了,大厂的业务趋于稳定,短期内在移动端不会出现爆发性的增长,那随之而来的就是移动端招人越来越理性,门槛水涨船高。这两年看部门移动端校招,除了技术本身都很扎实以外,清一色985/211学霸+竞赛成绩+各种奖项+NB实习经历,社招基本集中在国内主要的互联网公司和几大手机公司中。并且现在大部分公司受限于本身的业务规模和在移动端的投入,技术和国内主要互联网公司的差距越来越大,换句话说,小公司生存会越来越困难,之后从小公司向大公司跳槽也会越来越困难。

2. 对开发者的要求越来越高:

小厂生存越来越困难,那势必会对开发者提出更高的要求。相比之前,对于终端开发者的技术要求会越来越宽广,最好是个多面手,是个大前端。大厂内部的压力也非常大,数据想要有大幅度的提升也越来越困难,因此更多的方向,更多的需求也就在所难免。现在的终端开发者处理的问题比之前更多更复杂,需要Cover的面更广,需要学习的更快更深入,并且在技术之外,还需要有足够的软实力支撑。在这样的要求下,很多时候,能力的差距已经不是用勤奋就能弥补的了,况且大部分人本来就谈不上有多勤奋。

最近看到一个在零基础自学Android最后能否找到工作,这个问题下的高票回答,讲述了她从开始选择Android,经过非常努力的学习和挣扎,然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜,如果早两年入行可能结果会比现在好很多,但可惜,这就是现实。最后回到题主的问题,在这种情况下,Android开发者还会有之前那么吃香吗?我相信答案已经很明显了,专注的开发者和面对当前的环境,经过理性思考选择放弃的人都能收获更好的生活,但那些半吊子,之后在这个行业里会越来越难受。之前吃肉的以后能上海鲜,以前很多喝汤的可能就什么都没有了。

而之所以成为会有些Android行业仍旧有如此多的半吊子,相信和以下几点分不开关系:

  • 大学期间实践得晚:有些学生在大三的时候才接触android了,但在毕业一年后才正式从事android开发,从头学起,这过程中只看了一些关于android方面的书籍,多数时候也只是停留在纸面上,在配置开发环境和开发过程中遇到一些问题导致自己不能坚持下来,想想那时真傻,有啥问题都不知道用谷歌搜搜,只知道按照书上的来,就算用百度搜一下也好啊,实践得晚最大的弊端是之前花时间看android方面的资料都算白费了,因为这中间一直是断断续续,看看远没有实践来得印象深刻,没有真正实践的开发过app,很多东西基本都忘记了,浪费了不该浪费的时间。

  • 基础学科没学好,知识不牢固:android是多个基础学科结合的复合型产物(高级语言java、操作系统、编译原理、算法与数据结构、设计模式等等),由于是从win32程序出身的,后来做项目直接学android,java基础这些只是看了几本书,导致踩了很多没有必要踩的坑,比如在finalize方法中关闭资源、没有关闭文件流等等,没有学好基础学科最大的弊端是踩了很多没有必要踩的坑。

  • 没有早点相信方法和设计模式:单元测试、低耦合高内聚、封装变化、设计模式这些前人总结的东西都是非常好思想,现在很后悔自己没有早点相信他们,就算当时不能够理解也应该坚决执行的,因为当后面有一定工作经验后回头来看,科学的方法和设计模式真的对编程很有好处,至少会让你少很多bug,写的程序稳定性更高。

我能给的建议是:

  • 纸上得来终觉浅,绝知此事要躬行
  • 打好基础
  • 即使不能理解,也应该对科学的方法和思想深信不疑并贯彻执行

这一套系统的学习方式相信能帮你们解决绝大部分问题

Android中高级进阶技术路线

完整的一个技术路线主要包含以下几个模块:

  • 架构师筑基必备技能
  • Android高级UI与FrameWork源码
  • 360°全方面性能调优
  • 解读开源框架设计思想
  • NDK模块开发
  • 架构师炼成实战
  • 微信小程序
  • Flutter技术进阶

资料领取

如果你需要这份《Android中高级进阶技术路线》资料完整版,赶紧扫一扫下面二维码关注领取。
在这里插入图片描述

架构师筑基必备技能

Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以我们要学习java语言。另外,虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Androidapk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。

深入Java泛型

  • 泛型的作用与定义
  • 通配符与嵌套
  • 泛型上下边界
  • RxJava中泛型的使用分析

注解深入浅出

  • 自定义注解
  • 注解的使用

并发编程

  • 线程共享和协作
  • 站在巨人肩上操作CAS
  • 仅会用线程池是不够的
  • Android AsyncTask原理解析

数据传输与序列化

  • Serializable原理
  • Parcelable接口原理解析
  • Json

Java虚拟机原理

  • 垃圾回收器机制
  • 内存分配策略
  • Dalvik虚拟机

反射与类加载

  • 反射基本概念与Class
  • ClassLoader类加载器

动态代理

  • 动态代理基本原理

高效IO

  • Java IO 体系
  • File文件操作

在这里插入图片描述

Android高级UI与FrameWork源码

这块知识是现今使用者最多的,我们称之为Android2013~2016年的技术,但是,即使是这样的技术,Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码 熟悉而又陌生: 熟悉的是几乎天天在和它们打交道,天天在复制这些代码;

陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码原理,代码深处的内涵。所以我们需要从新的角度去分析这些知识点, 深入研究他们,要学习源码,模仿源码,然后再hook源码,这样才能说自己懂这块的知识。这些都是做Android开发,做高级工程师的基础
在这里插入图片描述

高级UI晋升

  • 触摸事件分发机制
  • View渲染机制
  • 常用View
  • 布局ViewGroup
  • 自定义view实战

Android组件内核

  • Activity与调用栈
  • Fragment的管理与内核
  • Service 内核原理
  • 内核之组件间通信方案
  • 组件间通信方案

数据持久化

  • Android文件系统
  • 轻量级kv持久化
  • 嵌入式Sqlite数据库

Framework内核解析

  • XMS内核管理
  • Handler消息机制
  • 布局加载与资源系统

360°全方面性能调优

一个app的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。

设计思想与代码质量优化

  • 六大原则
  • 设计模式
  • 数据结构
  • 算法

程序性能优化

  • OOM问题原理解析
  • ANR问题解析
  • Crash监控方案
  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据存储优化
  • APK大小优化
  • 屏幕适配

开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

在这里插入图片描述

解读开源框架设计思想

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。在项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因

热修复设计

  • AOT/JIT & dexopt 与 dex2oat
  • 热修复设计之CLASS_ISPREVERIFIED问题
  • 热修复设计之热修复原理
  • Tinker的集成与使用(自动补丁包生成)

插件化框架设计

  • Class文件与Dex文件的结构解读
  • Android 资源加载机制详解
  • 四大组件调用原理
  • so 文件加载机制
  • Android系统服务实现原理

组件化框架设计

  • 阿里巴巴开源路由框——ARouter原理分析
  • APT编译时期自动生成代码&动态类加载
  • Java SPI机制
  • AOP&IOC
  • 手写组件化架构

图片加载框架

  • 图片加载框架选型
  • Glide原理分析
  • 手写图片加载框架完成

网络访问框架设计

  • 网络通信必备基础
  • OkHttp源码解读
  • Retrofit源码解析

RXJava响应式编程框架设计

  • 链式调用
  • 扩展的观察者模式
  • 事件变换设计
  • Scheduler线程控制

IOC架构设计

  • 依赖注入与控制反转
  • ButterKnife原理上篇、中篇、下篇
  • Dagger架构设计核心解密

Android架构组件Jetpack

  • LiveData原理
  • Navigation 如何解决 tabLayout 问题
  • ViewModel如何感知View生命周期及内核原理
  • Room 架构方式方法
  • dataBinding 为什么能够支持 MVVM
  • WorkManager 内核揭秘
  • Lifecycles 生命周期

NDK模块开发

音视频、高清大图片、人工智能、直播、抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以Android NDK技术已经是我们必备技能了。

NDK基础知识体系

  • C与C++
  • JNI开发
  • Native开发工具
  • Linux编程

底层图片处理

  • PNG/JPEG/WEBP图像处理与压缩
  • 微信图片压缩
  • 源码都在用的giflib:GIF合成原理与实现

音视频开发

  • 多媒体系统
  • FFmpeg
  • 流媒体协议
  • 图像预处理
  • 人脸检测
  • 身份证识别
  • 车牌号识别
  • OpenGL与EGL
  • Android OpenGL ES OES扩展纹理处理摄像头数据
  • OpenGL ES FBO帧数据缓存

微信小程序

微信自从问世以来,现在已经是民众必不可少的交流工具。微信小程序,是一种不需要下载安装就可以使用的应用软件,微信小程序的出现实现了应用触手可及的梦想,使用者只需要轻轻的扫一扫或者搜一下就可以打开应用,用户使用起来 特别的方便快捷,今天就同大家一起掌握小程序从无到有的构建过程,能够将app开发能力复制到小程序中,并进行项目实战。

小程序介绍

  • 背景与趋势
  • 小程序技术方案
  • 公众平台注册及配置
  • 开发工具的使用
  • MINA框架架构剖析
  • 逻辑与界面分离架构
  • 单向数据流

UI开发

  • 复杂的页面布局
  • 文字图片等内容的呈现
  • 用户交互表单开发
  • 对话框等交互元素开发
  • 下拉刷新和上拉加载
  • 图形与动画操作
  • 页面之间的跳转过渡
  • 用户界面事件处理

API操作

  • 网络请求
  • 文件结构及操作
  • 地理位置获取
  • 设备信息获取

小程序购物商城项目实战

  • 微信小程序之侧栏分类
  • 仿淘宝分类入口
  • 购物数量加减
  • 商品属性分类
  • 购物车实现

Flutter技术进阶

跨平台开发是当下最受欢迎、应用最广泛的框架之一。能实现跨平台开发的框架 也五花八门,让人眼花缭乱。 最流行的跨平台框架有 Xamarin、PhoneGap、Ionic、Titanium、Monaca、Sencha、 jQuery Mobile、React native、Flutter 等等。但这些工具的表现也是高低有别, 各有千秋。 在这些流行的框架中,有很多也已经消失在了历史的长河中被人渐渐遗忘了。但 React native 和 Flutter 这俩框架地位依旧坚挺,备受欢迎。

目录

  • 为什么Flutter是跨平台开发的终极之选
  • 在Windows上搭建Flutter开发环境
  • 编写您的第一个 Flutter App
  • Flutter开发环境搭建和调试
  • Dart语法篇之基础语法(一)
  • Dart语法篇之集合的使用与源码解析(二)
  • Dart语法篇之集合操作符函数与源码分析(三)
  • Dart语法篇之函数的使用(四)
  • Dart语法篇之面向对象基础(五)
  • Dart语法篇之面向对象继承和Mixins(六)
  • Dart语法篇之类型系统与泛型(七)
  • Flutter中的widget

最后

详细的内容实在是太多了,毕竟作为一名工程师要学习的技术实在是太多了,只要我们每周比别人多花6个小时,就能知道别人不知道的底层技术!

上面的技术路线不止做成了一份思维脑图,还每个模块的技术知识都整理成了几百页的PDF,简直是太方便学习了啊!我从同事那里嫖来了一份,好东西就要大家一起拥有啊。 这里一起分享给正经历职业瓶颈和需要进阶学习的伙伴们~

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是浮于表象,这对我们的知识体系的建立和完备以及实战技术的提升都是不利的。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_59614665/article/details/120295845
今日推荐