- 博客(110)
- 收藏
- 关注
原创 设计模式之策略模式
先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
2024-08-18 20:21:18
687
原创 设计模式之工厂模式
需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。
2024-08-18 20:18:22
837
原创 设计模式之单例模式
*单例模式(Singleton Pattern)**是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
2024-08-18 20:06:03
1136
原创 Leetcode 208. 实现 Trie (前缀树)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。找到board矩阵中出现在字典树中的字符串,用HashSet收集。根据前缀树的概念实现,查找和加入类似于二叉搜索树。(发音类似 “try”)或者说。和一个单词(字符串)列表。单词必须按照字母顺序,通过。返回所有二维网格上的单词。构造字典树,然后通过。
2024-07-28 19:49:07
410
原创 Leetcode 909.蛇梯棋
的编号范围,遇到蛇和梯子(在board矩阵中对应值不为-1)可以进行跳转,但不能连续跳,求到达终点的最少步数。注意,玩家在每回合的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也。列的棋盘,按前述方法编号,棋盘格中可能存在 “蛇” 或 “梯子”;的编号范围,如果未越界且未曾访问过,则入队。时,返回当前的步长;如果无法返回到终点,返回-1。入队后进行BFS,逐个字符尝试修改,当新的字符串在。的方格所需的最少移动次数,如果不可能,则返回。中且未尝试过,加入到队列中,直到生成了。
2024-07-28 19:48:29
493
原创 SpringBoot集成ShardingSphere-JDBC 5.3.X实现分库分表
pom.xml</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</数据t_user表结构:将其在两个数据库中分别创建16张表,编号0-15,即t_user_0到t_user_15。
2024-07-26 18:50:50
564
原创 主机和虚拟机可以互ping但虚拟机不能上网问题解决
排查了2h,看到下面的帖子,推测应该是网络环境的变化导致DNS无法正常解析,将虚拟机的DNS服务器地址从8.8.8.8换成主机DNS服务器地址。由于把笔记本拿到办公室了,主机和虚拟机可以互ping,虚拟机却没有网络。主机DNS服务器地址在windows系统设置可以查看。
2024-07-25 13:48:00
381
原创 Leetcode 427. 建立四叉树
你不需要阅读本节来解决这个问题。只有当你想了解输出格式时才会这样做。输出为使用层序遍历后四叉树的序列化形式,其中。四叉树数据结构中,每个内部节点只有四个子节点。它与二叉树的序列化非常相似。唯一的区别是节点以列表形式表示。如果你想了解更多关于四叉树的内容,可以参考。的值为 True ,则表示它在列表。表示路径终止符,其下面不存在节点。的值为 False ,则表示值为。请你用四叉树表示该矩阵。的 四叉树 的根结点。你需要返回能表示矩阵。
2024-07-21 13:16:54
643
原创 Leetcode 23. 合并 K 个升序链表
在合并两个有序链表的基础上,使用辅助队列,两两进行合并。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。
2024-07-21 13:12:11
234
转载 Leetcode 399. 除法求值
*注意:**输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用。**注意:**未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。如果存在某个无法确定的答案,则用。个问题,请你根据已知条件找出。思路:使用带权重的并查集进行求解。是一个表示单个变量的字符串。应使用带权重的并查集实现。
2024-07-21 13:09:35
24
原创 Leetcode 210. 课程表 II
返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回。如果不可能完成所有课程,返回。
2024-07-21 13:04:00
239
1
原创 Leetcode 133. 克隆图
是用于表示有限图的无序列表的集合。每个列表都描述了图中节点的邻居集。简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(给定节点将始终是图中的第一个节点(值为 1)。生成拷贝节点后如何按原连通图的关系将拷贝节点关联起来。该图在测试用例中使用邻接列表表示。图中一个节点的引用,请你返回该图的。图中的每个节点都包含它的值。作为对克隆图的引用返回。),第二个节点值为 2() 和其邻居的列表(
2024-07-21 12:52:45
237
原创 Leetcode 236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(在递归过程中,空节点视为0,对于每个节点,计算其左右子树的最大路径和(如果为负数则视作0),然后更新全局变量。,记录可能的最大路径和,最后返回以当前节点为根的子树中包含当前节点的最大路径和。(最近最少使用)算法,最近最少访问的key放在队头,最新访问的key放在队尾。如果有环,第一个遇到的访问过的节点即为入环的第一个节点;的第一个元素的和,这些是最小的数对之一。
2024-07-14 16:15:41
881
1
原创 SpringBoot整合JWT示例教程
JSON Web Token (JWT) 是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。由于这些信息是经过数字签名的,因此可以被验证和信任。JWT 通常用于身份验证和信息交换场景,特别是在 Web 应用程序的认证和授权机制中。组成JWT 由三部分组成:Header、Payload 和 Signature。这三部分分别用点(.)分隔,形成一个字符串。
2024-07-12 21:38:56
845
原创 通过FallbackFactory接口实现降级逻辑
触发限流或熔断后的请求不一定要直接报错,也可以返回一些默认数据或者友好提示,用户体验会更好。,不要继续之前的测试,否则异常率不为0。这里我们演示方式二的失败降级处理。导致最终的平局响应时间较长。定义降级处理类,实现。设置jmeter重启。
2024-07-12 20:50:54
552
原创 Docker启动容器报错: unable to allocate file descriptor table - out of memory
Docker启动容器报错,提示:unable to allocate file descriptor table - out of memory。个人理解应该是这种java应用,在JVM启动时需要限制下分配的内存,尤其是虚拟机内存不充裕的情况下。
2024-07-12 20:27:56
676
原创 Docker部署Sentinel及踩坑
官网查看sentinel-dashboard镜像地址及版本信息:https://hub.docker.com/r/bladex/sentinel-dashboard/tags。是容器的物理内存和交换内存的总和。为了设置新的内存限制,你必须确保。如果显示连接失败,尝试配置docker镜像源,如阿里云等。:将主机的 8858 端口映射到容器的 8858 端口。:限制容器使用的最大内存为 512 MB。:为容器指定一个名称(例如。:以分离模式运行容器。
2024-07-12 20:21:18
890
原创 Leetcode 295.数据流的中位数
任意多个连续的斜杠(即,设置辅助栈,栈中元素为长度为2的数组,分别存当前插入的val值和它插入后栈中的最小val值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。回溯暴力解,给回溯函数设置返回值,当找到一个可行解时,停止计算,返回结果。取出最小元素:从栈顶元素获取当前栈中的最小val值;操作,并能在常数时间内检索到最小元素的栈。开头),请你将其转化为更加简洁的规范路径。没想到字符串切片,纯指针实现切片,代码臃肿。对于此问题,任何其他格式的点(例如,在 Unix 风格的文件系统中,一个点(
2024-07-08 22:58:13
847
原创 Spring AOP 通知的执行顺序
Around通知导致异常被捕获了,没有触发 @AfterThrowing 通知,反而触发了 @AfterReturning 通知方法的执行;触发 了@AfterThrowing 通知。当spring-aop版本为。当spring-aop版本为。目标方法异常执行,可以看到。
2024-07-08 20:45:41
661
1
原创 Java动态代理的实现方式
代理模式是一种设计模式,,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,。代理分为动态代理和静态代理。举例:通过中介进行的商品交易,中介就是代理,代替卖方进行商品销售。静态代理比较麻烦,需要对每个目标对象都设置专用的代理类,实际开发中很少使用。动态代理是的一种技术。**从 JVM 角度来说,动态代理是在运行时动态生成类字节码,并加载到 JVM 中的。
2024-07-08 19:58:37
1004
原创 Spring Bean生命周期
销毁并不是说要立马把 Bean 给销毁掉,而是把 Bean 的销毁方法先记录下来,将来需要销毁 Bean 或者销毁容器的时候,就调用这些方法去释放 Bean 所持有的资源。:Bean 容器首先会找到配置文件中的 Bean 定义,然后使用 Java 反射 API 来创建 Bean 的实例。接口能让 Bean 能拿到 Spring 容器资源。:为 Bean 设置相关属性和依赖,例如。方法或构造函数注入依赖和值、
2024-07-04 22:03:59
427
原创 Spring AOP实现操作日志记录示例
在aop包下新建注解MyLog。/*** 自定义注解:实现登录日志记录*/ @Retention(RetentionPolicy . RUNTIME) // 运行时生效 @Target(ElementType . METHOD) // 作用在方法上 public @interface MyLog {/*** 模块名称/*** 操作名称/*** 自定义注解:实现登录日志记录。
2024-07-04 18:27:45
325
原创 罗马数字与十进制互转
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。罗马数字是通过添加从最高到最低的小数位值的转换而形成的。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。思路:每次从大到小试探所有罗马数字去做减法。给定一个罗马数字,将其转换成整数。给定一个整数,将其转换为罗马数字。**输入:**num = 3749。**输入:**num = 1994。思路:匹配所以可能的罗马数字组合。**输入:**num = 58。,即为两个并列的 1。
2024-06-30 19:03:25
282
原创 2023HW部分笔试题
移动:将游标往左或者往右移动,其对应操 move cnt,move 表示游标移动操作命令关键字(区分大小写),cnt 为整数,表示游标移动次数,cnt 如果为负数时表示向左移动 cnt 次,如果为正数表示向右移动 cnt 次数,如果 cnt 等于 0,则表示游标不移动,如果移动次数 cnt 超过字符串左右边界则认为输入命名非法,不做任何处理;值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms 后将信号发送给上下左右四个方向的信号塔。如果有信号塔无法收到信号,则返回 -1。
2024-06-30 18:55:27
475
原创 Redis常见面试题
但是注意,这个选主并切换的过程需要一定时间,此时A节点还是可以被写入数据的(暂时称这段数据为message,因为A节点实际上没有宕机,只是因为网络分区等问题联系不上从节点和哨兵了)当A节点被降为从节点时,A节点会清空自己的数据,复制B节点的数据,此时message就丢失了。当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。:简称replid,是数据集的标记,id一致则说明是同一数据集。
2024-06-25 20:20:41
1050
原创 SpringBoot整合redisson项目启动报错:Exception occured. Channel: [id: 0x5efefff1, L:/127.0.0.1:5403 - R:127.0.
【代码】SpringBoot整合redisson项目启动报错:Exception occured. Channel: [id: 0x5efefff1, L:/127.0.0.1:5403 - R:127.0.
2024-06-18 20:46:44
444
原创 968. 监控二叉树
贪心策略:尽可能减少摄像头放置,不用从叶子节点开始放,间隔放置。给定一个二叉树,我们在树的节点上安装摄像头。计算监控树的所有节点所需的最小摄像头数量。节点上的每个摄影头都可以监视。
2024-06-15 20:40:34
220
原创 贪心-区间问题
将问题转化为求非交叉区间数量的问题(非交叉区间,如[1,3],[2,4]算1个非交叉区间,如[1,2],[3,4]算2个非交叉区间)我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是。按开始下标升序排序,然后遍历数组,相邻的两个区间能合并则进行合并;处射出一支箭,若有一个气球的直径的开始和结束坐标为。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。返回一个表示每个字符串片段的长度的列表。
2024-06-15 20:34:11
824
原创 134. 加油站
如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。你从其中的一个加油站出发,开始时油箱为空。你有一辆油箱容量无限的的汽车,从第。个加油站需要消耗汽油。
2024-06-15 20:18:00
312
转载 2813. 子序列最大优雅度
*注意:**数组的子序列是经由原数组删除一些元素(可能不删除)而产生的新数组,且删除不改变其余元素相对顺序。考虑第 k+1个项目,如果要选它,我们必须从前 k 个项目中移除一个项目。由于已经按照利润从大到小排序,选这个项目不会让。是所选子序列所含的所有类别中不同类别的数量。按照利润从大到小排序。先把前 k 个项目选上。是子序列中所有项目的利润总和,变大,所以重点考虑能否让。的子序列的最大优雅度。个项目的利润和类别。用整数形式表示并返回。
2024-06-13 12:22:29
54
原创 动态规划——字符串序列
Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。可以删除任意一个字符串中的一个字符。是这两个字符串所共同拥有的子序列。、长度最长的子数组的长度。,返回这两个字符串的最长。
2024-06-12 21:30:38
747
原创 动态规划——买卖股票的最佳时机
*注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。在每一天,你可以决定是否购买和/或出售股票。设计一个算法来计算你所能获取的最大利润。设计一个算法来计算你所能获取的最大利润。设计一个算法来计算你所能获取的最大利润。也就是说,你最多可以买。你也可以先购买,然后在。个元素是一支给定的股票在第。是某支给定的股票在第。给定一个数组,它的第。
2024-06-05 17:07:21
555
1
原创 动态规划——打家劫舍问题
如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房,(,今晚能够偷窃到的最高金额。
2024-06-04 12:39:38
887
原创 685. 冗余连接 II
该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。若有多个答案,返回最后出现在给定二维数组的答案。中的两个不同顶点间,这条附加的边不属于树中已存在的边。)的树及一条附加的有向边构成。返回一条能删除的边,使得剩下的图是有。在本问题中,有根树指满足以下条件的。输入一个有向图,该图由一个有着。结果图是一个以边组成的二维数组。个节点(节点值不重复,从。
2024-05-22 20:49:52
607
原创 827. 最大人工岛
一次遍历地图,得出各个岛屿的面积,并做编号记录。可以使用map记录,key为坐标点,value为岛屿面积和岛屿编号。再次遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起(),遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。由一组上、下、左、右四个方向相连的。中最大的岛屿面积是多少?
2024-05-22 20:43:21
303
原创 417. 太平洋大西洋水流问题
从太平洋边上的节点 逆流而上,将遍历过的节点都标记上。从大西洋的边上节点 逆流而长,将遍历过的节点也标记上。然后两方都标记过的节点就是既可以流太平洋也可以流大西洋的节点。当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。这个岛被分割成一个由若干方形单元格组成的网格。岛上雨水较多,如果相邻单元格的高度。处于大陆的左边界和上边界,而。处于大陆的右边界和下边界。直接每个点DFS部分用例超时。
2024-05-22 20:39:58
345
原创 RabbitMQ入门教程(下)
在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单状态却显示未支付,数据出现了不一致。此时前端发送请求查询支付状态时,肯定是查询交易服务状态,会发现业务订单未支付,而用户自己知道已经支付成功,这就导致用户体验不一致。因此,这里我们必须尽可能确保MQ消息的可靠性,即:消息应该至少被消费者处理1次那么问题来了:我们该如何确保MQ消息的可靠性?如
2024-04-24 10:25:49
442
原创 RabbitMQ入门教程(上)
多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量;否则采用轮询机制交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列如果多个队列具有相同的RoutingKey,则与Fanout功能类似。
2024-04-24 10:03:22
485
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人