
技术人生
文章平均质量分 78
程序员小单
Java 高级开发
展开
-
分布式任务调度中心xxl-job
分布式调度任务xxl-job原创 2022-08-01 17:58:10 · 1625 阅读 · 1 评论 -
深入理解Feign的负载均衡 失败重试 熔断
feign的组成1.Hystri 将每一个fegin请求封装成一个命令 通过执行命令来控制请求hystrixCommand.execute()2.Feign通过动态代理把最终请求的执行放在了SynchronousMethodHandler.invoke(同步的方法执行器)3.Feign请求通过ribbon负载均衡,来获取注册在eureka上的服务的IP+端口4.默认通过java自带的HttpURLConnection来发送http请求逻辑上 Hystri + ribbon + HttpURLCo原创 2021-04-16 15:49:50 · 2566 阅读 · 0 评论 -
RetryTemplate用法
public static void main(String[] args) throws Throwable { RetryTemplate retryTemplate = new RetryTemplate(); //指数退避策略 等待时间= 等待时间*倍数 ,即每一次的等待时间是上一次等待时间的n倍, //到达最大的等待时间之后就不在增加了,一直都是以最大的等待时间在等待。默认执行3次 ExponentialBackOffPolicy .原创 2020-11-02 17:57:09 · 8164 阅读 · 1 评论 -
HandlerMethodArgumentResolver简介
文章目录一、HandlerMethodArgumentResolver简介二、使用步骤(分析@PathVariable )1.自定义注解实现HandlerMethodArgumentResolver接口三、实战演练1.场景2.编写注解3.编写处理参数的类4.注册到spring mvc5.使用总结一、HandlerMethodArgumentResolver简介直接看源码/** * 解析处理方法参数的类 */public interface HandlerMethodArgumentResolv原创 2020-11-02 10:20:22 · 2521 阅读 · 1 评论 -
RabbitMq 传递消息实体中LocalDateTime转换不了
我们在用RabbitMq 传递参数的时候通常的做法就是 RabbitMqTemplete对象里的这个方法@Override public void convertAndSend(String exchange, String routingKey, final Object object) throws AmqpException { convertAndSend(exchange, routingKey, object, (CorrelationData) null); }如果我们传递的原创 2020-09-29 15:01:42 · 2572 阅读 · 0 评论 -
合并dev分支的部分代码到master
首先切换到master分支后如下操作查询提交的记录选择需要合并的提交点击cherry-pick将合并的代码推到远程分支原创 2020-08-27 15:49:21 · 858 阅读 · 0 评论 -
让人眩晕的递归
今天看到一个算法的题目用递归实现栈内数据的逆序,就是把栈内的数据从上到下颠倒过来。先思考一下这个难度只有2个星的题目自己能不能写出来。。。。。。。。答案的代码我一开始都没有看明白。上代码 public static void reverse(Stack<Integer> stack) { if (stack.isEmpty()) { return;//返回只结束当前的方法 } int i = getLastAn原创 2020-08-25 17:39:42 · 174 阅读 · 0 评论 -
Nginx安装和配置
nginx安装准备工作 官网下载Linux 版本的nginx 解压到/usr/local//usr/local/nginx-1.14.0一 安装依赖的插件 yum -y install pcre-devel openssl-devel/usr/local/nginx-1.14.0 目录下./configuremake && make install // 默认安装的路径 /usr/local/sbin/nginx安装完成 启动 /usr/local/nginx/sbi...原创 2020-08-25 18:12:57 · 199 阅读 · 0 评论 -
mongdb系列之currentOp查找慢查询
currentOp这个命令可以查看当前系统所有的操作信息,包括 find insert update remove等db.currentOp(true){ "host" : "mongodb:27018", "desc" : "conn71125", "connectionId" : 71125, "client" : "10.10.29.205:46144", "appName" : "mongoserver", "clientMetadata" : { "driver" :原创 2020-06-02 15:48:44 · 975 阅读 · 0 评论 -
redis系列七LUR清除算法
概述LRU : Least Recently Used 最少使用算法。redis默认使用的就是LRU算法,服务器的内存是有限的,当redis使用的内存达到最大值的时候,再继续存入数据就会将内存有原有的数据删除掉才可以再保存,这种删除数据的策略就是最近最少使用的数据删掉。缓存清理的配置再redis.conf文件种设置 主要有两个参数maxmemory:最大使用内存,超过这个内存之后就会进行LRU算法。如果是64位的机器设置为0,就表示没有内存限制,知道把服务器的所有内存用光。32位的机器如原创 2020-05-31 15:28:39 · 579 阅读 · 0 评论 -
redis系列六redis-cluster集群的原理
1 基础通信原理redis cluster 节点之间是采取gossip协议进行通信的。gossip协议是分散式的存储。跟集中式不同,集中式是将所有的节点信息 元数据,存在某个节点上。gossip 是将所有的数据分散存放在各个节点上,通过节点之间的相互通信来保存信息的完整性。2 基于重定向的客户端(1)请求重定向客户端可能会挑选任意一个redis实例去发送命令,每个redis实例接收到命令,都会计算key对应的hash slot如果在本地就在本地处理,否则返回moved给客户端,让客原创 2020-05-30 11:36:33 · 293 阅读 · 0 评论 -
redis系列五redis-cluste集群的搭建
一 环境准备三台虚拟机 centos7 安装6个redis的实例三个master 3个slave192.168.0.30 安装7001 7002 端口192.168.0.31 安装7003 7004 端口192.168.0.32安装7005 7006 端口本次安装也是基于前面的博客来安装的,单机的安装可以查看redis单机安装和生产环境的启动方式不同的地方就是修改的配置文件内容不一致。二修改配置文件redis.conf 文件修改为7001.conf 7002.con...原创 2020-05-30 00:44:01 · 369 阅读 · 0 评论 -
Redis系列四哨兵机制和数据丢失
sentinal 哨兵机制 主要功能1. 集群的监控 负责监控redis master slave 进程是否正常工作2. 消息通知 sentinal发现某个节点的有故障会给管理员发送消息3.故障转移 如果master node发生故障会自动将slave node 节点转化成master node4.配置中心如果故障转移发生了,通知client客户端新的master地址sentinal 本身也是分布式的,作为一个集群相互协作1.哨兵至少需要三个实例,来保证自己的健壮性。再判断mast.原创 2020-05-24 22:35:30 · 524 阅读 · 0 评论 -
redis系列三 主从架构的部署和原理
部署准备两台集器 一主一从192.168.0.30 主192.168.0.31 从分别在两台机器上安装好redis 具体步骤redis单机安装及生产环境的启动方案修改主服务器配置文件vim /etc/redis/6379.confbind 192.168.0.30 (原来是127.0.0.1修改成本机的ip 或者 0.0.0.0 允许其他集器连接这台集器。不修改的化从服务器无法连接到主服务器)requirepass redis-pass (连接主服务器需要安全密码验证 ,密码是redi原创 2020-05-24 18:09:36 · 1267 阅读 · 0 评论 -
redis系列二完全搞懂redis的持久化
redis本身就是缓存,数据再中央仓库也有存储为什么还要持久化呢? 意外情况redis服务器不可用,如果数据都丢失了,就必须从数据库同步过来 如果数据量很大的情况,这种操作是非常耗时的,如果请求全部都打到数据库 数据库也是承受不了的。所以数据的持久化是很有必要的。 持久化方案: RDB;每个一定时间生成redis的完整数据内存快照。快照的时候会有IO操作,redis一边响应客户端的请求一边持久化数据, Redis是利用多进程COW copy on write...原创 2020-05-23 17:29:43 · 255 阅读 · 0 评论 -
Redis系列一 单机安装和生产环境启动方案
准备工作:官网下载安装包有两个http://download.redis.io/releases/redis-5.0.5.tar.gz redis的安装包http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz 使用Redis的测试用例也就是tests目录下面用的是tcl脚本需要用到这开始安装tcl8.6.1-src 将下载好的两个包都放到/usr/local/tar -xzvf tcl8.6.1-src.tar....原创 2020-05-23 09:01:59 · 177 阅读 · 0 评论 -
ElasticSearch系列四 配置中文分词器
第一步下载 elasticsearch-analysis-ikhttps://github.com/medcl/elasticsearch-analysis-ik/releases 一定要选择跟自己安装的版本一样的.第二步 解压在es的安装目录plugins下新建文件夹ik将分词器加压到这个目录第三步 启动es查看分词效果自定义扩展词 停用词找到IKAnalyzer.cfg.xml 查看内容如下<?xml version="1.0" encoding="UTF-8"?>&l原创 2020-05-22 15:50:36 · 614 阅读 · 0 评论 -
tomcat 整体架构
tomcat 整体的架构tomcat中最顶层的容器是server,一个Tomcat只能有一个server.tomcat通过service对外提供服务,service比作一个家庭这个家庭的核心就是connector container,多个connector对应一个container.connector container两个组件就是tomcat整个架构的心脏.connector 作用用于接收客户端的请求,底层通过socket技术监听特定的端口,来接收请求并将请求按照一定的编码(默认UTF-8)原创 2020-05-11 17:29:52 · 334 阅读 · 0 评论 -
彻底解决跨域问题
跨域请求:实际经验说明只要不在同一个项目里面,异步请求另外一个项目,就要使用jsonp,否则请求不会成功. 而且jsopn的请求方式只能是get请求,post请求不支持jsonp的请求.发送请求代码:$.ajax({ url:'http://10.10.37.234:4567/visitorDeatil/submi...原创 2019-09-25 14:10:13 · 193 阅读 · 0 评论 -
谈一谈Spring IOC
概念IOC:Inversion of comtrol 控制反转,这个概念说起来很熟悉,理解起来还是有点困难的。要先弄清楚第一个问题:谁控制了谁?public class Persion { private Order order; public Persion(Order order) { this.order = order; }...原创 2020-05-07 11:07:51 · 149 阅读 · 0 评论 -
谈一谈 JVM 垃圾收集器
引言随着计算机硬件的不断演进 单核 到 多核 垃圾收集器也在不断的演进 单线程到多线程 并行到并发Serial && Serial Old JDK1.3的配置serial是新生代的垃圾收集器,标记 复制 算法serial Old 是老年代的垃圾收集器,标记 整理 算法单线程垃圾收集器 简单 高效 多核资源浪费执行流程1.新生代Ende区域的内存满了以后会触发...原创 2020-05-03 15:08:21 · 143 阅读 · 0 评论 -
ElasticSearch系列三 分组 聚合
文章目录基础知识案例基础知识bucket 其实就是分组 相当于msql 中 group bymetric 就是统计 相当于 mysql 中的count案例以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析GET /tvs/sales/_search{ "size": 0, "aggs": { "ppp": { ...原创 2020-04-28 18:44:17 · 1914 阅读 · 0 评论 -
mongdb系列之 aggregate展示未被分组的字段
最近遇到一个需求 查询mongdb 根据title字段分组 标题相同的统计数量 同时其他相关的字段也要展示.类似这样的sqlSELECT id,title , synopsis ,news_url ,COUNT(1) from crawl_news_info GROUP BY title LIMIT 10网上搜到的最多的就是最简单的显示的字段 分组的字段 和 操作符的字段 例如...原创 2020-04-22 17:49:14 · 1542 阅读 · 0 评论 -
JDK观察者 和 spring中的事件监听
文章目录设计模式之观察者模式JDK源码中为我们提供的观察者模式借助于Spring IOC 完善我们的代码spring 事件监听设计模式之观察者模式定义了一种一对多的依赖关系,让多个观察者同时订阅一个主题对象,当这个主题发生变化的时候会通知所有的观察者,观察者自己来完成自己的更新.JDK源码中为我们提供的观察者模式被观察的对象//可以被观察的类public class Observabl...原创 2020-04-20 18:43:51 · 203 阅读 · 0 评论 -
ElasticSearch系列二 DSL查询
文章目录查询和过滤查询match二级目录三级目录查询和过滤叶查询子句:在特定的字段上查找特定的值,比如 match term rang 可以理解为单条件查询复合查询字句:包含其他叶查询或复合查询,可以理解为多条件查询.查询: query 用于检索内容与条件是否匹配,并计算_score份数过滤:filter不计算匹配得分,只是简单的决定文档是否匹配,主要用于过滤结构化数据 如时间 状态 ...原创 2020-04-14 18:38:19 · 423 阅读 · 0 评论 -
工厂 + 策略 模式 如何做到完全对修改关闭
一般在使用设计模式的时候工厂模式和策略模式接合到一起使用,在工厂内根据不同的参数创建不同的策略这是一段伪代码方便大家理解 关于工厂模式和策略模式的具体细节不是本文的重点,重点是如何做到代码写完不去修改这个方法.随着业务的改变,会有不同的新的策略加进来,我们写一个新的策略类 然后再在这里添加一个case就可以了,但是作为一个对自己有要求的码农应该考虑如何做到只添加新的类 不去修改老的类....原创 2020-04-09 14:04:12 · 239 阅读 · 0 评论 -
创建对象的那些事
文章目录要不要在for循环内部new第一种情况 对于new的调用只存在于for循环以内第二种情况 对于new的调用不止存在于for循环以内外部也有调用new 和 clone的区别 哪个更快new一个对象的过程clone 对象要不要在for循环内部new第一种情况 对于new的调用只存在于for循环以内对象的保存位置是在堆内存中, p只是一个记录了堆地址的4个字节的引用 p存在的位置是栈内存...原创 2020-04-08 17:58:06 · 147 阅读 · 0 评论 -
ElasticSearch系列一 基础知识
文章目录基础知识elasticSearch是什么lucene的倒排索引压缩算法索引词文本路由分片索引 index类型 type文档 document映射 mappingID端口号基础知识elasticSearch是什么elasticSearch基与lucece构建的 分布式的 RESTFUL接口的全文搜索引擎.天生的分布式:它知道如何管理节点来完成扩展和高可用.所以水平扩展很方便只需要加...原创 2020-04-07 17:58:47 · 200 阅读 · 0 评论 -
mongdb系列之最详细基础知识
mongdb从入门到精通## 标题1标题1标题2标题2原创 2020-04-07 11:01:54 · 445 阅读 · 0 评论 -
Netty 系列五 Netty重要对象介绍
ServerBootstrap 服务器端的启动配置类,主要作用是将netty的各个组件串联到一起,客户端的配置类Bootstrap 主要的方法有public ServerBootstrap group(EventLoopGroup group) 装配一个线程组 一般客户端使用这个方法 客户端只需要有一个workgroup来处理事件public ServerBootstrap group...原创 2020-03-20 11:19:21 · 432 阅读 · 0 评论 -
Netty 系列四 netty实现客户端和服务端通信
package com.example.netty.netty.simple;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChan...原创 2020-03-19 16:29:19 · 230 阅读 · 0 评论 -
Netty 系列 三 Reactor模型和Netty模型
传统的IO模型Reactor模型 有三种 单Reactor单线程 单Reactor多线程 主从Reactor多线程分别对应下图单Reactor单线程单Reactor多线程主从Reactor多线程别名 分发者模式 通知者模式 反应器模式Netty模型就是基于主从Reactor多线程模式又进行了一些改造Netty 模型1.Ne...原创 2020-03-19 16:24:31 · 347 阅读 · 0 评论 -
Netty 系列 二 NIO 零拷贝
传统的IO操作流程这里好多人说有4次上下文的切换,这个我感觉不是很重要,次数主要是看开始的状态和最后结束的状态,上图中程序在数据到网络时就结束了,其实这之后还有一次内核到进程的切换,开始和结束都是在进程状态NIO实现零拷贝方式一transferTo()这个流程涉及到3次数据的拷贝 内核态与用户态上下文的切换次数比传统的模式少了2次直接在内核态完成数据的传输 数据...原创 2020-03-18 17:17:55 · 249 阅读 · 0 评论 -
Netty 系列 一 NIO模型
Java NIO 的模型图1.一个selector对应一个线程来管理2.一个selector 管理多个channel3.每个channel对应一个自己的buffer4.程序切换到哪一个channel是有事件决定的 event5.selector会根据不同事件在多个channnel之间来切换6.buffer是一个内存块 底层是一个数组7.对channel的读写都...原创 2020-03-18 15:23:11 · 216 阅读 · 0 评论 -
Elasticsearch调优实践
性能调优一 Linux参数调优关闭交换分区,防止内存置换降低性能。 将/etc/fstab 文件中包含swap的行注释掉sed -i '/swap/s/^/#/' /etc/fstabswapoff -a磁盘挂载选项noatime:禁止记录访问时间戳,提高文件系统读写性能 data=writeback: 不记录data journal,提高文件系统写入性能 barrier...原创 2020-03-11 08:48:11 · 318 阅读 · 0 评论 -
solr的缓存机制及调优方法
solr缓存大小的调整 1.缓存调的越大越好? 错误的 如果把内存大量的都给了solr那么操作系统的内存就会变小,操作系统可以利用空闲的内存提升io的效率,操作系统本身也有缓存 oscache,solr通过id来获取doc的时候如果可以命中oscache不发生磁盘的读写也会极大的提升速度; 大内存也可以是大垃圾,当大量内存不被命中的时候就是垃圾,而且这些垃圾...原创 2020-03-06 15:56:40 · 850 阅读 · 0 评论 -
rabbitMq 基础知识总结
RabbitMq 高级消息队列协议 elong 语言开发的几个重要的对象server 也叫boser 就是服务器ConnectionFactory :是connection的制造工厂Connection: 封装了Rabbitmq的socket链接部分的逻辑channel:管道我们的大部分业务的操作 queue exchange 消息的发布和订阅 都在这里完成的vritual host...原创 2020-03-05 09:34:31 · 234 阅读 · 0 评论 -
feign和ribbon的重试机制
前言首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例。feign重试feign的重试机制默认是关闭的,源码如下 //FeignClientsConfiguration.java @Bean @ConditionalOnMissingBean public Retryer feignRetryer...原创 2020-01-21 15:25:35 · 1472 阅读 · 0 评论 -
springBatch 事物 异常 配置
批处理任务的主要业务逻辑都是在Step中去完成的。可以将Job理解为运行Step的框架,而Step理解为业务功能。Step配置Step是Job中的工作单元,每一个Step涵盖了单行记录的处理闭环。下图是一个Step的简要结构:一个Step通常涵盖三个部分:读数据(Reader)、处理数据(Processor)和写数据(Writer)。但是并不是所有的Step都需要自身来完成数据的处...原创 2020-01-03 11:32:07 · 1658 阅读 · 0 评论 -
Zookeeper实现分布式锁
https://blog.youkuaiyun.com/kongmin_123/article/details/82081953原创 2020-01-02 14:18:42 · 105 阅读 · 0 评论