标签 ‘ JAVA ’
Guava 源码分析(Cache 原理【二阶段】)
前言
在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache
的相关原理。
文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。
在开始之前先补习下 Java 自带的两个特性,Guava 中都有具体的应用。
我的阿里面试之路
前言
最近有些朋友在面试阿里,加上 Java-Interview 项目的原因也有小伙伴和我讨论,近期也在负责部门的招牌,这让我想起年初那段长达三个月的奇葩面试经历?。
本来没想拿出来说的,毕竟最后也没成。但由于那几个月的经历让我了解到了大厂的工作方式、对候选同学的考察重点以及面试官的套路等都有了全新的认识。
当然最重要的是这段时间的查漏补缺也让自己精进不少。
并发编程之——读锁源码分析(解释关于锁降级的争议)
1. 前言
在前面的文章 并发编程之——写锁源码分析中,我们分析了 1.8 JUC 中读写锁中的写锁的获取和释放过程,今天来分析一下读锁的获取和释放过程,读锁相比较写锁要稍微复杂一点,其中还有一点有争议的地方——锁降级。
今天就来解开迷雾。
使用JetCache的异步API访问Redis缓存
摘要:
本文介绍了JetCache的异步API,通过异步方式访问缓存可以提升性能,降低RT。
JetCache的异步API和同步API是完全兼容的,甚至用同步的开发方式也能获得一部分异步带来的好处。
Jarslink1.6.1版本特性
Jarslink 在4月初推出了新版本,增加支持Spring注解和模块多版本特性。欢迎参与开源项目,成为我们的Commiter。
注解的使用
新版本加入了注解的支持,用户只需要在构建ModuleConfig的时候调用ModuleConfig.addScanPackage(String)方法即可,可以多次调用该方法来添加多个扫描包配置,该配置会被spring用来作为扫描包配置。
Java Fork/Join框架
原文链接:A Java Fork/Join Framework(PDF) – Doug Lea
译序
Doug Lea 大神关于Java 7
引入的他写的Fork/Join
框架的论文。
响应式编程(Reactive Programming
/ RP
)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/架构模式的提升总结。Java
作为一个成熟平台,对于趋势一向有些稳健的接纳和跟进能力,有着令人惊叹的生命活力:
Java 7
提供了ForkJoinPool
,支持了Java 8
提供的Stream
。- 另外
Java 8
还提供了Lamda
(有效地表达和使用RP
需要FP
的语言构件和理念)。 - 有了前面的这些稳健但不失时机的准备,在
Java 9
中提供了面向RP
的官方Flow API
,实际上是直接把Reactive Streams
的接口加在Java
标准库中,即Reactive Streams
规范转正了,Reactive Streams
是RP
的基础核心组件。Flow API
标志着RP
由集市式的自由探索阶段 向 教堂式的统一使用的转变。
通过上面这些说明,可以看到ForkJoinPool
的基础重要性。
对了,另外提一下Java 9
的Flow API
的@author
也是 Doug Lee 哦~
PS:基于Alex/萧欢 翻译、方腾飞 校对的译文稿:Java Fork Join 框架,补译『结论』之后3节,调整了格式和一些用词,整理成完整的译文。译文源码在GitHub的这个仓库中,可以提交Issue/Fork后提交代码来建议/指正。
0. 摘要
这篇论文描述了Fork/Join
框架的设计、实现以及性能,这个框架通过(递归的)把问题划分为子任务,然后并行的执行这些子任务,等所有的子任务都结束的时候,再合并最终结果的这种方式来支持并行计算编程。总体的设计参考了为Cilk
设计的work-stealing
框架。就设计层面来说主要是围绕如何高效的去构建和管理任务队列以及工作线程来展开的。性能测试的数据显示良好的并行计算程序将会提升大部分应用,同时也暗示了一些潜在的可以提升的空间。
《RabbitMQ官方指南》RPC
远程过程调用
(RPC)
(Java 客户端版)
在第二章(工作队列 Work Queues)中,我们学习了如何使用工作队列在多用户之间分配耗时的任务。
但是如果我们需要在远程电脑上运行一个函数方法,并且还要等待一个返回结果该怎么办?好吧,这将会是一个不一样的故事。这种模式通常被我们称为远程过程调用或者RPC.
在本章教程中,我们将会学习使用RabbitMQ去搭建一个RPC系统:一个客户端和一个可以升级(扩展)的RPC服务器。由于我们没有任何的值得分配的耗时的任务,所以我们将创建一个返回斐波那契数列的虚拟的RPC服务。
Byte Buddy 教程(1.1)-编写一个安全的库
Java 语言带有一套比较严格的类型系统。Java 要求所有变量和对象都有一个确定的类型,并且任何向不兼容类型赋值都会造成一个错误。这些错误通常都会被编译器检查出来,极少情况下会被 Java 运行时检查到,然后抛一个非法类型的错误。如此严格的类型在大多数情况下是比较令人满意的,比如在编写业务应用时。通常,可以以任何模型元素表示其自己的类型这种明确的方式来描述业务域。通过这种方式,我们可以用 Java 构建具有非常强可读性和稳定性的应用,应用中的错误也非常贴近源码。除此之外,Java 严格的类型系统造就 Java 在企业编程中的普及。
JAVA互斥锁(synchronized&Lock):行为分析及源码
JVM中有这样一段注释:
[code lang=”java”]
// The base-class, PlatformEvent, is platform-specific while the ParkEvent is
// platform-independent. PlatformEvent provides park(), unpark(), etc., and
// is abstract — that is, a PlatformEvent should never be instantiated except
// as part of a ParkEvent.
// Equivalently we could have defined a platform-independent base-class that
// exported Allocate(), Release(), etc. The platform-specific class would extend
// that base-class, adding park(), unpark(), etc.
//
// A word of caution: The JVM uses 2 very similar constructs:
// 1. ParkEvent are used for Java-level "monitor" synchronization.
// 2. Parkers are used by JSR166-JUC park-unpark.
//
// We’ll want to eventually merge these redundant facilities and use ParkEvent.
[/code]