结果:一面是过了,但是面试官说 AIDU 的要求比较高,背景还不够硬,关键时候还是要看硬性条件…非科班泪奔

1、自我介绍 & 项目介绍

百度 AIDU 提前批,上来先介绍项目,挑一个最熟悉的项目介绍。大概介绍了二十分钟,面试官想听的大概是

  1. 项目背景,要解决什么问题
  2. 具体思路,怎么解决问题
  3. 困难,遇到什么困难,怎么解决的
  4. 收获

所以介绍项目的时候也基本按照这个套路介绍,关键还是解决困难

2、开放题

有一群粘性强的老用户,你有很多数据,而后来了一群新用户,他们的数据是完全空白的,怎么用老用户的数据来拟合新的数据

因为对搜索推荐不太懂,只是抽象得回答了一下。

结合面试官的回答总结一下:

  1. 总体来说要利用好老用户的数据,结合一些老用户的数据。比如某个产品是爆款,那么可以往新用户推,新用户很可能会接受,一旦接受,就有新用户的数据了。(可以抽象化为如何初始化的问题,随机初始化肯定不行,需要结合历史数据做一些优化过的初始化)关于初始化问题,也是解决非凸函数得一种方法,就是利用一些算法随机撒点(比如遗传算法等),而后再求解,更有可能收敛到最优点。
  2. 需要有一个目标函数,输入新用户的某些特征,使得目标函数最大化,剩下的就是一些优化方法了

3、手撕代码

1. 全排列
输入:3<=N<=10,比如 N = 3
输出:
123
132
213
231
312
321
import numpy as np
def permute(N):
    nums = []
    for i in range(1, N+1):
        nums.append(i)
    res = []
    def backtrack(nums, tmp):
        if not nums:
            res.append(tmp)
            return
        for i in range(N):
            backtrack(nums[:i] + nums[i+1: ], tmp + [nums[i]])
    backtrack(nums, [])
    return res

2. 0-1 背包问题

给定物品重量为 T:10<=T<=10000 ,表示天平上得物品
给定 N 个砝码:10<=N<=10000 ,表示砝码的重量,其中每个砝码的重量分别为

1<=n1<=100
1<=n2<=100
.
.
.
1<=nN<=100

求一共有多少种摆放砝码的方案(相同重量的砝码算不同的方法,即比如 n1 == n2,则算两种)

def func(T, 100):

    dp = [0] * (T + 1)
    dp[0] = 1
    
    for n in range(1, N + 1):
        for x in range(n, T + 1):
            dp[x] += dp[x - n]
            
    return dp[T]

这一题和 【LeetCode】322. 零钱兑换 & 518. 零钱兑换 II一模一样,具体可以看这里链接的思路,本人博客中还有系列动态规划的题解
【完整版】大厂面试 高频 数据结构 & 算法题 & 概率题 & 机器学习 【top 200】 大汇总