java基础复习(第三日)

java基础复习(三)

1.Spring 中 BeanFactory 和 ApplicationContext 有什么区别?

BeanFactory属于Spring容器相关体系的根结点接口。

ApplicationContext接口继承BeanFactory接口

BeanFactory只有两个功能

  • 创建实例(编程式创建,applicationContext都可以)
  • 获取实例,并且懒加载实例
  • 延迟加载

ApplicationContext 则增加国际化,AOP拦截器,消息发送响应机制,访问资源(URL及文件)等

  • 直接加载
  • 支持同时加载多个配置文件,不同的资源文件
2.双亲委派是为了解决什么问题?

1.避免类的重复加载,确保一个类的全局唯一性

java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种关系避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再见加载一次

2.保护程序安全,防止核心API被随意篡改

3.Spring 中依赖注入的方式有几种,各是什么?

1.Set方法注入:最常用的注入方式,支持注解+xml

2.构造器注入:是指带有参数的构造函数注入,支持注解+xml

3.静态工厂的方式注入:通过调用静态工厂的方法来获取自己需要的对象,只支持xml

4.实例工厂的方式注入:获取对象实例的方式不是静态的,所以需要new一个工厂类,再调用普通的实例方式,只支持xml。

4.BIO、NIO、AIO 有什么区别?

BIO:一人蹲坑(同步)并发低、代码简单

NIO:多人蹲坑(异步)合适性能和并发要求高、编程复杂度高(Web服务器)

AIO:排号蹲坑(异步)需要操作系统、兼容性高、(大规模聊天室、网络游戏等)

5.说一下 Spring 的几大特性?

①IOC(控制反转):将创建对象的权利交给Spring进行管理。
作用:高内聚,低耦合
优点:解耦,降低程序之间的依赖关系
缺点:使用反射生成对象,损耗效率
实现步骤:
1、创建spring主配置文件并添加约束;
2、在主配置文件中,使用context:component-scan标签,标明使用IOC的类所在的包;
3、使用注解标注IOC的类;
4、使用注解依赖注入的数据;
5、获取bean对象并使用
涉及的注解:
@Component(标注一般类)
@Controller(标注表现层的类)
@Service(标注业务层的类)
@Repository(标注持久层的类) @Autowired(自动按照类型注入) @Qualifier(在按照类中注入的基础之上,再按照名称注入)
@Resource(按照bean的id注入)

②DI(依赖注入):应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入。
作用:降低程序间的耦合
注入方式:构造器注入;set方法注入;注解
能注入的数据:基本类型;string;其他bean类型;复杂类型/集合类型
③AOP(面向切面编程):通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
作用:在程序运行期间,不修改源码对已有方法进行增强。
优缺点:减少重复代码;提高开发效率;维护方便。
实现方式:动态代理

6.Redis 的持久化方式 RDB 和 AOF 的区别是什么?

RDB是数据集快照方式,记录Redis数据库的所有键值对,在某个时间点写入临时文件

是间隔性的持久化,缓存效率比AOF高,是Redis的默认就持久化方案,快照阀值为15分钟一次,5分钟10次,一分钟10000次生成快照

AOF是完全持久化保存为AOF文件,比RDB文件大,从文件恢复到缓存中慢,但安全性高

知识点:

4.0后 RDB和AOF 一起用(冷热备)

Redis首先通过RDB方式创建一个快照,然后将所有的写操作追加到AOF文件中。当Redis重启时,可以通过载入RDB文件进行快速恢复,再通过重放AOF文件中的写操作来达到最终一致性

7.如何评价 SpringCloud 在微服务架构方面的完整度情况?

应该是较为完整的架构方案。从内而外可以看到:

1.授权认证中心、定时调度中心、分布式事务协调中心等;

2.对于外部中间件的支持,如缓存、DB、MQ等

3.对于数据监控、日志收集及查询等支持

4.Admin 监控中心、熔断监控面板等

5.注册中心集群、配置中心集群、网关集群等

上述构成一个功能分散但优势集中的服务架构生态系统

8.输入http://www.baibu.com在浏览器的完整过程

浏览器获取输入的域名 www.baidu.com

浏览器向域名系统DNS请求解析www.baidu.com的IP地址

DNS解析出百度服务器的IP地址

浏览器与服务器建立TCP三次握手(默认端口80)

浏览器发出HTTP请求,请求百度首页

浏览器解析HTTP响应,并渲染到页面

浏览器关闭TCP四次挥手

9. MySQL 优化有哪些方式?
1.如何索引查看

关键字:EXPLAIN

EXPLAIN SELECT * FROM table_name where condition;
2.查询关键数据解析

共12个

索引优化主记

  • select_type:表示每个操作步骤的类型,常见的类型有SIMPLE、PRIMARY、SUBQUERY、DERIVED等。不同的联系都应不同的查询操作方式
  • partitions:如果查询涉及到分区表,该字段表示实际访问的分区数
  • possible_keys:表示在执行查询时可能使用到的索引
  • key:表示MySQL实际选择使用的索引
  • key_len:表示MySQL这声音索引时索引的长度,单位数字节。一般来说,key_len 越小越好
  • rows:表示MySQL在执行查询时估计需要扫描的行数
  • filtered:表示MySQL在执行查询后过滤的行数所占的比例,范围是0-100。一般说,filtered的值越小越好
3.如何优化索引查询计划

常见的优化方法:

  • 索引优化:关注possible_keys、key和key_len字段,确保MySQL选择了合适的索引,并且索引长度够短
  • 表关联优化:关注type字段,尽量避免使用全表扫描(type为ALL),考虑添加或优化查询条件
  • 子查询优化:关注select_type字段,尽量避免使用子查询,可以考虑索引JOIN操作替代
  • 分区表优化:关注partitions字段,确保查询操作尽量只访问必要分区,避免全表扫描
  • SQL语句优化:关注rows(行)字段和filtered(过滤)字段,尽量减少扫描的行数和过滤的行数,可以通过优化查询条件。添加合适的索引等方式实现
10.MySQL 索引过多会产生什么问题?
  1. 空间占用:每个索引都需要占用一定的存储空间。当表中存在大量索引时,会占用大量的磁盘空间。这对于拥有大量数据的表来说,可能会导致存储容量不足的问题。

  2. 写操作变慢:当进行插入、更新或删除等写操作时,MySQL需要维护索引的一致性。如果有太多的索引需要更新,那么写操作所需的时间将会增加。这是因为每个索引都需要更新,会导致额外的IO操作和锁竞争,降低写操作的性能。

  3. 索引维护开销:对于更新操作或者数据的变动,MySQL需要相应地维护所有相关的索引。当有大量索引时,需要耗费更多的时间和资源来进行索引的维护。

  4. 查询性能下降:过多的索引可能会导致查询优化器在选择合适的索引时困惑。它可能会选择错误的索引或者无法利用索引进行查询优化。这将导致查询性能下降,因为MySQL可能会进行不必要的索引扫描或者无法使用最有效的索引。

  5. 索引更新需要更多时间:当对表进行结构变更(如添加、删除或修改索引)时,MySQL需要对索引进行重新构建,这将消耗更多的时间和资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值