面试总结记录

一、嘀嗒一面

数据开发组、数据分析组、数据应用组
数据开发内容:1、偏数仓建设,大的topic量可以达到十万级别,2、数据中台:日志采集,离线一条,实时一条,质量监控,抽象成模块,组成DAG图,常用逻辑封装平台化,数据中台应用

  1. kafka的ack机制:一次响应?
  2. kafka线上实操:kafka的6个分区,扩展成20个分区
  3. 消费kafka是怎么消费的,用原生代码还是写flink程序,kafka扩容之后,下游消费的程序要不要修改,topic的partition增加,要怎么修改;
  4. flink任务启动,如果启动失败,要怎么办,比如输入量增大,上游scamper有一个变动,或者出现其它情况,任务挂了,怎么保证消费正常启动,数据不丢失,offset保存在哪里?
  5. es:es模板的概念,template,
  6. es的响应速度是什么级别,比如小于10ms,
  7. es响应常用api,监控响应有哪些
  8. es的囊变,一个es集群分裂成两个es集群,
  9. 项目的价值,业务上的价值,
二、货拉拉一面
  1. flink的理解,
  2. flink里面有哪些算子、有哪些窗口、状态
  3. 监控指标,实例数,写入延迟,
  4. 性能优化,比如反压,延迟比较高,
  5. hbase大规模并发的时候,是怎么做到写入延迟比较低,
  6. kafka的了解、kafka的优点、kafka的文件格式
  7. 秒级处理kafka机制怎么不丢失
  8. java线程池的作用
  9. java运行程序过程
  10. java回收垃圾的方式
  11. flink的优势,相比spark来说
  12. flink的内存模型,怎么管理内存的,分为三个部分,主要用堆内内存,还是堆外内存
  13. flink怎么保证有且只有一次的
  14. flink处理反压的机制,比如外边接收端来不及接受了,怎么处理
  15. hash算法有哪些,hash冲突的处理方式
  16. 位图的使用场景
  17. flink对flink sql怎么执行,对flink api是怎么执行的流程,怎么解析,怎么执行
  18. 数据缓存,哪些缓存机制
  19. 分布式锁,分布式算法这种
  20. 大数据算法、两个文件,分别有很多行,怎么找到相同的url
  21. java jvm
三、boss直聘一面
  1. flink是基于什么搭建的
  2. 上线的流程是什么
  3. hdfs查看目录的大小
  4. flink原理:flink重启策略
  5. 固定延迟重启策略是什么样的,默认值是什么,你是怎么设置的
  6. kafka的并行度和flink是什么关系
  7. flink的task slot原理:http://wuchong.me/blog/2016/05/09/flink-internals-understanding-execution-resources/
  8. java的程序计数器在哪个区里,JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致
  9. java集合类,线程安全的arraylist是什么
  10. java常见的阻塞队列有哪几种,arraybroker queue
  11. jvm调参的工作
  12. linux命令查看内存,查看进程的内存占用
  13. 进程的网络使用情况,进程的入口流量,有多少带宽进程写入
  14. flink的内存调优:https://zhuanlan.zhihu.com/p/360240036
四、bigo

1、建设数据仓库
ODS层:存放原始数据,直接加载原始日志、数据,数据保存原貌不做处理。
DWD层:结构与粒度原始表保持一致,对ODS层数据进行清洗
DWS层:以DWD为基础,进行轻度汇总
ADS层:为各种统计报表提供数据

  1. flink重启策略:https://www.jianshu.com/p/4be0fa07f29d
    https://zhuanlan.zhihu.com/p/180478618

  2. flink的水印:https://www.cnblogs.com/starzy/p/11439997.html

  3. 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

  4. Flink集群的角色:TaskManager,JobManager,Client三种角色
    https://blog.csdn.net/GabrielCP/article/details/112688794

  5. 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

  6. flink算子:https://cloud.tencent.com/developer/article/1559998
    reduce算子:reduce算子是flink流处理中的一个聚合算子,可以对属于同一个分组的数据进行一些聚合操作。
    https://blog.csdn.net/ASN_forever/article/details/106687007

  7. flink算子:union 和connect算子的区别:union合并两个以上的数据流,类型必须相同;connect合并两个,类型可以不同

  8. flink算子:shuffle 将随机分发数据,而 rebalance 将以循环方式分发数据。后者效率更高,因为您不必计算随机数。此外,根据随机性,您最终可能会得到某种不那么均匀的分布。

  9. 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

  10. 乐观锁和悲观锁:1)乐观锁本身是不加锁的,只是在更新时判断一下数据是否被其他线程更新了;AtomicInteger便是一个例子。
    (2)有时乐观锁可能与加锁操作合作,例如,在前述updateCoins()的例子中,MySQL在执行update时会加排它锁。但这只是乐观锁与加锁操作合作的例子,不能改变“乐观锁本身不加锁”这一事实。
    https://www.cnblogs.com/kismetv/p/10787228.html#t4

  11. 多线程同步机制:https://www.huaweicloud.com/articles/30289e77f0573d561162e4bf1556c48d.html

  12. kafka分区有序:单区是有序的,一个partition里是有序的:https://www.cnblogs.com/sddai/p/11340870.html
    https://www.jianshu.com/p/82d473397cbf

  13. kafka分区太多会导致可用性降低:https://www.cnblogs.com/bigdatalearnshare/p/14278076.html
    https://cloud.tencent.com/developer/article/1573167

  14. flink state的存储方式:
    StateBackend的意思是状态后端。
    状态后端定义了流式应用程序状态如何存储和checkpoint的。不同的状态后端以不同的方式来存储其状态,并且使用不同的数据结构来保存正在运行的应用程序的状态。
    MemoryStateBackend、FsStateBackend、RocksDBStateBackend
    https://blog.csdn.net/u010002184/article/details/106974208

  15. flink的容错机制:https://segmentfault.com/a/1190000008129552

  16. flink一致性:内部和端到端的一致性:
    AT-MOST-ONCE(最多一次)
    当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据。At-most-once 语义的含义是最多处理一次事件。
    AT-LEAST-ONCE(至少一次)
    在大多数的真实应用场景,我们希望不丢失事件。这种类型的保障称为 at-least-once,意思是所有的事件都得到了处理,而一些事件还可能被处理多次。
    EXACTLY-ONCE(精确一次)
    恰好处理一次是最严格的保证,也是最难实现的。恰好处理一次语义不仅仅意味着没有事件丢失,还意味着针对每一个数据,内部状态仅仅更新一次
    https://blog.csdn.net/sghuu/article/details/103705177

  17. 在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

  18. kafka的分区和副本:https://zhuanlan.zhihu.com/p/112536851
    https://juejin.cn/post/6894438978037284877

  19. flink的水位线:https://zhuanlan.zhihu.com/p/342271617

  20. kafka的高水位:https://www.jianshu.com/p/286ba275ab4d
    在 Kafka 中,高水位的作用主要有 2 个。
    定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的。
    帮助 Kafka 完成副本同步。

  21. arraylist线程不安全:
    https://www.jianshu.com/p/bf92ce3a153a
    用线程安全的是Vector
    为了保证线程安全:

商汤科技一面
  1. 多线程写kafka,怎么保证事务,flink往下游写,怎么保证事务的备份和容错,比如其中一个任务错了,怎么只备份这一个,没有完整保证事务的一个机制
  2. java调接口库,httpconnect库
  3. 个人亮点的算子,项目的亮点
  4. 异步读写
  5. flink整个流程提交的时候,是什么结果,提交一个任务,发到哪里,怎么样去执行
  6. java八大基本类型:整型:byte, short, int, long.
    浮点型:float, double.
    字符型:char.
    布尔型:boolean.
  7. java集合类,实现类
    Queue 中 add() 和 offer()都是用来向队列添加一个元素。
    在容量已满的情况下,add() 方法会抛出IllegalStateException异常,offer() 方法只会返回 false
  8. 二分查找
  9. shuffle的环形缓冲区的算法,数据结构
商汤二面
  1. java里list怎么做排序的,排序按什么字段排序的
  2. 创建线程的四种方式
  3. spriderloccal 是什么意思
  4. oom的提示信息,怎么解决
  5. jar包冲突,依赖的版本不一样,怎么解决
  6. 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,查看具体的数据包内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值