“我是面小易,机智又聪明。面试不眨眼,Offer不手软。”
我面小易又来啦,今天要和大家一起分享的是一位投递阿里巴巴Android开发实习生同学的面试经验,这位同学的第一次面试就给了阿里巴巴,虽然最终的结果不尽如人意,但是我们要知道“打铁还需自身硬”,这位同学自己也总结了失败的原因,那就是基础不牢固。
以下为正文
一面
今天上午十点过了五六分钟接到了阿里巴巴的一面的面试电话。我简历投的是Android客户端开发实习生(内推),并且在前一天和HR电话约定了十点面试。
一面的时间是五十六分钟多一点。周围的人一面大部分都过了,按照他们的说法,大都是说的一些项目相关的东西。到了我这里,大概十分钟的项目介绍,三个关于Android的(其中两个是用Cocos2dx开发的),一个用Java写的局域网通信的小项目。剩下的时间都是问的基本知识,总结十分,六分是操作系统(尤其是内存、进程相关的),三分数据结构,一分Android的。
首先在操作系统方面,问了内存、进程间通信方式(IPC)、进程和线程的关系和区别。还问了什么是协程,但是这一点我在面试前并不知道。此外,面试官还问了什么是堆,内存泄露是怎么回事(我扯到野指针了),线程切换(我讲的是进程切换)。还问了下程序计数器,引到了逻辑地址(虚地址)和物理地址及其映射关系。然后还问了编译原理,问了编译的过程(预处理、编译、汇编、链接)。
其次在数据结构方面,先问了数组和链表的区别,又问了二叉树的深度优先遍历和广度优先遍历的具体实现以及堆的结构。
再次问了一些网络相关的问题,比如TCP和UDP的区别、用途,两者比较以及实现上的不同,并且对于这块问的比较细。之后就是Andorid内的进程通讯了,我答的是Handler,然后介绍了它的实现原理和相关的一些类。
我最后问面试官的问题是,为了能胜任这个岗位,需要着重加强哪方面的知识?面试官的回答大概是这样:首先肯定是计算机基础了,包括操作系统,数据结构,计算机网络等,然后客户端方面的话,网络编程方面、多线程方面和架构能力。整个过程感觉比较流畅,十分钟后,阿里的招聘网站上面的状态就成了一面通过,二面中。
面小易说:从整体的面试感觉来看,这位同学的一面还是比较流畅的,也能够说明他在这些方面还是做了大量的准备的,但是还是存在一些像协程这样问题的盲区,这是大家在面试之前需要弥补的。此外,一定要听清楚面试官问的问题是什么再回答,问线程切换就不要回答进程切换了。
二面
但是接下来二面就直接跪了。当天晚上七点多给我打的电话,整个过程半个小时,一点准备都没有,感觉语速有点快,上气不接下气的感觉,还是紧张。
开始是个人介绍,这块之前没怎么太准备,手忙脚乱的打开网站上的个人信息就开始说,连个人简历都没打开,云里雾里的就扯完了。面试官一开始是问我Android是怎么自学的,我说一般是购买书籍,然后遇到问题了除了看书,就是上Android开发者网站上面找官方文档的说明,或者上CSDN上搜索,之后问遇到问题怎么解决的,回答也是差不多,感觉说了一通像是没有说一样。接着是问对于Android哪块最熟悉,我说现在接触不是很深入,还是简单的用控件,学下自定义控件啥的...感觉就是从这里开始跪了。
说完Android开始说Java,又问我对Java的哪块最熟,我想起集合就张嘴说了集合,面试官于是说那我就问你你最熟悉的吧。问题1.ArrayList和LinkedList有什么区别,实现方式上有什么区别优劣(现百度,结结巴巴答上来了)问题2.对HashMap的了解,我说就是在用适配器的时候和ArrayList搭配着用过,对原理还是不太熟悉。问题3.Activity的生命周期(正好旁边就是一本书,看着说下来了)。最后一个问题就是Android的四大组件。
结束的的时候我的问题还是和一面的一样,他说根据这个面试来看,基础知识还是有点欠缺。果然十分钟后打开网站,状态变成了“待回绝”...
面小易说:能够从这位同学的二面经历看出,他的知识基础还很欠缺,甚至可以说目前的能力并不能胜任所面试的岗位的需求。因为面试官问到的问题要么就是接触不深入,要么就是了解并不多,要么就是通过搜索或者查资料回答,这样肯定的是不合格的。对于实习生而言,基础还是最重要的,“基础不牢,地动山摇”。
总结
总结,还是基础知识没有打牢,阿里的面试还是考基础居多,毕竟只是实习生面试,项目经历相差不大的情况下,肯定就是看基础了。第一次面试给了阿里,像投简历的时候的心态一样重在参与。
面小易说:希望大家能够吸取这位同学的经验和教训,在平时的学习中一定要将基础打扎实,这样才能遇到问题不慌不忙,侃侃而谈。基础真的很重要。