
技术随笔
文章平均质量分 87
-
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 中的 this 关键字完全指南:从原理到实战应用
在 Java 编程语言中,this关键字是一个看似简单却蕴含深意的核心概念。它不仅是解决变量命名冲突的语法工具,更是面向对象编程中对象自我引用的重要机制。理解并熟练运用this关键字,能够帮助开发者编写出更加清晰、健壮和可维护的代码。本指南将从底层原理出发,逐步解析this关键字的本质,深入探讨其四大核心应用场景,并通过典型示例展示其在实际开发中的灵活运用。无论你是初学 Java 的新手,还是希望进一步提升编码技巧的中级开发者,都能从本指南中获得有价值的见解。让我们开始这段探索之旅,揭开this。原创 2025-05-07 14:57:40 · 1045 阅读 · 3 评论 -
Java 应用中的内存泄漏:常见场景及最佳实践
内存泄漏的标准定义是当应用程序不再使用对象时发生的情况,但是垃圾回收器无法将其从工作内存中删除,因为它们仍在被引用。因此,应用程序会消耗越来越多的资源,最终导致致命的。垃圾回收操作需要消耗 CPU、线程、时间等资源,所以容易理解的是垃圾回收操作不是实时发生,当内存消耗完或者是达到某一个指标,才能触发垃圾回收操作。在 JVM 堆中,有两种类型的对象——引用和未引用,垃圾回收器可以删除未被引用的对象。即使不再被应用程序使用,也不会收集被引用的对象。原创 2024-08-01 03:47:48 · 1290 阅读 · 77 评论 -
Java 面试题:强引用、软引用、弱引用、幻象引用有什么区别?
在 Java 中,理解不同类型引用的区别对于掌握内存管理和垃圾回收机制是至关重要的。强引用、软引用、弱引用和幻象引用分别提供了不同的对象引用强度,使开发者能够精细控制对象的生命周期和内存使用情况。强引用(Strong Reference)是 Java 中最常见的引用类型。当一个对象被一个强引用所引用时,垃圾回收器永远不会回收该对象,即使内存不足,JVM 也会抛出 OutOfMemoryError,而不会回收此对象。软引用(Soft Reference)在内存不足时会被垃圾回收器回收。它非常适合用来实原创 2024-06-22 19:54:57 · 2905 阅读 · 1 评论 -
Spring 中的常用注解
Spring 作为 Java 企业级开发中最广泛使用的框架之一,以其强大的功能和灵活性为开发者提供了高效的开发体验。在 Spring 中,注解(Annotation)是其核心机制之一,它简化了配置文件的繁琐操作,通过声明的方式实现了依赖注入等功能。本篇文章将介绍 Spring 框架中一些常用的注解,并结合实际场景详细说明它们的使用方法与作用。这不仅可以帮助初学者快速掌握 Spring 的基本用法,也能为有经验的开发者提供一个参考,帮助在实际开发中更高效地使用这些工具。原创 2025-01-07 12:02:43 · 2166 阅读 · 11 评论 -
彻底理解Java并发:Java并发原子类
本篇内容包括:原子类概述、原子类分类(Atomic 基本类型原子类、Array 数组类型原子类、Atomic\Reference 引用类型原子类、Atomic\FieldUpdater 原子更新属性、Adder 加法器、Accumulator 积累器)、原子类 Demo 等内容!原创 2022-10-31 16:41:42 · 4831 阅读 · 18 评论 -
Java 读取 xml 文件的五种方式
在编写与 XML 数据交互的现代软件应用时,有效地读取和解析 XML 文件是至关重要的。XML(可扩展标记语言)因其灵活性和自我描述性,已成为数据存储和传输的一种普遍格式。对于 Java 开发者来说,Java 提供了多种工具和库来处理 XML 文件,每种工具都有其独特的特点和最适用的场景。本文旨在探讨 Java 中处理 XML 文件的五种主要方法:DOM、SAX、StAX、JAXB 和 JDOM。这些技术各有优势和局限,选择合适的方法可以大大提高开发效率和程序性能。原创 2024-05-28 08:52:17 · 7303 阅读 · 1 评论 -
Java 面试题:Java 中接口和抽象类有什么区别
在 Java 编程中,接口(Interface)和抽象类(Abstract Class)是面向对象编程的重要组成部分。它们都提供了一种机制,允许开发者定义抽象的、可以在具体类中实现的行为。然而,接口和抽象类在结构和用法上有一些显著的区别,这些区别使得它们在不同的情境下适用。理解这些差异对于设计健壮、灵活和可维护的代码至关重要。原创 2024-06-16 15:53:55 · 2815 阅读 · 11 评论 -
JavaWeb:Servlet的应用及接口介绍
广义的 Servlet 泛指在服务器上运行的 Java 程序,但是这个 Java 程序,并不能独立运行(因为 Servlet 没有 main 方法),需要部署在相应的 Servlet 容器中,比如 Tomcat 和 Jetty。Servlet 主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。 本篇内容包括:Serlvet 相关概念、Servlet 的应用、*javax.servlet* 包下主要的类和接口 以及 *javax.servlet.http* 包下主要的类和接口原创 2022-11-18 17:48:58 · 4190 阅读 · 4 评论 -
JavaIO流:概述
在接触 IO 流前,无论是 变量的声明、数组的创建,又或者是复杂的并发设计还是 Jvm 的性能调优,我们更多的还是和内存打交道。但我们知道计算机组成包括运算器,控制器,存储器,输入设备,输出设备。也就是不仅仅只有内存和 CPU,所以程序设计语言必须要提供程序与外部设备交互的方式,这就是 IO 框架的由来。我们需要和外部设备进行数据的交互。本篇内容包括:关于 IO 流、关于 Java IO 流、Java IO 层次体系结构原创 2022-11-23 13:03:03 · 4135 阅读 · 6 评论 -
Java 面试题:String、StringBuffer、StringBuilder 有什么区别?
几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关工具如拼接类的使用,对写出高质量代码是非常有帮助的。关于这个问题,我前面的回答是一个通常的概要性回答,至少你要知道 String 是 Immutable 的,字符串操作不当可能会产生大量临时字符串,以及线程安全方面的区别。原创 2024-05-30 09:41:52 · 4587 阅读 · 57 评论 -
JavaIO流:BIO梳理
BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。本篇内容包括:Java BIO 介绍、Java BIO 工作机制、BIO 案例。原创 2022-11-24 20:59:12 · 3559 阅读 · 6 评论 -
Java新特性:Optional类
Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else 解决空指针问题,使代码更加简洁。原创 2023-07-19 10:00:00 · 8174 阅读 · 42 评论 -
MyBatis:缓存机制详解
本篇内容包括:MyBatis 缓存机制概述、一级缓存与二级缓存的介绍、配置和具体流程。原创 2022-10-26 17:56:09 · 5032 阅读 · 7 评论 -
MyBatis:核心配置文件
本篇内容包括:MyBatis 配置文件概述以及核心配置文件详解(configuration、properties、settings、typeAliases、typeHandlers、objectFactory等)的内容。原创 2022-10-25 21:51:19 · 5005 阅读 · 1 评论 -
Java基础:Java类与对象
面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。本篇主要记录内容包括:面向对象程序设计概述、静态域与静态方法、构造器、内部类。原创 2022-11-16 07:11:24 · 4653 阅读 · 6 评论 -
Java 面试题:如何保证集合是线程安全的? ConcurrentHashMap 如何实现高效地线程安全?
在多线程编程中,保证集合的线程安全是一个常见而又重要的问题。线程安全意味着多个线程可以同时访问集合而不会导致数据不一致或程序崩溃。在 Java 中,确保集合线程安全的方法有多种,包括使用同步包装类、锁机制以及并发集合类。最简单的方法是使用 Collections.synchronizedXXX 方法来包装集合,例如 Collections.synchronizedList 和 Collections.synchronizedMap。然而,这种方式的性能较低,因为它在每个操作上都添加了同步锁。为了解决原创 2024-06-22 19:55:38 · 3454 阅读 · 26 评论 -
为什么我们应该彻底弃用空字符串:从编程语言设计看空字符串的废除必要性
你是否曾困惑于空字符串("")与null之间的区别?与这两者是否具有相同含义?在软件开发中,我们是否需要同时保留这两种表示方式?本文将通过实际案例剖析这个问题,并探讨如何通过革新性的类型系统设计提升代码可靠性。原创 2025-05-07 14:10:28 · 737 阅读 · 0 评论 -
Java基础:Java异常机制
异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类。Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类 Error 和 Exception。本篇主要记录内容包括:异常介绍、抛出异常、声明异常、捕获异常原创 2022-11-17 17:48:38 · 6009 阅读 · 3 评论 -
系统学习SpringFramework:Spring IOC
本篇内容包括:IOC 和 DI 的概念、Spring 容器,即 BenaFactory 与 AplicationConext 等 IOC 相关内容。原创 2022-11-01 19:08:33 · 5434 阅读 · 11 评论 -
JavaIO流:模型
IO 的字面意思是读/写数据,IO 模型是读/写数据的方式。常用到的读/写数据方式有:同步阻塞 IO、同步非阻塞 IO、IO 多路复用、信号驱动、异步 IO本篇内容包括:Java IO 与 IO 模型、五种 IO 模型、三种 Java IO 模型。原创 2022-11-24 11:00:45 · 4075 阅读 · 3 评论 -
maven-shade-plugin - 解决 Jar 包冲突新思路
maven-shade-plugin 是 Maven 官方网站中提供的一个插件,官方文档中定义其功能如下:简单来说就是将依赖的包在 Package 阶段一起打入 Jar 包中,以及对依赖的 Jar 包进行重命名从而达到隔离的作用。这里为了解决上面的问题我们主要使用第二个功能特性,使得相同依赖不同版本达到共存的目的。原创 2024-06-06 07:45:00 · 4509 阅读 · 3 评论 -
SpringBoot:模块探究之spring-boot-autoconfigure
顾名思义,Autoconfigure 就是自动配置的意思,SpringBoot 通过 spring-boot-autoconfigure 体现了 “约定优于配置” 这一设计原则!spring-boot-autoconfigure 也是 SpringBoot 最重要的模块之一!SpringBoot 则可以依据 classpath 里面的依赖内容来自动配置 Bean 到 IOC 容器,Auto-configuration 会尝试推断哪些 Beans 是用户可能会需要的。比如如果HSQLDB 包在当前 cla原创 2022-12-14 12:16:05 · 7957 阅读 · 12 评论 -
SpringBoot实战:整合MapStruct实现数据类型转化
MapStruct 是一个代码生成器,它基于约定优于配置方法极大地简化了 Java bean 类型之间映射的实现。自动生成的映射转换代码只使用简单的方法调用,因此速度快、类型安全而且易于理解阅读;本篇就是实现 SpringBoot 整合 MapStruct 实现数据类型转化。本篇内容包括:项目介绍与条件准备、项目搭建与构造、效果验证原创 2022-12-09 19:13:23 · 4298 阅读 · 4 评论 -
系统学习SpringFramework:循环依赖与三级缓存
本篇内容包括:Spring 中的循环依赖问题(包括 Spring 中的循环依赖问题和Spring 中的循环依赖的 5 种场景的介绍)、Spring 三级缓存介绍、4 个 Spring 无法自动解决的循环以来场景以及其对应的手动解决方式。原创 2022-11-04 08:31:05 · 4886 阅读 · 22 评论 -
Java集合:关于 HashSet 的内容盘点
本篇内容包括:HashSet 概述、HashSet 与 HashMap 的关系以及HashSet 的使用原创 2022-10-14 14:14:45 · 4534 阅读 · 1 评论 -
SpringBoot:核心模块盘点
spring-boot-project 是 spring-boot 核心技术包,其中包含了 spring-boot 所有基础源码,其中很多模块都是我们了解 spring-boot 的重点。本篇内容包括:spring-boot-project 包介绍、Spring Boot 核心模块原创 2022-12-08 21:29:54 · 3829 阅读 · 5 评论 -
Java 面试题:Java 中的 int 和 Integer 有什么区别?
在Java编程语言中,int和Integer都是用于表示整数的数据类型,但它们在使用和功能上有着明显的区别。int是一种基本数据类型(primitive type),而Integer则是一个对象类型(wrapper class)。理解这两者的区别对于编写高效、健壮和易维护的Java代码至关重要。原创 2024-06-16 15:53:07 · 2792 阅读 · 3 评论 -
Java基础:Java数据类型
Java 是一种强类型语言,这就意味着必须为每一个变量声明一种类型。在 Java 中基本数据类型共有 8 种,包括 4 种整型、2 种浮点型、1 种用于表现 Unicode 编码的字符单元的字符类型 char 和一种用于表示真值的 boolean 类型本篇主要记录内容包括:基础数据类型、对象包装器、字符串、数组原创 2022-11-14 19:02:22 · 5525 阅读 · 2 评论 -
Java集合:关于 LinkedList 的内容盘点
本篇内容包括:LinkedList 的概述、LinkedList 的结构既双向链表实现与LinkedList-Node 结构、LinkedList 的使用(构造方法&常用方法)、关于 Queue 队列的介绍、关于 ArrayList 和 LinkedList 的区别以及算法:翻转链表!原创 2022-10-11 19:46:20 · 4815 阅读 · 2 评论 -
SpringBoot实战:整合MyBatis搭建基本骨架
这篇开始,开始进行 SpringBoot 框架功能的具体实现,本篇是 SpringBoot 整合 MyBatis 搭建基本骨架;本篇内容包括:项目介绍与条件准备、项目初始搭建与构造、效果验证原创 2022-12-09 11:28:16 · 3849 阅读 · 3 评论 -
编码 5 分钟,命名 2 小时?Java 开发者都需要的一份终极命名规范指南!
简洁清爽的代码风格是大多数工程师的追求。在工作中,作者就常常因为起名字而纠结,夸张点可以说是编程 5 分钟,命名 2 小时,所以今天我总结了一份 Java 开发者都需要的一份终极命名规范指南!!每个公司都有不同的标准,目的是为了保持统一,减少沟通成本,提升团队研发效能。本文结合阿里巴巴开发规范及作者的工作经验,对 Java 领域的相关命名进行整理和总结,供大家参考。希望能为大家在命名时提供一些思路和指导。原创 2024-06-04 08:00:00 · 3422 阅读 · 118 评论 -
Maven 核心插件 maven-clean-plugin 使用详解
用于尝试清除项目工作目录中因构建而生成的文件。默认情况下,它会发现并删除在和所配置的目录。通过配置元素也可以删除默认目录以外的文件。原创 2024-06-08 13:05:05 · 3600 阅读 · 0 评论 -
深入理解Java虚拟机:Java运行内存结构
本篇内容包括:JAVA 运行内存结构,即 程序计数器、Java 虚拟机栈、本地方法栈 、Java堆、方法区、运行时常量池 以及 直接内存等相关内容!原创 2022-11-05 09:45:03 · 5651 阅读 · 10 评论 -
Zookeeper:实现“通知协调”的 Demo
应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个 watcher,每次配置更新都会通知到应用。数据发布/订阅(Publish/Subscribe)系统,即所谓的配置中心,顾名思义就是发布者将数据发布到 ZooKeeper 的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。本篇内容包括:Demo 概述、代码实现、测试结果原创 2022-11-21 17:06:06 · 4123 阅读 · 8 评论 -
深入理解Java虚拟机:Java类的加载机制
本篇内容包括:Java 类的加载机制(Jvm 结构组成、Java 类的加载)、类的生命周期(加载-验证-准备-解析-初始化-使用-卸载)、类加载器 以及 双亲委派模型。原创 2022-11-04 15:13:07 · 5686 阅读 · 17 评论 -
深入理解Java虚拟机:Java垃圾回收机制
本篇内容包括:JAVA 垃圾回收机制概述、有哪些内存需要回收、如何回收(标记-清除、标记-整理(标记-清除-压缩)、复制(标记-复制-清除)、分代收集等算法) 以及 何时进行垃圾回收等内容!原创 2022-11-05 16:50:11 · 4660 阅读 · 3 评论 -
Java基础:Java基本概念
与大多数程序设计语言一样,Java中的注释也不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。变量的本质上就是代表一个可操作的「存储空间」,空间的位置是确定的,但是里面放置什么值是不确定。我们可以通过变量名来访问对应的「存储空间」,从而操作这个「存储空间」存储的值。本篇主要记录内容包括:Java 注释、声明变量、变量的初始化、常量及枚举类型变量。原创 2022-11-14 10:19:09 · 4614 阅读 · 9 评论 -
Spring源码:Spring源码阅读环境搭建
本篇内容包括:Mac 环境下 gradle 的安装和配置、源码克隆、新建测试类,测试Spring源码 等内容!原创 2022-11-02 12:51:18 · 4125 阅读 · 7 评论 -
Java基础:Java面向对象
面向过程的优点是性能比面向对象高,不需要面向对象的实例化;缺点是不容易维护、复用和扩展。面向对象的优点是具有封装、继承、多态的特性,因而容易维护、复用和扩展,可以设计出低耦合的系统;缺点是由于需要实例化对象,因此性能比面向过程低。本篇主要记录内容包括:面向对象的概念、封装、继承、多态原创 2022-11-16 18:03:03 · 4470 阅读 · 3 评论 -
Java集合:ConcurrentHashMap
本篇内容包括:ConcurrentHashMap 概述、ConcurrentHashMap 底层数据结构、ConcurrentHashMap 的使用以及相关知识点。原创 2022-10-17 20:14:45 · 5241 阅读 · 0 评论