开始之前,我们先来搞懂下面这两个概念: 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数 (有参的方法),参数在程序语言中分为: 实参(实际参数,Arguments) :用于传递给函数/方法的参数,必须有确定的值。 形参(形式参数,Parameters) :用于定义函数/方法,接收实参,不需要有确定的值。 String hello =…
阅读过 JUC 源码的同学,一定会发现很多并发工具类都调用了一个叫做 Unsafe 的类。 那这个类主要是用来干什么的呢?有什么使用场景呢?这篇文章就带你搞清楚! Unsafe 介绍 Unsafe 是位于 sun.misc 包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java…
1. 代理模式 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。…
何为反射? 如果说大家研究过框架的底层原理或者咱们自己写过框架的话,一定对反射这个概念不陌生。 反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。 通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。 反射的应用场景了解么?…
什么是序列化和反序列化? 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。 简单来说: 序列化 :将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式 反序列化 :将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程…
final 关键字 final 关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点: final 修饰的类不能被继承,final 类中的所有成员方法都会被隐式的指定为 final 方法; final 修饰的方法不能被重写; final…
前言 阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失的风险吗?确实会! 示例代码: float a = 2.0f - 1.9f; float b = 1.8f - 1.7f; System.out.println(a);// 0.100000024…
一、基本概念 Java NIO 是 Java 1.4 引入的,用于处理高速、高并发的 I/O 操作。与传统的阻塞 I/O 不同,NIO 支持非阻塞 I/O 和选择器,可以更高效地管理多个通道。 二、核心组件 通道(Channel) Channel 是 NIO 中用于读取和写入数据的主要接口,提供双向数据传输的能力。 常见的通道实现: FileChannel…
Java 的 IO(输入/输出)操作是处理数据流的关键部分,涉及到文件、网络等多种数据源。以下将深入探讨 Java IO 的不同类型、底层实现原理、使用场景以及性能优化策略。 1. Java IO 的分类 Java IO 包括两大主要包: java.io 和 java.nio 。 1.1 java.io 包 字节流:用于处理二进制数据,主要有…
hls.js 是一个JavaScript库,实现了HTTP直播流(HLS)客户端。它依赖于HTML5视频和MediaSource扩展进行播放。它通过将MPEG-2传输流和AAC/MP3流转换为ISO BMFF(MP4)片段来实现。转换过程在Web Worker中异步进行。hls.js还支持HLS + fmp4。…