一面,电话面:


大概早上9点左右,收到了阿里HR的小姐姐的电话,声音很好听,虽然后面不怎么管我了...跟她约了晚上9点的电话面..然后一整天上班不在状态,开始各种回顾之前准备的知识.为了这次面试大概准备了半个月,利用每天下班到家8点到凌晨1点30的时间,疯狂的补充自己的技术栈.感觉进步飞快.


面试从晚上的8点开始,面试官要求在线做一道算法.不巧的是,我的电脑在不久前刚刚坏掉,所以没办法,只能找了楼下一家最近的网咖,找了个相对的安静的包厢(后来还是很吵~~).

算法题是:

给出一个无序的整形数组,给定一个 target value ,要求找出数组中连续元素相加之和等于target
value的元素集合.找出元素下标之和最小的即可.


乍一看题目没有想象中难,大概是因为我面的是P6.稍微整理了一下(中间思路很多,所以有点乱),在网页上(阿里有一个在线的网页)开始敲代码.问了面试官有没有编译环境,面试官说用人脑编译一下吧.
~.~

题目不难,从头开始遍历数组,写2层循环基本就可以搞定。但是有几个点要注意一下:

1.代码风格.因为你写的代码,面试官全程都能实时的看到,所以一些好的代码习惯要提前培养好.(后面面试官的提问也证明了这一点)

2.注意一些异常Case的处理,比如参数的合法性,空判断等。

3.算法的优化,尽可能给出复杂度低,性能高效的代码

大概花了30分钟左右,我提示面试官我做完了.面试官看了一下,指出了一些异常Case的问题,一些算法中需要优化的地方.另外因为我对一些临时变量 \
成员变量的命名已经形成了一定的习惯,面试官问我有没有读过源码,我说读过一些,然后简单的问了一些源码里的命名规则等等.
这里建议面试者可以读一读阿里出的<Android开发手册> ,里面有讲到一些命名相关的内容,应该会对面试有一定的帮助

后面又继续问了:

1.多线程

2.自定义View





3.Activity 启动模式

4.读写锁









5.性能优化,耗电量优化





6.还有一些记不清了,但是都是Android中比较基础的东西,但会问的比较深入,会直接问到源码的实现等等.

7.另外比较重头的就是项目了.项目里的各种细节都会在这里被放大,这一块占了60%左右感觉

第一轮的电话面总共持续了90~100分钟,感觉还Ok,面试官评价也还可以.~~~


-----------------------------------------------------------------------------------------------------------


阿里二面,现场面






不得不说阿里的效率真的很高,前一天晚上刚面完电话面,第二天早上就有了二面通知。于是约了晚上9点的现场面。





8点30左右早早的到了阿里的大楼,等了没多久。面试官就拿着简历出来了。





进去一看,感觉架势不对~竟然是三人的群面。瞬间压力山大。。。





首先自我介绍,然后开始讲做过的项目以及项目中负责的内容。














然后就开始对项目里的内容进行深入的挖掘,这期间只要对项目足够了解,应该是没什么大的问题。从性能调优、设计策略、实现细节、优化空间几个维度展开讨论,这个时候我觉得只要把你会的跟你做的内容能准确的表述给面试官就好了,千万不要紧张。我刚开始的时候整个人有点僵硬,说话都说不利索。。。不知道面试官有没有因为这个给我扣分。

到这里为止大概已经过去30~40分钟了,一切都还顺利。在一些问题的深入上,还需要做提高。









接下来面试官问我还有没有接触过其他领域,比如前端开发啊、ios开发、java后台开发啊等。


























这边很遗憾,只接触过简单的服务端开发,没有深入的了解。然后面试官也就没什么可问的了,个人感觉这个时候面试官是有一点点失望的。或许我应该再多学习几个技能。






既然我没什么可以一起讨论的,索性面试官就拿钉钉来谈。让我设计一下钉钉(类似于微信)发送消息这个模块,包括从客户端的数据结构、表存储,以及怎么传输到服务端并显示在另一个客户端的屏幕上。
让我在白板上画一下,把客户端的数据库结构、索引都画一下。






现在看起来其实没什么难度,但是在现场的时候,拿着记号笔站在白板前,不知道怎么的就脑子里一片空白。巴拉巴拉的画了一堆,看起来挺乱的。画完后自己都懵逼了一会儿。。。现在想想真是后悔啊啊啊啊!!





面试的时候一定不能慌,一定要自信!!自信!!!自信!!!!!





面试官显然对我的表现不太满意,然后又出了一道算法题:





给出2个数组,问通过将一个数组的元素整体的右移,是否存在等于另一个数组的情况。比如{2,3,4,5}  跟
数组{5,2,3,4}就可以通过将左边数组元素整体向右移动一位等到。






我纠结了一会儿,开始在白板上写代码了。大概思路是去遍历左边数组中的元素,去跟右边数组中的元素进行对比,如果找到相同的,就基于此,双方数组开始++取余进行后续元素的对比,如果都相同则返回ture。否则如果未找到或者遍历结束则返回false。






面试官看完然后提问如果碰到一个数组中有相同的元素,你怎么处理。我第一反应是,我这个算法是不是写错了,因为刚刚上一道数据库题目的失利,所以没什么信心,更加的紧张了。我开始否定我刚刚的算法,尝试寻找别的算法。奈何过了一段时间,我放弃了。





后来面试结束后,我问其中一个面试官刚刚那个算法的解法,然后面试官回答继续遍历就好了啊。 
那我刚刚的算法不是正确的吗!!我只是没有表述清楚而已!!!再一次深深的后悔!!!后悔!!





再次强调一下,一定要自信!自信!!





随着两道白板题的失利,我已经失去了接下去面试的信心了,心态已经崩了。后面面试官又问了设计模式,回答的一般般。。。此时已经认为自己凉了。













回家的路上一路在反思,当天晚上也是一晚上没睡。心情很沉重。





然而第二天早上,意外的收到了三面的通知,惊喜!意外!!!


---------------------------------------------------------------------------------------------------------------------------

















阿里三面,CTO电话面










我的三面已经是p10的CTO面了,这跟之前在网上看到的阿里5轮面试流程不太一样,大概是为了提高效率吧。毕竟二面的时候直接来了三个面试官,应该是把二面、三面、四面合并到一块了吧。

得知三面的面试官是个p10,又是紧张又是兴奋!!第一次能见到这种大人物!!!









在期待跟煎熬中度过了三天,在第四天的晚上。大人物终于给我来电话了!!





CTO的态度跟语气真是出奇的好啊!!!好有活力跟亲和力的一个CTO啊,这是我的第一感觉。





在简单的自我介绍以后,开始问项目里一些实现细节。









包括 :

重连策略













耗电量优化

如何进行耗电量的测试









首次连接跟重连有什么区别,有没有做过优化





Http请求能否复用





Hashmap多个读线程是否安全





HashMap多个读现场一个写线程是否安全





HashMap线程不安全的原因









有几种方法实现HashMap的线程安全

Activity 之间进行通信的方式,性能上有什么区别









还有一些我没接触过的网络相关的问题,已经记不清楚了






CTO总体面下来,感觉没有对一些问题研究的很深入。CTO问了很多网络相关的内容,但是这一块一直是我比较薄弱的地方。另外还有一点就是太紧张了,一些本来能答的全面的问题答的很随意,很多知识点在当时都想不起来。归根结底还是知识结构不够扎实。






--------------------------------------------------------------------------------------------------------------------------





总体面试总结





1.之前对算法重视程度不够高,而阿里是一个很注重算法的公司,后续考虑开始刷leecode题





2.需要对一块领域内容研究的非常的深入,比如网络、设计等 





3.对设计模式理解的太片面,没有真正理解到里面的设计思想





4.对项目掌握的程度不够,很多依赖到别人的模块,没有去详细了解。要做到对依赖了如指掌





5.多研究世界上一流的开源项目





6.在深入某个领域的同时,对其他领域保持了解。比如做Android客户端的可以对前端相关的做一些了解,毕竟现在很多的客户端会嵌入H5模块

7.面试的时候无论如何,保持自信!相信自己!!会就是会,不会就是不会,















































































































































友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信