大厂面试官亲述:0~3年移动研发工程师必备技能

本文将帮助读者解答几点困惑:

  1. 需要具备哪些技能才能拿到心仪公司的 Offer?
  2. 知名互联网公司对候选人都有哪些要求?
  3. 客户端工程师需要具备哪些能力才能不被淘汰?

分享者从大学走到今天,经历比较坎坷,感悟较深。本文旨在让在校同学明白未来公司需要什么样的人才,在校期间应该如何去做,热爱客户端开发的同学应该提前准备什么,让步入职场的同学明白如何在繁忙的工作中提升自己,如何在团队中快速成长,以及客户端工程师需要具备哪些专业化的能力。

推荐Android学习PDF+架构视频+面试文档+源码笔记

内容摘要

  • 大学期间如何确定自己未来的技术方向?
  • 客户端方向校招面试需要重点准备什么
  • 如何与面试官更好的沟通?
  • 如何挖掘自身优势
  • 如何在繁忙的工作中提升自我?
  • 如何在不同的团队中快速找准自己的位置?
  • 客户端工程师需要具备什么能力
  • 业务线与技术线有哪些差异?
  • 移动开发未来的发展方向。

一个小故事

我先给大家讲一个故事。故事的主人公,是一个平凡的不能再平凡的同学,这里暂且叫他 K 同学。他读了一个普通的大学,机械专业,考研二战失利,本以为生活已经止步于此,然而 K 同学是一个不服输的人,在他的好友 C 同学的诱惑下,提起行李就来到了 S 城,和 C 同学挤在了一个出租屋里。

K 同学看 C 同学在互联网行业工作,感觉非常有朝气,自己也想往这个行业发展,于是像 C 同学请教自己应该做什么。C 同学列出了开发、产品、运营三个方向让他选,他花了三天的时间上网查资料,最后选择了产品方向。而 K 同学实际上是个压根不懂产品的人,但是他肯努力。C 同学是一个具备产品思维的工程师,带着 K 同学入了产品的门。先给 K 同学普及了各种产品概念,给他展示了各种比较火的产品之后,K 同学看了一个月《人人都是产品经理》,看完之后 K 同学对产品还是没概念,于是 C 同学灵机一动:我们一起做个小产品吧。R 项目就这么诞生了。C 同学教 K 同学用 Tower 工具做敏捷看板,做需求池,规划需求,C 同学完成需求。

大概几个月后,K 同学通过这个小项目体会到了做产品的感觉,于是出去找工作,找到了某个微小公司的产品经理助理工作。由于 K 同学表达能力很不错,愿意学习,愿意吃苦,很快就得到了同事们的认可。这时候房租到期,K 同学和 C 同学由于考虑到通勤时长问题,没有再合租。后续的日子里,K 同学在工作中遇到困惑不解的时候,都会找 C 同学聊一聊,C 同学也把自己总结的一些心得告诉他。如今 K 同学在一家互联网金融公司做正式的产品经理,从最初的月薪 7k 到现在的年薪 20w,每每想起当初的那段时光,K 同学总是感慨万千。C 同学想了想,K 同学的励志成长史是任何一个普通同学可以复制的,没有任何光环,于是 C 同学结合自身的一些感悟,稍作调整,写了一篇文章分享给大家,题目就叫:大厂面试官亲述:0~3 年移动研发工程师必备技能。

写到这里,大家应该明白了,这个 C 同学,就是我。K 同学,是我的高中同学,也是我的好哥们,S 城,就是上海。刚来上海的时候是 2015 年下半年,2 年后,K 同学已经独当一面。我认为,不管是产品还是开发,只要在互联网行业工作,一定有些东西是相通的。

希望大家看完这次的分享,能有所思考,有所感悟。

大学期间如何确定自己未来的技术方向?

关于这个问题,我想着重谈两个字:“兴趣”。大学一共四年,分为四个阶段,对于大部分人来说,大一是懵懂的一年,接触到的是基础课和专业基础知识;大二的时候一些优秀的同学会有一部分意识的觉醒,在接触一些入门级专业课的时候产生兴趣;大三的时候是有技术意识的一年,很多同学会大致确定自己的技术方向,找到一些项目进行深入探究,同时专业课知识会学的更多。大四自然就是硕果累累的一年,offer 到手,美滋滋的过完大学最后一年。但是实际上很多大学生并不是这样的。大家会发现,有很多同学在大三的时候还处于迷茫期,其中也有成绩不错的同学,他们迷茫的原因大多是因为没有找到自己感兴趣的方向,有的被迫接受了一些东西,有的看大家都在学什么,自己就学什么。这种是非常不可取的,我要着重强调:没有兴趣支撑,技术的路走不远

兴趣是一个很玄乎的东西,看不见摸不着,但是它可以让你为一件事情疯狂,为它付出一切。举一个我自己的例子,我高中时候就痴迷于玩手机,那时候就是玩手机游戏,探索手机里的各种功能,家里人的手机出什么问题,我都能摸索摸索,那时候还是诺基亚的时代,但是我心里就对手机这个东西很感兴趣。大学时候用上了人生中第一台 Android 手机,大二的时候发现有同学会刷机,于是我就跟着同学学习刷机,当时刷机成风,我也尝试了各种 ROM。然后我混进了当时比较火的一些 Android 玩机的论坛,发现了 “美化 APP” 这件事很火,于是我又自学了反编译,做了一些 APP 的美化,当时感觉非常有成就感。在美化了几个 APP 之后,我就比较好奇,一个 APP 是怎么做出来的?就这样我慢慢开始了 Android 开发,大三的时候做了 Android 相关的项目,参加了 Android 相关的比赛,就这么一直走了下来。能支撑我走到今天的不是别的,就是兴趣。学习代码对很多人来说是一件很枯燥的事情,如果没有兴趣的支撑,走不了多远。所以我想对大学生们说,大学的时候多接触各类技术,接触面广了,更容易找到自己感兴趣的点,然后慢慢深挖就可以了。

客户端方向校招面试需要重点准备什么?

客户端的同学们可能或多或少都上网搜过类似的问题,也许会搜到很多模板化的答案,比如说:扎实的计算机基础和数据结构算法基础,各大公司面经 / 面试题等,其实大家心里都明白,那么搜出来的这些答案显然并不是自己内心想要的,这里我就谈谈内心深处想要什么。

首先,对于大学生来说,扎实的计算机基础和数据结构算法基础是需要的,毕竟校招面试不同于社招面试,对于校招生来说,大公司会更看重基础,其次再看项目经验。有本比较火的书《剑指 offer》不错,大家可以看看,我没看过,不过不少朋友说对于校招来说挺有效果。

下面我就来谈谈除了这些,我们还需要准备什么。面试官喜欢什么样的候选人呢?“聪明的”。什么样的人是聪明的?这很难定义,毕竟面试的时候不可能考智商。我做过 17 年校招面试官,我来讲讲我怎么认为在短短的几十分钟面试时间内学生是否聪明。首先,我会全程关注面试过程中的沟通交流,这是非常重要的,聪明的人会明白我问的问题是什么意思,他应该回答什么,他会有相对完整的思路回答问题,还会有自己的思考。遇到不太确定的问题,他不会耍小聪明糊弄面试官,会坦诚的说自己确实不了解,在面试官的点拨下,他会思考并形成新的思路来解答问题。沟通流畅,不会反复扯皮。对于技术有自己的理解,对于未来的技术生活有自己的规划,并不是盲目的瞎学。思想独立,不会被市面上各种扯淡的文章影响,某种程度上能透过现象看本质,不浮躁,脚踏实地,认认真真探究技术。

最后我补一些 Android 同学在校招面试的时候需要着重准备的一些知识点(数据结构与 java 基础是需要具备的,大家别忘了):

  • Activity 生命周期以及交互过程中生命周期的变化
  • Service 生命周期,bind 和 start 的区别
  • Activity 的四种 launchMode
  • 什么是线程,什么是进程
  • Android 常用的锁
  • RecyclerView 是如何做到复用 View 的
  • View 的事件传递机制
  • GC 的大致过程以及策略
  • Android 进程优先级
  • ClassLoader(双亲委派)
  • Android 图片缓存(LRU)
  • 某种特定分辨率图片在运行过程中所占内存估算

如何与面试官更好的沟通?

与面试官沟通,这是面试过程中的一门艺术。沟通的好,问题回答的也不错,通过面试的概率会非常大,在沟通的过程中,面试官也可以观察候选人的性格。作为面试者,很多人在面试过程中会紧张,这会导致有些本来自己会的问题回答不上来或者回答的不好,100% 的实力可能只发挥出 80%。我想告诉大家,面试不必紧张,面试是一个双向选择的过程,面试官并没有高人一等,候选人也不要认为面试官是来碾压自己的,实际上一个优秀的面试官是来挖掘候选人潜力的,面试过程是一个挖掘的过程,地位是平等的。

其次,面试过程中沟通流畅是加分的,要想流畅的沟通,自己的思路就要清晰。这点没法速成,需要大家在日常生活和学习中注意和练习,做事要讲究逻辑,不能一团浆糊,对细节要处理到位,锻炼自己的思路和逻辑思维,可以去看看《逻辑思维》等节目,看看主讲人是如何说明白一件事的。可以参考 S(背景)T(挑战)A(行动)R(结果)模型,有逻辑性的说清楚自己想表达的内容。

第三,要有自信。在面对一些自己没有把握的问题的时候不要慌,可以当场思考,给出回答。一般情况下面试官都会进行一些点拨,要顺着面试官的思路去思考,这样更容易想到面试官想让你回答的内容。一个自信的人临场发挥是比较稳定的,不会慌乱,平时要注意给自己打打气,不要被网上卖焦虑的文章影响。

第四,气场。这点不能强求,但是非常有用。有气场的同学,可以主导整场面试的氛围,面试官往往会问一些比较开放性的问题,比如说:你认为你做的 XX 项目中你最引以为傲的是哪部分?聪明的同学就会把话题引到自己的强项上面,和面试官深入交流,让他知道你的优秀。在面试过程中一般会有多次开放性问题,这都是候选人可以主动出击的关键节点。如果一路聊下来,面试官在跟着你的思路走,你们产生了共鸣,那基本上就十拿九稳了。

如何挖掘自身优势?

这是我要和大家重点聊聊的话题。不管是在校大学生还是已经工作了的同学,都需要挖掘自身优势。小时候我们经常听大人说木桶原理,意思就是补短板,然后 “金子总会发光”,千里马总有伯乐。时代变迁,如今我认为是一个长板社会,你要让更多人知道你的优势,然后私下自己补短板。不要坐等别人发现优秀的你,而是要展示自己,让更多人看到你。

第一,要自信。挖掘自身优势的前提是要先明白,自己是有优势的,这就需要自信。一个不自信的人,会认为自己没什么优势,在这个浮躁的社会中再被焦虑文洗洗脑,那就没后续了,这是一个恶性循环。大家在找工作的过程中,一定会听到很多 “我一个同学刚拿下 XX 的 offer,20k” 或者 “我一个朋友 offer 拿了好几个,你面的那个公司给他开 30k 他都拒了” 再或者 “20k 都没有,你这是什么 offer?我一个 XX 都 XXXX”。这些话是不是很耳熟?有的可能是听别人口述,有的是在各大微信群里看到 “大佬” 们在聊。这时候很多人都会焦虑,会想,完了完了,我这么弱,人家应届生都比我厉害,我技术太差了,我什么都不会。关于这一点,我体会非常深。曾经我也是焦虑大军的一员,天天都在听 “某学弟 30k 的 offer 都看不上”,“某师兄觉得不到 50k 在上海都是捡破烂的” 等等,然而在我出去面试拿 offer 的时候,我才发现,大部分人都在吹,一个一个吹的离谱。大家可以想一想,都是圈内人,什么技术实力的人,什么薪资待遇的人,心里都是有数的,只是被浮躁的氛围蒙蔽了双眼,对于 “我同学”,“我朋友” 等根本无从考证的扯淡数据,笑笑就行了,我希望看过这篇文章的同学,能自信的说出:“我 XXXXXXXXXXXX”,而不是 “我同学”,“我朋友”。胡吹成风不可取,作为技术人,大家还是要脚踏实地,一步一步来,如果实在烦这样的言论,我支持你怼回去。

第二,不要盲目羡慕别人。你看到的别人,那是人家想让你看到的,其他你看不到的你会选择性忽略,这会导致在羡慕中丢失自信。自己什么样只有自己心里清楚,羡慕别人意义不大。

第三,梳理自身技能树。大家都玩过网络游戏吧,很多游戏人物都是有技能树的,在技能树上点技能,点的越多会越强大。其实我们人也一样,大家可以列出自己的技能树,就会发现自己平时忽略掉的优势,每个人都很强,每个人都不同,每个人都非常优秀。吾日三省吾身,平时可以多思考,不管是对技术,对生活,对前途,都可以多思考。可以找两三好友一起聊聊天,分享思考所得,互相学习。

第四,拒绝浮躁,脚踏实地。不要听网上扯淡的言论,自己过好自己的生活。学技术没有捷径,脚踏实地是最好的做法。质变的前提是量变,对于技术人来说,T 字型人才是比较受欢迎的。对于自己擅长的领域,要深挖,要足够专注,足够专业,可以解决各种问题。对其他领域,要了解,选一两个感兴趣的方向探索。从全局的角度看问题,上帝视角把控全局。

如何在繁忙的工作中提升自我?

对于大部分同学来说,在一家普通的公司写着普通的代码,平时加班,周六日在家休息玩耍。那这个过程中,我们怎么提升自己呢?

上文中,我们提到了技能树。这里,我要提一提规划。你想做一个什么样的技术人?未来 3 年、5 年、7 年的时候,你想具备什么样的能力,获得什么样的成就?这就是目标感。有了目标感之后,我们要细化分析,达到某个目标,需要什么样的能力?把技能树画出来,把细分目标之后需要的能力圈出来,事情就变得可以量化了。大家在列目标的时候,一定要可以验证结果,而不是一个模糊的目标。举个例子,比如要学习 okhttp 框架,我们列的目标不能是 “我要学会 okhttp 框架并且了解它的原理”,而是 “我要学会 okhttp 框架及其原理,总结产出 3 篇技术博客”。这两个目标是不一样的,第一个无法验证,第二个可以验证。做规划的时候,一定要细化目标之后达到一个可以验证的程度,否则等于白做,这是我这两年学到的一个非常重要的概念,我花了一年的时间才把自己的思路完全纠正过来,现在在做规划的时候,我已经可以比较自然的进行细化并且做到可验证。

如何在不同的团队中快速找准自己的位置?

这里我们要谈的是:自我定位。首先,要对自己有一个客观的认知,知道自己的长处短处、优势劣势。不只是技术上的,还有性格上的,生活上的。如果没有客观的定位,没法谈后续。

其次,在不同的团队中工作学习,我们要了解同事们都扮演着什么角色,要找到团队目前存在的缺口,然后自己站上去。没有一个团队是完美无缺的,找到缺口,结合自己的技能和兴趣点,不难找准自己的位置。了解自己的同事,了解自己的 leader,会更快的找准自己的位置。聪明的人总能在不同的团队中快速找准自己的位置,这是加分项,对职业发展很有好处。一句话总结:寻找团队的 “风口”,站上去。

客户端工程师需要具备什么能力?

先谈第一个问题:工程师需要具备什么样的能力?工程师和码农的区别就是,工程师具备工程师思维。工程师是做什么的?是利用自己扎实的专业知识和强大的学习能力解决业务中遇到的困难的。大家仔细观察身边优秀的同事,不难发现他们大多具备这种思维。工程师的眼界更广,解决问题的时候不会太限制自己的手段,语言只是工具,遇到不会的知识会先学会然后继续解决问题。优秀的人才就具备这样的能力,不管是什么工程师,都应该朝着这个方向努力。技术不是用来炫技的,而是用来解决实际业务中遇到的问题的。一旦脱离了业务,就没什么实际意义了。

第二个问题,客户端工程师需要具备什么能力?这里我给大家列一下(加分项不是必备项,可以选一两个给自己加分):

  • 计算机基础知识
  • 网络基础知识
  • 数据结构与基础算法
  • Java/OC/Swift/Kotlin 熟练掌握其中 1~2 门
  • 对经常使用的热门库需要熟悉原理
  • 设计模式常用的需要熟悉
  • 锁机制、多线程编程能力
  • 架构设计的思想
  • 洞悉移动端未来的发展趋势
  • 了解 / 熟悉 web 前端知识(加分)
  • 开源社区贡献代码(加分)
  • 熟悉 git 操作
  • 了解 / 熟悉后端开发知识例如 Spring Boot(加分)
  • 具备产品思维(加分)
  • 对技术的热情,探究学习新知识的能力
  • 沟通、总结、规划的软素质

这一切都是基于具备工程师思维的基础来说的。

业务线与技术线有哪些差异?

很多人给我说,业务线没技术含量,羡慕技术线的同学。这个观念是错误的!

大家都是推动业务的发展而存在的,业务线的同学更多的会专注于如何实现业务需求,针对不同的需求进行优化、迭代,站在产品的角度想问题,站在用户的角度想问题,用技术推动解决实际业务中遇到的各种问题。技术线的同学更多的会专注于实现一些框架或者 SDK,给业务同学提供底层的技术支持。在我司,业务线的同学经常会挑战技术线同学的代码,推动基础设施的不断优化。业务线的同学服务于产品用户,技术线的同学服务于业务线的同学,同时也对产品的某些指标负责。这是一个互补的关系,少了其中一个都不行,选择技术线或者业务线,只是和个人的发展诉求相关,大家都是为了做出更好的产品,最终服务于广大用户。能做好自己手头的事情,用自己专业的知识解决各类问题,就是优秀的工程师,不管在业务线还是技术线,都一样。

移动开发未来的发展方向

这里我列几个未来的方向,大家可以有针对的了解学习:

  • 移动端 AI
  • 移动音视频多媒体开发
  • 区块链与移动端的结合
  • 客户端动态化
  • 移动端 Web 容器

Android学习PDF+架构视频+面试文档+源码笔记


感谢大家能耐着性子看到这里

在这里我也分享自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

如果你有需要的话,可以点赞+评论关注我加Vx:15388039515(备注CSDN,需要资料)

发布了182 篇原创文章 · 获赞 70 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_45258969/article/details/103705606