笔记归纳总结

本文深入探讨了Mybatis的工作原理,包括SqlSessionFactory的构建、SqlSession的使用以及Mapper的执行流程。同时,介绍了数据库优化策略,如选择合适的字段约束、合理使用索引。此外,还涵盖了SpringCloud中的Eureka自我保护机制、Hystrix的降级与限流策略等关键知识点。通过对ReentrantLock和synchronized区别的分析,展示了并发控制的不同策略。最后,概述了消息中间件如ActiveMQ、Kafka、RocketMQ和RabbitMQ的特点,以及线程池的创建和配置。

特1

springbootapplication注解他是一个聚合注解分为以下主要三个:

1.@SpringBootConfiguration
声明为配置类(根配置类,首先扫描该类,本身是一个IOC容器的配置类),将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
SpringBoot使用Java Config技术进行配置,Java Config使用注解和Java代码的方式代替xml配置文件

任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
2.@ComponentScan

自动扫描当前包及子包下被@Component,@Controller,@Service,@Repository注解标记的类,将其作为bean加载到IOC容器中。
不指定范围则默认从注解所在类的包下进行扫描。

3.@EnableAutoConfiguration

核心注解,是自动配置的入口,SpringBoot根据添加的jar包来进行项目的默认配置

一、Mybatis的工作原理

本质上是封装了JDBC,简化了jdbc的操作并且是一个非常优秀的ORM框架.
1, mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件
(也可以用Java文件配置的方式,需要添加@Configuration)中构建出SqlSessionFactory(SqlSessionFactory是线程安全的)
2, SqlSessionFactory的实例直接开启一个SqlSession
3, 再通过SqlSession实例获得Mapper对象
4, 执行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交
5, 关闭SqlSession
说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

二、数据库优化的方案有哪些

(1)查询时,能不用* 就不用,尽量写全字段名
(2)索引不是越多越好,每个表控制在5个索引以内
(3)大部分情况连接效率远大于子查询,但是有例外
(4)多用explain 和 profile分析查询语句
(5)连接查询的性能上尽量使用小表驱动大表的原则
(6)查看慢查询日志,找出执行时间长的SQL进行优化
(7)尽量避免使用order by
(8)因为where子句后面的条件是执行顺序是从右到左,所以尽量把能过滤掉大部分数据的条件放在最后。

三、数据库里的字段约束有哪些,各有什么作用

1.主键约束:实现实体的完整性(PK:主键),值唯一,不能为空,且使用主键的自增策略
2.外键约束:用于多表之间的查询该表组建作为另外张表的外键建立标语标志就的关系(FK)
3.非空约束:(NOT NULL)保证该字段的内容不能为空null
4.唯一约束:(UNIQUE)字段的值必须唯一的约束
5.检查约束:(CHECK)检查列的值是否满足一个boolean表达式
6.默认约束:(default)给指定的字段可以设置默认值,不设置值时使用默认值而不是null

四、 数据库里索引的作用

主要作用是为了提高查询效率,它的执行也是有一定条件的,不是加了索引就一定能够加快查询的效率,由于索引的创建是需要占据内存空间的.以下不适合加索引:
1:如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了
2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义
3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新
4、mysql中通过Explain来查看索引的扫描次数。

五、SpringCloud_h常见问题

1.Eureka自我保护机制是什么?

由于网络故障出现网络分区,15 分钟内 85% 服务器出现心跳异常,eureka会进入保护状态,在保护状态下,所有服务的注册信息都不会被删除

2.什么是hystrix降级?

当一个服务调用后台服务失败,无法获得后台服务的结果时,可以通过hystrix执行当前服务的降级代码来返回降级结果,例如调用后台商品列表失败时,可以执行从缓存服务器获取缓存数据返回给客户端

3.hystrix的限流措施是什么?

hystrix的熔断可以限制后台服务的调用流量,避免故障向其他服务传播引起雪崩效应。
当 10 秒内达到 20 次请求,50%出现失败时会触发熔断,
之后进入半开状态,会尝试向后台服务发送客户端调用,调用成功可以自动关闭断路器恢复正常

4.ribbon的主要的重试参数是什么?至少说出两个

MaxAutoRetries - 一台服务器的重试次数
MaxAutoRetriesNextServer - 更换服务器的次数
ReadTimeout - 等待后台服务响应的超时时间

5.springcloud config配置中心默认把配置文件存放在哪里?

git仓库

6. bus消息总线的作用是什么?

bus通过mq服务器来发送配置刷新指令,微服务模块收到指令后,在不重启的情况下可以执行配置刷新操作,重新连接配置中心服务器获取新的配置信息。

7.seata的三大组件是什么?

TC事务协调器,负责协调各个模块事务的执行
TM事务管理器,负责启动全局事务,并对全局事务状态进行决策
RM资源管理器,负责与TC通信,上报分支事务状态和执行二阶段的事务操作

六.使用ReentrantLock与使用synchronized区别?

synchronize是锁对象,ReentrantLock应该是锁代码块;
使用synchronized。如果Thread1不释放,Thread2将一直等待,不能被中断。synchronized也可以说是Java提供的原子性内置锁机制。内部锁扮演了互斥锁(mutual exclusion lock ,mutex)的角色,一个线程引用锁的时候,别的线程阻塞等待。

使用ReentrantLock。如果Thread1不释放,Thread2等待了很长时间以后,可以中断等待,转而去做别的事情。

七.关于消息中间件mq的了解?

1)ActiveMQ

ActiveMQ 是一款比较早期的消息组件,由Apache开源出来的,它能满足吞吐量一般的业务场景,但是对于高并发场景,性能较差。

2)Kafka

Kafka追求高吞吐量的特性,它一开始使用于日志的收集。缺点是消息可靠性支持较少,适合产生大量数据的互联网服务的数据收集业务。

3)RocketMQ

RocketMQ 早期由阿里团队开发的,现在升级为Apache的顶级项目。纯 Java 开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。缺点是,有些功能不是开源的,如消息事务。

4)RabbitMQ

RabbitMQ 是由 Erlang 语言编写的,适合对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

八.线程池的了解?

1)线程池作用

线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

2)手动版

自己创建线程池的,自己传入参数,根据自己服务器相关的一些性能去做合理的配置;
创建线程池 , 参数含义 :(核心线程数,最大线程数,加开线程的存活时间,时间单位,任务队列长度);

3)线程池四种创建方式

Java通过Executors(jdk1.5并发包)提供四种线程池,分别为:
newCachedThreadPool创建一个(可缓存线程池),如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个(单线程化的线程池),它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

4)创建线程的七个参数?

[ 核心线程数、最大线程数、超时时间、超时
单位、阻赛队列、线程工厂、拒绝策略。]

九.数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

十.数据库调优

1)数据库方面:根据业务不同可以进行分库分表,读写分离,选用合适的数据类型储存,使用合适的存储引擎,适当创建索引
2)sql语句方便:避免全表查询,查看sql的执行计划,查看是否索引失效,如果是子查询的话,查看子查询是大表驱动小表还是小表驱动大表。

十一.mybatis的运行原理?

1) 先创建SqlSessionFactory的创建者对象SqlSessionFactoryBuilder,然后再创建SqlSessionFactory工厂对象来读取配置文件(sqlMapConfig.xml),再依据配置文件中的配置找打映射文件(mapper.xml);

2)读取映射文件中的SQL语句创建预编译的PreparedStatement SQL语句,由于预编译的SQL语句较多,会将他们保持到Map中,以sql id作为key,以sql语句作为value

3)SqlSessionFactory工厂对象再调用openSession()返回一个SqlSession对象,该对像封装了执行预编译SQL语句的相关方法.

4)SqlSession调用具体执行方法,传入sql id和参数.

5)依据sql id去Map中找对应sql id的value(预编译SQL),将参数传入预编译的SQL中并调用PreparedStatement对象的excuteUpdate()方法执行该SQL语句.

6)如果是插入,更新操作会返回影响的行数,是个int值
7) 如果是查询语句可以返回list,entity,map,以map为例,则将查询结果保存在结果集Map中,key是表中的字段名,value是字段值,多个返回结果时保存到多个Map中,然后调用结果集的getInt(),getString()等方法从Map中通过key取出value, 然后调用实体对象的set方法进行赋值实现映射关系.

十二.java设计模式的分类?

总体来说设计模式分为三大类,共计23种设计模式:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

十三.JSP九大内置对象?

在这里插入图片描述

十四.四个作用域及作用域对象?

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风与她皆温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值