
Java
文章平均质量分 95
记忆中逝去的往事
萌新的路上慢慢前进
展开
-
并发工具类
Lock在Lock中声明了四个方法来获取锁:lock()unlock()tryLock()tryLock(long time, TimeUnit unit)lockInterruptibly()1、lock()、unlock()lock():获取锁,如果锁已被其它线程获取,则进行等待;unlock():释放锁;/** * @author yangdong * @date 2021-05-10 * 简单使用lock()方法,由于Lock发生异常不会自动释放锁,因此我们一定要在 f原创 2022-02-11 16:49:56 · 822 阅读 · 0 评论 -
线程安全、锁
锁是一种工具,用于控制对共享资源的访问;Lock和synchronized,这两个是最常见的锁,它们都可以达到线程安全的目的,但是在使用上和功能上又有较大的不同;Lock并不是用来提代synchronized,而是当使用synchronized不合适或不满足要求的时候,来提供高级功能的;为什么synchronized不够用?效率低:锁的释放情况少,视图获得锁时不能设定超时、不能中断一个正在视图获取锁的线程;不够灵活:加锁和释放的时机单一,每个锁仅有单一的条件;锁的分类乐观锁和悲观锁1、原创 2022-01-12 17:04:40 · 900 阅读 · 0 评论 -
二叉树、2-3-4树、红黑树、B Tree树、哈希表
二叉树每个子节点只有两个节点的树二叉查找树(二叉搜索树):就是一颗二叉树,他的左节点比父节点要小,右节点比父节点要大。他的高度决定的查找效率常见操作:1、查找(红黑树通用)查找每个节点我们从根节点开始查找,步骤:查找值比当前值大,则搜索右子树查找值等于当前值,停止查找,返回当前节点查找值比当前值小,则搜索左子树2、插入要插入节点,必须先找到插入节点位置。依然是从根节点开始比较,小于根节点的话就和左子树比较,反之与右子树比较,直到左子树为空或者右子树为空,则插入到相应为空的位置3、原创 2021-04-03 15:40:53 · 958 阅读 · 0 评论 -
语法糖
什么是语法糖java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码;注意:以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记;默认构造器public class Candy1 {}编译成class后的代码:public cla原创 2021-01-12 15:58:06 · 242 阅读 · 0 评论 -
JVM之类文件结构
类文件结构类型名称数量U4magic(魔术)1U2minor_version(次版本号)1U2major_version(主版本号)1U2constant_pool_count(常量个数)1cp_infoconstant_pool(常量池表)constant_pool_count-1U2access_flags(类的访问控制权限)1U2this_class(类名)1U2super_class(父类名)1U原创 2021-01-07 17:10:03 · 131 阅读 · 0 评论 -
LocalDate、LocalTime、LocalDateTime
概述JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包中,下面是一些关键类:LocalDate:表示日期,包含年月日,格式为 2019-10-16LocalTime:表示时间,包含时分秒,格式为 16:38:54.158549300LocalDateTime:表示日期时间,包含年月日,时分秒,格式为 2018-09-06T15:33:56.750DateTimeFormatter:日期时间格式化类Instant:时间戳原创 2020-07-23 15:45:18 · 453 阅读 · 0 评论 -
服务端Socket
使用ServerSocketServerSocket类包含了使用Java编写服务器所需的全部内容。在Java中,服务器程序的基本生命周期如下:public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(port); while (true) {...原创 2020-07-11 11:47:02 · 215 阅读 · 0 评论 -
堡垒机与跳板机
跳板机跳板机属于内控堡垒机范畴,是一种用于单点登陆的主机应用系统。2000年左右,高端行业用户为了对运维人员的远程登录进集中管理,会在机房里部署跳板机。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机并没有实现对运维人员操作行为的控制和审计,使用跳板机过程中还是会有误操作、违规操作导致的操作事故,一旦出现操作事故很难快速定位原因和责任人。此外,跳板机存在严重的安全风险,一旦跳板机系统被攻入,则将后端资源风险完全暴露无遗。同时,翻译 2020-06-15 14:47:50 · 545 阅读 · 0 评论 -
Maven命令学习
site<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.4</version> </plugin> </plugins&g原创 2020-07-11 11:36:07 · 305 阅读 · 0 评论 -
Fork/Join介绍
Fork/Join框架介绍Fork/Join框架自JDK 7引入。Fork/Join框架可以将一个大任务拆分为很多小任务来异步执行。 Fork/Join框架主要包含三个模块:线程池:ForkJoinPool;任务对象:ForkJoinTask;执行任务的线程:ForkJoinWorkerThread;Fork/Join原理-分治法ForkJoinPool主要用来使用分治法(Div...原创 2020-04-26 15:08:29 · 432 阅读 · 0 评论 -
JDK8新特性之Optional类与Stream流
集合处理数据的弊端import java.util.ArrayList;import java.util.Collections;public class Test { public static void main(String[] args) { // 一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰 // 需求:1...原创 2020-04-24 17:32:52 · 862 阅读 · 1 评论 -
JDK8新特性之Lambda表达式
Lambda表达式介绍使用匿名内部类存在的问题:当需要启动一个线程去完成任务时,通常会通过Runnable 接口来定义任务内容,并使用Thread 类来启动该线程。传统写法,代码如下:public class Demo01LambdaIntro { public static void main(String[] args) { new Thread(new Run...原创 2020-04-24 10:40:15 · 384 阅读 · 0 评论 -
Object克隆方法解析
克隆方法的由来问题一:什么是克隆(clone)方法答: 创建并返回此对象的一个副本——按照原对象,创建一个新的对象(复制原对象的内容)。问题二:已经存在new关键字和反射技术都可以创建对象,为什么还需要一个Object的clone方法呢?答:必然是new关键字和反射技术,存在一些弊端。new关键字和反射创建对象的弊端:通过new和反射可以创建内容一模一样的对象。但是,创建对象之后,通过...原创 2020-07-11 11:48:53 · 1614 阅读 · 1 评论 -
输入/输出(二)
推回输入流在输入/输出流体系中,有两个特殊的流与众不同,就是PushbackReader和PushbackInputStream:这两个推回输入流都带有一个推回缓冲区,当程序调用这两个推回输入流的unread()方法时,系统将会把指定数组的内容推回到该缓冲区里,而推回输入流每次调用read()方法时总是先从推回缓冲区读取,只有完全读取了推回缓冲区的内容后,但还没有装满read()所需的数组时...原创 2018-11-10 17:11:03 · 347 阅读 · 0 评论 -
输入/输出(一)
File类访问文件和目录不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。File类提供了很多方法来操作文件和目录:流的分类1. 输入流和输出流输入流:只能从中读取数据,而不能向其写入数据;输出流:只能向其写入数据,而不能从中读取数据;Java的输入流主要由In...原创 2018-11-10 17:09:18 · 309 阅读 · 0 评论 -
多线程理解(二)
线程安全的问题关于线程安全问题,有一个经典的问题----银行取钱的问题。银行取钱的基本流程如下:用户输入账户、密码,系统判断用户的账户、密码是否匹配;用户输入取款金额;系统判断账户余额是否大于取款金额;如果余额大于取款金额,则取款成功;如果余额小于取款金额,则取款失败;如果将这个流程放在多线程并发的场景下,就有可能出现问题;同步代码块为了解决这个问题,Java的多线程支持引入了...原创 2018-11-10 17:08:14 · 6281 阅读 · 0 评论 -
多线程理解(一)
线程与进程线程也被称作轻量级进程,线程是进程的执行单元;线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程;并发与并行并发性:指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果;并行性:指在同一时刻,有多条指令在多个处理器上同时执行;继承Thread类创建线程类通过继承Thread类来创建并启动多线程的步...原创 2018-11-10 17:07:18 · 684 阅读 · 0 评论 -
自动装箱与自动拆箱
从图6.1中可以看出,Java提供的基本类型变量和包装类对象之间的转换有点烦琐,但从JDK 1.5之后这种烦琐就消除了,JDK 1.5提供了自动装箱和自动拆箱功能;所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量(Object是所有类的父类,子类对象可以直接赋给父类变量);自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量;pub...原创 2018-11-09 16:16:25 · 203 阅读 · 0 评论 -
多态与绑定
多态与绑定Java引用变量有两个类型:编译时类型:由声明该变量时使用的类型决定;运行时类型:由实际赋给该变量的对象决定;如果编译时类型和运行时类型不一致,就可能会出现所谓的多态;绑定指的是一个方法的调用与方法所在的类关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。区别:静态绑定发生在编译时期,动态绑定发生在运行时变量都使用静态绑定,使用pri...原创 2018-11-09 11:14:09 · 230 阅读 · 0 评论 -
基本类型的类型转换
简介在Java程序中,不同的基本类型的值经常需要进行相互转换,有两种类型转换方式:自动类型转换强制类型转换char代表字符串,实际上字符型也是一种整数类型,相当于无符号整数类型;Java语言的浮点类型默认是double类型。例如:5.12代表一个double类型的值,占64位的内存空间;5.12f或者5.12F才表示一个float类型的值,占32位的内存空间;Java还提供了三个...原创 2018-11-06 17:23:57 · 863 阅读 · 0 评论 -
输入/输出(三)NIO.2
Path、Paths和Files核心API早期的Java只提供了一个File类来访问文件系统,但File类的功能比较有限,它不能利用特定文件系统的特性,File所提供的方法的性能也不高。而且,其大多数方法在出错时仅返回失败,并不会提供异常信息。具体的看这里:https://blog.youkuaiyun.com/KingBoyWorld/article/details/70156942FileVis...原创 2018-11-10 17:11:24 · 186 阅读 · 0 评论 -
System、Runtime、BigDecimal类
System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法;public class TestSystem{ public st...原创 2018-11-13 15:48:39 · 169 阅读 · 0 评论 -
数组
理解数组:数组也是一种类型Java的数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的;一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变;Java的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数组元素具有相同的类...原创 2018-11-08 10:48:14 · 283 阅读 · 0 评论 -
JVM内存结构、Java内存模型、Java对象模型
运行时数据区域程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码(.class 文件)的行号指示器。由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的...原创 2021-01-06 17:24:25 · 439 阅读 · 0 评论 -
JVM之垃圾回收
对象已死吗垃圾收集器在对堆进行回收前,原创 2021-01-08 09:45:00 · 464 阅读 · 0 评论 -
刷牛客网Java试题的一些碎片化知识汇总
1:public class B{ public static B t1 = new B(); public static B t2 = new B(); { System.out.println(&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;构造块&原创 2018-12-28 15:57:05 · 694 阅读 · 0 评论 -
抽象类、接口、内部类
抽象类抽象方法和抽象类抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法;规则如下:抽象类与抽象方法必须使用abstract修饰符来修饰,抽象方法不能有方法体;抽象类不能被实例化。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例;抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、...原创 2018-12-02 16:09:27 · 2214 阅读 · 0 评论 -
类加载机制与反射
类的加载类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象;类的加载由类加载器完成,类加载器通常由JVM提供。类加载器通常无须等到“首次调用”该类时才加载该类,Java虚拟机规范允许系统预先加载某些类;...原创 2018-11-08 16:24:05 · 398 阅读 · 0 评论 -
成员变量和局部变量
成员变量和局部变量在Java语言中,根据定义变量位置的不同,可以将变量分成两大类:成员变量局部变量其中类变量从该类的准备阶段起开始存在,类变量的作用域与这个类的生存范围相同-----与类本身共存亡;实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同-----与实例共存亡;Person.java:public class P...原创 2018-11-08 16:22:16 · 195 阅读 · 0 评论 -
List、Set、Map集合
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引;public class TestList{ public static void main(String[] args) { List books = new ArrayList(); ...原创 2018-11-11 17:05:42 · 428 阅读 · 0 评论 -
Java只有一种参数传递方式:值传递
Java里方法的参数传递方式只有一种:值传递所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响;基本类型的参数传递:public class Test { public static void swap(int a,int b) { int tmp = a; a = b; b = tmp; System.out.println("swap方法...原创 2018-11-06 16:32:32 · 575 阅读 · 0 评论