三月份的重点就是忙活在找实习上面了,我大概从3月3日开始进行面试的准备和简历的投递,事件时间如下:
事件 | 日期 |
---|---|
美团笔试 | 3月12日 |
美团一面 | 3月17日 |
美团二面 | 3月21日 |
阿里笔试 | 3月23日 |
小米一面 | 3月25日 |
字节跳动 一二面 | 3月25日 |
腾讯一面 | 3月26日 |
腾讯二面 | 3月26日 |
美团offer call | 3月27日 |
字节跳动 三面 | 3月29日 |
腾讯 hr面 | 3月30日 |
字节跳动 hr面 | 3月30日 |
截止到3月30日时,已经收到了美团的offer call,腾讯和头条都进入了hr面试阶段,所以后面的面试邀请就都婉拒了。下面来根据记忆和面试时寥寥的记录来写一下在我面试中遇到的一些问题。
一、美团
-
一面(电话面)
-
数据竞争
-
java 垃圾回收机制
-
tcp 和 udp的区别
-
tcp 是怎么保障可靠性的。
-
activity 声命周期
-
Android 事件分发机制
-
Java 内存泄露与 Android 中的场景
-
Java 内存区域, 堆和栈的区别
-
虚拟内存的好处
-
线程安全
-
线程的状态
-
关于我的一些项目经历
-
-
二面(视频面)
-
Activity 的生命周期函数在 Android 中体现了哪种设计模式?如何实现一个模板模式
-
使用 Intent 传值有哪几种方式,需要注意什么
-
Parcelable 接口和 Serializable 接口的区别
-
Activity 的启动过程
-
Binder 消息机制
-
LiveData 原理
-
Android 中哪里用到了观察者模式
-
如何防止Android中观察者模式中的内存泄露?有没有遇到过OOM?如何使用Java的机制解决一些大变量的内存存储问题?是否了解过引用队列?
-
如果一个xml文件,有一个TextView,如何写可以让布局最简单(考虑merge标签)
-
编程题:实现一个函数,获取以参数 v 为根的最大深度。
int getDepth(View v) View::getParent() ViewGroup::getChildCount() ViewGroup::getChildAt(int index)
-
- 口述思路:海量的高考成绩存储于硬盘中,想找出排名前 k 名。
美团隔得时间有点久了,记得不算太清晰了,问的应该不止这些,还有美团的面试官们都非常和善,会很耐心的引导你答道点上,印象我在被二面面试官时一个问题思路拐不过弯了,面试官至少引导了我三次,真很棒的面试体验。
二、小米
-
小米一面
-
上来先写代码 o(╥﹏╥)o,有一点点狠
翻转链表
-
项目中的核心库是如何封装的,Retrofit、LiveData、RecyclerView
-
OKHttp用过没?我想自定义一些header应该怎么办,如何去自定义一种超时重传机制?
-
RxJava 用了哪些操作符?有没有用过 flatmap?
-
MVC 和 MVP 的区别?为什么要用这样的架构?
-
Thread.sleep() 和 object.wait() 的区别?在锁上有区别吗
-
synchronized 关键字是干什么用的?类锁和对象锁的区别?synchronized 和 Lock 的比较?
-
ThreadLocal 是干什么用的,内部原理
-
并发容器和同步容器用过哪些?区别?
-
Java 四种引用,内存区域划分。java的本地方法栈是干什么的?
-
LinkedHashMap 和 HashMap 的关系和区别?怎么快速实现LinkedHashMap?了解LRU Cache吗?
-
Java 反射机制,怎么调用 private 方法?底层怎么实现的调用private方法?
-
Activity 生命周期。onPause() 和 onStop() 区别。Activity 四种启动模式。
-
Activity 的启动流程
-
Binder 如何进行进程间通信
-
Handler 线程间通信,Handler 中的 postDelay() 方法是怎么实现的?
-
HandlerThread 原理?IntentService 原理?
-
用过 SharedPreference 吗?apply 和 commit 的区别?
-
requestLayout 和 invalidate 的区别?
-
Android 事件分发机制,onTouch 和 onClick 之间的关系
-
怎么学习安卓的
-
小米问的东西感觉真的很多很全,感觉一面的基础覆盖面是最广的了。等了一段时间的二面,结果3月30号通知我31号二面。这时候我已经有意向的offer了,就婉拒了。
三、腾讯
-
腾讯一面(视频面试)
-
多线程测试经历,介绍一下你的工作。
-
线程安全的测试
-
Kotlin 的使用,介绍一下协程 coroutines
-
有没有了解过安卓的一些测试工具
-
编程:
小Q定义了一种数列称为翻转数列: 给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。 例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8. 而n = 4, m = 1, 数列就是: -1, +2, -3, + 4. 小Q现在希望你能帮他算算前n项和为多少。
-
-
腾讯二面(电话面试)
-
介绍你的项目经历
-
算法1:
两个单链表有交点,给定两个链表的头部,如何找到交点
-
算法2:
有一个大小为 n-1 的数组,元素不重复,存放了 1-n 中的数字,由于大小只有n-1,所以有一个数字缺失了,快速找出数组中的缺失的数字。
-
腾讯这边的面试出奇的顺利,两次时间不长的技术面完了就hr面了。
四、字节跳动
-
字节一二面(其实大部分是一面的问题)
- MVP 和 MVC的区别,MVP、MVVM 在项目中的应用。
- LiveData 原理。
- 内存泄露的场景以及解决方式。
- 说一下 Retrofit 的原理,好处。
- RxJava 了解多少? 背压策略?
- Kotlin 和 Java 相比,了解过哪些语法糖,有没有了解过 SAM?object关键字
- Activity 启动模式
- Service 的应用?有没有了解过IntentService、
- Handler,sendMessage 和 post/postDelay 方法,MessageQueue 实现
- 如何自定义 View / ViewGroup
- 事件分发机制。
- RelativeLayout 、ConstraintLayout 的使用。
- View 树过深带来的影响,过度绘制。
- Java中四种引用。
- volatile,内存模型
- synchronized 和 Lock 的区别。
- java 反射机制,如何防止反射攻击单例
- 算法题:给定除数和被除数,输出除法运算后的结果,若有循环小数,则使用括号括起来,例如1/3 = 0.(6)
- 实现一个生产者-消费者模型
- 算法题:给定一个包含[] () 和{} 的字符串,看看是否符合嵌套要求:({[]}) √ {] X
-
字节三面
聊了聊天,写了两道题
- 项目的伪码实现,引申到了Seamaphore、线程池。
- 二叉排序树的第 k 小的节点。
写在最后
我觉得在面试的过程中算是运气不错的一个人,面试官都非常的友善,问到的问题也基本上命中了我的准备范围,所以最终顺利的进入了腾讯、字节和美团的hr面(截至3月30日)。也是非常感谢这些给予我认可的面试官们。
至于如何准备,我是从3月初开始准备的实习,参考的复习资料就是网上的一些Android面经,前前后后大概一个月。虽然我只是针对面试准备了一个月,但是在前期的相关项目经历和学校的学习为我打下了坚实的基础,所以这一个月时间主要是学到了少部分的新知识,更多的是对于面经有了一定的自己的理解,可以用自己的话来讲出面经。所以我建议自认为基础不是那么扎实和缺乏一定项目经验的人要提前准备。
致谢
非常感谢这些面经的作者,这些面经系统的梳理了Android 开发相关和技术面试中基础的知识点,为我提供了很好的参考~
厘米姑娘的Android 面经。
https://github.com/CyC2018/CS-Notes?tdsourcetag=s_pctim_aiomsg
https://lrh1993.gitbooks.io/android_interview_guide/content/
网友评论