搜广推日常实习面经一

写在前面:除了校招的面经,实习的面经我也会更新,毕竟俺后续可能还要找一段实习。从八股来看,实习的八股更加的八股一点。和校招的面经有点不一样,所以还是可以学习了解一下。总之一句话:面向工作学习,而不是面向实验室学习!

唯品会广州—搜索算法实习生

  • 一、手撕二叉树的最大深度_力扣104
    深度优先遍历+递归
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root):
        if root is None: 
            return 0 
        else: 
            left_height = self.maxDepth(root.left) 
            right_height = self.maxDepth(root.right) 
            return max(left_height, right_height) + 1 
  • 二、手撕二叉树的层序遍历_力扣102
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        queue = [root]          # 根结点入queue
        res = []
        while queue:
            res.append([node.val for node in queue])
            ll = []                      # 存储当前层的孩子节点列表
            for node in queue:           # 对当前层的每个节点遍历
                if node.left:            # 如果左子节点存在,入队列
                    ll.append(node.left)
                if node.right:           # 如果右子节点存在,入队列
                    ll.append(node.right)
            queue = ll             # 后把queue更新成下一层的全部结点,继续遍历下一层
        return res
  • 二_1、二叉树自低向上的层序遍历_力扣107
    这个使用pyhon的列表的切片机制就比较好实现,将上面的层序遍历代码改成res[::-1]
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        #跟结点入queue
        queue = [root]
        res = []
        while queue:
            res.append([node.val for node in queue])
            #存储当前层的孩子节点列表
            ll = []
            #对当前层的每个节点遍历
            for node in queue:
                #如果左子节点存在,入队列
                if node.left:
                    ll.append(node.left)
                #如果右子节点存在,入队列
                if node.right:
                    ll.append(node.right)
            #后把queue更新成下一层的结点,继续遍历下一层
            queue = ll
        #列表倒序
        return res[::-1]
  • 二_2:二叉树的右视图_力扣109
    只需要将每一层的最后一个元素加入res就行。res.append([node.val for node in queue][-1])
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        if not root: return []
        #跟结点入queue
        queue = [root]
        res = []
        while queue:
            #只需要对该层最后一个元素入列表
            res.append([node.val for node in queue][-1])
            #存储当前层的孩子节点列表
            ll = []
            #对当前层的每个节点遍历
            for node in queue:
                #如果左子节点存在,入队列
                if node.left:
                    ll.append(node.left)
                #如果右子节点存在,入队列
                if node.right:
                    ll.append(node.right)
            #后把queue更新成下一层的结点,继续遍历下一层
            queue = ll
        return res
  • 三、Linux的基本命令
    这个就是随便看看了。提供几个常用的命令吧
    • 目录操作
      • pwd:显示当前的哦工作目录的绝对路径
      • ls:列出当前目录下的内容
      • cd:目录路径:切换到指定目录。
      • cd …:切换到上一级目录。
      • cd ~:切换到用户的主目录
      • mkdir 目录名:创建一个新目录。
      • rmdir 目录名:删除空目录。
      • rm -r 目录名:递归删除目录及其内容。
    • 文件操作
      • touch 文件名:创建空文件。
      • vim 文件名:使用vim打开文件
      • rm 文件名:删除文件。
      • rm -f 文件名:强制删除文件,不提示。
    • 权限管理
      • chmod 权限 文件名:修改文件权限。
        • 示例:chmod 755 文件名
          数字含义:
          7:读写执行权限(rwx)。
          5:读执行权限(r-x)。
          0:无权限(—)。
    • df -h:查看磁盘空间使用情况
  • 四、分类和回归的loss有哪些?
    • 分类任务
      • 交叉熵损失(Cross-Entropy Loss)
      • 二元交叉熵损失(Binary Cross-Entropy Loss)
      • 焦点损失(Focal Loss)
    • 回归任务
      • 均方误差(Mean Squared Error, MSE)
      • 平均绝对误差(Mean Absolute Error, MAE)
      • 对数误差损失(Logarithmic Loss, LogLoss)
  • 五、方差和偏差的区别 ,过拟合的时候说方差大还是偏差大?
    方差和偏差是机器学习中评估模型性能的重要概念,通常用于描述模型的误差来源。
    • 1.偏差(Bias)
      偏差描述了模型预测值与真实值之间的平均偏离程度。它反映了模型对数据的拟合能力。
    • 2.方差(Variance)
      方差描述了模型预测结果的波动性,即模型对数据的敏感程度。
    • 3.过拟合的模型对训练数据拟合得非常好,导致训练误差低(偏差小);由于模型对训练数据中的噪声也进行了过度拟合,导致其泛化能力差,在测试集上的表现较差(方差大)。

你可能感兴趣的:(搜广推面经,深度优先,算法,python,推荐算法,搜索引擎,pytorch,深度学习)