面試經驗:騰訊微信事業羣 - 微信總部機器學習崗面試

博主是3、4月份在騰訊上投的簡歷,因爲博主在廣州讀研,想在廣州工作,就選擇的微信事業羣了。

然後我忘記筆試了。。。。。(都不發郵件提醒我!!!!)

結果我過幾天去看官網上看啥情況,結果筆試時間已經錯過了,我當時就口吐芬芳!!!

之後就沒啥動靜,到了5月的一個晚上,我接到了騰訊的電話,是微信總部的座機打來的(幸好手機識別了是微信總部的電話,不然我以爲是騙子。。。。。)

電話裏,他就介紹了他自己(這裏就簡稱他是R先生),之後就問我一些基本情況,比如啥時候畢業、啥時候可以來實習什麼的。

關鍵的是:

R先生讓我明天帶電腦,來微信總部面試。

 

第二天我來微信總部這的一個咖啡廳,等待R先生。和我一起等R先生還有一個研究僧,本科南航、碩士中大的,也是挺優秀的小夥子。

之後R先生來了,把我們帶入一個會議室,裝修像賓館的那種。從R先生的口中得知,和我打電話的是他,加我微信的也是他,面試官是他,如果進入騰訊了還是跟他。

在面試之前,我也搜了很多的面經,在牛客網上,結果!!!!!!

一個都沒用上,好氣啊!!!!

R先生一上來就是讓我們手撕代碼(2個人同時被面試)

 

 

代碼題:

問題1:判斷一個單項列表是否有環,請寫出最少的時間複雜度的程序,不限環境和語言

博主是看是面試機器學習崗,所以就用Python寫的,思路是採用快慢指針

fast和slow,一起從頭結點開始往後遍歷,fast每次移動兩個節點,slow每次移動一個節點,

這樣,如果存在環結構,那麼fast指針在不斷繞環過程中,肯定會追上slow指針。

class Node(): #定義一個Node類,構造兩個屬性,一個是item節點值,一個是節點的下一個指向
      def __init__(self,item=None):
          self.item = item
          self.next = None

 def findbeginofloop(head):#判斷是否爲環結構並且查找環結構的入口節點
     slowPtr = head         #將頭節點賦予slowPtr
     fastPtr = head         #將頭節點賦予fastPtr
     loopExist =False       #默認環不存在,爲False
     if head == None:       #如果頭節點就是空的,那肯定就不存在環結構
         return False
     while fastPtr.next != None and fastPtr.next.next != None:      #fastPtr的下一個節點和下下個節點都不爲空
         slowPtr = slowPtr.next           #slowPtr每次移動一個節點
         fastPtr = fastPtr.next.next      #fastPtr每次移動兩個節點 
         if slowPtr == fastPtr :          #當fastPtr和slowPtr的節點相同時,也就是兩個指針相遇了
             loopExist = True
             print("存在環結構")
             break

     if loopExist == True:
         slowPtr  = head
         while slowPtr != fastPtr:
             fastPtr = fastPtr.next
             slowPtr = slowPtr.next
         return slowPtr

     print("不是環結構")
     return False

 if __name__ == "__main__":
     node1 = Node(1)
     node2 = Node(2)
     node3 = Node(3)
     node4 = Node(4)
     node5 = Node(5)
     node1.next = node2
     node2.next = node3
     node3.next = node4
     node4.next = node5
     node5.next = node2
     print(findbeginofloop(node1).item)

 

問題2:有64匹速度不同但恆定的馬,有8條一樣長的跑道,每次只能跑8匹馬,沒有計時器,無法知道每匹馬跑一次跑道具體時間,只能知道名次。那麼如何得出最快速度的那匹馬,請寫出最少的時間複雜度的程序,不限環境和語言。

實話說,這題我拿到的時候我有點懵。

然後我就寫了大致下框架,實話:我當時也不太會,然後說了下自己的思路。。。。。。。

R先生也看出我不太會,也沒有爲難我了

 

問題3:(這個我不太記得了)問的是GBDT算法,(我簡歷上寫過用這個算法)問的是GBDT中的梯度下降,問的特別深!

R先生說:現在的函數包裝的很好,這個問題可以瞭解你是不是真的了GBDT和解梯度下降。

我記得我當時說的是:批量梯度下降、隨機梯度下降以及小批量梯度下降什麼之類的。

但是R先生說和這些無關。。。。。。

 

問題4:問我簡歷上的項目

然後我就介紹,R先生聽得很仔細,有一點小問題就會提出來,所以你要好好練習你簡歷上的項目,以免時間就了忘記了

 

問題5:你瞭解LSH(局部敏感度哈希函數)嗎?

面試時,R先生都沒有說中文,我還想了想,才說的,我就先介紹下哈希(先從簡單的說)

哈希是通過一個哈希函數將數據映射到一個哈希表,通過哈希表的索引,來使搜索時間從線性搜索,對於不同的應用和數據會有不用的哈希函數

LSH主要運用到高維海量數據的快速近似查找。LSH不像樹形結構的方法可以得到精確的結果,LSH所得到的是一個近似的結果,

LSH的主要思想是,高維空間的兩點若距離很近,那麼設計一種哈希函數對這兩點進行哈希值計算,使得他們哈希值有很大的概率是一樣的。同時若兩點之間的距離較遠,他們哈希值相同的概率會很小。

(R先生會點點頭,我就有信心繼續說下去了)

對於LSH算的主要流程分爲兩個部分,一個是建立哈希結構,另一個便是檢索。在知道具體度量方式的情況下,利用該度量下的LSH哈希函數,建立哈希結構。首先選取合適的k,l參數,然後建立l張哈希表,每張哈希表用k個獨立抽取的基本哈希函數聯合判斷,建立哈希表的內部結構。哈希值相同的點放在一起,哈希值不同的放在不同的地方。至於查詢,當q成爲我們的查詢點,首先計算q在每張哈希表的哈希值,取出對應哈希值的哈希桶內所有點,與q做距離計算。找到滿足我們條件的點作爲查詢結果。

 

 

面試就5個題目。大約一個半小時左右,面試結束後,R先生說這幾天讓我等通知。

然後我就回去了。

R先生也沒有透入太多

也不知道怎麼樣

希望你加油!!

 

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