京东一面+二面(Golang开发),网易一面(游戏开发工程师)

京东岗位我报的有点魔幻,我从事C++岗位的,牛客上写Golang要求C++或者Go其中一种,直接就报了。
还是太年轻,笔试大多都go的题,收到面试走*运(全都是蒙的,算法题只写了第一道)。
京东一面(40min):

(1)如何判断链表有环(快慢指针,一个跳1,一个跳2,我回答的拓扑,很尴尬,一度尴尬,互相傻笑)。

(2)计算机网络有几层,传输层的协议。(普遍接收的五层,TCP/UDP)

(3)写一个二叉树中序遍历

(4)Python中with的用法

京东二面(1h):

(1)多个有序链表合并(我用的优先队列)。复杂度nlog(k),用c++写的,感觉他们很抠我的实现,以后实现要严谨一点。
(2)手写高精度乘法。这个我有点小惊讶,打acm的时候一直用的是模板,写过两次但是都得debug好一会,不过还好这次是写出来了。
战果展示:

#include<bits/stdc++.h>
using namespace std; const int maxn = 1e5+10;
string add(string xx,string yy){
    //615yy 4920xx
    reverse(xx.begin(),xx.end());
    reverse(yy.begin(),yy.end());
    string res="";
    if(xx.size()<yy.size()) swap(xx,yy);
    int mm=max(xx.size(),yy.size());
    int mi=min(xx.size(),yy.size());
    int jinwei=0;
    for(int i=0;i<mm;i++){
        if(i>=mi){
            int t=(xx[i]-'0'+jinwei)%10;
            jinwei=(xx[i]-'0'+jinwei)/10;
            res+=t+'0';
        }
        else{
            int t=(xx[i]+yy[i]-'0'-'0'+jinwei)%10;
            jinwei=(xx[i]+yy[i]-'0'-'0'+jinwei)/10;
            res+=t+'0';
        }
    }
    if(jinwei) res+=jinwei+'0';
    reverse(res.begin(),res.end());
    return res;
}
string mul(const string &xx,const string &yy){
    //123 45
    string base="";
    string tmp="";
    string res="0";
    for(int i=yy.size()-1;i>=0;i--){
        base="";
        int a=yy[i]-'0';
        vector<int> t;
        int jinwei=0;
        for(int j=xx.size()-1;j>=0;j--){
            int b=xx[j]-'0';
            t.push_back((a*b+jinwei)%10);
            jinwei=(a*b+jinwei)/10;
        }
        if(jinwei) t.push_back(jinwei);
        reverse(t.begin(),t.end());
        for(auto k:t){
            base+=k+'0';
        }
        base+=tmp;
        cout<<base<<endl;
        tmp+='0';
        res=add(res,base);
    }
    return res;
}
int main(){
//    string res=mul("3","4");
//    cout<<res<<endl;
    string res=mul("1234","45");
    cout<<res<<endl;
}

收获:面试官让实现代码,冲着能正确运行去实现,不能只是把思路走一遍。每个面试官要求不一样,最后可能会抠细节甚至去考虑你没有特判的情况。所以起点和对自己的要求要高一点。这次传参数面试官提示我传const引用,平时写题总是忽略这个,一个良好的代码习惯也十分重要。

网易一面(1h):

(1)每次一步或者两步,输出到n的所有情况,不能用递归(bfs)

(2)TCP/UDP区别

(3)链表给你个t,小于t的放到左边,大于t的放到右边(这个找到第一个大于的,然后后面小于的一直往这前面插入就可以了,需要细心)

收获:面试官知道acm选手的弱点,就是指针和链表。他故意出了个这种题给我,我bug最后也没调出来,挺扣分的。
老实说,我感觉没怎么去专门写过链表,指针的这些操作,这些最基本的,效率最高的实现方法还需要继续去学习。

上一篇:ZJ2020.01.11【NOIP提高组】模拟B组


下一篇:CSP前的板子