**2018年,整个移动互联网进入了下半场。**越来越多的人在提“移动端的下半场”、“Android开发的焦虑”之类的,也有人在喊“技术天天在变,学也学不完”,“昨天Kotlin今天Flutter”。其实我却认为,如果你技术达到了一定程度,你无需太过在意这些。
移动端真正进入下半场了吗?于我看来并没有,最多说“Android技术的探索”进入了下半场,而整个市场还是乐观的。以前是BAT的天下,而近两年出来越来越多的独角兽:头条、抖音、拼多多、快手、小猿搜题等,这些公司的业务都在移动端上,他们需要招聘更多的移动端人才。如果真要说下半场,只能说很多小型创业公司在退出市场,这确实会导致很多入门工程师失业,但这也说明了这个行业在更加规范。
而且,对于Android工程师而言,这更是个好的时代。互联网下沉,那么下沉市场里的用户是使用Android多还是iOS多,大家都清楚。
那么,对于工程师而言需要做什么才能存活呢?很简单,要么转行,要么提高。我相信,一个技术不错的工程师,不但无需焦虑,而且在这个时代,能够拥有稳定的职业生涯和丰厚的收入。
要说下半场,我更愿意说是“Android技术的下半场”,随着这几年大量的工程师和公司投入研发,Android技术已经从最早的简单页面,到越来越复杂的交互,再到动态化、插件化等新技术和黑科技,这个领域的深度在不断加深。
如果想成为优秀、不担心淘汰的工程师,绝不是一味跟风新技术,今天学Kotlin、明天学Flutter,疲于奔命;而应该持续努力去完善自己的知识体系,保持一定的技术深度。
因此,本专栏希望在大家做UI、界面开发之余,分享一些Android架构方面的知识和技能。
希望且相信这些技能能够让读者真正摆脱技术焦虑,最终找到自己的方向和竞争力。
有的同学会问,我平常都在写业务代码、写页面、调用SDK,有必要去了解架构吗?答案很简单,业务是表,架构是里。变化万千的业务背后都是大同小异的架构。时代更迭,业务变迁,理解架构的技术人员可以处变不惊,而非疲于奔命。
因此,本人建议业务同学在繁重的业务开发之余,可以多去研究一些底层库原理,而非停留在花式调用SDK的阶段,这会让你具备更强的技术竞争力。
不少公司的架构同学和业务同学都存在一种矛盾:架构与业务互相独立,导致输出的技术总是不能很好的满足业务需求,导致的结果是:架构同学有心无力,业务同学有苦难言。
实际上,真正好的架构是从业务中孵化出来的,而且能服务于更广阔的业务形态。
举几个例子大家就清楚了。
大家都知道阿里主营电商业务,而电商是强运营的,所以对于动态化有非常强的需求,也就是希望App尽可能像网页一样,能够随时更新页面内容。于是,阿里内部孵化出了Weex,通过远程开发部署js代码,即可实时更新页面内容;
另外,手淘App对于整个阿里集团的战略意义非常大,它不仅是盈利怪兽,而且是整个集团的流量入口(手淘DAU自2015年即达1.1亿)。这也就是阿里曾提出的“航母策略”:手淘如一座航母,集团内各种业务形态如飞猪、闲鱼、天猫等都可坐落在其上。于是,Atlas诞生了,所有App都可以轻松集成到手淘上,享受流量滋养。
类似的例子还有很多,比如大家熟知的微信,需要保证消息在任何复杂网络下都能有最高的到达率。因此微信自研了一套跨平台长连接方案,提出智能心跳方案、多种弱网应对策略如多级超时等,最终推出了Mars,保证了全国各种网络环境下的用户都能稳定的收发消息。
有些同学可能了解阿里15年提出的“大中台,小前台战略”,搭建集团数据中台、技术中台,帮助各种前台业务快跑前进;这样的技术架构和组织架构帮助阿里快速孵化出各种新的业务,比如18年初的淘宝特价版,据朋友了解整个App从启动到上线只用了短短一个多月的时间。今年,腾讯组织架构调整,担任CTO的张志东就提到:“没有能帮助到公司级的数据中台建设,我个人也蛮遗憾。”,自此腾讯也正式启动了“中台架构”建设。
所以说,不同的业务形态,能孵化出特有的架构。
架构是根,扎得越深,业务才越能开枝散叶。
闲话说了不少,下面正式谈一谈本专栏会覆盖的一些技术点吧。这些技术点会基于本人日常的工作积累,同时结合各大厂开源的技术体系,(当然对于阿里闭源的会尽量规避掉,线下可以做一些技术探讨)。
下面,我把后面专栏会覆盖到的技术点列出来,当然在写作的过程中还会逐步调整。
动态化专题 由于App获客成本不断提高,动态化是近年来越来越重要的技术架构,例如React Native、小程序、快应用等都在试图让App具备实时更新、随手可得。本专题会对各厂提出的动态化方案进行分析,如JsBridge;包括小程序方案的一些实现思路,比如多进程的H5容器架构;另外,还会分析一些适用于移动平台的动态化编程语言如Lua,Javascript等。
图片专题 对于亿级App而言,图片的任何优化都对于流量、体验等具有重要意义。比如Google+ App采用 WebP 图片格式后,每天节省了 50TB数据存储空间。因此,本专题会谈一下各大厂如腾讯、FB、Google等在图片优化方面提出过哪些方案,比如WebP vs SharpP;另外也会分析一些大家用的比较多的Glide、Fresco是如何做图片缓存、如何基于Dalvik/Art不同的内存结构来优化。
省流专题 上面谈到了图片的压缩,其实节省流量是一个永恒的话题,它不仅能改善用户体验,也能帮助减少用户流量开销,节省公司成本。因此,本专题会谈一谈如何监控Android流量;有哪些常用的Diff及压缩算法,比如Tinker里自研的Diff算法 vs Google提出的google-diff vs BsDiff等;如何选用数据通信格式如json、ProtoBuf;FastJson、Jackson各自的优势等等。
网络专题 大多数业务同学对网络的认识就是OkHttp+Json解析
,实际上,网络这一块还存在非常多值得研究的技术点。一个优质的App,除了在网络良好的环境下运行,更重要的是,必须在弱网、网络劫持、网络慢
等复杂环境下也要良好运行,而且还得快,这也就涉及到DNS加速、网络结果缓存
等。 之前大厂都在提“页面秒开”的概念,页面打开速度很大程度取决于当下的网络环境,也对于用户体验和留存有非常大的影响。这个专题我们谈谈网络相关的技术点。
监控与日志专题 对于监控和日志,多数人的印象是集成一个第三方SDK,如Fabric、Bugly等。业务同学或许对日志了解不是特别多,但实际上日志是至关重要的,尤其是在排查复杂问题时。 本专题我们谈一下如何做到日志不丢失,如何后台上报且不影响App运行,最有意思的一点:如何利用长连接等技术,实时拉取任意用户的本地详细日志
。
安全专题 安全专题就离多数比较远了,这里我们讲解一些常见的和业务相关的安全话题,具体后续补充。
高可用专题 后续补充
GC专题 后续补充
1. 动态化专题
mmap
日志落地方式,开源项目Logan
,xlog
等分析下半场我们的战场在哪里?
####NDK
音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以Android NDK技术已经是我们必备技能了。要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且OpenCV/OpenGl/ 这些又是图像处理必备知识。
2018年初,投资大亨徐小平的一张聊天截屏撼动了整个互联网圈,可谓一石激起千层浪。一时间,连卖菜大妈都在讨论区块链,各类打着区块链的牌子圈钱割韭菜的公司、创业团队如雨后春笋,直到李笑来的一段录音流出,感觉大家都被这场“革命”的资本家当傻逼使了,着实为这把大火浇了一盆水。说区块链会比曾经的互联网革命还要猛烈,我觉得有点喧宾夺主了,区块链只是互联网这个土壤上长出来的一根藤,只会在有限领域发挥很好的作用。技术上看,区块链不是什么新技术,是密码学、分布式、p2p等技术结合经济学在特定领域的应用。如果你本身在密码学、安全领域或分布式开发领域有经验,转区块链开发又有何难?换个赛道开车而已。不过据我所知的 Android 客户端开发,95% 是没有机会也没自主去从事或深入研究过这方面的技术,所以基本认定区块链不是 Android 开发的下半场,转岗搞区块链优势不大。
RN、Weex、小程序出来的时候,我都有研究过,并且能轻易上手,作为一名 Android 原生开发的我都能轻易上手,更不用说那些前端工程师了,而且现在各家小程序的上层开发技术在我看来都是快消品,五年、十年后他们还在么?当然如果我们能抽象一下各家小程序背后的技术本质,例如深入研究 JS 执行引擎原理、浏览器内核等,那你又管他五年后XX小程序还是WW小程序呢?肯定离不开这些技术本质,这一点很多前端小伙伴一定比我们终端小伙伴玩的溜。
人工智能并不是什么新概念了,可以说自计算机诞生就有人思考人工智能的问题了,不过人工智能的概念是在 1956 年夏天、美国达特茅斯学院的一次研讨会上首次提出的,那次会议聚集了麦卡锡、香农等业界泰斗,被认为是人工智能的诞生标志,史称达特茅斯会议。此后,每隔一段时间,人工智能就发展到一个新的阶段,例如 1963 年计算机与人类的首次象棋大战、1996 年深蓝计算机战胜国际象棋大师、1997 年比尔盖茨的智能化豪宅建成,推进智能家居的概念诞生、近些年 Google 的 AlphaGo、无人无人车等,语音、图像识别等技术已经进入多个领域的应用。2018 年,移动互联网各个方面应用领域进入红海,各大巨头都在寻找新的赛场,人工智能成了“兵家必争之地”,BAT 等互联网巨头都纷纷成了 AI 实验室…
无论是上半场还是下半场,我们只是换了个现场而已,在我们一生所学的本领中,有些换了个战场就不能用了,有些还能继续使用。
说到这个, 我想起了有个前辈说的一个概念:知识衰竭周期,这里我拓展为技能衰竭周期。我们一身中所学习的技能,有的很快就过时,称之为衰竭,有的技能十年、百年都不过时,这里有个最鲜明对比: 研究心血管的医生和 fash 程序员,医生完全不用担心人体心血管结构会变化而自己的技能经验会淘汰,而十年前比较火的 flash 开发技术如今快面临淘汰了,所以说学医的普片越老越吃香,而我们程序员不得不不断学习。既然要学习,我们也考虑下成本和收益,多花些心思在衰竭周期较长的知识、技能上。
从上到下衰竭周期越长,从下到上变化越多同时短期内的需求越多。长远来看,越是底层的东西越值得我们去研究,底层的搞明白了,上层变化再多都能很快上手,以不变应万变。以上图片是我个人 YY 的,一定不全面,但能表达一个意思:技术服务业务, 越是上层的技术越受制于业务,业务千变万化,上层的技术形态也就千变万化。
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作,小编这里面还有一些试题分享在我的Android IOC架构设计群里,可以来群里下载,群里还有一些行业大牛,群里也会有不定时送书等活动,欢迎前来下载。
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
5gyv0JM)**
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
需要的朋友可以私信我【答案】或者点击这里免费领取