目录

北京百分点面经

前几天试着投了简历,没想到有两家约了面试,一个是得物一个是北京百分点,得物面试没有怎么准备,太仓促了,二面挂了,百分点拿到了offer,但决定考研了就没去,记录一下面试的问题。岗位是nlp算法岗。

一面:技术面

先自我介绍,然后介绍了一下项目。根据印象提问有以下内容:

  • 有没有数据不平衡问题,是怎么解决的?欠采样,过采样,focal loss,着重介绍了一下focal loss的参数含义。
  • 对分类问题最后一层要怎么做:max、mean,全连接
  • 有没有尝试过别的模型:没有,然后面试官说其实textcnn和fasttext效果不一定比bert效果差。
  • 对传统的神经网络了解吗?了解。介绍一下lstm。按照三个门分析就行,哪个门是什么作用,注意一下激活函数的不同。
  • 介绍一下bert,从输入开始介绍就行,把两个任务也展开说一下。
  • 介绍一下tfidf,这个很简单,说一下tf和idf的含义和公式就行。
  • 数据增强怎么做的?同义词替换、回译。
  • 介绍一下提示学习。说一下主要思想,还有离散prompts和连续prompts。

大体就记得问了这些,总体来说不是很难,而且大多数都是神经网络相关的,准备了一些传统的机器学习方法也没有用上。 然后是两道算法题: 第一题:已知一随机发生器,产生0的概率是p,产生1的概率是1-p,
现在要你构造一个发生器,
使得它构造0和1的概率均为 1/2;

def res():

    a = random()

    b = random()

    if a == 0 and b == 1:

        return 0

    if a == 1 and b == 0:

        return 1

    else:

        return res()

由于需要产生1/2,而用1位0,或1位1无法产生等概率, 因此,考虑将随机数扩展成2位: 00 pp 01 p(1-p) 10 (1-p)p 11 (1-p)(1-p) 有上述分析知道,01和10是等概率的,因此我们只需要产生01和10就行了。 于是可以,遇到00和11就丢弃,只记录01和10。可以令,01表示0,10表示1,则等概率1/2产生0和1了。

当时面试官问了这个问题的时候有点懵,因为之前从来没有做过,但是经过面试官的提示也是写出来了。

第二题是LCS问题,就是最长公共子序列问题,当时想到了使用动态规划,但是懒得在纸上推转移方程了,就直接暴力解决了。

def LCS(s1, s2):
    dp = [[0 for _ in range(len(s1))] for _ in range(len(s2))]
    res = 0
    for i in range(len(s1)):
        for j in range(i, len(s2)):
            if s1[i:j+1] in s2:
                res = max(res, j+1-i)
    return res

print(LCS("baced", "acefg"))

二面综合面

上来也是自我介绍加项目介绍,有些问题和一面重复了,就不赘述。

  • 介绍几种bert的变体,albert、roberta,就介绍了这两种。
  • bert的mask策略。

具体的也忘了,当时也没有想直接记录下来,后面就等到了口头offer,过几天也发了正式offer,但是因为要考研等一些原因就拒了,等考完研再找吧。这次只在软件上投了投简历,没有内推等,还是挺有收获的。

总结

这几轮面试还是很有收获的,也算是模拟了以后的考研复试,虽然以后大概率是线下复试了。还有就是简历上最最重要的就是实习经历,我之前也没有实习经历,因此没有实习经历的情况下最重要的就是项目,别的基本上都没有问,不过还是要保证你写上去的都是真的会的。因此重要的就是实习和项目,获奖经历可能只是给面试的机会更大一些。这次拒绝offer少了一次实习经历还算有点可惜,不过相对而言还是考研重要一些。