- 博客(23)
- 收藏
- 关注
原创 一文搞懂 Elasticsearch 基本概念
Cluster 和 NodeCluster 是对外提供搜索服务的集群,组成这个 Cluster 的各个节点叫做 Node。节点 Node 是 Elasticsearch 运行的实例;集群 Cluster 是一组有着同样 cluster.name 的节点,它们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node 又可分为 IndexNode(提供读写)、DataNode(只提供数据存储...
2020-03-31 17:40:42
599
原创 代码整洁之道--去除代码的坏味道
1. 神秘命名(Mysterious Name)整洁代码最重要的一环就是好的名字,所以我们要深思熟虑如何给函数、模块、变量和类命令,使它们能清晰地表明自己的功能和用法。命名是编程中最难的两件事之一。正因为如此,改名可能是最常用的重构手法,包括改变函数声明、变量改名、字段改名等。改名不仅仅是修改名字而已。如果你想不出一个好名字,说明背后很可能隐藏着更深的设计问题。为一个恼人的名字所付出的纠结...
2020-03-31 17:03:25
789
原创 圾收集器和内存分配与回收策略
一、垃圾收集器常用垃圾收集器图示: 图上半部分表示 Young generation 垃圾收集器,下半部分表示 Tenured generation 垃圾收集器。连线表示可以同时使用1. Serial 收集器特点:新生代收集器单线程它进行垃圾收集时,必须暂停其他所有工作线程(Stop The World)对于单 CPU 来说和其它收集器来比 --> 简单而...
2019-07-31 09:24:10
175
原创 HotSpot 垃圾收集算法的实现
根据对象存活判定算法和垃圾收集算法,HotSpot 虚拟机上实现这些算法时,对算法的执行效率有严格的考量。一、枚举根节点实现:由于目前的主流 Java 虚拟机使用的都是准确式 GC,所以当执行系统停顿下来后,并不需要一个不漏地检查完所有执行上下文和全局的引用位置,虚拟机应当是有办法直接得知哪些地方存放着对象引用。在 HotSpot 的实现中,是使用一组称为 OopMap 的数据结构来达...
2019-07-31 09:21:10
174
原创 垃圾收集算法
一、标记——清除算法实现:算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。特点:是最基础的收集算法缺点:效率问题,标记和清除两个过程的效率都不高空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次收集动作。...
2019-07-31 09:20:39
106
原创 HotSpot 虚拟机对象探秘
一、对象的创建过程当虚拟机遇到一条new 指令时:检查首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符合引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从Java...
2019-07-31 09:20:05
104
原创 如何判断对象是否已死
如何确定对象是“活着”还是已经“死去”?一、判断对象存活的算法1、引用计数法(未使用)判定条件:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不可能再被使用的。特点:实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法。很难解决对象之间循环引用的问题,主流 JVM 都没有使用。2、可达性分析...
2019-07-25 08:31:32
279
原创 Java内存区域与内存溢出异常
Java 虚拟机所管理的内存包括以下几个运行时数据区域一、程序计数器特点:线程私有当前线程的行号指示器唯一一个在Java 虚拟机规范中没有规定任何OOM情况的区域二、Java 虚拟机栈特点:线程私有存放各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型)使用-Xss 参数减少栈内...
2019-07-23 09:09:39
118
原创 Spring Boot 动手写一个 Start
我们在使用SpringBoot 项目时,引入一个springboot start依赖,只需要很少的代码,或者不用任何代码就能直接使用默认配置,再也不用那些繁琐的配置了,感觉特别神奇。我们自己也动手写一个start.一、新建一个 Start 的 Maven 项目pom 文件如下<dependencyManagement> <dependencies> ...
2019-03-08 17:46:49
909
原创 Spring Boot 之事件(Event)
Spring 官方文档翻译如下 :ApplicationContext 通过 ApplicationEvent 类和 ApplicationListener 接口进行事件处理。 如果将实现 ApplicationListener 接口的 bean 注入到上下文中,则每次使用 ApplicationContext 发布 ApplicationEvent 时,都会通知该 bean。 本质上,这是标准...
2019-03-05 13:18:35
480
原创 Future模式之CompletableFuture
CompletableFuture 是Java 8 新增加的Api,该类实现,Future和CompletionStage两个接口,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。一、主动完成计算public T get()该方法为阻塞方法,会等...
2019-03-04 17:58:49
201
原创 Spring Boot 自动配置之@EnableAutoConfiguration
Spring Boot 启动类上一个 @SpringBootApplication 注解是@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个注解组成的一个复合注解。其中 @SpringBootConfiguration 其实也是和@Configuration 注解组成的一个组合注解,功能也是和 @Config...
2019-03-04 09:22:27
218
原创 Spring Boot 自动配置之@Enable* 与@Import注解
SpringBoot 的自动配置如此强大,比如我们经常使用的@Enable* 注解来开启对某方面的支持。那么@Enable* 注解的原理是什么呢?一、@Enable* 注解与 @Import 注解之间的关系@Enable* 举例:@EnableScheduling 开启计划任务的支持@EnableAsync 开启异步方法的支持@EnableAspectJAutoProxy 开启对 As...
2019-02-27 13:13:22
473
原创 Spring Boot 自动配置之条件注解
Spring Boot 神奇的自动配置,主要依靠大量的条件注解来使用配置自动化。根据满足某一个特定条件创建一个特定的Bean。比如说,在某些系统变量下创建Bean,或者只有在某个Bean创建后才去创建另外一个Bean. 就是根据条件来控制Bean的创建行为,可以利用该特性来进行一些自动配置。一、常用的条件注解@Conditional 依赖的条件@ConditionalOnBean 在某...
2019-02-19 23:34:58
283
原创 Spring Boot 自动配置之组合注解
SpringBoot应用开发,会大量的使用注解,有些注解会经常一起使用,如果能通过一个组合注解进行包装则能够简化代码,并且还会避免因为少了某些注解而报错一、 常见的组合注解1. @SpringBootApplication该注解是SpringBoot项目的核心注解,该注解包含:@SpringBootConfiguration@EnableAutoConfiguration@Compo...
2019-01-29 10:42:27
561
原创 SpringBoot 如何让yml,properties配置文件有提示
我们在引用spring官方start库或者第三方start库时,在写配置文件时idea总是能精准的提示,并且鼠标可以点过去看具体属性或者类,而自己写的配置文件idea只会有“Cannot resolve configuration property …”这样的提示。我们现在也去配置我们自己的配置文件让idea知道这些配置文件是干什么的。一、需要的注解@ConfigurationProper...
2019-01-24 17:15:52
11517
3
原创 SpringBoot AOP的使用
AOP:面向切面编程,相对于OOP面向对角编程Spring的AOP的存在目的是为了解耦。AOP可以让一组类共享相同的行为。在OOP中只能继承和实现接口,且类继承只能单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足。还有就是为了清晰的逻辑,让业务逻辑关注业务本身,不用去关心其它的事情,比如事务。Spring的AOP是通过JDK的动态代理和CGLIB实现的。一、AOP的术语:ao...
2019-01-23 11:52:22
146
原创 SpringBoot 拦截器、过滤器、监听器
在工作中使用Web框架,总是避免不了与这些概念打交道,做一下总结,一口气说完拦截器、过滤器、监听器。GitHub源码地址1. 拦截器、过滤器、监听器区别拦截器(interceptor):依赖于web框架,基于Java的反射机制,属于AOP的一种应用。一个拦截器实例在一个controller生命周期内可以多次调用。只能拦截Controller的请求。过滤器(Filter):依赖于Ser...
2019-01-21 21:13:30
279
原创 SpringBoot 定时任务Scheduled
SpringBoot定时任务使用@EnableScheduling和@Scheduled这两个注解就能够简单实现,在集群环境下建议用Quartz等实现。 不多说看代码具体实现1.首先开启对Scheduled的支持@Configuration@EnableSchedulingpublic class ScheduledConfig {}2.使用@Scheduled注解@Se...
2019-01-15 23:20:52
158
原创 SpringBoot 对Future模式的支持
我们在实际项目中有些复杂运算、耗时操作,就可以利用多线程来充分利用CPU,提高系统吞吐量。SpringBoot对多线程支持非常好,对我们的开发非常便捷。 Future模式是多线程开发中非常常见的一种设计模式。核心思想是异步调用。当我们执行一个方法时,方法中有多个耗时任务需要同时去做,而且又不着急等待这个结果时可以让客户端立即返回然后,后台慢慢去计算任务。 当我们做一件事的时候需要等待,...
2019-01-08 11:33:32
4398
原创 SpringBoot 对多线程的支持
我们在实际项目中有些复杂运算、耗时操作,就可以利用多线程来充分利用CPU,提高系统吞吐量。SpringBoot对多线程支持非常好,对我们的开发非常便捷。1.需要的注解 springboot 配置多线程需要两个注解@EnableAsync在配置类中通过加@EnableAsync开启对异步任务的支持@Async在需要执行的方法上加@Async表明该方法是个异步方法,如果加在类级别上,...
2019-01-08 10:39:35
2062
2
原创 SpringBoot EL获取系统变量的方式
(1)准备为了方便IO操作,引入了commons-io&amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;groupId&amp;amp;amp;amp;gt;commons-io&amp;amp;amp;amp;lt;/groupId&amp;amp;amp;amp;gt; &a
2019-01-04 23:20:31
901
原创 BigDecimal 详解
一、常用方法初始化数据方法new BigDecimal() 传参支持 integer,long,double,float,BigIntegerBigDecimal.ZERO 初始化一个为0的BigDecimal对象BigDecimal.ONE 初始化一个为1的BigDecimal对象BigDecimal.TEN 初始化一个为10的BigDecimal对象【注意】new B...
2019-01-04 23:20:10
775
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人