2019年第一次面试

2019年第一次面试

今天下午去面试了A公司,是师兄内推的是暑期实习算法研究员, 约的是4点的面试,我3点35就到了,4点的时候面试官准时到来,把我领到一个小屋子里,然后我把我的简历给了他一份,然后面试开始了。

第一面

一面让我讲我最熟悉的一个项目,我就讲的第一个,中间他问了一些问题,但并不是技术问题,然后又问了我写的简历上面的其他的项目,让我给他解释roc的定义及意义。 让我给他讲了一下arcface,然后又问了我为什么要加margin,我给他解释了一下,但是我觉得解释的不太好,又忘了重点。

然后给我出了一个题,字符串全排列的,字符串处理的不太多,我想了一会儿也没有想到好的办法,我感觉该用递归,后来我就直接给他说我也没有想到好的办法。

然后问了我知道一些什么排序的算法吗,我说快排,归排,堆排,桶排,他说写一个你最想写的吧,

我就写了快排,感觉没有写错,

但是他给我写了一个例子,他说你把这个当成例子走一遍你写的代码,顺便给我讲一遍思路。 然后他中间说是不是哪个地方错了,我看了一下,说没有啊,他说再看看,我心里想确实没有啥错,但是当时被他说了一下,我就说while结束的时候两个该对换一下,然后又继续讲下去了,但是回来看了一下,其实第一次我没有写错。想到这,估计有点要凉的感觉。

第二面

一面是video组的,二面是recognition组的,二面问的都挺技术的,问的都是我没接触过的,

  • face search能不能实现实时的?

即假设底库如果有1亿的话,输入一张图,或者相机拍一张图就要在底库中找到这个人最有可能是的那个人是谁,如何做到实时的?

这个肯定不能算1亿次距离,然后取top1, 这样肯定不能够实时。

我当时说这1亿个底库如果先处理一下再存储的话可能能够做到,就是说1亿的数据库如何建立。

我说我记得学习knn的时候,有一个优化算法不用算一遍,就是把原始数据分成不同的区,他问如何分, 我回答的是,先把人的特征都normalize到球面上去,然后找一个基准线,再根据这个基准线把每个人的得分排个序,根据这个序将数据分成不同的区,这时候如果新来一个测试样本的话,就与这个基准线去比较,然后在对应的区里面再做小范围的search。 然后他说如果类很不均怎么办,(类不均的话会造成分的区不均),我想了想,说可以先聚类,把相似的人先放一块儿,然后找到每个簇的中心,将新的测试样本去和族的中心去比,然后再在族内search.

他点了点头表示理解,他说还没有其他的办法,我又想了一下,我说暂时想不到了。

他说其实可以试一下对数据降维,比如之前是512维,他说你可以先降到32维,虽然不太准确,但是计算量已经少了很多了,然后用这32维的特征去做一个粗定位,然后再用512维的做精定位。 我说这确实是个好办法。然后他问我问题又来了,如何衡量降维或者数据压缩的好坏,有没有什么指标?我说没做过这方面的不太清晰。

然后是编程,

第一道是 maxpooling, 我说我做过这个题了,他说那我换一道,

第二道是 一个排序好的数组,一个数s, 你能不能遍历一次就找到和为s的所有组合,我想了想,说可以,说了知道他点点头说可以。

第三道是 假设有n个人,标记为1,2,3,,,,n,然后有m个条件,这些条件是1要在2的前面5要在3的前面,…,

他说你写一个函数返回满足条件的站位方法。他给我具体又说了一下,他说你的输入就是一个整数n,一个list C, C里面有m个条件,输出是一个满足条件的数组.

我想了一下,我说暂时还没想到好办法,他提示了一下,他说你试试有向图, 然后我就有思路了,后来就一路写下来了。 然后他说有没有可能是个死loop,我说有可能,比如1要在2的前面,2 要在3的前面,3要在1的前面,他说在哪里加判断,我就在里面又加了一个处理的地方。

面完之后,他说我带你看看我们公司的产品吧,我说好,然后带着我到展览区转了一下,然后我就回去了。

上面的那个题目回来写了一下

conds = [[3,1], [2,1], [5,1], [9,5], [9,4], [9,3], [6,8], [6,4], [5,4]]
def fun(n,conds):
    assert n>=10
    a = list(range(1, n+1))
    #print(a)
    ret = []

    while len(conds) > 0:
        lefts = set([x[0] for x in conds])
        rights = set([x[1] for x in conds])
        heads = lefts-rights
        if len(heads) == 0:
            break
        if not heads:
            print("error")
        ret += list(heads)

        delete = []
        for i, x in enumerate(conds):
            if x[0] in heads:
                delete.append(i)

        temp = []
        for i in range(len(conds)):
            if i not in delete:
                temp.append(conds[i])
        conds = temp
    Temp = ret[:]
    for x in range(1,n+1):
        if x not in Temp:
            ret.append(x)
    return ret

print fun(10, conds)

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦