菜是原罪。
前情提要
半个月之前突然有个同学跟我说,有个学长在腾讯北京那边,最近在招 Android 岗的实习生,问我有没有想法。最开始是不太敢答应的,毕竟 Android 开发我也就半吊子调库侠。但后来想了想 DDL 才是第一生产力,总得有个事情逼着自己去系统学习,就把简历投过去了。
提交简历三天之后收到了面试通知,约到了四天之后。说实话很紧张,所以也就只能是看个大概。重在参与了。
提问
- 在浏览器中访问一个页面,中间会用到哪些协议?
- 简单介绍一下 TCP
- 分为几层?
- 为什么需要三次握手和四次挥手?
- TCP 和 UDP 的区别?
- TCP 通过哪些机制来保证数据包一定会送达?
- 多线程
- 介绍一下
synchronize
和violate
关键字的区别 violate
和指令重排- 双重校验锁的单例模式为什么需要两次判空?
- 多线程中为什么需要锁机制?
- 开发中有没有遇到过 XXX(没记住)
- 线程池的意义
- 开发中有用过 RecycleView 吗?简单介绍一下。
- RecycleView 的优点有?
DiffUtil
用到的差异比较算法能说说吗?- - 如果让你来实现一个
DiffUtil
,你会怎么做?
Bitmap
有在开发过程中使用过吗?- 如何计算一张图片在内存中的大小?
- OOM 和内存泄露的区别?
- 有没有什么工具可以检测内存泄漏?
- LeakCanary 的原理有了解过吗?
- (没记住)
- 谈谈你对协程的理解?
- 在开发中使用协程的实例?好处?
- XXX(没记住,可能是协程相关的东西)的源代码有看过吗?
- 取消协程有哪几种方法?
- 取消协程之后,协程的工作是否会立即停止?
- 如何在取消之后停止协程内的工作?
- 谈谈你对
Handler
的理解。Looper
中的循环是死循环吗?- 为什么
Looper
的死循环不会导致界面卡死?
- 谈谈你对于 MVVM 的理解以及开发中的应用。
- 谈谈你在开发中用到的缓存策略。
- 你用到的缓存是如何保存的?
- 为什么选择使用
SharedPreferences
? - 除了
SharedPreferences
你还知道哪些缓存实现? - 介绍一下
SharedPreferences
的优缺点。 - (没记住)
- 介绍一下 HTTP 中的缓存策略。
- 谈谈你对 Retrofit 的封装。
- 封装时有进行什么优化工作吗?
- 讲讲你做过的别的什么项目。
- 你在项目中有遇到过什么问题吗?你是如何解决的?
- 为什么自行在 Item 里实现 Divider,而不是使用 RecycleView 的
ItemDecroation
?
- 为什么自行在 Item 里实现 Divider,而不是使用 RecycleView 的
算法
T1
给定一个二叉树,请从根结点开始,按照前序遍历的顺序打印所有的节点,每次打印完一个子树后再打印一次根节点。比如:
2 / \ 3 4 / \ \ 5 6 7
打印的结果是 2 3 5 3 6 3 2 4 7 4 2
。
再比如:
1 / 2
输出的就是 1 2 1
。 再比如:
1 / \ 2 3 / \ 4 6 / 5
输出就是 1 2 1 3 4 5 4 3 6 3 1
。
T2
假设这是一棵二叉搜索树(左边的子树的数字都比根结点小,右边的子树的数据都比根节点大),能否根据遍历后的打印结果,将这棵树建起来?
比如打印的结果是:3 1 2 1 3 6 5 6 7 6 3
,那么这棵树就应该是:
3 / \ 1 6 \ / \ 2 5 7
如果给定的不是二叉搜索树,而是一棵普通的二叉树,那么还能否重建?
后续
没收到后续的通知,看样子是凉了。意料之中的事情,一周之内也看不了什么。不过这次面试倒是很好的一次经验,知道后面该重点学习什么了。
哇哈,,原来学长写了面经的...宝贵的经验!!!今年加油 🙂