刷题记录---字节跳动2018校招测试开发方向(第一批)

一、某一个RPC服务A,对外提供接口MatchAds(AdTargetRequest req),发送请求,返回可展示的广告。如何测试这个服务接口的性能。

答:

(1)测试A是否能成功发送请求
(2)测试A发送正确请求后能否返回广告,返回的是否是可展示的广告发送错误请求后返回的数据内容是什么
(3)测试同时发送多个请求时接口的反应速度和返回的数据内容(压测:同时发送100条请求或上千条请求,请求能否成功发送,顺序是否一致,能否正常接受返回的广告,返回的广告顺序是否一致,返回的广告是否能正常展示
图片说明

二、如果一个头条的客户端程序,冷启动时间为4秒,怎么判断开启速度是合理的还是不合理的?如果不合理,该如何找到问题,提供思路。

答:

判断是否合理:

(1)确保测试冷启动时间的方法和环境固定:同一台手机(客户端平台相同);相同的网络环境;测量3次取平均值。满足上述条件之后,转向第(2)步进行判断。
(2)横向对比:对比系统打开同类软件的冷启动时间,如果打开同类软件的冷启动时间平均低于4s,说明不合理;纵向对比:比较当前版本和之前版本的冷启动时间,如果之前版本的冷启动时间平均低于4s,说明不合理;

排查问题:

(1)考虑客户端所在平台的系统配置和性能是否符合要求,如果正常,转向第(2)步判断,否则有可能是系统配置不匹配引起;
(2)考虑网络环境是否满足要求,如果满足就转向第(3)步,否则可能是网络问题引起;
(3)环境因素排除之后,通过不同版本的纵向对比,定位到启动时间不合理的版本的出现时间;
(4)测试启动时间时全程抓取log,分析进入应用时的系统调用栈和加载的资源的耗时

三、给定一棵树的根节点, 在已知该树最大深度的情况下, 求节点数最多的那一层并返回具体的层数。如果最后答案有多层, 输出最浅的那一层,树的深度不会超过100000。实现代码如下,请指出代码中的多处错误:

struct Node {
    vector<Node*> sons;
};

void dfsFind(Node *node, int dep, int counter[]) {
    counter[dep]++;

    for(int i = 0; i < node.sons.size(); i++) {
        dfsFind(node.sons[i], dep, counter); 
    }
}

int find(Node *root, int maxDep) {
    int depCounter[100000];
    dfsFind(root, 0, depCounter);
    int max, maxDep;
    for (int i = 1; i <= maxDep; i++) {
        if (depCounter[i] > max) {
            max = depCounter[i];
            maxDep = i;
        }
    }
    return maxDep;
}

答:

1、指针错误
第8行 node是指针类型,应该用node->sons.size()
第9行 同样的错误,应该有node->sons[i]
2、功能错误
(1)第16行 max未初始化;maxDep与输入变量冲突,应该重新定义一个变量作为返回变量。可改为

int max=0;
int res;

同时对应的第20行和第23行就应该改为

res=i;
return res;

(2)第9行 再次调用dfsFind函数是为了进行下一层,所以传入的深度参数要+1,改为

dfsFind(node->sons[i], dep++, counter);

3、越界、空指针
(1)dfsFind函数和find函数都应该增加一个传入指针为空的判断。
dfsFind函数中添加

if(!node) return;

find函数中添加

if(!root) return 0;

(2)第17行for循环判断会越界,应该为

 for (int i = 0; i < maxDep; i++) {
全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务