自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 SpringAOP原理

“横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect”,即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证

2024-07-12 08:57:09 568 1

原创 SpringIOC原理

Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。Spring的IOC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。

2024-07-10 10:07:00 785 1

原创 Java泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数据进行排序,我们就可以使用Java泛型。

2024-07-05 10:58:18 426

原创 静态内部类

定义在方法中的类,就是局部类。如果一个类只在某个方法中使用,则可以考虑使用局部类。

2024-07-05 09:12:38 140

原创 Java注解

Annotation(注解)是Java提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annotation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的Annotation对象,然后通过Annotation对象来获取注解中的元数据信息。元注解的作用是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其他annotation类型作说明。@Target修饰的对象范围@Target说明了Annotation所修饰的对象范围:A

2024-07-03 18:02:14 351

原创 Java反射

动态语言,是指程序在运行时可以改变其结果:新的函数可以引进,已有的函数可以被删除等结构上的变化。比如常见的JavaScript就是动态语言,除此之外Ruby,Python等也属于动态语言,而C、C++则不属于动态语言。从反射角度说Java属于半动态语言。

2024-07-03 16:34:45 896

原创 Java异常分类以及处理

如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。

2024-07-03 10:51:13 225

原创 synchronized和ReentrantLock的区别

synchronized和ReentrantLock的区别

2024-07-02 11:06:44 309

原创 ThreadLocal作用

将一个共用的ThreadLocal静态实例作为key,将不同对象的引用保存到不同线程的ThreadLocalMap中,然后在线程执行的各处通过这个静态ThreadLocal实例的get()方法取得自己线程保存的那个对象,避免了将这个对象作为参数传递的麻烦。每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。这种变量在线程的生命周期内起作用,减少同一个线程内多个函数。公共变量的传递的复杂度。

2024-07-02 10:05:22 327

原创 如何在两个线程之间共享数据

Java内存模型(JMM)解决了可见性和有序性的问题,而锁解决了原子性的问题,理想情况下我们希望做到"同步"和"互斥"。将Runnable对象作为一个类的内部类,共享数据作为这个类的成员变量,每个线程对共享数据的操作方法也封装在外部类,以便实现对数据的各个操作的同步和互斥,作为内部类的各个Runnable对象调用外部类的这些方法。将数据抽象成一个类,并将对这个数据的操作作为整个类的方法,这么设计可以和容易做到同步,只要在方法上加"synchronized"

2024-07-01 17:30:39 336

原创 volatile

值得说明的是对volatile变量的单次读/写操作可以保证原子性的,如long和double类型变量,但是并不能保证i++这种操作的原子性,因为本质上i++是读写两次操作。volatile变量具备两种特性,volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。其一是保证该变量对所有线程可见,这里的可见性指的是当一个线程修改了变量的值,那么新的值对于其他线程是可以立即获取的。volatile禁止了指令重排。

2024-07-01 16:17:00 399

原创 CyclicBarrier、CountDownLatch、Semaphore 的用法

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

2024-07-01 15:25:25 986

原创 Java阻塞队列原理

阻塞队列,关键字是阻塞,先理解阻塞的含义,阻塞队列中,线程阻塞有这样两种情况:当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列当队列中填满数据额情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。

2024-07-01 11:38:47 926

原创 线程池原理

线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行,他的主要特点未:线程复用;控制最大并发数;管理线程。

2024-06-25 16:18:22 434

原创 线程上下文切换

巧妙地利用了时间片轮转的方式,CPU给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载,这段过程就叫做上下文切换。时间片轮转的方式使多个任务在同一颗CPU上执行变成了可能。

2024-06-25 14:22:39 402

原创 线程的基本方法

线程相关的基本方法有 wait、notify、notifyAll、sleep、join、yield等。

2024-06-25 11:02:41 699

原创 Java锁

乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。Java中的乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

2024-06-25 09:45:45 379

原创 Java多线程并发

Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。

2024-06-24 09:59:55 409

原创 Java集合核心知识

集合类存放与Java.util中,主要有3中:set(集)、list(列表包含Queue)和map(映射)。1.Collection:Collection是集合List、Set、Queue的最基本的接口。2.Iterator:迭代器,可以通过迭代器遍历集合中的数据。3.Map:是映射表的基础接口。

2024-06-21 09:58:39 590

原创 JVM类加载机制

当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。OSGi旨在为Java程序的模块化编程提供基础条件,基于OSGi的程序很可能可以实现模块级的热插拔功能,当程序升级更新时,可以只停用、重新安装然后启动程序的其中一部分,这对企业级程序开发来说是非常具有诱惑力的特性。

2024-06-20 17:08:05 837

原创 配置元数据

通过完善配置元数据的方式来完成。所以,今天就来具体说说配置元数据的应用!

2024-05-11 14:47:46 830 1

原创 mybatis-plusCRUD详解

mybayis-plusCRUD以及分页详解

2023-12-10 22:55:45 173 1

原创 mybatis-plus逆向工程

idea基于mybatis-plus快速生成代码

2023-12-07 15:54:47 547

原创 mybatis-plus快速入门

idea入门搭建mybatis-plus

2023-12-07 15:45:44 179

原创 MyBatis关联查询嵌套查询

嵌套查询

2023-11-25 14:34:26 221

原创 MyBatis动态SQL

动态sql

2023-11-25 14:30:16 104

原创 spring-事务

spring配置事务

2023-11-19 21:24:48 162 1

原创 idea集成ssm框架

idea基于xml方式集成SSM框架

2023-11-16 22:27:57 39

原创 解决@RequestBody失效

解决@RequestBody失效和Jackson415错误

2023-11-16 22:12:40 2255 2

原创 注解方式搭建spring-mvc

注解入门搭建springmvc

2023-11-14 10:50:48 62

原创 xml方式搭建springmvc

以xml方式搭建springmvc

2023-11-14 10:44:10 50 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除