自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 一个由pom文件中依赖的scope为provided引发的问题

通过Spring boot的主启动文件启动市报ClassNotFoundException,如下:Caused by: java.lang.ClassNotFoundException: io.grpc.ManagedChannelBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_1...

2019-07-14 23:00:25 3575

原创 由Spring boot devtools引发的Java异常:java.lang.LinkageError: loader constraint violation

最近遇到一个Java异常,排查了半天,具体的异常详情如下:java.lang.LinkageError: loader constraint violation: loader (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading for a different type with name "gr...

2019-07-14 22:39:40 6036 1

原创 Spring Security启动加载流程分析

主要参考博文:Spring Security启动加载流程梳理补充博文:DelegatingFilterProxy的作用与用法<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework...

2019-01-24 13:35:27 679

原创 Springboot中创建Filter的两种方式

传统的javaEE增加Filter是在web.xml中配置,如以下代码:<filter> <filter-name>TestFilter</filter-name> <filter-class>com.test.filter.TestFilter</filter-class></filter><fil...

2019-01-24 11:31:58 1708

原创 为什么Java多线程同步机制中wait/notify操作要先获取到锁?

首先,我们要清楚的是wait/notify操作是一种线程间同步机制。为什么要同步?因为多个线程要并发的访问同一共享变量,所以需要线程间同步,防止他们之间相互冲突。同步的关键字是synchronized,并没有明确的锁的语义。下面是一张线程的生命周期的图:根据上面的线程生命周期,我大概画了一下wait的原理:是释放锁以后再进入等待队列,还是进入等待队列以后再释放锁?这里有一个疑问。我...

2018-12-08 10:30:39 3066 3

原创 面试中被问到的红黑树

在微信公众号上看到了一篇文章觉得写的不错:2-3-4树是如何解决二叉树中非平衡问题的?为什么我觉得这篇文章写的不错,因为我知道红黑树是从2-3-4树转化过来的。2-3-4树和红黑树大家也可以找一些相关的文章看一下。为什么我觉得红黑树很重要,因为我在面试的时候被问到过,问的是HashMap中的红黑树。HashMap中冲突的元素个数小于8个的时候是用链表存放,大于8个的时候转换为红黑树。为什...

2018-11-06 12:22:09 1177

原创 Java 8:StampedLock、ReadWriteLock以及synchronized的比较

前面写的关于锁的文章太抽象,下面这篇文章给出了不同加锁方式之间的差距。Java 8:StampedLock、ReadWriteLock以及synchronized的比较我觉得这样的对比才能够更加深刻的理解不同枷锁方式的异同,以及乐观锁和悲观锁的区别。下面一篇文章也写的非常好:Java8 读写锁的改进:StampedLock(笔记)摘要如下:StampedLock是Java8引入的一种新的...

2018-11-04 14:13:14 449

原创 项目系统性管理

前面的文章从架构上探讨了一下微服务的设计思想,虽然我们理解了微服务的整个架构,但是在实际工作中如何落地呢?这才是最主要的问题。就像现在很火的DevOps和敏捷开发的思想,如果不能在实际工作中用起来,那他们也只能是一个概念而已。幸好现在有一个可以把这些理念都融合在一起的,可以落地的一个企业级数字服务平台Choerodon,它包含了敏捷管理、应用管理、开发流水线、部署流水线和测试管理等一系列和项目整...

2018-11-03 11:31:20 549

原创 关于架构演进的一点思考

首先,架构的演进是为了解决什么问题?是为了解决软件系统日益增长的复杂性。通过什么方式解决的?通过分拆业务层(对每一层进行纵向划分)或增加一层(对每一层进行横向划分)来对系统进行更加细粒度的划分,便于理解系统的每一部分功能。计算机系统软件体系结构采用一种层的结构,有人说过一句名言:“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”“Any problem in compute...

2018-10-31 10:35:57 295

原创 Why Spring Cloud?

一提到微服务,大家就会谈到Spring Cloud,那么什么是Spring Cloud,他和Spring Framework有什么关系?下面我给出一些我自己的理解。我们对Spring框架已经非常熟悉了,它主要是一个Bean的容器,主要的特点是IOC和AOP,解决了Bean和Bean之间的依赖问题,还有面向切面的编程思想。下面我们来类比一下,我们知道Spring框架管理的Bean是类的一个实例,那...

2018-10-30 19:03:20 291

原创 关于Java中锁的几点思考

当对共享资源进行访问的时候必须使用锁对资源进行独占式声明,保证同一时间只有一个线程对共享资源进行访问。而一个线程可以多次访问加锁的共享资源,因为一个线程对共享资源的访问都是顺序的,不可能发生并发访问共享资源导致的问题。所以,所有的锁对于一个线程来说都是可重入的,只要当前线程获取到了锁。为此,Java中专门定义了一个类ReentrantLock来实现对资源的加锁和释放锁的操作。它比Java中的Syn...

2018-10-30 18:22:05 159

原创 Java架构及面试相关的几篇博文整理

Redis相关:漫画 | Redis常见面试问题(一)漫画 | Redis常见面试问题(二)漫画 | 数据库设计全过程深入学习Redis(5):集群【3y】从零单排学Redis【青铜】shiro源码篇 - shiro的session共享,你值得拥有Java自动拆装箱(Autoboxing and unboxing)学习架构师入门:Spring Cloud系列,Hystrix与Eur...

2018-10-30 16:04:34 267

原创 大O记法与排序算法

我们在描述算法的时间复杂度时都会用到大O记法,那么什么是大O记法呢?百度百科(大O符号)给出了比较准确的定义:它是用来描述一个函数的无穷大渐近。举个例子,解决一个规模为 n 的问题所花费的时间(或者所需步骤的数目)可以被求得:T(n) = 4n^2 - 2n + 2,那么当 n 趋近于无穷大的情况下,n方项起主导作用,所以它的时间复杂度可以被记为:O(n^2)。更加详细的介绍可见一下博客:大O...

2018-10-30 10:15:37 550

原创 数组、链表和树的演进

我们最常用的数据结构就是树,最基础的数据结构是数组,那么树在数组的基础上解决了什么问题?为什么用树而不用数组?下面我们来详细的剖析一下:上面的图是数组、链表和树的示意图,可以看到,数组中的元素没有指针,单向链表有一个指针,双向链表有两个指针,它们都是表示的顺序关系,也就是说,数组的下一个元素肯定挨着上一个元素,单向链表指针指向的肯定是下一个元素,双向链表的右指针指向的是下一个元素,左指针指向的...

2018-10-29 16:59:09 1242

原创 Java的阻塞与异步模型

From Blog:Java——BIO、NIO、AIO

2018-10-24 17:54:12 412

原创 Java继承和多态的底层原理

当子类继承父类以后,子类的对象为什么可以访问到父类中定义的方法?当子类Override了父类中的方法以后,访问的是子类Override以后的方法,这是怎么实现的?当子类Override了父类的方法以后,还有办法得到父类的方法吗?博客:重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别子类已经覆盖了父类,并且重写了父类的方法, 一般来说, 就没有必要用子...

2018-10-24 17:51:05 2402

原创 连接的建立与释放

连接的建立分为两端,一个是客户端,一个是服务端。建立连接一般是有客户端主动发起的,而关闭连接也是一般由客户端发起,但是服务端也可以主动关闭长时间没有通信的连接以释放服务器的资源。详细的信息见博客:图解TCP连接建立与释放如果用户手动管理连接并且在建立连接以后没有主动释放连接,会导致每次都会创建新的连接,而旧的连接又不会被关闭,这样就导致了TCP连接资源的泄露。下面博客描述了资源泄露导致的问题:...

2018-10-24 15:06:34 268

原创 Java数据库连接池细节探讨

我们知道,数据库连接池可以把数据库的连接缓存起来,下次使用的话可以直接取到缓存起来的数据库连接。那么,在这个过程中有几个细节需要注意:1、数据库的连接数有没有限制?2、数据库会不会自动断开已经建立的连接?假如数据库连接池需要建立的连接数比数据库能够支持的最大连接数要大,那么肯定会导致连接创建不了,如果数据库连接池中的连接长时间得不到使用,那么数据库会不会自动断开这个连接以节省资源?这是在处理...

2018-10-24 12:02:52 213

原创 Java线程详解

这篇文章计划讲一下整个Java线程的生命周期。要了解一个线程,首先要从它的创建说起,然后是线程的执行以及线程与线程之间的交互,最后是线程的销毁。一、线程的创建线程的创建有四种方式:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程4)使用线程池例如用Executor框架具体参见博客:线程创建的四种方式二、线程的执行线...

2018-10-22 14:41:04 118

原创 资源收集贴

一、IntelliJ IDEA导航特性Top20 (介绍了很多使用IntelliJ IDEA的实用方法)IntelliJ IDEA导航特性Top20二、提高mysql千万级大数据SQL查询优化30条经验(Mysql优化需要考虑的点)提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)...

2018-10-15 18:11:03 262

转载 GC ROOT的真实含义

作者:RednaxelaFX链接:https://www.zhihu.com/question/53613423/answer/135743258来源:知乎著作权归作者所有,转载请联系作者获得授权。之前看深入理解JVM这本书,对里面的GC ROOT的真实含义不是太清楚,网上查了一大堆资料都没有说的很清楚,下面这是从知乎大神上看到的,这里面记录一下,和大家一起学习所谓“GC roots”,...

2018-10-15 17:52:20 2249 1

原创 关系和业务的结合:领域驱动设计(DDD:Domain-Driven Design)

一个系统中和某些业务相关的类会自然而然地组合起来,就像人体中的细胞结合形成某个组织器官一样,这种关系在领域驱动设计中是一种聚合关系。关于DDD的其它详细信息,请参考网上的博文。本文只是一个引子,下面列举一篇博文:聚合(根)、实体、值对象精炼思考总结...

2018-10-15 17:41:13 284

原创 继承关系如何持久化到数据库

关系型数据库中的关系的详细描述可以参见下面的博文:数据库(二)—— 关系数据库以及关系代数和关系运算数据库设计中的数据库表和表之间的关系有:一对一、一对多和多对多这三种关系。可见,数据库表之间的关系是组合关系。那么在面向对象程序设计当中有哪些关系呢?答案是有两种关系:继承和组合。在设计模式中有一句话叫做:组合优于继承,说的是组合相对于继承更加灵活。参见如下博文:组合优于继承—设计模式...

2018-10-15 17:10:32 1027

原创 再谈面向对象中的封装、继承和多态

封装封装说的是把数据封装起来,对外暴露一个可以访问的接口,不能让外界直接访问内部的数据。从上面的描述可以抽取出两种类型:接口和类。从现在比较火的微服务的观点上来看,一个类就是一个服务,一个对象就是一个服务的实例,通过这个服务暴露的接口来访问这个服务。从这个意义上来讲,面向对象其实就是一个工程化的架构设计。继承继承是实现代码复用性的基础特性。继承关系其实是一种链式关系,使得我们可...

2018-10-15 14:52:34 197

原创 Java agentlib参数分析

再用intellij idea进行远程调试的时候,具体的配置选项如下:标红的一行显示了远程调试需要添加的虚拟机参数。这个参数到底有什么意义?我在命令行输入java命令,输入了命令的所有选项,其中,关于agent的选项有三个:关于JDWP的详细介绍如下:通过参考其它的博客信息,这个agentlib其实是Windows上的一个dll:个人感觉跟插件机制有点类似,具体的介绍还是要参见博...

2018-10-15 10:38:02 7453

原创 类的生命周期

类的生命周期定义在Java虚拟机规范第12章,包括类的加载、链接、初始化和卸载。具体类的加载和卸载过程可以在Java虚拟机启动的时候加上-verbose class参数来查看。下图比较形象地展示了类的整个声明周期:具体请参见博客:深入理解JVM(六)——类加载器原理下面我想提出一个问题,类的加载机制有什么作用?我们可以看tomcat控制台中关于项目的操作:可见,针对项目有开启、停...

2018-10-13 18:26:22 136

原创 Java内存模型详解

Java中内存模型的定义Java中内存模型的定义在Java语言规范的第17章第4小结,原文定义如下:A memory model describes, given a program and an execution trace of that program, whether the execution trace is a legal execution of the program. ...

2018-10-13 10:12:08 164

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除