讨论/求职面试/腾讯|热乎的一面|2021|/
腾讯|热乎的一面|2021|

问题

C++

Q: 熟悉的数据结构有哪些?

A: 链表、队列、树、堆、栈

Q: 说一下堆这个数据结构

A: 堆底层是由二项队列实现的,主要有大顶堆和小顶堆。通过上滤和下滤操作来保持根是最大的或最小的。

Q: C++11特性除了 auto 还有哪些?

A: dynamic_caststatic_cast 是吗?

Q: 讲一下 dynamic_caststatic_cast 的区别

计算机网络

Q: TCPUDP 的区别?

Q: HTTPsHTTP 的区别?

A: 加密;三次握手后协商密钥。

Q: 你能仔细说说协商密钥的过程吗?

Q: TCP 怎么建立连接的

操作系统

Q: 你了解那些操作系统相关知识?

Q: 讲一下多路IO复用,除了 select/epoll 还了解那些复用方式?

算法题

求成绩排名百分比

某班级共有 N 个学生( N 不超过100),给出某次考试之后的各同学成绩(分数区间 [0, 100] ),学生 k 成绩排名系数 P 定义如下:
P(k)=分数不超过学生k的人数(包括k本身)/ N * 100,求每个学生成绩的排名 P,请使用时间复杂度为 O(N)O(N) 的算法实现。
示例:

输入 :第一行为学生计数,第二行为学生分值

3
50 30 70

输出:

66.66667 33.33333 100.0
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> scores(n);
    for (int k = 0; k < n; ++k) cin >> scores[k];

    vector<int> cnt(101);
    vector<int> pre(101);
    for (auto & v : scores) cnt[v]++;
    pre[0]  = cnt[0];
    for (int k = 1; k < 101; ++k) pre[k] = pre[k - 1] + cnt[k];
    for (auto & v : scores) {
        cout << 100.0 * pre[v] / n << ' ';
    }
    cout << endl;
}

股票的最佳实践

股民小 A 有一天穿越回到了 n 天前,他能记住某只股票连续 n 天的价格;他手上有足够多的启动资金,他可以在这 n 天内多次交易,但是有个限制:
如果已经购买了一个股票,在卖出它之前就不能再继续购买股票了。到 n 天之后,小 A 不能再持有股票。购买和卖出都有手续费。
求问 这 n 天内,小 A 能够获得的利润的最大值。

示例:

输入 :第一行输入天数和手续费,第二行为股票价格

6 3
50 30 70

输出:

4
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = -1000000;
int main() {
    int n, fee;
    cin >> n >> fee;
    vector<int> prices(n);
    for (int k = 0; k < n; ++k) cin >> prices[k];
    vector<int> fy(n + 1), fn(n + 1);
    fy[0] = INF;
    for (int k = 1; k <= n; ++k) {
        fy[k] = max(fy[k - 1], fn[k - 1] - prices[k - 1] - fee);
        fn[k] = max(fn[k - 1], fy[k - 1] + prices[k - 1] - fee);
    }
    cout << fn[n] << endl;
}

附加

Q: fnfy 表示什么含义?
A: fn表示当天没有股票的情况下最大收益,fy 表示当天持有股票的情况下最大收益。
Q: 讲一下为什么第二题会想到用到用动态规划来做?
A: 背的(不是)。首先这个股票是有时间顺序这一性质在里面的,所以需要使用数组来表征该性质。其次,购买股票有限制条件,所以就要求我们记录持有股票和没有持有股票两种状态。其实就是利用时间顺序对枚举进行剪枝。

10

你好大佬,八股文指的是那些

展开全部 16 讨论