提问环节
项目
Q1:对Ceph了解吗,看过源码?
Q2:对Ceph调参,调的那些参数?
Q3:调优之后,场景变化之后,模型还可以复用吗?
Coding
Q1:删除链表倒数第N个节点
原题链接
代码:
#include <bits/stdc++.h>
using namespace std;
struct Node {
int val;
Node* next;
Node(int x): val(x) {}
Node(int x, Node* nxt): val(x), next(nxt) {}
};
class Solution {
public:
Node* deleteLastN(Node* head, int n) {
Node* hummyHead = new Node(0);
hummyHead -> next = head;
Node* pre = hummyHead;
Node* cur = head;
while (n--) {
cur = cur -> next;
}
while (cur) {
cur = cur -> next;
pre = pre -> next;
}
Node* temp = pre -> next;
pre -> next = pre -> next -> next;
delete temp;
return hummyHead -> next;
}
};
int main() {
Node* four = new Node(4, nullptr);
Node* three = new Node(3, four);
Node* two = new Node(2, three);
Node* one = new Node(1, two);
int n = 2;
Solution solution;
Node* ans = solution.deleteLastN(one, n);
Node* tmp = ans;
while (tmp) {
int val = tmp -> val;
cout << val << endl;
tmp = tmp -> next;
}
return 0;
}
存在不足:
- 没有对边界判断(N 大于链表长度)
- 删除的节点,内存没有释放
八股
Q1: delete 和 delete [] 区别
答案
Q2:sizeof 和 strlen 区别
A:答案
Q3: 定义一个char arr[n]; 以及一个函数 int fun(char[] arr) {return sizeof(arr)};问 sizeof(arr) 和 fun(arr)的输出
答案
测试代码:
#include <bits/stdc++.h>
using namespace std;
int fun(char* arr) {
return sizeof(arr);
}
int main() {
char *p = "abcdefghijk";
char p1[] = "abcdefghijk";
printf("sizeof=%d\n", sizeof(p)); // output: 4 指针所占内存大小
printf("strlen=%d\n", strlen(p)); // output: 11 字符数组\0之前所占内存大小
char arr[7] = {'1'};
cout << sizeof(arr) << endl; // output: 7 arr传给sizeof,作为数组名
cout << strlen(arr) << endl; // output: 1 字符数组\0之前所占内存大小
cout << fun(arr) << endl; // output: 4 arr作为实参传入,退化为指针
return 0;
}
Q4: 如何防止包含重复的头文件
答案
参考
Q5:进程和协程的区别
推荐答案
答案
反问环节
Q:对应届生的工程能力很看重吗?
A:不是特别看重,毕竟不是社招,但是会问一些工程上的细节问题,主要是多了解你,也方面日后给你安排岗位和项目、工作。