- 博客(56)
- 收藏
- 关注
原创 springboot整合minio步骤
springboot整合minio十分的简单,接下来使用springboot整合一下minio。minio有自己的api,为了方便使用,通常会封装成工具类,使用的时候直接调用即可。 第二步就是添加配置类,使用@Value可以方便之后修改相关参数。为了方便,我直接在controller中测试,不写service层了。application.yml文件。首先需要导入minio的依赖。
2023-11-14 20:21:09
422
原创 dfs力扣1993树上的操作
首先题目给出一个parent数组,里面记录了每一个节点的父结点是谁,根据这个数组,我们可以从一个节点向上搜寻,一直找到树的根节点,可以用来解决第三个方法锁升级的向上搜寻。 然后就是题目要求要记录是谁给节点加的锁,这个需要额外开一个数组来记录每个节点的锁持有者信息,因为题目明确表明加锁的用户数据范围是,所以锁数组不需要进行初始化,默认的0值就可以标识此节点目前没有用户加锁。
2023-09-23 20:07:46
254
原创 整合minio时出现的错误
这个错误是我在整合minio时报的错,说实话遇到这个错误我还是很头大的,因为之前在springboot项目中整合过一次minio,当时报的错误跟这个差不多,都是okhttp版本依赖问题,之前是因为,我的minio依赖里面自带的okhttp包的版本过低,需要将minio包中的okhttp包剔除,自己手动引进一个更高版本的okhttp包。好家伙,原来搁这了,那现在就是想办法把这个版本号给覆盖掉就行了,在我的这个项目的父工程里加入这个okhttp的版本号,在这个项目里引用这个版本号,重新启动,问题解决。
2023-09-18 20:30:12
1260
1
原创 Springboot整合第三方登录
采用第三方登录可以避免重新注册账号的繁琐,也不需要再为密码和昵称发愁,而第三方登录有一个比较好用的包,里面整合了多种第三方登录,开箱即用,非常方便。就是JustAuth
2023-06-18 09:53:00
1221
原创 Java实现文件分片上传
简单的说就是本来是需要一次搬一个很大的东西,比如是一大桶水,一次搬起来比较费事费力。我们可以把这一大桶水分装在几个或几十个或者更多的小瓶里,这样搬运起来就比较省力,也比较方便,等到目的地后,我们在将这些小瓶子里的水都倒回大桶里,这样就完成了一大桶水的搬运工作。这个将一大桶水分成许多小瓶子的过程就是分片的过程,最后将水倒回大桶的过程就是合并的过程。分片与合并也是文件分片上传的重要过程。
2023-06-11 17:16:15
3449
2
原创 使用docker和minio实现对象存储
Minio是一个开源的`分布式文件存储`系统,它基于 Golang 编写,虽然轻量,却拥有着不错的高性能,可以将图片、视频、音乐、pdf这些文件存储到多个主机,可以存储到多个Linux,或者多个Windows,或者多个Mac,Minio中存储最大文件可以达到`5TB`。
2023-05-30 23:29:19
1558
1
原创 Docker的简单使用
Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
2023-05-30 00:19:57
454
原创 JUC之手写一个简单的线程池
在之前介绍了线程池的快捷创建方式以及其中的隐患,紧接着介绍了线程池的标准创建方式,了解了线程池的基本构造后,我们可以自己尝试手写一个简单的线程池来加深我们对线程池的理解。
2023-05-20 23:02:20
480
原创 JUC之线程池的标准创建方式
因为使用Executors快捷创建线程池在使用时会有严重的潜在问题,因此在实战使用时一般不使用快捷创建线程池的方式在创建线程池,而是使用ThreadPoolExecutor的标准构造器去构建线程池。Executors工厂类中创建线程池的快捷工厂方法实际上是调用 ThreadPoolExecutor(定时任务使用ScheduledThreadPoolExecutor) 线程池的构造方法完成的。
2023-05-20 15:18:58
556
原创 JUC之Java内置锁的核心原理
原理:如果不存在线程竞争的一个线程获得了锁,那么锁就进入偏向状态,此时Mark Word的结构变为偏向锁结构, 锁对象的锁标志位(lock)被改为01,偏向标志位(biased_lock)被改为1,然后线程的ID记录在锁对象的Mark Word中(使用CAS操作完 成)。 Java内置锁是一个互斥锁,这就意味着最多只有一个线程能够获 得该锁,当线程B尝试去获得线程A持有的内置锁时,线程B必须等待或 者阻塞,直到线程A释放这个锁,如果线程A不释放这个锁,那么线程B 将永远等待下去。
2023-05-03 11:25:39
1090
原创 Elasticsearch之基本API操作
上传数据:使用POST请求,http://localhost:9200/ + 索引名称 + /_doc (+/3 指定数据的id,不加则使用默认生成的id),此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT。带参查询:URL带参,GET请求,http://localhost:9200/+索引名称+/_search/q=键名:值。获取单条数据:使用GET请求,http://localhost:9200/+ 索引名称 +/_doc/+ 数据的id。
2023-04-24 16:44:20
558
原创 JUC之Executors的4种快捷创建线程池的方法
newSingleThreadExecutor创建“单线程化线程池”newFixedThreadPool创建“固定数量的线程池”newCachedThreadPool创建“可缓存线程池”newScheduledThreadPool创建“可调度线程池”
2023-04-20 11:01:08
538
原创 JUC线程池之线程池架构
AbstractExecutorService是一个抽象类,它实现了 ExecutorService接口。AbstractExecutorService存在的目的是为 ExecutorService中的接口提供默认实现。
2023-04-13 11:45:21
276
1
原创 创建线程的几种方式
通过实现Runnable接口的方式创建的执行目标类,如果需要访问 线程的任何属性和方法,必须通过Thread.currentThread()获取当前 的线程对象,通过当前线程对象间接访问。其内部的执行过程为:启动Thread实例的run() 方法并发执行后,会执行FutureTask实例的run()方法,最终会并发执 行Callable实现类的call()方法。 TestThread类的关键点是重写了Thread类的run()方法, 将需要并发执行的用户业务代码编写在继承的run()方法中。
2023-04-02 17:17:10
293
原创 进程与线程
什么是进程呢?简单来说,进程是程序的一次启动执行。什么是 程序呢?程序是存放在硬盘中的可执行文件,主要包括代码指令和数 据。一个进程是一个程序的一次启动和执行,是操作系统将程序装入 内存,给程序分配必要的系统资源,并且开始运行程序的指令。
2023-03-26 10:04:56
403
2
原创 java虚拟机中对象创建过程
我们平常创建一个对象,仅仅只是使用new关键字new一个对象,这样一个对象就被创建了,但是在我们使用new关键字创建对象的时候,在java虚拟机中一个对象是如何从无到有被创建的呢,我们接下来就来谈谈在java虚拟机中一个对象的创建过程(仅指我们平常使用的对象,不包括数组对象和Class对象)。
2023-02-27 19:44:09
705
2
原创 Java类加载过程
一个类型从被加载到虚拟机内存中开始,到卸载到内存中为止,他的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preoaration)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备和解析三个部分统称为连接(Linking)。
2023-02-24 19:25:06
662
5
原创 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
2023-01-16 14:19:57
103
原创 连续子数组最大和
题目链接https://leetcode.cn/problems/maximum-subarray/这道题也算是见得次数比较多,但这次也算是有了自己的见解。先把我自己的解题代码粘出来int max = nums[0]; int number = nums[0]; for (int i = 1; i < nums.length; i++) { if(number < 0){ number = nums[i]; }else{ number += nums[i]; } max = Math.ma
2022-12-11 16:41:53
176
原创 Linux安装配置redis
从redis官网下载redis压缩包,大家根据自己的需求下载即可(不一定要最新版)。上传到 /usr/local目录下;在进行解压。
2022-12-04 16:27:09
468
1
原创 springboot使用redis实现定时任务
redis切换数据库因为我是将不同的信息存到了redis不同的数据库,所以需要有一个redis切换数据库的操作。
2022-11-28 14:46:38
1586
原创 ArrayList的扩容机制
ArrayList是基于数组实现的集合,虽然是基于数组实现,却比数组要方便许多,比如初始化时可以不指定其长度;指定长度后,其大小也不是固定不变,会跟据你存储的元素的逐渐增多而增加;等等。今天说一下ArrayList的扩容机制是如何实现的。
2022-11-06 18:11:56
681
原创 mysql事务
事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。
2022-10-30 16:56:19
308
原创 mysql嵌套查询语句
一个 SELECT-FROM-WHERE 语句称为一个查询块。将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为嵌套查询。
2022-10-23 17:32:02
478
原创 Stream流的首次使用
Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。数据源流的来源。可以是集合,数组,I/O channel, 产生器generator 等。聚合操作类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。中间操作都会返回流对象本身。这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。
2022-10-16 15:11:04
227
原创 swagger报Illegal DefaultValue null for parameter type integer错误
**原因是有个默认值是空字符串的变量转换成Integer类型时异常。
2022-08-05 22:35:51
490
1
原创 springboot拦截器与swagger冲突问题
**主要是当WebMvcConfigurationSupport和WebMvcConfigurer两者同时出现在项目中,能被执行的只有WebMvcConfigurationSupport,WebMvcConfigurer会被忽略
2022-08-05 22:15:11
1009
原创 org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败
org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[]启动失败
2022-07-31 00:12:46
6925
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人