大数据实习生的面试总结

      不同的公司面试内容不同,有的注重基础知识有的注重项目,对实习生,也就是应届生,更多的是基础

因为没有什么工作经验,项目很多也不怎么样,所以也就问的少。下面是我的一点面试经验

我面试次数不多,可能是运气比较好,几家就有了一个很满意的。一共面过两次大数据职位

一次java,一次商务智能,数据分析的。

       第一次就是大数据的,数据平台开发,小公司,没有笔试,就是拿着简历上的项目问。因为是自己

做的,不是公司的项目,所以有很多问题,具体问了什么就不详说了,需要注意的是自己项目的一些

架构问题,是否合理,是否自己很清楚,或者说自己能很清楚的描述出来,自己画出架构图。问了一些

知识点的问题,比如sparkRDD,spark和hive的区别,spark的鲁棒性,推荐系统的冷启动问题,这么监控

推荐系统是准确的,怎么实时的监控,就是系统已经发布上线了,怎么知道推荐是有效的。此类问题。

解答:SparkRDD五大特性,

RDDSparkCore的核心底层操作的就是RDD

RDD也就是弹性分布式数据集虽然是数据集但是却不能存储数据只是存放的一段代码逻辑

五大特性

1、 RDD是由一系列partition组成

2、 RDD的算子作用在partition

3、 RDD之间有依赖关系

4、 分区器作用在kv格式的RDD

5、 partition对外提供最佳的计算位置利于数据处理的本地化

弹性也就是容错性,RDD有依赖关系,可以根据前面的RDD计算出后面的RDD

RDD中的partition个数可多可少

分布式是RDD中的partition是分布在多个节点上

 这大概就是关于RDD的介绍

Spark和hive的区别其实就是Spark和MR的区别,我也简单总结一下,

1、Spark可以基于内存计算,MR基于磁盘迭代处理数据

2、Spark中有DAG有向无环图来切分stage的执行先后顺序

3、MapReduce只有mapreduce。spark中各种算子

4、Spark是粗粒度资源申请,MapReduce是细粒度资源申请

简单的总结了一些

对于Spark的鲁棒性,也可以说就是稳定性,找了很多资料,按照我的理解

和RDD的血统,也就是依赖有关,对于推荐系统的冷启动问题有些博客也详细介绍过

我就简单总结一下简要说明一下

冷启动问题)
冷启动一般分为三种
用户冷启动,就是如何给新用户做个性化推荐
物品冷启动,如何将新的物品推荐给可能会对它感兴趣的用户
系统冷启动,如何在一个新开发的网站上做个性化推荐系统
方案一:提供非个性化的推荐,给新用户推荐热门排行,等用户数据收集到一定程度之后再切换
为个性化推荐系统


方案二:利用用户的注册信息,
获取用户的注册信息,
根据用户的注册信息对用户分类
给用户推荐他所属分类中用户喜欢的物品
方案三:选择合适的物品启动用户的兴趣
就是在用户登录的时候对一些物品做一些兴趣测试和
反馈。根据这些反馈信息得到用户感兴趣的物品

方案四:对于新的物品的个性化推荐
两种协同过滤算法,基于用户的协同过滤,和基于物品的协同过滤
UserCF的核心思想是给用户推荐和他兴趣相似的其他用户喜欢的物品
可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户

ItemCF的核心思想是:给用户推荐和其过去感兴趣的物品相似的物品
基本思路就是将物品转换成关键词向量,通过计算向量之间的相似度(例如计算余弦相似度),得到物品的相关程度。
方案五:对于新的系统,采用专家标注,进行人为的进行物品特征标注,然后计算物品之间的相似度,关联度

至于怎么监控就不知道了。

以上是第一家大数据面试,不过他们公司并没有环境,哈哈

第二家,公司还挺大,环境不错。同样没有笔试。一共面了两轮,一天,本来是还有最后一轮boss的,不过boss没时间

两轮面试的问题我就一起说吧

hashmap原理:这一部分可以自己找找,什么哈希表,哈希冲突,数组,链表,红黑树等等

抽象类和接口的应用场景区别,在设计模式的

kafka怎么保证数据不丢失,重复消费这么解决,为什么会发生,发生在什么地方等等,数据库优化

1.生产者数据的不丢失

kafkaack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1-1

  • 如果是同步模式ack机制能够保证数据的不丢失,如果ack设置为0,风险很大,一般不建议设置为0。即使设置为1,也会随着leader宕机丢失数据。

producer.type=sync

request.required.acks=1

  • 如果是异步模式:也会考虑ack的状态,除此之外,异步模式下的有个buffer,通过buffer来进行控制数据的发送,有两个值来进行控制,时间阈值与消息的数量阈值,如果buffer满了数据还没有发送出去,有个选项是配置是否立即清空buffer。可以设置为-1,永久阻塞,也就数据不再生产。
  • 异步模式下,即使设置为-1。也可能因为程序员的不科学操作,操作数据丢失,比如kill -9,但这是特别的例外情况。

结论:producer有丢数据的可能,但是可以通过配置保证消息的不丢失

2.消费者数据的不丢失

通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。

offset的信息在kafka0.8版本之前保存在zookeeper中,在0.8版本之后保存到topic中,即使消费者在运行过程中挂掉了,再次启动的时候会找到offset的值,找到之前消费消息的位置,接着消费,由于offset的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。

唯一例外的情况是,我们在程序中给原本做不同功能的两个consumer组设置KafkaSpoutConfig.bulider.setGroupid的时候设置成了一样的groupid,这种情况会导致这两个组共享同一份数据,就会产生组A消费partition1partition2中的消息,组B消费partition3的消息,这样每个组消费的消息都会丢失,都是不完整的。  为了保证每个组都独享一份消息数据,groupid一定不要重复才行。

2.kafka集群中的broker的数据不丢失

每个broker中的partition我们一般都会设置有replication(副本)的个数,生产者写入的时候首先根据分发策略(有partitionpartition,有keykey,都没有轮询)写入到leader中,follower(副本)再跟leader同步数据,这样有了备份,也可以保证消息数据的不丢失。

这是从别人博客上找到的

 

 

数据重复消费出来在那些地方

 

底层根本原因:已经消费了数据,但是offset没提交。

 

原因1:强行kill线程,导致消费后的数据,offset没有提交。

 

原因2:设置offset为自动提交,关闭kafka时,如果在close之前,调用 consumer.unsubscribe() 则有可能部分offset没提交,下次重启会重复消费。会导致部分offset没提交,下次启动时会重复消费。

 

原因3(重复消费最常见的原因):消费后的数据,当offset还没有提交时,partition就断开连接。比如,通常会遇到消费的数据,处理很耗时,导致超过了Kafkasession timeout时间(0.10.x版本默认是30秒),那么就会re-blance重平衡,此时有一定几率offset没提交,会导致重平衡后重复消费。

 

原因4:当消费者重新分配partition的时候,可能出现从头开始消费的情况,导致重发问题。

 

原因5:当消费者消费的速度很慢的时候,可能在一个session周期内还未完成,导致心跳机制检测报告出问题。

 

kafka怎么保证副本有三份或者所有副本都保存成功了,或者失败之后怎么办

kafka生成数据,有了一个副本之后,是不是就可以消费了

一个分区可以有多个副本,这些副本保存在不同的broker上。每个分区的副本中都会有一个作为Leader。当一个broker失败时,Leader在这台broker上的分区都会变得不可用,kafka会自动移除Leader,再其他副本中选一个作为新的Leader

kafka创建副本的2种模式——同步复制和异步复制

    Kafka动态维护了一个同步状态的副本的集合(a set of In-Sync Replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息只有被这个集合中的每个节点读取并追加到日志中,才会向外部通知说“这个消息已经被提交”。

    只有当消息被所有的副本加入到日志中时,才算是“committed”,只有committed的消息才会发送给consumer,这样就不用担心一旦leader down掉了消息会丢失。

    消息从leader复制到follower, 我们可以通过决定Producer是否等待消息被提交的通知(ack)来区分同步复制和异步复制。同步复制流程:

              1.producer联系zk识别leader

              2.leader发送消息

              3.leadr收到消息写入到本地log

              4.followerleader pull消息

              5.follower向本地写入log

              6.followerleader发送ack消息

              7.leader收到所有followerack消息

              8.leaderproducer回传ack

       异步复制流程:

              和同步复制的区别在于,leader写入本地log之后,

              直接向client回传ack消息,不需要等待所有follower复制完成。

kafka支持副本模式,那么其中一个Broker里的挂掉,一个新的leader就能通过ISR机制推选出来,继续处理读写请求。

4.3 kafka判断一个broker节点是否存活,依据2个条件:

    1.节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接

    2. 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久。Leader会追踪所有“同步中”的节点,一旦一个down掉了,或是卡住了,或是延时太久,leader就会把它移除

hive执行一个SQL,有where,有groupbyorder,执行过程,有多少reduce,只要有order by最后都只有一个reduce

数据库优化是一个都会问的问题

由于时间原因下次更新,很快

猜你喜欢

转载自www.cnblogs.com/lrxvx/p/10536220.html