- 博客(87)
- 收藏
- 关注
原创 自定义线程池工具类
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.concurrent.*;/** * 线程池工具类(单例) */public class MyThreadPoolUtils<T> { private static final Logger LOGGER = LoggerFactory.getLogger(MyThreadPoolUtils.class); // 等待队
2022-02-03 00:24:27
10024
原创 JAVA IO操作笔记
目录1 文件1.1 文件常用操作1.1.1 创建文件1.1.2 获取文件信息1 文件文件在程序中以流的形式来操作的,输入流 与 输出流 中的 输入与输出针对的是内存。File继承关系1.1 文件常用操作1.1.1 创建文件 /** * 创建文件 方法1 * <p> * new File(String pathname) */ @Test public void createFile_test01() {
2022-01-30 17:53:50
1213
原创 Spring Boot 整合 Mybatis 实现 Druid 多数据源配置
目录1 多数据源的应⽤场景2 数据库脚本3 项目结构4 代码依赖 pom.xml配置文件数据源配置类实体类sql映射文件daosrvicecontroller启动类5 小节1 多数据源的应⽤场景当业务数据量达到了⼀定程 度,DBA 需要合理配置数据库资源。即配置主库的机器⾼配置,把核⼼⾼频的数据放在主库上;把次要的数据放在从库,低配置。开源节流嘛,就这个意思。把数据放在不同的数据库⾥,就需要通过不同的数据源进⾏操作数据。这⾥我们举个 springboot-mybatis-mutil-datasour
2022-01-27 23:39:44
3104
转载 蓝绿发布、滚动发布、灰度发布,有什么区别?
目录01、蓝绿发布02、滚动发布03、灰度发布04、A/B测试在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。举一个情景例子, 你负责的项目要上线, 现在新版本较原来的老版本有很大的改变, 涉及到服务架构、前端UI等等, 经过测试功能没有障碍, 那么这时候如何让用户切换到新的版本呢?显而易见, 第一次发布的应用是没有所谓的这个问题的, 这种如何发布的思考只会出现在后面的版本迭代中。01、
2021-12-05 19:08:25
3700
1
原创 JAVA stream流详细教程
目录1、什么是流2、如何生成流3、流的操作类型3.1、中间操作3.2、终端操作4、流的使用4.1 中间操作filter 筛选distinct 去重limit 返回指定流个数skip 跳过流中的元素map 流映射flatMap 流转换allMatch 匹配所有元素anyMatch匹配其中一个noneMatch全部不匹配4.2 终端操作count 统计流中元素个数findFirst 查找第一个findAny 随机查找一个reduce 将流中的元素组合min/max 获取最小最大值sum / summingxxx
2021-10-25 00:02:46
41851
7
转载 常用的设计模式:动态代理
目录![在这里插入图片描述](https://img-blog.csdnimg.cn/3d94ffc6de464ae2843ee0849209f70c.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/8556e9ca957449c9953b07081d54b8f2.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/567c850eb5b6412194f458d283d3bf81.png)...
2021-09-27 02:36:09
282
原创 springboot 中动态切换数据源(多数据源应用设计)
目录数据库项目结构启动类entitycontrollerservicemapper配置文件线程上下文 (DataSourceHolder)动态数据源 DynamicDataSource数据源配置AOP测试验证最近在做一个租户隔离的项目,要求不同租户数据放入不同的数据库实现物理隔离,涉及到多个数据库的应用,除了使用数据库中间件,还想到了一个不错的解决方案,就是动态切换当前请求线程的数据源。所以写篇文章来记录一下。本文使用了 springboot + mybatis-plus项目源码可以参考https
2021-09-26 01:17:36
5026
原创 Spring Boot + Redis 实现 API 接口防刷
目录项目结构添加依赖:pom.xml修改配置文件定义防刷注解:AccessLimit定义MVC拦截器 FangshuaInterceptor(核心)添加配置类controller接口上使用防刷注解演示效果项目结构添加依赖:pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redi
2021-08-15 18:27:13
369
原创 Spring Session 实现分布式环境下session共享问题
目录http请求是无状态的问题session 原理分布式环境下,session丢失问题(无法共享问题)session会话共享解决方案1 nginx方案2. tomcat方案3 Spring Session + Redis (推荐)http请求是无状态的问题http请求是无状态的,用户免登录等问题需要记录用户登录状态(即需要请求有状态),为了解决这个问题引入了 浏览器端的cookie 和 服务器端的session这里要引入一个概念sessionid,session对象当客户端首次访问时,创建一个新的
2021-08-15 00:32:21
779
原创 Go 根据 数据库中表字段/Json 快速生成结构体
当需要使用数据库查询,或者调用第三方接口返回json数据时,是不是经常需要自定义struct 结构体进行映射。但是在定义golang结构体的时候是不是会感觉特别浪费时间,而且还经常会应为大意而导致出错?那么接下来的两个工具将会为你的结构体定义提供“革命性”的解决方法;1 JSON-To-Stuct 工具生成JSON数据映射的结构体在线工具 https://mholt.github.io/json-to-go/这个在线工具使用起来非常简单,只需要将JSON数据粘贴在左边,就会在右边自动成生成对应
2021-08-09 00:00:17
4563
原创 springboot 统一异常处理
0 问题在日常开发中你是否遇到过这样的问题:当程序出现异常响应给前端的数据格式不是你预期想要的如图所示:为了返回统一的响应格式,每次代码中都需要手动捕获异常,然后返回统一格式,写法可能会是这样:import lombok.extern.slf4j.Slf4j;@Slf4j@RestControllerpublic class EmployeeController { @GetMapping("testCustomException/{num}") @TraceLog
2021-07-10 00:54:18
358
1
原创 springboot整合logback 打印日志文件、定制日志格式
1 实现第一步:在resources路径下创建日志的配置文件 logback-spring.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan :此属性设置为true时,配置文件发生改变,将
2021-07-10 00:32:57
1391
2
原创 ThreadLocal 的使用心得
目录1.ThreadLocal 介绍2.ThreadLocal 的API2.1 ThreadLocal 核心方法:2.2 ThreadLocal 初始化:initialValue()2.3 ThreadLocal 初始化:withInitial()3 使用场景3.1 场景一:ThreadLocal 实现时间格式化3.2 场景二:跨类传递数据4 总结1.ThreadLocal 介绍ThreadLocal 从字面的意思来理解是线程本地变量的意思,也就是说它是线程中的私有变量,每个线程只能使用自己的变量。
2021-05-20 16:04:33
1223
1
原创 SpringBoot 集成 WebSocket 实现服务端消息主动推送
目录1 什么是websocket?2 使用Springboot开始整合webSocket3 前端websocket客户端4 测试验证项目中用到了websocket进行大屏数据实时获取,今天写个聊天室demo来进行总结;1 什么是websocket?WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道,既然是全双工,就说明了服务器可以主动发送信息给客户端。这与 推送技术 或者是 多人在线聊天 的功能不谋而合。为什么不使用HTTP 协议呢?这
2021-05-20 13:35:33
9685
10
原创 请求跨域 CORS policy: No ‘Access-Control-Allow-Origin‘
这里写目录标题1 跨域和同源2. CORS 跨域资源共享(解决跨域)2.1 前端解决(不推荐)2.2 Nginx 解决跨域2.3 tomcat 解决跨域2.4 SpringBoot 服务解决跨域3 总结如在浏览器控制台看到类似于下边的报错,则是出现了跨域请求问题 xxx has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the request resouce在和前端打交道的时
2021-05-19 17:05:56
9287
4
原创 SimpleDateFormat的线程安全问题 及NumberFormatException异常
SimpleDateFormat在多线程环境下的的线程安全问题错误代码示例测试代码如下:import java.text.SimpleDateFormat;public class SimpleDateFormatTest { private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(
2021-05-10 14:53:24
831
1
原创 Maven 排除不需要打包的文件
在开发项目时,为了开发、测试方便,系统会有多套配置文件,当项目打包的时候,即使测试环境在启动项目时指定配置文件,仍然可能会存在各种问题,因此最好的办法就是在打包项目时,将这些配置文件全部排除在外。官方文档中给出了解决方法。官方参考文档:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html.<project> ... <build> <plugins&g
2021-05-08 13:39:41
3863
2
原创 JUC动画教程-Java多线程官方教程
大货在学JUC时有没有觉得抽象难懂呢?今天在看官网的时候发现了一和神奇的功能,官网竟然提供了JUC包对应的动画教程。赶紧的来看一下吧!下载官网地址:链接: https://docs.oracle.com/javase/tutorial/essential/concurrency/further.html.激动的心,颤抖的手!终于下完了,赶紧来试一下吧!启动:java -jar javaConcurrentAnimated.jar启动后你会看到这个 swing 界面简单地看下 Syn
2021-05-03 13:43:45
258
原创 IDEA快捷键
目录1 快速生成代码1.1 快速生成main()1.2 快速生成 System.out.println()1.3 添加类中常用方法的添加1.4 包装代码块,如try catch 等1.5 抽取代码到函数1.6 大小写切换2 快速删除2.1 删除一行2.2 删除未使用的 import3 快速查找4 快速切换4.1 切换tab5 代码提示与查看5.1 查看方法的参数5.2 查看类的继承关系5.3 列出当前类中的方法整理了一部分自己常用的快捷键,希望对大家有用,大家如果有啥实用的快捷键可以留言进行补充,一起提
2021-05-03 09:52:25
152
2
原创 angular整合ngx-echarts运行时报错 NullInjectorError: No provider for InjectionToken NGX_ECHARTS_CONFIG!
1 问题描述今天在使用angular整合echarts做图标展示的时候,编译没有问题,但是运行时遇到了以下错误:core.js:6210 ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(DragEchartsModule)[InjectionToken NGX_ECHARTS_CONFIG -> InjectionToken NGX_ECHARTS_CONFIG -> InjectionToken
2021-04-26 14:13:02
1703
1
原创 使用ulisesbocchio对spring-boot项目properties.yml(bootstrap.yml)配置文件加密
Spring-boot项目中properties文件中的密码明文上传到公开的远程仓库后,不安全,可以使用Ulisesbocchio对配置文件进行加密1.添加maven依赖:<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</v
2021-04-23 10:34:00
2501
转载 Hystrix 的两种隔离方式
hystrix 隔离模式目前有两种方式:信号量 模式和 线程池 模式。1 为什么进行线程隔离hystrix的一项核心功能,就是所谓的资源隔离,资源隔离要解决的最核心的问题,就是将多个依赖服务的调用分别隔离到各自的资源池内。避免对某一个依赖服务的调用,因为依赖服务的接口调用的延迟或者失败,导致服务所有的线程资源全部耗费在这个服务的接口调用上。一旦某个服务的线程资源全部耗尽的话,可能就导致服务就会崩溃,甚至说这种故障会不断蔓延hystrix,资源隔离提供了两种技术:1.线程池 资源隔离2.信号量
2021-04-21 19:12:17
1824
原创 Node.js 代理导致的报错问
npm install 时 会报以下错误,npm其他指令可以正常运行:npm ERR! FetchError: request tohttps://registry.npm.taobao.org/vue-loader failed, reason: connectECONNREFUSED 127.0.0.1:1181一、先查看目前npm配置:npm config list是否如下所示:二、如果配置与上图不同需要进行以下配置:将源设置为淘宝源:npm config set re
2021-04-20 13:59:28
12112
1
原创 数据库字段为什么要使用NOT NULL
目录1 对程序的影响2 对查询结果的影响2.1 聚合函数count()不准确2.1 = 与 != 失效2.3 NULL与其他值运算结果为NULL2.4 对distinct、group by、order by等排序结果的影响3 对索引的影响4 对存储空间的影响目前大部分的开发都会把字段全部设置成NOT NULL并且给默认值。通常,对于默认值一般这样设置:整形,我们一般使用0作为默认值。字符串,默认空字符串时间,可以默认1970-01-01 08:00:01,或者默认 0000-00-00 0
2021-04-12 16:36:12
8742
原创 MySQL 底层原理(面试精华)
目录1 MySQL架构1.1 架构图1.2 SQL语句执行流程2 存储引擎2.1 查看存储引擎2.2 设置存储引擎2.3 文件存储结构对比2.4 InnoDB 与 MyISAM 的比较3 数据类型3.1 CHAR 和 VARCHAR 的区别3.2 BLOB和TEXT区别4 索引4.1 定义4.3 索引的基本语法4.3 索引的优缺点4.4 MySQL索引分类4.5 B-Tree 和 B+Tree 的区别4.6 MySQL索引结构4.6.1 MyISAM主键索引与辅助索引的结构4.6.2 InnoDB主键索引
2021-04-09 18:02:41
7998
2
转载 TCP三次握手四次挥手详解
目录1 . TCP 基础2. 三次握手3. 二次握手可以吗4. 初始序列号(ISN)5. 半连接队列6. 三次握手可以携带数据吗?7. TCP 四次挥手1 . TCP 基础TCP 其实是非常复杂的协议。我们知道 TCP 是一种可靠的协议,它主要通过解决这几个问题来实现可靠性的,分别是:乱序、丢包重传、流控、拥塞控制。通过从图中报文格式的字段,也能够简单了解到 TCP 的相关概念。TCP 在网络 OSI 七层模型中的第四层,TCP 包是没有 IP 地址的,但有源端口和目的端口,用来标识通信的进程。
2021-04-07 17:40:09
392
转载 HTTPS原理介绍
目录1 http为什么不安全1.1 HTTP 中间人攻击1.2 防止中间人攻击2. HTTPS 协议2.1 HTTPS 简介2.2 CA 认证体系1 http为什么不安全HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。HTTP 协议是通过客户端和服务器的请求应答来进行通讯,通讯报文如下:请求POST http://www.baidu.com HTTP/1.1Host: www.baidu.comConnection: keep-aliveContent-Len
2021-03-30 11:25:33
118
原创 Druid,实现MySQL数据库登录密码加密
为什么要加密?现在的开发习惯,无论是公司的项目还是个人的项目,都会选择将源码上传到 Git 服务器(GitHub、Gitee 或是自建服务器),但只要将源码提交到公网服务器就会存在源码泄漏的风险,而数据库配置信息作为源码的一部分,一旦出现源码泄漏,那么数据库中的所有数据都会公之于众,其产生的不良后果无法预期。于是为了避免这种问题的产生,我们至少要对数据库的密码进行加密操作,这样即使得到了源码,也不会造成数据的泄露。如何加密?对于 Java 项目来说,要想快速实现数据库的加密,最简单可行的方案就是使用
2021-03-16 11:44:07
938
1
原创 java生成RSA密钥对
import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.util.Base64;public class RSADemo { public static void main(String[] args) throws NoSuchAlgorithmException { KeyP
2021-03-11 14:07:14
1080
原创 SpringBoot+Redisson实现分布式锁
目录项目结构pom.xmlapplication.ymlRedissonPropertiesRedissonAutoConfigurationDistributedLockerRedissonDistributedLockerRedissonLockUtilRedissonLockApplicationTestController测试结果Redisson分布式锁原理项目结构pom.xml依赖<?xml version="1.0" encoding="UTF-8"?><proj
2021-03-04 17:35:16
3727
3
转载 图解常见树结构
目录二叉树二叉查找树退化问题平衡树二叉平衡搜索树(AVL 树)2-3 树2-3-4 树B 树红黑树左旋/右旋 保持红黑树的结构应用二叉树满足以下两个条件的树就是二叉树:本身是有序树。树中包含的各个节点的度不能超过 2,即只能是 0、1、2。分支被称作“左子树”或“右子树”。二叉查找树二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具
2021-03-04 10:51:06
9928
1
原创 Redisson分布式锁源码解读
目录Redisson源码分析Redis 发布订阅加锁tryLocklock解锁unlock()RedLock上篇文章写了Redis分布式锁的原理和缺陷,过程中提到了Redisson这个框架,Redisson具体是什么呢?Redisson的源码解读工作量还是挺大的,其中用到了大量的Java并发类,并且引用了Netty作为通信工具,实现与Redis组件的远程调用,这些知识点如果要全部讲解的话不太现实,本文的重点主要是关于Redisson分布式锁的实现原理,所以网络通信和并发原理这块不会太仔细。Redi
2021-03-03 22:34:10
600
1
转载 Redis分布式锁基本原理
目录1、什么是分布式锁?2、Redis实现锁的命令2.1、SETNX2.2 、SETEX2.3、PSETEX2.4、SET3、怎么释放锁4、Java代码实现5、分布式锁的缺陷5.1、客户端长时间阻塞导致锁失效问题5.2、redis服务器时钟漂移问题5.3、单点实例安全问题5.4、RedLock算法解决Redis分布式锁问题6、结论1、什么是分布式锁?说到Redis,首先想到的功能就是可以缓存数据;除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。锁 在程序中的作用就是同步工具
2021-03-03 14:00:11
1624
原创 MySQL 语句的性能优化
目录1 mysql架构介绍1.1 逻辑架构1.2 MySQL存储引擎2. Join查询与索引介绍2.1 Join查询2.1.1 Join 集合关系示意图2.1.2 Join 查询 SQL语句实例2.2 索引介绍2.2.1 索引命名规则2.2.2 查看表中索引2.2.3 索引的数据结构(B+树)2.2.4 索引的选择性2.2.5 性能瓶颈2.2.6 性能优化流程3 explain查看SQL执行计划分析3.1 id - 表的读取顺序3.2 select_type - 查询类型3.3 table - 查询哪张表3
2021-02-26 17:51:31
504
1
原创 使用Arrays.asList()、ArrayList.subList()注意事项
目录1. 使用 Arrays.asList 的注意事项1.1 修改集合相关方法异常 UnsupportedOperationException2. 使用 ArrayList 的 subList 的注意事项2.1 修改原集合的值,会影响子集合2.2 修改原集合的结构,会引起ConcurrentModificationException异常2.3 修改子集合的值,会影响原集合(非结构性修改)2.4 修改子集合的结构,会影响原集合(结构性修改)1. 使用 Arrays.asList 的注意事项1.1 修改集
2021-02-26 09:10:59
305
转载 Redis 内存耗尽的淘汰策略 LRU与LFU算法
目录设置有效期过期策略8 种淘汰策略LRU(最近最少使用) 算法Redis 如何管理热度数据LFU(最近最少频率使用) 算法访问频次递增访问频次递减内存并不是无限的,总会存在内存耗尽的情况,本文章告诉你,当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理?设置有效期使用Redis 时,某些 键值对 只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis 中可以通过 4 个独立的命令来给一个键设置过期时间:expire k
2021-02-24 09:52:58
652
原创 mysql 常用sql与基础知识
这里写目录标题1 表的键约束2 表操作3 查询数据3.1 模糊查询 like3.2 查询结果不重复 DISTINCT3.3 排序 sort3.4 分组查询3.5 限制查询结果数量3.6 连接查询3.7 子查询3.8 合并查询 UNION3.9 为字段或者表起别名 AS3.9 使用正则表达式查询 REGEXP4 增删改数据5 索引5.1 设计原则5.2 建表时创建索引5.3 已经存在的表上创建索引5.4 查看索引5.5 删除索引6 视图6.1 创建视图6.2 查看视图6.3 修改视图6.4 删除视图7 数据库
2021-02-20 11:30:49
125
原创 多线程下保证线程安全的单例模式(双端检索)
public class SingletonDemo { private static volatile SingletonDemo instance = null; // volatile防止指令重排 public SingletonDemo() { System.out.println("我是构造SingletonDemo()。。。。"); } public static SingletonDemo getInstance() { // 双端检索 if (instanc
2021-02-19 23:50:15
347
原创 Git 指南
Git工作流是什么其实就是我们使用git的时候整个项目的推送克隆修改过程,其实这个过程是随着时间的流动的,每个不同的时间节点发生了不同的事情,所以可以归为流。可能某个时间段弄了新功能弄了分支,然后合并之类其他的。fork的情况较少也有可能出现。分支种类主干分支 master主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。开发分支 develop主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。bug 修理分支 hotfix主要负责管理生产环境下出现的紧急
2021-02-18 21:07:24
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人