
Java
文章平均质量分 95
Java学习笔记
码上生花
强者创造时代,能者顺应时代,弱者繁衍后代。
展开
-
Java Web中的拦截器、过滤器及监听器
一般情况下,HttpSessionActivationListener和HttpSessionBindingListener一起使用,这两个监听器比较特殊,实现这两个接口的类不需要在web.xml中进行注册,被钝化的JavaBean对象会被持久化到存储设备中,活化的JavaBean对象会被从存储设备中恢复,前提是该JavaBean对象实现Serializable接口。可以控制请求的控制器和方法,但控制不了请求方法里的参数(用于处理页面提交的请求响应并进行处理,如国际化,主题更换,过滤等)。原创 2024-10-11 00:21:34 · 1072 阅读 · 0 评论 -
Spring--三级缓存机制
/ 一级缓存Map 存放完整的Bean(流程跑完的)// 二级缓存Map 存放不完整的Bean(只实例化完,还没属性赋值、初始化)// 三级缓存Map 存放一个Bean的lambda表达式(也是刚实例化完)用来解决什么问题?这个大家应该熟知了,就是循环依赖什么是循环依赖?就像下面这样,AService 中注入了BService ,而BService 中又注入了AService ,这就是循环依赖@Service@Resource@Service@Resource。原创 2024-08-25 11:48:27 · 5078 阅读 · 0 评论 -
Java中的各种锁
为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。锁粗化是一种优化技术: 如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁操作都是出现在循环体体之中,就算真的没有线程竞争,频繁地进行互斥同步操作将会导致不必要的性能损耗,所以就采取了一种方案:把加锁的范围扩展(粗化)到整个操作序列的外部,这样加锁解锁的频率就会大大降低,从而减少了性能损耗。如果被其他线程访问,则称为线程逃逸。原创 2024-08-13 00:01:57 · 981 阅读 · 0 评论 -
Java的线程实现
我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度。目前线程是Java里面进行处理器资源调度的最基本单位,不过如果日后Loom项目能成功为Java引入纤程(Fiber)的话,可能就会改变这一点。原创 2024-08-10 17:25:33 · 597 阅读 · 0 评论 -
JVM -- 类加载器
自定义类加载器,重写loadClass(),不再使用双亲委派机制,而使用自己实现的loadClass()。其中自定义类加载器的父加载器为:应用类加载器(getSystemClassLoader())问题:两个自定义类加载器加载相同限定名的类,是否会冲突?不会,只有同一个类加载器且加载相同限定名的才会被认定为同一个类。原创 2024-08-07 23:41:40 · 1066 阅读 · 0 评论 -
JVM的组成 -- 字节码文件
作用是在Java代码中获取类的信息以及存储的静态字段的数据(JDK8之后)(JAVA编写)验证字节码信息是否满足《Java虚拟机规范》,比如对头魔数的校验(ca fe ba be)、版本号等的校验、元信息的校验(必须有父类)、指令是否正确等。该阶段会执行方法中的clinit方法中的部分指令,clinit方法是与JAVA代码中的方法顺序执行一致。常量池中的数据都有一个编号,编号从1开始,在字段或字节码指令中通过编号可以快速的找到对应的数据。将常量池中的符号引用替换成指向内存的直接引用。原创 2024-08-04 13:21:50 · 1042 阅读 · 0 评论 -
Java - Optional类
Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。通过Optional提供的方法,如map、orElse等,可以更优雅地处理可能为空的对象,避免显式的null检查,使代码更简洁。文章介绍了Optional的创建、获取值的方法以及注意事项,如避免基础类型的Optional和合理使用orElse方法。方法描述empty。原创 2024-07-28 15:58:45 · 892 阅读 · 0 评论 -
Java - Stream流库
Stream是Java 8新增的接口,Stream可以认为是一个高级版本的 Iterator。名称含义无存储Stream是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。函数式编程函数式编程:对Stream的任何修改都不会修改背后的数据源,比如对Stream执行filter操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新的Stream。延迟执行。原创 2024-07-27 18:51:35 · 335 阅读 · 0 评论 -
Java的内存结构
什么是运行时数据区(就是我们java运行时的东西是放在那里的)原创 2024-07-23 00:41:37 · 816 阅读 · 0 评论 -
Java多线程
进程:每个进程拥有自己的一整套变量。一个进程可以包含多个线程。线程:线程属于进程,多个线程会存在共享数据的情况发生,也就是多个线程会共享同一块内存区域。一个例子:打开word是一个进程,打开qq音乐又是另外一个进程,两进程之间不会互相影响(都有自己的一块内存区域)。但比如在qq音乐里一遍听歌,一遍又浏览排行榜,那就是在qq音乐这个进程里又有两个线程,它们之间会存在共享内存的情况。并发。原创 2024-07-21 14:14:33 · 767 阅读 · 0 评论 -
Java泛型和反射
本文重点介绍反射的概念,以及反射之于泛型的应用,如果对泛型不清楚的同学可以查看我的Java泛型程序设计一文JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象。原创 2024-07-16 02:08:53 · 974 阅读 · 1 评论 -
Java泛型程序设计
描述:不可以定义Pair[] pairs = new Pair[10];原因:类型擦除以后变为Pair[] pars = new Pair[10];然后我们可以赋予pairs[0] = new Pair();没有编译错误,但存在运行时错误。解决方法:使用ArrayList,ArrayList pairs = new ArrayList();原创 2024-07-14 16:42:14 · 599 阅读 · 1 评论 -
Maven基础入门
这里我们可以对接 profile 这个单词中『侧面』这个含义:项目的每一个运行环境,相当于是项目整体的一个侧面。开发环境:供不同开发工程师开发的各个模块之间互相调用、访问;内部使用测试环境:供测试工程师对项目的各个模块进行功能测试;内部使用生产环境:供最终用户访问——所以这是正式的运行环境,对外提供服务MySQLRedisRabbitMQFastDFSNginxTomcat……就拿其中的 MySQL 来说,不同环境下的访问参数肯定完全不同,可是代码只有一套。原创 2024-06-23 20:50:18 · 1140 阅读 · 4 评论 -
Spring MVC详解(下)
Spring MVC默认情况下可以对基本类型进行类型转换,例如可以将String转换为Integer,Double,Float等。但是Spring MVC并不能转换日期类型(java.util.Date),如果希望把字符串参数转换为日期类型,必须自定义类型转换器。原创 2024-06-20 00:14:11 · 848 阅读 · 5 评论 -
Spring MVC详解(上)
Spring MVC是Spring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能Java Web开发者必须要掌握的技术框架。原创 2024-06-16 13:06:32 · 1164 阅读 · 3 评论 -
Spring 中使用MyBatis
我这里仅定义了几个简单的增删改查。分别添加mysql-connector-java(用于连接mysql数据库)、mybatis(mybatis核心库)、mybatis-spring(在spring中使用mybatis的库)的maven依赖包。UserMapper.xml的作用是告诉mybatis您在UserMapper接口定义的方法具体使用什么样的SQL及其他约束。1、MyBatis(前身为iBatis)是一个开源的Java持久层框架,它主要用于与数据库交互,帮助开发者更轻松地进行数据库操作。原创 2024-06-12 01:14:49 · 1367 阅读 · 0 评论 -
Spring注解开发
Bean注解必须被扫描到才可以完成下面的操作@Bean所在的类必须加入到容器,可以加一个@Component注解,也可以添加@Configuration注解,一般是@Configuration注解非自定义Bean要通过工厂的方式进行实例化,使用@Bean标注方法即可@Bean的属性为beanName,如不指定为当前工厂方法名称@Component//将方法返回值Bean实例以@Bean注解指定的名称存储到Spring容器中如果不给@Bean添加参数呢,默认是什么名字?原创 2024-06-09 21:10:06 · 719 阅读 · 0 评论 -
Spring框架入门
由 Spring IoC 容器管理的对象称为 Bean,Bean 根据 Spring 配置文件中的信息创建。可以把 Spring IoC 容器看作是一个大工厂,Bean 相当于工厂的产品,如果希望这个大工厂生产和管理 Bean,则需要告诉容器需要哪些 Bean,以及需要哪种方式装配 Bean。Spring 配置文件支持两种格式,即 XML 文件格式和 Properties 文件格式。原创 2024-06-04 23:57:36 · 846 阅读 · 0 评论 -
Java中的内部类
一个类定义在另一个类内,那么这个类就是一个内部类,比如:在类A中定义一个类B,B就是内部类,而B可以当做A的一个成员看待。从种类上说,内部类可以分为四类:成员内部类、静态内部类、匿名内部类、局部内部类。原创 2024-05-26 20:07:02 · 906 阅读 · 0 评论