• 从内存占用优化考虑:用字典树。
    从时间效率优化考虑:肯定要线性扫描一遍,不管在内存里面还是从磁盘读,扫一遍文本的时间是主要时间。
    单拿 top 5 分析,5 这个常数太小了,没必要用堆,遍历 5 遍更快。
    扩展到 topK 的问题,堆也不是最优的解法。

  • 有一个疑问,怎么考察是不是精通 shell?

  • closed at 2020年12月31日

    快发邮箱吧~

  • 可以多个机器同时发。我们压测 Kafka 的只关注消息体大小,不用关注消息内容,所以用 Kafka 自带的压测工具,单机压不上去就多个机器机器同时压,能到十几万的 QPS。

  • 这个跟你业务强相关的,你就直接对比一条裁剪之后和原来的消息字节数就能得到。在我们这个场景大约能减少 70%,但是没有什么参考价值。

  • 对,你说的这个点是造成准确性难保证的一个原因。这个问题其实很难解决,在于出需求的人对需求的描述是自然语言,而开发的人用的是计算机语言,这个转换难以避免出现误解,所以一个方向就是降低写批处理/流处理的难度,设立数据产品经理(掌握一定的数据开发技能解决)需求方直接写,避免转换过程出现问题,也有一些前沿方向是自然语言到 hsql 的生成,但现在还很初级。

    但是除去这个原因,假设研发/测试都正确的理解了数据需求,依然不能保证数据的正确性,这里面的原因多种多样,比如对数据的假设不成立/处理逻辑有 bug/大数据基础设施有问题。所以我说这个问题的根本在于人没法判断数据对或不对。

    这个问题我思考了挺长时间了,也有一些想法和结果,有机会我单独写一写。

  • 多谢解答,据我的了解,你说的大数据团队自测也是一种很普遍的选择。

    我说一下我对 test oracle 的了解,“测试准则” 不太能表示它的意思,它是指到底怎么判断测试结果对或者不对,oracle 对应的翻译(神谕)更能表明这层含义,举个例子,比如你测试一个函数实现了加法,大部分人一看就知道对不对,又或者点某个按钮要弹出一个提示,这种就不存在 test oracle 的问题,它的正确性对绝大部分人都是显而易见的。但是涉及到大数据数据的准确性/正确性,这个就很难。例如,你算出一个指标你甚至很难在数量级上肯定它对不对,更别说它的准确性/正确性了。所以我说 test oracle 是大数据测试的一个根本性问题。即使你掌握了比大数据开发工程师更多的技能,当领导问你:你怎么确定你测试过的的数据是对的,你其实依然无法保证,本质上你只是把开发的流程走了一遍,那怎么保证你自己不出错呢?自己说自己开发的东西没 bug,这不符合基本的逻辑。

    最后我没有说不需要了解业务和学习技术,我知道这两点的重要性。但是回到我讨论的这个问题,了解业务、学习技术,是能提高正确性的可能,但还是没从根本上解决问题。如果这是正确的解决方案,我相信对数据准确度要求高的团队无疑可以招聘两倍的大数据研发来解决问题。

  • 先回拽专用名次的事情,这是一个测试论坛,test oracle 算不上高大上,但是没有很好的对应翻译,所以才用,不知道你为啥反感。按照你的逻辑我是不是也要反感一下 shuffle。不妨讲讲你是为啥感到反感?

    其次我也是技术派拥护者,只是我没有局限在技术里面,你到管理的位置上不要思考团队人员配置吗?精英配置是好,但是具有普适性吗?
    我在讨论一个大数据测试领域一个很具体的问题,想探讨一下你的方法论,结果就是了解复杂业务、学大数据技术。这是你的方法论,我指出问题点就是作为方法论它缺少普适性,而且没有根本性上解决问题。

  • 嗯,多谢解答。这是一种思路,问题点是:

    1. 举例的例子比较简单,在实际问题中,离线计算的指标业务逻辑比较复杂,而难点就在于复杂的逻辑。所以这个例子很难显然的推广到实际的工作场景中。
    2. 算不上大的问题点,就是要求测试人员掌握比较好的大数据数据开发技能,当然从方向上是好的,但是问题也很多,实际也较难具备这种条件。如果没有相关技能,这种方法就不太可行。

    这种思路抽象一下,就是不同的人(研发、测试)分别实现需求,然后对比,或者降级一些,测试人员只需要对结果数据做一些性质严重。但是没法解决 test oracle 的问题,例如研发、测试算出来的结果一致,而很有可能是他们都算错了。

  • 提一个 topic,大数据测试一个难点是数据准确性测试,根本性的原因是大数据量的准确性的 test oracle 问题,有什么系统的方法论吗?

  • closed at 2020年12月17日

    欢迎投递简历。

  • closed at 2020年12月15日

    好的,静待简历。

  • closed at 2020年12月15日

    大数据测试方向岗位,对开发能力要求不高。另外一个岗位主要做 devops 相关平台,要求有一定开发能力。可以先投简历试试,还有别的组,业务部门测开也招人~

  • 是没什么问题,还没习惯这个逻辑。

  • 没想到匿名帖的逻辑默认竟然是匿名回复,而且改不了。

  • closed at 2020年12月10日

    可以来试试哦,欢迎投简历~

  • 递归写了一个:

    import copy
    
    
    def get_all_combination(chs, deep, ret, rets):
        if deep == 0:
            ret = ["&" for x in range(len(chs))]
        if deep == len(chs):
            rets.append(copy.copy(ret))
            return
        else:
            for c in chs[deep]:
                ret[deep] = c
                get_all_combination(chs, deep + 1, ret, rets)
    
    
    rets = []
    get_all_combination([["a", "b", "c", "d"], ["e", "f", "g"], ["h", "i"]], 0, [], rets)
    print(rets)
    

    Pythonic 的写法:

    import itertools
    
    print(list(itertools.product(*[["a", "b", "c", "d"], ["e", "f", "g"], ["h", "i"]])))
    
  • c++ 内存对齐问题 at 2020年12月03日

    可以看一这个资料:https://docs.microsoft.com/en-us/cpp/cpp/trivial-standard-layout-and-pod-types?view=msvc-160
    总的来说就是,C++ 语法规范里面对类和结构体的内存布局没有约定规范,但是 C++14 里面增加了几种特殊的情况对内存布局有约定。再具体到你这个场景,CPerson2 不符合 trivial/standard-layout 的要求,所以不能假定内存的布局。

  • 今年校招的一些趋势 at 2020年10月26日

    今年的情况,应该很少到学校宣讲招聘了吧,大部分都是线上进行的,可能这也是研究生比例上升的原因之一:求职成本降低,那有求职优势的学生就会增加自己的求职次数。

    至于项目,其实不见得是优势,研究生大部分都是科研项目,而且是为了毕业做的项目,如果专业背景不接近,项目都沟通不清楚。

  • 今年校招的一些趋势 at 2020年10月23日

    并不是,大部分还是比较相近的专业,例如软工、通信、自动化之类。生化环材一个也没遇到。

  • 今年校招的一些趋势 at 2020年10月23日

    没有图,有也不能放。这不是什么严谨的结论,就是个人的一些感觉。

  • 今年校招的一些趋势 at 2020年10月22日

    这个数字很保守,实际我面试的人里面应该超过 90% 了。

  • 多谢指出,已修正。具体的压缩比根消息内容和一批消息的大小有比较大关系,在我们的场景压缩比能到 7:1~10:1,快一个数量级了。

    1. 没有绕过 tcp 流量控制一说,写这个文章一个原因是高延迟带宽对传输速率的影响这个应该很少有人注意到(我也是第一次遇到这类问题),跨机房的传输速率只能到那么高(而且费用很高),所以合理的方式就是降低传输量。
    2. 压测就是模拟的生产的某个业务场景,消息体的大小是一个很关键的参数,这个是从生产环境统计了一部分消息获取的。文中提到的优化肯定是都应用到了生产环境的。
    3. 别的解决方式,增加并发度方向:可以增大 Kafka partition 数量,但是不是越大越好,有一定的副作用。进一步减少网络传输量考虑:可以使用更紧凑的数据格式,例如 pb,但是这需要在 consumer 端做一定的开发。
  • locust 使用的疑问 at 2020年07月01日

    qps 到几千的规模,考虑用 wrk 吧。