2019-05-29

【2019暑期实习】FreeWheel面经

写在前面

  • 以下经历均为笔者和女友在2019年暑期实习的面试经历, 本文仅作我二人整理复盘之用, 请勿转载.
  • FreeWheel只给了女友面试机会,并没有给我,可能是颜值差距过大 :P。

女友一面 (20190521, 62min)

  1. 自我介绍,项目
  2. MySQL数据引擎
  3. 虚函数,多态
  4. 在构造函数中调用虚函数会发生什么
  5. 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;
}
  1. c++11新特性,实现智能指针
  2. 实现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;
    }
};

女友二面 (20190521, 46min)

  1. inline函数
  2. c++内存模型,各个部分区别
  3. 单例模式
  4. Log 消息队列
  5. 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;
}
  1. dynamic_cast

女友三面 (20190524, 40min)

  1. 技术主管面,关注简历,技术栈之类的通用问题,此处不做记录了。
Share

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据