前言
市面上有很多关于面试的文章,但是基本都是从应聘者的角度去分析问题的,从招聘官的角度去分享的着实不多。我在阿里从事Android开发8八年,从技术转管理路线,后面五年面试过很多人,有刚刚学校出来的校招生,大多数人为社招面试。
本文将从我的个人招聘经历,分享下关于Android开发一面的一些思考和自己的感悟。以下所有感悟皆为笔者个人感悟,不代表任何。有不妥之处,欢迎指出
其实不得不说,找工作,真的七分实力,三分运气。不同的面试官有不同的看重点,所以千万不要为一次的滑铁卢而丢失信心。
面试环节
关于面试题的答案讲解,本文将不做非常详细的分析。具体的每个知识点,笔者后面尽量一周更新一篇相关,欢迎关注、讨论和分享。下图是笔者计划后续写的总结性技术文章。
自我介绍
基本面试这是必然的开场,笔者在公司也稍微面试过不少人吧,高峰期基本每晚都要面试一两个,听过了各种各样的开场介绍。这里简单说下笔者作为面试官比较喜欢和不喜欢的介绍吧。
我叫 xxx,毕业于(目前就职于) xxx,来自 xxx,技术栈 xxxx,喜欢 xxx。。。
类如上述的自我介绍,其实很多都在简历上写明了,甚至很多是我并不关心的。
我只关心你能力和我职位的匹配度。所以诸如此类的简介,笔者更是希望能够简短。笔者作为面试的时候,更喜欢听到的是我做过什么牛 x 的项目,这个项目有多难,如何攻克的,以及这个项目做完你收获到了什么,甚至这个项目做完,该项目对团队、部门甚至公司而言,带来哪方面的提高。或者可以介绍你在校获得了什么奖项,意味着什么、成长了什么。
如上的介绍,其实就能够让面试官眼前一亮,因为能看到你对这个项目的思考、以及这个项目对你的历练。
划重点:我们都知道下一个面试环节是知识点提问,所以这里的难,可以适当的抛出技术的难点在哪。引起面试官的兴趣,从而去提问 。面试的节奏我们要学会自己掌握,别老是被面试官牵着走
走到这一步,基本有如下两个分支:
- 面试官对你的这个项目(奖项)比较感兴趣,会接着问下去,然后问其中技术的实现细节。(所以这里自己千万不要吹牛x,然后补不回来)
- 面试官不是很感兴趣(很可能是面试官的技术盲区,比如我就这样。哈哈),然后问自己准备的一些面试题。。。
这里需要说明的,在笔者面试应聘 p7 的同学的时候,会更喜欢到你对这个项目的思考,诸如会问一下题目:
- 现有的技术方案、行业对比
- 你觉得你做过的项目或发起过的优化里面最有价值是的哪个?为什么?对业务的帮助是什么?
- 你做的东西可以复用于其他团队吗?
- 横向与市场已知的 xxx 解决方案,你们的优势在哪?
上述的这些思考,其实目前我也达不到。但是,这不一定要求面试官一定要达到这个水准,项目的思考维度也还没有这么的深入。没吃过猪肉还没见过猪跑嘛。
面试题
如上面所说的,如果面试中应聘者说到了笔者比较感兴趣的技术方向、或者技术点,那么笔者就会直接问下去。如果说到了笔者不是很擅长的技术区域,那么我笔者就不会追问技术细节了。
整体一面的时间大概也就半小时左右,加上前后的介绍,基本题目就四五题吧。笔者面试没有固定的题目,通常根据应聘者的经历而问。这里举例下在上面的介绍毫无亮点可言的时候(基本凉了一半),笔者喜欢问的一类题目吧。
题目考核
1.Android 系统源码部分(这是针对社招的,校招问的会基础一些)
事件拦截和分发
进程间的通信方式
应用的创建启动流程
Handler 是怎么导致内存泄露的
第三方库的源码,Glide、OkHttp 和 Retrofit 问得比较多,MVC,MVP和 MVVM 开发模式优缺点。
常用设计模式理解问得也多,大公司 Binder 驱动和虚拟机方面问得比较多。
2.数据结构和算法,Java 的常用集合和实现原理
比如 ArrayList ,LinkedHashMap 的实现原理,缓存淘汰策略,红黑树和二叉树,最短路径规划,海量数据筛选,很荣幸的是面试官目前还没有要我手写算法!
3.性能优化
如何检测一段代码的执行时间?
界面卡顿如何修复?
滑动不流畅怎么处理?
50fps 有什么办法可以提高到 60fps?
内存泄露怎么检测?
leakcanay 的原理?
4..线程和线程池,
wait() 和 sleep() 的区别?
同步锁
线程池的参数详解?AsyncTask 源码参数详解?
.......
最后还啰嗦一下,关于音视频方向的岗位,你必须要会 C 和 C++, OpenGL 或 OpenCv 或音视频编解码!这里要小心,我说的是熟悉,因为像音视频和 OpenCv 图像处理这些方面,没做个6、7年最好不要写精通!
阿里对学历要求基本为本科。如果没有学历这是个硬伤了,但是如果技术很强,而且内推的话也会看情况而论。
结束环节
半小时,基本只能问四五题这样,说实话,题目的考核大概能占参考度的 90%,还有 10%可能就是言语和感觉了。那么对于结束的时候,说下不好的感觉:
最后,你有什么要问我的嘛
我想咨询下,我能不能通过这次面试,我对工资无所谓,我愿意学习,特别希望能够进入 xxx 跟大牛一起学习,历练。
讲真,这类的话听过很多次了。如果在看的你也命中了这个。我想说,其实公司招我们进来,是搬砖的,不是给我们学习的。学习是你自己的需要,不是为了公司学的。说这类的话,太给自己降价了!
说说笔者应聘的时候,一般结束的你有什么要问我的嘛
的回答
- 我比较在意自己的技术方向和职业发展,能够简单介绍下如果我面试上贵公司职位,我以后的工作内容和在团队的价值么?
- 想了解下公司对于前端的重视程度以及在大前端时代,团队对于技术的思考
大概就是笔者会问,我这个职位是干嘛的?在公司有么有价值?跟我自己的职业、技术规划是否吻合?
这样!面试官会觉得,恩~这小子有思考~~~
再者,如果面试官给你介绍的非常非常详细,那么其实从侧面就说明,他对你很满意了!已经到了面试官开始极力展现自己的时候了~~
就比如:医生,我老婆怀的是男孩还是女孩啊? 不能问!!!这是政策
但是:医生,我这孩子出生我给他起名字叫王刚蛋你看合适不? _恩。。。不太合适_ 基本可能怀的是女孩了
最后
其实我想说,面试,不仅仅看运气和实力,其实有的时候也是一场心理的博弈。
你的每一次回答都可能引出下一道面试题。有意识无意识的留点回答漏斗也是一种带节奏的方式。
如果面试官提出一个问题,你都抓不住他的考点,那基本要凉~~
其次,我想说,上面我说的开放性基础题的回答,大家千万不要误解为回答的多就是好。千万不要一个题目回答了半个小时,没必要!点到为止,证明自己考虑到、有这个知识储备即可,不要回答的让面试官都烦了。
然后,对于如何拿到面试的敲门砖:简历。没有那么多可说,也不是没得说。
简而言之:面试官筛选简历是非常枯燥的一件事情。基本是一眼带过,不会在简历上撇超过 40s。
所以:
- 简历要整洁,简洁、简洁。真的别密密麻麻都是字,没那么多耐心看的。
- 重点突出,可以加粗或者颜色标识。比如:自己开源类 React 框架
- 简历是一份介绍更是一个成绩单,既然是成绩单,成绩一定要吐出:开源项目 15k star 、 推动公司技术建设 等等
- 不得不说,名校和大厂的背景。很吸睛。
最后,秋招开始了,祝福所有找工作的同学,都能顺顺利利拿到 offer!加油~
你懂得
对,文章最后往往都是广告环节~~嘎嘎嘎,不需要的请自动忽视不用往下浏览了哈
Android开发3-5年以上,有想跳槽大厂,想提升到高级工程师的小伙伴可以看下
这些是我整理的Android进阶面试资料与进阶视频教程,部分截图;