- 博客(137)
- 资源 (1)
- 收藏
- 关注
原创 Java之自定义注解
在Java中,自定义注解是通过 @interface 关键字定义的。注解是一种元数据,可以附加到类、方法、字段等代码元素上,用于提供额外的信息或配置。
2025-02-09 18:26:46
448
原创 Mac 修改默认jdk版本
临时和永久配置jdk。这里演示将 Java 17 版本降低到 Java 8在终端(Terminal)中运行以下命令,查看已安装的 Java 版本列表。
2024-11-19 17:46:16
1433
原创 【JUC并发】cmpxchg和lock指令
在多线程或多处理器系统中,多个处理器可能同时访问和修改同一片内存数据。为了确保数据一致性和操作的原子性,处理器需要提供机制来同步对共享内存的访问。CMPXCHG 和 LOCK 指令就是用于实现这些同步机制的关键。
2024-11-18 23:36:05
843
原创 【创建型】工厂模式
简单工厂模式(Simple Factory Pattern)又叫做静态工厂方法模式(Static Factory Method Pattern),并不属于 GoF 的23种设计模式之一,是学习其他工厂模式的的基础。王国工厂(抽象类):定义了一组用于创建产品的方法,需要军队、国王、城堡。精灵工厂(具体工厂):创建精灵军队、城堡、国王。兽人工厂(具体工厂):创建兽人军队、城堡、国王。【例】精灵和兽人王国生产器:城堡、军队、国王。城堡、军队、国王(抽象类):声明方法。【例】武器:精灵武器、兽人族武器。
2024-11-01 15:24:00
777
原创 【创建型】单例模式
单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)
2024-11-01 15:17:10
566
原创 KMP入门与算法题实践
下面是两个b站上个人借鉴学习的视频第一个视频用来快速理解KMP:第二、三个视频用来理解流程和写代码:KMP(Knuth-Morris-Pratt)算法是一种用于字符串匹配的高效算法。它利用之前部分匹配的结果来避免重复的匹配操作,从而提高匹配效率。KMP算法主要包括两个部分:算法题P3375 模板 KMP洛谷P3375模板代码如下:P4391无线传输思路:答案是 n - next[n-1]一个字符串的公共前后缀长度范围为 0-n-1,也就是没有相同的和都是同一个字符重复循环的字符串,
2024-08-01 12:22:33
491
原创 【STL】C++之哈希表unordered_map和unordered_set
哈希map常用方法删除元素:可以使用 方法按键删除元素,也可以使用 方法删除所有元素。查找元素:可以使用 方法查找指定键的元素,返回迭代器指向该元素,如果未找到则返回尾后迭代器。大小和容量:可以使用 方法获取哈希表中键值对的数量,使用 方法检查哈希表是否为空。迭代器:可以使用迭代器遍历哈希表中的键值对。桶相关方法:哈希表内部使用桶来存储元素,可以使用 方法获取桶的数量,使用 方法获取指定桶中元素的数量
2024-03-12 10:47:55
1280
原创 【快捷键】Mac如何打出数学符号和希腊字母
减号 (-): Hyphen (-) 或者 Option + Hyphen (-)求导符号 (d/dx): Option + Shift + D。逗号 (,) (用于表示小数点): Shift + ,乘号 (×): Option + Shift + 8。平方根符号 (²): Option + 2。立方根符号 (³): Option + 3。求和符号 (∑): Option + W。积分符号 (∫): Option + B。等于号 (=): Option + =加号 (+): Shift + =
2024-03-09 17:48:14
17679
1
原创 【STL】C++之优先队列priority_queue的常用方法
priority_queue的基本用法和算法题二维数组的运用示例。算法题思路:这里创建一个优先队列保存奶酪差值:第一只老鼠得分-第二只老鼠得分 ,采用贪心思想选取最高的前k个值。头文件:#include
2024-03-05 13:35:00
375
原创 【go语言】error 错误处理详解
上述的哨兵错误无法携带上下文信息,使用自定义的错误类型可以包装底层错误携带更多的上下文信息。让我们看一下底层的 os.PathError 是怎么做的Op stringErr errorif err!= nil {ok {} else {运行结果如下图所示:它提供了底层执行了什么操作、哪个路径出了什么问题以及错误消息。这种方式相对于哨兵来说,虽然能够携带更多的上下文信息,但是同样需要调用者进行类型断言,存在强耦合。
2024-02-01 14:18:07
2762
原创 【go语言】读取toml文件
全称为Tom's Obvious, Minimal Language,是一种易读的配置文件格式,旨在成为一个极简的数据序列化语言。TOML的设计原则之一是保持简洁性,易读性,同时提供足够的灵活性以满足各种应用场景。TOML文件由多个表(table)组成,每个表包含一组键值对。键值对由键名、等号(或冒号),以及对应的值组成。TOML支持嵌套表,可以构建层次结构,使得配置文件更加结构化。
2024-01-15 19:12:50
1092
原创 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档
为了能识别出代码中抛出错误码的地址和具体的错误码值,再根据错误码文件获取到错误码的具体值和注释,方便后续的排错,这里使用AST进行语法分析获取到代码中的目标对象。
2024-01-15 17:46:41
1799
原创 GitLab CI 实现项目A更新代码自动触发项目B更新错误码文档
CI/CD 是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写,是一种软件开发和交付的最佳实践。持续集成是一种开发实践,旨在通过频繁地集成和验证代码,确保团队成员的工作不会破坏整体代码库的稳定性。在 CI 中,开发者将代码频繁地合并到共享的主干(主要分支),每次合并都会触发自动构建、测试和代码静态分析等过程。如果有问题,团队可以尽早发现并纠正。
2024-01-15 11:31:03
1168
原创 【go语言】select多路选择
在 Go 语言中,是一个标准库中非常常用的接口,它提供了在多个 goroutine 之间传递请求范围的截止日期、取消信号、存储值等信息的途径。主要用于在函数之间传递请求的截止日期、取消信号、跟踪信息以及其他请求范围的值。Deadline():返回Context的截止日期(即取消的时间点)和一个布尔值,表示是否设置了截止日期。Done():返回一个类型的通道,该通道关闭时表示Context被取消或者达到了截止日期。Err():返回一个错误,表示Context被取消的原因。
2024-01-06 01:05:44
1372
原创 【go语言】Chromeless简介及Chromedp库实现模拟登录截屏
chromeless是一个基于 Node.js 的库,用于通过无头浏览器(Headless Chrome)进行自动化测试和网页截图。它允许开发者使用 JavaScript 脚本来控制和操作浏览器,而无需实际打开浏览器窗口。以下是一些chromelesschromelesschromelesschromelesschromelesschromeless以下是一个简单的chromeless在这个示例中,chromeless打开了一个 Headless Chrome 浏览器,导航到了,然后截取了页面的屏幕截图。
2023-12-29 16:06:02
2804
原创 【go语言】CSP并发机制与Actor模型
多线程共享内存模型是一种并发编程模型,其中多个线程在同一个进程的地址空间中。这种模型允许多个线程相同的数据结构,但也引入了一些潜在的问题,其中最常见的问题之一就是竞态条件(Race Condition)。竞态条件(Race Condition)是多线程或多进程并发执行时,由于而导致程序的依赖于执行序列的结果的情况。这意味着多个线程或进程在访问和修改共享数据时,如果没有适当的同步机制,可能导致意外的结果。竞态条件的经典示例是两个线程同时对共享变量进行读取-修改-写入操作。
2023-12-26 15:34:58
1843
原创 【go语言】error错误机制及自定义错误返回类型
通过自定义两个错误变量,有利于判断错误类型通常我们判断是否存在错误而不是判断不存在错误,有利于尽早失败避免嵌套
2023-12-20 18:01:14
1082
原创 SpringCloud GateWay自定义过滤器之GatewayFilter和AbstractGatewayFactory
是一个抽象类,用于更方便地创建网关过滤器。它处理过滤器的参数解析和创建,使得定义过滤器变得更加简单。@Override// 在这里创建并返回过滤器实例// 过滤器逻辑// 过滤器的配置参数@Component@Override// 获取请求的IP地址// 使用简单的基于IP的限流逻辑,你可以根据实际需求选择其他限流算法// 这里使用一个简单的令牌桶算法作为示例// 如果超过限流阈值,返回错误响应// 如果未超过限流阈值,继续处理请求。
2023-11-14 16:55:03
4930
原创 【记】Ribbon组件自定义轮询算法规则时ava.lang.IllegalStateException: No instances available for LAPTOP-9JQRKN4S
如果不注释掉LoadBalanced注解,RestTemplate发起请求时会将LAPTOP-9JQRKN4S当做实例名称去做负载均衡查询,结果就是找不到实例。报错提示没有可用的服务实例LAPTOP-9JQRKN4S。
2023-11-08 13:14:44
168
原创 Leetcode48旋转图像
矩阵性质,可以发现对角线翻转之后就是逆时针转了九十度,左右再翻转就是顺时针转了九十度。行列转换,第一行变到第三列,第二行变到第二列,第三行变到第一列。方法二、对角线翻转+左右翻转。方法一、一般辅助数组解法。
2023-11-06 12:09:23
299
原创 微服务注册中心之安装+实例搭建zookeeper
可以使用wget或者curl命令连接失败也可以本地下载之后上传到服务器使用第三方软件FTP、宝塔面板上传解压。
2023-11-06 01:13:55
388
原创 Leetcode41缺失的第一个正数
此时会思考能不能用一个哈希表来保存出现过的1~N+1的数,然后从 1 开始依次枚举正整数,并判断其是否在哈希表中。这里将原数组当做哈希表,使用标记的办法来标记出现过的正整数,最后遍历数组,第一个没出现的下标+1就是答案。长度为N的数组,没有出现过的正整数一定是1~N+1中的一个。但是题目要求常数级别的空间,就不能使用N的哈希表了。
2023-11-05 11:33:33
198
原创 【记】一次common模块导入无效的bug
如果是父工程管理了版本那么子工程是可以不用声明version的,此时去检查父工程的pom。检查properties是否正常,不能爆红,复制粘贴注意只能有一个properties。3.修改完所有的common模块相关声明然后父工程clean报version缺失错误。2.检查子工程是否引入正确的common,org不要写成ogr了。1.检查common模块的父工程导入和自身模块的声明是否正确。至此重新clean install,common模块成功导入。默认是继承父工程的groupid,可以不用再声明。
2023-11-04 16:36:31
1087
原创 【Maven】<dependencyManagement>详解
元素是 Maven POM 文件中的一个非常重要的元素,它用于集中管理项目中所有模块的依赖项版本,允许您在父 POM 中定义依赖版本,然后在子模块中引用这些版本而不需要显式指定版本号。这可以大大减少维护成本,确保在整个项目中使用一致的依赖版本。元素,您可以更好地组织和管理项目的依赖版本,确保依赖项的一致性,减少冗余和错误,并提高项目的可维护性。:在子模块中,如果需要使用不同版本的依赖项,可以覆盖。子模块中的依赖项会继承自父 POM 中的版本信息。:在子模块的 POM 文件中,您可以引用。
2023-11-04 16:14:38
1128
原创 Leetcode76最小覆盖子串
3. 怎么判断是否覆盖:这里使用两个哈希表,一个保存目标子串字符数,一个保存窗口内的字符数,注意是窗口内的,因为需要用窗口的和目标子串进行比较来控制移动。4. 怎么控制循环:外层循环while(right
2023-11-03 23:16:25
155
原创 Sprint Cloud Stream整合RocketMq和websocket实现消息发布订阅
是Spring Cloud Stream提供的预定义输入通道,允许你接收消息。通过这个注解,你的应用程序可以监听消息通道,并定义消息处理逻辑。: 这是Spring Cloud Stream的注解,它用于将应用程序绑定到消息代理(如Kafka、RabbitMQ等)。监听消息通道中的消息,一旦有消息到达,就会触发。2.application.yml配置文件。接下来是websocket模块的搭建。方法,该方法负责处理消息并通过。3.将应用程序绑定到消息代理。
2023-10-28 11:35:40
1505
1
原创 Spring Cloud Stream 和SpringBoot整合RocketMq区别和选择
如果您需要完全掌控RocketMQ的配置和细节,或者您的应用需要与RocketMQ进行更复杂的交互,例如自定义消息处理逻辑、事务性消息等,那么Spring Boot整合RocketMQ可能更适合您。
2023-10-27 20:31:33
931
原创 什么是事件驱动框架
事件驱动框架是一种软件架构或编程模型,其核心思想是系统中的各个组件或模块通过事件的触发和响应来进行通信和协作。在事件驱动框架中,事件是指某种状态或条件的变化,组件可以发布、订阅、监听或响应这些事件,从而实现解耦、灵活和可扩展的系统设计。它提供了一种有效的机制,用于处理和协调各种类型的事件,从而实现高效的系统通信和协作。发布者将事件发送到事件总线,然后事件总线将事件传递给相应的订阅者。这允许系统更容易扩展和维护。:通过事件驱动的方式,系统可以更容易适应变化,因为组件之间的依赖关系较少,可以独立开发和测试。
2023-10-27 20:27:25
233
原创 通俗易懂的理解 解耦 概念
客户端与服务器之间的通信应该建立在明确定义的接口和契约之上。这意味着服务器应该提供清晰的接口定义,而客户端应该遵循这些接口。这可以通过使用规范的API文档或IDL(接口定义语言)来实现。
2023-10-27 19:21:28
14800
原创 什么是消息中间件
它们在不同的使用场景下有各自的优点和特点,用于构建分布式系统、微服务架构、事件驱动架构、日志收集等各种应用程序。它提供了一种解耦应用程序组件之间通信的方式,通过消息的异步传递,允许应用程序在不直接依赖于对方的情况下进行通信和协作。:消息中间件提供了一种松耦合的通信方式,允许应用程序组件独立运行和演化,而不会对其他组件产生直接依赖。:消息中间件支持异步通信模式,其中发送者将消息发送到消息队列,并且接收者可以在需要时接收和处理消息。:消息中间件通常提供消息持久化、重试机制和事务支持,确保消息的可靠传递。
2023-10-27 19:11:33
372
原创 SpringBoot整合Websocket实现聊天室
创建一个WebSocket配置类,用于配置WebSocket端点和处理器。:创建一个WebSocket处理器,用于处理WebSocket连接和消息。:创建一个HTML页面,用于在浏览器中连接WebSocket并进行聊天。文件中添加WebSocket相关依赖。
2023-10-27 19:04:18
479
原创 算法通关村第19关【黄金】| 继续盘点高频动态规划dp问题
思路:确定dp:dp[i][j]子串是否是回文串确定递推公式:例如:aa|cbc|aa dp[2][4] = dp[3][3] true确定初始化:dp[i][i] = true,一个字母都是回文确定遍历顺序:子串从长度2开始一直到len长度,从小到大。i从小到大,不可以更换顺序两个一组从头遍历到尾,三个一组从头遍历到尾,456....len个一组遍历到尾。
2023-10-26 14:36:02
104
原创 SpringBoot整合注解式mybatis
注解来指定MyBatis的Mapper接口扫描路径,通常在Spring Boot应用的启动类上使用。创建一个Spring Boot项目,可以使用Spring Initializer或手动创建。文件中,添加Spring Boot、MyBatis和数据库驱动程序的依赖,就像之前所示。创建Service层,处理业务逻辑,并将Mapper接口注入Service中。创建一个Controller层,处理HTTP请求,调用Service层的方法。创建一个MyBatis的Mapper接口,并使用。
2023-10-23 21:41:55
259
原创 【Maven打包报错误】找不到或无法加载主类以及Could not resolve dependencies,Failed to collect dependencies的解决办法
WARNING] Unrecognised tag: 'mirror' (position: START_TAG seen ...\r\n ... @138:13) @ D:\ 应用\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin\..\conf\settings.xml, line 138, column 13。其实这时候运行的是缓存,然后clean了报找不到主类。
2023-10-21 22:21:28
3055
原创 算法通关村第19关【白银】| 动态规划高频问题
思路:确定dp:这里是最少硬币的个数,不是种类确定递推公式:dp[j] = Math.min(dp[j],dp[j-coins[i]]+1),不要当前硬币dp[j]还是保持以前的组合方法,要当前硬币dp[j-coins[i]]+1确定初始化:dp[0]=0,其他的都得初始化最大值确定遍历顺序:组合排列都无所谓,保证完全背包从前往后即可。
2023-10-20 17:56:46
1002
原创 算法通关村第19关【青铜】| 动态规划
动态规划(Dynamic Programming,简称DP)是一种解决多阶段决策过程最优化问题的数学方法。它通常用于解决那些具有重叠子问题和最优子结构性质的问题,这些问题可以分解为多个相互关联的子问题。动态规划的核心思想是将原问题分解为较小的子问题,然后解决这些子问题,最后合并它们的解以获得原问题的最优解。这个方法通常涉及到创建一个表格或数组来存储子问题的解,以,从而提高算法效率。关键特征和步骤:重叠子问题:原问题可以分解为多个相似或相同的子问题,这些子问题可能需要多次解决。
2023-10-17 14:20:03
223
灰色关联模型matlab
2022-08-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人