- 博客(101)
- 收藏
- 关注
原创 通过Hive小文件合并(CombineHiveInputFormat)减少80%的Map任务数
小文件过多导致Map任务激增(每个文件至少一个Map),浪费资源且增加NameNode压力。
2025-02-23 19:27:04
424
原创 HBase二级索引设计:基于RowKey散列(HashPrefix)解决热点问题,结合Phoenix SQL层实现二级索引,通过Redis缓存活跃用户标签数据,降低HBase Scan压力
HBase的默认RowKey设计可能导致数据集中在单一Region,易因RowKey分布不均导致RegionServer热点问题。通过散列算法(如MD5、SHA1或简单取模)为RowKey添加固定长度前缀,将数据均匀分散到不同Region中。
2025-02-23 19:14:56
855
原创 基于Flink SQL实现7天用户行为风险识别,结合滚动窗口预聚合与CEP复杂事件处理技术,根据用户7天的动作,包括交易,支付,评价等行为,识别用户的风险等级
基于FlinkSQL CEP构建多维度用户特征矩阵与高风险用户识别模型,需结合实时特征计算、动态规则管理和复杂事件检测能力。(袋鼠云动态CEP方案中的PatternProcessorDiscoverer机制[[2][5]])落地时可参考电商/金融行业案例,通过AB测试验证规则有效性(如误报率降低30%+结合,解决了传统风控模型规则更新滞后的问题。(参考优快云案例中的DWD层构建方法。(阿里云分享的1.16版CEP语法增强。
2025-02-22 19:06:41
1040
原创 SQL相关
设置一个flag,用户每进入一次,flag设为1,每退出一次,flag设为-1。计算每个视频类型下面播放量前10的视频id。a b 表示a关注b。求直播间最大在线人数。
2022-09-29 09:29:33
211
原创 Flume面试题
sink:输出到下游,sink是完全事务性的。3 ,增大 batchSize : 可以增大一次性批处理的 event 条数,适当调大这个参数,可以调高 source 搬运数据到 channel 的性能。(2kafka追求的是高吞吐,高负载,同一topic下可以有多个partition,由于是pull模式拉取数据,因此适合多个消费者的场景。2 ,使用 file channel 时,dataDirs 配置多个不同盘下的目录可以提高性能。1 ,memory :性能好,但是,如果发生意外,可能丢失数据。
2022-08-22 11:14:40
317
原创 开发经验介绍
去重指标的增量计算优化方案1 背景统计最近30天的uv(去重指标)select visitor_idfrom (select item_id ,count(distinct visitor_id) as ipv_uv_1d_001 from tbcdm.dwd_tb_log_obj_vst_di where ds <= '{bizdate}' and ds >= to_char(datea
2022-08-11 17:10:39
510
原创 草稿nkw问题
系统总会有一些坑,需要把这些坑填上,填坑的过程就是熟悉系统的过程。历史代码经过多次迭代总会导致复杂度高(分支、嵌套、循环很多),耦合严重,设计漏洞,性能隐患等,很难维护,这些就需要我们去重构了。抖音有一张流量表和一张交易表,分别是 table_a(mid, pv) 和 table_b(mid, gmv),如何将他们进行合并,数据倾斜如何处理。这块主要关注底层数据的模型,不仅仅要关注实体本身,更要关注实体间的数据流动,例如主从同步策略,数据迁移策略,以及不同数据模型的转换。客服反馈的常见问题有哪些?.....
2022-08-03 19:24:43
338
原创 数据质量监控
数据质量监控与保障:数据质量保障的学习,包括方法,数据测试,DQC配置,能发现数据问题,排查问题,解决问题,总结问题数据质量是数据开发里面非常重要的,错误的数据可能还会带来错误的决策。我们主要是监控数据的准确性、完成行、一致性、及时性。采取的措施是三步法:事前-事中-事后。事前主要通过自测,sqlscan,事中主要通过dqc进行监控,事后主要是处理分析,沉淀方法。准确性:数据信息是否存在存在错误或异常,是否符合业务预期,如号码位数是否正确,统计指标是否正常完整性:数据记录和信息是否完整,如数据记录缺失、字
2022-06-24 15:51:38
584
原创 项目面试题
为什么要做这个项目?是为了解决什么问题?项目的性质是什么?多少个人完成?你负责了什么工作?有什么亮点?难点?运用了哪些技术?有什么收获?ODS层采用什么压缩方式和存储格式?压缩采用Snappy,存储采用orc,压缩比是100g数据压缩完10g左右。DWD层做了哪些事? 数据清洗 空值去除 过滤核心字段无意义的数据,比如订单表中订单id为null,支付表中支付id为空 对手机号、身份证号等敏感数据脱敏 对业务数据传过来的表进行
2022-05-29 11:22:43
124
原创 Flink面试题
1.WatermarkAssignerWithPeriodicWatermarks当flink基于eventtime的时间窗口处理数据时,必须确定所有该时间窗口内的数据全都进入之后,才会开始处理数据,由于数据可能是乱序的,在watermark里面有个时间戳,flink会使用watermark标记所有小于该时间戳的消息都已流入,当操作符处理到WaterMark时,它对所有小于该WaterMark时间戳的时间窗口的数据进行处理并发送到下一个操作符节点,然后也将WaterMark发送到下一个操作符节点
2022-05-29 10:11:32
355
原创 ZooKeeper面试题
1.zookeeper选举机制1.初始化时的选举优先看zxid,zxid相同的情况下看myid集群启动时,1号zxid=0,myid=1,2号zxid=0,myid=2,3号zxid=0,myid=31号启动,先投给自己一票2号启动,zxid与1号相同,myid比1号大,因此1号投给2号,2号也投给2号,超过半数,因此2号成为leader,1号成为follower3号启动,已经有了Leader,3号成为follower当选举结束后,更新状态,Leader更新为Leading,fo
2022-05-29 10:10:13
61
原创 Kafka面试题
1.kafka为什么快1.数据压缩,减少网络IO,压缩格式包括Gzip、Snappy2.批量传输,先将消息缓存在内存中,然后达到某个条件(比如到多少条数据,或者到几秒钟)就flush一次,flush到磁盘上3.顺序读写,避免随机寻址,写入时是单个partition末尾添加4.利用操作系统的page cache优化读写5.零拷贝技术。在producer和consumer两个方面都使用了零拷贝技术。网络数据持久化到磁盘 (Producer 到 Broker)。(使用了mmap)磁盘文
2022-05-29 10:08:32
229
原创 MapReduce面试题
1. MR是怎么确定MapTask数量的如果不进行任何设置,默认的map个数是和blcok_size相关的。default_num = total_size / block_size;如果输入中有很多小文件,依然想减少map个数,则需要将小文件merger为大文件2. MapReduce流程(1)首先是对文件进行切片split,根据文件的大小和block的大小进行切片。默认block为128M(2)然后对切片后的数据解析问key-value。key为偏移量,value为具体的内容
2022-05-29 10:07:22
163
原创 Hadoop面试题
1.Hadoop高可用有2台机器,2个namenode,一个active,一个standby有一个守护进程journalnodes,会和2个nn进行通信,当activeNN对命名空间信息修改时,会持久化到editslog上,然后standbyNN观察editslog,并更新自己的信息,保持信息和activeNN同步。还有一个zookeeper failover controller,通过zookeeper failover controller里面的health monitor监控NN,如果ac
2022-05-29 10:06:32
61
原创 HDFS面试题
1.2nn作用帮助nn进行管理,nn主要存储元数据信息,当nn运行的时候,元数据信息是存在内存中的,也可以持久化到磁盘上。持久化到磁盘上有两个文件,一个是fsimage,一个是edits log。Fsimage是nn启动时的一个快照,edits log是nn启动后做的改动。只有当nn重启时,edits log才会合并到fsimage中,但是nn不会经常重启,因此edits log就会变得很大。此时2nn会将edits log中的信息更新到自己的fsimage中,然后将自己的fsimage复制给nn的
2022-05-29 10:05:49
71
原创 Yarn面试题
1.Yarn任务提交过程1.Client向rm提交程序,申请运行时需要的资源2.ResourceManager收到请求之后,调用ApplicationManager向NodeManager发送请求,申请一个资源(Container),并且要求Container启动ApplicationMaster.3.ApplicationMaster启动之后,首先注册自己到ResourceManager,然后为自己的Task申请Container,ResourceManager收到请求之后,会要求NodeMa
2022-05-29 10:05:03
241
原创 数据仓库面试题
1.Hive的执行过程?1)解析器parser:进来一个SQL字符串,将SQL解析,解析的结果是AST(抽象语法树见官网详细解释以及使用)AST本质还是字符串2)遍历AST Tree,抽象出查询的基本组成单元QueryBlock3)逻辑执行计划解析,遍历QueryBlock,翻译为执行操作树OperatorTree4)逻辑执行计划优化,将OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量5)物理执行计划解析,生成MapReduce任务
2022-05-29 10:04:11
738
原创 算法面试题
1. 内存受限的情况下,有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数:用mapreduce的思想,首先对数据进行哈希,将hash后的值按照范围划分到不同的机器上,这样每台机器就只处理一部分数据,然后统计每台机器上出现次数最多的前N个数据,然后将每台机器统计出来的结果进行汇总,再求出总的前N个数据。............
2022-05-29 10:01:50
63
原创 数据库面试题
1.数据库隔离等级1.脏读:事务A读取到了事务B未提交的数据2.不可重复读:两次查询结果不一致,因为两次查询中间有另外一个事务往里面更新了数据,不可重复读和脏读的区别:脏读读到的是一位未提交的数据,不可重复读读到的是前一个事务提交的数据,解决不可重复读就是多读几次,以最后一次为准,或者锁行3.幻读:幻读和不可重复读都是读取另外一个已经提交的事务,但是不可重复读一般是发生在update时,数据被修改,幻读发生在insert或者delete时,数据会多出来一条,解决幻读可以锁表隔离.
2022-05-29 09:59:58
74
原创 Java面试题
1.Hashmap和treemap的异同异:Hashmap中元素无序,通过hashcode查找,treemap中元素按照某一顺序排列 Hashmap基于hash表实现,treemap基于红黑树实现 Hashmap适用于map插入、删除、定位元素,treemap适用于按自然顺序遍历同:1.都是线程不安全的2.说说多态1.多态是同一个对象,在不同的时刻表现出来的不同状态2.前提:(1)有继承或者实现(2)有方法的重写(3)父类的引用指向子类对象3.多态特点:表现为.......
2022-05-29 09:54:16
466
原创 java Comparator接口自定义排序规则
如果是后-前,就是降序排序如果是前-后,就是升序排序 Arrays.sort(people, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if (o1[0] != o2[0]){ //后-前,降序 retu
2022-03-28 11:10:22
774
原创 动态规划-关于dp[i]含义的一点心得
关于dp[i]的含义,目前接触到的有两种:第一种:dp[i]表示以索引i结尾的最大值,这种情况包含的结果内必须是i是最后一个元素,包括下标i之前的最大连续子序列和为dp[i]。举例:leetcode53. 最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1.
2022-03-11 15:46:11
997
原创 leetcode二叉树103二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]注意点:关于顺序的问题1.removeFirst()永远是和addLast()搭配,removeLast()永远是和
2022-02-22 18:09:57
6936
原创 leetcode回溯五题
回溯模板:void backtracking(){if(终止条件) {收集结果return }for(集合的元素集,类似子节点的个数){处理结点递归函数;回溯操作(撤销处理结点12, 2撤销 ,13 撤销3, 14)}}何时要startindex?(在组...
2022-02-07 16:09:33
5601
原创 leetcode15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]思路:排序,一次遍历+双指针注意点:需要去重有三个点需要去重...
2022-02-04 17:37:25
100
原创 leetcode双指针11盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例 2:输入..
2022-02-04 16:42:35
91
原创 leetcode字符串5最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"思路:遍历字符串,对每个位置进行一次判定(在其位置的最大回文子串)注意:回文子串不是指非得从中间开始的,例如ccccbbaabb,最大回文子串为bbaabb,因此需要从每个位置都要遍
2022-02-02 14:37:11
200
原创 leetcode字符串3无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"...
2022-02-01 17:04:03
6395
原创 leetcode链表2两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,
2022-01-30 17:04:12
114
原创 leetcode二进制461汉明距离
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。示例 1:输入:x = 1, y = 4输出:2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。示例 2:输入:x = 3, y = 1输出:1注意点:1. Integer.bitCount(参数) 统计参数中有几个12. 异或运算 ^ 相同为0,不同为1...
2022-01-30 16:12:59
1687
原创 leetcode二分法剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在重复元素值的数组numbers,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0使用二分查找:原本是一个排好序的数组,现分为两个排好序的数组,里面有个分隔点(也就是最...
2022-01-27 15:47:59
98
原创 leetcode112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。三部曲:终止条件;返回
2022-01-27 15:01:20
389
原创 leetocde双指针剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]思路:双指针引用自作者:jyd设连续正整数序列的左边界 ii 和右边界 jj ,则可构建滑动窗口从左向右滑动。循环中,每轮判断滑动窗口内元素
2022-01-26 16:11:54
90
原创 leetcode剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTail.
2022-01-26 14:54:30
85
原创 leetcode剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出...
2022-01-25 20:08:06
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人