自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chuxue1989的专栏

自己学习历程的记录,每天记录一点点

  • 博客(190)
  • 资源 (3)
  • 收藏
  • 关注

原创 Feign的面试

EnableFeignClients会引入一个FeignClientsRegistrar,他主要就是扫描@FeignClient注解的类,然后放到beanDefinition中。他会生成一个JDK代理,利用的核心invocation就是。

2023-10-10 16:45:12 262

原创 英文常用句型

记录自己的英语学习

2022-10-25 21:06:14 220 1

原创 elasticsearch 数据写入后可以立马被搜索吗

在Index, Update, Delete, and Bulk 等方法后面是可以添加?refresh参数的。针对refresh的值进行说明一、 空字符串或者true他会立马刷新相关的分配,也就是本次数据存储的分片,所以这个影响的结果是可以被立马感知的,但是可行而止,这种情况是极其消耗性能的.二、 wait_for首先es有一个参数叫index.refresh_interval, 这个是es自动刷新的间隔如果配置wait_for,那么就是等待es自动刷新,然后可见,而且这个刷新操作也可以手动调用

2021-04-13 11:26:47 1326

原创 Nacos源码分析【临时节点】

作为后起之秀,Nacos基本要取代Eureka的位置,我没有在项目中使用过,只在本地跑了一下,处于好奇我想浅显的分析Nacos的实现,看看是否比Eureka更优秀官网图从图中可以看到,nacos似乎比eureka多了一致性协议,eureka是p2p,也就是非强一致性,貌似nacos解决了这个问题,nacos还有控制台,嗯这个确实更方便了一、服务注册1.1 客户端eureka是利用SmartLifeCycle接口的生命周期方法來完成调用的。nacos是利用的事件监听机制来触发的。都是固定的套路,

2021-03-28 21:26:34 1043

原创 Feign源码分析

feign主要围绕注解@FeignClient和@Autowired来分析就好了,@FeignClient是注解在一个接口上面的,这个注解是一个标志,相应的后置处理器把有该标志的类加入到bean defenition中。@Autowired是注入属性的,feign采用的是FactoryBean的方式进行创建的。下面开始详细分析一、注解FeignClient在使用feign的时候都要的配置类上加上EnableFeignClients,这个注解上面有个Import注解,这个很重要@Import(Feign

2021-03-22 21:33:26 149

原创 Ribbon源码分析

Ribbon和RestTemplate紧密的结合在一起,因此想分析Ribbon,必须要先分析RestTemplate。一、ClientHttpRequestRestTemplate在执行的时候需要封装request请求,这个请求谁都可以自定义,他的顶级接口是ClientHttpRequest本次的主角是InterceptingClientHttpRequest。改request里面有一个拦截器列表interceptors。if (this.iterator.hasNext()) { ClientH

2021-03-22 10:43:29 122

原创 eureka源码流程分析

这是euraka官网的架构图从上面图中可以看到eureka的功能服务注册服务续约服务下线服务同步远程调用一、服务注册这个服务提供者需需要把自己的实例注册到注册中心中(就相当于把自己的信息放到婚恋中心),这个时候必须考虑几个因素服务提供者怎么和注册中心通信注册中心如何保存信息eureka利用了一个和springMVC差不多的框架jersey1.X的版本是sun公司提供的独立的jar包,在2.X版本中,已经将jersey融合到JavaSE中,在javax.ws.rs.*包中

2021-03-18 17:31:44 235

原创 Spring和SpringBoot监听器

聊到spring boot的生命周期,其实就是事件的监听,这里spring boot的事件监听和spring的有关联,先了解spring的事件监听一、ApplicationListener这个是自从spring3.0后可以对你感兴趣的进行监听,而这个实现机制是通过泛型ApplicationListener<E extends ApplicationEvent>来实现的。As of Spring 3.0, an ApplicationListener can generically dec

2021-03-15 15:24:07 292 1

原创 SpringBoot整体流程图解

之前分析springboot的时候,化了一些流程图,害怕忘了,这次贴在这上面。

2021-03-12 16:54:47 2724

原创 SpringMVC参数绑定

这个是根据参数前面的注解来分析的,我就分析其中最常见的2个一、RequestParam这个是最常见,他的原理更简单,就是request.getParameter()二、RequestBody如果参数特别多,那么会采用封装到bean。现在一般都是json格式的,如果得到request.getContextType是json的话。利用的转换器就是MappingJackson2HttpMessageConverter...

2021-03-12 14:55:32 76

原创 Elasticsearch的集群部署

这篇博客也谢不错,但是缺少了一些信息。在配置的时候可以直接指定是否是master节点。 而且可指定节点是非数据节点

2021-03-11 11:09:52 69

原创 Kafka索引

每个日志文件都有2个索引文件。偏移量索引和时间戳索引一、偏移量索引这个索引的特点是:他是稀疏索引,他是综合了存储和性能的折中考虑。该索引有2个字段,一个是偏移量,一个是改偏移量对应的物理地址。下面用一个例子来模拟根据offset查找message的过程。这个是各个日志分段的图(也就是.log文件)这个是0000.log日志分段和000.index的图首先定位日志段是哪一个,这个确定有个高明的地方,才用的跳表来进行的。...

2021-03-11 10:24:11 286

原创 SpringMVC新老父子容器解析

一、旧的方式在以前的版本springmvc有2个容器,一个是父容器,存储非@Controller注解的bean,一个是子容器专门用来存储@Controller注解的bean。如果说为什么要这么搞,是因为当时想强调MVC的概念,因为父容器是不能获得子容器的bean,所以在service层是不能调用 controller层里面的方法的。1.1 父容器<listener> <listener-class>org.springframework.web.context.

2021-03-10 11:01:26 315

原创 Spring的9处调用后置处理器

在Sping的整个生命周期中,有9个地方调用后置处理器。这些后置处理器是spring实现自定义功能或者扩展spring的核心所在一、postProcessBeforeInitialization该方法属于InstantiationAwareBeanPostProcessor后置处理器public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { @Nullable default Object po

2021-03-09 13:12:24 853 1

原创 线程池

精彩文章

2021-02-05 15:01:54 77

原创 Kafka消息积压问题

一、是否存在数据倾斜问题如果生产者指定了key,可以考虑是否存在数据倾斜,调整key的生成策略可以解决,如果没指定key,则默认情况下是不会产生数据倾斜的二、kafka分区不合理海量数据下,分区过少,则会造成下游的消费者并行消费的能力降低,而且数据的容灾也不靠谱三、消费者批量处理每次拉取消息的时候,可以选择批量处理...

2021-02-03 22:51:18 701

原创 Kafka消息的丢失和重复消费

精彩博客一、生产者消息丢失如果配置ack=-1,那么要求leader和ISR中的副本都有ack那么才会确保发送成功,在网络抖动或者网络故障的情况下,生产者和消息队列服务器无法通信了,生产者就会认为这个消息丢失了,通常情况下会采用消息重新发送的机制。这个也会造成消息重复。KafkaProducer 一般会发生两种类型的异常 可重试的异常和不可重试的异常 。常见的可重试异常有NetworkExceptionLeaderNotAvailableExceptionUnknownTopicOrPartit

2021-02-03 17:25:35 531

原创 Mysql是如何加锁的

行级锁并不是直接锁记录,而是锁索引,如果一条 SQL 语句用到了主键索引,mysql 会锁住主键索引;如果一条语句操作了非主键索引,mysql 会先锁住非主键索引,再锁定主键索引精彩博客一、主键索引如何验证行级锁是锁索引呢? 这个目前还没想到。。二、非主键索引...

2021-02-02 10:46:42 217

翻译 十三、redis缓存优化

一、缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储 层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 造成缓存穿透的基本原因有两个:第一, 自身业务代码或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中解决问题:缓存空对象布隆过滤器对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不 存在的数据布隆过滤器一般

2021-01-14 13:26:58 100

原创 【Mysql】索引

一、索引结构1.1 二叉树一个根节点最多有2个节点1.2 红黑树从二叉排序树延伸而来,不同的是他会自旋来维持相对平衡。1.3 B-树在数量较多的情况下,红黑树会变得很高,而且只有2个子节点也不利于存储海量数据,这一个时候B-树应运而生。...

2020-12-30 14:09:44 100

翻译 【java线程】锁的优化

一、是否选择锁如果不存在多个线程操作共享变量,那么根本就无需锁二、是否可以选择ThreadLocal如果能用这个类解决,那么首先考虑这个。使用场景三、乐观锁乐观锁的核心就是自旋。现在很多类都是这个机制,AtomicXXX类的基本都是乐观锁的实现。他的适用场景是锁的竞争不是很激烈的情况。四、Synchronize可重入锁这类锁会导致线程从用户态切换到内核态,所以是重量级锁。但是自从1.5之后synchronize关键字已经优化了好多,现在基本和ReentrentLock性能一致4.1 Syn

2020-12-29 13:41:50 91

原创 【java线程】线程模型JMM

一、现代计算机读写模型现代计算机中,CPU高速发展,内存已经跟不上了,但是CPU还是要和内存打交道,这样内存就成为了瓶颈,这个时候为了解决这个问题出现了一个中间人:CPU高速缓存在内存中有一个变量a-0; 如果有多个CPU,那么每个cpu都有自己的高速缓存,当都读取变量a时,变量a会存在每个cpu的高速缓存中。这就会产生缓存一致性的问题,现在流行的解决方案是MESI:一篇不错的博客二、线程分类2个重要概念:用户空间和内核空间一个进程只能运行 在用户方式(usermode)或内核方式(kernel

2020-12-28 16:08:00 136

原创 【Spring源码分析】后置处理器

一、 ConfigurationClassPostProcessor1.1 他是一个beanFactory后置处理器BeanFactoryPostProcessor:就是针对bean definitionBeanDefinitionRegistryPostProcessor:在BeanFactoryPostProcessor检测之前注入更多的bean definitionConfigurationClassPostProcessor:主要是处理@Configuration的类上面的注解和里面

2020-10-09 21:13:04 117

翻译 二、dubbo内部模块分析

Dubbo 调用模块基本组成一、Dubbo调用模块概述:dubbo调用模块核心功能是发起一个远程方法的调用并顺利拿到返回结果,其体系组成如下:透明代理: 通过动态代理技术,屏蔽远程调用细节以提高编程友好性。负载均衡: 当有多个提供者是,如何选择哪个进行调用的负载算法。容错机制: 当服务调用失败时采取的策略调用方式: 支持同步调用、异步调用二、负载均衡Dubbo 目前官方支持以下负载均衡策略:随机 (random):按权重设置随机概率。此为默认算法.轮循 (roundrobin)

2020-09-09 22:07:53 121

原创 dubbo入门

环境spring boot 2.1.xdubbo 2.7.7一、公共接口模块一般公司都会搭建一个maven私服,这样这些公共的接口模块安装到maven仓库中,然后其他模块引入即可。消费者模块引入后可以通过dubbo可以像调用本地服务一样调用远程的服务。 服务提供者也需要引入接口模块然后进行实现public interface DemoService { String sayHello(String name);}二、服务提供者模块2.1 pom主要引入2个依赖,当然必须是.

2020-09-09 21:06:07 137

转载 HA

总结的不错的文章

2020-09-03 17:07:50 84

原创 Redis底层数据结构

非常好的文章一、StringSDS:字符可修改预分配机制,避免频繁复配计算length只需要O(1)可以存储二进制数据二、hash数据少:ziplist内存利用率特别高,因为他是一个内存连续的,但是插入十分麻烦数据多:dict-非常想java8的hashMap,但是他的渐进式hash思想非常优雅三、listquicklist:-本身是个普通的双链表,但是每个实体确实个ziplist。算是综合双链表和ziplist的优点四、setredis的集合对象set的底层存储结构

2020-09-03 15:31:56 69

原创 我认识的Mongodb

一、简介NoSQL中的一员,但是我更想称呼它为半关系型数据库。相比于其他NOSQL他有索引机制、CURL语句,相对于关系型数据库它没有实物支持二、使用场景数据模型比较简单和需要灵活性更强的IT系统更高的查询速度不需要高度的数据一致性数据海量存储和更高的并发基于豆瓣电影举例说明NoSQL的应用场景电影基本信息分析电影与明星关系存储三、聚合操作pipeline 聚合mapRedurce 聚合pipeline 速度快,但只能运行在单机上,适合数据量小的实时聚合操作。mapRed

2020-08-31 14:05:10 87

原创 Zookeeper 经常使用场景实现【待补充】

待补充

2020-08-27 23:07:27 81

原创 数据结构和算法

一、参考介绍总体概括很好的一片文章简书的一个很好的文章

2020-08-25 15:51:45 102

转载 Zookeeper 数据写入和选举流程

一片写的不错的文章

2020-08-22 23:10:54 420

翻译 Java方法区深入分析

一、方法区的演进二、方法区的内部结构

2020-08-16 22:40:29 98

翻译 Java Heap 深入分析

一、TLAB二、重要参数XmxXms其他一般不会改变三、异常OOM:java heap space四、对象分配和回收4.1 对象分配的一般过程Eden 满了的时候回触发 YGC/minor gc, survior 满了的时候不会触发YGCSurvior满了有可能直接晋升到老年代4.2 对象分配的特殊过程五、Minor Major Full GCMinor GC:新生代回收Major GC:老年代的回收(目前只有CMS收集器有这个功能)Mixed GC: Min

2020-08-14 16:37:42 292

原创 Kafka消费者

一、消费者组和消费者消费者的概念很好理解,消费者组到底是做什么的呢?很多消息中间件都会有一对一和一对多,kafka利用消费者组巧妙的实现了。一个消费者只属于一个消费者组同一个topic,不同的消费者组的消费互不影响一个消费者组里面的消费者共同瓜分topic里面的消息,这里可以自定义瓜分的策略,这些策略大部分是和分区有关...

2020-07-16 22:07:20 109

原创 Kafka生产者

一、 重要参数1.1 serializer为什么需要这serializer? 因为broker 端接收的消息必须以字节数组(byte [] )的形式存在。常见值:org apache kafka.common.serialization.StringSerializer1.2 client.id这个参数都说建议显示指定,但也都没说为什么么这个参数用来设定 KafkaProducer 应的客户端 id 默认值为“” 如果客户端不设置, KafkaProducer自动生成一个非空字符串,内容形

2020-06-16 10:16:07 144

原创 Kafka重要参数汇总

一、zookeeper.connectlocalhost1 :2181,localhost1:2181,lcalhost2: 2181最好加一个chroot路径,比如localhost1 :2181,localhost1:2181,lcalhost2: 2181/kafka-cluster-name这样多个kafka集群可以共用一个zookeeper集群如果没有配置chroot,默认就是zookeeper的根路径二、 broker.idbroker在kafka集群的唯一Id,这个很重要,t

2020-06-16 09:32:19 492

原创 【Python实现】Kafka批量导入导出

Kafka Connect非常强大,但是也有局限性,不能个性化的定制,如果需要参考我的另外一个博客博客地址Python实现起来其实也很简单,就是利用消费者导出,生产者导入。而且我效率也很不错代码介绍下面是一个从某个topic读数据,然后写到另外一个topic的完整代码#!/usr/bin/env python# -*- coding: utf-8 -*-import jsonimport sysimport timefrom kafka import KafkaConsumer, To

2020-06-14 17:45:28 1212

原创 【Kafka Connect】Kafka批量导出和导入

一、Kafka ConnectKafka Connect是在0.9以后加入的功能,主要是用来将其他系统的数据导入到Kafka,然后再将Kafka中的数据导出到另外的系统。主要由2中运行模式本文是基于kafka 0.10.21.1 Standalone 单机模式单机模式就是只用一个进程去处理数据,但是一个进程可以配置多个works命令的使用模式bin/connect-standalone.sh config/connect-standalone.properties connector1.p

2020-06-14 17:37:19 1403

原创 【第十一章】塑造模板函数

这个是我经常使用的重构。这个结合模板设计模式更好理解你有一些子类,其中相应的某些函数一相同的顺序执行类似的操作,但各个操作的细节有所不同重点某些子类有相同的代码执行顺序比如类Binit();doGetFromDb(); doPostProcess();doSendToDownstream();然后类Binit();doGetFromDb(); doPostProcess();doSendToDownstream();这个时候先把代码都提取到超类中,这个

2020-06-09 22:53:59 209

原创 【第十一章】提炼子类/超类/接口/类

前面几章都是针对重复代码,条件表达等小型的重构,直到本章才开始稍微大型的重构。其实无外乎提炼类提炼子类提炼超类提炼接口一、继承还是组合这个是个分水岭,在Java编程思想中,有一句话组合优先于继承。其实继承不是简单是代码层面,在面向对象语言中继承和其子类是一个体系。而组合更相当于你借用其他类来完成功能。继承相对来说比较严格,有可能该类已经有子类,有超类的情况。二、提炼子类这个其实和前面算是重复的以子类取代类型码。这个是使用的继承。三、提炼超类这个一般是发现继承体系中又重复代码后采

2020-06-09 22:46:25 1072

kafka-manager-2.0.0.2.zip

kafka-manager 是一个开源的 kafka 管理工具,挺好用的,且目前找不到更好用的了。 然而一个头疼的问题是,项目的 release 页并没有提供现成的编译结果供下载,想用的话还得自行编译。编译过程既耗时又耗资源,时不时还受墙的影响,有时候我终于编好了,一段时间后要用又不记得放哪儿了。为了给广大群众以及我自己提供方便。

2019-07-23

java 实现tr069,包含文档介绍,很详细

java 实现tr069,包含文档介绍,很详细,利于新手了解,对项目有启发。

2015-11-10

spring 2.5。6 适合2.5.6以前的 以后的也推荐

这个是 英文版本的 spring API 其实开发中英文版本的才是最出色的 原汁原味, 实在不行的同学配合 有道词典完美解决

2013-05-16

空空如也

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

TA关注的人

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