自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习笔记框架目录

学习笔记目录Java基础1)变量和字符串:变量和字符串2)类、对象、接口和继承:类、对象、接口和继承容器1)集合框架基础:集合框架2)ArrayList源码:ArrayList源码3)LinkedList源码:LinkedList源码4)HashMap源码:HashMap源码并发JVM设计模式:1)单例模式:单例模式2)观察者模式:观察者模式3)代理...

2020-03-17 20:49:27 624 1

原创 解决 required a single bean, but 2 were found的spring注入bean错误

个人定义了一个interface,为了抽象与规范使用泛型进行约束,名字举例为 ITestService.java通过不同的业务场景需要进行不同的实现,比如 ITestServiceImplOne.java、ITestServiceImplTwo.java举例:(注:TestOne extends BaseTest)@Service@Override这时,我需要在另外一个abstract类 TestAbstract.java中通过@Autowired注入ITestService@Autowired。

2024-04-29 02:03:12 857

原创 【maven】pom文件详解和延伸知识

SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。

2024-04-29 01:55:50 660

原创 端口被占用的解决方案汇总

如下所示,LISTEN 表示被占用,18200/java 分别是:进程PID/进程名(或者通过命令查找进程PID,见下面的2)通过进程PID关闭进程。(2)根据自己被占用的端口号输入以下命令(测试:被占用的8080端口)(3)根据上步骤获得的PID ,输入以下命令杀死被占用的端口任务。(3)ps -ef | grep tomcat:查看指定进程。(2)ps -aux:查看所有进程。(1)ps -ef:查看所有进程。(1)1.查看端口是否被占用。(2)查看占用该端口号的进程。lsof -i:[端口号]

2024-04-22 23:07:04 619

原创 【线程池】线程池抛出异常和打印栈帧信息

【线程池】线程池抛出异常和打印栈帧信息【一】模拟线程池抛异常(1)模拟案例(2)运行结果(3)submit()如何获取异常信息【二】如何获取和处理异常(1)方案一:使用 try -catch(2)方案二:使用Thread.setDefaultUncaughtExceptionHandler方法捕获异常(3)方案三:重写afterExecute进行异常处理【三】线程池处理异常的逻辑分析【四】发生异常后,打印栈帧信息的三种方式(1)使用Thread.currentThread().getStackTrace()

2024-04-17 23:59:58 884

原创 【拦截器Interceptor】springboot拦截器的使用和原理

拦截器就是用来拦截指定的请求,在请求前、请求处理后做一些响应的业务逻辑处理,或者在请求完成之后做一些资源释放。拦截器最常用的使用场景就是认证,在请求开始之前,对当前请求进行权限校验,如果当前请求用户具备操作当前请求的权限,就对当前请求放行,允许执行业务逻辑;否则拦截当前请求,直接返回。拦截器的功能通过网关也都是可以实现的,但是一些单体架构还是需要使用拦截器。要在SpringBoot中实现拦截器,首先需要创建一个类并实现HandlerInterceptor接口。

2024-04-15 22:22:05 677

原创 【多线程】线程池Future和FutureTask

我们在Java线程池ThreadPoolExecutor使用详解中利用execute(Runnable r)方法来异步执行任务,但是有一个缺点,就是无法执行带有返回值的任务。总的来说Future模式的思想就是在子线程进行执行的时候,主线程不阻塞继续执行。等到主线程需要子线程的结果的时候再去获取子线程的结果(此时子线程没有执行完成的话就会阻塞直至执行完成)。主线程还可以根据一定的业务逻辑去判断是否要取消执行子线程,还可以设置一个超时时间。

2024-04-11 00:51:26 1092

原创 【多线程】异步执行方法无法获取当前用户的问题排查

一个需求,通过线程池执行一个指标预警触发的功能,如果指标触发了预警,就会批量添加触发记录,存储是通过Mybatis-plus实现的,PO实体类会集成BasePo,自动获取当前用户添加到创建人更新人字段中。经过测试,接口调用这个方法和多线程跑这个方法,到了createBatch这一步,除了创建人修改人创建时间修改时间这些自动生成的数据意外,其他的字段都是有数据的,对象也是有值的,所以就不知道是哪里爆空指针。通过拦截器获取securityUser对象,然后获取当前用户。定义Runable子类。

2024-04-11 00:05:35 398

原创 【Mysql】用户授权(GRANT)语法介绍和示例

如果权限被授予给一个不存在的用户,MySQL 会自动执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户指定口令。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从"localhost"改成"%"(2)host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%例如,可以删除已有的数据库或者创建一个新的数据库的权限。

2024-04-01 10:06:21 2215

原创 导入csv文件表头字符串出现zwnbsp字符(零宽度空白字符)处理

取出解析结果集的第一行,并且截取出了表头的英文名称,然后判断英文名称在字段列表中是否存在。第一个英文名称为“AC_BAL”,而字段列表明明有这个值,但是匹配结果却是空的。该CSV文件的编码格式是 带有UTF-8-BOM,它与我们常用的UTF-8编码格式不同;即文件的开头有没有 UFEFF。这样就会造成生成数组的第一个元素,无法进行判断匹配。既然匹配不上,就不能仅靠肉眼去观察了,要把判断交给代码,在debug页面对字符串进行判断,判断结果true,那说明不是字段列表的问题,而是enName字段的问题了。

2024-03-14 17:47:37 599

原创 【Mysql】分页排序查询(Order by limit)出现数据丢失和重复

如果必须执行文件排序,则在找到第一个row_count之前,将选择所有与查询匹配的,没有LIMIT子句的行,并对其中的大多数或全部进行排序。在执行查询时,MySQL会根据查询优化器的决策来确定数据的检索顺序,如果没有明确的排序规则,结果集的顺序可能会随机,也就是说当我们用更新时间来做排序,而更新时间这个字段的值是不唯一的,同一个更新时间的数据有多条,那么在分页查询时,就可能会在不同页排序后取到相同的数据。出现的问题就是第二页的最后一条数据,和第三页的第一条数据是一样的,也就是出现了分页数据重复的问题。

2024-03-14 17:04:31 1027

原创 DataX及使用

DataX是阿里巴巴开源的一个异构数据源离线同步工具,用于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。任务提交命令:用户需要根据同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行命令提交数据同步任务即可。

2024-03-07 23:10:20 1098

原创 StopWatch的使用

stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比。

2024-02-25 13:32:01 518

原创 Java实现单点登录

(1)什么是Token?Token,也称为“令牌”,是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。比如如下形式:39faf62271944fe48c4f1d69be71bc9a(2)为什么使用Token。

2024-02-18 10:39:36 2162

原创 json字符串的处理

(1)JSON字符串创建JSONUtil.toJsonStr可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串。如果对象是有序的Map等对象,则转换后的JSON字符串也是有序的。/*** 转换为JSON字符串* * 被转为JSON的对象* @return JSON字符串*/@Test//map//对象Student beanString = new Student(1, 1, 1, "张三");//集合。

2024-02-18 09:59:49 894

原创 Elasticsearch添加7.17.10IK分词器

(5)把这个解压后的文件夹上传至服务器的/opt/elasticsearch/elasticsearch-7.17.10/plugins/analysis-ik下。中未找到7.17.10版本的发布版本,如歌ik版本和Elasticsearch版本不同安装后无法启动。(2)打开解压后文件夹里的pom.xml,修改pom.xml文件中的elasticsearch.version为指定版本。(1)下载elasticsearch-analysis-ik-7.x源码的zip压缩包,并解压。解压这个zip后看一下。

2024-01-15 19:03:13 637

原创 插件和工具汇总

能够自动拼接参数生成执行的SQL语句,可以更清晰看到执行本次接口调用的所有sql执行条数。在我们执行myabtis的时候,有的时候报错知道哪里错了,但是不知道具体的位置和参数,在使用Mybatis Log Plugin这个插件之后排查错误就很容易了。之前那个打印sql日志,只是打印大概的模型,这个是打印具体的SQL脚本。(4)然后debug执行代码之后 点击启动MyBatis Log 插件 就可以查看每一步执行的sql。(2)Installed安装之后重启,点击上方的Tools就能看到。

2024-01-10 10:15:51 1161

原创 post请求参数全大写后台接不到参数

开发过程中,我们一般都习惯用驼峰命名法,但是特殊情况要求请求参数全大写(或者首字母大写),测试验证的时候发现,接收不到请求参数。springMVC使用的是Jackson来解析json格式的请求报文,

2023-11-24 17:03:43 571

原创 软件工程一些图的画法

ER图,E就是实体,实体有一组属性;R是关系。找到系统中的实体以及实体关系就可以绘制出ER图。矩形的是实体,椭圆是属性,实体和实体之间的关系用菱形,关系也有属性。例如:学生有【学号、姓名】等诸多属性,是一个实体。课程有【课程名、学分】等属性,也是一个实体。而学生有选修课程的关系,所以这两个实体之间有个选课关系。而且选课还有成绩,所以在选修关系上有一个属性【成绩】,如果系统需要,也可以记录选修的时间等属性信息。

2023-11-09 14:36:44 2436

原创 【达梦数据库】学习笔记

一般连接信息可以到项目的配置文件里找,或者在项目的nacos配置里,nacos的访问链接就是url/nacos。选择module,我们可以看到dependencies中已经有了lib。(3)点击应用或者确定以后,重新点击idea右侧的数据库。选择libraries,点击“+”,选择java。选择新创建的lib文件夹,直接open即可。(1)打开idea,点击右上角的数据库。(2)把达梦数据库的jar包配置一下。(1)在根目录下创建lib文件夹。(4)编辑数据源的连接信息。(3)修改pom文件。

2023-11-07 17:21:31 2129

原创 电吉他学习笔记

(3)和弦,CAGED系统,了解和弦在吉他指板的各个把位,更快的学会并利用各种音阶琶音,弹奏即兴solo。三和弦,七和弦琶音(属7,小7,大7,减7)。(4连音模进/3/5/6连音模进,8分音符+16分音符+3连音练习节奏,练布鲁斯shuffle节奏,练swing节奏)(1)五声音阶+CAGED系统+布鲁斯,音乐就3样东西,旋律+和声+节奏,重点练习音阶+和弦+节拍。4音程,根音do与4度、5度,3度,小3度,小7度之间的音程关系。7大小调音阶,五声音阶,布鲁斯音阶,调式音阶,旋律小调和声小调。

2023-11-05 00:59:56 532 2

原创 【ElasticSearch01】学习笔记

确认是否真正启动成功,可以在浏览器的地址栏里输入 http://localhost:9200 进行查看(9200 是 Elasticsearch 的默认端口号)。直接双击 bin 目录下的 elasticsearch.bat 文件就可以启动 Elasticsearch 服务了。1)bin 目录下是一些脚本文件,包括 Elasticsearch 的启动执行文件。7)plugins 目录下可以放一些 Elasticsearch 的插件。6)modules 目录下是一些 Elasticsearch 的模块。

2023-10-16 09:16:17 194

原创 Java的File文件操作案例汇总

需求是上传Excel文件并读取Excel文件中的内容,根据获取的数据执行完某些业务操作后再将一些数据写回到excel中。前台使用FormData表单的方式请求后台,后台接收类型是MultipartFile,放置文件过大时会造成内存溢出需要转换为File类型。

2023-10-12 21:03:14 369

原创 Linux虚拟机克隆之后使用ip addr无法获取ip地址

有的虚拟机克隆过来以后不一定会有这个文件,没有的话就不要删除了,命令敲到70-如果不能补齐就代表没有。(5)然后删除Linux物理地址绑定的文件(该文件会在操作系统重启并生成物理地址以后将物理地址绑定到IP上)(2)删除UUID=49761f2d-fc70-4653-b913-5f4e419dafd0这一行。(1)ONBOOT=yes (在克隆得到的虚拟机中,这个应该是no,你改为yes,是否开机要启动)(4)设置完成以后,重启一下网卡,输入命令:service network restart。

2023-10-09 17:02:15 780

原创 日期相关工具类

Java 中 1.8 之前有 date 类,date 类到了 1.8 大部分的方法被弃而且 date 类如果不格式化可读性十分差,而 simpledateformat 方法中 format 和 parse 方法都是线程不安全的。1.8 之后出现了 localdate、localdatetime、localtime 这些类,而这些类使用了 final 来修饰,使得这些类是不可变的,一旦实例化,值就固定了,有点类似于 String 类,所以这些类都是线程安全的。

2023-10-07 14:04:38 393 1

原创 【RocketMQ】消息中间件学习笔记

Message Queue,是一种提供消息队列服务的中间件,也就是消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据,一般消息的量不会很大。(1)支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型(2)在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 (RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证)(3)支持拉(pull)和推(push)两种消息模式。

2023-09-22 11:51:43 126

原创 【EasyExcel&Hutool】excel表格的导入和导出,csv文件的导入导出

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

2023-09-22 11:50:13 4584

原创 【Redis】redis实现限流

我们可以把请求打造成一个zset数组,当每一次请求进来的时候,value保持唯一,可以用UUID生成,而score可以用当前时间戳表示,因为score我们可以用来计算当前时间戳之内有多少的请求数量,而zset数据结构也提供了zrange方法让我们可以很轻易的获取到2个时间戳内有多少请求。限流器每秒会产生X个令牌放入令牌桶,调用接口需要去令牌桶里面拿令牌。针对固定窗口限流的问题,可以采用滑动窗口来优化,所谓滑动窗口就是设置的时间窗口的起始和结束时间是不断变化的,时间差值不变,允许的请求数量不变。

2023-09-15 15:11:28 768

原创 【HashMap】遍历读和遍历删除

【5】方法五:stream流遍历以及lambda表达式遍历。【4】方法四:entrySet()迭代。【3】方法三:keySet()迭代。【一】遍历读HashMap。【1】方法一:for循环。【2】方法二:迭代器。

2023-09-12 16:28:39 787

原创 【MapStruct】对象转换

有时候,对于某些类型,无法通过代码生成器的形式来进行处理。那么, 就需要自定义的方法来进行转换。这时候,我们可以在接口(同一个接口,后续还有调用别的 Mapper 的方法)中定义默认方法(Java8及之后)。@Data@Data@Data@Data@Mapper})只能存在一个default修饰的方法@Testuser.setAddress("江苏苏州");@Data@Data。

2023-09-11 15:55:00 559

原创 【Jenkins】pipeline流水线

pipeline就是一套运行于jenkins上的工作流程框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化;Pipeline 是Jenkins 2.X 的最核心的特性,帮助Jenkins 实现从CI 到 CD 与 DevOps的转变。Pipeline 是一组插件,让jenkins 可以实现持续交付管道的落地和实施。持续交付管道是将软件从版本控制阶段到交付给用户/客户的完整过程的自动化表现。

2023-09-11 14:13:31 2016 1

原创 【Springcloud】elk分布式日志

(1)什么是分布式日志在分布式应用中,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。所以我们使用集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。(2)为什么要使用分布式日志一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。

2023-09-08 14:39:16 891

原创 【Springcloud】Actuator服务监控

(1)什么是服务监控监视当前系统应用状态、内存、线程、堆栈、日志等等相关信息,主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。(2)为什么要使用服务监控服务监控在微服务改造过程中的重要性不言而喻,没有强大的监控能力,改造成微服务架构后,就无法掌控各个不同服务的情况,在遇到调用失败时,如果不能快速发现系统的问题,对于业务来说就是一场灾难。(3)spring boot actuator 服务监控接口actuator是监控系统健康情况的工具。

2023-09-08 11:32:22 540

原创 【Springcloud】Seata分布式事务

【Springcloud】Seata分布式事务【一】基本介绍(1)什么是分布式事务(2)为什么要使用分布式事务(3)seata分布式事务【二】下载方式【1】Windows平台安装包下载【三】如何使用【1】创建相关测试数据库和表【2】引入ruoyi-common-datasource依赖(包含seata配置)【3】服务配置文件【四】示例代码【1】Domain【2】Dto【3】Mapper【4】Service【5】ServiceImpl【6】Controller【7】Mapper.xml【五】测试验证【1】正常

2023-09-05 20:40:45 517

原创 【Springcloud】Sentinel熔断和降级

服务的稳定是公司可持续发展的重要基石,随着业务量的快速发展,一些平时正常运行的服务,会出现各种突发状况,而且在分布式系统中,每个服务本身又存在很多不可控的因素,比如线程池处理缓慢,导致请求超时,资源不足,导致请求被拒绝,又甚至直接服务不可用、宕机、数据库挂了、缓存挂了、消息系统挂了…对于一些非核心服务,如果出现大量的异常,可以通过技术手段,对服务进行降级并提供有损服务,保证服务的柔性可用,避免引起雪崩效应。(1)服务熔断。

2023-09-05 20:03:08 1478

原创 【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

现在需要根据集群名称,判断某个集群是否已经和库名SCHEMA_NM绑定了,因为CLUSTER_NM是拼接的字段,所以可以考虑模糊查询like,但是模糊查询匹配的不准确,我们想要确保完整准确的查询到集群名对应的记录。数据库中【库信息db】和【集群信息cluster】是一对多的关系,但是没有将集群信息存成多条,而是把集群名称和集群地址通过逗号拼接,然后存到一个字段里。在上述查询中,您需要将your_table替换为您的表名,your_column替换为您要进行匹配的字段名,'目标值’替换为您要匹配的值。

2023-08-30 10:15:39 811

原创 【HashMap】key和value能否为null

这就出现了一个问题:当A线程使用containsKey()进行判断时,发现有这个元素,当他调用get()取这个元素时,B线程加入了进来,B线程将这个元素移除掉了,此时A线程取得的值为null,A线程会以为自己取到了这个值,但实际上此时的null是未找到的null。发现没有,如果value值能为null,那么我传入对应的key值,他找到了返回的是value值,也就是null,当找不到时,他也返回的是null。key值不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。

2023-08-28 10:51:16 4984 1

原创 【Git】学习总结

(1)查看提交的历史记录,记录下最新的提交记录版本号以及需要回退的版本号(2)在Git->Reset Head->Rest Type中输入需要回退的版本号。(3)在Git->Reset Head->Rest Type中输入最新的版本号(4)操作完2.3的步骤后,一定要提交到本地仓库形成一次提交记录。(5)再推送到远程仓库即可。

2023-08-23 13:53:28 1305

原创 【Jenkins】持续集成部署学习

更新项目的话,commit的时候选择你修改的文件,push的时候,对应的url就是你要更新项目仓库的url。也就是只是局部进行修改。Gitlab用的端口是80,可能会跟其它应用冲突,并且Gitlab所需内存也很大,所以还是单独放在一个服务器上比较好。然后点击镜像工具,进入镜像加速器,即可看到阿里云加速器地址,把这个加速器地址配置到docker容器里。我们想要在当前的项目的基础上面,创建一个分支,相当于对于当前的项目复制一份,变为一个分支。登陆阿里云,点击控制台,然后点击菜单,找到“容器镜像服务”

2023-08-22 15:51:41 950

原创 【mysql&算法】在数据库中储存树形结构

图论中的邻接表是一种通过存储每个顶点的邻居列表(即相邻顶点)来表示图的方法。对于树,可以仅存储父节点,然后每个列表都包含一个值,该值可以与顶点一起存储在数据库中。这是最流行的表示形式之一,也是最直观的表示形式:表仅具有对自身的引用(图2)。然后,根节点NULL的父节点包含一个空值()。此方法的主要数据选择操作要求DBMS支持递归查询。PostgreSQL支持这种类型的查询,但是对于不支持DBMS的用户,可能需要通过使用临时表和存储过程来执行选择。以下是一些查询示例。(1)获取给定节点的子树。

2023-08-14 20:51:18 1932

空空如也

空空如也

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

TA关注的人

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