JAVA
文章平均质量分 74
在这个专栏中,我们将从基础到高级,全面探索Java技术的奥秘。无论你是Java技术的初学者,还是希望在现有基础上进一步提升,这个专栏都将为你提供丰富的学习资源和实践指导。
笑锝没心没肺
时间宝贵,要看就看有用的,
解决问题,要看就看标红的,
研究学习,就去看全部的吧。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
springboot服务日志切割处理
系统刚上线,需要优化的地方还有很多,首要的就是保证服务日志记录完整,查看方便,有本地备份,保障数据日志的完整性。部分核心服务日志每日都是几个G,不进行处理,后期排查问题分析日志就会很痛苦。建议设置成定时任务,每日凌晨。这样每日分析日志就是当天的。需要备份其他日志目录的,参考这个进行改写即可。4、截断原日志文件,保障日志文件每日循环。1、查找需要进行备份的日志。2、复制一份到备份目录。3、压缩,提高存储效率。5、定时清理,可配置。备份在log_bak目录下,压缩存储。脚本设置定时执行后的。原创 2025-12-19 11:14:05 · 150 阅读 · 0 评论 -
springboot服务监控脚本2.0
在1.0的基础上,保留原来的日常监控加告警的功能外,增加部分功能,修改展示样式,增加用户体验。之前没时间整理,先在项目上用了几天,稳定了才做。在此基础上,我们能做的还有很多,日常监控、异常告警、定期巡检。从一个系统管理者的角度去改造。1.0是从运维者的角度。原创 2025-12-19 10:35:58 · 412 阅读 · 0 评论 -
SQL拼接转换工具(==> Preparing: ==> Parameters: 自动拼接好的 SQL的工具)
项目升级完成,但接下来的小问题不断,其中SQL优化及处理占了一半,后台抓SQL不难,但是手动拼接SQL,工作量实在太大,还容易出错。在 这位老师的博客(通过file:///E:/Desktop/%E6%96%B0%E6%96%87%E4%BB%B6%2091.html。原创 2025-12-18 13:52:56 · 371 阅读 · 0 评论 -
springboot服务监控脚本1.0
系统刚上线,需要监控各网格服务的运行状态,仅靠人工监控,费事费力,费成本。但还要满足系统需求,还需要满足领导的要求。于是乎,开干~原创 2025-12-16 15:21:56 · 288 阅读 · 0 评论 -
SpringBoot 多应用管理脚本实现
接触的一个建设项目,微服务使用的比较多,在更新部署程序的时候总是大量时间,且根据日志排查困难较大,虽有脚本可以勉强执行,但侵入较大,换个环境改动地方多,深感痛击。原创 2025-08-20 15:58:19 · 801 阅读 · 0 评论 -
Jenkins+git+maven+tomcat自动打包部署
1、springboot项目报错 SpringBoot发布WAR启动报错:Error assembling WAR: webxml attribute is required修改web model的pom.xmlSpringBoot默认发布的都是jar,因此要修改默认的打包方式jar为war修改web model的依赖(dependency)-- 移除嵌入式tomcat插件,或者scope = provided-->原创 2025-04-10 15:51:12 · 1179 阅读 · 0 评论 -
Linux中修改jar包中的配置文件
vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。4.更新配置文件到内部jar包.(存在覆盖,不存在就新增)方式一、 通过vim命令直接修改保存jar。但是要修改jar包中的配置文件怎么办呢?4.1更新内部jar包到jar文件。1.通过vim命令直接编辑jar。2.提取出内部jar包的指定文件。1.列出jar包中的文件清单。5.可以查看验证是否已经更改。3.然后可以修改文件。原创 2025-04-01 11:17:35 · 691 阅读 · 0 评论 -
常用集合整理
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。原创 2025-03-25 14:46:26 · 850 阅读 · 0 评论 -
MAP集合遍历效率
1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高2)当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet3)当我们只需要取得value值时,采用values来遍历效率更高。原创 2025-03-25 14:38:22 · 407 阅读 · 0 评论 -
解决idea粘贴空格时显示NBSP的问题,已解决
在idea粘贴代码,出现大量空格占位符NBSP,原创 2025-03-25 14:11:04 · 1409 阅读 · 0 评论 -
List去除重复数据的五种方式
要从 arraylist 中删除重复项,我们也可以使用 java 8 stream api。使用 steam 的 distinct() 方法返回一个由不同数据组成的流,通过对象的 equals()方法进行比较。Java 示例使用 LinkedHashSet 删除 arraylist 中的重复项。在给定的示例中,numbersList 是包含整数的 arraylist,其中一些是重复的数字。Java 程序,用于在不使用 Set 的情况下从 java 中的 arraylist 中删除重复项。原创 2025-03-25 13:58:02 · 1656 阅读 · 0 评论 -
List中remove()方法的陷阱
1、用for循环遍历List删除元素时,需要注意索引会左移的问题。2、List删除元素时,为避免陷阱,建议使用迭代器iterator的remove方式。3、List删除元素时,默认按索引删除,而不是对象删除。原创 2025-03-25 13:50:26 · 1200 阅读 · 0 评论 -
List<? extends T>与List<? super T>的区别
(1)List<?extends T>适用于读取数据,读取出来的数据全部用T类型接收。如果我们往此 list 中添加 T 类型不同的子类的话,各种子类无法相互转换,因此不能添加元素,但可接受初始赋值。(2)List<?super T>适用于添加元素,只能添加 T 类型或其子类类型。因为这些类型都能转换为T的任意超类类型(向上转型),因此我们可以对此 list 添加元素。只能用 Object 类型来接收获取到的元素,但是这些元素原本的类型会丢失。原创 2025-03-21 11:00:34 · 980 阅读 · 0 评论 -
乐观锁和悲观锁
例如,CAS只能保证单个变量操作的原子性,当涉及到多个变量时,CAS是无能为力的,而synchronized则可以通过对整个代码块加锁来处理。许多CAS的操作是自旋的:如果操作不成功,会一直重试,直到操作成功为止。悲观锁的实现方式是加锁,加锁既可以是对代码块加锁(如Java的synchronized关键字),也可以是对数据加锁(如MySQL中的排它锁)。除此之外,CAS的实现需要硬件层面处理器的支持,在Java中普通用户无法直接使用,只能借助atomic包下的原子类使用,灵活性受到限制。原创 2025-03-21 10:45:59 · 2353 阅读 · 0 评论 -
图解线程状态
Java 线程的状态,有六种NEWRUNNABLEBLOCKEDWAITINGTERMINATED而经典的线程五态模型,有五种状态创建就绪执行阻塞终止不同实现者,可能有合并和拆分。比如 Java 将五态模型中的就绪和执行,都统一成 RUNNABLE,将阻塞(即不可能得到 CPU 运行机会的状态)细分为了 BLOCKED、WAITING、TIMED_WAITING。原创 2025-03-21 09:58:38 · 1072 阅读 · 0 评论 -
对事件触发(EventHandler)的简单理解
当某个对象的某个事件或者是执行过程发生了,这个对象可以通过事件通知另外一个对象,另外一个对象可以通过传递进来的参数进行相应的处理;4、对事件Class变量调用可以触发此事件的函数。3、对事件Class变量使用+=进行委托。2、定义一个事件Class变量。2、定义可以触发此事件的函数。1、定义一个事件对象。1、定义事件处理函数。一、事件参数Class定义。定义事件触发需要如下3步。二、事件Class定义。三、使用Class定义。原创 2025-03-20 16:21:36 · 378 阅读 · 0 评论 -
XML CDATA
小于大于和号省略号引号注意:严格地讲,在 XML 中仅有字符 "< "和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。原创 2025-03-20 16:17:33 · 602 阅读 · 0 评论 -
常用正则表达式最强整理
例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。原创 2025-03-20 16:05:48 · 1426 阅读 · 0 评论 -
关于项目报错:Error:Cannot build artifact ‘XXX:war exploded‘ because it is included into a circular dep,已解決
找到项目目录中的.idea目录,进入artifacts文件目录,删除重复的两个的文件即可。原创 2025-03-14 10:30:41 · 445 阅读 · 0 评论 -
关于java读取环境变量、虚拟机参数
本文系统研究在springboot启动时传入参数,对于非springboot的普通 java项目也是相同的。传参的参数类型后续为了方便,有时会称呼为:程序参数,vm参数,环境变量。原创 2025-03-14 10:28:17 · 381 阅读 · 0 评论 -
序列化和反序列化的详解
(1)Java序列化就是指把Java对象转换为字节序列的过程Java反序列化就是指把字节序列恢复为Java对象的过程。在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)序列化是指把一个Java对象变成二进制内容,本质上就是一个byte[]数组。为什么要把Java对象序列化呢?原创 2025-03-14 10:23:45 · 1102 阅读 · 0 评论 -
Java中静态代码块、构造代码块、构造函数、普通代码块执行顺序
首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块,父类的构造代码块执行完毕,接着执行父类的构造方法;而一般的方法不存在这一特点;对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。普通代码块和构造代码块的区别是,构造代码块是在类中定义的,而普通代码块是在方法体中定义的。原创 2025-03-14 10:17:39 · 896 阅读 · 0 评论 -
isEmpty 和 isBlank 的用法区别
是否为空. 可以看到 " " 空格是会绕过这种空判断,因为是一个空格,并不是严格的空值,会导致 isEmpty(" ")=false。原创 2025-03-13 15:32:25 · 490 阅读 · 0 评论 -
toString()、String.valueOf、(String)强转,有什么区别
相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,想用哪个用哪个,既然存在,那就应该有它存在的道理,本文将简单介绍他们各自适用的场景。在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。原创 2025-03-13 11:02:59 · 1045 阅读 · 0 评论 -
泛型中的 T、E、K、V、?等等
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。原创 2025-03-12 15:23:48 · 1349 阅读 · 0 评论 -
排名前 16 的 Java 工具类
【代码】排名前 16 的 Java 工具类。原创 2025-03-12 15:07:04 · 370 阅读 · 0 评论 -
java8内存结构图浅析
由于java是一门高级语言,离硬件底层比较远,有时候无法操作底层的资源,于是,java添加了native关键字,被native关键字修饰的方法可以用其他语言重写,这样,我们就可以写一个本地方法,然后用C语言重写,这样来操作底层资源。当然,使用了native方法会导致系统的可移植性不高,这是需要注意的。字面量java代码在编译过程中是无法构建引用的,字面量就是在编译时对于数据的一种表示:int a=1;//这个1便是字面量String b="阿凯7";//阿凯7便是字面量符号引用。原创 2025-03-07 10:36:32 · 1080 阅读 · 0 评论 -
内部类介绍
(1)把类定义在另一个类的内部,该类就被称为内部类。举例:把类B定义在类A中,类B就被称为内部类。(2)内部类的访问规则1、可以直接访问外部类的成员,包括私有2、外部类要想访问内部类成员,必须创建对象(3)内部类的分类1、成员内部类2、局部内部类3、匿名内部类(4)成员内部类访问规则成员内部类不是静态的:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();成员内部类是静态的:外部类名.内部类名 对象名 = new 外部类名.内部类名();(5)局部内部类。原创 2025-03-07 10:30:28 · 607 阅读 · 0 评论 -
InetAddress.getLocalHost() 执行很慢
执行慢的原因估计是DNS的问题,因为以前没有这问题,最近时好时坏,有时根本没问题,而最近因有的域名无法访问,添加了其它DNS后可以访问了,但DNS变了后解析本机地址也变慢了。以前没有这问题,最近时好时坏,有问题时需要等待半分钟以上时间,有时根本没问题。执行后可用 scutil --get HostName 命令查看是否生效。127.0.0.1 localhost 主机名。::1 localhost 主机名。原创 2025-03-07 10:25:04 · 767 阅读 · 0 评论 -
WebService技术详解
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然。跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。原创 2025-03-07 10:22:26 · 953 阅读 · 0 评论 -
JVM调优思路分解
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。原创 2025-03-06 09:59:16 · 1072 阅读 · 0 评论 -
jstat查看gc情况,GC(Allocation Failure)引发的一些JVM知识点梳理
jstat通常用来分析系统的垃圾回收情况。原创 2025-03-06 09:03:49 · 655 阅读 · 0 评论 -
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
的全称是Permanent Generation space,是指内存的永久保存区域PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。原创 2025-02-27 10:23:45 · 1328 阅读 · 0 评论 -
JVM参数-XX:+HeapDumpOnOutOfMemoryError
也就是说当发生OutOfMemoryError错误时,才能触发-XX:HeapDumpOnOutOfMemoryError 输出到-XX:HeapDumpPath指定位置。2.配合参数: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/home/tomcat/logs/...-XX:HeapDumpPath=文件时,形如-XX:HeapDumpPath=d:\java_heapdump.hprof。时,将自动导出应用程序的当前堆快照。原创 2025-02-27 10:13:05 · 1126 阅读 · 0 评论 -
内存溢出定位工具:MAT
通过上述的解释应该对当前Overview下的功能使用已经有了一个大概的了解,需要注意的是,Histogram 以及Dominator Tree时所主要提及的Shallow Size以及Retained Size以及在所列出的对象上右键查看引用关系,GCROOTS,以及左上角所展示的属性明细等功能 是适用于所有的功能模块的,后续不再赘述;打开之后,这个地方本来是空的,就像我们启动一个没有引入项目的 IDE 一样,然后我们点击 file 打开对应的 dump 文件即可。原创 2025-02-27 10:05:08 · 1193 阅读 · 0 评论 -
JVM常见线上问题:CPU 100%、内存泄露问题排查
jps:列出正在运行的虚拟机进程jstat:监视虚拟机各种运行状态信息,可以显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据jinfo:实时查看和调整虚拟机各项参数jmap:生成堆转储快照,也可以查询 finalize 执行队列、Java 堆和永久代的详细信息jstack:生成虚拟机当前时刻的线程快照jhat:虚拟机堆转储快照分析工具。原创 2025-02-27 09:52:30 · 1268 阅读 · 0 评论 -
Linux中修改jar包中的配置文件
vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。方式一 通过vim命令直接修改保存jar。4.更新配置文件到内部jar包.(存在覆盖,不存在就新增)但是要修改jar包中的配置文件怎么办呢?4.1更新内部jar包到jar文件。2.提取出内部jar包的指定文件。此时可以通过命令运行jar包。5.可以查看验证是否已经更改。3.然后可以修改文件。原创 2025-01-14 11:42:54 · 1129 阅读 · 0 评论
分享