2024届快手测试开发面试面经

总共三面,技术面都参加了,题目也全部回答出来了,但是最终没过。

一面

  1. 最熟悉的编程语言

我说是C++和python

2. C++ static的作用

3. C++ const的作用

4. coding

合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]

输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []

输出:[]

示例 3:

输入:l1 = [], l2 = [0]

输出:[0]

提示:

两个链表的节点数目范围是 [0, 50]

-100 <= Node.val <= 100

l1 和 l2 均按 非递减顺序 排列

class ListNode:
    def __init__(self, val, next=None):
        self.val = val
        self.next = None

def merge(l1, l2):
    head1 = ListNode(0)
    p1 = head1
    for i in l1:
        t1 = ListNode(i)
        p1.next = t1 
        p1 = p1.next 
    
    head2 = ListNode(0)
    p2 = head2
    for i in l2:
        t2 = ListNode(i)
        p2.next = t2 
        p2 = p2.next 
    
    res = ListNode(0)
    p = res
    h1 = head1.next
    h2 = head2.next
    while h1 != None and h2 != None:
        if h1.val <= h2.val:
            t1 = h1.next
            h1.next = None
            p.next = h1
            p = p.next
            h1 = t1
        else:
            t2 = h2.next
            h2.next = None
            p.next = h2
            p = p.next
            h2 = t2
    if h1 != None:
        p.next = h1 
    if h2 != None:
        p.next = h2 
    return res.next

# l1 = [1,2,4]
# l2 = [1,3,4]

# l1 = []
# l2 = []

l1 = []
l2 = [0]

head = merge(l1, l2)
while head != None:
    print(head.val, end = " ")
    head = head.next

5. coding

实现快速排序

def findpos(a, l, r):
    tmp = a[l]
    left, right = l, r 
    while left <= right:
        while left <= right and tmp >= a[left]:
            left += 1
        while left <= right and tmp < a[right]:
            right -= 1
        t = a[left]
        a[left] = a[right]
        a[right] = t 
    a[l] = a[left]
    a[left] = tmp
    return right

def quicksort(a, l, r):
    if l >= r:
        return
    p = findpos(a, l, r)
    quicksort(a, l, p - 1)
    quicksort(a, p + 1, r)

arr = [1, 30, 10, 9, 54, 5, 43, 90, 8, 3, 2]
quicksort(arr, 0, len(arr) - 1)
print(arr)

二面

  1. 问实习项目

2. 梯度爆炸的原因

3. 使用激活函数的原因

4. 为什么常见的激活函数是那几个

5. http,ip是哪一层

6. 拥塞控制算法

7. 延迟和抖动

8. 最擅长的编程语言是哪些?

9. 虚函数和纯虚函数

10. 分布式mysql

11. 主从同步

12. 多进程通信的方式有哪些

管道 共享内存 信号量 消息队列

13. coding

Leetcode 买股票

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。要求只能遍历一次数组

def f(arr):
    mi = arr[0]
    n = len(arr)
    ans = int(-1e9)
    for i in range(1, n):
        # if arr[i] > mi:
        ans = max(ans, arr[i] - mi)
        mi = min(mi, arr[i])
    return ans

arr = [6, 5, 4, 3, 2, 1]
print(f(arr))

三面

1. 问项目

2. 场景题: 怎么计算两个手机视频通话的端到端延时

条件和要求:

(1) 我身边有两台手机,可以自己操作

(2) 可以借助其他现实中存在的工具

(3) 尽可能精确

我的方案:

用秒表,拍摄一个移动的物体,记录它刚进入第一个手机的镜头的时间,记录它第二个手机刚出现这个手机的镜头的出现时间。

更好的方案:

直接拍摄秒表,记录两只手机出现的秒表记录的时间的时间差。

3. coding

1. 题目:已知某棵二叉树的前序遍历结果和这颗二叉树中序遍历结果,重建这棵二叉树

说明:(以C++为例)

- 树节点定义

  struct Node {

    Node* left;
 
    Node* right;
 
    int value;
 
  };

- 前序遍历:当遍历到某个节点时,先访问当前节点,再访问左子树,再访问右子树

- 中序遍历:当遍历到某个节点时,先访问左子树,再访问当前节点,再访问右子树

- 举例:

1

2 3

4 5 6

前序遍历结果:1 2 4 5 3 6

中序遍历结果:4 2 5 1 3 6

- 实现:Node* rebuild(int* pre_order, int pre_len, int* in_order, int in_len);

#include <iostream>
using namespace std;

Node* create(int* pre_order, int prel, int prer, 
int* in_order, int inl, int inr) 
{
    if(prel > prer) {return NULL;}
    Node *root = new node;
    root->value = pre_order[prel];
    int k = inl;
    for(int k = inl; k <= inr; ++k) 
    {
        if(in_order[k] == pre_order[prel]) { break; }
    }
    int numleft = k - inl;
    root->left = create(pre_order, prel + 1, prel + numleft, in_order, inl, k - 1);
    root->right = create(pre_order, prel + numleft + 1, prer, int_order, k + 1, inr);
}

Node* rebuild(int* pre_order, int pre_len, int* in_order, int in_len)
{
    Node *root = create(pre_order, 0, pre_len - 1,
    in_order, 0, in_len - 1);
    return root;
}

int main() {
    cout << "Hello World!" << endl;
}

4. 上述的二叉树应该使用哪些测试样例

#快手##测试开发##校招##秋招##面经#
全部评论
兄弟 我和你估计是一个部门 一模一样的问题
3 回复 分享
发布于 2023-12-07 11:58 湖南
为啥会没过啊
点赞 回复 分享
发布于 2024-03-30 17:17 香港

相关推荐

2025-12-08 16:04
门头沟学院 Java
本人本科末9,今年大三。大一大二一直玩,什么都没学到,在大学混日子混了两年,每天不是在打农就是在steam。大三开学时一个和自己玩的好的同学去实习了,才发现自己白白浪费了两年的时间,如果真不冲一下就真去京东,阿里,美团送外卖了今年9月份开始学Java,一开始一直跟着黑马视频看,后面发现看视频效率太低了,时间根本不够,就开始主要看文档和看书了。这几个月一直在学,真的尽力了,希望暑期前能找一份好点的实习。我简历上面的项目大多没有指标,但是实际上我是真没多少时间去做项目,我基本主要是动手只做了外卖和天机,黑马点评和12306我都是只是看了项目。主要是自己的时间真的不多,但是这样子自己的代码能力确实比较差。而且自己也没有做过实际的工程,我顶多用jmeter测试一下接口tps啥的,比如使用Redis管道提升了一点性能,减少Redis交互,这种值得写上去吗?需不需要具体到某些数字求求各位佬给一些建议,看看简历怎么优化?项目介绍是不是不够详细?没有具体到业务方面。项目会不会提到大致实现原理导致面试官一看简历就知道怎么实现就没有问的欲望?专业技能一些字段是不是要加粗,是不是写太啰嗦了?有没有必要压缩内容变成一页?两页的话是不是都要把两页填地满满的。
给秋招一个交代:一页简历最好,网上做的项目放面试官眼里都是玩具,简历上不需要强调有什么难点,记住就行防止真的问。然后背八股,多投多面试就行
点赞 评论 收藏
分享
评论
8
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务