Skip to content

Commit 0608b64

Browse files
committed
ignore
1 parent 1951904 commit 0608b64

8 files changed

Lines changed: 173 additions & 6 deletions

‎Fastjson/fastjson-jsonpath.java‎

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
-----------------
2+
jsonpath |
3+
-----------------
4+
# 类似于XPATH, 用于解析访问 json
5+
* 如果json体非常的复杂, 嵌套很深的话, 一层层的去访问非常的难受,
6+
* 就可以选择使用这种快速查找的表达式
7+
8+
9+
-----------------
10+
JSONPath |
11+
-----------------
12+
# 构造方法
13+
public JSONPath(String path)
14+
public JSONPath(String path, SerializeConfig serializeConfig, ParserConfig parserConfig)
15+
16+
# 静态属性/方法
17+
public static Object eval(Object rootObject, String path)
18+
public static Object extract(String json, String path, ParserConfig config, int features, Feature... optionFeatures)
19+
public static Object extract(String json, String path)
20+
* 根据path检索值
21+
* extract,按需计算, 性能会更好
22+
23+
public static int size(Object rootObject, String path)
24+
* 计算Size
25+
* Map非空元素个数, 对象非空元素个数, Collection的Size, 数组的长度
26+
* 其他无法求值返回-1
27+
28+
public static Set<?> keySet(Object rootObject, String path)
29+
* 获取, Map的KeySet, 对象非空属性的名称
30+
* 数组, Collection等不支持类型返回null
31+
32+
public static boolean contains(Object rootObject, String path)
33+
* 是否包含, path中是否存在对象
34+
35+
public static boolean containsValue(Object rootObject, String path, Object value)
36+
* 是否包含, path中是否存在指定值
37+
* 如果是集合或者数组, 在集合中查找value是否存在
38+
39+
public static void arrayAdd(Object rootObject, String path, Object... values)
40+
* 在数组或者集合中添加元素, 添加成功返回 true,失败返回 false
41+
42+
public static boolean set(Object rootObject, String path, Object value)
43+
* 修改制定路径的值, 如果修改成功, 返回true, 否则返回false
44+
45+
public static boolean remove(Object root, String path)
46+
* 删除指定path的元素, 删除成功返回 true,失败返回 false
47+
48+
public static JSONPath compile(String path)
49+
* 编译一个jsonpath为对象
50+
51+
public static Object read(String json, String path)
52+
* 从一个json字符串中, 根据指定的path读取为Json对象
53+
54+
public static Map<String, Object> paths(Object javaObject)
55+
public static Map<String, Object> paths(Object javaObject, SerializeConfig config)
56+
* 返回指定Java对象的属性的所有json访问path
57+
58+
# 实例方法
59+
* 实例方法跟上述的静态方法差不多, 只是不需要 path 参数
60+
* 因为构造的时候已经设置, 类似于 Pattern
61+
62+
63+
64+
-----------------
65+
支持语法 |
66+
-----------------
67+
JSONPATH 描述
68+
$ 根对象, 例如$.name
69+
[num] 数组访问, 其中num是数字,可以是负数, 例如:$[0].leader.departments[-1].name
70+
[num0,num1,num2...] 数组多个元素访问, 其中num是数字, 可以是负数, 返回数组中的多个元素,例如:$[0,3,-2,5]
71+
[start:end] 数组范围访问, 其中start和end是开始小表和结束下标, 可以是负数, 返回数组中的多个元素, 例如:$[0:5]
72+
[start:end :step] 数组范围访问, 其中start和end是开始小表和结束下标, 可以是负数,step是步长, 返回数组中的多个元素例如:$[0:5:2]
73+
[?(key)] 对象属性非空过滤, 例如:$.departs[?(name)]
74+
[key > 123] 数值类型对象属性比较过滤,例如:$.departs[id >= 123],比较操作符支持:=,!=,>,>=,<,<=
75+
[key like 'aa%'] 字符串类型like过滤,例如:$.departs[name like 'sz*'], 通配符只支持:% 支持:not like
76+
[key rlike 'regexpr'] 字符串类型正则匹配过滤,:例如departs[name like 'aa(.)*'], 正则语法为jdk的正则语法, 支持:not rlike
77+
[key in ('v0', 'v1')] IN过滤, 支持字符串和数值类型,例如: $.departs[name in ('wenshao','Yako')] $.departs[id not in (101,102)]
78+
[key between 234 and 456] BETWEEN过滤, 支持数值类型,支持not between 例如: $.departs[id between 101 and 201] $.departs[id not between 101 and 201]
79+
length() 或者 size() 数组长度, 例如$.values.size() 支持类型java.util.Map和java.util.Collection和数组
80+
keySet() 获取Map的keySet或者对象的非空属性名称, 例如$.val.keySet() 支持类型:Map和普通对象,不支持:Collection和数组(返回 null)
81+
. 属性访问, 例如$.name
82+
['key'] 属性访问, 例如$['name']
83+
['key0','key1'] 多个属性访问, 例如$['id','name']
84+
.. deepScan属性访问,例如$..name
85+
* 对象的所有属性, 例如$.leader.*
86+
87+
88+

‎Java/concurrent/java-juc-AbstractQueuedSynchronizer.java‎

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
----------------------------
2+
AbstractQueuedSynchronizer |
3+
----------------------------
4+
# 抽象队列同步器, 传说中的 AQS, 抽象类
5+
AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable
6+
7+
# 构造函数
8+
protected AbstractQueuedSynchronizer() { }
9+
10+
----------------------------
11+
CLH队列(线程同步队列) |
12+
----------------------------
13+
# 队列的Node
14+
static final class Node {
15+
static final Node SHARED = new Node();
16+
static final Node EXCLUSIVE = null;
17+
18+
static final int CANCELLED = 1;
19+
static final int SIGNAL = -1;
20+
static final int CONDITION = -2;
21+
static final int PROPAGATE = -3;
22+
23+
volatile int waitStatus;
24+
* 表示节点的状态
25+
CANCELLED: 值为 1, 表示当前的线程被取消
26+
SIGNAL: 值为-1, 表示当前节点的后继节点包含的线程需要运行, 也就是unpark
27+
CONDITION: 值为-2, 表示当前节点在等待condition, 也就是在condition队列中
28+
PROPAGATE: 值为-3, 表示当前场景下后续的acquireShared能够得以执行
29+
0(初始值): 表示当前节点在sync队列中, 等待着获取锁
30+
31+
volatile Node prev;
32+
volatile Node next;
33+
* 双向链表的前后节点
34+
35+
volatile Thread thread;
36+
* 入队列时的线程
37+
38+
Node nextWaiter;
39+
* 存储condition队列中的后继节点
40+
41+
//是否为共享模式
42+
final boolean isShared() {
43+
return nextWaiter == SHARED;
44+
}
45+
46+
// 返回前一个节点
47+
final Node predecessor() throws NullPointerException {
48+
Node p = prev;
49+
if (p == null)
50+
throw new NullPointerException();
51+
else
52+
return p;
53+
}
54+
//用于建立初始头或SHARED标记
55+
Node() {}
56+
// 使用在addWaiter方法中
57+
Node(Thread thread, Node mode) {
58+
this.nextWaiter = mode;
59+
this.thread = thread;
60+
}
61+
// 使用在Condition条件中
62+
Node(Thread thread, int waitStatus) {
63+
this.waitStatus = waitStatus;
64+
this.thread = thread;
65+
}
66+
}
67+
68+
69+
* Node 可以包含两个队列: next/prev 双向链表, 和 nextWaiter 单向链表
70+
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,15 @@
1515
----------------------------
1616
Lock-方法 |
1717
----------------------------
18-
lock();
18+
void lock();
1919
* 上锁
20+
21+
void lockInterruptibly() throws InterruptedException;
22+
23+
boolean tryLock();
24+
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
2025

2126
unlock();
2227
* 锁释放
23-
28+
29+
Condition newCondition();
File renamed without changes.

Java/concurrent/java-juc-lock-ReentrantReadWriteLock.java renamed to Java/concurrent/lock/java-lock-ReentrantReadWriteLock.java

File renamed without changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-----------------------------
2+
StampedLock |
3+
-----------------------------
4+
# JDK1.8ľÄĐÂËř, ˛˘˛ťĘÇ Lock ľÄĘľĎÖ
5+
StampedLock implements java.io.Serializable
6+
7+

0 commit comments

Comments
 (0)