(3年+offer)華為技術崗面試初面+綜合面試經驗總結

2020-10-27 12:00:44

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

在這裡插入圖片描述

真實面試經歷

在這裡插入圖片描述

最新整理大廠面試檔案

在這裡插入圖片描述
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援。一鍵三連哦!