自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis 妙用

后端程序员,不管是出去面试,还是当面试官,Redis几乎是100%会问到的技术点;究其原因,主要是因为他实在过于强大、使用率太高了;导致项目中几乎无处不在。;当问到是否还有其他场景中使用时,部分用的少的朋友就会微微摇头;其实也没错,Redis绝不部分使用场景就是用来做缓存;但是,由于Redis 支持比较丰富的数据结构,因此他能实现的功能并不仅限于缓存,而是可以运用到各种业务场景中,开发出既简洁、又高效的系统;

2023-12-12 16:22:31 727

原创 多线程批量调用

多线程调用http接口

2022-09-15 14:25:16 211 1

原创 递归权限树

一、 权限树的问题由来在开发中难免遇到一个有多级菜单结构树,或者多级部门的结构树,亦或是省市区县的多级结构,数据结构类似如下的json数据 [ { "id": "1", "name": "主菜单1", "pid": "0", "menuChildren": [ { "id": "4", "name": "子菜单1.1",

2022-05-05 11:33:45 593 2

原创 mysql 子查询 not in 或者 in的优化

1.在MySQL 中,in 优化思路, 利用left join 来优化,类似如下的查询方式:select id from a where id in (select id from b ) 如这样的查询方式,在大数据量的情况下,查询很慢,需要改写优化sql,那么就可以用left join来优化改写如下格式:select id from a left join b on a.id =b.id where b.id is not null 2. not in的优

2022-03-09 11:25:22 11082 3

原创 spring @Scheduled(cron =““)动态配置cron

package pugv.app.job.data.config.task;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.TaskScheduler;import org.springframework.scheduling.conf.

2022-02-14 20:10:49 4367

原创 使用mysql唯一主键做避免重复插入

INSERT INTO t_episode_live (season_id, episode_id, room_id, live_start, live_end) VALUE (#{live.seasonId}, #{live.episodeId}, #{live.roomId}, #{live.liveStart}, #{live.liveE...

2022-01-27 10:35:11 916

原创 caffeine缓存本地应用

Java配置@Configuration@EnableCachingpublic class CacheConfig { private static final int DEFAULT_MAXSIZE = 1000; private static final int DEFAULT_TTL = 3600; /** * 定义cache名称、超时时长秒、最大个数 * 每个cache缺省3600秒过期,最大个数1000 */ publ.

2021-11-12 11:22:57 742

原创 Spring Boot + MyBatis + MySQL 实现读写分离

1、引言读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的..

2021-11-08 10:27:03 132

原创 Elasticsearch 中的 Bulk 批量执行方式可以有效地避免内存的消耗

1.Bulk API 的 JSON 格式 执行了一个 Bulk 指令,使用了 POST _bulk 索引发送指令请求,我 们逐行分析指令的内容。  Index 这一行用来创建索引文档,紧接在这一行后面的 doc 这行就是创建索引文 档的内容。  Create 行也是用来创建索引文档,紧接在这一行后面的 doc 这行也是创建索引文 档的内容。  Delete 这行是用来删除索引文档的,它后面不用跟一行描述删除的内容,因为删 除的内容在_id 这个字段中就可以描述...

2021-10-15 14:22:00 432

原创 Elasticsearch 删除文档流程

假设存在三个节点 NODE1、NODE2、NODE3。其中 NODE1 会接受客户端的请求,它作为Coordinate Node 或者成为 Master Node。将索引放到两个分片中,主分片分别为 P0 和 P1,P0 对应的两个副本 R0、R0,P1 对应的两个副本 R1、R1删除流程和创建数据索引类似,删除只是标记这个文档不可用,并不是立即删除。1. 客户端向 NODE1 发送删除请求。2. 节点使用文档 id 确定文档属于 P0 ,请求会被转发到 NODE 3。3. NODE3

2021-10-13 17:24:33 712

原创 Elasticsearch 修改文档流程

假设存在三个节点 NODE1、NODE2、NODE3。其中 NODE1 会接受客户端的请求,它作为Coordinate Node 或者成为 Master Node。将索引放到两个分片中,主分片分别为 P0 和 P1,P0 对应的两个副本 R0、R0,P1 对应的两个副本 R1、R1。1. 客户端发送更新操作请求至NODE1。2.NODE1 将请求路由至 NODE3,也就是主分片 P0 所在的位置。3.NODE3 从 P0 读取文档,改变 source 字段的 JSON 内容,然.

2021-10-13 17:23:06 234

原创 Elasticsearch 查询文档流程

假设存在三个节点 NODE1、NODE2、NODE3。其中 NODE1 会接受客户端的请求,它作为Coordinate Node 或者成为 Master Node。将索引放到两个分片中,主分片分别为 P0 和 P1,P0 对应的两个副本 R0、R0,P1 对应的两个副本 R1、R1 客户端发送查询请求到NODE1。 接着NODE1使用文档的id决定文档属于P0分片,由于分片和对应的副本都可 以读取数据,此时算法可以随机选择分片或者副本进行路由,此时选择 R0 副本并...

2021-10-13 17:20:10 119

原创 Elasticsearch 创建文档流程

假设存在三个节点 NODE1、NODE2、NODE3。其中 NODE1 会接受客户端的请求,它作为Coordinate Node 或者成为 Master Node。将索引放到两个分片中,主分片分别为 P0 和 P1,P0 对应的两个副本 R0、R0,P1 对应的两个副本 R1、R1。1. 客户端向Node1发送索引文档请求。2. Node1 通过路由算法和文档 ID 计算出该文档应该属于 P0,然后请求路由到NODE3 的 P0 分片上。3. Node3 在 P0 上执行了请求。如果请求成..

2021-10-13 17:18:21 282

原创 (Java)数据库存储的是正确的时间格式(2021-06-17 21:47:23)但是在获取的时候变成了(2021-06-17T13:47:23.000+00:00)解决方法

问题描述:数据库存储的是正确的时间格式(2021-06-17 21:47:23)但是在获取的时候变成了(2021-06-17T13:47:23.000+00:00)重点: 我们发现获取到的时间跟原时间是有差别的,原时间是21:47,而获取到的时间是13:47,相差了8个小时,所以我们在转换的时候应该注意,要将获取的时间在加上一个 T 的时间,也就是 8 个小时,下面我们来看转换方法:解决方法:调用以下方法转换: public static String dealDateFormat(Str

2021-10-12 10:19:57 1420 2

原创 mysql模糊查询

Like 查询方式Like 算作 MySQL 中的谓词,其应用与 is、=、>和<等符号用法类似。Like 主要支 持两种通配符,分别是"_"和"%",其中前者代表匹配 1 个任意字符,常用于充当占 位符,而后者代表匹配 0 个或多个任意字符。从某种意义上讲,Like 可看作是一 个精简的正则表达式功能。例如,查找所有以"hello"开头的记录,则其 SQL 语句为:SELECT words FROM tests WHERE words REGEXP 'hello';SELE

2021-09-23 13:44:01 94

原创 解决Spring事务和锁冲突失效问题

1.问题描述A服务作为下游服务,就需要扛住上游服务的各种调用方式;某天上游调用的方式优化改进上线后,A服务的某接口开始出现重复数据处理问题,针对此问题当时最直观的猜想是redis分布式锁未起作用,比如redis服务故障或者什么原因?排查后发现是spring事物与锁使用不当造成的问题代码案例 @Transactional override fun doBusinessLogic(params: Any): Any? { ... ..

2021-09-16 10:12:44 881 1

原创 java.8 日期处理

伴随lambda表达式、streams以及一系列小优化,Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)、长短(duration)、日期、时间、时区和周期。同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不...

2021-05-11 14:52:04 94

原创 实现自增功能

private String createAutoID() { String key = "serial.number:"; //** 自增 *//* long autoID = this.redisService.incrBy(key, 1l); return StringUtils.leftPad(String.valueOf(autoID), 4, "0"); }结果为 0001 ,0002,0003.........

2021-03-24 14:15:37 121

原创 redis基于注解方式利用Aop和jedis完成分布式锁

自定义一个注解,被注解的防范会执行获取分布式锁的逻辑@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface RedisLock { /** * 业务键 * * @return */ String key(); /** * 锁的过期秒数,默认是5秒 * * @

2021-03-16 20:24:13 131

原创 使用tomcatweb 服务器远程debug

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=65001,server=y,suspend=n" 在catalin.sh 最上面加上这行代码然后找到这个几行脚本注释掉,#if [ -z "$JPDA_OPTS" ]; then...

2021-03-12 15:12:54 101

原创 多线程操作数据写入数据库

List<PostAddress> postAddressDetails = postAddressDao.getAllList(); if(CollectionUtils.isEmpty(postAddressDetails)){ return ; } Set<Long> list =new HashSet<>(); for (PostAddress postAd...

2021-02-23 13:47:51 1710 2

原创 spring security 和OAuth2 整合访问 localhost:8082/oauth/token 报401的问题,或者403的问题

@Bean public PasswordEncoder passwordEncoder() { /** * 采坑 * spring-boot2 之后废弃了MD5,使用BCryptPasswordEncoder()加密; * */ return new BCryptPasswordEncoder();}注意在security的配置内中,要使用BCryptPasswordEncoder 加密,..

2020-12-20 19:06:11 2415 1

原创 springboot与redis整合实现redis 的发布订阅的功能

@Configurationpublic class RedisConfig { @Bean RedisMessageListenerContainer container (RedisConnectionFactory redisConnectionFactory, MessageListenerAdapter listenerAdapter){ RedisMessageListenerContainer container = new RedisMessageLi.

2020-12-16 11:59:25 339

原创 jvm cms调优

-Xms4096M -Xmx4096M -Xmn3072M -Xss1M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFactory=92-XX:+UseCMSCompactAtFullCollection -XX:+CMSFullGCsBeforeCompaction=0 -XX:+CMSScavengeBefore.

2020-08-17 13:34:23 607

原创 缓存雪崩的基于事前+事中+事后三个层次的完美解决方案

缓存雪崩的基于事前+事中+事后三个层次的完美解决方案相对来说,考虑的比较完善的一套方案,分为事前、事中、事后三个层次去思考再怎么来应对缓存雪崩的场景对于解决方案,再次强调一下,这个需要有上下文的,本课程的方案基本上就是基于本课程的缓存架构方案来讲解的通过下面的架构图,来分析具体的方案内容#事前解决方案发生缓存雪崩之前,事情之前,怎么去避免 redis 彻底挂掉 redis本身的高可用性、复制、主从架构,操作主节点,读写,数据同步到从节点,一旦主节点挂掉,从节点跟上 双

2020-08-16 08:38:35 2928

原创 1.缓存雪崩

110. 高并发场景下恐怖的缓存雪崩现象以及导致系统全盘崩溃的后果#什么是缓存雪崩?简单说:由于缓存不可用,导致大量请求访问后端服务,可能 mysql 扛不住高并发而打死, 像滚雪球一样,影响越来越大,最后导致整个网站崩溃不可用至于为什么会像滚雪球一样?整个与整个系统的架构有关; 比如在这之前讲解的知识点(本教程 001~060 章内容),根据这个背景来讲解下雪崩过程redis 集群彻底崩溃:不可用 缓存服务在请求 redis 时,会有大量的线程阻塞,占用资源 超时请求失败之后,会去 m

2020-08-16 08:28:13 126 1

原创 2.hystrix 的线程池+服务+接口划分以及资源池的容量大小控制

hystrix 的线程池+服务+接口划分以及资源池的容量大小控制资源隔离的两种策略:线程池和信号量本章对资源隔离进一步讲解,进行细粒度的控制配置#execution.isolation.strategy 隔离策略配置THREAD 线程池机制:每个 command 运行在一个线程中,限流是通过线程池的大小来控制的 SEMAPHORE 信号量机制:command 是运行在调用线程中,但是通过信号量的容量来进行限流如何在线程池和信号量之间做选择?默认的策略就是线程池 线程池 最大

2020-08-15 16:49:40 977

原创 1.hystrix 核心内容

1.hystrix核心主要用作服务隔离,服务熔断hystrix服务隔离,有两种方式 1.线程池隔离方式,2,信号量的方式1.线程池隔离方式:提供了一个抽象 Command,把某一个依赖服务所有的调用请求,都走同一个线程池中的线程, 而不会用其他的线程资源,这就叫做线程池资源隔离.Command :每次服务调用请求,都是使用线程池内的一个线程去执行 command 的, comman 里面是你的业务逻辑。假设该组服务线程池是 3 个线程,同时发起了 1000 个请求, 最多也只会有 3 个线程

2020-08-15 16:47:30 159

原创 循环树递归(表中设有parentid,id又可以当parenid)的情况

//首先从数据库中查出来所有的parentid为null的集合(就是第一层),放到一个list中 List<PrivilegeTree> privilegeTrees = privilegeTreeMapper.getAllPrivilegeInfo(); List<PrivilegeTreeData> tree = new ArrayList<>(); for (PrivilegeTree privilegeTree : priv.

2020-08-13 22:45:14 883

原创 新增一个字段,需要往这个字段插入与别的表相关联的数据

UPDATE t_nv_traffic_violation SET intersection_id = b.guid FROM t_nv_intersection_management b WHERE t_nv_traffic_violation.intersection_name = b.intersection_name

2020-07-02 10:11:02 637

原创 idea 远程debug

在启动脚本里加REMOTE_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8090"

2020-06-04 17:00:07 140

原创 Kafka 无消息丢失的配置,每一个其实都能对应上面提到的问题。

不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一定要使用带有回调通知的 send 方法。 设置 acks = all。acks 是 Producer 的一个参数,代表了你对“已提交”消息的定义。如果设置成 all,则表明所有副本 Broker 都要接收到消息,该消息才算是“已提交”。这是最高等级的“已提交”定义。 设置 retries 为一个较大的值。这里的 retries 同样是 Producer 的参数,..

2020-05-13 17:16:05 130

原创 kafka 相关的命令操作 以及配置server.properties

1、启动Kafkabin/kafka-server-start.sh config/server.properties &2、停止Kafkabin/kafka-server-stop.sh3、创建Topicbin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic liyaochu-topic4、查看已经创建的Topic信息bin/ka.

2020-05-11 10:26:37 1413

原创 spring 编译 出的错误 Error:(347, 51) java: 找不到符号 符号: 变量 CoroutinesUtils 位置:

https://blog.csdn.net/gooaaee/article/details/104437902

2020-04-01 18:11:22 4841

原创 数组截取,各个类型数组,byte [] ,String[]

public static void main(String[] args) { String[] st = {"A","B","C","D","E"}; String[] str = str(st, 1, st.length-1); for (String s : str) { System.out.println...

2020-03-27 19:53:07 392

转载 jdk1.8新特性:函数式接口、方法引用、函数式编程、常用函数式接口

https://blog.csdn.net/weixin_43365369/article/details/91171349

2020-03-11 11:20:36 254

原创 谷歌的guava的工具类使用

工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。guava的优点:高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力Guava工程包含了若干被Google的 Java项目...

2020-03-04 11:47:44 317

原创 spring事物

这里面有几点需要大家留意:A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常、测试回滚),确保事务生效。C. 以下列了事务使用过程的注意事项,请大家留意。1. 不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。2.不要...

2020-02-24 16:03:25 153

原创 看完这篇垃圾回收,和面试官扯皮没问题了

Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这些恼人的问题,这也是 Java 能大行其道的重要原因之一,GC 真正让程序员的生产力得到了释放,但是程序员很难感知到它的存在,这就好比,我们吃完饭后在桌上放下餐盘即走,服务员会替你收拾好这些餐盘,你不会关心...

2020-02-20 10:47:17 118

原创 Jvm实战

JVM 参数简介在开始实践之前我们有必要先简单了解一下 JVM 参数配置,因为本文之后的实验中提到的 JVM 中的栈,堆大小,使用的垃圾收集器等都需要通过 JVM 参数来设置先来看下如何运行一个 Java 程序publicclassTest{publicstaticvoidmain(String[]args){System.out.pri...

2020-02-20 10:29:13 400

空空如也

空空如也

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

TA关注的人

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