大数据面试
文章平均质量分 82
大数据面试
走过冬季
大数据知识分享
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
那些年,我在阿里做数据开发
业务变了,对应的数据也都发生了很大的变化,我到了ICBU后,被分配到负责流量和广告相关的业务,会接触到大量的日志数据,比如页面浏览,点击,曝光,还有P4P点击广告相关的日志,面对这么多非结构化的日志数据,我一开始都不清楚为什么需要这些日志的数据, 但是通过后面不断对互联网业务的熟悉,才知道流量分析对网站的重要性,这个阶段我也熟悉了很多流量相关的业务知识,比如SEM,PPC,SEO,联盟等等。写在最后,我觉得大家都是在将自己的能力最大化,价值最大化的过程中前进,所以有时候“往前迈一步”,可能会有更好的风景。原创 2025-09-03 10:21:01 · 1079 阅读 · 0 评论 -
飞书机器人告警消息开发(Java)
运行AlertDemo类。原创 2025-08-05 17:20:59 · 496 阅读 · 0 评论 -
什么是RFM模型
三个黄金维度,高效地将母婴用户划分为不同价值等级(如 VIP、需挽留、潜力用户等),为后续的精准营销(如 VIP 专属服务、流失用户召回、潜力用户转化)提供了最基础也是最关键的决策依据。在面试中阐述清楚 RFM 的原理、应用过程和你的优化点,会是非常有力的加分项。RFM 模型是客户价值分析中一种经典且实用的量化模型,它通过三个关键维度评估用户价值,帮助企业识别最有价值的客户群体。RFM 模型是你简历中“用户价值分层模型构建”职责的核心工具。(注:↑表示得分高/值优,↓表示得分低/值差)原创 2025-07-07 14:51:18 · 753 阅读 · 0 评论 -
数字营销中衡量广告效果的核心指标
将广告平台数据(如CTR/CPC)与业务数据(如复购率/ROAS)打通,结合归因模型评估真实贡献。尤其在零售媒体中,遵循IAB/MRC标准可避免“数据黑箱”,实现跨平台对比。用好这些指标的关键在于。原创 2025-07-03 16:18:35 · 2264 阅读 · 0 评论 -
MySQL LAG和LEAD函数用法详解
在 MySQL 中,LAG()和LEAD()是窗口函数(Window Functions),用于。它们常用于计算差值、趋势分析或时间序列比较。原创 2025-06-23 11:29:24 · 891 阅读 · 0 评论 -
Spark-sql自定义函数
2.3.1 UDF1)UDF:一行进入,一行出2)代码实现//1.创建配置对象//2.获取//3.编写代码//定义一个函数//需要首先导入依赖@Override大侠.show();// lambda表达式写法大侠//4.关闭。原创 2025-06-04 09:23:24 · 661 阅读 · 0 评论 -
Spark内存管理
由于同一个Executor的所有的计算任务共享有限的存储内存空间,当有新的 Block 需要缓存但是剩余空间不足且无法动态占用时,就要对LinkedHashMap中的旧Block进行淘汰(Eviction),而被淘汰的Block如果其存储级别中同时包含存储到磁盘的要求,则要对其进行落盘(Drop),否则直接删除该Block。以非序列化的Java对象的方式持久化在JVM内存中。此外,在被Spark标记为释放的对象实例,很有可能在实际上并没有被JVM回收,导致实际可用的内存小于Spark记录的可用内存。原创 2025-06-04 09:25:25 · 1093 阅读 · 0 评论 -
Dstream输出
在企业开发中通常采用foreachRDD(),它用来对DStream中的RDD进行任意计算。在foreachRDD()中,可以重用我们在Spark中实现的所有行动操作(action算子)。求值类似,如果一个DStream及其派生出的DStream都没有被执行输出操作,那么这些DStream就都不会被求值。如果StreamingContext中没有设定输出操作,整个Context就都不会启动。注意:以上操作都是每一批次写出一次,会产生大量小文件,在生产环境,很少使用。DStream通常将数据输出到,原创 2025-06-04 09:26:00 · 739 阅读 · 0 评论 -
Spark-sql数据的加载与保存
到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)SparkSQL读取和保存的文件一般为三种,JSON文件、CSV文件和列式存储的文件,同时可以通过添加参数,来识别不同的存储和压缩格式。SparkSQL可以采用内嵌Hive(spark开箱即用的hive),也可以采用外部Hive。2)添加hive-site.xml文件到spark-yarn的conf目录。读取别的类型的数据也能写出为。列式存储的数据自带列分割。原创 2025-06-04 09:24:49 · 1013 阅读 · 0 评论 -
SparkStreaming 代码示例
说明:DStream中批次与批次之间计算相互独立。如果批次设置时间小于计算时间会出现计算任务叠加情况,需要多分配资源。通常情况,批次设置时间要大于计算时间。在内部实现上,每一批次的数据封装成一个RDD,一系列连续的RDD组成了DStream。对这些RDD的转换是由Spark引擎来计算。DStream是Spark Streaming的基础抽象,代表持续性的数据流和经过各种Spark算子操作后的结果数据流。如果不希望运行时打印大量日志,可以在resources文件夹中添加。文件,并添加日志配置信息。原创 2025-06-04 09:26:26 · 1108 阅读 · 0 评论 -
spark sql概述
Spark SQL是用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息来执行额外的优化。与Spark SQL交互的方式有多种,包括SQL和Dataset API。计算结果时,使用相同的执行引擎,与您用于表达计算的API/语言无关。原创 2025-06-04 09:22:20 · 349 阅读 · 0 评论 -
Spark shuffle
该参数默认值为false,将其设置为true即可开启优化机制。写入磁盘文件通过缓冲区溢写的方式,每次溢写都会产生一个磁盘文件,优化的HashShuffle过程就是启用合并机制,合并机制就是复用buffer,开启合并机制的配置是。在溢写磁盘前,先根据key进行排序,排序过后的数据,会分批写入到磁盘文件中。Spark1.2版本默认是SortShuffle,但是可配置HashShuffle。过程,此过程将所有临时文件读取出来,一次写入到最终文件。中,将所有的临时文件合并,这就是。参数的值,默认为200。原创 2025-06-04 09:24:10 · 531 阅读 · 0 评论 -
Dstream转换
DStream上的操作与RDD的类似,分为转换和输出两种,此外转换操作中还有一些比较特殊的原语,如:transform()以及各种Window相关的原语。原创 2025-06-04 09:26:13 · 815 阅读 · 0 评论 -
Spark任务的执行
任务分配原则:根据每个Task的优先位置,确定Task的Locality(本地化)级别,本地化一共有五种,优先级由高到低顺序:移动数据不如移动计算。名称解析进程本地化,task和数据在同一个Executor中,性能最好。NODE_LOCAL节点本地化,task和数据在同一个节点中,但是task和数据不在同一个Executor中,数据需要在进程间进行传输。RACK_LOCAL机架本地化,task和数据在同一个机架的两个节点上,数据需要通过网络在节点之间进行传输。NO_PREF。原创 2025-06-04 09:23:55 · 367 阅读 · 0 评论 -
Spark-sql与Hive的交互
到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)SparkSQL可以采用内嵌Hive(spark开箱即用的hive),也可以采用外部Hive。2)添加hive-site.xml文件到spark-yarn的conf目录。1)添加MySQL连接驱动到spark-yarn的jars目录。3)启动spark-sql的客户端即可。企业开发中,通常采用外部。原创 2025-06-04 09:24:26 · 665 阅读 · 0 评论 -
SparkStreaming优雅关闭
但是分布式程序,没办法做到一个个进程去杀死,所以配置优雅的关闭就显得至关重要了。关闭方式:使用外部文件系统来控制内部程序关闭。流式任务需要7*24小时执行,但是有时涉及到。(2)启动Hadoop集群。获取当前任务是否正在运行。原创 2025-06-04 09:25:37 · 620 阅读 · 0 评论 -
Spark-streaming概述
整体架构图架构图。原创 2025-06-04 09:26:43 · 292 阅读 · 0 评论 -
Spark-sql编程
在sparkSql中DS直接支持的转换算子有:map(底层已经优化为mapPartition)、mapPartition、flatMap、groupByKey(聚合算子全部由groupByKey开始)、filter、distinct、coalesce、repartition、是Spark最新的SQL查询起始点,实质上是SQLContext和HiveContext的组合,所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。临时视图的生命周期和当前的。原创 2025-06-04 09:22:37 · 844 阅读 · 0 评论 -
Flink基本处理函数
处理函数提供了一个“定时服务”(TimerService),我们可以通过它访问流中的事件(event)、时间戳(timestamp)、水位线(watermark),甚至可以注册“定时事件”。而在很多应用需求中,要求我们对时间有更精细的控制,需要能够获取水位线,甚至要“把控时间”、定义什么时候做什么事,这就不是基本的时间窗口能够实现的了。与BroadcastProcessFunction不同的是,这时的广播连接流,是一个KeyedStream与广播流(BroadcastStream)做连接之后的产物。原创 2025-06-03 10:35:51 · 848 阅读 · 0 评论 -
Flink支持的数据类型
Flink还具有一个类型提取系统,可以分析函数的输入和返回类型,自动获取类型信息,从而获得对应的序列化器和反序列化器。但是,由于Java中泛型擦除的存在,在某些特殊情况下(比如Lambda表达式中),自动提取的信息是不够精细的——只告诉Flink当前的元素由“船头、船身、船尾”构成,根本无法重建出“大船”的模样;回忆一下之前的word count流处理程序,我们在将String类型的每个词转换成(word, count)二元组后,就明确地用returns指定了返回的类型。原创 2025-06-03 10:54:34 · 483 阅读 · 0 评论 -
Flink状态后端
Flink中提供了两类不同的状态后端,一种是“哈希表状态后端”(HashMapStateBackend),另一种是“内嵌RocksDB状态后端”(EmbeddedRocksDBStateBackend)。在Flink中,状态的存储、访问以及维护,都是由一个可插拔的组件决定的,这个组件就叫作状态后端(state backend)。普通的状态,以及窗口中收集的数据和触发器,都会以键值对的形式存储起来,所以底层是一个哈希表(HashMap),这种状态后端也因此得名。,所以不会因为保存检查点而阻塞数据的处理;原创 2025-06-03 10:33:57 · 841 阅读 · 0 评论 -
Flink算子状态
这样,并行度缩放之后的并行子任务就获取到了联合后完整的“大列表”,可以自行选择要使用的状态项和要丢弃的状态项。与Keyed State中的列表状态的区别是:在算子状态的上下文中,不会按键(key)分别处理状态,所以每一个并行子任务上只会保留一个“列表”(list),也就是当前并行子任务上所有状态项的集合。这时所有分区的所有数据都会访问到同一个状态,状态就像被“广播”到所有分区一样,这种特殊的算子状态,就叫作广播状态(BroadcastState)。根据状态的类型不同,重组分配的方案也会不同。原创 2025-06-03 10:34:46 · 888 阅读 · 0 评论 -
Flink从Kafka读取数据
所以想要以Kafka作为数据源获取数据,我们只需要引入Kafka连接器的依赖。Flink官方提供的是一个通用的Kafka连接器,它会自动跟踪最新版本的Kafka客户端。Flink官方提供了连接工具flink-connector-kafka,直接帮我们实现了一个消费者FlinkKafkaConsumer,它就是用来读取Kafka数据的SourceFunction。Flink从1.11开始提供了一个内置的DataGen 连接器,主要是用于生成一些随机数,用于在没有数据源的时候,进行流任务的测试以及性能测试等。原创 2025-06-03 10:53:45 · 615 阅读 · 0 评论 -
Flink时间属性
基于时间的操作(比如时间窗口),需要定义相关的时间语义和时间数据来源的信息。在创建表的DDL(CREATE TABLE语句)中,可以增加一个额外的字段,通过调用系统内置的PROCTIME()函数来指定当前的处理时间属性。按照时间语义的不同,可以把时间属性的定义分成事件时间(event time)和处理时间(processing time)两种情况。事件时间属性可以在创建表DDL中定义,增加一个字段,通过WATERMARK语句来定义事件时间属性。原创 2025-06-03 10:25:59 · 312 阅读 · 0 评论 -
Flink任务槽
1)任务槽(Task Slots)Flink中每一个TaskManager都是一个JVM进程,它可以启动多个独立的线程,来并行执行多个子任务(subtask)。很显然,TaskManager的计算资源是有限的,并行的任务越多,每个线程的资源就会越少。那一个TaskManager到底能并行处理多少个任务呢?为了控制并发量,我们需要在TaskManager上对每个任务运行所占用的资源做出明确的划分,这就是所谓的任务槽(task slots)。每个任务槽(task slot)其实表示了TaskManager拥有计原创 2025-06-03 10:59:15 · 460 阅读 · 0 评论 -
Flink系统架构
JobMaster会把JobGraph转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。TaskManager是Flink中的工作进程,数据流的具体计算就是它来做的。Slot是资源调度的最小单位,slot的数量限制了TaskManager能够并行处理的任务数量。所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中, 每个Job都有一个自己的JobMaster。,在Flink 集群中只有一个。原创 2025-06-03 11:00:22 · 322 阅读 · 0 评论 -
Flink转换算子
数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个DataStream转换为新的DataStream。原创 2025-06-03 10:52:34 · 573 阅读 · 0 评论 -
状态一致性
这个完整应用的一致性,就叫做“端到端(end-to-end)的状态一致性”,它取决于三个组件中最弱的那一环。在实际应用中,一般要保证从用户的角度看来,最终消费的数据是正确的。这就要求我们不仅要考虑Flink内部数据的处理转换,还涉及到从外部数据源读取,以及写入外部持久化系统,整个应用处理流程从头到尾都应该是正确的。流式计算本身就是一个一个来的,所以正常处理的过程中结果肯定是正确的;我们通过检查点的保存来保证状态恢复后结果的正确,所以主要讨论的就是“原创 2025-06-03 10:27:28 · 175 阅读 · 0 评论 -
Flink检查点
如果每处理一条数据就进行检查点的保存,当大量数据同时到来时,就会耗费很多资源来频繁做检查点,数据处理的速度就会受到影响。检查点的保存,最关键的就是要等所有任务将“同一个数据”处理完毕。下面我们通过一个具体的例子,来详细描述一下检查点具体的保存过程。kafka就是满足这些要求的一个最好的例子。我们应该在所有任务(算子)都恰好处理完一个相同的输入数据的时候,将它们的状态保存下来。,我们恢复到之前保存的状态,故障时正在处理的所有数据都需要重新处理;中,检查点的保存是周期性触发的,间隔时间可以进行设置。原创 2025-06-03 10:33:03 · 189 阅读 · 0 评论 -
Flink窗口处理函数
与此同时,也增加了一些获取其他信息的方法:比如可以通过.window()直接获取到当前的窗口对象,也可以通过.windowState()和.globalState()获取到当前自定义的窗口状态和全局状态。注意这里的“窗口状态”是自定义的,不包括窗口本身已经有的状态,针对当前key、当前窗口有效;窗口处理函数就是一种典型的全窗口函数。窗口处理函数ProcessWindowFunction的使用与其他窗口函数类似,也是基于WindowedStream直接调用方法就可以,只不过这时调用的是.process()。原创 2025-06-03 10:36:41 · 816 阅读 · 0 评论 -
Flink并行度
在Flink执行过程中,每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中完全独立地执行。例如:如上图所示,当前数据流中有source、map、window、sink四个算子,其中sink算子的并行度为1,其他算子的并行度都为2。我们一般不会在程序中设置全局并行度,因为如果在程序中对全局并行度进行硬编码,会导致无法动态扩容。在Flink中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。原创 2025-06-03 10:58:33 · 552 阅读 · 0 评论 -
08 | Mysql锁
在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。原创 2025-06-01 13:32:43 · 878 阅读 · 0 评论 -
04 | Mysql逻辑架构
以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数 NOW ,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询的结果就是错误的!需要说明的是,在 MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在文件系统上,以文件的方式存在的,并完成与存储引擎的交互。原创 2025-06-01 13:26:27 · 1032 阅读 · 0 评论 -
03|Linux下MySQL的安装与使用
举例:我在创建一个表时,该表中有一个字段为 name,给 name 设置的字段类型为 char(10) ,如果我在插入数据的时候,其中 name 这个字段对应的有一条数据的长度超过了10 ,例如'1234567890abc',超过了设定的字段长度10,那么不会报错,并且取前10个字符存上,也就是说这个数据被存为了'1234567890',而'abc'就没有了。但是,我们给的这条数据是错误的,因为超过了字段长度,但是并没有报错,并且mysql自行处理并接受了,这就是宽松模式的效果。0/LOW:只检查长度。原创 2025-06-01 13:24:44 · 646 阅读 · 0 评论 -
07 | 索引优化与查询优化
统一使用utf8mb4(5.5.3版本以上支持)兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不同的字符集进行比较前需要进行转换会造成索引失效。索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。学员表插入50万条数据,班级表插入1万条数据。拓展:Alibaba《Java开发手册》创建往class表中插入数据的存储过程。命令开启:允许创建函数设置。保证每条数据都不同。原创 2025-06-01 13:30:27 · 370 阅读 · 0 评论 -
01 | 数据库概述
Oracle1979 年,Oracle 2 诞生,它是第一个商用的 RDBMS(关系型数据库管理系统)。随着 Oracle 软件的名气越来越大,公司也改名叫 Oracle 公司。2007年,总计85亿美金收购BEA Systems。2009年,总计74亿美金收购SUN。此前的2008年,SUN以10亿美金收购MySQL。意味着Oracle 同时拥有了MySQL 的管理权,至此 Oracle 在数据库领域中成为绝对的领导者。2013年,甲骨文超越IBM,成为继Microsoft后全球第二大软件公司。原创 2025-06-01 13:23:08 · 1132 阅读 · 0 评论 -
06 | 索引的创建与设计原则
1 索引的声明与使用1.1 索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上说,索引主要有4种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。按照作用字段进行划分,分成单列索引和联合索引。小结:不同的存储引擎支持的索引类型也不一样InnoDB:支持 B-tree、Full-text 等索引,不支持 Hash 索引MyISAM:支持 B-tree、Full-text 等索引,原创 2025-06-01 13:29:09 · 895 阅读 · 0 评论 -
05 | Mysql存储引擎
1 查看存储引擎查看mysql提供什么存储引擎:2 设置系统默认的存储引擎查看默认的存储引擎:#或修改默认的存储引擎:如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作为表的存储引擎。原创 2025-06-01 13:27:42 · 957 阅读 · 0 评论 -
00 | 开篇
第01章:数据库概述第02章:MySQL环境搭建。原创 2025-06-01 13:21:54 · 697 阅读 · 0 评论 -
02 | Mysql数据库目录
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为 一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。MySQL 系统自带的数据库,这个数据库保存着MySQL服务器维护的所有其他数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。原创 2025-06-01 13:24:06 · 950 阅读 · 0 评论
分享