
java语言
文章平均质量分 67
狂奔的蜗牛Evan
hello world
展开
-
Java中取余(%)和取模(Math.floorMod)的区别
之前一直都认为取模和取余是一样的,甚至还怀疑设计语言的大神们不是脑子有问题么,为什么要整两个一样的东西,现在想想还是自己太 low了,竟然不能 get 到大神们的良苦用心。实对比上面的结果 ,其实你已经看出一点猫腻了,只是不敢确认而已,没错,就是你心里想的那样的。如果两个数符号相同的话,取模和取余结果是一样的(我们平常用的时候刚好前后两个数字是一样的,所以才有那个误解),如果两个数字符号不相同的话,那么取模和取余结果那就是天差地别了。取模:mod(x,y)=x-y.*floor(x./y)转载 2024-01-08 20:26:35 · 412 阅读 · 0 评论 -
String的hashCode可能会返回负数&解决方案
【代码】String的hashCode可能会返回负数&解决方案。转载 2024-01-08 20:19:32 · 1183 阅读 · 0 评论 -
感受 lambda 之美-函数式编程
函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型。使用@FunctionalInterface注解修饰的类,编译器会检测该类是否只有一个抽象方法或接口,否则,会报错。可以有多个默认方法,静态方法。转载 2023-12-27 00:09:43 · 401 阅读 · 0 评论 -
7个理由:从Java8升级到Java17
从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统发生了很多变化。最显着的变化是 Java 的发布节奏。Java 8 于 2014 年发布,Java 17 于 2021 年发布。这两个版本之间相隔了 7 年。Java17是一个长期支持(LTS)的版本,会有更稳定和持久的维护和更新。如果你和我一样,已经使用Java 8很长时间了,觉得需要了解一下Java的新特性,那么这篇文章就是为你准备的。转载 2023-12-24 11:29:53 · 137 阅读 · 0 评论 -
关于java中使用split方法丢失末尾空值
使用默认的split方法时,会默认丢弃字符串末尾的空值,而字符串中间的空值则会作为数组中的一项数据,不会被丢弃。1、如果 n 大于 0,代表分割字符串后数组的最大长度,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n ,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。2、如果 n 为非正,代表获取数组所有值,不会丢弃末尾空值,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。3、如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。原创 2023-08-30 00:56:41 · 1656 阅读 · 0 评论 -
ReentrantLock以及AQS实现原理
OK,本文到这里为止,基本借着ReentrantLock的加锁和释放锁的过程,给大家讲清楚了其底层依赖的AQS的核心原理。基本上大家把这篇文章看懂,以后再也不会担心面试的时候被问到:谈谈你对AQS的理解这种问题了。其实一句话总结AQS就是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。转载 2023-02-09 10:49:11 · 356 阅读 · 0 评论 -
Synchronized的底层实现原理(看这篇就够了)
如果持有锁的线程在较短的时间内释放了锁,自旋锁的效果就比较好,如果持有锁的线程很长时间都不释放锁,自旋的线程就会白白浪费资源,所以一般线程自旋的次数必须有一个限制,该次数可以通过参数-XX:PreBlockSpin调整,一般默认为10。锁的状态会随着竞争激烈逐渐升级,但通常情况下,锁的状态只能升级不能降级。轻量级锁的获取流程:首先判断当前对象是否处于一个无锁的状态,如果是,Java虚拟机将在当前线程的栈帧建立一个锁记录(Lock Record),用于存储对象目前的Mark Word的拷贝,如图所示。转载 2023-02-08 23:46:00 · 1635 阅读 · 0 评论 -
log4j2 ThresholdFilter onMatch/onMismatch neutral/accept
在log4j2里面日志有8个等级,由低到高是:all转载 2022-06-08 14:47:32 · 3006 阅读 · 1 评论 -
Java:正则表达式-命名捕获
第一段代码:String replacement = "${segment}";String regexp = "/red(?<segment>.*)"; String path = "/red/blue/k.do";String newPath = path.replaceAll(regexp, replacement); System.out.println(newPath);其执行结果:/blue/k.do这段代码看起来不太好理解,实际上String.转载 2022-05-18 00:31:12 · 711 阅读 · 0 评论 -
google kaptcha 验证码组件使用简介
kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中。使用kaptcha可以方便的配置:验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以转载 2022-05-11 23:40:21 · 4190 阅读 · 0 评论 -
使用freemarker模板取值时,当属性为空时报错
freemarker中表达式 ${(user.name)!"}当name为空时,直接报错。FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,用FreeMarker判断对象是否为空的方法。一般数据在后端判断, 前端不管逻辑只管显示。freemarker中显示某对象使用${name}.但如果name为null,freemarker就会报错。如果需要判断对象是否为空:<#if name??>……</#if>。当然也可以通过设置默认值${name转载 2022-04-19 20:28:15 · 1658 阅读 · 0 评论 -
HTML页面导出为PDF(JSPDF、ITEXT、WKHTMLTOPDF)
html页面导出pdf,本来是一件很简单的事情,在浏览器直接打印(Mac快捷键为⌘+p;Windows快捷键为ctrl+p),就可以把页面另存为pdf文件,但对于要经常把页面导出为pdf的用户来说并不友好,一个合格程序员的标准就是:做出来的软件猪都要会用,否则你就是猪。调研了几种html导出pdf的实现方式,这里把要点记录下来分享下。调研对象 优点 缺点 分页 图片 表格 链接 中文 特殊字符、样式 导出样例 备注 jsPDF 1转载 2022-04-13 21:18:05 · 7653 阅读 · 3 评论 -
Java的FreeMarker模板引擎的几种模板加载方式
1. 介绍1.1 介绍上一课福哥带着大家学习了Java的FreeMarker模板引擎的使用技巧,其实FreeMarker除了可以通过指定模板根目录的方式加载模板外,还有非常多的个性化的模板加载方式,在不同的场合下使用适合的加载方式会让我们编写代码更加方便,同时运行效率也会更高。FreeMarker支持的模板加载方式包括字符串加载(StringTemplateLoader)、类加载(ClassTemplateLoader)、文件加载(FileTemplateLoader)、网址加载(URLTemp转载 2022-04-13 00:53:33 · 5389 阅读 · 0 评论 -
itextpdf中XMLWorkerHelper中文不显示
XMLWorkerHelper生成pdf在windows下正常。但是linux下因为font文件不存在所以中文不显示。要使用itext-assian jar包。1.maven中添加 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <versio原创 2022-04-13 00:47:47 · 2231 阅读 · 1 评论 -
freemarker模板加载TemplateLoader常见方式
使用过freemarker的肯定其见过如下情况:java.io.FileNotFoundException:Templatexxx.ftlnotfound. 模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢?经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。API的TemplateLoader是一个接口,他有如下几个...转载 2022-04-13 00:39:31 · 2973 阅读 · 0 评论 -
freemaker模板位置ClassTemplateLoader的绝对路径相对路径设置方法
在freemarker中加载模板有两种方式FileTemplateLoader和ClassTemplateLoaderFileTemplateLoader用于加载文件目录的模板ClassTemplateLoader用于加载工程目录内的模板加载resources下面的模板需要用ClassTemplateLoader注意:ClassTemplateLoader(FreemarkerDemo.class,"/templates/") 这种是绝对路径。ClassTemplateLoader转载 2022-04-13 00:36:01 · 1883 阅读 · 0 评论 -
打包成jar后读取文件的大坑:使用ClassPathResource获取classpath下文件失败
在springboot项目中,resource下创建data目录,然后把test.txt文件放进去,通过下面代码是可以读取其中内容的:private static List<Integer> test(String filePath) { try { ClassPathResource classpathResource = new ClassPathResource(filePath); File file = classpathResource....转载 2022-04-11 22:57:36 · 5504 阅读 · 1 评论 -
AES加密异常java.security.InvalidKeyException: Illegal key size 的解决方法
JDK1.8.0_121版本1. 项目使用AES加密,出现异常如下:java.security.InvalidKeyException: Illegal key size2. 为解决“AES的256位密钥加解密报 java.security.InvalidKeyException: Illegal key size or default parameters 异常”问题:需要使用oracle提供的无政策限制权限文件,在oracle官网上下载JDK对应版本的JCE文件,替换jre1.x\lib\s转载 2022-03-01 14:39:16 · 2645 阅读 · 0 评论 -
java.security.InvalidKeyException: Illegal key size (JDK1.8.0_151的无限制强度加密策略文件变动)
JDK1.8.0_151无需去官网下载local_policy.jarUS_export_policy.jar这个jar包,只需要修改Java\jdk1.8.0_151\jre\lib\security这目录下的java.security文件配置即可。随着越来越多的第三方工具只支持 JDK8,最近公司也计划从 JDK7 升级到 JDK8,在线下环境升级过程中,发现某些项目报以下异常:java.security.InvalidKeyException: Illegal key size..转载 2022-03-01 14:36:01 · 573 阅读 · 0 评论 -
Slf4j与log4j及log4j2的关系及使用方法
slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2,要在系统中使用slf4j,我们需要引入的核心包为:slf4j-api-1.6.4.jar。slf4j与log4j2的桥接包:log4j-slf4j-impl-2.7.jar,这个包的作用就是使用slf4j的api,但是底层实现是基于log4j2.转载 2021-12-10 23:43:19 · 5175 阅读 · 0 评论 -
commons-io包FileUtils.copyInputStreamToFile方法debug时异常
FileUtils.copyInputStreamToFile方法本地debug时提示Variables debug info not available,并且try...catch捕捉不到异常。程序异常退出。查看debug数据和项目日志均没发现具体问题报错。在自己电脑本地排查多久也没找到问题原因,源码也debug不进去。让其他同事在他们电脑上尝试debug发现结果是可以使用的。那就是我本地环境的问题。具体是什么问题呢?偶然间发现tomcat日志中有错误日志,错误原因描述的很清...原创 2021-09-04 10:15:54 · 3417 阅读 · 1 评论 -
@JSONField的一些使用基础
1、@JSONField介绍fastjson是阿里巴巴出品的快速解析json的一个工具,@JSONField就是里面为数不多的注解之一.也是最为重要的注解.它的内容如下:/* * Copyright 1999-2017 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance wit转载 2021-08-11 14:31:31 · 12290 阅读 · 0 评论 -
单例模式的多种实现(饿汉、懒汉、双重锁、内部类、枚举类)
前言单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车。单例模式的定义单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要优于静态变量,静态变量在程序启动的时候JVM就会进行加载,如果不使用,会造成大量的资源浪费,单例模式能够实现懒加载,能够在使用实例的时候才去创建实例。开发工具类库中的很多工具类都应用了单例转载 2021-04-21 10:31:40 · 445 阅读 · 0 评论 -
JAVA8 BiConsumer 接口
这个接口跟《JAVA8 Consumer接口》很像,表达的想法也是一致的,都是消费的意思,我们先看下接口定义@FunctionalInterfacepublic interface BiConsumer<T, U> { void accept(T t, U u); /**本接口中的accept先执行,传入的BiConsumer 接口类型的参数,后执行accept*/ default BiConsumer<T, U> andThen(BiCo转载 2021-04-08 19:07:49 · 338 阅读 · 0 评论 -
Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析
put操作:jdk1.7中的扩容插入红黑树简介:原文地址:https://blog.csdn.net/xs521860/article/details/59484291转载 2021-03-28 14:25:39 · 215 阅读 · 0 评论 -
java使用第三方字体库的方法,使用第三方ttf/ttc等字体库的方法
java 使用外部字体(.ttf) 完整类有时候我们在程序中,会使用到Java字体,但不是所有的字体系统中都会有,我们就可能会使用外部自定义字体,这样在程序迁移部署中就会少些工作,最近在一个项目中使用到了自定义字体文件,理顺了,记之。import java.awt.Font;import java.io.File;import java.io.FileInputStream;public class Loadfont{ public static Font loadFont(Strin转载 2021-03-24 19:05:19 · 9552 阅读 · 1 评论 -
自Java 7u13以来,字体字形无法使用Graphics2D drawString呈现
在Windows10上使用Java32bit中的某些特定真实字体字体绘制字符串时,我遇到了一个奇怪的问题.从Java 7u13开始,每当字体的字符/字形宽度超过其高度的4倍时,它就不会使用Graphics2D.drawString进行渲染(例如,字形4001em宽,基本字体大小为1000em):public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setFont(new Font("m...转载 2021-03-24 18:52:31 · 641 阅读 · 0 评论 -
java画图使用字体出现的问题
ava是门跨平台的语音,众所周知,但是使用java底层画图的API,比如jfreechart,Graphics等,会发现使用中文的字体出现如下类似的情况:此问题原因归咎于:系统本身不支持中文的字体。检测系统平台的两个工具类:import java.awt.*;/*** Created by fengch on 2018/1/24.*/public class FontTest { public static void main(String[] args) { ...转载 2021-03-24 18:41:15 · 1270 阅读 · 0 评论 -
spring boot + freemarker 静态化以及遇到的坑
页面静态化是网站开发过程中经常遇到的一个问题,今天主要讲的是spring boot 结合freemarker的静态化的方法。第一步,引入相应的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </depen...转载 2021-03-19 14:29:26 · 1398 阅读 · 3 评论 -
彻底解决POI 读写excel 发生OOM问题
说实话之前之前没怎么接触过POI组件,只知道有这么一个东西可以解决excel读写问题,但不用不知道,使用起来真心无语,到处都是坑。接下来我讲分享一些在项目中遇到的坑及解决方法,其实社区也有不少类似文章,但讲的都比较零散。1..xls与.xlsx首先,科普一些基础常识:.xls 是用03版Office Excel ,新建Excel默认保存的Excel文件格式的后缀是.xls,不可以打开编辑07版的xlsx文件,否则出现乱码或者卡死。行列的上限为 65536行,256列。.xlsx 是用07版O.转载 2021-03-19 11:54:40 · 4157 阅读 · 0 评论 -
java绘图-根据图片文字动态生成图片(Graphics2D)
今天在做热敏打印机打印二维码,并有文字描述,想到的简单的方法就是根据热敏打印机的纸张宽度和高度,生成对应的图片,如下:package com.orisdom.utils;import lombok.extern.slf4j.Slf4j;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInput转载 2021-02-25 11:14:23 · 1107 阅读 · 0 评论 -
java绘图- 绘图用法(基于Graphics2D)
java绘图(基于Graphics2D)1.绘图基本操作请参考下面基础示例: 1 int width = 200, height = 250; 2 //创建图片对象 3 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); 4 //基于图片对象打开绘图 5 Graphics2D gra转载 2021-03-16 13:52:58 · 1786 阅读 · 0 评论 -
java绘图--zxing生成条形码和二维吗
java zxing 生成条形码和二维吗依赖<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version></dependency><dependency> <groupId>com.google.转载 2021-03-16 13:38:21 · 389 阅读 · 0 评论 -
Java8学习--Map的compute方法
你只会用 map.put?试试 Java 8 compute ,操作 Map 更轻松!今天栈长分享一个实用的 Java 8 开发技能,那就是 Map 接口中增加的compute方法,给 Map 集合计算更新用的。compute简介如下所示,Java 8 在 Map 和 ConcurrentMap 接口中都增加了 3 个compute方法,说明也是支持多线程并发安全操作的。这三个方法的区别: compute:计算并更新值 computeIfAbsent:V...转载 2021-03-15 14:19:33 · 3702 阅读 · 0 评论 -
正则表达式(经纬度、手机号、时间)
经纬度的正则表达式经度的范围是0-180,保留6位小数的正则表达式:”^(([1-9]\d?)|(1[0-7]\d))(\.\d{1,6})|180|0(\.\d{1,6})?”维度的范围是0−90,保留6位小数的正则表达式:”(([1−8]\d?)|([1−8]\d))(\.\d1,6)|90|0(\.\d1,6)?”JAVA代码: /** * 经度校验 * * @param value * @return */ pr...原创 2021-03-11 11:59:33 · 2197 阅读 · 0 评论 -
lombok @Accessors 的三种用法的解释
@Accessors Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性fluent fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下@Data@Accessors(fluent = true)public class User { private Long id; private String name;转载 2021-03-06 14:28:38 · 287 阅读 · 0 评论 -
java8 stream流 将一个list转换成list
案例一: // 利用stream进行类型转化 List<String> stringList = new ArrayList<>(); stringList.add("a11"); stringList.add("b11"); stringList.add("c11"); stringList.add("d11"); stringList.add("e11"); ...原创 2021-03-04 12:00:00 · 26308 阅读 · 4 评论 -
Java 15 正式发布, 14 个新特性,刷新你的认知!!
JDK 15 2020/09/15 如期而至!这个时间牛逼啊,和苹果发布会同天?OracleJDK 15 发布地址:https://www.oracle.com/java/technologies/javase/15all-relnotes.htmlOpenJDK 15 发布地址:https://openjdk.java.net/projects/jdk/15/OracleJDK 和 OpenJDK 两者的区别这里不撰述了,不清楚的请点击这里进行查看。现在的 JDK转载 2021-01-08 16:53:56 · 297 阅读 · 0 评论 -
Java的四种引用之强弱软虚
在java中提供4个级别的引用:强引用、软引用、弱引用和虚引用。除了强引用外,其他3中引用均可以在java.lang.ref包中找到对应的类。开发人员可以在应用程序中直接使用他们。1 强引用强引用就是程序中一般使用的引用类型,强引用的对象是可触及的,不会被回收。相对的,软引用、弱引用和虚引用的对象是软可触及的、弱可触及的和虚可触及的,在一定条件下,都是可以被回收的。强引用示例:StringBuffer str = new StringBuffer("Hello world");假设以上代码.转载 2020-12-28 23:11:04 · 545 阅读 · 0 评论 -
Java运算符>>与>>>区别详解
1、>>带符号右移(相当于除以2)。正数右移高位补0,负数右移高位补1。比如:4 >> 1,4的原码为0000 0000 0000 0000 0000 0000 0000 0100,右移一位后为0000 0000 0000 0000 0000 0000 0000 0010,转成十进制为2。-4 >> 1,-4的原码为1000 0000 0000 0000 0000 0000 0000 0100,补码为1111 1111 1111 1111 1111 1111转载 2020-12-28 18:45:15 · 595 阅读 · 0 评论