字节跳动抖音广告算法社招三面凉经

楼主是社招,今天面完三面,从面试官的表情感觉自己凉了。
前两面的面试官都很nice,问的问题也相对基础,基本都答上了
三面面试官标准的理工男有点严肃,而且是编程算法全能(汗颜),问了很多又偏又细的问题,应该凉了。
面试前几天从早上七八点复习到夜里十二点多,临阵磨枪毕竟不行,功夫还是要下到平时啊。
不说废话了,下面回馈牛油分享一下面试题目。

一面、二面

一面二面连着一起面的,有部分题记不住了,不过都是比较基础的简单题目。不过我还是犯了很多弱智错误了。。。

1、算法:找第K大的数(快排)

2、算法:从n个数字的数组中任取m个为一个组合,返回所有组合,顺序不一样的算一个组合(递归遍历+回溯)

3、LR损失,推导,并且求导

4、L1、L2的区别, L1为什么图像是菱形
我说菱形可以用取点值画出来,面试官问怎么取点,我就有点懵住了,面完才想起来菱形应该是 |x| + |y| = 1 的函数图像

5、梯度下降系列算法有哪些
我有点蒙住了,后来才想起来应该问问 momentum adam 之类的算不算

6、xgb介绍一下

7、你知道有哪些损失函数?

8、FM 与 LR对比一下

9、softmax 与 二分类 比有什么特点。

三面

然后三面就比较恐怖了,面试官很严肃,而且问的很细,有的题还很偏

1、看过什么论文

2、看过哪些开源项目

3、看过哪些开源框架的源码?看过tensorflow源码没?

4、看过xgboost源码没?

5、开源项目一般就训练个模型吧,就很少量的代码。看过什么大的工程的源码吗?
没看过源码别问了QAQ

6、让你学 C++ 你认为你多久可以上手?

7、算法:一个排好序的数组 arr 中,可能有重复数字,给定一个数target,求 arr[i] + arr[j] = target (i < j) 的对数。
提了两个方法:
1)一个字典记录出现过的数字和对应的索引列表(因为可能有重复,所以是列表)。然后一边遍历一边查询字典中是否出现了 target - arr[i],如果有则计数。
2)双指针。
但是有重复的数很麻烦,我考虑了一般的重复数情况,和两个重复数之和恰好为target的情况。但是面试官说还有别的情况,我就想不出来了,然后面试官说先到这吧。。。

8、auc介绍一下,给出计算公式

9、xgb怎么并行运算(除了自带的并行找特征分裂点,还说了一般模型的按数据和按特征并行)
但是面试官一直追问详细的并行方法。。。

10、xgb与LR各自的优缺点

11、LR为什么更容易并行

12、有哪些常见的模型优化算法

13、adam公式写一下(同时介绍了adam是momentum和RMSprop的结合)

14、RMSprop为什么比adgrad好?(答:利用了系数维护梯度平方,不是简单求和)

15、为什么 adagrad 简单求和不好?

16、GMM介绍一下,损失函数写一下

17、EM算法介绍一下

18、进程线程的区别?进程和线程相比有什么好处?

19、用户态和内核态

总结

总体来说一面二面问的比较基础,也比较顺利,三面不知道是不是压力面,但是看出了面试官很有实力,问的也很细,确实这样才能区分应聘者。
本来还以为三面是问一些场景题,还准备了一道,结果没用上。。。

还是自己太菜,不能怪别人,坐等感谢信。
#字节跳动算法面经##字节跳动##算法工程师##社招##面经#
全部评论
突然觉得自己行了
3 回复 分享
发布于 2020-07-06 02:17
看了一眼,大部分都不会,我心想完了,我才菜鸡了,再一看,算法岗,小心脏还是好受了点,哈哈
1 回复 分享
发布于 2020-07-06 19:07
请问楼主一面二面算法题是直接写代码吗?还是讲思路?
1 回复 分享
发布于 2020-06-22 23:53
#字节跳动算法面经# #算法面经# #社招面经# 👈点击话题查看更多同类面经干货!每日面经精选,为你发掘牛客干货!
1 回复 分享
发布于 2020-06-22 12:22
码算法题
1 回复 分享
发布于 2020-06-21 23:46
靠!校招的时候可以回答上,现在完全回答不上
点赞 回复 分享
发布于 2022-03-24 23:00
这三面也太离谱了吧,他就是为了考住你而问的,绝了
点赞 回复 分享
发布于 2022-03-03 22:59
mark一下
点赞 回复 分享
发布于 2021-03-17 19:56
先马再看
点赞 回复 分享
发布于 2020-10-08 18:44
大佬,线上面试咋推公式?
点赞 回复 分享
发布于 2020-09-10 18:31
大佬最后拿到offer没
点赞 回复 分享
发布于 2020-08-29 10:29
这个强,工程,算法都问得好全呀
点赞 回复 分享
发布于 2020-07-30 17:34
先码住
点赞 回复 分享
发布于 2020-07-13 11:01
我6.17号面的这个组,今天给offer了。算法题都差不多。
点赞 回复 分享
发布于 2020-07-09 16:13
三面  这么难吗  我有点害怕了
点赞 回复 分享
发布于 2020-07-01 20:06
Mark
点赞 回复 分享
发布于 2020-07-01 20:00
你这应该找的是机器学习吧,如果是cv他不会问这些,他们问我的都是升级版本的NMS问题还有一堆数据的分布,把我给整懵逼了
点赞 回复 分享
发布于 2020-06-29 21:23
楼主几年经验了呀,之前就是广告算法方向的吗
点赞 回复 分享
发布于 2020-06-23 13:19
感谢分享!#社招面经# #
点赞 回复 分享
发布于 2020-06-23 12:06
1、算法:找第K大的数(快排), lz你是排序后选了第k个嘛,感觉是不是用快速搜索更好?
点赞 回复 分享
发布于 2020-06-23 06:18

相关推荐

生成哈夫曼树[E卷,100分]题目描述给定长度为&nbsp;n&nbsp;的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于&nbsp;1&nbsp;。请完成一个函数,根据输入的数字数组,生成[哈夫曼树],并将哈夫曼树按照中序遍历输出。为了保证输出的[二叉树中序遍历]结果统一,增加以下限制:又树节点中,左节点权值小于等于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度高度小于等于右子树。注意:&nbsp;所有用例保证有效,并能生成哈夫曼树提醒:哈夫曼树又称最优二叉树,是一种带权路径长度最短的一叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为&nbsp;0&nbsp;00&nbsp;层,叶结点到根结点的路径长度为叶结点的层数)输入描述例如:由叶子节点&nbsp;5&nbsp;15&nbsp;40&nbsp;30&nbsp;10&nbsp;生成的最优二叉树如下图所示,该树的最短带权路径长度为&nbsp;40&nbsp;*&nbsp;1&nbsp;+&nbsp;30&nbsp;*&nbsp;2&nbsp;+5&nbsp;*&nbsp;4&nbsp;+&nbsp;10&nbsp;*&nbsp;4&nbsp;=&nbsp;205&nbsp;。输出描述输出一个哈夫曼的中序遍历数组,数值间以空格分隔示例1输入55&nbsp;15&nbsp;40&nbsp;30&nbsp;10输出40&nbsp;100&nbsp;30&nbsp;60&nbsp;15&nbsp;30&nbsp;5&nbsp;15&nbsp;10#include&nbsp;&lt;functional&gt;#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;vector&gt;#include&nbsp;&lt;queue&gt;using&nbsp;namespace&nbsp;std;struct&nbsp;TreeNode{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;val;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode*&nbsp;left;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode*&nbsp;right;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode():&nbsp;val(0),&nbsp;left(nullptr),&nbsp;right(nullptr){}&nbsp;&nbsp;&nbsp;&nbsp;TreeNode(int&nbsp;n):&nbsp;val(n),&nbsp;left(nullptr),&nbsp;right(nullptr){}&nbsp;&nbsp;&nbsp;&nbsp;TreeNode(int&nbsp;n,&nbsp;TreeNode*&nbsp;left,&nbsp;TreeNode*&nbsp;right):&nbsp;val(n),&nbsp;left(left),&nbsp;right(right){}};auto&nbsp;method&nbsp;=&nbsp;[](TreeNode*&nbsp;a,&nbsp;TreeNode*&nbsp;b){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;-&gt;&nbsp;val&nbsp;&gt;&nbsp;b&nbsp;-&gt;&nbsp;val;};void&nbsp;inOrder(TreeNode*&nbsp;root){&nbsp;&nbsp;&nbsp;&nbsp;if(root&nbsp;-&gt;&nbsp;left){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inOrder(root&nbsp;-&gt;&nbsp;left);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;root&nbsp;-&gt;&nbsp;val&nbsp;&lt;&lt;&nbsp;'&nbsp;';&nbsp;&nbsp;&nbsp;&nbsp;if(root&nbsp;-&gt;&nbsp;right){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inOrder(root&nbsp;-&gt;&nbsp;right);&nbsp;&nbsp;&nbsp;&nbsp;}}int&nbsp;getHeight(TreeNode*&nbsp;node)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!node)&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1&nbsp;+&nbsp;max(getHeight(node-&gt;left),&nbsp;getHeight(node-&gt;right));}int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;priority_queue&lt;TreeNode*,&nbsp;vector&lt;TreeNode*&gt;,&nbsp;decltype(method)&gt;nodeList(method);&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;perVal;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;perVal;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode*&nbsp;node&nbsp;=&nbsp;new&nbsp;TreeNode(perVal);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeList.push(node);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;TreeNode*&nbsp;root&nbsp;=&nbsp;new&nbsp;TreeNode();&nbsp;&nbsp;&nbsp;&nbsp;while(!nodeList.empty()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nodeList.size()&nbsp;&gt;&nbsp;1){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auto&nbsp;a&nbsp;=&nbsp;nodeList.top();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeList.pop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auto&nbsp;b&nbsp;=&nbsp;nodeList.top();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeList.pop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TreeNode*&nbsp;father&nbsp;=&nbsp;new&nbsp;TreeNode(a&nbsp;-&gt;&nbsp;val&nbsp;+&nbsp;b&nbsp;-&gt;&nbsp;val);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a&nbsp;-&gt;&nbsp;val&nbsp;&lt;&nbsp;b&nbsp;-&gt;&nbsp;val){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;left&nbsp;=&nbsp;a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;right&nbsp;=&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;aH&nbsp;=&nbsp;getHeight(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;bH&nbsp;=&nbsp;getHeight(b);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(aH&nbsp;&lt;&nbsp;bH){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;left&nbsp;=&nbsp;a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;right&nbsp;=&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;left&nbsp;=&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;father&nbsp;-&gt;&nbsp;right&nbsp;=&nbsp;a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeList.push(father);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nodeList.size()&nbsp;==&nbsp;1){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;nodeList.top();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeList.pop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;inOrder(root);}
点赞 评论 收藏
分享
评论
39
342
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务