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

add keywords_must and keywords_forbid

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