一、搜狐面试
时间: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,过拟合了怎么办,预剪枝和后剪枝
- 最近做了什么项目,用到哪些知识