ARTS - 2020.07.13 ~ 2020.07.19

ARTS打卡 - 7

1. Algorithm

14. Longest Common Prefix

寻找字符串数组中的公共前缀,题目比较简单,但需要考虑一些特殊条件,例如中间包含空字符串的时候就需要直接返回了。我用了最常规的写法:

  • 首先将数组第一个字符串作为公共前缀:result
  • 遍历数组,每个字符串与result比较,找出公共前缀,并且截取result
  • 如果遇到空字符串直接返回

提交之后用时为1ms,看了一下结果有用时为0ms的,解法非常简洁,我完全没有想到这样做,膜拜大神:

1
2
3
4
5
6
7
8
9
10
public String longestCommonPrefix(String[] strs) {
if(strs.length==0)return "";
String prefix = strs[0];
for(int i=1; i<strs.length; i++){
while(strs[i].indexOf(prefix)!=0){
prefix=prefix.substring(0,prefix.length()-1);
}
}
return prefix;
}

2. Review

  • Automated testing on devices

    这是netflix搭建自动化测试平台方案的介绍,总结如下:

    • 更低的设置成本/更加敏捷的测试

      自动化应当和手动测试具有一样的设置消耗,很重要的一点是确认创建一个新的test并且运行是很快的并且无感知的。还可以确保将时间重点放在测试功能和测试本身。

    • 没有测试结构的约束

      自动化测试不应该被特殊的测试结构约束。确保自动化系统与测试结构分离,以提高其可重用性。

    • 更少的测试层级

      具体来说就是减少外部影响,避免一些非自身因素而造成的测试失败。

    • 支持重要的设备功能

      需要能够即使部署构建到设备的能力,获取log file 和 crash dumps对于简化对测试失败的原因分析流程也是非常重要的。

    • 灵活性、模块化、减少依赖外部服务:

      1. 确保测试相关的逻辑仅仅由测试程序本身决定。

      2. 如果没有外部依赖,则开发人员可以很方便的使用平时使用的工具在没有任何设置的情况下运行测试。

      3. test case仅仅关心功能测试而不用关心外部约束。

    • 自动化服务

      提供服务帮助设备管理,自动执行测试并在需要的时候进行额外测试。自动化服务仅仅能够提供一个服务而不应该控制测试流。即应该是测试调用服务而不是服务决定测试如何进行。

    • 建立即插即用的系统

      1. 设备管理: 抽象设备的标识信息与在不同的设备之间提供共同的接口。

      2. 测试用例管理:

        a. test suites

        b. 选择什么时候运行用例

        c. 选择运行时用例的配置

        d. 存储结果

        e. 可视化结果(测试报告)

      3. 网络控制

      4. 文件服务

      5. Test Runner: 由于每个服务都是完全独立的,准备一个调度器在测试运行前准备设备以及在测试运行后收集结果。
        image1

        a. Device service: device handlers

        b. TPL: Test Portability Layer:测试可移植性层,它允许我们在自动化系统上运行实现了TPL接口的不同系统。

3. Tip

4. Share

QQ音乐Android客户端Web页面通用性能优化实践