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協議的抽象,
總體來說,感覺很爛,自我介紹基礎知識講解都有很多的漏洞,所以肯定會掛掉的。
結果出來了第一面掛掉了!
唉,第一次找實習被掛,也值得紀念一下吧!