![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 67
java
风情客家__
简述需要300字以内_(¦3」∠)_
展开
-
Java实现添加文字水印、图片水印功能实战
本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。java实现给图片添加水印实现步骤:获取原图片对象信息(本地图片或网络图片)添加水印(设置水印颜色、字体、坐标等)处理输出目标图片。转载 2023-09-06 10:02:39 · 118 阅读 · 0 评论 -
Java队列有哪些?8大常用Java队列总结
队列是一种操作受限的线性表,只允许在表的前端(front)进行删除操作又称作出队,在表的后端进行插入操作,称为入队,符合先进先出(First in First out)的特性。在队尾插入元素叫做入队,对头删除元素叫做出队。比如我们常用的 LinkedList 集合,它实现了Queue 接口,我们可以理解为 LinkedList 就是一个队列。原创 2023-08-31 17:51:58 · 955 阅读 · 0 评论 -
后端数据返回前端时,不返回null的字段
方式1其实有一定的局限性。如果项目里继承了WebMvcConfigurationSupport,那么方式1配置就失效了。因此,可以在继承了WebMvcConfigurationSupport的类上,进行全局配置。方式2虽然能达到效果,但是每个实体类上都加注解,实在费劲。只需要在配置文件application上,增加。这种情况下,可以在实体类上加上。转载 2023-08-07 10:01:09 · 599 阅读 · 0 评论 -
常见的限流算法简介
比如限流限制成1s只能访问5次,那么当请求到达时间为T1,就记录下T1+200ms,当再次有请求到达的时候,比较当前时间和记录下时间,只有当前时间大于记录下的时间,可直接访问,否则阻塞等待直到记录下的下次可访问时间,最后修改这个下次可访问时间为当前时间+200ms。令牌桶这里达到限流的目的是通过令牌桶容量和生产令牌的速率来控制的,令牌桶的生产速率就是正常的限流值,比如1s内访问5次,那么令牌产生的速率就是1s生产5个;实现这个的时候一定要注意,限流窗口是一个时间窗口,而时间是会不停的向前流失的。转载 2023-07-18 14:13:33 · 134 阅读 · 0 评论 -
guava限流器RateLimiter使用简介(Springboot实现)
令牌产生的稳定速率,只是这里的速率是转换成了两个令牌生产之间的时间间隔(毫秒)。之所以是稳定速率,是因为SmoothWarmUp,在预热阶段产生令牌的速率会低于这个值。RateLimiter初始化的时候,传入的permitsPerSecond表示的是每秒产生的产生的令牌个数,也就是说令牌的生产速率的时间单位就给固定了,那么stableIntervalMicros = 1s/permitsPerSecond。原创 2023-07-18 14:10:12 · 4710 阅读 · 0 评论 -
18 张图,总结 Java 容器化的最佳实践
经过上面的一些测试后会发现, 在很多文章或文档中描述的参数出现了莫名其妙不好使的情况;这主要是因为容器化这两年一个很重要的更新:Cgroups v2;限于篇幅问题这里不在一一罗列测试截图, 下面仅说一下结论.转载 2023-07-14 11:27:57 · 207 阅读 · 0 评论 -
SpringBoot 通用限流方案(VIP珍藏版)
在大多数的微服务架构在设计之初,比如在技术选型阶段,架构师会从一个全局的视角去规划技术栈的组合,比如结合当前产品的现状考虑是使用dubbo?还是springcloud?作为微服务治理的底层框架。甚至为了满足快速的上线、迭代和交付,直接以springboot为基座进行开发,后续再引入新的技术栈等...所以在谈论某个业务场景具体的技术解决方案时不可一概而论,而是需要结合产品和业务的现状综合评估,以限流来说,在下面的不同的技术架构下具体在选择的时候可能也不一样。转载 2023-06-27 22:17:22 · 358 阅读 · 1 评论 -
java中如何应对构造函数参数过多(构造者模式)
我们在书写一个类的时候,常常会出现一个类的属性有很多,那么就有可能存在这种情况,有一些属性是必须存在的,但是有一些属性是非必须的,根据实际业务来确定。那么这种情况我们该怎么处理类的。总不可能为每一种情况都来写一个构造函数吧?这样代码太冗余了,在new对象的时候也容易出错。其中年龄和姓名是必须的,其他属性是非必须的。来比较优雅的处理这个问题。我们可以通过使用静态。转载 2023-06-26 11:30:00 · 590 阅读 · 0 评论 -
代码统计---使用SourceCounter
提取码:sknc。转载 2023-06-07 11:16:20 · 137 阅读 · 0 评论 -
读写锁简介
为什么读写要互斥,读的时候不能写,写的时候不能读?举个例子,用户A正在读的时候,用户B对数据进行了写操作,就会出现A读到的数据不准确。A在写的时候,B去读,则读到的数据也是不准确的。所以读和写要互斥。转载 2023-06-05 14:13:25 · 279 阅读 · 1 评论 -
WARN No appenders could be found for logger错误
此时我发现我的log4j提示未使用的属性,我就知道是我创建方法不对,我直接在resources下创建一个file写上log4j.properties及其内容,真正的应该是。的错误,因为此次是一个maven工程,所以资源路径应该在resources下面(非maven,放在src的根目录下)提示我们当看到“没有记录器找到附加程序”和“请配置正确的log4j”,此时我就知道是我log4j.相信很多朋友会和我发生一样的日志错误,首先这是一次非常容易的错误,提示我们看Apache。转载 2023-05-30 16:55:29 · 636 阅读 · 1 评论 -
《Java基础知识》Java断言 - - 关键字 assert
IDEA,Eclipse中,断言功能默认是关闭,如果我们需要使用这个功能,需要手动打开它。配置好后,再试试前面的用例。转载 2023-05-30 11:25:43 · 279 阅读 · 0 评论 -
Java--Lambda实现序列化
【代码】Java--Lambda实现序列化。原创 2023-05-24 16:56:53 · 164 阅读 · 0 评论 -
将String转为Date,方便快捷
如果只想获得日期,不想获得具体的时分秒,不管是形如。如果根本不想显示时分秒,可以直接使用。,都可以使用下面的方法转为。如果想获得带具体时间的。,使用下面的方法转为。转载 2023-05-24 11:55:14 · 1558 阅读 · 0 评论 -
Java守护线程
守护线程是所有非守护线程的保姆,当所有非守护线程执行完成或退出了,即使还有守护线程在运行,JVM也会直接退出,因此守护线程通常是用来处理一些辅助工作。典型的守护线程如垃圾回收GC线程,当用户线程都结束后,GC也就没有单独存在的必要,JVM直接退出。Java中,通过Thread类,我们可以创建2种线程,分为守护线程和用户线程。当线程设置为守护线程后,主线程一旦执行完毕,程序退出,守护线程也随着立即终止。反之,对于非守护线程,只要有一个在运行,JVM就不会退出。,也就是创建此线程所在的线程。转载 2023-05-22 15:48:49 · 2170 阅读 · 1 评论 -
Java时间格式字符串与Date的相互转化
时间格式字符串转换为Date是利用。一、将Date转化为格式化字符串。转载 2023-05-17 10:56:37 · 77 阅读 · 0 评论 -
ExecutorService 中 shutdown()、shutdownNow()、awaitTermination() 的区别及使用
但是一个 app 总有结束的时刻,当 app 结束时,ExecutorService 却并不会终止,它将导致 JVM 继续存活并运行。所以,shutdownNow() 并不代表线程池就一定立即就能退出,它也可能必须要等待所有正在执行的任务都执行完成了才能退出。如果你的 app 需要随时响应处理新提交的任务,那。是阻塞的,返回结果是线程池是否已停止(true/false);2. 已经提交的任务(包括正在跑的和队列中等待的),会继续执行完成;方法来实现的,这种方法的作用有限,如果线程中没有。转载 2023-05-16 15:27:08 · 1486 阅读 · 0 评论 -
【Java 8 新特性】Java Consumer示例
接口来自Java 8中引入的 java.util.function包。Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。Consumer的功能方法是accept(T t)。Consumer具有以下方法。这是Consumer功能接口的功能方法。accept方法对给定的参数进行这一操作。此方法返回一个组合的Consumer,该Consumer。转载 2023-05-16 14:26:59 · 3721 阅读 · 0 评论 -
线程同步的注解:@ThreadSafe、@Immutable、@NotThreadSafe、@GuardedBy
Java并发编程中,用到了一些专门为并发编程准备的 Annotation。转载 2023-05-16 14:02:20 · 469 阅读 · 0 评论 -
Java 并发编程 11 - 异步执行框架 Executor
下面是这些类和接口的简介。Executor是一个接口,它是 Executor 框架的基础,它将任务的提交与任务的执行分离开来。是线程池的核心实现类,用来执行被提交的任务。是一个实现类,可以在给定的延迟后运行命令,或者定期执行命令。ScheduledThreadPoolExecutor 比 Timer 更灵活,功能更强大。Future接口和实现 Future 接口的FutureTask类,代表异步计算的结果。Runnable接口和Callable。转载 2023-05-16 11:28:17 · 608 阅读 · 0 评论 -
date、datetime和timestamp类型的区别
1、 date和datetime、timestamp 的区别date保存精度到天,格式为:YYYY-MM-DD,如2016-11-07 datetime和timestamp精度保存到秒,格式为:YYYY-MM-DD HH:MM:SS2、datetime 和timestamp两者都是时间类型字段,格式都一致。两者主要有以下几点区别:最主要的区别-受时区影响不同 timestamp会跟随设置的时区变化而变化,而datetime保存的是绝对值不会变化。因此,如果应用场景有跨时区要求的要特别转载 2023-05-15 17:15:42 · 241 阅读 · 0 评论 -
Java四大引用详解:强引用、软引用、弱引用、虚引用
java4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用。转载 2023-05-06 10:02:37 · 76 阅读 · 0 评论 -
Java中synchronized的几种使用方法
使用 synchronized 无需手动执行加锁和释放锁的操作,我们只需要声明 synchronized 关键字就可以了,JVM 层面会帮我们自动的进行加锁和释放锁的操作。synchronized 可用于修饰普通方法、静态方法和代码块,接下来我们分别来看。用 3 种用法,用它可以来修饰普通方法静态方法和代码块,其中最常用的是修饰代码块,而修饰代码块时需要指定一个加锁对象,这个加锁对象通常使用this或xxx.class来表示,当使用this时,表示使用当前对象来加锁,而使用。转载 2023-04-21 14:44:35 · 306 阅读 · 0 评论 -
java数据类型的转换以及精度丢失
Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,位数不够表示我们整个数值,有些数字不能完全转换,只能无限接近于原本的值,这就导致了在后来的运算会出现不正确结果的情况。double存储需求是8字节(64为),其中1位最高位是符号位,中间11位表示阶位,后52位表示值。float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位表示值。(2)byte型可以转换为short、int、、long、float和double;原创 2023-04-21 11:51:32 · 2507 阅读 · 0 评论 -
HashSet,LinkedHashset, TreeSet的比较
1.HashSet是最常用的,做等值查询效率最高,在开发中,最常用到的就是等值查询。2.TreeSet做范围查询效率较高,在数据库的索引中,范围查询较多,所以树结构主要用来做索引,来提高查询效率。3.LinkedHashSet在一个集合既不能元素重复,又要记录元素的添加顺序时使用。一般使用较少。原创 2023-04-20 19:04:56 · 320 阅读 · 0 评论 -
java - 打印java方法调用堆栈
【代码】java - 打印java方法调用堆栈。转载 2023-04-12 09:00:50 · 193 阅读 · 0 评论 -
如何用 Java 几分钟处理完 30 亿个数据
处理30亿个数据是一项非常复杂和耗时的任务,需要使用一些高效的技术和工具。本文介绍了使用Java多线程、内存映射文件和并行流等技术来处理大量数据的方法。这些技术可以根据不同的应用场景和数据类型进行优化和调整,以达到最佳的性能和效率。转载 2023-04-06 16:19:24 · 86 阅读 · 0 评论 -
接口性能调优方法总结
JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。更正:自己设定初始大小。转载 2023-04-06 16:14:05 · 1184 阅读 · 0 评论 -
常见分布式全局唯一ID生成策略及算法的对比
如果服务挂了,服务重启起来之后,继续生成ID可能会不连续,中间出现空洞(服务内存是保存着0,1,2,3,4,数据库中max-id是4,分配到3时,服务重启了,下次会从5开始分配,3和4就成了空洞,不过这个问题也不大)ID生成服务假设每次批量拉取5个ID,服务访问数据库,将当前ID的最大值修改为4,这样应用访问ID生成服务索要ID,ID生成服务不需要每次访问数据库,就能依次派发0,1,2,3,4这些ID了。如上图,对外提供的服务是主服务,有一个影子服务时刻处于备用状态,当主服务挂了的时候影子服务顶上。转载 2023-02-22 14:30:20 · 198 阅读 · 0 评论 -
Twitter的分布式自增ID算法-->雪花算法(snowflake)
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。转载 2023-02-22 13:48:37 · 354 阅读 · 0 评论 -
JAVA泛型-泛型类的继承
2.2 定义一个继承了父类的泛型子类。2.3 定义一个继承了父类的普通子类。1.1 方式一 :子类也是泛型类。1.2 方式二 :子类不是泛型类。2.4 创建子类的对象使用。2.实现一下泛型类的继承。2.1 定义一个泛型父类。1.泛型类的继承语法。转载 2023-02-07 13:56:19 · 2162 阅读 · 0 评论 -
JAVA 反射的性能测试(JDK8,JDK11对比)
在10亿次的循环测试中,反射的性能大约比普通方法慢了约1.5s,因此可以接受。反射比普通方法要慢很多,关闭检测的反射要比反射快一些。JDK11的反射比JDK8性能略好。原创 2023-02-01 09:39:42 · 703 阅读 · 0 评论 -
Java通过反射获取泛型类型信息
泛型的使用场景就是如上三种,当在类或接口中定义了泛型后,就可以在类或接口中的成员变量、方法参数、方法返回值中也使用泛型;当定义了含有泛型的方法后,就可以在该方法的方法参数、方法返回值和方法内局部变量中使用泛型。要获取泛型信息,必须要注意ParameterizedType类,该类中的getActualTypeArguments()方法可以有效获取泛型信息。我们先创建一个类,该类中正好有含有泛型的成员变量、含有泛型的方法返回值、含有泛型的方法参数。(3)方法返回值的泛型。(2)方法参数的泛型。转载 2023-01-31 10:13:06 · 3196 阅读 · 0 评论 -
JAVA反射之调用方法
的第一个参数是对象实例,即在哪个实例上调用该方法,后面的可变参数要与方法参数一致,否则将报错。如果获取到的Method表示一个静态方法,调用静态方法时,由于无需指定实例对象,所以。使用反射调用方法时,仍然遵循多态原则:即总是调用实际类型的覆写方法(如果存在)。先得到 Method 对象 然后再调用 invoke 方法。对象时,就可以对它进行调用。获取该方法实例,但直接对其调用将得到一个。,不同的bit表示不同的含义。实例时,调用的方法到底是哪个?:返回方法的修饰符,它是一个。对象,同样的,可以通过。转载 2023-01-19 15:08:47 · 3299 阅读 · 0 评论 -
JeeSite资料集合
JeeSite介绍: https://blog.csdn.net/xiaobing_122613/article/details/72841199JeeSite入门介绍(一): https://www.cnblogs.com/ipetergo/p/6643845.html jeesite框架分析理解: https://blog.csdn.net/m0_38021128/article/detail...原创 2018-06-21 16:19:58 · 600 阅读 · 0 评论 -
jeesite代码生成器的使用(实例:报销表)
原文地址: https://blog.csdn.net/m0_38021128/article/details/68490920阅读本文前需要已经搭建好jeesite环境,具体请查看官方文档:http://www.jeesite.com/ PS.官方文档写得含糊且有不少错误,我焦头烂额地配置了两天才搭建好环境,不幸的是忘记记录了,如果有时间以后会写一份搭建环境的文档。本文将使用jeesite生成代...转载 2018-06-25 09:09:52 · 903 阅读 · 0 评论 -
jeesite应用实战(数据增删改查),认真读完后10分钟就能开发一个模块
原文地址: https://blog.csdn.net/qing_gee/article/details/76223064jeesite配置指南(官方文档有坑,我把坑填了!)这篇文章里,我主要把jeesite官方给出的帮助文档的坑填了,按照里面的方法可以搭建起来jeesite的站点。系统可以运行以后,就可以进入开发模块了,我们先从数据的增删改查做起。一、页面效果很简单,涉及到的就是数据的增删改查。...转载 2018-06-26 11:27:43 · 2612 阅读 · 0 评论 -
jeesite快速开发(一对多表,主子表)
原文地址: https://blog.csdn.net/qq_28888837/article/details/80235884jeesite快速开发0.把整个平台导入项目(不介绍 导入平台)1.建立数据库建立数据库之前需要看平台的配置文件system.properties,这个文件在JavaResources下面的src/main/resources/,然后找到其关于数据库的配置信息 j...转载 2018-06-26 11:11:55 · 1818 阅读 · 0 评论 -
Java:直接调用 Runnable的run()方法和 用 new Thread(new Runnable(){...}).start() 方法的区别
直接调用run()方法,其实就是普通调用,没有另开线程。而如下调用才能另开线程。转载 2022-11-25 12:07:49 · 284 阅读 · 0 评论 -
Java实现在图片上添加文字和绘制图框
【代码】Java实现在图片上添加文字和绘制图框。原创 2022-11-18 14:51:22 · 1067 阅读 · 0 评论