自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Flink算子

flink算子,包含以下类别:map,filter,flatMap,keyBy,aggregations,reduce,物理分区算子,富函数,分流算子split和side output,合流算子union(联合)和connect(连接)。

2024-11-14 00:10:29 697

原创 Hadoop(YARN)

YARN是Hadoop集群的资源管理和调度系统,它负责为各种分布式计算任务分配和管理资源,包含以下组件:ResourceManager,NodeManager,ApplicationMaster, Container。

2024-11-12 01:08:29 1181

原创 Netty入门二

Netty的核心组件包括以下几种:EventLoop,Channel,Future 与 Promise,Handler与Pipeline,ByteBuf等。

2024-11-10 12:10:04 912

原创 Hadoop(HDFS)

Hadoop是一个开源的分布式系统架构,旨在解决海量数据的存储和计算问题,Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。

2024-11-09 00:12:28 1051

原创 Netty入门一

Netty 是一个高性能、基于事件驱动的网络编程框架,它基于 NIO模型,并提供了更加高级的功能,使得网络编程变得更加容易。

2024-11-06 00:43:00 1018

原创 Flink消费Kafka实时写入Doris

通过FileBeat采集日志信息到Kafka,再通过Flink消费Kafka实时写入Doris。

2024-10-15 02:18:19 2060 1

原创 Leetcode热题100

Leetcode 热题100 题解

2024-10-12 01:12:58 1258

原创 Spring源码二IOC容器源码

ApplicationContext 是 Spring 的核心接口,表示 Spring 的 IOC 容器,以下三个类是ApplicationContext 接口的常用实现类:ClassPathXmlApplicationContext,AnnotationConfigApplicationContext,FileSystemXmlApplicationContext。

2024-10-08 00:50:20 1098

原创 ReentrantLock 实现原理

在Java中,synchronized 和 ReentrantLock 都是用于确保线程同步的锁,都属于`可重入锁。`ReentrantLock 相对于 synchronized 具有以下特点:`等待可中断,可以设置超时时间,可以设置为公平锁,支持多个条件变量。

2024-10-06 19:04:35 1346

原创 (Kafka源码五)Kafka服务端处理消息

Kafka 服务端(Broker)采用 Reactor 的架构思想,通过1 个 Acceptor,N 个 Processor(N默认为3),M 个 KafkaRequestHandler(M默认为8),来处理客户端请求,这种模式结合了多线程和事件驱动的设计,优点是能够有效地利用系统资源,可以实现高效地处理请求,无需为每个连接或请求创建新的线程,减少了线程上下文切换的开销,以实现高并发和高吞吐量。

2024-10-01 15:57:47 1906 1

原创 Flink CDC实时同步MySQL到Doris

Apache Flink CDC(Change Data Capture)是一个用于捕获和跟踪数据库更改的技术,它能够实时地从数据库中获取数据变更,并将这些变更流式传输到其他系统进行处理和分析。Flink CDC 提供了对多种数据库的支持,包括 MySQL、Doris、MongoDB 等,Flink CDC 在大数据中主要用于实时数据同步、实时数据分析、实时监控和告警、日志和审计记录、流式ETL、实时事件处理等方面。

2024-09-28 14:47:19 2021

原创 Dubbo SPI源码

Dubbo 的 SPI(Service Provider Interface)机制是一种强大的扩展机制,它允许开发者在运行时动态地替换或增加框架的功能。Dubbo 的 SPI 机制与 Java 原生的 SPI 机制有所不同,它提供了更多的灵活性和功能。

2024-09-15 20:42:57 1166

原创 Java SPI机制源码

Java的SPI(Service Provider Interface)机制允许第三方为应用程序提供插件式的扩展,而不需要修改应用程序本身的代码,从而实现了解耦。Java标准库本身就提供了SPI机制,通常是通过在META-INF/services目录下放置文件来实现的。SPI机制的核心组件包括:服务接口:这是一个Java接口,定义了服务提供者需要实现的方法,应用程序将使用这个接口与具体的服务实现进行交互。服务实现:这是实现了服务接口的具体类,第三方可以为服务接口提供多个实现。

2024-09-04 22:12:31 847

原创 LRU缓存

LRU缓存,LRU缓存(Least Recently Used,最近最少使用)是一种数据缓存机制,旨在解决计算机内存中数据的替换问题。当缓存空间不足时,LRU缓存会淘汰最近最久未被使用的数据,以确保缓存中始终存储着最新和最频繁使用的数据。

2024-08-24 23:38:15 333

原创 基于Netty的RPC框架

基于Netty的RPC框架,RPC远程过程调用(Remote Procedure Call)是一种通信协议,它允许程序调用位于不同地址空间(通常是网络上的另一台机器)的方法,而无需程序员显式编码这个远程调用的细节。这种技术隐藏了底层的通讯细节,使得调用远程服务就像调用本地函数一样简单。

2024-08-24 23:34:57 1286

原创 python通过Gurobi求解线性规划

Gurobi是一款强大的商业数学规划求解器,用于解决线性规划(LP)、整数规划(IP)、混合整数规划(MIP)、二次规划(QP)、非线性规划(NLP)等各种优化问题。它具有高效的求解算法、丰富的功能和友好的用户界面,被广泛应用于学术界和工业界。Gurobi采用了最先进的优化算法和技术,具有出色的求解速度和效率。它能够处理大规模、复杂的数学规划问题,并在较短的时间内找到最优解或接近最优解。Gurobi中Model.addVar()用到的变量类型 vtype主要有以下三种。

2024-04-28 23:08:16 1781

原创 BIO、NIO与AIO

I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:**BIO、NIO、AIO** 1 每当接收到一个Socket连接就会创建一个新的线程,线程的竞争以及上下文切换会影响性能;2 每个线程都会占用栈空间和CPU资源;3 并不是每个socket都进行IO操作,无意义的线程处理(即使客户端没有消息,服务端的线程也会阻塞等待);

2024-04-27 22:35:00 1383 1

原创 Mysql主从复制实战(1主3从)

MySQL主从复制是一种数据库复制技术,它允许一个MySQL数据库服务器将数据更新操作(增删改)自动复制到一个或多个其他从数据库服务器。这种技术可以提高数据库的可用性、扩展性和性能。

2024-04-04 23:50:56 1132 1

原创 ThreadLocal源码

ThreadLocal用来解决多线程的并发问题,ThreadLocal是线程局部变量,它的作用是为每一个使用变量的线程都提供一个变量值的副本,使得每一个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突,从线程的角度看,就好像每一个线程都完全拥有该变量,从而达到了线程隔离的效果。

2024-03-20 21:53:36 660 1

原创 (Kafka源码四)生产者发送消息到broker

本文主要从源码角度讲解了消息的发送条件,生产者对broker发送回来的响应处理,生产者对于超时/异常/长时间未处理的消息批次是怎么处理的,以及kafka对于粘包拆包问题的解决方法。下章将从源码角度分析服务端的整体架构。

2024-03-17 21:30:47 1377 1

原创 (Kafka源码三)Kafka的缓存机制

本文主要讲解了线程添加消息(append()方法源码)到RecordAccumulator的源码流程,以及在添加的过程中所涉及到内存的申请与释放的源码分析,最后介绍了RecordAccumulator通过CopyOnWriteMap实现的batches,从而实现了读写分离与高并发读的能力。下一章将从源码角度详细介绍Broker是如何处理生产者发送过来的消息。

2024-03-15 21:48:05 1332 1

原创 Spring源码一代理模式

Cglib动态代理会根据被代理类的信息以及设置的回调对象动态的生成代理类,可以看出代理类继承了目标类,当调用代理类的目标方法时,会根据是否设置了回调对象执行不同的操作,若设置了回调,则会调用methodInterceptor接口的实现类中的intercept方法,然后在该方法里面通过invokeSuper()方法调用目标类的pay()方法,若没有设置回调,则直接调用父类,也就是目标类的pay()方法。如果接口增加一个方法,静态代理模式除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。

2024-03-04 23:09:32 876 1

原创 Leetcode第 385 场周赛

这题主要进行模拟即可,先记录8个方向的信息,使用哈希表存储每个质数的出现次数,首先遍历图中的每一个坐标分别从8个方向进行延伸,同时更新最新值num并判断该值是否是质数,若哈希表中已存在该数,说明该数是质数,不需要在再判断是否是质数,最后比较哈希表中出现次数最大并且最大的质数,返回该质数。:这题还是前缀树的应用,先将数组1中的每个元素添加到前缀树中,再遍历字符串2中的每个元素,查找前缀树中每个元素的前缀长度并记录最大长度,最后返回最大长度。:这题和第一题的解法一样,区别在于数据范围变大了。

2024-02-29 20:25:03 267

原创 排序算法总结

冒泡排序优缺点:优点:比较简单,空间复杂度较低,是稳定的;缺点:时间复杂度太高,效率慢;选择排序优缺点:优点:一轮比较只需要换一次位置;缺点:效率慢,不稳定(举个例子6,8,6,2, 9 第一遍选择元素2和第一个6交换,那么原序列中2个6的相对位置前后顺序就破坏了)。

2024-02-28 22:43:37 422

原创 二叉树的遍历(递归与非递归)

中,需要达到"左右根"的顺序,所以使用两个栈,栈2只存储访问的节点,根据先序遍历的思想修改顺序"根右左",先访问当前节点,然后依次压入左儿子和右儿子,最后输出栈2;中,若当前节点不为空,就压栈,当前节点指向左儿子,若为空且栈不为空,就弹栈,当前节点指向右儿子.中,根据"根左右"的访问顺序不同,先访问当前数据,然后依次压入右儿子和左子;非递归遍历二叉树是使用栈压栈和弹栈时机不同的思想,在。

2024-02-27 23:05:14 140

原创 Leetcode第 124 场双周赛

搜索的终止条件是数组元素个数小于2个,搜索的情况也是分为三种,与上面三种情况一样。:首先进行排序,然后使用哈希表存储遍历数组元素的值,当将f[i]加1时,f[i+1]的状态为f[i]+1,当f[i]的值不变时,f[i]的状态为f[i-1]+1,最后取value的最大值即为最多可以选出的元素数目。:可以知道最后一次操作之前的字符肯定是出现次数最多的字母,所以可以使用哈希表存储每个字母的出现次数,找出出现次数最大的值记为mx,然后从后往前遍历找出出现次数为mx的字母添加到结果集合中,最后返回翻转的结果集合。

2024-02-27 22:33:28 383

原创 区间查询算法

二维前缀和的思想和与一维前缀和类似,二维前缀和指的是矩阵从左上角到当前位置的总和,通过二维前缀和可以在O(1)的时间复杂度查询任意一个子矩阵的总和。:二维差分数组与一维差分类似,可以实现O(1)时间复杂度对任意的子矩阵中所有元素进行相同的修改。应用场景:一维差分数组适用于多次区间修改,区间查询次数不多的场景。应用场景:线段树适用于多次区间修改与区间查询的场景。应用场景:树状数组适用于单点修改,区间查询的场景。应用场景:主席树适用于查询区间第k小的场景。应用场景:暴力法适用于数据量比较小的场景。

2024-02-02 03:20:06 147

原创 (Kafka源码二)Kafka的元数据

本文详细介绍了producer是如何通过sender线程从broker集群中拉取到元数据,在拉取的过程中是如何建立网络连接的,以及如何发送消息请求给broker和处理broker发送回来的响应。主要流程就是通过第一次调用poll()方法的步骤一先是往selector上注册OP_CONNECT。

2024-02-02 03:16:40 901

原创 (Kafka源码一)生产者初始化及分区策略

本文主要讲解了生产者初始化时的一些配置属性,以及消息的3种分配策略,分别是自定义分区,随机指定分区,通过key的hash指定分区三种,还介绍了RecordAccumulator是如何存储消息的,最后分析了sender线程的初始化以及代码的运行流程。下一篇将详细介绍sender线程是如何建立网络连接,发送消息以及处理响应。

2024-01-30 01:38:19 835 1

原创 Leetcode第376场周赛

采用前缀和+滑动窗口的思想,首先进行前缀和预处理,然后枚举右端点,统计左端点到右端点的频率分数,若代价大于k则缩小窗口,左端点向右移动,当条件满足时,更新最大值。:直接排序,每组有3个元素,判断每组最后一个元素与第一个元素之差是否大于k,若大于就返回空数组,否则就加入答案数组中。:首先生成1-1e9范围内的回文数,然后二分查找最靠近中位数的回文数,然后统计最小代价即可。:哈希模拟,统计所有数字出现的次数,找出出现次数分别为2和0的数字。

2023-12-17 23:35:01 50 1

原创 RabbitMQ

work模型把多个消费者绑定到同一个队列中,同一条消息只能被一个消费者消费.通过设置prefetch=1来充分利用每一个消费者的消费能力.

2023-12-06 23:31:09 178

原创 分布式事务

在传统的单机事务中,必须要满足以下四个原则:原子性,一致性,隔离性,持久性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都执行,要么都不执行。(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态.(Isolation):一个事务的执行不能被其他事务干扰.即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰.

2023-12-03 18:16:12 78

原创 Docker(基础篇)

Docker基础学习

2023-10-15 21:40:00 110

空空如也

空空如也

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

TA关注的人

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