1. 背景 最近团队内部技术分享,我做了个关于AQS的分享。ppt中涵盖的部分要点内容,现在整理到博客上。 关于AQS本身的源码解读,可以参考我之前的博文。 2. 要点梳理 下面是一些技术分享的要点梳理。 2.1 LockSupport的实现 AQS中的阻塞/唤醒最终是基于LockSupport的park/unpark实现的。那么park和unpark又是怎么实现的呢? 对于Mac ...
1. 背景 在之前的AbstractQueuedSynchronizer源码解读中,介绍了AQS的基本概念、互斥锁、共享锁、AQS对同步队列状态流转管理、线程阻塞与唤醒等内容。其中并不涉及Condition相关的内容。本文主要介绍AQS中Condition的实现即ConditionObject类的源码。 Condition在JUC中使用很多,最常见的就是各种BlockingQueue了。 ...
1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相关使用。 注意:文中的描述与结论基于MySQL 5.7.16以及Connect/J 5.1.42版本。 2. 预编译语句是什么 通常我们的一条sql在db接收到最终执行完毕返回可以分为下面三个过程: 词法和语义解析 优化sql语句,制定执行计划 执行并返回结果...
本文介绍在Mac上搭建Hive环境。 建议首先配置好Hadoop,搭建与配置可以参考我之前的博文Mac Hadoop的安装与配置。 当然你也可以选择使用Docker搭建环境,本文不作介绍。 安装 对于MacOs,推荐使用HomeBrew安装hive,一步到位。 $ brew install hive 创建元数据库 Hive默认用derby作为元数据库。这里我们用mysql来存储元数据,...
背景 本文整理一些Hadoop YARN的相关内容。 简介 YARN(Yet Another Resource Negotiator)是Hadoop通用资源管理平台,为各类计算框架(离线MR、在线Storm、内存计算Spark等)提供统一的资源管理和调度。 它提供的功能有: 统一资源管理和调度: 集群中所有节点的资源(内存、CPU、磁盘、网络)抽象为Container。计算框...
编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型、机子具体环境的不同,很难有资料能够一步到位。还是得碰到具体问题通过上网查来一个个解决。 下载OpenJDK 由于网络环境还不错,所以这里采用通过版本管理来下代码。 安装mercurial版本管理 brew install mercurial 接下来clone源码 hg clone http://...
1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化。本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的优化。其中非半连接子查询优化由于策略较少不作详细展开。 2. 子查询概念 子查询简单理解就是在sql中嵌套了select查询子句。子查询的优点在于它的可读性会比较高(相比写join和uni...
1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, CountDownLatch等等。学习AQS的使用与源码实现对深入理解con...
背景 在应用程序中,时常会碰到需要维护一个map,从中读取一些数据避免重复计算,如果还没有值则计算一下塞到map里的的小需求(没错,其实就是简易的缓存或者说实现记忆化)。在公司项目里看到过有些代码中写了这样简易的缓存,但又忽视了线程安全、重复计算等问题。本文主要就是谈谈这个小需求的实现。 实现 HashMap的实现 在公司项目里看到过有类似如下的代码。 public class ...
1. 背景 ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象,太误导人了。 ThreadLocal非常适合对Java多线程编程感兴趣的程序员作为入门类阅读,原因两方面: 加上注释源码也不过七八百行。 结构清晰,代码简洁。 本文重点导读Th...
A new version of content is available.