自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(163)
  • 资源 (2)
  • 收藏
  • 关注

原创 flink入门介绍

所以 flatMap 方法也可以实现 map 方法和 filter 方法的功能,当返回结果是 0 个的时候,就相当于对数据进行了过滤,当返回结果是 1 个的时候,相当于对数据进行了简单的转换操作。基于不同的 key,流中的数据将被分配到不同的分区中去,如图 5-8 所示;KeyedStream 可以认为是“分区流”或者“键控流”,它是对 DataStream 按照key 的一个逻辑分区,所以泛型有两个类型:除去当前流中的元素类型外(event),还需要指定 key 的类型(string)。

2022-10-15 10:53:00 1538 1

原创 java自定义注解防重提交

Annotation(注解) 从JDK 1.5开始, Java增加了对元数据(MetaData)的⽀持,也就 是 Annotation(注解)。注解其实就是代码⾥的特殊标记,它⽤于替代配置⽂件 常⻅的很多 @Override、@Deprecated等什么是元注解 注解的注解,⽐如当我们需要⾃定义注解时 会需要⼀些元注解(meta-annotation),如@Target和 @Retentionjava内置4种元注解@Target 表示该注解⽤于什么地⽅。

2022-10-13 14:29:37 1229

原创 restTemplate 优化接口性能

很多项目中都有需要调用第三方接口,通过httpclient来发送消息,这种方式往往设计网络IO,每次调用的时候都需要建立http连接,而http连接需要经过三次握手等,是非常耗时的;

2022-10-12 10:51:35 1379

原创 restTemplate常见问题

restTemplate

2022-09-11 20:03:47 2397

原创 异步调用中的问题

异步

2022-09-11 17:27:28 522

原创 kafka知识点总结

kafka 的基本原理和使用

2022-09-03 14:39:21 1201

原创 微服务feign调用时候,token丢失问题解决方案

feign微服务调用的原理是发送一个http请求,此时不会携带原来的token,因此在调用另一个服务的接口的时候,token会丢失,需要在代码里面处理,把token携带过去;在拦截器里面,获取token,然后加入到templete里面;一般需要将这块代码加入到所有涉及的微服务的拦截器里面;所以会加入到common模块里面。一般http请求的token在请求头里面;...

2022-07-24 21:06:46 2998

原创 MQ消息队列的常见面试题

1、消息丢失问题消息可靠性问题针对以上消息可能丢失的三种情况;生产者弄丢了数据生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。此时可以选择用 RabbitMQ 提供的事务功能,就是生产者发送数据之前开启 RabbitMQ 事务channel.txSelect,然后发送消息,如果消息没有成功被 RabbitMQ 接收到,那么生产者会收到异常报错,此时就可以回滚事务channel.txRollback,然后重试发送消息;如果收到了消息,

2022-05-04 20:33:58 1157

原创 redis中事务的控制

Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。 >在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。EXEC命令会触发执行事务中的所有命令。因此,当某个客户端正在执行一次事务时,如果它...

2022-05-01 20:14:02 586

原创 跨域问题解决方案

1、什么是跨域协议相同 http https域名相同 www.onlineclass.net端口相同 80 81在浏览器访问的时候,以上三者任意一个不同,都是跨域;浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域Nginx是用来干什么的? - 斯外戈 - 博客园2、解决跨域的方法(1) Http响应头配置允许跨域nginx层配置,在前端和后端之间加上一个反向代理服务器 ...

2022-03-28 19:24:13 1222

原创 本地缓存和分布式缓存

本地缓存的效率是比分布式缓存的高,但是本地缓存只是在当前节点有效; 选择本地缓存和分布式缓存 和业务数据结合去选择 高并发项目里面一般都是有本地缓存和分布式缓存共同存在的 CachesExplained · google/guava Wiki · GitHub使用本地缓存的时候,向构建一个缓存类private Cache<String,Object> tenMinuteCache = CacheBuilder.newBuilder() /

2022-03-28 18:57:20 496

原创 登录校验解决方案

单机tomcat应用登录检验 sesssion保存在浏览器和应用服务器会话之间 用户登录成功,服务端会保存一个session,当然客户端有一个sessionId 客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId 分布式应用中session共享 真实的应用不可能单节点部署,所以就有个多节点登录session共享的问题需要解决 tomcat支持session共享,但是有广播风暴;用户量大的时候,占用资源就严重,不推荐..

2022-03-27 19:56:59 455

原创 spring事务管理

分为编程式事务管理和声明式事务管理编程式事务管理:* 代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,通过TransactionTempalte手动管理事务(用的少)声明式事务管理: * 通过AOP实现,可配置文件方式或者注解方式实现事务的管理控制(用的多)声明式事务管理本质:本质是对方法前后进行拦截,底层是建立在 AOP 的基础之上,在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事

2022-03-26 21:05:21 108

原创 springBoot的常用注解

@Component 通用组件 细分:@Controller (用于web层)@Service (用于service层)@Repository (用于dao仓库层)@Component("XXXX")注入后ioc容器里面的默认名称是首字母小写的驼峰形式类型注入@Autowired名称注入@Qualifier(“bean 的名称”) bean生命周期 xml方式:init-method、destroy-method 注解方式:@PostConstruct初始化、@Pr

2022-03-26 17:14:11 1159

原创 spring的AOP思想(动态代理)

1、spring的AOP面向切面编程的思想核心思想:在不改变原有代码的基础上,添加其他的功能;即把原来的代码调过来,然后再原来代码的基础上,在其前面或者后面添加额外的功能;场景:权限控制、缓存、日志处理、事务控制;拦截器也是aop思想的一种利用;利用aop的代码中,一般分为两部分核心与非核心;核心部分一般就是原来的代码,非核心就是通过切入点,额外加入的功能;spring的AOP 本质是一种动态代理,分为JDK动态代理(实现了接口) 和CGlab动态代理两种;2、核心概念:..

2022-03-26 16:50:08 903

原创 spring的常见问题

1、IOC容器的设计思想IOC容器的核心是依赖注入 + 控制反转,即将代码中手动创建对象的过程交给spring来管理,对象的生命周期也是spring管理的;2、spring的作用域scope决定着spring是单例模式还是多例模式,如果是单例模式,在spring的ioc容器中只允许有一个这种对象,然后第二次创建,会先看容器里面有没有这个对象,如果有不会新建基本只用单例模式,少数用多例模式,其他三种基本不用;3、spring常见的注入方式注入方式在autow.

2022-03-24 21:56:49 245

原创 mybatis中使用缓存、懒加载、事务

Mybatis一级缓存 简介:一级缓存的作用域是SQLSession,同一个SqlSession中执行相同的SQL查询(相同的SQL和参数),第一次会去查询数据库并写在缓存中,第二次会直接从缓存中取 基于PerpetualCache 的 HashMap本地缓存 默认开启一级缓存 失效策略:当执行SQL时候两次查询中间发生了增删改的操作,即insert、update、delete等操作commit后会清空该SQLSession缓存; 比如sqlsession关闭,或者清空等...

2022-03-21 22:40:59 1355

原创 mybatis的复杂sql查询

在利用mybatis做查询的时候,一般返回结果用resulttype,这种情况必须是查询的结果在对应 的pojo类中有对应的,一般都是单表查询,但是对于一些复杂的情况,比如需要用到多表查询的时候,resultType不再适用,此时一般用resultMap来表示返回的结果。resultMap类似于一个hashmap,里面的数据库中的字段与pojo类中的字段的映射,associate的使用--- 一对一关联查询对象里面包含一个其他对象:如video是一个pojo类,但是其属性里面..

2022-03-21 21:25:51 2494

原创 mybatis常见操作之delete的使用

由于MyBatis的sql写在XML里面, 有些sql的语法符号和xml里面的冲突大于等于 <![CDATA[ >= ]]>小于等于 <![CDATA[ <= ]]><typeAliases> 放在mybatis-config.xml 文件里面 <!--<typeAlias type="net.xdclass.online_class.domain.Video" alias="Video"/>-...

2022-03-21 19:57:09 973

原创 mybatis中常用操作之update

注意末尾一个字段后面不加逗号同样,id是当前xml文件对应的接口中,方法的名称,parameterType是传入参数的类型,一般到对应的类上,鼠标右键然后copy refence获取;set中,等号左边表示数据库中的字段名称,右边是类里面的名称;上面这种形式会将整条记录都更新,因此需要通过if语句来实现动态更新test里面判断的是pojo类里面的的属性,而不是数据库里面的字段,<!-- 特别注意: 一定要看pojo类里面的是基本数据类型,还是包装数据类型-->基本数据...

2022-03-20 22:18:15 4481

原创 mybatis的常用常用场景--insert

注意mapper接口中的每一个函数,里面的参数都要通过@Param来取别名;注意在mybatis里面,如果是模糊查询,需要用concat来拼接字符串<select id="selectByPointAndTitleLike" resultType="net.xdclass.online_class.domain.Video"> select * from video where point=#{point} and title like concat('%', #{title

2022-03-20 21:18:03 1344

原创 从JDBC到mybatis

原生jdbc连接的方式官方地址:mybatis – MyBatis 3 | Introductionmybatis的整体流程: toto<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-m...

2022-03-20 18:38:31 136

原创 定时任何和异步任务的实现

定时任务: SpringBoot 使用注解定时任务 启动类里面@EnableScheduling开启定时任务,自动扫描 定时任务业务类 加注解 @组件被容器扫描 定期执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次 当需要用到定时任务的时候,首先需要在启动类上加@EnalbeScheduling@Componentpublic class ScheduleTask { @Scheduled(fixedRate.

2022-03-20 10:30:11 254

原创 过滤器--监听器--拦截器

sevlet中本身存在很多自带的过滤器使用sevlet3.0开发自定义注解:1、需要在启动类里面加上@ServletConponetScan2、新建一个Filter类,并implements Filter,并实现对应的接口3、@Webfilter标记一个类为filter,并被spring扫描4、urlPatterns:定义拦截规则5、控制chain、dofilter的方法的调用一般用在权限控制、登录校验扥场景中@WebFilter(urlPatterns = "/api/v

2022-03-19 22:28:16 722

原创 全局异常的处理

一般需要作为处理器,放在handler包下,然后构建异常处理器类,来处理全局异常@RestControllerAdvice是用来标记这是一个异常处理器的类如何配置全局异常:@RestControllerAdvice // 表名是一个异常处理类,默认返回json数据public class CustomException{ @ExceptionHandler(value = Exception.class) // 构建一个异常处理类,写入处理的是哪一类的异常

2022-03-19 17:47:19 287

原创 配置文件映射到实体类的方法

由于用yml格式的配置文件一般在冒号后面必须有一个缩进即空格,且是一层一层的递进的,因此多使用properties的文件,即采用key-value的方式进行;方法1:在需要的类上面添加注解@PropertySource("classpath:filename.properties") // 读取配置文件public class Testconfig{ // 将某个值注入 @Value("${keyName}") // 其中key是配置文件中等号左边的名称

2022-03-19 16:30:42 1693

原创 第二章---redis+分布式

1、分布式id的生成方案有哪些 雪花算法生成的id由哪些部分组成:符号位: 占用1位时间戳:占用41位,支持69年的时间跨度;机器id:占用10位序列号:占用12位分布式锁在项目中的应用场景1、系统是一个分布式系统、集群系统2、操作共享资源,比如库里面的唯一资源, 项目中订单服务、商品服务都要操作优惠券服务,就优惠券服务就需要加分布式锁了。3、同步访问,多个进程同时擦操作共享的资源,比如文件等分布式锁有哪些解决方案1、用...

2021-10-10 22:43:56 104

原创 面试总结篇--spring相关

总结面试中常见的一些问题。1、int和integer的区别首先int的基本数据类型,但是integer是一个封装数据类型;int的默认是0,但是integer模式是null;在jvm层面,是出于性能和开销的考虑,引入了int,不是一个完全面向对象处理的;integer是完完全全的对象,在实例里面有对象头,会加载class对象int的比较是通过==,但是integer是通过equal,integer还有一个内部的缓存存在,即-128~127;在实际使用的时候,如果是一些临时的对象用

2021-10-10 20:35:37 93

原创 优先级队列

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

2021-10-04 22:04:26 106

原创 发布确认模式

在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行RabbitMQ的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ集群不可用的时候,无法投递的消息该如何处理呢?代码框架:需要一个回调接口,当消息发出去后交换机没有被接收,就会触发回调接口,然后将消息重发。# 交换机确认消息spring.rabbitmq.publisher-confirm-type=c...

2021-10-04 21:37:04 156

原创 延迟队列介绍

延迟队列是死信队列的一种,如果通过过期时间来设置死信,且普通队列没有消费者,就成了延迟队列。生产者发送消息 ---> 到达普通队列 ---> 等待过期时间 ---> 进入死信队列 ----> 被死信消费者消费。创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD。QC的存活时间由生产者确定代码实现上面这张图:@Configurationpublic c..

2021-10-04 19:13:40 378

原创 死信队列介绍

先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.还有比如说: 用户在商城下单成功并点击

2021-10-04 10:42:31 2502

原创 发布订阅模式、路由模式

交换机队列里面的消息只能被消费一次,如果一个消息需要多次消费,就需要用到交换机,通过将交换机绑定到队列上。用到交换机的模式叫做发布订阅模式。将交换机绑定多个队列,实现消息的多次消费。交换机的功能主要有两个,第一个是接收生产者的消息,第二个是推送到绑定的队列。之前的简单模式,第一个参数交换机类型用的是一个空串表示。绑定:实现交换机与队列的一个捆绑关系发布订阅模式相当于广播模式,一个发布,多个接收。交换机的几种类型:直接(direct), 主题(topic...

2021-10-04 09:02:57 417

原创 rabbitMQ学习--简单模式

简单的生产者消费者演示生成者生产消息到消息队列中,消费者再从消息队列中获取消息来进行消费。public class Producer { public static final String QUEUE_NAME = "HELLO"; public static void main(String[] args) { // 创建一个连接工厂 ConnectionFactory factory = new ConnectionFacto...

2021-10-03 22:56:40 364

原创 分布式锁和事务的优先级问题

如果service层中某个方法需要用到事务,且需要加分布式锁,则一般事务在内层,锁在外层,避免出现已经解锁了但是事务还没提交,从而出现优惠券超领的情况所以一般都是事务在service层中添加,但是分布式锁在controller层中添加 @ApiOperation("领取优惠券") @GetMapping("/add/promotion/{coupon_id}") public JsonData addPromotionCoupon( @ApiParam

2021-10-02 21:05:15 2606

原创 业务微服务实现快速扩容和缩容

在突发流量的时候,可以实现快速扩容,流量峰值过去后快速缩容。比如新浪的某个热点时访问量暴增,热点过去后流量回归平常。利用webhook监听;在rancher的api模块,有这个功能,可以配置监听。其中步长表示每调用一次扩容的个数,最小数量表示缩容时候的最小值,做大数量表示扩容时候的最大值。在流量高峰的时候,监听器监听到后会发送http请求,并进行扩容。hook需要使用post方式进行请求。其中目标服务即为配置的微服务。要实现自动扩容和缩容的前提是有足够的资源池。扩容和缩.

2021-10-01 22:53:21 1314

原创 rancher部署paas

容器化部署rancherdocker run -d --restart=unless-stopped -p 8888:8080 rancher/server浏览器访问: ip:port一般在gataway前面还需要加一层Nginx。Nginx和spring cloud gataway 在功能上有一些重叠的地方,但是各司其事配合使用部署Nginx安装并配置Nginxdocker pull nginxdocker run --name ng...

2021-10-01 19:50:41 119

原创 项目部署总结

部署流程:1、本地进行容器化镜像部署打包2、本地推送镜像到镜像仓库3、容器编排管理平台部署(devops)首先需要在全局项目中添加打包镜像的全局变量<docker.image.prefix>xdclass-cloud</docker.image.prefix>在每个微服务中添加构建镜像的脚本 <build><!-- 打包的名称--> <finalName>alibaba-cloud

2021-09-30 22:24:03 214

原创 sentinel流量控制

sentinel以流量为切入点,从流量控制,熔断降级、系统负载保护等多个维度保护服务的稳定性;应用场景:消息的削峰填谷、集群流量控制、实时熔断下游不可用应用等;sentinel还能进行实时的监控功能。 sentinel文档一、部署sentinel拉取镜像:docker pull bladex/sentinel-dashboard:latest查看镜像:docker images启动sentinel docker r...

2021-09-29 22:38:52 392

原创 网关gateway配置流程

1、在网关模块添加依赖<!-- 网关的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency><!--

2021-09-28 23:21:14 4234

文件传递建议标题格式参考:分类+属性+人群指向+长尾词

文件传递建议标题格式参考:分类+属性+人群指向+长尾词

2021-11-15

spring-cloud.zip

spring-cloud.zip

2021-09-11

空空如也

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

TA关注的人

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