Android 面经分享:我是如何一举拿下阿里、抖音,html5 图片左右移动
**逛帖子:**看一些牛课网帖子上别人的面试经验,这里我列举两个比较好的。?
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/onClickListenrhashmap 的原理?
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 面
一样的流程,各种谈,说面试官对我评价非常高,希望我能来之类的话,然后就算面试结束了。
6、小米
这是第二次面试消息,这次是小米的核心部门,MUI 部门,主要做阅读类 app,听说发展还是很不错的,为什么要面试两次小米呢,因为之前内推过小米,一周都没有消息,我就在网上投了简历,等面试了小米 TV,这边又叫我去面试。到了小米前台,前台没人,我问保安,保安让我打 HR 电话,结果 HR 也不接电话,就这样等了半个多小时,HR 终于回过来电话,打电话让面试官把我接上去了,一面面试官还以为我不来了。
一面
聊项目,GLSufaceView,OpengGL,Shader 相关一些知识,在项目中做的优化
gc 是根据什么来回收一个对象的,引用计数和 gc root 分别怎么实现。
怎样会产生内存泄露,举一个具体的例子,使用什么检查内存泄露
自定义 View 的绘制流程
给出二叉树和一个值,找出所有和为这个值的路径;{1,3}{3,6}{3,4}{6,8}区间去重,最少去掉几个集 合,可以让这个集合没有交集。
二面
什么是 ANR,Activity、BroadcastReceiver、Service 对 ANR 时间限制分别是多少,怎么处理 ANR,除了系统生成 trace.txt 文件,怎么在程序中检测 ANR。写出伪代码。
编解码一些知识,I 帧,B 帧,P 帧区别。
Android 一些优化方案。
算法 n/m,怎么判断得数是无限循环小数。
评论