给Android程序员的一些面试建议

前言

应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程。我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司。我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试。

什么是合适的候选者

在介绍如何面试之前,这里先从公司的角度来分析:”到底什么样的候选者是公司所需要的技术人才?“就我在百度的一些面试官经验来说,一个具有如下特征的Android程序员是我们所需要的:
1. 具有本科及以上学历(名校更好)
2. 具有2年及以上的工作经验(名企更好)
3. 技术扎实,有技术追求和工作激情
4. 良好的沟通和协作

在上面的四条中,其中第3条是最为重要的,即技术,在百度技术是大家所推崇的,因此技术是决定能否通过面试的最重要最直接的原因。一般来说,越是大公司,其对技术的要求就越高,尽管部分岗位并不需要那么好的技术,但是为了对候选者做出区分,其面试过程仍然会面试一些稍微深入的话题,相信大家都有所体会。

除了技术以外,良好的沟通和协作能力也是比较重要的。也许很多人觉得这个比较抽象,心里会想:”你怎么知道我有没有良好的沟通和协作能力呢“?其实这个问题并不难,面试过程就是一次沟通过程,如果不能和面试官很好地沟通,这就说明候选者的沟通有问题。如何很好地和面试官沟通呢?给如下几点建议:
- 礼貌和尊重
- 听懂面试官的问题并直接回答。有些候选者听不懂面试官的问题,还有些面试者总是不直接回答问题,或者也许是不会的原因,就开始转弯抹角甚至转移话题,我认为这是很不好的,人要用于承担,即使这个问题不会,那也可以大声地说出来”不好意思,这个我不太会“,甚至还可以虚心地请教下面试官,面试不仅仅是一次找工作的过程,也是一次自我学习和提高的过程。大家要知道的是,不是必须全部答对问题才能通过面试,只要大部分问题能回答出来并且候选者的态度良好,那么这样的候选者仍然能通过面试,当然态度不好的候选者,即使技术很好也很大可能通不过面试。
- 谦虚谨慎、态度友好。有些候选者在面试的时候不谨慎,给人一种随意的感觉,比如坐姿不端正,翘着二郎腿等等,换句话说就是别太随意,作为面试官公司都要求不能太随意,何况候选者呢!太随意的举动会给对方一种不被尊重的感觉。关于谦虚,这个就不必多说了,任何时候都要谦虚,面试过程中骄傲自大(俗称”得瑟“),是很容易被毙的。态度友好,就是要让面试官感受到你的诚意,这样大家沟通起来才比较舒服和自在。

下面对学历和工作经验做一些说明,学历并不是一个硬性要求,即使候选者学校不怎么好也是有可能通过面试的,这就要求候选者技术非常扎实。而工作经验,之所以是2年以上,这是因为社会招聘的对象一般都是有一定工作经验的,而1年工作经验略短了点,拿百度来说,社招的最低级别一般为T4,差不多刚好就是2年经验左右。

这里做下总结,理想的候选者应该是这样的
1. 扎实的技术功底,有技术追求(必须)
2. 态度、沟通和为人都很好(必须)
3. 2年左右工作经验(基本必须)
4. 名校、名企、高学历(非必须,加分项)
基本来说,满足1和2就能通过面试,3和4都是次要条件,但是一般来说不满足3就很难满足1,不要说特例,木有参考意义。
由此可见,技术是面试结果的决定因素。那么到底技术掌握到什么程度才能比较轻松地通过面试呢?说了那么多,好像和Android没有一点关系,下面就开始以Android为例来分析下面试过程所需的技术。

Android面试过程所需要掌握的技术

一场面试都有一个流程,拿Android面试来说,面试内容不可能全是Android问题,里面应该会有编程基础相关的问题。我对Android面试中的问题做了下分类,如下所示:

类别 描述
数据结构和算法 熟悉或者知道
Java 熟练掌握
Android 熟练掌握
设计模式和架构 熟悉

一般来说,一个Android应用开发岗位是不需要太强的数据结构和算法的,但是这并不意味着候选者可以完全不懂数据结构和算法,所以数据结构和算法大家还是要稍微了解下,由于它不是必须的,所以就算面试过程中回答的不好也没关系,只要后面的Java、Android相关的问题能够完美回答就好。有同学和我反馈,说面试挂在了数据结构和算法,这在社招中应该是不多见的,这多半是因为Android的问题也没有很好地回答出来,这就是社招和校招的不同之处,校招看基础,社招看技术深度和业务。

关于设计模式和架构,其实中高级面试对这个的要求并不是特别高,熟悉下常见的设计模式基本就ok,比如单例模式、工程模式、观察者模式等。

接下来主要描述下面试过程中对Android技术的要求。在我对Android的理解这篇文章中,我对Android的技术类别做了一下划分,如下所示:

类别 描述 开发者所需级别
基本知识点 熟练掌握 初中级
深入知识点 熟练掌握 中高级
基本知识点的细节 掌握 高级
系统核心机制 熟悉、掌握 高级、资深
琐碎的知识点 了解 所有级别

对于大部分面试者来说,大家的目标岗位应该是中高级,中级岗位(百度T4)需要掌握的知识点是:基本知识点、深入知识点;高级岗位(百度T5)需要掌握的知识点是:基本知识点、深入知识点、基本知识点的细节和系统核心机制。
1. 基本知识点
比如四大组件如何使用、如何创建Service、如何进行布局等。这类知识是需要熟练掌握的,并且也没什么难度。
2. 稍微深入的知识点
比如AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于高级开发者来说也是必须掌握的,然而相信很多候选者在面试之前并不能对这些问题了如指掌。这些问题基本都是面试过程中很常见的问题,也是高级岗位所必须掌握的问题,不搞定这些问题无法达到百度的高级工程师的标准,因此也不可能通过面试。
3. 基本知识点的细节
比如Activity的启动模式和标记位、Service同时处于start和bind状态时的停止问题、AsyncTask的同步异步问题以及使用时的限制等,这种问题还有很多。这类知识点,大家在开发过程中可以并不会去注意,这会导致一个问题,那就是开发应用没问题,但是在面试时面试官只要稍微问下细节或者特殊情况,就hold不住了。 这类问题也是高级开发者所需要掌握的,有些面试官喜欢问一些看似刁钻的问题,但是候选者如果回答不了也是不好的。
4. 系统核心机制
比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式、AsyncTask的工作原理等。这类知识对于高级开发者也是建议掌握的,因为它们可以让开发者理解Android的运行体系。 这类问题并不是所有的Android面试都会涉及到,但是技术含量高的大公司有可能涉及此类问题。
5. 琐碎的知识点
此类知识点我把它们定义为一些重要但是没有什么技术难度的问题,比如如何打开一个网页、如何打电话、如何发短信、如何定位、多点触控等,这类问题往往不好记忆,但是需要的时候去查一下就能立马搞定。这类问题基本上不会出现在面试过程中。

大家结合自己对Android的学习过程以及面试经验,在面试中遇到的问题是不是都是包含在上面的5个分类之中呢?对于1和5相信所有人都没有问题,但是对比2、3、4中的内容,大家是不是都能很好地Cover呢?换句话说,如果2、3、4中的内容大家都能很好地掌握,面试中的问题还能难倒我们吗?在前面的分析中提到,技术是觉得面试是否成功的关键因素,那么在面试前要做的就是把技术搞好,同时注意沟通和态度,这样的话通过面试岂不是很简单的事?

如何学习Android面试中所需的技术

这里主要是指上面2、3和4这三个类别中的技术,说实话,这并不是一件很简单的事。那么到底如何学习呢,这里先大概说下,随后会有一系列博客来详细地介绍这些技术的学习过程。首先要阅读源码,因为面试中的很多问题需要从源码中找答案,其次要主动学习平时工作中遇不到的一些技术,由于项目的原因,我们不可能通过公司的项目来解除到Android中所有的重要技术,尤其是一些规模不大的项目来说,这个时候要主动去学习。也许有人要问:”我怎么知道哪些东西是需要主动学习的呢?“这的确是个问题,但是我在前面的分类中做了一些举例,大家可以先尝试学习下那些技术,它们都是很重要且时常在面试中出现的技术问题。另外学习的过程中要注意积累,比如写博客、记笔记都是可以的,同时在Github上做开源也是不错的选择。

另外,为了更好更快地学习Android面试中所需的技术,大家可以阅读我的一本书《Android开发艺术探索》,书中对前面的2、3和4类别中的技术细节做了详细深入的讲解,通过这本书可以达到立竿见影的效果。说到《Android开发艺术探索》,我不得不说,我写这本书的初衷是帮助Android程序员更好地成长为高级工程师,直到有一天一些读者和我反馈,说这本书的内容很适合面试,我这才突然发现,原来这本书的内容真的适合面试,这也算是无心插柳吧。至于书的内容我就不做过多介绍了,大家可以看目录、样章以及读者评价,如果觉得不适合自己的话就不要购买了。

购买地址:当当(京东和亚马逊已缺货)
样章:百度云

书评:《Android开发艺术探索》值得买吗

时间: 2024-11-03 04:56:01

给Android程序员的一些面试建议的相关文章

程序员如何快速准备面试中的算法

我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示:        但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料. 备战面试中算法的五个步骤 总体来说,备战面试中的算法,分为五个步骤,如下: 1.首选你得确保自己已经掌握好一门编程语言 如果是C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的<C程序设计语言>,和

推荐几本Android程序员必读书籍_Android

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发,从语言上来看,Android应用开发基于的是Java语言,但是这都是我们要自己下功夫去学习的事情. 不管你是Android菜鸟还是Android大神,一定能够找到一本适合自己阅读的书籍,抓紧来看看吧! 高尔基曾说"书是人类进步的阶梯",今天小编就为大家整理了一些优秀Android程序员都会阅读的书籍,帮助大家成为一个优秀的程序员 第1本书

经验之谈!35岁程序员的独家面试经历

创业失败后,在找工作.选择了三家(两家上市公司,一家将上市),都走到了关键的节点.我记录了面试过程中被问到的一些问题,希望对自己将来的面试有帮助,也希望对别人有所启发. 我的经历和现状与被问到的问题息息相关,如下: 2002年毕业.  2002~2005做售后技术支持,2005离职转做软件开发.  2009开始做项目经理,后来做部门经理,期间还有50%左右精力在技术上.  2014.10~2014.11,项目总监,偏重管理,脱离技术细节.  2014.11~2014.12,主动回归开发岗位,进入

35 岁程序员的独家面试经历

创业失败后,在找工作.选择了三家(两家上市公司,一家将上市),都走到了关键的节点.我记录了面试过程中被问到的一些问题,希望对自己将来的面试有帮助,也希望对别人有所启发. 我的经历和现状与被问到的问题息息相关,如下: 2002年毕业. 2002~2005做售后技术支持,2005离职转做软件开发. 2009开始做项目经理,后来做部门经理,期间还有50%左右精力在技术上. 2014.10~2014.11,项目总监,偏重管理,脱离技术细节. 2014.11~2014.12,主动回归开发岗位,进入C3公司

从高考到程序员---一个五年程序员的回忆及建议

(本文参加CSDN的"从高考到程序员"征文活动,谢谢!) 每年的六月初,有关高考的信息就会见诸于报纸.网络等,让我这位多年之前参加高考的.已工作多年的人不由得也回忆起了自己高考时的情景.恰逢CSDN举办本次"从高考到程序员"的征文活动,我就在这篇文章中分享一下自己的高考和大学经历,并为想成为程序员的学弟学妹们提供一些建议. 我的高考经历 我高中上的是我们市的一个重点中学,当时我们一个年级有22个班,总共一千多人,我的成绩在前几十名到一百多名之间徘徊.我参加高考是在2

最简洁的PHP程序员学习路线及建议

为了你可以更好地学习PHP,这次主要是想说一下PHP的学习线路,文末还有10条php性能优化的小技巧介绍哦 适用于PHP初学者的学习线路和建议 我们要有一个循序渐进的学习过程,这里先把学习PHP的过程做一下概括,这和很多学习PHP的爱好者是不谋而合的: (1) 熟悉HTML/CSS/JS..网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉 (2) 理解动态语言的概念和运做机制,熟悉基本的PHP语法 (3) 学习如何将PHP与HTML结合起来,完成简单的动态页面 (4) 接触学习My

云测网王军:为Android程序员服务

"移动互联网整个产业链还处在黎明前的黑暗, 所以早期开发者们还顾及不到科学严谨的App测试.但随着产业链的逐步完善,相信这一需求会逐步显现出来."--王军近几年,随着移动互联网的飞 速发展,移动应用App已经渗透到很多人的生活.娱乐.学习.工作当中,且每天 都有大量具有创造性的各种App犹如雨后春笋般交付到用户手中.艾媒咨询(iiMedia Research)统计数据显示,2011年中国Android开发者数量为78.42万. 预计2012年将达到116.31万,2013年达到137.

精华阅读第7期|程序员职业人生规划的三点建议

不久前,在中关村创新工场有一场为广大程序员同学做的职业规划分享,优才学院的 CEO 伍星和优伯立信的 CEO 罗飞给大家分享很多关于职业规划的东西.技术到底是不是吃青春饭?在职业规划时,是不是要了解行业趋势?工作的意识形态真的很重要吗?程序员应该如何安排自己的业余时间?程序员如何去面试,如何去找对象?非常的「接地气」! 其实,初识罗飞也是因为一场优才学院的线下活动,他看起来很安静,但是往往安静的人,都是非常有「深度」的人.他在<程序员职业人生规划的三点建议>中,谈到了对技术思考的3个阶段,分享

程序员面试什么最重要?

程序员面试一直是社区乐于讨论的热门话题.我自己从06年实习以来,先后经历了4家软件公司,全部是外企,其中有世界500强的通信企业,有从事期权期货交易的欧洲中等规模的金融公司,也有为大型汽车制造商开发Android智能汽车的新兴公司.跨入IT行业以来,我在求职过程中经历过多次面试,最近两年也有过多次面试别人的经验.我感觉现在到了对这个问题发表自己看法的时候,这篇文章是我站在面试官角度对于程序员面试问题的一个阶段性反思和经验总结. 目标 相信和不少朋友一样,有了几年工作经验成为Senior后就开始了