- 为了助力本届青训营课程的学习,青训营项目组为同学们精心挑选了练手习题 📖
- 每两天发布一篇,包含选择题和实操题各一题(第二天将发布答案解析)🥳
- 同学们可以在评论区留下你的解题过程并进行互动交流 ✍️
一、【单选】go test 默认是以什么顺序执行测试的?
a. 多个 module 并发执行,单 module 下多个测试并发执行
b. 多个 module 并发执行,单 module 下多个测试串行执行
c. 多个 module 串行执行,单 module 下多个测试并发执行
d. 多个 module 串行执行,单 module 下多个测试串行执行
答案 & 解析
b;
多个 modules 会并发编译,然后并发执行测试,除非添加了额外的参数-p=1。单个 modules 下多个测试会串行执行,除非在测试函数内执行t.Parallel()。
二、【分布式文件处理,获取最多的 URL】如果有一个 20g 的日志文件,日志文件记录着用户访问过的 url,每一行为一个 url,给你一台 512M 的主机,找出出现次数最多的 10 个 url。
解析
Top K算法:使用堆排序算法+大顶堆+10 个元素的数组。
- IP 地址最多有 2^32=4G 种取值情况,所以不能完全加载到内存中处理;
- 可以考虑采用“分而治之”的思想,按照 IP 地址的 Hash(IP)%1024 值,把海量 IP 日志分别存储到 1024 个小文件中。这样,每个小文件最多包含 4MB 个 IP 地址;
- 对于每一个小文件,可以构建一个 IP 为 key,出现次数为 value 的 Hash map,同时记录当前出现次数最多的那个 IP 地址;
- 可以得到 1024 个小文件中的出现次数最多的 IP,再依据常规的排序算法得到总体上出现次数最多的 IP;
打卡第四天~
同学们还在坚持吗?快在评论区和大家交流自己的解答和分析吧~