![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
架构路上
热爱技术,望有朝一日能作技术路上的指路人。
展开
-
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 · 206 阅读 · 0 评论 -
码云配置Git,生成公钥
# 生成的ssh会在当前目录下ssh-keygen -t rsa -C "xxxxx@xxxxx.com" #你的邮箱号 #三次回车即可生成 ssh key# 在home目录查看公钥cat ~/.ssh/id_rsa.pub# 查看是否配置 okssh -T git@gitee.com原创 2021-03-28 14:19:13 · 85 阅读 · 0 评论 -
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 · 208 阅读 · 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 · 1664 阅读 · 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 · 206 阅读 · 0 评论 -
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 · 1806 阅读 · 0 评论 -
线上问题集锦(1)
记录线上环境碰到的问题:新版本上线如何切换版本?原创 2020-11-17 13:40:00 · 269 阅读 · 0 评论 -
springboot 连接kafka报错 java.net.UnknownHostException: xxxx
springboot 连接kafka报错java.net.UnknownHostException: 189a23b8361badvertised.listeners=PLAINTEXT://主机ip:9092原创 2021-02-21 23:13:00 · 1616 阅读 · 0 评论 -
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 · 104 阅读 · 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 · 188 阅读 · 0 评论 -
springcloud系列(一)--迭代过程
功能点初期版本-单体应用改造 -> 抗压维度商品发布:新店开张,瞬间发布10w产品(频率低,瞬时流量高)改造 -> 拆分业务维度(将不同业务拆分)改造方向全貌原创 2021-02-17 15:24:29 · 154 阅读 · 0 评论 -
分布式限流(五)限流算法探秘
在资源有限的情况下,遇到突发流量(如双十一)或系统 RT 剧增,为了保证系统不被拖垮引起更大规模的雪崩,必须进行限流。也就是说限流是系统的自我保护。限流本质上是根据系统处理能力,限制单位时间内处理的请求数量。滑动窗口这里的窗口是一个时间窗口,比如把一分钟划分为 6 个窗口,则每个窗口的时间范围是 10 秒。通过移动窗口,统计窗口期内流量,可以实现窗口期的限流。但是滑动窗口存在精度问题,在精度范围内统计到的窗口期流量可能在限流范围内,但进一步细分就会看到仍有突增流量。滑动窗口时间范围越小,就越平滑,限流原创 2021-02-17 12:47:45 · 282 阅读 · 0 评论 -
分布式限流(4)要注意的问题
分布式限流要注意的问题1. 为什么需要匀速限流为什么令牌需要匀速发放?我们做这样一个场景假设,在某个限流策略中我们设置了10r/s(每秒十个请求)的限流速率,在令牌桶算法的实现中,令牌生成器每秒会产生10个新令牌放入令牌桶。Guava的RateLimiter采用了一种“匀速”的策略生成令牌,也就是说,这10个令牌平均分到1秒钟的时间窗口中生成,每0.1秒产生一个令牌。如果在这一秒来了10个请求,这些请求会在一秒钟以内匀速消化掉。假如我们不采用匀速发放,而是采用一把梭的模式发令牌,在每一秒开始的时候把原创 2021-02-17 12:40:48 · 191 阅读 · 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 · 755 阅读 · 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 · 371 阅读 · 0 评论 -
分布式限流(二)之 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 · 177 阅读 · 0 评论 -
分布式限流(一)之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 · 694 阅读 · 0 评论 -
java接口幂等性设计
幂等性用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。发生幂等性问题的原因:网络问题/用户误操作/恶意操作,用户点击多原创 2021-02-14 22:22:26 · 712 阅读 · 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 · 919 阅读 · 0 评论 -
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 · 958 阅读 · 0 评论 -
java实现zookeeper分布式锁
Curator原创 2021-02-13 12:11:43 · 1257 阅读 · 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 · 990 阅读 · 5 评论 -
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 · 1619 阅读 · 0 评论 -
常用正则表达式
常用正则表达式只能输入数字:"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 阅读 · 0 评论 -
发送邮件springboot-stater-mail
mail: username: 275554701@qq.com password: host: smtp.qq.com port: 25# 这个配置解决 阿里云等邮件无法发送问题 properties: mail: smtp: ssl: enable: true/** * 邮件接口 * * @author 贺峥 */public interface IMailBizSe原创 2021-01-12 17:56:12 · 332 阅读 · 0 评论 -
线上问题集锦(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 · 452 阅读 · 0 评论 -
JUC--ReetrantLock原理及源码分析(一)之相关概念
互斥锁/共享锁重入锁阻塞队列临界点 -> 插队现象公平锁/非公平锁interrupt 传递CAS(Compare And Swap)比较和交换可见性 volatile原子性 cas()操作有序性 缓存锁(MESI),总线锁原创 2020-12-13 22:08:35 · 224 阅读 · 0 评论 -
springboot动态注册Web三大组件(注解方式/代码方式)
1. 注解方式注册(1)注册 Servlet@WebServlet(name = "customServlet",urlPatterns = {"/custom"})public class CustomServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOExcep原创 2020-12-11 21:14:37 · 419 阅读 · 0 评论 -
ES重建索引,数据迁移(_reindex)
场景:当索引发生变化的时候,比如领导要求对字段a进行分词,我们可以使用该功能,新建一个索引将数据迁移过去,删掉原索引,再根据场景新建,将数据迁移回来就????了。// 1. 将数据迁移到新的索引POST _reindex{ "source": { "index": "old_index" }, "dest": { "index": "new_index" }}// 2. 删除老索引DELETE /old_index// 3. 新建索引并设置mapping原创 2020-12-11 21:12:58 · 1372 阅读 · 0 评论