当前位置:   article > 正文

最终还是放弃了拼多多 NLP 算法岗(大模型方向)Offer。。。_拼多多nlp

拼多多nlp

暑期实习基本结束了,校招即将开启。

不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

总结链接如下:

《大模型面试宝典》(2024版) 发布!


分享一位群友面拼多多NLP算法岗(大模型方向)的面经,这位同学是有两个 Offer 机会,一个是国企,一个是互联网企业。

考虑到互联网的 996 内卷和当下的就业环境,最后去了国企,放弃了这家企业

把面经进行了汇总:

  • 自我介绍
  • 简历项目深度交流
  • 项目的背景是什么,主要解决了什么问题?
  • 训练数据集是如何构造的,都有什么类型的数据,总量有多大?数据质量怎么评估?大模型怎么做数据评估?
  • 有没有进行微调?
  • 解释一下 Prompt Tuning、Adapter Tuning、LoRA 等微调方法的原理,分别适用于哪些场景?
  • 如何评估模型微调效果的好坏呢?
  • 微调用了多大的显卡,有关注内存占用情况吗?
  • 是否了解常用的模型加速技巧?
  • 微调如何避免出现灾难性遗忘和“复读机”问题?
  • 微调和训练一个全新模型相比,有哪些优势?
  • 大模型高质量微调数据筛选有哪些方法?
  • 你认为大模型微调还面临哪些挑战?
  • Tranformers 和 Bert 相关:
  • 介绍 transformer 网络结构
  • 谈谈位置编码 RoPE
  • 谈一谈对transformer的QKV的理解
  • Self-Attention 的表达式
  • Bert中为什么要在开头加个[CLS]?
  • attention中的mask有什么用?(BERT中)
  • bert和mbert的区别
  • bert预训练方法
  • MLM 和 NSP都有什么缺点
  • 介绍transformer以及multi attention,为什么用多头
  • 了解什么attention的变种 ?
  • flash attention解释一下?
  • llama中用的attention是?
  • llama和transformer的区别

代码题:

  • 最长递增子序列

最长递增子序列(LIS)的算法可以通过动态规划实现。下面是一个Python代码示例:

def longest_increasing_subsequence(nums):
    if not nums:
        return 0

    dp = [1] * len(nums)
    
    for i in range(1, len(nums)):
        for j in range(i):
            if nums[i] > nums[j]:
                dp[i] = max(dp[i], dp[j] + 1)

    return max(dp)

# 示例
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(f"最长递增子序列的长度是: {longest_increasing_subsequence(nums)}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

该函数使用一个数组 dp 来存储到目前为止每个元素结尾的最长递增子序列的长度。通过两层循环比较每个元素和它之前的元素,如果当前元素大于之前的元素,就更新 dp 数组中的值。

这个算法的时间复杂度是 (O(n^2)),其中 (n) 是输入数组的长度。如果需要更高效的解决方案,可以使用二分查找,将时间复杂度降到 (O(n \log n))。

  • 给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。

这是一个经典的电话号码字母组合问题,可以通过回溯算法来解决。以下是Python实现:

def letter_combinations(digits):
    if not digits:
        return []

    phone_map = {
        "2": "abc", "3": "def", "4": "ghi", "5": "jkl",
        "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"
    }
    
    def backtrack(combination, next_digits):
        if not next_digits:
            result.append(combination)
        else:
            for letter in phone_map[next_digits[0]]:
                backtrack(combination + letter, next_digits[1:])
                
    result = []
    backtrack("", digits)
    return result

# 示例
digits = "23"
print(f"字母组合为: {letter_combinations(digits)}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这个函数定义了一个映射表 phone_map,将每个数字对应到它的字母上。通过递归和回溯来生成所有可能的字母组合。递归函数 backtrack 负责在每一步选择当前数字对应的一个字母,并继续处理剩下的数字,直到处理完所有数字。最终的结果存储在 result 列表中。

反问:

  • 业务是做什么的?

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了算法面试和技术交流群,相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2040,备注:来自CSDN + 技术交流

用通俗易懂方式讲解系列

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/917156
推荐阅读
相关标签
  

闽ICP备14008679号