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