第二层
面试官对我的偷鸡取巧并不满意啊,他需要我提速,这个速度不行啊。
What??是有时间复杂度更低的吗?不不不,这是一道核心竟然是一道多线程的题目。
- 将1
点击领取完整开源项目《安卓学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
0亿的数据分片,通过分治的思维对数据进行第一次处理。
2. 开启多线程然后对其进行这些分片的数据进行优先级队列操作。
3. 然后每个子线程筛选出其中最大的k个数
4. 当所有线程执行完毕之后合并数据
我猜测的第三层
- 是不是考虑下多少个数据一分片,然后如何把效能提升到最高的问题?
- 构建多少个线程读取效率是最高的?
这个都是我没想到的,各位大佬有想法的可以聊一下啊。
题二:一篇文章内的单词数量
这题乍一看卧槽貌似不难,foreach循环碰到一个空格或者标点的情况下sum++,是不是就可以解决这个问题。
然而事情并没有想想的这么简单。面试被问到这种问题最难的是什么,可能是对于这题目真实的边界问题的思考。
- 如果这篇文章内容很大怎么办,会不会把内存吃光?
- 如何给单词去除重复?
是不是可以考虑逐行读取呢?
将其转化成IO流,逐行读取流,之后对这个输入内容进行一次计数操作,是不是就可以解决这个问题呢。
单词重复的问题
卧槽,这个真简单HashSet啊!!!!那么如果海量数据我是不是又炸了?
卧槽,死亡螺旋吗。或许我们可以考虑下用hash的方式来解决,只保留单词的hashcode,是不是可能可以解决呢。
同样的这个也可以使用多线程分片去优化
方式的话基本也和上面是完全一样的,只要把数据分片,之后多线程调度,然后合并结果就可以了。
最后
愿你有一天,真爱自己,善待自己。
本文在开源项目:Android开发不会这些?如何面试拿高薪 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…