【面经】百度提前批面试手撕代码题
结果:一面是过了,但是面试官说 AIDU 的要求比较高,背景还不够硬,关键时候还是要看硬性条件…非科班泪奔
1、自我介绍 & 项目介绍
百度 AIDU 提前批,上来先介绍项目,挑一个最熟悉的项目介绍。大概介绍了二十分钟,面试官想听的大概是
- 项目背景,要解决什么问题
- 具体思路,怎么解决问题
- 困难,遇到什么困难,怎么解决的
- 收获
所以介绍项目的时候也基本按照这个套路介绍,关键还是解决困难
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]
这一题和 一模一样,具体可以看这里链接的思路,本人博客中还有系列动态规划的题解
上一篇:
JS实现多线程数据分片下载