Skip to content
目录

腾讯公众号&小程序团队前端实习生一面

三道题:

ts
/*
吃饼干
小华有m块饼干要吃n天,每天至少吃前一天的一半,求第一天最多吃多少块,如果为0输出-1
*/
function mostEaten(m: number, n: number) {
  function calc(num: number) {
    let sum = 0;
    for (let i = 0; i < n; i++) {
      sum += num < 1 ? 1 : num;
      num = Math.ceil(num / 2);
    }
    return sum;
  }
  let left = 0,
    right = m;
  while (left < right) {
    const mid = (left + right) >> 1;
    const temp = calc(mid);
    if (temp === m) {
      return mid;
    } else if (temp > m) {
      right = mid;
    } else {
      left = mid + 1;
    }
  }
  if (left === 0) {
    return -1;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ts
/*
最近公共父节点
*/
function lowestCommonAncestor(
  root: TreeNode | null,
  p: TreeNode | null,
  q: TreeNode | null
): TreeNode | null {
  if (!root || root === p || root === q) {
    return root;
  }
  const left = lowestCommonAncestor(root.left, p, q);
  const right = lowestCommonAncestor(root.right, p, q);
  if (left && right) {
    return root;
  }
  if (!left && right) {
    return right;
  }
  if (!right && left) {
    return left;
  }
  return null;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ts
/*
经典HardMan
*/
function sleep(delay: number) {
  return () =>
    new Promise(resolve => {
      const time = +new Date();
      console.log("等待开始: 0s");
      setTimeout(() => {
        console.log(`等待结束: ${~~((+new Date() - time) / 1000)}s`);
        resolve(void 0);
      }, delay * 1000);
    });
}
function HardMan(name: string) {
  const taskQueues: Function[][] = [[() => console.log(`i am ${name}`)]];
  let index = 0;
  setTimeout(async () => {
    for (let taskQueue of taskQueues) {
      for (let task of taskQueue) {
        await task();
      }
    }
  });
  const value = {
    rest(delay: number) {
      taskQueues[index].push(sleep(delay));
      return this;
    },
    restFirst(delay: number) {
      taskQueues[index].unshift(sleep(delay));
      return this;
    },
    learn(subject: string) {
      taskQueues[index].push(() => {
        console.log(`learning ${subject}`);
      });
      taskQueues[++index] = [];
      return this;
    },
  };
  return value;
}

HardMan("jack");
// i am jack

HardMan("jack").rest(3).learn("computer");
// i am jack
// 等待开始: 0s
// 等待结束: 3s
// learning computer

HardMan("jack").restFirst(5).learn("chinese");
// 等待开始: 0s
// 等待结束: 5s
// i am jack
// learning chinese

HardMan("jack")
  .restFirst(3)
  .learn("Chinese")
  .learn("English")
  .rest(2)
  .learn("Japanese");
// 等待开始: 0s
// 等待结束: 3s
// i am jack
// learning Chinese
// learning English
// 等待开始: 0s
// 等待结束: 2s
// learning Japanese
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

面试:

  1. http 和 https

  2. SSL/TSL 加密方式

  3. 为什么 CA 证书是安全的

  4. 进程间通信方式

  5. 事件循环理解

  6. 闭包理解

  7. 闭包的实际使用场景

  8. 原型链理解

  9. useEffect 后面传一个空数组和不传有什么区别

  10. useCallback 和 useMemo 的作用

反问:

面试不足——算法写的慢(被看着写很紧张,而且没用本地 IDE 调试),基础不错

部门主要业务和技术栈——微信开放平台(Vue),微信开发者工具和桌面端应用(React)

面向开发者更多吗——通常是面向开发者的应用和服务

评价:

面试官说话很温柔,也会给引导也比较耐心,整体来讲像聊天,聊得很开心但是第二天偷偷挂了,这个部门前端牛客上没看到过了的人,也不好说是不是 KPI

总结:

算法真的练练心态,被看着写很紧张

腾讯总体聊的不错的,算法题那用了复杂的方法有 bad case

(后续)又来了两次一面邀约 还是这个部门 KPI无疑

Released under the MIT License.