2019 也过了一大半, 作为一个已经 "混迹多年" 的本科生, 十分感谢 Android 开发交流群的大牛给我带来的帮助. 从 2018 年 2 月开始进行春招的准备, 拿了腾讯, 阿里, 华为, YY 等公司的实习生 offer, 到暑假入职腾讯成为一名实习生, 再到秋招经历了几家公司, 拿到了阿里, 腾讯 sp 和华为 sp offer, 自己确实也是感慨万千. 虽然前路漫漫, 但及时总结自己的经历, 让自己成长是我觉得在我们的学习路上很重要的一点.
(注: 本片文章的所有内容以及更多内容都可以在文末免费获取)
一, 给大家的建议
在大家的学习, 招聘的过程中, 我觉得第一点也是最重要的, 就是心态要放好, 不管你处在任何一个阶段, 都要有一个良好的心态, 特别是在面试这个最难, 最紧张的阶段, 不要怀疑自己, 保持自信去迎接每一次面试, 从面试中去学习就可以了. 特别是刚开始面试, 难免会有很多不会的东西, 用查漏补缺的心态去面对.
每个人都会有失落和低潮的时候, 迷茫, 紧张都是我们面试过程中很正常的心态, 希望大家用平常心去面对. 给大家一些面经和资料整理都是能够帮助到大家学习的, 但资料也有解决不了的问题, 为此我也和一些同事做了一些行动, 我们联合腾讯组建了一个 Android 开发交流群, 欢迎大家进群交流~
二, 面试的知识点
任何一个方向的校招, 知识点都来自于两个方面: 基础知识 + 专业方向知识
Android 方向主要就是
(1)计算机基础知识: 数据结构, 计算机网络和操作系统;
(2)Android 方向的知识: 从基础到开源框架到更深入的一些简单的系统机制.
这些方向我之前也总结过, 放在了百度网盘上, 我自己结合我的经验做了一个非常详细的总结, 希望大家喜欢~
三, 春招实习面试面经(面经都是先后记的, 不分先后)
(1)YY
image
欢聚时代是内推的, 不过感觉内推不内推没有任何区别了, 反正没有笔试还不错, 那天一早就到了 YY 的大厦下面, 感觉是个挺豪华的地方, 内部装潢比较的好, 给人感觉很好. 但由于是第一次面试还是有点紧张的, 门口交了简历就在那等, 没一会就进去一面了.
一面: 是个挺好挺年轻的面试官, 在一个感觉很小的房间里, 不过光线很好, 进去就让我坐下了.
(1)介绍一下 java 内存模型吧, 正好有纸笔, 我就画了图一个一个介绍, 他也没有催促我, 就让我慢慢说, 我从内存模型又扯到 GC 上面, 然后啰里啰嗦的说了不少 JVM 的内容, 他说你这块感觉挺了解的, 就过了;
(2)ArrayList 和 LinkedList 的区别, 这个也很简单, 从实现上说一说, 他说那 java 我就不问了, 就开始问项目;
(3)问我项目中一个功能怎么实现的, 主要从自定义 View 的角度问我, 我就说了一下动画的具体算法, 然后给他演示了一下 App, 他又问我维护上怎么做的, 这个我确实不是特别了解, 就说了说自己的看法;
(4)之后开始狂问开源框架知识, Retrofit,EventBus 这些简历里面写的框架, 他就问我怎么它们是实现的, 源码看过没有之类的, 之前准备了一些所以答得自己感觉还不错, 毕竟准备了, 网上的博客分析的也很多, 这里讲了蛮长时间, 还说到了内存泄漏的出现和怎么解决.
(5)最后问了设计模式, 我就说了一个责任链模式, 说到了触摸传递机制, 和他说了说, 他好像觉得还不错. 然后让我问问题, 我就随便问了一点, 什么适配怎么做的, 最后问他表现怎么样, 他说觉得你不错, 我当时就很开心, 觉得一面应该过了.
二面: 二面和一面之间隔了很短的时间, 很快就二面了, 当是还是很紧张, 进去简单自我介绍一下就开始了
(1)让我介绍项目, 这里我觉得一旦让你介绍你简历上的项目, 你需要保证一点, 诚实. 我很实在地说第三个第四个项目都是自己随便做的, 效果肯定不好, 他虽然很严肃, 但表示能够理解, 说学生确实也能力有限. 我介绍了 App 和实验室的项目;
(2)和一面面试官一样, 开始问框架实现, 我也巴拉巴拉说了一堆, 这里确实是准备过的, 所以他好像比较满意;
(3)问我做项目时遇到的困难, 这个我没有准备, 不过我就从简单的滑动冲突开始说, 然后又说网络访问的解决, 他一直就是听, 也没有打断我, 我也就厚着脸皮一直说啊说;
(4)最后他说问点基础, 就问了 Java 同步机制, 我就从锁的实现原理开始说, 刚说到 "膨胀机制", 他就说停, 说了一句看来你很了解啊, 那我就不问了, 你去找 hr 吧.
就这样糊里糊涂的结束了二面, 觉得有纸笔还是很重要的, 并且自己对于熟悉的领域一定要提前想好画图怎么描述, 这样你讲的清晰面试官也会比较的满意, 然后看到了评分觉得还不错, 就去等 hr 了.
hr 面: 吃完饭就在那等, 等了一个多小时终于到我了, hr 我感觉不是很愿意聊吧, 有点冷漠, 问了一些常见的问题, 什么准备在哪里发展, 实习工资要求等等, 就让我回去等通知了.
等了一个多星期, 终于在下一周的周五来了 offer 电话, 自己还在考虑, 因为是第一个 offer, 觉得需要分享出来也攒攒人品, 继续加油吧!
(2)腾讯
image
腾讯的内推简历没有被挑起来, 当是还挺沮丧的, 不过还有正式流程. 腾讯面试都是现场, 总体给人感觉不错, 因为都是去酒店面试, 整体感觉很平易近人, 面试官也没有什么架子, 都很乐于交流. 所以面试还是看面试官, 这句话是真的.
一面
一面就是去希尔顿, 没等一会就开始面试了, 主要提问如下:
自我介绍;
问了 jvm 内存模型, 我说了蛮多的, 面试官可能觉得我 java 这块不错, 就没继续问别的了;
说一说项目, 感觉面试官不感兴趣;
说一说 EventBus 的实现(这个经常被问), 然后就扯到自己怎么实现了一个类似这个的开源库, 面试官没怎么提问;
写一个冒泡排序;
说一说 On 的排序, 这个当时蒙了, 没答出来, 其实不就是 hash 嘛;
写一个二叉树中两个节点的最近公共父节点, 这个题我做过, 但当时脑子一片空白, 只想到最弱智的方法, 算法题让我一定手写, 所以两个算法题手写了好久, 过了很久的感觉.
有什么问题想问.
一面让我当时就感觉腾讯真的是注重基础, 基本上不问任何应用的问题, 就是算法, 基础, 但由于算法题写的太差, 虽然写出来但方法比较弱智, 所以觉得估计是挂了, 但运气还不错, 侥幸进入了第二轮.
二面
二面又去了喜来登面试, 当是还是很紧张的. 主要问题如下:
自我介绍;
介绍一下项目, 你觉得最好的项目是哪一个?
做的过程中遇到什么困难没有? 怎么解决的;
为什么学习安卓? 对这个方向怎么看;
你简历说你看过部分框架源码, 看过什么部分?
能说说安卓应用启动过程吗?
了解机器学习吗? 了解哪些?(这个当时确实不会, 如实说了, 我觉得不懂的话还是不要逞强, 面试官后来也说他这个也就是问一下, 看我了解不了解而已)
你对设计模式了解吗? 说说常见的设计模式, 你项目中的 MVP 架构有什么优缺点呢? 它是什么设计模式?
问问基础吧, 你了解虚拟内存吗? 然后让我画图表示虚拟内存是如何实现的, 就是页表, 转换过程等, 这个考的还是很细;
最后做了一道智力题, 不难.
二面结束之后很久状态都没变, 当是周围同学都变了, 第二天中午状态才变化, 最后很开心去面了 hr.
hr 面
hr 面没有问什么刁钻的, 都是 hr 面的老套路, 自己也记不太清了.
(3)阿里
image
阿里的面试是我最早开始的, 全程电话面, 感觉也不错, 二面三面比较水, 最后放弃的原因还是因为要去北京, 太远了, 而且问了很多过来人, 阿里转正率确实比较低, 个人还是比较看重这个, 所以最后拒绝了, 因为面的比较久远, 很多内容记不得了, 想起来再添上.
一面
一面突然打来的电话, 当是自己在图书馆, 是第一次面试, 非常紧张, 内容记得还是比较清晰的, 如下:
自我介绍一下;
自己主要做了什么项目? 介绍一下;
项目最出彩的地方是什么, 用了什么方法解决的;
EventBus 怎么实现的?
你用了 Retrofit, 看过它的源码吗? Okhttp 呢?
常见的设计模式有哪些? 介绍一个
有什么问题要问我?
一面问的比较深入, 自己也比较紧张, 但是很多问题都答得断断续续的, 面试官让我不要急, 慢慢说, 最后说你通过了, 后面会有人再通知你, 也算是为我后面的面试开了一个好头.
二面
二面就一个字, 水. 全程问项目, 项目做了哪些, 干嘛的, 怎么用的, 12 分钟就结束了.
三面
三面是交叉面, 也没问什么问题, 基础知识问的如下:
EventBus 怎么实现的? 你做的那个有什么问题, 它有什么缺点和优点?
MVP 架构有什么作用? 介绍一下;
为什么 TCP 要三次握手? 两次可以吗?
剩下的都是一些闲聊, 问我看什么书, 为什么学习安卓之类的.
全程大概 30 分钟, 面试官那边信号不好, 但可能是交叉面的缘故, 问的不难.
hr 面
都说阿里 hr 很刁钻, 我这个 hr 面全程 10 分钟, 问了几个很正常的问题, 家在哪, 未来什么打算之类的, 有什么爱好, 然后就结束了.
(4)华为
image
华为面试就一个感觉, 水, 而且是特别水. 现场面, 和 CVTE 一个酒店, 全程没有问任何算法, 基础等, 全是聊了聊项目就结束, 总共就两次面试, 华为可能是面试最看脸的一个公司了吧.
一面
由于太水, 我脑中都记不得他问了什么内容了, 记得的就这几个,:
自我介绍;
做过什么项目, 为什么要做这个?
做项目遇到什么困难, 怎么解决的.
华为最奇怪的就是你的面试官不是你方向的, 这个是非常非常奇怪的一点, 所以全程就只问项目.
二面
二面一开始问了一些项目, 后面就是成绩普查, 这个多少分, 那个多少分, 简单记录一下:
自我介绍;
说说项目吧;
xxx 是怎么实现的, 说一说;
你成绩怎么样? 排名多少?
拿过奖学金吗? 有多少人拿? 为什么 10% 只有三等奖学金?(这个当时真的是蒙了, 我们学校就这样啊)
数据结构多少分, 计网多少分, 操作系统多少分, 数学多少分. 数学说满分他竟然笑了一下, 说大学还可以有满分啊, 很尴尬哈哈.
问完成绩就让我回去了, 最后竟然还过了, 感觉华为真的是看脸啊.
(5)CVTE
image
在海投策略下投了 CVTE, 因为有了 YY 的 offer, 心态上还算放松, 抱着试试看的态度开始了笔试面试, 周六一面二面, 周日终面, 刚刚收到终面通过的通知, 记录一下经历.
1, 笔试
笔试挺简单的, 但题目确实不记得什么了, 编程题两道也比较简单. 这里吐槽一下, 不能调试的编程题, 很好奇题目通过率有多少, 连包都要手打, 觉得设计这个笔试系统的人应该不是程序员吧......
2, 面试
一面: 一面是两个面试官, 给我的感觉是挺难的, 起码和我面过的 YY 和阿里相比, 问的内容深入程度都很高, 但是两个面试官左边的很明显不懂 Android, 我猜是 java 后台方向的, 而右边的很明显是 Android 方向的, 问题一个接一个.
(1)说说自己最满意的项目, 我就说和同学做的指南针 App, 他们说你画一下架构图吧, 我说这 App 总共没几个页面没什么好画的, 他们好像有点不爽, 这也是为什么我觉得一面不太好的缘故. 然后就跳过了, 说那你讲讲项目中的难点吧, 我就讲了动画的实现, 左边的那个很明显听不懂, 不时地望着右边的面试官, 让我感觉不是很好... 没讲一会他们就说可以了.
(2)让我讲讲项目中用的框架, 我就说了 Retrofit 和 Eventbus, 和以往面试都很像的是果然都开始问实现的过程, 问题一般都是 xxx 是怎么实现的请你说说看, 这个我准备的比较多, 就一直说说说, 左边那个面试官也就是听吧... 右边面试官不时记录着一些什么, 后来我偷看到了, 是各项能力的评分.
(3)我说了两个框架他们都没有提问, 然后突然问我 RxJava 用过吗, 我说用过, 他说 flatMap 和 map 有什么区别, 我当时就觉得这个问题不好说, 因为是个理解性的问题, 我自己当是也不能说完全理解了, 就说应该是一对一和一对多的关系, 然后说我也不是很明白. 他紧接着就问, 你举个实际的例子吧, 我就说我真的举不出来, 因为确实用的比较少, 然后他说那你觉得什么例子可以用呢? 我说应该是一个学生多个课程的时候, 他就说你对这个的理解有点问题, 当是就觉得 GG 了哈哈.
(4)问了我做项目时候遇到的困难, 我就说了滑动冲突上的解决, 然后就问我常见的设计模式有哪些, 让我举个例子, 我就说了单例模式, 说让我手写一个线程安全的单例模式, 我就说 DCL 是有问题的所以不太好, 要用静态内部类, 这里我当时觉得左边的面试官很奇怪, 他问我 DCL 是什么, 我就说二次检查锁定, 他就说是锁两次? 我说不是, 是为了防止每次都要加锁的一种优化, 他就感觉完全没有听过一样, 硬要我写给他看, 写完了之后还说你这样会死锁吧... 我说不会啊, 不是加两次锁, 是在初始化的时候才加锁, 他显得不能理解一样, 让我有点奇怪哈哈.
(5)之后就完全问 java 基础知识, 锁有哪些, 有哪些作用和实现, 有什么优势, 具体来说就是 synchronized 和 lock 的区别, 我又说到 synchronized 怎么实现的(二面问了同样的问题); 然后问我 volatile 有什么作用, 我就从两个语义上来说, 还问了几个我记不太清了, 想起来了就补充吧.
(6)然后就说了一道题让我手写, String 表示的数字转成 int, 不能用系统 API, 这个题我记得 leetcode 上有, 应该是很 easy 的题, 很快就写完了, 结果写完了他一看, 你考虑正负号了吗? 我说我忘了, 当是觉得 gg 了, 这么简单的题连这个都忘了, 瞬间觉得可以回去了. 然后我就说我是第一次现场写算法, 有点紧张, 没有考虑周全, 他们俩直接笑了, 说第一次啊, 那你出去等二面吧, 我说完谢谢就出来了, 一面就这样结束了.
二面: 二面等了一个多小时终于到我, 是个中年大叔, 我估计挺有资历的, 面的还不错, 挺愉快的.
(1)让我自我介绍, 我就简单地说了说学校专业年级, 做过什么项目
(2)问我指南针 App 做的过程中的实现, 我就说了动画的实现, 画了图解释了很多, 他也就听一听, 感觉不怎么提问
(3)问了我 Retrofit 怎么实现的, 我说动态代理, 然后解释了动态代理的实现方式, 他也没有提什么问, 后来我觉得应该他不是 Android 方向的吧, 只是技术总监之类的.
(4)让我介绍我的实验室项目会议系统, 这是第一个问我业务的面试官... 我就说了主要的功能, 我负责的部分等等, 他问我信息安全怎么保证的, 我就实话实说信息安全没怎么做, 用的 JSON, 加密由于能力有限做不了, 他就笑了, 我说学生项目考虑的比较少希望能理解.
(5)最后问我 java 里面锁的实现, 我就从锁的膨胀来说, 偏向锁, 轻量级和重量级锁, 然后介绍了一下使用用的情况, 他也没提问, 让我说完就结束了聊天的部分
(6)最后还是老样子, 算法题, 三个 String 敏感词同出现的字母和次数, 这个题比较简单, 直接用数组简单哈希就做出来了, 解释就解释了半天... 他似乎一直不能理解为什么 x-('a'-0)就能哈希到对应的位置上, 解释了半天才听明白, 然后就结束了二面.
当晚就出了结果, 第二天 (周日) 去参加了 hr 面.
hr 面(终面): 三个人一起面, 一直都是聊人生, 聊成长经历, 没什么好说的, 不过我觉得 hr 面还是应该自信一些, 不知道我旁边的同学来自哪里, 不过我觉得应该自信一些吧, 该说就说不要担心太多.
3,offer 通知
刚刚查到了结果, 终面通过, 应该不久就会联系, cvte 完全是抱着参加玩玩的心态去的, 也知道了知识上的一些缺漏, 也算是有所收获吧. 最重要的一点就是心态, 在求职路上我们会经历很多失败, 一个良好的心态是很重要的, 好好准备不后悔就好, 加油吧~
四, 秋招面试面经
(1)阿里
秋招面试只面了阿里和华为, 先记录一下阿里吧, 只不过比较久远, 有些记不太清
一面: 那时候还在实习, 所以问的东西也不多
(1)在实习中做了什么工作
(2)对于启动优化的思路, 你是怎么做的? 为什么使用 aop 来进行启动时间的计算, 有什么问题? 和 Android 自带的工具呢?(都是与我的简历相关的)
(3)对于压缩算法了解吗
(4)eventbus 了解吗? 具体实现说说看? 还问了 eventbus3.0 之后的优化思路, 没答上来
(5)对于网络框架的了解
反正一面答的不好, 可能由于没复习的缘故, 很多点没答好, 不过最后还是给过了
二面: 应该是主管, 问的问题不多
(1)在实习中做了什么工作, 学到了什么
(2)关于简历里面说的优化, 怎么做的, 为什么这么做
(3)网络框架了解吗? mars 有什么特殊的地方, 这个当时正好看到了, 说的还比较详细, 关于 xlog 的优化等等
(4)对于未来工作的打算和想法
三面: 最水的一面, 全程十来分钟
(1)自己为什么做安卓
(2)对于未来的工作中的一些看法
(3)如果工作中遇到问题如何解决
五, 面试经验
从我的经验来说, 面试春招和秋招差距不算太大, 只不过秋招大部分面试官可能更感兴趣的是你的实习经历(从我和同学的经历来看), 所以对于明年的春招, 学弟学妹们一定要抓紧, 一个好的实习可以给你秋招带来很大的好处, 这点非常重要.
另外关于简历的重要性, 很多人都忽视了, 在我看来面试官有 7 成问题都来自于你的简历, 所以认真的写好简历并且掌握简历的内容是非常重要的, 不过在我看来简历的门道太多, 一时半会说不太清楚, 后面整理好了再进行分享.
面试我觉得就是准备 + 简历 + 表达 + 运气的综合, 所以在面试过程中有很多可以进行优化和学习的点, 后面等有空了就及时总结出来分享给大家! 就在终极大招中~
六, 终极大招
本篇文章的所有内容和额外知识点总结下载地址就在我们的 Android 开发交流群 (820198451) 中, 赶紧点赞 + 关注我, 包括自己打出来的超详细知识点整理~
------ 分割线 ------
最近刚留意到简书点赞可以有好几种赞, 长按点赞按钮就会有选项, 大家点赞的时候, 麻烦点个超赞, 让我感受下这个功能......
来源: http://www.jianshu.com/p/9010683e4c80