- 博客(873)
- 资源 (2)
- 收藏
- 关注
原创 贪心算法与盛雨水问题
那我们来分析,怎么样能达到最佳的结果呢?1. 换i,按当前的状态看,i是较短的那个,因为 3 < 4,所以i是较短的那个。当i右移的时候,遇到的新的板子,这就把产生容量变化的影响因素变成了板子的高度。否则你需要考虑是长度导致的容量变化还是板子的高度导致的容量变化。所以从上面来看,换i是最合适的。其实是每次换一个短板,这样就找到一个让容量变大的可能性。2. 换j,按当前的状态看,j是较长的那个,当j左移的时候,遇到的新的板子,计算当前的容量,然后换种可能性。,那么新的容量一定变小。,新的容量更会变小。
2024-10-26 14:01:15
532
原创 贪心算法与分数背包
我们把每个物品的性价比计算一下,排个序,是不是就能看出来哪个物品性价比最高?那么剩下的策略就是每次优先选择性价比最高的那个。这个问题其实就是个性价比的问题,性能就是价值val,价格就是重量wgt,这里不能称为价格了,应该叫代价。那么,如果我们每次选择的时候,都尽可能使用性价比最高的那个物品,是不是就可以找到最佳的选择了?当然,因为可以选择方案中的物品的一部分,实际价值 = 单位价值 * wgt。上文说到,贪心算法基于当前的现状,找到最优的选择进行决策。这里的性价比,就是 val / wgt。
2024-10-26 13:28:26
447
原创 贪心算法与局部最优解
所以,贪心算法有个高效的优点,有个简单粗暴的逻辑,但是不一定就是全局最优的解决办法。问题在于,我如何用最少的数量,拼凑出目标值。跟用磅秤称体重一样,先选一个预估比较接近的秤砣,然后再不断往上加。如果是有币值1元,20元,50元的三种硬币若干,拼凑60元。此处的决策方式就是,每次基于当前的金额,选择一个最接近但不超过金额的硬币完成拼凑。,找到最佳的选项,然后执行。它和动态规划的区别就是,动态规划会。其实我们可以想到一个最少的策略,就是3个币值20元的。1. 选择最大币值的50元,剩余60-50元。
2024-10-26 13:18:54
541
原创 ES可以干什么?安装ES
单个节点也可以构成集群,配置相同的节点自动构成集群。可以实现全文搜索,将所有的数据拆分完毕建立索引,加速搜索。3. 安装Mavel插件, 用于窗口交互、ES监控。2. 数据评分,按照给定的相似度计算方式进行搜索。3. 搜索提示、输入纠错。5. 打开终端测试连通性。
2024-09-04 23:56:51
413
原创 增广贤文摘录
夏虫不可语冰,不要对牛弹琴,试着把话讲给懂的人听,至少是愿意懂得人听。如若每次都像初见般看待两个人的关系,知道珍惜,那么到老也不会感到遗憾。万事万物,不是不贪图享受,不是有资本却不想达到,而是没有资本。红粉佳人逝去青春啥也不是,浪荡公子变成穷光蛋就再也浪不起来了。个人发展,和趋势有很大的关系,要顺势而为。人若只如初见,久处多少会出现问题。红粉佳人休使老,风流浪子莫教贫。相逢好似初相识,到老终无怨恨心。逢人且说三分话,未可全抛一片心。马行无力皆因瘦,人不风流只为贫。酒逢知己饮,诗向会人吟。
2024-08-08 02:36:45
307
原创 IDEA那些牛X的插件
Generate O2O:帮你生成两个类之间复制的代码。JetBrain AI Assistant:辅助写代码。activate-power-mode:代码震动效果。EASY Code:帮你生成mapper之类的代码。Java Bean To Json:类转Json。JSON Visualizer:Json可视化。Tongyi Lingma:帮你AI写代码。Leetcode Editor:懂得都懂。JSON to JAVA:json转类。Easy JavaDoc:帮你写注释。
2024-04-28 17:08:32
412
原创 LocalDateTime的使用
另一种解决思路采用LocalDateTime.withNano(0)去除时分秒的精度,看实际的业务需求处理。在Mybatis持久化LocalDateTime时,存在对微秒四舍五入的处理,这样可能出现不一致的问题。一种解决思路是把datetime的精度扩大为3,默认精度为0,这样会记录时分秒。
2024-04-26 13:39:00
317
原创 Lucene及概念介绍
当我们的查询设计到多个小块时,查询效率会降低,因此需要合并多个小块来提升查询效率,这个操作就是索引合并。查询语句主要分为term和操作符两部分,term就是分词的匹配项,而操作符用于描述本次查询的多个term之间的匹配关系。原始Document拆分成倒排索引和新的查询语句拆分成允许被搜索的选项的操作都会涉及到”分析“分词就是把文本进行分割,形成多个小的Item,建立索引就是将分词和原数据建立关联关系。:字段,是key-value格式的数据,对比实体类的字段。分词器:将文本进行分割,拆分成索引的工具。
2024-03-31 13:48:18
922
原创 自定义注解校验
在日常开发中经常会用到String类型的数据当作数值进行映射,势必会做出数值范围的校验,可以通过自定义注解的办法简化代码实现,减少冗余代码。String到枚举值的反向解析和验证也是比较常见的问题,也可以通过自定义注解的方式简化此类解析判断。注意,枚举需要保持类型一致:String,都存在这样的of方法。groups,payload是必须的。3. 自定义errorMessage。1. 允许null值跳过校验。2. 边界值开区间、闭区间。
2024-03-06 15:40:35
362
原创 注解校验备忘
用于限定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
409
原创 一些整洁代码的原则
很简单的例子,在同一个文件中可能会定义多个方法,方法之间存在着依赖关系,那么依赖的方法之间的定义顺序极大地会影响代码的阅读难度,因此保持一种阅读者便利的想法,在写作的时候就不会东一头,西一头。但是,当我们想要给原有的代码逻辑发生变更的时候,但是又不太想引入新的问题,我们就可以给这个接口一个新的实现,然后再逐步把旧的接口中的功能迁移到新的上来,这就很完美了。有的地方用这种方式,有的地方用另外的风格,这会让阅读代码的人感到头疼,因此,我们要养成一致的代码风格的习惯。7. 定义显式的参数,而不是隐晦的。
2024-02-03 12:05:57
421
原创 【疑难杂症】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
526
原创 【坑备注】自定义@Repeatable注解
这里指定了@Repeatable注解,支持多次使用相同的注解想要这样的使用方式生效,需要采用一个包裹性的注解问题来了:1. 当field字段上只用一个@TabIndex注解,那么下面的代码始终是null想要获取TabIndex注解,是可以的2. 当field字段上用多个@TabIndex注解,那么下面的代码始终是null想要获取TabIndex注解,是可以的。
2023-12-15 14:08:41
558
原创 基金交互文件汇总
TA 文件名称 文件含义 方向 01 文件 账户申请文件 ⬆️ 02 文件 账户确认文件 ⬇️ 03 文件 交易申请文件 ⬆️ 04 文件 交易确认文件 ⬇️ 05 文件 基金账户对账文件 ⬇️ 06 文件 基金分红文件 ⬇️ 07 文件 基金行情文件 ⬇️ 08 文件 基金公告文件 ⬇️ 09 文件 红利汇总文件 ? 10 文件 日交割汇总文
2023-10-11 10:42:34
559
原创 骚操作慎用之Comparator.comparing
在使用Comparator.comparing方法的时候,如果直接使用方法引用,当取值为null时,会导致空指针。当两个值均为null时,必现。
2023-07-03 21:58:35
916
3
原创 partitionBy和groupingBy的使用区别
partitionBy是典型的二分,groupingBy是典型的多分组。二者在使用上没有太多的区别,唯一不同在于,当实际分组只有一组时,groupingBy返回的Map结果中Entry只有一个,而partitionBy会返回两个:true / false,不存在的分组List为空的List(不是null)
2023-06-07 16:27:26
337
原创 JVM概览:内存空间与数据存储
顾名思义就是用于存储方法中的局部变量的,包括入参。其中实例方法的局部变量数组的第一个元素是调用这个方法的实例的引用,入参从第二个参数开始,而静态方法从第一个参数开始。虚拟机栈存在着一个个栈帧,一个栈帧表示一个被调用的方法,栈帧在方法调用的时候入栈,在方法执行完毕的时候出栈。,用于数据操作,例如方法的输入和输出运算,都会使用到操作数栈。局部变量中基础类型数据、对象的引用存储的位置,线程独立的。用于JNI本地方法操作的栈,线程独立的。引用类型中包含的引用类型变量的引用。引用类型中包含的引用类型变量的值。
2023-03-11 11:32:59
556
原创 JVM的内存回收及常见算法
在进行上面的标记过程的时候,如果有新的对象被创建,而刚好被标记过程错过的时候,就可能错误地把有用的对象给回收掉,因为标记位是0.因此,Stop the World正如其名,将应用的核心线程停掉,开始专心标记。对对象进行引用数量的标记,没有引用的对象标记是0,有引用的对象标记是引用数量。执行完第五六行以后,按道理,栈上已经不在引用这两个对象,可以被回收了,但是因为n1和n2相互引用,导致引用计数为1,无法正常回收。如果仅仅标记栈直接引用的对象,p1就会被回收,但是p1间接被list引用,因此也被标记为1。
2023-03-11 08:48:08
662
2
原创 深入堆空间
垃圾回收器在判断哪些对象该回收的时候,需要一个标准,那就是从GC Root开始,看看哪些对象能访问到,访问到的就认为还有用,保留下来,其他的回收掉。而这些GC Root可以认为是一些特殊的对象,本质上也还是对象。
2023-03-10 09:02:16
353
原创 深入元空间
完成一次垃圾回收,此时O类型的两个对象已被清理,剩下的P类型的对象和类加载器的实例一起被复制到了Survivor区域。但是,此处虽然O类型不再使用,但是对应的元空间的内存占用不能被释放,因为这个类加载器,不仅仅负责O类型,还负责P类型,而P类型还存在实例,因此不可以被回收。此时,存在两个类型为O的对象,一个类型为P的对象,对应的类加载器的实例是深蓝色的那个圆。bootstrap类加载器和application类加载器是不会被回收的,而动态类加载器,在其负责加载的类对象不再使用时会被回收。
2023-03-07 23:07:43
1075
原创 内存泄漏分析及规避方法
这里使用i作为计数器,每创建1000个Person对象,就会把ArrayList重置一下,这样,上一轮的1000个对象就不在被引用,垃圾回收器就可以正常回收这些对象了。字符串的频繁拼接时,注意使用StringBuilder进行替换,因为每次拼接都会产生新的对象,然后存储在字符串常量池,而字符串常量池被分配在对内存中,可能导致堆溢出。内存泄漏就是堆内存中的某些对象,你虽然不再使用它们了,但是垃圾回收器还回收不了他们,长此以往内存就慢慢耗没了。一方面内存占用不可控,另外资源难以回收,因为对象一直被占用着。
2023-03-06 23:02:17
3220
原创 Stream的创生、处理、终结
mapToInt / flatMapToInt, mapToLong, mapToDouble转换成具体的类型流,具有统计学功能。检查allMatch, anyMatch, noneMatch,全部符合,存在符合,全不符合。reduce是对每个数据依次进行计算,可以带初始值,针对每个元素做一元或二元运算。distinct去重,只保留唯一的,类似于使用HashSet。flatMap将Stream中的集合展开,汇聚成单个元素的流。filter实现过滤,留下的都是。empty()方法创建空的流。
2023-02-23 19:54:42
296
原创 elasticsearch更新和删除
在更新时,可以设置retry_on_conflict参数,设置重试次数,一般设置为3次。当然,防止并发操作,推荐使用带版本的操作,即/索引/类型/id?如果文档存在,则使用doc进行字段更新,否则使用upsert创建新的索引文档。在更新文档的时候,也可以直接指定版本重新建立索引,而不是使用_udapte。通过DELETE操作,指定_query参数,删除满足检索条件的所有文档。通过DELETE请求,可以完成指定文档的删除,/索引/类型/id。在原有文档已经存在的情况下,可以对原有的文档部分字段更新,使用。
2023-02-11 22:26:01
1402
原创 elasticsearch映射及字段类型
此处对tags建立了两个匹配关系,一个是analyzed,对每一个单词建立索引,另外一个是针对整体的字段进行映射,not_analyzed。支持的数值类型和JAVA完全一致,byte,short,int,long,float,double。这里指定了new-events类型的字段映射关系,声明了一个新的字段host,类型上String。我们前面建立索引的时候使用的是put方法,指定了文档的id。将某一字段建立索引的同时,使用不同的策略生成新的映射关系。默认不指定字段进行搜索的时候,检索范围是所有的字段。
2023-02-11 22:04:38
932
原创 elasticsearch索引与搜索初步
hits表示结果数据,其中total表示的是总的命中的数据条数,max_score表示的是评分,这里只返回了一条数据,是因为请求参数中的size是1,限定了返回1条数据。我们可以使用PUT方法创建索引,通过指定“索引”、“类型”、“文档ID”锁定文档,通过参数指定文档的数据。使用_mapping参数可以查看当前类型的映射关系,要注意的是,映射关系是在类型这个层面的。这里给到了创建的索引名称、类型、id,已经对应的版本,created表示创建索引的结果。这里通过default_field指定了查询的字段。
2023-02-11 20:23:36
884
原创 elasticsearch原理初步
ES在本质上就是两个操作,建立索引和使用索引。建立索引就是将数据列出一个目录出来,便于检索、过滤、聚合等操作。使用索引就是针对数据建立的索引执行查询。
2023-02-11 14:42:28
174
原创 elasticsearch简介
因为ES不仅仅支持JAVA API的交互,还支持REST API交互,接入ES的灵活性更大了。数据的事务支持使用关系型数据库,通过一定的同步机制将数据建立索引,存储到ES中,仅使用ES的搜索功能。使用ES存储数据,并完成数据搜索功能。ES自身可以作为NOSQL存储使用,通过复制提高可用性,也存在持久化机制,避免数据的丢失。IDF表示逆文档词频,当这个词在其他文档中出现频率较低时,这个词的权重才会更高,相关性越强,反之,则没有区分性的价值。倒排索引就是将“目录-数据”的格式,转换成“数据-目录”的格式。
2023-02-11 10:15:49
250
原创 布隆过滤器
布隆过滤器的目标尽可能小的内存占用,完成哈希表的功能,判断给定Key是否存在,true/false的问题。由于存在假阳性的判断结果,所以一般作为预处理(预判断)使用。布隆过滤器的缺点布隆过滤器有失败率,是指实际不存在数据判定为已经存在(假阳性)。布隆过滤器的使用策略来了一个key后,经过多个哈希函数的判断,如果每个哈希都认定这个key存在的话,那么布隆过滤器视为这个key已经存在,否则,视为不存在。但也有可能与某个key发生碰撞,本来不存在的key,布隆过滤器视为存在,产生假阳性判断。
2023-02-03 07:58:10
545
原创 剑指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
460
原创 剑指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
154
原创 剑指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
209
原创 剑指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
145
内部元素none到display变化,外部容器不会撑起来
2023-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人