- 博客(37)
- 收藏
- 关注
原创 SimpleDateFormat之后为何多了一年?
今天收到一个生产 bug,场景如下:列表有两个字段分别记录用户的入党日期和转正日期,正常来说入党日期比转正日期早一年整,用户在导出列表数据的时候发现入党日期和转正日期是一样的,这明细与系统上显示的不符合。好了,bug 定位,首先想到的肯定就是是不是在 Java 代码中 set 字段设置错误了,拿的是和转正时间一个字段,但是其他数据都正常,只有这一个异常,明显不是。之后,结果会加了一年,变成了2016-12-27.注意这里的格式中 “YYYY” 是大写的。得知,正确的用法就是用小写的 “y”。
2024-08-20 14:32:09
561
原创 @Transactional 注解失效
在方法中,是否可以维持事务的原子性?即注解是否生效?答案是否定的。让我们来看一下 @Transactional 注解的使用注意事项。
2024-07-22 18:23:11
859
原创 KMP算法
1、什么是 KMP 算法,先说一下 KMP 这个名字是怎么来的,为什么叫 KMP 呢?因为是由这三位学者发明的:Knuth,Morris 和 Pratt,所以取了三位学者名字的首字母。所以叫做 KMP。2、KMP 有什么用处?KMP 主要应用在字符串匹配上。KMP 的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配。举一个例子:文本串 s:a a b a a b a a f a模式串 t:a a b a a f。
2024-07-16 15:08:21
551
1
原创 分布式调度平台,XxlJob的使用
XxlJob 是一个分布式任务调度平台,主要用于解决分布式环境下任务调度与管理的问题。它由国内公司开源,是一个轻量级、功能丰富的任务调度框架,适用于大多数定时任务和批处理任务的管理和执行需求。其核心设计目的是开发迅速、学习简单、轻量级、易拓展。环现已开放源代码并接入多家公司线上产品线,开箱即用。xxl-job 的缺点:代码和设计等质量并不算太高,License 不够开放,有着个人注意色彩。
2024-05-22 09:48:45
933
原创 【力扣】203、环形链表 II
这个式子表示什么呢?让 fast 指针的移动速度是 slow 指针的两倍即可,当它们再次相遇时,说明 fast 指针比 slow 指针多走了一圈,并重新追上 slow 指针了,此时可以说明链表存在环。如何判断是否存在环呢?这个比较容易想到,使用快慢指针即可判断链表是否存在环。如何确定环的入口点呢?让我们假设三个变量 x,y,z。
2024-05-03 03:17:40
451
原创 【Java】对象的实例化过程
在之前的阶段中,除了加载阶段通过自定义的类加载器可以干预虚拟机的加载过程外,其他的阶段都是虚拟机完全主导,而在初始化阶段才开始根据程序员的意愿执行类的初始化,这个阶段主要完成的工作是执行类构造器方法(),同时虚拟机会保证执行该类的类构造器方法时,其父类的类构造器方法已经被正确的执行,同时,由于类的初始化只进行一次,当多个线程并发的进行初始化时,虚拟机可以确保多个线程只有一个可以完成类的初始化工作, 保证线程安全工作。这样做的目的是为了确保在对象创建时,成员变量都有一个合理的初始值,以防止潜在的运行时错误。
2024-05-02 02:25:22
1082
2
原创 【力扣】螺旋矩阵
那其实我们要做的就是将矩阵中的每一个单元格的内容填充进这个二维数组中,至于填充的过程是怎样的,就需要我们去找出规律,然后用代码去模拟这个旋转过程了,可见这是一道过程模拟的编程题。刚开始遇到这道题目的时候相信没见过的同学多多少少都会有点懵圈,感觉题目有点无从下手,但其实只要抓住本质就行了,题目的最终目的就是返回一个二维数组的结果,这个二维数组的大小是的。这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。
2024-04-24 23:04:56
302
原创 【力扣】977. 有序数组的平方
但是注意,题目要求时间复杂度为 O(n),这样就打消了调用 Java 库内置的排序方法的念头了。一般我们看到这种对时间复杂度有要求的题目,通常第一考虑的是用空间换时间,即用额外的存储来使得程序执行时间更短。但其实这是题目给我们的诱导,题目给的例子只是恰好是一个先递减再递增的数组,且平方后的最小值正好在数组中间,因此这种方法要解题是比较费劲的,且编写出来的代码也不够优化。这时候可以考虑从两端向中间靠拢。我相信大部分同学肯定能想到用双指针解题,但需要注意双指针指向的位置,可能部分同学会考虑从中间向外展开。
2024-04-21 22:56:57
370
原创 【力扣】最简单的二分查找
举一个例子:数组 nums = [-1, 0, 3, 5, 11, 12, 13];因此,可以很快确定使用二分法。这取决于我们 left 指针和 right 指针的区间范围。
2024-04-16 23:25:03
150
原创 为什么说Java语言“编译与解释并存“?
本文主要介绍了JIT即时编译的原理以及在美团一些实践的经验,还有最前沿的即时编译器的使用效果。作为一项解释型语言中提升性能的技术,JIT已经比较成熟了,在很多语言中都有使用。对于Java服务,VM本身已经做了足够多,但是我们还应该不断深入了解IT的优化原理和最新的编译技术,从而弥补IT的劣势,提升Java服务的性能,不断追求卓越。《深入理解Java虚拟机》基本功 | Java即使编译器原理解析及实践 - 美团技术团队。
2024-04-15 21:56:42
1233
原创 【Vue】取消重复请求
在开发过程中经常会遇到这样的问题:根据条件查询列表数据,当数据量过大时,查询速度会有延迟,此时如果变更一个查询范围更小条件,此时第二次发起的请求延迟较低,数据就会先返回到前端页面,可能过了几秒钟之后,第一次请求的数据才会在页面上渲染出来,这样的话旧数据就覆盖了新的数据,我们页面上展示的就是不符合预期的脏数据了。例如连续发起 3 次请求,前面两次都是高延迟请求,因此阻塞在后端接口,第三次响应较快,此时前端就会断开前面两次前后端的连接(实际上是逐个断开的,请求 2 断开了请求 1,请求 3 断开了请求 2)。
2023-12-25 15:40:32
665
原创 【CSS】灵活展示el-tree复选框
所以,这段代码的意思是,当应用于带有 el-tree 类的元素时,找到直接子元素为 el-tree-node,其子元素为 el-tree-node__content,再找到直接子元素为 el-checkbox,将其 display 属性设置为 block,即默认显示。:选择器,表示样式作用于 el-tree-node 子元素中的具有 el-tree-node__content 类的直接子元素。: 选择器,表示样式作用于 el-tree 子元素中的具有 el-tree-node 类的直接子元素。
2023-12-20 12:05:51
739
原创 【Mybatis】动态SQL之where标签和if标签
原因:用 和 进行组合时,对 条件进行判断,一旦条件不成立时, 标签会把对应的 and 关键字去掉(还有 or 关键字),因此就不会对整个 sql 语句产生影响。但总的来说,在程序中出现 1=1 这样冗余的代码是不够优雅的,应该尽量使用 mybatis 提供的标签来编写代码。可以发现,and 关键字总是放在 if 标签内部的前面,那么是否可以放在后面呢?可以看到,sql 语句后面多了一个 and,这明显不符合 sql 的语法,执行会报错!
2023-12-15 10:38:58
664
原创 【Java】CAS底层原理和自旋锁的使用
CAS 的全称为 Compare-And-Swap,它是一条 CPU 并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的。CAS 并发原语体现在 Java 语言中就是 sun.miscUnSafe 类中的各个方法。调用 UnSafe 类中的 CAS 方法,JVM 会帮我们实现 CAS 汇编指令。这是一种完全依赖于硬件功能的指令,通过它实现了原子操作。
2023-12-13 15:05:38
522
原创 【Java】原子类常用方法
通过调用AtomicReferenceFieldUpdater.newUpdater(Dog.class,String.class,"name")静态方法生成Dog类的String类型的name字段的原子修改器updater,然后调用它的compareAndSet方法判断dog1对象的name值是否为dog1,若是则返回true并修改其值。也可调用getAndSet方法直接修改dog1属性的name字段值,并返回该字段原来的值。上述语句并不会将 atoimicInteger 更新为 2;
2023-12-13 15:02:38
63
原创 【redis】基于RedisTemplate和Jedis的redis pipeline
小白实战,redis管道操作入门实例,同时操作了基于RedisTemplate和Jedis的管道操作,并对它们的差异进行简要分析。优化后的代码极大的减少的导出缓存数据所需耗时。
2023-12-01 11:03:27
396
原创 【Mybatis】类序列化失败问题解决方案
如果你使用的是默认的 Java 序列化机制,transient 关键字是一个简单有效的方法来防止字段被序列化。但如果你使用了第三方库进行序列化,你可能需要根据该库的文档或特性来实现相应的设置或方法来控制序列化。
2023-11-14 09:25:16
338
原创 【Redis】redis-dump 安装指南
这个命令会加载 RVM 的相关环境变量和函数,以便在后续可以在当前的终端会话中使用 RVM 来管理 Ruby 版本和相关的 Gem 环境。你可以尝试升级你的 Ruby 版本以满足 redis-dump gem 的要求。你可以使用 RVM 或 rbenv 等 Ruby 版本管理工具来安装较新的 Ruby 版本。根据错误消息,redis gem 要求版本 4.4.0 兼容于你的 Ruby 版本。这里需要升级一下ruby版本,2.0.0版本无法正常安装redis-dump。检查和安装 RVM 所需的系统依赖。
2023-11-09 15:37:46
1126
1
原创 【Redis】通过 .keys() 方法查询不到 hashkey?
由于切换了 redis 的配置指向,代码调用 redis 的方式也发生了改变,在项目中,RedisCache 暴露出来的接口是统一的,但实际上它被两个类实现,而这两个类又分别调用的是 RedisTemplate 和 Jedis 的接口,在 RedisTemplate 中获取所有的 hashkey 的写法是 hashOperations.keys(key) 这样没错,这也就解释了之前的代码为什么在生产中可以正常使用,因为之前没有走 redis.grout=YAO_GROUP 的需求。
2023-11-09 15:22:07
410
1
原创 【Redis】redis 下载密钥报错
gpgkeys: HTTP fetch error 6: Could not resolve host: keys.gnupg.net; Name or service not known;gpg: no valid OpenPGP data found;gpg: Total number processed: 0
2023-11-03 14:45:28
399
原创 【Elasticsearch】小白实战!ES使用Reindex迁移数据
ES 数据迁移,Reindex 迁移亿级数据;Linux 角色添加到 root;kibana 对外访问设置
2023-11-01 16:21:36
4276
2
原创 mybatis 中 #{} 和 ${}
推荐到我语雀文档中阅读,格式友好:mybatis 中 #{} 和 ${} (语雀)singleDoc# 《mybatis 中 #{} 和 ${}》MyBatis 排序时使用 order by 动态参数时需要注意,用 $ 而不是 #,#{} 和 ${} 的区别以及 order by 注入问题必读!!!
2023-10-13 18:08:23
280
原创 【HTTP】no-cache 和 no-store 的区别
服务器会检查响应的有效性,如果发现响应仍然有效,服务器会返回一个新的验证令牌(ETag),以通知缓存可以使用它,否则服务器将返回新的响应数据。首先,Cache-Control 首部字段用于控制 HTTP 缓存的行为,其中 “no-cache” 是一种常用的指令,用于指示缓存不应该使用存储的响应数据,而应该在每次请求时向服务器验证响应的有效性。显然,这段话与“验证缓存”的解释有所冲突,但其实这段话是在解释 Cache-Control 首部字段中的 “no-cache” 指令,并提到了特定情况下的参数值。
2023-10-03 00:03:57
2600
1
转载 【Java基础】泛型总结1 基本用法与类型擦除
Java 的泛型使用了类型擦除机制,这个引来了很大的争议,以至于 Java 的泛型功能受到限制,只能说是”伪泛型“。什么叫类型擦除呢?简单的说就是,类型参数只存在于编译期,在运行时,Java 的虚拟机 ( JVM ) 并不知道泛型的存在。} }上面的代码有两个不同的ArrayList和。在我们看来它们的参数化类型不同,一个保存整性,一个保存字符串。但是通过比较它们的Class对象,上面的代码输出是true。这说明在 JVM 看来它们是同一个类。
2023-05-26 10:27:42
379
1
原创 【Java】接口和抽象类
系统与外界交互的窗口,更多体现的是一种规范。抽象类则不一样,抽象类作为系统中多个子类的共同父类,它体现的是一种模板式设计。
2023-04-18 14:35:07
350
1
原创 【chatgpt We have detected suspicious login behavior and further attempts will be blocked. Please co】
We have detected suspicious login behavior and further attempts will be blocked. Please contact the administrator我们监测到可以的登录行为,进一步的尝试将被阻止,请联系管理员。
2023-04-12 16:55:53
25734
1
原创 【get/post、同步/异步、阻塞/非阻塞】
提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2023-04-06 22:15:52
1222
原创 [ChatGPT] 429 you are being rate limited
通过限制单个用户可以发出的请求数量,OpenAI 确保每个人都有机会使用 API 而不会遇到速度下降的情况。,不要过于频繁的刷新页面,因为 OpenAI 返回给客户端的错误信息也会调用 API,默认是一次请求,刷新太频繁的话,会一直卡在 429 这个问题上。尽管达到速率限制可能令人沮丧,但速率限制的存在是为了保护 API 对其用户的可靠操作。至于网上说,关闭扩展,清楚缓存 和 切换代理节点的,我测试后并没有什么作用。速率限制是 API 的常见做法,它们的实施有几个不同的原因。此外,如何避免速率限制错误?
2023-04-06 17:00:42
14672
原创 hashCode() 和 equals() 的区别、为什么重写hashCode() 就要重写 qeuals()
hashCode() 用途、equals() 用途hashCode()、equals() 约定标准hashCode() 方法的主要用途是获取哈希码,equals() 主要用来比较两个对象是否相等。二者之间有两个约定,如果两个对象相等,它们必须有相同的哈希码;但如果两个对象的哈希码相同,他们却不一定相等。也就是说,equals() 比较两个对象相等时 hashCode() 一定相等,hashCode() 相等的两个对象 equqls()不一定相等,这就是哈希冲突,为了解决 hash 冲突,必须一定重写。
2023-02-09 15:20:27
502
原创 如何理解Java只有值传递?
相信学习过C++和Java的同学肯定会在值传递和引用传递这两种传递方式上纠结一番,我之前也是傻傻分不清,今天就来说说它俩的区别。
2022-12-21 17:54:10
613
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人