自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 KMP算法

采用递推法,假设parttern[i] == parttern[j], 那么next[i + 1] = j + 1;的位置继续搜索,而kmp算法并不需要,主串中指针不需要回溯,只要不断的后移就好了。其次在下标为1处失配了,处理方法也只有一种,从模式串下标为0处开始比较;在下标为3处失配了,也可以观察出应该从下标为0处开始比较;下标为2处失配了,也可以观察出应该从下标为0处开始比较;在下标为4处失配了,可以从下标为1处比较,因为在字符串。而在下标5处失配了,可以从下标为2处比较,因为在字符串。

2023-08-11 10:13:36 70

原创 表达式二叉树

文章目录1. 表达数二叉树构建2. 表达式二叉树求值3. 代码实现表达式二叉树是指:用二叉树表示表达式的运算规则,节点元素有两种含义;操作数(包含变量)和运算法。操作数节点都是叶子节点,运算符节点都是二度节点,其中子节点是参加该运算的子表达式。其中表达式分为前缀(二叉树前序遍历)、中缀(二叉树中序遍历)、后缀(二叉树后序遍历)。日常中算数表达式习惯的书写习惯为中缀表达式。中序遍历统计运算中先运算的一定为左子树一般来说通过一种遍历无法确定唯一的一颗二叉树,但是算数表达式比较特殊,表达式二叉树可以根据表

2022-01-01 16:58:58 3396

原创 Consumer启动及消息消费

Consumer启动及消息消费1.DefaultMQPullConsumer启动1.获取namesrv地址2.启动网络服务3.启动定时任务1.广播模式LocalFileOffsetStore#persistAll2.集群模式4.启动消息拉取服务消息消费5.启动负载均衡服务1.消息队列分配策略2.更新processQueue1.DefaultMQPullConsumer启动实例化DefaultMQPullConsumer:public DefaultMQPullConsumer(final String

2021-12-25 19:18:26 701

原创 RocketMQ学习随笔-Producer消息发送

文章目录消息发送1.消息类型2.消息发送1.验证消息2.查找路由3.选择队列**故障延迟机制**4.发送消息消息发送1.消息类型public enum CommunicationMode { //同步传输(调用send方法后等待结果) SYNC, //异步传输(调用send方法后不等待结果,发送完毕后执行回调函数) ASYNC, //单向传输(用于日志记录等,只发送) ONEWAY; private CommunicationMode()

2021-08-22 18:25:47 254

原创 RocketMQ学习随笔-Producer启动

Producer启动默认实现类DefaultMQProducer:ClientConfig类中主要用于保存一些客户端的配置信息.public class DefaultMQProducer extends ClientConfig implements MQProducer { /** * 默认实现类 */ protected final transient DefaultMQProducerImpl defaultMQProducerImpl; priva

2021-08-20 08:01:28 233

原创 RocketMQ学习随笔-Broker启动

文章目录Broker启动入口创建`BrokerController`对象配置文件的解析及加载创建`BrokerController`对象并初始化注册`JVM`钩子函数并调用`BrokerController.shutdown()`函数实现优雅关闭调用`start`方法从CommitLog读取消息发送至ConsumeQueue刷盘机制提交刷盘请求同步刷盘异步刷盘刷盘操作主从复制HA(1)同步复制(2)异步复制(3)配置Master读请求处理写请求处理Slave写请求处理读请求处理主从同步复制Broker启动

2021-06-26 22:54:38 504

原创 RocketMQ学习随笔(2)-Namesrv启动及路由

文章目录Namesrv启动1.启动入口2.配置文件的解析以及加载3.NamesrvContorller对象的生成4.调用start()方法,启动namesrvNamesrv路由Namesrv路由元数据路由-心跳检测(路由注册/删除机制)路由发现Namesrv启动1.启动入口public static void main(String[] args) { main0(args); }public static NamesrvController main0(String[]

2021-02-21 19:59:17 353

原创 RocketMQ学习随笔(1)-核心概念学习及简单使用

RocketMQ 学习随笔(1)阿里文档核心概念Topic:消息主题,一级消息类型,生产者向其发送消息。生产者:也称为消息发布者,负责生产并发送消息至Topic。消费者:也称为消息订阅者,负责从Topic接收并消费消息。消息:生产者向Topic发送并最终传送给消费者的数据和(可选)属性的组合。消息属性:生产者可以为消息定义的属性,包含Message Key和Tag。Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。消息类型消息队列

2021-02-21 19:54:31 95

原创 Spring IOC源码阅读笔记(二) Bean的加载

容器基本用法测试类public class MyTestBean { private String testStr = "testStr"; public String getTestStr() { return testStr; } public void setTestStr(String testStr) { thi...

2020-04-07 19:07:28 135

原创 Spring IOC源码学习笔记(一)默认标签的解析及BeanDifinition的注册

容器基本用法测试类public class MyTestBean { private String testStr = "testStr"; public String getTestStr() { return testStr; } public void setTestStr(String testStr) { thi...

2020-04-02 15:53:27 288

原创 Netty源码阅读笔记 (一) NioEventLoopGroup的创建

直接调用NioEventLoopGroup类中的无参构造: public NioEventLoopGroup() { this(0); }调用单参构造并传入0: public NioEventLoopGroup(int nThreads) { this(nThreads, (Executor) null); }调用双参构造: publi...

2019-12-15 12:26:05 143

原创 二叉树的前中后序遍历以及互求

/* * @description: 二叉树的前中后序遍历以及已知中前、中后求后、前 * @author: 逍遥 * */public class Main {// 前序遍历 递归实现 public void preOrderTraverse1(MyTreeNode root) { if (root != null) { printf...

2019-09-01 16:48:03 104

原创 NIO源码阅读笔记 select方法(三)

select方法的实现在SelectorImpl类中,有两种实现方式,无参的和单参的,无参方法直接调用单参方法,默认传入0: public int select(long var1) throws IOException { if (var1 < 0L) { throw new IllegalArgumentException("Negative t...

2019-08-18 08:55:08 413

原创 NIO源码阅读笔记(二) Channel

1. 关于ChannelChannel是一个对象,可以通过它读取和写入数据。可以把它看做IO中的流。但是它和流相比还有一些不同:(1) Channel是双向的,既可以读又可以写,而流是单向的(2) Channel可以进行异步的读写(3) 对Channel的读写必须通过buffer对象正如上面提到的,所有数据都通过Buffer对象处理,所以,您永远不会将字节直接写入到Channel中,相反...

2019-08-18 08:54:50 238

原创 NIO源码阅读笔记(一) Selector启动分析

Selector通过调用Selector.open()方法启动的: public static Selector open() throws IOException { return SelectorProvider.provider().openSelector(); }SelectorProvider.provider()方法如下,返回值为SelectorProv...

2019-08-18 08:54:34 111

原创 ConcurrentHashMap源码阅读笔记

上一篇文章中对HashMap的源码进行了简单的学习,但是HashMap在多线程的环境下会存在线程安全问题。所以呢这篇文章主要对ConcurrentHashMap的源码进行学习,了解一下ConcurrentHashMap是如何保证线程安全的。HashMap源码阅读笔记:https://blog.csdn.net/xxy_hl/article/details/91947452ConcurrentH...

2019-08-02 22:46:43 170

原创 HashMap源码阅读笔记

HashMap是Java编程中常用的集合框架之一。利用idea得到的类的继承关系图可以发现,HashMap继承了抽象类AbstractMap,并实现了Map接口(对于Serializable和Cloneable两个接口不去关心)。HashMap的结构图如下...

2019-06-17 02:46:12 105

原创 AOP 学习笔记

AOP: 面向切面编程百度百科上官方的解释是:在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。主要功能日志记录,性能统计,安全控制,事务处理,异常处理...

2019-01-17 18:44:01 261

原创 IOC/DI 学习笔记

**IOC/DI(控制反转/依赖注入)学习笔记**常规编程对象由程序员自己通过构造方法得到的。ioc控制反转提供了一种新的思想,在程序开始执行时,由代码生成对象并进行集中管理。对象的生成通过反射机制调用构造方法生成对象。对象之间的依赖关系可以通过注入的方法进行处理。通过学习spring,得到以下方法:可以通过构造方法进行初始化;也可以先反射调用无参构造,通过遍历setter方法对其成员...

2019-01-17 17:07:26 135

原创 浅谈六种基本排序方法 ——插入排序,选择排序,交换排序,希尔排序,堆排序及快排

以下排序均为升序,且所有操作均在数组中进行直接插入排序插入排序的基本思想是:每步将一个待排序的记录,按值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。例如:此图来源于百度百科void insertSort(int *arr, int count) { //int *arr:传入一个整形数组; int count : 数字总个数。 int first; //待排序...

2018-09-23 02:34:30 4550 2

空空如也

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

TA关注的人

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