我的阿里之路
阿里的实习生招聘我参加了内推批次和正式批次一共两场。
阿里的内推批次和正式批次的时间是完全错开的,即在内推全部结束后才开始正式批次。需要注意的是,阿里主要部门(集团、菜鸟、蚂蚁等)的招聘几乎全部放在内推批次中,而正式批次绝大多数是非主要部门(高德、优酷土豆、虾米、钉钉等)的招聘。
阿里的内推没有统一的笔试,在内推成功后,马上就会收到素质测评和编程测验的通知。然而这两个测评其实并没有太大意义,做不做都会很快(一两天)就开始面试的。阿里内推批次的面试全都是电话面试。我在内推后的第二天就接到了一面的电话,部门是菜鸟/无线(记不清了)。
内推一面大概40分钟
主要问的计算机基础,如HTTP、TCP、并发、二叉树遍历、字符串匹配算法等,还让我简单介绍了我做的两个项目。因为我的其中一个项目做的APP中有调查问卷的发放和收集,所以问了我如何防止有人刷问卷;我回答说可以限制IP、记录设备唯一编号、监测做问卷模式等,但都存在一些漏洞。最后我问他Android开发过程中是不是会遇到很多兼容性问题,面试官回答说会遇到,还详细说了他们有专门的大规模真机测试来检查兼容性。一面总体上答的还行,几乎没有涉及到Android相关的问题;因为是电话面试,也就没问什么算法题。
内推一面两天后就接到内推二面电话了。
二面大概50分钟,主要问了Java GC机制、Android APP启动过程、Android事件分发、Android View绘制流程。GC机制因为刚看过所以答的比较好,然而因为阿里面试开始太早,我还没来得及复习Android,所以Android相关的问题答的一塔糊涂,比如APP启动过程就支支吾吾乱说一气,View绘制流程干脆说不知道,跟面试官说我知道Android事件分发流程,于是事无巨细说了好长一串,最后被面试官吐槽根本不熟悉Android。
最后问了面试官对国内手机厂商乱改Android Framework层有什么看法,面试官回答说他也很无奈,但阿里一般都和手机厂商有合作,直接进白名单,所以没有碰到太大问题。
内推二面后过了一周多才接到内推三面的电话,而且是在周末的晚上11点的时候。三面大概20多分钟,主要问了做过的项目、Java基础、最近看的书、到阿里想学到什么。我不太确定这轮面试是技术面还是HR面,因为是晚上11点和女票刚回到酒店完全不在状态,而且面试官也似乎很不耐烦,加上那段时间一直在准备技术方面的问题对这些HR面相关的问题完全没有准备,所以答的很啰嗦也很糟糕,好多都没有答到点子上。最后我问面试官我答的怎么样,面试官也没有说什么就急忙不耐烦挂电话了。
内推三面结束后就觉得应该是挂了,然后又等了一星期,官网上就从“面试中”变成“已回绝了”。
柳暗花明的字节跳动
花费了3天整理了一下心情,因为真的阿里的面试我已经花费了很大的力气,本以为能过结果还是挂了。嗨!
不过也是就在那天晚上接到了字节跳动的面试通知,于是准备开始去上海面试,最后一次了,要是再没通过。。。。面试千吃了一个鸡蛋和面包,来到了面试现场,是一个比较和善的中年大哥!看起来就很厉害的样子!
第一面
1、手写算法题。猫扑素数;1到n,求1的个数;单词反转;
2、Activity的加载模式。
standard,singleTop,singleTask,singleInstance。
3、什么时候会用到singleTask?
在MainActivity的时候用到
4、Handler机制?
5、一个线程是否只有一个Looper?
6、如何保证一个线程只有一个Looper?
7、多线程的方式有哪些?
8、ANR异常发生条件
(1)5s内没有响应用户输入事件
(2)10s内广播接收器没有处理完毕
(3)20s内服务没有处理完毕
9、如何分析ANR?
10、自定义View和ViewGroup
11、事件处理:分发,拦截,处理。
12、GC算法
13、View动画,属性动画,帧动画。再说下View和属性动画区别。
第二面
1、OkHttp原理?
2、Retrofit原理?为何用代理?代理的作用是什么?
3、ButterKnife原理?用到反射吗?为什么?
4、ANR异常如何查找并分析?
5、JVM内存模型?性能调优?
7、Http和Https的区别?
(1)Https是ssl加密传输,Http是明文传输
(2)Https是使用端口443,而Http使用80
(3)HttpsSSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比Http协议安全
(4)Https协议需要到CA申请证书
8、加密算法有哪些?对称加密和非对称加密的区别?
(1)MD5,SHA1,Base64,RSA,AES,DES
(2)对称:使用相同密钥,需要在网络传输,安全性不高。
(3)非对称:使用一对密钥,公钥和私钥,私钥不在网络传输,因此安全性高。
9、TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?
10、内存优化如何做?
11、看过那些源码?
12、会对代码进行review吗?何时review?怎么review?
13、项目中遇到的让你棘手的问题?多久解决,怎么解决?
14、平时如何学习?何时学习?怎么学习?学习渠道?
第三面
1、前几次面试感觉如何?
2、你现在的APP日活是多少?
3、你现在如何处理崩溃日志?
4、你觉得小团队好还是大团队好? 5 你的优点和缺点说下?
6、你的发展方向说下?是先讲究宽度还是讲究深度,为什么?
7、为什么离职?
8、其他小问题,如哪里人啊?现在工资怎样?要求如何,何时到岗啊?有什么问题要问我的吗?
尾声
一般技术面到后面,面试官都是leader或者是部门老大,他们其实很关心你的职业规划、对待工作的态度、团队合作的能力、自我价值实现方面的思考,当然还有项目实现的能力,过往项目经验和深度。所以最好自己先想想怎么用简短的话表述清楚。注意围绕关键词去说。
写给看到最后码友的话
这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。
(1)一定要紧跟技术前进的脚步, 尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。
我作为一个老兵,在上一家公司工作4年,我没有逼迫自己学习新技术。
结果现在面试碰壁,其实大部分原因就是人家用的都是主流技术,你不会你就被淘汰。
(2)不要给自己设置舒适区, 这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。
一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。
(3)对自己的职业生涯要有一个规划, 以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。
目前大数据这一块,有数据中台架构的公司不是很多,除了算法岗外,大多数人在团队中都是1专多能的角色,今天干干ETL,明天搞数仓,后天又给BI出数据,可能又搞调度系统、报表系统、标签系统、反作弊平台等平台。
没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
(4)做事情要有担当,不要根据OKR给自己设置界限, 有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。
在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记, 还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料(主要是我把其他杂乱的不成体系的都删了~)欢迎白嫖,希望给大家学习方便!
学习进阶视频

系列学习文档

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
网友评论