阿里春招Android面经

做者:淘萄桃java

连接:android

https://www.jianshu.com/p/a07ccaad832dc++

本文由做者受权发布。程序员

 

笔者参加18年阿里春招,有幸最终拿到阿里offer,base杭州,岗位客户端开发。一直忙于其余事情,拿到意向已通过去十多天,在此分享一些关于面试的干货,攒一波RP,回馈社会。面试

 

从阿里面试提及,阿里的面试通常采用电话面试的形式。笔者一共参加五轮面试,一面电话面试+在线编程,二面视频面试+在线编程,三面部门boss面试,四面交叉面,五面HR。在此分享五轮面试的大概问题吧,笔者是android岗开发,所问题型会更偏android。算法

 

 

1一面数据库

 

阿里的面试官都很和善。一面面试官听声音感受应该是入职两三年的感受。上来自我介绍后直接开始问android相关问题。编程

 

大概问题以下:数组

 

  • android中的dp、px、dip相关概念缓存

  • handler机制,四个组成部分及源码解析

  • 布局相关的<merge>、<viewstub>控件做用及实现原理

  • android中的布局优化

  • relativelayout和LinearLayout在实现效果同等状况下选择使用哪一个?为何?

  • view的工做原理及measure、layout、draw流程,要求了解源码

  • 怎样自定义一个弹幕控件?

  • 若是控件内部卡顿你如何去解决并优化?

  • listview的缓存机制

  • Invalidate、postInvalidate、requestLayout应用场景

  • 多线程,5个线程内部打印hello和word,hello在前,要求提供一种方法使得5个线程先所有打印出hello后再打印5个word。

  • 实现一个自定义view,其中含有若干textview,textview文字可换行且自定义- - view的高度可自适应拓展

  • 编程题:将元素均为0、一、2的数组排序。在手打了一种直接遍历三种数目并打印的方法后让手写实现,手写实现后让再说一种稳定的方法,说了一种经过三个下标遍历一遍实现的方法,读者可自行百度,在此不赘述。

 

一面面完挺懵的,感觉到阿里校招的火力,阿里的要求程度高于“知道、会用”那一层,你须要了解底层原理、机制才能过关。一面50min。

 

一面面完,面试官说须要反馈面试过程后才能知道是否经过,后来了解到阿里的一面是“简历筛选”面,刷人不会太多。自我感受良好,整体答出大概百分之八九十,面完便好好准备二面了。

 

 

2二面

 

二面很重要,二面很重要,二面很重要。二面对于你是否能经过面试,是否能最终从池子中被捞出来都很重要。一面面完的次日下午收到来自杭州的电话,约了晚上九点的时间,且通知了视频面试和在线编程。

 

一阵慌张……看了那么多面经,没见过谁连续两次编程的……晚上九点,准时登陆视频网址后,面试官已经在线。二面面试官稍显严肃,给人感受很是严谨。上来简单自我介绍后,他说一面评价比较好,他会面试得细致一点,可能时间会稍长。当时心神一紧,作好了鏖战的准备。二面问的内容很是多,且覆盖范围很广,大概问题以下:

 

JVM方面

 

  • java内存模型,五个部分,程序计数器、栈、本地栈、堆、方法区。

  • 每一个部分的概念、特色、做用。

  • 类加载的过程,加载、验证、准备、解析、初始化。每一个部分详细描述。

  • 加载阶段读入.class文件,class文件时二进制吗,为何须要使用二进制的方式?

  • 验证过程是防止什么问题?验证过程是怎样的?加载和验证的执行顺序?符号引用的含义?

  • 准备过程的静态成员变量分配空间和设置初始值问题。

  • 解析过程符号引用替代为直接引用细节相关。

  • 初始化过程jvm的显式初始化相关。

  • 类卸载的过程及触发条件。

  • 三种类加载器,如何自定义一个类加载器?

  • 双亲委派机制。

  • JVM内存分配策略,优先放于eden区、动态对象年龄判断、分配担保策略等。

  • JVM垃圾回收策略,怎样判对象、类须要被回收?

  • 四种垃圾回收算法标记-清除、复制、标记-整理、分代收集。

  • JVM中的垃圾回收器,新生代回收器、老年代回收器、stop-the-world概念及解决方法。

  • 四类引用及使用场景?

 

基本上JVM方面全部的大的概念所有问到,真的须要理解到位。JVM比较熟悉,全程巴拉巴拉不停地说,有惊无险。

 

集合类

 

初始引发话题的问题:hashmap了解吗?心中一喜,开启侃侃而谈(胡吹)模式。讲到了如下的一些点:

 

  • hashmap实现的数据结构,数组、桶等。

  • hashmap的哈希冲突解决方法:拉链法等。拉链法的优缺点。

  • hashmap的参数及影响性能的关键参数:加载因子和初始容量。

  • Resize操做的过程。

  • hashmap容量为2次幂的缘由。

 

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

 

  • hashtable线程安全、synchronized加锁。

  • hashtable和hashmap异同。

  • 为何hashtable被弃用?

 

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

 

  • 容器类中fastfail的概念。

  • concurrenthashmap的插入操做是直接操做数组中的链表吗?

  • 集合类相关over,因为都是本身主动在说,把握了主动权,相谈甚欢。

 

多线程

 

因为上面提出了concurrenthashmap的概念,瓜熟蒂落聊起了多线程。有了上一部分的经验全程我主动讲,面试官针对性问了一些问题,大概内容以下:

 

  • 为何要使用多线程?多线程须要注意的问题。上下文开销、死锁等。

  • java内存模型、致使线程不安全的缘由。

  • volatile关键字,缓存一致性、指令重排序概念。

  • synchronize关键字,java对象头、Markword概念、synchronize底层monitorenter和moniterexit指令。

  • lock语句和synchronize对比。

  • 原子操做,CAS概念、相关参数。

  • 乐观锁、悲观锁概念及使用场景。

  • 线程池概念、实现原理等。

  • JVM锁的优化,偏向锁、轻量级锁概念及原理。

 

多线程方面回答得比较好,面试官反馈比较满意。

 

数据库

 

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

 

  • SQL语句中对表或者字段取别名有什么好处?

 

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

 

通讯协议

 

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

 

  • TCP三次握手、四次挥手。

  • http请求报文结构、响应报文,状态码。

  • http2.0相比于http1.0的新特性,推送、多路复用、消息头压缩等。

 

通讯协议问得不是太深,了解得比较好便可。面试官反馈比较好。最后就是问android了,面试官说感受你android应该挺厉害的,当时真的是受宠若惊。

 

android

 

android是重头戏。因为以前已经了解挺多,android方面基础的没有多问,比较深刻。大概有以下问题:

 

  • handler机制组成,handler机制每一部分的源码包括looper中的loop方法、threadlocal概念、dispatchmessage方法源码,runnable封装message等。

  • listview缓存机制、recycleview缓存机制。

  • bitmap高效加载,三级缓存等。

  • binder机制原理。

  • view的工做原理及measure、layout、draw流程。哪个流程能够放在子线程中去执行?

  • draw方法中须要注意的问题?

  • view的事件分发机制。

  • android性能优化:布局优化、绘制优化、内存泄露优化、bitmap、内存泄露等。

  • 内存泄露的概念?android中发生的场景?怎么解决?讲了handler、动画等。

 

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

 

算法

 

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

 

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

 

为何说二面很重要呢?由于二面是因此技术面试中最为细致、考察最为最为深刻的一轮面试,后面的面试官会很大程度上参考这一面试的结果,而且听说这一面很影响评级。

 

 

3三面

 

二面事后的次日下午收到三面电话,约了三点的面试,因为以前的面试都是晚上能够在教室完成(在此感谢女朋友,没有你的陪伴就没有一个好的环境完成面试),三点的时间点是上课时间也基本找不到空教室,因此在教师休息的小房间完成了三面面试。

 

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

 

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

 

 

4四面

 

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

 

通讯协议

 

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

 

项目

 

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

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

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

 

获奖

 

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

 

数据库

 

数据库方面问了如下的问题:

 

  • 索引的种类。

  • B树、B+树、红黑树。

  • B+树和B树相比有什么优势,应用场景?

  • 红黑树的一些特色?怎样保持平衡?

 

问着数据库,问着问着扯到数据结构那边去了……说完以后面试官是感受你这些都有所准备啊,我说对,毕竟是面阿里,面试官笑了说我原本还准备问你一下八大排序的如今感受你应该都会,我很自信(jian zha)地说对,我都会。至此,面试官说技术方面他没什么问题想问的了,他这是一轮交叉面,集团内部要求的,他是后台开发方面的,不懂android,问我还有什么想问的。笔者抛出了万金油问题,您以为我还有哪些方面须要优化的。面试官哈哈一笑,说大家这些学生如今问的都是套路问题,他基本上回答的都是这个问题,而后说了一通感受深度和广度都有,继续保持就行了。

 

四面48min。至此,笔者完全放心。互道周末愉快后结束了面试。和女朋友分享喜报后,阿里之路的进度条已经走到80%了。至于为何有交叉面,众说纷纭,不太清楚。

 

5五面(HR)

 

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

 

  • 关于以前一次笔试的编程题,为何没有作出来?后来有思考过吗?

  • 你签约的公司给的薪水是怎么样的?若是阿里给你offer,你是怎么考量这两个offer的?

  • 为何没有在以前实习的公司留下来?以前公司的主管是怎么评价你的?

  • 你的优缺点?

 

最后平常问问题,万金油问题培养体系和晋升机制。面完告知一到两周会有结果,要从池子里综合考量捞出一批人给offer(心中一慌,毕竟走到最后的对手都不容小觑)。随后HR面试官加了微信,有问题能够在微信上交流。

 

 

6后续

 

面完HR安心地在备胎池里面躺着。等待的日子老是很难熬,一天一天地过去,各类打听消息,据说有的前几批的拿到了意向(offer),内心拔凉拔凉。在过去四天后,周五的下午问了HR面试官后得知offer已在审批,听说比较稳,就是走个流程。联想到以前面完腾讯hr在offer审批等了好久仍是心难安,在熬过周末,周一和周二,offer已经审批了三天,焦虑程度与日俱增。周二晚上十点半的时候,在宿舍无聊刷新闻的时候,忽然收到一条短信和一封邮件,打开后发现是录用意向书。

 

真的挺开心,长呼一口气,总算这条路走到了尽头。

 

以上是个人阿里春招之路的分享。

 

 

7总结

 

洋洋洒洒写到这边已经说了不少,也有一些经验和你们分享。从17年春招找实习到18年春招,找工做的日子真的很累,不过再累也要坚持。有幸参加过一些公司的面试,问的问题也都大同小异,主要是如下的一些方面:

 

  • java基础

  • 集合类

  • 多线程

  • JVM虚拟机

  • 通讯协议

  • 数据库

  • 操做系统

  • 算法

  • 你的技术方向

  • 项目。

 

关于每一个方面的复习后续会给出分享。

 

一些感慨

 

说一些我的感觉吧,找工做其实很容易,一些公司单凭学历就可让你进去上班,如今太缺程序员了,简单到你面试根本不聊技术谈谈人生、聊聊奖项就能够给你发offer,可是找一个好工做不易,数十上百我的抢一两个岗位很常见。

 

主要你怎么定义你对于“好”的理解,工资高?公司技术氛围好?行业地位高?工做安稳福利好?不加班?仁者见仁智者见智,不必强行拿本身的价值观去评判别人的工做,最适合的才是最好的。因此在找工做的时候想清楚本身到底想要一个怎样的工做也是挺重要的,定义一个目标,努力去作,才是最重要的。

 

技巧小谈

 

关于面试的一些技巧,我的以为最根本的仍是拓展你的知识架构的宽度和广度,造成你的一套说辞架构。以多线程为例,问到你多线程?能够先从为何要使用多线程?使用多线程有什么好处?使用多线程必定会比单线程好吗?多线程会致使什么问题?致使问题的java内存模型是怎样的?怎么解决这个问题?解决方法如volatile、synchronize关键字等它的底层实现是怎样的?你是怎么使用多线程的?使用线程池有什么好处……


若是你真正理解了并将它完善成一个体系,面试官让你说多线程,接下来10min,你能够一直讲完。面试的参照不是你和面试官相好比何,而是你和你的竞争者相好比何,若是上面这一套完善地讲完,面试官对你的评价可想而知。

 

终章

 

个人csdn连接

https://blog.csdn.net/qq_26071477

 

CSDN排版实在接受不了了,转战简书。简书第一篇文章,求职不易,祝你们都能拿到心仪的offer。

相关文章
相关标签/搜索