java 面试知识点突击-(71-80)
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 面试知识点突击-(71-80)相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
java 知识点扫盲目录
https://blog.csdn.net/weixin_38316697/article/details/121991582
java 面试知识点突击-(71-80)
71 springBoot 自动配置原理?
就是通过 @Import 去读取spring.factories配置文件,把里面的配置类解析成一个一个的bean定义,并导入 BeanDefinitionMap<beanName,BeanDefinition> 中。
装配了什么?
即自动装配类的bde(BeanDefinition)装配到 BeanDefinitionMap<beanName,BeanDefinition> 中。
72 什么是嵌入式服务器?为什么要使用嵌入式服务?
正常的Web服务器 需要tomcat启动。
而嵌入式服务器就是在springBoot 中将tomcat 打成tomcat.jar,相比web服务器,节省了下载安装tomcat步骤,应用也不需打成war包放在tomcat的webapp目录下,因为springBoot内置了tomcat,main方法启动时,就会自动启动tomcat,并利用tomcat的spi机制加载springMvc。
73 mybatis的优缺点?
优点:
1、基于sql编程,相当灵活,sql写在xml里,与代码解耦,并统一管理;
2、与jdbc相比,消除了大量的冗余代码;
3、与各种数据库兼容;
4、能够与spring集成,对它相当友好;
5、提供映射标签,对象与数据库中的字段的关系映射;
缺点:
1、sql编写工作量大;
2、sql与数据库的依赖性比较大,不能随意更换数据库;
74 Mybatis与hibernate对比?
提前掌握:
ORM(对象关系映射):
javaBean <----> DB
最主要的区别hibernate是典型的ORM框架,而Mybatis主要是用于编写sql。
面向表结构编程思维–>Mybatis更好
面向对象编程思维–>hibernate更好
面向对象的思维迭代会很慢,而面向表结构的思维迭代会很快,因此国内基本选择的都是Mybatis。
开发速度对比:
如果一个项目没有复杂的查询,都是增删改查,选hibernate;
如果一个项目复杂语句较多,选Mybatis;
sql优化对比:
Mybatis更好。
对象管理的对比:
hibernate更好,Mybatis根本就不是一个ORM框架。
学习成本:
hibernate学习成本更高,因为hibernate重,封装的东西更多,而Mybatis比较轻,入门成本更简单。
75 Mybatis 中#和$的区别?
# 占位符–>预编译处理;
$是拼接符–字符串替换;
区别:
1、因为#是预编译处理,变量替换后,对应的变量自动加上’’、KaTeX parse error: Expected 'EOF', got '#' at position 14: 不会加上单引号; 2、#̲ 防止sql注入,而不行,因为$不是预编译,你传入什么就是什么;
76 Mybatis 的插件的运行原理,如何编写一个插件?
Mybatis的插件就是Mybatis的拦截器
它只支持
ParameterHandler(数据类型转换)、
ResultSetHandler(结果集)、
StatementHandler(设置参数)、
Ececutor(生成sql语句与缓存的维护)这四种接口,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口拦截方法。
如何编写一个插件:
实现Mybatis的interceptor接口并复写intercept()方法。
77 索引的基本原理?
概述:
索引用来快速查询某种特定值的记录,没有索引的话,就意味着全表扫描。
原理:
把无序的数据变成有序的查询;
1、把创建了的索引内容进行排序,
2、并维护到一张表里面(【倒排表】)
3、在【倒排表】内容上拼上数据地址链
4、查询时,先拿到【倒排表】里的内容,取出数据地址链,从而拿到具体的数据
例子:
【哈希索引】:就是把每个数据的值进行哈希算法,将获取到的哈希值放到哈希表中,value值放入对象在堆中的地址,同时哈希表在内存中,随时可以找到,通过找到对应的哈希值就能找到对应的地址。
78 mysql聚族和非聚族索引的区别?
数据结构都是B+树;
聚族索引概述:
叶子节点上数据与索引按照一定的顺序放在一起,同时数据的物理存放顺序与索引一致,
即只要索引是相邻的,那么在磁盘上数据也是相邻的,比较适用于范围查询。
非聚族索引概述:
叶子节点不存储数据,只存储索引(数据行地址)
相比非聚族索引:
优势:
1、通过查询聚族索引可以直接获取数据,相比非聚族索引更快,因为非聚族索引需要二次查询;
2、聚族索引范围查询效率更高,因为数据是按照大小排列
3、聚族索引适用于排序的场景,非聚族索引不适合
劣势:
1、维护索引昂贵,(插入新行/主键被更新)
2、如果使用UUID使用主键,每次插入新数据,导致聚族索引重新排序
3、如果主键比较大,导致辅助索引会变大,辅助索引的叶子结点是主键值,通过这个主键值在聚族索引找到数据,过长的主键值,也导致聚族索引所占的物理空间过大。
注:innoDB(B+树)中一定有主键,主键一定是聚族索引,不手动设置,则会使用unique索引,没有unique索引,则会使用数据库内部的一个行的隐藏id来当做主键索引,在聚族索引之上创建的索引称之为辅助索引,辅助索引访问数据都要二次查找,非聚族索引都是辅助索引,像复合索引,前缀索引,唯一索引也是非聚族索引。
79 mysql索引结构,各自优劣?
单条记录查询的时候,适合哈希索引,查询性能最快,其余大部分场景采用B+树索引。
79::01 B+树:
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,
在B+树的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅度波动,而且基于索引的顺序扫描时,也可以利用双向指针快速移动,效率非常高。
79::02 hash索引:
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时只需要一次哈希算法即可找到对应的键值,速度非常快。
如果是等值查询,那么哈希索引有绝对优势;
如果是范围查询,哈希索引毫无用武之地;
80 索引的设计原则?
目的:查询更快,占用的空间更小。
索引设计原则:
- 基数少的表,就没必要建索引了,因为索引也是要占空间的。
- 使用短索引,比如说,设置索引的字段字符长度比较长,那么生成的索引占的空间就比较大,可以指定一个前缀索引,这样可以节省大量索引引用空间,可以查询完后在排除不符合标准的行。
- 作为常用查询条件的字段,适合建立索引。
- 不要过度索引,索引会占用空间,而且索引越多,插入数据的时候,需要维护的索引表就越多
- 定义外键的列一定要建立索引。
- 更新频繁的字段不适合建立索引。
- 查询中很少涉及的列、重复着比较多的列不适合建立索引。
- 尽量扩展索引,不要新建索引。
- text、image、bit的数据类型列不要建立索引。
创作不易、点关注、不迷路
点击主页、更精彩 !!!
以上是关于java 面试知识点突击-(71-80)的主要内容,如果未能解决你的问题,请参考以下文章