2020/5/11 飞书 一面
整个过程挺流畅的,有一些比较深的问题不会
- 说一下项目(网络层的封装)
- 对MVP、MVVM的理解,你觉得这两种架构最主要的区别是什么
- 线程安全的集合有哪些
HashTable和CurrentHashMap的线程安全实现的区别(这个当时还没看源码)- 线程池有哪几种,他们的区别是什么
- SP的
commit()和apply()的区别 synchronized关键字实现原理- 线程池的种类,他们分别有什么区别
- 如果同时并发数超过核心线程数和临时线程数会怎样(线程池的拒绝策略)
- 然后我说到OKHTTP的线程池,因为它的线程池的临时线程数是MAX_INTEGER,不会出现Task超过线程数处理不了的情况,他说OKHTTP这样设计其实有点粗犷,然后问我遇到上面那种情况你会怎么设计线程池,我想了一下,说不要用
SynchronousQueue,设定一个适当大小的队列,比如200,核心线程为0,临时线程为200.(随便说的,他也没说对不对) - 如何应对短时间的高并发
- 自旋锁的理解
- 自旋锁和互斥锁的区别
- 自旋锁在Java中的应用
- Android的事件分发机制
- 开始写算法
-
- 一个数组,不能取相邻元素,怎么取数才能让取到的数字之和最大(经典动态规划,打家劫舍)
-
- 二叉树每层的最大元素(BFS)
总结
对于大厂来说,基础真的非常非常非常重要! 一些常考的比如 Java 的 CurrentHashMap 还有 HashMap ,这些都是必须要看的。还有 JVM 和 算法。Android 中常见的例如 事件分发、view的绘制流程 、消息机制 的源码,要能很熟悉的说出来。大家一起加油吧