提前批
一面
首先是自我介紹,然後簡單問了下項目相關以及實習相關的問,緊接着就是懟題目了,考察基礎部分了
- 常用的排序算法有哪些?
// 我說了插入,選擇,冒泡,快速排序,堆排序,希爾,歸併。。。。
歸併排序的時間複雜度?
快速排序的原理?時間複雜度?最壞的情況複雜度?什麼時候纔是最壞複雜度?
- 最小生成樹瞭解嗎?
我說圖論的,然後就簡單介紹了下概念,關於圖論真的瞭解的少,還有那幾種圖論算法來着,,,,
- 二分查找怎麼實現的?
去平均值比較(口誤啊,md!!!)
- 紅黑樹有了解嗎?
我:查找樹,紅黑樹滿足的五條性質,以及特徵,這樣做的好處,不嚴格平衡,查找效率高,複雜度O(logn)。。。。
紅黑樹有哪些特徵?
我:又在胡扯了。。。
什麼叫平衡二叉樹?有什麼用處?
我: 我怎麼知道怎麼用????,就這麼用
如果節點數一樣,爲什麼二叉平衡樹更節省空間?
- 堆排序,最大堆怎麼實現的?
我:說了一些概念,然後說不太知道了。。。。
節點的調整?是從下往上還是從上往下?
堆排序就是建立堆,和調整堆的過程,從下往上,堆即完全二叉樹,數組存儲的的形式滿足:根節點,left 2n+1 right 2n+2
- kmp算法瞭解嗎?具體原理能說一下嗎?
我說next數組。。。
我巴拉說了幾句,不太知道了
- 進程間怎麼通信的?
我巴拉巴拉。。。,七種進程間通信簡單介紹了一下,各自的特點優缺點,適用場合
是不是漏了什麼重要的? 共享內存有了解嗎?怎麼實現的
我說mmap ,巴拉巴拉。。。。
具體是怎麼實現的? 接口,原理?
我說原理不太瞭解。。。。
- 管道有有名管道和無名管道,他們之間有什麼差別呢?
。。。。
管道的優勢?
我:我咋知道??? 後頭一想,我誤解面試官意思了,尷尬。。。。
- 程序運行結構棧結構?
我簡單描述了下。。。。
運行程序整體的棧結構是怎麼樣子的?
我。。。不知道
- 系統分用戶空間和內核空間有了解嗎?
在Linux裏面,對應於用戶態和內核態,與權限和特權級有關,在中斷,系統調用或者信號才使進程陷入內核態,獲得更高的訪問級別;32位的Linux系統裏面,虛擬內存對應的大小爲4G,高位1G對應的是內核空間,低位3G是用戶空間。
- 我們那個程序假如發生段錯誤,這個要怎麼去排查呢?
段錯誤一般與非法訪問有關,比如數組下標越界,棧溢出,遞歸調用層數過多;在Linux裏面可以用gdb調試,bt來查看堆棧
附:關於段錯誤相關具體可以查看這篇博客:C/C++段錯誤問題排查和解決方案
-
select,poll,epoll三組I/O複用對比,優缺點
ET,LT模式?
附:我之前簡單總結了的博客I/O複用之select,poll,epoll (一)
- TCP的擁塞控制有了解嗎?講一下?
附:
TCP的核心就要搞清楚狀態機轉換過程,那幾種算法(nagle,RTT算法,擁塞算法,滑動窗口,序列號)
TCP三次握手過程講一下?知道SYN分節攻擊嗎?
附:關於三次握手和四次揮手,這篇博文講得非常詳細了 面試官,不要再問我三次握手和四次揮手
- new 和 malloc區別?
new是C++運算符,關鍵字;而malloc是C語言庫函數
最核心的區別:new由編譯器支持,滿足對象語義,創建對象和銷燬對象會執行構造和析構函數,返回該類型指針;而malloc是庫函數,只是向系統申請一塊堆內存,無類型,需要進行一個C類型的強制類型轉換。
而new實際將malloc封裝了起來,解析可分爲兩個步驟
- C++中的STL容器主要用過哪些呢?在使用map的時候,我們需要分離一個迭代器嘛,這個迭代器++和++迭代器有什麼區別?
我說,don‘t konw
- C++的虛函數怎麼使用呢?
我從多態開始講,然後介紹到虛函數的實現,以及虛函數表的結構,具體的調用過程,虛函數的繼承關係,以及對象模型
- 現在有一個int指針,其值爲假設爲100,執行++之後爲多少呢?
還問了一些,C語言函數調用的相關問題,一面大概半個多小時就結束了,半個多小時後,收到了二面通知
二面
- 先簡單出個算法小題目吧!假如現在有一個輸入有兩個集合A和B,輸出另外一個集合C,輸入是一些IP段,IP地址是延續的,並且都是整數,一百萬,假設其中只要一個IP地址的值,這個值要麼是IP地址要麼帶有一個IP段。並且在集合中無重複,亂序的,輸出的集合C是他們的合併
和麪試官討論了蠻久,說了下思路,我對這題感覺比較陌生,一直都沒太聽明白意思
- 你做過的一些項目?
我簡單介紹了一下,面試官好像不是太感興趣
-
網絡連接的過程?TCP的time_wait狀態,爲什麼客戶端要有?有什麼作用?分析一下
-
然後問了有了解過雲計算和其它開源項目沒有?
總之來說,二面不是太順利,面試官先是推遲了一天,然後這次有遲到了一個多小時,來的好像很匆忙得面試一下,似乎我的簡歷手頭上都沒有,然後自我介紹也沒有,就是問了這麼些問題就沒了
結果可想而知,在一個星期後,果不其然得收到了感謝信了
正式批
一面:
-
簡單自我介紹
-
說一下#define宏定義?帶參數的宏知道嗎?比如輸入一個或者兩個參數之類的,說一下這個的原理,起什麼作用?在什麼場景下會使用?
-
在做變量運算時,我們會有類型嘛,比如二元運算,我們要遵循一點原則瞭解嗎?
在做不同類型的運算,有了解具體的類型轉換規則嗎?
-
C語言裏面字符串的定義是什麼?字符串裏面可以包含“\0”嗎?
-
strlen和sizeof對比?
-
問一下一個函數有局部變量,全局變量講一下作用域和生存週期?
如果局部變量加static呢? 全局變量加static呢? -
main函數原型知道嗎?main的參數 agrc,argv
-
數據結構排序的算法?
-
遞歸和循環的實現那種好?
遞歸有什麼缺點呢?爲什麼開銷大呢?
-
快速排序,歸併排序,堆排序講一下,對比,什麼時候應該選用哪一種?
-
hashmap哈希表是一個什麼樣子的嗎?
hashmap 函數,key value
核心:1. 快速定址
2. 解決衝突
-
TCP和UDP協議對比,優缺點?
TCP的可靠性體現在哪些方面呢?
什麼情況下會不可靠呢?不可靠的情況有哪些?
丟包, 未按序到達,網絡擁塞,多次發起連接
- Linux如何創建一個進程?知道進程樹嗎?開機之後有進程樹,爲什麼會有進程樹呢?
二面
- 先做一個簡單的自我介紹
- 問實習?
(1)實習期間主要做的什麼?有沒有參與到項目的開發中來?
(2)並且針對簡歷上的介紹做了一些問題
(3)實習主要帶給你的收穫是什麼呢?
-
問項目?
(1)介紹一下項目,主要做的事情?
(2)線程池怎麼實現的?如何處理同步問題
(3)併發模型採用的什麼?
(4)在項目中印象最深刻的問題
(5)什麼是CGI服務器? -
有了解過其它什麼開源項目嗎?主要還看過一些什麼書呢?
我簡單說了一下,並且提到了muduo網絡庫
總結:這家企業比較注重基礎的考察,對語言,操作系統功底最看重,其次有時真的要看一點運氣,是不是能和麪試官聊得比較開,我兩次二面都不是太順利,可能是我不太胃口吧