近日在某社区平台,看到我们从事Android开发的小伙伴,金三银四面试找工作的面试经历!
楼主是大四搞安卓的,简历上也声明了木有工作经验,然后投了几百家吧,终于有一家公司肯邀我面试,虽说看评论是个外包公司,但是楼主感觉也没什么不好的,于是楼主兴奋到飞起,面试前一天晚上甚至睡不着觉。
和大多面试者一样,本宝宝也刷过无数面经。像什么生命周期啊,mvp 啊,view 的分发机制啊,自定义 view 流程啊,已经背得滚瓜烂熟了。
但是面试官好像不按套路出牌,就在我猜想面试官第一个问题是要 HTTP 还是要问 Activity 的时候。
面试官开始了,你说下 Lifecycle 的使用吧?
我:……面试官看出了我的纠结,顿了顿说了句没事。
然后问了下一个问题,说下你在使用 mvp 时遇到的坑?
我:………(好像没遇到什么坑…)。
面试官又看了看我,皱了皱眉,继续问道,如果前后台传输数据需要用密钥对数据加密,那加密过程应该放在哪个位置?
我:???……此时我已经不敢直视面试官。
那你说说使用 Retrofit 进行网络请求如果后台有多个 BaseUrl 的话要怎么处理吧,面试官冷冷地问到。
我:新建不同的 Retrofit 实例就行了(内心显然知道这不是正确答案)。
此时气氛已经尴尬起来,面试官也没陈述具体的解决方案,只是翻了翻我的简历。由于我的简历写的熟练使用 Kotlin,而且我机智的准备了相关的问题(Kotlin 的优点啊,之比与 Java 啊)。
但是面试官又开始了:你说下怎么解决 Kotlin data class 没有无参构造函数的问题?
我:额 啊 ,我没听清,你再说一次(给大脑一点反应时间)。
你说下怎么解决 kotlin data class 没有空参构造函数的问题,面试官提高了声调。
"没遇到过……",我想了半天无奈说道。
那你说说 Hander 的源码吧,面试官已经有点不耐烦了。
听到这个问题,我的眼角有翔滑过,终于他吗的来了个擅长的了,我之前跟随 ide 看过 hander 的源码,并且还写过博客进行了总结,可以说是烂熟于胸了,所以,这是我扬眉吐气的机会,我必须好好说道说道。"Hander 机制是安卓中重要的消息机制……"我开始了,从 MessageQueue 到 Looper 再到 ActivityThread,甚至是 ThreadLocal,信手拣来,抽丝剥茧,就像某某博客标题写的一样--”一层一层的脱下 hander 的外衣“。此时的我犹如抽水马桶失灵一样,连绵不绝,完全失去了控制,讲着讲着自己的眼神开始飘忽起来,感觉是已经是用潜意识在控制自己的措辞一样,此时我已经感觉自己不是在讲源码了,而是在对整场面试被打压的情绪进行一种宣泄。就当我快讲到最后一个函数,也就是 hander 的 despatchMessage 方法时,我的脑海闪过一个念头,这面试官会不会觉得我就是个只会背点源码,然后遇到实际问题啥也不会解决的咸鱼?"笑容渐渐消失。与此同时, "你不必说得这么详细的",
面试官笑着打断我,“回去等通知吧。“
很多学Android开发的在面试求职碰壁之后,纷纷开始怀疑自己。认为客户端两年内消失,移动开发的罗曼蒂克消亡史?
我的答案是不存在的。
很多读者反馈对这一观点的认同。移动开发并没有变凉,更没有很多人唱衰的“罗曼蒂克消亡史”那么惨烈,它只是和互联网行业一样,泡沫逐步散去,开始进入了理性的下半场。
这里我想和读者分享一下,在移动技术的下半场,我们要如何去找寻自己的技术方向,如何培养自己的差异化个人竞争力。
下面是我在某招聘网站随手找的几个近几天更新的 Android 工程师岗位招聘:
谈到技术方向,很多作者会去大谈特谈一些完全空洞的未来十年的行业趋势;也有的会一味地鼓励大家转技术方向,转大前端、转后端、转AI;更有些人直接怂恿读者抛弃技术方向,转产品、运营,甚至离开互联网行业。在我看来,这些想法多少有些不负责任,并没有设身处地地考虑大家的实际情况。
下面阐述一下我的看法。有不同的看法,欢迎评论区交流,不喜勿喷!
1. 不要轻易离开互联网行业
很简单,多数人来工作是为了挣钱的。而相比很多传统行业而言,互联网领域的薪资依然有着绝对的领先地位,而且,天花板也相对高很多,30岁左右,拿个阿里的P7、P8左右级别,或者去牛逼点的中型企业做技术管理,年薪一两百万问题不大,足够你应对个人及家庭的各种经济压力。相比之下,其他行业很难能保证这样的待遇。
另外,如果你觉得钱攒够了,还可以选择互联网创业,互联网技术的颠覆性决定了他有非常大的创新空间,而且这些年计算机技术不断发展,物联网、5G、AI、大数据等技术不断成熟并逐步落地,对于想创业的朋友有非常大的想象空间。
2. 不要轻易离开技术方向
有些读者技术做久了,遇到了瓶颈,就会考虑离开技术去做产品、运营。当然我并非否定这种选择,我本身是支持技术人去学习产品思维、用户思维。但是如果说直接抛弃技术去转产品,可能风险会很大。这意味着你要抛弃自己多年的技术积累,在一个新的方向从零做起,以后如果再想转回技术,可能已经要被淘汰了。
当然,也有成功的大佬转型成功,拼多多的黄铮就是技术出身,然后转产品,最后创业。如果你未来也打算创业,那确实可以考虑这样的一条路线。
3. 不要轻易更换技术方向
这一点就是最近几年移动开发领域一直在讨论的。有的想转大前端,觉得大前端要一统用户终端开发;有的想转后端,觉得后端有高并发高性能,感觉很有技术深度;有的想转算法、AI,觉得这是未来的趋势,一定要把握住。
这种思维就是我之前提的“散户思维”:看到哪个火就去买哪个,追涨杀跌。了解股票的朋友知道,这种往往不会有多好的结局。而我比较推崇的是“价值投资”:不要受短期波动影响,如果你看好某只股票,相信它内在的成长价值,就要长期持有,最终收益一定会高于大多数人。
不要觉得大前端、后端、算法这种就一定高大上,每个领域都是为业务服务的,他们也要写很多的业务代码,并不是天天都在忙着处理高并发、高可用之类看起来金光闪闪的问题。至于选大前端还是选原生,只不过是一种UI展示形式,最终做的都是业务开发,为你的简历带来不了多大的闪光点。
而移动端这支“股票”,我是看好的。换句话说,除非哪天用户都不用手机了,或者出现了比手机更牛逼的终端了,那时候才需要去担心自己的饭碗。但我觉得更有可能的是,就算到时终端迭代,手机淘汰,我认为新终端里面运行的操作系统,依然叫做 Android。
Android进阶之路
那么,作为Android 开发者,该怎样规划自己的学习路线,然后一步一个脚印的向中高级进阶呢?
①架构师筑基必备技能
主要技能:深入Java泛型、注解深入浅出、并发编程、数据传输与序列化、Java虚拟机原理、反射与类加载、动态代理、高效IO。
相关的学习文档资料:
②Android高级UI与FrameWork源码
主要技能:高级UI晋升、Framework内核解析、Android组件内核、数据持久化。
相关的学习文档资料:
③360°全方面性能调优
主要技能:设计思想与代码质量优化、程序性能优化、开发效率优化
相关的学习文档资料:
④解读开源框架设计思想
主要技能:热修复设计、组件化框架设计、图片加载框架、网络访问框架设计、RXJava响应式编程框架设计、IOC架构设计、Android架构组件Jetpack
⑤NDK模块开发
主要技能:C与C++、JNI开发、Native开发工具、Linux编程、底层图片处理、音视频开发
⑥架构师筑基必备技能
主要技能:架构设计、MVP,MVP与MVVM、模块化与组件化架构
⑦微信小程序
主要技能:UI开发、API操作、微信对接
⑧Hybrid 开发与Flutter
主要技能:Flutter Framework架构浅析、Flutter应用启动分析、Flutter消息机制、Flutter的Platform Channel机制、Flutter异步Future机制、Flutter的Isolate创建过程、Flutter渲染机制、setState更新机制、Flutter动画原理。
image
上面大纲都有相对应的PDF文档资料帮助他们学习理解的:
本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...
网友评论