0%

前面我们介绍了一种通过包装拓展功能的方法——装饰器模式,这里我们来了解另外一种使用包装思想的设计模式——Adapter Pattern适配器模式,其依然是结构型模式的一种。一般情况下,两个类如果接口不兼容是无法一起工作的。而如果通过Adapter Pattern适配器模式就可以很好的解决这个问题了

阅读全文 »

继承是拓展类功能最常见的手段,但是其缺点也很明显,其耦合程度较高。这里我们介绍一种新的方法来拓展类的功能——Decorator Pattern装饰器模式,其是结构性模式的一种,通过包装的方式实现动态增强、拓展已有对象的功能

阅读全文 »

之前我们介绍了Factory Pattern工厂模式,其较适合于只有一种类型产品的场景。但有些时候一家工厂可能会生产多种类型的产品。比如家电厂无论海尔还是美的,都会生产冰箱、洗衣机、空调等多种不同类型的产品。这个时候,就可以应用我们这里所说的Abstract Factory Pattern抽象工厂模式

阅读全文 »

很多时候我们只是期望获取对象实例即可,并不关心实例构造过程(例如相关Field的具体如何设置)。这个时候就可以将通过工厂模式来解决这个问题,其同样也是一种创建型模式。将实例的具体构造过程进行封装以对外屏蔽,就像现实世界中我们只需从工厂直接拿取产品即可,而无需care产品在工厂里的具体制造过程

阅读全文 »

Maximum Likelihood Estimation(MLE) 极大似然估计,又被称作最大似然估计。其可在给定概率分布模型的条件下用于模型参数的估计,即所谓的参数估计

阅读全文 »

对于synchronized锁机制而言,准确来说其应该属于JVM的范畴。这里基于行文的连贯性、完整性考虑,故将该部分内容在JMM系列中一并进行介绍

阅读全文 »

多线程并发的核心问题在于如何控制同步,幸运的是Java语言原生地提供了一个同步手段——synchronized关键字。本文这里就来简单谈一谈synchronized关键字

阅读全文 »

很多编程语言中都有 volatile 关键字,但是不同语言下其语义并不完全相同。本文将就其在Java中的语义作具体说明、解释

阅读全文 »

在并发编程中,线程之间的通信是一个很关键的问题,而该问题解决方案主要可分为两大类:消息传递、共享内存。前者有以Erlang语言为代表的Actor模型,而后者中典型的则是Java语言。对于消息传递机制而言,线程之间必须通过发送消息以进行显式地通信。而同步过程则是隐式地,因为消息的发送必须在消息的接收之前;而对于共享内存机制来说,线程之间可以通过读、写内存中的公共状态来实现隐式地通信,但同步操作则需通过开发者显式地进行指定。可以看到由于Java的并发采用是共享内存机制,所以在谈多线程并发编程之前,需要对JMM(Java Memory Model)Java内存模型有一定的了解

阅读全文 »

大多数情况下,通过诸如javap等反编译工具来查看源码的字节码已经能够满足我们的日常需求,但是不排除在有些特定场景下,我们需要通过反汇编来查看相应的汇编指令。本文我们就来介绍两个很好用的工具——HSDIS、JITWatch

阅读全文 »

在并发编程中,我们大多数情况下都是显式地通过加锁来保证线程安全。这里我们来介绍一种在无锁条件下多线程变量同步的方法——CAS(Compare And Swap,比较与交换)算法

阅读全文 »

本文对线程的生命周期及转化过程进行介绍,具体介绍Java多线程中的notify-wait机制并据此实现一个典型的生产者-消费者模型,并就实现线程停止的中断机制做简要说明

阅读全文 »

在Java开发中,多线程并发是一个永恒不变的话题与热点。这里我们开始讨论如何在开发中使用多线程实现并发

阅读全文 »

通过OpenJDK官方提供的JOL(Java Object Layout)工具,我们即可很方便分析、了解一个Java对象在内存当中的具体布局情况。这里将在64位的HotSpot Java虚拟机环境下进行分析、测试

阅读全文 »

Java的HashSet、HashMap集合应用及底层原理,相信大家都已经很熟悉了,这里就不再赘述了。这里主要来介绍下如何Java中的LinkedHashMap集合,同时也介绍下基于LinkedHashMap的LinkedHashSet集合、LRU算法实现

阅读全文 »

在Web应用中安全问题同样不可忽视,所以Spring Framework体系中也为此提供了解决方案——Spring Security。但是由于其较为复杂,新人上手较为困难。所以这里我们来介绍另外一个简单易用的开源安全框架——Apache Shiro,并说明如何在SpringBoot中实现身份认证、权限授权

阅读全文 »