自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量,参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,这就是递归为什么可以返回上一层位置的原因可以用栈实现二叉树的前中后序遍历。

2024-07-12 01:14:00 394

原创 【算法】二叉树- 递归方法论

的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。的,那么就在递归函数里加上这个参数, 并且还要明确。: 写完了递归算法, 运行的时候,经常会遇到。进而确定递归函数的返回类型。

2024-07-10 23:42:44 161

原创 【算法】二叉树-基础知识与应用

int val;

2024-07-10 23:23:12 236

原创 【算法】数组-基础知识与应用

数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标对应的数据。因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。

2024-06-24 23:37:02 323

原创 【算法】单调队列 - 基础与应用-滑动窗口最大值

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。需要一个队列,在这个队列中放进窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动后,队列告诉我们里面的最大值是什么。保存队列中的元素单调递增或者单调递减,需要自己去实现这个单调队列。始终维护了一个单调的队列,从而每次很容易得取出当前窗口中得最大值。暴力:遍历一遍的过程中每次从窗口找到最大的数组,O(n * k)使用Deque自定义一个单调队列插入,弹出,获取一个元素。单调队列,即单调递减或单调递增的队列。

2024-06-23 23:58:59 287

原创 【算法】优先级队列-基础与应用

/ 创建一个优先级队列,使用自定义比较器 PriorityQueue < String > priorityQueue = new PriorityQueue < >(new Comparator < String >() {// 反向排序 } });// 插入元素 priorityQueue . add("Z");// 查看并移除优先级最高的元素 while(!} } }

2024-06-23 22:56:43 413

原创 【算法】二叉树 - 理论基础

int val;

2024-06-23 22:33:26 1297

原创 消息队列-分布式消息队列技术选型

● ActiveMQ 的社区算是比较成熟,但是较目前来说,ActiveMQ 的性能比较差,而且版本迭代很慢,不推荐使用,已经被淘汰了。● RabbitMQ 在吞吐量方面虽然稍逊于 Kafka、RocketMQ 和 Pulsar,但是由于它基于 Erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。但是也因为 RabbitMQ 基于 Erlang 开发,所以国内很少有公司有实力做 Erlang 源码级别的研究和定制。

2024-06-16 18:21:21 1048

原创 消息队列-保证消息的可靠性

消息消费成功,事务已经提交,ack时,机器宕机。导致没有ack成功,Broker 的消息重新由 unack 变为 ready,并发送给其他消费者。做好容错方法 (try-catch),发送消息可能会网络失败,失败后要有重试机制,可记录到数据库,采用定期扫描重发的方式。此时Broker尚未持久化完成,宕机。成功消费,ack时宕机,消息由unack变为ready,Broker又重新发送。做好定期重发,如果消息没有发送成功,定期去数据库扫描未成功的消息进行重发。消息消费失败,由于重试机制,自动又将消息发送出去。

2024-06-16 18:16:57 308

原创 消息队列-RabbitMQ-延时队列实现

DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。● 消息被拒(Basic.Reject/Basic.Nack)且requeue = false。● 消息TTL(消息的存活时间)过期。● 队列满了,无法再添加。

2024-06-16 18:06:57 478

原创 消息队列-RabbitMQ-消息确认机制

为了保证消息的不丢失,可靠抵达,可以使用事务消息,但是性能会下降250倍,为此引入确认机制。

2024-06-16 17:48:12 459

原创 消息队列-RabbitMQ-交换机类型

RabbitMQ 常用的 Exchange Type 有 fanout、direct、topic、headers 这四种(AMQP 规范里还提到两种 Exchange Type,分别为 system 与 自定义,这里不予以描述)。

2024-06-16 17:44:17 634

原创 消息队列-Rabbit运行机制

RabbitMQ 中通过 Binding(绑定) 将 Exchange(交换器) 与 Queue(消息队列) 关联起来,在绑定的时候一般会指定一个 BindingKey(绑定建) ,这样 RabbitMQ 就知道如何正确将消息路由到队列了,如下图所示。Exchange(交换器) 用来接收生产者发送的消息并将这些消息路由给服务器中的队列中,如果路由不到,或许会返回给 Producer(生产者) ,或许会被直接丢弃掉。RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。

2024-06-16 17:36:56 1211

原创 消息队列-RabbitMQ概述

RabbitMQ 是一个在 AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。它支持多种客户端如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2024-06-16 17:29:11 654

原创 消息队列-应用

除了这三点之外,消息队列还有其他的一些应用场景,例如实现分布式事务、顺序保证和数据流处理。如果在面试的时候你被面试官问到这个问题的话,一般情况是你在你的简历上涉及到消息队列这方面的内容,这个时候推荐你结合你自己的项目来回答。

2024-06-16 17:21:35 425

原创 消息队列-概述-JMS和AMQP

一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。比如:我们生产者发送 100 条消息的话,两个消费者来消费一般情况下两个消费者会按照消息发送的顺序各自消费一半(也就是你一个我一个的消费。,是应用层协议的一个开放标准,为面向消息的中间件设计,兼容 JMS。JMS(JAVA Message Service,java 消息服务)是 Java 的消息服务,JMS 的客户端之间可以通过 JMS 服务进行异步的消息传输。发布者发布一条消息,该消息通过主题传递给所有的订阅者。

2024-06-16 17:08:47 290

原创 消息队列-概述-什么是消息队列

我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。参与消息传递的双方称为 生产者 和 消费者 ,生产者负责发送消息,消费者负责处理消息。我们知道操作系统中的进程通信的一种很重要的方式就是消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部各个组件/模块之前的通信,属于一种 中间件。

2024-06-16 17:07:44 379

原创 2024年5月系统架构设计师案例分析

系统架构评估微服务架构特点,优势和缺点:7分。质量属性及场景填空:6个空,6分。质量属性场景描述六要素:12分【刺激源,刺激,制品,环境,响应,响应度量】Redis:基于MySQL锁的缺点:9分【性能瓶颈,复杂性,可靠性问题,扩展性差,一致性问题】分布式Redis锁的死锁的情况,其他分布式锁:10分redis zset命令:6分【ZADD,ZCARD,ZSCORE,ZRANGE】UML序列图的哪三种消息和概念【同步,异步,返回】序列图补全填空系统分析设计过程中两种交互图的选取

2024-05-26 23:58:32 896 2

原创 2024年5月系统架构设计师综合知识真题

系统架构评估微服务架构特点,优势和缺点:7分。质量属性及场景填空:6个空,6分。质量属性场景描述六要素:12分【刺激源,刺激,制品,环境,响应,响应度量】Redis:基于MySQL锁的缺点:9分【性能瓶颈,复杂性,可靠性问题,扩展性差,一致性问题】分布式Redis锁的死锁的情况,其他分布式锁:10分redis zset命令:6分【ZADD,ZCARD,ZSCORE,ZRANGE】UML序列图的哪三种消息和概念【同步,异步,返回】序列图补全填空系统分析设计过程中两种交互图的选取

2024-05-26 23:49:27 1726 3

原创 2024年5月系统架构设计师论文真题

3、结给你参与管理和研发的软件项目,简述在测试过程中,如何确定白盒测试的覆盖标准,以及如何组织实施回归测试。2、结给你参与管理和开发的软件项目,简要叙述单元测试中静态测试和动态测试方法的基本内容。3、详细阐述你参发的软件项目是基于模型驱动架构进行分析、设计和开发的。1、简要说明你参与分析和研发的软件项目,以及你所承担的要工作。1、简要说明你参与开发的软件项目,以及你所承担的主要工作。1、概要叙述你参与管理和开发的软件项目,你所担的主要工作。1、简要说明你参开发的软件项目,吸你所承担的主要作用。

2024-05-26 23:19:47 842

原创 策略模式实战

策略模式的结构很简单,而spring的bean注入特性让我们在spring 框架中使用策略模式很方便,在spring中,对于同一类bean不同的别名是可以注入到一个map中或者list中的,下面的代码演示了如何在spring中方便的使用策略模式。:定义了一个公共的接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或者抽象类实现。● 策略模式把算法的使用放到环境类中,而算法的实现移到具体的策略类中,使。:实现抽象策略定义的接口,提供具体的算法实现。

2024-05-10 23:20:02 359

原创 leetcode.面试题 02.07. 链表相交

假a在链表A上移动,b在链表B上移动,a移动完在B上开始,b移动完再A上开始。最终a移动的距离a + c + x,b移动的距离 b + c + y。可以看到a + c + x = b + c + y,即a + x = b + y ,a移动b距离,b移动a距离a,b指针就会相交,直接返回a,b相交时候a/b指针所指节点的位置。即使a,b没有相交的地方,返回的也是null。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。

2024-04-05 23:26:48 492

原创 leetcode.19. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?

2024-04-05 23:18:01 313

原创 leetcode.24. 两两交换链表中的节点

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。创建虚拟头节点,画图,确认步骤。

2024-04-05 23:12:38 222

原创 leetcode.206.反转链表

示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。题意:反转一个单链表。

2024-04-05 23:06:05 455

原创 leetcode.707. 设计链表

addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。get(index):获取链表中第 index 个节点的值。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。

2024-04-05 22:58:48 366

原创 leetcode.203. 移除链表元素

虚拟头节点dummy。创建一个虚拟的头节点指向原来的头节点,使得删除头节点的操作和删除其他节点的操作统一。要删除某个节点,需要将遍历指针指向要删除节点的前一个节点才可以。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]示例 2: 输入:head = [], val = 1 输出:[]题意:删除链表中等于给定值 val 的所有节点。

2024-04-05 22:51:53 335

原创 leetcode.209.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:s = 7, nums = [2,3,1,2,4,3]解释:子数组 [4,3] 是该条件下的长度最小的子数组。因为是最小的 连续 子数组 ,可以考虑使用滑动窗口。

2024-03-30 23:29:28 371

原创 leetcode.977. 有序数组的平方

由于数组是有序的,平方之后可能变换顺序的只有负数的情况,最大的数一定出现在两边,用双指针,指向两边,新建一个数组,比较两端的元素,从大到小补充新数组迭代元素,直到补充完成。解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]输出:[0,1,9,16,100]输出:[4,9,9,49,121]

2024-03-30 23:21:54 211

原创 leetcode:27. 移除元素

使用快慢指针法,快指针用来寻找新数组的元素,慢指针指向新数组的下标,比较快指针元素与目标值,当出现快指针与目标值不相等时,更新慢指针的值,同时向前。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。因为数组是有序的,所以不能自己删除数组的方式,而且要使用覆盖的方式。元素的顺序可以改变。你不需要考虑数组中超出新长度后面。

2024-03-30 23:18:42 289

原创 leetcode 704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2024-03-30 23:09:51 325

原创 codeTop:二叉树最大深度

属于二叉树遍历的变形,这里使用DFS的递归方式 最大深度就是 max(左子树最大深度 ,右子树最大深度) + 1, 而计算左/右子树最大深度可以用相同的算法。

2024-03-24 23:18:55 144

原创 codeTop102:二叉树的层序遍历

在已知BFS的方式后,知道每次从队列中取一个节点,就要将这个节点的所有子节点按照顺序放入队列。难点在于怎么确定将同一层的节点放在一个数组里面的输出,也就是输出一个二维数组?

2024-03-24 22:32:20 277

原创 树的遍历方式DFS和BFS

2、上图中一条路已经走到底了(9是叶子节点,再无可遍历的节点),此时就从 9 回退到上一个节点 5,看下节点 5 是否还有除 9 以外的节点,没有继续回退到 2,2 也没有除 5 以外的节点,回退到 1,1 有除 2 以外的节点 3,所以从节点 3 开始进行深度优先遍历,如下。1、我们从根节点 1 开始遍历,它相邻的节点有 2,3,4,先遍历节点 2,再遍历 2 的子节点 5,然后再遍历 5 的子节点 9。1.使用栈实现,对于每个节点,先遍历当前节点,然后吧右节点压栈,再压左节点。

2024-03-24 22:28:04 585

原创 codeTop01:LRU (最近最少使用) 缓存的实现

● void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value;在将某个节点移到链表头的时候,需要知道该节点的前一个节点和后一个节点,使前一个节点的尾指针指向后一个节点的头指针。● int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。设计一个链表,链表的长度固定,将最近访问到的节点放在链表的头部,刚刚插入的节点也放在链表的头部。在初始化map和缓存容量的同时,新建头尾节点,方便后续的操作。

2024-03-04 23:28:08 419

原创 实践:从库分页参数

最近在写用户账单的功能,需要查询到两年千的消费记录,但是目前消费记录日志表里面记录的是一年内的数据,对于一年前的记录都记录在了归档表。因此想要查询两年前的数据就必须要查询归档表。现在的难点是,如果对归档表里面的记录进行分页操作,接口中传入的分页参数都是针对于主表来说的。假设主表的分页参数是pageNum,pageSize。对于正常的情况,先查主表,当主表中的数据不够的时候再查归档表。所以最终从库的开始偏移量应该是。

2024-02-05 23:45:32 277

原创 实践:微服务版本升级步骤以及maven仓库相关概念

进行微服务开发的时候,上层服务依赖于下层的服务的api,比如适配属于上层服务,用户属于下层服务。

2024-02-05 23:35:35 1618

原创 Spring Cloud Alibaba 介绍与版本映射关系 介绍与版本映射关系

Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。(子项目):● 第一代实现: Spring Cloud Netflix,● 第二代实现: Spring Cloud Alibaba。2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix系列大部分组件都进入维护模式,不再添加新特性。

2024-02-01 23:15:34 703 1

原创 实践:读取html文本提取相应内容按照格式导出到excel中

最近在做一个需求,需要将html文本中的内容提取出来,然后导出到excel里面,实现交代情景,html文本中存在许多标签,且很乱,因此需要之间将标签里面的文本提取出来,再进行处理。

2024-02-01 22:54:19 1605 2

原创 sql总结(高阶用法)

最近在做账单统计的需求,需要写较多的sql,也用到了很多以前没有用过的sql用法,通过本篇文章进行总结。

2024-01-28 23:29:02 1807

空空如也

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

TA关注的人

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