一.mybatisPlus学习心得
- mybatis中#{} 和KaTeX parse error: Expected 'EOF', got '#' at position 7: {}的区别 #̲{}是预编译处理,{}是字符串替换。#{}可以有效的预防sql注入。
mybatis 、 mybatisPlus 是ORM框架
mybatisPlus是mybatis的一个扩展,他简化了传统的sql书写。只需继承baseMapper之后,则可使用mybatisPlus封装好的简单CURD。
mysql
1.原理
Mysql是通过B+tree 来实现的。
B+tree只在所有的叶子节点存储数据,非叶子节点存储索引信息。即在千万级数据内,走索引的情况下,通过3级就可以查询到数据。
2.隔离级别
1). 读取未提交
最低的隔离级别,允许读取尚未提交的数据变更。可造成脏读、不可重复读、幻读
2). 读取已提交
允许读取事务已提交的数据。可以避免脏读。但是可能造成不可重复、幻读。
3). 可重复读取
对同一字段多次读取数据都一致,除非本身事务修改。避免脏读、不可重复读,但是可能会幻读
4). Serializable(可串行化)
最高的隔离级别,所有事务依次执行。可避免脏读、不可重复度、幻读。
InnoDB存储引擎的默认隔离级别是:可重复读取。
二.mysql优化
1.书写查询语句时,不要用*
如:
select * from xx;
只需要把需要查询的字段查询出来即可。这样可避免浪费资源
修改:
select name,age from xx;
2.使用union all 代替 union 。因为union 会做去重、排序处理,而union all 不会。除非有特殊场景需要去重处理。
3.劲量控制连表数量,好的设计连表数量不应该大于5张
4.劲量使用inner join ,少使用left join ,因为inner jion 会自动使用小表去驱动大表。而left jion 默认会使用左边的表去驱动右边的表。
5.sql查询慢时,使用索引。添加所以之后,会影响where 以及order by 。
索引一般分为:B+树索引以及哈希索引。
一张表索引建议在5个之内
一般使用explain查看索引情况:system > const > eq_ref > ref > range > index > ALL
select_type 表示操作类型
table 使用表名
type 访问类型 const 一般表示主键或unique 索引;rq_ref 匹配出来一条数据;ref 非唯一所以扫描
keys 实际使用到的索引
Extra 扩展属性
6.mysql的锁
共享锁,互不影响;排它锁,插入影响其他读写;表锁,锁整张表,MYISAM使用表锁;行锁,可能造成死锁(行锁必须有索引,不然就进行锁全表)
三 spring
spring把简单的组件配置,组装成复杂的应用。spring常见的配置有3种:基于xml配置、基于注解配置、基于java配置
它是一个java开发框架,主要有AOP与IOS两大特性。
1.AOP 面向切面编程
把业务逻辑与系统服务分开。简化了应用程序的开发。
2.Ios控制反转
控制反转由依赖查找、依赖注入方式实现。即所有的bean都注册到bean工厂中进行统一管理。需要用时,通过依赖注入就可以获取到。
事务的执行流程:
在执行目标方法之前,会创建事务,即事务增强,之后会执行我们自定义的增强行为(如果有的话,可以在事务增强之前或之后执行),之后执行目标方法,执行目标方法之后,又会执行自定义增强和事务增强,事务要么提交要么回滚,之后再返回给客户端;这就是它的一个流程,和 分析 AOP 的流程是一致的。
springMVC的理解
1.原理:
前端发送请求到前端控制器,前端控制器找到一个或多个处理适配器找到处理对应请求的controller,前端控制器在把请求请求到对应的controller,controller调用对应的逻辑处理,返回ModelAndView,前端控制器查找一个或多个视图解析器,找到ModelAndView指定的视图,视图把对应的结果显示给客户。
MVC是一种模式,M是Model模型(完成业务逻辑,由javaBean构成,service+dao+entity);V 表示View视图 大致有html jsp,C 是控制器
springMVC就是在spring的基础上加上MVC模式
四 springboot
内嵌了容器:tomcat 、jetty等,可以打包成jar独立运行。
1.原理
五 springCloud
六 redis
redis本质上是一个key-value类型的内存数据库。整个数据库都加载在内存中,可定期通过异步操作把数据flush到硬盘上保存。
redis速度快,且每秒可操作10万次的操作。并且可做数据持久化。
可支持:String,List,Set,hash
七 rabbitMq
为什么要使用mq:异步处理、应用解耦、流量削峰
kafka性能(吞吐量、TPS)比RabbitMq高出很多
如何保证数据不会丢失:
a)在生产者阶段:可以开启confirm,在mq收到信息成功之后,会回传ack消息,告诉ok。如果没有成功,则会回调nack接口。我们可以在这个接口里面进行重试机制
b)mq阶段:如mq挂了,还存在消息未读取。可以开启持久化
c)消费者阶段:关闭mq自动ack,在mq处理完成之后,在手动ack即可。
如何保证数据的重复性:
消费幂等性,即消费端采用唯一标识,判断是否消费过。
八 kafka
九 linux 常用命令 如:shell脚本
十 Ngnix
ngnix是一个免费、自由、开源、高性能的http服务器和反向代理服务器。
优点:1.比其他服务器更快响应。2.高可靠。3.低消耗。4.单机可支持10万以上的并发。
特性:反向代理、负载均衡
十一 常用的算法
1.冒泡排序
循环顺序两两比较,直至把最大值放到最后。
2.快速排序
3.选择排序
从第一个开始,比较后续的全部数字,得到最小值,把最小的和比较数字替换位置,直至全部排好序。
4.插入排序
从第二个数字开始和前边数字比较,插入到大于和小于该数字的中间。
5.归并排序
6.希尔排序
参考:
https://blog.csdn.net/m0_37256698/article/details/111593754
十二 日志框架
十四 优化
1.大表如何优化
查询需带范围查询。
增加读写分离。主负责写,从负责读取
git
新增文件的命令:git add file或者git add . 提交文件的命令:git commit –m或者git commit –a 查
看工作区状况:git status –s 拉取合并远程分支的操作:git fetch/git merge或者git pull 查看提交
记录命令:git reflog
restful Api接口规范
1.协议使用https
2.劲量部署到专用域名值下
3.地址中不能有动词,只能有名词
4.资源获取的具体操作,用http的对应动词。如:GET(获取一个或多个),POST(新增,且返回对应资源),PUT(修改且返回修改后信息),DELETE(删除资源返回空信息)
5.可以把版本放到路径中
6.返回固定的状态码
常用的设计模式
1.单例模式
运行时,java虚拟机只存在一个实例
2.策略模式
定义一个策略接口,不同的实现类提供不同的策略算法。
3.简单工厂模式
定义一个可以创建的工厂,根据不同的条件生成不同的对象。
4.工厂模式
根据每一个产品提供一个工厂类,不同的工厂类来实现不同的产品实例
Mybatis
1.原理
mybatis通过全局配置文件,配置对应数据源、事务等信息。通过映射文件,构造出sqlSessionFactory,通过sqlSessionFactory可以创建SqlSession(即会话)来操作数据库,SqlSession本身不能操作数据库,他是通过Executor执行接口来操作数据库,Executor有两个实现类,一个是普通执行器,第二个是缓存执行器。Executor把需要处理的sql信息封装到底层的Mappedstatement中。
架构模式
主要分为:
1.分层架构;
2.多层架构;
3.模型-视图-控制器架构;
4.微服务架构;
1.分层架构
分层架构又可以成为n层架构,他主要分为:展现层、逻辑层、持久层、数据库层。
2.多层架构
3.模型-视图-控制器架构
又称MVC架构
分为:模型(Model)、视图(View)和控制器(Controller)三个部分,分别处理数据、用户界面和业务逻辑。
4.微服务架构
目前比较流行的一种架构,把软件才分多个小型、独立的服务,各自运行在自己的服务器中,每个服务只关注自己特有的功能,通过网络接口及其他服务进行通信。
数据结构
常用的数据结构有:
1.数组(Array)
将相同类型的若干变量有序组织在一起的集合。它可以是一维也可以是多维
2.栈
顺序插入,即先插入的数据在栈底,后插入的数据在栈顶,读取确是从栈顶开始读取。即先插入后读取。
3.列队
从尾插入,从头删除。即先进先出。
4.链表
非连续存储。分为了指针域和数据域,指针域存储了下个数据的地址。
5.树
只有一个根节点。且每个节点只有一个前节点,但是可以有2个子节点。
6.图
7.堆
常见的数据结构:1.数组;2.栈,栈采用后进先出的原则,先进的数据放于栈底,读取时,先读取栈顶的数据。3.队列,队列采用先进先出的原则,一直在队列尾部追加数据。4.链表。5.树。6.图。7.堆。8.散列表。
bootstrap
是一个基于html、css、javascript的响应式前端框架
bootstrap的javascript依赖于jquery,所以在引入它的插件之前都需要先引入jquery
辅助工具
用axure画页面原型
用visio画流程图
SpringCloud
五大组件:
Eureka注册中心 ,目前多用nacos
Ribbon负载均衡
Hystrix熔断器
Fegin组件
Zuul网关
Zuul是Netflix开源的微服务网关,他可以和Eureka,Ribbon,Hystrix等组件配合使用。Zuul组件的核心是一系列的过滤器
Seata
分布式事务
一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
AT 模式
两阶段提交协议的演变:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。
Sentinel
Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制的效果包括以下几种:快速失败(直接 拒绝)、Warm Up(预热)、匀速排队(排队等待)。