![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 64
漠然&&
将与大家分享我在Java编程领域积累的丰富经验和最新技术见解,让我们一起在Java编程的道路上携手前行,相互学习,共同成为更优秀的程序员!在这个过程中,我们可以一起探讨问题、交流心得,相信一定会收获满满。期待与大家共同成长!
展开
-
Java的简约哲学:运算符重载的缺席与编程思想
尽管这一决策可能让习惯于运算符重载的开发者感到不适应,但一旦你领略到Java的简约之美,你会发现这个世界其实可以变得更加清晰和美好。Java,作为一门深受欢迎的编程语言,以其“编写一次,到处运行”的理念和简约的设计哲学赢得了全球开发者的青睐。通过方法重载,Java鼓励开发者使用明确的方法名来描述操作,这样不仅提高了代码的可读性,也强化了对象的封装性。嗨,大家好,欢迎来到程序猿漠然公众号,我是漠然。原创 2024-03-29 10:15:00 · 393 阅读 · 1 评论 -
Fastjson库将JSONObject转换为实体类
Fastjson是一个由阿里巴巴开发的高性能JSON处理库,它简化了JSON数据的读写操作。总之,Fastjson提供了一套非常便捷的API来处理JSON和Java对象之间的转换,这在Web服务交互和数据传输中是非常有用的。在实际应用中,请确保处理异常和空指针检查,以保证程序的健壮性。方法接收两个参数,第一个参数是JSONObject转换成的JSON字符串,第二个参数是目标实体类Ztest的Class对象。原创 2024-01-14 12:49:49 · 1446 阅读 · 0 评论 -
锁的艺术:Java 中的锁类型与欢乐杂谈
记住,锁的世界就像是一部复杂的芭蕾舞剧,每个角色都有自己的舞蹈,而我们的任务就是确保每个人都能跳得开心。在这个过程中,我会尽量让你们在笑声中学习,所以请准备好你的笑脸和耳朵,因为这是一场关于锁的喜剧之旅。在偏向锁的管理下,锁会偏爱第一个访问它的线程,就像服务员总是优先服务他最喜欢的顾客一样。当线程尝试获取锁时,它不会直接放弃,而是会围着锁转来转去,就像是在跳一场不停旋转的探戈。轻量级锁就像是那个在舞蹈中轻盈跳跃的舞者。分段锁适用于高度并发的场景,通过将数据分成多个段,可以减少锁竞争,提高系统的并发性能。原创 2024-01-13 09:15:00 · 478 阅读 · 0 评论 -
Java 引用类型原理:深入剖析
嗨,大家好,欢迎来到公众号,我是漠然。在 Java 编程语言中,引用类型就像是一张神秘的地图,它指引着我们找到内存中的宝藏——也就是对象。引用类型主要有两类:对象类型和数组类型。别看它们长得差不多,其实它们可是有各自的秘密花园的。原创 2024-01-04 21:18:51 · 391 阅读 · 0 评论 -
100%会用到的hashCode()和equals()方法及使用规范
在Java编程中,正确使用equals()和hashCode()方法至关重要。我们需要根据业务逻辑重写这两个方法,并遵循上述规范。只有这样,我们才能保证对象的身份证系统正常运行,避免出现数据结构混乱和异常。记住,当你在Java的海洋中航行时,equals()和hashCode()就是你的指南针,没有它们,你可能会在茫茫代码中迷失方向。程序猿漠然,一个分享有趣后端知识的公众号。原创 2024-01-03 21:17:46 · 395 阅读 · 0 评论 -
Java序列化与反序列化三连问:是什么?为什么要?如何做?
总结: Java序列化和反序列化就像是神奇的魔法,让我们可以轻松地保存和恢复对象的状态。Java序列化,简单来说,就是将我们的Java对象转换成字节序列,以便于存储或传输。比如说,当我们需要将对象的状态保存到文件或数据库中,或者通过网络传输对象时,序列化和反序列化就派上了用场。原因其实很简单,它们为我们提供了一种便捷的方式,让我们可以在不同场景下轻松地保存和恢复对象的状态。而反序列化,则是序列化的逆过程。原创 2023-12-21 21:34:14 · 70 阅读 · 0 评论 -
说说Synchronized及实现原理
嗨,大家好,欢迎来到公众号,我是漠然。作为一名Java工程师,我相信大家都有过这样的经历:在开发多线程程序时,为了实现线程之间的通信,费尽了心思,有时甚至感到焦头烂额。那么,为什么线程之间的通信如此复杂?又有哪些方法可以实现线程之间的通信呢?今天,我将和大家一起探讨这个问题,并尝试用幽默风趣的语言和例子,让大家对线程通信有更深刻的理解。首先,让我们思考一下,为什么线程之间需要通信?简单来说,线程通信就是为了解决多线程环境下,不同线程之间需要协作完成某个任务的问题。原创 2023-12-20 21:03:19 · 55 阅读 · 0 评论 -
谈谈我对Java线程之间通信方式的理解
嗨,大家好,欢迎来到公众号,我是漠然。作为一名Java工程师,我相信大家都有过这样的经历:在开发多线程程序时,为了实现线程之间的通信,费尽了心思,有时甚至感到焦头烂额。那么,为什么线程之间的通信如此复杂?又有哪些方法可以实现线程之间的通信呢?今天,我将和大家一起探讨这个问题,并尝试用幽默风趣的语言和例子,让大家对线程通信有更深刻的理解。首先,让我们思考一下,为什么线程之间需要通信?简单来说,线程通信就是为了解决多线程环境下,不同线程之间需要协作完成某个任务的问题。原创 2023-12-19 21:13:15 · 40 阅读 · 0 评论 -
Map、List、Set 分别说下线程安全类和线程不安全的类
2. 线程不安全的类:HashMap HashMap 是 Java 提供的一个非线程安全的 HashMap 实现类。总结 本文介绍了 Map、List、Set 三个集合类型的线程安全类和线程不安全的类,并给出了示例代码。Map、List、Set 是 Java 中非常常用的集合类,它们在多线程环境下有各自的线程安全类和线程不安全的类。本文将分别介绍这三个集合类型的线程安全类和线程不安全的类,并举例说明。原创 2023-12-18 21:44:47 · 300 阅读 · 0 评论 -
数据量很大的情况下,分页查询的优化方案
嗨,大家好,欢迎来到公众号,我是漠然。在数据量很大的情况下,分页查询往往会导致查询速度变慢,影响用户体验。作为一Java工程师,我认为可以从以下几个方面来优化分页查询。原创 2023-12-17 21:26:56 · 678 阅读 · 0 评论 -
Delete、Truncate、Drop的区别有哪些,该如何选择
Delete、Truncate、Drop的区别有哪些,该如何选择?嗨,大家好,欢迎来到公众号,我是漠然。我们经常需要处理数据库的操作,其中delete、truncate、drop是三种常用的数据删除方式。虽然它们都可以用来删除数据,但是它们之间存在一些重要的区别。在这篇文章中,我将详细解释这三种方式的区别,并提供一些选择建议。原创 2023-12-16 21:33:16 · 71 阅读 · 0 评论 -
你知道为什么要加 final 关键字了吗?
嗨,大家好,欢迎来到公众号,我是漠然。在Java编程中,我们经常会遇到需要使用final关键字的情况。那么,为什么要使用final关键字呢?它到底有什么作用?本文将从以下几个方面来详细解析final关键字的作用以及它在Java8和Java7中的区别当我们使用final关键字修饰一个变量时,这个变量的值在初始化后就不能再被改变。这对于那些需要保持不变的对象特别有用,例如常量。在多线程环境下,不可变对象可以避免因线程安全问题导致的错误。原创 2023-12-15 22:13:35 · 115 阅读 · 0 评论 -
Object类详解
解答:hashCode()方法和equals()方法都是用来描述对象状态的方法,但它们的目的和实现方式不同。解答:toString()方法和equals()方法都是用来描述对象状态的方法,但它们的目的和实现方式不同。toString()方法返回一个字符串,该字符串是对象状态的文本表示,主要用于打印对象信息。默认的实现方式是,如果两个对象的类相同,且所有属性都相等,那么它们就相等。这个方法返回对象的类对象。原创 2023-12-12 22:33:00 · 33 阅读 · 0 评论 -
深入解析Java中的String:特点、重要方法及源码分析
Java的String类是Java语言中最常用的类之一。作为一位Java高级工程师,了解String类的特性和方法对于编写高效和优化的Java代码至关重要。在这篇技术博客中,我们将深入探讨String类的特点,介绍其中一些重要的方法,并分析其源码以获得更深入的理解。原创 2023-12-11 22:25:36 · 56 阅读 · 0 评论 -
1 亿个数据取出最大前 100 个有什么方法?
在计算机科学和数据处理领域,我们经常会遇到需要从海量的数据中找出最大或最小的若干个元素的情况。最直观的方法是先将这 1 亿个数据排序,然后取排序后的前 100 个。以上就是从 1 亿个数据中取出最大前 100 个的几种方法,各有优缺点,可以根据实际情况选择合适的方法。大家好,这是一道经常在面试中被遇到的一个问题,我之前面试也是被问到过得,现在一起学习下,下次再被问到就可以轻松地用对。原创 2023-12-10 10:01:36 · 271 阅读 · 0 评论 -
深入理解Java中的volatile关键字
volatile是Java中的一个关键字,它用于声明一个变量在多线程环境中的可见性和禁止指令重排。可见性:当一个线程修改了一个volatile变量的值,其他线程能够立即看到修改后的值。禁止指令重排:编译器和处理器不会对volatile变量的操作进行重排序。原创 2023-12-07 21:33:18 · 43 阅读 · 0 评论 -
ReadWriteLock 和 StampedLock 的比较与解析
ReadWriteLock和StampedLock都是Java中常用的读写锁实现。ReadWriteLock适用于读多写少的场景,可以提高系统的并发性能;而StampedLock适用于各种场景,性能优于ReentrantLock,但略逊于ReadWriteLock。在实际应用中,我们可以根据业务场景选择适合的锁实现。原创 2023-12-06 21:19:31 · 61 阅读 · 0 评论 -
Condition原码分析及实现原理
Condition是Java并发编程中一个重要的接口,它用于在多线程环境下实现条件等待和通知。Condition接口继承自java.util.concurrent.locks.Condition,可以与ReentrantLock配合使用,实现线程间的同步和通信。原创 2023-11-29 19:59:58 · 66 阅读 · 0 评论 -
线程池在Java中的应用实践
在实际业务场景中,线程池发挥着重要作用。本文将详细解答在高并发、任务执行时间短、并发不高、任务执行时间长以及并发高、业务执行时间长的业务场景下,如何使用线程池进行优化。原创 2023-11-28 18:34:51 · 95 阅读 · 0 评论 -
Hutool是一个小而全的Java工具类库
以上仅为Hutool部分功能的示例,实际使用中,您可以根据需求选择相应的工具类进行操作。更多关于Hutool的详细用法和示例,请参考官方文档:https://jb51.net/softs/549331.html。Hutool是一个小而全的Java工具类库,它包含了众多实用的静态方法,可以提高Java开发效率。欢迎大家关注,一起探讨,学习!原创 2023-11-27 15:58:47 · 854 阅读 · 0 评论 -
Java中wait()方法在synchronized方法中调用的奥秘
作为一名Java程序员,我们深知synchronized关键字和wait()方法在多线程编程中的重要性。在本文中,我们将探讨为什么wait()方法需要在synchronized方法中调用,以及它们是如何协同工作的。首先,让我们了解一下synchronized关键字和wait()方法的基本概念。synchronized关键字用于实现临界区(代码块)的同步,确保同一时刻只有一个线程可以访问共享资源。当一个线程进入synchronized方法或代码块时,它会获得锁,其他线程需要等待直到锁被释放。原创 2023-11-26 16:06:49 · 404 阅读 · 0 评论 -
no sheet found with r:id rid1
查找资料,是因为没有找到sheet页,因为文件是刚导出,没打开过rid 找不到。-1是读取所有的sheet. 这个解决方案不满足我的需要。这种情况适用于只有一个sheet 页,是可以读取到,Java 导入使用得是。原创 2023-05-31 15:37:05 · 488 阅读 · 0 评论 -
java8对list进行统计合并
Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组原创 2022-09-27 14:54:03 · 1467 阅读 · 0 评论 -
ThreadLocal原理分析
简单得就是说,一个Threadlocal在一个线程中是共享的,在不同的线程之间又是隔离的(每个线程都只能看到自己的线程值)原创 2022-03-11 23:11:20 · 511 阅读 · 0 评论 -
为什么 Java 中“1000==1000”为false,而”100==100“为true?
前两天参加面试被问到了小问题,经常被忽略的小问题,如果不深入了解的话,被问到还是很懵逼的。为什么 Java 中10001000为false,100==100“为true?这是一个挺有意思的讨论话题。如果你运行下面的代码: Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2你会得到原创 2022-03-10 22:22:25 · 126 阅读 · 0 评论 -
excel版本问题解决方案
excel 版本问题兼容解决方法原创 2022-03-10 22:06:42 · 1073 阅读 · 0 评论 -
多线程的创建及核心参数详解
多线程的创建及核心参数解释public class ThreadPools { private static BlockingDeque<Runnable> taskQueue = new LinkedBlockingDeque<>(); //线程池创建 private static ThreadPoolExecutor executor = new ThreadPoolExecutor(2,5,500, TimeUnit.MILLISECONDS,ta原创 2022-02-18 10:41:38 · 1193 阅读 · 0 评论 -
java线上应用cpu占用100%问题排查
java线上应用cpu占用100%问题排查原创 2022-02-15 11:19:02 · 172 阅读 · 0 评论 -
基于@GroupSequence 实现入参顺序校验
基于@GroupSequence 实现入参顺序校验场景:在开发过程中我们会基于注解实现非空,长度,格式等校验,通常在入参构建的时候就可以校验,这样在最外部就可以拦截,不用到Service层通过代码校验。但是有个缺点就是并不能指定校验的优先顺序。并且,在进行验证得时候,会出现验证的顺序不一致,达不到自己想要得结果。基于这种场景下,结合了@GroupSequence注解来实现顺序校验接口,在接口入参时就可以校验。先创建需要验证得类型得接口public interface NotEmptyGroups {原创 2022-02-11 11:03:33 · 678 阅读 · 0 评论 -
如何避免缓存穿透、缓存击穿、缓存雪崩?
如何避免缓存穿透、缓存击穿、缓存雪崩?缓存穿透先来看一下缓存穿透,顾名思义,是指业务请求穿过了缓存层,落到持久化存储上。在大多数场景下,我们应用缓存是为了承载前端业务请求,缓存被击穿以后,如果请求量比较大,则会导致数据库出现风险。以双十一为例,由于各类促销活动的叠加,整体网站的访问量、商品曝光量会是平时的千倍甚至万倍。巨大的流量暴涨,单靠数据库是不能承载的,如果缓存不能很好的工作,可能会影响数据库的稳定性,继而直接影响整体服务。那么哪些场景下会发生缓存穿透呢?不合理的缓存失效策略.原创 2021-03-31 14:20:37 · 3811 阅读 · 0 评论 -
Java 递归读取文件工具类
目录Java 递归读取文件public class FileUtile { public static void recursion(String filePath,List<File> fileList) { File file = new File(filePath); if(!file.exists()) { //文件不存在 } File[] files = file.listFiles(); for(File file1 :原创 2020-12-17 17:09:58 · 130 阅读 · 0 评论 -
阿里云短信接口对接
甲方前两天要求将CRM登录方式调整为短信的方式确保数据的安全。之前没有搞过短信对接。查阅了资料,找到一个阿里云接口对接工具类,以为省事,没想打掉坑里去了不适用。自己看着官方提供的文档实现了接口对接。短信登录已正常使用。现在pom.xml文件增加一个依赖jar包<dependency> <groupId>com.aliyun</groupId> ...原创 2019-05-27 14:02:53 · 1107 阅读 · 0 评论 -
Java 存cookie值方法
根据需求需要存cookie值。实现方法如下: //创建Cookie Cookie cookie = new Cookie("mobile", mobile); //设置Cookie的最大生命周期,否则浏览器关闭后Cookie即失效 cookie.setMaxAge(Integer.MAX_VALUE); //将Cookie加到respo...原创 2018-12-15 10:19:57 · 5141 阅读 · 1 评论 -
Jsoup爬取table页面数据
昨天接到一个任务需要爬取一个网页的table数据,因为第一次接触有些打怵。查找资料寻找解决的方法。查到不少资料都在用jsoup .需要下载jsoup-1.8.1.jar 包jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。网页获取和解析速度飞快,推荐使...原创 2018-11-08 12:32:17 · 2837 阅读 · 2 评论 -
JDK 源码解析
jdk源码解析----HashSet这个类实现了set接口,内部是由HahMap实例辅助实现的。它不保证元素的顺序,数据允许为 null。假如 hash 方法将数据分散地比较合理,比如一个 bucket 一个数据,那么 add、remove、contains、size 性能开销是常数时间。这个类非线程安全的,如果多线程并发访问,并且至少一个线程在做修改操作,那么必须在外部做好同步处理。例如使...原创 2018-09-29 16:56:54 · 347 阅读 · 0 评论 -
Java实现随机抽取奖品工具类
随机抽取奖品奖品抽取概率10000元90%28888元4%66666元3%88888元2%100000元1%整体思路:奖品集合 + 概率比例集合将奖品按集合中的顺序概率计算成所占比例区间,放入比例集合。并产生一个随机数加入其中,进行排序。排序后随机数落在那个区间就表示那个区间的奖品被抽中。返回的随机数在集合中的索引,该索引就是...原创 2018-09-28 14:56:02 · 2313 阅读 · 0 评论 -
JAVA API1.8中文版
百度网盘下载https://pan.baidu.com/s/1dml34pB7afqKKI-CQQLO3w原创 2018-09-20 14:34:15 · 899 阅读 · 0 评论 -
关阅读JDK源码的看法
转自:http://zwchen.iteye.com/blog/1154193源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。虽然Tomcat的源码很漂亮,但我绝不建议你...转载 2018-09-20 12:16:27 · 240 阅读 · 0 评论 -
抽象类与接口区别
一 接口和抽象类的相似性1 接口和抽象类都不能被实例化,都可以通过继承实现其抽象方法。2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。二 接口和抽象类的区别1 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。2 接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也...原创 2018-09-18 18:49:06 · 182 阅读 · 0 评论