騰訊后台開發社招面試記錄


        在7.11七點多快下班的時候接到了騰訊深圳總部打來的電話,問我對騰訊的后台開發有沒有興趣,我詢問得知開發主要是Linux下的C++,這和我的方向是比較匹配的,就表示有意願,接下來招聘人員說需要進行一個簡短的電話面試,我當時在公司辦公樓里面,怕信號不好,就講明稍等一會可否,人很爽快的說十分鍾過后打給我。決定好后我找到辦公樓下開闊的地方等了一會,還沒有電話打的過來,時間已經超過十分鍾,於是我主動打過去,撥打的是來電總機號碼,說請撥打分機號,我就掛斷。剛掛斷,就接到了招聘人員打來的電話,這點很棒,接下來就是簡短的電面內容。

電面:

1、list和vector實現有什么區別?講講vector的resize操作?

  list的空間是按需分配,內存空間不一定連續,在插入新元素時不會引起迭代器失效,刪除元素時只有當前元素的迭代器失效,插入刪除元素常數時間。

  vector的空間是線性連續的,在空間不足的情況下插入元素時需要三個步驟(1)開辟新的大塊內存區域(2)從舊空間拷貝數據到新空間(3)釋放舊空間(注:在插入新元素時,原空間后的內存大小不足以滿足新內存大小的需求時,才會新找空間),此操作較復雜,因此vector內部分配空間時總是供大於需,即按2*size大小來分配空間,避免頻繁移動數據操作,因此,插入刪除操作可能會引起迭代器失效。

擴展有關vector的兩個概念:

  容量:總的內存空間(由迭代器start和end_of_storage標識)

  大小:已用空間(由迭代器start和finish標識)

  resize操作:先來看看vector中resize的實現代碼

 1 void resize(size_type new_size, const T& x)
 2 {
 3     if (new_size < size())
 4         erase(begin() + new_size, end());
 5     else
 6         insert(end(), new_size - size(), x);
 7 }
 8 void resize(size_type new_size)
 9 {
10     resize(new_size, T());
11 }
 

由此可以看出是根據resize函數傳入的參數來修改vector的大小。

Tips:以上參考自《STL源碼剖析》

2、linux查看網絡狀態命令是什么?使用場景?

3、TCP和UDP有什么區別?應用場景?三次握手四次斷開的過程?TCP和保證可靠性?UDP有可靠性保證嗎?四次斷開如果服務器沒有收到客戶端的確認包,會一直等待嗎?等多久?

4、兩個浮點數如何比較大小?

  浮點數不能直接與0比較大小,需要滿足在給定的范圍內即可:if ((a > -1e - 6) && (a < 1e - 6))

  注:1e - 6 = 1 * 10^-6

5、指針和引用的區別?

  (1)指針有空間,存放的是變量的地址,引用只是變量的別名

    (2)指針可以為NULL,引用不可以為空

  (3)指針可以在初始化以后改變指向,引用則一旦初始化就不能改變

  (4)有const指針,無const引用

  (5)指針可以有二級操作(**p),引用無

  (6)操作指針指向的變量需要解引用(*p),而操作引用即可達到操作變量的目的

  (7)指針和引用自增操作的含義不同

以上就是電面的問題,在電面結束以后,招聘人員約我去公司面試,給的地址是萬利達13樓,看了網上的面經就去了。約的是兩點半,我兩點十五就去了,好像面試的人還很多,一樓大廳坐了很多人。找到了前台小姐姐查到了約我招聘人的手機號,然后坐電梯上樓打電話聯系到他,在進入辦公區時需要登記,然后給一個臨時訪問工牌。進入辦公區后,發現辦公室布置得很溫馨,有好多沙發和玩偶,感覺很棒。招聘人員帶我進入一個會議室,告訴我預約到三點半,給了一份筆試題,然后告訴我鄙視時間45分鍾,接下來會有三四十分鍾的面試,主要圍繞着鄙視答題狀況以及項目經歷展開,告訴完我這些后,幫我倒了杯水和拿了草稿紙,然后就說自己還有事情,就出去了。我大概看了一邊筆試題,可能自己太渣感覺不太好。

筆試題:

1、#define和const的區別?

  (1)define定義的只是一個字符串,沒有類型,存儲在代碼段,編譯器不能進行類型安全檢查,const有類型,存儲在數據段,能夠進行安全類型檢查

  (2)define不能夠調試,const定義的變量可以

  (3)define在預處理時期進行字符串替換,const在編譯時進行

2、char arr[20]和char *p = new char[20]的區別?初始化和未初始化的情況?放在內存的那個位置?

  char arr[20]定義的字符數組未初始化,存放在未初始化數據區(如果使用static關鍵字修飾,則會使用'\0'進行初始化,存放在靜態數據區)

  char *p = new char[20]定義的字符數組使用'\0'進行初始化,存放在堆中

  

3、C++內存分配有哪幾種方式?畫出C++內存布局圖?

  (1)由new/malloc()在堆上分配空間,需要手動釋放

  (2)由系統在棧上分配空間,比如函數調用的參數信息等,不需要手動的釋放

  (3)在靜態存儲區分配空間,如staic變量

 

4、各種排序算法的平均時間復雜度和最壞情況下的時間復雜度?

5、手寫string類的成員函數,構造、析構、復制構造函數、賦值運算符?類有一個數據成員count,此數據成員有什么用?(后續面試的時候問的)

6、寫一個服務器程序,要求給客戶端延遲一段時間發送消息,參數傳入延遲的時間和發送的消息,要求能並發處理?(具體要求四條,記不清楚了,就大概如此描述)

7、寫出代碼段的輸出

 1 void fun()
 2 {
 3       unsigned int a = 1;
 4       unsigned int b = 3;
 5       double c = 1/3;
 6 
 7       double d = 1;
 8       double e = 1/3;
 9   
10       cout >> c >> " " >> e >> endl;
11 }     

8、整數、指針、布爾變量、浮點數值如何與0比較大小?

9、(1)已知進程名,使用命令查看當前進程打開的文件句柄?

     (2)已知進程名,使用命令查看當前進程的網絡連接狀態?

     (3)已知進程名,查看eth0網卡與ip10.10.10.10:10653之間的TCP數據包?

       (還有一個問題,忘記了。。。。。。)

10、程序優化

 1 string Remove_ctrl(string str)
 2 {
 3       string StrResult;
 4       for (int i = 0; i <= str.size(); i++)
 5       {
 6              if (str[i] > 0x20)
 7              {
 8                     StrResult = StrResult + str[i]
 9              }
10       }
11       return StrResult;
12 }                    

接下來面試官過來了,拿着我的筆試試卷開始面試。

1、問筆試的第二題,將數組定義在函數內部和外部有什么區別?分配的內存在哪里?

2、看了排序的回答,問我是不是排序算法接觸的少?(回答的太爛了,都忘記了。。。尷尬)

3、引導我回答了筆試題6(提示字符串拼接如何做效率最高)

4、問了linux命令的題目

5、問了string類的題目?

     從這個類的定義看,你覺得這個類有什么特征?

     寫復制構造函數,你最關注什么?

     類成員變量count的作用?

6、在C++開發中主要用了人什么核心技術?

7、聊聊你做的一個印象比較深刻的項目?

8、說說你在工作中解決了什么難題,用了什么技術?具體講?

9、看了簡歷,問我對SIP協議了解多少?畫出SIP協議建立會話的時序圖?SIP協議屬於哪一層的協議?怎么標識對端?怎么查找路由得到對端的IP地址?

10、項目開發中用到了什么庫?

11、項目開發中使用的什么環境?代碼的架構?如何編譯代碼?

12、講講最近做的項目?

13、如何調試coredump文件?

14、工作中用的是c++9還是c++11?用到了11的什么特性?

15、你還有什么問題要問么?

差不多四點左右面試結束,告訴我項目主管出差了,需要商量后給出搜需面試通知。

個人感覺時知識點不到位,大廠社招比較關注實戰經驗以及使用的核心技術,但是基礎還是會問的,對做過的東西已經要熟悉,會問的比較深入。經過這次面試,個人感覺平時對知識面的廣度還是要多關注的,一個無意中看到的知識點也許會拯救尷尬境地中方自己呢?你看過的書,你學到的技術,都會存在與你看不見的地方,影響着你。(此處雞湯。。。)

這篇博客記錄了騰訊社招后台開發崗的筆試面試問題,自己太渣,還需要學習,因此沒給出答案,后續寫上自己會的答案。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM