2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

如果是第一次看我的文章的朋友,可以康康我上一篇关于面经的文章。第二位同学的面经终于在百忙之中整理出来了,希望能对正值找工作或者跳槽的朋友有所帮助。

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

总结下这个月的面试

上个月底是投了虎牙、完美世界,然后在boss直聘上沟通了一些,微派收了我简历。然后这个月初的收到了虎牙的拒信,吓得我都不敢投简历了,赶紧请学长学姐帮忙看了下简历。然后5号腾讯提前批开启,就当天投了腾讯、蘑菇街、斗鱼。这个月基本就是蘑菇街、腾讯、微派的面试同时进行的。微派那边似乎缺人吗不知道,然后一直给我安排了三次面试,第三次被面试官问哭了,我感觉可能自己一些想法和这个面试官不太契合,后面hr还想给我安排面试我就拒绝了。然后目前的话,完美的笔试放弃了,斗鱼的笔试几天前做了,似乎还在判卷。

蘑菇街的面试邀请提前了三天发,到了面试前一天,哭的很惨,哭到岔气,感觉自己快到了三月中旬了都,发现自己什么都不会,担心自己要是不能跟一号一起去实习,感觉自己特别没用,不知道怎么办。本来隔天要面蘑菇街,发现自己OkHttp都想不起来怎么回事,就开始看,可是太难受了,一点都没有看进去。

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

蘑菇街一面(3月12日 牛客视频 50min)

  • Java基本数据类型
  • 介绍下面向对象的理解
  • 开发过程中有用到过线程吗
  • 说下线程池和普通线程的区别
  • 简单说下Activity的声明周期
  • 了解过哪个声明周期内不适合做耗时操作吗
  • 用过哪些数据存储方式
  • 假如说多个线程同时往一个线程写入,如何保证文件不会被写乱掉(说保证线程安全)
  • 了解过数据存储中SP存储的两个提交方法的不同
  • 开发过程中遇到过内存泄露问题吗(说了handler的情况、静态和单例模式的情况、以及一些Bitmap资源的使用)
  • 用过什么内存泄露的检测工具。
  • 用过什么设计模式相关的内容(单例、AQS模板方法、RecyclerView的设置布局管理器的桥接模式等)
  • 对打包过程的了解(我提了下签名,然后说我不记得了)
  • 问常用的排序算法(选泡插、快归堆)然后问时间复杂度
  • HTTP和HTTPs区别
  • get和post区别(作用、幂等性)
  • 两个项目有什么挑战的地方
  • 问项目里写了OkHttp,问了下项目中是在哪里去做网络请求的
  • 两个栈实现一个队列
  • 最后提问机会就是问了下客户端技术部和内容技术部有什么区别,还有系统版本适配方面的问题,以及面试官的建议,面试官说我基础掌握的还可以,但是想项目的话还需要再梳理一下内容,表示不知道是不是可能网络的问题,项目方面没有太get到我讲的一些东西。

然后隔天给我安排了二面

蘑菇街二面(3月16日 牛客视频 40min)

  • 开头说了下项目,感觉我可能沟通的不是很好,面试官没有get到点就有点着急。然后就围绕一个轮询怎么设置时间间隔的问题,怎么对数据进行重用的问题问了挺久,感觉我回答的并不是很好,后来面试官停止问项目,开始问其他的内容,之前提到了事件分发,就问了事件分发(我还没说完,就开始问下一个问题了)。

  • 写一个下拉刷新控件(为了不让场面尴尬,我只能尽量多说),面试官问怎么布局,继承哪个ViewGroup等等。

  • 完了又问其他的问题,用过HashMap、Hashtable等等(鉴于前面答得不好,面试官也有些着急,遇到一个不用想可以直接回答的问题就赶紧说,面试官来一句“是有提前准备的吧”,我?我到底是属于准备了还是没准备呢?)

  • 问我DVM和JVM的区别。

  • (可能有些题目不太记得了,但是后面问的都是很直接的问题,然而,面试官好像并不期待我的回答内容。)

  • 最后写了一个常规题目,排序数组找两个值的和是目标值。

  • 写完以后面试官说情况呢也了解的差不多了,问我有没有什么要问的,我就问了下进去蘑菇街需要主要学习点什么内容,面试官说没有什么特别需要学习的,说其实很多内容我们应该是会的,然后大概给我说了下蘑菇街的培养方式,说我可以看看蘑菇街的APP,揣摩下怎么去实现等等。

  • 我觉得肯定挂了,可难受了,决定睡个午觉先,睡了很久还没有睡着,然后突然接到了下次面试的邀请(我以为我瞎了,今天的问题回答的简直糟糕,下拉刷新控件去年wq学长就被问了,我今年还是不会,这个面试邀请是走*运的感觉)

其实我以为三面还是技术面,原来是HR面

蘑菇街HR面(3月17日 牛客视频 30min)

  • 开头问了下项目,问了我为什么学习安卓开发等等,然后问了下学校的经历等等。后面开始问其他的,问我投递了其他企业没有(我因为感觉自己不太会撒谎,就实话实说了),接着问我腾讯和蘑菇街的面试官差别(感觉遇到这个问题,说的也有点紧张),然后问我爱好(我说了看书、看视频、逛B站???)

  • 我不想讲了,面完HR,感觉自己是个憨憨,目前充满了悔恨(反正到今天,流程没有挂我,但是也没有给结果)

蘑菇街一面是两点钟开始,面了大概四十分钟左右,结束以后看了下手机,腾讯PCG看点在我面试的时候发了短信,问我有没有空这两天面试,前几天本来简历变成了初试,后来又灰了,今天发现被捞了,有点高兴,但是大部分还是紧张,心里想着能不能往后推推,可是往后推怕没有机会了,就只能回了个短信“您好!我可以面试的!”,然后就约了今天晚上七点电话面试。

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

腾讯一面(3月12日 电话面试 70min)

  • 开头叫我做了自我介绍。
  • 然后面试官说先问些比较基础的问题吧,然后就问了 数据结构里面的栈和队列有什么区别(说了特点,和实现) 数组和链表的区别(内存结构) 读写这块链表和数组的区别 了解的排序算法有哪些(选泡插快归堆) 又问了时间复杂度 又问了这些排序算法当中效率比较高的是哪些 问我了解快速排序吗 回答完了后,emmm停顿了一会,面试官说ok~~然后开始问操作系统
  • 进程和线程的区别(我说的有点简单,面试官不太满意,追问我还有吗) 操作系统当中的死锁怎么发生的,什么是死锁? 怎么解决死锁 内存里的堆和栈有什么区别?
  • Java里的对象可以放在栈上吗 Java里面的字符串常量存放在哪里? 然后问方法区静态常量池会存在内存溢出的风险吗 然后问什么是内存溢出? 刚才提到的程序技术器是线程私有还是共享的?还有哪些是线程私有的,线程共享的? Java当中的内存回收怎么做的? 主流的JVM垃圾收集都是什么算法? 关于Java垃圾回收还了解哪些? 然后问我什么是新生代,什么是老年代? 为什么要分新生代老年代? Java当中什么是内存泄露? 内存泄露产生的原因? 然后问内部类一定会持有外部类的引用吗? 常见的解决内存泄露的方法?
  • Java当中的线程安全怎么理解? 怎么保证线程安全? Java里面的线程有哪几种状态?
  • 计算机网络的TCP和UDP有什么区别? 什么是拥塞控制和流量控制? 拥塞控制有哪些算法? 然后问流量控制。
  • 然后问我安卓这块对哪些知识比较熟悉(我说最近在学习Framework这块的内容) 让我讲下视图绘制的流程
  • 然后问我强项(我说并发这块) 然后问我线程池是什么原理? 并发数怎么设置比较合理? 如果无限制一直向线程池提交任务会怎样?
  • 问我有了解过一些开源组件吗?(我说用过一些开源框架,比如OkHttp、EventBus、Glide这些) 然后问我看过源码没有,有没有印象深刻的地方等等。
  • 问我安卓系统的源码看过哪块?
  • 项目当中遇到的难的问题?
  • 问安卓当中的性能优化,滑动列表非常卡会怎么优化?
  • 突然想起,前面中间好像问了下硬件加速(我本来说了解,后来发现自己好像不了解,又改口了)

最后提问的机会,问了下面试官对我有什么建议,面试官就是说安卓已经发展的很成熟了,说用的多不够,需要了解原理和设计的思想,尽量多实践,然后包括语言的一些原理和特性比如说垃圾收集内存管理等等。

前面一个多星期断断续续面试,感觉自己也没有怎么学习的样子,就感觉脑袋空空,其实对于即将的面试感觉情绪非常低迷。

腾讯二面(3月20日 视频面试 50min)

  • 鉴于状态显示我并不是和理解,虽然没有灰过,但是我不确定是不是PCG二面。

  • 就是从项目问起,但是面试官对我说的一些操作表示这很常规,我很尴尬,后面的话问我安卓方面的强项是什么,我也没敢回答,真的很丢人。我当时整个状态大概就是想着早点结束这个面试。我觉得这次面试的问题应该也没有什么参考的价值了,因为面试官可能也其实感受到了我的心态,所以后面问的问题,唉不知道怎么形容。因为网络原因有点卡顿,所以还是花了50min的时间。

上次面试以后状态也没灰,接着给我发了下一次的面试邀请,其实这个时候我对于面试的心态真的是很难受了。感觉自己心累(这种想法,至少从心态上讲,我是真的菜)

腾讯捞面(3月24日 视频面试 50min)

  • 今天开头记得问了下面试官那个事业群,原来我已经到ieg了,前面PCG面了两次已经挂了,我也不太懂,流程没有灰,面试官说前面流程已放弃,就被ieg捞了。

  • 开头的话问了下项目难点,说了下自定义View。

  • 问了布局优化,RelativeLayout和LinearLayout的效率差别以及为什么?

  • 然后问了下滑动冲突的解决思路?

  • 然后面试官问了下如果一个比较小的View包含一个比较大的View,并且触摸事件在View之外,怎么让事件传递到子View当中。

  • 内存泄露以及怎么解决,内存泄露一定导致内存溢出吗,内存溢出和内存溢出的具体场景

  • 软引用和弱引用的区别。

  • 面向对象思想

  • xml 和 json使用的共同缺点

  • 静态常量和静态变量分别是怎么加载的?

  • ArrayList和LinkedList区别,ArrayList怎么扩容,复制的话有更好的方法吗?

  • 线程池的原理,线程池的状态,线程池的使用有什么不好的地方?这部分面试官是想跟协程比较来着

  • 然后问我考研或者实习?

  • 这次灰的很干脆,半小时不到。(然鹅,过了两个小时,我又接到了第二天晚上的面试邀请)

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

此时我只能说,心情复杂,本来前面灰了,本来我已经做好了等等看正式批会不会捞我了的准备,想着这段时间不面试也好,再抓紧时间总结下知识和项目。居然这么快又被捞了,万一我又挂了,岂不是又浪费一个事业群。

到了第二天面试之前,我还跟一号说,自己想放弃这次面试了,说出这句话当然是被狠狠地批评了。

晚上八点前,开始等面试官上线,坐在电脑前,回顾我失败的面试生涯。

腾讯PCG一面 (3月25日 视频面试 50min)

  • 自我介绍以后,今天开始的话是问了下项目,我开始是介绍了下项目的应用场景,(面试官叫我不要紧张,然后为了缓解我的紧张,就先问了下我实验室的情况),

  • 问了下项目当中硬件部分怎么和服务端交互的。

  • 然后主要问了下内存泄露是什么,内存泄露怎么产生的,怎么解决内存泄露等等。 (鉴于之前每次开头,项目都讲的不好,这次稍微划了下重点。)

  • 然后问布局优化做了些什么工作,提了下扁平化布局、布局复用、动态加载view、防止重复绘制的一些内容,

  • 接着开始问我滑动冲突怎么解决的,说完以后我又补充了下滑动冲突解决以后的另外的一个问题和解决思路等等。

  • 然后面试官根据我回答的中的一些点问我,如果要自己实现一个onTouchEvent方法,怎么对手势进行判断,比如长按。我就从事件序列的分析开始说,后面说到通过发送延时消息,在延时消息触发之前的一些判断以及延时消息触发以后的操作等等。(期间面试官有进行引导)

  • 然后问我自定义view的话需要重写哪些方法,就说了下视图绘制的过程,测量布局绘制分别完成的任务。

  • 问了哪些因素会决定测量大小(面试官说有三个因素,但是有一个经常忽略),我说了下父View和子View等等,(面试官说,我觉得你可能是知道的,我说了一些思路后,他表示他想说的第三个因素其实是程序员的意愿)

  • 然后面试官表示这部分问到这,说要问点很基础的,然后问我学了什么数据结构(数组、链表、树、图),就问了下链表和数组相关的,问了下ArrayList和LinkedList相关,单链表时间复杂度1的情况删除某个节点等等。

  • 面试官好像对我的两个项目还蛮有兴趣的,问台灯有没有上线投入使用等等,也问了下另一个AndroidThings的部分在物联网方面是个什么情况(表示是做成了个类似手机的移动设备,还是有点让人失望),问我是不是大三等等。

  • 然后没有然后了,面试官问我有什么问题要问的?

  • 我就问了下为什么今天面试的时间这么短(技术相关问题<40min),面试官笑问,你是有什么擅长的没有表现吗。

  • 问了下建议,面试官说开头紧张,其他还可以(可能面试官说话比较照顾人吧)

  • 问了下阅读源码的经验方法,面试官大概是个实在人,说这个问题有点大不好回答,跟我说IDE要设置好点就OK。

  • 想起开头没有问面试官事业群赶紧问了下,PCG灯塔,就问了下这个组的一些内容。

上午十点多接了一个电话,标记广东广州的广告推销,接了以后我没说话,电话那端也没说话,二十秒以后对方挂掉了,心想真是一个不称职的广告推销电话。后面这个电话刚挂掉,又来了一个电话,广东广州座机,想想还是接了,接了以后过了几秒,喂,发现是腾讯的电话。(我真傻,真的)

腾讯PCG二面 (3月26日 电话面试 30min)

  • 开头问了下项目,分别说了两个项目的架构和应用场景。

  • 然后具体说了下两个项目的内容,面试官还想问我服务端怎么完成的,数据库用了什么。

  • 项目难点等等。

  • 问了为什么写这个项目等等。

  • 为了为什么学习安卓开发(说了下自己最开始的认识,和后面的想法,关于Java生态和安卓系统的一些简单想法)

  • 我有什么别人没有的特点(说了下上进心,耐力,在实验室的状态等等)

  • 其他编程语言开发方面(说了下C、C++、JS这些)

  • 又问了下数据库方面,安卓用什么数据库等等。

  • 问如果找实习希望什么方向(说短期安卓开发,因为现在是学这个的,然后也希望腾讯的产出中可以有自己参与的一份等等)

  • 后问问题的话就是问了下如果能进去的话要学习写什么东西(面试官说,这个啊,要学的东西多了等等,后面又说说了下灯塔这边的业务方面的内容,提了些性能、高并发、SDK开发等等,我觉得蛮期待的)。然后说会根据状态变化,大概两三天有人找等等。

然后3月28日,状态从复试变成了HR面试。

感觉这个月几乎就是在面试,大概是我自己太菜了,我一边很紧张,一边感觉根本没办法专心学习。自己心态也挺不好的,这段时间都没有胃口,每天几乎都没吃什么东西,情绪一直低迷,感觉看不到一点希望。而自从状态变成HR面以后,我开始吃嘛嘛香,感觉自己真是挺搞笑的。真的希望早点结束面试,开始学习新的东西,脑袋空空真的很没安全感。腾讯的流程目前也没走完,感觉还是很担心的。

许个愿吧,HR早点翻我牌子!早点结束流程,期待一个offer!

以上就是这位同学的自述。

现在外面面试问的的确比较多,要求也挺高的,行情不好,薪资也不好要,所以心态一定要放好,找好自己的定位,心态一定要好。

面试之后要尽量做到总结,在我最开始的时候,没什么准备就出去面试,被打击一通之后,总结了七八家面试题,会发现面试问到的都是那些知识点,可能角度不一样,但是你只要深度够,他怎么问,你基于原理来回答,基本上都没差,连续四家公司都走到了HR面,可以说面试的感觉上来了。前面的总结积累终究没有白费。

当我看到很多面试题,针对题来的时候,题会很多,而且有时候你会觉得你的题都会了,但是面试的时候还是面不好,说明你的知识并不扎实。或者你只是会了这个题,并没有融会贯通。所以不管怎样,刷题还是要坚持的,并且要系统的学习,很多同学的资料可能有几G甚至是几十G,但都杂乱无章。

互联网行业是一个知识迭代非常快的行业,如果你不养成学习的习惯,其他人不会停下来等你,这样的话你就等于一直在退步!

在这里我也分享一份我这些年收录整理的Android学习PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料

如果你有需要的话,可以私信我【资料】我发给你

喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

2020年面试官太狠!Android研发面试腾讯、蘑菇街,被虐的体无完肤

希望大家都能早日拿到心仪的offer!