自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务

极速解决企业级分布式事务之spingCloud+tx-lcnhttps://blog.csdn.net/qq_33449307/article/details/102550878中我们实现了[springBoot+jpa+jta+atomikos实现分布式事务,模拟多数据源],这种方式基于2PC的,了解2PC,3PC会知道这些方式存在一些问题:1.引入了中间件中心化协调者 操作复杂化 一...

2019-11-30 20:44:23 226

原创 springBoot+jpa+jta+atomikos十分钟实现分布式事务,模拟多数据源

基于jta+atomikos解决分布式事务 模拟多数据源jta: Java Transactio API,即是java中对事务处理的api,api即是接口的意思.atomikos:Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器,基于2PC协议.不明白XA 2PC 3PC TCC的同学可以花几分钟的时间去看一下.1....

2019-10-14 16:16:48 2968 1

原创 超哥教你10分钟搞定QueryDSL+JPA简化数据层操作

本博客在SpringBoot,maven,Mysql的环境下进行配置编写。一、环境配置1.引入maven依赖以及插件,以下是本demo的依赖(绿色字体部分是需要注意添加的依赖以及插件):插件:这里说明一下 添加的apt-maven-plugin 插件是为了让程序自动生成query type(查询实体,命名方式为:"Q"+对应实体名)上面引入的querydsl-...

2018-07-30 15:38:16 9763 14

原创 Redis---Info命令

1、简介Redis提供了info指令,它会返回关于Redis服务器的各种信息和统计数值。在使用Redis时,时常会遇到一些疑难杂症需要我们去排查,这个时候我们可以通过info指令来获取Redis的运行状态,然后进行问题的排查。​通过给定可选的参数 section ,可以让命令只返回某一部分的信息:server: Redis服务器的一般信息 clients: 客户端的连接部分 memory: 内存消耗相关信息 persistence: RDB和AOF相关信息 stats: 一般统计 r

2021-10-04 22:57:12 4135

原创 MySQL中的锁(表锁、行锁)

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:表级锁:开销小,加...

2021-09-26 20:35:24 321

原创 并发编程看这一篇就够了

线程池线程池:一个管理线程的池子。为什么使用线程池?降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。统一管理线程,避免系统创建大量同类线程而导致消耗完内存。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQue

2021-09-22 21:55:14 526

原创 Spring监听器---ApplicationListener

说到事件监听,想到的肯定是观察者模式。但是这儿主要说下spring中的监听是怎么样的流程。这就不得不说到spring容器的refresh方法,容器启动过程中,listener相关的主要是这个三个方法:initApplicationEventMulticaster方法初始化事件多播器,后续的事件发布都是由多播器来发布的;registerListeners注册监听器到前面初始化好的多播器上面去;finishRefresh容器启动完成最后刷新,发布ContextRefreshedEvent事件。..

2021-09-15 21:37:23 1026

原创 Spring扩展点---BeanDefinition与BeanFactory扩展

1.BeanDefinitionRegistryPostProcessor接口BeanDefinitionRegistryPostProcessor接口继承了BeanFactoryPostProcessor接口,BeanFactoryPostProcessor接口随后我们也会讲到这个接口。/** * Extension to the standard {@link BeanFactoryPostProcessor} SPI, allowing for * the registrati...

2021-09-08 20:04:27 353

原创 Dubbo服务暴露与服务消费流程分析

Dubbo的服务暴露和服务的引用流程比较复杂,尤其是Dubbo框架对于扩展点实现了自动包装、自动装配、自适应和自动激活的这些特性,导致我们直接在看源码分析时,会出现很多地方的逻辑不清楚(因为有很多的类是在内存中动态生成的),这里我会把一些动态生成的关键的类的源码贴出来,这样有助于更清晰的理解Dubbo的服务暴露和和消费的整个过程。之所以对服务的暴露和引用的流程做分析,一方面是想更深入的理解Dubbo框架,另一方便是想结合Dubbo的这些扩展点,研究一下Dubbo的微内核加插件机制的架构,学架构不就得..

2021-09-06 20:28:35 320

原创 Rocketmq源码分析---broker 启动流程

1. 启动入口broker的启动类为org.apache.rocketmq.broker.BrokerStartup,代码如下:public class BrokerStartup { ... public static void main(String[] args) { start(createBrokerController(args)); } ...}在main()方法中,仅有一行代码,这行代码包含了两个操作:createBro

2021-09-01 21:24:47 273

原创 Redis---基于Redis的设计问题,再也不怕被问到

1.10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户?可以考虑使用BitMap,位图;具体做法:使用时间作为cacheKey,然后用户ID为offset,如果当日活跃过就设置为1,那么我该如果计算某几天/月/年的活跃用户呢(暂且约定,统计时间内只有有一天在线就称为活跃),有请下一个redis的命令:BITOP operation destkey key [key ...]说明:对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destk..

2021-08-29 20:58:23 346

原创 Redis---基于Redis实现推荐系统

1.什么是推荐引擎?推荐引擎就是一个最可能为用户做出下一个选择的应用或微服务.推荐内容包括如用户最想听的下一首歌,他们最想看的下一场电影或者他们预定某服务后下一步可能做出的选择行为.在系统层面,推荐引擎会匹配用户最可能感兴趣的物品.通过推送相关的个性化推荐给用户,应用会引导用户购买相关物品,提升他们在网站或APP上的停留时间或者点击想看的广告-最终帮助对收入,使用率的最大化.一个有效的推荐引擎需要具备以下条件:提供正确相关的选择给用户(这通常取决于所选择的算法). 能够实时的提供高性能的选

2021-08-29 20:41:50 1630

原创 Redis分布式锁---Red Lock

1.Redlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁;官方地址这个锁的算法实现了多redis实例的情况,相对于单redis节点来说,优点在于 防止了 单节点故障造成整个服务停止运行的情况;并且在多节点中锁的设计,及多节点同时崩溃等各种意外情况有自己独特的设计方法前置概念:1.TTL:Time To Live; redis key 的过期时间或有效生存时间2.clock drift:时钟漂移;指两个电脑间时间流速基本相同的情况下,两个电脑

2021-08-25 21:47:50 670

原创 Redis的集合---Zset

前言:zset就是有序集合,并且每个member都带有score(可用于排序),因此很适合在打赏日榜、近一周收益这类场景中运用。数据结构初探有序集合对象的编码可以是ziplist或者skiplist。同时满足以下条件时使用ziplist编码:元素数量小于128个 所有member的长度都小于64字节以上两个条件的上限值可通过zset-max-ziplist-entries和zset-max-ziplist-value来修改。ziplist编码的有序集合使用紧挨在一起的压缩列表节点来保

2021-08-22 21:02:52 1011

原创 Redis的列表---LIST

前言:Redis 的列表相当于 Java 语言里面的 LinkedList,是链表而不是数组 。这意味着list 的插入和删除操作非常快,时间复杂度为 O(1),但是查找数据很慢,时间复杂度为 O(n) 。 当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。 Redis 的列表结构常用来做异步队列使用 将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理在版本3.2之前,Redis 列表list使用两种数据结构作为底层实现:压缩

2021-08-15 21:32:08 1139

原创 Redis的字符串---SDS

前言:Redis是用C语言写的,但它的字符串不是c语言的字符串,,是简单动态字符串(Simple Dynamic String,SDS)在 C 语言中,字符串可以用一个\0结尾的char数组来表示。比如说,helloworld在 C 语言中就可以表示为"helloworld\0"。这种简单的字符串表示,在大多数情况下都能满足要求,但是,它并不能高效地支持长度计算和追加(append)这两种操作:每次计算字符串长度(strlen(s))的复杂度为 O(n)。 对字符串进...

2021-08-15 18:58:22 172

原创 打造高效的规则引擎

复杂风控场景下,如何打造一款高效的规则引擎|在互联网时代,安全已经成为企业的命脉。美团信息安全团队需要采用各种措施和手段来保障业务安全,从而确保美团平台上的用户和商户利益不会受到侵害。本文主要介绍了美团在打造自有规则引擎Zeus(中文名“宙斯”)的过程中,信息安全团队遇到的挑战以及对应的解决方案,并分享了很多踩过的坑,同时还有一些思考和总结。希望对从事安全领域相关工作的同学能够有所启发或者帮助。规则引擎的建设初期,会面临着各种困难和挑战,主要包括以下几个方面:在业务层面:垂直领.

2021-08-12 20:40:02 1355

原创 一天一道面试题---开源RPC框架技术选型

一.前言RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务.一般RPC框架要实现远程调用,至少要完成三部分的功能:通信框架,通信协议,序列化和反序列化.二.常见的语言平台RPC框架:RPC框架 是否支持跨语言 描述 Dubbo 否 国内最早开源的RPC框架,有阿里巴巴公司开发并于2011年对外开源,只支持Java语言 Motan 否 微博内部使用的RPC...

2021-08-05 22:34:08 381

原创 单元测试----PowerMock

一、为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等)。 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的对象,来完成单元测试。 二、为什么要使用PowerMock 现如今比较流行的Mock工具如jMock、EasyMock、Mockito等都有一个共同的缺点:不能mock静态、final、私有方法等。而Powe...

2021-08-04 21:50:07 293

原创 RocketMQ(二)---Docker集群部署RocketMQ

RocketMQ(2)—Docker集群部署RocketMQ=前言=1、因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服务器上。2、这里有关 Broker 和 NameServer 分别都做了了集群部署(各部署两个),且BroKer是按两主进行部署。之所以选用Docker部署主要还是考虑 :通过Docker部署RocketMQ集群更快速,而且对系统的资源利用更好!下面先写好所需配置文件,在运行配置文件...

2021-08-01 21:38:41 755

原创 RocketMQ原理分析(一)

RocketMQ(1)-架构原理RocketMQ(1)-架构原理RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现;集群和HA实现相对简单;在发生宕机和其它故障时消息丢失率更低。一、RocketMQ专业术语先讲专业术语的含义,后面会画流程图来更好的去理解它们。Producer消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker的路由信息,根据负载均衡策略选择将消息发到哪个Broker,然后

2021-08-01 21:36:50 215

原创 三分钟搞定mybatis多数据源(读写分离)---dynamic-datasource-spring-boot-starter

1.引入依赖: dynamic-datasource-spring-boot-starter <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.4.0..

2021-08-01 21:34:06 680

原创 天气小程序(1)

1.注册微信小程序开发者账号微信小程序开发者平台,在这里根据要求进行注册即可.2.注册和风天气开发者账号因为要获取到天气,我们需要一个可以获取到天气的API,和风天气给我们提供了各种各样的API,有免费的也有商用的.3.下载微信开发者工具微信开发者工具4.新建一个项目5.编码这里要明白工程目录的结构5.1 wxml<!--pages/aiLiWeather/aiLiWeather.wxml--><image class="pageB...

2021-07-28 21:37:20 275

原创 3分钟学会使用AOP完成日志记录

1.相关概念AOP核心概念1、横切关注点对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点2、切面(aspect)-》(通知+切点)类是对物体特征的抽象,切面就是对横切关注点的抽象。通知+切点意思就是所有要被应用到增强(advice)代码的地方。(包括方法的方位信息)3、连接点(joinpoint)-》(被拦截的方法)被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截的方法,实际上连接点还可以是字段或者构造器4、切入点(point

2021-07-25 21:53:37 825

原创 简单封装Spring的NamedParameterJdbcTemplate

由于在项目中想用Spring的NamedParameterJdbcTemplate,但又想写的sql查询简单一点,少一些,所以封装了Sql命名查询。使用此工具,主要是让where条件的查询及排序和分页简单点,现在使用的是mysql。一、SqlBuffer查询对象封装(现在只能select语句的封装)import java.util.HashMap;import java.util.Map;public class SqlBuffer { /** * 空格

2021-07-22 10:38:39 423

原创 dynamic-datasource-spring-boot-starter 源码解析

dynamic-datasource 源码分析源码地址分析:自动配置 首先,这是一个SpringBoot启动器,所以我们先从spring.factories入手。 发现帮我们自动配置了DynamicDataSourceAutoConfiguration 查看DynamicDataSourceAutoConfiguration配置类。 先看看比较重要的注解 @EnableConfigurationProperties(DynamicDataSourceProper...

2021-07-18 21:23:31 1559 1

原创 全面了解风控引擎

https://blog.csdn.net/sunyaowu315/article/details/105266277

2021-07-14 22:19:19 2380

转载 认识规则引擎

背景一提到规则引擎这四个字,大家肯定多多少少在工作中或者各种文章里面都有过听说,但是很多同学往往被引擎这两个字吓到了,以为这是什么黑科技。时值最近在调研规则引擎,在这里给大家介绍一下什么是规则引擎。为什么需要规则引擎规则引擎带来的好处是比较多的,这里我们从不同的角度去剖析一下。从开发人员视角来看在没有规则引擎的时代,有些逻辑比较复杂的业务,只有不断的增添if-else去满足我们这个复杂的业务场景,对于开发者来说还好,对于后面接手的同学一看到处都是if-else,体验过的同学就会知道,当然

2021-07-14 22:16:24 1778

原创 决策引擎简述

01决策引擎的必要性极速放款、闪电借款、闪贷等成为了互金时代信贷产品吸引客户最为重要的手段之一。那除了风控裸奔,可以通过高利率覆盖高风险的产品以外,中低利率的产品又是如何在需要控制那么多外部风险要素以及需要处理那么多外部数据源的情况下做到极速放款的呢?对于互金机构来说,因为人行征信报告获取难度大,且由于客群定位的问题,人行征信客群覆盖率也低,所以往往需要依赖大量的外部征信数据用以开发风控体系,对抗各类欺诈风险、信用风险。据了解,目前主流现金贷风控产品的风控往往使用到十几家或更多的外部数据,这

2021-07-14 22:07:30 1629

原创 SpringBoot2.X-Valid & Validated

一.前言当提供一个接口对外提供服务时,数据校验是必须需要考虑的事情。很多时候,必须在每个单独的验证框架中实现完全相同的验证。为了避免在每一层重新实现这些验证,许多开发人员会将验证直接捆绑到他们的类中,用复制的验证代码将它们混杂在一起。这个JSR将为JavaBean验证定义一个元数据模型和API。二.Valid 参数校验Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。JSR 303..

2021-07-11 19:36:30 190

原创 springBoot集成guava cache实现本地缓存

1.前言在整合guava实现限流中我们使用guava--ratelimiter实现了单机限流,本篇我们整合guava实现本地缓存.2.整个guava cache实现本地缓存2.1 引入依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId>

2021-07-07 21:59:26 2437

原创 springBoot集成guava实现限流--ratelimeter

关于限流的几种方案和算法可以看我们之前的的博客:限流的几种方案和限流算法1.前言Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。2.springBoot集成r

2021-07-07 21:44:30 1092 1

原创 风控概要和内容安全,反欺诈(营销风控)

1.风控体系草图2 内容安全在UGC,PGC和OGC产出的内容(文字,音频,视频,图片)中会产生如下业务 和合规风险:涉及谩骂、灌水、广告。 涉及色情、暴恐、政治内容等。已知的内容: 聊天信息,课件内容,留言,帖子,弹幕,视频等等2.1 工程设计2.2 文本内容安全文本内容安全主要涉及敏感词识别 情绪识别 语义识别等. 这里一般可以采用 敏感词识别和基于NLP(自然语言处理)的AI模型(NLPAI)等多个子系统(比如:自定义敏...

2021-06-30 16:07:43 4129 2

原创 Spring Security梳理

2021最新Spring Security知识梳理一、SpringSecurity 框架简介Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authoriz

2021-06-27 21:44:18 298

翻译 几种常用关系型数据库优缺点比较

计算机存储信息的大小,最基本的单位是字节,一个汉字由两个字节组成,字母和数字由一个字节组成。容量的单位从小到大依次是:字节(B)、KB、MB、GB、TB。它们之间的关系如下:1TB=1024GB1GB=1024MB1MB=1024KB1KB=1024字节1GB=1百万KB常用数据库的处理数量级Excel :可处理行数据量104,8576,大概1百万Access数据库:每个数据库文件上限 2GB 假设每行记录1KB ,大概2百万条记录Mircrosoft sql..

2021-06-24 19:52:29 2254

原创 几种志框架:Log4j Log4j2 SLF4J logback和Apache Commons Logging的比较

作为Java开发人员,对于日志记录框架一定非常熟悉。而且几乎在所有应用里面,一定会用到各种各样的日志框架用来记录程序的运行信息。而对于一个成熟的Java应用,这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在应用的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通常很多企业会通过收集日志信息来对系统的运行状态进行实时监控预警。总体概览image.png目前的日志框架有JDK自带的logging,log4j1、log4j2、logback ,这些框架都自己定制了.

2021-06-20 19:12:37 898 6

原创 四种JSON类库的性能比较---Gson、FastJson、Jackson、Json-lib

本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。目前对于Java开源的JSON类库有很多种,下面我们取4个常用的JSON库进行性能测试对比, 同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。这4个

2021-06-16 21:30:18 1074

原创 5分钟学会SpringBoot整合nacos做注册中心和配置中心

1.运行服务端nacos官网地址1.下载nacos-server2.解压下载的文件,并进入解压后的nacos-data目录,删除derby-data目录。3.进入nacos/bin 执行命令: sh startup.sh -m standalone3.查看最后打印出来的start.out文件4.访问控制台服务端启动完毕2.nacos做配置中心 和 注册中心2.1 引入maven依赖 <!-- 配置中心的依赖 --> <dependency>

2021-06-15 22:32:43 387

原创 分布式中几种服务注册与发现组件的原理与比较

前言在云计算和容器化技术发展火热的当下,对于微服务架构,服务注册与发现组件是必不可少的。在传统的服务架构中,服务的规模处于运维人员的可控范围内。当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定。在微服务应用中,服务实例的数量和网络地址都是动态变化的,这对系统运维提出了巨大的挑战。因此,动态的服务注册与发现就显得尤为重要。解决的问题在一个分布式系统中,服务注册与发现组件主要解决两个问题:服务注册和服务发现。服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机I

2021-06-09 19:54:44 163

原创 springBoot整合thrift

前言: thrift的基础知识1.Thrift的服务端1.1.引入maven依赖 <parent> <artifactId>com.ajc.demo</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <depende

2021-06-06 21:34:33 521 3

空空如也

空空如也

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

TA关注的人

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