面的是字节跳动日常实习岗,面试体验挺好的,挺有效率的。不过实力也是运气的一部分,三面面试官对计算机基础要求高,由于大二目前还没有开课,也没有对操作系统和计网进行自学,只有简单了解,怪自己没有花更多的时间去自学。最后止步于三面还是挺可惜的,大二如果能找到一个实习还是挺棒的体验。
一面
- 聊项目,项目中做了什么,难点是什么
- 组件化实现,ARouter+EventBus
- 观察者模式
- Retrofit动态代理细节实现,如何与Rxjava配合使用,动态代理能代理抽象类吗?Retrofit为什么会选择接口来定义请求方法。
- Jetpack框架
- Kotlin
- HashMap、HashTable、ConcurrentHashMap
- 手写中序遍历二叉树非递归
二面
- 聊项目,项目中做了什么
- 同样问了Jetpack框架,LifeCycle、LiveData好处,observer和observerForever的区别。
- sychronized、volatile,这里扯到了JVM内存模型
- 线程如何同步,生产者消费者模型,如何终止线程
- Rxjava的Flowable和Observable区别,map和flatmap,线程切换如何实现
- MVVM和MVP的区别,以及实现细节
- 一点点计网相关,请求头,POST、GET,抓包等。
- ViewModel相关内容,例如为什么用ViewModelProviders而不是new,ViewModel与MVP里Presenter的对比
- 为什么要选取xxx框架
- 手写判断平衡二叉树
三面
三面面试官挺注重基础的,由于大二计网和操作系统没怎么学,被问傻了。
- 聊项目,为什么要重构,对业务上来说不是没帮助吗
- Java写了多久,为什么转Kotlin,这样基础不会不牢固吗
- volatile关键字
- Kotlin范型与Java范型
- http和https,就答了ssl加密,其他就不太清楚了
- 为什么计算机要设计栈和堆
- 由于基础太菜了,面试官未出算法题。
原文
https://juejin.im/post/5cb999b2e51d456e8757ddf8