博主是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先生也沒有透入太多
也不知道怎麼樣
希望你加油!!