首页 > [阿里云]后端研发C/C++(实习生)5轮确认实习offer
头像
xixoqw
编辑于 2023-09-06 21:31
+ 关注

[阿里云]后端研发C/C++(实习生)5轮确认实习offer

这篇文章我最初写在我的CSDN博客。 https://blog.csdn.net/Xixo0628/article/details/105792506 想到牛客网帮到我很多,我也搬运过来,希望帮到大家。内容基本没有改动。 (4轮技术面+一轮HR面)现在应该就是等通知了,第一次面试,记录一下。

再次介绍自己基本背景,中科大信息安全专业,在读本科大三,gpa专业第八(8/65),没有什么相关项目经验,基本都是机器学习相关的项目。没有本科计算机比赛基础,初中时打过NOIP,没有拿奖。之前参加了阿里云的编程笔试,1h2题,0分。没有任何面试经验、实习经验。这次第一次参加春招,因为没什么经验,以为只能投一家公司,所以蠢到只投了阿里云一家公司,投递的时候离结束只有一个月了,开始笔试的时候离结束只有半个月了。

先上机考的2题,我都是0分,具体题目和解析可以参考这篇博客(不是我写的)https://blog.csdn.net/qq_33330876/article/details/105574020 我本来以为是我这场特别难,大家都0分我才能进面试。看到这篇博客,看到他的两段满分代码……我顿时就觉得希望不大了。

感觉我像是那种名校毕业刚出新手村的状态,阿里云算是HARD模式了。不过现在感觉应该不会因为HR面而挂我,祈祷能过吧。

好了,第一次写面经,不足之处希望大家指出。

一面 2h一面

上机的代码:

//评测题目: 定义一棵节点存储数据类型为整数的二叉树,并使用非递归算法对这个树的所有节点求和。

typedef struct BTree{
        int val;
          struct BTree * left, *right;
}BTree,*pBTree;

void enque(BTree *p) {
  //...
}
BTree* pop() {
  //...
}
int sizeOfQueue() {
  //...
}

int visit(BTree *p){
          
          if (p ->left != NULL){
                  enque(p -> left);
        }
         if (p ->right != NULL){
                  enque(p -> right);
        }
          
        return p->val;
}

int Sum(BTree *p){
          int sum = 0;
          if (p == NULL) return 0 ;
          enque(p);
          while (sizeOfQueue() != 0){
                sum += visit(pop());
        }
          return sum;
}

二面 1.5h

2面 上机的代码:

题目描述:
使用C语言,定义并实现一个函数。
函数功能:删除字符串的子串,输入源字符串和待删除的子串,返回删除后的字符串。
*/

int strlen ( char * s){
 //.. 
}

int Findfirst(char *s1, char *s2){
          int i , j , index ,index1;
          int len1 = strlen(s1), len2 = strlen(s2);

          for (i = 0; i < len1 - len2; i++){
                  index1 = i ;  
                   for (j =0 ; j         
                          if ( s1[index1] == s2[j]){
                                index1++;
                                  continue;
                        } else break;
                 }
                  if ( j == len2){
                           index = i;
                           return index ; 
                  }
        }
          return -1;
}

char * strdelete(char *s1, int index, int len){
              
              for (         ;s1[ index+len] ! = '\n'; index++){
                      s1[index] = s1[index+ len]; 
            }
              s1[index +1] ='\n'; 
              return s1;
}

char * strdel(char * s1,char * s2){
         int len1 = strlen(s1), len2 = strlen(s2);
          int index ; 

          if (len2 == 0 || len2 > len1 || len1 == 0) return s1;

          index = Findfirst(s1, s2 ); 
          while (index != -1 ){
                 s1 = strdelete(s1, index , len2);
                  index = Findfirst(s1,s2);
        }
          return s1;
}

三面

3面 上机的代码:

//评测题目: 无
Given a string, determine if it is a palindrome(回文,如果不清楚,按字面意思脑补下), 
considering only alphanumeric characters and ignoring cases.  
For example,  
"A man, a plan, a canal: Panama" is a palindrome.  
"race a car" is not a palindrome.  
Note:  ====
Have you consider that the string might be empty? This is a good question to ask during an interview.  
For the purpose of this problem, we define empty string as valid palindrome.

// Write your code here

  int strlen(char *s){
   //.. 
  }

char * make(const char *s){        
        int len =strlen (s),index = 0; 
        char *s1; 
        for (int i = 0; i<len; i++){
                 if ( (s[i] >='a' && s[i] ='A' && s[i] <= 'Z') ){
                          if (s[i]>='A' && s[i] <= 'Z') {
                                 s[i] = s[i] +'a' - 'A' ; 
                        }                
                          s1[index++] = s[i]; 
                }
        }
        s1[index] = '\0'; 
        return s1;
  }

  int Is_pal(const char *s){
        char *s1;
        s1 = make(s);
        int len= strlen(s1);
        // if (len == 0) return 1;
        
        for (int i = 0; i < len/2; i++){
                  if (s1[i] == s[len -s1 -1]){
                          continue;  
                 } else{
                          return 0; 
                 }
        }
         return 1;  
  }

假如允许你对字符串进行如下操作,每次花费“1”的代价把任意字符挪到字符串末端
现在给定两个长度相等的字符串 S1 和 S2,问至少需要多少开销将S1变为S2

比如输入:
S1:acdk                 bceda
S2:ckad                    bcdea
output:2

void qsort( int *arr ,int start ,int end){
        if (end > start){
            int i = start;
            int j = end;
            int k = arr[start]; 

            while (i < j){
                while (i = k){
                    j--;
                }
                if (i<j){
                    arr[i] = arr[j]; 
                    i++; 
                }
                while (i<j && arr[i] < k){
                    i++;
                }
                if (i<j){
                    arr[j] = arr[i];
                    j--;
                }
            }
            arr[i] = k;
            qsort(arr, start, i-1);
            qsort(arr, i+1, end); 
        }
}

4面 20min

4面

五面 (HR面) 20min

五面

唠嗑

以上就是我全部的分享内容了!因为是第一次参加实习面试,信心满满地上阵(没有看过任何一篇面经),然后一面被叮嘱要多看面经。我在牛客网匆匆地看了一些面经,了解到大家的情况都比我优秀好多,感觉颇受打击。感觉我能撑到五面全部结束,确实是非常的幸运。

因为我在大家的面经中学到了不少知识,所以我也尽可能详细地分享出我自己的经历,希望可以作为后来者的一些参考。

我最后真的想吐槽一下我的母校中科大。中科大确实是一所好大学,毕竟千生一院士(平均1000个学生出1个国家级院士)。但是科大学术氛围浓厚的背后,也让我忽视了就业的基本要点,让我现在才开始起跑,感觉身边许多同学还在混沌之中,就像以前的我那样,认为GPA好就是王道,认为本科只要GPA高就业就没有问题,完全把就业和本科相互割裂。 我没有读博科研的打算,所以我现在开始找实习机会,投递简历,完全就是一张白纸的状态。若不是机缘巧合,我甚至不知道还有“实习生招聘”这种事情,所以我连面试简历都是上个月这个时候才开始准备的。可以说,我才刚刚站上起跑线。 可能因为科大,我的起跑线比一般一本院校的学生靠前一些;但也是因为科大,我的起跑线比那些注重项目、实习经验的人落后不少。

我在HR面试时候问,有没有什么事情越早开始做约越好?因为我感觉我对实习、对面试的了解太晚了,吃了好多亏。我多么希望告诉两年前的自己,要重视这些。b站、博客、牛客网上那些达人的经验,如果去搜索去寻找就唾手可得;毕业工作的学长学姐、公司工作的员工,都是非常棒的信息获取渠道。只要有心,不会困难。希望看到这篇文章的后辈,能够不要像我一般后悔。

这次面试帮到我很多,让我学会了很多。尤其是让我进一步理解了这句话:

种一棵树最好的时间是十年前,其次是现在。

若是这次阿里云实习生最终没能通过,我会更加懊悔,也会更加努力。

2020/5/7 更新:唠嗑

图片说明 一度以为自己已经凉了,时隔数日,终于收到了实习意向书(offer)。0实习经验0分笔试,而且我只投了阿里云(所以算是一投就中了)。我这次能过,我觉得我还是很幸运,在下一个阶段的竞争中我会有一个相对高一些的起点。 复盘面试,自我感觉的话其实只有现场代码部分感觉比较好(自我感觉写得出错不多);问答环节我回答的bug还是蛮多的。 这次面试我已经很有收获了,我相信我能在实习期间学到更多。同时也感谢牛客网,前辈们在这儿留下的经验帮到我非常多!

全部评论

(5) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐