(3年+offer)华为技术岗面试初面+综合面试经验总结

10月10号面试
10月17日收到进入资源池通知
10月24日收到offer短信,通知27日签约(估计是两方协议)。

如果说腾讯的面试是挥金如土(毕竟每个面试官都配了一件单独的房间),那华为就是戒奢宁俭。两个大会议厅坐满了面试官,其中一个是初面面试区,另一边是综合面试区。初面区的面试官会来等待区一个一个叫我们过去面试。
面试桌采取一对一的形式,技术岗的面试通知短信虽然没有通知说要带简历,但是仍然带了一份以免中途需要。(事实证明这是一个明智的选择)

在这里插入图片描述

初面

初面面试官点到我的名字之后,我跟着面试官去他的那个位置。

面试流程和大多数互联网公司流程差不多,首先让自己介绍一个比较满意的项目。(可能想通过这个项目了解我们的技能程度)在我面试准备时,其实我就纠结过这个问题。因为在我的项目中,有两个项目是我比较满意的,第一个主要做后台,第二个主要做虚拟环境和数据交互。

“我有两个项目是比较满意的”,我先抛出这句话,希望面试官能够给机会让我将两个项目都讲一下,“我先讲一下第一个我们当时做的换课平台,当时本来是一个课程项目,但是我们在这个课程项目之上,结合当时校内急需换课这个需求,做出了这么一个换课平台”,(首先提出项目目的),“然后这个项目大概实现了一个怎样怎样的功能”(抛出产品功能),“我在项目中主要负责后台开发和数据库交互功能”(说下在项目中的角色),“整个项目的架构大致如下。。。。”(项目如何实现),我拿着纸笔在草稿上给面试官画着后台所有的系统架构和数据流动方式,同时将涉及到的重要点的技术点都说了下。

按照之前整理过的描述流程,我将整个换课平台项目描述了一遍,中途偶尔面试官会问一下技术细节,不过都不是很难,可能因为我没有使用“SSH”三大框架,而是使用纯JSP进行的底层开发,所以面试官也不是太好提问。

不过有意思的是,在我介绍到项目中实现了实时聊天的时候,面试官提了两个小问题,是我之前项目中没碰到,而实际生产产品中可能遇到的问题:第一,我们的实时聊天是直接P2P,这样需要双方在同一子网下,那如果现在双方不在同一子网下,外网某个移动端客户A可以访问后台服务器B,这时候某个web端C同时也可以访问服务器,这个时候A和C是互相不同的,现在如果我们仍然想让他们通信怎么办;第二,考虑大量用户同时访问后台服务器的时候,该如何处理。

第一个我首先考虑到用服务器作为中介,但是当时老是想着可能打两个聊天信息会对服务器造成压力,所以一直很犹豫要不要用后台服务器作为中转,以及,作为中转该如何操作。不过面试官稍微提醒我可以用服务器作为中转,这时候我突然意识到只要服务器收到之后,立刻将消息转发出去就可以了,不用走数据库。这时候我也才一直到为什么我以前分析微信的聊天服务时,会将所有的文本消息和图片消息发送到微信的后台服务器,而且简单的直接P2P对话,主要还是为了克服网络问题

第二个不难,考虑云计算中的负载均衡,我大致说了下思路,选取一台主机作为负载均衡调度机,其他的作为工作机即可。

第一个项目大概讲了十分钟,不知道是因为刚开始面试还是我项目确实对面试官的胃口。

第一个项目完了以后,面试官翻了下我的简历,“你要不说下你另一个项目?”我有blabla说了一通。

“有什么难点?”“项目中遇到过哪些问题?”

说完之后,初面基本也就结束了,整个过程十分和谐(可能我遇到的面试官比较nice)。最后让我提一个问题,我大概问了下投递的这个岗位今后具体会是什么工作,面试官大致给我讲了下。(我投递的云计算开发岗,PaaS方向)

综合面试

初面完之后,面试官指引我去综合面试区等待综合面试。

综合面试整体感觉和初面差不多,不过在综合面试阶段面试官首先问了我的籍贯,工作意向和理想的工作地点。

这里我表示并不挑,因为作为一个外省人,自从一个人出省读书以后,就已经对在哪生活在哪上班没有太多顾虑。

接着面试官问了我一些成绩怎样,家庭情况之类问题之后,开始问我的项目经验。(虽然我不太明白,为什么综合面试还会问初面中问过的关于项目经验的问题)这里我就不在重复了,何处是一样,我大致和面试官交流了一下我们的项目内容。

这一块内容完成之后,感觉综合面试整个流程已经基本结束了,面试官开始跟我介绍他们项目组的工作地点(深圳),工作内容,以及平常的一些工作,同时还给我介绍了一些将来工作中需要了解的基本知识——比如docker容器,k8s,部分国内国外的公有云的运行原理,让我回去之后提前自学一下。(到这里我开始感觉有戏了)

其实,综面和初面差别其实没有太大,不过感觉这还是和面试官有关系,因为在我同行的队友中,他们有的就被问到了一些比较底层的知识点比如Java有什么特点之类,也有被问及面向对象的优点等等(这些我都没被问到)。

数字处理

题目描述:给出一个不多于5位的整数,进行反序处理,要求

(1)求出它是几位数

(2)分别输出每一个数字(空格隔开)

(3)按逆序输出各位数字(仅数字间以空格间隔,负号与数字之间不需要间隔)

输入描述:位数不大于5的整数

输出描述:1.整数位数 2.空格间隔输出结果 3.逆序整数

#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    
    
   int iInput;
   int iNum=0;
   char* strRst="";
   int iOutput=0;
   cin >> iInput;
   int k = 0;
   int temp;
   int flag;
   int iTemp;
   if (iInput < -99999 || iInput > 99999)
       return -1;
   if (iInput < 0)
   {
    
    
       flag = -1;
       iInput = -iInput;
   }
   else
       flag = 1;
   temp = iInput;
   vector<int> resStr;
   while (temp)
   {
    
    
       ++iNum;
       iTemp = temp % 10;
       resStr.push_back(iTemp);
       iOutput = iOutput * 10 + iTemp;
       temp /= 10;
   }
   cout << iNum << endl;
   if (flag == -1)
       cout << "-";
   for (int i = iNum - 1; i >= 0; --i)
   {
    
    
       if (i == iNum - 1)
           cout << resStr[i];
       else
       {
    
    
           cout << " " << resStr[i];
       }
   }
   cout << endl;
   iOutput = flag*iOutput;
   cout << iOutput << endl;
   system("pause");
   return 0;
}

IP地址交集判断

题目描述:输入四个IP端,前两个为第一个IP段的起始和终止地址,后两个是第二个IP段的起始和终止地址,判断这两个IP段是否存在交集

输入描述:输入4个IP

输出描述:如果存在交集,输出 Overlap IP ; 如果不存在交集,输出 No Overlap IP

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cassert>
using namespace std;
int *dec2bin(int decnum)
{
    
    
   int i, a, *b = {
    
     0 };
   a = decnum;
   for (i = 7; i >= 0; i--)
   {
    
    
       b[i] = a % 2;
       a = a / 2;
   }
   return b;
}
int ipToInt(char *ipString)
{
    
    
   assert(ipString != NULL);
   int i = 0, j, n, count = 0, return_num = 0;
   char *tmp;
   int *tmp_num=NULL, *num=NULL, *d2b;
   char *s = ipString, *s_tmp=NULL;
   if (*s == '.')
       count++;
   count++;
   if (count != 4)
       return 0;
   while (*s != '\0')
   {
    
    
       if (*s != '.')
       {
    
    
           n = s - s_tmp;
           tmp = (char*)malloc(n*sizeof(char));
           memcpy(tmp, s, n);
           tmp_num[i] = atoi(tmp);
           d2b = dec2bin(tmp_num[i]);
           for (j = 0; j<8; j++)
               num[8 * i + j] = d2b[j];
           s++;
           i++;
           s_tmp = s;
       }
       s++;
   }
   if (*s = '\0')
   {
    
    
       n = s - s_tmp;
       tmp = (char*)malloc(n*sizeof(char));
       memcpy(tmp, s, n);
       tmp_num[i] = atoi(tmp);
       d2b = dec2bin(tmp_num[i]);
       for (j = 0; j<8; j++)
           num[8 * i + j] = d2b[j];
   }
   for (j = 0; j<32; j++)
       return_num = return_num * 2 + num[j];
   return return_num;
}
int main(void)
{
    
    
   char *s1, *s2, *s3, *s4;
   s1 = new char;
   s2 = new char;
   s3 = new char;
   s4 = new char;
   cin >> s1 >> s2 >> s3 >> s4;
   int n1, n2, n3, n4, i;
   n1 = ipToInt(s1);
   n2 = ipToInt(s2);
   n3 = ipToInt(s3);
   n4 = ipToInt(s4);
   if (n4<n1 || n3>n2)
       cout << "No Overlap IP" << endl;
   else
       cout << "Overlap IP" << endl;
   system("pause");
   return 0;
}

数字排序

题目描述: 给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数,排序要求:按照每一个正整数的后三位数字组成的整数进行从小到大排序(1)如果不足三位,则按照实际位数组成的整数进行比较(2)如果相等,则按照输入字符中的原始顺序排序

说明:(1)字符串以‘\0’结尾,仅包含数字、空格(2)字符串内正整数之间以单个空格分隔,字符串首尾没有空格(3)正整数格式为十进制,大小1~1000000,正整数的数字非零开始

输入描述:第一行为一个整数字符串,里面包含若干个整数,以空格分割,第二行为一个整数,即指定的位置

输出描述:输出指定位置的整数

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int find_string(const char* input_string, int serial_number, int output_string_max_length, char* output_string)
{
    
    
   int size = strlen(input_string);
   vector<int> vec;
   int tmp = 0;
   for (size_t i = 0; i <= size; ++i){
    
    
       if (input_string[i] == ' ' || i == size){
    
    
           if (tmp == 0){
    
    
               return -1;
           }
           vec.push_back(tmp);
           tmp = 0;
       }
       else{
    
    
           tmp = tmp * 10 + input_string[i] - '0';
       }
   }
   int n = vec.size();
   for (int i = 0; i < n - 1; ++i){
    
    
       for (int j = 0; j < n - i - 1; ++j){
    
    
           if (vec[j] % 1000 > vec[j + 1] % 1000){
    
    
               swap(vec[j], vec[j + 1]);
           }
       }
   }
   if (serial_number > vec.size()){
    
    
       return -1;
   }
   char num[11];
   sprintf(num, "%d", vec[serial_number - 1]);
   int len = strlen(num);
   cout << num;
   return 0;
}
int main()
{
    
    
   string s1;
   getline(cin, s1);
   int t;
   char *input_string = const_cast<char *>(s1.data());
   int serial_number, output_string_max_length=0;
   char* output_string = NULL;
   cin >> serial_number;
   t=find_string(input_string, serial_number, output_string_max_length, output_string);
   system("pause");
   return 0;
}

总结

总的来说,其实华为的面试并没有我想象中的困难。简历准备很重要, 尤其是项目经历,个人blog,github这类容易加分的内容,最好能够写出来。两场面试相比较同伴更加顺利,有一定程度上就是简历给我加了分。

我在项目中重新添加了很多Java相关的项目经历,虽然不是很重要,但是至少能让面试官从中了解我在Java方面有不少经验。

面试时候不用太紧张,在之前腾讯面试中我就明显很紧张,脑子一片发蒙,而这次华为面试就感觉稍微舒服很多,不知道是因为已经经历过几次面试,还是因为面试官带动的比较好。

最后还挺重要的要能够及时清楚地描述自己想说的内容。毕竟将来工作岗位中,少不了和同事的交流。另外清晰的描诉对面试官了解你,了解你的项目会很有帮助。因此,不论是在给面试官讲述自己项目的时候,还是在回答面试官问题,亦或是想表达自己观点的时候,都需要清晰的表达。如果一时语塞,可以尝试停顿一下,整理下思路然后重新描述,只要面试官能够理解你的话,一般有些停顿是不会有什么大碍。

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题

有需要的小伙伴可以加群1149778920 暗号:qf

在这里插入图片描述

真实面试经历

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。一键三连哦!

猜你喜欢

转载自blog.csdn.net/S11035762/article/details/109288881