0%

我们经常看到DevOps这个词,那么DevOps究竟是什么呢?DevOps 是一种软件开发方法。它将持续开发、持续测试、持续集成、持续部署和持续监控贯穿于软件开发的整个生命周期。当前几乎所有的顶尖公司均采用了该方法,用以提高软件开发质量,并缩短软件开发生命周期。从而以达到每个公司对软件产品的期望,交付出客户最满意的产品。

Eureka是Netfilx开源的服务发现组件,本身是一个基于REST的服务。它包含EurekaServer和EurekaClient两部分,SpringCloud将它集成在子项目Spring Cloud Netfilx中,实现了微服务的注册与发现。 Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用。 Eureka简单来讲就是Netflix开源的一款提供服务注册和发现的产品,Spring Cloud Netflix提供的胶水代码更换了一些初始化配置,并增加了更人性化的界面,可以这样理解,Spring Cloud Netflix让Eureka更简单易用,下面我们看看如何实现Eureka的高可用。

在日常使用SpringBoot的开发中,如果想要引入某个组件,几乎都是直接引入一个SpringBootStarter就完事,分析了SpringBoot的具体启动流程以及自动配置的原理其实很容易明白官方的starter是如何运行起来的,并且我们可以制作一个自己的SpringBootStarter,并且我会把自制的SpringBootStarter推送到公服,本篇文章会记录一个完整的开发流程。

Spring如何解决循环依赖是经常会被面试官问到的一个问题,这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出其中的原理。本文主要针对这个问题,从源码的角度对其实现原理进行讲解,彻底搞懂Spring究竟是如何解决循环依赖的。

Spring的丰富生态备受开发者青睐,尤其是自从SpringBoot出现之后去掉了原来的复杂配置,因为SpringBoot的理念就是约定大于配置,这让我们省去了很多需要手动配置的过程,就拿SpringMVC来说吧各种XML配置直接劝退初学者,但是SpringBoot的易用性简直是成为了推广Spring生态的利器。本篇文章主要是结合SpringBoot的源码,来探究SpringBoot应用程序的启动流程!

在之前文章中记述了堆的实现(插入方式建堆、heapify方式建堆以及堆排序) 《 堆的实现及其应用 》 。今天来看看索引堆是个什么东西,对于我们所关心的这个数组而言,数组中的元素位置发生了改变。正是因为这些元素的位置发生了改变,我们才能将其构建为最大堆。 如果元素十分复杂的话,比如像每个位置上存的是一篇上万字的文章。那么交换它们之间的位置将产生大量的时间消耗。并且由于数组元素的位置在构建成堆之后发生了改变,那么我们就很难索引到它,很难去改变它。可以在每一个元素上再加上一个属性来表示原来的位置可以解决,但是这样的话,必须将这个数组遍历一下才能解决。针对以上问题,我们就需要引入索引堆(Index Heap)的概念。

Lock是可中断锁,而synchronized不是可中断锁。现假设线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用synchronized,如果A不释放,B将一直等下去,不能被中断;如果使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。获取锁超时机制还是属于不可中断,属于超时被动放弃去竞争锁,而lockInterruptibly是可主动放弃竞争锁行为的一种方式。

Oracle官方于2018年9月26日宣布Java11正式发布。目前Oracle 官方也已经宣布Java11正式可以商用,这是Java 大版本周期变化后的第一个长期支持版本,非常值得关注。最新发布的Java11一共包含17个JEP(JDK Enhancement Proposals,JDK 增强提案)。对于企业来说,选择Java11将意味着长期的、可靠的、可预测的技术路线图。其中免费的OpenJDK11确定将得到OpenJDK社区的长期支持,LTS版本将是可以放心选择的版本。由于JDK9和JDK10都是一个过渡版本,JDK11的特性是在JDK9中就有的,我在博客里也做了总结 《 JDK9新特性(一)》 《JDK9新特性(二)》 ,其中已经介绍过的新特性将不会在这篇文章出现。