【面经记录】搜狐、快手实习面试【大数据开发】

时间:2024-03-04 21:58:54

一、搜狐面试

时间:2019年7月11日

地点:搜狐媒体大厦

面试岗位:数据开发工程师(实习)

面试过程:

  面试官轮流上阵,一个问完另一个接着问,整体过程比较轻松,不会的问题也会引导着进行回答,重点是根据简历问相关项目经验和知识,所以简历上写的东西很重要。

  主要问题:

  • 自我介绍,基本情况,最近做的项目是什么,简单介绍
  • Apache Storm在项目中主要用来做什么,为什么要用Storm,写几个进程不行吗?
  • Apache Kafka主要用来做什么,功能是什么,为什么要用它?
  • Kafka的patition如何理解,基本原理
  • Kafka的消费者、消费组,消费者数量多于partition数量怎么办,少于呢?数量逐渐增加怎么办?(答案:kafka中partition和消费者对应关系
  • Kafka依赖于Zookeeper,ZK主要在这里用来干什么?
  • Redis是什么,优点在哪里,单机模式和集群模式,单机挂了怎么办
  • Redis的两种持久化机制,AOF怎么做数据恢复
  • MapReduce编程模型,整个数据处理流程
  • MapReduce为什么需要一个shuffle阶段,主要目的是什么
  • shuffle阶段为什么要进行排序(让同一个key相邻,从而可以存在一个文件中,减少磁盘文件数量)
  • MapReduce数据倾斜怎么处理,比如相同key值的数据很多,导致其中一个Reducer的数据量很大(key带一个ID号。分别hash到不同的Reducer去,分别处理)
  • MapReduce的推测执行
  • 算法题(手写):二叉树中序遍历、求n的阶乘
  • 单例模式
  • 数据库(手写):SQL语句(一个用户看一次视频有一条记录,求看了一次的人数、看了两次的人数······看了十次的人数,主要是group by+having)
  • java:HashMap的底层实现原理
  • 提到的自己不是很了解的内容:Spark、Spring框架、Scala语言

二、快手面试

时间:2019年7月18日

地点:海淀西二旗 快手总部

面试岗位:数据开发实习生

面试过程:

  整体过程比较轻松,共三个面试官轮流面的,有点偏向对实际问题的处理,不局限在单纯的知识。

  主要问题:

  • 简单的自我介绍
  • 手写算法:LRU(最近最少使用淘汰策略)
  • 数据库SQL(没写对):一张表(年级、科目、姓名、分数),分年级分科目找出前三名(也就是每个年级每个科目的前三名)
  • 对Hadoop有什么了解,讲一下mapreduce的基本原理
  • MapReduce里面mapper的数量是怎么确定的(每一个输入分片创建一个map任务),reducer的数量呢(自己指定),那如果没有指定reducer的数量,默认是什么情况(这个没答上来)
  • python的两个关键字(没记住,没答出来)
  • 项目里面Storm是怎么用的
  • 除了Storm,还懂哪些流数据处理的框架,问了一个Storm的机制,没太听懂
  • Kafka是如何保证可靠性的(没说完整,ACK??),kafka主从节点间的同步问题
  • 数据库存储引擎:InnoDB索引和MyISAM索引的区别是什么(说了索引方式不同,又问使用的锁有区别吗,不是很清楚)
  • 手写:单例模式
  • HashMap的底层实现,性能是多少,追问:如果你来设计HashMap,数据多的时候性能下降,如何写一个函数来确定是否现在需要对哈希表进行优化,问自己的想法,前提是不能改变数组+链表这种结构
  • 接着哈希表追问:如果不使用锁,一个线程往哈希表写,另一个从里面读,举例说说会出现什么问题
  • 手写脚本:一个文件,每一行的数据里包含一个ip:XXX.XXX.XXX.XXX这样的信息,写一个脚本(python或者shell)获取其中有多少个独立的ip
  • HTTP协议了解吗?输入一个URL背后的过程
  • HTTP的 get 和 post 有什么区别
  • 解释一下java的内存管理机制,如何进行垃圾回收的,如果你在使用过程中发现了内存问题怎么办
  • 接着内存管理问了一下C++和python
  • 对AWK熟悉吗?
  • 手写算法:二叉树的层次遍历
  • 机器学习:决策树解释一下,ID3和C4.5,过拟合了怎么办,预剪枝和后剪枝
  • 最近做了什么项目,用到哪些知识