自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(558)
  • 资源 (4)
  • 论坛 (2)
  • 收藏
  • 关注

转载 Spring Boot EnvironmentPostProcessor 的使用

EnvironmentPostprocessor的使用1、编写自定义配置文件custom.propertis,并放到resource目录下file.size=11112、编写自定义的加载类CustomEnvironmentPostProcessor,实现EnvironmentPostProcessor接口,重写postProcessEnvironment方法package org.yujuan.springbootlearning.processor;import org.s

2021-05-25 09:39:03 5 1

转载 RPC 和 HTTP 理解,看完这一篇就够了

 RPC 和 HTTP 理解,看完这一篇就够了  网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。  这里再次重复强调一遍,通信协议不是 rpc 最重要的部分,不要被这类回答带偏。如果要了解 rpc 请更多的去了解服务治理(SOA)的一些基本策略,推荐去看看 dubbo 的相关文档。详解  rpc是远端过程调用,其调用协议通常包含:传输协议和序列化协议。...

2021-05-13 15:53:51 18

原创 聚集索引 非聚集索引 覆盖索引 联合索引

MySQL 的覆盖索引与回表为什么大家都说 SELECT * 效率低?

2021-05-08 11:01:22 7

原创 服务注册和发现 nacos替换zookeeper

为什么Kafka在2.8版本中会“抛弃”Zookeeper,选择拥抱Raft?为什么nacos比zookeeper更适合做注册中心一文详解 Nacos 高可用特性

2021-05-06 20:05:33 17

转载 了解canal,看这个就够了

https://blog.csdn.net/zhouyan8603/article/details/108612575一. canal概述canal是Alibaba旗下的一款开源项目,纯Java开发.它是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql。应用场景:1.数据同步,比如:做在线、离线数据库之间的数据同步操作; 2.数据消费,比如:需要根据关注的数据库表的变化,做搜索增量; 3.数据脱敏,比如:需要将线上动态数据导入到其他地方,做数据脱敏。二.

2021-04-21 20:48:28 32

转载 使用canal同步MySQL数据到ES的有序性保证

原著地址:https://www.jianshu.com/p/2144250176d9最近在做的项目中有用到canal实时同步MySQL的数据,并且写入es的场景,总结了一些心得,以备后查。总体同步的流程图如下:MySQL-es process.png链路中的环节稍微解释下: binlogMySQL的自身的操作日志,用来记录数据的变更操作及变更后的数据。需要开启并配置 binlog-format 为 ROW 模式。具体可查看canal文档。 canalali...

2021-04-21 20:44:39 42

原创 几个系统的gc参数配置,仅作参考

dispatcher-apiJava HotSpot(TM) 64-Bit Server VM (25.101-b13) for linux-amd64 JRE (1.8.0_101-b13), built on Jun 22 2016 02:59:44 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)Memory: 4k page, physical 98586924k(6610476k free), swap 0k(0k free)Co

2021-03-25 15:32:10 8

原创 mysql之B+索引

最简单方式理解为什么MongoDB索引选择B-树,而 Mysql 选择B+树MySQL索引原理及慢查询优化MySQL索引背后的数据结构及算法原理联合索引(复合索引)在B+树上的结构

2021-03-23 14:13:34 8

转载 Synchronized(1) - 偏向锁

Synchronized(1) - 偏向锁在多线程并发编程中,synchronized一直扮演重要的角色,在JAVA SE 1.6版本之前被称为重量级锁。在JAVA SE 1.6中synchronized得到了优化,为了减少锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁。本文重点介绍偏向锁的实现。1 synchronized实现原理与使用利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下三种形式。 对于普通同步方法,锁是当前实例对象

2021-03-19 17:25:34 9

转载 ZooKeeper 的应用场景

ZooKeeper 的应用场景0 OverviewZooKeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架。ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.ZooKeeper 解决了什么问题?高性能使得 ZooKee

2021-03-19 15:42:29 10

转载 高性能短链设计

前言今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题,本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家简单介绍下设计这套系统所涉及的一些思路,希望对大家能有一些帮助。本文将会从以下几个方面来讲解,每个点包含的信息量都不少,相信大家看完肯定有收获 短链有啥好处,用长链不香吗 短链跳转的基本原理 短链生成的几种方法 高性能短链的架构设计 注:里面涉及到不少布隆过

2021-03-19 14:03:49 13

转载 rocketmq消息积压一例

1、面试场景与面试技巧金三银四招聘季,一位粉丝朋友最近在蚂蚁金服第二轮面试时遇到这样一个问题:如果MQ消费遇到瓶颈时该如何处理?。横向扩容,相比很多读者与我这位朋友一样会脱口而出,面试官显然不会满意这样的回答,然后追问道:横向扩容是堆机器,还有没有其他办法呢?在面试过程中,个人建议大家在听到问题后稍作思考,不要立马给出太直接的答案,而是应该与面试官进行探讨,一方面可更深刻的理解面试官的出题初衷,同时可以给自己梳理一下思路。消费端遇到瓶颈,这是一个结果,但引起这个结果的原因是什么呢?在没有弄清

2021-03-19 10:05:48 308

原创 redis 最佳实践分享

Redis为什么变慢了?常见延迟问题定位与分析阿里巴巴官方最新Redis开发规范!

2021-03-17 10:32:34 12

转载 线程池中的线程执行任务时遇到了异常,线程被销毁还是放回线程池重新利用呢?

原文点这里,我这做个备份。有的线程它死了,于是它变成一道面试题。有些线程它活着,但它躺在池中碌碌无为;有的线程它死了,于是它变成一道面试题。这次的文章,要从一次阿里的面试说起。我记得那天是周一,刚刚经历过周末过的放松,干劲十足的我正在键盘上疯狂的输出。这时,我的手机响了起来,拿起一看,是来自杭州的电话,心想这次是要给我推荐股票呢还是要让我贷款呢。我接起了电话,准备“调戏一番”。那边响起一个声音:"你好,请问是xxx吗?这边是杭州阿里巴巴,现在有时间进行电话面试吗?"。说实在的,听完这句话..

2021-03-15 19:45:54 25

转载 美团针对Redis Rehash机制的探索和实践

背景Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统。经过不断的迭代研发,目前已形成一整套自动化运维体系,涵盖一键运维集群、细粒度的监控、支持自动扩缩容以及热点Key监控等完整的解决方案。同时服务端通过Docker进行部署,最大程度的提高运维的灵活性。分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系统之一。随着使用的量和场景不断深入,Squirrel团队也不断发现Re

2021-03-11 11:36:07 20

转载 Redis 哨兵集群模式下各节点之间的通讯机制

这篇文章,我们来看Redis是如何实现故障自动恢复的,它的实现正是要基于之前所讲的数据持久化和数据多副本而做的。Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵。下面就来具体来看看Redis的故障恢复是如何做的,以及其中的原理。部署模式Redis在部署时,可以采用多种方式部署,每种部署方式对应不同的可用级别。单节点部署:只有一个节点提供服务,读写均在此节点,此节点宕机则数

2021-03-10 17:54:18 78

转载 jvm误区--动态对象年龄判定

虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。学习jvm的人,基本都阅读过上面这段话,这里讲的是动态年龄的判定。对于动态的判定的条件就是相同年龄所有对象大小的总和大于Survivor空间的一半,然后算出的年龄要和MaxTenuringThreshold的值.

2021-03-08 10:34:24 56

原创 PhantomReference 引发的GC问题

一、问题分析围栏系统cms gc时间长,导致其他依赖系统接口报警。 查询gc日志如下:2020-05-08T16:12:11.082+0800: 883881.058: [GC remark 2020-05-08T16:12:11.082+0800: 883881.058: [Finalize Marking, 0.0272172 secs] 2020-05-08T16:12:11.109+0800: 883881.085: [GC ref-proc2020-05-08T16:12:11.109

2021-03-02 15:26:17 57

原创 ElasticSearch 入门指南

ElasticSearch使用指南系列文章索引【数据库】-- ElasticSearchElasticSearch官方指南

2021-02-24 19:09:31 20

原创 选单大厅架构分享

需求背景 即时单: 订单超过一定时间未派单成功,进入即时单大厅,满足'特定过滤条件'的司机可查看并抢单 预约单: 订单超过一定时间未派单成功,进入预约单大厅,满足'可发送抢单通知条件'的司机可查看并抢单 奖励: 对于通过抢单大厅抢单成功的订单,给予司机在价格等方面一定程序的奖励feed流系统架构 (脸书|推特|微博|知乎) 粉丝关注大V,大V发布文章(或动态),粉丝feed流中显示。 派单系统推送订...

2021-02-02 11:38:28 10

原创 Apparent connection leak detected

异常信息:pool.all.log.2021012610.gz:java.lang.Exception: Apparent connection leak detectedpool.all.log.2021012610.gz: at com.sq.driver.datasource.HikariDatasourceWrap.initDatasource(HikariDatasourceWrap.java:73)pool.all.log.2021012610.gz: at com.sq.config.

2021-01-26 18:48:30 758

原创 根治JAR包冲突

JAR包冲突不可避免 maven依赖管理的方式决定了jar包冲突不可避免,举个例子:在项目中引入了zookeeper jar 包依赖,但zookeeper 内部还会依赖于其他的 jar 包,从而形成一种链式的传递依赖,即A->B->C->D1。在一个项目中,这种链式的传递依赖线路是多条的,最终表现为tree,假设另一条链路为E->F->D2,这里的D1和D2分别为D的不同版本,就产生了JAR包冲突。 maven 解析 pom.xml 文件时,同一...

2021-01-23 18:16:23 63

转载 一种导致AbstractMethodError问题的原因

1)App和B-lib依赖于A-lib的不同版本,并且都实现了A-lib中定义的一个接口IFunc,运行时A-lib会调用各IFunc实现;2)B-lib仅在编译阶段依赖A-lib,实际运行的是APP中集成的A-lib;3)APP端升级了A-lib,在IFunc中新增了一个方法aNewMethod()。由于B-lib并未针对v2版本的A-lib进行适配,因此运行时当A-lib调用B-lib中的IFunc.aNewMethod()时就会发生AbstractMethodError。解决办法...

2021-01-23 17:29:42 88

转载 Java AbstractMethodError 原因分析

背景AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置:现在明确了AbstractMethodError所具有的特性:1.它是Error的子类,Error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶段被检查出来,只能在运行时才会触发。2.通过API文档里面的解释大致得出的结论就是说A依赖于B,但是执行的时

2021-01-23 17:28:23 169

转载 dependencies与dependencyManagement的区别

dependencies与dependencyManagement的区别1、DepencyManagement应用场景当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。由于我们的模块很多,所以我们又抽象了一层,抽出一个itoo-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本...

2021-01-23 17:24:45 23

翻译 Maven 依赖管理

Maven 依赖管理管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包;如何解析 jar 包依赖;包冲突是如何产生;如何解决包冲突;依赖管理解决什么问题;什么是依赖范围;使用包依赖的最佳实践等 6 个问题来介绍。如何引入 jar 包在代码开发时,如果需要使用第三方 jar 包提供的类库,那么需要在 pom.xml 加入该 jar 包依赖。例如:使用 zookeeper client<dependencies> <!-- https://mvnrep

2021-01-23 17:18:25 18

原创 派单 技术年刊

线程池分享1. io型线程池 PK cpu型线程池2. 阻塞队列的选择3. 延迟可调度线程池隔离 (避免某一城市派单量激增影响到所有的延迟任务,也可以根据不同线程池的处理任务数来动态调整即时单轮间隔)围栏性能优化1. 二级缓存引入2. 稀疏算法引入,避免某个围栏点过多,产生大对象3.Caffeine替换GuavaCache,提升本地缓存性能4. 射线算法 PK rtree算法...

2021-01-23 16:55:04 5

转载 干掉GuavaCache:Caffeine才是本地缓存的王

干掉GuavaCache:Caffeine才是本地缓存的王话说,中间件的选择上,Spring(SpringBoot)一直是业界的风向标。比如Spring一直使用「Jackson」,而没有使用Gson和fastjson。SpringBoot2.0默认数据库连接池从TomcatPool换到了「HikariCP」。在本地缓存方面,SpringFramework5.0(SpringBoot2.0)放弃了Google的GuavaCache,选择了「Caffeine」(Drop Guava caching - su

2021-01-20 11:24:41 36

转载 logback 使用异步和缓存提升日志效率

主要是使用AsyncAppender 提供异步功能,然后使用 immediteFlush配置使用缓存(缓存8k).注意: 高版本的logback 已经指出SizeAndTimeBasedRollingPolicy , 我的版本是1.0.13可以使用SizeAndTimeBasedFNATP实现。<?xml version="1.0" encoding="UTF-8"?> <configuration> <substitutionProperty .

2021-01-20 09:56:58 97

原创 并发容器技术选型

并发安全的mapHashTableSynchronizedMapConcurrentHashMap CopyOnWriteMap NonBlockingHashMap 并发安全的setSynchronizedSetConcurrentHashMap#newKeySetCopyOnWriteArraySetNonBlockingHashSetHashTable SynchronizedMap SynchronizedSe...

2021-01-19 17:53:29 21

转载 从Elasticsearch来看分布式系统架构设计

从Elasticsearch来看分布式系统架构设计分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大。这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系统等。我们先来简单看下Elasticsearch的架构。Elasticsearch 集群架构Elasticsearch是一个非常著名的开源搜索和分析系统,目前被广泛应用于互联网多种领域中,尤其是以下三个领域特别突出。一是搜索领域,相对于solr,真正的后起之秀

2021-01-18 16:01:01 16

原创 Reactor3 源码解析二十八:总结

Reactive Stream Specification链式编程实现Reactor线程调度JCTools使用函数式编程原子变量AtomicReference单例模式(11)滑动窗口(18)

2021-01-15 22:38:53 48

原创 Reactor3 功能介绍二十七: 测试&调试

Reactor的调试功能还是蛮强大的,log("xxxxxxxxxxx")可以打印出数据上下游传递的信息。参考文档:Project Reactor学习(6)--测试Reactor的调试——响应式Spring的道法术器反应式编程(Reactive Programming)...

2021-01-15 18:44:42 70

原创 Reactor3 功能介绍二十六: Context

在响应式编程中,一个线程很可能被用于处理多个异步订阅关系, 同样,一个订阅关系在元素下发的过程中往往可能从一个线程切换到另一个线程。那么上下文变量如何传播呢?首先来看一个Context的简单用法: //案例一 String key = "message"; Mono.subscriberContext() .map( ctx -> "Hello " + ctx.get(key)) .subscriberContext( ctx -> ct

2021-01-15 16:22:12 287

原创 Reactor3 功能介绍二十五: ConnectableFlux

Flux<Long> flux = Flux.interval(Duration.ofMillis(50), Duration.ofMillis(100)) .take(5) .doOnSubscribe(s -> System.out.println("subscribed to source")); flux.subscribe(x -> { System.out.println("____" + x); }); Threa...

2021-01-14 18:27:52 78

原创 Reactor3 功能介绍二十四: combineLatest操作

combineLatest操作会把所有源中最新产生的元素合并成一个新元素下发。只要其中任何一个源中产生了新元素,合并操作就会执行一次,然后下发新产生的元素。如下图所示:Demo: Flux.combineLatest( Flux.interval(Duration.ofMillis(50), Duration.ofMillis(100)).map(x -> "a"+x).take(5), Flux.interval(Duration.Z.

2021-01-14 16:11:24 86

原创 Reactor3 源码解析二十三: FluxConcatMap源码剖析

Flux.just(5, 10) .concatMap(x -> Flux.interval(Duration.ofMillis(x * 10), Duration.ofMillis(100)).take(x)) .subscribe(System.out::println); Thread.sleep(1000*60l);concatMap操作与flatMapSequential操作非常相似,但在底层实现上有区别。flatMapSequential是...

2021-01-14 15:26:58 55

原创 Reactor3 源码解析二十二: FluxFlatMap源码剖析

flatMap 和 flatMapSequential 操作符把流中的每个元素转换成一个流,再把所有流中的元素进行合并。flatMapSequential 和 flatMap 之间的区别与 mergeSequential 和 merge 之间的区别是一样的。 Flux.just(5, 10) .flatMap(x -> Flux.interval(Duration.ofMillis(x * 10), Duration.ofMillis(100)).take(x))

2021-01-14 10:52:26 63

原创 Reactor3 源码解析二十一: FluxMerge源码剖析

前面二十章节主要以源码剖析为主,着重讲解reactor的调用流程,productor、consumer、subscription三者如何协调工作。reactor设计思路基本是一致,后面将着重功能介绍,感兴趣可以自行追踪源码(具备了前20章节的源码分析能力,针对新的API进行剖析并非难事)。Flux的buffer、window、groupBy主要是针对源序列进行拆分,将元素分配到不同的容器或group中,进行批处理。而merge和mergeSequential操作是将多个源合并成一个Flux源。merge

2021-01-13 15:35:11 138

原创 Reactor3 源码解析二十: FluxGroupBy源码剖析

Flux.just(1, 3, 5, 2, 4, 6, 11, 12, 13) .groupBy(i -> i % 2 == 0 ? "even" : "odd") .subscribe(f -> f.subscribe(t->System.out.println(f.key() + " : " + t)));输出结果:odd : 1odd : 3odd : 5even : 2even : 4even : 6odd ...

2021-01-13 13:58:19 102

一份详尽的jdbc教材

一份非常详尽的jdbc教材,入门和提高必备。JAVA程序员

2018-06-27

"四人帮"设计模式(达内串讲)

介绍了"四人帮模式"中最常见的十九种,很值的收藏一下

2009-05-13

lucene in action第二版(word版)

这是公认的最优秀的讲解lucene的书。书中详细讲解了lucene 2.9 API的使用,并指明了使用lucene构建搜索引擎的经验,包括:内存溢出、分页技巧、分词、结果打分、update索引注意事项等等。

2010-04-02

JAVA单点登录

单点登录实例、JAR包及相关说明、常见异常等.非常不错的资源。

2013-04-26

qian_348840260的留言板

发表于 2020-01-02 最后回复 2020-01-02

JSP中一个非常奇怪的问题

发表于 2009-05-15 最后回复 2009-05-20

空空如也

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

TA关注的人 TA的粉丝

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