Android凉了也要看的面试题,2020年5月美团Androi
前言
我隔一段时间都会出去面试一次,面试的目的不是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?同样,面试你的也是同行,这样也能够碰撞出不同的思想。当然,遇到好的机会那是再好不过了。试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。如果您同意这样的观点,不妨接着往下看,让我们一起研究面试过程中需要具备的知识。下面是我亲生经历的一次面试,这里写出来给大家分享,更多的是总结面试中遇到的问题以及以后学习过程中的方向。只有这样才能和社会接上轨迹。
我面试的是美团,这家公司还算不错的,至少在我印象中还是挺好。技术面试一共是三面+HR。下面做一个总结
第一面
一面面试官的思维非常跳跃,经常我说到一半的问题,突然询问其他相关问题,然后回答完再继续之前的说下去,有些许不适应这个节奏。顺序可能不太对。
1.类的加载过程,Person person = new Person();为例进行说明。
2.JVM相关知识,GC机制。
3.类的加载器,双亲机制,Android的类加载器。
4.Android中进程的级别,以及各自的区别。
5.插件化原理。
6.集合框架,list,map,set都有哪些具体的实现类,区别都是什么。
7.concurrentHashmap原理,原子类。
8.volatile原理。
9.Binder机制。
10.View的绘制流程,事件传递机制,Handler异步消息机制。
11.Interger中的128(-128~127),这里考的是常量池的概念,这个没回答上来。
12.线程池的相关知识。
13.Handler机制,HandlerThread实现等等。
14.LRUCache算法是怎样实现的。
就这样第一面基本结束。一共问了14个问题,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有1年经验的都基本能说出个一二三。
第二面
面试官可能没注意我是海外党有时差,凌晨四点来了通电话约时间,还好顺利的约到第二天上午~
二面面试官感觉专业了很多,问问题也比较灵活。有时候会有点像在怼的打断然后追问,但是有答得不好的地方也会很耐心的引导
1.写个快速排序
2.生产者消费者伪代码(因为和面试官思路不同加上紧张,代码反反复复改了很久,面试官也一直在写代码引导我)
3.顺带讲了一下wait() await()这一系列方法
4.如何用数组实现队列(直接说抽象的环,但面试官一直在引导细节如何更优化,比如怎么判断队满,决定插入位置怎么省去if…感觉面试官真的很耐心)
5.如何用数组实现栈
6.弱引用,有什么用?有没有用过?
7.如果写一个库中存在的类,包也一样,会怎么样?
8.提到类加载要确保类的唯一性,怎么确保?
9.三次握手,为什么要三次
10.TCP怎么保证可靠
11.如果包乱序到达会发生什么
12.进程和线程的区别
13.追问进程之间为什么会相对比较独立?电脑上看起来运行着很多进程,是怎么隔离的?
14.如果一个进程需要一直读写内存,会影响其他进程吗?(这里我开始结结巴巴瞎说了…面试官安慰了一下)
15.知道几种单例模式的写法?有什么优缺点
16.Hashmap原理
17.扩容具体是怎么做的?原本的元素要怎么放进新数组?
第三面
1. 自我介绍
2. 项目(项目怼了挺久的,一直深挖。建议大家要非常熟悉简历上的项目,一些细节也要注意到,这个环节差点被怼哭🤣)
3. 有没有了解过插件化?插件化和组件化什么区别?
4. Applicatipn Context在什么情况下不能使用。(面试官提示dialog了我还不会,这个需要重点注意一下)
5. 加载一张特别大的图片,该如何操作?(一面面试官也问了这个问题!回答的特别流畅哈哈哈)
6. 一定要在主线程中更新UI吗?能不能在子线程更新?(这个我有一点印象,最后是面试官疯狂提示才想出来的
surfaceView)
7. LRU的底层数据结构?双向链表如何提高查询效率?
8. kotlin是如何兼容Java的(这个我真不会,没想到连这都问)
9. 你觉得你最大的优势是什么?(balabala讲了一堆,主要讲自己的学习能力强,团队合作能力强)
10. 反问环节
三面总结: 三面主要是围绕项目,然后面试官问的特别特别深。相比之下,二面比较注重广度,考察你对整个安卓体系的知识。三面比较注重深度,考察你对安卓底层源码以及框架源码有没有深入的研究。
hr面
1. 自我介绍
2. 实习在做什么项目?有没有遇到什么困难,如何解决?
3. 除了实习,有没有其他安卓项目,如何分工。和组员有矛盾如何解决?
4. 你觉得你应聘这个岗位最大的优势是什么?
5. 反问环节
hr面总结:其实hr面大家基本上如实回答就可以了,hr只是想要通过聊天对你有一个基本的了解,不要回答的太偏激太离谱就行。最终刷人也是综合一二三面的成绩排序。
总结
这次面试感觉还不错,美团的开发同学待人方面很随和。很喜欢这种氛围。结果不重要,重要的是过程。只要你有实力,就别担心。如果不好好学习,就算背了面试题,又能如何?一样会在面试中PASS。所以说,平时写代码的时候需要多多思考,不一定用到才去Google,对于一些新的技术,要不断追求同时别忘记了基础很重要,基础,基础,基础,重要的事说3遍。
在接下来的学习和工作中,需要学习继续探索以下问题。
1 Java基础知识。线程,java虚拟机,内存模型等。
2 Android基础知识。官方API,常用控件源码,自定义控件,动画,性能分析等。
3 app层面:第三方开源框架(okHttp,Retrofit,ButterKnife),热修复技术(Andfix,Robust,Tinker等),崩溃处理,日志处理,内存溢出内存泄漏定位等。
4 网络基础:TCP/IP,Http/Https,UDP,七层网络协议等等。
5 沟通能力和相处能力,这是软实力。非常关键,如果你技术很好,但是相处起来很困难,我想面试官也不太愿意招你。
以上内容我都做了一个总结,并且整理在了我的【Github】里面,由于文章篇幅问题复制链接查看详细文章以及获取学习笔记链接:https://shimo.im/docs/QVGDhCjVKvQ6r6TJ
- Android初学者——Android高级工程师学习书籍
- Android大厂面试真题+解析集合
-
Android高级工程师进阶系统学习资料包
-
kotlin学习系列(面试题+学习笔记+学习视频+项目实战)