- 博客(54)
- 收藏
- 关注
原创 Spring中的反射
在创建对象实例之前,JVM会先检查Class对象是否在内存中存在,如果不存在,则加载Class对象,然后再创建对象实例。总之,反射机制是框架设计的灵魂,通过反射,我们可以在运行过程中动态操作对象,实现灵活性和可扩展性。同时,Class对象提供了许多实用的功能,可以获取类的成员变量、构造方法和成员方法等信息,还可以进行相关操作。对于成员变量,可以使用set()方法设置值,使用get()方法获取值,还可以使用setAccessible(true)方法来忽略访问权限修饰符的安全检查,实现暴力反射。
2025-01-02 15:43:54
517
原创 spring的常用注解
SpringBootConfiguration表示该类是Spring Boot应用的配置类,@EnableAutoConfiguration表示开启Spring Boot的自动配置机制,@ComponentScan表示扫描该类所在的包及其子包下的所有组件,并将它们注册为Bean。1. 自动扫描:Spring通过扫描指定的包路径,自动发现标注了特定注解(如@Component、@Service、@Repository、@Controller等)的类,并将它们注册为Spring容器中的Bean。
2024-12-31 11:11:46
965
原创 JVM内存模型、垃圾回收机制及简单调优方式
不同点时,当调用native修饰的方法时,其产生的数据会存储在本地方法栈中。jdk1.7之后,取消了方法区名称,改为元空间、方法区也叫元空间也叫永久区。用来存放调用方法及方法执行的过程中产生的临时数据的(临时变量,参数列表)用来存放类加载的信息,同时存放静态属性 和 方法(静态方法和普通方法)方法区中的数据,可以被多线程共享。堆区中的数据,可以被多线程共享。栈帧分为:局部变量表, 操作数栈,返回地址,动态链接。方法栈是线程独享的,也就是每一个线程都会有一个方法栈。这些数据是以栈帧结构存入方法栈(压栈)
2024-12-26 16:30:49
1221
原创 数据库:索引
例如:使用sex,name作为复合索引, select sex , name from table 不会产生回表。索引创建后,我们不通过sql命令显示的使用索引,而是在对表进行crud过程中,索引自动生效。只需要在索引结构中找到我们需要的索引值,就等于找到了索引对应的行记录,检索速度快。唯一键索引,建表时,指定的unique,本身也是一个索引。复合索引,需要语句创建,多个字段共同起到索引作用。在非聚簇索引结构中,根据索引找到需要的内容的key。使用联合索引时,不满足最左匹配原则,会导致索引失效。
2024-12-17 18:25:17
937
原创 数据库的作用特点与MySQL下载安装
数据库定义语言 , 可以用来创建一些数据库对象(database,table,user,view...)* DML : 数据库操作语言,用来操作数据库表,实现数据库基本操作。3. 在mysql的根目录中,创建一个my.ini的文件,并完成如下配置。
2024-11-26 09:49:23
1369
原创 事务的详解
这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询回滚日志来回滚之前未完成的事务。万一在这两个操作之间突然出现错误比如银行系统崩溃或者网络故障,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作。我们知道如果想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行。事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上。
2024-11-19 18:56:14
1180
原创 MYSQL:内联接、左外联接、右外联接、并发事务带来哪些问题
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对。不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增。交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务。指在一个事务读取一个数据时,另外一个事务也访问了该数。还没有提交的数据,那么另外一个事务读到的这个数据是。
2024-11-14 10:26:15
1108
原创 数据库:什么是数据库
是一个数据存储的仓库,可以实现数据的持久化存储。最早我们使用File + IO实现数据的持久化。数据库底层按照一定的存储模型对数据进行组合,存储和管理更看重数据读写的性能,独立性,安全性,扩展性简而言之,比普通的IO操作更简单,功能更强大。
2024-11-02 11:34:54
896
原创 JAVA基础:枚举的特点及使用
枚举是jdk1.5提供的一个特性枚举是一个特殊的类,这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。枚举使用enum关键字定义在枚举类中的第一行,就需要提供枚举类的对象(名字)多个对象名之间使用逗号隔开。最后一个对象可以使用分号,也可以不用。强烈建议使用分号结束每一个对象都相当于public static final A a;(编码规范:常量的名字都大写)枚举类中也可以有属性,方法和构造方法,其中属性和方法与普通类没有任何区别。
2024-10-29 20:38:27
826
原创 JAVA注解:注解的作用,注解的语法,注解的使用,注解与反射的综合应用
jdk5提供了一个新的应用 Annotation, 注解, 注释与之前所学的注释的区别之前的注释:是给程序员看 ,让程序员知道程序(代码)有什么用,实现了什么功能今天的注解:是给编辑器或jvm看的。在编译和运行时提供一些信息,按照信息完成后续的工作我们在开发中经常使用。类似于xml配置文件的作用。
2024-10-21 09:01:24
876
原创 JAVA基础:反射的作用特点,反射获得类信息,返回操作对象
程序可以访问、检测和修改它本身状态或行为的一种能力在程序运行时,可以通过反射了解类的信息 和 使用类了解类的哪些信息呢?类的基本信息(类名,修饰符,实现接口,继承的父类,所属的包,使用的注解)类的构造方法信息 (修饰符,方法名,参数列表,异常声明,注意:没有方法体)类的属性信息(修饰符,属性类型,属性名)类的普通方法信息(修饰符,返回类型,方法名,参数列表,异常声明,注意:没有方法体)如何实用类?创建对象调用对象的方法调用对象的属性为什么要通过反射了解类信息,要操作类对象?
2024-10-16 08:52:07
1740
原创 JAVA基础:并发编程特性
多线程是一种程序开发或设计环境并发编程是一种程序设计概念或设计目标,在多线程开发环境中,同一系列的程序设计与机制的使用确保多线程开发环境是稳定的,快速的,性能优秀的。并发编程具有3个特征原子性可见性有序性在多线程开发时,如果程序设计不是特别的完美,有可能会出现原子性问题,可见性问题,有序性问题我们就会尽可能的解决上述问题,使得我们的程序具有原子性,可见性,有序性。这样的程序开发就成为并发编程。
2024-10-13 18:20:31
1745
原创 JAVA基础:网络编程三要素,TCP编程实现,UDP编程实现
之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序我们在生活中使用的绝大多数的程序(应用,软件,app),都可以基于网络,与其他主机的程序进行数据交互,又不同的主机程序完成不同的业务功能。
2024-10-11 09:04:01
1421
原创 JAVA基础:FutureTasck 和 Callable、Timer定时任务
是JDK1.5之后,在JUC工具包提供了一个多线程工具类在多线程应用中,a线程可以通过FutureTask和Callable了解b线程是否执行完毕以及b线程执行的结果。可以实现两个线程之间的通信。自定义线程类,实现Callable接口,重写call方法,该方法执行的功能就是之前线程run方法的功能,无非多了一个返回值即为线程执行结果Callable类型的线程,不能直接被Thread执行,需要使用FutureTask进行包装未来可以通过FutureTask获得执行的状态及执行的结果。
2024-10-10 08:57:56
644
原创 JAVA基础:Lock不同的锁形式
假设, 有n个线程同时访问同步资源,只有1个线程可以获得锁,其他n-1个线程进入同步队列,等待。当第一个线程释放锁资源后, 同步队列中那n-1个线程,会按顺序依次获得锁 (倒序 或 顺序)排它锁又称为 互斥锁,也称为 独享锁,当一个线程获得该锁, 其他线程无法获得锁,需要等待。当线程1进入同步代码段时,会记录线程1的信息,表示线程1获得了锁,同时锁状态0 - 1。如果之前记录的线程信息和当前进入的线程信息相同,说明重入,允许,同时状态1 - 2。这个新线程,直接进入同步队列,等待前面的线程释放锁。
2024-10-09 08:57:45
579
原创 JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级
synchronized是一个关键字, lock是一个接口,实际使用的是实现类synchronized通过触发的是系统级别的锁机制, lock是API级别的锁机制synchronized自动获得锁,自动释放锁。lock需要通过方法获得锁并释放锁synchronized可以修饰代码段和方法,lock只能修饰代码中synchronized无法判断是否获得锁,lock可以通过tryLock判断synchronized一旦阻塞无法中断,lock可以被中断。
2024-10-08 08:50:57
1788
原创 JAVA基础:线程生命周期、中断线程的方法
在同步方法或同步代码段中,获得的是哪个对象的对象锁,才可以调用哪个对象的wait方法。插队,当前线程调用指定线程对象的join方法,将指定线程加入当前线程的执行序列。指定睡眠时间,时间过后,自动唤醒,唤醒后,线程进入就绪状态,准备争抢CPU。一个称为条件队列,当一个线程已经获得了对象锁,因为某些业务条件不支持,当线程1234按顺序争抢锁时,线程1获得锁, 线程234进入同步队列。一般多因为逻辑数据未达标,需要临时让出对象锁,让其他线程先执行。表示让出当前对象的对象锁,获得当前对象锁的当前线程处于等待状态。
2024-10-07 18:37:49
1185
原创 JDk新日期类的使用
LocalDate , LocalTime , LocalDateTime 表示日期时间。//LocalDateTime默认的日期格式 yyyy-MM-ddTHH:mm:ss。//获得当前系统时间的日期对象。//获得指定时间的日期对象。* Instant, ZoneDateTime (新老日期转化)//获得不同的日期项。//间隔时间较长, 以年月日为间隔单位。//间隔时间较短,以时分秒为单位。## 1.5 新老日期类转化。## 1.1 新日期的创建。**一个日期加减数字****两个日期间隔**
2024-10-06 13:12:01
797
原创 JAVA基础:线程创建,启动,应用,线程同步,悲观锁乐观锁
程序: 一组静态的代码进程: 一个处于运行状态的程序。进程 = 执行内存 + 线程每当启动一个进程时,至少会有一个线程,称为:主线程线程:程序运行的过程中,真正用来执行程序功能的那个单元每当一个进程开启,都会产生一个主线程可以根据设计需求,由主线程产生更多的子线程,共同完成程序的执行过程。多线程的目的就是为了提高执行效率。
2024-09-29 09:05:17
2621
原创 JAVA基础:lambda表达式的特点与使用,方法引用,函数式编程
jdk1.8的一个新特性属于一种语法糖主要作用体现在两点对匿名内部类语法简化函数式编程思想锻炼。
2024-09-27 09:12:47
746
原创 JAVA基础:忽略序列化,Properties集合类的使用
在对象序列化(写对象,输出对象)的过程中,有些对象属性不参与序列化有2种方式可以实现属性的忽略序列化static属性,不会参与序列化使用transient关键字修饰的属性,不会参与序列化。对象独享。
2024-09-26 09:00:00
667
原创 JAVA基础:数据流,数组流,对象流,序列化和反序列化
是过程流,是字节流,包括 DataInputStream , DataOutputStream主要作用是读写基本类型的数据使用普通的字节流输出97,最终输出的是1个字节使用Data数据流输出97,最终输出的是4个字节提供了一组读写不同基本数据类型的方法。
2024-09-25 08:58:31
1309
原创 JAVA基础:流的作用与分类,文件字节流,字符流,缓冲流的使用及特点
IO流就是一组流动的数据,可以实现数据从一个地方移动到另一个地方IO 表示的InputStream 和 OutputStream , 称为 输入,输出流。可以实现文件的读写。IO随着关注的特点不同,有不同的分类按照数据流向分类,分为输入流 和 输出流输入和输出都是以Java程序为基准按照传递的数据类型分类,分为字节流 和 字符流字符流可以很好的解决中文数据传递的问题按照流的功能分类,分为 节点流 和 过程流节点流:可以直接与数据源对接。
2024-09-24 08:54:55
1451
原创 JAVA基础:HashMap底层数组容量控制,TreeMap底层存取机制,位运算符,原码反码补码
List集合常用的实现类有3个 , ArrayList , LinkedList , Vector类似于我们之前的ArrayBox底层使用数组存储元素, 插入删除的效率低,检索的效率高当底层数组存储容量不足时,会进行扩容,每次扩容都是原数组的1.5倍使用无参构造器创建ArrayList集合时,首先提供的是一个默认0长度的数组(防止内存资源浪费)第一次add元素的时候,会创建一个10个长度的数组我们在开发中已经不怎么使用了Vector是ArrayList早期版本1.0。
2024-09-23 09:23:02
1225
原创 JAVA基础:集合的特点,List,Set和Map集合的使用
本质就是容器的封装,可以存储多个元素数组一旦创建,长度就不能再改变了。数组一旦创建,存储内容的类型不能改变。数组可以存储基本类型,也可以存储引用类型。数组可以通过length获得容量的大小,但无法获得存储内容的多少。集合可以无限存储存储元素 (底层还是对数组做了扩容)集合可以通过size方法获得存储元素的个数 int size集合只能存储引用类型的数据有多种集合,底层使用不同的存储结构存储元素,适合不同的存储场景线性结构(数组)链表结构哈希(hash)结构 , 散列结构二叉树结构。
2024-09-22 19:06:29
630
原创 JAVA基础:System类,Runtime类,Arrays类的常用方法,二分查找算法
在对象第一次被当作垃圾,准备垃圾回收时,会先调用该对象的finalize方法。对象复活后,如果再次称为垃圾,被回收时不再重复调用finalize方法。当一个对象不再被其他变量引用的时候,就称该对象为垃圾对象。注意:如果数列中的元素是对象类型,要求对象可以大小比较。每次都找到当前数列的中间位置的元素,与待查找的元素比较。如果待查找的元素比中间位置的元素小,准备去左侧继续查找。如果待查找的元素比中间位置的元素大,准备去右侧继续查找。也可以从A数组的a位置,移动到A数组的b位置。JVM判断对象是否为垃圾的算法。
2024-09-20 09:35:02
703
原创 JAVA基础:包装类,BigInteger , BigDecimal
java是一种面向对象的编程语言对象都是由类产生的。8种基本类型对java面向对象的特性有所破坏jdk就提供了8种基本类型所对应的类的表示,称为:包装类理论上来讲:类属性使用包装类定义,方法中的局部变量使用基本类型定义包装类的内部最终依然是由对应的基本类型来存储数据,无非为其提供了一些方法,使得我们对应基本类型数据的操作变得更加容易了,比如:关于基本类型为null的处理有些容器(自己封装,jdk提供的集合)只支持存储引用类型更方便的实现类型转化你。
2024-09-19 14:04:09
793
原创 JAVA基础:正则表达式,String的intern方法,StringBuilder可变字符串特点与应用,+连接字符串特点
将字符串按照指定的内容进行分割,将分割成的每一个子部分组成一个数组分割内容不会出现在数组中实际上该方法不是按照指定的简单的符号进行分割的,而是按照正则表达式进行分割。
2024-09-18 13:51:36
1251
原创 Java基础:Api 文档注释,字符串种类,String字符串创建,特点及常用方法
jdk API [官方API文档 (Java SE 22 & JDK 22) (oracle.com)](https://docs.oracle.com/en/java/javase/22/docs/api/)System.out.println(Arrays.toString(s.split(" ")));//将字符串中所有的字母变小写。
2024-09-15 16:48:24
1473
原创 JAVA基础: 泛型特点,定义,确定,通配符与边界
在定义类的时候, 类中有些内容的类型不确定,可以声明一个泛型来表示这些不确定的类型一定是相同类型T a;T b;在定义的类时候,如果类的内容中有多种类型不确定,我们可以声明多个泛型T1 a;T2 b;在定义方法时(以static方法偏多),如果方法中有些内容的类型不确定,可以为其声明泛型也可以声明多个泛型一般多用于静态方法的参数类型不确定。
2024-09-14 09:41:40
685
原创 JAVA基础:异常与异常对象,抛出异常,自定义异常,异常处理,受检与非受检异常
我们可以自定义异常,来描述出现的问题自定义异常类 , 继承异常相关的父类(Throwable,Exception , Error)一般异常的名字就体现了错误的情况,可以在配合注释进一步说明/**当年龄小于0或大于150时,抛出这样的异常*/2.通过有参构造方法,为异常提供更为详细的描述信息(可选)super(msg);3.使用throw 抛出异常。
2024-09-13 14:13:48
1165
原创 JAVA基础:内部类,匿名内部类,对象大小比较,Box容器迭代器封装实现
内部类就是内部的一个类在什么内部呢?类的内部 , 相当于类的一个特殊成员,具备类成员的访问特点 ,称为:成员内部类4种访问权限可以使用static关键字修饰方法的内部:类似于方法中的一个变量,称为:局部内部类只能在当前方法中使用。
2024-09-12 12:00:49
620
原创 JAVA基础:抽象类,接口,instanceof,类关系,克隆
JDK = JRE + 开发工具集(javac.exe)JRE = JVM + java类库JVM = java 虚拟机jdk中自带了许多的包(类) , 常用的有java.lang该包中的类,不需要引用,可以直接使用。例如:Object , System , String。
2024-09-11 09:01:12
1374
原创 JAVA基础: while循环,for循环,break和continue关键字,数组详解
每次循环做什么事循环条件循环条件改变。循环嵌套在一个循环中,出现了另一个循环。无限循环循环条件永远为真。
2024-09-09 09:22:11
1443
原创 JAVA基础:值传递和址传递
方法调用时,传递的实参是一个基本类型的数据形参改变,实参不变又称为地址传递,或引用传递方法调用时,传递的实参是一个引用类型的数据基本类型的数据,比较简单,可以直接存储在变量中引用类型的数据比较复杂,包含了一堆子数据,不能直接存储在变量中,存储在堆区,会为其分配一个内存地址我们在使用引用类型数据时,都是通过地址间接引用类型的数据所谓的地址传递,就是在方法调用时,传递的是引用类型的地址。形参(内容)改变,实参(内容)改变类似于值传递的址传递。
2024-09-08 12:41:07
1609
原创 JAVA基础:JVM中方法的执行过程和方法的重载,递归,可变参数的含义
jvm内存,存储java程序执行过程中产生的一些数据。JVM将内存分成了不同的逻辑区域,存储不同含义(类别)的数据JVM内存模型有5种方法区 : 存储类信息堆区 : 存储new关键字产生的数据 (目前是数组)栈区 : 存储的是(主)方法执行时,产生的数据本地方法栈 : 与栈区类似,程序计数器 : 记录当前方法执行到哪一行了。方法区和堆区中存储的数据,可以较长时间存在栈区(本地方法栈)和程序计数器中存储的数据,随着方法执行完毕,就消失了。
2024-09-04 11:38:30
1392
原创 JAVA基础:封装、继承和多态(详讲)
面向对象的三大特征 : 封装, 继承, 多态。将属性和方法组合在一起(封闭在一起)将属性隐藏起来, 对外提供可以间接操作属性的方法。(提高程序设计安全性)目前我们都是属性私有化, 并提供与之对应的get和set方法封装应用工具,为其他的程序员提供功能帮助。这是一种封装设计但不是语法要求,是一种约定俗称。一般的要求是,属性私有, 其对应的get和set方法就是在get和set后面连接属性名特殊的get和set方法get和set方法的写法不一定完全一致。
2024-09-03 10:51:21
2270
原创 枚举与stream流详解
枚举是jdk1.5提供的一个特性枚举是一个特殊的类,这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。枚举使用enum关键字定义在枚举类中的第一行,就需要提供枚举类的对象(名字)多个对象名之间使用逗号隔开。最后一个对象可以使用分号,也可以不用。强烈建议使用分号结束每一个对象都相当于public static final A a;(编码规范:常量的名字都大写)枚举类中也可以有属性,方法和构造方法,其中属性和方法与普通类没有任何区别。
2024-09-02 08:58:20
1276
原创 Java中的注解详讲
jdk5提供了一个新的应用 Annotation, 注解, 注释与之前所学的注释的区别之前的注释:是给程序员看 ,让程序员知道程序(代码)有什么用,实现了什么功能今天的注解:是给编辑器或jvm看的。在编译和运行时提供一些信息,按照信息完成后续的工作我们在开发中经常使用。类似于xml配置文件的作用。
2024-09-01 21:58:33
1296
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人