1.东软集团架构师电话面试二十分钟:
1.1.hbase有什么特点,他的优缺点:
海量存储,列式存储,高并发,稀疏(列的灵活性,列族中可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的),高可用(WAL解决高可用,瞬间写入量)
2.单一RowKey固有的局限性决定了它不可能有效地支持多条件查询,不支持SQL语句
1.1.3hbase的过滤器说几个及其作用:
比较运算符(less,greater_or_equal,NO_OP),比较器(BinaryComparator,BitComparator,NullComparator)。
比较过滤器:
rowfilter,familyfilter,qualifierfilter,valuefilter,timestampsfilter,
Filter rowFilter = new RowFilter(CompareOp.GREATER, newBinaryComparator("95007".getBytes()));
2.专用过滤器:SingleColumnValueFilter -会返回满足条件的整行,单列值排除器 SingleColumnValueExcludeFilter ,前缀过滤器 PrefixFilter----针对行键,列前缀过滤器 ColumnPrefixFilter,分页过滤器 PageFilter
1.2.hive表的优化:怎么解决数据倾斜:key分布不均匀,数据本身,sql语句本身容易引起倾斜(goupbykey,join,distinct count)
groupbykey引起的:参数调优:set hive.groupby.skewindata=true;生成的查询计划会有两个MRJob
采用sum() group by的方式来替换count(distinct)完成计算
1.2hive有一张小表明细表,一张超级大的表join,怎么解决这种容易引起数据倾斜?
1.3.hive表之间有父子依赖关系,几十张表,你是如何处理的?
1.4.sqoop给了我一个错误的引导:说是sqoop收集数据。反怼了他。
1.5.Redis的哨兵模式:自己挖的坑,自己踩。
1.6其他的简历方面的也问了不少,没啥特别的说的。
2.池鹜公司架构师电话面试十五分钟:
1.简单介绍自己
2.hive的窗口函数:哪几种?3;每个区别,就是每种的作用;row_number ,rank区别
3.hive的sql语句牛逼吗?写过多少的,
4.我们现在有十个部门,每个部门人员都有绩效评分,怎么搞出每个部门的前三个?重要的来了,简单给我说出一下使用那些关键字,group by? topN?low! 窗口排序函数教你做人dense_rank over()!
5.data warehouse hadoop这些组件ETl之后都是给数据仓库服务用的,这个已经也是大数据开发工程师必备的了。BI/DW了解一下。
7.hive优化之join:
1.join计算时,小表放左边,
2.Map join:在map端完成join(避免数据倾斜)
mapjoin实现方式:
1.sql语句中添加Mapjoin标记:SELECT /*+ MAPJOIN(smallTable) */ smallTable.key, bigTable.value FROM smallTable JOIN bigTable ON smallTable.key = bigTable.key;
2.开始自动的MapJoin:set hive.auto.convert.join = true; 该参数为 true 时,Hive 自动对左边的表统计量,如果是小表就加入内存,即对小表使 用 Map join
8.union 和 union all,join和left join
9.还有也是hive的几个问题,太简单不写了。
3.平安普惠公司现场面试:
0.介绍一个熟悉的项目
1.Java多线程:多个线程共同调用一个方法造成数据错乱的问题?怎么办:然后就知道了多个线程访问同一个方法时,为了保证数据的一致性,需要对共同访问的方法加同步锁publicstaticsynchronizedbooleanwriteText(){}
2.Java内存模型:
gc内存模型:分为三部分:栈,堆,程序计数器,他们每一部分有其各自的用途;虚拟机栈保存着每一条线程的执行程序调用堆栈;堆保存着类对象、数组的具体信息;程序计数器保存着每一条线程下一次执行指令位置。这三块区域中栈和程序计数器是线程私有的。也就是说每一个线程拥有其独立的栈和程序计数器。
并发内存模型:。。。。。。
3.spark checkpoint什么时候使用和作用:Window操作等,其中checkpoint的作用就是将DAG中比较重要的中间数据做一个检查点将结果存储到一个高可用的地方
4.有一串IP(11.22.33.44),写一个方法函数,来对这串数字处理。结果:11*22*33*44。现场撸代码。
5.spark YARN模式 作业内部流程:DAG
YARN模式的作业运行调度描述如下
(1)客户端生成作业信息提交给ResourceManager
(2)ResourceManager在本地NodeManager启动Container,并将Application Master分配给该NodeManager。
(3)NodeManager接收到ResourceManager的分配,启动Application Master并初始化作业,此时这个NodeManager就称为Driver。
(4)Application向ResourceManager申请资源,ResouceManager分配资源同时通知其他NodeManager启动相应的Executor。
(5)Executor向本地启动的Application Master注册汇报并完成相应的任务。
6.spark的driver怎么驱动作业流程的:
7.dataframe和dataset的区别:
左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如filter下推、裁剪等。
8.有一个表字段name(a,b,c),score(20,30,40),sql语句输出结果:三字段:index,name,score。并且按score排序。现场撸代码。不使用row_number情况下,
9.sql语句超级多现场问。
10.mapreduce的shuffle过程:详细点描述,以及map端输出的数据是在哪里?
11.RDD:
12.mysql的事物等级划分:默认是哪个,可重复读。
13.mysql的B+树。。。。。。。。。
14.arraylist的底层是?动态扩容的话是一个什么策略?
4.太平洋保险大地保险华腾有限公司外包现场面试:
1.介绍项目:完整的
2.zookeeper:zkServer,使用过这在内部删除东西?不明白他想问啥?
3.zookeeper的反压:
4.DAG:DAGscheduler,taskscheduler,tastscheduler下一层的叫什么:submitTasks(taskSet),cancelTasks(stageId),resourceOffer(offers: Seq[Workers])
4.2MapReduce和spark的shuffle的区别:
5.hbase的预分区:rowkey
6.scala的高阶函数,为什么函数柯里化?
1.把多个参数转化为单参数函数的级联,达到了动态确定参数的目的。
2.当某些参数不确定时,可以先保留一个存根。剩余的参数确定以后,就可以通过存根调用剩下的参数。
3.通过类似于建造者模式(building),把一个大的东西的构造过程,切成一个个的小模块来逐步构造。举个最简单的例子,Person.name("xxx").age(num).salary(count).phone(xxxx)。
7.闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问不在当前作用域范围内的一个函数。
8.beeline:jdbc
9.数仓:ORACLE和DB2在OLTP中占有绝对的优势,但在注重海量数据高效查询的OLAP中,远远不及TeraData和IQ(sybase),
10.其他的都比较简单,不写了。\
5.北明软件公司现场面试:
1.现场撸了sql笔试题,join,left join on
2.。。。。。。
6.闻政咨询公司
0.公司是处理那些数据的,整个流程。
1.scala异常分为哪些类,平时怎么抛异常的,处理策略:使用try异常处理机制的一个重要理由是,当有异常出现时,程序会跳过try继续运行下去,不会就此中断,有效提高了程序的稳健性
2.有一个很大的文件,里面有很多重复数据,如何去重的?详细说case
3.flume的高可用和高可靠性,以及failover和负载均衡:!
1.负载均衡:source里的event流经channel,进入sink组,在sink组内部根据负载算法(round_robin、random)选择sink,后续可以选择不同机器上的agent实现负载均衡。
2.failover:配置一组sink,这组sink组成一个Failover Sink Processor,当有一个sink处理失败,Flume将这个sink放到一个地方,等待冷却时间,可以正常处理event时再拿回来。event通过通过一个channel流向一个sink组,在sink组内部根据优先级选择具体的sink,一个失败后再转向另一个sink。
#define sinkgroups
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=failover
a1.sinkgroups.g1.processor.priority.k1=10
a1.sinkgroups.g1.processor.priority.k2=5
a1.sinkgroups.g1.processor.maxpenalty=10000
7.创略科技现场面试:
1.kafka传数据过程中断电了,怎么保证可靠性:ISR! 主从!
多副本冗余,每个 Partition 都可以搞一个副本放在别的机器上,这样某台机器宕机,只不过是 Partition 其中一个副本丢失。
如果某个 Partition 有多副本的话,Kafka 会选举其中一个 Parititon 副本作为 Leader,然后其他的 Partition 副本是 Follower。
只有 Leader Partition 是对外提供读写操作的,Follower Partition 就是从 Leader Partition 同步数据。
一旦 Leader Partition 宕机了,就会选举其他的 Follower Partition 作为新的 Leader Partition 对外提供读写服务
2.kafka的分区数据是怎么分配到不同分区的以及分区到不同的broker:
1.默认的分区策略:对每个消息的key的hash值对partition数取模
2.对指定的分区进行输入数据:自定义分区
3.在创建topic时 kafka根据内部的负载均衡算法 将分区均匀的分布在多个broker上,分区可以提高系统的吞吐量,kafka只在partition中是有序的.从上面的算法可以看出:
1 副本因子不能大于 Broker 的个数;
2 第一个分区(编号为0)的第一个副本(编号为0)放置位置是随机从 brokerList 选择的;
3 其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;
4 剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是随机产生的
3.kafka的工作原理
4.flume的工作原理
5.flume的source,sink,channel都有哪些,说一下
6.hbase对单行数据操作怎么操作
7.hbase对整个表扫描用什么,结果怎么保存
8.sparkstreaming:如何对rdd进行分区,以及分区的依赖是什么?
9.Hadoop的mr工作过程,以及shuffle过程,详细点说明
10.hdfs的mapper和reducer的个数如何确定??reducer的个数依据什么
11.有一个10G的文件要存入hdfs,描述一下存储过程。hdfs默认块大小128MB
12.mr整个很慢,如何去优化,
13.sparkstreaming:整个过程很慢,如何优化
14.mr的默认分区reducer是多少,如何mapper有是个,那么reducer是多少
Partition:由PartitionerClass中的逻辑确定,默认情况下使用的HashPartitioner中使用了hash值与reducerNum的余数,即由reducerNum决定,等于Reducer数目。如果自定义的PartitionerClass中有其他逻辑比如固定了,也可以与Reducer数目无关,但注意这种情况下,如果reducerNum小于分区数则会报错,如果大于则会产生无任务的reduecer但不会影响结果。但是如果reducerNum只有1个,则不会报错而是所有分区都交给唯一的reducer。
15.sparkStreaming的工作模式:ETL过程。(Yarn)