面试题目回忆
刚刚结束了历时一个月找工作的历程,其中有挫折、有成长也有收获。收获的不仅仅是工作机会,对如何换工作有了新的认识。当然也有不少有趣的面试题目,记录如下,希望对在找工作的人一些帮助。
1. 编程题目:有一个字母(A到Z)组成的数组,可以按照如下方式进行消除1)连续相同的两个或者三个字母可以消除,例如AAA可以直接去除。2)连续相邻的三个字母可以去除,例如ABC可以直接去除。给定一个序列,问是否可以完全消除?消除的方式有几种?(搜索)
2. 二分查找相关,有序整数数组,右移K位,K不知道,问如何找到最小值?如何查找给定数值。
3. 杨氏矩阵查找,给定一个二维整数矩阵(m*n),每一行和每一列都递增,如何查找给定元素?(有比O(m+n)更优的算法吗?)
4. 有一个0或者1数据流,数据流长度未知,统计后N=1000位中,0的个数。采用队列保存后N位01数据,并记录0的个数。(深入讨论如何基于数组实现队列,针对本题如何利用整数数组模拟实现队列,主要是节省空间)
5. 从数据流中随机选择K个数据,保证每个数据选择的概率相同。并且证明。
6. 任务的均匀调度。有N个任务,每个任务有一个权重,权重越高表明调用频率越高,给出一个调用序列,实现均匀调度。例如有两个任务AB,其中A的权重为2,B的权重为1,则合理的调度为AABAABAAB。。。,给出精确算法(面试官提示是否有非精确,通过概率模拟算法)思路,假设三个任务A-5,B-2,C-1,概率模拟的思路是随机产生1到8的数,如果<=1,调度C,<=3调度B,<=8调度A。精确算法思路是计算每一个任务的调用间隔,选择权重最小的任务C,认为它的调用间隔为A:0.2,B:0.5,C:1.每次从调用周期中选择最小的进行调用,然后改任务累加该周期,反复进行。
7. 编写程序:C++中,给定带有注释的源程序,输出去掉程序中的注释。注释的方式包括“//”和“/**/”。题目中的陷阱在于程序中的字符串中可能带有注释符号,需要特殊考虑。
8. 编程实现计算字符串之间的编辑距离。
9. 编程实现N*N方阵的乘法,其中每一行大约有10%的有效数据,其他为0.设计矩阵结构并给出计算乘法的算法。
10. 二叉树的各种遍历,递归、非递归、O(1)空间的遍历等
11. 分布式排序算法,对于给定的Key-Value对进行排序,要求有效利用并行化。思路是划分。
12. 概率题:有一个8个抽屉的柜子和一份文件,该文件有80%的可能存在于柜子中,如果存在柜子中可能会出现在8个抽屉中的任何一个。现在打开其中一个抽屉没有发现该文件,问该文件存在于另外7个抽屉中的概率。(贝叶斯公式运用)
13. 图算法:两点间的最短路径计算。
14. 编程题:消除空格,给定一个字符串,要求去掉开头和结尾的空格,如果字符中间有多个空格则替换为1个。
15. 算法题目:在一个平面上,有一些矩形,矩形的边分别和X轴、Y轴平行,去掉被完全包含的矩形。给出最优算法。
16. 给定一个数字N,找到满足如下条件的X和Y,使得1/N=1/X+1/Y.
17. 给定一个100W位的数字,求其模9的结果。
18. 从N个无序的数中找M大的数,分析各种方法的使用范围。
19. 给出一个算法计算圆周率π,要求精确到1000位。
20. 给定两个有序数组,找其中位数。
21. 专业技术相关
- Kmeans算法如何实现?如何并行化?(4个优化点)如何进行效果优化?
- 常见机器学习模型推断。LR、SVM、NB等,如何防止过拟合?正则化的方法有哪些?
- 梯度方法原理?EM算法原理
- PLSA和LDA区别?
- simhash算法原理