[阿里云面试]后端研发C/C++(实习生) 5轮面试面经

(4轮技术面+一轮HR面)现在应该就是等通知了,第一次面试,写博客记录一下。

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

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

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

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

一面 2h[阿里云面试]后端研发C/C++(实习生) 5轮面试面经_第1张图片

上机的代码:

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

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

[阿里云面试]后端研发C/C++(实习生) 5轮面试面经_第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 < len2;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;
}

三面

[阿里云面试]后端研发C/C++(实习生) 5轮面试面经_第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] <= 'z'  ) || (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 < j && arr[j] >= 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

[阿里云面试]后端研发C/C++(实习生) 5轮面试面经_第4张图片

五面 (HR面) 20min

[阿里云面试]后端研发C/C++(实习生) 5轮面试面经_第5张图片

唠嗑

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

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

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

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

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

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


2020/5/7更新:唠嗑

一度以为自己已经凉了,时隔数日,终于收到了实习意向书(offer)。0实习经验0分笔试,而且我只投了阿里云(所以算是一投就中了)。我这次能过,我觉得我还是很幸运,在下一个阶段的竞争中我会有一个相对高一些的起点。

复盘面试,自我感觉的话其实只有现场代码部分感觉比较好(自我感觉写得出错不多);问答环节我回答的bug还是蛮多的。

这次面试我已经很有收获了,我相信我能在实习期间学到更多。同时也感谢牛客网,前辈们在那儿留下的经验帮到我非常多!

你可能感兴趣的:(唠嗑专栏,面经)