回馈牛客——机械渣硕的秋招之路
前言
昨天刚面完美团,作为自己秋招的最后一站,真的太累了。尤其是昨天,是最累的一次,前天晚上因为实验室有事,凌晨三点才到寝室,半夜也睡得不好,早上七点过起来去成都面美团,瞌睡真的来,状态也不好,发挥的很一般,虽然最后有幸走到了HR面,后面问HR说要排序后决定,结果要国庆节之后才出了。希望能有个好结果吧,也祝愿牛友门和身边的朋友都能拿到满意的offer。目前手里有三个offer,都是安卓岗,快手,可能是小sp(加了一面),或者白菜,能拿快手是我意料之外的,之前压根没有想过能够去快手,面试快手的时候真的是佛系面的,压根没有准备,就抱着随缘的心态去了,没想到最后结果还挺好的;小米,白菜,面试评价为优秀,自己一面太差,否则都能拿个sp;蘑菇街,应该是sp,最差也是小sp。自己其实是从5月份开始决定在秋招开始找安卓岗位的,之前做了大半年的目标检测,找实习的时候处处碰壁,最终也放弃了,从那个时候开始准备安卓。
看的书籍
自己是在研一开始接触安卓开发的,之后空了很长时间没做,刚开始复习的时候很多东西都忘记了。然后基本从头开始,这里主要看了两本书李刚老师写的《疯狂Android讲义》,花了一周时间大致浏览下,因为很多东西之前学过的,只是忘记了,另外一本是玉刚老师写的《Android开发艺术探索》,这本书看了好多遍,真的很多干货,面试问题大部分都来自于这部书,如果你面试安卓岗,真的建议你把这本书好好看看。另外也看了Android相关的很多博客,郭神、鸿神、后厂村刘皇叔等业界大佬。java部分:阿里专家写的《java并发编程的艺术》,这本书真的写的很好,教会了我很多很多;《深入java虚拟机》,这本书,面试java必考,很重要。此外还有数据库(我只看了MySQL必知必会,当然这里看了很多博客)、网络(《计算机网络》、《图解HTTP》)、操作系统(《计算机操作系统》)、算法(《数据结构与算法java语言实现》、《数据结构与算法Python语言实现 》、《漫画算法》、牛客也刷了几遍、LeetCode也刷了有一百多道题,这里个人觉得刷题之后一定要总结,写笔记,否则真的很容易就忘记了)这些知识也是必须补的,面试中也会问到,这部分看公司侧重点,有的会侧重网络、有的会侧重操作系统,我数据库简历上没怎么提,所以问的比较少。
投递时间点和简历
做简历很重要,一定要写自己会的、自己不会的尽量不要写,项目一定得非常清楚,一面二面三面都会问到项目。我是八月初开始投递的,其实已经比较晚了,有的大厂提前批都结束了,当然自己一开始也没有想进入一线大厂,最开始目标是成都华为和OPPO,但是OPPO简历筛选没过,很气,华为成都安卓岗很少,后面才投了小米、快手、美团、腾讯等公司。
面经干货
我真正走完流程的只有四家:快手、小米、蘑菇街、美团;因为我一开始只想留成都,但是成都的选择很少,大厂又进不去,只能选小厂,成都有安卓岗位的:腾讯(没报希望,投了之后很快收到了笔试通知,但是有事没做,后面又给我发了笔试通知,好像还没出结果)、京东(我八月底才知道京东在成都有安卓岗,那个时候已经结束了)、招银网络科技(笔试和电话面试过了,今天的面试,我拒了,不想再弄了)、OPPO、华为(但是只有无线部门才有安卓岗,由于今年华为招的少,就改岗位了,很气,当时面试的时候只有C++的HC了)、百词斩(这公司笔试很难,一个小时4题、简历筛选也很难,很多大佬都没收到笔试通知,很迷)、极米科技(拿了快手后鸽了)、汇顶科技(笔试没过好像,具体我也忘记了,编程题很简单,考了很多C的东西,真的不知道)、中移成都研究院(收到美团面试通知后鸽了)、tap4fun(好像面试比较迟,10月份去了)。在成都的OPPO简历筛选没过后,真的打击到了,这个时候把聚焦点换到成都以外的公司:蘑菇街(8月20+开始面试的,9.1杭州现场面的,流程比较慢)、4399、虎牙、完美世界、CVTE、携程、快手、瓜子二手车、中兴(面试体验极差、一面只问了项目相关、连java的基础都没有问,发了二面通知,没去了)、奇安信、vivo(我是重庆地区的面试,在节后了,可能之后会去佛系面一波)、步步高、中国邮政(鸽了)、农业银行成都软开(鸽了)。
蘑菇街
一面 2019年8月23日(这是周五,可能下周二、三出结果;一般是两到三个工作日)
面试官感觉很nice,尤其在编程题的时候,我其实弄好了,但是本机调试不对(后来发现是***的忘记调用自己写的函数了,输出肯定不对了),面试官给我提示,再本机调试还是不对,之后他那边调试对了,把他提示的代码注释了,也对了,问题是我本机出了问题,原本的思路和代码是没有问题的。整体感觉面试问题比较简单,我基本都是知道的,除了Android部分有点忘记了,答的不够好和漏点;java部分都是OK的。整个过程用了大概55分钟,我感觉聊得还行,最后还直接问了自己的面试情况。
- java内存布局
- java四个引用
- 创建对象的过程,对象在堆上是如何分配的?
- synchronized讲一下
- hashmap简单讲一下
- View绘制到屏幕上的过程,主要答三大过程,没有细说
- Android中内存泄漏(这里我只讲了单例类、内部类)(不够好)
- Android性能优化,主要指View(我讲了ListView的ViewHolder),这点讲的不够好;然后又问了View过度绘制。
- Android view事件分发(由于我简历写了view的滑动冲突,问了滑动冲突情况、方法等,之后又问了事件分发)
- activity的启动模式。
- 编程题:很简单,爬楼梯问题,用费波拉契数列解
- 讲一下项目中令你最印象深刻的事情。
二面 2019年8月28日 (感觉面的一般,周一出的结果,约的周三面)
- 说自己的项目
- 加载更多功能的实现。(这个答的不好)
- 事件分发机制
- java基本数据类型
- 编程题:很简单,但是自己写的不好;一个链表输出倒数k个节点:我说了两种方法,用一个ArrayList存,然后直接取倒数第k个节点;反转链表,取第k个节点
- 跨平台开发有了解吗?
- 最后总结了下自己今天的答辩;然后问了一些面试的后序事情
- 最后说了下自己最近在干的事情,我说了下Glide的源码。
三面 2019年8月29日(周三面完二面,有点伤心,没想到晚上就收到了三面的通知)
- 说自己的项目,把我简历上面写的项目都问了个遍;问的特别详细,具体会问你为什么这么设计?项目中你遇到的困难,怎么解决的?最大的难点是什么?有什么遇到了困难跳过的?项目给你最大的收获是什么?为什么这个选择这个框架等?
- 设计模式,让我说了下装饰器模式(我简历中写了)。为什么会用设计模式?不用和用有什么区别?
- 单例类,线程安全问题(我项目中出现了,所以被问)。
- 后端的交互等
- 为什么选择Android?(因为我的方向是增强现实,所以特意问了我为啥不做算法,另外还问了我对增强现实技术的发展,我觉得可能是对我研究生期间的学习状况有个了解吧)
最后自己问了几个问题,整个下来半小时左右,我觉得聊得还行;但是网上看三面面经有让写代码,而我没有写代码,感觉内心有点慌。之后中午吃完饭就收到HR面通知,说实话还挺意外的,也太快了,毕竟上午十点面的,两个小时就出结果了。
小米
一面 2019年9月4号
31号的时候和面试官约的4号的一面,先说总的感受吧,几个问题我感觉我回答得挺好的,但是敲代码是真的捉急啊,我自己都看不下去了,不过面试官人真的很好,全程很耐心,还给我讲解问题,帮我找BUG,最后真的很感谢他给了我二面的机会。(还有些记不起了)
- 先问项目,项目中的难点,怎么解决的 。
- java内存布局,每个区是干什么的。
- java中四大引用
- 多线程中,sychronized和volitate的区别
- Android事件分发
- Glide加载图片的过程(我简历里面说了看了Glide的源码),应该是有遗漏,最后补了一问:加载图片是异步的,是如何显示在ImageView上的,这里我答的是handler,我记得就是这个。
- 编程题,其实很简单,atoi函数,输入一个String输出int值,判断各种非法情况。我真得很无语自己了这个是很简单的,结果却搞出了很多问题。
最后面试官说我基础还可以,还是给了我二面的机会,好好准备吧,机会不容易啊。
二面 2019年9月5号(还有很多记不起了)
- 先怼项目,问的很细,直到你不会,感觉怀疑人生,真的在做东西的时候根本没有考虑到这么多。
- HashMap的原理、为什么HashMap中key是引用类型而不是基本数据类型,为什么有了基本数据类型还有包装类型
- java线程池中用到的队列有哪些,各个的应用场景
- 编程题,两数之和
快手
佛系面的,当时就没有写面经,现在也想不起了,不过很有幸能够拿到快手的意向书,运气爆棚。有时候感觉心态真的很重要。
CVTE
当时其实自己是不想面的了,因为已经收到了小米的意向书,然后想着C场是我之前实习找的,也挺想去的,另外为了刷一波面经,就答应了。
一面 2019 9月21号
电话面试,约的是10点,但是面试官来挺早,9点半就给我打电话了,谈了55分钟。因为自己已经拿了小米的offer了,本来不想面的,但是C厂是我之前老早投递的,就还是面了。
- 项目里面最难的问题是什么?项目扯了应该有十来分钟吧。
- Android中的内存溢出和内存泄漏,我这里举了单例类的情况,之后又问了解决的方案,我也答了,然后还问了如果必须要在单例类中使用activity的context怎么办,这里我说可以使用弱引用,他感觉很不满意这个答案,但是我后来查了博客都是这么弄的啊,很奇怪。
- GC的策略、算法等。
- volatile关键字的内存语义。面试官问问题不是直接怎么问的,我这里是在项目中使用到了这个,他问为什么能解决。
- HashMap的数据结构,两种结构的查询时间
- 接口和抽象类的区别
- Android中service和activity的通讯。这里我答了handler,这个东西是可以实现,不过很麻烦,之前面快手的时候面试官给我解释过,用两个handler,后悔当时没有写面经忘了,面试官就在这里一直问,我答不上来了。当然其他的方式我是答了的,callback、binder、messenger、广播、其他类定义共享变量、eventBus应该也可以,不过我没用过。
- Android
onLayout()
和onMasure()
的区别,为什么会分成两个方法,onMasure()
完了再进行onLayout()
,那么为啥我不能一次在一个方法中直接实现这个两个过程?我这里答了onMasure()
可能会执行多次,并且举了RelativeLayout
的例子,不对。 - 自定义瀑布流布局的实现?我说主要是重写
onLayout()
,确实不知道这个。 - 如果你有大小为64M的内存空间,如果让你放无数张图片怎么弄。我不太懂什么意思,我说虚拟内存,但感觉他不太想要这个答案,我就说可以用缓存。这个他才说可以。说实话这题我有点懵逼,如果是用缓存的话,还是会满的,即使加上LRUCache也会满啊。
后面查状态,被挂了,有点想不通,上面的问题我没有记录完,但是我感觉我应该过了啊,哎,原谅自己太菜了吧,反正也没打算去,所以就不在乎了。
美团
机械渣硕的成都美团现面,大佬勿喷,之前万幸拿到快手意向书,满自信来美团面试,深受打击,确实也看到了很多自己的技术盲点,尤其是操作系统和网络部分,有的知识点忘记了,犯了很多错误,offer随缘吧,这次体验不错,尤其是一面,面试官超级好,和我同是四川人聊的很开心,二面深受打击,不过终究还是得到了复试机会。9月26号一站式弄的,一面+二面+三面+HR面。面经不全,有的忘记了。
一面
- 先来看了本科学历,专业,然后写代码,层序遍历二叉树,剑指offer原题,自己的字写太烂,给面试官讲了一遍。
- Java中引用,这里我答了四种,他说还有filial ize引用
- 安卓中activity啥时候被回收
- 计算机如果是单核,那么使用多线程有意义吗
- java对象的内存布局
- 类的字节码会被卸载吗,为什么
- 安卓中handler原理,looper可以有多个吗?
- Threadlocal原理
- activity何时会被销毁,然后onsaveInstance()方法何时执行,finish方***保存activity的状态吗
二面
二面我感觉是我最难的一次面试了,我感觉就是问了你一个问题,然后会一直挖一直挖,直到你不会,真扛不住了,第一次面试说这个我不知道了,还以为自己挂了,没想到后来居然过了,万幸啊
- 项目,项目里面最难的部分,这里扯了一会
- hashmap的结构
- java oom和栈溢出
- 给你一个三角形,和一个点,如何判断点是否在三角形内,拓展,如果是四边形,五边形呢(算面积来做)
- 输入url访问的过程,如果用https和http建立连接的区别,SSL的过程,如何验证服务端的密钥,网络缓存,网页中有多个标签,用什么数据结构可以快速知道标签层级最深的标签,最后一个问题巴拉巴拉,然后感觉做的一般
- 有5000000个int型数据,内存有限,如何排序,这里是操作系统的知识,以前看过,但是忘了,没答上。
- 安卓中asytask中的postxxx方法在哪里调用的
- 他写了一个方法,里面有方法参数,定义了一个变量,然后在方法里面new了一个对象,各变量和对象是存在哪里的,然后如果加了一个onclicked,用到了某个变量,这个变量为啥用final修饰,在onclicked里面可以修改这个变量的值吗。
- 代码题,右移一个数组,我以为就简单实现下,结果他说要考虑各种异常情况,这里补了几次
三面
感觉主要还是看简历,基本没有技术问题,问你的短板,优点,别人对你的评价,感觉有点像HR面。最后聊了聊如果进公司的话,主要的业务等,最后还加了面试官的微信。
个人建议
在这个过程中,我觉得一定要多写笔记、多总结;看了别人的书或者博客或者刷了题之后都写写笔记,即使很简单的东西,当时知道,过了时间又忘记了,写笔记实际上是一个产出的过程,尤其是知识点,如果不写笔记,面试问着相当于重新组织语言,写笔记,用自己的话说一遍,就相当于面试了,这样的话不仅能够帮助记忆,还可以让你在面试的时候顺手拈来。
#面经##快手##小米##美团##蘑菇街##校招##Java工程师#