Java基础
文章平均质量分 87
小小马里奥ぅ
这个作者很懒,什么都没留下…
展开
-
AQS核心逻辑源码分析
AQS核心逻辑源码分析AQS是什么AQS的设计初衷:将基础的同步相关操作抽象在AbstractQueuedSynchronizer中,利用AQS为我们构建同步结构提供了范本 它能降低构建锁和同步器的工作量,还可以避免处理多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。 Abstrac原创 2022-03-07 00:10:30 · 264 阅读 · 0 评论 -
Spring事务看这一篇就够了
Spring事务看这一篇就够了事务的特性基本概念MySQL 怎么保证原子性的?Spring 支持两种方式的事务管理1.编程式事务管理2.声明式事务管理Spring 事务管理接口介绍事务管理接口概述PlatformTransactionManager:事务管理接口TransactionDefinition:事务属性TransactionStatus:事务状态事务属性详解事务传播行为事务隔离级别不可重复读和幻读的区别?事务超时属性事务只读属性为什么我一个数据查询操作还要启用事务支持呢?@Transactiona原创 2022-02-24 23:52:05 · 396 阅读 · 0 评论 -
Java注解学习笔记(四)运行时注解
Java注解学习笔记(四)运行时注解运行时注解(RetentionPolicy.RUNTIME)概念定义注解按生命周期来划分可分为3类:那怎么来选择合适的注解生命周期呢?自定义源码注解样例获取注解自定义注解运行时注解(RetentionPolicy.RUNTIME)概念定义注解按生命周期来划分可分为3类:RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;RetentionPolicy.CLASS:注解被保留到class文件,但原创 2022-02-24 00:31:25 · 581 阅读 · 0 评论 -
Java注解学习笔记(三)编译时注解
编译时注解(RetentionPolicy.CLASS)概念定义 说到编译时注解(RetentionPolicy.CLASS) 都要和 注解处理器(Annotation Processor) 扯上关系,因为这里是真正体现编译时注解价值的地方。需要注意的一点是,运行时注解(RetentionPolicy.RUNTIME)和源码注解(RetentionPolicy.SOURCE)也可以在注解处理器进行处理,不同的注解有各自的生原创 2022-02-24 00:03:32 · 471 阅读 · 0 评论 -
Java注解学习笔记(二)源码注解
Java注解学习笔记(二)自定义源码注解自定义源码注解(RetentionPolicy.SOURCE)概念定义自定义源码注解样例自定义源码注解(RetentionPolicy.SOURCE)概念定义 源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件原创 2022-02-18 08:03:42 · 214 阅读 · 0 评论 -
Java注解学习笔记(一)基础概念理解
Java注解学习笔记(一)基本概念注解的概念注解的语法与定义形式单个注解举例分析注解的分类第一种分法根据注解如何创建的来定义第二种分法根据注解的生命周期来定义注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations。注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声原创 2022-02-18 08:02:35 · 111 阅读 · 0 评论 -
Java基础巩固(四)线程生命周期和死锁的定位与解决
线程线程生命周期介绍 关于线程生命周期的不同状态,在Java 5以后,线程状态被明确定义在其公共内部枚举类型java.lang.Thread.State中,分别是:新建(NEW),表示线程被创建出来还没真正启动的状态,可以认为它是个Java内部状态。就绪(RUNNABLE),表示该线程已经在JVM中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU片段,在就绪队列里面排队。在其他一些分析中,会额原创 2022-01-11 20:45:57 · 151 阅读 · 0 评论 -
Java基础巩固(三)IO
Java基础巩固(三)IOIO的分类知识扩展区分同步或异步(synchronous/asynchronous)区分阻塞与非阻塞(blocking/non-blocking)Java NIO概览IO的分类Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。 1. 传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出原创 2022-01-09 19:08:00 · 454 阅读 · 0 评论 -
Java基础巩固(二)类加载器和双亲委派模型
Java的类加载过程分为三个主要步骤:加载、链接、初始化首先是加载阶段(Loading),它是Java将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构(Class对象),这里的数据源可能是各种各样的形态,如jar文件、class文件,甚至是网络数据源等;如果输入数据不是ClassFile的结构,则会抛出ClassFormatError。 加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。第二阶段是链接(Linking),这是核心的步骤,简单说是把原始的类定义原创 2021-10-24 16:30:04 · 713 阅读 · 0 评论 -
如何做单元测试
如何做好单元测试一. 定义二. 为什么要做单元测试三. 单元测试用例四. 阿里单元测试规约五. 测试框架的使用Junit(下面以Junit4 为例来介绍)1.1、什么是Junit1.2、为何使用Junit1.3、Junit的快速入门导入Junit对应jar包(maven):下面我们来写一段简单的逻辑代码进行单元测试演练1.4、Junit测试失败的两种情况:测试失败的情况一测试失败情况二:1.5、Junit的运行流程:1.6、Junit的常用注解:1.7、Junit的参数设置1.8、Junit模拟方法异常执行原创 2021-04-03 22:24:21 · 4472 阅读 · 0 评论 -
提升代码质量的小技巧
1.不要为了方便,直接在代码中使用0,1等魔法值,应该要用enum枚举代替。正例:if(UserVipEnum.NOT_VIP.getCode.equals(userInfo.getVipFlag)){ //非会员,提示去开通会员 tipOpenVip(userInfo);}else if(UserVipEnum.VIP.getCode.equals(userInfo.getVipFlag)){ //会员,加勋章返回 addMedal(userInfo);}pub原创 2021-04-03 10:56:59 · 309 阅读 · 0 评论 -
Java基础巩固(一)引用
引用分类强引用、软引用、弱引用、幻象引用这四种引用有什么区别? 不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响 。 所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象原创 2021-03-28 12:10:33 · 133 阅读 · 0 评论 -
[转]Java-集合之-ArrayList详细介绍-源码解析-和使用示例
概要上一章,我们学习了Collection的架构。这一章开始,我们对Collection的具体实现类进行讲解;首先,讲解List,而List中ArrayList又最为常用。因此,本章我们讲解ArrayList。先对ArrayList有个整体认识,再学习它的源码,最后再通过例子来学习如何使用它。内容包括:第1部分 ArrayList简介第2部分 ArrayList数据结构第3部分 A...转载 2021-02-18 12:49:02 · 121 阅读 · 0 评论 -
[转]Java中的static关键字解析
[转]Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的...转载 2021-02-18 12:47:50 · 95 阅读 · 0 评论