面试杂谈之我的秋招求职之路

昨天正式确认了百度的offer,宣告着我的秋招正式结束了,虽然我的秋招还算是比较顺利,没有他们所说的那样痛苦不堪,但是我还是想把我面试过程中经历的面试题目共享出来,供大家参考,秋招面试的难度整体上要比实习略难一些,不过只要认真准备的话,我觉得还是很容易拿到心仪的offer的,下面我将给出我秋招面试过程中经历的所有面试过程,仅供参考。

美团点评篇

后台开发工程师,Java开发。

美团点评是实习转正,整体难度并不难,下午三点安排在美团B座7楼面试厅进行面试的,一个酷酷的程序员小哥哥面试的,首先介绍的是我实习这几个月做的东西,以及遇到的一些困难。在面试过程中,会对你实习中遇到的困难和挑战各种深问,建议这个题型还是要多准备准备。画了项目的架构图,以及实现的技术的一些细节,基础也问了一些,比如计算机网络,三次握手,TCP拥塞控制和流量控制,数据库的索引机制等,最后出了一道算法题,三数之和,这是LeetCode的原题,可以参考我的这篇博客:

https://www.cnblogs.com/DarrenChan/p/8871495.html

百度篇

数据挖掘和机器学习研发工程师,大数据架构方向。

百度是7月31号面试的,印象比较深,当时还在美团实习,内推了百度提前批,就通知31号下午去百度科技园面试,当时也没想着一定可以过,就打算去试试,于是中午请假过去了。在路上还在看面试相关资料,因为之前确实没复习,就想着听天由命吧。到了百度,去早了,就在楼下待了一个小时,两点才被叫进去进行面试,面试地点还是一个不错的会议室,一共进行了三面。

我遇到的百度的套路是上来先自我介绍,大概说一下个人情况,面试官就问,你数据结构和算法怎么样,我说还不错,然后直接开始做题,印象里一下做了四道算法题,都是在纸上手撕代码,是算法都做出来之后才进行的后面的面试,我在想如果我算法没做好,很可能就谢谢再见了。四道算法题目不是很难,主要还是考察思维逻辑和基础吧。

快速排序,基于单链表实现(传统的前后指针的方式实现起来比较困难)
给定无序数组,查找中位数(基于堆排序)
扑克牌第一张放桌子,第二张放到最后,第三张放桌子,第四张放在最后,以此类推,求最后桌子上上1到k,还原原来的扑克牌什么样
完全背包问题

 

第一题可以参考我的这篇博客:

https://www.cnblogs.com/DarrenChan/p/8807112.html#_label0_1

第二题的解题思路是:

首先将数组的前(n+1)/2个元素建立一个小顶堆。

然后,对于下一个元素,和堆顶的元素比较,如果小于等于,丢弃之,接着看下一个元素。如果大于,则用该元素取代堆顶,再调整堆,接着看下一个元素。重复这个步骤,直到数组为空。

当数组都遍历完了,那么,堆顶的元素即是中位数。

思路有了,实现起来还是有一定复杂度的,要多注意。

第三题第四题都是常见题,第四题可以参考我的博客:

https://www.cnblogs.com/DarrenChan/p/8734203.html#_label9

剩下的就是考察一些常见知识点了,包括基础知识和框架的,大致如下:

介绍一下kafka分区,内部原理
介绍实习项目,具体
Hashmap原理
设计一种存储数据结构,使得类似于pandas那种取数据
介绍大数据框架体系,流式处理流程
流式处理流程
装饰器模式,接口和抽象类区别如何设计
maven打包流程,如何打出类似tomcat的数据结构
说项目和项目难点
介绍百度信息流推荐
自己最大的优势
遇到哈希冲突怎么办
NLP相关知识,智能问答
推荐算法介绍,协同过滤

 

百度一面二面三面是在一起面的,面完就直接给我要了身份证号,说应该没问题,哈哈,就这样确定了百度offer,还是挺幸运的。

映客直播篇

数据研发工程师,离线大数据处理。

映客直播是一个中午面试的,吃了饭,就顺便过去了,因为当时在美团实习,而映客就在望京附近,特别近,骑自行车过去的。映客没有自己的楼,是一个大厦里面,进去还得登记。上去了感觉里面装修还不错,有个很大的猫头鹰,等了一会,面试官就来了,刚来感觉人挺严肃,聊了一会感觉我会的挺多,就跟我扯了点别的,哈哈~问的东西不是很难,比较基础,当然也手撕代码了。

自己实现多线程MQ,用数组实现队列,保障数据安全性加锁
说一下mapreduce的shuffle机制,map阶段是快排,reduce阶段是归并排序
说说产生数据倾斜怎么办,优化措施(重写partition,加上负载因子,再次哈希)
什么情况下会产生数据倾斜,比如group by,join,count(distinct)等
写SQL语句,左连接关联查询
写500亿top 10问题,写hive
问我会不会执行到order by语句
线程有哪几种状态

 

数据倾斜问的很多,大家可以总结一下,参考这篇博客:

https://www.cnblogs.com/DarrenChan/p/9431427.html

就面了一面,面试官对我的评价还不错,面试完就让我过去先实习,我说实在抱歉,还在美团呢,而且得先回学校做毕设,他说他们比较缺人,希望我快点过来,我说实在抱歉,他们就说没事,等12月份还可以再聊聊。

阿里巴巴篇

数据研发工程师,实时计算。

还是想说,阿里真的面试时间太长了,总共得一个月,算上加面,经历了六面。除了一面是现场,剩下的都是远程电话面试,虽然中间拉了很长时间,不过好在最后也拿到了阿里offer。

当时也是八月份,阿里北京这边组织了一个夏令营,因为也在望京,而且是美团旁边,我就过去参加了,上午扯了好多阿里有多牛逼,下午就开始面试了,这只是一面,估计是为了挑选候选人吧。我是最后过去的,我去的时候都没多少人了,然后跟我的一面面试官大概谈了谈,主要是了解一下,面试官人很好,后面也帮助了我很多,很感激他。主要问的是实习经历和项目经历,然后问了下对大数据体系的看法,一面还是很简单的。

从二面开始,就变得难了,问的开始越来越深了,各种基础知识问的越来越多,果然符合阿里的作风,阿里就是特别重视基础,而且各种知识点要求也很高。

算法最长重复子串
说一下成长最快的收获最大的项目
分布式缓存的负载均衡
session共享
一致性哈希算法
离线hadoop原理,写文件流程,什么时候都返回成功,说项目
实时storm和flink原理,编程模型,说项目
Top k解决方案
如何数据去重,set在内存宕机怎么办
你了解的hbase按照列存储和关系数据库行存储区别
并发方案,针对优酷世界杯
lock和synchronized区别
两个线程交替打印字符串
实现NIO模型,怎么设计
如何涉及分布式可靠的消息队列,怎么保障
职业规划

介绍实习项目,mafka如何保障消息不丢失,发送一次
介绍离线大数据项目,数据处理用hive的场景
介绍课题项目,redis应用场景,存储方案
Storm编程模型
Python2和3的区别,多线程咋回事
Hive如何防止数据倾斜,对Hive的理解
MapReduce,map阶段,reduce阶段,combiner阶段
Yarn阶段介绍
集中在同一个reduce,分桶
Hashmap,Hashtable,concurrenthashmap
数据库建模
Hive分组取top k请求
如何处理url
数据仓库
数据库索引

 

建议要是面试阿里的话,先要把基础知识都要认真过一遍,不然很容易被虐,哈哈,阿里算法也会考察,不过感觉没有百度头条那么多,相反框架原理啥的,Java基础啥的反而问的比其他公司更深。

猿辅导篇

服务端开发工程师,Java方向。

这个公司是听同学说的,貌似给钱很多,就去试了一下,感觉这个公司特别重视算法。人文关怀很棒,去了有免费的零食和水果,大家坐在一起吃东西,叫到谁谁就去面试,一共经历了两面。第一面上去大概自我介绍完,就直接写算法,因为我写的比较快,就多写了一道题,当时没用递归的方式,结果面试官看我的代码看了好久,说写的太复杂,哈哈~二面面试官是经理级别的,说普通话不标准,感觉不太懂大数据,他让我介绍项目,我说了个大数据的项目,感觉兴趣不大。后来就全程在写一道ringbuffer的题目,猿辅导的面试题目如下:

自我介绍,说一下项目
JVM问了一些,JVM模型啥的
HashMap原理,底层
线程池的内部实现原理
Top K问题
负载均衡问了一些
一增一减两个链表合并
最长回文子串
两个变量实现ringbuffer
Hadoop读写文件过程
最大问题和挑战

 

ringbuffer那道题是环形队列,即采用两个变量判断队列为空,判断队列为满。可以参考我的博客:

https://www.cnblogs.com/DarrenChan/p/9535557.html

腾讯篇

后台研发工程师,C++和Java方向。

腾讯先是腾讯云,存储方向的部门面的,全程在问C++,我说明自己很久不用C++了,面试官开始问我很多基础,不过当我说到Java一些术语,面试官一脸懵逼,他说的一些术语,我也一脸懵逼,就这么尴尬了一个小时,哈哈,不过算法题和基础知识答得还不错。

字符串判断包含
判断一棵树是不是另一个子树
大头传输和小头传输
三次握手,滑动窗口
epoll,select模型
TCP和UDP
Linux top和ps
操作日志的一些指令
红黑树
SortSet
进程通信的方式,哪种方式速度最快

 

后来部门转到了TEG,直播方向,这次是Java,全程很顺利,面试官的问题基本答得都不错。主要是Java相关的技术,包括JVM,还有hashmap原理,1.7和1.8的区别,字节移位,主要涉及一道bitmap的题目,可以参考这篇博客:

https://www.cnblogs.com/DarrenChan/p/9549435.html

AiBee篇

算法工程师,机器学习方向。

AiBee是一个创业公司,主要是搞AI的,好像创始人是原百度的高管。当时看到群里有人内推,就过去了。但是感觉面试安排的不合理,过去了之后,hr说面试官在开会,在那里等了一个多小时,面试官才来,都快中午了,就草草问了两道题目,就结束了,整体的面试体验不是很好,不知道别人什么感受。

KMeans,手动实现算法
判断一个点是不是在三角形内部,写算法
查找含有某些关键字的进程,一起杀掉(linux指令)

 

宜信大数据创新中心篇

大数据研发工程师,分布式计算。

自我介绍,详细介绍项目,主要是美团实习项目,然后画项目架构图。

五道编程题目:

1.设计一个数据结构可以存储一组整型数,并且能够O(1)时间查找中位数和O(logN) add操作。

本来想的是采用map的结构,最后其实是采用堆进行存储,在Java中可以看一下PriorityQueue,内部是采用堆进行实现的。

2.

中序遍历,存储根节点到每个叶子节点的路径。

3.求平方根,两种方式。

# 输入:整数 n
# 输出:n 的平方根
# 精度 10^(-5),定义域:实数

(1)二分法

public static double sqrt(double t, Double precise) {
        double low = 0, high = t, middle, squre,
                prec = precise != null ? precise : 1e-7;
        if ( t < 0 ) {
            throw new RuntimeException("Negetive number cannot have a sqrt root.");
        }
        
        while ( high - low > prec ) {
            middle = ( low + high ) / 2;
            squre = middle * middle;
            
            if ( squre > t ) {
                high = middle;
            } else {
                low = middle;
            }
        }
        return ( low + high ) / 2;
    }

(2)牛顿迭代法

public static double sqrt_ ( double t, Double precise) {
        double x0 = t, x1, differ,
                prec = precise != null ? precise : 1e-7;
        
        while ( true ) {
            x1 = ( x0 * x0 + t ) / ( 2 * x0 );
            differ = x1 * x1 - t;
            
            if ( differ <= prec && differ >= -prec ) {
                return x1;
            }
            x0 = x1;
        }
    }

(4)两数之和为定值

参考:https://www.cnblogs.com/DarrenChan/p/8871495.html#_label0

(5)遍历一遍用两个指针实现删除倒数第k个单链表节点

class Node{
    int val;
    Node next;
}

public void delete(Node head,int num){
    Node p1 = head;
    Node p2 = head;
    int index = 0;
    while(p1 != null){
        p1 = p1.next;
        index++;
        if(index > num){
            p2 = p2.next;
        }
    }
    if(p2.next == null){
        p2 = null;
    }else{
        p2.val = p2.next.val;
        p2.next = p2.next.next;
    }
}

三面过了几天,上来同样是介绍项目,自我介绍一系列,感觉宜信的面试过程没有过于重视基础知识,主要还是围绕算法展开,最后同样来了一道算法题,求若干个线段的最大重合个数,可以详见我的另一篇博客:

https://www.cnblogs.com/DarrenChan/p/9688175.html 

宜信的面试比较注重算法,尤其是研发岗,按照同一个模式进行面试,具体到大数据开发还是Java开发等,都是去了以后再进行分配,整体来看这个公司的面试还是有一定难度,公司在互联网金融也有一定前途。

快手篇

大数据研发工程师,实时计算。

快手是有一个学长内推的,远程面试的,整体感觉不是很难,感觉快手最近如日中天,这个公司还是不错的。有感兴趣的小伙伴可以考虑加入,快手比较重视基础,问的东西和阿里有点类似,总体来看还是偏难的。

印象里面的面试题如下:

快排
SQL,统计第二天重新登录的人的个数(和第一天相比)
Hadoop原理
网络,操作系统常见题目
2.5亿个数全排序
项目,top k
JVM内存模型

华为篇

大数据研发工程师,方向随机。

因为之前实习过了华为,没有去,所以通知只需要参加一轮终面即可。因为自己被选入了华为的一个“领鹰计划”,最后签约的时候还给涨薪了,当然最后没有签华为,觉得华为还是不错的,可是我还是想去互联网公司。华为面了一面,这次主要问了问项目,基础知识也问了一下,反正不难,跟聊天似的,华为校招看学历,看来国防科大的牌子还是挺有用的,面试题想不起来了,总之,挺简单的,主要是聊为主,面试官人很好。

写在后面的话

有几个公司,笔试过了没有面试,比如头条,第四范式,搜狗,搜狐,主要是后面要准备答辩了,没有那么多时间了,不然还是想好好准备,面试一下。

总之,秋招面试算是结束了,这一年,是我记忆深刻的一年,通过面试,我的水平提高了很多,希望去了公司还能好好努力,下一次,争取可以面试别人,嘿嘿~还没找到工作的小伙伴,加油哈!

 

posted @ 2018-09-15 23:15  DarrenChan陈驰  阅读(2777)  评论(0编辑  收藏  举报
Live2D