某安全服務商-2019秋招提前批,正式批面經

提前批

一面

首先是自我介紹,然後簡單問了下項目相關以及實習相關的問,緊接着就是懟題目了,考察基礎部分了

  1. 常用的排序算法有哪些?

// 我說了插入,選擇,冒泡,快速排序,堆排序,希爾,歸併。。。。

歸併排序的時間複雜度?

快速排序的原理?時間複雜度?最壞的情況複雜度?什麼時候纔是最壞複雜度?

  1. 最小生成樹瞭解嗎?

我說圖論的,然後就簡單介紹了下概念,關於圖論真的瞭解的少,還有那幾種圖論算法來着,,,,

  1. 二分查找怎麼實現的?

去平均值比較(口誤啊,md!!!)

  1. 紅黑樹有了解嗎?

我:查找樹,紅黑樹滿足的五條性質,以及特徵,這樣做的好處,不嚴格平衡,查找效率高,複雜度O(logn)。。。。

紅黑樹有哪些特徵?

我:又在胡扯了。。。

什麼叫平衡二叉樹?有什麼用處?

我: 我怎麼知道怎麼用????,就這麼用

如果節點數一樣,爲什麼二叉平衡樹更節省空間?

  1. 堆排序,最大堆怎麼實現的?

我:說了一些概念,然後說不太知道了。。。。

節點的調整?是從下往上還是從上往下?

堆排序就是建立堆,和調整堆的過程,從下往上,堆即完全二叉樹,數組存儲的的形式滿足:根節點,left 2n+1 right 2n+2

  1. kmp算法瞭解嗎?具體原理能說一下嗎?

我說next數組。。。
我巴拉說了幾句,不太知道了

  1. 進程間怎麼通信的?

我巴拉巴拉。。。,七種進程間通信簡單介紹了一下,各自的特點優缺點,適用場合

是不是漏了什麼重要的? 共享內存有了解嗎?怎麼實現的

我說mmap ,巴拉巴拉。。。。

具體是怎麼實現的? 接口,原理?

我說原理不太瞭解。。。。

  1. 管道有有名管道和無名管道,他們之間有什麼差別呢?

。。。。

管道的優勢?

我:我咋知道??? 後頭一想,我誤解面試官意思了,尷尬。。。。

  1. 程序運行結構棧結構?

我簡單描述了下。。。。

運行程序整體的棧結構是怎麼樣子的?

我。。。不知道

  1. 系統分用戶空間和內核空間有了解嗎?

在Linux裏面,對應於用戶態和內核態,與權限和特權級有關,在中斷,系統調用或者信號才使進程陷入內核態,獲得更高的訪問級別;32位的Linux系統裏面,虛擬內存對應的大小爲4G,高位1G對應的是內核空間,低位3G是用戶空間。

  1. 我們那個程序假如發生段錯誤,這個要怎麼去排查呢?

段錯誤一般與非法訪問有關,比如數組下標越界,棧溢出,遞歸調用層數過多;在Linux裏面可以用gdb調試,bt來查看堆棧

附:關於段錯誤相關具體可以查看這篇博客:C/C++段錯誤問題排查和解決方案

  1. select,poll,epoll三組I/O複用對比,優缺點

    ET,LT模式?

附:我之前簡單總結了的博客I/O複用之select,poll,epoll (一)

  1. TCP的擁塞控制有了解嗎?講一下?
    附:
    TCP的核心就要搞清楚狀態機轉換過程,那幾種算法(nagle,RTT算法,擁塞算法,滑動窗口,序列號)

TCP 的那些事兒(上)

TCP 的那些事兒(下)

TCP三次握手過程講一下?知道SYN分節攻擊嗎?

附:關於三次握手和四次揮手,這篇博文講得非常詳細了 面試官,不要再問我三次握手和四次揮手

  1. new 和 malloc區別?

new是C++運算符,關鍵字;而malloc是C語言庫函數
最核心的區別:new由編譯器支持,滿足對象語義,創建對象和銷燬對象會執行構造和析構函數,返回該類型指針;而malloc是庫函數,只是向系統申請一塊堆內存,無類型,需要進行一個C類型的強制類型轉換。
而new實際將malloc封裝了起來,解析可分爲兩個步驟

附:
細說C++(十七):new與delete解析(一)

細說C++(十八):new和delete解析-重載 (二)

  1. C++中的STL容器主要用過哪些呢?在使用map的時候,我們需要分離一個迭代器嘛,這個迭代器++和++迭代器有什麼區別?

我說,don‘t konw

  1. C++的虛函數怎麼使用呢?

我從多態開始講,然後介紹到虛函數的實現,以及虛函數表的結構,具體的調用過程,虛函數的繼承關係,以及對象模型

  1. 現在有一個int指針,其值爲假設爲100,執行++之後爲多少呢?

還問了一些,C語言函數調用的相關問題,一面大概半個多小時就結束了,半個多小時後,收到了二面通知

二面

  1. 先簡單出個算法小題目吧!假如現在有一個輸入有兩個集合A和B,輸出另外一個集合C,輸入是一些IP段,IP地址是延續的,並且都是整數,一百萬,假設其中只要一個IP地址的值,這個值要麼是IP地址要麼帶有一個IP段。並且在集合中無重複,亂序的,輸出的集合C是他們的合併

和麪試官討論了蠻久,說了下思路,我對這題感覺比較陌生,一直都沒太聽明白意思

  1. 你做過的一些項目?

我簡單介紹了一下,面試官好像不是太感興趣

  1. 網絡連接的過程?TCP的time_wait狀態,爲什麼客戶端要有?有什麼作用?分析一下

  2. 然後問了有了解過雲計算和其它開源項目沒有?

總之來說,二面不是太順利,面試官先是推遲了一天,然後這次有遲到了一個多小時,來的好像很匆忙得面試一下,似乎我的簡歷手頭上都沒有,然後自我介紹也沒有,就是問了這麼些問題就沒了

結果可想而知,在一個星期後,果不其然得收到了感謝信了


正式批

一面:

  1. 簡單自我介紹

  2. 說一下#define宏定義?帶參數的宏知道嗎?比如輸入一個或者兩個參數之類的,說一下這個的原理,起什麼作用?在什麼場景下會使用?

  3. 在做變量運算時,我們會有類型嘛,比如二元運算,我們要遵循一點原則瞭解嗎?

    在做不同類型的運算,有了解具體的類型轉換規則嗎?

  4. C語言裏面字符串的定義是什麼?字符串裏面可以包含“\0”嗎?

  5. strlen和sizeof對比?

  6. 問一下一個函數有局部變量,全局變量講一下作用域和生存週期?
    如果局部變量加static呢? 全局變量加static呢?

  7. main函數原型知道嗎?main的參數 agrc,argv

  8. 數據結構排序的算法?

  9. 遞歸和循環的實現那種好?

    遞歸有什麼缺點呢?爲什麼開銷大呢?

  10. 快速排序,歸併排序,堆排序講一下,對比,什麼時候應該選用哪一種?

  11. hashmap哈希表是一個什麼樣子的嗎?

hashmap 函數,key value
核心:1. 快速定址
2. 解決衝突

  1. TCP和UDP協議對比,優缺點?

    TCP的可靠性體現在哪些方面呢?

    什麼情況下會不可靠呢?不可靠的情況有哪些?

丟包, 未按序到達,網絡擁塞,多次發起連接

  1. Linux如何創建一個進程?知道進程樹嗎?開機之後有進程樹,爲什麼會有進程樹呢?

二面

  1. 先做一個簡單的自我介紹
  2. 問實習?

(1)實習期間主要做的什麼?有沒有參與到項目的開發中來?
(2)並且針對簡歷上的介紹做了一些問題
(3)實習主要帶給你的收穫是什麼呢?

  1. 問項目?
    (1)介紹一下項目,主要做的事情?
    (2)線程池怎麼實現的?如何處理同步問題
    (3)併發模型採用的什麼?
    (4)在項目中印象最深刻的問題
    (5)什麼是CGI服務器?

  2. 有了解過其它什麼開源項目嗎?主要還看過一些什麼書呢?

我簡單說了一下,並且提到了muduo網絡庫

總結:這家企業比較注重基礎的考察,對語言,操作系統功底最看重,其次有時真的要看一點運氣,是不是能和麪試官聊得比較開,我兩次二面都不是太順利,可能是我不太胃口吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章