Java 基础 - 专栏
文章平均质量分 95
付费专栏2测试
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己
My email address: marzhron27@gmail.com
展开
-
Java 新特性:Lambda 表达式
Lambda 表达式(Lambda expression),也可称为闭包(Closure),是 Java(SE)8 中一个重要的新特性。Lambda 表达式允许我们通过表达式来代替功能接口。Lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)Lambda 表达式可以看作是一个匿名函数,基于数学中的 λ 演算得名。如果说,⼀个接口中,要求实现类必须实现的抽象方法,有且只有⼀个!这样的接口,就是函数式接口。原创 2024-08-18 19:44:54 · 451 阅读 · 17 评论 -
Java 网络编程:Socket 应用
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 043 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-17 01:47:03 · 355 阅读 · 6 评论 -
Java IO流:NIO 介绍及使用
NIO 也叫 Non-Blocking IO 是同步非阻塞的 IO 模型。线程发起 IO 请求后,立即返回。同步指的是必须等待 IO 缓冲区内的数据就绪,而非阻塞指的是,用户线程不原地等待 IO 缓冲区,可以先做一些其他操作,但是要定时轮询检查 IO 缓冲区数据是否就绪。Java 中的 NIO 是 new IO的意思。其实是 NIO 加上 IO 多路复用技术。原创 2024-08-16 23:28:35 · 219 阅读 · 6 评论 -
Java IO流:BIO 介绍及使用
Java BIO 就是传统的 java io 编程,其相关的类和接口在 java.ioBIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。原创 2024-08-16 23:27:51 · 136 阅读 · 0 评论 -
Java IO流:IO 流模型
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 038 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-16 23:26:31 · 165 阅读 · 0 评论 -
Java IO流:IO 流使用
我们的系统和外部的交互主要依赖于比特流(数据线里传播),比特就是bit的谐音,计算机中 “位” 的意思,代表0或1。1位或者1bit,就是一个0或一个1。但是,毕竟0或1不能表示什么,所以计算机更常见的基本单位是字节,也就是用 8 位0或1组成的一段数据。既然计算机和外界进行信息的输入和输出交互,用的是比特流,那么很容易就能想到 IO 流名字的由来了。就是比喻输入输出的数据像流一样。原创 2024-08-16 23:25:37 · 158 阅读 · 0 评论 -
Java虚拟机:常用 JVM 参数
这些标准参数是启动和运行 Java 应用程序时常用的基础命令,可以帮助你有效地控制 JVM 的行为。在 JVM 参数分类中,非标准参数是指以-XX开头的参数。这些参数提供了更深层次的 JVM 调整和优化功能,但通常是实验性的、不稳定的,可能在不同的 JVM 版本之间发生变化,甚至被移除。以下是一些常见的 非标准参数:-Xms设置 JVM 初始堆大小。-Xms512m表示初始堆大小为 512MB。-Xmx设置 JVM 最大堆大小。-Xmx1024m。原创 2024-08-14 04:15:00 · 243 阅读 · 11 评论 -
Java虚拟机:垃圾回收器
我们前面提到了,垃圾回收器的 回收的内容、回收的时机以及回收的方式,接下来我们来看 Java 垃圾回收器。如果垃圾回收算法是内存回收的方法论的话,那么垃圾回收器就是内存回收的具体实现了。Jvm 的垃圾回收器根据场景和实现方式可以分为新生代回收器和老年代回收器,新生代回收器与老年代回收器可以搭配使用。新生代回收器包括:Serial、ParNew 以及 Parallel Scavenge;老年代回收器包括:Serial Old、Parallel Old 以及 CMS;原创 2024-08-14 04:00:00 · 160 阅读 · 0 评论 -
Java虚拟机:垃圾回收机制
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 036 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-14 03:45:00 · 1249 阅读 · 54 评论 -
Java虚拟机:运行时内存结构
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-13 23:25:24 · 601 阅读 · 58 评论 -
Java虚拟机:类的加载机制
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 034 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-13 23:24:11 · 3205 阅读 · 140 评论 -
Java虚拟机:虚拟机介绍
Java 虚拟机(英语:Java Virtual Machine,缩写:JVM),一种能够执行 Java 字节码(Class 文件)的虚拟机,以堆栈结构机器来进行实做。最早由 Sun 公司所研发并实现第一个实现版本,是 Java 平台的一部分,能够执行以 Java 语言所写的软件程序。Java 虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。原创 2024-08-13 23:22:43 · 209 阅读 · 0 评论 -
Java 并发编程:Java 并发原子类
我们把一个或者多个操作在 CPU 执行的过程中不能被中断的特性称之为原子性。在 Jdk1.5 开始 Java 开始引进提供了包,到 Jdk8 时,atomic 包共提供了 16 个原子类,分为 6 种类型,分别是:①、基本类型原子类;②、数组类型原子类;③、引用类型原子类;④、原子更新属性;⑤、Adder 加法器;⑥、积累器。当多线程更新变量的值时,可能得不到预期的值,当然增加 syncronized 关键字可以解决线程并发的问题。但原子类提供了一种用法简单,性能高效,线程安全的更新变量的方式。原创 2024-08-11 01:42:28 · 364 阅读 · 27 评论 -
Java 并发编程:Java 并发工具类
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 031 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-11 01:40:20 · 139 阅读 · 0 评论 -
Java 并发编程:ReentrantLock 锁与 AQS
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 030 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。原创 2024-08-10 18:41:45 · 1365 阅读 · 70 评论 -
Java 并发编程:线程变量 ThreadLocal
即线程变量,是 Java 提供的用于实现线程本地变量的工具类。每个线程可以通过对象访问其专属的变量,避免了多线程环境下变量共享导致的数据不一致问题。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而中填充的变量属于当前线程,该变量对其他线程而言是隔离的。Ps:ThreadLocal 很容易让人望文生义,想当然地认为是一个 “本地线程”。其实,原创 2024-08-10 18:39:23 · 3391 阅读 · 127 评论 -
Java 并发集合:阻塞队列集合介绍
Java 中的阻塞队列(BlockingQueue)是一种在多线程环境下用于线程安全的数据结构,它不仅提供了典型的队列操作(如插入和移除),还可以在队列为空或满时自动阻塞操作线程,直到队列状态允许操作的继续。阻塞队列通过阻塞和等待机制有效地协调生产者和消费者线程之间的操作,确保数据一致性和线程安全。线程间通信:阻塞队列在生产者-消费者模型中扮演了关键角色,它允许生产者线程和消费者线程之间进行线程安全的数据传递。具体表现为:生产者线程:生产者线程将数据放入队列中。原创 2024-08-08 17:57:43 · 2139 阅读 · 138 评论 -
Java 并发编程:一文了解 synchronized 的使用
在 Java 中,关键字用于实现线程之间的同步,以确保多个线程在访问共享资源时不会出现竞态条件。可以确保在任何给定时刻,最多只有一个线程可以执行被标记的代码块或方法,从而实现并发安全。主要有以下三个作用:原子性(Atomicity):通过互斥访问同步代码块或同步方法,保证同一时间只有一个线程能够执行这段代码,确保了操作的原子性。例如,两个线程同时执行一个同步方法时,只有一个线程能够获得锁并执行,另一个线程必须等待锁释放;可见性(Visibility):保证线程对共享变量的修改对其他线程是可见的。原创 2024-08-04 22:02:08 · 1744 阅读 · 86 评论 -
Java 并发编程:volatile 关键字介绍与使用
volatile关键字在 Java 中用于修饰变量,使其具有可见性和有序性。可见性:在多线程环境下,当一个线程修改了volatile变量的值,新值对于其他线程是立即可见的。通常情况下,线程之间对变量的读写操作是不可见的,这意味着一个线程修改了变量的值,另一个线程可能看不到这个修改,仍然使用旧值。使用volatile关键字可以确保所有线程看到的是变量的最新值;volatile关键字还可以防止指令重排序优化。编译器和处理器通常会对指令进行重排序,以提高性能,但这种重排序可能会破坏多线程程序的正确性。原创 2024-08-04 21:21:53 · 2900 阅读 · 141 评论 -
Java 并发编程:Java 中的乐观锁与 CAS
CAS,即 “比较并交换”(Compare-And-Swap),是一种用于解决多线程并行情况下性能损耗问题的机制。CAS 操作是一种乐观锁实现,广泛应用于包中的并发类。高效:CAS 是无锁操作,避免了传统锁机制带来的线程切换和上下文切换的开销;无死锁:由于没有使用锁,因此不会出现死锁问题。CAS 的缺点:忙等待:在高并发情况下,CAS 操作可能会不断重试,导致 CPU 资源浪费。原创 2024-08-03 23:33:07 · 1475 阅读 · 60 评论 -
Java 并发编程:Java 线程池的介绍与使用
内存泄漏的标准定义是当应用程序不再使用对象时发生的情况,但是垃圾回收器无法将其从工作内存中删除,因为它们仍在被引用。因此,应用程序会消耗越来越多的资源,最终导致致命的。垃圾回收操作需要消耗 CPU、线程、时间等资源,所以容易理解的是垃圾回收操作不是实时发生,当内存消耗完或者是达到某一个指标,才能触发垃圾回收操作。在 JVM 堆中,有两种类型的对象——引用和未引用,垃圾回收器可以删除未被引用的对象。即使不再被应用程序使用,也不会收集被引用的对象。原创 2024-08-02 18:25:43 · 4030 阅读 · 117 评论 -
Java 并发编程:Java 线程模型介绍及使用
Java 线程是指程序中可以独立执行的单个代码执行路径。Java 使用类和包来实现多线程编程。线程是并发编程的基础,可以提高应用程序的性能,特别是在处理 I/O 密集型或 CPU 密集型任务时。线程(Thread):是一个独立的执行单元,可以与其他线程并发执行;进程(Process):是一个正在执行的程序,每个进程至少包含一个线程(主线程);多线程(Multithreading):在同一进程内同时运行多个线程,以实现并发处理。原创 2024-08-01 02:22:43 · 369 阅读 · 117 评论 -
Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)
在当今多核处理器和高并发应用日益普及的时代,理解并掌握 Java 并发编程变得尤为重要。Java 内存模型(Java Memory Model, JMM)作为并发编程的基石,扮演着至关重要的角色。JMM 定义了多线程环境下变量的访问规则,确保程序在不同平台和处理器上能够一致且正确地运行。本文将深入探讨 Java 内存模型中的核心概念,包括处理器优化、指令重排序与内存屏障。我们将揭示这些技术如何影响 Java 程序的执行顺序和数据可见性,以及开发者如何利用 JMM 的规则来编写高效、安全的并发程序。通过对原创 2024-07-26 15:12:16 · 861 阅读 · 145 评论 -
Java 集合框架:TreeMap 的介绍、使用、原理与源码解析
Map 在 Java 里面分为两种:HashMap 和 TreeMap,区别就是 TreeMap 有序,HashMap 无序。如果只需要存映射,那么 HashMap 就够了,但是如果需要存有顺序的 key 那么就用 TreeMap。TreeMap 存储 K-V 键值对,通过红黑树(R-B tree)实现。原创 2024-07-23 18:20:24 · 2146 阅读 · 85 评论 -
Java 集合框架:HashMap 的介绍、使用、原理与源码解析
HashMap 根据是一个键值对集合,采用 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMap 最多只允许一条记录的键为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。原创 2024-07-23 18:16:41 · 7166 阅读 · 113 评论 -
Java 集合框架:Java 中的双端队列 ArrayDeque 的实现
Deque 接口表示一个双端队列(Double Ended Queue),允许在队列的首尾两端操作,所以既能实现队列行为,也能实现栈行为。Deque 常用的两种实现 ArrayDeque 和 LinkedList。ArrayDeque 是 Java 集合中双端队列的数组实现,可以从两端进行插入或删除操作,当需要使用栈时,Java 已不推荐使用 Stack,而是推荐使用更高效的ArrayDeque,当需要使用队列时也可以使用 ArrayDeque。原创 2024-07-22 13:53:09 · 3058 阅读 · 120 评论 -
Java 集合框架:Java 中的优先级队列 PriorityQueue 的实现
在 Java 中是一种基于堆(Heap)数据结构实现的优先级队列。堆是一种特殊的完全二叉树,分为最小堆和最大堆。在最小堆中,每个节点的值都小于或等于其子节点的值;在最大堆中,每个节点的值都大于或等于其子节点的值。Java 的使用最小堆实现,因此队列头部总是优先级最高(值最小)的元素。原创 2024-07-21 17:10:00 · 3164 阅读 · 145 评论 -
Java 集合框架:Java 中的 Set 集合(HashSet & LinkedHashSet & TreeSet)特点与实现解析
Set是java.util包下集合框架中一个接口,它是Collection接口的一个子接口,表示不允许包含重复元素的集合。Set 集合的特点是集合内的元素无序,且每个元素都是唯一的。这意味着即使试图添加两个相等的对象(依据.equals()方法判断相等),Set 集合只会保存一个对象。无序性:Set 集合中的元素不按任何特定顺序排列,无法通过索引访问元素,即集合内部的元素顺序可能随时间和操作发生变化;唯一性:Set 集合不允许包含重复的元素。判断元素是否重复的标准是基于元素的.equals()方法。原创 2024-07-09 06:00:00 · 7477 阅读 · 185 评论 -
Java 并发集合:CopyOnWrite 写时复制集合介绍
写时复制(Copy-on-Write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是:如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这一过程对其他的调用者都是透明的。当对容器进行写操作(这里的写可以理解为 “增、删、改”)时,为了避免读写操作同时进行而导致的线程安全问题。原创 2024-07-02 14:03:23 · 5527 阅读 · 188 评论 -
Java 集合框架:Vector、Stack 的介绍、使用、原理与源码解析
Java 集合框架(Java Collections Framework)是 Java 标准库中的一个核心组件,它提供了一套用于处理数据集合的接口和类。作为其中的重要成员,Vector 和 Stack 在特定场景中扮演着关键角色。Vector 是一种同步的动态数组,实现了 List 接口,适用于需要线程安全的场景;而 Stack 是 Vector 的子类,提供了后进先出(LIFO)的数据结构操作。本文将对 Vector 和 Stack 进行全面的介绍,探讨它们的使用方法、工作原理以及源码实现,以帮助开发者深原创 2024-06-20 06:15:00 · 3563 阅读 · 61 评论 -
Java 集合框架:LinkedList 的介绍、使用、原理与源码解析
Java 集合框架中包含了多种用于数据存储和操作的类,其中 LinkedList 是一个重要且常用的实现。LinkedList 作为一个双向链表,提供了高效的插入和删除操作,特别适用于频繁进行元素增删的场景。对于很多开发者而言,深入理解 LinkedList 的特性和工作原理是提高代码性能和优化数据处理逻辑的关键。本文将对 LinkedList 进行全面的介绍和解析,帮助读者掌握其使用方法、内部原理以及源码实现。原创 2024-06-17 08:28:55 · 3411 阅读 · 90 评论 -
Java 集合框架:ArrayList 的介绍、使用、原理与源码解析
本文将从介绍 ArrayList 开始,详细探讨其使用方法、工作原理以及背后的源码实现,帮助读者深入理解并灵活运用 ArrayList,以提升编程效率和代码质量。在接下来的部分中,我们将首先概述 ArrayList 的基本特性及其在 Java 集合框架中的地位。随后,通过实际代码示例展示如何创建、操作和管理 ArrayList。接着,我们会揭示 ArrayList 的内部工作机制,包括其底层数据结构、扩容策略和性能优化等方面的内容。最后,我们将深入分析 ArrayList 的源码,探讨其设计思想和实现细原创 2024-06-17 08:27:52 · 5681 阅读 · 105 评论 -
Java 注解设计 -- Java 语言注解的介绍、高阶应用与自定义注解
Java 注解(Annotations)是自 JDK 1.5 引入的一种特性,它们提供了一种在代码中嵌入额外信息的机制,这些信息不会直接影响代码的执行,但可用于编译检查、代码分析、或在运行时的处理。注解可以被用来注释包、类、接口、字段、方法参数、局部变量等。一类是 Java 自带的标准注解,包括@Override(标明重写某个方法)、(标明某个类或方法过时)和(标明要忽略的警告),使用这些注解后编译器就会进行检查;一类为元注解,元注解是用于定义注解的注解,包括@Retention。原创 2024-06-15 18:39:32 · 1896 阅读 · 12 评论 -
Java 泛型设计 -- Java 语言泛型的概述、类型擦出、协变与逆变
泛型(Generics)是在 JDK 5.0 版本中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。在 JDK 5.0 引入泛型之前,Java 的集合框架并没有使用泛型,所有的集合类(如ListSetMap等)都是处理Object类型的对象。这意味着它们可以存储任何类型的对象,但这种通用性也带来了几个问题:缺乏类型安全:集合可以存储任何类型的对象,这可能导致运行时的。原创 2024-06-15 18:38:36 · 1769 阅读 · 0 评论 -
Java 反射机制 -- Java 语言反射的概述、核心类与高级应用
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于 ReflectionAPI 取得任何类的内部信息,并能直接操作任意对象的内 部属性及方法。原创 2024-06-13 07:15:00 · 4811 阅读 · 97 评论 -
Java 异常处理 -- Java 语言的异常、异常链与断言
世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。原创 2024-06-13 07:00:00 · 3472 阅读 · 137 评论 -
Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类
在我们对 Java 语言进行基本介绍之后,本篇文章将带领大家深入了解 Java 的面向对象编程(OOP)概念。我们将探讨封装、继承和多态这三大核心概念,以及内部类的使用和 Object 类的重要性。通过对这些内容的学习,读者将能够更好地设计和实现复杂的 Java 应用程序。原创 2024-06-12 07:00:00 · 2794 阅读 · 129 评论 -
Java 关于抽象 -- Java 语言的抽象类、接口和函数式接口
在理解了 Java 的基础语法和面向对象编程概念之后,本篇文章将进一步探讨 Java 中的抽象机制。我们将讨论抽象类与接口的区别和使用场景,了解函数式接口在 Java 8 中的引入及其重要性。通过掌握这些高级概念,读者将能够编写出更灵活和可维护的代码。原创 2024-06-12 07:15:00 · 2646 阅读 · 76 评论 -
Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR
本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。原创 2024-06-11 07:15:00 · 3767 阅读 · 113 评论 -
Java 流程控制 -- Java 语言的代码块、作用域、循环与依赖
本篇文章我们将深入探讨 Java 的流程控制,包括代码块、作用域、循环与依赖。这些概念是编写高效、清晰代码的关键,对于掌握 Java 编程至关重要。原创 2024-06-11 07:00:00 · 2473 阅读 · 130 评论