激动难以入眠-记录一个非科班算法四战头条面试之路
第一次(2017.05)- 爬虫实习生
2、去除字符串中连续的ac 和 b,比如aaccd,去除之后就是d,因为去除中间的ac后,剩下acd,则再去除ac,剩下d。
这道题当时完全没有考虑到用栈来解决,写了一个递归的很麻烦的办法,结果可想而知啦。
用栈很好解决啦,遇到一个c,判断栈顶是不是a,如果是a,则栈顶元素出栈,如果遇到b,则不做任何操作,如果遇到其他情况,将元素压入栈顶。
3、将一个字符串变为数字,这其实考察的是python内部str转int的知识,可以通过看源码了解内部的实现机理。
第二次(2017.07)- 算法实习生
1、LDA的推导
2、常见的分类算法有哪些?
3、SVM的推导
4、SVM如何选择核函数?
知乎帖子:https://www.zhihu.com/question/21883548
5、LR的推导
6、LR的缺点
第三次(2018.04)- 算法暑期实习生
一面:
遇到了一个搞图像算法的面试官,跟我的方向不太符合,所以没有问太多问题。总体来说比较轻松
1、CNN的原理简单说一下。
2、SVM的原理。
3、链表实现加法,由于给出的链表已经是按数位逆置的了,所以比较简单。
二面:
考了很多知识,涉及到爬虫,计算机网络,操作系统,手写代码推导,数据结构题,java基础知识,算法原理等等
1、LDA的原理
2、极大似然的原理
3、LR的推导,损失函数,梯度下降过程
4、操作系统的LRU
5、浏览网页的流程,涉及什么链路协议之类的
https://blog.csdn.net/qq_26460507/article/details/78035933
6、Map和HashMap的区别
HashMap:hash+链表+红黑树
红黑树:https://www.jianshu.com/p/0b68b992f688
7、如何对反爬虫机制进行破解
8、手写推导FM,并说出FM和FFM的时间复杂度
7、判断一棵二叉树是不是二叉搜索树
8、将一棵二叉搜索树转换成双向链表(用递归写)
https://blog.csdn.net/zengzhen_csdn/article/details/51198530
9、L1和L2的区别,以及各自的使用场景
10、为什么梯度是函数变化最快的方向
https://zhuanlan.zhihu.com/p/24913912
11、tfidf的原理
12、操作系统中的动态链接和静态链接
13、数据库的一道底层原理题,好像是存储吧,记不清了,反正不知道。
第四次(2018.08)- 秋招算法应届生
一面:
1、介绍项目
2、强化学习PG的推导
3、强化学习DQN,DDQN,AC,DDPG的区别
4、n个[0,n)的数,求每个数的出现次数(不能开辟额外空间)
这里关键是看清楚题意,n个数,然后是左闭右开的区间,也就是说每个数都不会大于等于n,那么思路就来了:如果我们给一个索引下的数不管加上多少个n,那么这个数对n取余的话,我们就能知道这个数原来是多少;另一方面,如果一个数出现一次,我们就在对应索引位置下的数加上n,那么每个数对应索引位置上的数对n取商的话,就是这个数出现的次数。这样就做到了没有开辟额外的空间。代码现场直接略过了。
5、K个有序数组,找一个长度最小的区间,在这个区间里至少包含每个数组各一个数。
二面
1、介绍DQN的项目
2、数组的全排列(空间复杂度O(1))
3、两堆钞票,尽可能均分(利用背包问题的思想)
三面:
1、无向无环图中,最短路径的最大值(O(n^3)的解法)
这里考察的其实就是Floyd算法。哎,只可惜自己当时没有复习图的相关算法,完全不会写呀。
2、LSTM的公式
3、RNN为什么出现梯度消失