二面阿里广告营销部门的引擎架构团队
面的是研发工程师C/C++
没回答上来的问题
new和malloc的区别(底层区别)
malloc是C语言中申请内存的函数,这个函数实现的功能是仅仅申请大小为 $size$ 的空间,并返回 $void*$ 类型。
而new是C++语言中创建一个新的对象的关键字,new同样也完成申请内存的功能,但是new不需要指定具体内存大小,new会通过对象的类型来计算出需要申请的空间的大小。
最大的区别:new在申请完空间之后会调用对象的构造函数,而malloc是仅仅申请空间,不会调用构造函数。
同样,delete会在调用对象的析构函数之后将空间释放掉,而free是仅仅释放空间。
vector和queue的内部实现区别
vector的底层实现,vector扩容时调用复制构造函数吗
map和unordered_map的区别,内部实现,以及在什么情况下使用哪个,在什么数量级上使用哪个
linux中进程和线程的相同点及区别,更深层次的
对我的建议
- 我对stl底层实现还是很不熟悉,建议我多了解了解stl底层实现
- 去了解了解linux中的数据结构
问的问题
语言方面
- 谈一谈对static和const的理解
- 谈一谈对new和malloc的理解,以及区别,底层实现的区别
- 谈一谈对vector和queue的理解,也是更深层次的,并提问了关于这方面的问题
- 谈一谈对map和unordered_map的理解,也是深层次,并提问了关于这方面的问题
操作系统方面
- 谈一谈对linux中进程和线程的相同点及区别
现场编程
给了一道题(力扣上的原题)
给定一个字符串,求这个字符串中“不含相同字母的最长的字串”。
我的代码
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输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1
const int MAXN = 100005;
char s[MAXN];
int n;
int solve() {
scanf("%s", s + 1);
n = strlen(s + 1);
if(n == 0)
return 0;
int ans = 1;
int l = 1, r = 1;
int flag = 0;
0000000000000
->a
0000000000001
->b
0000000000011
flag |= 1 << (s[1] - 'a');
while(r < n) {
if(flag & (1 << (s[r + 1] - 'a'))) {
while(s[l] != s[r + 1]) {
flag ^= 1 << (s[l] - 'a');
++l;
}
++l;
}
++r;
flag |= 1 << (s[r] - 'a');
ans = max(ans, r - l + 1);
}
return ans;
}感觉这个部分对我挺加分的,写完之后,面试官问我关于flag优化的东西,说对这个flag很感兴趣,让我讲一下这个。
我问他问题
后面还会有几轮面试,以及面试的性质
- 后面还会有1-2轮面试,大概一周两周内可能会来找我,依然是技术面,之后可能还会有一场HR面。
对我的建议
在上面
总结
感觉印象还是挺好的,但是我对stl的底层还是不太熟悉,以及操作系统的底层,需要去了解一下这些。