目前情况:10届某民办大学本科生,实际接触Android年限6年多了,工作年限五年半(注意,我说的是工作年限,不是工作经验),今年1月份裸辞后歇了大半年,经常一周也收不到几个offer,好不容易熬到HR面,也因为薪资要求过高被放弃了,最终拿到一个并不是特满意的offer。
首先我想明确地说在目前的大环境下,移动互联网确实已经属于寒冬。尤其是Android/IOS开发,虽然说不上夕阳行业,但也离热门IT职业差了十万八千里。从之前大量小创公司因疫情原因倒闭破产,360、滴滴、携程等大厂实施裁员的新闻其实也能略见一二了。至于那些还存活着的小公司,对于移动端开发人员的要求。。。好像跑题了~还是说求职面试吧。
网上Android岗位招聘的需求来看:
要求掌握系统架构及相关技术,熟悉高级UI、framework源码,精通插件化、性能优化、Java开发经验。。。
视频面试给我的第一感觉就是题太难了,薪资低也就就算了,面试要求还贼高。
一面
1:插件化。启动activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
5:求二叉树中两个节点之间的最大距离。
6:206含义,未修改资源是哪个,302含义,301含义
7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10:任意一颗二叉树,求最大节点距离
这个就是一面被刷的面试题,有些去公司面试Android开发也要排队是什么鬼!之前在知乎上看到过某培训机构的讲师说了这样一句话,“给我三个月,我能培训出一个连的Android初级开发工程师”。这一点也不假,听说现在很多培训机构都关闭了移动端开发的课程,但是前几年输出的程序员实在是太饱和了,这也就造成了一个岗位N百个人投简历,面试要排队的情况。尤其是对那些没有985、211文凭,没有三年以上软件工作经验的初级开发者来说,会有很不好的面试体验。
移动互联网行业的衰落导致很多小公司根本就不是急需开发人员(一般创业公司其实一个移动端开发人员压榨压榨完全够用了)。如果你申请得是初、中级工程师的职位,一般都会先给你一份涉及Java基础、算法、Android基础的笔试题做,等你好不容易做完了几张纸的试题,等了半小时、一小时甚至更多的时间轮到你进会议室面谈了,接下来等着你的很有可能不是赢取白富美,走上人生巅峰,而是HR或者技术人员简单看了下你的简历信息,随便问你2个无关技术的问题就把你打发走了等通知。而且大多数小公司都会这样对待应聘的初级工程师,甚至还会直接质疑你的简历信息,别问我为什么知道的!!!当然有资历的高级程序员还是很吃香的,想吃到香饽饽就得继续奋斗呀!
基于目前市场表现,我们都知道下一个风口是 AI,但是作为一个移动开发者如何在即将来临的 AI 时代吃口红利呢。我的回答是:致力于做一个终身学习者,追本溯源去探寻代码世界哪些不变的道,你又会说了,哪些是道呢,简单举例下,比如编程思想、常用的设计模式、设计原则、算法和数据结构、网络通信机制、操作系统、重构原则、架构思维等等。同时在目前发展情形下,也越来越趋向全栈工程师的路线,借用之前在网上看到一篇文章的图,想进阶全栈工程师之路看需要哪些技能,如下:
从图中可以看到技能被分成基础软技能、技术软硬技能,不仅要熟悉移动端开发套路,还要对大前端技术栈也有一定要掌握,同时对于服务端开发流程也要了解,我们很多从事移动开发人员,基本一开始就是从移动端入手,对于服务端开发很多时候是没有概念,这些跟那种从服务端开发转型做移动开发相比起来就处于一定的劣势了,有些甚至不知道 Restful 是什么,还以为是一种框架呢,其实这仅仅只是服务端约定好的接口编码风格而已。
进阶之路
为何会想起写这么一篇文章呢,一方面看到很多Android求职者十分迷茫,而我们组内正好想规划 Android 技术路线,简单来说就是目前我们组处在什么样的水平程度,目前所做项目用的技术处在什么阶段,在未来一年内,项目技术迭代该如何走,走到什么程度。另一方面是从事 Android 开发这几年,一直也没好好规划自己的技术路线,想认真整理下未来进阶之路。我们都知道 Android 技术体系一直很庞大,刚开始学的时候基本是从一个点一个点开始,没有系统全局观概念,同时也是学不过来,从做上层应用开始,到做 Framework 层,然后再到系统层做驱动开发各个层面的开发者都有,绝大部分开发者都是从应用层开发,往往做到 Framework 层就浅尝辄止了,一直以来,做Android 开发有这么两个说法,如果是做应用开发,往应用架构方向发展比较合适,如果是做系统层开发,往往底层驱动比较合适。
看张图:
挑些图中几个点简单来谈谈自己的一些想法。
移动架构
移动架构是 2017 移动技术年度TOP5话题之一,从中就体会到架构是有多火,记得刚开始学 Android 时候,哪有现在那么框架,那时候谈架构的更多是在服务端开发,比如多层架构,有展示层、业务逻辑层、数据访问层这就是最简单的三层模式,Android系统则是基于事件驱动响应机制设计的单页面架构,其实跟浏览器中的窗口页面是一样的, 系统中一直有个消息轮询监听机制,哪个事件被触发了,相应的响应代码进行处理,这些处理操作是被提前注册到系统中。
最早开始的开发模式基本是基于Android 系统自带 MVC 模式,Activity 基本类似于Control 的作用了,View 和Mode 互相耦合,后来才演化出现在主流的 MVP、MVVM 模式,顺便提一句,MVVM 模式其实是在微软 WPF 技术体系中提出来。
图中显示两个方面:
-
展示层: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components
-
架构层:模块化->组件化->插件化->沙盒/双开技术,比如可以双开微信,类似Docker, 每个页面都是插件,类似Vue.js中每个页面都是组件。
性能优化
简单来说,一个APP 是需要从三个方面被关注的,业务功能、符合逻辑的交互、性能响应。如果我们在使用一个 APP 时候,经常滑动时经常卡顿、时不时崩溃、有些功能设计简直非常规,比如在 Web 网站有树层级等面包屑点击,你非要在手机也搞一个类似树级点击加载,那是不是有点强人所难了,我上拉下拉、左滑右滑不行吗,非要通过点击才行吗?那么性能优化核心是什么呢?追求快、稳、省、小,关注卡顿、内存泄漏和崩溃、代码质量和逻辑、安装包大小四个方面。
推荐学习资料
-
Android进阶学习全套手册
-
Android对标阿里P7学习视频
-
BAT TMD大厂Android高频面试题
以上的面试资料整理在我的**GitHub**有下载方式,同时还可以加入我们安卓开发者的圈子一起学习交流!