Java
主要是Java方面的文章,仅供参考学习,如有错误欢迎指正
羡鱼°
人生没有白走的路,每一步都算数。
展开
-
Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空
1、Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空2、将表单中的数据变成二进制数据进行上传,用request是无法直接获取到相应表单的值的原创 2022-03-11 20:14:50 · 1947 阅读 · 0 评论 -
Mybatis出错 缺无参构造函数 映射出错
Mybatis出错:Error instantiating class com.User with invalid types () or values ()出错位置:联表映射时,使用one=@One(***)无响应实体类省略属性...public Student() { }public Student(String studentNumber, String sname, String smajor, String sclass, Teacher teacherInfo, Topic原创 2022-02-10 14:08:45 · 783 阅读 · 0 评论 -
volatile关键字如何保证可见性和有序性
volatile关键字保证线程的可见性且提供了一定的有序性,但是我无法保证原子性。在JVM底层volatile是采用内存屏障实现的。原创 2021-10-25 19:48:54 · 377 阅读 · 0 评论 -
wait()与sleep()的区别
1、wait()方法属于Object类,sleep()属于Thread类;2、wait()方法释放cpu给其他线程,自己让出资源进入等待池等待;sleep占用cpu,不让出资源;3、sleep()必须指定时间,wait()可以指定时间也可以不指定;sleep()时间到,线程处于临时阻塞或运行状态;4、wait()方法会释放持有的锁,不然其他线程不能进入同步方法或同步块,从而不能调用notify(),notifyAll()方法来唤醒线程,产生死锁,所以释放锁,可以执行其他线程,也可以唤醒自己,只是设置停原创 2021-10-20 19:18:45 · 637 阅读 · 0 评论 -
重载和重写的区别
重载:多个同名方法,根据不同传参,实现不同的逻辑。发生在同一个类中发生在编译期方法名必须相同,参数列表必须不同(个数不同,类型不同,顺序不同)访问修饰符和返回值类型可以不同构造方法可以被重载重写(覆盖):子类对父类的方法的重新编写,实现不同的逻辑。发生在子类中发生在运行期方法名和参数列表必须和父类方法一致返回值类型必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类构造方法不能被重写用final/static/private修饰的方法不能被重写...原创 2021-10-24 09:00:00 · 111 阅读 · 0 评论 -
Synchronized和Lock的区别
类别SynchronizedLock存在层次锁的释放锁的获取锁状态锁类型性能原创 2021-09-19 16:57:32 · 95 阅读 · 0 评论 -
Spring AOP
AOP术语:1.通知(Advice):织入到目标类连接点上的一段程序代码2.连接点(JoinPoint):程序执行的某个特定位置3.切入点(Pointcut):筛选连接点4.切面(Aspect):封装切入点和通知的模块5.引入(introduction):向现有的类添加新方法属性6.目标(target):要被通知的对象7.代理(proxy):用于执行AOP的对象8.织入(weaving):把切面应用到目标对象来创建新的代理对象的过程 一、基于代理的AOP实现常用Advice接口原创 2021-08-26 19:07:13 · 113 阅读 · 0 评论 -
MyBatis中的一级缓存和二级缓存的区别
一级缓存 (session级别)1.同一个session;2.默认开启一级缓存失效的四种情况:1、sqlsession不同2、sqlsession相同,查询缓存中没有的数据3、sqlsession相同,但两次查询之间执行了增删改操作4、sqlsession相同,但手动清楚了一级缓存(缓存清空)清空缓存:openSession.clearCache();二级缓存 (sessionFactory级别)1.同一个sessionFactory (同一个映射文件)2.默认关闭,需要手动开启3.原创 2021-08-24 20:58:44 · 428 阅读 · 0 评论 -
Spring中Bean的生命周期和作用域
一.作用域类别说明singleton在Spring IOC容器中,仅存在一个Bean实例,Bean以单例方式存在,所有对 bean 的请求,只要 id 与该 bean 定义相匹配,则只会返回bean的同一实例(默认)prototype每次请求都会创建一个新的 bean 实例,一个 bean 定义对应多个对象实例,每次调用getBean()时,相当于执行new XxxBean()request每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP req原创 2021-08-23 23:56:17 · 134 阅读 · 0 评论 -
Cookie和Session的联系与区别
一.联系Web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。Cookie和Session都是用来跟踪浏览器用户身份的会话方式。1.Cookie的工作原理(1)浏览器端第一次发送请求到服务器端(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie(4)服原创 2021-08-23 20:23:28 · 138 阅读 · 0 评论 -
JDK和CGLIB动态代理的区别
1、JDK和CGLIB动态代理的区别JDK代理使用的是反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGLIB代理使用字节码处理框架asm,对代理对象类的class文件加载进来,通过修改字节码生成子类。JDK创建代理对象效率较高,执行效率较低;CGLIB创建代理对象效率较低,执行效率高。JDK动态代理机制是委托机制,只能对实现接口的类生成代理,通过反射动态实现接口类;CGLIB则使用的继承机制,针对类实现代理,被代理类和代理类是继承关系,所以代理类原创 2021-08-21 18:07:37 · 11620 阅读 · 0 评论 -
Spring 常用的注解
Spring 常用的注解1.声明bean的注解@Component 常用来注解那些不易分类的组件@Repository 数据访问层使用,标记DAO组件@Service 业务逻辑层,用于标注业务组件@Controller 控制层使用,标记是Spring MVC controller 处理器,用来标注处理http请求2.注入bean的注解@Autowired 自动注入,完成属性方法的组装(Spring 提供的注解与@Qualifiter配合使用)@Qualifier 有多个Bean时指定一个Be原创 2021-08-18 23:53:41 · 282 阅读 · 0 评论 -
Java中的字符串及其中的常用方法
字符串是由多个字符组成的一串数据String的特点:字符串是常量,一旦被创建就不能改变,这是因为字符串的值是存放在方法区的常量池里面,但是引用可以改变。字符串字面值"ab"也可以看成是一个字符串对象。内存图如下(例子)这样可以更好的理解字符串常量在程序运行过程中在内存中的存储情况。1.常见String类的获取功能public int length(): 获取字符串的长度。public char charAt(int index): 获取指定索引位置的字符public int indexOf原创 2021-03-01 22:42:06 · 2399 阅读 · 0 评论 -
Java中String,StringBuilder和StringBuffer的区别
这三个类的主要区别在两个方面:运算速度(运算性能或执行效率)和线程安全性。StringStringBuilderStringBuffer不可变可变可变线程不安全线程安全1、运算速度比较(通常情况下):StringBuilder > StringBuffer > StringString是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。String对象一旦创建便不可更改,而后两者是可更改的,它原创 2021-02-21 19:35:13 · 5073 阅读 · 0 评论 -
HashMap
HashMap是Map接口的实现类。存储方式:采用KV键值对方式存储。基于哈希表设计:JDK1.7:底层存储结构基于数组+链表;JDK1.8:底层存储结构基于数组+链表+红黑树:当链表大于阈值(默认为8)且数组长度大于64时,将链表转化为红黑树,减少搜索时间。扩容机制:默认初始容量为16指定初始容量:创建时如果给定了初始容量,HashMap会将其扩容为2的幂次方作为哈希表的大小加载因子为0.75:当元素个数超过容量长度的0.75倍时,进行扩容扩容时,使用resize()方法扩容为原容量的2原创 2021-02-06 19:01:59 · 8724 阅读 · 0 评论 -
Java面向对象的三大特征
Java面向对象的三大特征为:封装、继承和多态。1.封装Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。public class Person { private int id; private String name; private Person person; public int原创 2021-01-26 17:37:44 · 12612 阅读 · 0 评论 -
Java数组的定义及常用方法
数组:一组相同类型的数据集合,长度固定方式1:先声明数组(定义数组):尚未开辟内存空间再创建数组:在内存中,根据数组长度,开辟一块"连续"的内存空间,并完成初始化(默认值)数据类型默认值整数0浮点数0.0char空字符booleanfalseStringnullString[] array01;array01 = new String[10];方式2:声明+创建double[] array02 = new double[6];方原创 2021-01-23 16:14:24 · 13019 阅读 · 0 评论 -
Java运算符
运算符1.赋值运算符赋值运算符就是为一个变量赋值的操作,例如:int a=3;boolean b=false;2.算数运算符我们经常用到算数运算符有+ - * / %,这里我们需要注意除法(1)int/int的结果还是int:int a=9;int b=2;System.out.println(a/b);//结果为4需要使用double来计算double a=7.0;double b=2.0;System.out.println(a/b);//结果为4.5(2)0不能原创 2021-01-20 19:02:35 · 12680 阅读 · 1 评论