字节跳动青训Day4

195 阅读2分钟

字节跳动青训每日一题Day4

go test 默认是以什么顺序执行测试的?

多个module并发执行,单module下多个测试串行执行

因为默认情况下 go test 在不同的 package 之间是并行执行测试,在每个 package 内部是串行执行测试。

ps:Go 这一块还没系统学过,打算春招结束了再去学。春招尾巴了还是0offer,呜呜呜

【分布式文件处理,获取最多的URL】如果有一个20g的日志文件,日志文件记录着用户访问过的url,每一行为一个url,给你一台512M的主机,找出出现次数最多的10个url。

看到评论中的Hash分流算法。

假设试验有12个人,我们对这12个人进行编号,编号方法可以使用cookie,也可以使用session,总之获取到这12个人的唯一编码;当获取到唯一编码之后我们就可以开始分流了,我们对每个人的唯一编码进行hash处理,常规使用MD5进行hash计算,这样计算的好处在于MD5几乎不会重复,分流效果较好;计算好的hash值需要进行mod处理,图中有6个桶,我们就用6进行mod处理, 12个人按照余数分散到六个桶里面,原则上12个人的分流是随机的分散到各个桶里面,很难保证每个桶里的人数一致,但是从统计学的角度上讲,当数据量足够大时,数据会均匀的分散到各个桶里面。

参考 hash 分流算法 - CSDN

所以这题的做法: 根据分治算法,20G的日志文件中的url为唯一标识,根据url进行Hash分流,有相同url必定会分到同一个桶中,统计每个桶中访问数量前10的url,最后用堆优先队列维护。

其实这边我有个问题不太理解。就是如果有某一个url的存储大小>256MB,那存储不下要怎么解决呢?

请指教