
java
文章平均质量分 81
java学习。
一口酥Hac
访问:https://yikousu.github.io
展开
-
Cursor 无限使用,一行命令搞定!
该脚本会自动修改 Cursor 的用户标识(大概是类似于设备 ID 或临时 token 的信息),从而让 Cursor 以为你是一个“新用户”。总结一句话:这个命令是从 GitHub 下载一个 PowerShell 脚本(用于修改 Cursor 的用户 ID),然后直接执行它。iex 是 Invoke-Expression,执行下载下来的 PowerShell 脚本;irm 是 Invoke-RestMethod 的别名,用来下载远程脚本;你不需要卸载重装,也不需要注册新账号,一行命令解决一切。原创 2025-05-07 19:04:37 · 639 阅读 · 0 评论 -
SpringBoot多环境配置
Spring Boot 项目的多环境配置方案,通过 application.yml 配合 application-xxx.yml,可灵活切换开发、测试和生产环境。1、java -jar app.jar --spring.profiles.active=prod 【命令行指定(最常用)】3、 application-prod.yml —— 生产环境配置。2、application-dev.yml —— 本地开发配置。1、application.yml —— 统一入口配置。基于不同环境加载不同的Bean。原创 2025-05-02 10:15:00 · 425 阅读 · 0 评论 -
Java监控与分析工具
(Java Virtual Machine Statistics Monitoring Tool)是 JDK 自带的命令行工具,用于监控 JVM 的 GC(垃圾回收)行为、类加载、编译等。在 Java 开发过程中,了解并掌握 JVM(Java 虚拟机)监控与分析工具对于排查性能问题、优化应用至关重要。是 JDK 自带的 GUI 工具,提供线程、堆、GC 监控及分析功能。是 Java 自带的 GUI 监控工具,提供基本的 JVM 监控能力。是功能最强大的 JVM 诊断工具,可以替代。原创 2025-04-04 11:27:25 · 1037 阅读 · 0 评论 -
用Trae辅助Java开发
只有一次提问。中间没有干预。时间出现了8h的时差,添加任务我在后面代码改动了一下。❤觉得有用的可以留个关注~❤。原创 2025-03-24 12:46:42 · 2103 阅读 · 0 评论 -
如何编写一个Spring Boot Starter
这只是一个比较简单的示例。根据具体场景实现丰富的 starter。注意:命名规范:Starter 通常命名为 xxx-spring-boot-starter,自动配置类为 xxxAutoConfiguration。版本兼容性:确保与目标项目的 Spring Boot 版本一致。发布:考虑将 Starter 发布到 Maven Central 等。【deploy发布到远程仓库(maven私服)】❤觉得有用的可以留个关注ya~~❤。原创 2025-03-22 13:59:06 · 490 阅读 · 0 评论 -
HashMap添加元素的流程图
可减少空间浪费,但会增加哈希冲突的概率;较低的负载因子则减少哈希冲突,但会增加内存开销。结构,当哈希冲突较多时,链表可能变得很长,导致查询性能从 O(1) 退化到 O(n)。回链表,以减少不必要的树操作开销,提高小规模数据场景下的性能。从JDK8开始,为了优化哈希冲突情况下的查找性能,(如果没引入红黑树,则最坏查找复杂度是O(n))在 JDK8,为了优化链表查询性能,引入了。时,链表会转换为红黑树。,以减少动态扩容带来的性能损耗。,将最坏情况下的查找复杂度从。新容量 * 0.75。原创 2025-03-20 23:18:33 · 1071 阅读 · 0 评论 -
利用Arthas动态修改Java代码:告别繁琐的打包与部署
步骤一:反编译代码,使用jad命令反编译目标类,获取当前运行的 Java 源代码。步骤二:修改代码,根据需求编辑反编译出的源代码,通常在本地进行微调。步骤三:内存编译,使用mc命令将修改后的 .java 文件编译为 .class 字节码文件,直接在内存中完成。步骤四:动态加载,通过redefine命令将新的字节码加载到 JVM,实时更新运行中的类,无需重启服务。原创 2025-02-25 19:45:14 · 808 阅读 · 0 评论 -
Java 开发中用于打印完整 SQL 语句的插件(嘎嘎有用)
在 java 开发中,sql 日志常以问号(?)作为参数占位符,这使得调试时需要手动将问号替换为实际的参数值。对于参数较少的情况,手动替换相对简单;但当参数较多时,这一过程不仅繁琐,还容易出现错误。一款IDEA插件,它能够自动将问号占位符替换为相应的参数值。打印出完整的 sql 语句。第一步:配置文件中设置日志级别为 debug。有对应的插件为我们解决了这个问题。原创 2025-02-20 21:46:45 · 674 阅读 · 0 评论 -
MyBatisPlus 自定义拦截器:全面记录 SQL 执行日志
/ 记录 SQL 日志的日志器 public static final Logger log = LoggerFactory . getLogger("sys-sql");/*** 查询前的拦截* @param executor Executor实例* @param ms MappedStatement实例* @param parameter 查询参数* @param rowBounds 分页信息* @param resultHandler 结果处理器。原创 2025-02-19 09:00:00 · 1251 阅读 · 0 评论 -
Spring Boot中使用Flyway进行数据库迁移
如果数据库的当前版本是 1,而你的迁移脚本的版本号也是 1 或者更低,Flyway 会认为这些脚本已经执行过,因此不会再次执行。启动 Spring Boot 应用,Flyway 会自动执行 db/migration 目录下的迁移脚本,并将执行记录存储在 flyway_schema_history 表中。手动执行 SQL 脚本不仅容易出错,也难以维护数据库版本的一致性。如果本地迁移脚本的内容发生了更改(例如,修改了 SQL 脚本),Flyway 会检测到校验和不匹配,从而抛出此错误。原创 2025-02-14 22:59:49 · 882 阅读 · 0 评论 -
设计模式-策略模式
在项目开发过程中,我接连几次运用策略模式,对它的理解也随之愈发深刻。当我写这篇博客突然想到一个非常适合这个策略模式的例子:支付方式选择(支付宝、微信、银行卡支付等)。原创 2025-01-21 09:55:17 · 431 阅读 · 0 评论 -
Jackson 中的多态类型支持:@JsonTypeInfo 和 @JsonSubTypes 使用技巧
它们的作用是在序列化和反序列化过程中,帮助 Jackson 识别和处理父类与子类之间的关系。注解用于列出所有可能的子类类型,并为每个子类指定一个唯一的名称(或标识符)。注解用于指定在序列化和反序列化过程中如何处理类型信息。:指定类型信息如何包含在 JSON 中。jackson 坐标:(三个依赖保持版本一致):指定类型信息的标识方式。时,指定类型信息属性的名称。表示在 JSON 中添加一个名为。是 Jackson 库中用于处理。的字段来存储类型信息。原创 2025-01-16 16:42:18 · 1378 阅读 · 0 评论 -
线上问题排查方案总结
确认问题进程:使用top或htop找到 CPU 占用高的 Java 进程。查看线程情况:使用查看该进程的各个线程 CPU 占用情况,记录高 CPU 占用线程的 TID。转换线程 ID:将 TID 转换为十六进制,使用。生成线程 dump:使用生成线程堆栈,保存至文件。分析堆栈信息:在 dump 文件中搜索十六进制 TID,分析该线程的执行方法,排查高 CPU 的原因。原创 2024-11-05 16:08:07 · 988 阅读 · 0 评论 -
面试:java笔试基础总结
this 是 Java 中的一个关键字,用于指代当前对象。只有在实例方法(非static方法)或构造函数中,才有“当前对象”这个概念。已知32位系统,字节为编址单位,1个页面大小为4KB,页表项大小为4B,那么存储页表需要多少空间。3、new String(“abc”) 会在堆中创建一个新的对象,即使内容相同。如果两个变量都是字面量方式赋值,且内容相同,它们指向同一个对象。当时遇到这个题,我是直接在纸上画出来的,画的时候细心一般都不会出错。因为 i j 是不同的对象,地址不同,所以false。原创 2024-10-16 18:16:11 · 616 阅读 · 0 评论 -
Redis 实现 查找附近的人 功能
使用 Redis 实现“查找附近的人”功能,通常会依赖 Redis 的Geo(地理位置)数据类型来存储用户的经纬度,并基于此进行地理范围查询。Redis 通过GEOADDGEORADIUS等命令来存储用户位置和查找一定范围内的用户。存储用户的地理位置:我们需要存储用户的经纬度信息,以便后续可以基于此进行地理查询。Redis 提供了GEOADD命令,允许将用户的经纬度信息存储在 Redis 中的有序集合中(底层基于ZSet实现)。根据当前用户的位置查找附近的用户:使用GEORADIUS或。原创 2024-10-09 12:19:39 · 862 阅读 · 0 评论 -
OpenFeign原理
OpenFeign的原理主要涉及通过代理类将服务名称替换为具体的 IP:端口 来实现远程服务调用。Feign 生成代理类:使用 JDK 动态代理为接口生成代理,拦截接口方法调用,构建 HTTP 请求。服务名称替换为IP:端口:Feign 会将服务名称(如serviceA)通过 Ribbon 进行解析,将其替换为对应的IP:端口。负载均衡:Ribbon 在服务发现的基础上,对多个服务实例进行负载均衡,选择一个合适的服务实例。发送 HTTP 请求。原创 2024-09-13 11:33:52 · 1709 阅读 · 0 评论 -
HashMap线程不安全|Hashtable|ConcurrentHashMap
加锁机制:对每个桶(tab[i])的头节点进行加锁。这种锁定策略使得同一个桶中的修改是线程安全的。并发性能优化:这种设计避免了全局锁,提高了在高并发环境下的性能。当多个线程操作不同的桶时,操作不会相互干扰。原创 2024-09-12 16:55:51 · 994 阅读 · 0 评论 -
Redisson实现订单到期关闭
在电商、支付等系统中,一般都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。这种类似的场景有很多,还有比如到期自动收货、超时自动退款、下单后自动发送短信等等都是类似的业务问题。7、RabbitMQ死信队列(MQ 方案不推荐,大量无效调度)8、RabbitMQ插件(MQ 方案不推荐,大量无效调度)3、DelayQueue(不推荐,基于内存,无法持久化)10、Redis的ZSet(不推荐,可能会重复消费)4、时间轮(不推荐,基于内存,无法持久化)原创 2024-09-11 16:42:35 · 1215 阅读 · 0 评论 -
面试笔试 场景题(部分总结)
优先级队列按比较器排序,如果比较器为空,则按元素的自然顺序排序:对于堆中的每个节点 n 和 n 的每个后代 d,n <= d。创建一个最大堆(PriorityQueue,指定了 Comparator.reverseOrder() 来使其成为最大堆)。来实现,默认是最小堆,即堆顶是队列中最小的元素。数据结构的一个重要类,它基于优先级队列(Priority Queue)的概念。你使用最大堆来找出第 k 小的元素。最大堆的特点是堆顶元素是当前堆中的最大值。当堆的大小超过 k 时,移除堆顶元素(即当前最大元素)。原创 2024-09-09 18:02:23 · 1019 阅读 · 0 评论 -
SpringBoot登录退出|苍穹外卖登录退出分析
用户登录:用户提交登录请求➡️后端认证用户(拦截器会放行登录接口,先判断用户名密码,然后生成token)➡️生成令牌token,并将其返回给客户端。原创 2024-09-07 18:45:50 · 2007 阅读 · 0 评论 -
探索ArrayList的线程不安全性
像HahsMapTreeMap都不是线程安全的,当然 HashSet 由 HashMap 实现,所以HashSet 线程不安全;TreeSet 由 TreeMap 实现,所以HashSet 线程不安全。为了解决这个问题,可以使用线程安全的替代品,例如通过 Collections.synchronizedSet() 来包装一个 Set,确保其线程安全。Collections工具类中的替代品写时复制CopyOnWrite 是一种并发编程策略,常用于实现线程安全的集合类。它的核心思想是。原创 2024-09-03 17:21:06 · 735 阅读 · 0 评论 -
基于 Redis 的 HyperLogLog 实现了 UV 的统计
在现代网站开发中,用户行为分析是一个非常重要的环节。其中,UV(Unique Visitor,独立访客)和PV(Page View,页面浏览量)是衡量网站流量和用户活跃度的关键指标。UV 指的是通过互联网访问网站的自然人数量,通常一个用户在一定时间内的多次访问只计作一次;而 PV 则指的是用户访问网站的页面次数,无论是否来自同一用户,每次访问都会计入。HyperLogLog 是一种用于基数估计的概率性数据结构,可以高效地估算集合中唯一元素的数量(基数)。原创 2024-08-28 17:22:21 · 1472 阅读 · 0 评论 -
Java实现UDP通信/TCP通信
客户端 (Socket用于创建连接并进行数据发送和接收。服务端 (用于监听端口并接受客户端连接。和用于在 TCP 连接中发送和接收数据。在实际应用中,确保在发送数据后调用flush()方法,以确保数据及时发送,并在接收数据时正确处理流的关闭和异常情况。❤觉得有用的可以留个关注~~❤。原创 2024-08-27 11:00:00 · 1715 阅读 · 0 评论 -
SpringBoot自动配置原理
Spring Boot 的自动配置是其核心特性之一,它简化了 Spring 应用程序的配置,使得开发者能够快速启动和运行 Spring 应用,而无需手动编写大量的配置代码。在 Spring Boot 中,:指定这是一个 Spring Boot 配置类,相当于。:启用自动配置,核心注解,通过读取文件自动配置项目。:自动扫描项目中的组件,如@Service等,通常不需要额外配置。自动配置的工作原理注解使用@Import注解导入配置选择器。配置选择器会读取文件中的配置类列表。原创 2024-08-26 11:02:27 · 1634 阅读 · 0 评论 -
Spring-bean的循环依赖
在 Spring 框架中,循环依赖是指两个或多个 Bean 相互依赖,形成一个闭环。Setter 方法循环依赖:Bean A 通过 setter 方法注入 Bean B,Bean B 又通过 setter 方法注入 Bean A。(即@Autowired)构造器循环依赖:Bean A 需要 Bean B 的实例,而 Bean B 又需要 Bean A 的实例。Setter 注入循环依赖:Spring 通过三级缓存机制自动处理构造器注入循环依赖:Spring 无法自动解决,使用 @Lazy 注解。原创 2024-08-26 11:00:16 · 487 阅读 · 0 评论 -
Spring的bean的生命周期
在 Spring 框架中,bean 的生命周期包括从创建到销毁的整个过程。了解 bean 的生命周期有助于更好地管理 bean 的状态和依赖。下图是 Spring bean 生命周期的过程。BeanPostProcessor 允许在 Spring 容器初始化 bean 之前和之后进行自定义处理(自定义一些逻辑,eg:方法增强)原创 2024-08-24 22:23:51 · 609 阅读 · 0 评论 -
Java创建多线程方式
参数 new Runnable() { …} 是一个匿名内部类实现 Runnable 接口。【传参,new一个接口,需要实现该接口的方法】在工作中,使用线程池是更为推荐的方法,因为它能更好地管理和复用线程资源,避免频繁创建和销毁线程带来的开销。函数式接口可以用于 Lambda 表达式。这意味着如果你想要使用。是 Java 提供的一个可以同时充当。对象作为参数来创建线程,而。只有一个抽象方法的接口被称为。原创 2024-08-07 13:40:15 · 524 阅读 · 0 评论 -
使用java反编译工具jad
注意:不同的反编译工具在处理字节码中的一些特殊指令、异常处理、泛型等方面也可能存在差异,从而导致反编译结果的不同。JAD (Java Decompiler) 是一个经典的反编译工具,广泛用于将 Java 字节码反编译回源代码。jad.exe所在文件位置:“D:\dev\app\jad\jad.exe”:在使用反编译工具时,必须遵守相关法律和版权规定,尊重他人的知识产权。jd-gui还可以反编译整个jar包,还可以保存反编译的源码。环境变量中添加:D:\dev\app\jad。第三步:查看反编译后的源码。原创 2024-08-06 10:09:24 · 1064 阅读 · 0 评论 -
Springboot处理跨域请求
Filter 是属于 Servlet 规范的一部分,用于对请求和响应进行底层处理,而 Interceptor 是 Spring 框架提供的用于增强 Controller 功能的机制。(Cross-Origin Requests)指的是在一个网页中加载的资源来自与当前网页不同的域、协议或端口。:将 @CrossOrigin 注解放在类级别,意味着该类中的所有端点都允许来自指定来源的跨域请求。:可以将 @CrossOrigin 注解放在特定方法上,以便仅允许某些特定方法的跨域请求。要是每一个类都写挺麻烦的。原创 2024-07-30 18:02:57 · 1292 阅读 · 0 评论 -
java项目动态传递参数给main方法|动态修改application.yml中属性值
注意:如果你传递的参数少于三个,程序将抛出 ArrayIndexOutOfBoundsException 异常。为了避免这种情况,可以在访问参数之前检查参数的长度。,而不需要修改配置文件。例如,在开发、测试和生产环境中可能需要使用不同的配置。但有时候想修改application.yml 中的属性值,可以在运行时通过命令行参数来覆盖 application.yml 中的属性值。在开发 Java 应用程序时,有时需要通过命令行参数传递数据给应用程序。通过命令行参数传递配置属性,可以在启动应用时。原创 2024-07-19 09:30:00 · 992 阅读 · 0 评论 -
MyBatis中配置POJO和数据库表字段映射
通过上述三种方法,可以灵活地在 MyBatis 中配置 POJO 类属性与数据库表字段的映射关系。标签提供了细粒度的控制,适合复杂映射。SQL 别名映射简单直接,适合简单映射。全局配置简洁高效,适合常规映射。原创 2024-07-17 09:15:00 · 761 阅读 · 0 评论 -
如何在Java中处理空集合和空指针
通过上述方法,可以有效地避免在处理集合时遇到的常见问题,确保程序的稳定性和健壮性。在开发中,良好的编码习惯和对可能出现的异常情况的处理至关重要。处理其他集合类型(例如HashMap、HashSet等)时,原则上与处理ArrayList类似的哦。❤觉得有用的可以留个关注~❤。原创 2024-07-14 12:45:59 · 577 阅读 · 0 评论 -
工作中使用线程池
通过上述步骤,你可以在Spring Boot应用中创建和使用线程池,并将其配置成由Spring管理。这样可以方便地管理并发任务,提高应用的性能和响应能力。Future是 Java 中用于表示异步计算结果的接口。它的主要功能是允许你在任务还未完成时获取结果,而不是阻塞等待任务完成。Future提供了一些方法来检查任务是否完成、等待任务完成并获取结果,以及取消任务等。FutureFuture接口用于表示异步计算的结果,可以检查任务是否完成、获取结果或取消任务。是Future。原创 2024-07-13 08:30:00 · 903 阅读 · 0 评论 -
Java中使用BufferedWriter|BufferedReader
BufferedWriter 是一个强大的工具,用于高效地写入字符流。通过提供缓冲区,它显著减少了写入底层输出流的次数,提高了写操作的性能。BufferedReader 是一个强大的工具,用于高效地读取字符流。❤觉得有用的可以留个关注~~❤。原创 2024-07-09 22:24:46 · 1125 阅读 · 0 评论 -
Jackson中ObjectMapper
是 Jackson 数据处理库的核心类,用于将 Java 对象转换为 JSON,以及将 JSON 转换为 Java 对象。原创 2024-07-09 09:15:00 · 655 阅读 · 0 评论 -
java实现与远程 SFTP 服务器之间安全文件传输
它提供了在安全信道上进行数据传输的能力。相比传统的FTP(File Transfer Protocol),SFTP具有更高的安全性和更多的功能。(Secure File Transfer Protocol)是一种基于SSH(Secure Shell)协议的。原创 2024-06-21 09:15:00 · 1602 阅读 · 0 评论 -
Knife4j 生成 API 文档
Knife4j是一个增强的 Swagger 文档生成工具,提供了更加友好的界面和更多功能,使得 API 文档更加美观且易于使用。它是基于 Spring Boot 和 Swagger 进行封装的,因此非常适合 Spring Boot 项目。原创 2024-06-09 13:01:20 · 1080 阅读 · 0 评论 -
MyBatisPlus插件生成代码
是 MyBatis 的增强工具,旨在简化 MyBatis 的开发。MyBatis-Plus 代码生成器插件可以自动生成项目中常见的代码,如实。等,从而减少手动编写重复代码的工作量,提高开发效率。Service 接口。原创 2024-06-08 18:13:32 · 746 阅读 · 0 评论 -
Tomcat服务器|创建java web项目
Apache Tomcat,通常简称为Tomcat,是一个开源的Web服务器和Servlet容器。Tomcat主要用来运行Java Servlets和JavaServer Pages (JSP) 技术,允许开发者用Java编写的Web应用程序在Web服务器上运行。:Tomcat支持Servlet API,用于处理和响应客户端请求,尤其是HTTP请求。:Tomcat可以作为一个独立的Web服务器,处理静态和动态内容。:Tomcat支持JSP技术,这是一种简化的方式来创建动态网页。原创 2024-06-04 21:24:23 · 1095 阅读 · 0 评论 -
SpringBoot整合xxl-job实现定时任务
任务分组:可以将任务按照业务逻辑分组,方便管理和监控。任务参数:支持为任务传递参数,方便定制化任务执行逻辑。任务依赖:允许设置任务间的依赖关系,确保任务按照正确的顺序执行。任务路由策略:支持多种任务路由策略,例如故障转移、轮询、一致性Hash等,提高任务执行的灵活性和可靠性。任务失败处理:可以设置任务失败的处理策略,例如重试、告警、忽略等,保证任务执行的稳定性和可靠性。任务执行日志:自动记录任务执行的日志,方便排查问题和监控任务执行情况。任务调度管理。原创 2024-05-19 14:23:51 · 2428 阅读 · 0 评论