0%

AbstractQueuedSynchronizer(抽象的队列式的同步器)简称AQS,AQS 中有一个非常重要的变量 state(同步状态,也可以理解为资源),所有与同步相关的操作都是跟它有关的。它是用 volatile 修饰的,volatile 保证了内存可见性但并不能保证并发操作时的原子性,所以除了常规的getset方法外还额外有一个 compareAndSetState()方法,这个方法最终调用了一个 Unsafe 类的本地CAS方法 compareAndSwapInt() 以保证操作的原子性。

1
2
3
4
5
6
7
8
9
10
11
12
13
private volatile int state;

protected final int getState() {
return state;
}

protected final void setState(int newState) {
state = newState;
}

protected final boolean compareAndSetState(int expect, int update) {
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
阅读全文 »

项目加入MongoDB支持,今天第一次用到,学新东西要做笔记。

MongoDB Version:3.4.6
spring-data-mongodb Version:1.10.23.RELEASE

org.springframework.data.mongodb.core.query.Criteria

CriteriaMongodb说明示例
Criteria and (String key)$and并且criteria.and("name")…
Criteria andOperator (Criteria… criteria)$and并且criteria.andOperator(Criteria.where("name")…)…
Criteria orOperator (Criteria… criteria)$or或者criteria.orOperator(Criteria.where("name")…)…
Criteria is (Object o)$is等于criteria.and("name").is("tom")
Criteria ne (Object o)$ne不等于criteria.and("name").ne("tom")
Criteria lt (Object o)$lt小于criteria.and("age").lt(20)
Criteria lte (Object o)$lte小等于criteria.and("age").lte(20)
Criteria gt (Object o)$gt大于criteria.and("age").gt(20)
Criteria gte (Object o)$gte大于等于criteria.and("age").gte(20)
Criteria in (Object… o)$in包含criteria.and("name").in("tom","jerry"…)
Criteria nin (Object… o)$nin不包含criteria.and("name").nin("tom","jerry"…)
Criteria regex(Pattern pattern)$regex模糊查询criteria.and("name").regex(\Pattern.compile("^.*t.*$"))
阅读全文 »

最近在写一个项目时需要通过反射获取方法的参数名,在method.getParameters()拿到的是一些arg0 arg1 arg2 …之类的无意义参数。

查原因发现是在Java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。(java是静态语言,所以入参名称叫什么其实无所谓的)。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第四篇,Shiro中的过滤器初始化流程和实现原理。Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看源码追寻Shiro中的过滤器的实现原理。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第三篇,Shiro中的过滤器初始化流程和实现原理。Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看源码追寻Shiro中的过滤器的实现原理。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式或集群环境下的Session共享。在讲Session共享之前先说一下为什么要做Session共享。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

先给自己定个博客计划吧,不然很可能又要难产了。本次预计的篇幅量在三篇,第一篇先记录一下Shiro的基本使用,第二篇写一下基于Shiro实现的集群环境中的Session共享,第三篇深入Shiro框架看一下核心源码,会使用只是皮毛,了解原理才算真正学会框架。嗯,就先这么定吧。

阅读全文 »

博客搬迁,2019-7-20 打卡记录一下。这已经是第二次搬家了,每一次搬家都是一番折腾,费不少劲,不过每一次折腾都会学到一些新的东西,还是蛮开心的经历。第一次是从帝国CMS搬至自建的Java博客系统,这次再次搬迁至Hexo静态博客系统。

这次从计划到迁移完成,断断续续也持续了好多天。从原来的动态系统换为静态页面,不少东西必须重新规划。因为所有页面都变成静态的,所以那些动态数据采集和展示就必须依赖第三方来实现。

先是博客主题,看了一圈感觉玩Hexo的一半以上都是用NexT主题,我也就随大流了。不吹不黑NexT主题确实好看且功能强大。

阅读全文 »

今天遇到一个需求,需要将七牛云其中一个空间的资源复制到一个新的空间下,官方控制台只有一个跨区域同步的功能,在同一个区域下不让使用。

官方提供的开发者工具中有一个qshell工具能够满足需求 https://developer.qiniu.com/kodo/tools/qshell

这里做一个使用笔记,qshell使用的是当前最新版本v2.4.0,随着版本的更新使用方式或许会有不同请留意。

我这里使用的是Linux系统操作,windowsqshell的使用命令是一样的,但是有一个文本截取的命名使用的是linuxawk命令,windows下请自行查找使用相关命令。

阅读全文 »