提交 114c7e87 编写于 作者: L luxin

add keywords_must and keywords_forbid

上级 432c302c
......@@ -9,5 +9,12 @@
"export": [
"HelloWorld.json"
],
"title": "编辑Java源代码"
"title": "编辑Java源代码",
"keywords_must": [
[
"编辑",
"源代码"
]
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-3c458ea864a540468e0b10cd82df0662",
"keywords": ["hello world", "app"],
"keywords": [
"hello world",
"app"
],
"children": [],
"export": ["app.json"],
"title": "编译Java程序"
"export": [
"app.json"
],
"title": "编译Java程序",
"keywords_must": [
"编译"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-2af8b309ed874ad6bd06c6f2363d098d",
"keywords": ["runtime", "运行机制"],
"keywords": [
"runtime",
"运行机制"
],
"children": [],
"export": [
"runtime.json"
],
"title": "Java的运行机制"
"title": "Java的运行机制",
"keywords_must": [
"运行机制"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-4ddfc05dbbe54300905f404c1ed1b4f9",
"keywords": ["classpath"],
"keywords": [
"classpath"
],
"children": [],
"export": [
"classpath.json"
],
"title": "根据CLASSPATH环境变量定位类"
"title": "根据CLASSPATH环境变量定位类",
"keywords_must": [
"CLASSPATH"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,9 @@
"export": [
"MavenDesc.json",
"MavenScript.json"
]
],
"keywords_must": [
"maven"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "第一个Java程序"
"title": "第一个Java程序",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"keywords": ["class", "类", "面向对象", "oo"],
"keywords": [
"class",
"类",
"面向对象",
"oo"
],
"children": [],
"node_id": "java-0593e0b9c9f74799a204d697f0db488b",
"export": [
"classic.json"
]
],
"keywords_must": [
"类",
"面向对象"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -6,5 +6,11 @@
],
"children": [],
"node_id": "java-968fb08ea9294e3c99aab38cbfe916cb",
"export": ["abstract.json"]
"export": [
"abstract.json"
],
"keywords_must": [
"抽象类"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"node_id": "java-1aabc6ccf62b49b4bbcabcd9a03c30a5",
"export": [
"interface.json"
]
],
"keywords_must": [
"接口"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"node_id": "java-a999491b97f44593a18e14690efaad34",
"export": [
"anonymous.json"
]
],
"keywords_must": [
"匿名类"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"keywords": [],
"children": [],
"node_id": "java-dbcdebbc3d584d0797d3bc16ef2191b7"
"node_id": "java-dbcdebbc3d584d0797d3bc16ef2191b7",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-3ea06f6d049d4c079a88747ffd0cc51e",
"keywords": ["字节流", "bytestream"],
"keywords": [
"字节流",
"bytestream"
],
"children": [],
"export": [
"bytestream.json"
]
],
"keywords_must": [
"字节流"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-046d129404f14676af135da42fea658b",
"keywords": ["文件", "文件类", "file"],
"keywords": [
"文件",
"文件类",
"file"
],
"children": [],
"export": [
"file.json"
]
],
"keywords_must": [
"File"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-b9fa688f8fe74e19b6e4b599982a60cc",
"keywords": []
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"app.json"
],
"title": "Java的基本语法格式"
"title": "Java的基本语法格式",
"keywords_must": [
"语法格式"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,9 @@
"export": [
"comment.json"
],
"title": "Java中的注释"
"title": "Java中的注释",
"keywords_must": [
"注释"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-e16c7862e7cc4feeb54cf6a42dd65cef",
"keywords": [
"关键字", "keyword"
"关键字",
"keyword"
],
"children": [],
"export": [
"keyword.json"
],
"title": "Java中的关键字"
"title": "Java中的关键字",
"keywords_must": [
"关键字"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "Java的基本语法"
"title": "Java的基本语法",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,10 @@
"vars.json",
"swap.json"
],
"title": "变量的定义"
"title": "变量的定义",
"keywords_must": [
"变量的定义",
"变量定义"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"datatype.json"
],
"title": "变量的数据类型"
"title": "变量的数据类型",
"keywords_must": [
"数据类型"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,9 @@
"export": [
"solidity.json"
],
"title": "Java中的常量"
"title": "Java中的常量",
"keywords_must": [
"常量"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"export": [
"scope.json"
],
"title": "变量的作用域"
"title": "变量的作用域",
"keywords_must": [
"作用域"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "Java中的变量与常量"
"title": "Java中的变量与常量",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,5 +12,14 @@
"find.json",
"max.json"
],
"title": "比较运算符"
"title": "比较运算符",
"keywords_must": [
"大于",
"小于",
"等于",
"比较",
"不等于",
"比较运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"export": [
"logic.json"
],
"title": "逻辑运算符"
"title": "逻辑运算符",
"keywords_must": [
"逻辑运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"arithmetic.json"
],
"title": "算术运算符"
"title": "算术运算符",
"keywords_must": [
"算术运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "Java中的运算符"
"title": "Java中的运算符",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,11 @@
"export": [
"if.json"
],
"title": "if条件语句"
"title": "if条件语句",
"keywords_must": [
"if条件",
"if语句",
"if"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"children": [],
"export": [
"switch.json"
]
],
"keywords_must": [
"switch"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "选择结构语句"
"title": "选择结构语句",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,11 @@
"children": [],
"export": [
"dowhile.json"
]
],
"keywords_must": [
"循环",
"do",
"while"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"for.json"
],
"title": "for循环语句"
"title": "for循环语句",
"keywords_must": [
"for"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "循环结构语句"
"title": "循环结构语句",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"collection.json"
],
"title": "Collection接口"
"title": "Collection接口",
"keywords_must": [
"Collection接口",
"collection"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"treeset.json"
],
"title": "树集"
"title": "树集",
"keywords_must": [
"树集",
"treeset"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-e5ffd95da6854271921fcd063a8e9474",
"title": "基本映射操作"
"title": "基本映射操作",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-27cbca6c546945238e456fd1402f59b4",
"title": "更新映射条目"
"title": "更新映射条目",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,40 +31,54 @@
"keywords": [],
"children": [],
"node_id": "java-f48bf1d3221842f9b45543b1705f870c",
"title": "映射视图"
"title": "映射视图",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"弱散列映射": {
"keywords": [],
"children": [],
"node_id": "java-ad195243648f4d1b851248f893dbeadd"
"node_id": "java-ad195243648f4d1b851248f893dbeadd",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"链接散列集与映射": {
"keywords": [],
"children": [],
"node_id": "java-d4b78c6364334984b1c8deea06e6e4d0"
"node_id": "java-d4b78c6364334984b1c8deea06e6e4d0",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"枚举集与映射": {
"keywords": [],
"children": [],
"node_id": "java-a83f26fffc33412cac3e404b57283586"
"node_id": "java-a83f26fffc33412cac3e404b57283586",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"标识散列映射": {
"keywords": [],
"children": [],
"node_id": "java-2f1a04fac2d742e3956e8f633d7fab60"
"node_id": "java-2f1a04fac2d742e3956e8f633d7fab60",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"map.json"
],
"title": "映射"
"title": "映射",
"keywords_must": [
"映射"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-98b609c0de1544bf955cd3e1996224f7",
"keywords": ["集合", "legacy"],
"keywords": [
"集合",
"legacy"
],
"children": [
{
"属性映射": {
"keywords": [],
"children": [],
"node_id": "java-192390a65e7749569e55494126db91e6",
"title": "属性映射"
"title": "属性映射",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,7 +20,9 @@
"keywords": [],
"children": [],
"node_id": "java-e133d7889d4a4eddbd93fdad42ae04a5",
"title": "栈"
"title": "栈",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -23,10 +30,18 @@
"keywords": [],
"children": [],
"node_id": "java-cc16eefb70744aea9126a1b697d20502",
"title": "位集"
"title": "位集",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": ["legacy.json"],
"title": "遗留的集合"
"export": [
"legacy.json"
],
"title": "遗留的集合",
"keywords_must": [
"遗留的集合"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,10 @@
"equals.json",
"hashCode.json"
],
"title": "编写equals和hashCode"
"title": "编写equals和hashCode",
"keywords_must": [
"equals",
"hashCode"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"export": [
"treemap.json"
],
"title": "使用TreeMap"
"title": "使用TreeMap",
"keywords_must": [
"TreeMap"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"export": [
"properties.json"
],
"title": "使用Properties"
"title": "使用Properties",
"keywords_must": [
"属性",
"Properties"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"deque.json"
],
"title": "使用Deque"
"title": "使用Deque",
"keywords_must": [
"Deque",
"双端队列"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-a65c6affd9d24c05aac81eb991fa544f",
"title": "List接口简介"
"title": "List接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-e617fbd29e3e416c980229a8f23ae0a7",
"title": "ArrayList集合"
"title": "ArrayList集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,12 +31,20 @@
"keywords": [],
"children": [],
"node_id": "java-8de89dae93b345ed947abe5cf9f9d572",
"title": "LinkedList集合"
"title": "LinkedList集合",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"list.json"
],
"title": "List接口"
"title": "List接口",
"keywords_must": [
"list",
"列表",
"List接口"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-71c08f278be9482492f5746259d7fd0c",
"title": "Iterator遍历集合"
"title": "Iterator遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-16725289376e4ff8ba87f63b82f362bc",
"title": "foreach遍历集合"
"title": "foreach遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,12 +31,19 @@
"keywords": [],
"children": [],
"node_id": "java-33bb9663a9e941c19e0e28bfdc9cfc0c",
"title": "JDK 8的forEach遍历集合"
"title": "JDK 8的forEach遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"iteratable.json"
],
"title": "Collection集合遍历"
"title": "Collection集合遍历",
"keywords_must": [
"遍历",
"迭代"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-80d1ea8eb29b4d42927df1703fd18027",
"title": "Set接口简介"
"title": "Set接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -18,7 +20,9 @@
"keywords": [],
"children": [],
"node_id": "java-70d9c1df4141440f815dcab59fb5d2fe",
"title": "HashSet集合"
"title": "HashSet集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -26,12 +30,19 @@
"keywords": [],
"children": [],
"node_id": "java-5e236f021e0545638e9785a3dde8a870",
"title": "TreeSet集合"
"title": "TreeSet集合",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"set.json"
],
"title": "Set接口"
"title": "Set接口",
"keywords_must": [
"set",
"集合"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-d5f0355891b4454f959628df25004459",
"title": "Map接口简介"
"title": "Map接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-7e4b2b11a68a485e97706575f8a53995",
"title": "HashMap集合"
"title": "HashMap集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,26 +31,37 @@
"keywords": [],
"children": [],
"node_id": "java-4f293ef4f50f441d8e45935103f4c70f",
"title": "Map集合遍历"
"title": "Map集合遍历",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"TreeMap集合": {
"keywords": [],
"children": [],
"node_id": "java-90d9396d834d409181104119600f5ced"
"node_id": "java-90d9396d834d409181104119600f5ced",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"Properties集合": {
"keywords": [],
"children": [],
"node_id": "java-4c352b41a0c1470da4a65df2e237a0c0"
"node_id": "java-4c352b41a0c1470da4a65df2e237a0c0",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"map.json"
],
"title": "Map接口"
"title": "Map接口",
"keywords_must": [
"Map接口",
"map"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-af0bf70f564b4ac68a7fadda69d55086",
"keywords": ["集合", "collection"],
"keywords": [
"集合",
"collection"
],
"children": [
{
"集合接口与实现分离": {
"keywords": [],
"children": [],
"node_id": "java-077624845de241b7b7fc51ff1b596357",
"title": "集合接口与实现分离"
"title": "集合接口与实现分离",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,12 +20,18 @@
"keywords": [],
"children": [],
"node_id": "java-22ea8a449e214efdb7d4e7c6207ff976",
"title": "泛型实用方法"
"title": "泛型实用方法",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"collection.json"
],
"title": "Java集合框架"
"title": "Java集合框架",
"keywords_must": [
"集合框架"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"linkedlist.json"
],
"title": "链表"
"title": "链表",
"keywords_must": [
"链表"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"arraylist.json"
],
"title": "数组列表"
"title": "数组列表",
"keywords_must": [
"数组列表",
"ArrayList"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"hashset.json"
],
"title": "散列集"
"title": "散列集",
"keywords_must": [
"散列集",
"HashSet"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "集合"
"title": "集合",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,12 +9,18 @@
"keywords": [],
"children": [],
"node_id": "java-4bc48dc6ab4246bdb83adbabade26959",
"title": "一元加、减操作符"
"title": "一元加、减操作符",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"arithmetic.json"
],
"title": "算术操作符"
"title": "算术操作符",
"keywords_must": [
"算术操作符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"autoincrease.json"
],
"title": "自动递增和递减"
"title": "自动递增和递减",
"keywords_must": [
"自动递增",
"自动递减"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,12 +9,19 @@
"keywords": [],
"children": [],
"node_id": "java-16c4fd7348aa467e9127ba633a22a5b1",
"title": "测试对象的等价性"
"title": "测试对象的等价性",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"relatship.json"
],
"title": "关系操作符"
"title": "关系操作符",
"keywords_must": [
"关系运算符",
"关系操作符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,12 +12,19 @@
"keywords": [],
"children": [],
"node_id": "java-cd873cea5a47486aa325d241d78e65c3",
"title": "短路"
"title": "短路",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"logic.json"
],
"title": "逻辑操作符"
"title": "逻辑操作符",
"keywords_must": [
"逻辑操作符",
"逻辑运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,12 @@
"export": [
"bit.json"
],
"title": "按位操作符"
"title": "按位操作符",
"keywords_must": [
"按位操作符",
"位运算",
"bit",
"比特"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,12 @@
"export": [
"move.json"
],
"title": "移位操作符"
"title": "移位操作符",
"keywords_must": [
"移位操作符",
"移位",
"左移",
"右移"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"three.json"
],
"title": "三元操作符if-else"
"title": "三元操作符if-else",
"keywords_must": [
"三元操作符",
"三元运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,10 @@
"export": [
"String.json"
],
"title": "字符串操作符 + 和 +="
"title": "字符串操作符 + 和 +=",
"keywords_must": [
"字符串操作符",
"字符串运算符"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,7 +7,9 @@
"keywords": [],
"children": [],
"node_id": "java-dd5d556c5c1c4d8e846b4c86dc20efa5",
"title": "File类的常用方法"
"title": "File类的常用方法",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,7 +17,9 @@
"keywords": [],
"children": [],
"node_id": "java-bf56f83199e94ca58681a5c8faa7e629",
"title": "遍历目录下的文件"
"title": "遍历目录下的文件",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -23,66 +27,86 @@
"keywords": [],
"children": [],
"node_id": "java-61ba29dce9c84bcdaca695d6758723b6",
"title": "删除文件及目录"
"title": "删除文件及目录",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"创建文件对象": {
"keywords": [],
"children": [],
"node_id": "java-04e28b87bd7c4f7fb1b6dbbad86644ce"
"node_id": "java-04e28b87bd7c4f7fb1b6dbbad86644ce",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"文件操作": {
"keywords": [],
"children": [],
"node_id": "java-245d52da871f47b680a2df5424ee5537"
"node_id": "java-245d52da871f47b680a2df5424ee5537",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"文件夹操作": {
"keywords": [],
"children": [],
"node_id": "java-cc521bb4f0e9416fbc4e409d9140fde8"
"node_id": "java-cc521bb4f0e9416fbc4e409d9140fde8",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"目录列表器": {
"keywords": [],
"children": [],
"node_id": "java-9fa9bdffce824b308879ea5dcd122e24"
"node_id": "java-9fa9bdffce824b308879ea5dcd122e24",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"目录实用工具": {
"keywords": [],
"children": [],
"node_id": "java-cd3380af5c62475295c52f5487315d27"
"node_id": "java-cd3380af5c62475295c52f5487315d27",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"目录的检查及创建": {
"keywords": [],
"children": [],
"node_id": "java-4189262092324533bbdec5e27f1d1a47"
"node_id": "java-4189262092324533bbdec5e27f1d1a47",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"文件的创建与删除": {
"keywords": [],
"children": [],
"node_id": "java-67f067f70bfd4cfb953f82d035c482fe"
"node_id": "java-67f067f70bfd4cfb953f82d035c482fe",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"获取文件信息": {
"keywords": [],
"children": [],
"node_id": "java-3105a50be8124cbab80ffb5a34e3979d"
"node_id": "java-3105a50be8124cbab80ffb5a34e3979d",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [],
"title": "操作符"
"title": "操作符",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"export": [
"ifelse.json"
],
"title": "if-else"
"title": "if-else",
"keywords_must": [
"if",
"else"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,5 +11,11 @@
"for.json",
"foreach.json"
],
"title": "Foreach语法"
"title": "Foreach语法",
"keywords_must": [
"for",
"for循环",
"foreach"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"switch.json"
],
"title": "switch"
"title": "switch",
"keywords_must": [
"switch"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -13,7 +13,9 @@
"keywords": [],
"children": [],
"node_id": "java-22d139aee4b640beaff3f5f983c9f4e8",
"title": "概念"
"title": "概念",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -25,54 +27,70 @@
"keywords": [],
"children": [],
"node_id": "java-9483eeb4d68842488b3acbc8c9764322",
"title": "try块"
"title": "try块",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常处理程序": {
"keywords": [],
"children": [],
"node_id": "java-34829a03d7b041198477e09029c37f49"
"node_id": "java-34829a03d7b041198477e09029c37f49",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"f?inally子句": {
"keywords": [],
"children": [],
"node_id": "java-27871ba11aeb4aefa542e4ac87620018"
"node_id": "java-27871ba11aeb4aefa542e4ac87620018",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"try-with-Resources语句": {
"keywords": [],
"children": [],
"node_id": "java-20c0416fd93848d182e67ffa2cc67e35"
"node_id": "java-20c0416fd93848d182e67ffa2cc67e35",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"分析堆栈轨迹元素": {
"keywords": [],
"children": [],
"node_id": "java-fc4ca42328554153846c7ac13704d030"
"node_id": "java-fc4ca42328554153846c7ac13704d030",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-a2f7a14e5a2743e297ae25d808b6a5aa",
"title": "捕获异常"
"title": "捕获异常",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"创建自定义异常": {
"keywords": [],
"children": [],
"node_id": "java-c2463f0ab5784161a9b3c086ca8f31ff"
"node_id": "java-c2463f0ab5784161a9b3c086ca8f31ff",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常说明": {
"keywords": [],
"children": [],
"node_id": "java-c3aea15c0f494a078ffd747a1f3dd271"
"node_id": "java-c3aea15c0f494a078ffd747a1f3dd271",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -83,25 +101,33 @@
"栈轨迹": {
"keywords": [],
"children": [],
"node_id": "java-9741356278ec4ecda2af9baddde74e01"
"node_id": "java-9741356278ec4ecda2af9baddde74e01",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"重新抛出异常": {
"keywords": [],
"children": [],
"node_id": "java-81f1f5af115648338a8ea8d11f2c0ec1"
"node_id": "java-81f1f5af115648338a8ea8d11f2c0ec1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常链": {
"keywords": [],
"children": [],
"node_id": "java-dc3ceecd4a0943dcb4e1e18d0e6131ca"
"node_id": "java-dc3ceecd4a0943dcb4e1e18d0e6131ca",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-e821208680094805a93e1e6f46bca86d"
"node_id": "java-e821208680094805a93e1e6f46bca86d",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -112,11 +138,15 @@
"特例: RuntimeException(运行时异常)": {
"keywords": [],
"children": [],
"node_id": "java-27967b17e29d4855907f199a4172fe9e"
"node_id": "java-27967b17e29d4855907f199a4172fe9e",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-cce481b5ed99444e8205d59de0c80d55"
"node_id": "java-cce481b5ed99444e8205d59de0c80d55",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -127,25 +157,33 @@
"finally用来做什么": {
"keywords": [],
"children": [],
"node_id": "java-1d8dfbe207ab4ee289783363fabb2eef"
"node_id": "java-1d8dfbe207ab4ee289783363fabb2eef",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"在return中使用finally": {
"keywords": [],
"children": [],
"node_id": "java-2185abe1d4d947e09953dd9c0b690a30"
"node_id": "java-2185abe1d4d947e09953dd9c0b690a30",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"缺憾:异常丢失": {
"keywords": [],
"children": [],
"node_id": "java-5c49dbfd363c4a6da7c3f8b7f4f8e6e3"
"node_id": "java-5c49dbfd363c4a6da7c3f8b7f4f8e6e3",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-8cb3b3570df04f34a49497691839c64a"
"node_id": "java-8cb3b3570df04f34a49497691839c64a",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -156,25 +194,33 @@
"使用构造器执行初始化": {
"keywords": [],
"children": [],
"node_id": "java-f1f617dafd7c4cff9fa6ab53a8c4a24f"
"node_id": "java-f1f617dafd7c4cff9fa6ab53a8c4a24f",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"构造器重载": {
"keywords": [],
"children": [],
"node_id": "java-6774bbb97e27423090f2446f14f370b5"
"node_id": "java-6774bbb97e27423090f2446f14f370b5",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-0b5559794c0d42f6b323e0db663d4e20"
"node_id": "java-0b5559794c0d42f6b323e0db663d4e20",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常匹配": {
"keywords": [],
"children": [],
"node_id": "java-54a2a15979ac4d5db7813bb86d9d3ba4"
"node_id": "java-54a2a15979ac4d5db7813bb86d9d3ba4",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -185,39 +231,51 @@
"历史": {
"keywords": [],
"children": [],
"node_id": "java-9fd5d926c8714cb8b533735e2516af3b"
"node_id": "java-9fd5d926c8714cb8b533735e2516af3b",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"观点": {
"keywords": [],
"children": [],
"node_id": "java-8adfa2512354498fa87e1272412372a1"
"node_id": "java-8adfa2512354498fa87e1272412372a1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"把异常传递给控制台": {
"keywords": [],
"children": [],
"node_id": "java-c977e83a138c492197e596c052f61901"
"node_id": "java-c977e83a138c492197e596c052f61901",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"把“受检查异常”转换为“不受检查的异常”": {
"keywords": [],
"children": [],
"node_id": "java-b8e0c52eb6734b78b5903d46f7ed8b8d"
"node_id": "java-b8e0c52eb6734b78b5903d46f7ed8b8d",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-fcc8f860a91547a69eb95aa905a36e11"
"node_id": "java-fcc8f860a91547a69eb95aa905a36e11",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常使用指南": {
"keywords": [],
"children": [],
"node_id": "java-db2eed2dbf644d468f2b83cd15f736d2"
"node_id": "java-db2eed2dbf644d468f2b83cd15f736d2",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -227,5 +285,12 @@
"runtime_exception.json",
"checked_exception.json"
],
"title": "通过异常处理错误"
"title": "通过异常处理错误",
"keywords_must": [
"异常",
"try",
"catch",
"finally"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"call.json",
"parser.json",
"permutation.json"
]
],
"keywords_must": [
"函数",
"function"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "控制执行流程"
"title": "控制执行流程",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-4954429a60de4bb6873ccae89d58bb2d",
"keywords": [],
"title": "Java初阶"
"title": "Java初阶",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,10 @@
"export": [
"Abstract.json"
],
"title": "流概述"
"title": "流概述",
"keywords_must": [
"流概述",
"stream"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,10 @@
"export": [
"RandomAccessFile.json"
],
"title": "RandomAccessFile"
"title": "RandomAccessFile",
"keywords_must": [
"随机访问文件",
"RandomAccessFile"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -13,7 +13,9 @@
"keywords": [],
"children": [],
"node_id": "java-31c61c28f4f14905a0284be89b245dcf",
"title": "输入流"
"title": "输入流",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -21,12 +23,20 @@
"keywords": [],
"children": [],
"node_id": "java-de7d542804424ec0986fa6ca0fd2ec45",
"title": "输出流"
"title": "输出流",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Input.json"
],
"title": "输入输出流"
"title": "输入输出流",
"keywords_must": [
"输入输出流",
"输入流",
"输出流"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -16,7 +16,9 @@
"keywords": [],
"children": [],
"node_id": "java-0aba4828a38347a9b703e7c3ae608530",
"title": "FileInputStream类与FileOutputStream类"
"title": "FileInputStream类与FileOutputStream类",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -24,7 +26,9 @@
"keywords": [],
"children": [],
"node_id": "java-d95e2c9886a6441d8a2cdf3710d5204e",
"title": "FileReader类与FileWriter类"
"title": "FileReader类与FileWriter类",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -32,5 +36,13 @@
"FileRead.json",
"FileWriter.json"
],
"title": "文件输入输出流"
"title": "文件输入输出流",
"keywords_must": [
"文件输入输出流",
"文件输入流",
"文件输出流",
"reader",
"writer"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,11 @@
"export": [
"ObjectSerializable.json"
],
"title": "对象序列化"
"title": "对象序列化",
"keywords_must": [
"序列化",
"serialize",
"serializable"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -16,7 +16,9 @@
"keywords": [],
"children": [],
"node_id": "java-2119c3a172d24aab804d8ffaed6ddd18",
"title": "压缩文件"
"title": "压缩文件",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -24,7 +26,9 @@
"keywords": [],
"children": [],
"node_id": "java-554dc7711b104ed9a80c5a6b7c1489ee",
"title": "解压缩ZIP文件"
"title": "解压缩ZIP文件",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -32,5 +36,9 @@
"Zip.json",
"Unzip.json"
],
"title": "ZIP压缩输入输出流"
"title": "ZIP压缩输入输出流",
"keywords_must": [
"ZIP压缩"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,9 @@
"export": [
"unzip.json"
],
"title": "InputStream类型"
"title": "InputStream类型",
"keywords_must": [
"InputStream"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,9 @@
"export": [
"zip.json"
],
"title": "OutputStream类型"
"title": "OutputStream类型",
"keywords_must": [
"OutputStream"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-6205d98db8c64cfaae6dced8c2f96caa",
"keywords": [],
"title": "IO(输入输出)"
"title": "IO(输入输出)",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-5decb41b064a492db20362e136c0b2e2",
"title": "JDBC-ODBC桥"
"title": "JDBC-ODBC桥",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-e89787459ec64fbeb80a9ba3cc7eac54",
"title": "JDBC技术"
"title": "JDBC技术",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,7 +32,9 @@
"keywords": [],
"children": [],
"node_id": "java-df3cd40dc360446296cf9c97f3a72e61",
"title": "JDBC驱动程序的类型"
"title": "JDBC驱动程序的类型",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -36,5 +42,9 @@
"Abstract.json",
"DriverType.json"
],
"title": "JDBC概述"
"title": "JDBC概述",
"keywords_must": [
"JDBC概述"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -16,7 +16,9 @@
"keywords": [],
"children": [],
"node_id": "java-6217b237af9545cb8ea45e2390827761",
"title": "数据库基础"
"title": "数据库基础",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -24,7 +26,9 @@
"keywords": [],
"children": [],
"node_id": "java-d836337812bc438a8c527df151870250",
"title": "数据查询"
"title": "数据查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -32,14 +36,18 @@
"keywords": [],
"children": [],
"node_id": "java-d54f7e1e96ad44d3bf7240f694e2e53c",
"title": "动态查询"
"title": "动态查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"添加、修改、删除记录": {
"keywords": [],
"children": [],
"node_id": "java-f2f1d3facff943e9b169dbb6a43a5004"
"node_id": "java-f2f1d3facff943e9b169dbb6a43a5004",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -50,60 +58,78 @@
"什么是数据库": {
"keywords": [],
"children": [],
"node_id": "java-668c52db99de4dad9483809106b38932"
"node_id": "java-668c52db99de4dad9483809106b38932",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"数据库的种类及功能": {
"keywords": [],
"children": [],
"node_id": "java-70a72823b0534f5e9bc397af6b3674f1"
"node_id": "java-70a72823b0534f5e9bc397af6b3674f1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"SQL语言": {
"keywords": [],
"children": [],
"node_id": "java-93da6e5c26914eb7926261276e4b3d3c"
"node_id": "java-93da6e5c26914eb7926261276e4b3d3c",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-987b58f5cc48422f899ac000d51c5bae"
"node_id": "java-987b58f5cc48422f899ac000d51c5bae",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"向数据库发送SQL语句": {
"keywords": [],
"children": [],
"node_id": "java-a78e2ce00e4a443e9caccf68836c259c"
"node_id": "java-a78e2ce00e4a443e9caccf68836c259c",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"处理查询结果集": {
"keywords": [],
"children": [],
"node_id": "java-98f0846a37ce4528b8a44c656cbc1bef"
"node_id": "java-98f0846a37ce4528b8a44c656cbc1bef",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"顺序查询": {
"keywords": [],
"children": [],
"node_id": "java-10964bbc05c6429aa0a416ffe3d72530"
"node_id": "java-10964bbc05c6429aa0a416ffe3d72530",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"模糊查询": {
"keywords": [],
"children": [],
"node_id": "java-bb40f3c631dc4da9a045c47a5a2fcdab"
"node_id": "java-bb40f3c631dc4da9a045c47a5a2fcdab",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"预处理语句": {
"keywords": [],
"children": [],
"node_id": "java-d57228f74f1d4a2da114c47357729b28"
"node_id": "java-d57228f74f1d4a2da114c47357729b28",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -112,5 +138,9 @@
"CRUD.json",
"Transaction.json"
],
"title": "数据库操作"
"title": "数据库操作",
"keywords_must": [
"数据库"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "使用JDBC操作数据库"
"title": "使用JDBC操作数据库",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,9 @@
"export": [
"NIOAbstract.json"
],
"title": "NIO概述"
"title": "NIO概述",
"keywords_must": [
"nio"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"BufferType.json",
"BufferRead.json"
],
"title": "Buffer(缓冲器)"
"title": "Buffer(缓冲器)",
"keywords_must": [
"buffer",
"缓冲器"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"Channel.json",
"ChannelType.json"
],
"title": "Channel(通道)"
"title": "Channel(通道)",
"keywords_must": [
"channel",
"通道"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"Charset.json"
],
"title": "字符集和Charset"
"title": "字符集和Charset",
"keywords_must": [
"字符集",
"charset"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,10 @@
"export": [
"FileLock.json"
],
"title": "文件锁"
"title": "文件锁",
"keywords_must": [
"文件锁",
"lock"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"export": [
"Path.json"
],
"title": "Path接口"
"title": "Path接口",
"keywords_must": [
"Path接口"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"Files.json"
],
"title": "Files工具类"
"title": "Files工具类",
"keywords_must": [
"Files"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,7 +7,9 @@
"keywords": [],
"children": [],
"node_id": "java-5d2f136c78e04fa1ac236d2a9f469be2",
"title": "数据库基础"
"title": "数据库基础",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,7 +17,9 @@
"keywords": [],
"children": [],
"node_id": "java-54db58ed51fd42668ba64fbd3344461c",
"title": "数据查询"
"title": "数据查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -23,14 +27,18 @@
"keywords": [],
"children": [],
"node_id": "java-fc3d4e7b55b04c5fa07fb3fe6979a85d",
"title": "动态查询"
"title": "动态查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"添加、修改、删除记录": {
"keywords": [],
"children": [],
"node_id": "java-5742eb0d261c4387959fb28b519ca047"
"node_id": "java-5742eb0d261c4387959fb28b519ca047",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -41,63 +49,83 @@
"什么是数据库": {
"keywords": [],
"children": [],
"node_id": "java-c89fefa8e3a0491eafaad815e0152d21"
"node_id": "java-c89fefa8e3a0491eafaad815e0152d21",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"数据库的种类及功能": {
"keywords": [],
"children": [],
"node_id": "java-083ec3f2978f406888933c00494f1928"
"node_id": "java-083ec3f2978f406888933c00494f1928",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"SQL语言": {
"keywords": [],
"children": [],
"node_id": "java-a429d7c8c3f444adb145cc503f09bd08"
"node_id": "java-a429d7c8c3f444adb145cc503f09bd08",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-66d1a230060b4fbbbae06ddd1946f9d7"
"node_id": "java-66d1a230060b4fbbbae06ddd1946f9d7",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"向数据库发送SQL语句": {
"keywords": [],
"children": [],
"node_id": "java-7d30f61ce372426091be3a2b1c24e61a"
"node_id": "java-7d30f61ce372426091be3a2b1c24e61a",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"处理查询结果集": {
"keywords": [],
"children": [],
"node_id": "java-fd1a0d435bd647f09b78d73628121af4"
"node_id": "java-fd1a0d435bd647f09b78d73628121af4",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"顺序查询": {
"keywords": [],
"children": [],
"node_id": "java-d080cbd4bc204694a83f10ac76c7ec91"
"node_id": "java-d080cbd4bc204694a83f10ac76c7ec91",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"模糊查询": {
"keywords": [],
"children": [],
"node_id": "java-41d56ea85290428a93737f5ad4f8310a"
"node_id": "java-41d56ea85290428a93737f5ad4f8310a",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"预处理语句": {
"keywords": [],
"children": [],
"node_id": "java-1c1a09999d85447caa889618896eed97"
"node_id": "java-1c1a09999d85447caa889618896eed97",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [],
"title": "NIO"
"title": "NIO",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-a79ddcf9777d4af48bc5a260933a2e82",
"title": "网络通信协议"
"title": "网络通信协议",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-37985b5801644ce4a823966c72d8db97",
"title": "IP地址和端口号"
"title": "IP地址和端口号",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,19 +31,27 @@
"keywords": [],
"children": [],
"node_id": "java-081281446cac46e6ace10be5b85ed596",
"title": "InetAddress"
"title": "InetAddress",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP与TCP协议": {
"keywords": [],
"children": [],
"node_id": "java-2d97da4c84734adc97ef08a8f338bdd0"
"node_id": "java-2d97da4c84734adc97ef08a8f338bdd0",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Internet.json"
],
"title": "网络编程基础"
"title": "网络编程基础",
"keywords_must": [
"网络编程"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-0fbfa7442076484683006362f10305cc",
"title": "UDP通信简介"
"title": "UDP通信简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-e2a796a931bf4aa7bb204a05d18dd2ca",
"title": "DatagramPacket"
"title": "DatagramPacket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,26 +31,36 @@
"keywords": [],
"children": [],
"node_id": "java-c498a7116c9548b283eac0a3bc3e9766",
"title": "DatagramSocket"
"title": "DatagramSocket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-1d8a509258aa48b99c8870aa2ea2f7da"
"node_id": "java-1d8a509258aa48b99c8870aa2ea2f7da",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP案例——聊天程序": {
"keywords": [],
"children": [],
"node_id": "java-2648409476dd4809aab31299bb47a782"
"node_id": "java-2648409476dd4809aab31299bb47a782",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"UDP.json"
],
"title": "UDP通信"
"title": "UDP通信",
"keywords_must": [
"udp"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-0e32134022e94f13a89fc1536e8b7dc9",
"title": "TCP通信简介"
"title": "TCP通信简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -18,7 +20,9 @@
"keywords": [],
"children": [],
"node_id": "java-61d6532c567640bbb369c1880f584d47",
"title": "ServerSocket"
"title": "ServerSocket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -26,33 +30,45 @@
"keywords": [],
"children": [],
"node_id": "java-90bf889f7fc04403aa109f638bb7bb28",
"title": "Socket"
"title": "Socket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"简单的TCP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-c084edbe768a4d43bcf551c5d3b37fa3"
"node_id": "java-c084edbe768a4d43bcf551c5d3b37fa3",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"多线程的TCP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-dcc1f999ffc84bb69344c2a233f516c4"
"node_id": "java-dcc1f999ffc84bb69344c2a233f516c4",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"TCP案例——文件上传": {
"keywords": [],
"children": [],
"node_id": "java-fcc2a6b66f9a4cbf954d86635df20a8a"
"node_id": "java-fcc2a6b66f9a4cbf954d86635df20a8a",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"TCP.json"
],
"title": "TCP通信"
"title": "TCP通信",
"keywords_must": [
"tcp"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,7 +9,9 @@
"keywords": [],
"children": [],
"node_id": "java-a5ada59a43024cd080ed2a7ad6ba8bb7",
"title": "使用URLDecoder和URLEncoder"
"title": "使用URLDecoder和URLEncoder",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -17,12 +19,18 @@
"keywords": [],
"children": [],
"node_id": "java-9042eac8712642c98c5fc9e4a5165dc0",
"title": "URL、URLConnection和URLPermission"
"title": "URL、URLConnection和URLPermission",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Support.json"
],
"title": "Java的基本网络支持"
"title": "Java的基本网络支持",
"keywords_must": [
"基本网络支持"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-b5efe86ed01b464799fc32edc3e2862f",
"title": "直接使用Proxy创建连接"
"title": "直接使用Proxy创建连接",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -18,12 +20,18 @@
"keywords": [],
"children": [],
"node_id": "java-bcc6e1c8fbe248278f3d55e61f282ec8",
"title": "使用ProxySelector自动选择代理服务器"
"title": "使用ProxySelector自动选择代理服务器",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Proxy.json"
],
"title": "使用代理服务器"
"title": "使用代理服务器",
"keywords_must": [
"代理服务器"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -14,7 +14,9 @@
"keywords": [],
"children": [],
"node_id": "java-f6d4f9e683b84e53ad0b1c5c2c9c4988",
"title": "发送同步GET请求"
"title": "发送同步GET请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -22,7 +24,9 @@
"keywords": [],
"children": [],
"node_id": "java-f1d63ba6664747239aa3b84f697b1a84",
"title": "发送带请求体的请求"
"title": "发送带请求体的请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -30,21 +34,27 @@
"keywords": [],
"children": [],
"node_id": "java-d0d1295efbec421b87d66ca663629d36",
"title": "发送异步请求"
"title": "发送异步请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"WebSocket客户端支持": {
"keywords": [],
"children": [],
"node_id": "java-c43622cc970e4f159433f441d9b3aeec"
"node_id": "java-c43622cc970e4f159433f441d9b3aeec",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"基于WebSocket的多人实时聊天": {
"keywords": [],
"children": [],
"node_id": "java-b6be48e26bf5490f8337daad17059e6c"
"node_id": "java-b6be48e26bf5490f8337daad17059e6c",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -52,5 +62,9 @@
"HTTPClient.json",
"WebSocket.json"
],
"title": "Java 11标准化的HTTP Client"
"title": "Java 11标准化的HTTP Client",
"keywords_must": [
"HTTP Client"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "网络编程"
"title": "网络编程",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-16ceaee391ff4ec0a520211b5d0dc506",
"title": "类字面常量"
"title": "类字面常量",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-e2c66e3ba49746de87779dcab4a686f7",
"title": "泛化的Class引用"
"title": "泛化的Class引用",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,12 +31,18 @@
"keywords": [],
"children": [],
"node_id": "java-27e7ea709e5b448fbd0dcadb70d425b6",
"title": "新的转型语法"
"title": "新的转型语法",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Class.json"
],
"title": "Class对象"
"title": "Class对象",
"keywords_must": [
"Class对象"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-5d348625455e40ba82b46a569d3c9719",
"title": "使用类字面常量"
"title": "使用类字面常量",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -18,7 +20,9 @@
"keywords": [],
"children": [],
"node_id": "java-92f8dd9e046b407481302197423e95aa",
"title": "动态instanceof"
"title": "动态instanceof",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -26,12 +30,18 @@
"keywords": [],
"children": [],
"node_id": "java-a66273b2dcdf46249ceb1b88cd3c90cb",
"title": "递归计数"
"title": "递归计数",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Instanceof.json"
],
"title": "类型转换前先做检查"
"title": "类型转换前先做检查",
"keywords_must": [
"类型转换"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,10 @@
"export": [
"Instanceof.json"
],
"title": "instanceof与Class的等价性"
"title": "instanceof与Class的等价性",
"keywords_must": [
"instanceof",
"等价性"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-5149ec714a624c8da96f195b7de73419",
"title": "类方法抽取器"
"title": "类方法抽取器",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -22,26 +24,34 @@
"keywords": [],
"children": [],
"node_id": "java-6dd73a33a7aa42f8b60f237a539568fe",
"title": "访问构造方法"
"title": "访问构造方法",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问成员变量": {
"keywords": [],
"children": [],
"node_id": "java-5dd955d5f50747feb3ed19c8ee1ba8b2"
"node_id": "java-5dd955d5f50747feb3ed19c8ee1ba8b2",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问方法": {
"keywords": [],
"children": [],
"node_id": "java-c9513a7b28ec47bfa13c0656e7196f55"
"node_id": "java-c9513a7b28ec47bfa13c0656e7196f55",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-9be972504f4440079f535753d8d73811",
"title": "Class类与Java反射"
"title": "Class类与Java反射",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -52,81 +62,105 @@
"定义Annotation类型": {
"keywords": [],
"children": [],
"node_id": "java-e06a14d142c04858a017baf0ab1adf29"
"node_id": "java-e06a14d142c04858a017baf0ab1adf29",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问Annotation信息": {
"keywords": [],
"children": [],
"node_id": "java-f8aa68a5a30f450ca21af672448a653f"
"node_id": "java-f8aa68a5a30f450ca21af672448a653f",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-f288867c2d654836b9d93af8790b67b0"
"node_id": "java-f288867c2d654836b9d93af8790b67b0",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"声明异常入门": {
"keywords": [],
"children": [],
"node_id": "java-d35d19ec1d154b9d9e6e06a147305f9e"
"node_id": "java-d35d19ec1d154b9d9e6e06a147305f9e",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"资源": {
"keywords": [],
"children": [],
"node_id": "java-c03a7a45c5c246ceba0ac3df1e426fb6"
"node_id": "java-c03a7a45c5c246ceba0ac3df1e426fb6",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"利用反射分析类的能力": {
"keywords": [],
"children": [],
"node_id": "java-170ca43f1b46492d94594937635cda12"
"node_id": "java-170ca43f1b46492d94594937635cda12",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用反射在运行时分析": {
"keywords": [],
"children": [],
"node_id": "java-046f5ea7441847a0be59cd9b07cefa2c"
"node_id": "java-046f5ea7441847a0be59cd9b07cefa2c",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用反射编写泛型数组": {
"keywords": [],
"children": [],
"node_id": "java-0a28c7f21a6a4a48ba3ad52eb364410f"
"node_id": "java-0a28c7f21a6a4a48ba3ad52eb364410f",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问字段": {
"keywords": [],
"children": [],
"node_id": "java-111c415f827c4db698e003a2365357e9"
"node_id": "java-111c415f827c4db698e003a2365357e9",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"调用方法": {
"keywords": [],
"children": [],
"node_id": "java-6a24720b8a4c4102aef7aa8c5ddeb870"
"node_id": "java-6a24720b8a4c4102aef7aa8c5ddeb870",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"调用构造方法": {
"keywords": [],
"children": [],
"node_id": "java-d7ab012406a049518931e809cc364c81"
"node_id": "java-d7ab012406a049518931e809cc364c81",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"获取继承关系": {
"keywords": [],
"children": [],
"node_id": "java-9e70bf59fb9d4a52b22981b15001f420"
"node_id": "java-9e70bf59fb9d4a52b22981b15001f420",
"keywords_must": [],
"keywords_forbid": []
}
}
],
......@@ -134,5 +168,10 @@
"Reflect.json",
"ReflectTest.json"
],
"title": "反射:运行时类信息"
"title": "反射:运行时类信息",
"keywords_must": [
"反射",
"运行时类信息"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"DynamicProxy.json",
"DynamicProxyTest.json"
],
"title": "动态代理"
"title": "动态代理",
"keywords_must": [
"动态代理"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,12 +9,18 @@
"keywords": [],
"children": [],
"node_id": "java-79ecb6c77f734cbaba7264deb8ca2a22",
"title": "模拟对象与桩"
"title": "模拟对象与桩",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"None.json"
],
"title": "空对象"
"title": "空对象",
"keywords_must": [
"空对象"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,7 +7,9 @@
"keywords": [],
"children": [],
"node_id": "java-fbc4fe4a64f348f8b21daf95084098ce",
"title": "发送同步GET请求"
"title": "发送同步GET请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,7 +17,9 @@
"keywords": [],
"children": [],
"node_id": "java-fabec97a784943e5a5a045f62ceae716",
"title": "发送带请求体的请求"
"title": "发送带请求体的请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -23,24 +27,32 @@
"keywords": [],
"children": [],
"node_id": "java-388099373c8944e599ea0e9a687d3d89",
"title": "发送异步请求"
"title": "发送异步请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"WebSocket客户端支持": {
"keywords": [],
"children": [],
"node_id": "java-e633f953bed24b12bd896c57c5252454"
"node_id": "java-e633f953bed24b12bd896c57c5252454",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"基于WebSocket的多人实时聊天": {
"keywords": [],
"children": [],
"node_id": "java-9f2893007ace496b908b5693c7c3c89c"
"node_id": "java-9f2893007ace496b908b5693c7c3c89c",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [],
"title": "类型信息"
"title": "类型信息",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-20cad95081b4475aaac1c1ebf7af0253",
"keywords": ["容器", "collection", "方法"],
"keywords": [
"容器",
"collection",
"方法"
],
"children": [],
"export": [
"Collection.json"
],
"title": "Collection的功能方法"
"title": "Collection的功能方法",
"keywords_must": [
"功能",
"方法"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"List.json"
],
"title": "List的功能方法"
"title": "List的功能方法",
"keywords_must": [
"功能",
"方法"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,9 @@
"export": [
"Set.json"
],
"title": "Set和存储顺序"
"title": "Set和存储顺序",
"keywords_must": [
"存储顺序"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-a17735f4ca70413cb8053faf3b11db21",
"title": "优先级队列"
"title": "优先级队列",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,12 +21,19 @@
"keywords": [],
"children": [],
"node_id": "java-088b40b3ec034906b2147ffb9bd97b91",
"title": "双向队列"
"title": "双向队列",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Queue.json"
],
"title": "队列"
"title": "队列",
"keywords_must": [
"队列",
"queue"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,7 +11,9 @@
"keywords": [],
"children": [],
"node_id": "java-4ecb278ae1c849e88e67f0de13e88ec0",
"title": "性能"
"title": "性能",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -19,7 +21,9 @@
"keywords": [],
"children": [],
"node_id": "java-b2019b3c3f5f48efaf16d5fcda4ab22e",
"title": "SortedMap"
"title": "SortedMap",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -27,12 +31,19 @@
"keywords": [],
"children": [],
"node_id": "java-455d76b244e84f2a8d62ce4d2f546214",
"title": "LinkedHashMap"
"title": "LinkedHashMap",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Map.json"
],
"title": "理解Map"
"title": "理解Map",
"keywords_must": [
"map",
"字典"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,7 +9,9 @@
"keywords": [],
"children": [],
"node_id": "java-ab0d376e43cc44da80b4954054eeca9d",
"title": "性能测试框架"
"title": "性能测试框架",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -17,7 +19,9 @@
"keywords": [],
"children": [],
"node_id": "java-0827bea6ef504e5cbb462bce56893a7d",
"title": "对List的选择"
"title": "对List的选择",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -25,26 +29,36 @@
"keywords": [],
"children": [],
"node_id": "java-f900efdf13e84d668476fa6150381f52",
"title": "微基准测试的危险"
"title": "微基准测试的危险",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"对Set的选择": {
"keywords": [],
"children": [],
"node_id": "java-eab8ea85ddd5464888fd8e6f4277f127"
"node_id": "java-eab8ea85ddd5464888fd8e6f4277f127",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"对Map的选择": {
"keywords": [],
"children": [],
"node_id": "java-7cc209ce394f4cfaad6845aaf2b59312"
"node_id": "java-7cc209ce394f4cfaad6845aaf2b59312",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Select.json"
],
"title": "选择接口的不同实现"
"title": "选择接口的不同实现",
"keywords_must": [
"选择接口"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,7 +9,9 @@
"keywords": [],
"children": [],
"node_id": "java-96ef5521b9ea47a6b7b4ba7d9e3b66a7",
"title": "List的排序和查询"
"title": "List的排序和查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -17,7 +19,9 @@
"keywords": [],
"children": [],
"node_id": "java-7a7a4d7e8d234834a8ee9a9e89aca406",
"title": "设定Collection或Map为不可修改"
"title": "设定Collection或Map为不可修改",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -25,12 +29,18 @@
"keywords": [],
"children": [],
"node_id": "java-103035017b954141a825adce390593fa",
"title": "Collection或Map的同步控制"
"title": "Collection或Map的同步控制",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"StaticMethod.json"
],
"title": "Collections实用方法"
"title": "Collections实用方法",
"keywords_must": [
"Collections"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,10 +7,14 @@
"keywords": [],
"children": [],
"node_id": "java-f66a77a76f98493f8f65e3a5c314b605",
"title": "模拟对象与桩"
"title": "模拟对象与桩",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [],
"title": "容器深入研究"
"title": "容器深入研究",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,7 +10,9 @@
"keywords": [],
"children": [],
"node_id": "java-9da72212f00d4634bb4a41816a6c6373",
"title": "定义注解"
"title": "定义注解",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -18,12 +20,18 @@
"keywords": [],
"children": [],
"node_id": "java-e9cfa24eb43646cdb4530abdea7828e6",
"title": "元注解"
"title": "元注解",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Annotation.json"
],
"title": "基本语法"
"title": "基本语法",
"keywords_must": [
"注解"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"export": [
"apt.json"
],
"title": "使用apt处理注解"
"title": "使用apt处理注解",
"keywords_must": [
"apt"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-778a97d11dfe4373b20080ce72b104e8",
"title": "将@Unit用于泛型"
"title": "将@Unit用于泛型",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-88b23041c80c4551a59f2ef8fee4ed3c",
"title": "不需要任何“套件”"
"title": "不需要任何“套件”",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,19 +32,29 @@
"keywords": [],
"children": [],
"node_id": "java-52985edbfc4d43c294ef641f2be124fe",
"title": "实现@Unit"
"title": "实现@Unit",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"移除测试代码": {
"keywords": [],
"children": [],
"node_id": "java-12dbc9262a89470a8856d7dbb4224125"
"node_id": "java-12dbc9262a89470a8856d7dbb4224125",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"junit.json"
],
"title": "基于注解的单元测试"
"title": "基于注解的单元测试",
"keywords_must": [
"junit",
"单元测试",
"annotation"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -3,5 +3,7 @@
"keywords": [],
"children": [],
"export": [],
"title": "注解"
"title": "注解",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,7 +9,9 @@
"keywords": [],
"children": [],
"node_id": "java-fdb6213b58e74216b74613175b4925fc",
"title": "更快的执行"
"title": "更快的执行",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -17,12 +19,18 @@
"keywords": [],
"children": [],
"node_id": "java-6169cb2332d140d0afa88cd219a21eba",
"title": "改进代码设计"
"title": "改进代码设计",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Abstract.json"
],
"title": "并发的定义"
"title": "并发的定义",
"keywords_must": [
"并发"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-4ccf91e926b548c79f3502fe7e72c301",
"title": "中断线程"
"title": "中断线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-8c992e3f10814c21bd65c0a78fbdaf78",
"title": "守护线程"
"title": "守护线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,19 +32,27 @@
"keywords": [],
"children": [],
"node_id": "java-ae11718ecefd44f1b7d490def20f1b7c",
"title": "线程名"
"title": "线程名",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"未捕获异常的处理器": {
"keywords": [],
"children": [],
"node_id": "java-f4a0fc3aa5a64184b4d12f2bf347b3d5"
"node_id": "java-f4a0fc3aa5a64184b4d12f2bf347b3d5",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"Thread.json"
],
"title": "线程属性"
"title": "线程属性",
"keywords_must": [
"线程属性"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-cae8cf168615440ba1790fe654a47e55",
"title": "新建线程"
"title": "新建线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-9be56d2a991f4dea839c68854bb6c9cb",
"title": "可运行线程"
"title": "可运行线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,19 +32,27 @@
"keywords": [],
"children": [],
"node_id": "java-e06bd95cb2504c07827c2c81a88a2f7f",
"title": "阻塞和等待线程"
"title": "阻塞和等待线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"终止线程": {
"keywords": [],
"children": [],
"node_id": "java-0ba3f448d6de4b16b02516f52b551b2d"
"node_id": "java-0ba3f448d6de4b16b02516f52b551b2d",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"ThreadStatus.json"
],
"title": "线程状态"
"title": "线程状态",
"keywords_must": [
"线程状态"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-0f812098999a4df2a9b41955308ba530",
"title": "wait()与notifyAll()"
"title": "wait()与notifyAll()",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-abcb15b0ad184d03a5753e33bb8ebdf7",
"title": "notify()与notifyAll()"
"title": "notify()与notifyAll()",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,19 +32,28 @@
"keywords": [],
"children": [],
"node_id": "java-5325268f4ff84234b18b52a40fa15021",
"title": "生产者与消费者"
"title": "生产者与消费者",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"任务间使用管道进行输入输出": {
"keywords": [],
"children": [],
"node_id": "java-b60c4015c9e643c0866fdbd5bf907776"
"node_id": "java-b60c4015c9e643c0866fdbd5bf907776",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"ProductorAndConsumer.json"
],
"title": "线程之间的协作"
"title": "线程之间的协作",
"keywords_must": [
"线程之间的协作",
"线程协作"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -11,5 +11,9 @@
"export": [
"DeadLock.json"
],
"title": "死锁"
"title": "死锁",
"keywords_must": [
"死锁"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,7 +12,9 @@
"keywords": [],
"children": [],
"node_id": "java-c19c9015f3254441b359f8c77f2064ea",
"title": "阻塞队列"
"title": "阻塞队列",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -20,7 +22,9 @@
"keywords": [],
"children": [],
"node_id": "java-69635e4cd3a84037ab6715a53d7664bd",
"title": "映射条目的原子更新"
"title": "映射条目的原子更新",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -28,40 +32,55 @@
"keywords": [],
"children": [],
"node_id": "java-8e154a8000944afcb2d9a18da8b43680",
"title": "对并发散列映射的批操作"
"title": "对并发散列映射的批操作",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"并发集视图": {
"keywords": [],
"children": [],
"node_id": "java-7cb205a0b7014e329f429be5f25d64f7"
"node_id": "java-7cb205a0b7014e329f429be5f25d64f7",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"写数组的拷贝": {
"keywords": [],
"children": [],
"node_id": "java-e8873f2f78a64203b681e00536806448"
"node_id": "java-e8873f2f78a64203b681e00536806448",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"并行数组算法": {
"keywords": [],
"children": [],
"node_id": "java-d29e14c52c544690bce9b05c1a669a71"
"node_id": "java-d29e14c52c544690bce9b05c1a669a71",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"较早的线程安全集合": {
"keywords": [],
"children": [],
"node_id": "java-32f3143dddff4cad846b9523d791c7b6"
"node_id": "java-32f3143dddff4cad846b9523d791c7b6",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [
"ThreadSafe.json"
],
"title": "线程安全的集合"
"title": "线程安全的集合",
"keywords_must": [
"线程安全的集合",
"线程安全集合"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-03692e56e729461fa95f570620c8d073",
"keywords": []
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-fb87e1c12a1e40b0b9efbd01639098f6",
"keywords": [],
"title": "Java中阶"
"title": "Java中阶",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,9 @@
"map.json",
"sum.json",
"filter.json"
]
],
"keywords_must": [
"行为抽象"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -12,5 +12,9 @@
"lambda.json",
"sam.json",
"handler.json"
]
],
"keywords_must": [
"lambda"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"export": [
"map_reduce.json"
],
"title": "流简介"
"title": "流简介",
"keywords_must": [
"流",
"stream"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,9 @@
"to_list.json",
"to_set.json",
"to_map.json"
]
],
"keywords_must": [
"收集器"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -9,5 +9,10 @@
"export": [
"group_by.json"
],
"title": "分组"
"title": "分组",
"keywords_must": [
"分组",
"group by"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -8,5 +8,10 @@
"children": [],
"export": [
"partition_by.json"
]
],
"keywords_must": [
"分区",
"partition by"
],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-c27b22579e67443393ef5a56f7f4103e",
"keywords": []
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,10 @@
"children": [],
"export": [
"optional.json"
]
],
"keywords_must": [
"optional",
"null"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,5 +7,10 @@
"children": [],
"export": [
"optional.json"
]
],
"keywords_must": [
"optional",
"一致性"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -2,5 +2,7 @@
"node_id": "java-276424b96cfd4f43955531c41fc8edcb",
"keywords": [],
"children": [],
"export": []
"export": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -10,5 +10,11 @@
"export": [
"thread.json",
"counter.json"
]
],
"keywords_must": [
"进程",
"线程",
"thread"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -6,6 +6,14 @@
"future"
],
"children": [],
"export": ["future.json"],
"title": "为并发而生的CompletableFuture和结合器"
"export": [
"future.json"
],
"title": "为并发而生的CompletableFuture和结合器",
"keywords_must": [
"并发",
"异步",
"future"
],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -7,7 +7,9 @@
"keywords": [],
"children": [],
"node_id": "java-45afc55cf7244d9795fa0b63fba45854",
"title": "HttpServletRequest接口"
"title": "HttpServletRequest接口",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -15,7 +17,9 @@
"keywords": [],
"children": [],
"node_id": "java-b0e99b86fbce4cc291bb1d301ee440cd",
"title": "HttpServletResponse接口"
"title": "HttpServletResponse接口",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -23,24 +27,32 @@
"keywords": [],
"children": [],
"node_id": "java-e178f398ea6b46e0894d2a2cfbc9cb25",
"title": "HttpSession接口"
"title": "HttpSession接口",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"Cookie类": {
"keywords": [],
"children": [],
"node_id": "java-54c4822850ee49d4a71dce573eeded87"
"node_id": "java-54c4822850ee49d4a71dce573eeded87",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"HttpServlet类": {
"keywords": [],
"children": [],
"node_id": "java-348a66d38ab54e93b9465900c7021cb7"
"node_id": "java-348a66d38ab54e93b9465900c7021cb7",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"export": [],
"title": "Java异步任务"
"title": "Java异步任务",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "java-da97ad5ea7384ee887da397960bda54a",
"keywords": [],
"title": "Java高阶"
"title": "Java高阶",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -2,5 +2,7 @@
"tree_name": "java",
"keywords": [],
"node_id": "java-65faac79c55243fba87e6e67b3a45e31",
"title": "Java"
"title": "Java",
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
......@@ -21,7 +21,14 @@
"main",
"程序入口"
],
"children": []
"children": [],
"keywords_must": [
[
"编辑",
"源代码"
]
],
"keywords_forbid": []
}
},
{
......@@ -31,7 +38,11 @@
"hello world",
"app"
],
"children": []
"children": [],
"keywords_must": [
"编译"
],
"keywords_forbid": []
}
},
{
......@@ -41,7 +52,11 @@
"runtime",
"运行机制"
],
"children": []
"children": [],
"keywords_must": [
"运行机制"
],
"keywords_forbid": []
}
},
{
......@@ -50,7 +65,11 @@
"keywords": [
"classpath"
],
"children": []
"children": [],
"keywords_must": [
"CLASSPATH"
],
"keywords_forbid": []
}
},
{
......@@ -60,10 +79,16 @@
"maven",
"构建"
],
"children": []
"children": [],
"keywords_must": [
"maven"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -78,7 +103,11 @@
"语法",
"Hello World"
],
"children": []
"children": [],
"keywords_must": [
"语法格式"
],
"keywords_forbid": []
}
},
{
......@@ -87,7 +116,11 @@
"keywords": [
"注释 "
],
"children": []
"children": [],
"keywords_must": [
"注释"
],
"keywords_forbid": []
}
},
{
......@@ -97,10 +130,16 @@
"关键字",
"keyword"
],
"children": []
"children": [],
"keywords_must": [
"关键字"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -116,7 +155,12 @@
"赋值",
"定义"
],
"children": []
"children": [],
"keywords_must": [
"变量的定义",
"变量定义"
],
"keywords_forbid": []
}
},
{
......@@ -126,7 +170,11 @@
"变量",
"类型"
],
"children": []
"children": [],
"keywords_must": [
"数据类型"
],
"keywords_forbid": []
}
},
{
......@@ -138,7 +186,11 @@
"变量",
"final"
],
"children": []
"children": [],
"keywords_must": [
"常量"
],
"keywords_forbid": []
}
},
{
......@@ -149,10 +201,16 @@
"定义",
"作用域"
],
"children": []
"children": [],
"keywords_must": [
"作用域"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -170,7 +228,16 @@
"比较",
"不等于"
],
"children": []
"children": [],
"keywords_must": [
"大于",
"小于",
"等于",
"比较",
"不等于",
"比较运算符"
],
"keywords_forbid": []
}
},
{
......@@ -181,7 +248,11 @@
"组合",
"优先级"
],
"children": []
"children": [],
"keywords_must": [
"逻辑运算符"
],
"keywords_forbid": []
}
},
{
......@@ -191,10 +262,16 @@
"算术运算符",
"优先级"
],
"children": []
"children": [],
"keywords_must": [
"算术运算符"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -211,7 +288,13 @@
"分支",
"if"
],
"children": []
"children": [],
"keywords_must": [
"if条件",
"if语句",
"if"
],
"keywords_forbid": []
}
},
{
......@@ -223,10 +306,16 @@
"分支",
"switch"
],
"children": []
"children": [],
"keywords_must": [
"switch"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -242,7 +331,13 @@
"do",
"while"
],
"children": []
"children": [],
"keywords_must": [
"循环",
"do",
"while"
],
"keywords_forbid": []
}
},
{
......@@ -252,10 +347,16 @@
"循环",
"for"
],
"children": []
"children": [],
"keywords_must": [
"for"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -270,7 +371,12 @@
"集合",
"collection"
],
"children": []
"children": [],
"keywords_must": [
"Collection接口",
"collection"
],
"keywords_forbid": []
}
},
{
......@@ -287,7 +393,9 @@
"keywords": [],
"children": [],
"node_id": "java-a65c6affd9d24c05aac81eb991fa544f",
"title": "List接口简介"
"title": "List接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -295,7 +403,9 @@
"keywords": [],
"children": [],
"node_id": "java-e617fbd29e3e416c980229a8f23ae0a7",
"title": "ArrayList集合"
"title": "ArrayList集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -303,10 +413,18 @@
"keywords": [],
"children": [],
"node_id": "java-8de89dae93b345ed947abe5cf9f9d572",
"title": "LinkedList集合"
"title": "LinkedList集合",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"list",
"列表",
"List接口"
],
"keywords_forbid": []
}
},
{
......@@ -323,7 +441,9 @@
"keywords": [],
"children": [],
"node_id": "java-71c08f278be9482492f5746259d7fd0c",
"title": "Iterator遍历集合"
"title": "Iterator遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -331,7 +451,9 @@
"keywords": [],
"children": [],
"node_id": "java-16725289376e4ff8ba87f63b82f362bc",
"title": "foreach遍历集合"
"title": "foreach遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -339,10 +461,17 @@
"keywords": [],
"children": [],
"node_id": "java-33bb9663a9e941c19e0e28bfdc9cfc0c",
"title": "JDK 8的forEach遍历集合"
"title": "JDK 8的forEach遍历集合",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"遍历",
"迭代"
],
"keywords_forbid": []
}
},
{
......@@ -358,7 +487,9 @@
"keywords": [],
"children": [],
"node_id": "java-80d1ea8eb29b4d42927df1703fd18027",
"title": "Set接口简介"
"title": "Set接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -366,7 +497,9 @@
"keywords": [],
"children": [],
"node_id": "java-70d9c1df4141440f815dcab59fb5d2fe",
"title": "HashSet集合"
"title": "HashSet集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -374,10 +507,17 @@
"keywords": [],
"children": [],
"node_id": "java-5e236f021e0545638e9785a3dde8a870",
"title": "TreeSet集合"
"title": "TreeSet集合",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"set",
"集合"
],
"keywords_forbid": []
}
},
{
......@@ -394,7 +534,9 @@
"keywords": [],
"children": [],
"node_id": "java-d5f0355891b4454f959628df25004459",
"title": "Map接口简介"
"title": "Map接口简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -402,7 +544,9 @@
"keywords": [],
"children": [],
"node_id": "java-7e4b2b11a68a485e97706575f8a53995",
"title": "HashMap集合"
"title": "HashMap集合",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -410,24 +554,35 @@
"keywords": [],
"children": [],
"node_id": "java-4f293ef4f50f441d8e45935103f4c70f",
"title": "Map集合遍历"
"title": "Map集合遍历",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"TreeMap集合": {
"keywords": [],
"children": [],
"node_id": "java-90d9396d834d409181104119600f5ced"
"node_id": "java-90d9396d834d409181104119600f5ced",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"Properties集合": {
"keywords": [],
"children": [],
"node_id": "java-4c352b41a0c1470da4a65df2e237a0c0"
"node_id": "java-4c352b41a0c1470da4a65df2e237a0c0",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"Map接口",
"map"
],
"keywords_forbid": []
}
},
{
......@@ -443,7 +598,9 @@
"keywords": [],
"children": [],
"node_id": "java-077624845de241b7b7fc51ff1b596357",
"title": "集合接口与实现分离"
"title": "集合接口与实现分离",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -451,10 +608,16 @@
"keywords": [],
"children": [],
"node_id": "java-22ea8a449e214efdb7d4e7c6207ff976",
"title": "泛型实用方法"
"title": "泛型实用方法",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"集合框架"
],
"keywords_forbid": []
}
},
{
......@@ -464,7 +627,11 @@
"集合",
"链表"
],
"children": []
"children": [],
"keywords_must": [
"链表"
],
"keywords_forbid": []
}
},
{
......@@ -474,7 +641,12 @@
"集合",
"ArrayList"
],
"children": []
"children": [],
"keywords_must": [
"数组列表",
"ArrayList"
],
"keywords_forbid": []
}
},
{
......@@ -484,7 +656,12 @@
"集合",
"HashSet"
],
"children": []
"children": [],
"keywords_must": [
"散列集",
"HashSet"
],
"keywords_forbid": []
}
},
{
......@@ -494,7 +671,12 @@
"集合",
"树"
],
"children": []
"children": [],
"keywords_must": [
"树集",
"treeset"
],
"keywords_forbid": []
}
},
{
......@@ -511,7 +693,9 @@
"keywords": [],
"children": [],
"node_id": "java-e5ffd95da6854271921fcd063a8e9474",
"title": "基本映射操作"
"title": "基本映射操作",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -519,7 +703,9 @@
"keywords": [],
"children": [],
"node_id": "java-27cbca6c546945238e456fd1402f59b4",
"title": "更新映射条目"
"title": "更新映射条目",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -527,38 +713,52 @@
"keywords": [],
"children": [],
"node_id": "java-f48bf1d3221842f9b45543b1705f870c",
"title": "映射视图"
"title": "映射视图",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"弱散列映射": {
"keywords": [],
"children": [],
"node_id": "java-ad195243648f4d1b851248f893dbeadd"
"node_id": "java-ad195243648f4d1b851248f893dbeadd",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"链接散列集与映射": {
"keywords": [],
"children": [],
"node_id": "java-d4b78c6364334984b1c8deea06e6e4d0"
"node_id": "java-d4b78c6364334984b1c8deea06e6e4d0",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"枚举集与映射": {
"keywords": [],
"children": [],
"node_id": "java-a83f26fffc33412cac3e404b57283586"
"node_id": "java-a83f26fffc33412cac3e404b57283586",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"标识散列映射": {
"keywords": [],
"children": [],
"node_id": "java-2f1a04fac2d742e3956e8f633d7fab60"
"node_id": "java-2f1a04fac2d742e3956e8f633d7fab60",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"映射"
],
"keywords_forbid": []
}
},
{
......@@ -574,7 +774,9 @@
"keywords": [],
"children": [],
"node_id": "java-192390a65e7749569e55494126db91e6",
"title": "属性映射"
"title": "属性映射",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -582,7 +784,9 @@
"keywords": [],
"children": [],
"node_id": "java-e133d7889d4a4eddbd93fdad42ae04a5",
"title": "栈"
"title": "栈",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -590,10 +794,16 @@
"keywords": [],
"children": [],
"node_id": "java-cc16eefb70744aea9126a1b697d20502",
"title": "位集"
"title": "位集",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"遗留的集合"
],
"keywords_forbid": []
}
},
{
......@@ -604,7 +814,12 @@
"hash",
"equals"
],
"children": []
"children": [],
"keywords_must": [
"equals",
"hashCode"
],
"keywords_forbid": []
}
},
{
......@@ -615,7 +830,11 @@
"TreeMap",
"字典"
],
"children": []
"children": [],
"keywords_must": [
"TreeMap"
],
"keywords_forbid": []
}
},
{
......@@ -626,7 +845,12 @@
"字典",
"集合"
],
"children": []
"children": [],
"keywords_must": [
"属性",
"Properties"
],
"keywords_forbid": []
}
},
{
......@@ -636,10 +860,17 @@
"集合",
"队列"
],
"children": []
"children": [],
"keywords_must": [
"Deque",
"双端队列"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -659,10 +890,16 @@
"keywords": [],
"children": [],
"node_id": "java-4bc48dc6ab4246bdb83adbabade26959",
"title": "一元加、减操作符"
"title": "一元加、减操作符",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"算术操作符"
],
"keywords_forbid": []
}
},
{
......@@ -672,7 +909,12 @@
"递增",
"递减"
],
"children": []
"children": [],
"keywords_must": [
"自动递增",
"自动递减"
],
"keywords_forbid": []
}
},
{
......@@ -687,10 +929,17 @@
"keywords": [],
"children": [],
"node_id": "java-16c4fd7348aa467e9127ba633a22a5b1",
"title": "测试对象的等价性"
"title": "测试对象的等价性",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"关系运算符",
"关系操作符"
],
"keywords_forbid": []
}
},
{
......@@ -708,10 +957,17 @@
"keywords": [],
"children": [],
"node_id": "java-cd873cea5a47486aa325d241d78e65c3",
"title": "短路"
"title": "短路",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"逻辑操作符",
"逻辑运算符"
],
"keywords_forbid": []
}
},
{
......@@ -722,7 +978,14 @@
"bit",
"比特"
],
"children": []
"children": [],
"keywords_must": [
"按位操作符",
"位运算",
"bit",
"比特"
],
"keywords_forbid": []
}
},
{
......@@ -733,7 +996,14 @@
"左移",
"右移"
],
"children": []
"children": [],
"keywords_must": [
"移位操作符",
"移位",
"左移",
"右移"
],
"keywords_forbid": []
}
},
{
......@@ -743,7 +1013,12 @@
"逻辑",
"三元运算符"
],
"children": []
"children": [],
"keywords_must": [
"三元操作符",
"三元运算符"
],
"keywords_forbid": []
}
},
{
......@@ -752,10 +1027,17 @@
"keywords": [
"字符串"
],
"children": []
"children": [],
"keywords_must": [
"字符串操作符",
"字符串运算符"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -771,7 +1053,12 @@
"if",
"else"
],
"children": []
"children": [],
"keywords_must": [
"if",
"else"
],
"keywords_forbid": []
}
},
{
......@@ -783,7 +1070,13 @@
"循环",
"foreach"
],
"children": []
"children": [],
"keywords_must": [
"for",
"for循环",
"foreach"
],
"keywords_forbid": []
}
},
{
......@@ -793,7 +1086,11 @@
"流程控制",
"switch"
],
"children": []
"children": [],
"keywords_must": [
"switch"
],
"keywords_forbid": []
}
},
{
......@@ -812,7 +1109,9 @@
"keywords": [],
"children": [],
"node_id": "java-22d139aee4b640beaff3f5f983c9f4e8",
"title": "概念"
"title": "概念",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -824,54 +1123,70 @@
"keywords": [],
"children": [],
"node_id": "java-9483eeb4d68842488b3acbc8c9764322",
"title": "try块"
"title": "try块",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常处理程序": {
"keywords": [],
"children": [],
"node_id": "java-34829a03d7b041198477e09029c37f49"
"node_id": "java-34829a03d7b041198477e09029c37f49",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"f?inally子句": {
"keywords": [],
"children": [],
"node_id": "java-27871ba11aeb4aefa542e4ac87620018"
"node_id": "java-27871ba11aeb4aefa542e4ac87620018",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"try-with-Resources语句": {
"keywords": [],
"children": [],
"node_id": "java-20c0416fd93848d182e67ffa2cc67e35"
"node_id": "java-20c0416fd93848d182e67ffa2cc67e35",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"分析堆栈轨迹元素": {
"keywords": [],
"children": [],
"node_id": "java-fc4ca42328554153846c7ac13704d030"
"node_id": "java-fc4ca42328554153846c7ac13704d030",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-a2f7a14e5a2743e297ae25d808b6a5aa",
"title": "捕获异常"
"title": "捕获异常",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"创建自定义异常": {
"keywords": [],
"children": [],
"node_id": "java-c2463f0ab5784161a9b3c086ca8f31ff"
"node_id": "java-c2463f0ab5784161a9b3c086ca8f31ff",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常说明": {
"keywords": [],
"children": [],
"node_id": "java-c3aea15c0f494a078ffd747a1f3dd271"
"node_id": "java-c3aea15c0f494a078ffd747a1f3dd271",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -882,25 +1197,33 @@
"栈轨迹": {
"keywords": [],
"children": [],
"node_id": "java-9741356278ec4ecda2af9baddde74e01"
"node_id": "java-9741356278ec4ecda2af9baddde74e01",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"重新抛出异常": {
"keywords": [],
"children": [],
"node_id": "java-81f1f5af115648338a8ea8d11f2c0ec1"
"node_id": "java-81f1f5af115648338a8ea8d11f2c0ec1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常链": {
"keywords": [],
"children": [],
"node_id": "java-dc3ceecd4a0943dcb4e1e18d0e6131ca"
"node_id": "java-dc3ceecd4a0943dcb4e1e18d0e6131ca",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-e821208680094805a93e1e6f46bca86d"
"node_id": "java-e821208680094805a93e1e6f46bca86d",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -911,11 +1234,15 @@
"特例: RuntimeException(运行时异常)": {
"keywords": [],
"children": [],
"node_id": "java-27967b17e29d4855907f199a4172fe9e"
"node_id": "java-27967b17e29d4855907f199a4172fe9e",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-cce481b5ed99444e8205d59de0c80d55"
"node_id": "java-cce481b5ed99444e8205d59de0c80d55",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -926,25 +1253,33 @@
"finally用来做什么": {
"keywords": [],
"children": [],
"node_id": "java-1d8dfbe207ab4ee289783363fabb2eef"
"node_id": "java-1d8dfbe207ab4ee289783363fabb2eef",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"在return中使用finally": {
"keywords": [],
"children": [],
"node_id": "java-2185abe1d4d947e09953dd9c0b690a30"
"node_id": "java-2185abe1d4d947e09953dd9c0b690a30",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"缺憾:异常丢失": {
"keywords": [],
"children": [],
"node_id": "java-5c49dbfd363c4a6da7c3f8b7f4f8e6e3"
"node_id": "java-5c49dbfd363c4a6da7c3f8b7f4f8e6e3",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-8cb3b3570df04f34a49497691839c64a"
"node_id": "java-8cb3b3570df04f34a49497691839c64a",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -955,25 +1290,33 @@
"使用构造器执行初始化": {
"keywords": [],
"children": [],
"node_id": "java-f1f617dafd7c4cff9fa6ab53a8c4a24f"
"node_id": "java-f1f617dafd7c4cff9fa6ab53a8c4a24f",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"构造器重载": {
"keywords": [],
"children": [],
"node_id": "java-6774bbb97e27423090f2446f14f370b5"
"node_id": "java-6774bbb97e27423090f2446f14f370b5",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-0b5559794c0d42f6b323e0db663d4e20"
"node_id": "java-0b5559794c0d42f6b323e0db663d4e20",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常匹配": {
"keywords": [],
"children": [],
"node_id": "java-54a2a15979ac4d5db7813bb86d9d3ba4"
"node_id": "java-54a2a15979ac4d5db7813bb86d9d3ba4",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -984,42 +1327,61 @@
"历史": {
"keywords": [],
"children": [],
"node_id": "java-9fd5d926c8714cb8b533735e2516af3b"
"node_id": "java-9fd5d926c8714cb8b533735e2516af3b",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"观点": {
"keywords": [],
"children": [],
"node_id": "java-8adfa2512354498fa87e1272412372a1"
"node_id": "java-8adfa2512354498fa87e1272412372a1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"把异常传递给控制台": {
"keywords": [],
"children": [],
"node_id": "java-c977e83a138c492197e596c052f61901"
"node_id": "java-c977e83a138c492197e596c052f61901",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"把“受检查异常”转换为“不受检查的异常”": {
"keywords": [],
"children": [],
"node_id": "java-b8e0c52eb6734b78b5903d46f7ed8b8d"
"node_id": "java-b8e0c52eb6734b78b5903d46f7ed8b8d",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-fcc8f860a91547a69eb95aa905a36e11"
"node_id": "java-fcc8f860a91547a69eb95aa905a36e11",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"异常使用指南": {
"keywords": [],
"children": [],
"node_id": "java-db2eed2dbf644d468f2b83cd15f736d2"
"node_id": "java-db2eed2dbf644d468f2b83cd15f736d2",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"异常",
"try",
"catch",
"finally"
],
"keywords_forbid": []
}
},
{
......@@ -1029,10 +1391,17 @@
"函数",
"function"
],
"children": []
"children": [],
"keywords_must": [
"函数",
"function"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1049,7 +1418,12 @@
"面向对象",
"oo"
],
"children": []
"children": [],
"keywords_must": [
"类",
"面向对象"
],
"keywords_forbid": []
}
},
{
......@@ -1060,7 +1434,11 @@
"抽象类",
"接口"
],
"children": []
"children": [],
"keywords_must": [
"抽象类"
],
"keywords_forbid": []
}
},
{
......@@ -1071,7 +1449,11 @@
"类型",
"接口"
],
"children": []
"children": [],
"keywords_must": [
"接口"
],
"keywords_forbid": []
}
},
{
......@@ -1082,10 +1464,16 @@
"匿名类",
"lambda"
],
"children": []
"children": [],
"keywords_must": [
"匿名类"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1100,7 +1488,11 @@
"字节流",
"bytestream"
],
"children": []
"children": [],
"keywords_must": [
"字节流"
],
"keywords_forbid": []
}
},
{
......@@ -1111,13 +1503,21 @@
"文件类",
"file"
],
"children": []
"children": [],
"keywords_must": [
"File"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1139,7 +1539,12 @@
"input",
"output"
],
"children": []
"children": [],
"keywords_must": [
"流概述",
"stream"
],
"keywords_forbid": []
}
},
{
......@@ -1151,7 +1556,12 @@
"文件",
"file"
],
"children": []
"children": [],
"keywords_must": [
"随机访问文件",
"RandomAccessFile"
],
"keywords_forbid": []
}
},
{
......@@ -1170,7 +1580,9 @@
"keywords": [],
"children": [],
"node_id": "java-31c61c28f4f14905a0284be89b245dcf",
"title": "输入流"
"title": "输入流",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1178,10 +1590,18 @@
"keywords": [],
"children": [],
"node_id": "java-de7d542804424ec0986fa6ca0fd2ec45",
"title": "输出流"
"title": "输出流",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"输入输出流",
"输入流",
"输出流"
],
"keywords_forbid": []
}
},
{
......@@ -1203,7 +1623,9 @@
"keywords": [],
"children": [],
"node_id": "java-0aba4828a38347a9b703e7c3ae608530",
"title": "FileInputStream类与FileOutputStream类"
"title": "FileInputStream类与FileOutputStream类",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1211,10 +1633,20 @@
"keywords": [],
"children": [],
"node_id": "java-d95e2c9886a6441d8a2cdf3710d5204e",
"title": "FileReader类与FileWriter类"
"title": "FileReader类与FileWriter类",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"文件输入输出流",
"文件输入流",
"文件输出流",
"reader",
"writer"
],
"keywords_forbid": []
}
},
{
......@@ -1225,7 +1657,13 @@
"serialize",
"serializable"
],
"children": []
"children": [],
"keywords_must": [
"序列化",
"serialize",
"serializable"
],
"keywords_forbid": []
}
},
{
......@@ -1247,7 +1685,9 @@
"keywords": [],
"children": [],
"node_id": "java-2119c3a172d24aab804d8ffaed6ddd18",
"title": "压缩文件"
"title": "压缩文件",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1255,10 +1695,16 @@
"keywords": [],
"children": [],
"node_id": "java-554dc7711b104ed9a80c5a6b7c1489ee",
"title": "解压缩ZIP文件"
"title": "解压缩ZIP文件",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"ZIP压缩"
],
"keywords_forbid": []
}
},
{
......@@ -1270,7 +1716,11 @@
"输入",
"流"
],
"children": []
"children": [],
"keywords_must": [
"InputStream"
],
"keywords_forbid": []
}
},
{
......@@ -1282,10 +1732,16 @@
"输出",
"流"
],
"children": []
"children": [],
"keywords_must": [
"OutputStream"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1308,7 +1764,9 @@
"keywords": [],
"children": [],
"node_id": "java-5decb41b064a492db20362e136c0b2e2",
"title": "JDBC-ODBC桥"
"title": "JDBC-ODBC桥",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1316,7 +1774,9 @@
"keywords": [],
"children": [],
"node_id": "java-e89787459ec64fbeb80a9ba3cc7eac54",
"title": "JDBC技术"
"title": "JDBC技术",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1324,10 +1784,16 @@
"keywords": [],
"children": [],
"node_id": "java-df3cd40dc360446296cf9c97f3a72e61",
"title": "JDBC驱动程序的类型"
"title": "JDBC驱动程序的类型",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"JDBC概述"
],
"keywords_forbid": []
}
},
{
......@@ -1349,7 +1815,9 @@
"keywords": [],
"children": [],
"node_id": "java-6217b237af9545cb8ea45e2390827761",
"title": "数据库基础"
"title": "数据库基础",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1357,7 +1825,9 @@
"keywords": [],
"children": [],
"node_id": "java-d836337812bc438a8c527df151870250",
"title": "数据查询"
"title": "数据查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1365,14 +1835,18 @@
"keywords": [],
"children": [],
"node_id": "java-d54f7e1e96ad44d3bf7240f694e2e53c",
"title": "动态查询"
"title": "动态查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"添加、修改、删除记录": {
"keywords": [],
"children": [],
"node_id": "java-f2f1d3facff943e9b169dbb6a43a5004"
"node_id": "java-f2f1d3facff943e9b169dbb6a43a5004",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1383,66 +1857,90 @@
"什么是数据库": {
"keywords": [],
"children": [],
"node_id": "java-668c52db99de4dad9483809106b38932"
"node_id": "java-668c52db99de4dad9483809106b38932",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"数据库的种类及功能": {
"keywords": [],
"children": [],
"node_id": "java-70a72823b0534f5e9bc397af6b3674f1"
"node_id": "java-70a72823b0534f5e9bc397af6b3674f1",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"SQL语言": {
"keywords": [],
"children": [],
"node_id": "java-93da6e5c26914eb7926261276e4b3d3c"
"node_id": "java-93da6e5c26914eb7926261276e4b3d3c",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-987b58f5cc48422f899ac000d51c5bae"
"node_id": "java-987b58f5cc48422f899ac000d51c5bae",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"向数据库发送SQL语句": {
"keywords": [],
"children": [],
"node_id": "java-a78e2ce00e4a443e9caccf68836c259c"
"node_id": "java-a78e2ce00e4a443e9caccf68836c259c",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"处理查询结果集": {
"keywords": [],
"children": [],
"node_id": "java-98f0846a37ce4528b8a44c656cbc1bef"
"node_id": "java-98f0846a37ce4528b8a44c656cbc1bef",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"顺序查询": {
"keywords": [],
"children": [],
"node_id": "java-10964bbc05c6429aa0a416ffe3d72530"
"node_id": "java-10964bbc05c6429aa0a416ffe3d72530",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"模糊查询": {
"keywords": [],
"children": [],
"node_id": "java-bb40f3c631dc4da9a045c47a5a2fcdab"
"node_id": "java-bb40f3c631dc4da9a045c47a5a2fcdab",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"预处理语句": {
"keywords": [],
"children": [],
"node_id": "java-d57228f74f1d4a2da114c47357729b28"
"node_id": "java-d57228f74f1d4a2da114c47357729b28",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"数据库"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1456,7 +1954,11 @@
"keywords": [
"nio"
],
"children": []
"children": [],
"keywords_must": [
"nio"
],
"keywords_forbid": []
}
},
{
......@@ -1466,7 +1968,12 @@
"buffer",
"缓冲"
],
"children": []
"children": [],
"keywords_must": [
"buffer",
"缓冲器"
],
"keywords_forbid": []
}
},
{
......@@ -1476,7 +1983,12 @@
"channel",
"通道"
],
"children": []
"children": [],
"keywords_must": [
"channel",
"通道"
],
"keywords_forbid": []
}
},
{
......@@ -1486,7 +1998,12 @@
"字符集",
"charset"
],
"children": []
"children": [],
"keywords_must": [
"字符集",
"charset"
],
"keywords_forbid": []
}
},
{
......@@ -1498,7 +2015,12 @@
"lock",
"锁"
],
"children": []
"children": [],
"keywords_must": [
"文件锁",
"lock"
],
"keywords_forbid": []
}
},
{
......@@ -1509,7 +2031,11 @@
"Path",
"路径"
],
"children": []
"children": [],
"keywords_must": [
"Path接口"
],
"keywords_forbid": []
}
},
{
......@@ -1519,10 +2045,16 @@
"文件",
"file"
],
"children": []
"children": [],
"keywords_must": [
"Files"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1544,7 +2076,9 @@
"keywords": [],
"children": [],
"node_id": "java-a79ddcf9777d4af48bc5a260933a2e82",
"title": "网络通信协议"
"title": "网络通信协议",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1552,7 +2086,9 @@
"keywords": [],
"children": [],
"node_id": "java-37985b5801644ce4a823966c72d8db97",
"title": "IP地址和端口号"
"title": "IP地址和端口号",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1560,17 +2096,25 @@
"keywords": [],
"children": [],
"node_id": "java-081281446cac46e6ace10be5b85ed596",
"title": "InetAddress"
"title": "InetAddress",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP与TCP协议": {
"keywords": [],
"children": [],
"node_id": "java-2d97da4c84734adc97ef08a8f338bdd0"
"node_id": "java-2d97da4c84734adc97ef08a8f338bdd0",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"网络编程"
],
"keywords_forbid": []
}
},
{
......@@ -1587,7 +2131,9 @@
"keywords": [],
"children": [],
"node_id": "java-0fbfa7442076484683006362f10305cc",
"title": "UDP通信简介"
"title": "UDP通信简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1595,7 +2141,9 @@
"keywords": [],
"children": [],
"node_id": "java-e2a796a931bf4aa7bb204a05d18dd2ca",
"title": "DatagramPacket"
"title": "DatagramPacket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1603,24 +2151,34 @@
"keywords": [],
"children": [],
"node_id": "java-c498a7116c9548b283eac0a3bc3e9766",
"title": "DatagramSocket"
"title": "DatagramSocket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-1d8a509258aa48b99c8870aa2ea2f7da"
"node_id": "java-1d8a509258aa48b99c8870aa2ea2f7da",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"UDP案例——聊天程序": {
"keywords": [],
"children": [],
"node_id": "java-2648409476dd4809aab31299bb47a782"
"node_id": "java-2648409476dd4809aab31299bb47a782",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"udp"
],
"keywords_forbid": []
}
},
{
......@@ -1636,7 +2194,9 @@
"keywords": [],
"children": [],
"node_id": "java-0e32134022e94f13a89fc1536e8b7dc9",
"title": "TCP通信简介"
"title": "TCP通信简介",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1644,7 +2204,9 @@
"keywords": [],
"children": [],
"node_id": "java-61d6532c567640bbb369c1880f584d47",
"title": "ServerSocket"
"title": "ServerSocket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1652,31 +2214,43 @@
"keywords": [],
"children": [],
"node_id": "java-90bf889f7fc04403aa109f638bb7bb28",
"title": "Socket"
"title": "Socket",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"简单的TCP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-c084edbe768a4d43bcf551c5d3b37fa3"
"node_id": "java-c084edbe768a4d43bcf551c5d3b37fa3",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"多线程的TCP网络程序": {
"keywords": [],
"children": [],
"node_id": "java-dcc1f999ffc84bb69344c2a233f516c4"
"node_id": "java-dcc1f999ffc84bb69344c2a233f516c4",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"TCP案例——文件上传": {
"keywords": [],
"children": [],
"node_id": "java-fcc2a6b66f9a4cbf954d86635df20a8a"
"node_id": "java-fcc2a6b66f9a4cbf954d86635df20a8a",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"tcp"
],
"keywords_forbid": []
}
},
{
......@@ -1691,7 +2265,9 @@
"keywords": [],
"children": [],
"node_id": "java-a5ada59a43024cd080ed2a7ad6ba8bb7",
"title": "使用URLDecoder和URLEncoder"
"title": "使用URLDecoder和URLEncoder",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1699,10 +2275,16 @@
"keywords": [],
"children": [],
"node_id": "java-9042eac8712642c98c5fc9e4a5165dc0",
"title": "URL、URLConnection和URLPermission"
"title": "URL、URLConnection和URLPermission",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"基本网络支持"
],
"keywords_forbid": []
}
},
{
......@@ -1718,7 +2300,9 @@
"keywords": [],
"children": [],
"node_id": "java-b5efe86ed01b464799fc32edc3e2862f",
"title": "直接使用Proxy创建连接"
"title": "直接使用Proxy创建连接",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1726,10 +2310,16 @@
"keywords": [],
"children": [],
"node_id": "java-bcc6e1c8fbe248278f3d55e61f282ec8",
"title": "使用ProxySelector自动选择代理服务器"
"title": "使用ProxySelector自动选择代理服务器",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"代理服务器"
],
"keywords_forbid": []
}
},
{
......@@ -1749,7 +2339,9 @@
"keywords": [],
"children": [],
"node_id": "java-f6d4f9e683b84e53ad0b1c5c2c9c4988",
"title": "发送同步GET请求"
"title": "发送同步GET请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1757,7 +2349,9 @@
"keywords": [],
"children": [],
"node_id": "java-f1d63ba6664747239aa3b84f697b1a84",
"title": "发送带请求体的请求"
"title": "发送带请求体的请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1765,27 +2359,39 @@
"keywords": [],
"children": [],
"node_id": "java-d0d1295efbec421b87d66ca663629d36",
"title": "发送异步请求"
"title": "发送异步请求",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"WebSocket客户端支持": {
"keywords": [],
"children": [],
"node_id": "java-c43622cc970e4f159433f441d9b3aeec"
"node_id": "java-c43622cc970e4f159433f441d9b3aeec",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"基于WebSocket的多人实时聊天": {
"keywords": [],
"children": [],
"node_id": "java-b6be48e26bf5490f8337daad17059e6c"
"node_id": "java-b6be48e26bf5490f8337daad17059e6c",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"HTTP Client"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1807,7 +2413,9 @@
"keywords": [],
"children": [],
"node_id": "java-16ceaee391ff4ec0a520211b5d0dc506",
"title": "类字面常量"
"title": "类字面常量",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1815,7 +2423,9 @@
"keywords": [],
"children": [],
"node_id": "java-e2c66e3ba49746de87779dcab4a686f7",
"title": "泛化的Class引用"
"title": "泛化的Class引用",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1823,10 +2433,16 @@
"keywords": [],
"children": [],
"node_id": "java-27e7ea709e5b448fbd0dcadb70d425b6",
"title": "新的转型语法"
"title": "新的转型语法",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"Class对象"
],
"keywords_forbid": []
}
},
{
......@@ -1842,7 +2458,9 @@
"keywords": [],
"children": [],
"node_id": "java-5d348625455e40ba82b46a569d3c9719",
"title": "使用类字面常量"
"title": "使用类字面常量",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1850,7 +2468,9 @@
"keywords": [],
"children": [],
"node_id": "java-92f8dd9e046b407481302197423e95aa",
"title": "动态instanceof"
"title": "动态instanceof",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1858,10 +2478,16 @@
"keywords": [],
"children": [],
"node_id": "java-a66273b2dcdf46249ceb1b88cd3c90cb",
"title": "递归计数"
"title": "递归计数",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"类型转换"
],
"keywords_forbid": []
}
},
{
......@@ -1870,7 +2496,12 @@
"keywords": [
"类型"
],
"children": []
"children": [],
"keywords_must": [
"instanceof",
"等价性"
],
"keywords_forbid": []
}
},
{
......@@ -1886,7 +2517,9 @@
"keywords": [],
"children": [],
"node_id": "java-5149ec714a624c8da96f195b7de73419",
"title": "类方法抽取器"
"title": "类方法抽取器",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1898,26 +2531,34 @@
"keywords": [],
"children": [],
"node_id": "java-6dd73a33a7aa42f8b60f237a539568fe",
"title": "访问构造方法"
"title": "访问构造方法",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问成员变量": {
"keywords": [],
"children": [],
"node_id": "java-5dd955d5f50747feb3ed19c8ee1ba8b2"
"node_id": "java-5dd955d5f50747feb3ed19c8ee1ba8b2",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问方法": {
"keywords": [],
"children": [],
"node_id": "java-c9513a7b28ec47bfa13c0656e7196f55"
"node_id": "java-c9513a7b28ec47bfa13c0656e7196f55",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-9be972504f4440079f535753d8d73811",
"title": "Class类与Java反射"
"title": "Class类与Java反射",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -1928,84 +2569,113 @@
"定义Annotation类型": {
"keywords": [],
"children": [],
"node_id": "java-e06a14d142c04858a017baf0ab1adf29"
"node_id": "java-e06a14d142c04858a017baf0ab1adf29",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问Annotation信息": {
"keywords": [],
"children": [],
"node_id": "java-f8aa68a5a30f450ca21af672448a653f"
"node_id": "java-f8aa68a5a30f450ca21af672448a653f",
"keywords_must": [],
"keywords_forbid": []
}
}
],
"node_id": "java-f288867c2d654836b9d93af8790b67b0"
"node_id": "java-f288867c2d654836b9d93af8790b67b0",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"声明异常入门": {
"keywords": [],
"children": [],
"node_id": "java-d35d19ec1d154b9d9e6e06a147305f9e"
"node_id": "java-d35d19ec1d154b9d9e6e06a147305f9e",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"资源": {
"keywords": [],
"children": [],
"node_id": "java-c03a7a45c5c246ceba0ac3df1e426fb6"
"node_id": "java-c03a7a45c5c246ceba0ac3df1e426fb6",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"利用反射分析类的能力": {
"keywords": [],
"children": [],
"node_id": "java-170ca43f1b46492d94594937635cda12"
"node_id": "java-170ca43f1b46492d94594937635cda12",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用反射在运行时分析": {
"keywords": [],
"children": [],
"node_id": "java-046f5ea7441847a0be59cd9b07cefa2c"
"node_id": "java-046f5ea7441847a0be59cd9b07cefa2c",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用反射编写泛型数组": {
"keywords": [],
"children": [],
"node_id": "java-0a28c7f21a6a4a48ba3ad52eb364410f"
"node_id": "java-0a28c7f21a6a4a48ba3ad52eb364410f",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"访问字段": {
"keywords": [],
"children": [],
"node_id": "java-111c415f827c4db698e003a2365357e9"
"node_id": "java-111c415f827c4db698e003a2365357e9",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"调用方法": {
"keywords": [],
"children": [],
"node_id": "java-6a24720b8a4c4102aef7aa8c5ddeb870"
"node_id": "java-6a24720b8a4c4102aef7aa8c5ddeb870",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"调用构造方法": {
"keywords": [],
"children": [],
"node_id": "java-d7ab012406a049518931e809cc364c81"
"node_id": "java-d7ab012406a049518931e809cc364c81",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"获取继承关系": {
"keywords": [],
"children": [],
"node_id": "java-9e70bf59fb9d4a52b22981b15001f420"
"node_id": "java-9e70bf59fb9d4a52b22981b15001f420",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"反射",
"运行时类信息"
],
"keywords_forbid": []
}
},
{
......@@ -2014,7 +2684,11 @@
"keywords": [
"proxy"
],
"children": []
"children": [],
"keywords_must": [
"动态代理"
],
"keywords_forbid": []
}
},
{
......@@ -2029,13 +2703,21 @@
"keywords": [],
"children": [],
"node_id": "java-79ecb6c77f734cbaba7264deb8ca2a22",
"title": "模拟对象与桩"
"title": "模拟对象与桩",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"空对象"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2051,7 +2733,12 @@
"collection",
"方法"
],
"children": []
"children": [],
"keywords_must": [
"功能",
"方法"
],
"keywords_forbid": []
}
},
{
......@@ -2061,7 +2748,12 @@
"list",
"数据结构"
],
"children": []
"children": [],
"keywords_must": [
"功能",
"方法"
],
"keywords_forbid": []
}
},
{
......@@ -2071,7 +2763,11 @@
"set",
"数据结构"
],
"children": []
"children": [],
"keywords_must": [
"存储顺序"
],
"keywords_forbid": []
}
},
{
......@@ -2088,7 +2784,9 @@
"keywords": [],
"children": [],
"node_id": "java-a17735f4ca70413cb8053faf3b11db21",
"title": "优先级队列"
"title": "优先级队列",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2096,10 +2794,17 @@
"keywords": [],
"children": [],
"node_id": "java-088b40b3ec034906b2147ffb9bd97b91",
"title": "双向队列"
"title": "双向队列",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"队列",
"queue"
],
"keywords_forbid": []
}
},
{
......@@ -2116,7 +2821,9 @@
"keywords": [],
"children": [],
"node_id": "java-4ecb278ae1c849e88e67f0de13e88ec0",
"title": "性能"
"title": "性能",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2124,7 +2831,9 @@
"keywords": [],
"children": [],
"node_id": "java-b2019b3c3f5f48efaf16d5fcda4ab22e",
"title": "SortedMap"
"title": "SortedMap",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2132,10 +2841,17 @@
"keywords": [],
"children": [],
"node_id": "java-455d76b244e84f2a8d62ce4d2f546214",
"title": "LinkedHashMap"
"title": "LinkedHashMap",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"map",
"字典"
],
"keywords_forbid": []
}
},
{
......@@ -2150,7 +2866,9 @@
"keywords": [],
"children": [],
"node_id": "java-ab0d376e43cc44da80b4954054eeca9d",
"title": "性能测试框架"
"title": "性能测试框架",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2158,7 +2876,9 @@
"keywords": [],
"children": [],
"node_id": "java-0827bea6ef504e5cbb462bce56893a7d",
"title": "对List的选择"
"title": "对List的选择",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2166,24 +2886,34 @@
"keywords": [],
"children": [],
"node_id": "java-f900efdf13e84d668476fa6150381f52",
"title": "微基准测试的危险"
"title": "微基准测试的危险",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"对Set的选择": {
"keywords": [],
"children": [],
"node_id": "java-eab8ea85ddd5464888fd8e6f4277f127"
"node_id": "java-eab8ea85ddd5464888fd8e6f4277f127",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"对Map的选择": {
"keywords": [],
"children": [],
"node_id": "java-7cc209ce394f4cfaad6845aaf2b59312"
"node_id": "java-7cc209ce394f4cfaad6845aaf2b59312",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"选择接口"
],
"keywords_forbid": []
}
},
{
......@@ -2198,7 +2928,9 @@
"keywords": [],
"children": [],
"node_id": "java-96ef5521b9ea47a6b7b4ba7d9e3b66a7",
"title": "List的排序和查询"
"title": "List的排序和查询",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2206,7 +2938,9 @@
"keywords": [],
"children": [],
"node_id": "java-7a7a4d7e8d234834a8ee9a9e89aca406",
"title": "设定Collection或Map为不可修改"
"title": "设定Collection或Map为不可修改",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2214,13 +2948,21 @@
"keywords": [],
"children": [],
"node_id": "java-103035017b954141a825adce390593fa",
"title": "Collection或Map的同步控制"
"title": "Collection或Map的同步控制",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"Collections"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2241,7 +2983,9 @@
"keywords": [],
"children": [],
"node_id": "java-9da72212f00d4634bb4a41816a6c6373",
"title": "定义注解"
"title": "定义注解",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2249,10 +2993,16 @@
"keywords": [],
"children": [],
"node_id": "java-e9cfa24eb43646cdb4530abdea7828e6",
"title": "元注解"
"title": "元注解",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"注解"
],
"keywords_forbid": []
}
},
{
......@@ -2263,7 +3013,11 @@
"注解",
"annotation"
],
"children": []
"children": [],
"keywords_must": [
"apt"
],
"keywords_forbid": []
}
},
{
......@@ -2281,7 +3035,9 @@
"keywords": [],
"children": [],
"node_id": "java-778a97d11dfe4373b20080ce72b104e8",
"title": "将@Unit用于泛型"
"title": "将@Unit用于泛型",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2289,7 +3045,9 @@
"keywords": [],
"children": [],
"node_id": "java-88b23041c80c4551a59f2ef8fee4ed3c",
"title": "不需要任何“套件”"
"title": "不需要任何“套件”",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2297,20 +3055,32 @@
"keywords": [],
"children": [],
"node_id": "java-52985edbfc4d43c294ef641f2be124fe",
"title": "实现@Unit"
"title": "实现@Unit",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"移除测试代码": {
"keywords": [],
"children": [],
"node_id": "java-12dbc9262a89470a8856d7dbb4224125"
"node_id": "java-12dbc9262a89470a8856d7dbb4224125",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"junit",
"单元测试",
"annotation"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2330,7 +3100,9 @@
"keywords": [],
"children": [],
"node_id": "java-fdb6213b58e74216b74613175b4925fc",
"title": "更快的执行"
"title": "更快的执行",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2338,10 +3110,16 @@
"keywords": [],
"children": [],
"node_id": "java-6169cb2332d140d0afa88cd219a21eba",
"title": "改进代码设计"
"title": "改进代码设计",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"并发"
],
"keywords_forbid": []
}
},
{
......@@ -2359,7 +3137,9 @@
"keywords": [],
"children": [],
"node_id": "java-4ccf91e926b548c79f3502fe7e72c301",
"title": "中断线程"
"title": "中断线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2367,7 +3147,9 @@
"keywords": [],
"children": [],
"node_id": "java-8c992e3f10814c21bd65c0a78fbdaf78",
"title": "守护线程"
"title": "守护线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2375,17 +3157,25 @@
"keywords": [],
"children": [],
"node_id": "java-ae11718ecefd44f1b7d490def20f1b7c",
"title": "线程名"
"title": "线程名",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"未捕获异常的处理器": {
"keywords": [],
"children": [],
"node_id": "java-f4a0fc3aa5a64184b4d12f2bf347b3d5"
"node_id": "java-f4a0fc3aa5a64184b4d12f2bf347b3d5",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"线程属性"
],
"keywords_forbid": []
}
},
{
......@@ -2403,7 +3193,9 @@
"keywords": [],
"children": [],
"node_id": "java-cae8cf168615440ba1790fe654a47e55",
"title": "新建线程"
"title": "新建线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2411,7 +3203,9 @@
"keywords": [],
"children": [],
"node_id": "java-9be56d2a991f4dea839c68854bb6c9cb",
"title": "可运行线程"
"title": "可运行线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2419,17 +3213,25 @@
"keywords": [],
"children": [],
"node_id": "java-e06bd95cb2504c07827c2c81a88a2f7f",
"title": "阻塞和等待线程"
"title": "阻塞和等待线程",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"终止线程": {
"keywords": [],
"children": [],
"node_id": "java-0ba3f448d6de4b16b02516f52b551b2d"
"node_id": "java-0ba3f448d6de4b16b02516f52b551b2d",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"线程状态"
],
"keywords_forbid": []
}
},
{
......@@ -2447,7 +3249,9 @@
"keywords": [],
"children": [],
"node_id": "java-0f812098999a4df2a9b41955308ba530",
"title": "wait()与notifyAll()"
"title": "wait()与notifyAll()",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2455,7 +3259,9 @@
"keywords": [],
"children": [],
"node_id": "java-abcb15b0ad184d03a5753e33bb8ebdf7",
"title": "notify()与notifyAll()"
"title": "notify()与notifyAll()",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2463,17 +3269,26 @@
"keywords": [],
"children": [],
"node_id": "java-5325268f4ff84234b18b52a40fa15021",
"title": "生产者与消费者"
"title": "生产者与消费者",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"任务间使用管道进行输入输出": {
"keywords": [],
"children": [],
"node_id": "java-b60c4015c9e643c0866fdbd5bf907776"
"node_id": "java-b60c4015c9e643c0866fdbd5bf907776",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"线程之间的协作",
"线程协作"
],
"keywords_forbid": []
}
},
{
......@@ -2486,7 +3301,11 @@
"并行",
"死锁 "
],
"children": []
"children": [],
"keywords_must": [
"死锁"
],
"keywords_forbid": []
}
},
{
......@@ -2504,7 +3323,9 @@
"keywords": [],
"children": [],
"node_id": "java-c19c9015f3254441b359f8c77f2064ea",
"title": "阻塞队列"
"title": "阻塞队列",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2512,7 +3333,9 @@
"keywords": [],
"children": [],
"node_id": "java-69635e4cd3a84037ab6715a53d7664bd",
"title": "映射条目的原子更新"
"title": "映射条目的原子更新",
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2520,44 +3343,63 @@
"keywords": [],
"children": [],
"node_id": "java-8e154a8000944afcb2d9a18da8b43680",
"title": "对并发散列映射的批操作"
"title": "对并发散列映射的批操作",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"并发集视图": {
"keywords": [],
"children": [],
"node_id": "java-7cb205a0b7014e329f429be5f25d64f7"
"node_id": "java-7cb205a0b7014e329f429be5f25d64f7",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"写数组的拷贝": {
"keywords": [],
"children": [],
"node_id": "java-e8873f2f78a64203b681e00536806448"
"node_id": "java-e8873f2f78a64203b681e00536806448",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"并行数组算法": {
"keywords": [],
"children": [],
"node_id": "java-d29e14c52c544690bce9b05c1a669a71"
"node_id": "java-d29e14c52c544690bce9b05c1a669a71",
"keywords_must": [],
"keywords_forbid": []
}
},
{
"较早的线程安全集合": {
"keywords": [],
"children": [],
"node_id": "java-32f3143dddff4cad846b9523d791c7b6"
"node_id": "java-32f3143dddff4cad846b9523d791c7b6",
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [
"线程安全的集合",
"线程安全集合"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2577,7 +3419,11 @@
"流",
"stream"
],
"children": []
"children": [],
"keywords_must": [
"行为抽象"
],
"keywords_forbid": []
}
},
{
......@@ -2590,7 +3436,11 @@
"SAM",
"函数式接口"
],
"children": []
"children": [],
"keywords_must": [
"lambda"
],
"keywords_forbid": []
}
},
{
......@@ -2600,7 +3450,12 @@
"流",
"stream"
],
"children": []
"children": [],
"keywords_must": [
"流",
"stream"
],
"keywords_forbid": []
}
},
{
......@@ -2611,7 +3466,11 @@
"stream",
"collect"
],
"children": []
"children": [],
"keywords_must": [
"收集器"
],
"keywords_forbid": []
}
},
{
......@@ -2622,7 +3481,12 @@
"stream",
"group by"
],
"children": []
"children": [],
"keywords_must": [
"分组",
"group by"
],
"keywords_forbid": []
}
},
{
......@@ -2633,10 +3497,17 @@
"stream",
"partition by"
],
"children": []
"children": [],
"keywords_must": [
"分区",
"partition by"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2651,7 +3522,12 @@
"optional",
"null"
],
"children": []
"children": [],
"keywords_must": [
"optional",
"null"
],
"keywords_forbid": []
}
},
{
......@@ -2661,10 +3537,17 @@
"optional",
"null"
],
"children": []
"children": [],
"keywords_must": [
"optional",
"一致性"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
},
{
......@@ -2681,7 +3564,13 @@
"线程",
"thread"
],
"children": []
"children": [],
"keywords_must": [
"进程",
"线程",
"thread"
],
"keywords_forbid": []
}
},
{
......@@ -2692,15 +3581,27 @@
"异步",
"future"
],
"children": []
"children": [],
"keywords_must": [
"并发",
"异步",
"future"
],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
}
]
],
"keywords_must": [],
"keywords_forbid": []
}
}
\ No newline at end of file
......@@ -2,10 +2,11 @@ import json
import logging
import os
import re
import subprocess
import sys
import uuid
import re
import git
id_set = set()
logger = logging.getLogger(__name__)
......@@ -14,23 +15,24 @@ handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
repo = git.Repo(".")
def user_name():
return repo.config_reader().get_value("user", "name")
_DEFAULT_ENCODING = 'utf-8'
def read_text(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
return f.read()
def user_name(md_file, author_dict):
ret = subprocess.Popen([
"git", "log", md_file
], stdout=subprocess.PIPE)
lines = list(map(lambda l: l.decode(), ret.stdout.readlines()))
author_lines = []
for line in lines:
if line.startswith('Author'):
author_lines.append(line.split(' ')[1])
author_nick_name = author_lines[-1]
return author_dict.get(author_nick_name, "")
def load_json(p):
return json.loads(read_text(p))
with open(p, 'r') as f:
return json.loads(f.read())
def dump_json(p, j, exist_ok=False, override=False):
......@@ -84,7 +86,18 @@ def check_export(base, cfg):
class TreeWalker:
def __init__(self, root, tree_name, title=None, log=None):
def __init__(
self, root,
tree_name,
title=None,
log=None,
authors=None,
enable_notebook=None,
ignore_keywords=False
):
self.ignore_keywords = ignore_keywords
self.authors = authors if authors else {}
self.enable_notebook = enable_notebook
self.name = tree_name
self.root = root
self.title = tree_name if title is None else title
......@@ -96,7 +109,9 @@ class TreeWalker:
root_node = {
"node_id": root["node_id"],
"keywords": root["keywords"],
"children": []
"children": [],
"keywords_must": root["keywords_must"],
"keywords_forbid": root["keywords_forbid"]
}
self.tree[root["tree_name"]] = root_node
self.load_levels(root_node)
......@@ -109,11 +124,13 @@ class TreeWalker:
for index, chapter in enumerate(level_node["children"]):
chapter_title = list(chapter.keys())[0]
chapter_node = list(chapter.values())[0]
chapter_path = os.path.join(level_path, f"{index + 1}.{chapter_title}")
chapter_path = os.path.join(
level_path, f"{index + 1}.{chapter_title}")
self.load_sections(chapter_path, chapter_node)
for index, section_node in enumerate(chapter_node["children"]):
section_title = list(section_node.keys())[0]
full_path = os.path.join(chapter_path, f"{index + 1}.{section_title}")
full_path = os.path.join(
chapter_path, f"{index + 1}.{section_title}")
if os.path.isdir(full_path):
self.check_section_keywords(full_path)
self.ensure_exercises(full_path)
......@@ -149,6 +166,8 @@ class TreeWalker:
"node_id": config["node_id"],
"keywords": config["keywords"],
"children": [],
"keywords_must": config["keywords_must"],
"keywords_forbid": config["keywords_forbid"]
}
}
......@@ -200,6 +219,8 @@ class TreeWalker:
"tree_name": self.name,
"keywords": [],
"node_id": self.gen_node_id(),
"keywords_must": [],
"keywords_forbid": []
}
dump_json(config_path, config, exist_ok=True, override=True)
else:
......@@ -229,7 +250,9 @@ class TreeWalker:
if not os.path.exists(config_path):
config = {
"node_id": self.gen_node_id(),
"keywords": []
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
dump_json(config_path, config, exist_ok=True, override=True)
else:
......@@ -295,6 +318,8 @@ class TreeWalker:
"node_id": config["node_id"],
"keywords": config["keywords"],
"children": [],
"keywords_must": config["keywords_must"],
"keywords_forbid": config["keywords_forbid"]
}
}
return num, result
......@@ -306,7 +331,9 @@ class TreeWalker:
name: {
"node_id": config["node_id"],
"keywords": config["keywords"],
"children": config.get("children", [])
"children": config.get("children", []),
"keywords_must": config["keywords_must"],
"keywords_forbid": config["keywords_forbid"]
}
}
# if "children" in config:
......@@ -323,7 +350,8 @@ class TreeWalker:
continue
mfile = base + ".json"
meta_path = os.path.join(section_path, mfile)
self.ensure_exercises_meta(meta_path, source)
md_file = os.path.join(section_path, e)
self.ensure_exercises_meta(meta_path, source, md_file)
export = config.get("export", [])
if mfile not in export and self.name != "algorithm":
export.append(mfile)
......@@ -331,23 +359,25 @@ class TreeWalker:
config["export"] = export
if flag:
dump_json(os.path.join(section_path, "config.json"), config, True, True)
dump_json(os.path.join(section_path, "config.json"),
config, True, True)
for e in config.get("export", []):
full_name = os.path.join(section_path, e)
exercise = load_json(full_name)
if not exercise.get("exercise_id") or exercise.get("exercise_id") in id_set:
if "exercise_id" not in exercise or exercise.get("exercise_id") in id_set:
eid = uuid.uuid4().hex
exercise["exercise_id"] = eid
dump_json(full_name, exercise, True, True)
else:
id_set.add(exercise["exercise_id"])
def ensure_exercises_meta(self, meta_path, source):
def ensure_exercises_meta(self, meta_path, source, md_file):
_, mfile = os.path.split(meta_path)
meta = None
if os.path.exists(meta_path):
content = read_text(meta_path)
with open(meta_path) as f:
content = f.read()
if content:
meta = json.loads(content)
if "exercise_id" not in meta:
......@@ -357,13 +387,14 @@ class TreeWalker:
if "source" not in meta:
meta["source"] = source
if "author" not in meta:
meta["author"] = user_name()
meta["author"] = user_name(md_file, self.authors)
if "type" not in meta:
meta["type"] = "code_options"
if meta is None:
meta = {
"type": "code_options",
"author": user_name(),
"author": user_name(md_file, self.authors),
"source": source,
"notebook_enable": self.default_notebook(),
"exercise_id": uuid.uuid4().hex
......@@ -371,12 +402,16 @@ class TreeWalker:
dump_json(meta_path, meta, True, True)
def default_notebook(self):
if self.enable_notebook is not None:
return self.enable_notebook
if self.name in ["python", "java", "c"]:
return True
else:
return False
def check_section_keywords(self, full_path):
if self.ignore_keywords:
return
config = self.ensure_section_config(full_path)
if not config.get("keywords", []):
self.logger.error(f"节点 [{full_path}] 的关键字为空,请修改配置文件写入关键字")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册