2020腾讯视频实习生面试

能获得腾讯视频技术部所给出的实习生面试机会,真的很感激我的一位素未谋面过的学姐。何德何能,能获得腾讯公司的面试资格。那我从获取面试机会到一面和二面开始说起。

腾讯暑期实习生开招,到官网上看了一下,填了技术方向的简历,前三步,都是基本信息,我很快填完,但是到了最后一步,一看我就有些发愁,需要填写学生干部任职情况,奖学金情况,参加比赛的经历以及证明。当时我就劝退了,无奈大学三年没有任何出彩经历。于是我便放下了简历填写,开始摸鱼了。

但是非常巧的是,过了一天,腾讯里的一位小姐姐居然给我打了电话,问我是不是填写了后台开发方向的简历没有填写完整,我说是,于是她问了我在大学期间有没有做过什么项目,都是怎么学习的。我如实回答:大学里面喜欢阅读一些编程书籍,有时候上网上找一些项目做,但都是很简单的项目,使用过spring boot和Vue框架,学过android 开发…blabla之类的。 后来小姐姐说那你把简历给我发一份来,我们给你安排一个面试。于是我赶紧把简历上面的项目附上地址,完善了一下README.md,把简历发送到小姐姐的邮箱里了。

于是便开始了实习生面试。

为了准备面试赶紧开始复习计算机网络,数据结构,认为一面不会问太多的项目,就没有怎么准备项目(我这是大错特错!!项目一定要认真准备!!面试官会问!!)

一面

一面问到的问题:

面试官:我看你项目里有spring,那你跟我说说MVC是怎么个原理

我:Model View Controller。 Model的数据映射到View上面,View的数据改变经过Controller会反馈给Model,Controller用来做一些逻辑处理。(我也不知道对不对)

面试官:你数据库MySQL,说说MySQL的存储引擎

我:只知道两个 Innodb,Myisam。其他的都不知道了。(Innodb表级锁和行级锁,行级锁建立在索引上的 Myisam 表级锁)

面试官:说说mysql有几种索引。

我:外键,主键,blabla说了好多不知所以的东西,其实我也不知道有几种索引。。。。

面试官又问了 B和B+树的区别,B+树查找的复杂度,如果使用B+树,那么 between语句的时间复杂度是多少。

后来又问了问我的项目,比如我的电子商务平台(很low的一个课后小项目)是怎么样的,怎么设计的接口。我说没有接口,直接使用JSP实现的。。。。

然后又聊了聊其他的项目,问我的android 的项目是否打包了,我说是打包了,可以运行在手机上面。

我又说了我的那个东软云医院的项目(课设项目)blabla,所以说要面试,得让面试官有的问才行啊。。虽然我的这些项目经历,跟我们同届的好多同学比起来还是很law的。。

后来开始写代码:

面试官:设计一个二叉树节点吧

心想(那么多leetcode,就算算法不会写,二叉树的节点可是信手拈来啊)

很快写完了

struct Node
{
    int val;
    Node* left;
    Node* right;
    Node(int v):val(v),left(NULL),right(NULL){}
    Node():val(0),left(NULL),right(NULL){}
    int freq;//在写插入的时候增加的
}

面试官:写一个插入

我瞬间感觉无助,硬着头皮写,坑坑憋憋的写完了

void insert(Node* root,int val)
{
    if(root==NULL) 
    {
        root = new Node(val);
        return;
    }
    while(root->left!=NULL || root->right!=NULL)
    {
        if(root->val > val)
        {
            root = root->left;
        }else if(root->val == val)//这个是临时加的,如果相等,直接增加节点的频率
        {
            root->freq++;
        }else
        {
            root = root->right;
        }
    }
    if(root->val > val) 
        root->left = new Node(val); 
    else 
        root->right = new Node(val);
}//过了一天之后,再看一遍代码,发现是错的!!!!!!
//正确版本
void insert(Node* root,int val)
{
    if(root==NULL)
    {
        root = new Node(val);
        return;
    }
    Node* pre;
    while(root!=NULL)
    {
        pre=root;
        if(root->val > val)
        {
            root = root->left;
        }else if(root->val == val)
        {
            root->freq++;
        }else
        {
            root = root->right;
        }
    }
    if(pre->val > val) pre->left = new Node(val);else pre->right = new Node(val)
}

面试官:你写个递归的,二叉树插入基本都是递归的

Node* Insert(Node* root,int val) //这个是在面试官让我测试之后修改的。
{
    if(root==NULL)
    {
        Node* n = new Node(val);
        return n;
    }else
    {
        if(root->val > val)
        {
            root->left = Insert(root->left,val);
        }else if(root->val ==val)
        {
            root->freq ++;
        }else
        {
            root->right = Insert(root->right,val);
        }
    }
    return root;
} 

面试官:写个中序遍历

void track(Node* root)
{
    if(root!=NULL)
    {
        track(root->left);
        cout<<root->val<<endl;
        track(root->right);
    }
}//然后让我说说中序遍历的栈的实现 -打个点明天写
//用栈实现的
void track_(Node* root)
{
    stack<Node*> s;
    while(root!=NULL)
    {
        s.push(root);
        root=root->left;
    }

    while(!s.empty())
    {
        Node* tmp = s.top();
        s.pop();
        cout<<tmp->val<<endl;
        if(tmp->right!=NULL)
        {
            Node* t1 = tmp->right;
            while(t1!=NULL)
            {
                s.push(t1);
                t1 = t1->left;
            }
        }
    }
}

面试官:写个main方法测试一下

int main()
{
    Node* root = new Node(1);
    //insert(root,2);
    //insert(root,3);
    Insert(root,2);
    Insert(root,3);
    track(root);
}

最后面试官又看看我的简历,你系统都部署在window上吗

没有,也有在linux上面部署,当时为了学习docker

没想到后来面试官又问了一个docker的问题,docker rm [容器名字] 做了什么?

我猜测是做了一个存档。

后来就马马虎虎过去了。。

二面

二面,重点!!二面的小姐姐就是一开始给我打电话的,真没想到竟然是我的学姐,真的是感激啊,要没有学姐,估计我连这次面试的机会都没有。

简单的打招呼之后,切入正题

先问了我一个内容,从我打开网址v.qq 显示这段时间,都发生了什么?

我说 dns dhcp 协议 http tcp/ip blabla 感觉自己的表述能力还是不行。。。

一道sql问题:找出所有课程成绩都大于80分的学生姓名

张三数学90
张三语文76
李四数学73
李四语文90
王五语文90
王五数学89
王五英语97

一开始没有思路,在面试官的百般提示之下,我才写对。核心就是用所有的人的名字,减去成绩小于80分的学生的名字。简直太妙了!!!

select distinct(name) from table where name not in (select name from table where score <=80);

2,读取一个文件,将文件中的单词按照字典序排序,并且输出每个单词的个数

我蒙了,如何读取文件,用c++!!!

后来面试官说你可以输入一个字符串

我sb一样的直接 string s; cin>> s;没有考虑这个不会读入空格!!!!因为这个我调了五分钟的bug!!!!简直丢人了。。。

后来还好把代码改对了

#include<bits/stdc++.h>
using namespace std;
bool cmp(string a1,string a2)
{
    int len = min(a1.size(),a2.size());
    for(int i = 0; i<len; i++)
    {
        if(a1[i]<a2[i]) return true;
        else if(a1[i]>a2[i]) return false;
    }
    return a1.size()<a2.size();
}
int main()
{
    string s;
    getline(cin,s);
    string word="";
    vector<string> res;

    map<string,int> m;
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i]==32)
        {
            //cout<<word<<endl;
            string tmp = word;
            res.push_back(tmp);
            m[word]++;
            word="";
        }else
        {
            word+=s[i];
        }
    }
    res.push_back(word);
    m[word]++;
    sort(res.begin(),res.end(),cmp);
    cout<<"单词字典序"<<endl;
    string w="";
    for(int i = 0; i < res.size(); i++)
    {
        if(w==res[i])continue;
        w = res[i];
        cout<<res[i]<<"  "<<m[res[i]]<<endl;
    }
} //打个点  -明天写c++的文件读写。
//文件读写 
ifstream ifs;
ifs.open("test.txt",ios_base::in);
char c;
while(ifs.good())
{
    c=ifs.get();
    if(c==32)
    {
        res.push_back(word);
        m[word]++;
        word="";
    }else
    {
        word+=c;
    }
}

然后就是leader来面我了,简直不要太囧了。。。

一针见血,你这些项目都是刷的项目吧(的确很明显看出来像是刷的,我的项目都是把地址一说,然后其他的啥也没了,写了又三四个 -ps:以后写简历项目还是要简洁的叙述一下啊。。。。)

你的项目有什么难点,数据库怎么设计的,都有那些表,分表了吗,业务都有什么,你是怎么组合表的,外键是怎么设计的,为什么数据库要有数据的冗余,数据库的范式为什么(事务的完整性,一致性),

jwt具体是怎么用的,啊?你就是这么用的jwt啊?哪有这么用的?你说说jwt和session的用处

你密码直接明文存储啊?哪有你这样的?

什么,前端数据的映射,这有啥难的啊?直接把这个值存在数据库就可以了啊?

什么是常数项表?还要有这些?

NAT知道不,如何使用外部的设备直接访问,内部的路由器? NAT穿透都有哪些方式?
这个leader还非常的好,每当我说错的时候,或者不会的时候都会去认真的为我解答。
真的,我面试也太幸运了,遇到了好的面试官!!

blabla说了好多,知道我几斤几两了。。。。

更多推荐

2020腾讯视频实习生面试