面试以及被面试

通常面试时间短则30分钟,多则1个小时,这么点时间要全面考察一我的难度很大,须要一些技巧,这里我不局限于回答题主的问题,而是分享一下我我的关于如何作好Android技术面试的一些经验:java


面试前的准备 程序员

1. 简历调查 面试

  简历到你手上的时候,你要作好充分的调查分析,不只仅是对公司负责,也是对本身与候选人时间的尊重,明显不match的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但若是跟你的岗位不match, 也不要浪费你们时间,你要想清楚如今须要的人是有潜力能够培养的,仍是亟需帮忙干活的。另外若是简历里附带了博客连接,GitHub地址,相关做品的,能够提早去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。算法


准备问题 sql

  了解清楚候选人背景后,要根据简历,有针对性的准备问题,能够是他做品或作过项目里的某个技术细节的实现方式,也能够是他声称精通的某些领域的相关问题。总之不要等到面试过程当中现想问题,特别是刚开始面试别人的同窗,每每经验不足稍带紧张致使大脑短路,其实也是很尴尬的,把要问的问题提早写下来,准备充分。工具

考察哪些点? oop

1. 简历是否真实 post

  这实际上是面试第一要务,面试的过程其实就是看简历是否属实的过程,由于能到面试环节,说明这我的是符合要求的,不知足要求的早就被剔除了,若是他真的如简历描述的那样,100%会招过来,若是人人都如此,那就不须要有面试这种过程了。学习


须要注意的是这里的真实有三层含义:动画


一是他如实描述了自身经历,不少人只在一些大项目里作一个很小的螺丝钉,但简历里每每夸张这段经历。


二是不知道本身不知道,常见于简历里各类“精通”开头的描述,由于知识体系与视野的局限,明明只是了解很浅却夸口精通,不少时候他并不认为本身说的有问题,而是真的觉得本身已然精通,有点井底之蛙的感受。


三是简历里的真实要与你的指望相匹配,一门技术了解到怎样的程度才算精通,很难有定论,因此这里的“真实”只能是候选人与面试官标准之间的契合,这种有主观运气成分,也许面试官水平不够错误判断了你,也不用感到不爽,面试未尝不是种双向选择呢。


技术的深度 

  技术的深度一贯是我最看重的部分,当今任何一个技术领域都很是宽广,一我的要同时掌握那么多知识而且都深刻几乎不可能,那都须要拼学习效率与工做年限了。而你曾经作过的东西,正在作的东西,是绝对能够了解得更深刻的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即使不是亲自去看源码,也会花点时间了解别人整理过的经验,因此单凭考察技术上的深度,就能够考察一我的是否对技术有热情,是否有技术好奇心等等这些不少大牛认为的所谓“优秀程序员的特征”。


  以前曾看到过一句话:“一我的对他所作的事情了解得越深,他就能作的越好”。放在这里再合适不过了。


技术的广度 

  深度是有了,还须要广度吗?我我的的理解是:深度是必要条件,广度是加分项。一样的有技术好奇心的优秀程序员,也不会知足于仅仅局限于本身的一亩三分地,工做之余,也会想要尝试一些其它的领域和方向,由于投入问题也许不够深刻,但不少领域知识你知道与不知道,对你我的知识体系的造成关系很大。好比你要实现一个功能,在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单sql语句就能够实现啦,为何要搞得那么麻烦?这个例子虽然举得很蹩脚,可是我想意思你们应该已经明白了。知识越有广度,头脑里的技术体系就越完备,一样的问题,你就能够想到N个解,思考一下就得出最优解了,若是你听都没听过一些东西,就会常常说出“这个好难搞啊”,“这根本就不可能”,其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思。


逻辑思惟能力 

  这也是我比较看重的一点,这里并非指那些臭名昭彰的脑经急转弯问题,而是经过交流观察,判断一我的表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但若是你细心观察,你会发现很容易经过一些简单的交流,就能够看出一我的是否逻辑清晰。有时候你会以为某我的表达沟通很不错,其实不是沟通的问题,是他说出去的话,通过了他大脑的条理清晰的整理,让你很容易就能明白。这种习惯不是一朝一夕就能养成的,因此面试过程当中这点装不出来。


  另一我的若是逻辑清晰,并且反应又敏捷,语速很快,那是大大的加分项,恭喜你,碰到一个聪明人了。


具体问哪些问题? 

  前面提到的是要重点考察的点,那么具体的Android开发,有没有一些通用的问题能够问的呢?我我的通常会从这几个角度考察候选人:


Android经验 

  若是不是校招,Android经验是必须的,我比较喜欢问一些基础概念与技术原理,好比Activity、View、Window的理解,各LaunchMode的使用场景,View的绘制流程,Touch事件机制,Android动画的原理,Handler, Looper的理解,Android跨进程通信的方式,Binder的理解,Android Mashup设计的理解等等。


Java水平 

  基本上就是Effective Java那本书里提到的东西,若是你背完那本书里的问题,而且对答如流,没问题,就要你这样的。其实也会考察关于final用法,反射原理,注解原理,java编译过程,GC等一些常见问题。


IT基础知识 

  其实就是计算机科班学生学校里学到的一些东西,在校招时这块是重点,社招会放宽,但一些基本的常识是要有的,好比很多人都不知道http的get post有啥区别,https的那个s是什么意思,讲不清进程与线程的概念,不知道二分算法是个啥东西。这些简单问题的筛选,能够过滤一些所谓野路子的程序员,是否是科班出身不重要,搞这行就得对一些基本常识有概念,否则之后怎么愉快的交流呢?


代码质量的认识 

  咱们须要的是一个对代码味道有感受的人,关于这点,看下《Clean Code》就够了,面试中这点其实很差考察,可让他聊一聊对代码质量的认识,虽然不能排除对方夸夸其谈,至少想法很少,只能提到命名风格这一点的人是不符合要求的,也能够在写Code的环节中观察。


技术视野 

  好比对Android开发新技术的了解与学习,对其它流行技术领域的了解,这其实与我刚才提到的技术广度的考察有关,就我面试过程当中,发现不少非互联网行业的从业人员,由于公司各类操蛋规定与公司技术氛围的缘由,技术视野至关狭窄。


  我我的对这点深有体会,2011年我还在传统行业从事软件研发,当时的公司由于担忧技术信息泄露,不让上网,至关封闭,我我的虽然自认为已在那个行业内作到业内专家的级别,但总感受哪里不对,有一天我很兴奋的打算跟身边同事聊一聊Android的时候,发现他们竟然都不知Android为什么物?2011年啊同志们,当时的震惊没法言表,深切感受到须要做出改变了,毅然放弃多年行业积累,转战移动互联网,直到如今。时至今日,多年前的小伙伴也有不少混出了名党,开始走向人生巅峰,我也历来没有后悔当初作出的选择。


技术想象力 

  一个优秀的技术人,若是知识的深度与广度足够,知识已成体系,那么他对于一些从未接触过的领域,也是能够作出足够合理的想象与判断,面试过程当中若是问到一些领域候选人没有涉猎,这时候通常不用过多纠缠,但若是你想借这个问题考察下他的技术想象力,能够深刻下去,好比问他:“你以为这个东西应该是什么原理呢?”,“这个酷炫的控件,若是要你来作,你会怎么实现?”。在这方面表现出色的同窗无疑是有深厚基础与足够广度的人。


技术习惯 

  好的程序员都会有好的习惯,好比各类快捷键的熟练应用,各类命令行的掌握,一些提升开发效率的工具与习惯,碰到问题是baidu仍是google,有没有作一些小工具帮助减小重复工做,工做之余有没有继续学习?有没有看什么不错的书等等,这些小细节很大程度上决定了程序员的开发效率,这也是为何不少人说一个优秀程序员抵得上100个普通程序员,这也是重要缘由之一。


面试后的反馈: 

  面试通常不止一轮,你须要给出你的反馈,多轮面试结果一块儿考量,减小误判的风险,反馈通常怎么写呢?如下是个人建议:


面试纪录 

  面试过程当中的完整纪录,尽可能客观评价,让其它面试官知道你问了哪些问题,回答的怎么样,也避免了重复问题的尴尬。


优势与缺点 

  你的主观评价,亮点有哪些,你以为哪些地方不够好?


综合评价 

  你对候选人的综合评价,hire或者no hire的根本缘由,若是有些地方感受没考察清楚,指望其它面试官继续增强考察,也能够写上。


怎样才给经过? 

  经过标准因人而异,每一个人都有本身心中的bar, 但仍是有些可直观考量的因素的:


一是岗位的要求,不一样的岗位标准固然不同,校招与设招确定也不同。


二是岗位的紧急程度,兄弟们每天加班忙死了,赶忙找人过来帮忙吧哈哈。


三是候选人的年龄,大龄程序员莫怪,一把年纪了还跟刚毕业一两年的同事一个水平,说明成长太慢,作技术的潜力有限,这个你们应该能理解。


四是前面提到的作技术的深度,这个是必须的,广度也要有一些,视野不能太窄。


五是要有亮点,你们在面试的过程当中要注意发掘亮点,有时候他问题不少但有一个足够的亮点也够了,用心观察也发现不了什么亮点的,就要注意了。


  说了这么水平多,其实最重要的就是一句话,问问你本身:你真的原意跟那个家伙一块儿并肩战斗吗? 

  转载出处: 

  http://www.jianshu.com/p/74565bd741ab

相关文章
相关标签/搜索