一、前言
本人面试已经很久之前了,分享一下我做美团面试官的经历吧。
美团上海面试,2-1及以下美团是不社招的,校招和2-2~2-3社招一般是三面,格外优秀3-1及以上会加签面试。初面技术基础,二面业务感知和技术项目,技术设计等。三面 HR面。
初面一定要准备相对较多的基础知识,简历上的东西一定是熟悉的,自己的知识也不能落伍。会有一些简单的算法题。二面主要是项目设计,项目设计的背景,目标,执行中的问题,最后的结果都要非常清楚。三面 HR 面试还是比较大陆货,主要打探职级,绩效评价一个人的工作努力程度,岗位适配程度等。
二、面试题我们一般这样问
接下来我就详细说一下,面试官面试时最喜欢问的一些问题,分为Android知识点,数据结构与算法,java基础,项目相关。以及面试时大家需要注意的一些东西!
Android知识点
Android知识点,这块自然不用多说,肯定是面试的重灾区。去大公司面试都都喜欢问你源码、内部实现,这样的问题。所以,handler,asynctask这样常用的API内部原理必须会,面试官还经常问你看过哪些开源框架的源码,所以你得熟悉几个开源框架的内部实现,比如volley、retrofit、OkHttp、butterknife、glide。Android还是要做多项目积累经验。
由于文章篇幅问题复制链接查看详细文章以及获取学习笔记可以查看我的【Github】里可以查看
数据结构与算法
数据结构与算法这部分是我的弱项,多扯两句,这部分是去大公司面试的必问问题,博主去美团、百度面试都让算法给刷掉了,所以这块很重要,要想进大公司算法是绕不过去的,虽然Android一般用不到太多、太复杂的算法。我在面试题中,关于算法这块我也写了几个,比如排序,二分查找,面试小公司,可能会让你写个什么冒泡排序,快排,二分查找,但是进大公司面试,面试官根本不问这些最普通的面试问题,他们都会自己给你出一个题,让你写出最优算法,平时多看看《剑指offer》、刷LeetCode。
算法也是我的弱项,我就不在这里侃了。数据结构,也是很重要的!常用的数据结构(ArrayList、LinkedList、HashMap)内部实现都得知道,能跟面试官侃侃而谈,还有延伸的一些数据结构你也得有所了解,比如问到HashMap都知道他不是线程安全的,那线程安全的ConcurrentHashMap,你知道内部的机制,他是怎么来保证线程安全的前提下,最大的提高读写效率的呢?还有Android特有的数据结构SparseArray等一些原理。了解数据结构内部实现其实挺好的,对编码有帮助,为了帮助大家减少面试时收集资料的时间,我已经整理好了,需要的小伙伴自取!
<算法刷题LeetCode>
<剑指offer>
关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,有关知识(HTTP、自定义view、c++、MVP、性能优化、NDK、小程序)有关知识《Android源码设计模式》、《Android开发艺术探索》、《Java并发编程的艺术》、《Android基于Glide的二次封装》、《Android内存优化——常见内存泄露及优化方案》、《Java编程思想 (第4版)》等高级技术都囊括其中。
电子版收录在了我的群文件夹里,【点击】自行领取!
java基础
java基础这部分很重要,这个看你基本功,去大公司面试比较注重基础,所以这部分会问的比较多,jvm问的挺多,线程池这块也是重点,还有,大公司面试还会问你并发这块的知识点,比如锁机制,一些volatile、synchronized关键字用来做什么的,内部实现原理等问题,这本字节跳动内部都在看的《JAVA核心技术》可以帮你解决以上问题,面试前一点要多刷几遍!
项目相关
项目相关的问题,这部分基本都是在二面、三面上吧,这块你就跟面试官聊聊你做的项目,用到了什么技术,怎么来解决问题啥的,这个针对自己项目来说就行,就不多说了。
《Android经典项目案例开发实战宝典》
三、面试我们一般这样问
如何才能通过一线互联网公司面试?相信这是很多人的疑惑,希望看完本篇文章能给大家一些启发。
我是 Github 上 AndroidInterview-Q-A 项目的作者,想当年我也是面试了很多家公司,发现一线公司各家面试题相似程度很高,后来我就白天面试完,晚上回来就靠回忆把各个问题写下来,不明白的就在网上找比较好的答案记录下来。
(一)Android基础知识点
-
四大组件是什么
-
四大组件的生命周期和简单用法
-
Activity之间的通信方式
-
Activity各种情况下的生命周期
-
横竖屏切换的时候,Activity 各种情况下的生命周期
-
Activity与Fragment之间生命周期比较
-
Activity上有Dialog的时候按Home键时的生命周期
-
两个Activity 之间跳转时必然会执行的是哪几个方法?
-
前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
-
Activity的四种启动模式对比
-
Activity状态保存于恢复
-
fragment各种情况下的生命周期
-
Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
-
如何实现Fragment的滑动?
-
fragment之间传递数据的方式?
(二)Android源码相关分析 -
Android动画框架实现原理
-
Android各个版本API的区别
-
Requestlayout,onlayout,onDraw,DrawChild区别与联系
-
invalidate和postInvalidate的区别及使用
-
Activity-Window-View三者的差别
-
谈谈对Volley的理解
-
如何优化自定义View
-
低版本SDK如何实现高版本api?
-
描述一次网络请求的流程
-
HttpUrlConnection 和 okhttp关系
-
Bitmap对象的理解
-
looper架构
-
ActivityThread,AMS,WMS的工作原理
-
自定义View如何考虑机型适配
-
自定义View的事件
(三)常见的一些原理性问题
-
Handler机制和底层实现
-
Handler、Thread和HandlerThread的差别
-
handler发消息给子线程,looper怎么启动?
-
关于Handler,在任何地方new Handler 都是什么线程下?
-
ThreadLocal原理,实现及如何保证Local属性?
-
请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系
-
请描述一下View事件传递分发机制
-
Touch事件传递流程
-
事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?
-
View和ViewGroup分别有哪些事件分发相关的回调方法
-
View刷新机制
-
View绘制流程
-
自定义控件原理
-
自定义View如何提供获取View属性的接口?
-
Android代码中实现WAP方式联网
-
AsyncTask机制
-
AsyncTask原理及不足
-
如何取消AsyncTask?
-
为什么不能在子线程更新UI?
-
ANR产生的原因是什么?
-
ANR定位和修正
-
oom是什么?
二、Java面试题
三、高级开发技术面试题
四、插件化、模块化、组件化、热修复、增量更新、Gradle
五、架构设计和设计模式
六、性能优化
七、Android Framework
八、Android优秀三方库源码
九、HR面试
由于文章篇幅问题复制链接查看详细文章以及获取学习笔记可以查看我的【Github】里可以查看
经验分享
四、尾声
我也算是一线公司都踩过点的码农了,Facebook也踩过一次,现在就说说我自己的一些感受。
在乐视的时候我作为面试官接触过几十个面试者,能左右我是不是通过这个人的,主要因素还是这个人对技术的热爱程度。因为有这种极客精神,做任何技术上的事情都是时间上的问题,所以面试过程中要尽可能表现出对技术的热爱。
那除了这种因素外,我们怎么做才能更大概率的进入一线公司呢?
还有一个比较重要的因素就是知识的深度。我认为深度优于广度,广度通过看各种文章都能了解,但一旦碰到实际问题,这时候往往靠的是自己的知识深度。
比如,Java程序猿都知道Java是跨平台的,因为会编译成和平台无关的字节码,但是有多少人会知道是怎么编译的?如果不知道虚拟机运行原理,就不可能做出手淘的Atlas容器框架。再比如,很多人知道四大组件职责都是什么,还会些性能优化,但是如果不知道Framework层系统服务原理,就做不出插件化框架。
因为一线公司业务的复杂度也决定了业务的深度,如果没有较好的深度探究能力,是很难胜任的,所以知识的深度也很重要。
极客精神加上某一领域知识的深度能力,就可以达到一线公司标准了。面试中非理性因素也有较大比重,但是这种东西是我们没办法掌控的,如果因为这种因素失败了,也没必要气馁。我认为能力是和回报成正比的,就算此刻没发生,下一刻也会出现,只要掌握了我们该掌握的能力,总有一天会进入我们理想的公司。
网友评论