![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java面试
java初级中级面试大全
禾日香
这个作者很懒,什么都没留下…
展开
-
MySQL面试总结
底层数据结构为B+树,根节点保存数据引用地址,叶子节点保存数据,且叶子节点为双向链表。会走age索引,但这个B+数获取不到name,所以根据主键查询全部数据(回表),再返回所有的列。聚簇索引只有一个,为主键id(没有主键id,会默认生成一个id作为主键),B+树叶子节点保存了全部数据(一行数据)。如表bb中字段id name age、id为主键(聚簇索引创建B+树),age为非聚簇索引(非聚簇索引创建B+树)。非聚簇索引可以有多个,为手工创建的。索引覆盖是,查询使用了索引,返回的列必须在索引中全部找到。原创 2024-06-26 11:10:08 · 273 阅读 · 0 评论 -
架构篇(spring、springMVC、springBoot、myBatis)
不是线程安全的。若bean中有可以修改的成员变量,是要考虑线程安全问题的。若bean中没有可修改的成员变量(无状态bean),是不需要考虑线程安全问题的。原创 2024-06-24 15:40:15 · 400 阅读 · 0 评论 -
redis面试总结
缓存击穿:redis中某一个key到了过期时间,但这个key还承接着大量的并发请求,导致并发到达数据库,导致数据库压力剧增(压垮、断掉)。解决:给key设置合理有效时间(对应热点key设置永不过期)。互斥锁(当缓存失效时,通过互斥锁来保护数据库的访问过程。当一个热点key失效时,用互斥锁方式,只让一个请求到数据库查询数据并加载到缓存)。逻辑过期(当查询缓存发现逻辑时间已过期时,会成功获取一个互斥锁,并开启一个新线程进行查询数据库重建缓存数据的操作,然后写入缓存并重置逻辑过期时间,最后释放锁。原创 2024-06-21 14:15:28 · 652 阅读 · 0 评论 -
java多线程面试总结
1.继承Thread类,重写run方法。2.实现Runnable接口,实现run方法。3.实现Callable接口,实现call方法,结合FutureTask。(可以获取线程的返回值)4.线程池创建线程。原创 2024-06-17 17:59:17 · 505 阅读 · 0 评论 -
集合面试总结
单例集合,list有序、可重复(arrayList、linkedList);set无序、不可重复(hashSet、treeSet)双列集合,map键值对(hashMap、concurrentHashMap)原创 2024-06-12 09:44:51 · 303 阅读 · 0 评论 -
事务的特性
一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。有A-100,肯定有B+100.原子性:事务是一个整体,要么都执行,要么都不执行,不可能出现执行一半另一半不执行的情况。持久性:事务提交后,对数据库的操作是永久的,不可回滚的。隔离性:事务跟事务之间是互不干扰的。原创 2023-03-29 09:50:26 · 95 阅读 · 0 评论 -
spring的简单理解
aop是面向切面编程,是通过预编译和运行期间动态代理实现程序功能的技术。简单来说就是增强ioc对象方法的技术。aop的动态代理技术分别为:jdk基于接口的动态代理技术;cglib基于父类的动态代理技术。ioc容器就是个管理对象的容器;控制反转就是把对象的创建权交给spring的ioc容器,包含了对象的创建,使用,销毁。spring的核心是ioc容器和aop面向切面编程。原创 2023-03-29 09:24:17 · 62 阅读 · 0 评论 -
Redis有哪些数据结构,应用场景是什么?
集合:可以存多个元素,不可以重复。可以有数学集合上的交集,并集,差集操作。应用:共同关注的人等。字符串:可以存储字符串。应用:分布式锁,计算器,存json字符串等。哈希表:key-value的存储方式。应用:一般用于存储对象等。有序集合:元素排序(设置排序顺序)。列表:可以根据命令组合,当栈或者队列。原创 2023-03-24 09:24:43 · 64 阅读 · 0 评论 -
Mysql查询慢应该怎么优化
检查sql是否走了索引,若没有,优化sql利用索引。检查查询的字段是否都是必须的,或者有重复的。查询的数据是否太多,是否考虑分库分表。检查sql利用的索引是否为最优索引。原创 2023-03-24 09:14:22 · 86 阅读 · 0 评论 -
mybatis中#{}和${}区别
mybatis处理#{}时,会将#{}替为?,调用PreparedStatmement来赋值。mybatis处理${}时,会将${}替换为变量值,调用Statement来赋值。使用#{}可以有效防止sql注入,开发中尽量使用,可以提高系统安全性。#{}是占位符合,${}是字符串替换,是拼接符号。原创 2023-03-24 09:10:49 · 62 阅读 · 0 评论 -
@Autowired和@Resource的区别是什么?
Resource是根据名称进行匹配,然后再根据类型进行匹配。若名称匹配到一个,就直接注入;若名称匹配到多个,就会根据类型匹配,类型匹配到一个,就注入,类型匹配到多个,就会报错。若@Resource(name=“xxx”),则会根据xxx进行匹配,若匹配到一个,就注入;没有找到就报错,不会在根据类型进行匹配。@Autowired是现根据类型进行匹配,然后再根据名称进行匹配。若类型匹配到一个,就直接注入;若类型匹配到多个,会根据名称进行匹配,名称匹配到一个,就注入,名称匹配到多个,就会报错。原创 2023-03-23 11:45:52 · 120 阅读 · 0 评论 -
ArrayList和LinkedList区别
ArrayList底层是动态数组,存储的时候,需要内存有一片连续的空间。数组是有下标的,可以快速找到对应的元素,所以ArrayList查询是快的。当插入元素的时候,若是尾插入法,也是快的;若是头插入法或中间插入,是要有数据的迁移的,是比较慢的。过程:当数组长度不够时,内存会新建一个数组,把以前的数据赋值到对应的位置,再把第11个元素放到相应位置。当腰插入某个元素的时候,只需要断开两端的节点,让两端节点指针指向新的节点即可,所以LinkedList插入和删除比较快。原创 2023-03-23 11:30:19 · 57 阅读 · 0 评论 -
equals和hashCode
若要往栈内存放入一个元素,会先计算哈希值,根据哈希值(key)去快速的找value,若没有value,则会放入;例子中,若没有hashCode获取哈希值,会把栈内存中所有的value全部取出来进行equals比较,栈内存的性能会很差。若类没有重写equals方法,则会使用Object类中的equals方法,Object中equals方法是==比较,是比较栈内存中的引用地址是否一样。因为比较两个对象是否相等是,会先判断哈希值是否一样,不一样才会执行equals方法。hashCode方法,是获取哈希值。原创 2023-03-23 09:46:25 · 62 阅读 · 0 评论 -
抽象类和接口的区别
抽象类跟普通类差不多,可以有成员变量,成员方法等。抽象类中还可以有抽象方法,普通类中没有。接口也可以有成员变量,但成员变量都是常量(public static final)修饰的。抽象类是对事物的抽象,是某些事物共性的东西放在抽象类中。因为java中是单继承,所以使用抽象类的代价是比较大的。接口是对行为的抽象,表示一个类可以有什么样的行为,相当于一种规范。因为java是多实现,所以一般接口使用比较多。原创 2023-03-23 09:27:08 · 52 阅读 · 0 评论 -
重写和重载的区别
重写发生在父子类中。子类继承父类,重写父类中的方法。方法名称一样,参数类型小于等于父类的参数类型,参数个数一样,参数顺序一样,访问修饰符大于等于父类的访问修饰符。重写发生在同一个类中,方法名称一样,参数列表不同(顺序不同,个数不同,类型不同)。原创 2023-03-23 09:14:30 · 49 阅读 · 0 评论 -
String、StringBuffer、StringBuilder区别
String是被final修饰的,是不可变的。(若修改值,会新生成一个新的对象)StringBuffer和StringBuilder是可变(若修改值,会在原来的对象上操作)。StringBuffer是线程安全的,因为StringBuffer的所有方法都被synchronized关键字修饰的。(线程安全是对多线程环境,有共享资源来说的)StringBuilder是线程不安全的。使用场景:字符串基本上不变化用String;若考虑到线程安全,使用StringBuffer。原创 2023-03-22 14:28:52 · 43 阅读 · 0 评论 -
final的作用
若为基本数据类型,表明该成员变量不能改变。若为引用数据类型,表明该成员变量的引用地址不能改变,但对象的内容可以改变(对象的属性可以改变等)。final修饰的成员变量,一般声明后就直接赋值了。表明该方法不能被重写(即为最终方法)。(扩展:该方法不能重写,但能继续重载)。表明这个类不能被继承。原创 2023-03-22 14:17:42 · 36 阅读 · 0 评论 -
==和equals
若对象类没有重写equals方法,equals与==是没有区别的,都是判断引用地址是否一样。若对象类重写了equals方法,equals是判断对象的内容是否一样(这里还需要看重写equals方法里的具体实现内容)。引用数据类型,数据放在堆内存中,栈内存中存放指向堆内存中的数据。==是比较栈内存数据是否一样,equals是比较堆内存的数据是否一样(重写equals方法的类)。==对于基本数据类型是直接判断值是否一样,对于引用数据类型是判断引用地址是否一样(判断是否为同一个对象)。原创 2023-03-22 14:10:50 · 42 阅读 · 0 评论 -
JDK、JRE、JVM三者的区别和联系
JDK:java开发工具;JRE:java运行环境;JVM:java的虚拟机。JDK包含JRE,JRE包含JVM。程序员开发的是.java文件,经过JDK中javac命令后形成.class文件。.class文件交给JRE,JRE给JVM;JVM会把.class翻译为机器码,映射到操作系统。不同的操作系统,JVM不一样。(.class文件可以在不同操作系统上运行的原因)原创 2023-03-22 13:57:52 · 203 阅读 · 0 评论 -
线程中sleep()与wait()方法的区别
线程中sleep()与wait()方法的区别原创 2023-03-07 09:26:27 · 74 阅读 · 0 评论 -
Java中线程的状态
Java中线程的状态一共六种,非常好记的方式。原创 2023-03-07 09:11:55 · 150 阅读 · 0 评论 -
java创建线程的方式有几种?
java创建线程的方式有几种?这四种究其底层都是实现Runnable接口实现的。原创 2023-03-06 09:25:29 · 1200 阅读 · 0 评论 -
面试篇章:SpringCloud常见组件有哪些?
面试篇章:SpringCloud常见组件有哪些?原创 2022-12-21 14:34:37 · 436 阅读 · 1 评论