前言:
面试我的是一个西北大学的ACM选手,是一个小姐姐,感觉和我差不多大,做LeetCode hard题目只用稍微想一下就能做出来的那种(这也是后来聊天得知)。小姐姐全程都很有礼貌,面试体验很好。但奈何自己菜的抠脚. 祝头条越来越好,以后有机会还会继续投。说项目吹的天花乱坠都是扯淡,工程能力(coding)达不到,就不要应聘算法工程师了,leetcode中等难度的题目能做到15分钟一道差不多可以摸到头条的门槛,达到这个水平在投简历吧,不然别去丢人了,这是我面试算法岗得出的经验。 学校发论文做学术的用轮子,改轮子的能力不要提,low的一匹。进大公司一定要提升自己的编码能力。就是那种面试什么都不问,上来给你几道算法题,就是那种动态规划,贪心,链表找环等常见算法题,你都能不费力KO掉的能力,写完了我们可以继续聊,不然一封感谢信送给你。 秋招继续刷题总结呀,抠脚啊,哎。
后记:今天8/2 又接到头条的电话了,说是被推荐到了其他岗位,好像被捞了一把额,感谢小姐姐不杀之恩,期待接下来的面试,来虐我吧,面试一次成长一点,血赚. 后面有时间补充被捞起来问的问题.....
第一道编程题:面试官在公屏左侧打了4个字 ---“1~n全排” .
#include "iostream"
#include<vector>
using namespace std;
void permutation(int* a, int k, int m)
{
int i, j;
if (k == m)
{
for (i = 0; i <= m; i++)
cout << a[i]<<endl;
}
else
{
for (j = k; j <= m; j++)
{
swap(a[j], a[k]);
permutation(a, k + 1, m);
//printf("%d\n", k);
swap(a[j], a[k]);
}
}
}
int main(void)
{
int n;
scanf("%d", &n);
std:vector<int> vect;
int arry[10];
for (int i = 0; i <= n; i++) {
vect.push_back(i+1);
arry[i] = vect[i];
}
cout << "全排列如下" << endl;
permutation(arry, 0, n-1);
system("pause");
return 0;
}
第二道题: 面试官写了2个字,“快排”.
用python写快一些
def quickSort(arr, left, right):
if left < right:
p = partition(arr, left, right)
quickSort(arr, left, p - 1)
quickSort(arr, p + 1, right)
def partition(arr,left,right):
key = arr[left]
low = left
high = right
while low < high:
while(low < high) and (arr[high] >= key):
high-=1
arr[low] = arr[high]
while(low < high) and (arr[low] <= key):
low+=1
arr[high] = arr[low]
arr[low] = key #左右"指针"相遇,key放到当前位置结束这一轮
return low
a = [12,1231,4,124,124,12,41]
quickSort(a,0,6)
print(a)
捞起来后问的问题:
3、我看到你简历你面用到了SVM,手推一下SVM吧.
我说以2分类举例,先写硬间隔的。我还没写完,面试官就叫我住手了,估计是我字太丑了.
这个详细的推导在李航老师的《统计学习方法》、周志华老师的西瓜书里面有详细推导,硬间隔,软间隔都有.
面试官叫我别写了,然后问 SVM软间隔的KKT条件作用是什么?
答:我只记得是拉个朗日乘子法的推广,都是用于求有约束条件下的极值的,然后本着不懂就不要瞎bb的原则没敢继续说。
面完下去查了一下:推荐https://www.zhihu.com/search?type=content&q=KKT%E6%9D%A1%E4%BB%B6 西工大王博的答案.
4、逻辑回归和线性回归说一下?
我:逻辑回归一般用于分类,输出一般是离散值,比如判断图片中是猫、不是猫这种. 线性回归输出一般是连续值,比如股票K线那种连续值,可以理解为 : 线性回归(连续值)后面接一个sigmoid映射到(0,1)作为概率,比如 >0,5 是猫,<0.5不是猫,也就是说变成了逻辑回归.
问:比如你刚才说的,二分类逻辑回归一般用什么作为损失,线性回归呢?
我:二分类逻辑回归一般用交叉熵作为loss,线性回归可以用均方差作为loss.
5、20个头条研发岗的员工分4排站队,每排5个,HR从中任选4个人送他们一本 《算法之美》,那么这4个人在不同排的概率是多少?
答:5^4*4!/(A16 20)
6、fasterRcnn中anchor和feature map,anchor和原图的关系说一下
答:fasterRcnn中的anchor可以理解为空间金子塔SPP的逆向,在最后一层的特征图上用3x3的kernel滑动,3x3kernel的一个中心对应到输入网络原图像9个anchor的中心,最后经过roipooling 后分别做回归(bounding box)和分类(有物体还是没有物体).
面试官: 怎么理解feature map对应到原图9个尺寸的anchor?
我:假如输入一张图是128*128*3的,经过卷积、池化、卷积、池化,假如最后下采样8倍,最后输出的是一个16*16的特征图(举例而已,没考虑channel数目),那么最后16*16区域的每一个像素对应的就是原图8x8的区域,因为下采样了8倍,anchor从feature map对应原图的anchor也可以这么理解.
7、面试官:优化算法中的牛顿法用过吗?
我:没有用过牛顿法,用过批梯度下降、随机梯度下降(SGD)、自适应梯度下降(Adam),没用过牛顿法做优化。
面试官: 牛顿法用了泰勒展开的前几项来近似求解方程的根,也是一种常用的优化算法中求最优解的方法,比Adam能更快的收敛。
我:好的,学习了,谢谢。
8、行,一面就聊到这吧,你有什么想问的?
我:你工作几年了?
面试官:刚满一年。
我:工资方便透露一下吗?
面试官:这个不方便说,只能告诉你不会低于25w一年.
我:好谢谢,我没有问题了。
面试官:那行,就到这吧.
附: 心态放好,本着学习的经验去面试的,祝bytedance越来越好!