自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用keycloak自定义SPI接入外部用户角色

将项目打成jar包,放到keyclaok对应位置,启动keyclaok,创建用户联盟,成功之后可以在角色界面查看到对应库中的所有角色,并且点击对应用户可查看已经分配的角色。第一点:该类修改的地方在于校验数据库连接后添加所有角色到keycloak,这一步可以忽略掉,也可以在用户登录验证成功之后添加用对应的角色。我这里获取角色的字段是固定的,没有通过提供者工厂配置查询角色字段的对应,有需要的话可以参考用户实体字段的映射配置。2、修改用户实体(BaseUserEntity),添加角色关联id和角色名称。

2022-09-24 22:40:34 687 1

原创 使用keycloak自定义SPI接入外部用户登录

如果keycloak启动正常,打开控制台,点击左侧的 用户联合菜单,右侧的下拉列表中就能看到我们刚才添加的提供器,名字为 custom-user-provider。1、准备用户表,这些字段是必须的,不过字段名可以自定义,会在自定义的SPI中固定字段名,查询数据库的字段需要映射到实体的字段。6、创建提供者工厂,在keycloak管理界面添加用户联盟时的自定义的配置信息,主要是数据库连接。查看效果,点击用户然后查看所有能够查看到数据库的用户,然后就能用数据库的用户进行登录了!

2022-09-24 22:37:21 2335

原创 LeetCode 1460. 通过翻转子数组使两个数组相等

LeetCode 1460. 通过翻转子数组使两个数组相等

2022-08-25 17:09:40 175

原创 java中double和float精度丢失问题以及BigDecimal详解

java中double和float精度丢失问题以及BigDecimal详解

2022-08-25 16:58:41 1217

原创 LeetCode 最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = "luffy is still joyboy"输出:6提示:1 <= s.length <= 104s 仅有英文字母和空格 ' ' 组成s

2021-09-23 09:36:39 76

原创 RabbitMQ 发布确认模式

发布确认模式原理生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,rabbitmq 就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,rabbitmq 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号;此外 rabbitmq 也可以

2021-09-20 14:03:58 284

原创 LeetCode 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0 <= digits.length <

2021-09-16 18:41:20 91

原创 LeetCode 文本左右对齐

给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的最后一行应为左对齐,且单词之间不插入额外的空格。说明:单词是指由非空格字符组成的字符序列。每个单词的长度大

2021-09-12 19:03:13 134

原创 LeetCode 二分查找

二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设.

2021-09-07 14:48:16 49

原创 maven把jar包编译到本地仓库后再项目中使用

1、确保maven环境正常mvn -v2、修改配置文件本地仓库地址编译之前确保maven的配置文件 settings.xml 配置过本地仓库,否则可能再编辑器中手动修改了本地仓库地址,导致还是找不到 jar 包。。。3、编译到本地仓库mvn install:install-file -Dfile=xxx.jar -DgroupId=com.southgis.ibase.filemgr -DartifactId=officeTemplate -Dversion=3.0.1-SNAPSHOT -

2021-09-06 17:32:14 542

原创 docker容器和宿主机系统时间同步

今天突然发现 redis 中设置凌晨重置过期时间发现是在早上8点重置,和正常时间相差8个小时,导致统计出现误差,最初以为是服务器系统时间有问题,就修改系统时间为北京时间1.删除自带的localtimerm -rf /etc/localtime2.创建软链接到localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改完后查看系统时间查看时间和日期命令: date但是发现并没有啥用,后台想到是docker容器启动,进入容

2021-09-06 14:07:52 477

原创 JS解析JSON字符串,解析后数值的精度丢失问题

最近前端在解析后端返回的 json 数据时解析后发现数值类型的精度丢失,长度超过17位后面的所有数都变成 0 ;var obj = 'var obj = '{"id":50000000000050153333}';var jsonObj = JSON.parse(obj);console.log(jsonObj);';打印的结果为(16位之后都边成0):50000000000050150000解决办法:由于数据是通过第三方接口返回的 xml 字符串转换而来,所以决定在后端将所有字段转成字符

2021-09-05 19:02:46 3447

原创 LeetCode 航班预订统计(差分数组)

这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。示例 1:输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n

2021-09-03 14:18:58 135

原创 FastJson中@JSONField注解

最近做项目,需要json格式在服务器之间进行数据传输。但是发现 json 格式数据字段和 java 实体中的变量不对应,需要在后台做二次处理,将数据处理成实体中定义的格式,说白了就是实体类和map数据之间的转换!!!引入 alibaba 的 fastjson 包<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> &lt

2021-09-03 13:41:51 476

原创 LeetCode 救生艇

第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)示例 3:输入:people = [3

2021-08-27 15:00:33 174

原创 leetCode 反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。示例 1:输入:s = “hello”输出:“holle”示例 2:输入:s = “leetcode”输出:“leotcede”提示:1 <= s.length <= 3 * 105s 由 可打印的 ASCII 字符组成方法一、定义左右两个指针同时遍历,如果左指针是原音字母则开始查找右指针对应的原音字母,存在则交换位置,不

2021-08-21 19:35:17 126

原创 深度优先搜索(DFS)和广度优先搜索(BFS)

深度优先遍历(DFS)主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成;下面使用深度优先遍历一颗树:1、从根节点 1 开始遍历,它相邻的节点有 2,3,先遍历节点 2,2的相邻节点有4、5,遍历 2 的子节点 4,4没有相邻节点,结束向下遍历2、上图中一条路已经走到底(4是叶子节点,再无可遍历的节点),此时就从 4 回退到上一个节点 2,看下节点 2 是否还有除 4 以外

2021-08-17 19:25:51 100

原创 LeetCode 二叉树中第二小的节点

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第二小的值是 5 。示例

2021-08-13 13:45:20 126

原创 阿里云服务器发送邮箱失败问题

问题描述:在本地启动项目并发送邮箱完全木有问题,ok,上云,注册用户,一顿操作猛如虎,what?,邮箱验证码发送失败??,什么玩意??原因:发邮件的默认端口是25端口,而阿里云禁止通过STMP 25端口发送邮件,所以发送失败!!!!解决方案:(1)向阿里云申请开放25端口(需要审核)登录到阿里云管理控制台;鼠标移动到头像,可以看到下拉菜单,点击“安全管控”左侧栏“业务申请”–“25端口解封”注意:在正式申请前,您需要确认同意并承诺,保证TCP 25端口仅用来连接第三方的SMTP服务器,

2021-08-09 14:17:28 2971

原创 LeetCode 第 N 个泰波那契数

泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537提示:0 <= n <= 37答案保证是一个 32 位整数,即 answer <= 2^

2021-08-08 19:51:11 161

原创 docker部署rabbitmq

1、拉取镜像,自行选择需要的版本镜像地址:https://hub.docker.com/_/rabbitmq?tab=tags&page=1&ordering=last_updateddocker pull rabbitmq:3.9.1-management2、准备宿主机的挂载目录数据目录mkdir -p /yc/dockerRabbitMQ/data日志目录mkdir -p /yc/dockerRabbitMQ/log注意创建的目录权限需要777,否则启动会报错创建文件

2021-08-08 11:42:45 138

原创 linux环境安装RabbitMQ

一、下载安装包下载linux的rabbitmq包,下载地址:https://www.rabbitmq.com/download.html将下载后的文件拷到服务器中二、安装Erlang1、下载erlang需要的依赖sudo apt-get install build-essential sudo apt-get install libncurses5-dev sudo apt-get install libssl-devsudo apt-get install m4 sudo apt-g

2021-08-01 19:24:49 200

原创 LeetCode最高频元素的频数

元素的 频数 是该元素在一个数组中出现的次数。给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 。执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数 。示例 1:输入:nums = [1,2,4], k = 5输出:3解释:对第一个元素执行 3 次递增操作,对第二个元素执 2 次递增操作,此时 nums = [4,4,4] 。4 是数组中最高频元素,频数是 3 。示例 2:输入:nums = [1,2,2

2021-07-31 19:03:39 78

原创 RabbitMQ在windows环境安装

一、安装erlang语言,rabbitMQ是Erlang语言开发的所以先下载Erlang1、下载erlang,下载地址:https://www.erlang.org/downloads如果下载太慢可用这个地址下载:https://erlang.org/download/otp_versions_tree.html2、下载完成后直接双击安装,直接下一步就行3、配置环境变量4、验证配置是否生效二、安装rabbitmq1、下载rabbitmq,下载地址:https://www.rabbit

2021-07-31 18:22:21 319 1

原创 docker部署mongodb挂载数据以及mongodb迁移数据

mongodb备份数据由于之前是在本地启动的mongodb服务,现在需要用docker容器部署,数据需要把之前的数据导出来使用mongo自带命令来迁移数据,思路是先导出集合数据再导入到数据库中1、导出命令:mongoexport语法:mongoexport -d dbname -c collectionname -o filepath --type json/csvmongoexport -d ycblog -u yc -p ycblog -c clickNum -o /yc/mongodb/

2021-07-29 19:37:19 1380

原创 leetCode 检查是否区域内所有整数都被覆盖

给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。示例

2021-07-25 17:04:33 175

原创 jenkins升级报错An attempt to save the global configuration was made before it was loaded

今天有点心血来潮,看到管理中有一个新版本提示,可以直接点击自动升级,就把jenkins自动升级到了2.305,重启之后就直接爆炸进不去java.lang.IllegalStateException: An attempt to save the global configuration was made before it was loaded at jenkins.model.Jenkins.save(Jenkins.java:3379) at jenkins.model.Jenkin

2021-07-19 15:04:56 3872 2

原创 java中HashMap与ConcurrentHashMap

HashMap(java1.7)简单来说,HashMap是一个Entry对象的数组。数组中的每一个Entry元素,又是一个链表的头节点。底层基于 数组+链表 组成;put操作1、判断当前数组是否需要初始化。2、如果 key 为空,则 put 一个空值进去。3、根据 key 计算出 hashcode。4、根据计算出的 hashcode 定位出所在桶。5、如果桶是一个链表则需要遍历判断里面的 hashcode、key 是否和传入 key 相等,如果相等则进行覆盖,并返回原来的值。6、如果桶是空的

2021-07-18 18:03:52 269

原创 LeetCode 在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0方法一、直接循环判断,与target相等数量加一public int search(int[] nums, int target) { int count = 0; for (int num : nums) { if(num == tar

2021-07-18 15:37:45 59

原创 LeetCode H 指数 II

给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照 升序排列 。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"示例:输入: citations = [0,1,3,5,6]输出: 3解释: 给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了

2021-07-15 18:57:49 90

原创 java下载文件(多个文件进行打包下载)

最近遇到需求要下载材料清单的附件,一个清单下面可能存在多个文件,只存在一个附件直接下载该附件,如果存在多个附件将所有附件打包压缩之后下载压缩包,记录下文件下载以及文件压缩的处理public void downLoadMaterialFile(HttpServletResponse response) throws Exception { //获取附件路径(数据库获取) ArrayList<String> filePathList = new ArrayList<>(

2021-07-15 14:56:39 5259 3

原创 LeetCode 面试题 17.10. 主要元素

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2输入:[3,2]输出:-1示例 3:输入:[2,2,1,1,1,2,2]输出:2方法一、遍历数组,如果map中的key存在当前遍历的值,则获取该key的value并加1,同时重新将改value赋值给该key,如果当前key的value值大于数组长

2021-07-13 18:52:07 110

原创 LeetCode 和相同的二元子数组

给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分。示例 1:输入:nums = [1,0,1,0,1], goal = 2输出:4解释:有 4 个满足题目要求的子数组:[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]示例 2:输入:nums = [0,0,0,0,0], goal = 0输出:15提示:1 <= nums.length <= 3 * 104num

2021-07-09 11:18:17 83

原创 springboot启动报错Bean with name ‘xxxxService‘ has been injected into other beans

今天在本地测试启动项目的时候报错:Bean with name ‘commonService’ has been injected into other beans [] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is o

2021-07-08 13:45:09 1793

原创 Java中Map集合实现类HashMap、Hashtable、WeakHashMap、EnumMap

最近发现map集合不简单啊,整理一下子(虽然都是百度找,但这不是重点,重点是需要重新过一遍Map集合)。关系图虚线箭头表示实现,实线箭头表示继承图中可以看到,所有Map的实现类都继承Map接口,其中抽象类AbstractMap是Map接口的一部分实现,而Map的所有实现类都继承了AbsctractMap这个抽象类Map将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值删除该Map对象中所有键值对;void clear();查询Map中是否包含指定的key值;boo

2021-07-06 18:50:22 197

原创 JS在父页面调用iframe嵌入的子页面方法

最近遇到需求,需要在父页面嵌入其他页面,又需要获取父页面中的字段值作为参数调用子页面的JS方法,从而改变子页面中的内容(脑壳痛!!!没办法,客户是上帝!!!)简单记录下操作方法,方便后续使用:父页面:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge">

2021-07-06 17:52:27 1136

原创 Linux与Windows路径名和文件名最大长度限制

最近发现在linux服务器下创建文件报错,找半天找不到问题,文件就是创建不了,最后发现是由于文件名称太长导致文件创建失败,我就说之前看其他人创建文件怎么都用随机字符串来命名,原来还有这种坑啊,果然一些坑只有自己踩过才知道!!!**Linux路径名和文件名最大长度限制**UNIX标准对路径名和文件名最大长度限制做出了说明,但其上限值在实际应用长过小,Linux在具体实现时提升了该上限,该限制在Linux的 /usr/include/linux/limits.h 中做出了说明,具体如下:#ifndef

2021-07-06 17:41:16 2075

转载 multipartFile获取文件名遇到的问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-07-06 17:31:23 7332

空空如也

空空如也

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

TA关注的人

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