讨论/求职面试/美团|后台实习生|上海|一面、二面|2021|/
美团|后台实习生|上海|一面、二面|2021|

时隔半个月又被美团捞起来了,面试官很和蔼,下次再来。准备面试后端的同学需要好好学习一下计算机网络跟OS。

八股文

  • TCP建立连接和断开连接的过程,断开连接为什么要四次挥手,Server 在发两次 ACK 之间在干什么?
  • HTTP的工作过程,OSI七层模型,HTTP、TCP、IP协议属于哪一层?
  • 对称加密和非对称加密
  • 消息队列是安全的还是非安全的?
  • redis 中有些数据使用链表实现,有些使用 BTree 实现的,他们两者有什么优劣势吗?
  • AVL树通过自旋来保证树的平衡,红黑树通过哪些措施来减少开销?
  • STL中vectorlist 的区别,讲一讲Java中的 HashMap 和 C++中的 Map
  • 说一说阻塞和非阻塞、异步和同步
  • 怎么解决数据传输过程中发生的“连包” 和 “断包”?
  • 说一下进程和线程,谁管理资源,进程间的通信方式
  • C++中的 violate关键字,读取的内存是指?
  • 说一下五种IO模型

算法题

请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图

const int N = 1e5 + 5;
class Solution {
public:
    int preIndex = 0;
    vector<int> g[N];
    vector<int> solve(vector<int>& preOrder, vector<int>& inOrder) {
        this->preIndex = 0;
        for (int k = 0; k < N; ++k) g[k].clear();
        
        int n = inOrder.size();
        dfs(preOrder, inOrder, 0, n - 1, 0);
        vector<int> ret;
        for (int k = 0; k < N and !g[k].empty(); ++k) ret.push_back(g[k].back());
        return ret;
    }
    
    void dfs(vector<int>& preOrder, vector<int>& inOrder, 
             int inLeft, int inRight, int layer) {
        if (inLeft > inRight) return ;
        int rootIndex = inLeft;
        while (inOrder[rootIndex] != preOrder[preIndex]) ++rootIndex;
        ++preIndex;
        dfs(preOrder, inOrder, inLeft, rootIndex - 1, layer + 1);
        g[layer].push_back(inOrder[rootIndex]);
        dfs(preOrder, inOrder, rootIndex + 1, inRight, layer + 1);
    }
};

反问

  • 国内公司在招聘实习生的时候都会问很多操作系统跟计算机网络的知识,我们称之为“八股文”,我想知道为什么互联网公司对着写需要背的东西这么重视?
  • 如何将根据书本上的知识来帮助解决实际工程应用中的难题?
5

Redis 哪个数据结构是用 BTree 实现的,求教

展开全部 13 讨论