1. 程式人生 > >滴滴---2017校招---後臺開發面經

滴滴---2017校招---後臺開發面經

滴滴—2017校招—後臺開發面經

一面

  1. 自我介紹
  2. 演算法:寫個快排
  3. golang的協程介紹(執行緒模型,排程)
  4. c++虛擬函式的實現原理
  5. 在一間屋子裡有100盞電燈,排成一行,依從左至右的順序,編上號碼:1、2、3、4、……99、100,每盞燈上有一個拉線開關,開始時,全部的燈都關著,有100個同學在門外排著隊,第一個同學進屋把編號為1的倍數的所有電燈開關都拉一下(即把所有電燈開關都打開了),接著第二個同學進屋把所有編號是2的倍數的所有電燈開關拉一下(即把所有編號為偶數的電燈又關上了),第3個同學進屋把所有編號是3的倍數的電燈開關又拉了一下,如此下去,直到第100個同學進屋把100號電燈開關又拉了一下,這樣做完以後,問有多少盞電燈還是亮著的?
  6. 五子棋AI的核心演算法如何實現
  7. 設計演算法 如何高效把訂單派發給5km以內的司機

一些答案:

5:
考點:最大公約數與最小公倍數.專題:應用題.
分析:
本題的一個重要條件是最初時燈都是關著的,然後對每個編號分解質因數.
由於最初所有電燈是關著的,所以只有哪些拉了奇數次開關的電燈才是亮的,而每一盞電燈的拉線開關被拉了多少次取決於這盞燈的編號的數字有多少個不同的正約數,最後亮著的燈的編號只有為完全平方數.
所以,只有編號為1,4,9,16,25,36,49,64,81,100的電燈最後是亮著的.
點評:此題主要考查了數的奇偶性,得出最後亮著的燈的編號只有為完全平方數,從而解決問題.
6:
主要是將盤面定義成一個矩陣,然後定義規則(每種情況有不同的權重),在每次下棋的時候選擇權重大的地方去下棋。
可參考:

五子棋的核心演算法

二面

  1. 自我介紹
  2. golang 定義一個RPC,100毫秒之後如果沒有執行結束,一樣要返回
  3. golang中兩種型別的chan,有什麼區別,分別用在什麼場景下。
  4. c++虛擬函式
  5. c++記憶體結構
  6. 記憶體池的作用
  7. 記憶體池實現
  8. TCP和UDP的區別,https和http的區別,openssl的原理
  9. linux下用shell命令統計某個檔案中的一些資訊

一些答案:

三面

  • C++的多型
  • core dump如何定位問題出現在哪裡,什麼問題會導致core dump?
  • 線上的程式 core dump了,線下很難重現,如何找到問題出在哪裡?
  • golang一些知識
  • golang和c++有什麼區別,什麼時候用golang,什麼時候用C++
  • 分散式環境下獲取流資料中那個資料出現的次數最大
  • 你覺得你的優點和缺點是什麼
  • 講專案,遇到的最大的問題是什麼
  • golang中chan的作用是什麼,為什麼要用,使用它的好處。

一些答案:

2,3:
linux下core dump【總結】
coredump簡介與coredump原因總結
造成程式coredump的原因很多,這裡根據以往的經驗總結一下:
- 記憶體訪問越界
- 多執行緒程式使用了執行緒不安全的函式
- 多執行緒讀寫的資料未加鎖保護
- 非法指標
- 堆疊溢位