一、嘀嗒一面
数据开发组、数据分析组、数据应用组
数据开发内容:1、偏数仓建设,大的topic量可以达到十万级别,2、数据中台:日志采集,离线一条,实时一条,质量监控,抽象成模块,组成DAG图,常用逻辑封装平台化,数据中台应用
- kafka的ack机制:一次响应?
- kafka线上实操:kafka的6个分区,扩展成20个分区
- 消费kafka是怎么消费的,用原生代码还是写flink程序,kafka扩容之后,下游消费的程序要不要修改,topic的partition增加,要怎么修改;
- flink任务启动,如果启动失败,要怎么办,比如输入量增大,上游scamper有一个变动,或者出现其它情况,任务挂了,怎么保证消费正常启动,数据不丢失,offset保存在哪里?
- es:es模板的概念,template,
- es的响应速度是什么级别,比如小于10ms,
- es响应常用api,监控响应有哪些
- es的囊变,一个es集群分裂成两个es集群,
- 项目的价值,业务上的价值,
二、货拉拉一面
- flink的理解,
- flink里面有哪些算子、有哪些窗口、状态
- 监控指标,实例数,写入延迟,
- 性能优化,比如反压,延迟比较高,
- hbase大规模并发的时候,是怎么做到写入延迟比较低,
- kafka的了解、kafka的优点、kafka的文件格式
- 秒级处理kafka机制怎么不丢失
- java线程池的作用
- java运行程序过程
- java回收垃圾的方式
- flink的优势,相比spark来说
- flink的内存模型,怎么管理内存的,分为三个部分,主要用堆内内存,还是堆外内存
- flink怎么保证有且只有一次的
- flink处理反压的机制,比如外边接收端来不及接受了,怎么处理
- hash算法有哪些,hash冲突的处理方式
- 位图的使用场景
- flink对flink sql怎么执行,对flink api是怎么执行的流程,怎么解析,怎么执行
- 数据缓存,哪些缓存机制
- 分布式锁,分布式算法这种
- 大数据算法、两个文件,分别有很多行,怎么找到相同的url
- java jvm
三、boss直聘一面
- flink是基于什么搭建的
- 上线的流程是什么
- hdfs查看目录的大小
- flink原理:flink重启策略
- 固定延迟重启策略是什么样的,默认值是什么,你是怎么设置的
- kafka的并行度和flink是什么关系
- flink的task slot原理:http://wuchong.me/blog/2016/05/09/flink-internals-understanding-execution-resources/
- java的程序计数器在哪个区里,JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致
- java集合类,线程安全的arraylist是什么
- java常见的阻塞队列有哪几种,arraybroker queue
- jvm调参的工作
- linux命令查看内存,查看进程的内存占用
- 进程的网络使用情况,进程的入口流量,有多少带宽进程写入
- flink的内存调优:https://zhuanlan.zhihu.com/p/360240036
四、bigo
1、建设数据仓库
ODS层:存放原始数据,直接加载原始日志、数据,数据保存原貌不做处理。
DWD层:结构与粒度原始表保持一致,对ODS层数据进行清洗
DWS层:以DWD为基础,进行轻度汇总
ADS层:为各种统计报表提供数据
-
flink重启策略:https://www.jianshu.com/p/4be0fa07f29d
https://zhuanlan.zhihu.com/p/180478618 -
flink的水印:https://www.cnblogs.com/starzy/p/11439997.html
-
flink的state:https://blog.csdn.net/lzxlfly/article/details/108687266
Flink是一个默认就有状态的分析引擎,为避免Task在处理过程中挂掉了,而导致内存中的数据丢失,Flink引入了State和CheckPoint机制,其中State就是Flink的一种基于内存的状态机制,Flink提供了两种基本的状态类型。
Keyed States:记录每个Key对应的状态值一个Task上可能包含多个Key不同Task上不会出现相同的Key ,常用的 MapState, ValueState
Operator States:记录每个Task对应的状态值数据类型
https://cloud.tencent.com/developer/article/1792720
https://toutiao.io/posts/tmf92or/preview -
Flink集群的角色:TaskManager,JobManager,Client三种角色
https://blog.csdn.net/GabrielCP/article/details/112688794 -
flatmap和map的区别:map:
map方法返回的是一个object,map将流中的当前元素替换为此返回值;
flatMap:flatMap方法返回的是一个stream,flatMap将流中的当前元素替换为此返回流拆解的流元素;
https://blog.csdn.net/catoop/article/details/105987386
map是对一级元素进行操作,flatmap是对二级元素操作。
map自动返回stream对象,flatmap处理后的元素依然要是stream对象(可以用stream.of,Arrays.stream将元素转为stream对象)。
https://blog.csdn.net/jarniyy/article/details/105234748?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.control&spm=1001.2101.3001.4242
https://www.huaweicloud.com/articles/d077fbd452986f06aba6ffe5e9db5449.html
https://cloud.tencent.com/developer/ask/37501 -
flink算子:https://cloud.tencent.com/developer/article/1559998
reduce算子:reduce算子是flink流处理中的一个聚合算子,可以对属于同一个分组的数据进行一些聚合操作。
https://blog.csdn.net/ASN_forever/article/details/106687007 -
flink算子:union 和connect算子的区别:union合并两个以上的数据流,类型必须相同;connect合并两个,类型可以不同
-
flink算子:shuffle 将随机分发数据,而 rebalance 将以循环方式分发数据。后者效率更高,因为您不必计算随机数。此外,根据随机性,您最终可能会得到某种不那么均匀的分布。
-
hashmap线程不安全的原因:1.8之后会发生数据覆盖
https://developer.51cto.com/art/202012/634358.htm
https://www.cnblogs.com/aspirant/p/11450839.html
https://www.jianshu.com/p/e2f75c8cce01 -
乐观锁和悲观锁:1)乐观锁本身是不加锁的,只是在更新时判断一下数据是否被其他线程更新了;AtomicInteger便是一个例子。
(2)有时乐观锁可能与加锁操作合作,例如,在前述updateCoins()的例子中,MySQL在执行update时会加排它锁。但这只是乐观锁与加锁操作合作的例子,不能改变“乐观锁本身不加锁”这一事实。
https://www.cnblogs.com/kismetv/p/10787228.html#t4 -
多线程同步机制:https://www.huaweicloud.com/articles/30289e77f0573d561162e4bf1556c48d.html
-
kafka分区有序:单区是有序的,一个partition里是有序的:https://www.cnblogs.com/sddai/p/11340870.html
https://www.jianshu.com/p/82d473397cbf -
kafka分区太多会导致可用性降低:https://www.cnblogs.com/bigdatalearnshare/p/14278076.html
https://cloud.tencent.com/developer/article/1573167 -
flink state的存储方式:
StateBackend的意思是状态后端。
状态后端定义了流式应用程序状态如何存储和checkpoint的。不同的状态后端以不同的方式来存储其状态,并且使用不同的数据结构来保存正在运行的应用程序的状态。
MemoryStateBackend、FsStateBackend、RocksDBStateBackend
https://blog.csdn.net/u010002184/article/details/106974208 -
flink的容错机制:https://segmentfault.com/a/1190000008129552
-
flink一致性:内部和端到端的一致性:
AT-MOST-ONCE(最多一次)
当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据。At-most-once 语义的含义是最多处理一次事件。
AT-LEAST-ONCE(至少一次)
在大多数的真实应用场景,我们希望不丢失事件。这种类型的保障称为 at-least-once,意思是所有的事件都得到了处理,而一些事件还可能被处理多次。
EXACTLY-ONCE(精确一次)
恰好处理一次是最严格的保证,也是最难实现的。恰好处理一次语义不仅仅意味着没有事件丢失,还意味着针对每一个数据,内部状态仅仅更新一次
https://blog.csdn.net/sghuu/article/details/103705177 -
在flink中主要在于:
1.source端 - 可重设数据的读取位置
2.内部计算处理的保证 - 检查点的状态一致性保证
3.sink端-从故障恢复时,数据不会重复写入到外部的系统
1)幂等性写入 :可以重复执行很多次,但是只会导致一次结果的更改,后面的操作不起作用
2)事务写入 :应用程序中一系列严密操作,所有操作要么成功完成,否在每个操作都会被撤销
具有原子性,一个事务中的一系列操作要么全部成功,要么一个都不成功
构建的事务对应上flink的checkpoint,等到checkpoint成功时才把该checkpoint对应的数据写入到外部
事务的实现方式:
一.预写日志的形式
把结果数据先当成状态保存,然后收到checkPoint完成的通知时,一次性写入到sink系统中
简单易于实现,由于数据提前做了缓存交给了状态后端管理,所有物料说明sink系统都能用这种方式实现 flink提供了GenericWriteAheadSink模板来实现这种事务性的sink
https://www.hnbian.cn/posts/6adf75db.html
https://segmentfault.com/a/1190000022891333
https://www.jianshu.com/p/02d6d1103746 -
kafka的分区和副本:https://zhuanlan.zhihu.com/p/112536851
https://juejin.cn/post/6894438978037284877 -
flink的水位线:https://zhuanlan.zhihu.com/p/342271617
-
kafka的高水位:https://www.jianshu.com/p/286ba275ab4d
在 Kafka 中,高水位的作用主要有 2 个。
定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的。
帮助 Kafka 完成副本同步。 -
arraylist线程不安全:
https://www.jianshu.com/p/bf92ce3a153a
用线程安全的是Vector
为了保证线程安全:
商汤科技一面
- 多线程写kafka,怎么保证事务,flink往下游写,怎么保证事务的备份和容错,比如其中一个任务错了,怎么只备份这一个,没有完整保证事务的一个机制
- java调接口库,httpconnect库
- 个人亮点的算子,项目的亮点
- 异步读写
- flink整个流程提交的时候,是什么结果,提交一个任务,发到哪里,怎么样去执行
- java八大基本类型:整型:byte, short, int, long.
浮点型:float, double.
字符型:char.
布尔型:boolean. - java集合类,实现类
Queue 中 add() 和 offer()都是用来向队列添加一个元素。
在容量已满的情况下,add() 方法会抛出IllegalStateException异常,offer() 方法只会返回 false - 二分查找
- shuffle的环形缓冲区的算法,数据结构
商汤二面
- java里list怎么做排序的,排序按什么字段排序的
- 创建线程的四种方式
- spriderloccal 是什么意思
- oom的提示信息,怎么解决
- jar包冲突,依赖的版本不一样,怎么解决
- kafka+flink怎么提高性能,降低延迟,提高吞吐
搜狐
flink sql,
flink集群是哪一种类型的部署、
flink怎么提交作用上去、作业打包成java jar包,
提交的参数大概有哪些,要多少资源,内存、并发类、
作业去连接kafka,要不要安全认证,还是写broker就可以,
创建消费者需要的最少信息是多少group id,
不同的group id和同一个group id是一样的么,
不同的kafka消费统一group id是一样的么
kafka的专门topic,放offset
最末:之前的公司记录
介绍:数据做什么方面的处理,xml数据类型,
Kafka十几个集群,数据量多少,pb级数据量,总体数据量,
消费的程序写flink开发的,
自己开发的java
Arraylist和linklist在实现上、底层操作上有什么差异,算法复杂度,空间复杂度
增加、删除、插入的时间
查找 arraylist都是o1,增删o(n),基于数组实现,向后动态扩容,怎么实现数组动态扩容,复制,扩容1.5倍,
linklist
hashmap的key是object,用自己实现object,会有什么问题呢,任意对象有hashcode,object要保证里面的对象是不可变的,hashcode方法导致值会变化
Java的并发类,comparelinkq,comparhashmap,
大数据组件相关的问题,什么是sql什么是nosql数据库,关系型和非关系型数据,
什么是行式储存(连续行存储,就要加载所有的列),什么是列式存储(存到文件里,连续列存储,减少到内存读取的数量),
Es的索引,task和keyword的区别,keyword,一个需要分词,一个不需要分词的文本
Kafka如何避免重复消费,定义偏移量,消费成功的时候把偏移量
sprk和hive的了解
Spark比hive的优势在哪里,工作中用到spark的方式,
网络流量数据,自己写,利用率更高,减少cpu利用率
数据结构,什么是平衡二叉树,有向无环图,图遍历(深度遍历和广度遍历)
线程和进程的区别,面向政府,访问应用
Hdfs做离线任务
并发能力
对于es要了解
Hbase是key要满足什么涉及原则,写入和查询,写入异常,哪个库的
并发的效率
Es的节点类型,节点之间是怎么访问的,doc value是什么,索引有没有更新,和bitmap的区别,倒排索引怎么实现的,
计算机网络:传输层的协议,tcp udp,控制网络拥堵的算法
DMA是什么
Java垃圾回收机制,类加载的过程、生命周期
页淘汰算法,fifo lru
flink几层
和spark对比
数据是怎么过滤的,具体匹配算法是什么,封装好了的算法?
对kafka了解的深,
实现原理:https://cloud.tencent.com/developer/article/1530090 订阅消息队列的三种方式
Once就是被消费一次,还是有at least once at most once
不同消息队列提供不同的消费语义,
java里的volatile关键字,怎么做java的并发控制 java的jvm
Redis是怎么部署的,用哪种模式
Redis的实现原理,存kv,数据结构,sds有哪几种结构
网络:tcp四次挥手的流程,
Sql写的多么,sql语句的执行过程,怎么解析sql,怎么传到具体组件里面,sql parser的过程
工程基础,给一个任务,模块,分解成可行的步骤,工程能力,给出很好的方案,性能,对很细的点专研很深
Flink转化,怎么重推数据
离线也是通过flink是批处理解析的数据,落地到hdfs,建hive库表,做一些离线抽取,
每天flink的数据量级,大概是多少级别,pb级左右,
当flink流式处理之后,做数据重推,对实时指标计算,做怎样的操作,
回滚包括哪些信息,位置,量级
Flink从kafka里消费数据,到最后数据罗盘,是怎么保证数据的gapt once,保证数据不丢失
Offset 写到es,写入失败,幂等怎么保持一致性,这样的数据流怎么保证它不能多不能少
Offset怎么去控制,还是有其它机制去保证这个事务的执行
flink提交kafka的offset,是在哪一步提交的
是计算完之后提交,还是存到es之后提交
落地写入失败,这部分数据怎么办,对kafka而言,这份数据已经消费完成了,
怎么判断落地未成功,kafka消费完以后的数据怎么追查,不知道有哪些数据没存在,重推,从哪里重推,哪个位置少了
Flink的checkpoint机制,故障排除的机制,怎么存的,怎么维护状态
幂等,数据一致性,flink反压,流量暴增,由于某个逻辑出现问题
离线流程:
写sql,hive去重,distinct group by ,窗口函数实现去重,
Lonamer函数,不是列函数,noranber函数
Hive写一些参数,hive参数的优化
Hive的内部表和外部表的区别
java
线程的创建方式:runable
线程池的参数
多线程场景,一个主线程,三个子线程,主线程启动,子线程做count操作,主线程做sum,sleep(10)
怎么多线程并发
怎么知道线程执行完成,
多线程去修改一个全局属性int,怎么保证线程安全
concurrent包里面的原子类
hashmap的数据结构
Hashmap怎么扩容,1.8的扩容机制
java的反射
常用的两种反射场景,classforname和classforloadder分别是怎么加载的
一个加载的逻辑和顺序有什么区别
Java oom错误是怎么定位问题
Jvm的时候,发现老年代是full GC比较频繁,在资源恒定的情况下,出现full GC是哪些原因
1.8
Flink参数调优:看资源来定,数据量级,几个partition,qps,数据是否有积压
连续7天每天登录每个网站的用户前3
topN问题
Checkpoint的时间间隔设置的是多少
通过kafka的topic partition offset,查看具体的数据包内容