Java
、小H
这个作者很懒,什么都没留下…
展开
-
java - 解决es超过1万条无法查询的问题
在kibana客户端执行以下命令即可PUT es的索引名称/_settings{ "index":{ #设置该索引最大查询数量 "max_result_window":10000000 }}该配置的最大好处就是不用重启es原创 2021-01-20 11:02:14 · 1201 阅读 · 0 评论 -
SpringCloud之Zuul网关原理及其配置
Zuul简介 Zuul是spring cloud中的微服务网关。网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。 Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。 Zuul网关不是必要的。是推荐使用的。 使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用原创 2020-07-15 11:09:34 · 605 阅读 · 0 评论 -
SpringCloud之Hystrix容错保护原理及配置
1 什么是灾难性雪崩效应? 如下图的过程所示,灾难性雪崩形成原因就大致如此: 造成灾难性雪崩效应的原因,可以简单归结为下述三种:服务提供者不可用。如:硬件故障、程序BUG、缓存击穿、并发请求量过大等。 重试加大流量。如:用户重试、代码重试逻辑等。 服务调用者不可用。如:同步请求阻塞造成的资源耗尽等。 雪崩效应最终的结果就是:服务链条中的某一个服务不可用,导致一系列的服务不可用,最终造成服务逻辑崩溃。这种问题造成的后果,往往是无法预料的。2 如何解决灾难性雪崩效应? 解决原创 2020-07-14 13:51:31 · 333 阅读 · 0 评论 -
SpringCloud——Feign实例及原理
一、实例1、配置feign添加依赖在maven的pom中添加feign <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>配置启用在Application启动类中添加@En原创 2020-07-14 12:24:01 · 628 阅读 · 0 评论 -
eureka和zookeeper的区别
注册中心规则每一个微服务启动的时候,都需要去注册中心注册(eureka或zookeeper或其他)同类服务注册的服务名必须相同,不同类服务注册的服务名一定不能相同(订单服务部署5台服务器,那么这5台微服务在注册中心中注册的服务名必须一致,例如ORDER)(商品服务部署4台服务器,那么这4台微服务在注册中心中注册的服务名必须一致,例如GOODS)(订单服务和商品服务注册的服务名一定不能相同,不能同为ORDER,也不能同为GOODS)eureka是什么eureka作为分布式系统的注册中原创 2020-07-13 15:39:49 · 220 阅读 · 0 评论 -
Cloud Eureka概念、原理、心跳机制
Eureka是什么? Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。 Eureka Server提供服务注册服务,各个节点启动后,会在Eu...原创 2020-07-13 14:48:31 · 2336 阅读 · 0 评论 -
StringBuilder和StringBuffer的区别(检查多线程环境下会触发的问题和异常)
StringBuilder和StringBuffer的区别在哪里? 当接触这个问题的时候,我们可能第一反应就是,StringBuilder是线程不安全的,StringBuffer是线程安全的为什么StringBuilder是线程不安全,StringBuffer是线程安全? 针对这个问题,大部分的人可能就无言以对了,我们只知道StringBuilder是线程不安全的,StringBuffer是线程安全的,却不知道为什么,所谓知其然,而不知其所...原创 2020-07-13 11:23:44 · 911 阅读 · 0 评论 -
浅谈设计模式-状态模式
Intent允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。Class DiagramImplementation糖果销售机有多种状态,每种状态下销售机有不同的行为,状态可以发生转移,使得销售机的行为也发生改变。public interface State { /** * 投入 25 分钱 */ void insertQuarter(); /** * 退回 25 分钱 */ .原创 2020-07-07 19:17:52 · 185 阅读 · 0 评论 -
浅谈设计模式-策略模式
Intent定义一系列算法,封装每个算法,并使它们可以互换。策略模式可以让算法独立于使用它的客户端。Class DiagramStrategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。与状态模式的比较 ..原创 2020-07-07 17:03:06 · 123 阅读 · 0 评论 -
浅谈设计模式-单例模式
Intent 确保一个类只有一个实例,并提供该实例的全局访问点。Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。ImplementationⅠ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就...原创 2020-07-07 14:35:43 · 153 阅读 · 0 评论 -
浅谈设计模式-工厂模式
简单工厂Intent 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。Class Diagram 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。 这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那...原创 2020-07-07 14:22:00 · 164 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被Java虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟内存中开始,到卸载内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中,验证,准备和解析三个部分统称为连接(Linking)。原创 2020-07-06 14:45:10 · 127 阅读 · 0 评论 -
Java反射基本介绍和简单使用
概述定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。当然,也不是所有的都适合反射,之前就遇到一个案例,通过反射得到的结果与预期不符。阅读源码发现,经过层层调用后原创 2020-07-01 19:00:26 · 178 阅读 · 0 评论 -
mysql中将多行数据合并成一行数据,通过GROUP_CONCAT函数
一个字段可能对应多条数据,用mysql实现将多行数据合并成一行数据例如:一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句:1 SELECT am.activeId,m.modelName 2 FROM activemodel am 3 JOIN model m 4 ON am.modelId = m.modelId 5 ORDER BY am.activeId查询出的列表为图1所示:修改过后的sql语句,查询后如图2所示:1 S原创 2020-06-19 13:41:18 · 879 阅读 · 2 评论 -
基于springboot的多数据源配置
简介dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.0.x。示例项目可参考项目下的samples目录。特性数据源分组,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 内置敏感参数加密和启动初始化表结构schema数据库database。 提供对Druid,Mybatis-Plus,P6sy,Jndi的快...原创 2020-06-11 15:51:44 · 368 阅读 · 0 评论 -
Redis常识
前言Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。普遍用于目前主流的分布式架构系统中,关于redis的详细介绍,见另一篇文章:Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。如果你说还玩过Redis Module,像Bloo.原创 2020-06-11 15:19:36 · 213 阅读 · 0 评论 -
ReentrantReadWriteLock (读写锁)的使用
ReentrantReadWriteLock 是一个锁对象,他支持读数据锁和写数据锁;适合的使用场景1. 多线程环境2. 并且共同访问同一个资源数据3. 要求可以共享读数据,同时读4. 不能同时写数据注意事项读操作可以多线程同时一起读数据 但在写的时候,多个线程只能有一个线程在写,并且写的同时不允许去读数据使用方式 public static void main(String[] args) { //创建并发访问的账户 MyCount .原创 2020-05-28 11:22:10 · 413 阅读 · 0 评论 -
ReentrantLock的使用
一、初识ReentrantLock(ReentrantLock 实现了Lock interface)import java.util.concurrent.locks.ReentrantLock;/** * Created by haicheng.lhc on 17/05/2017. * * @author haicheng.lhc * @date 2017/05/17 */public class ReentrantLockTest extends Thread { pu.原创 2020-05-28 11:09:26 · 620 阅读 · 0 评论 -
@Cacheable的使用总结
Cacheable的使用总结 @Override @Cacheable(cacheNames = "CategoryListByParentId", key = "#parentId") public List<Category> listByParentId(Long parentId) { return categoryMapper.listByParentId(parentId,0l); }其中value表示该方法返回的参数的缓存存在那个Cache里(即为缓存块的名..原创 2020-05-26 18:08:37 · 1433 阅读 · 0 评论 -
SpringBoot @Cacheable注解的属性使用
cacheNames和value指定缓存组件的名字,通过下面代码可以看出可以将返回结果放在哪个缓存中,可以通过数组的方式指定多个缓存 一般标准在有返回实体得方法上,表示第一次进来,如果从指定缓存得名字获取数据,如果获取为空,就从方法得具体实现获取,第二次进来,就获取就直接获取缓存名称为CategoryListByParentId得值,key得parentId作为条件值缓存中查询 /** * Alias for {@link #cacheNames}. *...原创 2020-05-26 18:03:28 · 7083 阅读 · 3 评论 -
@Cacheable的实现原理
如果你用过Spring Cache,你一定对这种配置和代码不陌生:<cache:annotation-driven cache-manager="cacheManager"proxy-target-class="true"order="1"/>@Cacheable(value = "3600", key = "i'm a cache key")public List<Object> getData(){} ...原创 2020-05-26 17:48:59 · 4546 阅读 · 0 评论 -
Java的synchronized以及锁的相关概念
synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?在上面一篇文章中,我们了解到如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况:1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有;2)线程执行发生异常,此时JVM会让线程自动释放锁。 那么如果这个获取锁的线程由于要等待IO或者...原创 2020-05-25 15:28:17 · 191 阅读 · 0 评论 -
JDK下Concurrent包部分介绍
Executor Executor接口是所有线程执行类的父接口,这个接口可以建立线程池,然后执行线程。 Executor框架的最核心的类是ThreadPoolExecutor,它是线程池的实现类,创建ThreadPoolExecutor一般使用Executors工厂模式创建,Executors类提供了一系列工厂方法用于创先线程池: public static ExecutorService newFixedThreadPo...原创 2020-05-25 14:42:21 · 272 阅读 · 0 评论 -
雪花算法SnowFlake算法的java实现
1 二进制初识1.1 二进制概念二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。1.2 运算法则二进制的运算算术运算二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位原创 2020-05-13 15:37:52 · 1982 阅读 · 0 评论 -
CollectionUtils工具类的常用方法
集合判断: 例1: 判断集合是否为空: CollectionUtils.isEmpty(null): true CollectionUtils.isEmpty(new ArrayList()): true CollectionUtils.isEmpty({a,b}): false 例2: 判断集合是否不为空: CollectionUtils.isNotEmp...原创 2020-05-08 14:16:53 · 147 阅读 · 0 评论 -
Java8 Streams filter 使用
什么是流Stream(流)是一个来自数据源的元素队列并支持聚合操作元素 是特定类型的对象,形成一个队列。 Java 中的 Stream 并不会存储元素,而是按需计算。 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器 generator 等。 聚合操作 类似 SQL 语句一样的操作, 比如 filter, map, reduce, find, match, sor...原创 2020-04-30 10:35:37 · 415 阅读 · 0 评论 -
Java-List为多列进行分组
Map<String, List<ImportTErpSkcReplenishment>> result = importTErpSkcReplenishments .stream() .collect(Collectors.groupingBy(e -> . StrUtil.concat(true, StrUtil.toString(e.get...原创 2020-04-29 14:29:49 · 1320 阅读 · 0 评论 -
java stream中Collectors的用法
参考官方APIhttps://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html简介 在java stream中,我们通常需要将处理后的stream转换成集合类,这个时候就需要用到stream.collect方法。collect方法需要传入一个Collector类型,要实现Collect...原创 2020-04-28 20:16:39 · 1224 阅读 · 0 评论 -
常见Bean映射工具分析评测及Orika介绍
Bean映射工具选择 工作中,我们经常需要将对象转换成不同的形式以适应不同的api,或者在不同业务层中传输对象而不同分层的对象存在不同的格式,因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。 进行这种转换除了手动编写大量的get/set代码,还可以使用一些方便的类库,常用的有apache的BeanUtils,spring的BeanUtils,cglib...原创 2020-03-09 16:08:20 · 683 阅读 · 0 评论 -
@AllArgsConstructor与@Value共同使用引发的报错问题
平时我们用lombok的方式来实现Bean的构造函数方式的注入,但是当遇到@Value注解的时候,就会出现问题,看下面这段代码:@RestController@AllArgsConstructor@RequestMapping("test")public class TestController { @Value("${test}") private String t...原创 2020-03-06 10:21:32 · 3852 阅读 · 1 评论 -
Hutool中那些常用的工具类和方法
安装maven项目在pom.xml添加以下依赖即可:<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.6.3</version></depende...原创 2020-01-07 12:13:13 · 2434 阅读 · 0 评论 -
JDK1.8List去重
其中 b.getUserId是list中的一个属性 List<?> list = (具体实体)list.stream().filter(MapUtil.distinctByKey(b -> b.getUserId())).collect(Collectors.toList()); /** * list去重 * @param keyExtr...原创 2020-01-07 12:08:43 · 2172 阅读 · 0 评论 -
redis key前缀的设计
模板方法具体类 实现 抽象类 -->实现接口public interface KeyPrefix {public int expireSeconds();public String getPrefix();}抽象类BasePrefix实现KeyPrefixpublic int expireSeconds() {//默认0代表永不过期return expir...原创 2019-11-13 11:34:26 · 2506 阅读 · 0 评论 -
枚举代替常量类的使用-增强可读性
@Getterpublic enum SynchronizeGoodType { zero(0,"刚同步"), one(1,"正在使用"), ; private int status; private String message; SynchronizeGoodType(int status,String message){ ...原创 2019-11-12 15:43:15 · 251 阅读 · 0 评论 -
java 中 list集合中有几十万条数据,每100条为一组取出来如何实现
/** * 实现java 中 list集合中有几十万条数据,每100条为一组取出 * @param list 可穿入几十万条数据的List * @return map 每一Kye中有100条数据的List */ @SuppressWarnings({ "unchecked", "rawtypes" }) public Map groupLi...原创 2019-11-11 12:29:21 · 3576 阅读 · 0 评论 -
java jdk1.8 使用stream流进行list 分组归类
import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;public class Foo{ private String name; private String type; priv...原创 2019-11-10 12:08:10 · 3956 阅读 · 0 评论 -
idea配置docker
一、Docker开启远程访问[root@izwz9eftauv7x69f5jvi96z docker]# vim /usr/lib/systemd/system/docker.service#修改ExecStart这行ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock#重新加...原创 2019-11-01 10:51:55 · 2463 阅读 · 0 评论 -
Java原子操作AtomicInteger的用法
前言: JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理. 通过JDK1.8的AtomicIntegerkey保证多一定数据量的循环遍历保证线程安全问...原创 2019-10-30 12:29:42 · 290 阅读 · 0 评论 -
通过多个泛型,可以包装返回数据是平行的
public class ListResult<T> implements Serializable { private static final long serialVersionUID = 1L; /** * 返回数据对象 data */ @ApiModelProperty(value = "返回数据对象") priva...原创 2019-10-17 09:31:27 · 167 阅读 · 0 评论 -
字符对应的编码集
字符 - URL编码值空格 - %20" - %22# - %23% - %25& - %26( - %28) - %29+ - %2B, - %2C/ - %2F: - %3A; - %3B< - %3C= - %3D> - %3E? - %3F@ - %40\ - %5C| - %7C...原创 2019-07-28 21:56:59 · 5761 阅读 · 0 评论