自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JH_Zhai的博客

破帽遮颜过闹市,漏船载酒泛中流。

  • 博客(169)
  • 收藏
  • 关注

原创 数据库三大范式和反范式权衡

8.25 【抖音精选】点击链接or复制打开app,看看【谭谭谈编程的作品】3分钟掌握数据库三大范式和反范式该怎么权衡?3直接依赖主键 无依赖传递。1不可拆分的最小单元。2主键唯一 依赖主键。

2026-01-13 08:30:36 269

原创 Agent Skill从使用到原理,一次讲清

【Agent Skill 从使用到原理,一次讲清】https://www.bilibili.com/video/BV1cGigBQE6n?

2026-01-13 01:10:59 618

原创 Spring Bean的生命周期

Bean的生命周期包括了定义、实例化、初始化和销毁四个关键阶段,Spring框架在每个阶段都提供了钩子方法,允许开发者在特定的时机执行自定义的逻辑,从而实现对Bean生命周期的定制化管理。Bean的定义阶段: 在这个阶段,Spring会解析Bean的定义,包括从配置文件中读取Bean的元数据,例如类名、属性值、依赖关系等。这个阶段的主要目标是将Bean的定义加载到Spring的应用上下文中。Bean的实例化阶段: 一旦Bean的定义加载到容器中,Spring会根据这些定义创建Bean的实例。

2026-01-11 16:51:01 383

原创 Spring 循环依赖

循环依赖一级缓存(singletonObjects):存放完全初始化好的Bean,可直接使用。二级缓存(earlySingletonObjects):存放提前暴露的Bean(已实例化但未完成属性填充和初始化)。三级缓存(singletonFactories):存放Bean工厂对象(ObjectFactory),用于生成未完成初始化的Bean。如果使用的是:构造器注入(Constructor injection) → Spring 无法解决,抛出异常;

2026-01-10 23:20:08 342

原创 Agent中的深度思考是什么,有什么区别: ReAct模式 和 Plan-and-Solve模式

引言:平时我们看到的就是ReAct模式是ReAct 像是一位勇敢的探险家,边走边看;Plan-and-Solve 则像是一位严谨的工程师,先画图纸再施工。两者各有千秋,适用于不同的战场。

2026-01-10 14:41:13 252

原创 【面试】Spark入门(一篇就够了)(三)

在 MapReduce 框架中,Shuffle 阶段是连接 Map 与 Reduce 之间的桥梁, Map 阶段通过 Shuffle 过程将数据输出到 Reduce 阶段中。由于 Shuffle 涉及磁盘的读写和网络 I/O,因此 Shuffle 性能的高低直接影响整个程序的性能。当某个 Output Operations 被调用时,spark streaming 程序才会开始真正的计算过程(与 RDD 的 Action 类似)• 另一种是基于 Sort 的 Shuffle。

2025-09-13 09:39:00 297

原创 智能数据建设与治理 Dataphin-数仓分层

建立一致数据分析维表,可以降低数据计算口径和算法不统一风险。以维度作为建模驱动,基于每个维度的业务含义,通过定义维度及维度主键,添加维度属性、关联维度等定义计算逻辑和雪花模型,完成属性定义的过程并建立一致的数据分析维表。同时您可以定义维度主子关系,子维度的属性将合并至主维度使用,进一步保证维度的一致性和便捷使用性。尽可能生成丰富的维度属性。例如,电商公司的商品维度可能有近百个维度属性,为下游的数据统计、分析、探查提供了良好的基础。尽可能多的给出包含一些富有意义的文字性描述。

2025-08-31 09:52:44 817

原创 【笔记】智能数据建设与治理 Dataphin-指标定义

统计指标包括派生指标、原子指标、业务限定、业务过程和统计粒度(即维度)。在设计模型前,建议先完成该部分工作,以便设计出易于使用的数据仓库。原子指标是明确统计口径和计算逻辑,事实模型或维度模型定义完成,即可创建原子指标。派生指标即常见的统计指标。派生指标=统计周期+业务限定+原子指标+统计粒度。创建派生指标,注意事项如下:已完成原子指标的创建,且需要确认原子指标的来源模型中有维度模型,以保证可以设置派生指标的统计粒度。原子指标和业务限定来源于同一张维度表或事实表,且继承来源表的主题域。

2025-08-31 09:19:05 307

原创 分布式事务解决方案之TCC(Hmily)「建议收藏」

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。

2025-08-10 11:05:03 592

原创 JVM垃圾收集器Serial、Parallel Scavenge、ParNew、CMS、G1、ZGC详解

而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。

2025-07-03 23:32:43 332

原创 简单聊聊JVM中的几种垃圾收集算法

与此同时,正因为并发清除阶段用户线程也可以同时运行,所以在用户线程运行的过程中自然也会产生新的垃圾对象,这也就是导致 CMS 收集器会产生“浮动垃圾”的原因,此时也会产生很多的空间碎片,当空间碎片到达了一定程度时,此时 CMS 就会使用“标记-整理”算法来解决空间碎片的问题。并发清除阶段的工作主要是对那些被标记为可回收的对象进行清理,在一般情况下,并发清除阶段是使用的是“标记-清除”算法,因为这个过程不会牵扯到对象的地址变更,所以 CMS 在并发清除阶段是不需要停止用户线程的,对象回收效率非常高。

2025-06-17 14:46:00 218

原创 ?SpringBoot

Spring Boot Starter 主要通过起步依赖和自动配置机制来简化项目的构建和配置过程。

2025-03-22 23:21:22 162

原创 【算法】快排详解

英国计算机科学家Tony Hoare在1960年为了解决计算机上的排序问题,提出了快速排序的算法,最初是为了在英国的英尔兰电子公司(ELLIOTT Brothers)的快速硬件上实现高效的排序算法。上述为快速排序递归实现的主框架,发现与二叉树前序遍历规则非常像,在写递归框架时想想二叉树前序遍历规则即可快速写出来,后序只需分析如何按照基准值来对区间中数据进行划分的方式即可。快排利用的分治的编程思想 ,快速排序的主要思想是分治法,将一个大问题分割成小问题,解决小问题后再合并它们的结果。

2024-12-09 00:12:57 488

原创 Hbase入门

这个逻辑结构只是方便我们理解数据,但是在存储上并不是这样的结构。逻辑结构上的每一列的值,都要使用一行去存储。

2024-11-12 10:22:40 621

原创 RocksDB入门

SSTable(Sorted String Table)是一个通常放在磁盘上的,排序的字符串表, 用来高效存储大量的键值对数据, 同时搭配上优化实现IO操作的高吞吐量.block是SSTable里面存储信息的一个单元,主要由数据区record和restarts组成,

2024-11-11 21:54:40 812

原创 NoETL

相对于ETL先生产后消费的模式。NoETL是一种直接消费,是否预计算、如何预计算由一个系统决定。

2024-11-10 17:41:49 580

原创 Headless BI

Headless BI 是由 Ankur Goyal 和 Alana Anderson 两位硅谷投资人在这篇博客中提出了 的概念指标只需定义一次,就可以统一地在仪表盘,以及自动化工具中使用”为什么叫Headless个人用大白话诠释下对 Headless BI 的理解:Headless BI 要实现的是砍掉 BI 的“头”(报表可视化),只保留指标层,通过提供各类消费接口,满足企业内丰富的消费场景;

2024-11-10 17:05:26 875

原创 DDD中的一些基础概念 & 观点摘录

软件系统的复杂性主要体现在三个方面。

2024-11-05 23:00:35 1013

原创 什么是空间放大、读取放大、写入放大

导致空间放大的因素主要是已删除或更新的键仍占用磁盘空间。写入放大(Write amplification) 是指写入存储的字节数与写入数据库的字节数之间的比率,量化了存储系统为适应用户写操作而产生的额外I/O操作。在一次读取操作中,RocksDB需要搜索多个SST文件来查找特定的键值,访问SST文件数量会导致读取放大,读取放大的增加会影响系统的读取性能。压缩是合并多个SSTable并优化其存储的过程,包括将多个SSTable的数据合并和重写到数量较少的新SSTable中,消除冗余数据,提高读写性能。

2024-11-05 14:06:29 856

原创 什么是数据编织

What Is Data Fabric?Data fabric is a unified data architecture that connects disparate data sources, simplifying access and management while ensuring consistency and security across the entire data landscape.The data fabric architecture style has three cor

2024-10-08 20:01:33 1026

原创 Java中类的初始化和实例化区别

是完成程序执行前的准备工作。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。初始化只在类加载的时候执行一次。

2024-08-26 14:10:19 584

原创 Spring 解决bean的循环依赖

重新考虑系统的架构,采用合适的设计模式、解耦方式和依赖注入机制,可以帮助解决或避免循环依赖带来的问题。其实,Spring容器中单例(singleton)的场景是支持循环依赖的,Spring使用了三级缓存和提前曝光(early exposure)的机制来处理循环依赖问题。死锁和无限递归:当循环依赖中的对象在创建过程中相互等待对方完成创建时,可能会导致死锁或无限递归的情况发生。在一个循环依赖链中,修改一个类可能会影响到其他所有相关的类,增加了代码的脆弱性。这可能导致错误的结果或意外的行为。

2024-08-17 00:11:56 660

原创 使用Spring来管理bean的优点

使用Spring来管理Bean可以提供依赖注入、松耦合、生命周期管理和AOP支持等优势,减少了开发人员的工作量,提高了代码的可维护性和可测试性。相比之下,自己手动管理Bean存在代码冗余、耦合性高、难以管理复杂依赖关系以及缺乏一致性和灵活性等缺点。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/qq_46130027/article/details/131602559。

2024-08-16 23:14:48 421

原创 什么是Bean

在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 bean。bean 是由Spring IoC。Bean 是 Spring 框架中最核心的两个概念之一(另一个是面向切面编程 AOP)容器实例化、组装和管理的对象。

2024-08-16 23:12:08 603

原创 过滤器和拦截器

拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。①拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2024-08-14 21:54:20 441

原创 【转载】系统负载

负载是服务器运行是否正常的一个风向标,当服务器软件异常时,大部分都会排查线上服务器的负载状况。那么到底什么是负载呢?在Linux内核调度中,负载的评估指标不是CPU使用率,而是进程处于runnable的平均时间。Linux内核调度包含调度实体负载、CPU负载和系统负载等3个级别的负载计算方式的。其中CPU负载是用来体现当前CPU的工作任务loading情况,和CPU繁忙程度的,其主要通过统计CPU rq上task处于runnable的平均时间。而我们在服务治理中经常提到的负载实际指的是系统负载。

2024-05-25 18:37:38 732

原创 RuntimeException 和 Exception区别 (比如事务管理中)

在 Spring 框架中,RuntimeException 和 Exception 的区别主要体现在异常处理和事务管理的方面。

2024-05-22 12:14:04 975

原创 logback 配置

【代码】logback 配置。

2024-05-18 21:14:38 397

原创 【产品调研】现代数据栈产品

百科 https://baike.baidu.com/item/DENODO%20SL/63615915?官网 https://www.denodo.com.cn/

2024-04-06 23:42:25 532

原创 【阅读笔记】京东数坊

http://5th.tma999.com/uploads/soft/180923/1-1P923153J3.pdf

2024-04-06 22:32:27 532

原创 【阅读笔记】指标平台加速零售数字化转型--Kyligence Zen 智能一站式指标平台

https://mp.weixin.qq.com/s/doA0q-2hmqhDBpFEQtHWNQ

2024-04-06 22:28:18 168

原创 【名词概念】Headless BI

在理解Headless BI之前,我们需要先理解一下什么叫做Headless?Headless的概念最初的来源与内容管理平台有关,一般是指内容管理平台中的一些应用不提供可视化界面,只是通过API方式把内容以数据的方式给前端。从这里,可以理解Headless实际上是把GUI部分跟数据部分进行了分离,这实际上比较符合现在技术的一种发展趋势,尤其是数据要去在不同的环境中去显示的时候。实际上就是把BI的数据指标层和展示层做了分离,把BI提供数据的部分以数据服务的方式提供服务,与可视化部分进行分离。

2024-04-06 22:06:56 694

原创 Apache Hudi Compaction

https://medium.com/@simpsons/apache-hudi-compaction-6e6383790234While serving the read query(snapshot read), for each file group, records in base file and all its constituent log files are merged together and served. And hence the read latency for MOR snap

2024-04-03 15:30:31 294

原创 第三代指标平台

传统的第一代指标平台注重指标口径登记与管理、而第二代依赖 ETL 开发。Aloudata CAN 作为第三代指标平台,采用了基于明细语义数据模型定义指标的方式,提供了“语义化”和“自动化”两大核心能力,从根本上解决了传统指标平台的局限性。

2024-02-29 10:05:23 472

原创 【Hudi】核心概念

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品)

2024-02-27 22:09:18 539

原创 【Hudi】调优指南

1 并行度2 Off-heap (堆外)内存3 Spark内存4 调整文件大小5 时间序列/日志数据6 GC调优7 OutOfMemory

2024-02-27 19:42:38 428

原创 【Hudi】并发控制

Hudi的表操作,如压缩、清理、提交,hudi会利用多版本并发控制来提供多个表操作写入和查询之间的快照隔离。使用MVCC这种模型,Hudi支持并发任意数量的操作作业,并保证不会发生任何冲突。Hudi默认这种模型。

2024-02-27 19:36:39 1059

原创 【Hudi】MOR建表会额外生成rt和ro后缀两张表

当hudi表按照MOR格式新建以后,会默认生成3个表,如新建 hudi_os_dev表,则会生成。(1)MOR,写入快,适用于源端数据快速接入ODS层,也就是常说的贴源层的场景;(2)COW,读取快,适用于从贴源层取数据,经过处理后在存储至标准层的场景;(1)Merge-On-Read(MOR-读时合并);(2)Copy-On-Write(COW-写时复制);最后,对MOR方式存储时产生的三种格式进行简要总结。首先,Hudi表可以支持多种数据类型,如。

2024-02-27 10:17:31 1697

原创 【Hudi】索引

假设在数据分布最糟糕的情况下,需要被更新的 100 条数据分布在 100 个文件中。在有了索引之后,更新的数据可以快速被定位到对应的 File Group,以下面的官方的示意图为例,在传统 Hive 数仓的场景下,如果需要对一个分区数据做更新,整个更新过程会涉及三个很重的操作。假设一个 Hive 分区存在 100,000 条记录,分布在 400 个文件中,我们需要更新其中的 100 条数据。索引,其依赖布隆过滤器来判断记录存在与否,当记录存在时,会读取实际文件进行二次判断,以便修正布隆过滤器带来的误差。

2024-02-22 21:02:50 579

原创 【Hudi】Upsert原理

3.数据去重:一批增量数据中可能会有重复的数据,Hudi会根据主键对数据进行去重避免重复数据写入Hudi 表。4.数据fileId位置信息获取:在修改记录中可以根据索引获取当前记录所属文件的fileid,在数据合并时需要知道数据update操作向那个fileId文件写入新的快照文件。8.hive元数据同步:hive 的元素数据同步这个步骤需要配置非必需操作,主要是对于hive 和presto 等查询引擎,需要依赖hive 元数据才能进行查询,所以hive元数据同步就是构造外表提供查询。

2024-02-20 19:23:27 711

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除