自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql Left Join on条件 where条件的用法区别

执行结果。

2023-08-22 17:35:56 305

原创 Spring-Retry实现及原理

重试,其实我们其实很多时候都需要的,为了保证容错性,可用性,一致性等。一般用来应对外部系统的一些不可预料的返回、异常等,特别是网络延迟,中断等情况。还有在现在流行的微服务治理框架中,通常都有自己的重试与超时配置,比如dubbo可以设置retries=1,timeout=500调用失败只重试1次,超过500ms调用仍未返回则调用失败。如果我们要做重试,要为特定的某个操作做重试功能,则要硬编码,大概逻辑基本都是写个循环,根据返回或异常,计数失败次数,然后设定退出条件。

2023-06-02 10:38:47 1507

原创 Java常用设计模式

Java23种设计模式

2022-11-23 14:36:01 420

原创 设计模式分享

Java常用设计模式介绍

2022-10-17 14:37:26 428

原创 MySQL特性两次写(double write)的在故障恢复时几种情况的分析【双写】【doublewrite buffer】

msql

2022-09-06 18:34:32 324 3

原创 Redis集群方案

redis集群整理

2022-08-02 14:33:09 178

原创 设计模式之观察者模式

一、观察者模式 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下: 其中,Subject类是主题,它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供了一个接口,可以增加和删除观察者对象;Observer类是抽象观察者,为所有的具体观察者定...

2020-07-06 10:40:01 214

原创 Apache RocketMQ源码学习之生产者发送消息

一、消息发送方式RocketMQ 支持常见的三种发送方式:SYNC、ASYNC、ONEWAYSYNC : 同步的发送方式,会等待发送结果后才返回。ASYNC : 异步的发送方式,发送完后,立刻返回。ONEWAY : 发出去后,什么都不管直接返回。二、RocketMQ生产者发送消息流程...

2020-06-04 18:00:01 251

原创 Apache RocketMQ源码学习之生产者启动

一、RocketMQ核心组件以及关系核心组件: producer:消息生产者,生产者的作用就是将消息发送到 MQ producer group:生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组 consumer :消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者 consumer group:消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组 topic:是一种消息的逻辑分类 message : Message 是...

2020-06-04 17:40:30 312

原创 SpringBoot使用Sharding-JDBC分库分表实战

一、准备工作1.准备两个database、4张table二、引入相关maven <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</ve.

2020-05-28 16:08:23 629

原创 设计模式之责任链模式

概念职责链模式(Chain of Responsibility)使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链设计模式中的角色Handler抽象处理者(定义一个处理请求的接口,接口可以定义出一个方法,以设定和返回对下家的引用。通常由一个抽象类或接口实现)Concrete Handler具体处理者(具体请求者在接受到请求后,如果满足条件则自己处理请求,否则将请求传.

2020-05-19 09:51:46 191

原创 记一次Java并发本地内存、主内存相关

一、先上一段代码:package com.wx.wxjob;public class Test { public static void main(String[] args) { Aobing a = new Aobing(); a.start(); for (; ; ) { if (a.isFl...

2020-05-08 13:50:57 237

原创 代码优化之抽象类的引入

一、场景 场景:有个给不同类型的数据打上标签的功能。不同数据类型生成的标签规则不一样。二、编码实现1、首先定义一个抽象类(统一需要实现的方法)/** * FileName: AbstractMakeTagHandler * Author: pengyd * Date: 2020/3/13 * function: */public abstract clas...

2020-03-13 16:00:46 254

原创 优雅的消除代码中的if-else

需求假设有这么一个需求:一个电商系统,当用户消费满1000 金额,可以根据用户VIP等级,享受打折优惠。根据用户VIP等级,计算出用户最终的费用。 普通会员 不打折 白银会员 优惠50元 黄金会员 8折 白金会员 优惠50元,再打7折 编码实现private static double getResult(long money, int ty...

2020-03-10 16:46:18 596 2

原创 SpringBoot项目整合Vue

一、首先需要安装vue所需环境以及基本项目架构(自行百度)vue项目架构如图:二、需要改动的页面App.vue<template> <div id="app"> <img src="./assets/logo.png"> <router-view/> </div></templa...

2019-12-31 16:22:18 244

原创 catch中为什么不建议使用e.printStackTrace

为什么尽量不用e.printStackTrace直接用e.printStackTrace来打印日志有错吗?当然不错,但是不好。主要原因有以下几点:1、占用太多内存,造成锁死要打印字符串输出到控制台上,需要字符串常量池所在的内存块有足够的空间。然而,因为e.printStackTrace() 语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!大量线程产出字符串产出到一半,等待有...

2019-12-26 16:03:07 2905 1

原创 利用反射重构代码

一、需求先看代码:两个方法几乎一模一样,唯一的区别就是传入的对象不同二、改造利用反射,将对象映射成map,看代码:public Map<String, Object> class2Map(Object obj) { Class aClass = obj.getClass(); Field[] declaredFields = a...

2019-12-26 15:10:39 369

原创 阿里RoceketMQ使用

一、配置文件#该应用是否启用生产者rocketmq: producer: isOnOff: on #发送同一类消息的设置为同一个group,保证唯一,默认不需要设置,rocketmq会使用ip@pid(pid代表jvm名字)作为唯一标示 groupName: ${spring.application.name} #mq的nameserver地址 ...

2019-12-26 14:49:55 491

原创 工厂+策略模式消除if-else

需求代码改造:JSONArray result = new JSONArray(); switch (code) { case SUBJECT_IFACE_CODE: for (int i = 0, size = values.size(); i < size; i++) { ...

2019-12-26 10:59:13 481

原创 SQL中关于IN和EXISTS的用法

一、执行历程sql语句:select * from student s where EXISTS(select stuid from score ss where ss.stuid = s.stuid)执行顺序: (1)先执行:select * from student s (2)再执行:EXISTS(select stuid from score ss where ss.st...

2019-11-25 10:12:57 615

原创 一些面试题

1.Volatile如何是先内存屏障的如何做到禁止指令重排的2.轻量级锁和偏向锁的实现3.lock和 synchronize都是可重入锁吗 都是怎么实现可重入的4.cpu总线嗅探机制5.synchronize的底层实现 (jvm是如何操作的)...

2019-11-12 21:48:55 137

原创 Linux相关

vim:1、进入vim编辑模式:vim filename2、输入“/关键字”,按enter键查找3、查找下一个,按“n”即可退出:按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令wq! 保存退出q! 不保存退出列出几种常见的应用场景:查看日志应用场...

2019-10-31 14:55:35 122

原创 Java计数器之CountDownLatch、CyclicBarrier、Semaphore

CountDownLatchCountDownLatch可以实现多线程之间的计数器,并实现阻塞功能。比如某个任务依赖于其他的两个任务,只有那两个任务执行结束后,它才能执行。import java.util.concurrent.CountDownLatch;public class CountDownLatchTest2 { public static void main(S...

2019-10-24 14:32:34 101

原创 linux使用scp上传文件

第一步:由于忘记了服务器的密码,这边需要先把本机的sshkey(id_rsa.pub)拷贝到服务器中的.ssh下的known_hosts文件中。本机的sshkey:切换到linux环境下,使用:vim authorized_keys(将上图中的key,copy到该文件下,保存并退出)第二步:scp dispatch-rule.war [email protected]:/ho...

2019-10-14 16:50:51 247

原创 SpringBoot+MybatisPlus整合多数据源(踩坑指南)

一、配置perproties/yml文件(1)不同数据库的配置信息spring.datasource.driver-class-name=com.mysql.jdbc.Driver#spring.datasource.tomcat= com.alibaba.druid.pool.DruidDataSourcespring.datasource.url=jdbc:mysql://loc...

2019-10-12 11:02:38 4774 2

原创 w10本地安装RocketMq(插件)以及整合springboot

windows下RocketMQ安装部署1.系统 Windows2.环境 JDK1.8、Maven、Git二.RocketMQ部署1.下载 1.1地址:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/ 1.2选择‘Binary’进行下载 1.3解...

2019-10-10 11:22:01 477

原创 W10本机docker容器部署springboot项目

本机安装docker下载安装地址:https://hub.docker.com/?overlay=onboarding下载完成后,按照提示安装二、Dockerfile配置三、本地目录新建一个文件夹,cmd命令进入到此目录下,将Dockerfile和项目的jar包放到该目录下使用docker命令:docker build -t wx-job .(将该目录下的jar文件,打成名叫wx-...

2019-09-25 18:12:29 252

原创 Spring Aysnc 最佳实践

1. @Async 的工作机制首先为方法添加 `Async` 注解。接着,Spring 会基于 `proxyTargetClass` 属性,为包含 `Async` 定义的对象创建代理(JDK Proxy/CGlib)。最后,Spring 会尝试搜索与当前上下文相关的线程池,把该方法作为独立的执行路径提交。确切地说,Spring 会搜索唯一的 `TaskExecutor` bean 或者名为 `...

2019-05-23 14:32:32 1286

转载 Excel大全

01 SUM函数(数学)SUM函数是Excel中非常常用的函数,求和也是数学函数的一个基础,先来简单看下SUM函数的语法:SUM函数语法SUM函数的参数是不定的,意思是可以有一个、多个参数,并且每个参数可以是单个单元格、数字或者是引用的区域,虽然SUM函数看起来很简单,但是可以组合其他实现非常多的小技巧,例如:累计求和、数组公式等等。累计求和案例:=SUM($B$3:B3),虽...

2019-05-21 18:46:53 1002

原创 阿里RocketMQ使用

导论记录一下阿里云消息服务与Spring的整合,以及ProducerId与ConsumerId的管理,其他的消息服务也是类似(RocketMQ、Kafka),阿里云消息服务性能还是很可观的,虽然收费,单也推荐使用。整合消息服务的概念就不想多说了,需要的可以去看官方文档,参考文档。整合spring上面那些步骤信息填完整之后topic、ProducerId、ConsumerId都创...

2019-05-17 15:01:59 10161

原创 Mybatis源码解析---SQL执行过程

1. SqlSessionFactory 与 SqlSession.  通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,咱们都是通过SqlSession去执行sql语句(注意:是从表面看,实际的待会儿就会讲)。那么咱们就先看看是怎么获取SqlSession的吧:(1)首先,SqlSessionFactoryBuild...

2019-05-14 10:39:29 142

原创 Maven配置详解

二、pom文件节点pom.xml文件的节点大致可以分为以下几个部分:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap...

2019-05-13 10:42:56 1811

原创 Mybatis-StatementHandler源码解析(三)

StatementHandlerStatementHandler接口的实现大致有四个,其中三个实现类都是和JDBC中的Statement响对应的:SimpleStatementHandler,这个很简单了,就是对应我们JDBC中常用的Statement接口,用于简单SQL的处理; PreparedStatementHandler,这个对应JDBC中的PreparedStatement,...

2019-05-10 18:32:44 579 1

原创 Mybatis-Executor源码解析(二)

Executor的继承结构首先,最底层的接口是Executor,有两个实现类:BaseExecutor和CachingExecutor,CachingExecutor用于二级缓存,而BaseExecutor则用于一级缓存及基础的操作。并且由于BaseExecutor是一个抽象类,提供了三个实现:SimpleExecutor,BatchExecutor,ReuseExecutor,而具体使...

2019-05-10 18:31:55 284

原创 Mybatis-获取SqlSession源码解析(一)

一、大致流程public static void main(String[] args) { String resource = "config/mybatis-config.xml"; InputStream inputStream; SqlSession session = null; try { ...

2019-05-10 18:27:50 775

原创 深入理解Spring系列之十:DispatcherServlet请求分发源码分析

DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的请求分发过程Servlet在service方法中进行请求接收与分发,DispatcherServlet的service方法继承自HttpServlet,具体代码如下图所示。在FrameworkServlet中对这个protected修饰的servic...

2019-04-30 10:50:01 141

原创 深入理解Spring系列之八:常用的扩展接口

Spring不仅提供了一个进行快速开发的基础框架,而且还提供了很多可扩展的接口,用于满足一些额外的开发需求,本篇将对常用的可扩展接口进行归纳总结1.InitializingBean接口InitializingBean接口中只有一个afterPropertiesSet方法,从方法的名称上很容易理解,这个方法是在Bean的属性都设置值后被调用,用于完成一些初始化工作。当然,在Spring的配置文...

2019-04-26 17:14:58 324

原创 深入理解Spring系列之七:web应用自动装配Spring配置

在《深入理解Spring系列之一:开篇》的示例代码中使用如下方式去加载Spring的配置文件并初始化容器。 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");在web应用中,配置文件都是自动加载的,示例代...

2019-04-26 17:08:00 269

原创 深入理解Spring系列之六:bean初始化

《深入理解Spring系列之四:BeanDefinition装载前奏曲》中提到,对于非延迟单例bean的初始化在finishBeanFactoryInitialization(beanFactory)中完成。进入这个方法,代码如下。protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory be...

2019-04-26 17:05:20 185

原创 深入理解Spring系列之五:BeanDefinition装载

接上篇《深入理解Spring系列之四:BeanDefinition装载前奏曲》,进入AbstractXmlApplicationContext类的loadBeanDefinitions方法,代码如下所示。 @Override protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) th...

2019-04-26 17:00:39 227

空空如也

空空如也

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

TA关注的人

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