自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql关键字执行顺序

mysql关键字执行顺序where > group by > 聚合函数(sum,avg,count等) > having > order by > limit加上group by 就能够计算不同 dsdm的count值,说明是先分组,再根据分组count求值。

2021-06-09 10:27:10 245

原创 springboot mockMvc单元测试

mockMvc配置public class TestApplication { @Autowired private WebApplicationContext context; @Bean public MockMvc setup() { return MockMvcBuilders.webAppContextSetup(this.context).build(); }}@RunWith(SpringRunner.class)@Spri

2021-06-03 14:17:51 200

原创 mybatis源码阅读(五) 之 mapper接口的执行流程

最终调用的是包装后的MapperMethod的execute()。

2021-05-26 18:16:32 299

原创 mybatis源码阅读(四) 之 mapper接口到底是什么?

MapperStatement怎么跟Dao接口对应回到之前的部分,在我们注入mapper接口时,我们会调用MapperFactoryBean的getObject()方法,且往下看:@Overridepublic T getObject() throws Exception { return getSqlSession().getMapper(this.mapperInterface);}public SqlSession getSqlSession() { return this.sqlS

2021-05-26 18:15:22 322

原创 mybatis源码阅读(二) 之 mapper接口为什么能被@Autowired注入?

mapper接口为什么能被@Autowired注入?紧接上文mybatis源码阅读(一)之mybatis在springboot中的入口上文聊到扫描出mapper接口,并生成BeanDefinition注册到spring容器中。众所周知,spring在初始化bean的时候,要么是反射调用构造方法,要么是使用FactoryBean去getObject()。在我们编写的业务代码中并没有实现mapper接口,所以这里必然是使用后者。下面进入正文:ClassPathMapperScanner#doScan(

2021-05-25 17:56:41 1960 1

原创 mybatis源码阅读(三) 之SqlSessionFactory是如何被初始化的?

SqlSessionFactory是如何被初始化的?

2021-05-25 17:53:58 392

原创 mybatis源码阅读(一) 之 springboot入口

文章所使用容器为springboot。1.mybatis入口入口一 MybatisAutoConfiguration:如果上下文中不存在MapperScannerConfigurer.class,则加载MybatisAutoConfiguration.AutoConfiguredMapperScannerRegistrar.class,该类实现了spring的ImportBeanDefinitionRegistrar接口,会在容器初始化阶段调用registerBeanDefinitions方法,注册M

2021-05-25 15:30:11 686 1

原创 k8s学习()之K8S中遇到的各种问题

k8s node节点无法执行kubectl命令The connection to the server localhost:8080 was refused - did you specify the right host or port?# 1.在master节点复制admin.conf到从节点相同位置scp /etc/kubernetes/admin.conf [email protected]:/etc/kubernetes/# 2. export 环境变量echo "export KUB

2021-04-26 22:46:29 216

原创 k8s学习(一)之从零搭建K8S环境方式(2)

1.安装docker-ce 18.09.9(所有机器)# 安装docker所需的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置阿里云的docker源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 指定安装这个版本的docker-ce yum install

2021-04-25 11:47:31 145

原创 k8s学习(一)之从零搭建K8S环境方式(1)

K8S在线适用网页版https://labs.play-with-k8s.com/1.准备更新并安装依赖yum -y updateyum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp安装docker`docker 依赖`yum install -y yum-utils device-mapper-persistent-data lvm2# `添加软件源信息`sudo yum-conf

2021-04-25 11:16:13 312

原创 码云配置Git,生成公钥

# 生成的ssh会在当前目录下ssh-keygen -t rsa -C "[email protected]" #你的邮箱号 #三次回车即可生成 ssh key# 在home目录查看公钥cat ~/.ssh/id_rsa.pub# 查看是否配置 okssh -T [email protected]

2021-03-28 14:19:13 84

原创 String intern()的作用(jdk1.7+)

先看示例:public void test1() { System.out.println("================="); char[] chars = new char[]{'a', 'b'}; String s1 = new String(chars); System.out.println(s1.intern() == s1); String s2 = "ab"; System.out.println(s1 == s2); Syst

2021-03-05 13:33:28 206 4

原创 跳出多层嵌套for循环(跳出指定for循环)

跳出多层嵌套for循环 public static void main(String[] args) {// 给for循环取名 break for名称 跳出指定for循环; for1: for (int i = 0; i < 3; i++) { System.out.println("for1 " + i); for2: for (int j = 0; j < 3

2021-03-04 13:31:36 1635 1

原创 springcloud系列(零)之父项目搭建(非parent方式)

parent方式1. 使用spring Initializer创建父项目pom.xml文件如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P

2021-03-02 19:31:22 200

原创 swagger-ui多个包路径扫描匹配(多注解匹配)的改造支持

多个包扫描路劲匹配package com.gponline.crm.web.config;import com.google.common.base.Predicates;import com.gponline.crm.web.utils.ConfigUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;impo

2021-02-27 20:47:01 1790

原创 springboot 连接kafka报错 java.net.UnknownHostException: xxxx

springboot 连接kafka报错java.net.UnknownHostException: 189a23b8361badvertised.listeners=PLAINTEXT://主机ip:9092

2021-02-21 23:13:00 1596

原创 springcloud系列(一)之Eureka服务发现和注册

Eureka服务注册中心<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.2.5.RELEASE</version></dependency>spring:

2021-02-21 11:47:07 102 1

原创 Google Guice 轻量级依赖注入框架的简单使用

Guice依赖<dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>4.1.0</version></dependency>注解方式@ImplementedBy(ApiImpl.class)public interface Api { void

2021-02-21 11:17:21 183

原创 springcloud系列(一)--迭代过程

功能点初期版本-单体应用改造 -> 抗压维度商品发布:新店开张,瞬间发布10w产品(频率低,瞬时流量高)改造 -> 拆分业务维度(将不同业务拆分)改造方向全貌

2021-02-17 15:24:29 150

原创 分布式限流(五)限流算法探秘

在资源有限的情况下,遇到突发流量(如双十一)或系统 RT 剧增,为了保证系统不被拖垮引起更大规模的雪崩,必须进行限流。也就是说限流是系统的自我保护。限流本质上是根据系统处理能力,限制单位时间内处理的请求数量。滑动窗口这里的窗口是一个时间窗口,比如把一分钟划分为 6 个窗口,则每个窗口的时间范围是 10 秒。通过移动窗口,统计窗口期内流量,可以实现窗口期的限流。但是滑动窗口存在精度问题,在精度范围内统计到的窗口期流量可能在限流范围内,但进一步细分就会看到仍有突增流量。滑动窗口时间范围越小,就越平滑,限流

2021-02-17 12:47:45 279

原创 分布式限流(4)要注意的问题

分布式限流要注意的问题1. 为什么需要匀速限流为什么令牌需要匀速发放?我们做这样一个场景假设,在某个限流策略中我们设置了10r/s(每秒十个请求)的限流速率,在令牌桶算法的实现中,令牌生成器每秒会产生10个新令牌放入令牌桶。Guava的RateLimiter采用了一种“匀速”的策略生成令牌,也就是说,这10个令牌平均分到1秒钟的时间窗口中生成,每0.1秒产生一个令牌。如果在这一秒来了10个请求,这些请求会在一秒钟以内匀速消化掉。假如我们不采用匀速发放,而是采用一把梭的模式发令牌,在每一秒开始的时候把

2021-02-17 12:40:48 186 3

原创 分布式限流(三)之 redis + lua 限流

redis + lua 脚本实现分布式限流redis环境搭建,请自行百度。windows搭建lua环境,参考链接:https://blog.csdn.net/weixin_41725792/article/details/113827606redis内置了lua解释器,我们在redis中可以使用redis 关键字 eval 运行Lua代码,如下:# eval 关键字# 脚本" return { KEYS[1],ARGV[1]} " # 2 参数个数# 参数 K1 K2 ,值 V1 V2eva

2021-02-16 23:30:52 750 3

原创 Lua的介绍和基本用法

环境搭建windows lua下载地址: https://github.com/rjpcomputing/luaforwindows/releases安装lua环境打开以上文件,直接下一步即可。Idea安装EmyLua插件我的idea版本是2019.1.1在线安装 。file -> settings -> plugins -> 搜索 emmaluaidea直接搜索。去 emmalua 官网 https://plugins.jetbrains.com/plugin/

2021-02-16 20:51:54 367

原创 分布式限流(二)之 Nginx 限流

Nginx之 IP 限流(限制同一ip单位时间访问数)# $binary_remote_addr 关键字 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址# zone=iplimit:20m 名叫iplimit的内存区域,大小为20兆 (用来记录访问频率信息)# rate=1r/s 每秒放行一个请求 rate=100r/m 每分钟放行100个 limit_req_zone $binary_remote_addr zone=iplim

2021-02-15 21:56:33 175

原创 分布式限流(一)之google单机限流

google - guava<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <group

2021-02-15 20:28:59 691

原创 java接口幂等性设计

幂等性用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。发生幂等性问题的原因:网络问题/用户误操作/恶意操作,用户点击多

2021-02-14 22:22:26 704 1

原创 sharding-jdbc自定义分片策略

UUIDspring.shardingsphere.datasource.names=db0,db1# 数据源 db0 配置spring.shardingsphere.datasource.db0.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.db0.driver-class-name=com.mysql.cj.jdbc.Driver# 注意 这里不是以前的urlspring.shardings

2021-02-14 19:57:18 911

原创 springboot - sharding-jdbc配置以及注意点

springboot 配置文件spring.shardingsphere.datasource.names=db0,db1# 数据源 db0 配置spring.shardingsphere.datasource.db0.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.db0.driver-class-name=com.mysql.cj.jdbc.Driver# 注意 这里不是以前的urlsprin

2021-02-14 16:15:28 947

原创 java实现zookeeper分布式锁

Curator

2021-02-13 12:11:43 1256 1

原创 redis分布式锁

redissonredisson和下列一下自行封装两种方式的区别(场景):redisson未获取到锁的会进入等待,直到获取到锁。另外两种方式如果未获取到锁,会放弃,不会执行业务代码。@Autowiredprivate Redisson redisson;@GetMapping("/redissonLock")public String redissonLock() { log.info("进入了方法"); RLock lock = redisson.getLock("re

2021-02-12 20:37:47 986 5

原创 keepalived + haproxy + mycat + mysql搭建高可用

1.安装Mysql链接2.安装Mycat链接3.安装haproxyyum install -y haproxy#配置vim /etc/haproxy/haproxy.cfg

2021-02-12 16:55:05 2312 3

原创 mysql主从配置

1、主从库配置my.conf# 找到配置文件位置whereis my.cnf# 进入目录cd ...# 编辑配置文件vim my.cnf# 添加 配置 log-bin server-id(默认是1)# 主log-bin=mysql_log_binserver-id=1#从server-id=2# 重启service mysqld restart2、主库创建账号并授权mysql -uroot -pcreate user 'replication'@'%' id

2021-02-08 13:06:09 183

原创 docker 安装mysql

docker安装mysql# 拉取mysqldocker pull mysql# 查看mysql版本docker inspect mysql# 运行mysql 密码123456 端口3306 docker run --name mysql -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 --privileged=true mysql解决navicat连接mysql8 密码不对问题:navicat连接mysql8报错...

2021-02-07 15:36:01 219

原创 解决navicat 连接mysql8 密码报错问题

Navicatmysql8的密码加密方式跟以前不太一样,而navicat使用老的加密方式。-- 创建新用户 da %代表所有Ip 使用老的加密方式 密码为 da@123456create user 'da'@'%' identified with mysql_native_password by 'da@123456'; -- ''-- 授权grant all on *.* to 'da'@'%';-- 刷新配置flush privileges;...

2021-02-07 14:50:47 545 1

原创 垂直拆分/水平拆分,解决方案

1.垂直拆分单个数据库最大连接数是151,可以通过 show variables like ‘max_connections’ 查看。随着用户量越来越大,单个数据库已经无法支撑系统正常使用。这个时候我们就需要对数据库层面进行优化。假设我们现在有订单,用户,商品等功能。我们可以对其进行垂直拆分。垂直拆分:将不同的业务拆分到不同数据库中。降低业务对统一数据库的压力。注意:禁止跨库 join 查询。(非常影响性能)优点:1.拆分后业务清晰,拆分规则明确。2.系统之间容易扩展和整合。进行

2021-02-07 14:26:02 734

原创 分布式锁解决方案

Redis分布式锁1. 使用setNX 命令 + 过期时间 + lua脚本为什么要使用lua脚本?如果A程序执行过长,该key已经过期,当A执行完可能释放B的锁。图解如下:lua脚本if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1])else return 0 end mysql作为分布式锁**原理:**利用mysql innodb的行锁。select * from

2021-02-04 22:20:59 210

原创 springboot Transaction事务的手动版(编程式事务)和自动版(声明式事务)

1.spring管理的 自动 @Transaction() 声明式事务@Transaction(rollback=Exception.class)public synchronized void test(){// 查询订单数量 queryProductCount();// 判断订单是否>0 if(){ throw Exception(); }// 更新库存 update();// 插入一条订单数据 insert();}CountDownLatch countDo

2021-02-03 21:56:30 1609

原创 常用正则表达式

常用正则表达式只能输入数字:"1KaTeX parse error: Undefined control sequence: \d at position 17: …。 只能输入n位的数字:"^\̲d̲{n}"。只能输入至少n位的数字:"^\d{n,}KaTeX parse error: Undefined control sequence: \d at position 20: …只能输入m~n位的数字:。"^\̲d̲{m,n}"只能输入零和非零开头的数字:"^0|[1-9][0-9]KaTeX

2021-01-19 16:09:42 173

原创 发送邮件springboot-stater-mail

mail: username: [email protected] password: host: smtp.qq.com port: 25# 这个配置解决 阿里云等邮件无法发送问题 properties: mail: smtp: ssl: enable: true/** * 邮件接口 * * @author 贺峥 */public interface IMailBizSe

2021-01-12 17:56:12 326

原创 线上问题集锦(2)

mysql and 和 or为什么会导致性能差别巨大?select t1.* from t_user t1, t_student_info t2 where t1.user_unique_code = t2.uu_id and ( t1.user_name like '%谭%' or t2.student_no like '%谭%' or t2.company like '%谭%' ) ORDER BY t1.create_time desc select t1.* from

2020-12-31 01:47:59 451

空空如也

空空如也

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

TA关注的人

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