8、SequenceInputStream的源码和Vector.class的一些函数说明(windows操作系统,JDK8)
一、SequenceInputStream源码——可以顺序读取多个输入Stream的装饰器类
SequenceInputStream.class 的UML关系图,如下所示:
SequenceInputStream.class的源码,如下所示:
package java.io;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Vector;
public
class SequenceInputSt ...
Java SE 和 Java EE 的核心功能模块
Java SE :
它的目标是提供一个稳定且跨平台的运行环境和核心类库,用于开发桌面应用、命令行工具和服务器端的基础应用。
Java SE 的功能主要由两大部分构成:JVM (Java虚拟机) 和 核心类库 (Core Libraries) 。我们通常所说的“功能模块”,主要指的就是这些核心类库。
以下是其主要的核心模块:
1. JVM ...
7、InputStream的源码、FilterInputStream源码、BufferedInputStream的源码(windows操作系统,JDK8)
阅读本文时,请先看我的另一篇博客:6、(InputStream的源码、FilterInputStream源码、BufferedInputStream的源码解读前言)AtomicReferenceFieldUpdater.class和System.arraycopy()函数的用法
Java IO 库采用了装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)的组合设计模式,其中InputStream是 ...
6、(InputStream的源码、FilterInputStream源码、BufferedInputStream的源码解读前言)AtomicReferenceFieldUpdater.class和System.arraycopy()函数的用法
一、AtomicReferenceFieldUpdater的用法
AtomicReferenceFieldUpdater是一个抽象的工具类,其底层是通过反射找到目标字段的内存偏移量,然后利用Unsafe.class提供的CAS(Compare-And-Swap)操作来原子地更新某个类中指定变量的值。如下所示:
package com.xxx.StreamAndReader;
import java.io.IOException;
import jav ...
【EASY-YAPI】IDEA插件easyyapi如何解决公共前缀问题
问题
在某些Yapi上的项目,有些设置了项目级别前缀,有些没有设置,有些接口文档是手写的,有些是自动生成的。
因此会出现URL前缀重叠、缺失等问题,需要截断,或者追加
解决
如何移除前缀
if(it.containingClass().name().contains("com.slankka.coder.OpenapiController")){
api.setPath(tool.removePrefix(api.path(), ...
LockSupport深度解析:线程阻塞与唤醒的底层实现原理
LockSupport简介
LockSupprot 用来阻塞和唤醒线程,底层实现依赖于 Unsafe 类。
LockSupport用来创建锁和其他同步类的基本线程阻塞原语。简而言之,当调用LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。在AQS ...
剑指offer-76、删除链表的节点
题⽬描述
给定单向链表的头指针和⼀个要删除的节点的值,定义⼀个函数删除该节点。返回删除后的链表的头节点。
此题对⽐原题有改动
题⽬保证链表中节点的值互不相同
该题只会输出返回的链表和结果做对⽐,所以若使⽤ C 或 C++ 语⾔,你不需要 free 或 delete 被删除的节点
数据范围:
0<=链表节点值<=10000
0<=链表⻓度<= ...
MyBatis XML 里<![CDATA[ ]]>的使用
今天我们来聊聊 MyBatis XML 文件里的 <![CDATA[ ]]> ,我依稀记得我第一次看到 <![CDATA[ ]]>,心想,这是个啥啊?
首先我们要明确:<![CDATA[ ]]> 不是 MyBatis 的专属语法,而是 XML 的原生语法(全称 Character Data,字符数据)。
XML 解析器 对某些特殊字符(比如 <、>、&、'、" 等)进行 ...
剑指offer-75、买卖股票的最好时机
题⽬描述
假设你有⼀个数组 prices ,⻓度为 n ,其中 prices 是股票在第 i 天的价格,请根据这个价格数组,返回买卖股票能获得的最⼤收益
你可以买⼊⼀次股票和卖出⼀次股票,并⾮每天都可以买⼊或卖出⼀次,总共只能买⼊和卖出⼀次,且买⼊必须在卖出的前⾯的某⼀天
如果不能获取到任何利润,请返回 0
假设买⼊卖出均⽆ ...
spring6-与juint和mybatis的集成
spring对junit的支持
主要是自动从spring容器中获取bean。不用手动获取了。
spring对junit4的支持
1.引入spring和junit4的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.4</version>
</dependency>
<!-- spring对junit支持的依赖,s ...
spring-事务管理
事务支持
什么是事务?
在一个业务流程中,需要多条DML(insert、delete、update)语句联合才能完成。这些语句必须同时成功或者同时失败。这样才能保证数据安全。
多条DML同时成功或者同时失败,叫做事务。
事务处理的四个过程
开启事务
执行业务代码
提交事务(没出现异常,提交成功。commit transaction)
回滚事务(出 ...
剑指offer-74、n个骰⼦的点数
题目描述
把 n 个骰⼦扔在地上,所有骰⼦朝上⼀⾯的点数之和为 s 。输⼊ n ,打印出 s 的所有可能的值出现的概率。
你需要⽤⼀个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰⼦所能掷出的点数集合中第 i ⼩的那个的概率。
示例1:
输⼊: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
示例2
输⼊: 2
输 ...
记录使用Arthas修改线上源码重新加载的一次过程
前情提要
线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过Arthas完成这个场景的需求,实际动手试了试,在此记录一下。
警告!警告!
# !!! 重要警告 !!!
# 1. 生产环境谨慎使用,先测试
# 2. 修改前备份原始类
# 3. 确保修改符合JVM规范
# 4. 注意内存泄漏风险
# 5. 重启后会丢失修改
# 安 ...
spring6-代理模式和AOP
jdbcTemplate
jdbcTemplate是spring提供的一个jdbc模板类,是对jdbc的封装。
当然你也可以使用其他框架融入MyBatis、Hibernate。
GoF之代理模式
代理模式的作用
当一个对象需要受到保护的时候,可以使用代理对象去完成某个行为。
需要给某个对象进行功能增强的时候,可以找一个代理进行增强。
A对象和B对象无法直接交互时 ...
AQS深度探索:以ReentrantLock看Java并发编程的高效实现
概述
AQS ( Abstract Queued Synchronizer )是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )来表示同步状态 和一个先进先出( FIFO )的线程等待队列来完成资源获取的排队工作,通过CAS完成对State值的修改。
AQS整体框架如下:
当有自定义同步器接入时,只需重写第一层所需要的部分方法即可 ...
5、FileDescriptor的源码和使用注意事项(windows操作系统,JDK8)
操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符指向存储设备的不透明标识符。Java虽然在设计上使用了抽象程度更高的流来作为文件操作的模型,但是底层依然要使用文件描述符与操作系统交互,而Java世界里文件描述符的对应类就是FileDescriptor。同时,Java规定了FileDescriptor只能由 ...
剑指offer-73、连续⼦数组的最⼤和(⼆)
题⽬描述
输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有
最⼤和的连续⼦数组。
⼦数组是连续的,⽐如[1,3,5,7,9] 的⼦数组有[1,3] , [3,5,7] 等等,但是[1,3,7] 不是⼦数组
如果存在多个最⼤和的连续⼦数组,那么返回其中⻓度最⻓的,该题数据保证这个最⻓的只存在⼀个
该 ...
spring6-注解式开发
spring框架创建bean就是利用反射机制
反射机制的代码如下:
public static void main(String[] args) throws Exception {
System.out.println("Hello, World!");
// 使用反射机制调用方法
// 获取类
Class<?> clazz = Class.forName("com.ali.bean2.SomeService");
// 获取方法
Method method = cl ...
Redisson 使用手册:从 API 误区到看门狗失效,在此终结分布式锁的噩梦
写在前面
在上一篇《分布式锁的代价与选择:为什么我们最终拥抱了Redisson?》中,我们聊到了手写 SETNX 的"茹毛饮血"时代。既然选择了 Redisson,就意味着我们已经告别了那些让人提心吊胆的死锁噩梦。
很多时候,我们以为只是调用了一个简单的 lock.lock(),但背后其实是一整套复杂的自动续期、Lua 脚本原子执行和发布订 ...
剑指offer-72、礼物的最⼤价值
题⽬描述
在⼀个m × n的棋盘的每⼀格都放有⼀个礼物,每个礼物都有⼀定的价值(价值⼤于 0)。你可以从棋盘的左上⻆开始拿格⼦⾥的礼物,并每次向右或者向下移动⼀格、直到到达棋盘的右下⻆。给定⼀个棋盘及其上⾯的礼物的价值,请计算你最多能拿到多少价值的礼物?
如输⼊这样的⼀个⼆维数组,
[
[1,3,1],
[1,5,1],
[4,2, ...