- 博客(24)
- 收藏
- 关注
原创 JAVA中栈的使用
本文介绍了Java中栈(Stack)的实现方式及最佳实践。栈是遵循LIFO原则的线性数据结构,Java提供两种实现:遗留类java.util.Stack(线程安全但效率低,不推荐)和推荐的Deque接口实现(如ArrayDeque)。文章详细对比了两种实现的核心操作方法,包括入栈(push)、出栈(pop)、查看栈顶(peek)等操作的行为差异,重点推荐使用Deque实现栈功能。通过代码示例展示了ArrayDeque的基本用法,并指出空栈操作时的异常处理建议(使用pollFirst/peekFirst替代p
2026-02-14 10:31:05
311
原创 Java中Arrays静态方法
Java的Arrays工具类提供了一系列静态方法用于数组操作,主要包括排序、比较、填充、复制、查找和转换等功能。核心方法包括:sort()进行升序排序(支持基本类型和对象数组),equals()/deepEquals()比较数组内容(后者支持多维数组),fill()填充数组元素,toString()/deepToString()转换为字符串,copyOf()/copyOfRange()复制数组,以及binarySearch()在已排序数组中快速查找。特别要注意asList()转换的List不可修改大小,bi
2026-02-13 15:14:54
336
原创 Java中Set特性与常用方法
Java中的Set是Collection的子接口,核心特性包括元素唯一性(基于equals()和hashCode())、无序性(除LinkedHashSet和TreeSet外)和允许null值(TreeSet除外)。主要实现类有:HashSet(哈希表,快速查找)、LinkedHashSet(保持插入顺序)、TreeSet(红黑树,自动排序)和线程安全的CopyOnWriteArraySet。常用操作包括添加/删除元素、集合运算(并/交/差集)及遍历。使用时需注意正确重写hashCode()和equals(
2026-02-10 17:14:21
329
原创 JAVA中Map的核心方法
本文介绍了Java Map接口的核心方法,包括参数类型、返回类型及功能说明。重点方法如put()用于添加/更新键值对,get()和getOrDefault()用于安全获取值,remove()删除键值对,以及containsKey()检查键是否存在。此外,还讲解了keySet()、values()和entrySet()等集合视图方法,其中entrySet()是遍历Map的最优方式。通过示例代码演示了entrySet()遍历和getOrDefault()避免空指针的实际应用。这些方法围绕键(K)操作,返回类型依
2026-02-09 21:34:22
410
原创 类加载过程详解
JVM类加载过程分为三个阶段:1)加载阶段通过类加载器读取字节码到内存,采用双亲委派机制避免重复加载;2)链接阶段包括验证字节码安全性、为静态变量分配内存(赋默认值)以及将符号引用转为直接引用;3)初始化阶段执行静态代码块和赋值操作,该过程是线程安全的,确保每个类只初始化一次。类加载完成后即可正常使用,不用的类可能被卸载。
2025-09-04 15:39:18
329
原创 哈希算法以及面试答法
哈希是一种将任意长度输入映射为固定长度输出的算法,分为一般哈希(用于数据结构)和安全哈希(用于加密)。它具有确定性、高效性、均匀性等特点。安全哈希强调不可逆性和抗碰撞性,如MD5、SHA系列。哈希冲突可通过链地址法或开放定址法解决。应用广泛,包括数据结构、密码存储、文件校验和分布式系统等。安全存储密码时需加盐增强防护。
2025-09-04 15:14:19
420
原创 守护线程与非守护线程
线程分为守护线程和非守护线程,非守护线程决定进程存活,当最后一个非守护线程结束时,所有守护线程会被强制终止。守护线程适合执行日志轮转、缓存清理等非关键任务,而关键操作如文件写入应使用非守护线程。在Java和Python中,守护线程属性需在线程启动前设置,且不保证执行finally块或I/O刷新。建议核心业务使用非守护线程,辅助任务用守护线程,并注意通过join()确保关键任务完成。
2025-09-03 10:03:13
404
原创 常见GC算法与垃圾回收器
本文介绍了JVM垃圾回收的核心算法和主流收集器。常见GC算法包括引用计数、标记-清除、复制、标记-整理和分代收集,各具特点。HotSpot JVM提供了多种收集器:Serial/ParNew(基础型)、Parallel(吞吐优先)、CMS(低延迟但已弃用)、G1(JDK9+默认)、ZGC/Shenandoah(超低延迟)。文章对比了各收集器的代际支持、算法特点和适用场景,建议根据应用需求选择:小应用用Serial,批处理用Parallel,服务端选G1,超大堆低延迟场景考虑ZGC/Shenandoah。
2025-09-01 17:15:00
794
原创 指令重排序详解
指令重排序 (Instruction Reordering) 是 JVM(Just-In-Time 编译器,JIT)和 CPU 在执行代码时进行的优化行为。它允许对源代码的指令序列进行调整,以提高性能(如利用 CPU 流水线、减少等待),但前提是不改变单线程内的语义。在多线程环境下,如果不加控制(如 volatile 或锁),重排序可能导致可见性或一致性问题(如 DCL 单例中的半初始化对象)。
2025-08-27 14:08:09
976
原创 Volatile在java实际开发中的使用
摘要: Java中的volatile关键字通过确保变量的可见性和禁止指令重排序来优化多线程并发,适用于状态标志位、单写多读等场景(如服务停止控制、双重检查锁定单例)。其优势是轻量级(读性能接近普通变量,写需刷新主存),但不支持复合操作的原子性(如i++)。需注意:不能替代锁(无互斥)、数组元素不保证可见性,且在Java5+内存模型下更可靠。与synchronized和Atomic类相比,volatile更适合低竞争、高读场景的性能敏感代码。
2025-08-27 10:48:00
524
原创 JVM-运行时数据区不同版本区别
JDK8之前的JVM运行时数据区主要包括方法区、堆、栈、程序计数器和本地方法栈。方法区存储类元数据和常量池,堆存放对象实例,栈处理线程方法调用,程序计数器跟踪指令执行,本地方法栈支持本地代码调用。其中方法区使用固定大小的永久代(PermGen),容易引发内存溢出。JDK8改用元空间(Metaspace)替代永久代,将类元数据存储在本地内存中,解决了内存限制问题。各内存区域分工明确,共同支撑Java程序的运行。
2025-08-19 09:48:53
978
原创 黑马微服务延迟订单作业参考
前几天将黑马的RabbitMQ看完,最后留了个作业,做了大概一个晚上,其中遇到了一些问题也给大伙分享分享。先叠个甲,有些用词可能不是很专业,请大家见谅哈,记得先把延迟消息的插件给下好。
2023-11-15 15:09:22
805
9
原创 微服务使用OpenFeign遇到类型不匹配
比如我们在Order类里面我们调用了MybatiePlus中的Iservice中的方法,他默认是获得此微服务中的类的,所以我们需要在Iservice中改变OrderDetail的引入。我们经常会创建一个Common类用来存放一些公共的类,顺便可以删除在Order中的Orderdetail,防止出现两个一样的类。在微服务中我们经常会使用Opnefeign用于在不同为服务之间的互相调用,但是这样可能就会导致一些方法出现。还是一个比较基础的问题,哈哈哈哈主要是记录一下。
2023-11-14 20:11:26
403
1
原创 关于Vue3使用本地图片显示错误
查了很多资料,各式各样的说法都有,有的人说vue3不能使用require,但是事实并非如此,经过我的实验,发现好像只能使用require才能将本地图片显示在网页上这也是困扰我的一个问题,比如我cosnt一个url然后直接放在require。
2023-05-09 15:42:39
1564
5
原创 黑马最新2023 Javaweb P150图片上传的问题
但是可以上传到阿里云,postman显示也是sucess,很奇怪,但是换一张几十k的就能显示了,且编辑新增员工都是正常的。遇到了一个很奇怪的问题,就是有一些图片可以上传,但是有一些传不上去,发现一个规律是因为。不知道有小伙伴有没有遇到这个问题并且解决的。
2023-04-11 19:04:07
164
空空如也
黑马微服务5.3登录信息传递优化
2023-11-10
使用@RequiredArgsConstructor问题
2023-11-05
关于本地Navicat连不上虚拟机中mysql
2023-10-30
黑马苍穹外卖获取历史订单问题
2023-10-20
Websocket接收数据不一致
2023-10-21
小程序遇到数据变化的问题
2023-09-29
Vue3中设置Content-Type失效的问题
2023-09-13
Vue3表单动态显示问题将数字转化为字符串
2023-05-18
Mybatis输出中文乱码
2023-04-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅