个人情况
对于211的同学来说,学校真的很渣渣了,由于带学院结尾,被网易认为三本不给面试机会(:зゝ∠)。广东人,说起普通话来很重的口音,面试时紧张的时候别人更是听不清楚我说什么,很吃亏。
按时间顺序目前面试了cvte,吉比特,小米,字节跳动,阿里,腾讯WXG,七牛云,拿到七牛云HR,腾讯的offer,阿里offer。
面试情况
学习情况
- Android的入门主要学习了《第一行代码》
- Android进阶学习《Android开发艺术探索》,面试必读,重点知识我反复看了好多遍。
- Android的面经学习简书厘米姑娘,也是我腾讯的内推人,非常感谢她。
- java基础学习了《java编程思想》,看源码。
- java总结学习《码出高效》,这本书对知识点总结的很好,面试回答的时候我都是根据这本书的总结来回答的。
- jvm学习《深入理解java虚拟机》,必读,我是背了重点的内容,对于安卓来说,只需要熟悉重点章节就可以了。
- 计算机网络:《计算机网络》谢希仁的,熟悉重点部分就可以了
项目两个
- 自己做了一个学校驾校的小应用
- 针对阿里面试,寒假之前做了语雀的app
奖项
acm奖牌0,算法超级渣,《剑指offer》都没刷完
省里面超级水的应用开发比赛三等奖,二等奖
腾讯一面
(一面面试官很nice,但是发短信约时间之后,鸽了我4个小时,我上课时打过来,约晚上,结果鸽了我三天,之后我主动发短信约时间,答应了之后结果又鸽了我。。。orz)
- 自我介绍
- 自我介绍时说过自己看过EventBus源码,然后让我谈谈事件总线的理解。
- EventBus会有什么问题吗?
- EventBus、接口回调、观察者模式的使用场景说一下。
- 项目什么地方用到数据的持久化,说一下。
- Activity的生命周期,弹出dialog和一个activity的dialog生命周期有什么区别?
- Activity的启动模式,应用场景,然后举了很多微信的场景,让我去选择用那种启动模式,说下理由。
- Activity进程的优先级。
- 如何防止微信不被系统杀死?
- service两种启动模式,区别
- 两种启动模式,如果我在退出Activity的时候没有退出service会怎么样。
- 设计一个图片浏览框架,(线程池,lru缓存,brabra的说了一堆)。
- 有一个很大很大的图片加载到内存上,不能降低清晰度和压缩图片你怎么解决?(提示我局部显示?我没懂)
- 如何适配不同厂商的手机,然后设计模式,brara又说了一大堆,最后还说到jetkins自动部署上面去了
- AsyncTask源码分析,每个方法在哪个线程执行的?
一面面试官真的很好,有些你不懂的他还举例教你,一面我觉得难度比较大,常规的背题肯定会不满意的,题目比较少,引申出来的知识点却很多,大部分时间都是我在谈自己的解决思路然后分析到知识点的源码上面去,比如说像如何防止微信不被杀死这种,其实我说了常用的进程保活思路,它还要我分析其他情况
面试官说我不错,叫我明天准备二面,电话一挂,我就愉快地去吃饭,吃着饭看状态灰了,这谁顶得住啊~
回去看完电影之后,再查一下状态,变成了复试,估计之前是到时间简历被释放了。
腾讯二面
(二面总监/面委,由于开会,鸽我半个小时)
- 上来大数相乘,我做的眼泪都快流出来了。
- put和post的区别,应用场景。
- 看了我的flutter项目,我改了一个框架,问我这个框架。
- 让你设计一个跨平台的框架,你怎么设计(这里我谈了flutter的架构)。
- https的流程。
- fragment的懒加载。
- 一个商场里有一个电影院,你会把厕所建设在哪里,说一下你的理由?
hr面
(鸽了我20分钟,腾讯都是大猪蹄子?哈哈~~开玩笑,面试官真的很忙,有时候换位思考一下,心态好点)
- 自我介绍
- 为什么选择微信?
- 对我们了解吗?
- 愿不愿意来
- 家里的情况
- 什么时候可以来实习,可以实习到什么时候
(入职)
阿里一面
- 自我介绍
- 自己看过的源码,说一下?
- 接下来就EventBus的东西了,还是老问题,优缺点,有没有什么问题,列举了很多场景,我看源码看的比较细,根据自己看过的东西做回答和分析,然后还是,接口回调和观察者模式之间的选择。
- 问我你看过这么多源码,你觉得什么东西最重要?
- 答了源码中看到了大量的反射使用,多线程方面,Collections,数据结构这些。
- 问我多线程,引申出handler,我从handler的源码去解释
- handler引申出的内存泄漏,为什么静态内部类不会持有外部对象
- 接下来还是场景题,图片框架的实现,涉及到的Lru缓存,线程池,线程池该如何分配线程数量。
- APP从打开到显示之间发生的事情。
- 为什么java可以调用c/c++的函数,调用jni发生的事情说一下。
- 动画种类,使用动画的步骤,有没有看过动画框架的源码。
(面试官说我在应用层上基础知识很好,懂得去看源码学习,但是android深度不够,应该要往Framework和c/c++那边学习)
阿里二面
1.自我介绍
2.还是自己对EventBus的理解。
3.学习Android的过程
4.项目遇到的问题,怎么解决的
5.回答过程中提到csrf,问原理
6.对公司有什么要求
7.IPC
8.socket的连接过程
(说我这方面的技术和兴趣不错,但是缺少大型项目的经验,考虑不够全面,如果有一个机会给我就很好了。)
阿里三面
- 自我介绍
- 详细说我第一个项目
- http缓存
- 如何把ip地址存储在一个int 变量里面?
- 详细介绍第二个项目
(30min,面试官说我自己对技术的热情很不错,让我保持下去,口头直接让我过,让我等hr)
阿里HR面
- 上来突然莫名其妙问我一堆与专业无关的,还问我这个专业跟计算机有什么关系(我是软件工程),
我:????
我有点懵(原来看错简历了)
- 从小到大最有压力的事
- 数学怎么样
- 你考上这个学校是正常发挥吗? 我回答的是!/(ㄒoㄒ)/~~ 很凉
- 什么事情让你觉得自己喜欢移动端
- 哪里人,想去哪里
(hr面只有15分钟,感觉不太好)
(后来收到了offer意向书,整个流程横跨两个月)
总结
我也不是什么大佬,最后唠叨几句。希望各位没拿到offer的真的不要灰心,可能你之前所有的失败都是你成功的垫脚石,我面头条一面挂的时候也曾经自闭过,但更多的是反思,如何调整自己的复习计划。在复习的时候一定要有自己的强项,能把这个知识点理解的很透彻并且把相关的知识点拓展出去。另一方面就是让面试官看到你对这个岗位的热情,能够自发性地去学习与岗位相关的东西。
讲一下面试一些必备的技能
1. 一般情况下第一轮都是基础面试,需要扎实的基础
- 最常用的Android 基础知识
- Java 基础知识
- 了解一些 常用东西的原理,例如:handler, thread 等
- 项目中的技术点
2. 第二轮的时候需要了解更深层次的东西
- Android 事件分发机制原理
- Android 绘图机制原理
- WindowManager 的相关知识
- 进程间传输方式
- Java 内存管理机制
3. 能进入第三轮基本没什么问题,但是要注意以下问题
-
该轮一般是 老大或者部门负责人,问的问题一般都看 深度与广度
-
当问及薪水的时候,要说一个合适的,小公司随意,大公司一定要慎重,当心里没底的时候,可以告诉对方,让对方给一个合理的薪资。一般都是在原工资基础之上增长,听猎头说一般涨幅都在15%-30%,超 NB 的可以要30%及以上,如果感觉自己还不错的,挺厉害的,建议最高20%,一般人就定在15% 左右最靠谱。公司内部一般有一套机制,根据公司情况而定。
-
我们的面试原则就是拿到合理薪资,得到 offer
-
个人发展情况,这个问题很难回答,如果和公司方向不符合,极有可能和公司无缘。建议多试探性的问问公司缺少什么,你能否给予公司对应的东西。当然对于有自我追求的人,那可以放心大胆的提。我的方向就是架构师,哈哈哈,挺极端的,别学我哦。我感觉选择都是双向的,因此我知道自己需要的是什么。
-
你最擅长什么UI 还是其他什么?这个问题更不好回答。你要说你擅长 UI,是不是意味着你其他能力就不行?虽然我不知道面试官的用意,但是我能感觉到,这个问题不是那么好回答,我会回答说自己都行,来什么业务接什么需求。可能回答不太好,总之和公司的职位吻合就行,这样总不至于出错吧。
那么该如何复习?
其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
这里再分享一下我面试期间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)
最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题
等等,可以很好地帮助我们深刻理解Android相关知识点的原理以及面试相关知识。
这份资料把大厂面试中常被问到的技术点整理成了 PDF ,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...