Android面经分享:我是如何一举拿下阿里、抖音、美团、小米offer成为面霸的

我面试的公司很多,大部分都能得到令人满意的结果,我将自己觉得有意义的一些体会记录下来了,毕竟,面了这么多公司,如果不留下点什么,那岂不是太浪费了?这对我自己来说也是一次自我检查,在每次的面试中总结经验,认清自己,同时也希望这些经验对即将换工作或者打算看看其他机会的你有一些帮助。

以下的部分有具体的面试经历,也有自己总结的一些面试必备技能和一些自己的人生思考。

##正文

###一、离职原因:为什么选择离开华为?

主要原因是:我的职业规划与华为给我的规划不相符,还有就是流程化的东西太繁琐,自己有一些不适应,所以选择了离开华为。

不过还是非常感谢我的直接领导高总和带我的师傅邦邦。在华为的这一年中给予了我非常多的帮助,在我跟领导沟通离开的想法时,领导开诚布公的跟我聊了很多。

不过,我最后还是下定决心要离开华为,领导建议我先去面试一些公司,等找到合适的再走,裸辞的话社保和心态上都会有一些问题。这样的领导真是没话说,在华为,很多领导都是不放人的,很多都把员工的下一家拖黄了才放人。

简单说说我在华为这一年获得的成绩:

  • 北京研究所第一届Hackathon

  • 二等奖转正绩效是A

  • 年终绩效 B+,获得明日之星

###二、准备

其实我很早就开始准备了,准确来说也不算准备,只是一直在总结Android相关方面的知识,因为在华为虽然工作有时候比较多,但是还是有大把时间可以学习一些感兴趣的东西。

下面是我那段时间里有计划的复习和总结的一些知识。

  • 看书:《Android开发艺术探索》(这本书真心不错,我反复读了4、5遍)、《Android群英传》(比较接近开发使用,因为做过一些应用开发,读起来还是比较简单的,读了2遍)、《深入理解Java虚拟机》(也是一部不错的作品,读了2遍,理解的不是很透彻)、《剑指offer》(感觉面试中碰到的算法,80%都能找到相应的题目,保证所有的题都可以手写出来就行)。4个月精读了以上书籍,还有其他的都是简单了解,这里就不列举了,读完这些书,应该可以让你上一个层次吧(妈妈再也不用担心我面试啦…)。

  • **刷题:**主要是LeetCode(大概刷了300道题左右,每天3-6道,坚持下来,需要多复习,因为很多题过一段时间就会忘记)。

  • **逛帖子:**看一些牛课网帖子上别人的面试经验,这里我列举两个比较好的。

  • Android客户端面试题集锦

  • Android阿里面试题锦集

###三、投简历

一份好的简历是非常有必要的,需要突出你的重点和闪光点,具体怎么写简历可以参考一些微信公众号的模板。

有了一份好简历,接下来就是投递简历,一般是:+BOSS直聘+内推,从我这次面试机会来看,三者比例是2:2:1,也可能我工作经验还不到一年,内推滴滴、阿里和腾讯直接就把我的简历刷掉了,但是内推也是具体到某个部门,如果被刷掉也不要灰心,现在大公司基本上各个部门都有自己的hr,可以在拉头和BOSS上多投递一些,万一其他部门看中你呢?

###四、面试经历

这里我仅仅记录一部分被问过的题目(不然文章太长了),答案我就不全部写出来了(太长)。面试具体过程以及遇到的详细知识点可以到我的GitHub里面找。

1、网易

一面

两个面试官(一个我们小组Android的leader,一个是同事)。

上来先当着他们的面写了一个笔试题,都是很基础的题没啥难度,算法题也就是一个list的反转,但是小米比较注重手写代码的一些细节,所以要考虑好该判空的判空,还有防止越界啥的问题。

后面就开始提问,90%都在问Java基础。

大致内容:GC的机制,GC算法,内存相关的问的比较多,多线程线程安全问题是如何发生的,HashMap的原理。

二面

主管,全程聊项目,没有问技术相关的了,然后介绍了一下这个部门的工作内容啊之类的。

三面

部门领导了解情况。

**感想:**毕竟1年左右没有面试了,这第一场面试还是给我了很大的自信,也知道现在自己大概能要多少工资是合适的。建议同学们准备跳槽的时候,最好先面几家小公司,以便大致了解一下市场行情。

2、快手

到快手公司的前台后,负责接待的人员把我领进了一个小屋里,等待面试的开始。

一面

面试官是一个很fashion的人,是从小米核心部门过来的(缘分妙不可言),是Android小组的领导。

  • 问了关于数据库的一些问题,没办法,我在华为唯一一个做的和java相关的项目,但是不太擅长数据库。

  • 描述一下Handler,我把源码里能说的基本都说了一遍。

  • 一个线程可否有多个Handler,怎么保证只有一个Looper

由此问题衍生出Threadlocal,面试官问 Threadlocal如何保证只有一个对象,这里我答的不是很好,Threadlocal其实在Android的looper里是判断了只有一个的逻辑,但真正的使用并不是这个特性

应该是一个 Threadlocal 对象在 ThreadlocalMap里对应一个值

  • fragment生命周期,activity生命周期
二面
  • 问了项目相关的问题,这部分根据自己的项目经验,由于大家的经验都不同,这里我就不详细说了。

  • 设定一个场景,怎么去实现相应的功能,因为快手这个部门想做社交,因此这里是问我是如何实现微信的联系人页面(包括与服务端有什么样的交互)

  • 最后也是一个算法,写出所有数组的子序列

二面面试官是这个组的leader,跟我讲了现在这个组的发展情况和快手现在的情况,由于快手成长很快,所以不能仅仅依靠一个APP,还需要在其他方面进行一些尝试,而这个组的任务就是在一些方面做一些尝试,大概就是这个样子。

二面也顺利通过,接下来就是HR面了,这时候正好是12点,他们要去吃饭,不过快手是提供午餐和晚餐的,第一个面试官带给我一份饭,还不错,后来HR跟我说,现在只是过渡时期,后面午餐和晚餐会改成自助餐的形式。

三面

HR上来很亲切,问了我一些面试的情况,难不难之类的,然后又聊了聊我大学和研究生情况,我只想说我“too simple , too naive “,大概了解我后,只跟我聊我的不足,以此来压低我期望的薪水。说了一下薪资期望,加了微信,让我回去等待,说发offer大概是2周时间,因为需要走各种审批流程,让我不要着急。

快手是一个不错的公司,技术到现在也算有一定的积累,希望能够发展更好吧。

3、美团
一面

简历上写的项目问了一遍,然后开始问知识点。

  • volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,Last-Modify的作用等。

  • fragment的生命周期

  • service一些知识

  • 事件分发机制

  • Binder实现机制,Stub类中asInterface函数作用,BnBinder和BpBinder区别。

  • gradle中buildToolsVersion和TargetSdkVersion的区别是什么

  • 手机适配一些方案

  • hashmap的实现原理

  • 静态方法是否能被重写

这些大概聊了1个半小时,开始的时候还有些紧张,慢慢聊开了,就好多了,面试官的语速有点快,老是需要面试官重复一遍,我也不经意间语速也变快了,不过能看出来面试官还是很厉害的。

二面
  • 3次握手和4次挥手的原因,以及为什么需要这样做。

  • 数据结构,搜索二叉树的一些特性,平衡二叉树。

  • hashmap是如何解决hash冲突的

  • 进程与线程区别

  • 写了一个二分查找和单例模式

  • http中的同步和异步

  • 聊了一些项目上做的东西,问了问职业规划

由于二面面试官不是做Android,本来面试我的人临时开会去了,所以这一轮面试没怎么问android相关知识,不过二面面试官一直是微笑,所以这一轮很轻松,更像是一起讨论问题。 
面试完已经是下午4:30了,由于面试当天是星期五,而周五美团的会议比较多,所以等了会,二面面试官说三面面试官在开会,面试另约时间,我还是说这次一次面试完吧,这一等就等了2个半小时,期间hr跟我说三面面试官是个大牛。

三面
  • 我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题。

  • Android是如何进行资源管理的。

  • java比较重要的几个特性

  • 网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。

  • 为什么离开原来公司,以及职业规划,然后因为面试完大概就晚上8点了,就先让我回去,下周让hr跟我联系,我想这是应该通过面试了吧。

美团技术还是很厉害的,从面试官的水平就可以看出来,尤其是外卖核心部门,办公环境是不错,但是感觉就是有点乱,不知道是不是因为今天面试的人很多,基本上一直有很多人来回走动,有一些嘈杂。

4、阿里
一面

可能是因为一面是我的学长,所以没有问我很多技术的问题,聊了聊我做的向项目,然后聊了一会jetpack相关知识,感觉非常轻松,还想着如果面试都这么轻松就好了,然后就直接下一面了。

二面

二面面试官看上去很斯文,但是还是一个对技术精益求精的人,问的问题都很细,具体问题的顺序挤不太清楚了,大概问了下面几个问题。

为什么工作一年就想换工作?

onTouchEvent/onTouchListenr.onTcouchEvent/onClickListenr
hashmap的原理?

java的hashcode和equals的区别

java的gc了解多少?

kt的伴生对象是饿汉模式还是懒汉模式?

handler.postDelayed的原理

ANR怎么产生?怎么捕捉?

智力题:桌子上有101块饼***拿先手,他拿后手,你需要怎么赢

tcp 三次握手/四次挥手

为什么要三次握手,四次挥手?

内存泄漏是什么?怎么找?

算法题:斐波拉契数列,递归的方式怎么优化?

三面

leader是一个很有亲和力的人,上来就跟我说前面技术已经问的差不多了,这里就不询问我详细的技术了,就出了一道算法题,需要说出时间和空间复杂度,以及有没有更优解。

  • 字符串反转,讨论复杂度。

  • 聊经历和项目

HR面

HR面问问题都是一个模板刻出来,都是例行公事的询问,bulabula……然后就算完成面试。

阿里工作环境还是不错的,整体的发展也可以,毕竟也是大厂,值得选择。

5、网易

这是网易另外一个岗位。感觉还是不错的,来的稍微有点早,在前台等了20分钟左右的样子,面试官就带我去面试了。

笔试

具体的内容记不太清楚了,大概有以下几个类型,都还是比较基本的。 
选择题、程序输出题、四道算法、简答

  • 给定一个int型 n,输出1~n的字符串例如 n = 4 输出“1 2 3 4”

  • 输出所有的笛卡尔积组合

  • 单例模式

  • 最长上升子序列

都不是很难,基本上都能作出来。

一面

一面面试官是资深的Android开发工程师,的确水平很高。所有的问题问的都很详细,很多细节,面试官都能清晰的说出来,的确水平很高。 
属于循序渐进的问题方式,从简单的知识入手,逐渐深入,直到你回答不出来而且问的都是你自认为很擅长的知识点,可见面试官的功力有多深厚,深深的佩服。 
我下面大概说一些问题,但是到最后总能问到很深入的地方。

  • 对刚才做的题,一些错的地方做了讨论,主要是类的加载和内部类方面的知识,尤其一些深入到JVM层的知识的确自己有一些不足,不过大部分都还是能答出来。

  • 双亲委托机制,类的五个加载过程。

  • java类加载器的加载流程。

  • Binder机制,从java到framework再到kenral层,面试官问的都很详细,遇到不会的也都会跟我解释。

  • Serializable和Parcelable的区别。

  • View的绘制流程,详细到framework代码,讨论到不确定的地方,立马打开电脑和我一起看源码。

  • 事件分发机制。

  • 常用设计模式,使用静态内部类实现单例的原理是什么。

  • 线程同步,CopyOnWriteArrayList怎样实现。

  • Volley源码,EventBus源码。

面试完后就到12点了,讨论了1个半小时,跟我说我这关过了基本上就没问题了,面试官还是一个很幽默的人,带我去网易食堂吃了顿饭,的确这里的饭特别好吃,回来后,休息了一会,就开始Leader面了

二面

Leader面,我还以为至少要3轮技术面呢,没想到直接就到leader面试了,后来才知道第一轮面试的结果还是很重要的,一面面试官是非常资深的工程师,只要通过一面了基本就没问题了。

  • 项目介绍,聊一些项目上的问题

  • 下拉listview的实现,需要注意的地方和优化的地方(不是lsitview的优化,是下拉的优化)。

  • Android上一些优化方案

  • 介绍了一下现在做的项目,大体说明了现在所用到的技术。

总体感觉网易的氛围还是非常好的,技术实力非常雄厚,leader技术能力也很强,并且一面面试官告诉我,leader有时候还会自己写一些代码,一般到了leader很少有写代码的了。

hr面

尾声

如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

大厂面试真题

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

《2019-2021字节跳动Android面试历年真题解析》

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-2021字节跳动Android面试历年真题解析》**

[外链图片转存中…(img-9ziMQGaJ-1714465195846)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值