2021大厂Android高级面试题及答案,面试必问!
### 第二层
面试官对我的偷鸡取巧并不满意啊,他需要我提速,这个速度不行啊。
What??是有时间复杂度更低的吗?不不不,这是一道核心竟然是一道多线程的题目。
1. 将10亿的数据分片,通过分治的思维对数据进行第一次处理。
2. 开启多线程然后对其进行这些分片的数据进行优先级队列操作。
3. 然后每个子线程筛选出其中最大的k个数
4. 当所有线程执行完毕之后合并数据
### 我猜测的第三层
1. 是不是考虑下多少个数据一分片,然后如何把效能提升到最高的问题?
2. 构建多少个线程读取效率是最高的?
这个都是我没想到的,各位大佬有想法的可以聊一下啊。
# 题二:一篇文章内的单词数量
这题乍一看卧槽貌似不难,foreach循环碰到一个空格或者标点的情况下sum++,是不是就可以解决这个问题。
然而事情并没有想想的这么简单。面试被问到这种问题最难的是什么,可能是对于这题目真实的边界问题的思考。
1. 如果这篇文章内容很大怎么办,会不会把内存吃光?
2. 如何给单词去除重复?
### 是不是可以考虑逐行读取呢?
将其转化成IO流,逐行读取流,之后对这个输入内容进行一次计数操作,是不是就可以解决这个问题呢。
### 单词重复的问题
卧槽,这个真简单HashSet啊!!!!那么如果海量数据我是不是又炸了?
卧槽,死亡螺旋吗。或许我们可以考虑下用hash的方式来解决,只保留单词的hashcode,是不是可能可以解决呢。
### 同样的这个也可以使用多线程分片去优化
方式的话基本也和上面是完全一样的,只要把数据分片,之后多线程调度,然后合并结果就可以了。
# **总结**
可以看出,笔者的工作学习模式便是由以下?**「六个要点」**?组成:
> ? 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法?
希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。
下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。
**如:我需要学习?**Flutter的知识。(大家可以参考我的学习方法)
#### [点击这里了解更多](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)即可领取!
* **Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)**
![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625665247548442.jpg)
* **Flutter进阶学习全套手册**
![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625665248315529.jpg)
* **Flutter进阶学习全套视频**
![](http://www.icode9.com/i/li/?n=2&i=images/20210707/1625665248999444.jpg)
大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。