
Java
文章平均质量分 52
Java
长空写代码
这个作者很懒,什么都没留下…
展开
-
IDEA搭建JDK1.8源码调试环境
大家好。原创 2024-10-07 22:35:16 · 1380 阅读 · 0 评论 -
Java 比较两个txt格式文本中的内容
文本数据txt1.txt1244112txt2.txt1234562344112需求:在txt2.txt中但是txt1.txt中没有的值代码如下:package text;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayL原创 2020-10-21 15:22:08 · 1255 阅读 · 0 评论 -
作为Java程序员,你真的了解java.util.Arrays么
嗨~大家周末愉快啊,我是阿壮,一个 Java 程序员,最近在工作之余,即没 bug 要改了,也没需求了,又不能让老板看到自己在摸鱼,无聊的我开始 ctrl+鼠标左键,漫无目的的看着眼前的 JDK 源码。今天来更大家分享以下我遇到过的java.util.Arrays下的坑。主要分析三个问题,并给出对于的解决方案通过 asList 返回的固定大侠的 List 不支持添加元素对原始数组的修改会影响到我们获得的那个 List不能直接使用 Arrays.asList 来转换基本类型数组请允许我使用巨佬原创 2021-06-26 23:28:14 · 196 阅读 · 1 评论 -
当Java遇见Hutool 开发效率翻倍
Hutool 是一个 Java 工具类库,提供了大量的工具方法,涵盖了 Java 开发的方方面面,是 Java 开发者不可或缺的利器之一。原创 2023-04-06 19:44:16 · 809 阅读 · 0 评论 -
Java中volatile关键字解析
volatile的定义volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另一个线程能够读到这个修改的值。它不会引起线程的上下文切换和调度。volatile是如何保证可见性的?以在X86处理器生成的汇编指令来查看对volatile写操作的过程。Java代码如下instance = new Singleton(); // instance是volatile变量转换为汇编代码如下0x01a3de1d: mo原创 2021-09-13 01:22:28 · 100 阅读 · 0 评论 -
算法常用小技巧
常用小技巧原创 2023-01-06 15:42:34 · 170 阅读 · 0 评论 -
Java | org.apache.commons.lang3包中工具类StringUtils.isEmpty()和StringUtils.isBlank()区别
StringUtils.isEmpty()StringUtils.isBlank(null) = trueStringUtils.isBlank("") = trueStringUtils.isBlank(" ") = trueStringUtils.isBlank("bob") = falseStringUtils.isBlank(" bob ") = falseStringUtils.isBlank()StringUtils.isNotEm原创 2020-08-17 11:11:31 · 601 阅读 · 0 评论 -
Java 集合中汉字按自然顺序排序
Java中集合自定义排序需要实现Comparator接口按照自然顺序排序,举个例子,张三,拼音是zhangsan,李四拼音是lisi。两人名称首字母分别是z和l,而l在z前面,所以李四排在张三的前面。完整代码如下:import java.text.Collator;import java.util.ArrayList;import java.util.Comparator;import java.util.List;public class Main { public static原创 2021-09-03 18:00:03 · 752 阅读 · 0 评论 -
Java运算符的优先级
优先级运算符结合性1()、[]、{}从左向右2!、+、-、~、++、–从右向左3*、/、%从左向右4+、-从左向右5«、»、>>>从左向右6<、<=、>、>=、instanceof从左向右7==、!=从左向右8&从左向右9^从左向右10|从左向右11&&从左向右12||从左向右13?:从右向左...原创 2021-06-26 10:45:59 · 121 阅读 · 0 评论 -
手写一个Spring Boot Starter
嗨~大家好,我是阿壮,一个后端程序员,今天和大家分享Spring Boot的自动装配原理,并手写一个Starter加深对Spring Boot的理解。众所周知,Spring Boot为了简化开发,省去了Spring中很多的XML文件。为了理解Spring Boot中自动装配的原理,今天我们基于这个机制自己动手实现一个Starter组件。项目结构步骤新建一个名为:redis-spring-boot-starter的Maven项目添加Maven依赖<dependencies>原创 2021-06-29 23:22:40 · 231 阅读 · 2 评论 -
Java中synchronized用法
Java中每个对象都可以作为锁,具体表现为以下三个形式对于普通的同步方法,锁是当前实例对象对于静态同步方法,所示当前类的Class对象对于同步方法块,锁是Synchronized括号里配置的对象。synchronized实现原理JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,两者实现细节不一样。代码块的同步是用monitorenter和monitorexit指令实现的。monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处原创 2021-09-13 01:19:27 · 221 阅读 · 0 评论 -
Spring Boot项目中使用Java原生方式实现websocket
引言WebSocket是JavaEE7新支持的:Javax.websocket.server包含注解,类,接口用于创建和配置服务端点Javax.websocket包则包含服务端点和客户断电公用的注解,类,接口,异常目录结构一、Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <g原创 2020-11-09 23:31:29 · 870 阅读 · 0 评论 -
Java | XML和Map互相转换工具类(全)
超详细的XML和Map互相转换工具类原创 2020-04-26 16:02:22 · 3240 阅读 · 0 评论 -
为什么推荐你使用BigDecimal进行浮点数计算?
封面图大家好,我是阿壮,一个在互联网苟且偷生的程序员,今天和大家分享一下开发中遇到的浮点数计算该怎么办?为什么 0.1+0.2 != 0.3?先看一个诡异的代码浮点数的编码方式首先我们需要知道在计算机的世界里,0.1+0.2 为什么不等于 0.3 的,大家可以自己尝试一下,这里就牵扯到了浮点数的编码方式,浮点数在计算机中的存储方式遵循 IEEE 754 浮点数计数标准,可以表示为采用尾数 + 阶码的编码方式,符号(S)、阶码部分(E)、尾数部分(M)三个确定下来,就可以确定一个浮点数。原创 2021-07-30 22:27:02 · 275 阅读 · 0 评论 -
Java | Java中转发和重定向的区别
面试中常问的问题原创 2020-03-05 10:23:31 · 597 阅读 · 0 评论 -
千字长文 | 学习编程这么多年,聊一聊Java和Go
Java和Go如何选择原创 2022-09-12 00:04:19 · 2032 阅读 · 0 评论 -
Java实现 甘特图-最短工时算法
题目一个最短工时的算法,p1,p2,p3,p4为工作,分为10个作业,数字运算采用BigDecimal运算,防止精度丢失。代码public class Test { // p1 p2 p3 p4为工位,数组内的值为作业需要的时间 static BigDecimal[] p1 = {BigDecimal.valueOf(7.988652), BigDecimal.valueOf(8.770062), BigDecimal.valueOf(12.952448), BigDecimal.va原创 2021-08-13 21:32:13 · 969 阅读 · 0 评论 -
Java map 详解 - 用法、遍历、排序、常用API等
Map用法类型介绍Java 自带了各种 Map 类,这些 Map 类可归为三种类型:通用Map用于在应用程序中管理映射,通常在 java.util 程序包中实现 HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap专用Map通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问 java.util.jar.Attributes、javax.print转载 2020-11-23 23:53:56 · 287 阅读 · 0 评论 -
Java | SpringBoot+Mybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel(详细)
Java web 实现excel和数据库之间的导入和导出原创 2020-06-10 14:49:32 · 3658 阅读 · 8 评论 -
Java BigDecimal 小数转百分比
public static void main(String[] args) { String s = "0.44335000000005"; DecimalFormat decimalFormat = new DecimalFormat("###,###.##%"); BigDecimal bigDecimal = new BigDecimal(s); System.out.println(decimalFormat.format(bigDe原创 2020-11-04 17:59:09 · 2162 阅读 · 0 评论 -
Java实现 给出一个value为前缀字符串的Map集合,找出需求字符串匹配最长前缀的key值
import java.util.HashMap;import java.util.Map;public class test { public static void main(String[] args) { HashMap<Long, String> map = new HashMap<>(); map.put(11L, "ab"); map.put(20L, "abc"); map.put(35L,原创 2021-03-31 14:17:59 · 730 阅读 · 0 评论 -
Java | Java 实现 utf8 MD2 亿次加密工具类
public class util{ public static String MD2(String str) throws NoSuchAlgorithmException { // 获取MD2加密工具 MessageDigest md = MessageDigest.getInstance("MD2"); // 加密 byte[] digest = md.digest(str.getBytes()); // 获取二进原创 2020-08-06 17:48:21 · 2522 阅读 · 5 评论 -
Java | split()方法详解以及split()后开头多出空字符串的原因分析
split()方法介绍java.lang.string.splitsplit()方法的作用是将一个字符串按照指定的分隔符分割为多个子字符串,然后将结果拼接为字符串数组返回。测试Java代码import java.util.Arrays;public class Test { public static void main(String[] args) { String str = ",1,"; String[] split = str.split(",原创 2021-01-29 15:59:59 · 2607 阅读 · 0 评论 -
Java 获取上周 本周 近七天 昨天 今天 的开始和结束时间
需要引入Hutool工具类<dependencies> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.14</version> </dependency>原创 2021-11-01 10:18:19 · 3392 阅读 · 2 评论 -
如何解决OOM?java.lang.OutOfMemoryError
可能出现OOM的原因请求创建一个超大对象,通常是一个大数组。超出预期的访问量/数据量。过多资源没有被释放。过度使用Finalizer终结器,导致该对象没有立即被GC。常见的解决办法JVM使用-Xmx参数调高 JVM 堆内存空间。如果是超大对象的情况,需检查代码的合理性,是否是查询出所有结果没有对结果长度进行限制。限流,削峰。常见的限流方案有令牌桶算法。检查代码,修改代码设计,比如及时释放资源,多线程数量太多。...原创 2021-09-13 01:45:03 · 338 阅读 · 0 评论 -
IDEA线上排错神器之Remote JVM Debug(JVM远程Debug)
首先我们新建一个最简单的 Spring Boot 项目,输出 12345 是为了方便我们调试通过 Maven 进行打包,并上传至远程服务器,我这里使用的虚拟机使用以下命令运行 jar# JDK5-8java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remote-jvm-debug-0.0.1-SNAPSHOT.jar以上参数可以在 IDEA 中找到,根据自己 JDK 的版本 copy 参数原创 2022-02-08 16:44:06 · 3611 阅读 · 0 评论 -
将2019-06-03T16:00:00.000Z日期格式转换为2019-06-03 16:00:00格式
package com.springboot.util;import cn.hutool.core.util.StrUtil;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;public class DateUtil { /** * 将20原创 2021-03-31 00:55:28 · 466 阅读 · 0 评论 -
Java内置lock锁保证线程安全的去重容器CopyOnWriteArraySet 源码解读
简介CopyOnWriteArraySet是内置lock锁保证线程安全的去重容器CopyOnWriteArraySet结构图:如何保证线程安全源码如下:public class CopyOnWriteArrayList<E> { final transient ReentrantLock lock = new ReentrantLock(); private transient volatile Object[] array;}集合的本质是一个变长的数组,使用v原创 2021-09-27 15:01:26 · 343 阅读 · 0 评论 -
一文吃透sessionID和cookie
一、cookie机制和session机制的区别具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择二、会话cookie和持久cookie的区别如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话原创 2020-07-24 14:18:56 · 2479 阅读 · 1 评论 -
Java | 多条件模糊查询 jsp+servlet实现
根据多个条件进行模糊查询思路:判断前端传来的数据,判断那些条件是填写的,最后在Dao层判断进行sql语句拼接原创 2019-12-29 13:04:37 · 3922 阅读 · 3 评论 -
Java8日期处理
import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;public class Test { public static void main(String[] args) { // 1. Java 8中获取今天的日期 LocalDate today = LocalDate.now(); System.ou原创 2021-03-23 14:58:53 · 156 阅读 · 3 评论 -
Java中Arrays类的一些坑
通过asList返回的固定大侠的List不支持添加元素代码public static void main(String[] args) { String[] arr = new String[]{"aa", "bb"}; List<String> list = Arrays.asList(arr); list.add("cc"); }执行结果Exception in thread "main" java.lang.Unsuppor原创 2021-05-08 11:27:50 · 493 阅读 · 0 评论 -
Java | Java实现url和二维码之间的转换工具类 zxing(全)
java实现二维码(带logo)的绘制和解析原创 2020-06-26 00:46:30 · 1147 阅读 · 0 评论 -
Calendar类方式获取Date类型 年 月 日
JDK中这些方法已经弃用Calendar类方式获取Calendar calendar = Calendar.getInstance();calendar.setTime(new Date()); // 传入Date类型数据 calendar.get(Calendar.YEAR); // 获取年份calendar.get(Calendar.MONTH); // 获取月份calendar.get(Calendar.DATE); // 获取日 calendar.get(Calendar.HOU原创 2021-03-31 00:58:55 · 993 阅读 · 1 评论 -
Java | 替换内容中的多个关键字为红色样式返回给前端
实际工作中常会遇到一个这样的需求,将搜索到的关键字用红色高亮显示keywords 为 List 集合for (SafetyPromotionMsg safetyPromotionMsg : selectByPage.getContent()) { String msgContent = safetyPromotionMsg.getMsgContent(); for (String s : keywords) {原创 2020-09-14 09:44:43 · 1343 阅读 · 0 评论 -
Java | IP工具类(获取访问者的ip地址 & 查询IP地址)
Java util IP工具类原创 2020-07-20 18:05:20 · 1261 阅读 · 0 评论 -
Java GUI | 用Java开发了一个贪吃蛇小游戏
我用Java开发了一个贪吃蛇小游戏原创 2020-06-02 16:45:53 · 2164 阅读 · 5 评论 -
Java | 系统环境监控工具类
1.获取jvm中堆内存信息2.获取jvm中非堆内存信息3.获取内存信息4.获取CPU信息5.获取磁盘信息6.判断系统是否为windows7.取linux 磁盘使用率8.Linux 执行系统命令原创 2020-07-20 18:30:36 · 613 阅读 · 0 评论 -
从小白到高手:掌握BeanUtils.copyProperties的技巧
Spring 中的工具类原创 2023-04-06 19:50:34 · 962 阅读 · 0 评论 -
Java使用线程池前后执行速度对比
本例中使用Java自带方法实现线程池,并比较不使用多线程和使用多线程使用冒泡排序排序有50000个元素的数组10次所消耗的时间。代码import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class main { public static void main(String[] ar原创 2020-09-30 22:22:18 · 725 阅读 · 0 评论