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) 大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。
上一篇:2021大厂Android知识点总结!成功跳槽阿里!


下一篇:C. Amr and Chemistry(bfs)