为了账号安全,请及时绑定邮箱和手机立即绑定

互联网公司最常见的面试算法题有哪些?

所谓知己知彼,百战不殆,今天就和大家聊聊互联网公司那些最常见的面试算法题。


https://img1.sycdn.imooc.com//5b515f590001680e03780250.jpg



清点面试算法题之前我们先要明确面试官考察的目的,比如有一道经典考题是“怎么用3升和5升的桶量出4升的水?”其实这道题的答案并不难,但是对于面试官,可以通过这道题考察的内容就比较丰富了。





一、概括一下面试算法的目的

1、基础知识储备量

考察知识储量是面试算法最基本的目的,但是直接考察算法基础已经很少出现在实际面试中了,需要快速筛选面试者的时候才会用到。

2、思考方向

有的算法可能有两个甚至多个答案,这时面试官就不是单纯的考察面试者的知识储备量了,通过面试者的答案可以看出面试者的思考方向,符合公司的日常工作需求才是“有缘人”。

3、解决问题能力

能不能解出答案是次要的,分析和解决问题的思路才是面试官考察的根本所在。

4、辅助能力

算法是整个计算机领域里最基础的学科,其余大部分的学科和技能都是在算法的基础上展开的,所以这类考察实则是考察面试者能否快速融入工作当中。

总的来说,算法题是综合考察面试者思维逻辑和基础知识的好办法。


https://img1.sycdn.imooc.com//5b515f47000136c502460194.jpg




二、算法面试题的类型

虽然面试算法题层出不穷,但从算法的类型来看,互联网公司最常见的面试算法题分以下几种。

1、基础算法

基础算法主要有大数据查找、快排、哈希算法解决冲突等。以针对搜索来讲,可能设计一个数据库表内包含名字、课程、分数3列,求所有课程最低分不小于80分的名单,如果要求用SQL表达,就是对于基础知识点和基本功的考察。另外可能还会涉及一些计算机网络的TCP三次握手协议等基础的算法考察。

例如2017京东校招的排序题目:

对关键字{10,20,8,25,35,6,18,30,5,15,28}序列进行希尔排序,取增量d =5时,排序结果为( )

A. {6,18,8,5,15,10,20,30,25,35,28}

B. {10,18,8,5,15,6,20,30,25,35,28}

C. {10,20,8,5,15,6,18,30,25,35,28}

D. {10,20,30,5,8,6,15,18,25,28,35}

1) 用简单取巧的方式,标记原始关键字为abcdeabcdea,那么a对应的数字就是10,6,28,排序后就是6,10,28,所以答案就是A。

2) 当然也可以用代码去实现,更考验技术含量,就像下面的JAVA实现。

public class ShellSort {
    public static void main(String [] args)
    {
        int[]a={49,38,65,97,76,13,27,49,78,34,12,64,1};
        System.out.println("排序之前:");
        for(int i=0;i<a.length;i++)
        {
            System.out.print(a[i]+" ");
        }
        //希尔排序
        int d=a.length;
            while(true){
                for(int i=0;i<d;i++){
                    for(int j=i;j+d<a.length;j+=d){
                    int temp;
                    if(a[j]>a[j+d]){
                        temp=a[j];
                        a[j]=a[j+d];
                        a[j+d]=temp;
                        }
                    }
                }
                if(d==1){break;}
                d--;
            }
            System.out.println();
            System.out.println("排序之后:");
            for(int i=0;i<a.length;i++)
            {
                System.out.print(a[i]+" ");
            }
        }
}


2、数据结构

基础数据结构更多的出现在应届生校招和笔试环节中,这类面试题涉及到链表、堆、栈、队列、图、二叉树等。

比如2018年科大讯飞的笔试题:

下面关于二叉排序树的说法错误的是( )

A. 在二叉排序树中,完全二叉树的查找效率最低

B. 对二叉排序树进行中序遍历,必定得到节点关键字的有序序列

C. 二叉排序树的平均查找长度是O(log2n)

D. 二叉排序树的查找效率与二叉树的树形有关

通过二叉排序树,可以发现完全二叉树的查找效率最高,故答案选A。




3、灵活解决问题的算法

灵活解决问题的算法在面试中占据了相当重要的地位,这类题不告诉面试者具体需要用什么算法,而是虚构一个问题,让你找出具体的解决方案。

比如腾讯优图的面试题:

给你8颗小石头和一架天平,其中7颗石头重量是一样的,另外一个比这7颗略重。请问在最坏的情况下,最少要称量几次,才能把这颗最终的石头找出来?

最简单的方法是挑出两颗,把剩下6颗分成两份称重,如果一样重,则再称一下挑出的那两颗即可,如果不一样重,排除较轻的三颗,剩下3颗挑一颗出来,称其余两颗。如果一样重,则挑出的那颗便是,如果不一样重,重的那颗便是。所以答案是两次。

淘宝的面试题:

假设淘宝一天有5亿条成交数据,求出销量最高的100个商品并给出算法的时间复杂度。

看似是考察查找算法的,但是因为询问了时间复杂度,所以要多想一步,如何优化?针对具体问题,可以把5亿条数据分组来存放,这样就可以分别在每个文件的1000000个数据中,用哈希以及堆来统计每个区域内前100个频率最高的商品,最后求出所有记录中出现频率最高的前100个商品。



4、岗位需要的具体算法

这一类型的考察比较深入,以自然语言处理(NLP)岗位为例,在算法考察的过程中肯定不会简单的考察搜索等问题,可能直接考察word2vec的huffman tree 和negative sampling的目的是什么,另外还有机器学习领域的AUC曲线、PRF值能衡量什么等问题。

比如阿里巴巴机器学习算法面试:

学习过程中出现过拟合现象该怎么办?

1)重新清洗数据,有可能是因为数据不纯导致的过拟合。

2)增大数据的训练量,用于训练的数据量可能太小。

3)采用正则化方法,包括L0正则、L1正则和L2正则,在机器学习中一般使用L2正则。

4)采用dropout,这个方法在神经网络里面很常用,通俗一点讲就是在训练的时候让神经元以一定的概率不工作。

当然不同的应聘简历、不同的面试官都会导致问题的侧重有所区别,但万变不离其宗,尤其是前两种最常见的算法,一定不可以大意。




三、应对算法面试的解决方案

总结一下方法论,面试之前可以参考下面几个方式来提高面试成功的概率。

1、书本知识储备

在备战算法面试的过程中,首先还是要打牢基础,现在市面上有大量的针对面试算法的书籍,像《算法导论》、《编程珠玑》、《编程之美》都是不错的经典教材,在这里推荐一本面试经典算法题集锦——《剑指 offer》,这是一本实战类的讲解书,很贴近实际,很实用很接地气,其次像《程序员面试宝典》上面也都是常见的面试题目。


https://img1.sycdn.imooc.com//5b515f6d0001a82404180210.jpg




2、视频手把手教学

很多技巧性的东西是书本上难以描述清楚的,但通过视频学习可以准确领悟老师的思想,比如慕课网上应对面试算法题的课程视频就有很多,“玩转算法面试 leetcode题库分门别类详细解析”、“程序猿的内功修炼,学好算法与数据结构”以及“看的见的算法 7个经典应用诠释算法精髓”,一线老师手把手为你揭秘算法面试的诀窍,这比自己领悟要来的快得多。



3、日常练习实践

纸上得来终觉浅,绝知此事要躬行。平时有时间一定要多刷一刷 leetcode、hihocoder,这这两个算法习题网站上很多题目思考起来还是很有意思的,也非常有代表性,因为在面试算法的过程中经常有要求现场码代码,虽然说不用完全按照编程语言的语法来写,但不勤加练习的话,也很难在现场完美表现。


https://img1.sycdn.imooc.com//5b515f7b0001132202750175.jpg




最后提醒各位面试者:从面试算法题中找出“正确”回答固然重要,但是面试官更想从中看到面试者合理的思考方向,而且算法面试优秀不意味着能够拿到Offer,想要得到心仪公司的Offer还是要脚踏实地学好每项技能,到时无论是什么考察方式都将是小菜一碟。最后祝各位面试的程序员早日找到心仪的工作~




点击查看更多内容
47人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消