Appearance
腾讯公众号&小程序团队前端实习生一面
三道题:
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
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
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
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
面试:
http 和 https
SSL/TSL 加密方式
为什么 CA 证书是安全的
进程间通信方式
事件循环理解
闭包理解
闭包的实际使用场景
原型链理解
useEffect 后面传一个空数组和不传有什么区别
useCallback 和 useMemo 的作用
反问:
面试不足——算法写的慢(被看着写很紧张,而且没用本地 IDE 调试),基础不错
部门主要业务和技术栈——微信开放平台(Vue),微信开发者工具和桌面端应用(React)
面向开发者更多吗——通常是面向开发者的应用和服务
评价:
面试官说话很温柔,也会给引导也比较耐心,整体来讲像聊天,聊得很开心但是第二天偷偷挂了,这个部门前端牛客上没看到过了的人,也不好说是不是 KPI
总结:
算法真的练练心态,被看着写很紧张
腾讯总体聊的不错的,算法题那用了复杂的方法有 bad case
(后续)又来了两次一面邀约 还是这个部门 KPI无疑