评论

收藏

[Hbase] Android开发10年,小公司报了薪资没下文,要个20K就这么难么

数据库 数据库 发布于:2021-12-27 23:01 | 阅读数:366 | 评论:0

当你在学习 MVx 模式的时候,请记住,这些都不是架构,而是一种架构模式。这些架构模式仅用于 UI 展示逻辑。因此仅仅使用 MVx 并不能给你一个好的架构,要有一个好的架构,你还需要在其它方面做出更多的努力才能实现。

  • 多线程
有经验的 Android 开发者都会了解多线程,并且了解他们对应用程序的影响。你也许会说,我精通 AsyncTask、RxJava、协程等。我想表达的多线程不是你理解的这个。会使用多线程框架并不等同于理解多线程。
举个例子,众多 Android 开发者都认为,使用 AsyncTask 会导致内存泄漏。这个观点来自 Android Studio 默认的多线程 lint 规则中。既然如此,那这个观点就是对的了吗?很不幸,这个观点是错误的。在这里,我不讲解它们的细节,你可以读一下这篇文章,里面有很多关于 AsyncTask 的内容。
我认为要理解多线程程,就必须可以使用任何多线程框架,甚至是基于基础的 Thread ,都可以写出正确的并发代码。要实现这个目标,你不仅仅需要知道你喜欢的多线程库的 API,你还需要理解多线程的细节。这些多线程库虽然好用,但如果你不理解多线程的基础细节,那么你的应用程序出现多线程的问题只是时间问题。
如果你想学习多线程,从这个视频 开始,视频中讲解了所有 Android 开发人员都需要知道的基本概念与原理。

  • 自动化测试
据我所知,很多 Android 项目,都没有使用任何的自动化测试。在使用自动化测试的项目中,大多数也是 QA 人员使用 Appium 之类的工具来完成的。这是整个 Android 行业的现状,非常可悲。之所以没有自动化测试,这个问题可以追溯到 Android 起源,Google 也在很长一段时间里,没有关注过第三方应用的自动化测试。
现如今,有单元测试和 UI 自动化测试经验的开发者需求量很大。即使你到一家没有使用过任何自动化测试的公司去面试,如果你说你会自动化测试,就会给你的面试加分。反之,如果你去的是一个广泛使用自动化测试的公司,你没有自动化测试的技能,这会给你面试减分,处于劣势。
因此,我建议每一个 Android 开发者都去学习一下自动化测试的相关知识。就个人而言,我更喜欢单元测试。而一些开发者喜欢 UI 自动化测试。所以,可以选择一个你更感兴趣的技术,尝试一下。
4 年以上经验
如果你对 Android 已经有了非常丰富的开发经验,那么,是时候学习一些“元”技能了,并且在特定领域进行深度研究。在我看来,以下技能对专业的开发人员来说,都是非常不错的方向。

  • 技术方案评估
如果你还没有做过这件事情,那么现在是时候开始做了。每一个重要的技术决定,都需要进行评估、权衡。有时候,这种决定带来的结果非常好,立竿见影。但是大多数时候,并非总是能够立竿见影,看到效果。通常情况下,需要决策的范围越大,所涉及到的评估范围就越大,除了可以简单进行决策的事情,还有很多可评估项都是非常抽象,短时间内根本看不到结果的。
在自己丰富的经验水平下,面对众多选择,你至少应该知道如何找到取舍。如果你能对技术方案评估提供有用的建议,你就非常优秀了。技术方案评估权衡这是一项非常复杂的技能。通常,在与其它开发者、项目经理甚至是其它部门员工讨论的时候,你能找到折中方案,就能进行方案评估。因此,在大数情况下,你只需要掌握评估方案的能力就够了。
那我们所说的“技术方案的评估”到底是什么意思?说实话,很难具体说明它是什么。不过,我们可以提供一些反例,来解释为什么不适合在开发中使用。举个例子:
我们应该将多线程的使用迁移到 RxJava, 而不是 AsyncTask, 因为 AsyncTask 会导致内存泄漏。
正如我前面所说,AsyncTask 并不会导致内存泄漏。所以上面这句话是错误的。说这句话的开发者并没有深入的研究多线程。此外,他也没有提到 RxJava 的问题。对于一个项目中的开发人员来说,RxJava 存在一个很陡峭的学习曲线。
我们应该为我们的新代码写单元测试,并且设定一个长期的目标,覆盖所有的代码,以确保我们的代码质量。
这句话包含几个前提,首先,我们现在开始单元测试是不可能的,至少需要开发人员投入时间来学习这种技术。编写单元测试是一个很明智的决定。我们不能为所有代码编写单元测试,因为有一些部分是不稳定的。最后,达到特定的覆盖目标并不会自动提高“质量“。在这个例子中,开发者并不了解单元测试,他们无法确定在项目中使用单元测试所涉及的问题和影响。
我希望,你对“技术方案评估”已经有了大致的想法,如果你有一个重要的决定,你需要完成所有必要的调研,如果你依然看不到整个评估中存在的复杂网络,那可能是你的调研没有做好。在做决定的时候,有些事情可能超出技术范围,你也需要考虑你的决策对其它部门同事的影响。

  • 专业领域
如何区分一个技术专家和一个普通开发者?是我们熟悉的概念的数量吗?我认为,在技术方面,区分是否是专家主要在于知识上的深度。
作为一个技术专家,你应该有一个或者多个专业领域。你知道这些领域的详细细节,比一般的开发者知道的要多得多。你需要持续深入的研究,来保证你的专业深度,了解专业领域的最新发展,不会对新的工具和技术感到惊讶。此外,即使你并没有在任何项目中使用某些技术,你也需要研究这些技术使用上相关联的各种成本。
现如今,有一个自己的专业领域很难。这不是从博客中挑选几篇好文章进行阅读就可以的,也不是读完几本好书、上完几门好课就可以的。当然,通过这些内容进行学习,对你的专家之路都是有帮助的,但是要有自己的专业领域,唯一的方法就是积极参与其中进行学习研究并获得大量经验。
我很喜欢物理学家尼尔斯·玻尔说的这句话:
An expert is a man who has made all the mistakes which can be made, in a narrow field.(专家就是把领域内所有该犯的错都犯完的人。)
我们可以在哪些领域进行深入研究呢?实际上,几乎所有的都可以进行深入的研究,在软件开发领域,没有任何一个领域会因为太小而不能设置成专业目标。对此,我也有一些建议:

  • 架构师筑基语言基础
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点:
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
DSC0000.jpg


  • 设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
知识要点:
1、热修复设计
2、插件化框架设计
3、组件化框架设计
4、图片加载框架
5、网络访问框架设计
6、RXJava响应式编程框架设计
DSC0001.jpg


  • 360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
知识要点:
1、设计思想与代码质量优化
2、程序性能优化
启动速度与执行效率优化
布局检测与优化
内存优化
耗电优化
网络传输与数据储存优化
APK大小优化
3、开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle
4、项目实战
启动速度
流畅度
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践
DSC0002.jpg


  • Android框架体系架构
Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
知识要点:
1、高级UI晋升
2、Android内核组件
3、大型项目必备IPC
4、数据持久与序列化
5、Framework内核解析**
DSC0003.jpg


  • NDK模块开发(音视频开发系列)
NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。
在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。
知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习
DSC0004.jpg


  • Flutter学习进阶
2020 年无疑是 Flutter 技术如火如荼发展的一年。现在这门技术也依然非常有价值。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门**
……
DSC0005.jpg


  • 微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战
DSC0006.jpg

系列知识点PDF已经在开源项目:[https://github.com/Android-Alvin/Android-LearningNotes]( )?中已收录。欢迎star下载。

最后
总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。
在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取
DSC0007.jpg

DSC0008.jpg

DSC0009.jpg

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记


关注下面的标签,发现更多相似文章