背景
近十几年来,随着以Android系统为代表的智能手机普及与发展,互联网行业早已进入“移动”的时代。但是现如今的“风口”已经从移动转向,整个移动互联网行业正处于增量下降、存量厮杀的阶段。
面对技术变革、前景不明、竞争激烈的现状,很多开发者们都感到了焦虑与迷茫。在这个大环境下,行业和企业对中高级开发工程师的要求越来越高,而用户对产品质量和体验的要求也越来越高。在这种情况下,我们不能仅仅想着怎么通过面试,更要有一定的技术壁垒,让自己难以替代。
大厂offer是每个技术人的追求
每一个程序员的梦想大概就是能够找一份大厂的 Offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。但不是每个人都能够进入大厂的,这往往取决于我们的能力、学历、面试表现等因素。
现在面试大公司你说你没有大型项目开发经验估计都拿不出手,jetpack、NDK、插件化、热修复理论等等已然大厂面试所必须的知识。但是,你真进入大厂了,可能几年都用不上这些知识,还是老老实实去写CRUD。想要一直待在大厂就需要一定的技术竞争力。
为何需要较长时间竞争力的技能
像现在中年技术大咖,你让他们继续跟年轻人一起比敲代码,真敲不过,当然个别有还能敲得很利索的,大部分可能已经无法熟练的使用具体的编程工具和具体的特定算法,跟优秀的年轻人比拼了,但他们知道如何有效的在复杂的系统中发现问题,定位问题,并针对性的给出解决问题的方向,这就是竞争力,这个竞争力,依然可以持续很多年。这样才能一直保持优先级。
长时间竞争力——>>技术壁垒
很多人都会觉得都学一些新的技术,甚至成为全栈程序员。这样的确可以提升一些自身的价值,但是也只是让你在中低端市场受到欢迎。
我们是要解决一些系统底层的逻辑的问题,诸如内存分配的机制,数据结构的原理和设计理念,这才是命脉。
我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。最终形成一定的
技术壁垒
聊到Anroid谈到技术壁垒,就不得不聊聊Framework开发的那些事。
系统应用开发,现在来说,已经开始脱离系统,单独拿出来开发,系统定制接口,已提供给应用调用,用来增强功能。
原生的桌面,拨号,设置,已经没法做出差异化优势,因此都费尽心机,来进行应用深度开发。
对于之前维护系统应用模块的人来讲,修修补补,真的没有什么成长。每天的工作来说,没有很深的技术壁垒,很容易被别人攻陷。
比如设置,比如联系人,在小的改动,修改故障的时候,没有非常高的要求,做过应用开发的,都可以过来参合一脚,改改问题。而让一个应用开发得去修改系统接口,估计改的心累,并且犹豫不决。
技术壁垒,也便是自己的竞争优势。只有顽强的技术能力,并持之以恒的学习,扩充自己的深度,广度,那么你的位置则牢不可破,不会轻易被替代。
技术壁垒形成的就业优势
如应用开发的市场已经饱和,
公司需要开发者能够更深入地理解Android系统,从而能够开发出更加稳定、高效的应用。因此,Android Framework的开发经验在求职过程中变得越来越重要。
垂直领域的智能设备: Android Framework 开发可以针对特定的行业和领域进行定制,以实现更加精准的功能和交互体验。例如,智能家居、智能医疗、智能制造等领域均需要定制化的 Android Framework。
企业级定制化: 一些企业需要为自己的员工和客户定制专属的 Android Framework 应用,以满足其特定的业务需求和安全性要求。这种需求在企业级移动应用中较为普遍。系统优化和升级: Android Framework 开发也可以用于优化和升级系统性能,例如增加系统稳定性、升级系统功能、加强系统安全等。
就目前的就业情况来看,学习Android Framework的市场发展空间还是非常可观,毕竟国内的很多手机大厂,比如华为、oppo、vivo、小米等厂商都需要AF开发,更有其他APP大厂在招聘。
而且直接在招聘网站上看薪资情况,和招聘条件。从中可以看到不管是Android开发还是车载或者视频算法的岗位需要用到framework这项技术。而薪资在同行开发岗位中还处于较上水平14k-30k的区间。
并且,因为大量需要framework方面的人才。所以在大厂面试的时候,我们经常会被问到这些问题:
- 对Activity的启动流程了解吗?
- AMS在Android起到什么作用,简单分析下Android的源码
- system_server为什么要在Zygote中启动,而不是由init直接启动呢?
- 为什么要专门使用Zygote进程去孵化应用进程,而不是让system_server去孵化呢? 能说说具体是怎么导致死锁的吗?
- Zygote为什么不采用Binder机制进行IPC通信?
大部分Android开发者一遇到这种面试题就直接懵逼了,不少人不是没有看过相关的解答,但也都只是浅尝辄止,没有深入掌握其中原理,面试的时候自然会被问个措手不及。而会framework这方面的人就已经不战而屈人之兵了。
大龄程序员最后的依仗
前面也提到了跟优秀的年轻人比拼,知道如何有效的在复杂的系统中发现问题,定位问题,并针对性的给出解决问题的方向,这是我们最大的依仗
而随着移动互联网的快速发展,Android framework开发成为了一个热门的领域,许多大公司都在招聘这方面的人才。
而framework开发需要的人才基本上都是大龄程序员,因为framework开发需要对系统有深入的理解,而大龄程序员在这方面通常具有优势。
你不要说入行这么多年了,对系统还没有深入的理解。
更重要的是转Android framework开发对于我这些Android人来说是再容易不过了,说是转行但是这个难度要小的多。
关于学习
学习是一直贯穿我们整个程序员职业生涯的,但是很多人总感觉学习没有什么提升,不知道是不是学错了。
学习永远没有错,错的是选择了低效耗时耗精力的前进方向
迷茫的来源有二个,一是看不到自己对公司的价值,二是看不到自己未来发展的路。
先说迷茫的来源一,看不到自身的价值。很多人每天在公司写业务,俗称“搬砖”,每天都搬,感觉一点长进都没有。久而久之你的价值就固定了,公司随时可以让人取代你。
再谈谈迷茫的来源二,看不到未来的路在何方。这个迷茫我觉得来自于对自身的定位不明确。一位老师和我说过,毕业后的头5年,你可以去选择各种开发,前端后端或者移动端,可以随便选。
这是为了什么呢?就是为了找到自己感兴趣的和自己的长处并且打算一辈子一直做下去的方向。
就目前Android 开发而言还有不少人没有找到一个学习方向,或者很多人想了解就是没有这方面的渠道。
为了帮助到大家对framework有一个新的认知,在此分享一份Android Framework源码
由于内容过多,详细完整版
详细Vx关注公众号:Android老皮
《Android Framework源码开发揭秘》
第一章 系统启动流程分析
Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段; 知识要点:
第一节 Android启动概括、
第二节 init.rc解析、
第三节 Zygote、
第四节 面试题
第二章 跨进程通信IPC解析
Binder作为Android进程间通信的机制,可以看做是一个驱动。在Android中,常见的进程间通信例如系统类的:打电话、闹钟等;自己创建的:像WebView、视频播放、音频播放、大图浏览等。
第三章 Handler源码解析
第一节 源码分析
第二节 难点问题
第三节Handler常问面试题