2020 腾讯实习生面经
3094
2020.10.21
2020.10.21
发布于 未知归属地

b67a2d1feb557bec7b41c86c2f1e99b4.jpg

一 、时间安排

  • 2020/4/3 下午,后台开发一面
  • 2020/4/3 晚上,后台开发二面
  • 2020/4/14 上午,数据分析一面
  • 2020/4/26 晚上,正式批笔试
  • 2020/5/18 下午,正式批一面

二、后台开发一面

腾讯的一面很简单干脆,使用的在线面试功能,首先面试官给了我 6 道题,限时 50min,没有屏幕共享,所以可以上网搜索搜索 2333,不过我还是自己写的;写完题后简单讨论了一下思路,然后问了操作系统,计算机网络的一些基础知识,项目经历说的很多。

由于忘了录音,就简单记录一下我记得的部分。

项目经历

  • 简要介绍你们的项目(网安)
  • 你们这个项目中为什么要用到逆向分析?

操作系统

  • 虚拟地址如何映射到物理地址?
  • 你了解 IO 复用吗?
  • 有没有写过并发程序?

Linux

  • 你了解 select 和 epoch 的区别吗?

计算机网络

  • 你了解 HTTPS 的连接过程吗?

编程语言(C++)

  • 你了解 C++ 的多态是怎么实现的吗?
  • 你知道 C++ 中为什么要 extern C 吗?

其他

  • 你有什么问题想问我?(标准结局)
    • 问一下公司的加班情况以及技术氛围
    • 我想知道一下你对我这次面试的评价(不评价,会推给下一个面试官)

题目部分

1、找出其中不含有重复字符的最长连续子串的长度

C++
int lengthOfLongestSubstring(string s){
    unordered_map<char, bool> mMap;
    int fast = 0;
    int slow = 0;
    int maxLen = 0;
    while(fast < s.size()){
        if(mMap[s[fast]]){
            mMap[s[slow]] = false;
            slow++;
        }
        else{
            if(fast - slow > maxLen)
                maxLen = fast - slow;
            mMap[s[fast]] = true;
            fast++;
        }
    }
    return maxLen + 1;
}

2、有一个字符串列表,从中找出按字典序最大和最小的串。

C++
void find(vector<string> strlist, string& strmin, string& strmax){
    if(strlist.size() == 0)
        return;
    strmin = strlist[0];
    strmax = strlist[0];
    for(int i = 1; i < strlist.size(); ++i){
        if(strlist[i] < strmin)
            strmin = strlist[i];
        if(strlist[i] > strmax)
            strmax = strlist[i];
    }
}

3、从有序链表中去除重复的元素

  • (1, 1, 3, 3, 3, 5, 5, 5, 9, 9, 9, 9) -> (1, 3, 5, 9)
  • 这个题没有看到有序。。。
C++
struct LinkNode {
int val;
struct LinkNode * next;
};

void remove( LinkNode * head ){
    if(!head) return;
    unordered_map<int, bool> mMap;
    while(head && head->next){
        if(mMap[head->next->val]){
            struct LinkNode* temp = head->next;
            head->next = head->next->next;
            free(temp);
        }
        else{
            mMap[head->next->val] = true;
        }
        head = head->next;
    }
}

4、有一个二叉树,每个节点的值是一个整数。写一个函数,判断这颗树中是否存在从根到叶子节点的一个路径,这个路径上所有节点之和为某一个值。存在返回1,否则返回0。

C++
struct TreeNode {
  int value;
  struct TreeNode * left, * right;
};

int haspath(struct TreeNode * root, int value){
    if(!root) return (value == 0);
    if(haspath(root->left, (value - root->value)))
        return 1;
    if(haspath(root->right, (value - root->value)))
        return 1;
    return 0;
}

5、算一下从1到N中,“1” 在每个数出现的次数之和

6、(逻辑题)费南德的金币游戏:

  • 费南德和你抢到 20 个银币和一个金币;
  • 你们的分赃规则:
    • a. 俩人轮流拿,每次至少拿一个最多不能超过四个(可以等于四个);
    • b. 金币和银币不能混合拿,金币最后拿;
  • 如果由你先拿,怎么才可以拿到那个金币?

我的思路是要让对方拿到第 20 个银币,就得自己先拿到第 19 个银币,两个人轮流拿,可以控制周期为 5,控制每轮两个人拿的银币数目为5个,因此 19->14->9->4,所以最开始需要拿 4 个银币。

三、后台开发二面

u1s1,这二面来得太快了,tx 效率....

二面是项目面,上来让我介绍项目,balabala 把自己的自我介绍念了一遍,感觉还 ok。然后整个过程面试官就问了一个问题,你在项目中遇到了哪些难点,是怎么解决的?

像以前一样把逆向讲了一遍,ok,fine 他不懂,Wannacry 也不知道,然后问我其他项目还有没有,但我还没开始编。。。然后就扯了一下计网课设,然后就到标准结局了,他表示如果过了还有一个技术面,具体方向不告诉我。。。感觉应该是tx难点

所以,大家一定要先编好故事.jpg ——来自半小时结束二面的教训

四、数据分析一面

之前的后台开发二面凉了,后来又被腾讯云捞到了技术分析岗,一面面试官迟到一小时,非技术面,很迷。

大致面试流程和提问如下:

  • 个人介绍(项目介绍)
  • 你在整个大学生活中项目、学习、生活的占比是怎么样的?
  • 你自己的职业规划是怎么样的?
  • 你对在公司的工作环境有没有什么要求?
  • 你接触过哪些编程语言,可以举出最熟悉的两门语言吗?
  • 有没有接触过什么开源项目?
  • 你在学校的加权成绩怎么样?
  • 你个人觉得自己的闪光点有哪些?
  • 能举例证明自己的学习能力很强吗?
  • 你对我还有什么问题吗(标准结局)?
    • 问对方部门的情况
    • 问对方对自己的评价

五、正式批笔试

不得不说,腾讯的笔试是最近几个公司里面最像笔试的,其他的都整的像 ACM 笔试一样,一共五道题,AC 了 3.6 道,感觉还 okk

T1 模拟队列

有一说一,C++ 有队列哦,所以对输入的字符串进行处理,然后调用队列就好了,基本上签到题。

T2 求点集的最短距离

题目如下

  • 感觉自己只会暴力,dalao 说的方法都听不懂 hhhhh

T3 翻牌游戏

看到题目就不明觉厉,所以一直都没写,有人说用 dfs,咱也不知道,先放着,有时间来填坑

T4 用两个栈实现队列

比较经典的一道题,不知道有没有设置时间复杂度,代码可以写得很优雅。

C++
int main()
{
    int n;
    cin >> n;
    stack<int> s1;
    stack<int> s2;
    int k;
    int now = 0;
    for(int i = 0; i < n; ++i){
        string s;
        cin >> s;
        if(s == "add"){
            cin >> k;
            if(now == 1){
                while(!s2.empty()){
                    s1.push(s2.top());
                    s2.pop();
                }
                now = 0;
            }
            s1.push(k);
        }
        else if(s == "peek"){
            if(now == 0){
                while(!s1.empty()){
                    s2.push(s1.top());
                    s1.pop();
                }
                now = 1;
            }
            cout << s2.top() << endl;
        }
        else if(s == "poll"){
            if(now == 0){
                while(!s1.empty()){
                    s2.push(s1.top());
                    s1.pop();
                }
                now = 1;
            }
            s2.pop();
        }
    }
    return 0;
}

T5 一道数学题

  • 实际上求个 log 确定层数,然后移位就好了
  • 需要注意的是大数问题,用 long long 即可

C++
int main(){
    int n,x,k,t;
    cin >> n;
    for(int i = 0; i < n; ++i){
        cin >> x >> k;
        t = log(x) / log(2);
        if(t < k)
            cout << -1 << endl;
        else{
            cout << int(x/pow(2, t-k+1)) << endl;
        }
    }
    return 0;
}

六、正式批一面

直接被锤爆,根本没问项目,直接从网络安全,计网,操作系统,C++,数据库,分布式,数据结构等方面把我锤了,锤得稀巴烂,近期不投不面了,有阴影。

感觉准备不充分,太久没面技术面了,自我技术都说的磕磕碰碰,他也不咋问项目,直接开捶我。

网络安全

  • 你了解 Web 安全吗,能说一下相关的攻击方式及防御机制吗?
  • 你能简单说一下 DDos 攻击吗?
  • 你了解对称加密吗,能说一下你知道的对称加密算法吗(这里还提到了某个 hash 算法,没听说过)?

计网

  • 你知道 tcp 包里的校验和有什么用?是怎么实现的?
  • 你知道 tcp 为什么要三次握手,而不是两次?
  • 你知道 tcp 过程中有哪保障数据包数据有效的操作?

操作系统

  • 你知道哪些进线程通信的方法?
  • 你知道哪些高性能 IO 的方法?

C++

  • 你知道 C++11 有哪些新特性吗?
  • 你知道右值引用解决了什么问题吗?

数据库

  • 你平时用过哪些数据库?
  • 你知道 mongodb 的高并发数据啥啥啥是怎么实现的吗?

分布式

  • 你有接触过哪些组件吗(举的例子完全不知道)?
  • 你有接触过哪些分布式的架构?
  • 你知道微服务吗?

数据结构

  • 你了解红黑树吗?B 树 B+ 树呢?
评论 (1)