前言
本人Android岗,本科,近几个月疯狂补习,顺带还研究了一番面试注意事项和面试官会比较青睐的应聘者,面试6家公司,3家大厂,最终入职阿里 。
本文会结合自己面试经历以及在面试中总结出来的些许经验,综合分析面试官会喜欢怎样的应聘者,也希望可以通过招聘这面镜子照亮自己,怎样成为一个更好的Android工程师。
面试题
- HashMap机制以及--》如何实现线程安全的?
- 线程通信、线程安全问题&进程通信(Android和Java混一起把自己搞混了)
- 内存管理
- 单例模式以及你对设计模式的了解
- 看过的源码(Android系统&&三方库
- handler机制
- 如何实现大图片的优化处理?
- Java 基础起手:final,static,hashmap
- 设计模式继承的缺点与组合
- 设计一个线程池
- android 内存泄露场景
- android 基础 handler机制 (原理源码)
- android 事件分发机制
- https 的过程
- 实现 lrucache
- GLide 源码
- http1.0 和htpp2.0 区别点
- handler机制(原理)
- view 事件分发
- Java动态性的体现
- Java的动态代理以及反射(详细说说)
- Java垃圾回收机制
- 反问
面试官手下带了几百号人,挺和蔼的,一直说不要紧张就当聊聊天。
招聘的目的
当今社会,技术已经成为影响商业成功的关键因素,工程师成为了这些公司最宝贵的财富,没有优秀的人组成团队来完成商业目标,公司根本不可能有今天的成就。所以招聘,就是选择最优秀的人。
招什么样的人?
招优秀的人显然是一个很模糊的概念,我们来度量的时候,我个人认为三个因素是最关键的:
- 技能
工作项目经验,以及解决疑难问题的能力,毕竟招来的人首先必须很好的完成工作,这是最基本的要求,注意,是很好的完成,不是仅仅完成。
- 潜力
这个概念看起来比较模糊,其实还是比较容易评价的,对计算机相关的专业的知识体系是不是完整,基础是不是扎实,平常是不是喜欢钻研,对这个世界充满好奇心。
这几年走下来,沉淀的速度如何,都是判断一个人的潜力的方式,注意我们看潜力主要是基于候选人的之前的成长经历实事求是来看,过去的优秀经历才能给未来背书。
潜力和技能的重要性一样重要,我们不能只看眼前,团队是需要不断发展和前进的,所以我们面试官认为招聘应该面向未来。
- 软实力
软实力这里其实包含了性格,执行力,领导力等方方面面,它代表了候选人是否能快速融入团队,拿到结果,带领团队攻城拔寨,激励和影响身边的人变得更加优秀等等。
软实力一般HR肯定会考察,虽然技术面不会特别去关注,但是从面试的过程中可以看出候选人的沟通能力,以及性格相关的特点,也值得我们注意。
说了这么多,其实在招人上有一个对比的标杆,就是你招的人是不是比团队中同一等级中50%的同学优秀,如果你觉得没有他们优秀,那不用纠结,这个候选人不要了,团队必须不停加入更好的同学,才能变得更加强大。
面试的方法
这里结合之前的总结以及自己的真实经历,讲解面试的一些方法。
面试不会问的事
- HR一般不会问知道性的问题。比如问知不知道这个API干什么的,怎么调用,这个命令怎么用的,知道性的知识。
- HR一般不会问一些特别复杂的问题。比如问一个特别复杂的算法,问一个很抽象的大问题,因为短时间内很难给予回答。
- HR一般不会问一些假设性的问题。假设你参与了这个项目,你觉得哪几个地方需要优化。
之所以说这些问题不会问,我认为主要是因为这些很难考察到面试者的真实能力
45分钟的时间本来就很短,有些问题有可能比较偏,有些问题又过于庞大没法一下子描述特别清楚
还有一些问题缺乏上下文,让人摸不到头脑,所以HR会尽量避免这么问问题。
面试应该做的事
- 问已经发生的事情
比如面试Android开发者,面试官会认真看你做过的App,具体的工作是什么,准备一些相关的问题,这里就可以看出来你之前工作中的积累是什么,有多深。
- 问题解决思路
针对项目经验和一些学习的经验上面,HR问拿到问题以后解决思路是什么,在什么场景下,为什么这么做
这里根据面试者的方案,分析的方法论,就可以大致了解你是否聪明,知识面是不是够广,遇到问题时会不会举一反三。
具体可以举个简单的例子,很多同学说自己做过架构,然后都会讲自己做了一个解耦和分层的框架,其实这类框架iOS很多,外部github上就有各种方案。
在阿里内部手淘早先做的bundle拆分时沉淀的容器规则,天猫开源出去的beeHive,闲鱼内部的Xframework,抑或是服务端的spring mvc,其实都实现了IoC
但实现和思路上都有一些差异,到底为什么这么做,其实是有区别的,这里面就可以看出知识广度,总结和思辩能力,在关键路径上的技术判断。
又比如说,我们总在强调性能稳定性怎么做,业界也有很多方案,到底哪个方案更好呢?答案没有绝对的对错,取决于某个时间点和场景下哪个问题是最核心的突破点,而你的选择标准和落地的技术方案是不是合理(考虑成本,收益,以及后续的风险是什么)。
一般来讲,我们更倾向于用系统化的思维看待一个问题,也就是说,相比根据人的经验去识别性能瓶颈,我们更希望能通过自动化,智能化,数据化的方式去解决问题。
- 多问
一般HR喜欢以问为主,但因为大家的知识体系不太一样,成长环境也不同,直接这么问起来很难就找到面试者的优点,所以我们尽量自己去陈述,然后以学习和交流的心态针对陈述中存疑的地方进行发问,也更容易全面的表达自己。
知道了应该怎么做,那具体的提问方法有没有什么技巧呢?在招聘中有一个重要的STAR原则,可以跟大家分享。
STAR原则
- 处境(situation)
在什么样的环境下
- 任务(task)
接到了什么样的任务
- 行动(action)
然后具体怎么落地的
- 结果(result)
拿到了什么结果
我们尽量说清楚在什么样的环境下接到这个任务,接到以后是做了什么事情,最后的结果是什么样子的。
乍一听,感觉,这不是套路嘛,是不是知道这个原则的人,只要按照这四点编故事,就能通过面试了?当然不是,在叙述过程中,面试官可以分辨出STAR中的真假,那下面就举一些例子。
假的STAR
- 描述含糊不清
比如,我用这个方案解决了这个问题,效果很好,得到了大家的一致好评。注意,效果好是哪里好,有什么度量的标准?一致好评的体现是在具体KPI还是比如团队有个什么奖励之类的。
- 只表达态度和看法
我觉得线上稳定性非常重要,应该重点解决和持续跟进。如果只有这一句话,没有后面具体认为重要的解决方案的话,这部分的经验难以令人信服。
- 假设式描述
如果我来做这件事情,我会1234怎么怎么样。那作为面试者,假设没做过的事情,如果只是看思路还好,但是如果说的天花乱坠,这个时候面试官就会要警惕了。
毕竟说和做之前的差异是很大的。对于假设的事情,面试官是没法评估具体效果的,因为它不像过去已有的项目和工作内容,是有明显结果的,如果对过去结果存疑,后续也可以背调了解具体的情况。
针对假的STAR,我们要尽量避免,表达出真正的情况。
几个小Tips
- 更多的注重What/How/Why
做了什么事情,具体做的方案1234几步,为什么要这么做
比如图片的优化,最早肯定什么都没有,后续加cache,cache策略又可以升级,包括cache本身的算法以及多级cache的实现,图片尺寸上面后来有做了什么裁切之类的,图片格式上面后续又做了优化等等。
每个阶段不太一样,重点也不一样,详细说说项目细节,另外有一些可能项目做得很久说很多东西忘了。
这里我分享一个观点,之前看过一句话:
面试者中有一种人是比较好的,他总能比较清楚的记住过往项目当中的重点,这样的人在经验沉淀的过程中肯定更快一些。
当然这样的同学肯定得归结在聪明一类的人了,当然能记住也说明他可能喜欢总结和回顾,平常的学习习惯应该也比较好。
- 细节!细节!细节!
很多关键节点的细节很重要,怎么让HR相信这个同学有实操的经验呢?
可以说说细节上面的很多事情,比如说URLProtocol拦截request以后,针对不同的case的降级策略是什么,选择依据是什么?当时遇到了什么其他的坑没有?你自己的做法有什么缺陷?
又比如Weex的实现上面,整个渲染的流程到底是怎样的,渲染部分还有什么优化空间吗?或者说这个方案本身做了哪方面的优化?它的配套工程体系上的问题是什么,你遇到以后是怎么解决掉的,HR了解大概思路后,都会往深入部分问,认真研读以及修改过代码的同学,肯定是答得出来的。
其他Tips
- 经验丰富,知识体系完整
经验能解决实际的问题,另外知识体系可以让你在遇到新的问题时举一反三,当然大公司和小公司要求的知识体系又不太一样,大公司更偏向一专多能的T型人才,小公司更喜欢全栈。
所以到底要成为什么样的人,跟你的职业规划很有关系,是想在大公司成就一番事业,还是出去闯荡,那你点的技能树肯定是不一样的。
到底应该怎么做,我自己的经验是,找到身边的标杆,向更优秀的同学学习,在大厂当然非常优秀的专业人才也好,架构师也好,都非常多,所以标杆应该也好找,业界当然也有很多成功的人,有了标杆,就努力向上吧。
- 保持良好的习惯,不忘总结和提升
当我还是一个菜鸟的时候,当时的老板问了我一个问题,每周写周报的时候,想想自己这一周到底收获了什么,这给我留下了很深的印象。
- 不要被期权、股权诱惑
有很多公司为了招人,会向面试者许诺期权、股权之类的,其实很多时候,这只是安抚员工的一种形式,和直接给钱比,还是给钱更划算。
- 公积金和社保给怎么交
据我所知,很多小公司社保和公积金都不交的,或者交一个,但基数也小,这个怎么说呢,有些小公司,考虑到自己的发展,有时候也可以理解。
- 不尊重你和你的财产的公司
举个例子,有的公司不提供工作手机,希望使用你自己的手机用于开发测试,更有的公司使用自己的电脑设备开发,不给予任何补助,在这种情况下,你需要考虑下,因为在你的财产方面都没有受到尊重,你会期望以后工作中还能受到更多的尊重吗?
- 多了解下公司文化
在面试一家公司前,首先你要做的是去网上了解一下这家公司大概的情况,主要业务是哪些?有哪些部门?最近几年的效益和口碑怎么样?等等。这不仅仅有助于你面试,还有助于你面试结束决定是否去这家公司上班。
除此之外,到公司之后,可以简单参观参观公司的情况,感受一下员工的工作状态,周围的工作环境等等,自己喜不喜欢这样的环境?
- 尽量去大厂,尽量不要去外包公司
很多人特别是一些初入行的问要不要去外包公司,也有很多人想去外包公司,以为去外包公司可以锻炼自己,可事实是否如此呢?
不是外包不挣钱,是外包对技术提升没有多少用处,一篇程序猿的相关文章分析,想去外包公司的无非三种人
1. 完全不知道外包怎么回事的人;
2.为了多拿一点点钱的人,有些人如果去非外包公司可能只能拿到6k,但去外包公司可能拿到7k元,这种人,我想提醒你们,去非外包公司,只要你好好干,这6k可能会变成10k,但去外包公司你那7k元,两年后撑死变成8k。
3.就是完全找不到工作的人,因为外包公司做的是量,大量外派人员到其他大公司,就是卖人。
我也很认同所分析出的这三种人,经常看到一些在外包公司工作的设计师们,我们下班了,还在加班;我们放假了,还在加班;我们睡前刷刷朋友圈,也会有那么几个在外包公司工作的在晒加班。。
最后
今天就分享这么多,如果对分享的内容感兴趣,可以关注我,或者私信评论加入学习交流群,大家一起讨论。
无以至千里,贵在坚持积累。
为此,我分享一份大佬收录整理的Android学习PDF+架构视频+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效的帮助大家掌握知识、理解原理。
当然你也可以拿去查漏补缺,提升自身的竞争力。
相信它会给大家带来很多收获。如果你有需要的话,可以点击获取!
喜欢本文的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~
网友评论