1. 程式人生 > >2018阿里巴巴客戶端研發工程師面試記錄

2018阿里巴巴客戶端研發工程師面試記錄

內推

首先通過師兄內推,然後到官網上填寫簡歷,阿里果然是Java系,師兄專門問了我願不願意做Java開發,我當說願意啦。

官網上填寫完成簡歷之後,系統就立即發過來素質測評和程式設計測試的通知郵件,沒有提示結束時間,估計就是儘早做完就可以了吧。

素質測評

素質測試不是計算機基礎知識的測試,是屬於對個人性格等等的測試,分成好幾個部分,前面有的題是限時的,比如60s等等。

程式設計測試

程式設計題時間上30分鐘,一道程式設計題,沒有攝像頭拍攝,郵件反饋說這個作為面試的參考。

這道題是遵照檔案的依賴,就是一個有向圖尋找所有的環,這個直接DFS即可,這道題不是ACM風格的程式設計題,至少給了題意說明,關於輸入輸出的格式沒有描述,給了一個C語言的大致框架,我選擇使用C++完成一個簡單的DFS尋找環的做法,我認為沒有問題。

程式碼如下:

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional> #include <bitset> #include <numeric> #include <cmath> #include <regex> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; /* 深度優先遍歷尋找有向圖的環的存在與否 graph儲存的是整個有向圖 one儲存的是找的環的結點 cur是當前的結點,也即檔名字 target是目標節點,也即檔名字 */
bool findGraphCycle(map<string, set<string>>& graph, vector<string>& one,string cur, string target) { if (graph[cur].find(target) != graph[cur].end()) return true; else { for (string next : graph[cur]) { one.push_back(next); if (findGraphCycle(graph,one, next, target) == true) return true; one.pop_back(); } return false; } } /* 主函式入口 */ int main() { //儲存有向圖的邊 vector<vector<string>> edges{ { "file1" ,"file2" },{ "file2" ,"file3" },{ "file3" ,"file1" }, {"file4","file5"},{"file5","file4"} }; //使用map儲存有向圖的 map<string, set<string>> graph; /* 每一次插入邊的時候就檢查是否存在環 */ for (auto edge : edges) { graph[edge[0]].insert(edge[1]); vector<string> one{edge[1]}; if (findGraphCycle(graph, one, edge[1], edge[0]) == true) { one.push_back(edge[0]); cout << "Find A Circle,File Name Is As Following:" << endl; cout << one[0]; for (int i = 1; i < one.size(); i++) cout << " -> " << one[i]; cout << endl << endl;; } } system("pause"); }

第一次電話面試

就在2018.3.9晚上八點,支付寶來電話了,馬上就是電話面試。

回想起來感覺回答很不好,肯定要掛了

首先是專案詢問

這個直接略過

接下來是C++基本知識考察

C++的基礎:解釋一下虛表?

STL一些資料結構,各自有那些用法?
Vector、set、map、muliset、multmap、unorderset、unordermap

Vector有哪些特點?
從插入,刪除、指標失效來

可以避免vector的資料結構缺點?
提高查詢效率:set,unorder_set效率肯定高
提高訪存效率:vector少數族

計算機網路基本知識考察

TCP的滑動視窗詳細解釋一下:

這裡寫圖片描述

接觸過客戶端開發、無線開發嗎?
木有啊,研究生科研方向是軟體測試,沒有接觸過無線開發

本科做過一些專案嗎?
主要就是大四的計算機綜合系統的設計與實現

另外延伸題目:
程序間通訊有哪些機制?
參考這個連結Linux下程序通訊機制

tcp 和socket去區別?
二者其實不具有可比性。WEB使用HTTP協議作應用層協議,以封裝HTTP文字資訊,然後使用TCP/IP做傳輸層協議將它發到網路上。而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API)。通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯絡。Socket程式設計介面在設計的時候,就希望也能適應其他的網路協議。所以說,Socket的出現只是使得程式設計師更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,

總體來說,感覺很爛,自我介紹基礎知識講解都有很多的漏洞,所以肯定會掛掉的。

結果出來了第一面掛掉了!

唉,第一次找實習被掛,也值得紀念一下吧!