![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 90
The-Venus
这个作者很懒,什么都没留下…
展开
-
java中文乱码浅析及解决方案
在Java开发中,处理中文乱码是一个常见的问题。由于字符集和编码的复杂性,开发者可能面临各种导致乱码的情况。正确地处理中文字符集对于确保应用程序的可靠性和国际化至关重要。通过综合运用这些解决方案,可以有效地预防和解决Java中文乱码问题,确保应用程序在处理文本时能够正常、可靠地工作。选择合适的字符集和编码,以及遵循良好的编码实践,是保障应用程序国际化和多语言支持的重要一步。强烈推荐前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。人工智能😊🙏。原创 2024-02-05 07:00:00 · 10850 阅读 · 95 评论 -
【JAVA】CyclicBarrier源码解析以及示例
在多线程编程中,同步工具是确保线程之间协同工作的重要组成部分。(循环屏障)是Java中的一个强大的同步工具,它允许一组线程在达到某个共同点之前互相等待。在本文中,我们将深入探讨的源码实现以及提供一些示例,以帮助您更好地理解和应用这个有趣的同步工具。通过本文,我们深入了解了的源码实现,并通过一个简单的示例演示了它的用法。是一个强大的同步工具,可以帮助我们实现复杂的多线程协同任务。在多线程编程中,理解和熟练使用这样的同步工具是至关重要的,能够确保线程之间的协同工作更加高效和可靠。😊🙏。原创 2023-12-18 07:00:00 · 19821 阅读 · 140 评论 -
这些Java并发容器,你都了解吗?
在多线程环境下,数据的并发访问和修改是无法避免的问题。为了解决这个问题,Java 提供了一系列并发容器,这些容器在内部已经处理了并发问题,使得我们可以在多线程环境下安全地访问和修改数据。从上面的介绍总总结有以下几种容器类ConcurrentHashMap:并发版 HashMapCopyOnWriteArrayList:并发版 ArrayListCopyOnWriteArraySet:并发 SetConcurrentLinkedQueue:并发队列 (基于链表)原创 2023-12-07 08:04:59 · 15810 阅读 · 147 评论 -
盘点几种常用加密算法
随着互联网的发展,信息安全问题日益受到重视。加密算法在保证信息安全传输方面发挥着重要作用。本文将简要盘点几种常用的加密算法,介绍它们的基本原理、特点及应用情况,以帮助读者全面了解当前加密算法的发展状况。通过上文的介绍,我们了解到DES、AES、RSA、MD5、SHA等是当前应用最广泛的几种加密算法。这些算法在保证信息安全方面各有优势。DES具有运算速度快的特点,AES安全性更高,RSA是目前最优秀的公开密钥系统,MD5和SHA系列是常用的消息摘要算法。原创 2023-11-09 08:00:00 · 11498 阅读 · 131 评论 -
聊聊接口重试机制的几种解决方案
接口请求重试机制是保证系统稳定性和容错能力的重要手段之一。当接口请求发生失败或暂时性错误时,通过重试机制可以提高请求的成功率。本文将详细介绍接口请求重试机制的几种常见方法。// 可在此处自定义重试逻辑});Spring Retry 为接口请求重试提供了完善和易用的解决方案,可以灵活控制各种重试参数,适用于复杂系统的容错要求。使用自定义的重试工具类来实现接口请求的重试机制,提高代码的复用性和可维护性。提供重试方法,参数包括请求函数、重试策略等在重试方法内部执行循环请求。原创 2023-11-06 08:00:00 · 16359 阅读 · 108 评论 -
提升后端API性能的几种解决方案
代码优化通过算法优化、减少IO等方式优化程序,使其高效运行。缓存使用通过Redis、Memcache等缓存数据库缓存常用数据,减少数据库查询。CDN加速使用CDN缓存静态资源,减少服务器压力。异步处理通过消息队列、事件驱动等方式实现异步处理,提高并发能力。服务拆分将服务拆分为小的单元服务,采用微服务架构。流量控制通过限流、降级等方式控制流量并保护服务稳定运行。数据库优化优化数据库模式,使用索引、读写分离等技术提升数据库效率。并发优化通过线程池、非阻塞IO等方式提升系统并发性能。服务器扩容。原创 2023-10-11 09:06:48 · 49077 阅读 · 6 评论 -
Java中DateTimeFormatter的使用方法和案例
在Java中,DateTimeFormatter类用于格式化和解析日期时间对象。它是日期时间格式化的强大而灵活的工具。原创 2023-10-01 12:27:46 · 14176 阅读 · 12 评论 -
List 去重的几种方法
🔔HashSet去重import java.util.HashSet;HashSet<Integer> set = new HashSet<>();set.add(1);set.add(2);set.add(2);System.out.println(set); // [1, 2]🔔TreeSet去重import java.util.TreeSet;TreeSet<Integer> set = new TreeSet<>(); se原创 2023-09-26 17:16:57 · 183531 阅读 · 2 评论 -
聊聊ThreadLocal
ThreadLocal 是 Java 提供的一个线程内部的存储类,可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据。如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达!原创 2023-09-19 10:00:00 · 19978 阅读 · 20 评论 -
设置好以下几点Idea配置,极大提升研发效率
设置代码的缩进规则,如:缩进空格数,tab是否使用空格代替等。在Settings - Editor - Code Style - Java中配置。设置括号的样式,如:大括号换行等。在Settings - Editor - Code Style - Java - Wrapping and Braces中配置。设置注释的头部样式模板,如:函数注释等。在Settings - Editor - File and Code Templates中配置。设置单词的大小写规则,如:类名大写,方法名小写等。原创 2023-08-30 10:00:00 · 38875 阅读 · 2 评论 -
MybatisPlus中QueryWrapper常用方法
如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达!原创 2023-07-25 16:57:33 · 20897 阅读 · 1 评论 -
HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚!
HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚!Java7 HashMapHashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。首先,我们用下面这张图来介绍 HashMap 的结构。这个仅仅是示意图,因为没有考虑到数组要扩容的情况,具体的后面再说。大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value,转载 2020-10-28 01:19:33 · 17266 阅读 · 0 评论 -
Java中的锁[原理、锁优化、CAS、AQS]
1、为什么要用锁?锁-是为了解决并发操作引起的脏读、数据不一致的问题。2、锁实现的基本原理2.1、volatileJava编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。image.png结论:如果volatile变量修饰符使用转载 2020-10-25 00:01:48 · 19146 阅读 · 0 评论 -
内存泄漏,内存溢出总结以及相关解决方案
**内存泄漏定义(memory leak):**一个不再被程序使用的对象或变量还在内存中占有存储空间。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。二者的关系:内存泄漏的堆积最终会导致内存溢出**内存溢出:**就是你要的内存空间超过了系统实际分配给你原创 2020-11-29 22:53:36 · 9837 阅读 · 0 评论 -
JAVA线程池如何调优
在JAVA中,线程可以使用定制的代码来管理,应用也可以利用线程池。在使用线程池时,有一个因素非常关键:调节线程池的大小对获得最好的性能至关重要。线程池的性能会随线程池大小这一基本选择而有所不同,在某些条件下,线程池过大对性能也有很多不利的影响。所有线程池的工作方式本质是一样的:有一个任务队列,一定数量的线程会从该任务队列获取任务然后执行。任务的结果可以发回客户端,或保存到数据库,或保存到某个内部数据结构中,等等。但是在执行完任务后,这个线程会返回任务队列,检索另一个任务并执行。线程池有最小线程数和最大线转载 2020-08-16 10:28:12 · 12983 阅读 · 1 评论 -
牛逼!阿里推出国产开源的jdk! 快来试试吧!
如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!Alibaba Dragonwell 8简介Alibaba Dragonwell 8 是一款免费的 OpenJDK 发行版。它提供长期支持,包括性能增强和安全修复。Alibaba Dragonwell 8 目前支持 X86-64/Linux 平台,在数据中心大规模 Java 应用原创 2020-07-07 16:18:58 · 19539 阅读 · 2 评论 -
HashTable原理以及源码解析(通俗易懂)
HashTable原理以及源码解析(通俗易懂)UML图概念HashTable也是一个散列表,它存储的内容是键值对映射。HashTable继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。HashTable的函数都是同步的,这意味着它是线程安全的。它的Key、Value都不可以为null。此外,HashTable中的映射不是有序的。HashTable的实例有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量就是哈希表创建原创 2020-05-24 17:35:41 · 55164 阅读 · 1 评论 -
synchronized底层原理以及锁升级过程
概念:synchronized是Java提供的一个并发控制的关键字,作用于对象上。主要有两种用法,分别是同步方法(访问对象和clss对象)和同步代码块(需要加入对象),保证了代码的原子性和可见性以及有序性,但是不会处理重排序以及代码优化的过程,但是在一个线程中执行肯定是有序的,因此是有序的。synchronized 的特性1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行被synchronized修饰的类或对象的所有操作都是原子的,因为在执原创 2020-05-17 22:01:52 · 59418 阅读 · 1 评论 -
由浅入深Java线程池原理解析
Java线程池原理解析前言线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处:1、降低资源消耗;通过重复利用已创建好的线程来降低线程创建和销毁造成的消耗;2、提高响应速度;当任务到达时,任务可以不需要等待线程创建就能立马执行;3、提高线程的可管理性。线程池时稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。阿里巴巴Java开发手册中对线程池的使用规范原创 2020-05-12 19:29:47 · 52086 阅读 · 0 评论 -
深入解析HashMap和currentHashMap源码以及实现原理
深入解析HashMap和ConcurrentHashMapy源码以及底层原理前言HashMap 和ConcurrentHashMap,这两个相信大家都不陌生,在面试中基本上是必问的,以及在实际开发过程中也是比用的,那么看了这篇文章,无论在面试还是在实际开发中都可以顺手拈来,得心应手了。HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并原创 2020-05-10 00:16:10 · 104859 阅读 · 1 评论 -
浅析new一个对象的过程
简介在进行Java编程时,我们通常需要通过new创建一个对象的实例。Object obj = new Object();做了三件事(1)为对象创建了对象空间;(2)调用类的构造方法;(3)将生成对象的地址返回。具体步骤1,首先到常量池中找类的带路径全名,然后检查对应的字节码是否已被加载,解析,验证,初始化,如果没有先执行类加载过程(class.forname())。2,类加载过程...原创 2020-05-07 23:52:02 · 88215 阅读 · 0 评论 -
ArrayList扩容机制以及线程安全性
List扩容实现步骤总的来说就是分两步:1、扩容 把原来的数组复制到另一个内存空间更大的数组中2、添加元素 把新元素添加到扩容以后的数组中性能分析ArrayList作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需要移动后续所有元素。源码分析先把ArrayList中定义的...原创 2020-05-06 20:49:10 · 115027 阅读 · 3 评论 -
Get和Post的区别以及注意点
概念GET和POST是什么?HTTP协议中的两种发送请求的方法。HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,都是TCP链接。GET和POST能做的事情是一样一样的。如果给GET加上request body,活着给POST带上url参数,技术上是完全行的通的。区别1.Get是...原创 2020-05-05 12:10:07 · 47932 阅读 · 1 评论 -
浅谈java集合类以及示例
聊一聊java 的集合类概述Java中集合分为两种类型第一种:以单个元素存储。其超级父接口是:java.util.Collection;第二种:以键值对存储。(类似于python的集合)其超级父接口是:java.util.Map;前者每个位置只能保存一个元素,后者可以保存两个元素。分类Collection又可分为List、Set、QueueList下常用的有ArrayList、Li...原创 2020-05-04 14:28:56 · 48704 阅读 · 1 评论 -
Arrays.asList详解和示例
注意(1)该方法适用于对象型数据的数组(String、Integer…)(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新(4)不支持add()、remove()、clear()等方法(5)此方法得到的List长度是不可变的(6)asLis...原创 2020-05-03 17:45:36 · 54799 阅读 · 1 评论 -
深入解析HotSpot
概念Java HotSpot虚拟机是Sun用于Java平台的VM。 它使用许多先进技术为Java应用程序提供最佳性能,包括最先进的内存模型,垃圾收集器和自适应优化器。在SUN/Orace JDK中包括两种风格的VMclient modeserver mode默认以client mode启动。启动命令加- server,以server mode启动。在CMD里面输入 java -v...原创 2020-05-02 22:48:51 · 44027 阅读 · 0 评论 -
BigDecimal详细解析
简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。先运行一套代码public static void main(String[] args) ...原创 2020-05-01 22:29:07 · 45442 阅读 · 1 评论 -
基础面试题:深拷贝和浅拷贝详解以及实例
深拷贝 vs 浅拷贝浅拷贝概念复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。如图: 特点 1.对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。2.对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝...原创 2020-04-30 13:04:02 · 44561 阅读 · 1 评论 -
基础面试题:Arrays 工具类详解(超详细)
Aarry的几个常用函数:排序 : sort()查找 : binarySearch()比较: equals()填充 : fill()转列表: asList()转字符串 : toString()复制: copyOf()排序 : sort()1 void sort(Object[] o):对数组从小到大的排序(String类型的数组不宜使用)2.void sort(int[] ...原创 2020-04-29 21:14:25 · 44070 阅读 · 1 评论 -
基础面试题:Collections 工具类详解
对集合本体的操作线程同步集合的包装特征方法名为synchronizedXxx适用范围ListCollectionSetMap缺点每次读写都要加锁,锁的层级为对象,不利于多线程的同时操作在使用Iterator的遍历时修改元素ConcurrentModificationException建议使用java.util.concurrent的集合线程同步类返回...原创 2020-04-28 09:11:08 · 43960 阅读 · 1 评论 -
Java创建多线程的四种方式以及优缺点
java有以下四种创建多线程的方式:1:继承Thread类创建线程2:实现Runnable接口创建线程3:使用Callable和FutureTask创建线程4:使用线程池,例如用Executor框架创建线程DEMO代码:package thread; import java.util.concurrent.*; public class ThreadTes...原创 2020-04-22 23:09:52 · 52493 阅读 · 2 评论 -
深入理解BIO、NIO、AIO以及应用场景
补充概念:同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。阻塞和...原创 2020-04-19 22:34:31 · 44540 阅读 · 0 评论 -
详解TCP的三次握手与四次挥手及面试题(很全面)
常用的熟知端口号应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP T...原创 2020-04-18 13:36:58 · 44181 阅读 · 0 评论 -
基础面试题:hashCode 与 equals
hashCode()介绍hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在 JDK 的 Object.java 中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”...原创 2020-04-15 23:44:34 · 43871 阅读 · 0 评论 -
基础面试题:程序, 进程,线程,纤程,管程,超线程详解
程序:是含有指令和数据的文件 比如qq.exe进程:分配资源的单位,为了使多个程序能够并发(同一时刻只有一个在运行,但感觉起来像多个同时运行;并行(同一时刻真的多个在运行,不是感觉像多个))的执行,操作系统需要一个结构来抽象和表示这个程序的运行。比如运行多个QQ.exe特性:进程是操作系统对一个正在运行的程序的一种抽象结构。进程是指在操作系统中能独立运行并作为资源分配的基本单位,由一组...原创 2020-04-15 00:00:47 · 44098 阅读 · 0 评论 -
基础面试题:== 与 equals 详解
java中的数据类型分为: 基本数据类型和引用数据类型基础类型4种整数类型:int、long、byte、short2种浮点数类型:float、double1种字符类型:char1种布尔类型:boolean引用数据类型1.类2.接口3.数组对于基本类型来说,== 比较的是值是否相等对于引用类型来说,== 比较的是两者在内存中存放的地址(堆内存地址)public class ...原创 2020-04-13 23:42:56 · 43901 阅读 · 0 评论 -
基础面试题: JDK 和 JRE
1.定义JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不...原创 2020-04-09 23:03:03 · 44092 阅读 · 1 评论 -
abstract 和Interface的共同点和区别以及应用场景
共同点A.两者都是抽象类,都不能实例化B.Interface实现类和abstract继承类都必须实现抽象方法不同点A.Interface需要实现,用implements;Abstract 需要继承,用exendsB.一个类可以实现多个Interface ;一个类只能继承一个AbstractC.Interface强调功能的实现;Abstract强调从属关系D.Interf...原创 2020-03-25 00:43:59 · 45049 阅读 · 1 评论 -
linux 安装jdk1.8并配置环境变量(超简单方便)
操作系统: CentOS 7.6 64位jdk:1.8,本教程用的是jdk1.8.0_191(jdk下载地址:https://download.csdn.net/download/jinxinxin1314/12259539)工具:xshellmkdir /usr/javacd /usr/java将包放到此目录:rz -f选择: jdk1.8.0_191.tgz注: 如果提示...原创 2020-03-22 09:13:36 · 66263 阅读 · 0 评论 -
算法面试题:多数元素
leetcode 面试题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。方案一:map 统计查询 /** * map 统计查询 * 执行用时 : 22 ms * 内存消耗 :47.3 MB * @param nums *...原创 2020-03-13 12:13:09 · 46756 阅读 · 0 评论