在Java中要实现资源的互斥访问及线程间的同步,一般有两种方式,一种是通过synchronized(同步块或同步方法)结合Oject.wait()及Object.signal()来实现,另外一种是通过ReentrantLock和Condition来实现。为了解决不同条件下的并发问题,Java还引入了一些高级锁和同步机制,如Semaphore,ReentrantReadWriteLock,CountDownLatch和CyclicBarrier等等。

在项目开发中,用ReentrantLock相对较多,但对其的理解程序仅限于Java语言层面,对于JVM及操作系统的底层实现并没有了解,没有一个全局的概念,相关知识点存在断层,如ReentrantLock在JVM和操作系统中到底对应什么实体?等待队列存储在什么地方?线程的等待及唤醒对应什么样的操作?JVM及操作系统在ReentrantLock中提供了什么样的功能?正好在学习操作系统的知识,把这些知识重新梳理下,打通认知上的盲点。

阅读全文 »

Memcached是一个基于内存的缓存系统,存储的是key/value的键值对,与Redis类似。不过相对于Redis,值是无类型的字节数组(类比于Reidis中的String类型)。在Reidis中构建了一个对象系统来存储键值对,Memcached内部是如何处理的?抱着这份好奇心来分析下Memcached的内存模型。

阅读全文 »

Redis是一个key-value类型的数据库,key可以是整数或者字符串,value可以支持丰富的数据结构,如字符串、列表、哈希、集合及有序集合。在Redis中,对这些数据结构统一进行了封装,都是以redis对象(redisObject)来呈现,这篇文章主要是对redisObect内部原理及实现做一些梳理,内容主要基于《Redis设计与实现》。

阅读全文 »

Redis中有丰富的数据结构,如简单动态字符串、链表、字典、跳跃表、整数集合及压缩列表,基于这些数据结构,封装了一套对象系统,供用户使用,这篇文章主要是对这些数据结构进行了一个总结及加深理解。

阅读全文 »

环境说明: JDK:1.8.0_111 Tomcat:8.5.40 Cas-Server:5.3.9 Template:thymeleaf

搭建一个基本的CAS服务器过程如下:

  • 下载CAS Overlay template,以5.3.9版本为例: 地址为:https://github.com/apereo/cas-overlay-template/tree/5.3

  • 配置SSL环境;

  • 自定义登录页面;

  • 自定义用户鉴权;

  • 加入验证码;

  • 自定义登录错误信息;

阅读全文 »

一直对Docker中的镜像(image),分层(layer)及文件(file)三者之间的关系一直很好奇,这篇文章讲述就是这三者之间的关系。

阅读全文 »
0%