自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 MySQL(13)---MYSQL主从复制原理

最近在做项目的时候,因为部署了MYSQL主从复制所以在这里记录下整个过程。这里一共会分两篇博客来写:1、Mysql主从复制原理2、docker部署Mysql主从复制实战这篇只写MYSQL主从复制原理。一、概述1、什么是主从复制?概念主从复制是用来建立一个和主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。2、主从复制作用我们来思考如果在企业网站中,后端MYSQL数据库只有一台时候,会有以下问题1、单点故障服务不可用2、无法处理大量的...

2021-07-19 16:54:43 236

原创 MySQL(11)---约束

含义: 一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。先把Mysql几种约束列出来:主键约束外键约束唯一性约束非空约束默认值约束自增约束MySQL不支持check约束,但可以使用check约束,而没有任何效果。一、语法不多说理论,说下语法和示例就好。1、建表时直接建约束drop table student;CREATE TABLE student( id INT PRIMARY KEY auto_increment,#主键 自增 name VA...

2021-07-09 14:33:51 195

原创 MySQL(12)---纪录一次left join一对多关系而引起的BUG

BUG背景我们有一个订单表和 一个物流表它们通过订单ID进行一对一的关系绑定。但是由于物流表在保存订单信息的时候没有做判断该订单是否已经有物流信息,这就变成同一个订单id在物流表中存在多条数据,也就变成了本来订单表只有100条纪录,而left join 物流表后,所查询的订单数据远远大于100条。总结趁着上面这个问题,自己来复习下join语句和distinct关键字,同时说明如何解决就算关联是一对多,但我还是想只显示100条订单数据的方法。一、理论先再讲下关联表查询的几种表达...

2021-07-09 14:33:08 625 1

原创 MySQL(10)---自定义函数

之前讲过存储过程,存储过程和自定义函数还是非常相似的,其它的可以认为和存储过程是一样的,比如含义,优点都可以按存储过程的优点来理解。存储过程相关博客:1、MySQL(7)---存储过程2、MySQL(8)---游标3、MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程它们唯一不不同点在于存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新函数:有且仅有1 个返回,适合做处理数据后返回一个结果。一、语法1、创建函数CREATE FUNCTION.

2021-07-09 14:30:37 192

原创 MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程

为了尽可能的还原当时为什么需要用到存储过程,下面我写了个详细的文档,我们可以从需求文档出发来分析。有关存储过程之前也写了两篇文章来做铺垫。1、Mysql(7)---存储过程2、Mysql(8)---游标一、需求背景一个服装类的app商城,用户会员等级分:普通会员,vip会员,钻石会员。现在在app上发布一款商品,但发布是可以设置该商品是所有会员可见,还是指定会员可见。现在要见3张表1、商品表2、会员表3、商品关联会员表这个时候,又有一个优惠券功能,同样可以设置该..

2021-07-07 17:45:51 213

原创 MySQL(8)---游标

上一遍博客写了有关存储过程的语法知识Mysql(7)---存储过程游标或许你在工作中很少用到,但用不到不代表不去了解它,但你真正需要它来解决问题的时候,再花时间去学习很可能会影响你的工作进度。注意:MySQL游标只能用于存储过程(和函数)。游标主要用于交互式应用。一、概述1、定义游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。接下来会对这句话做出进一步解释。2、游标的作用比如有这么个语句SELECT name,a.

2021-07-07 17:44:36 473

原创 MySQL(7)---存储过程

存储过程接下来会有三篇相关博客第一篇存储过程常用语法。 第二篇存储过程中的游标。 第三篇单独讲一个实际开发过程中复杂的真实的案例。一、概述1、什么是存储过程概述:简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;说明:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。2、优点提高代码的重用性 简化操作 减少了编译次数并且减少了和数据库服务器的连接次.

2021-07-06 17:10:38 248

原创 MySQL(6)---变量

这里学习变量主要是为后面学习存储过程和函数做铺垫。变量的分类系统变量: 全局变量 会话变量自定义变量: 用户变量 局部变量一、系统变量1、概述说明:变量由系统定义,不是用户定义,属于服务器层面。注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别。使用步骤:# 1、查看所有系统变量show global|【session】variables;# 2、查看满足条件的部分系统变量show glob

2021-07-06 17:09:47 69

原创 MySQL(4)---慢查询

简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。一、配置慢查询1、参数说明 slow_query_log: 慢查询开启状态(默认关闭)slow_query_log_file: 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限, 一般设置为MySQL的数据存放目录) long_query_time: 查询超过多少秒才记录(默认10秒)2.查看慢查询...

2021-07-02 17:29:50 71 1

原创 MySQL(3)---MySQL优化

一、单表、双表、三表优化1、单表 首先结论就是,range类型查询字段后面的索引全都无效(1)建表create table if not exists article( id int primary key auto_increment, author_id int not null, category_id int not null, views int not null, comments int not null, title ..

2021-07-02 17:28:05 265 1

原创 MySQL(2)---Explain

什么是explain 使用explain关键字,可以模拟优化器执行SQL语句查询,从而知道MySQL如果处理你的SQL语句,分析语句的性能瓶颈。explain 分析sql语句 使用explain关键字可以模拟优化器执行sql查询语句,从而得知MySQL 是如何处理sql语句。+----+-------------+-------+------------+------+---------------+-----+---------+------+------+--------...

2021-06-30 17:26:09 58

原创 MySQL(1)---索引

什么是索引? 索引是帮助Mysql提高获取数据的数据结构,换一句话讲就是“排好序的快速查找的数据结构”。一.索引的分类 MySQL主要的几种索引类型:1.普通索引、2.唯一索引、3.主键索引、4.组合索引、5.全文索引。 1.普通索引 是最基本的索引,它没有任何限制。 2.唯一索引 与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一 3.主键索引 ...

2021-06-30 17:25:35 99

原创 分库分表(7)--- SpringBoot+ShardingSphere实现分库分表 + 读写分离

这篇博客通过ShardingSphere实现分库分表 + 读写分离,并在文章最下方附上项目Github地址。一、项目概述1、技术架构项目总体技术选型SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)2、项目说明场景在实际开发中,如果数据库压力大我们可以通过分库分表的基础上进行读写分离,来减缓数据库压力。3、数据库设计分库ms单库分库分为 ms0库 和 ms1库。...

2021-06-29 10:34:14 234

原创 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离

这篇博客通过ShardingSphere实现分表不分库+读写分离,并在文章最下方附上项目Github地址。一、项目概述1、技术架构项目总体技术选型SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)2、项目说明场景在实际开发中,如果表的数据过大,我们可能需要把一张表拆分成多张表,这里就是通过ShardingSphere实现分表+读写分离功能,但不分库。3、数据库设计分表..

2021-06-29 10:33:20 334 1

原创 分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表

这篇博客通过ShardingSphere实现分库分表,并在文章最下方附上项目Github地址。一、项目概述1、技术架构项目总体技术选型SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)2、项目说明场景在实际开发中,如果表的数据过大我们需要把一张表拆分成多张表,也可以垂直切分把一个库拆分成多个库,这里就是通过ShardingSphere实现分库分表功能。3、数据库设计分库.

2021-06-28 15:16:55 138

原创 分库分表(4) ---SpringBoot + ShardingSphere 实现分表

有关分库分表前面写了三篇博客:1、分库分表(1) --- 理论2、分库分表(2) --- ShardingSphere(理论)这篇博客通过ShardingSphere实现分表不分库,并在文章最下方附上项目Github地址。一、项目概述1、技术架构项目总体技术选型SpringBoot2.0.6 + shardingsphere4.0.0-RC1 + Maven3.5.4 + MySQL + lombok(插件)2、项目说明场景在实际开发中,如果表的数据过大,我们可能.

2021-06-28 15:14:33 191 1

原创 分库分表(2) --- ShardingSphere(理论)

ShardingSphere在中小企业需要分库分表的时候用的会比较多,因为它维护成本低,不需要额外增派人手;而且目前社区也还一直在开发和维护,还算是比较活跃。但是中大型公司一般会选择选用 Mycat 这类 proxy 层方案,因为可能大公司系统和项目非常多,团队很大,人员充足,那么最好是专门弄个人来研究和维护 Mycat,然后大量项目直接透明使用即可。一、ShardingSphere概念1、概念ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Shard

2021-06-25 17:03:28 509 2

原创 分库分表(1) --- 理论

当一张表的数据达到几千万时,查询一次所花的时间会变长。业界公认MySQL单表容量在1千万以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。数据切分可以分为:垂直切分和水平切分。一、垂直切分垂直切分又可以分为:垂直分库和垂直分表。1、垂直分库概念就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图:说明一开始我们是单体服务,所...

2021-06-25 17:02:50 242 1

原创 springMVC(7)---表单标签

form标签作用 简单来讲form表单有两大作用 1:第一就是往后端提交数据或者前端回显数据时候,它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象。 2:第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等。接下来用案例来说话,看了很多博客,基本上都是用同一个实体来讲解,它确实很全面,我也用它来举例!第一步...

2021-06-24 17:28:37 122

原创 springMVC(6)---处理模型数据

之前一篇博客,写个怎么获取前段数据:springMVC(2)---获取前段数据,这篇文章写怎么从后端往前端传入数据。 模型数据类型 SpringMVC提供了以下几种途径输出模型数据:  –ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据  –Map及Model:入参为org.springframewor...

2021-06-24 17:26:10 184 1

原创 springMVC(5)---导入excel文件数据到数据库

上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库。上一篇链接:springMVC(4)---生成excel文件并导出 直接进入步骤讲解:第一步、导入jar包 第二步,创建Model对象 我没有把数据放到数据库中,而是导入到实体中,然后在后台打印public class Famil...

2021-06-23 17:30:30 334

原创 springMVC(4)---生成excel文件并导出

在开发过程中,需要将数据库中的数据以excel表格的方式导出。 首先说明。我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口,用来处理Excel对象。其实POI不仅仅只能处理excel,它还可以处理word、PowerPoint、Visio、甚至Outlook。 一.首先介绍利用POI如何生成excel。 首先在生成Excel前,我们需要理解一下Excel文件的组织形式。在POI中,是这样理解的:一个Excel文件对应一...

2021-06-23 17:26:47 844

原创 springMVC(3)---利用pdf模板下载

在实际开发中,很多时候需要通过把数据库中的数据添加到pdf模板中,然后供客户下载,那我们该如何中呢? 本文主要内容是:用java在pdf模板中加入数据,图片 直接举例: 第一步,对pdf模板添加文本域 使用Adobe Acrobat Pro软件,选择表单,就可以添加文本域很简单。这里也可以设置字体大小,是否换行等 第二步、pom文件导入相关jar包 ...

2021-06-23 17:25:05 211 1

原创 springMVC(1)---@RequestMapping详解

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。这句话,太熟悉了。一. RequestMapping路径详解 (1)首先springmvc.xml配置<!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework....

2021-06-21 16:17:53 389

原创 springMVC(2)---获取前段数据

首先说明,如果你学过Struts2,那么在学springMVC就会简单很多,我也不最基础的开始写了,我前篇文章搭建了个ssm框架,算是springmvc入门了。 链接:基于maven的ssm框架整合 一.有哪些绑定数据的注解: 1.@RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件; 2.@PathVariable,绑定URL模板变量值; 3.@CookieValue,...

2021-06-21 16:16:21 164

原创 基于maven的ssm框架整合

第一步:通过maven建立一个web项目。 第二步:pom文件导入jar包 (1) pom.xml 我把我pom文件整个都拷贝来了,有些初始化就有的东西你要去掉,保留你自己pom生成的那份。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www....

2021-06-21 16:13:23 379

原创 一腔热血!五面阿里P7,斩获offer,面试题总结好了!你会多少?

面试职位:Java后端开发工程师。在面试前三面真的有点急促,一周内就面完了三次面试,接着就开始无尽的等待,整整等了三周左右,终于完成了四面和HR面。整个过程还是比较曲折的,技术面试还是挺考察技术深度的。现在已拿到offer。面试问题如下:一面(主要看基础):先自我介绍,讲讲自己基础掌握情况,以及项目经历平时会用到哪些数据结构?链表和数组的优缺点?解决hash冲突的方法有哪些?讲讲自己对HashMap的理解,以及和Weakhashmap的区别?你刚才讲的是JDK1.

2021-06-21 14:18:18 237

原创 SpringBoot(20)---断言(Assert)

我们在写单元测试的时候,除了接口直接抛异常而导致该单元测试失败外,还有种是业务上的错误也代表着该单元测试失败。好比我们在测试接口的时候,该接口返回是1代表成功,如果是0那就代表是失败的,这个时候可以考虑使用断言。一、原理我们知道,我们可以通过断言来校验测试用例的返回值和实际期望值进行比较,以此来判断测试是否通过。那我们先来看下如果失败的情况下它的流程是怎么样的。对于断言而言,如果是错误最终都会进入下面的方法 static public void fail(String messa

2021-06-19 10:59:13 1685 2

原创 SpringBoot(19)---SpringBoot整合Apollo

这篇文章分为两部分:1、跟着官网步骤,快速搭建apollo环境。2、SpringBoot整合apollo,实现配置中心。一、Apollo快速搭建apollo环境的搭建主要参考官方文档,我们就直接一步一步跟着官方文档来1、下载Quick Start安装包下载apollo-build-scripts项目2、创建数据库之前有说过,apollo会有两个数据库:ApolloPortalDB和ApolloConfigDB创建ApolloPortalDB创建ApolloC...

2021-06-19 10:58:29 427

原创 SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器

在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在。那这篇博客主要分为三部分:1、几种方式判断当前key是否存在的性能进行比较。2、Redis实现布隆过滤器并批量插入数据,并判断当前key值是否存在。3、针对以上做一个总结。一、性能对比主要对以下方法进行性能测试比较:1、List的 contains 方法2、Map的 containsKey 方法3、Google布隆过滤器 mightContain 方法前提准备在SpringBoot项目启动的时候,向

2021-06-19 10:57:38 379

原创 SpringBoot(17)---SpringBoot整合RocketMQ

这篇在上篇搭建好的基础上,将SpringBoot整合RocketMQ实现生产消费。一、搭建步骤先说下技术大致架构SpringBoot2.1.6 + Maven3.5.4 + rocketmq4.3.0 + JDK1.8 +Lombok(插件)1、添加rocketmq包 <!--注意: 这里的版本,要和部署在服务器上的版本号一致--> <dependency> <groupId>org.apach..

2021-06-19 10:56:51 341

原创 SpringBoot(16)—@ConditionalOnBean与@ConditionalOnClass

上一篇讲的@Conditional可以通过条件控制是否注入Bean,这篇讲下有关Bean其它几个常用的注解使用方式@ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean@ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化当前Bean@ConditionalOnClass // 当给定的类名在类路径上存在,则实例化当前Bean@ConditionalOnMissingClass // 当给

2021-06-19 10:55:27 376

原创 SpringBoot(15)—@Conditional注解

作用@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean。一、概述1、@Conditional注解定义@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional { Class<? extends Condition>.

2021-06-18 16:41:04 121

原创 SpringBoot(14)—注解装配Bean

SpringBoot装配Bean方式主要有两种通过Java配置文件@Bean的方式定义Bean。 通过注解扫描的方式@Component/@ComponentScan。一、当前项目装配Bean创建项目名称为create-bean。1、@Component方式@Component("componentBean")public class ComponentBean { private String type = "@Component实例化bean"; public S

2021-06-18 16:40:21 231

原创 SpringBoot(13)---整合Druid实现多数据源和可视化监控

Druid的优点很明显,它的可视化界面可以监控Sql语句和URI执行情况在开发中真的很需要。先说优点吧: 1) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 2) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。 3) 可以监控数据库访问性能,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 4) SQL执行日志,Druid提供了不同的LogFilter,监控你应用的数据库

2021-06-18 16:39:32 756

原创 springBoot(12)---整合Swagger2

随着互联网技术的发展,一般开发都是前后端分离,那么前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,有在confluence上写的,有在对应的项目目录下readme.md上写的,每个公司都有每个公司的玩法,无所谓好坏。但都有一个很大的诟病就是,如果你的接口改动了,那你必须记得去改你的API文档,而Swagger并不需要。swagger就是一款让你更好的书写API文档的框架。一、

2021-06-18 16:38:37 229

原创 ElasticSearch(2)---SpringBoot整合ElasticSearch

一、基于spring-boot-starter-data-elasticsearch整合开发环境:springboot版本:2.0.1,elasticSearch-5.6.8.jar版本:5.6.8,服务器部署ElasticSearch版本:6.3.21、application.propertiesspring.data.elasticsearch.cluster-name=elasticsearchspring.data.elasticsearch.cluster-nodes=127.0.

2021-06-17 16:38:27 282 1

原创 springBoot(11)---整合Active消息队列

简单理解: Active是Apache公司旗下的一个消息总线,ActiveMQ是一个开源兼容Java Message Service(JMS) 面向消息的中件间. 是一个提供松耦合的应用程序架构. 主要用来在服务与服务之间进行异步通信的。一、搭建步骤 1、相应jar包 <!-- 整合消息队列ActiveMQ --> <dependency> <groupId>or...

2021-06-17 16:37:39 340 1

原创 springBoot(10)---logback日志

一、概述 和log4j优点: 实际上,这两个日志框架都出自同一个开发者之手,Logback 相对于 Log4J 有更多的优点 (1)logback不仅性能提升了,初始化内存加载也更小了。 (2)内容更丰富的文档 (3)更强大的过滤器二、步骤1、maven配置jar包 logback默认就在spring-boot-starter-web包中,所以我们只要有spring...

2021-06-17 16:35:44 121

原创 springBoot(9)---定时任务,异步任务

一、定时任务1、步骤: 1:在启动类上写@EnableScheduling注解 2:在要定时任务的类上写@component 3:在要定时执行的方法上写@Scheduled(fixedRate=毫秒数)。2、示例 主类@SpringBootApplication@EnableScheduling //开启定时任务public class MainApplication { public sta...

2021-06-17 16:34:14 102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除