Android开发Android开发经验谈Android技术知识

本科毕业工作2年,阿里五面机智回应连环问,不仅获得面试官芳心还拿

2020-07-22  本文已影响0人  e240c12aa0ad

背景

本科毕业2年了,什么大大小小的活都干过,在小厂混了两年觉得日子有点无聊,在一天夜晚突然惊醒,于是毅然决然决定去面试一下阿里,无论结果怎么样,见识是涨了的,就算最后没选上也能跟朋友吹牛皮......废话不多说现在进入正题。现在已经进入秋招的提前批了,预计有很多人跟我一样想着去大厂试试水吧,现在就来给大家讲讲这次我的面试经历,希望能给大家一些帮助!

随机应变真的很重要!!!看我如何机智搞定残暴的面试官,拿下阿里Offer!

面试过程(历经60mins)

一面

阿里的面试官都很和蔼。一面面试官听声音感觉应该是入职两三年的感觉。上来自我介绍后直接开始问android相关问题。大概问题如下:

一面面完挺懵的,感受到阿里校招的火力,阿里的要求程度高于“知道、会用”那一层,你需要了解底层原理、机制才能过关。一面50min。一面面完,面试官说需要反馈面试过程后才能知道是否通过,后来了解到阿里的一面是“简历筛选”面,刷人不会太多。自我感觉良好,总体答出大概百分之八九十,面完便好好准备二面了。

二面

二面很重要,二面很重要,二面很重要。二面对于你是否能通过面试,是否能最终从池子中被捞出来都很重要。一面面完的第二天下午收到来自杭州的电话,约了晚上九点的时间,且通知了视频面试和在线编程。一阵慌张……看了那么多面经,没见过谁连续两次编程的……晚上九点,准时登录视频网址后,面试官已经在线。二面面试官稍显严肃,给人感觉非常严谨。上来简单自我介绍后,他说一面评价比较好,他会面试得细致一点,可能时间会稍长。当时心神一紧,做好了鏖战的准备。二面问的内容非常多,且覆盖范围很广,大概问题如下:

集合类

讲完一通之后,面试官挺满意,说了解地比较深挺好,抛出了下一个问题hashtable了解吗?又是心中一喜,一通介绍:

果断将话题扯到concurrenthashmap,讲了concurrenthashmap相比于hashtable做的优化、segment的概念、concurrenthashmap高效的原因。中间面试官问的问题:

多线程

由于上面提出了concurrenthashmap的概念,顺理成章聊起了多线程。有了上一部分的经验全程我主动讲,面试官针对性问了一些问题,大概内容如下:

数据库
数据库方面笔者水平较菜,没有深入了解。面试官问了一个问题,

并不知道怎么回答,面试官也没有再问数据库相关。之后面试官问了解操作系统,回答:没学过。面试官:好的 ,那不问了。心中感动得无法用言语形容。

通信协议
接下来是对通信协议的了解,大概问了下列问题:

android
android是重头戏。由于之前已经了解挺多,android方面基础的没有多问,比较深入。大概有如下问题:

a* ndroid性能优化:布局优化、绘制优化、内存泄露优化、bitmap、内存泄露等。

面试android方面的时候已经真正地淡定下来了,有条不紊地和面试官说了自己所有的理解。反馈也挺好。

算法
最后是一题在线编程,题目比较常规,是一题最大连续子序列,需要注意全是负数的处理,在此不赘述可自行百度。

写算法的时候发生了一个小插曲,由于面试官直接面的都是以java写的,而笔者比较熟悉C++写算法,面试官也不太熟悉c++编译(g++),面面相觑一会儿才成功编译输出结果。真心非常感谢二面面试官的细致和耐心,最好的一次面试体验。面试官说他的这一面他过了,还会有一到两轮技术面试,礼貌地感谢面试官之后结束了,至此二面结束。二面108min。关闭连接后长呼一口气和女友分享了喜报,经此一役,我知道我的阿里之路已走完半程。

为什么说二面很重要呢?因为二面是所以技术面试中最为细致、考察最为最为深入的一轮面试,后面的面试官会很大程度上参考这一面试的结果,并且据说这一面很影响评级。

三面

二面过后的第二天下午收到三面电话,约了三点的面试,由于之前的面试都是晚上可以在教室完成(在此感谢女友,没有你的陪伴就没有一个好的环境完成面试),三点的时间点是上课时间也基本找不到空教室,所以在教师休息的小房间完成了三面面试。

三面面试官感觉是部门主管级别,上来自我介绍后开始问问题。问了一下简历上在学校做的一个android的项目,说一个难点,讲了推送,巴拉巴拉讲了一通极光推送,感觉面试官不是很感冒,问了极光推送的实现原理,笔者一紧张竟然忘了讲长连接……又问了华为实习的项目,难点,怎么优化……我扯了一通字母树,感觉面试官还是不太感冒。这个时候已经有点慌张,然后……面试官开始问优缺点、之前签的公司、为什么想去杭州、你是怎么看待算法?还问了最优成就感的一件事情,你觉得为什么会获得一等奖?是不是因为对手太弱了(懵了……)?回答完直接问还有什么问题想问他…此时有点崩溃,感觉也答得不太好,问了还有哪些方面需要改善。然后结束了面试……三面29min。

面完三面挺难受的,感觉反馈不是很好,没发挥好。难过了一会儿吃了个饭回图书馆继续看书。

四面

当晚上我还在图书馆感怀阿里离我远去的时候,一个杭州的电话来了……和四面面试官约好了时间,做一个技术和综合素质方面的面试。急匆匆和女友去找到了一个空教室,9点电话如约而至。四面面试官感觉斯文儒雅,上来介绍这是一轮交叉面,最后一轮技术面试。照例自我介绍后,问了如下问题:

通信协议

TCP保证可靠传输的实现:停止等待协议、滑动窗口协议、流量控制、拥塞控制等。

项目

说一个你记忆比较深刻的功能:我讲了一个查看当前WiFi网络连接终端信息的功能的实现。

说一下你遇到的问题:讲了一个十几万级别的字符串的匹配通过字母树优化的问题。面试官听了后和我详细分析了一下,得到了一个更好的实现方法……当时一阵汗颜,班门弄斧了。

问了一下项目中使用到的三级缓存策略。

获奖

聊了聊获奖经历,中间是怎么学习的。面试官看了看前面的面试过程,说问了多线程了,那他就不问了……

数据库

问着数据库,问着问着扯到数据结构那边去了……说完之后面试官是感觉你这些都有所准备啊,我说对,毕竟是面阿里,面试官笑了说我本来还准备问你一下八大排序的现在感觉你应该都会,我很自信(jian zha)地说对,我都会。至此,面试官说技术方面他没什么问题想问的了,他这是一轮交叉面,集团内部要求的,他是后台开发方面的,不懂android,问我还有什么想问的。笔者抛出了万金油问题,您觉得我还有哪些方面需要优化的。面试官哈哈一笑,说你们这些学生现在问的都是套路问题,他基本上回答的都是这个问题,然后说了一通感觉深度和广度都有,继续保持就好了。四面48min。至此,笔者彻底放心。互道周末愉快后结束了面试。和女友分享喜报后,阿里之路的进度条已经走到80%了。至于为什么有交叉面,众说纷纭,不太清楚。

五面(HR)

度过周末后照例去图书馆学习,在周一下午接到hr的电话。周末准备了一些常见的HR面试问题,结果一个都没问到,问到的问题大概如下:

点击【查看全部面试题及解析

自我思考

首先是关于面试岗位的问题。虽然面试问到的问题五花八门,但很多问题都和面试的岗位关联性很大,比如应聘Android开发不会被问到Spring,应聘Java后台开发不会被问到Android。所以为了减少自己的工作量(也没那么多精力去同时准备不同岗位),就要先确定好自己要投的岗位。然后就搜了不同岗位的面试经历帖子,看了看自己能答多少,发现自己对哪个岗位都不擅长,因为有一些Android开发基础,倒是会一点点Android开发相关的问题。接下来想了想虽然Android开发校招招的人少,但可能和我竞争的人更少,因为绝大部分同学都没接触过Android开发,所以就决定选择Android开发作为我以后要投的岗位了。

总结我的学习之路(供大家参考学习)

目录

下面展开来说,各个击破。

开始先说一下学习路线。第一个应该去梳理整个体系的知识大纲,把自己需要学的内容全部用xmind整理出来,第一,架构师筑基必备技能;第二,Android框架体系架构(高级UI+FrameWork源码);第三;360°Androidapp全方位性能调优;第四,设计思想解读开源框架;第五,NDK模块开发;第六,移动架构师专题项目实战;第七,微信小程序;第八,混合开发的flutter。

比如:

是不是学起来清楚很多。

然后根据上面的分类,按照思维导图来学习

其次计算机基础题。计算机基础题是所有面试经历帖里面可以公用的,很快我就总结出来了规律:作为经历过考研的我,一眼就看出来计算机基础题基本都是考研知识点的题。比如,数据结构的二叉树、图、查找、排序章节就覆盖了众多数据结构相关的面试题,而计算机网络的存储器尤其是cache章节、虚拟存储器的段表和页表就完整覆盖了面试问到的cache相关的题,操作系统的进程管理算是面试经常问到的问题,而计算机网络相关的面试题肯定跑步出计算机网络教材。所以我就直接来了个自上而下的复习:买了本计算机专业课考研全书,从后到尾按顺序梳理可能的知识点然后整理出来。

然后Java语言基础。因为Java存在数量巨大的程序员,所以很容易就能找到Java语言的面试题大全。但想要看完并记下这所有的面试题是个挑战,所以需要删掉一些一定不会被问到的面试题。Android开发除Java语言基础外并不会涉及到太多其他的Java套件,比如Java网络开发就肯定不会问到,这时就可以放心大胆把JDBC、JSP、Spring等砍掉,减少了许多工作。

之后Android相关的面试题。最开始看Android相关的面试经历帖一头雾水,觉得问的知识点太多了完全答不上来,但综合了十多个面试经历帖后发现问的很多问题都是重合的,比如经常问Activity的生命周期、Service的生命周期、Activity之间的通信、消息传递机制等。所以也采用类似复习Java语言的方法,收集各种各样的Android开发面试题。

最后还要说说一些其他的面试题,比较典型的是数据库和设计模式,因为Android开发问到数据库和设计模式的概率比较小,我也就只整理了一些简单的面试题,足够应付面试了。

以上这计算机基础、Java语言基础和Android开发面试题等的收集和整理工作就贯穿了我从实习招聘开始到秋招结束的始终,经常有新的题目被我收集到,也经常有老的题目被我整理得更加系统。为了更加方便和完整地收集和整理,我把整个收集整理过程都用Git来作了版本控制,并且整理在了【石墨文档】上面需要的可以 私信我【学习】获取石墨文档链接!

最后来看面试专题

我从基础-中级-高级开始一步一步逐步深入,这些面试问题一样都有分类整理,点击【学习给你分享喔(附答案解析)。

比如基础部分:生命周期,Context,动画

中级部分:HashMap,Kotlin,HTTP,Flutter

高级部分:性能优化,Android Framework,Android优秀三方库源码,热修复、插件化、模块化、组件化、Gradle

以上就是我全部的一个学习路线的规划了,从整体的一个知识体系出发,梳理全部的知识,有漏洞就去查阅我相关的手写笔记加以巩固,最后上面试刷题,争取查漏补缺,下次面试不再出现这么多的不知道和知识空白。

话说到这里,不论是知识体系大纲,还是以上Android学习资料,如何你也想学习或者复习一下,那便可直接来找小编分享就行

只是麻烦大家帮忙转发一下(可以帮助更多有需要的人看见),然后点击【学习】,会立马回复给你免费下载全部我的学习+复习+面试笔记的方式,我们一起学习,加油!

上一篇 下一篇

猜你喜欢

热点阅读