---
url: https://sugarat.top/offer/sum-interview/20-spring/tencent-kd.md
---

# 腾讯-腾讯看点

## 一面

和面试官电话聊了差不多20分钟,个人介绍,学习经历,项目经历,实习经历四个方面

然后面试官发了一套题过来,开屏幕分享做,差不多2.5小时做完

### 手撕代码部分

1.给定数组如下，请根据数组元素的age字段对数组排序，多种实现方式可加分

```js
const a = [
    {
        name: '大毛',
        age: 12,
    },
    {
        name: '二毛',
        age: 34,
    },
    {
        name: '三毛',
        age: 23,
    }
];
// 我写了三种
// Array.sort
// 冒泡排序O(N2)
// 快速排序O(N*logN)
```

2. 拦截 console.log 在用户传入，并且在用户输入前打印几个字符串

```js
输入：console.log('Hello', 'World');
输出：xxx Hello-World
```

我的解法利用Object.defineProperty与闭包

```js
(function () {
    const log = console.log
    Object.defineProperty(console, 'log', {
        configurable: true,
        value: function (...arg) {
            log('自定义内容xxx', arg.join('-'));
        }
    })
})()

console.log('hello', 'world')
```

3. 实现调用闭包函数，使每调用一次返回值都会加1

```js
const func = (function () {
// TODO 请实现对应代码逻辑

})();
console.log(func()); // -> 1
console.log(func()); // -> 2
console.log(func()); // -> 3
```

4. 编写代码判断两个日期是否是同一周（可使用MDN查询JS相关日期函数）

```js
function isSameWeek (d1: Date, d2: Date): boolean {
// TODO，已知 d2 > d1, 按照周一是一周的第一天的逻辑来算，请实现对应的代码
}
console.log(isSameWeek(new Date('2019-09-28'), new Date('2019-09-29')));   // true
console.log(isSameWeek(new Date('2019-09-29'), new Date('2019-09-30')));   // false
```

5. 给定一个大小为n的数组，找到其中的多数元素

```js
多数元素是指在数组中出现次数大于n/2的元素
如输入[3,2,3]输出3，输入[2,2,1,1,1,2,2]输出2，多种实现方式可加分。
```

6. 汽水2元1瓶，每3个空瓶可换1瓶汽水，请用代码实现输入任意整数金额，输出可喝多少瓶汽水

7. 通过键盘输入一串小写字母(a~z)组成的字符串,请编写一个字符串压缩程序

```js
将字符串中连续出现的重复字母进行压缩，并输出压缩后的字符串

压缩规则：
a. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符，压缩后的字符串还是"abcbc"。
b. 压缩字段的格式为"字符重复的次数+字符"。例如：字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
```

8. 输入一个矩阵m\*n，按照从外向里以顺时针的顺序依次扫印出每一个数字

```js
input：
[
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
]
output：
1 4 7 8 9 6 3 2 5
```

9. 写一个程序按箭头顺序在下面矩阵中填入对应数据
   ![图片](https://img.cdn.sugarat.top/mdImg/MTYwMjU5NjQ1NDI0Nw==602596454247)

### 问答题

1. 对于日均PV百亿级的页面（即访问量巨大），想要设计系统扛住流量，简述各环节（不局限于前端）上可以做哪些措施
2. 进程的调度算法有哪些？请分别简述
3. TCP三次握手的目的是什么？服务端为什么要回传SYN和ACK？客户端收到后为什么要回传ACK？

### 智力题

```js
一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤，让这两个犯人自己来分。起初，这两个人经常会发生争执，因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法：一个人分汤，让另一个人先选。于是争端就这么解决了。可是，现在这间囚房里又加进来一个新犯人，现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢？
```

## 二面

### 项目

1. 项目经验
2. 项目中的难点有哪些,是如何解决的

### node

1. 用过node吗
2. 了解koa与express的区别在哪里吗

### 计网

1. http2的特点有哪些
2. 简单说一下https?它是安全的吗
3. 说一下TLS协议的工作流程

### 浏览器

1. 了解浏览器安全吗?说一下有哪些安全隐患和如何预防

### 技术基本功

1. 对前端工程化有没有实践过
2. TS与JS的区别
3. 会用Git吗?说说常用的几个命令

### 其它

1. 最近在学什么
2. 平时怎么学习的
3. 为什么选择前端而不是后端
