Java 设计模式——观察者模式

一、前言好久没更新设计模式系列了,这周闲来无事,就水一把,介绍个简单的——观察者模式。 所谓观察者模式,本质是就是发布与订阅,在日常生活中发布/订阅的例子有很多,比如大家微信里面的公众号,你可以订阅微信公众号,公众号发布文章后,微信会将文章推送给你。。。 二、发布 / 订阅在上面提到的公众号的例子,就是一个观察者模式。 你作为一名普通用户就是观察者,你可以关注或者取关公众号,当公众号发布消息时,你...

理解 BigDecimal 的 RoundingMode

在金融等对数据精度计算要求较高的领域,传统 double 运算无法满足要求, BigDecimal 类应运而生。实际使用中,RoundingMode 这个枚举类控制着小数的舍位原则,本文对该枚举类进行介绍。 一、RoundingMode.DOWN等价枚举: BigDecimal.ROUND_DOWN 舍位原则: 粗暴截断舍弃位,不考虑任何进位舍位操作 例: Scale = 2 1234Origin...

Java Switch 是如何支持 String 的,为什么不支持 long

我们知道 Java Switch 支持byte、short、int 类型,在 JDK 1.5 时,支持了枚举类型,在 JDK 1.7 时,又支持了 String类型。那么它为什么就不能支持 long 类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢? 一、结论不卖关子,先说结论: switch 底层是使用 int 型 来进行判断的,即使是枚举、S...

String hashCode 方法为什么选择数字31作为乘子

一、背景某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。在接下来章节里,请大家带着好奇心和我揭开数字 31 的用途之谜。 二、选择数字31的原因在详细说明 String hashCode 方法选择数字31的作为乘子的原因之前,我们先来看看 String...

详解 Guava Cache

一、Guava Cache一般在项目中,本地缓存的实现为 ConcurrentHashMap,它具有线程安全、持久有效的特点。但是相较于传统缓存,它不具备缓存过期、缓存移除等特性,Google Guava 包内的 Cache 模块可能会给你一个新的选择。 Guava 目前托管于 GitHub,在项目中引入也是十分简单: 1234567<dependency> <groupI...

Java 集合框架

Java集合框架 (Java Collections Framework, JCF) 也称容器,在这里主要对如下部分进行源码分析,及在面试中常见的问题。例如,在阿里面试常问到的 HashMap 和 ConcurrentHashMap 原理等等。深入源码分析是面试中必备的技能,通过本文的阅读会对集合框架有更深一步的了解。 一、概述Java集合框架提供了数据持有对象的方式,提供了对数据集合的操作。Ja...

如何判断一个元素在亿级数据中是否存在

前言最近有朋友问我这么一个面试题目: 现在有一个非常庞大的数据,假设全是 int 类型。现在我给你一个数,你需要告诉我它是否存在其中(尽量高效)。 需求其实很清晰,只是要判断一个数据是否存在即可。但这里有一个比较重要的前提:非常庞大的数据。 常规实现先不考虑这个条件,我们脑海中出现的第一种方案是什么? 我想大多数想到的都是用 HashMap 来存放数据,因为它的写入查询的效率都比较高。写入和判...

Java 并发编程——Thread 类的使用

在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。 一、线程的状态线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一个线程来执行某个子任务...

Java 并发编程——volatile 关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一...
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×