腾讯云基础架构部门
约 1840 字大约 6 分钟
2025-02-25
不知道为什么英伟达驱动自带的录屏只录了前面两分钟,后面就没了。下次开obs录吧,录屏仅供事后复盘。现在凭记忆记录一下。
一面
一上来面试官先自我介绍,腾讯TEG云架构平台部,他们是做存储的。后面也问了一些存储的,可是我不是这方向的,尽管有很多看过听过,但都没深入了解过,面试官问起来只能说不懂。
后面手撕,最长递增子序列,有印象,但不多,尝试写了一会之后,想起来好像是动态规划,再试了一下,写出来了。但是还是最后返回结果的时候,不应该是dp[n-1],而是应该是max(dp)。这点被面试官提醒了。 手撕完之后就是正常面试环节
- 了解raft选举过程吗,我说我看过6.824.但是都忘了,面试官问我论文,我说看过,但是真的忘了,都好久了事了。
- 了解数据库吗,mysql,redis,mongodb,我说用过前两个。但还是没深入了解过。后面也没问了。
- 了解跳表和布隆过滤器吗,我其实听过也看过,跳表我印象中就是一个高效的数据结构,用来查找存储数据。布隆过滤器的印象在数据库中好像有,具体干什么我也忘了。这两个我也直接说不知道了
- C++上来给了一道代码题,问你输出,我把代码贴在下面。这个代码应该从程序的内存布局角度来考虑,就能答上来了。我当时不知道怎么想,虚函数说错了,后面面试官思路提醒下,才说对。代码的输出我私下也跑过了。
class Test {
constexpr static int a = 100;
int b = 200;
public:
void PrintA() { std::cout << "a=" << a << std::endl; }
void PrintB() { std::cout << "b=" << b << std::endl; }
void FuncA() { std::cout << "hello world..." << std::endl; }
static void FuncB() { std::cout << "a=" << a << std::endl; }
virtual void FuncC() { std::cout << "hello world 3!" << std::endl; }
};
int main() {
Test *ptr = nullptr;
// 下面几个函数的调用, 分别会发生什么, 给出输出预期以及具体原因.
//ptr-> PrintA(); //输出a=100
//ptr-> PrintB(); //报错
//ptr-> FuncA(); //输出hello world...
//ptr-> FuncB(); //输出a=100
//ptr-> FuncC();//报错 昨天这里说错了在他提醒下说对了
return 0;
}
- thread_local的作用。
- 让我设计一个全局计数器,如何来设计。我就说一个锁,一个原子变量。他没追问了。
- 内存序,六个,我说知道,具体记不清了,他也理解。
- 智能指针,这个正常说,也没往深处问
- 使用grep从文件中读取某一行信息,这个过程中,操作系统会干什么,说的越细越好。我也不知道我说的细不细
- 异步IO,听说过AIO,BIO吗。异步IO我知道,那两个IO没听过。
- 拷打项目
- 反问环节
最大的问题是面我的面试官,是他们TEG云架构平台部下面的小部门做存储的,简历上项目和存储没有一点关系,当时觉得为什么要面呢,当时觉得肯定凉了。
当晚流程显示进入复试,但是时至3.1号都没有约2面。但我看牛客网上有人说,长时间不约二面等于挂了。祝我好运吧。
二面
现在看来纯纯kpi,面试一开始纯聊天,问我哪人,我说江苏扬州,他说工作地点深圳怎么看的,我说没问题。接着又反问我,不应该更倾向于上海和杭州吗,我又和他说了一次无所谓,去哪都一样。后面又问我对分布式有哪些了解,我只记得本科学的Hadoop和他说一通,这样大概半小时过去了,让我做题。还问我一面写的什么题,写出来没有,我实话实话,整体思路没问题,在最后结果上被面试官提醒了。
第一题大概是力扣上的螺旋矩阵,但不完全一样大概如下:
给定一个数字 n
直接输出他的螺旋矩阵:
输入示例:4
输出示例
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
我大概采用了力扣上的思路,构造了一个 n*n
的矩阵往里面螺旋填数,写好之后,面试官说他的意思是要直接打印出来这个矩阵,不要用矩阵填数这种思路,我当时楞了一下,后面她看看说你这样也可以吧。后面又做了一题打印Zig矩阵的。 他的思路我大概知道,只是当时没想过,后面我用大模型写了一个如下:
// 计算 (i, j) 位置的值
int getSpiralValue(int i, int j, int n) {
// 计算当前层的最小值
int layer = min(min(i, n - 1 - i), min(j, n - 1 - j));
// 计算当前层的起始值
int startValue = 4 * layer * (n - layer);
// 根据位置确定具体值
if (i == layer) { // 顶部行
return startValue + (j - layer) + 1;
} else if (j == n - 1 - layer) { // 右侧列
return startValue + (n - 2 * layer - 1) + (i - layer) + 1;
} else if (i == n - 1 - layer) { // 底部行
return startValue + 2 * (n - 2 * layer - 1) + (n - 1 - layer - j) + 1;
} else { // 左侧列
return startValue + 3 * (n - 2 * layer - 1) + (n - 1 - layer - i) + 1;
}
}
void printSpiralMatrix(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << getSpiralValue(i, j, n) << "\t";
}
cout << endl;
}
}
第二题就是打印一个Z字形的矩阵 输入示例:4 输出示例:
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
我的思路就是对角线上坐标 i+j等于一个定值,然后转变方向就可以了。延用往数组里填值的思路。整个代码就差一点点就可以通过了,当时查了半天不知道哪问题,他那界面又不好debug,最后我和他说实在找不出来,他就直接进行反问环节了。 代码我放在下面,第16行注释是原来我写的,问题就出现在这,最后一个数填进去的时候,下标会溢出了。
void printzigarray(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int val = 1;
int x = 0;
int y = 0;
int s = 0; // 对角线和
int flag = 1; // 控制方向
res[0][0] = val;
val++;
while (val <= n * n) {
s++;
if (s > (n - 1)) { // 下半部分
//int temp = s % (n - 1);
int temp = s - (n - 1);
if (flag % 2 == 1) {
x = temp;
y = s - temp;
res[x][y] = val;
val++;
while (y > temp) {
x++;
y--;
res[x][y] = val;
val++;
}
} else {
y = temp;
x = s - y;
res[x][y] = val;
val++;
while (x > temp) {
y++;
x--;
res[x][y] = val;
val++;
}
}
} else { // 上半部分
if (flag % 2 == 1) {
x = 0;
y = s;
res[x][y] = val;
val++;
while (y > 0) {
x++;
y--;
res[x][y] = val;
val++;
}
} else {
y = 0;
x = s;
res[x][y] = val;
val++;
while (x > 0) {
y++;
x--;
res[x][y] = val;
val++;
}
}
}
flag++;
}
// 输出矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << res[i][j] << " ";
}
cout << endl;
}
}
总结
TEG云架构平台
- 2.19 约 2.25 一面 一个小时秒过。
- 3.3 约 3.5 二面,怀疑kpi,纯聊天加做题,第一道做太快了,又做了一道,差一点做出来了,总共耗时1个半小时。第二天晚上挂了。
更新日志
c1df8
-update tencent teg machine learing platform于