自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(865)
  • 资源 (2)
  • 收藏
  • 关注

原创 Lucene及概念介绍

当我们的查询设计到多个小块时,查询效率会降低,因此需要合并多个小块来提升查询效率,这个操作就是索引合并。查询语句主要分为term和操作符两部分,term就是分词的匹配项,而操作符用于描述本次查询的多个term之间的匹配关系。原始Document拆分成倒排索引和新的查询语句拆分成允许被搜索的选项的操作都会涉及到”分析“分词就是把文本进行分割,形成多个小的Item,建立索引就是将分词和原数据建立关联关系。:字段,是key-value格式的数据,对比实体类的字段。分词器:将文本进行分割,拆分成索引的工具。

2024-03-31 13:48:18 812

原创 自定义注解校验

在日常开发中经常会用到String类型的数据当作数值进行映射,势必会做出数值范围的校验,可以通过自定义注解的办法简化代码实现,减少冗余代码。String到枚举值的反向解析和验证也是比较常见的问题,也可以通过自定义注解的方式简化此类解析判断。注意,枚举需要保持类型一致:String,都存在这样的of方法。groups,payload是必须的。3. 自定义errorMessage。1. 允许null值跳过校验。2. 边界值开区间、闭区间。

2024-03-06 15:40:35 252

原创 注解校验备忘

用于限定float,double,BigDecimal的格式, 包括integer(整数部分长度),fraction(小数部分的长度)用于byte,short,int,long,BigDecimal,BigInteger,CharSequence,包含当前值。用于元素的长度,适用于String,Array,List,Map,包含min和max的数值。包含当前值,适用于int,long,float,double。用于String类型,表示不为空,并且长度大于0。仅用于字符串,用于限定长度,包含边界值。

2024-03-06 14:35:02 325

原创 Mybatis使用误区

在开发过程中遇到实体类是String,数据库类型是Int,数据。插入失败但无异常抛出。

2024-03-01 17:22:19 363

原创 SpringBoot使用本地jar包

2024-02-29 10:29:17 243 1

原创 防止脚本并发执行(Linux文件排他锁)

100 是fd标识,用于并发获取文件锁。-xn 表示x排他锁,-n获取锁失败直接返回1而不是等待。

2024-02-20 11:21:07 81

原创 一些整洁代码的原则

很简单的例子,在同一个文件中可能会定义多个方法,方法之间存在着依赖关系,那么依赖的方法之间的定义顺序极大地会影响代码的阅读难度,因此保持一种阅读者便利的想法,在写作的时候就不会东一头,西一头。但是,当我们想要给原有的代码逻辑发生变更的时候,但是又不太想引入新的问题,我们就可以给这个接口一个新的实现,然后再逐步把旧的接口中的功能迁移到新的上来,这就很完美了。有的地方用这种方式,有的地方用另外的风格,这会让阅读代码的人感到头疼,因此,我们要养成一致的代码风格的习惯。7. 定义显式的参数,而不是隐晦的。

2024-02-03 12:05:57 319

原创 npm安装缓慢

npm config set registry https://registry.npmmirror.com

2024-02-01 15:48:43 231

原创 同时支持json和xml请求

【代码】同时支持json和xml请求。

2024-01-17 14:40:34 361

原创 【疑难杂症】windows打不开我的电脑

原文链接:https://www.zhihu.com/question/378462777/answer/3355642051。进入HKEY_CLASSES_ROOT\PackagedCom\ClassIndex 路径。尝试win + R 打开运行,输入regedit打开注册表,重启电脑,会中间更新配置、清理配置,耐心等待即可。4. 给Users授权读取权限。3. 用户名称填 Users。1. 右键目录,设置权限。

2024-01-10 09:00:54 358

原创 【坑备注】自定义@Repeatable注解

这里指定了@Repeatable注解,支持多次使用相同的注解想要这样的使用方式生效,需要采用一个包裹性的注解问题来了:1. 当field字段上只用一个@TabIndex注解,那么下面的代码始终是null想要获取TabIndex注解,是可以的2. 当field字段上用多个@TabIndex注解,那么下面的代码始终是null想要获取TabIndex注解,是可以的。

2023-12-15 14:08:41 424

原创 前端使用JWT时无法获取Authorization请求头

是因为后端没有解决跨域问题:补充下面的代码即可。

2023-11-22 16:42:30 210

原创 基金交互文件汇总

TA 文件名称 文件含义 方向 01 文件 账户申请文件 ⬆️ 02 文件 账户确认文件 ⬇️ 03 文件 交易申请文件 ⬆️ 04 文件 交易确认文件 ⬇️ 05 文件 基金账户对账文件 ⬇️ 06 文件 基金分红文件 ⬇️ 07 文件 基金行情文件 ⬇️ 08 文件 基金公告文件 ⬇️ 09 文件 红利汇总文件 ? 10 文件 日交割汇总文

2023-10-11 10:42:34 172

原创 自定义字体跨域问题

使用base64的方式引入到css文件中,通过css加载即可。

2023-09-05 13:20:08 321

原创 骚操作慎用之Comparator.comparing

在使用Comparator.comparing方法的时候,如果直接使用方法引用,当取值为null时,会导致空指针。当两个值均为null时,必现。

2023-07-03 21:58:35 342 1

原创 partitionBy和groupingBy的使用区别

partitionBy是典型的二分,groupingBy是典型的多分组。二者在使用上没有太多的区别,唯一不同在于,当实际分组只有一组时,groupingBy返回的Map结果中Entry只有一个,而partitionBy会返回两个:true / false,不存在的分组List为空的List(不是null)

2023-06-07 16:27:26 190

原创 JVM概览:内存空间与数据存储

顾名思义就是用于存储方法中的局部变量的,包括入参。其中实例方法的局部变量数组的第一个元素是调用这个方法的实例的引用,入参从第二个参数开始,而静态方法从第一个参数开始。虚拟机栈存在着一个个栈帧,一个栈帧表示一个被调用的方法,栈帧在方法调用的时候入栈,在方法执行完毕的时候出栈。,用于数据操作,例如方法的输入和输出运算,都会使用到操作数栈。局部变量中基础类型数据、对象的引用存储的位置,线程独立的。用于JNI本地方法操作的栈,线程独立的。引用类型中包含的引用类型变量的引用。引用类型中包含的引用类型变量的值。

2023-03-11 11:32:59 468 1

原创 JVM的内存回收及常见算法

在进行上面的标记过程的时候,如果有新的对象被创建,而刚好被标记过程错过的时候,就可能错误地把有用的对象给回收掉,因为标记位是0.因此,Stop the World正如其名,将应用的核心线程停掉,开始专心标记。对对象进行引用数量的标记,没有引用的对象标记是0,有引用的对象标记是引用数量。执行完第五六行以后,按道理,栈上已经不在引用这两个对象,可以被回收了,但是因为n1和n2相互引用,导致引用计数为1,无法正常回收。如果仅仅标记栈直接引用的对象,p1就会被回收,但是p1间接被list引用,因此也被标记为1。

2023-03-11 08:48:08 520 2

原创 深入堆空间

垃圾回收器在判断哪些对象该回收的时候,需要一个标准,那就是从GC Root开始,看看哪些对象能访问到,访问到的就认为还有用,保留下来,其他的回收掉。而这些GC Root可以认为是一些特殊的对象,本质上也还是对象。

2023-03-10 09:02:16 301

原创 深入元空间

完成一次垃圾回收,此时O类型的两个对象已被清理,剩下的P类型的对象和类加载器的实例一起被复制到了Survivor区域。但是,此处虽然O类型不再使用,但是对应的元空间的内存占用不能被释放,因为这个类加载器,不仅仅负责O类型,还负责P类型,而P类型还存在实例,因此不可以被回收。此时,存在两个类型为O的对象,一个类型为P的对象,对应的类加载器的实例是深蓝色的那个圆。bootstrap类加载器和application类加载器是不会被回收的,而动态类加载器,在其负责加载的类对象不再使用时会被回收。

2023-03-07 23:07:43 786

原创 内存泄漏分析及规避方法

这里使用i作为计数器,每创建1000个Person对象,就会把ArrayList重置一下,这样,上一轮的1000个对象就不在被引用,垃圾回收器就可以正常回收这些对象了。字符串的频繁拼接时,注意使用StringBuilder进行替换,因为每次拼接都会产生新的对象,然后存储在字符串常量池,而字符串常量池被分配在对内存中,可能导致堆溢出。内存泄漏就是堆内存中的某些对象,你虽然不再使用它们了,但是垃圾回收器还回收不了他们,长此以往内存就慢慢耗没了。一方面内存占用不可控,另外资源难以回收,因为对象一直被占用着。

2023-03-06 23:02:17 2945

原创 Stream的创生、处理、终结

mapToInt / flatMapToInt, mapToLong, mapToDouble转换成具体的类型流,具有统计学功能。检查allMatch, anyMatch, noneMatch,全部符合,存在符合,全不符合。reduce是对每个数据依次进行计算,可以带初始值,针对每个元素做一元或二元运算。distinct去重,只保留唯一的,类似于使用HashSet。flatMap将Stream中的集合展开,汇聚成单个元素的流。filter实现过滤,留下的都是。empty()方法创建空的流。

2023-02-23 19:54:42 202

原创 elasticsearch更新和删除

在更新时,可以设置retry_on_conflict参数,设置重试次数,一般设置为3次。当然,防止并发操作,推荐使用带版本的操作,即/索引/类型/id?如果文档存在,则使用doc进行字段更新,否则使用upsert创建新的索引文档。在更新文档的时候,也可以直接指定版本重新建立索引,而不是使用_udapte。通过DELETE操作,指定_query参数,删除满足检索条件的所有文档。通过DELETE请求,可以完成指定文档的删除,/索引/类型/id。在原有文档已经存在的情况下,可以对原有的文档部分字段更新,使用。

2023-02-11 22:26:01 1191

原创 elasticsearch映射及字段类型

此处对tags建立了两个匹配关系,一个是analyzed,对每一个单词建立索引,另外一个是针对整体的字段进行映射,not_analyzed。支持的数值类型和JAVA完全一致,byte,short,int,long,float,double。这里指定了new-events类型的字段映射关系,声明了一个新的字段host,类型上String。我们前面建立索引的时候使用的是put方法,指定了文档的id。将某一字段建立索引的同时,使用不同的策略生成新的映射关系。默认不指定字段进行搜索的时候,检索范围是所有的字段。

2023-02-11 22:04:38 821

原创 elasticsearch索引与搜索初步

hits表示结果数据,其中total表示的是总的命中的数据条数,max_score表示的是评分,这里只返回了一条数据,是因为请求参数中的size是1,限定了返回1条数据。我们可以使用PUT方法创建索引,通过指定“索引”、“类型”、“文档ID”锁定文档,通过参数指定文档的数据。使用_mapping参数可以查看当前类型的映射关系,要注意的是,映射关系是在类型这个层面的。这里给到了创建的索引名称、类型、id,已经对应的版本,created表示创建索引的结果。这里通过default_field指定了查询的字段。

2023-02-11 20:23:36 755

原创 elasticsearch原理初步

ES在本质上就是两个操作,建立索引和使用索引。建立索引就是将数据列出一个目录出来,便于检索、过滤、聚合等操作。使用索引就是针对数据建立的索引执行查询。

2023-02-11 14:42:28 96

原创 elasticsearch简介

因为ES不仅仅支持JAVA API的交互,还支持REST API交互,接入ES的灵活性更大了。数据的事务支持使用关系型数据库,通过一定的同步机制将数据建立索引,存储到ES中,仅使用ES的搜索功能。使用ES存储数据,并完成数据搜索功能。ES自身可以作为NOSQL存储使用,通过复制提高可用性,也存在持久化机制,避免数据的丢失。IDF表示逆文档词频,当这个词在其他文档中出现频率较低时,这个词的权重才会更高,相关性越强,反之,则没有区分性的价值。倒排索引就是将“目录-数据”的格式,转换成“数据-目录”的格式。

2023-02-11 10:15:49 141

原创 布隆过滤器

布隆过滤器的目标尽可能小的内存占用,完成哈希表的功能,判断给定Key是否存在,true/false的问题。由于存在假阳性的判断结果,所以一般作为预处理(预判断)使用。布隆过滤器的缺点布隆过滤器有失败率,是指实际不存在数据判定为已经存在(假阳性)。布隆过滤器的使用策略来了一个key后,经过多个哈希函数的判断,如果每个哈希都认定这个key存在的话,那么布隆过滤器视为这个key已经存在,否则,视为不存在。但也有可能与某个key发生碰撞,本来不存在的key,布隆过滤器视为存在,产生假阳性判断。

2023-02-03 07:58:10 446

原创 剑指Offer系列:二叉搜索树的第k个节点

给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证n个节点的值不一样。所以,我们可采用中序遍历的方式,找到第k个遍历到的节点,就是第k小的节点。该二叉树所有节点按结点值升序排列后可得[2,3,4,5,6,7,8],所以第3个结点的结点值为4,故返回对应结点值为4的结点即可。数据范围:0≤n≤1000,0≤k≤1000,树上每个结点的值满足0≤val≤1000。

2023-01-11 23:46:15 175

原创 剑指Offer系列:按之字形顺序打印二叉树

其实是二叉树层序遍历的一种变形,需要考虑的是逆序打印的场景,可以借ArrayList的add(0, val)的方式实现,但是性能不高。给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)该二叉树之字形层序遍历的结果是 [[1], [3,2], [4,5]]2023/01/01 13:52:43 by: 程序员·小李。例如:给定的二叉树是{1,2,3,#,#,4,5}要求:空间复杂度:O(n),时间复杂度:O(n)

2023-01-11 23:44:03 80

原创 剑指Offer系列:二叉树的深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1。数据范围:节点的数量满足 0≤n≤100 ,节点上的值满足 0≤val≤100 进阶:空间复杂度 O(1),时间复杂度 O(n)2023/01/01 08:22:26 by: 程序员·小李。将每一条链路递归到,看一下最大值是多少。

2023-01-11 23:42:11 133

原创 剑指Offer系列:删除链表中重复的结点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5。使用辅助栈完成去重,当栈为空直接压栈,栈中存在元素时,通过peek方法判断是否重复,如果出现重复则直接找到下一个不重复的元素,同时修改上一个引用的指向。数据范围:链表长度满足 0≤n≤1000 ,链表中的值满足 1≤val≤1000。2022/12/31 23:15:41 by: 程序员·小李。

2023-01-11 23:39:57 85

原创 剑指Offer系列:复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。两次遍历完成题目,第一次遍历复制值,并将新旧对象建立映射关系。第二次遍历,根据映射关系复制对象之间的指向关系。2022/12/31 22:27:14 by: 程序员·小李。

2023-01-11 23:37:46 80

原创 剑指Offer系列:两个链表的第一个公共结点

这里的解题思路特别巧妙,假如两个链表的长度分别为n和m,将两个链表均遍历一次,那么拼接起来的链表的长度为n+m,是等长的。如果有公共节点,那么组合后的链表后半部分一定是一致的。输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。2022/12/31 20:53:50 by: 程序员·小李。

2023-01-11 23:33:23 158

原创 JVM垃圾回收

在标记的过程中,很可能还会被重新引用,或者产生新的对象,很容易和标记线程发生冲突,因此,stop the world简单粗暴,将暂停应用内的线程,开始正式标记工作。在对象上面维护一个引用计数器,每有一个引用指向自己,计数器+1,每有一个引用不再指向自己,计数器-1,垃圾回收那些计数器为0的对象。删除后,会空出内存位置,可以在空的位置继续创建对象,但是,来个占用内存较大的对象可能就没法创建了。将继续引用的对象标记为1,不再引用的对象保持为0,这样就可以回收标记是0的对象了。

2022-11-10 08:59:35 325

原创 Zookeeper几种应用

在创建完成后,master节点需要监听workers和tasks节点的变动,因为master需要关注这些变动,才能完成task的分配。1. master,用于检测新的task、worker的添加,将新的task分配给worker处理。3. 当master节点被删除,会有事件触发,此时继续尝试创建master节点,成功补位。2. worker,将自己注册到系统,被master发现后,监控task。然后创建一个新的节点到assign下面,用于等待分配任务,并监听这个节点。当处理完成,创建一个status节点。

2022-11-06 18:20:13 7806

原创 Zookeeper服务端

服务运行模式可以是单体服务,也可以是集群服务。单体服务只有一台服务器,没有备份,没有状态同步。集群服务有多台服务器,避免单点故障导致的不可用问题,存在备份,存在状态同步。通常更倾向于集群模式。集群中的机器数量我们在搭建Zookeeper集群(其他集群也可以参考)时,该如何考虑服务节点的数量呢?这里的节点我们在机器的维度考虑。一般采用,即,如果有五个机器提供服务,那么至少要有三台可用,即容忍有2台机器同时down掉。在客户端的单次操作请求时,至少要完成三台机器上的数据持久化才能告知客户端操作成功。

2022-11-06 14:59:28 1070

原创 Zookeeper初步

在setData和delete操作的时候,为了解决并发问题,客户端需要指定版本号,当你的版本号与当前的版本号不一致时,说明你的版本号是旧的,操作会失败。有序节点指的是按照创建顺序为你生成一个自增的id,通过id维护节点的顺序,当然,持久化节点可以是有序的,临时节点也可以是有序的。当存在资源的协调使用,或者采用Zookeeper实现分布式锁等类似的场景时,可以使用有序节点,来协调处理的顺序。当节点的存在与服务节点或者master节点的活性绑定的时候,需要使用临时节点。强一致性,排序,持久化。

2022-11-06 12:36:17 516

原创 JZ14 剪绳子

给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m

2022-11-04 22:26:19 73

原创 JZ81 调整数组顺序使奇数位于偶数前面

输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。数据范围:0≤n≤50000,数组中每个数的值 0≤val≤10000。[3,1,2,4]或者[3,1,4,2]也是正确答案。要求:时间复杂度 O(n),空间复杂度 O(1)

2022-11-04 22:12:21 74

lyric.html单页音乐播放器

单页音乐播放器

2021-08-01

m3u8播放所需的js插件

m3u播放插件

2021-04-05

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

TA关注的人

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