专栏名称: 学姐带你玩AI
这里有人工智能前沿信息、算法技术交流、机器学习/深度学习经验分享、AI大赛解析、大厂大咖算法面试分享、人工智能论文技巧、AI环境工具库教程等……学姐带你玩转AI!
目录
相关文章推荐
四川日报  ·  “蓉瘾”犯了怎么办?凤凰山见! ·  2 天前  
南方能源观察  ·  《南方能源观察》电子刊上线!订阅方式戳→ ·  3 天前  
达州发布  ·  正式获批!545.76公顷…… ·  3 天前  
51好读  ›  专栏  ›  学姐带你玩AI

滴滴算法工程师一面&二面

学姐带你玩AI  · 公众号  ·  · 2024-12-19 18:22

正文

来源:投稿  作者:LSC
编辑:学姐

一面

1.自我介绍

2.介绍项目

做推荐算法相关的,目前做召回,介绍了召回策略和召回u2i模型。

3.场景题

有很多用户,点击或者购买了优惠券,但是是随机点击或者购买的,如果直接把点击或者购买的样本当做正样本使用,模型会学不好?在召回层面应该怎么解决?

答: (1) 样本层面 。可以设定一个阈值或者频率,假如点击购买的次数频率低于这个值,那么可以把这个样本当成困难负样本,或者把这些正样本都以一定的概率当成困难负样本,还可以对真的正样本进行加权,采用类似的策略,就是不要全部都当成正样本使用,并且尽可能去构造困难负样本,让简单和困难负样本达到一定的比例,理想情况下一般是1:1。

(2) 损失函数方面 。可以采用infonce circleloss tulpetloss等拉大正负样本的差距。

(3) 特征方面 。可以在训练样本中增加与点击购买优惠券是否随机相关的一些特征,主要结合业务,方便模型进一步学习和训练,也可以由模型去生成一些特征,比如对偶增强的方法或者transformer特征回归,当然这个难度比较大。

(4) 策略方面 。采用一些专门的策略,比如设定一些规则把一些随机性明显的样本过滤等,或者当成一路特殊的召回队列

(5) 模型方面 。可以增强模型参数提升学习能力。比如可以使用mmoe 特征交叉等,但是要注意模型不能太大,不然会导致线上服务响应慢。

其中(1)是最重要最关键的。

4.coding

给定一个N阶楼梯,一次可以向上走1阶,也可以走2阶,并且每一次登顶爬升过程中可以有一次回退机会,回退机会可以用也可以不用,如果使用只能回退一阶,综合考虑这几种情况,求解一共有多少种登顶走法?

def solve(N):
    if N == 0:
        return 1
    if N == 1:
        return 1

    dp = [[0] * 2 for _ in range(N + 2)]  # dp[i][0]未使用回退, dp[i][1]已使用回退

    # 边界条件
    dp[0][0] = 1
    dp[0][1] = 0
    dp[1][0] = 1
    dp[1][1] = 1

    for i in range(2, N + 1):
        dp[i][0] = dp[i-1][0] + dp[i-2][0]
        dp[i][1] = dp[i-1][1] + dp[i-2][1] + dp[i+1][0] if i + 1 <= N else dp[i-1][1] + dp[i-2][1]

    return dp[N][0] + dp[N][1]

5.反问

核心部门,业务很多,使用传统的推广搜算法,业务包括广告投放,因果推断,用户画像等。

二面

1.自我介绍

2.介绍自己的实习、工作项目,进行了相关提问

3.跷跷板问题怎么解决?

4.Coding

合并两个有序链表,用递归和非递归两种方法写

(1)递归

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
    if not l1:
        return l2
    if not l2:
        return l1
    
    if l1.val         l1.next = mergeTwoLists(l1.next, l2)
        return l1
    else:
        l2.next = mergeTwoLists(l1, l2.next)
        return l2

(2)非递归

class link:
    def __init__(self, x):
        self.data = x
        self.next = None

def mergeSortList(link1, link2):
    head1 = link(0)
    head2 = link(0)
    head1.next = link1
    head2.next = link2

    res = link(0)
    head3 = res
    while link1 != None and link2 != None:
        if link1.data <= link2.data:
            temp = link1
            head1.next = temp.next
            temp.next = None
            res.next = temp  # ****
            link1 = head1.next
        else:
            temp = link2
            head2.next = temp.next
            temp.next = None
            res.next = temp  # ****
            link2 = head2.next
        res = res.next

    if link1 != None:
        res.next = link

    elif link2 != None:
        res.next = link2

return head3.next

--- END ---

关注“ 学姐带你玩AI ”公众号, 回复“ 简历

领取算法工程师万能简历公式+模板







请到「今天看啥」查看全文