- 博客(37)
- 收藏
- 关注
原创 Spring 自动配置 condition
我们都知道,当我们创建一个基于Spring的项目的时候,我们都需要在Applicaiton启动引导类上加上@ComponentScan("com.acom.springdemo.*")注解,用于引导Spring指定扫描范围。如果我们不写的话Spring默认扫描的就只有Application启动类所在的根目录及其子目录。Spring为什么呢一定要指定扫描范围。
2024-06-09 17:47:43 927 1
原创 Java Lambda表达式
Java中的函数式接口(Functional Interface)是一个特殊的接口,它只包含一个抽象方法(从Java 8开始,也可以包含默认方法和静态方法,但只能有一个抽象方法,不包括Object类中的方法)。函数式接口的主要用途是与Lambda表达式和方法引用一起使用,以支持函数式编程风格。为什么只能有一个抽象接口呢。
2024-06-09 15:48:04 766
原创 Java 泛型基础
泛型主要是一种编译时的语法糖,用于提高代码的可读性和类型安全性,而不会增加任何运行时开销。Java中的泛型不变性(Generics Invariance)主要指的是泛型类型在编译时的类型安全性质,它确保了泛型类型在声明和使用时类型的一致性。这是因为编译器不知道集合中元素的具体类型,所以不能确保放入的元素与集合中已有的元素类型兼容。用于表示未知的类型,或表示某个类型的子类型或超类型。),因为编译器无法确保你要添加的元素与集合中已有的元素类型兼容。表示未知的类型,但它是 T 或 T 的某个子类型。
2024-05-26 21:30:34 733
原创 Java 为什么使用泛型
Java泛型(Generics)是JDK5.0引入的一种特性,它允许程序员在定义类、接口和方法时使用类型参数(type parameters)。这些类型参数在实例化时(如创建对象或调用方法时)会被具体的类型(如int、String等)所替代。泛型的主要目的是在编译时提供类型安全,并在运行时保持类型信息。
2024-05-26 20:17:09 464
原创 Java 反射效率
测试结构: 36 ms,对比测试case2,3 可以耗费时间少了很多,故而我们可以提前将获取构造到的函数对象放入缓存中,减少重复加载以优化减少时间。4. 在已知类对象方式的前提下,我们将类对象获取构造函数这一个加到静态代码块中,提前获取,减少多次创建构造方法函数。测试结果耗时:8013 (与case 1,2,3,4相差太大),故而要避免使用全类名多次重复的获取类对象后构造函数创建对象。2. 已知类对象方式反射创建实例化对象,且关闭校验。3. 已知类对象方式反射创建实例化对象,且打开校验,创建对象1千万次。
2024-05-25 20:32:47 230
原创 Java 反射基础
Java反射(Reflection)是Java编程语言的一个特性,它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力,这通常用于实现一些高级功能,如框架、ORM(对象关系映射)工具、IDE(集成开发环境)等。
2024-05-25 19:47:01 780
原创 从动态代理角度简单理解Spring AOP
动态代理 是指在运行时,动态地创建目标类的代理对象,并对其中特定的方法进行拦截或增强的技术。这种技术主要用于在不修改目标类代码的情况下,增强目标类的功能。在Java中,动态代理主要基于Java的反射机制和接口来实现。当一个类实现了某个接口,并且需要在不修改这个类代码的前提下增加一些新的方法或者对原有方法进行一些处理(比如添加日志、事务管理、权限校验等),就可以使用动态代理来实现。即它可以。
2024-05-25 18:46:51 532
原创 Java反射角度简单理解spring IOC容器
Java反射(Reflection)是Java编程语言的一个特性,它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力,这通常用于实现一些高级功能,如框架(Spring)、ORM(对象关系映射)工具、IDE(集成开发环境)等。反射的主要用途动态加载类:可以在运行时加载和使用类,而无需在编写/编译时知道它们。检查类信息:可以获取类的名称、父类、实现的接口、字段、方法等。动态调用方法:可以调用类的任何公共方法,即使该方法在编译时未知。
2024-05-25 16:00:04 1954
原创 Pom 文件中的build标签详解
Pom 文件中的标签用于项目打包所需要的插件,是使用如果不添加,那我们项目使用的插件如tomcat就不会打入jar包,jar包运行就会有问题。
2024-05-03 22:48:59 882
原创 SpringBoot 基础简介
我们引用的springboot parent是一个Maven BOM(Bill of Materials)项目。BOM是指一个特殊的POM(Project Object Model)文件,该文件主要用于依赖管理,而不是直接包含项目代码或构建配置。通过引入Maven BOM作为项目的依赖,你可以确保一组依赖项的版本在多个项目中保持一致,而无需在每个项目的POM文件中单独指定这些依赖项的版本。这有助于减少版本冲突,简化依赖管理,并提高项目的可维护性。
2024-05-03 22:17:56 1171
原创 Spring MVC
举个例子:你要去找你的同事办件事情,你需要搭出租车去找到,这个Mapping就相当于是地图,你首先要按照目的地搜索路线,当你明确了路线后你需要HandlerAdapter适配器出租车司机把你按照这个路线送到到目的。这样说,就可以明白了吧,Mapping只是帮我们管理所有的映射关系,当我们需要时给我们提供映射服务,而真实的调用对应的处理器,还需要适配器来调用对应的处理器。HandlerMapping 的主要职责是根据请求的URL或其他条件,找到并确定处理该请求的处理器(Controller中的方法)。
2024-04-08 23:05:49 610
原创 Hikari 属性及监测
参数名默认值允许最小值允许最大值250 ms不检测30000 ms(30s)0 (无限)10 个链接10 个链接250 ms不检测。
2024-03-31 16:35:19 1899
原创 Java 多线程的wait,notify,notifyAll,sleep,interrupt方法
wait()、notify()和notifyAll()这三个方法都依赖于Java对象的监视器锁(也称为内置锁或互斥锁)。调用这些方法时,当前线程必须持有该对象的监视器锁,所以通常它们三都与synchronized 关键字一起使用,否则将抛出IllegalMonitorStateException异常(也就是没有获取对象的监视器锁和调用了这些方法)。
2024-03-27 19:21:20 944
原创 Spring全局异常
最近做一个spring微服务,当请求进入接口后,一旦发生错误,服务就会抛出异常,但是这个异常不是我们封装的,有时候跑出的信息我们想统一处理。例:如果是客户请求数据错误应该报出400的HttpStatus.BAD_REQUEST。但是由于这个错误是我们内部抛出的他还是会自动抛500,而且服务有很多接口,我们管理也不方便。所以需要一个全局的异常处理。如请求数据错误。@Data如JDBC链接超时。@Data定义自定义的统一管理的细致的error code。
2024-03-24 23:13:32 1169 1
原创 [操作系统学习]-处理机调度
处理机调度是指按照一定的算法,从就绪队列中选择一个进程,并将处理机(CPU)分配给它运行,以实现进程的并发执行。它是操作系统核心的重要组成部分,主要功能包括记住进程的状态、决定哪个进程能获得处理机以及占用多长时间等。处理机调度的层次可以分为作业调度(高级调度)、中级调度(又称内存调度)和低级调度(又称进程调度)。常见的处理机调度算法有先来先服务(FCFS)调度算法、时间片轮转(RR)调度算法和优先级调度(Priority Scheduling)算法等。这些算法各有特点,适用于不同的场景和需求。
2024-03-24 20:30:41 662 1
原创 Java 序列化
标记接口的作用是提供一种机制,用于给类添加元数据,以指示该类应该被序列化。查看底层代码我们可以看见它的逻辑如下,因为凡是没有实现Serializable类或其实现其子类,或继承其实现类的普通类都会报该异常。Java进行序列化的主要原因在于需要将对象的状态信息转换为可以存储或传输的形式,以便于在不同平台、不同时间之间共享和交换数据。我们可以看到序列化时的static属性height,明显没有了,而transient修饰的属性age的值也没有传输过来。的二进制流,再以同样的方式在接收方反序列化为相同的对象。
2024-03-24 18:43:38 467 1
原创 UTF-8编码
UTF-8(Unicode Transformation Format-8 bits)是一种可变长度的Unicode编码方式,它可以用1到4个字节表示一个字符,根据字符的不同而变化长度。
2024-03-17 23:20:24 173 1
原创 【java基础】访问修饰符
public、protected、默认不写(package private)、private 四种修饰符,修饰的都是被调用权限。
2024-01-21 22:18:14 863
原创 计算机组成原理
ARPANET是阿帕网,是美国国防部高级研究计划署(ARPA)于1969年11月建立的一个网络。此后网络开始向互联网发展。这些年计算机飞速发展,但是计算机的组成部分并没有发生大的改变,如是个人PC机等大众计算机,任然采用冯诺依曼机体系结构。(该图仅为个人理解所画,不实之处恳请批评指正。
2023-12-07 22:42:32 246 1
原创 Maven scope的相关值说明
那么就带来一个问题如果存在一个项目project-3c, 3c需要依赖2b,那么3c就必须自己引入project-a项目才能够使用2b关联到a的代码。运行为N: 当我们去运行当前项目project-2b是我们会发现项目是run不成功的,它会报错java.lang.NoClassDefFoundError 找不到被project-2b项目使用的project-a的class文件。依赖传递为N: 这里的依赖传递为N,其实原理同4), 也就是2b中依赖的project-a项目是不能传递地3c项目的。
2023-09-06 23:43:28 99 1
原创 Maven dependencyManagement的作用
如当前我们公司开发了一堆的微服务项目,那么公司是怎么规范使用统一的应用版本的呢,首先公司会创建一个rsf的统一依赖版本项目如上的配置.当公司做统一的升级的时候呢就只需要更新这个rsf里面的版本号, 而我们每个项目的负责人就只需要更新如上的dependencyManagement中继承的项目模板的版本号,就可以更新公司本次所有需要更新的jar包了.dependencyManagement 的作用其实就是统一管理版本号的规范.type:pom 和 scope:import 配合使用。
2023-09-06 16:56:16 88 1
原创 springboot中Hikari连接池常用参数含义(一)
如果有40个请求线程,每个如case1中执行1min, 由于执行时间已经超过了max-lifetime的设置,这个时候如果后续不来新的请求,那么多余的线程就按照idle-timeout设置的合理时间去清理多余线程,也就是1min。该配置意为在同一时间应用向数据库连接池请求的数连接超过最小连接数时,将根据需求扩大数据库连接数,但是该链接数的上线是maximum-pool-size的值,如这里的40。同样是case1中的条件,但是我们将测试用例中的单个线程需要执行1min,修改为20s,答案是10min后。
2023-07-01 18:33:50 7159
原创 Spring的事务的传播行为
如果你写了作业,你写的你先保存在哪里,等我确定我也能写出作业,你再提交你的作业,你提交之后我再提交。如果我的作业写完了,叫你提交你的作业的时候,你发现你还有一道题没做,你需要接着做,但是你接着做的时候发现做不来,我也帮不了你,算了我们都不交作业了][不管你写没写作业,我都自己写作业,我交了作业你才能交,要是我写不出来,你也别想交作业。[如果你写了作业,那我抄你的作业,如果你没写我就给你妈告你,谁叫你害的我也交不了作业。[我不写作业,你正在写作业,我要求你停下来,陪我玩了,你再去写作业。
2023-06-25 16:27:17 131
原创 Spring事务的代理对象特性
如果你写了作业,你写的你先保存在哪里,等我确定我也能写出作业,你再提交你的作业,你提交之后我再提交。如果我的作业写完了,叫你提交你的作业的时候,你发现你还有一道题没做,你需要接着做,但是你接着做的时候发现做不来,我也帮不了你,算了我们都不交作业了][不管你写没写作业,我都自己写作业,我交了作业你才能交,要是我写不出来,你也别想交作业。[如果你写了作业,那我抄你的作业,如果你没写我就给你妈告你,谁叫你害的我也交不了作业。[我不写作业,你正在写作业,我要求你停下来,陪我玩了,你再去写作业。
2023-06-24 16:05:43 345 1
原创 Java String、StringBuffer、StringBuilder的效率
String:不论是CPU还是堆内存的耗费都是最大,原因就在于,String的每次叠加都会导致在常量池中创建全新的字符串,而上一次的字符串也同样存在于常量池中,如此迭代,导致常量池中存在大量的垃圾字符串,没有GC之前会占用大量的存储空间。由于不断创建全新的字符串在常量池中,所以它的CPU占用率和耗时都是最高的。StringBuffer:可以看到他的内存空间的消耗和StringBuilder是相当的,只是CPU占用率高了些,同时耗时也高一些(经过多次测试均是这个结果)。CPU占用率:13.1%
2023-05-07 17:33:52 783
原创 Java String在JVM中的内存模型
接下来会运行到new关键字,JVM就会在系统中直接在创建一个String对象,该对象的值虽然直接指向常量池中的abc,但是赋值给pubNmNewStr的是new出来的String对象。直接给string赋值,其值直接放在常量池中,变量直接指向对应常量池。那么在常量池中会创建一个新的字符串abcd,而之前的字符串abc会依然保存在于常量池中,直至GC回收。如此以对象的属性为String类型的,同样该属性直接引用常量池中已有的字符串,在赋值是常量池中不存在该字符串,同样会在常量池中创建后再直接指向它。
2023-05-07 00:23:42 137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人