2018秋招小結

騰訊:java

  實習:node

    最後項目仍是沒搞完,時間真的不夠,項目也出現了不少問題,沒有轉正的機會。linux

  提早批一面:c++

    剛找人幫我內推,就收到了cdg的電話。那邊好像是作數據庫的,開始問了我一堆cpp高級特性,我一個都不會,而後我講我只會stl,就問了幾個簡單的stl。數據庫問了四個隔離級別和範式,我也不記得了。而後算法題問了個很簡單的,回答完感受應該涼了。而後一刷新狀態變成複試。惋惜過兩天沒面試就直接涼了,估計是評價過低。此次面試血虧,本身徹底沒準備cpp和數據庫的東西,問的問題很基礎也很簡單,稍微準備幾個下午就能夠搞定的。web

  正式批一面:面試

  (40分鐘)收到現場面試邀請,跑去喜來登面試。發現又是被cdg撈了,內心仍是有點陰影的。一面挺簡單的,上來先手寫兩道算法,第一道是給一棵二叉樹,而後求左兒子節點的值的和,直接dfs遍歷。第二題是給定n個有序數組,而後把他們合併成一個有序數組。裸k路歸併題,而後他讓我用別的方法作,想了很久只想到個分治,就是對列分治,到最後會剩一列,而後再對行分治歸併排序,而後一頓分析複雜度。而後問linux的東東,問線程有哪些公用資源和私有資源,我回答了一堆內存上的,後來他說他想問的是線程私有的上下文寄存器那些。接下來平常問項目webQQ架構,大概講了下,而後問epoll的api,問題很淺。再問我static的做用,我回答了做用在類方法,類變量,非類變量的做用,他又問做用在非類成員方法時的做用是什麼,我不會,而後他告訴我是隻限本文本使用。面試完他也沒讓我問問題,我厚着臉皮問他是什麼bg他才告訴我。過了兩天通知我去複試。算法

  正式批二面:sql

  (15分鐘不到)五點半的面試,感受面試官估計急着去吃飯吧,面試體驗不好。上來問我兩題算法,估計又是劍指offer的題。第一題是給一個有序數組,問怎麼求出兩個值之和爲k。我講了枚舉+二分,複雜度O(nlogn),再講了枚舉+hash,複雜度O(n)。他都說不夠優,讓我繼續想。考慮到數組是有序的,能夠維護一前一後兩個指針,一開始左指針指向第一個元素,右指針指向最後一個元素。而後往左調節右指針,直到左指針的值+右指針的值<=k,而後繼續往右移動右指針。在腦海裏證實了這個算法的正確性,就跟他說了。第二道題是如今有個算法,能夠等機率產生0到4這5個數,問如何利用這個方法等機率產生出0到6這7個數。一開始沒什麼思路,腦子也挺亂的,想了一個比較複雜的方法,各類湊二進制位,感受不是正解就沒說了。由於是電話面試,我一思考一會,面試官就一直在那邊「喂喂喂」,被「喂喂喂」了兩次以後我就說暫時想不到。他說好,那你講講你作的webQQ吧,而後我大概講了下作了什麼。而後他問你在實習期間學到了什麼,我講了一堆什麼OS,linux,c++等知識。而後他就問我有什麼想問的,我看了下時間,才面試了十幾分鍾,涼涼,就沒多問了。電話掛沒多久,一查狀態,不適合。拜拜了騰訊,第一次由於一道算法題不會就直接被掛了。關於上面那題,後來發現是很經典的問題,正解是把數字當五進制,利用第一個方法能夠等機率產生一個五進制的某一位。要產生出一個大於7的數字,只須要兩個五進制位,也就是rand_5() * 5 + rand_5()。而後會產生出0~24這些數字,咱們只要0~20這21個數字,當產生出21~24這些數字就從新隨機。而後對獲得的數字%7便可。數據庫

阿里:編程

  一面:(45分鐘)投了螞蟻金服cpp崗位。開始就問我acm的狀況,問了會什麼數據結構,而後我講了線段樹的原理,後面拓展了一點主席樹的知識。再問了圖論方面,講了最大流,因爲只會最基礎版本的最大流,因此沒講多少。後來問我java的gc機制,才知道我被調到java崗位了,心痛,以前看的cpp知識用不上了。gc憑着春招看的那一丁點印象,講了年輕態和老年態,而後面試官讓我回去再看看,我講錯了。而後問了我作的那幾個java項目,實際上我感受一點技術含量都沒有,就隨便講了下,結果面試官和我同樣的觀點。而後我抱着試一試的心態,說要不你問問我在騰訊作的項目?而後他就問了我epoll,我就從原理開始講,包括複雜度,原理。他又問爲何用紅黑樹不用hash,我一時間沒想到,就說兩種均可以。後來想了下,hash和紅黑樹其實各有優缺點,hash理論上比較快,可是擴容難,除非採用一致性hash,而紅黑樹是穩定log。網上還看到一個說hash須要檢測value,其實想了下,若是本身肯定一個key,是不須要檢查value的。最後閒聊,問我有什麼問題想問,我說沒有了。他反問,你連咱們是什麼部門都不想知道嗎?尷尬一笑。原來那邊是雲加速部門,寫java,他強調說語言不是很重要,重要的是思想。估計這幾輪面試都不會問我cpp了。這輪面試複習了一些知識點,面試官建議我多看點開源代碼。

  二面:(35分鐘)隔了4天就來二面了,此次感受基本是吹水。問了我acm狀況,績點,爲何不考研。問了我對騰訊技術的瞭解程度,用的什麼系統,爲何不用騰訊自研的tlinux,喜歡作中間件仍是業務開發。惟一問的技術就是問epoll,又把epoll講了一遍,講我怎麼封裝的。結果又問我epoll是哪一個版本的內核支持的,爲何之前不用epoll。版本支持我真沒了解過,爲何之前不用epoll我也不知道,就猜了個可能之前內核不支持。此次面試收穫到,在騰訊其實要更花多點時間研究騰訊的技術,畢竟如今有資源。我如今作的事情其實本身在宿舍也能作,浪費了各類資源真的很惋惜。(已掛)

頭條:

  筆試:一輪筆試作了四題半,感受早上作題精神不太好,作得馬馬虎虎。一道dfs判聯通塊數水題,一道區間合併水題,還有道揹包,一道枚舉二分,一道排序貪心/dp。被枚舉二分那題卡了好久,一直想着分治,最後才發現直接枚舉二分就行了。果真退役後智力降低。

  一面:視頻面試,一個鐘左右。面試官簡單地問我騰訊實習期間作的webQQ,問協議怎麼定,我就講用的Json,如今打算改成protobuf。又問了我三次握手四次揮手,就講了握手八個點,揮手我不太清楚,就隨便說了下。而後他讓我寫個lru緩存,我根本不知道是什麼鬼,就問他能不能講下是什麼,而後我實現下,他說能夠。聽完發現是個緩存機制,不過有個淘汰機制,就是淘汰最後沒被用過的數據。而後我一開始說建兩個紅黑樹,一個以id爲key,數據爲value,一個以時間戳爲key,以id爲value。而後他讓我想一想繼續優化。我就想到把第二個紅黑樹改成雙鏈表。紅黑樹映射下鏈表指針,鏈表指針維護下id,實現淘汰機制。代碼以下:

const int MAX_SIZE 1024;
struct list {
    struct list *pre;
    struct list *suf; 
    int id;
}*head, *tail;
struct node {
    struct list *_list;
    string *val;
}
map <int, struct node *> m;
void insert(int id, string val) {
    if (m.size() >= MAX_SIZE) {
        remove();
    }
    string *_val = new string();
    *_val = val;
    node *_node = new node();
    list *_list = new list();
    tail -> pre -> suf = _list;
    _list -> pre = tail -> pre;
    _list -> val = _val;
    _list -> id = id;
    _node -> _list = _list;
    _node -> val = _val;
    m.insert(make_pair(val, _node));
}
void remove() {
    list *temp = head -> suf;
    head -> suf -> suf -> pre = head;
    head -> suf = head -> suf -> suf;
    map <int, struct node *> :: iterator it;
    it = m.find(id);
    delete it -> second;
    m.erase(it);
    delete temp;
}

string check(int id) {
    map <int, struct node *> :: iterator it;
    it = m.find(id);
    if (it == m.end()) {
        return "";
    } else {
        struct node *_node = it -> second;
        struct list *_list = _node -> _list;
        _list -> pre -> suf = _list -> suf;
        _list -> suf -> pre = _list -> pre;
        tail -> pre -> suf = _list;
        _list -> pre = tail -> pre;
        _list -> tail;
        tail -> pre = _list;
        return *(_node -> val);
    }
}
View Code

而後面試官就我簡歷問了一些問題,數據庫那部分怎麼樣。其實我大部分都忘記了,,不過仍是跟他說會一點。而後他問我策略模式是什麼,我不知道。他又問我接口模式是什麼,我就扯了下什麼編程規範,易修改等,舉了個Linux系統調用的例子。感受大致還行。最後他問我有沒有什麼想問的,我就問了他那邊是作什麼的,他說作服務端開發,不過他說我不必定是他們崗位,可能頭條機制是一面海選,而後繼續分部門。

  二面:視頻面試,一個鐘左右。面試官看起來比一面面試官嚴肅好多。問了我實習作了什麼,select和epoll的比較,多個鏈接活躍時哪一個效率高。我只記得epoll對多個鏈接活躍高的狀況不適用。再問我進程間通訊方式。講了管道,socket,共享內存,消息隊列,漏了信號量。又問我共享內存怎麼實現,要注意什麼問題。而後問了我算法題,第一題是給多個不一樣面值的硬幣,再給一個面值,問最少須要多少個硬幣才能構成這個面值。典型dp,隨手寫了個dp給他。而後第二題,給個化學表達式,問有多少個元素,遞歸純模擬,一開始沒想到遞歸,寫了半天,發現不對勁。改爲遞歸後沒什麼時間寫,腦子也糊成一團,最後時間關係面試官說跳過了。而後問我悲觀鎖和樂觀鎖,我又簡單講了下。再問我sql,求「本月產生訂單數最多的一天產生的訂單數」,過久沒寫sql徹底不會。而後寫一半,感受面試官不耐煩了,就說等通知。最後果真掛了。記錄下那題SQL:select max(select count(id) from table group by left(time, 10));牛客SQL要刷起來了。。

虎牙:

  一面:(40分鐘)看婦聯看一半突然打電話過來,嚇了我一跳。他說沒看到我簡歷,讓我自我介紹一下。介紹完就問我STL有什麼容器,vector和list的差異,這些都是很簡單的。而後又問我除了容器還有什麼,我說lower_bound?而後他說對,還有sort這些。而後問我有沒有接觸過網絡編程,好比TCP,UDP的區別,怎麼保證TCP可靠,我回答握手保證網絡是穩定的,而後中途有重傳機制,和滑動窗口,他說是這些保證的嗎?我突然有點虛,就回答不知道,應該是吧,而後pass。而後問我算法題,問無序數組怎麼找到兩個數的和爲指定數字,一開始沒反應過來,就講了排序二分,複雜度nlogn,後來反應過來說了個hash,複雜度on。而後面試官就問hash若是全部數字都在一條鏈上怎麼辦,我說那就換了模數?隨機數與或一下?他說總有運氣很差的時候嘛。我當時就???如今想一想他應該是要我講紅黑樹之類的。不過複雜度同樣是nlogn啊。而後問我有沒有了解B+樹,我說MySql用的就是B+樹,而後他問爲何用B+樹而不用紅黑樹。我只有一點印象是和內存讀取有關,而後模模糊糊講了下,就pass了。(實際上是和磁盤IO讀取有關)而後他又問我線程安全,解釋概念,而後怎麼保證。我又繼續樂觀鎖悲觀鎖講一講,而後他就問不加鎖怎麼保證原子加法,我說cas,他說不用cas呢,我又講了volatile,不過突然想起這東西也不能保證,繼續pass。而後又問我有個線程不斷寫入一個數字,有個線程在讀這個數字,此時數據已經寫入主存,什麼狀況下會出現讀的線程讀到了還沒被寫以前的數據。我想到的只有寄存器和三級緩存,而後他說排除這些。。我就想不到了,pass。再問我對linux命令的熟悉狀況,問怎麼看全部進程的PID,我說ps -ef加awk輸出某一列。而後又問怎麼查看全部端口被多少個進程佔用了,我說我只會一個端口的,直接netstat -apn | grep xxx | wc,而後他讓我去學下怎麼看全部端口的。最後輪到我問問題了,問了他技術棧,用什麼語言,他說用cpp,而後用騰訊的開源框架,名字不記得了。整體上感受面試比較簡單,不像阿里頭條那樣很深刻問問題,主要是考察知識面廣度。並且最後沒問他那幾個不會的問題,感受血虧。

網易互娛:選錯崗位,投了運維崗,筆試完涼涼,編程題都沒有。

星空計劃:

  公司在番禺那邊,師兄在的創業公司,規模不大。

  一面:

    面試官是wxg出來的,也打過acm,很好交流。面試官先給我30分鐘寫算法題,是說給一個字符串a,而後你最少須要在這字符串後面補多少個字符使得a變成迴文串。很明顯是求後綴最長迴文子串,直接manacher就能夠了,複雜度O(n),不過我不會手寫manacher,墨跡半天都沒寫出來。而後以後和麪試官講了思路,面試官問有沒有n2的作法,我。。。講了兩個n2暴力。後面就是對着簡歷問了,問項目架構,從信息發出到對面接受的過程。對協程的瞭解,並指出了我對libco的一些誤解。整體不是很難,都是問我作過的東西,看個人熟悉程度。以後和師兄簡單聊聊天,拿到口頭offer。

小馬智行:

  公司在南沙區,單程過去都要兩個鍾。公司環境感受ok。

  一面:手寫代碼,寫個求最大子樹和,直接dfs。再寫個消去連續出現的兩個字符,直接棧維護。而後問stl的基礎,vector的內存管理之類的,而後問個人webQQ,講下架構,感受比較輕鬆。

  二面:手寫代碼,寫個hash_table,支持插入,刪除,修改,全局修改。前三個都很容易實現,全局修改須要加lazy操做,利用時間戳維護,也不難。而後繼續講webQQ架構,被懟得有點慘,問了一堆架構問題,怎麼設計,爲何要這麼設計,若是這樣設計會不會更好之類的,不少次都講不出來。還問怎麼在這個架構上實現分佈式,若是改爲多進程會不會更好,若是不用長鏈接,改爲短鏈接可不能夠。我說長鏈接不用屢次驗證,他反問驗證代價很高嗎?我就不知道怎麼說了。問了挺多問題的,有一些問題其實以前思考過,可是沒有實踐過也不知道本身思路是否正確。

  三面:手寫代碼,給定m個左閉右開區間,和一個n,問[1, n]這些數字是否被這m個區間覆蓋。由於區間可能很大,因此我選擇直接對區間排序,而後區間合併,再check合併後的區間是否覆蓋[1, n]。面試官原本想問我webQQ,後來想一想算了,前面面試官都問過了。而後看我簡歷,問我openGL,從調用一個api到打印出直線這個過程,中途經歷了什麼過程,從軟件到硬件都講下。我一臉懵逼。而後改問設計模式,問多例模式須要注意什麼,口胡半天,講注意生成對象實例的個數,多線程要加鎖,而後就問對鎖的瞭解。我講了linux上的鎖的種類。面試官問何時用自旋鎖,衡量標準是什麼,我就說看加鎖到解鎖的時間長短,短用自旋鎖,避免阻塞帶來的資源消耗,面試官也沒說是否是。而後問我熟悉的算法,我說數據結構,而後問我會不會kd-tree。我說了解過,不記得了。而後問我經常使用的數據結構,講了下線段樹,主席樹,講了下區間第k大的作法。最後輪到我提問,由於問題基本問了前面面試官了,我就問下有沒有什麼建議。建議就是不熟的不要寫簡歷上,好比openGL。否則會給面試官一種我都會/不會的錯覺。

  hr:簡單聊天,以爲面試怎麼樣,爲何想來小馬,指望薪資。指望薪資原本想問個白菜價,結果hr說沒有白菜價。。而後話題就跳過了。最後送了我一個小禮物,一本記事本和筆。

  總結:整體來講,算法題偏簡單,架構部分我思考欠缺,經驗也不夠。最後收到了offer,應該是白菜。

bigo:

  bigo的面試老是出其不意,晚上九點多接到面試通知,讓我明天9點半早上過去那邊面試。過久沒早起,差點睡過頭,掙扎着起了牀。公司在番禺萬達廣場那邊,離地鐵站也不遠。公司母公司爲yy,和yy虎牙一棟樓。在公司等了一會纔開始面試。

  一面:感受面試官有點猛,往死裏問,看我簡歷一邊問,問我webQQ架構的細節,在發送的時候如何保證一致性,和發送的前後順序,講了半天。而後給我三道選擇題,第一道是tcp發包,給出三次握手中第一個包的信息,問第二個包多是什麼,考察標誌位和ack號。第二題是個智商題,8個球,有一個球比較輕,問最少幾回能夠稱出是哪一個球比較輕,分兩次便可,每次分紅三份。第三題是個c語言題,unsigned short轉成unsighed int的結果,由於是unsigned,不會有符號位問題。而後讓我手寫個大數加法,我直接倒過來一頓模擬,不過沒考慮符號位,不過他也沒讓我改了。

  二面:二面被懟到懷疑人生,問一個進程在寫一個文件的時候,另外一個進程刪除了這個文件,會發生什麼。我不會,後來百度後才知道文件會有兩個連接數,一個硬連接數,一個進程連接數,文件只有在兩個連接數都被刪除後纔會被真正地釋放掉,因此結果應該是能夠正常刪除,而後也能夠正常寫,可是寫完進程釋放掉文件後文件就被釋放了。全程都是問我會不會xxx,講一下,問了cpp高級特性,不過我只能講個皮毛。而後問我算法題,問有n個木樁,能夠蓄多少水,很經典的題,印象中是單調隊列。當場想了個假算法,而後被hack掉了,而後平常智商掉線,頭昏腦脹,就說不會了。感謝面試官給我機會,換了一題。給n個數,數字大小0~n-1。算出最小沒出現過的正數。直接在原數組上hash,統計哪些數字出現過,在原數組hash要用交換,好比你要記錄下標爲k這個數字,就要swap(a[k], a[a[k]])。手寫完,修復了數組溢出一位的bug,而後結束二面。覺得會掛,沒想到過了。

  三面:三面感受比前面都輕鬆,對着簡歷問。先問我那webQQ,繼續懟我如何保證一致性的問題。當兩個進程異步通訊時掛了怎麼辦,而後我提了一個消息隊列機制,而後他問如何判斷信息是否無效,我又提了一個超時機制,而後利用紅黑樹和鏈表實現了這個超時機制(有點相似頭條問的那個LRU實現)。而後問我IOC是什麼,我簡單講了下,他說我理解的有點問題,而後跟我講了一下,而後讓我用cpp實現一下,其實就是cpp實現反射。而後我提出if (className == "xxx") return xxx();這種方式,他說不夠好,可不能夠用xml作。而後我問可不能夠宏定義或者模板,他說這是一種方法,可是這是編譯期作的,有沒有運行時期實現的方法,最後想不到,他也沒給我機會問。而後手寫算法,寫個非遞歸中序遍歷,xjb寫了下,沒太大問題。

  hr面:比較輕鬆,隨便聊天,問手上有什麼offer,面試評價,指望薪資之類的,我提了30w,低點也能夠考慮。hr很nice,交流沒想象中那麼尬。

  總結:收到了offer,薪資超過我指望,bigo福利不是通常好,應該是sp。

相關文章
相關標籤/搜索