c++研发暑期实习面试总结(微软/intel/阿里/百度)

到现在差不多也定好了实习。
晚上简单做个总结。可能有些也记不太清楚了。唉我真的很懒很废物。
明天随着其其的新歌重新开始。


本人研二,大学期间拿过区域赛银牌,然后硕士期间发了一篇VLDB。缺项目经验和实习经验。
找的实习是C++研发。
一方面考虑到是自己最右安全感的语言,另一方面想要职业寿命久一些:我的想法是想搞底层、越深入越好。

微软(有offer,没去

苏州CMD 软件工程师
微软的面试上主要是看数据结构和算法,面试官会仔细沟通算法的复杂度和详细思路。等沟通通过了再让你开始写。
一二面平行面,进了任意一面可进终面。

一面

给一个数组,找到正好有k个奇数的区间数量。
尺取法。

#include 
using namespace std;
const int INF = 0x3f3f3f3f;
const int NMAX = 10010;
int n, k;
int x[NMAX];
int r1[NMAX], r2[NMAX];

int main(){
    while(~scanf("%d%d",&n, &k)){
        //输入
        for(int i=0; i<n; i++){
            scanf("%d",&x[i]);
        }
        //找初始左端点的k个奇数
        int cnt=0, r=0;
        for(r=0; r<n; r++){
            if(x[r]%2) cnt++;
            if(cnt==k) break;
        }
        //无法找到k个奇数
        if(r==n){
            printf("无法找到-1\n");
            continue;
        }
        //对每个左端点找正好为k个奇数的最右端点
        memset(r1,-1,sizeof(r1));
        int l=0;
        printf("r1:");
        while(l<n){
            r1[l] = r;
            cout<<r1[l]<<" ";
            if(x[l]%2){
                r++;
                while(r<n &&x[r]%2==0)r++;
                //已经不再找到k个
                if(r==n) break;
            }
            l++;
        }cout<<endl;
        //对每个左端点找k+1,确定对0有没有
        int tot=0;
        printf("r2:");
        int rr=r1[0]+1;
        while(rr<n && x[rr]%2==0)rr++;
        l=0;
        while(l<n && r1[l]!=-1){
            printf("%d ",rr);
            tot += rr-r1[l];
            if(x[l]%2){
                rr++;
                while(rr<n &&x[rr]%2==0)rr++;
            }
            l++;
        }cout<<endl;

//        for(int i=0; i
//            if(r1[i]<0){
//                break;
//            }
//            int rr=r1[i]+1;
//            while(rr
//            cout<
//            tot+=rr-r1[i];
//        }cout<
        printf("tot:%d\n", tot);
    }
    return 0;
}

二面

给一个map,其中有0有1,0是海岸,1是陆地。
离陆地最远的海洋是多远?
bfs把所有陆地放入其中。

#include
using namespace std;
const int INF = 0x3f3f3f3f;
const int NMAX = 1010;
typedef pair<int,int > P;
int mp[NMAX][NMAX],n,m;
int dis[NMAX][NMAX];
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};

void solve(){
    queue <P> q;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            if(mp[i][j]==1){
                q.push(P(i,j));
                dis[i][j]=0;
            }
            else{
                dis[i][j]=INF;
            }
        }
    }
    while(!q.empty()){
        P now = q.front();
        q.pop();
        for(int i=0; i<4; i++){
            int nx = now.first+dx[i];
            int ny = now.second+dy[i];
            if(nx>=0 && nx<n &&ny>=0 && ny<m
               && dis[nx][ny]>dis[now.first][now.second]+1){
                dis[nx][ny]=dis[now.first][now.second]+1;
                q.push(P(nx,ny));
            }
        }
    }
    int mxdis=0;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            mxdis = max(mxdis, dis[i][j]);
        }
    }
    printf("%d\n",mxdis);
}

int main(){
    while(~scanf("%d%d", &n,&m)){
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                scanf("%d", &mp[i][j]);
            }
        }
        solve();
    }
    return 0;
}

终面

给出一些docker的启动顺序,问启动所有docker至少需要多久。
拓扑序。

Intel(有offer,去的

上海flex。

二合一面,一共有快俩小时。
两个面试官轮流问计算机基础问题。包括:

  • C++基础基本上问了遍:拷贝构造和赋值分别咋写、const、static、const指针和指针const、虚函数表、静态动态绑定、new delete实质、new一个对象的全过程……
  • 计算机网络:三次握手、四次握手、重传、拥塞……
  • STL:set\map(红黑树)B树、B+树、vector\list区别……
  • Linux:内存命令、用户态内核态切换、熟悉的命令……

也被问到了很多答不上来的,每一科都会问到知道的最深部分为止吧。
题目用的是leetcode答题系统。
一道是层序遍历二叉树
另一道是流的形式去找中值,用两个堆来实现(一个最大堆、一个最小堆)。

阿里

阿里云(hr面挂

一面

算法题:
1.手写最大堆、插入、弹出。
2.dijkstra
3.dp问题?是啥dp我忘了反正不太难吧。

二面

随便聊了点有的没的。
题目是手写stack实现,用的指针方式。
leader说有上海base。

hr面

hr说并没有上海base。
当时一心只想要上海的base。是我动手拒的(sorry(实在是人还没被关够

本地生活 (二面挂

一面

体验感还行。也比较有礼貌。
但是问的知识面有些鸡同鸭讲,我的论文做的复杂度降低。
主要问C++11的特性。
代码:手写智能指针shared_ptr。

二面

我被恶心坏了。
昨天加我微信约面试时间的时候,问了一句:你是女生?当时我就有种不太妙的感觉。

今天迟到一个多小时。
对着我的简历一条条打压我。
说我竞赛成绩不好、看着没啥优点、总结一下我的优点是我作为一个女生还算聪明。呵呵。
然后出了道very easy的字符串解析,做完就挂我。

fine。这个世界上人类就是有各种各样的。

百度(一面挂

感觉上海base hc不够的样子,我理解啦)

英特尔问过的没问过的问题所有基础知识都有问。
再加上了数据库方面的问题、建索引的策略……
这次准备的基本上都能答上。

题目:
1.大整数(字符串)相加
2.链表删除连续相同值


最后谈谈我的想法吧。

暑期实习其实对后面秋招还蛮重要的。如果在春招直接踏入996的生活,除了转正很难再做别的打算。虽然大部分人都会直接选择实习转正,但我不想。
英特尔我看了所有风评都很不错,那边会有专人一对一,带实习生入门,然后工作时间955不加班。而且也和我接触底层的想法相契合。
留下的话是著名养老院,福利不错。即使不留下,这段实习既能为秋招加点码,也不耽误准备。
(暑假自己还想再考个日语,攒钱攒语言攒业务能力,有机会潤就好了。

你可能感兴趣的:(c++,面试,数据结构)