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