写在前面
- 以下经历均为笔者和女友在2019年暑期实习的面试经历, 本文仅作我二人整理复盘之用, 请勿转载.
- FreeWheel只给了女友面试机会,并没有给我,可能是颜值差距过大 :P。
女友一面 (20190521, 62min)
- 自我介绍,项目
- MySQL数据引擎
- 虚函数,多态
- 在构造函数中调用虚函数会发生什么
- 01背包,手撕
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //给定长度广告位,给定一组需要投放的广告,每一个广告属性:价值,时长。
//第i个广告,价值c[i],长度w[i],总长度v,一共n个广告
//f[i][v] = max(f[i-1][v],f[i-1][v-w[i]]+c[i])
int solve(vector<int> value, vector<int> length, int n, int v)
{
vector<vector<int> > f(n+1, vector<int>(v+1,0));
for(int i=1; i<=n; i++)
{
for(int j=0; j<=v; j++)
f[i][j] = f[i-1][j];
for(int j=0; j+value[i]<=v; j++)
f[i][j] = max(f[i][j]+length[i], f[i-1][j+value[i]]);
}
int ans = 0;
for(int i=0; i<=v; i++)
ans = max(ans, f[n][i]);
return ans;
} |
//给定长度广告位,给定一组需要投放的广告,每一个广告属性:价值,时长。
//第i个广告,价值c[i],长度w[i],总长度v,一共n个广告
//f[i][v] = max(f[i-1][v],f[i-1][v-w[i]]+c[i])
int solve(vector<int> value, vector<int> length, int n, int v)
{
vector<vector<int> > f(n+1, vector<int>(v+1,0));
for(int i=1; i<=n; i++)
{
for(int j=0; j<=v; j++)
f[i][j] = f[i-1][j];
for(int j=0; j+value[i]<=v; j++)
f[i][j] = max(f[i][j]+length[i], f[i-1][j+value[i]]);
}
int ans = 0;
for(int i=0; i<=v; i++)
ans = max(ans, f[n][i]);
return ans;
}
- c++11新特性,实现智能指针
- 实现ShiftList,有函数get(), set(), shift, 例如 0, 1, 2, 3, shift1变成 3, 0, 1, 2。
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
52
53
54
| //ShiftList, get(),set(),shift, 0,1,2,3, shift1 3,0,1,2
struct Node
{
int val;
Node* next;
Node(int n):val(n), next(nullptr){}
};
class ShiftList{
private:
Node* head;
Node* end;
public:
ShiftList()
{
head = new Node(-1); //dummy
end = head;
}
Node* add(int val)
{
end->next = new Node(val);
end = end->next;
}
Node* get(int n)
{
Node* p = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
}
return p;
}
void set(int n, int val)
{
Node* p = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
}
p->val = ;
}
Node* shift(int n)
{
Node* p = head;
end->next = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
end = end->next;
}
head->next = p->next;
p->next = nullptr;
return head;
}
}; |
//ShiftList, get(),set(),shift, 0,1,2,3, shift1 3,0,1,2
struct Node
{
int val;
Node* next;
Node(int n):val(n), next(nullptr){}
};
class ShiftList{
private:
Node* head;
Node* end;
public:
ShiftList()
{
head = new Node(-1); //dummy
end = head;
}
Node* add(int val)
{
end->next = new Node(val);
end = end->next;
}
Node* get(int n)
{
Node* p = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
}
return p;
}
void set(int n, int val)
{
Node* p = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
}
p->val = ;
}
Node* shift(int n)
{
Node* p = head;
end->next = head->next;
for(int i=0; i<n; i++)
{
p = p->next;
end = end->next;
}
head->next = p->next;
p->next = nullptr;
return head;
}
};
女友二面 (20190521, 46min)
- inline函数
- c++内存模型,各个部分区别
- 单例模式
- Log 消息队列
- A="abcd", B="bcda", C="badc"
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
| bool solve(string a, string b)
{
if(a.size() != b.size())
return false;
unordered_map<char, int> ma;
unordered_map<char, int> mb;
for(int i=0; i<a.size(); i++)
{
ma[a[i]]++;
mb[b[i]]++;
}
if(ma == mb)
return true;
return false;
//A和C,交换一次
bool solve(string a, string b)
{
int count = 0;
set<char> sa;
for(int i=0; i<a.size(); i++)
{
if(a[i]!=b[i])
{
count++;
sa.insert(a[i]);
sa.insert(b[i]);
}
if(count>2 || sa.size()>2)
return false;
}
if(count == 2 && sa.size() == 2)
return true;
return false;
} |
bool solve(string a, string b)
{
if(a.size() != b.size())
return false;
unordered_map<char, int> ma;
unordered_map<char, int> mb;
for(int i=0; i<a.size(); i++)
{
ma[a[i]]++;
mb[b[i]]++;
}
if(ma == mb)
return true;
return false;
//A和C,交换一次
bool solve(string a, string b)
{
int count = 0;
set<char> sa;
for(int i=0; i<a.size(); i++)
{
if(a[i]!=b[i])
{
count++;
sa.insert(a[i]);
sa.insert(b[i]);
}
if(count>2 || sa.size()>2)
return false;
}
if(count == 2 && sa.size() == 2)
return true;
return false;
}
- dynamic_cast
女友三面 (20190524, 40min)
- 技术主管面,关注简历,技术栈之类的通用问题,此处不做记录了。