面试经验:腾讯微信事业群 - 微信总部机器学习岗面试

博主是3、4月份在腾讯上投的简历,因为博主在广州读研,想在广州工作,就选择的微信事业群了。

然后我忘记笔试了。。。。。(都不发邮件提醒我!!!!)

结果我过几天去看官网上看啥情况,结果笔试时间已经错过了,我当时就口吐芬芳!!!

之后就没啥动静,到了5月的一个晚上,我接到了腾讯的电话,是微信总部的座机打来的(幸好手机识别了是微信总部的电话,不然我以为是骗子。。。。。)

电话里,他就介绍了他自己(这里就简称他是R先生),之后就问我一些基本情况,比如啥时候毕业、啥时候可以来实习什么的。

关键的是:

R先生让我明天带电脑,来微信总部面试。

面试经验:腾讯微信事业群 - 微信总部机器学习岗面试_第1张图片

 

第二天我来微信总部这的一个咖啡厅,等待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先生也没有透入太多

也不知道怎么样

希望你加油!!

 

你可能感兴趣的:(小问题)