编辑
2020-04-28
服务端技术
00

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

编辑
2020-04-26
服务端技术
00

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

编辑
2020-04-25
数据结构与算法
00

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

编辑
2020-04-24
计算机基础科学
00

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

编辑
2020-04-18
编程语言
00

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新特性(二)》 ,其中已经介绍过的新特性将不会在这篇文章出现。