diff --git a/docs/en/_meta.json b/docs/en/_meta.json index ffbd7b0..9f7c8f1 100644 --- a/docs/en/_meta.json +++ b/docs/en/_meta.json @@ -1,9 +1,4 @@ [ - { - "text": "technical documentation", - "link": "../zh/technical/1-Overview", - "activeMatch": "../zh/technical/1-Overview" - }, { "text": "Announcement", "link": "/announcement/", diff --git a/docs/en/index.md b/docs/en/index.md index ef7104f..2605faa 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -21,7 +21,7 @@ hero: features: - title: Technical Docs details: The technical documentation of the community is the centralized knowledge base of the community, providing members with a complete technical guide from development basics to project practice. Accumulate technical assets through systematic documentation to enhance team collaboration and project research and development efficiency. - link: https://tech-docusaurus.pages.dev + link: https://docs.tsguas.cn/ icon: 📦️ - title: WeChat official account diff --git a/docs/public/technical/AI/AI.txt b/docs/public/technical/AI/AI.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/public/technical/AI/AI_vscode_TableGen_1.png b/docs/public/technical/AI/AI_vscode_TableGen_1.png deleted file mode 100644 index 5942cbe..0000000 Binary files a/docs/public/technical/AI/AI_vscode_TableGen_1.png and /dev/null differ diff --git a/docs/public/technical/AI/AI_vscode_TableGen_2.png b/docs/public/technical/AI/AI_vscode_TableGen_2.png deleted file mode 100644 index 31e6548..0000000 Binary files a/docs/public/technical/AI/AI_vscode_TableGen_2.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-1.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-1.png deleted file mode 100644 index 8e21abf..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-1.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-10.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-10.png deleted file mode 100644 index 8dec61c..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-10.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-11.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-11.png deleted file mode 100644 index 0c797bd..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-11.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-12.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-12.png deleted file mode 100644 index d955398..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-12.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-2.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-2.png deleted file mode 100644 index 3548de6..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-2.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-3.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-3.png deleted file mode 100644 index 1f0c237..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-3.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-4.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-4.png deleted file mode 100644 index a96bd33..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-4.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-5.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-5.png deleted file mode 100644 index d324e54..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-5.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-6.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-6.png deleted file mode 100644 index 52d6ce2..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-6.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-7.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-7.png deleted file mode 100644 index e50505d..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-7.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-8.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-8.png deleted file mode 100644 index 0022f6d..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-8.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-9.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-9.png deleted file mode 100644 index 600286a..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-9.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image.png deleted file mode 100644 index 705dbb4..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Mac/image.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_01.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_01.png deleted file mode 100644 index 7a6e4b6..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_01.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_02.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_02.png deleted file mode 100644 index 6c03169..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_02.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_03.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_03.png deleted file mode 100644 index dec3c2b..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_03.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_04.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_04.png deleted file mode 100644 index b03529c..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_04.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_05.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_05.png deleted file mode 100644 index b03529c..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_05.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_06.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_06.png deleted file mode 100644 index 75d59a1..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_06.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_07.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_07.png deleted file mode 100644 index 5fbf293..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_07.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_08.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_08.png deleted file mode 100644 index 16793e9..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_08.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_09.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_09.png deleted file mode 100644 index ea67448..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_09.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_10.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_10.png deleted file mode 100644 index 4b28672..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_10.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_11.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_11.png deleted file mode 100644 index 208b8db..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_11.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_12.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_12.png deleted file mode 100644 index 917ceee..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_12.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_13.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_13.png deleted file mode 100644 index 6f977d7..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_13.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_14.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_14.png deleted file mode 100644 index 732cd92..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_14.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_15.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_15.png deleted file mode 100644 index 7b7e918..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_15.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_16.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_16.png deleted file mode 100644 index 2b4180d..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_16.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_17.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_17.png deleted file mode 100644 index be1cf34..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_17.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_18.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_18.png deleted file mode 100644 index a29f5d8..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_18.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_19.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_19.png deleted file mode 100644 index 3146633..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_19.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_20.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_20.png deleted file mode 100644 index 11ddd4f..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_20.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_21.png b/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_21.png deleted file mode 100644 index 9556c43..0000000 Binary files a/docs/public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_21.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda/image-1.png b/docs/public/technical/Back-end/C++/Conda/image-1.png deleted file mode 100644 index e95614d..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda/image-1.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda/image.png b/docs/public/technical/Back-end/C++/Conda/image.png deleted file mode 100644 index 54622ed..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda/image.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image-1.png b/docs/public/technical/Back-end/C++/Conda_Environment/image-1.png deleted file mode 100644 index c5b489b..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image-1.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image-2.png b/docs/public/technical/Back-end/C++/Conda_Environment/image-2.png deleted file mode 100644 index 45ebf71..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image-2.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image-3.png b/docs/public/technical/Back-end/C++/Conda_Environment/image-3.png deleted file mode 100644 index 35071f0..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image-3.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image-4.png b/docs/public/technical/Back-end/C++/Conda_Environment/image-4.png deleted file mode 100644 index bdef94e..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image-4.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image-5.png b/docs/public/technical/Back-end/C++/Conda_Environment/image-5.png deleted file mode 100644 index 72b4863..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image-5.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/Conda_Environment/image.png b/docs/public/technical/Back-end/C++/Conda_Environment/image.png deleted file mode 100644 index 23fe172..0000000 Binary files a/docs/public/technical/Back-end/C++/Conda_Environment/image.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/ffmpeg_develop/image-2.png b/docs/public/technical/Back-end/C++/ffmpeg_develop/image-2.png deleted file mode 100644 index b65357f..0000000 Binary files a/docs/public/technical/Back-end/C++/ffmpeg_develop/image-2.png and /dev/null differ diff --git a/docs/public/technical/Back-end/C++/ffmpeg_develop/image-3.png b/docs/public/technical/Back-end/C++/ffmpeg_develop/image-3.png deleted file mode 100644 index 3d4d813..0000000 Binary files a/docs/public/technical/Back-end/C++/ffmpeg_develop/image-3.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-01.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-01.png deleted file mode 100644 index e25a277..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-01.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-02.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-02.png deleted file mode 100644 index e85fcc0..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-02.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-03.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-03.png deleted file mode 100644 index d73fb98..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-03.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-04.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-04.png deleted file mode 100644 index 9cafb7b..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-04.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-05.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-05.png deleted file mode 100644 index c5cb3a3..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-05.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-06.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-06.png deleted file mode 100644 index 6b203d4..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-06.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-07.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-07.png deleted file mode 100644 index 2ea8d18..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-07.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-08.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-08.png deleted file mode 100644 index d7c3aa0..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-08.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-09.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-09.png deleted file mode 100644 index 6b355c1..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-09.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-10.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-10.png deleted file mode 100644 index 741f2a3..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-10.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-11.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-11.png deleted file mode 100644 index e74fc70..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-11.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-12.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-12.png deleted file mode 100644 index 5920f09..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-12.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-13.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-13.png deleted file mode 100644 index 5133574..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-13.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-14.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-14.png deleted file mode 100644 index 89c63dc..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-14.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-15.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-15.png deleted file mode 100644 index e1005ac..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-15.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-16.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-16.png deleted file mode 100644 index 52e7e5f..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-16.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-17.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-17.png deleted file mode 100644 index fcd4071..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-17.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-18.png b/docs/public/technical/Back-end/Java/MysqlMarkdown/image-18.png deleted file mode 100644 index 1669504..0000000 Binary files a/docs/public/technical/Back-end/Java/MysqlMarkdown/image-18.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-01.png b/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-01.png deleted file mode 100644 index 7dfd5e8..0000000 Binary files a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-01.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-02.png b/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-02.png deleted file mode 100644 index ddfedb4..0000000 Binary files a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-02.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-03.png b/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-03.png deleted file mode 100644 index fc93208..0000000 Binary files a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-03.png and /dev/null differ diff --git a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-04.png b/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-04.png deleted file mode 100644 index f811134..0000000 Binary files a/docs/public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-04.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Emphasis-bold.png b/docs/public/technical/Basic-knowledge/markdown/Emphasis-bold.png deleted file mode 100644 index 6fa2ee5..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Emphasis-bold.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Example1.png b/docs/public/technical/Basic-knowledge/markdown/Example1.png deleted file mode 100644 index 5d88f84..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Example1.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Example2.png b/docs/public/technical/Basic-knowledge/markdown/Example2.png deleted file mode 100644 index 163e153..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Example2.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Flow-chart.png b/docs/public/technical/Basic-knowledge/markdown/Flow-chart.png deleted file mode 100644 index 0fcb52c..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Flow-chart.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Gantt-chart.png b/docs/public/technical/Basic-knowledge/markdown/Gantt-chart.png deleted file mode 100644 index ff642a6..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Gantt-chart.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Line-feed.png b/docs/public/technical/Basic-knowledge/markdown/Line-feed.png deleted file mode 100644 index eaa0928..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Line-feed.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Linux.png b/docs/public/technical/Basic-knowledge/markdown/Linux.png deleted file mode 100644 index 1228337..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Linux.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/List-Ordered.png b/docs/public/technical/Basic-knowledge/markdown/List-Ordered.png deleted file mode 100644 index cd2c0ba..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/List-Ordered.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/List-unordered.png b/docs/public/technical/Basic-knowledge/markdown/List-unordered.png deleted file mode 100644 index 8cd86b9..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/List-unordered.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Logic-diagram.png b/docs/public/technical/Basic-knowledge/markdown/Logic-diagram.png deleted file mode 100644 index 72ea5f3..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Logic-diagram.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Paragraphs.png b/docs/public/technical/Basic-knowledge/markdown/Paragraphs.png deleted file mode 100644 index 0373ec5..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Paragraphs.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Segmentation.png b/docs/public/technical/Basic-knowledge/markdown/Segmentation.png deleted file mode 100644 index b0bd059..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Segmentation.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Sequence-diagram.png b/docs/public/technical/Basic-knowledge/markdown/Sequence-diagram.png deleted file mode 100644 index 31ab893..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Sequence-diagram.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Tag.png b/docs/public/technical/Basic-knowledge/markdown/Tag.png deleted file mode 100644 index 3dc9451..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Tag.png and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu1-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu1-oc-output.jpg deleted file mode 100644 index 646fb4a..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu1-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu2-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu2-oc-output.jpg deleted file mode 100644 index 1f3f5e4..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu2-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu3-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu3-oc-output.jpg deleted file mode 100644 index df57845..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu3-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu4-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu4-oc-output.jpg deleted file mode 100644 index d6aa9ed..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu4-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu5-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu5-oc-output.jpg deleted file mode 100644 index 37aec57..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu5-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/Ubuntu6-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/Ubuntu6-oc-output.jpg deleted file mode 100644 index ccc14d3..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/Ubuntu6-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM1-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM1-oc-output.jpg deleted file mode 100644 index 3f995c0..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM1-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM2-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM2-oc-output.jpg deleted file mode 100644 index 3d2977a..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM2-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM3-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM3-oc-output.jpg deleted file mode 100644 index b9f960e..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM3-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM4-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM4-oc-output.jpg deleted file mode 100644 index 991fa1d..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM4-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM5-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM5-oc-output.jpg deleted file mode 100644 index efbdb86..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM5-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM6-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM6-oc-output.jpg deleted file mode 100644 index dee377f..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM6-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM7-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM7-oc-output.jpg deleted file mode 100644 index a80f85e..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM7-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM8-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM8-oc-output.jpg deleted file mode 100644 index c64535d..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM8-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Basic-knowledge/markdown/VM9-oc-output.jpg b/docs/public/technical/Basic-knowledge/markdown/VM9-oc-output.jpg deleted file mode 100644 index cf724bd..0000000 Binary files a/docs/public/technical/Basic-knowledge/markdown/VM9-oc-output.jpg and /dev/null differ diff --git a/docs/public/technical/Front-end/Front-end.txt b/docs/public/technical/Front-end/Front-end.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-1.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-1.png deleted file mode 100644 index ca6047d..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-1.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-10.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-10.png deleted file mode 100644 index 2911b9d..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-10.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-11.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-11.png deleted file mode 100644 index 0b585a6..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-11.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-12.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-12.png deleted file mode 100644 index 50caaca..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-12.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-13.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-13.png deleted file mode 100644 index 965bfdc..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-13.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-14.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-14.png deleted file mode 100644 index c5ab31e..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-14.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-15.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-15.png deleted file mode 100644 index e15942f..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-15.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-16.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-16.png deleted file mode 100644 index 8080a5a..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-16.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-17.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-17.png deleted file mode 100644 index 4fc8e2e..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-17.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-18.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-18.png deleted file mode 100644 index fdb6580..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-18.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-19.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-19.png deleted file mode 100644 index f25f7c0..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-19.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-2.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-2.png deleted file mode 100644 index 84b2524..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-2.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-20.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-20.png deleted file mode 100644 index db4dd5e..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-20.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-21.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-21.png deleted file mode 100644 index 6032552..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-21.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-22.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-22.png deleted file mode 100644 index 7c38801..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-22.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-23.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-23.png deleted file mode 100644 index c1bc983..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-23.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-24.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-24.png deleted file mode 100644 index 3022e35..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-24.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-25.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-25.png deleted file mode 100644 index ccc6e01..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-25.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-26.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-26.png deleted file mode 100644 index 11f1341..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-26.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-27.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-27.png deleted file mode 100644 index 1dd5651..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-27.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-3.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-3.png deleted file mode 100644 index 36e4487..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-3.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-4.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-4.png deleted file mode 100644 index 59ab166..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-4.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-5.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-5.png deleted file mode 100644 index 59ab166..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-5.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-6.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-6.png deleted file mode 100644 index 59ab166..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-6.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-7.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-7.png deleted file mode 100644 index 758fab1..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-7.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-8.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-8.png deleted file mode 100644 index ce5f8af..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-8.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-9.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-9.png deleted file mode 100644 index 0a1fa70..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image-9.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image.png b/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image.png deleted file mode 100644 index f2d4a6c..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/CentOS-Stream-9-Docker/image.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image1.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image1.png deleted file mode 100644 index 2405c9c..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image1.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image10.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image10.png deleted file mode 100644 index ebd506a..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image10.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image11.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image11.png deleted file mode 100644 index 6369bfe..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image11.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image12.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image12.png deleted file mode 100644 index 281e4a2..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image12.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image13.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image13.png deleted file mode 100644 index a281208..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image13.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image2.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image2.png deleted file mode 100644 index 0923b20..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image2.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image3.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image3.png deleted file mode 100644 index f75509e..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image3.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image4.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image4.png deleted file mode 100644 index 0e43542..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image4.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image5.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image5.png deleted file mode 100644 index 273bf30..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image5.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image6.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image6.png deleted file mode 100644 index 5cc416a..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image6.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image7.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image7.png deleted file mode 100644 index cdd8211..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image7.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image8.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image8.png deleted file mode 100644 index 57f9e38..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image8.png and /dev/null differ diff --git a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image9.png b/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image9.png deleted file mode 100644 index 516e1ca..0000000 Binary files a/docs/public/technical/Operation-and-Maintenance/uploaded-to-cloud-by-HBuilder/image9.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img1.png b/docs/public/technical/Other/How_to_play_Minecraft/img1.png deleted file mode 100644 index 2752605..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img1.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img2.png b/docs/public/technical/Other/How_to_play_Minecraft/img2.png deleted file mode 100644 index 3d3ffb8..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img2.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img3.png b/docs/public/technical/Other/How_to_play_Minecraft/img3.png deleted file mode 100644 index 8a04157..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img3.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img4.png b/docs/public/technical/Other/How_to_play_Minecraft/img4.png deleted file mode 100644 index 2975013..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img4.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img5.png b/docs/public/technical/Other/How_to_play_Minecraft/img5.png deleted file mode 100644 index a833753..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img5.png and /dev/null differ diff --git a/docs/public/technical/Other/How_to_play_Minecraft/img6.png b/docs/public/technical/Other/How_to_play_Minecraft/img6.png deleted file mode 100644 index fd787cf..0000000 Binary files a/docs/public/technical/Other/How_to_play_Minecraft/img6.png and /dev/null differ diff --git a/docs/public/technical/Other/oh_my_zsh/image.png b/docs/public/technical/Other/oh_my_zsh/image.png deleted file mode 100644 index 9972813..0000000 Binary files a/docs/public/technical/Other/oh_my_zsh/image.png and /dev/null differ diff --git a/docs/zh/_meta.json b/docs/zh/_meta.json index cbce790..2dc5ff9 100644 --- a/docs/zh/_meta.json +++ b/docs/zh/_meta.json @@ -1,9 +1,4 @@ [ - { - "text": "技术文档", - "link": "../zh/technical/1-Overview", - "activeMatch": "../zh/technical/1-Overview" - }, { "text": "社团公告", "link": "/announcement/", diff --git a/docs/zh/index.md b/docs/zh/index.md index 9121974..f9fc26c 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -22,7 +22,7 @@ hero: features: - title: 技术文档 details: 社团技术文档是社团的集中化知识库,为成员提供从开发入门到项目实践的完整技术指南。通过系统化的文档沉淀技术资产,提升团队协作与项目研发效率。 - link: https://tech-docusaurus.pages.dev + link: https://docs.tsguas.cn/ icon: 📦️ - title: 社团微信公众号 diff --git a/docs/zh/technical/1-Overview.md b/docs/zh/technical/1-Overview.md deleted file mode 100644 index 6200fbd..0000000 --- a/docs/zh/technical/1-Overview.md +++ /dev/null @@ -1,71 +0,0 @@ -# 技术文档 - -## 欢迎 - -📢 欢迎来到我们的技术文档目录!这里包含了关于 Linux 运维、音视频开发、Docker 环境配置等方面的详细技术文档,帮助你更好地理解、使用和贡献我们的技术资源。 - -## 目录 - -- [技术文档](#技术文档) - - [欢迎](#欢迎) - - [目录](#目录) - - [Linux 运维](#linux-运维) - - [音视频开发](#音视频开发) - - [Docker 环境配置](#docker-环境配置) - - [数据库](#数据库) - - [环境配置](#环境配置) - - [基础知识](#基础知识) - - [其他主题](#其他主题) - - [贡献指南](#贡献指南) - -## Linux 运维 - -- [基本的 Linux 命令行操作](./Basic-knowlegde/Linux_command.md) -- [conda环境名称无法显示的解决方案](./Back-end/C/Conda.md) -- [Linux_grub启动](./Operation-and-Maintenance/Linux_grub.md) -- [smb文件传输协议的使用](./Operation-and-Maintenance/linux_smb.md) -- [三种shell的介绍](./Operation-and-Maintenance/shell.md) -- [用户权限问题](./Operation-and-Maintenance/user_rights.md) -- [ssh连接超时问题](./Operation-and-Maintenance/ssh_connect.md) -- [root远程登录](./Operation-and-Maintenance/Linux_ssh_root.md) - -## 音视频开发 - -- [音频处理入门指南](https://gitee.com/TSGU-OSC/ffmpeg_learn) -- [视频编码和解码原理](https://gitee.com/TSGU-OSC/ffmpeg_learn/tree/master/command/codec) - -## Docker 环境配置 - -- [使用 Docker 部署和管理应用](./Operation-and-Maintenance/CentOS-Stream-9-Docker.md) - -## 数据库 - -- [Mysql环境配置](./Back-end/Java/MysqlMarkdown.md) - - - -- [Minio环境配置](./Back-end/Java/MinioMarkdown.md) - -## 环境配置 - -- [vs code C开发环境搭建](./Back-end/C/C_Environment_Configuration/1-README.md) - -- [Conda及python的环境配置](./Back-end/C/Conda_Environment.md) - -- [Node.js环境配置](./Front-end/nodeJsMarkdown.md) - -## 基础知识 - -- [总览](./Basic-knowlegde/1-Overview.md) - -## 其他主题 - -- [MC服务器搭建](./Operation-and-Maintenance/mc_server.md) -- [Stable Diffusion本地Docker快速部署](./AI/Stable_Diffusion.md) - -## 贡献指南 - -🌟 如果你有兴趣贡献文档或发现了错误,请参考我们的 [贡献指南](./2-Contributing.md)。 - - ---- \ No newline at end of file diff --git a/docs/zh/technical/2-Contributing.md b/docs/zh/technical/2-Contributing.md deleted file mode 100644 index 0e47dac..0000000 --- a/docs/zh/technical/2-Contributing.md +++ /dev/null @@ -1,60 +0,0 @@ -# 贡献指南 - -欢迎您对我们的开源技术文档仓库做出贡献!我们非常感谢您的帮助,以下是一些建议和指导,以确保贡献的顺利进行。 - -## 贡献方式 - -您可以通过以下方式贡献: - -1. **报告问题**:发现了文档中的错误或有改进的地方?请创建一个 Issue 来报告问题。 - -2. **提出改进建议**:如果您有关于文档结构、内容或样式的建议,请通过 Issue 提出您的想法。 - -3. **提交文档**:如果您有自己的技术文档并希望分享,欢迎提交 Pull Request。 - -## 报告问题和提出建议 - -1. 在我们的 [Issues 页面](https://gitee.com/TSGU-OSC/OSC_main/issues) 创建一个新的 Issue。 - -2. 选择相应的标签,例如“bug”或“enhancement”。 - -3. 提供清晰而详细的说明,包括问题的复现步骤(如果是报告问题)或您的建议。 - -## 提交文档 - -1. Fork 这个仓库并在本地克隆它: - - ```bash - git clone https://github.com/your-username/your-repo-name.git - ``` -2. 在此目录下新建目录,以内容命名 - ```bash - cd ./blog - mkdir your_directory - ``` -3. 进入您刚刚创建的目录,创建并编辑您的markdown文档 - ```bash - cd ./your_directory - touch README.md - vim README.md - ``` -4. 提交您的修改 - ```bash - git add . - git commit -m "Add/modify your-documentation-file.md" - ``` -5. 推送到您的Fork - ```bash - git push origin feature/your-feature - ``` -6. 创建一个 Pull Request(PR): - -- 到您的 Fork 页面,点击 "New Pull Request"。 -- 选择要将您的修改合并到的目标分支。 -- 提供清晰而简洁的 PR 描述。 -7. 我们将审查您的 PR,并在需要时提出建议或请求修改。 - -## 注意事项 -- 请确保您的文档使用正确的 Markdown 语法,并注意格式的一致性。 -- 如果您贡献的是新的主题,请在目录中添加相应的链接。 -- 我们鼓励包含适当的图片、图表等以提高文档的可读性。如有图片请将图片放入image目录下。 \ No newline at end of file diff --git a/docs/zh/technical/AI/Buddy-MLIR_introduce.md b/docs/zh/technical/AI/Buddy-MLIR_introduce.md deleted file mode 100644 index b8760a6..0000000 --- a/docs/zh/technical/AI/Buddy-MLIR_introduce.md +++ /dev/null @@ -1,63 +0,0 @@ -# Buddy-MLIR 技术解析与应用研究指南 - -Buddy-MLIR 是一个旨在简化基于 MLIR(Multi-Level Intermediate Representation)构建人工智能(AI)编译器和工具开发的开源项目。它通过提供更易于上手的工具、模块化组件和清晰的端到端流程,作为开发者的“伙伴”,帮助他们克服原生 MLIR 生态中复杂的学习障碍。 - - -## 一、 Buddy-MLIR 的核心优点(为什么选择它?) - -Buddy-MLIR 的价值在于它在继承 MLIR 强大功能的同时,极大地提升了开发者的效率和体验。 - -1. **极大地降低了 MLIR 的学习曲线** - - 清晰的端到端示例:提供从模型导入到代码生成的完整、可运行的示例。这些示例是初学者快速理解 MLIR 编译器工作流的最佳实践。 - - 高层抽象的工具链:封装了原生 MLIR 的复杂性,提供更简洁的 API 和工具链,使开发者无需成为 MLIR 专家也能快速构建功能。 - -2. **增强了模块化和可复用性** - - 解耦的组件:架构设计高度模块化。其运行时(Runtime)、驱动程序和特定的优化 Pass 都是独立的组件,方便开发者抽取并集成到其他 AI 编译器或工具链中。 - - 易于定制的后端:开发者可以基于 Buddy-MLIR 的基础架构,轻松地添加或修改针对特定硬件(如自定义加速器、FPGA 等)的后端支持。 - -3. **提供完整的 AI 编译流程和运行时支持** - - 全流程覆盖:区别于只关注某个转换阶段的项目,Buddy-MLIR 展示了一个从主流 AI 框架模型(如 ONNX/TensorFlow)输入,经过多级优化,直到生成可执行目标代码的完整、可部署的流程。 - - 集成的运行时:包含一个轻量级、可定制的 C++ 运行时库,负责关键的部署任务,例如内存管理、权重加载和函数调用。 - -4. **聚焦于 AI 领域的性能优化** - AI 友好型 Pass:提供针对 AI 模型性能的关键优化 Pass,包括: - - 算子融合 (Operator Fusion):减少内存访问和内核启动开销。 - - 内存布局优化:提高数据局部性(Data Locality)。 - - 高性能循环转换:利用循环分块、循环展开等技术提升效率。 - - -## 二、 模型优化和编译研究的使用指南 - -要开始使用 Buddy-MLIR 进行模型优化和编译研究,建议按以下三个阶段循序渐进地深入。 - - -### 阶段一:环境搭建与前端(模型导入) - -| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究点 | -|------|------|-------------------------|------------| -| 1. 环境搭建 | 编译并运行 Buddy-MLIR 项目。 | 遵循项目文档,编译 C++ 核心库和 Python 绑定。 | 熟悉 MLIR 编译器依赖和构建流程(CMake)。 | -| 2. 模型导入 | 将外部模型转换为 MLIR IR。 | 使用 Buddy-MLIR 提供的工具链或示例,将 ONNX/TensorFlow 模型转换为高层 MLIR 方言(如 TOSA 或 MHLO)。 | 研究算子映射的正确性,确保前端转换过程中的语义保真度。 | -| 3. 基础运行 | 验证 IR 转换的正确性。 | 运行未经优化的模型,验证其在目标硬件上的功能正确性。 | 理解 Buddy-MLIR 的**运行时(Runtime)** 机制及其在数据管理中的作用。 | - - -### 阶段二:中层优化与转换(性能核心) - -这是利用 Buddy-MLIR 进行性能优化的核心研究阶段。 - -| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 | -|------|------|-------------------------|--------------| -| 1. 算子融合 (Fusion) | 减少开销,提升性能。 | 观察和修改 Buddy-MLIR 中针对 Linalg 或特定 AI 算子设计的融合 Pass。 | 设计更高效的融合策略,以适应不同的模型结构(如 RNN、Transformer)和目标硬件特性。 | -| 2. 内存布局优化 | 提高数据局部性。 | 实验改变张量内存布局(如 NCHW $\rightarrow$ NHWC)的 Pass。 | 研究最优内存布局的自动选择机制,以及如何在多级缓存(L1/L2)的硬件上实现最佳的缓存命中率。 | -| 3. 高层转换 | 将 AI 语义降低到 Linalg 方言。 | 学习 TOSA/MHLO 等高层方言如何通过 Pass 转换到 linalg 方言。 | 专注于图优化技术,如常量折叠和图结构重写,以简化后续的编译工作。 | -| 4. 新优化 Pass 开发 | 实现自己的创新优化想法。 | 以 Buddy-MLIR 的现有 Pass 为模板,学习利用 MLIR 的 PassManager 和 PatternRewriter 来开发新的 Pass。 | 探索基于 MLIR 的硬件无关优化和形状推导。 | - - -### 阶段三:降低与代码生成(硬件适配) - -此阶段重点是将优化后的 IR 转换为目标硬件可执行的代码。 - -| 步骤 | 目标 | Buddy-MLIR 中的实践方法 | 关键研究方向 | -|------|------|-------------------------|--------------| -| 1. 逐步降低 | 将 Linalg 降级到 Affine/SCF/Vector。 | 观察 Pass 流水线如何将 Linalg 算子逐步转换为循环 (affine/scf) 和 SIMD 指令 (vector)。 | 研究循环转换(如分块、剥离、展开)的策略及其对性能的影响,并探索自动代码生成工具(如 mlir-opt)的使用。 | -| 2. 向量化与并行化 | 利用硬件的 SIMD/多核能力。 | 检查 IR 如何降低到 Vector 方言,以及如何利用 GPU 或 LLVM 方言进行并行化。 | 专注于自动向量化的挑战,设计更智能的 Pass 来识别和转换适合并行执行的模式。 | -| 3. 新硬件后端集成 | 适配自定义或新的硬件架构。 | 在 Buddy-MLIR 的 JIT/AOT 流程中,扩展代码生成后端,以支持目标硬件所需的指令集或运行时 API 调用。 | 研究如何为新的**特定领域架构(DSA)** 定制 MLIR 方言和降低策略,实现高效的编译。 |s \ No newline at end of file diff --git a/docs/zh/technical/AI/How_to_configure_TableGen_and_MLIR_in_VSCode.md b/docs/zh/technical/AI/How_to_configure_TableGen_and_MLIR_in_VSCode.md deleted file mode 100644 index 3166c03..0000000 --- a/docs/zh/technical/AI/How_to_configure_TableGen_and_MLIR_in_VSCode.md +++ /dev/null @@ -1,13 +0,0 @@ -# 在vscode中如何配置TableGen and MLIR - -## 第一步: -如图所示,在vscode中寻找tablegen相关插件 -![Alt text](../../../public/technical/AI/AI_vscode_TableGen_1.png) -下载图中用红框圈住的插件后进入`ctrl+,`快捷键进入设置界面,输入`tablegen-lsp.includePaths` -## 第二步: -![Alt text](../../../public/technical/AI/AI_vscode_TableGen_2.png) -如图所示,初次进入这里面应该是空白的,我们点击添加项,按照图中的路径找到你的llvm中`build/mlir/llvm`中的include把绝对路径粘贴上去\ -⚠️请注意,如果llvm项目是你所开发项目的依赖,那么请在`Include Path`中添加你项目中`include`的路径,以确保它能够找到你的`.td等文件` -# 第三步: -最后一步按 `Ctrl+Shift+P` 运行 Developer: Reload Window,这样就能将你的配置保存起来了。你的tablegen就可以进行定义跳转等功能了 - diff --git a/docs/zh/technical/AI/How_to_run_TVM.md b/docs/zh/technical/AI/How_to_run_TVM.md deleted file mode 100644 index b213075..0000000 --- a/docs/zh/technical/AI/How_to_run_TVM.md +++ /dev/null @@ -1,486 +0,0 @@ -# TVM快速使用指南 - -## 1. 相关样例 -**笔者在本文中以sigmoid算子为例,不过优化效果并不明显,后续有待寻找问题所在** -``` -import tvm -from tvm import te -from tvm import meta_schedule as ms -from tvm.meta_schedule.database import JSONDatabase -import multiprocessing -import numpy as np -import traceback -import os - -# ================================================================ -# 1. 定义计算 -# ================================================================ -def sigmoid(M, N, dtype="float32"): - """定义 Sigmoid 计算""" - A = te.placeholder((M, N), name="A", dtype=dtype) - C = te.compute( - (M, N), - lambda i, j: 1 / (1 + tvm.tir.exp(-A[i, j])), - name="C" - ) - return te.create_prim_func([A, C]) - - -# ================================================================ -# 2. 调优并构建模块 -# ================================================================ -def tune_and_build_sigmoid(M, N, dtype="float32", target=None, work_dir="./tune_sigmoid"): - if target is None: - num_cores = multiprocessing.cpu_count() - target = f"llvm -num-cores={num_cores}" - - func = sigmoid(M, N, dtype) - - try: - print("🚀 开始自动调优...") - result = ms.tune_tir( - mod=func, - target=target, - work_dir=work_dir, - max_trials_global=100, - num_trials_per_iter=10, - ) - - print("调优返回类型:", type(result)) - print("repr:", repr(result)[:200]) - - # ================================================================ - # ✅ 如果返回 JSONDatabase,从数据库中提取最佳 schedule - # ================================================================ - if isinstance(result, JSONDatabase): - print("📂 检测到 JSONDatabase,尝试从中加载最佳调度...") - - # 从数据库中获取所有调优记录 - records = list(result.get_all_tuning_records()) - if not records: - raise RuntimeError("数据库为空,未找到任何调优记录") - - # 取第一个调优记录的 workload(这里只有一个算子) - workload = records[0].workload - - # 获取该 workload 的最优调优记录 - try: - best_tuning_record = result.get_top_k(workload, top_k=1)[0] - except TypeError: - # 如果接口变动,尝试旧参数名 - best_tuning_record = result.get_top_k(workload, k=1)[0] - print("✅ 已找到最优调度记录,准备提取调度...") - - # TVM 0.23.dev0 的方式:通过 as_measure_candidate() 取出 schedule - candidate = best_tuning_record.as_measure_candidate() - sch = candidate.sch - - print("✅ 获取调度成功,开始构建模块...") - mod = tvm.build(sch.mod, target=target) - print("✅ 使用最优调度构建成功!") - return result, mod, None - - # ================================================================ - # ✅ 如果返回的是 IRModule(旧版本兼容) - # ================================================================ - elif isinstance(result, tvm.IRModule): - print("✅ 检测到 IRModule,直接构建中...") - mod = tvm.build(result, target=target) - return result, mod, None - - else: - raise RuntimeError(f"未知的调优返回类型: {type(result)}") - - except Exception as e: - print("\n⚠️ 自动调优失败,进入回退模式") - traceback.print_exc() - print("调优目录:", os.path.abspath(work_dir)) - mod = tvm.build(func, target=target) - return None, mod, e - - -# ================================================================ -# 3. 测试函数 -# ================================================================ -def test_sigmoid_module(mod, M, N, target="llvm"): - print("🧪 测试模块功能与性能...") - - a_np = np.random.uniform(-5, 5, size=(M, N)).astype("float32") - c_np = np.zeros_like(a_np) - - dev = tvm.device(target.split()[0], 0) - a_tvm = tvm.runtime.tensor(a_np, device=dev) - c_tvm = tvm.runtime.tensor(c_np, device=dev) - - # 2. 预热运行(排除首次调用 overhead) - mod(a_tvm, c_tvm) - dev.sync() # 确保预热完成 - - # 3. 多次运行取平均(100次) - import time - run_times = 100 - start = time.time() - for _ in range(run_times): - mod(a_tvm, c_tvm) - dev.sync() # 确保所有计算完成 - end = time.time() - - # 4. 计算精准性能 - total_time_us = (end - start) * 1e6 - avg_latency_us = total_time_us / run_times - flop = 3 * M * N # Sigmoid 单元素计算量 - gflops = (flop * run_times) / (total_time_us * 1e3) # 转换为 GFLOPS - - # 精度验证 - expected = 1 / (1 + np.exp(-a_np)) - diff = np.max(np.abs(c_tvm.numpy() - expected)) - - # 打印精准数据 - print(f"📊 精准性能指标:GFLOPS = {gflops:.4f} | 平均延迟 = {avg_latency_us:.4f} μs") - print(f"🔍 最大误差:{diff:.6e}") - return diff < 1e-5, gflops, avg_latency_us - - -# ================================================================ -# 4. 主入口 -# ================================================================ -if __name__ == "__main__": - M, N = 1024, 1024 - num_cores = multiprocessing.cpu_count() - target = f"llvm -num-cores={num_cores}" - - print(f"使用目标: {target}") - print(f"矩阵大小: {M}x{N}") - - # === 调优 + 构建 === - result, mod, error = tune_and_build_sigmoid(M, N, target=target) - - if result is not None: - print("\n🎉 自动调优成功!") - if hasattr(result, "trace"): - print("优化调度轨迹:") - print(result.trace) - else: - print("\nℹ️ 使用默认调度") - if error: - print(f"错误信息: {error}") - - # === 测试模块 === - success = test_sigmoid_module(mod, M, N, target) - - if success: - print("\n🎊 所有测试通过!Sigmoid 优化完成。") - else: - print("\n💡 功能测试失败,请检查计算定义或调度。") - -``` - -**输出结果应为** -``` -调优返回类型: -repr: meta_schedule.JSONDatabase(0x600001070ea8) -📂 检测到 JSONDatabase,尝试从中加载最佳调度... -✅ 已找到最优调度记录,准备提取调度... -✅ 获取调度成功,开始构建模块... -✅ 使用最优调度构建成功! - -🎉 自动调优成功! -🧪 测试模块功能与性能... -📊 精准性能指标:GFLOPS = 12.0841 | 平均延迟 = 260.3197 μs -🔍 最大误差:0.000000e+00 - -🎊 所有测试通过!Sigmoid 优化完成。 -``` - -其中核心API为: -- 计算定义:te.placeholder, te.compute, tvm.tir.exp, te.create_prim_func -- 自动调优(MetaSchedule):ms.tune_tir, JSONDatabase, as_measure_candidate, tvm.build -- 测试和性能测量:tvm.runtime.tensor, mod(), dev.sync(), numpy 对比验证 - -## 2.核心API介绍 - -### 1.计算定义相关 (tvm.te, tvm.tir) -这些 API 用于定义计算图(即算子逻辑),属于 TVM 的 Tensor Expression (TE) 层。 - -1. [tvm.te.placeholder(shape, dtype=None, name='placeholder')](https://tvm.apache.org/docs/reference/api/python/te.html#tvm.te.placeholder) - - 作用: - 创建一个输入张量(占位符),相当于定义计算的输入变量。 - - `A = te.placeholder((M, N), name="A", dtype="float32")` - - 参数说明 - - | 参数 | 含义 | - | ------- | ------------------------- | - | `shape` | 张量的形状 (tuple 或 list) | - | `name` | 张量名称(便于调试) | - | `dtype` | 数据类型,如 "float32", "int32" | - - **返回值** - - - 一个 tvm.te.Tensor 对象,可以在 te.compute 中使用。 - - **⚠️注意点** - - placeholder 仅定义输入,不含具体数值; - - shape 必须是静态(常数)形状; - - dtype 必须是 TVM 支持的类型(float32 / float16 / int32 / etc)。 - -2. [tvm.te.compute(shape, fcompute, name='compute', tag='', attrs=None, varargs_names=None)](https://tvm.apache.org/docs/reference/api/python/te.html#tvm.te.compute) - - **作用** - - 定义输出张量的计算逻辑。\ - TVM 会基于这个定义构建计算图。 - - ```python - C = te.compute( - (M, N), - lambda i, j: 1 / (1 + tvm.tir.exp(-A[i, j])), - name="C" - ) - ``` - **参数说明** - | 参数 | 含义 | - | ---------- | ------------------------ | - | `shape` | 输出张量的形状 | - | `fcompute` | 一个 lambda 函数,定义每个元素的计算规则 | - | `name` | 张量名称 | - - 返回值 - - - 一个新的 tvm.te.Tensor,描述计算结果。 - - 注意点 - - - fcompute 的参数数量必须与 shape 维度一致; - - - 不能包含 Python 控制流(如 if),必须是纯符号计算; - - - 计算表达式中应使用 tvm.tir 下的数学函数(如 exp, sqrt, floor 等)。 - -3. [tvm.tir.exp(x)](https://tvm.apache.org/docs/reference/api/python/te.html#tvm.te.exp) - - **作用** - 计算 e^x,对应于指数函数。属于 TIR 内置算子。 - - 注意点 - - 只能用于符号计算中; - - 不能直接对 numpy 数组或 Python float 调用; - - 如果想要编译后在 runtime 层使用真实数值,需通过 tvm.build 生成执行模块。 - -4. [te.create_prim_func(tensors: List[tvm.te.Tensor])](https://tvm.apache.org/docs/reference/api/python/te.html#tvm.te.create_prim_func) - - **作用** - 将 TE 层的计算定义(placeholder + compute)转换成一个可调度的 PrimFunc。 - PrimFunc 是 TVM 的中间表示(IR)层形式,供调度器和编译器使用。 - ``` - func = te.create_prim_func([A, C]) - ``` - - 返回值 - - - 一个 tvm.ir.PrimFunc 对象,可以被调度或直接编译。 - - 注意点 - - - 输入列表顺序必须正确(先输入,再输出); - - - PrimFunc 是不可变的(immutable); - - - 这是自动调优或 build 之前的必要转换步骤。 - - -### 2.自动调优与编译 (tvm.meta_schedule, tvm.build) -5. [tvm.meta_schedule.tune_tir(...)](https://tvm.apache.org/docs/reference/api/python/meta_schedule.html#tvm.meta_schedule.tune_tir) - - **作用** - - 对一个 PrimFunc 进行 自动调优(Auto-Tuning),搜索最优调度策略。 - 是 TVM MetaSchedule 的核心 API。 - - ``` - result = ms.tune_tir( - mod=func, - target="llvm", - work_dir="./tune_sigmoid", - max_trials_global=100, - num_trials_per_iter=10, - ) - ``` - - **参数说明** - - | 参数 | 含义 | - | --------------------- | ----------------------------------- | - | `mod` | 要调优的函数,可以是 `PrimFunc` 或 `IRModule` | - | `target` | 调优目标(如 "llvm", "cuda", "rocm", etc) | - | `work_dir` | 存放调优记录的路径 | - | `max_trials_global` | 全局最大调优次数 | - | `num_trials_per_iter` | 每轮迭代的采样次数 | - - - 返回值 - - - 可能是: - - - tvm.meta_schedule.database.JSONDatabase(保存调优结果) - - - tvm.IRModule(部分旧版兼容返回 IRModule) - - 注意点 - - - 调优会运行多次候选调度在目标设备上实际执行; - - - 调优时间可能很长; - - - 建议本地 CPU 使用 llvm,GPU 使用 cuda; - - - 数据库默认在 work_dir 下存储 JSON 文件,可复用。 - -6. [tvm.meta_schedule.Database(*args: Any, **kwargs: Any)](https://tvm.apache.org/docs/reference/api/python/meta_schedule.html#tvm.meta_schedule.Database) - - **作用** - - 存储和管理自动调优的记录结果(每个 workload 的 schedule、性能、参数等)。 - - **常用方法:** - | 方法 | 作用 | - | ------------------------------- | -------------------------- | - | `.get_all_tuning_records()` | 获取所有调优记录 | - | `.get_top_k(workload, top_k=1)` | 获取某个 workload 的性能最佳的 k 条记录 | - | `.commit_tuning_record(record)` | 手动写入一条调优记录 | - - 注意点: - - - 每条调优记录对应一个 workload; - - - 可以持久化保存调优数据,下次加载使用; - - - 用于生产环境时,建议保存调优结果以免重复训练。 - -7. [tvm.build(input, target="llvm", name=None)]() - - **作用** - - 将 调度好的计算图(IRModule / Schedule) 编译成可执行模块。 - ``` - mod = tvm.build(sch.mod, target="llvm") - ``` - - **参数说明** - - | 参数 | 含义 | - | -------- | ----------------------------------- | - | `input` | 可以是 IRModule、PrimFunc 或 Schedule 对象 | - | `target` | 编译目标("llvm"、"cuda"、"rocm" 等) | - | `name` | 可选模块名称 | - - 返回值 - - - tvm.runtime.Module,可在 Python 中直接调用。 - - 注意点 - - - target 必须与运行设备一致; - - - 不同 target 有不同的后端编译器; - - - 构建完成的模块可以序列化保存,复用。 - -8. [best_tuning_record.as_measure_candidate()]() - - **作用** - - 从调优记录中提取一个可执行候选(包含 schedule 与参数)。 - - 注意点 - - - 返回一个 MeasureCandidate 对象; - - - 通过 candidate.sch 获取调度; - - - 通常在 tune_tir 之后,从数据库提取最优调度时使用。 - - -### 3.执行与测试 (tvm.runtime) -9. [tvm.device(target, dev_id=0)]() - - **作用** - - 获取一个设备对象,用于运行编译模块。 - ``` - dev = tvm.device("llvm", 0) - ``` - - **参数说明** - - | 参数 | 含义 | - | -------- | ------------------------------------ | - | `target` | 设备类型,如 `"llvm"`, `"cuda"`, `"metal"` | - | `dev_id` | 设备编号(通常为 0) | - - - 返回值 - - - 一个 tvm.runtime.Device 对象。 - - 注意点 - - - target 必须与 build 时一致; - - - GPU 上需确保驱动和 CUDA 环境正常。 - -10. tvm.runtime.tensor(data, device) - - **作用** - - 将 NumPy 数组或 Python 数据创建为 TVM 运行时张量。 - ``` - a_tvm = tvm.runtime.tensor(a_np, device=dev) - ``` - - 注意点 - - - dtype 会根据 numpy 数组自动推断; - - - 分配在指定 device 上; - - - 是 runtime 级别的实际数据载体(可执行)。 - -11. mod(a_tvm, c_tvm) - - **作用** - 运行编译好的 TVM 模块。 - - 说明 - - - TVM 会自动匹配输入输出参数; - - - 执行时自动调用对应 target 的后端; - - - 完成后,输出张量中存储计算结果。 - -12. dev.sync() - - **作用** - - 等待设备上所有计算完成。常用于性能测试前后保证同步。 - - 注意点 - - - 对 CPU 来说几乎无影响; - - - 对 GPU、异步设备来说很重要,否则计时不准确。 - ---- -2004 - -> **作者:** ChatGpt\ ->**提交者:** 王胤吉\ -> **更新日期:** 2025/11/3 - - diff --git a/docs/zh/technical/AI/Stable_Diffusion.md b/docs/zh/technical/AI/Stable_Diffusion.md deleted file mode 100644 index 5648239..0000000 --- a/docs/zh/technical/AI/Stable_Diffusion.md +++ /dev/null @@ -1,52 +0,0 @@ -# Stable Diffusion本地Docker快速部署 - -### docker拉取腾讯云镜像 -``` -sudo docker pull gpulab.tencentcloudcr.com/ai/stable-diffusion:1.0.8 -``` -### 启动容器并打印日志 -``` -sudo docker run -itd --gpus=all --network=host --device=/dev/dri --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --name=stable-diffusion gpulab.tencentcloudcr.com/ai/stable-diffusion:1.0.8 | xargs sudo docker logs --follow -``` - -### 局域网访问设置 -进入容器 -``` -sudo docker exec -it stable-diffusion /bin/bash -``` -进入modules目录 -``` -cd modules -``` -编辑参数 -``` -vim cmd_argu.py -``` -修改以下两行 -```python -parser.add_argument("--listen", action='store_true',default=True, help="launch gradio with 0.0.0.0 as server name, allowing to respond to network requests") -parser.add_argument("--port", type=int, help="launch gradio with given server port, you need root/admin rights for ports < 1024, defaults to 7860 if available", default=7860) -``` -退出容器 -``` -exit -``` -重启容器 -``` -sudo docker restart stable-diffusion | xargs sudo docker logs --follow -``` - -### 添加模型 -#### 模型文件可以在 [抱脸](https://huggingface.co/) 或者 [C站](https://civitai.com/) 上下载 -模型文件(safetensors,checkpoint)添加到以下目录 -``` -/dockerx/stable-diffusion-webui/models/Stable-diffusion/ -``` -Lora文件添加到以下目录 -``` -/dockerx/stable-diffusion-webui/models/Lora/ -``` -VAE文件添加到以下目录 -``` -/dockerx/stable-diffusion-webui/models/VAE/ -``` \ No newline at end of file diff --git a/docs/zh/technical/AI/TVM_introduce.md b/docs/zh/technical/AI/TVM_introduce.md deleted file mode 100644 index dcd723d..0000000 --- a/docs/zh/technical/AI/TVM_introduce.md +++ /dev/null @@ -1,141 +0,0 @@ -# Apache TVM 深度学习编译器:技术演进与生态系统 - -## 1. TVM 概述 - -Apache TVM(张量虚拟机)是一个开源的深度学习编译器栈,旨在将机器学习模型高效地部署到各种硬件后端(包括CPU、GPU和专用加速器)。TVM的核心使命是**解决深度学习模型与多样硬件后端之间的"最后一公里"性能优化问题**。 -[快速上手使用指南](./How_to_run_TVM.md) <- 点击此处可快速上手体验。⚠️记得先配置好TVM - -## 2. TVM 的核心架构与工作流程 - -TVM采用分层编译架构,将深度学习模型的部署流程系统化、自动化。其完整的工作流程如下图所示: - -```mermaid -flowchart TD - A[模型导入
TensorFlow/PyTorch/ONNX] --> B[Relay优化
高级计算图优化] - B --> C{自动调度} - C --> D1[AutoTVM
基于模板] - C --> D2[Meta Schedule
无模板] - D1 & D2 --> E[TE表示
张量表达式] - E --> F[TIR优化
底层中间表示] - F --> G[代码生成
LLVM/其他后端] - G --> H[机器码
部署运行] -``` - -### 核心组件详解 - -- **前端导入与 Relay**:TVM 支持从 **TensorFlow、PyTorch 或 ONNX** 等主流框架导入模型。模型会转换为 TVM 的高级函数式中间表示 **Relay**。Relay 会进行**计算图级别的优化**,如算子融合、常量折叠、死代码消除等。 - -- **张量表达式与自动调度**:优化后的 Relay 计算图会被**降级为张量表达式**,这是一种用于描述张量计算的领域特定语言。这是TVM最具创新性的部分,提供了两种自动优化路径。 - -- **底层优化与代码生成**:基于优化结果,TE表示会进一步降级为TIR,这是TVM的**底层中间表示**,会进行循环优化、内存布局变换等底层优化。最后,优化的 TIR 会由 **LLVM** 等编译器后端生成针对目标硬件的高效机器码。 - -## 3. TVM 自动调优技术的演进 - -TVM的自动调优技术经历了显著的演进,从初期的基于模板方法发展到现代的完全自动化方案。 - -### 技术演进历程 - -#### 阶段一:AutoTVM - 基于模板的探索 - -作为第一代自动调优系统,AutoTVM的核心是**"模板"**。开发者需要为每个算子手动编写参数化的调度模板,明确指定可优化参数(如循环分块大小、向量化因子等)。AutoTVM的tuner(如XGBTuner)在预设的参数空间中进行搜索。 - -**特点**: -- **强依赖专家经验**:需要深入了解硬件特性和优化技术 -- **搜索空间受限**:优化潜力受限于预定义的模板 -- **精细控制**:对特定算子可以进行精细化调优 - -#### 阶段二:Ansor (Auto-Scheduler) - 自动生成程序 - -Ansor的出现解决了AutoTVM对模板的依赖问题。其核心思想是**自动为整个计算图生成和搜索调度程序**,无需任何预定义的模板。它通过分层策略(先生成高层"草图",再添加底层"注释")构建巨大的搜索空间。 - -**创新点**: -- **模板无关**:完全摆脱对手动编写模板的依赖 -- **全图优化**:考虑整个计算图的优化机会 -- **自动化程度高**:大幅降低使用门槛 - -#### 阶段三:Meta Schedule - 统一与可重用的学习系统 - -Meta Schedule是Ansor思想的**系统化与升华**,已成为TVM中**标准且推荐的自动调度框架**。它构建了以**可重用的成本模型**为核心的统一学习基础设施,能够学习程序特征与硬件性能之间的映射关系。 - -**核心优势**: -- **知识重用**:学习到的优化策略可以在不同模型和硬件间迁移 -- **端到端自动化**:提供完全自动化的优化流程 -- **持续学习**:随着使用不断积累和优化调度知识 - -### AutoTVM 与 Meta Schedule 对比 - -| 对比维度 | AutoTVM (基于模板) | Meta Schedule (无模板) | -| :--- | :--- | :--- | -| **核心思想** | 依赖人工预定义的**调度模板**,在模板定义的参数空间中搜索。 | 自动构建搜索空间,通过**成本模型**等机器学习技术进行引导。 | -| **自动化程度** | **较低**,需要专家知识编写模板。 | **高**,端到端自动化,无需手动定义模板。 | -| **搜索空间** | 由模板限定,**相对有限**,可能错过模板外的更优解。 | **自动生成**,更**全面且灵活**,能发现非直觉的优化策略。 | -| **知识重用** | 调优记录可保存,但重用性较弱。 | 支持强大的**跨工作负载和跨模型知识重用**。 | -| **适用场景** | 对特定算子进行**精细化调优**。 | **全图优化**、新硬件平台、复杂算子。 | - -## 4. TVM 在深度学习编译器生态中的定位 - -### 与其他相关技术的比较 - -| 技术名称 | 主要特点 | 与TVM的关联与差异 | -| :--- | :--- | :--- | -| **Tensor Comprehensions (TC)** | 采用**多面体模型**进行循环优化,自动化程度高。 | 技术路线不同。**TVM初期性能更优**,而TC在自动化方面有优势,两者技术上存在互补性。 | -| **XLA** | Google推出,与TensorFlow生态绑定紧密。通过**HLO IR**进行设备无关优化。 | **设计层级不同**。XLA的HLO IR同时包含高层计算图和底层运算细节;TVM的IR则明确分为计算图和算子两层。 | -| **MLIR** | LLVM生态系统中的多层中间表示框架,提供基础设施。 | **互补关系**。TVM可以基于MLIR构建其IR系统,MLIR为TVM等高级框架提供底层基础设施。 | -| **传统编译器 (如GCC, LLVM)** | 专注于通用编程语言的优化,如**寄存器分配、指令选择**等。 | **优化目标不同**。TVM等深度学习编译器更关注**全局计算图优化、自动生成接近手写性能的特定算子**等。 | - -### 生态系统整合 - -TVM积极与业界生态系统整合: -- **与MLIR协作**:TVM可以输出MLIR格式,利用MLIR的基础设施 -- **硬件后端支持**:支持从x86/ARM CPU到NVIDIA/AMD GPU,以及各种专用AI加速器 -- **框架兼容性**:提供与主流深度学习框架的无缝对接 - -## 5. TVM 的应用场景与价值主张 - -### 核心应用场景 - -TVM在以下场景中展现突出价值: - -- **应对"长尾"算子**:对于实验性模型结构或出现频率不高的算子,硬件厂商提供的优化库可能支持不足。TVM的**自动代码生成能力**能有效处理这些"长尾"问题。 - -- **跨硬件平台部署**:当需要在**多种硬件**上保持统一体验和良好性能时,TVM的**统一编译框架**能显著减少为不同硬件手动优化的工作量。 - -- **前沿研究与探索**:TVM的**可扩展设计和自动化优化能力**,使其成为研究模型量化、稀疏化计算等前沿技术的理想平台。 - -- **边缘设备部署**:对于资源受限的边缘设备,TVM能够生成高度优化的代码,充分利用有限的计算资源。 - -### 实践建议 - -对于开发者而言: - -- **新项目首选Meta Schedule**:它是TVM未来发展的方向,具有更高的自动化程度和优化潜力。 - -- **遗留代码逐步迁移**:现有的AutoTVM项目可以逐步迁移到Meta Schedule,享受更好的优化效果和开发体验。 - -- **结合硬件特性**:理解目标硬件的特性(缓存层次、向量单元等)有助于更好地利用TVM的优化能力。 - -## 6. 未来展望 - -TVM社区持续推动深度学习编译技术的发展: - -- **更智能的自动调度**:结合强化学习等先进AI技术进一步提升自动调度的效果 -- **更广泛的硬件支持**:扩展对新兴AI芯片和专用加速器的支持 -- **全栈优化**:从算法到硬件的端到端协同优化 -- **标准化与生态建设**:推动深度学习编译标准的建立和完善 - -## 7. 总结 - -Apache TVM 通过引入编译技术,构建了一个**解耦深度学习模型与硬件平台的自动化性能优化框架**。其以**分层中间表示**和**自动调度**为核心,经历了从基于模板的AutoTVM到完全自动化的Meta Schedule的技术演进,有效解决了深度学习模型在多样化硬件上的高效部署问题。 - -在日益复杂的深度学习硬件生态中,TVM作为连接算法与硬件的桥梁,通过统一的编译框架显著降低了模型部署的复杂度,为深度学习技术的普及和应用提供了坚实的技术基础。随着Meta Schedule等新技术的成熟和推广,TVM正在让高性能的深度学习推理变得更加普及和易用。 - -## 8.相关文章推荐 -[【从零开始学深度学习编译器】一,深度学习编译器及TVM 介绍](https://zhuanlan.zhihu.com/p/358585143) - -[TVM/TVM从入门到入土](https://comsoftwhu.github.io/AI-compile/TVM/TVM%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9C%9F.html) - ---- - -> **作者:** ChatGpt\ ->**提交者:** 王胤吉\ -> **更新日期:** 2025/11/3 diff --git a/docs/zh/technical/Back-end/C/C.md b/docs/zh/technical/Back-end/C/C.md deleted file mode 100644 index 9751e19..0000000 --- a/docs/zh/technical/Back-end/C/C.md +++ /dev/null @@ -1,299 +0,0 @@ -# 简单的C#与C++对比 -由于我学的很浅就展示一些简单基础的代码 - -### 输出 -C++ -```c++ - cout << "hello world" << a << b <> a; -``` - -C# -```c# - using System; - - class Program - { - static void Main(string[] args) - { - Console.WriteLine("请输入您的姓名:"); - string name = Console.ReadLine(); - Console.WriteLine("您好," + name + "!"); - - Console.WriteLine("请输入您的年龄:"); - int age = Convert.ToInt32(Console.ReadLine()); - Console.WriteLine("您的年龄是:" + age); - - Console.ReadLine(); - } - } -``` -### 数组 -C++ -#### 一维 -```c++ - double balance[10]; - balane[0]=4500.0; -``` -#### 二维 - ```c++ - int a[3][4]={ - {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ - {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ - {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ - }; - ``` - -C# -#### 一维 - ```c# - double[] balance = new double[10]; - balance[0] = 4500.0; - ``` -#### 二维 - ```c# - int [,] a = new int [3,4] { - {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ - {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ - {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ - }; - ``` -### 字符串 -C++ - ```c++ - char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; - char site[] = "RUNOOB"; - ``` - -C# -```c# - //字符串,字符串连接 - string fname, lname; - fname = "Rowan"; - lname = "Atkinson"; - string fullname = fname + lname; - - //通过使用 string 构造函数 - char[] letters = { 'H', 'e', 'l','l','o' }; - string greetings = new string(letters); - ``` - -### 循环 -c++与c#语法一致 - -### 结构体 -C++ - - ```c++ - #include - #include - - using namespace std; - void printBook( struct Books book ); - - // 声明一个结构体类型 Books - struct Books - { - char title[50]; - char author[50]; - char subject[100]; - int book_id; - }; - - int main( ) - { - Books Book1; // 定义结构体类型 Books 的变量 Book1 - Books Book2; // 定义结构体类型 Books 的变量 Book2 - - // Book1 详述 - strcpy( Book1.title, "C++ 教程"); - strcpy( Book1.author, "Runoob"); - strcpy( Book1.subject, "编程语言"); - Book1.book_id = 12345; - - // Book2 详述 - strcpy( Book2.title, "CSS 教程"); - strcpy( Book2.author, "Runoob"); - strcpy( Book2.subject, "前端技术"); - Book2.book_id = 12346; - - // 输出 Book1 信息 - printBook( Book1 ); - - // 输出 Book2 信息 - printBook( Book2 ); - - return 0; - } - - //c++函数在结构体外声明 - void printBook( struct Books book ) - { - cout << "书标题 : " << book.title < - - class Rectangle - //基本形式 - /* - public: - ... ...; - ... ...; - private: - ... ...; - ... ...; - */ - { - private: - double length; - double width; - - public: - void Acceptdetails() { - std::cout << "请输入长度:"; - std::cin >> length; - std::cout << "请输入宽度:"; - std::cin >> width; - } - - double GetArea() { - return length * width; - } - - void Display() { - std::cout << "长度: " << length << std::endl; - std::cout << "宽度: " << width << std::endl; - std::cout << "面积: " << GetArea() << std::endl; - } - }; - - int main() { - Rectangle r; - r.Acceptdetails(); - r.Display(); - return 0; - } -``` - -C# - -```c# - using System; - - namespace RectangleApplication - { - class Rectangle - //基本形式: - //private ... ... ...; - //public ... ... ...; - { - //成员变量 - private double length; - private double width; - - public void Acceptdetails() - { - Console.WriteLine("请输入长度:"); - length = Convert.ToDouble(Console.ReadLine()); - Console.WriteLine("请输入宽度:"); - width = Convert.ToDouble(Console.ReadLine()); - } - public double GetArea() - { -     return length * width; - } - public void Display() - { - Console.WriteLine("长度: {0}", length); - Console.WriteLine("宽度: {0}", width); - Console.WriteLine("面积: {0}", GetArea()); - } - }//end class Rectangle - - class ExecuteRectangle - { - static void Main(string[] args) - { - Rectangle r = new Rectangle(); - r.Acceptdetails(); - r.Display(); - Console.ReadLine(); - } - } - } -``` \ No newline at end of file diff --git a/docs/zh/technical/Back-end/C/C_Environment_Configuration/1-README.md b/docs/zh/technical/Back-end/C/C_Environment_Configuration/1-README.md deleted file mode 100644 index eefba2f..0000000 --- a/docs/zh/technical/Back-end/C/C_Environment_Configuration/1-README.md +++ /dev/null @@ -1,9 +0,0 @@ -# 介绍 - -*** - -* 本文档主要展示如何配置Mac和Windows下VSCode的C/C++环境 - -* 配置Windows环境的请带点击 [Windows](./2-Windows.md) - -* 配置Mac环境的请点击[Mac](./3-Mac.md) \ No newline at end of file diff --git a/docs/zh/technical/Back-end/C/C_Environment_Configuration/2-Windows.md b/docs/zh/technical/Back-end/C/C_Environment_Configuration/2-Windows.md deleted file mode 100644 index 0603037..0000000 --- a/docs/zh/technical/Back-end/C/C_Environment_Configuration/2-Windows.md +++ /dev/null @@ -1,231 +0,0 @@ -# Windows配置Visual Studio Code C/C++开发环境 - -## 一、下载 - -在官网下载VSCode,官网:https://code.visualstudio.com/ - -## 二、安装 - -直接打开下载好的.exe文件进行安装即可,选择一个没有中文和空格的路径就行,选择添加任务时全选。 - -## 三、配置C/C++环境 - -### 1. 安装MinGW编译器 - -1. 点击链接进入MingGw官网 - -- https://sourceforge.net/projects/mingw-w64/files/ - -- 进入官网后向下翻 -- 会见到以下画面 - -![image_01](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_01.png) - -下载完成后会得到一个压缩包,解压后将其中的mingw64文件夹拷贝至硬盘根目录 -(我移入的是D盘,所以我的mingw64文件夹地址为:D:\MINGW-W64\mingw64) -如下图所示 -![image_17](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_17.png) - -### 2.编辑环境变量 - -打开设置搜索环境变量 -选择编辑系统环境变量会弹出以下界面 - -![image_02](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_02.png) -![image_03](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_03.png) -![image_04](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_04.png) - -这里的地址为所存mingw64中bin目录的地址如图 -![image_06](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_06.png) - -### 3.检验并下载C/C++插件 - -在以上操作完成后我们可以点击win+R输入cmd打开命令面板并分别输入以下指令 - -``` -gcc --version -``` - -``` -g++ --version -``` - -若出现如下图所示则成功 - -![image_19](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_19.png) - -然后打开VSCode进行如下操作 - -点击拓展然后搜索C/C++安装如图所示插件 - -![image_07](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_07.png) - -需要一段时间,请静心等待,等右下角的提示消失了,说明安装成功 - -此时需要下载此插件的旧版本,点击插件的设置图标然后点击Install Another Version - -![image_20](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_20.png) - -随后向下滑动选择1.8.4版本 - -![image_21](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_21.png) - -此时最好重启VSCode让扩展生效。 - -重启之后打开已经在磁盘创建好的文件夹可通过菜单栏的File-->Open Folder打开 - -然后可创建一个hello.cpp文件(右键点击New File) -```C++ -#include -using namespace std; - -int main() -{ - cout<<"Hello World!"< 这里的路径根据大家自己安装的Mingw编译器位置和配置的环境变量位置所决定。 - -* IntelliSense 模式:gcc-x64 - -![image_09](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_09.png) - -![image_10](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_10.png) - -![image_11](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_11.png) - -配置完成后,此时在侧边栏可以发现多了一个.vscode文件夹,并且里面有一个c_cpp_properties.json文件,内容如下,说明上述配置成功。 - -``` - { - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${workspaceFolder}/**" - ], - "defines": [ - "_DEBUG", - "UNICODE", - "_UNICODE" - ], - "windowsSdkVersion": "10.0.22621.0", - "compilerPath": "D:/MINGW-W64/mingw64/bin/g++.exe", - "cStandard": "c17", - "cppStandard": "c++17", - "intelliSenseMode": "gcc-x64" - } - ], - "version": 4 -} -``` - -2. 配置构建任务 - -接下来,创建一个tasks.json文件来告诉VS Code如何构建(编译)程序。该任务将调用g++编译器基于源代码创建可执行文件。 按快捷键Ctrl+Shift+P调出命令面板,输入tasks,选择“Tasks:Configure Default Build Task”: - -![image_12](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_12.png) - -再选择“C/C++: g++.exe build active file”: - -![image_13](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_13.png) - -此时会出现一个名为tasks.json的配置文件,内容如下: - -``` -{ - "version": "2.0.0", - "tasks": [ - { - "type": "cppbuild", - "label": "C/C++: g++.exe 生成活动文件", - "command": "D:/MINGW-W64/mingw64/bin/g++.exe", - "args": [ - "-fdiagnostics-color=always", - "-g", - "${file}", - "-o", - "${fileDirname}\\${fileBasenameNoExtension}.exe" - ], - "options": { - "cwd": "D:/MINGW-W64/mingw64/bin" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "detail": "编译器: D:/MINGW-W64/mingw64/bin/g++.exe" - } - ] -} -``` - -3. 配置调试设置 - -这里主要是为了在.vscode文件夹中产生一个launch.json文件,用来配置调试的相关信息。点击菜单栏的Run-->Start Debugging: - -![image_14](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_14.png) - -选择C++(GDB/LLDB): - -![image_15](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_15.png) - -如果没有自动生成launch.json文件则点击这里如图所示: - -![image_16](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Windows/image_16.png) - -如果自动生成则不用管 - -紧接着会产生一个launch.json的文件: - -``` -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "g++.exe - Build and debug active file", - "type": "cppdbg", - "request": "launch", - "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", - "args": [], - "stopAtEntry": false, - "cwd": "D:/MINGW-W64/mingw64/bin", - "environment": [], - "externalConsole": False, - "MIMode": "gdb", - "miDebuggerPath": "D:\\MINGW-W64\\mingw64\\bin\\gdb.exe", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ], - "preLaunchTask": "C/C++: g++.exe 生成活动文件" - } - ] -} -``` - -如果想输出到控制台则将"externalConsole": 后改为true - -以后在程序的`return 0`前加上`getchar()` - diff --git a/docs/zh/technical/Back-end/C/C_Environment_Configuration/3-Mac.md b/docs/zh/technical/Back-end/C/C_Environment_Configuration/3-Mac.md deleted file mode 100644 index 5094570..0000000 --- a/docs/zh/technical/Back-end/C/C_Environment_Configuration/3-Mac.md +++ /dev/null @@ -1,125 +0,0 @@ -# Mac配置Visual Studio Code C/C++开发环境 - -## Mac - -### 下载Xcode -Xcode包含了C++开发的大部分工具,编译器,GDB调试工具等 -直接在app store就可以搜索到 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image.png) - -下载完成之后 需要在终端里输入一行命令安装命令行工具 -``` -xcode-select --install -``` - -### 下载[VS code](https://code.visualstudio.com) -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-1.png) - -打开VS code 点击插件 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-2.png) - -下载``code runner`` - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-3.png) - -按照下面操作打开设置面板 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-5.png) - -搜索code runner 往下翻看 找到RUN IN TERMINAL 一定要选择上 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-4.png) - -任何选择一个文件夹 新建一个代码文件 写入简单的程序 -```c -#include -int main() -{ - printf("hello world\n"); - return 0; -} -``` -点击右上角的run code 就可以运行程序了 如图 运行的信息都会在下面的terminal里 -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-6.png) - -### 配置调试环境 - -首先需要下载一个插件 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-7.png) - -在任意代码文件下点击调试右上角的debug按钮 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-10.png) - -点击debug界面 设置launch.json文件 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-11.png) -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-12.png) - -将Launch.json文件修改如下 - -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-8.png) - -调试成功 -![Alt text](../../../../../public/technical/Back-end/C++/C_Environment_Configuration/Mac/image-9.png) - -### 配置文件参考 -* `task.json` -```json -{ - "tasks": [ - { - "type": "cppbuild", - "label": "C/C++: clang build active file", - "command": "/usr/bin/clang", - "args": [ - "-fcolor-diagnostics", - "-fansi-escape-codes", - "-g", - "${file}", - "-o", - "${fileDirname}/${fileBasenameNoExtension}" - ], - "options": { - "cwd": "${fileDirname}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "detail": "Task generated by Debugger." - } - ], - "version": "2.0.0" -} -``` -* `Launch.json` -```json -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "C/C++: clang build active file", - "type": "cppdbg", - "request": "launch", - "program": "${fileDirname}/${fileBasenameNoExtension}", - "args": [], - "stopAtEntry": false, - "cwd": "${fileDirname}", - "environment": [], - "externalConsole": true, - "preLaunchTask": "C/C++: clang build active file", - "MIMode": "lldb" - } - ] -} -``` \ No newline at end of file diff --git a/docs/zh/technical/Back-end/C/Conda.md b/docs/zh/technical/Back-end/C/Conda.md deleted file mode 100644 index 3105f65..0000000 --- a/docs/zh/technical/Back-end/C/Conda.md +++ /dev/null @@ -1,46 +0,0 @@ -# 关于conda虚拟环境无法显示名称的解决方案 - -## 介绍 - -Conda是一个开源的软件包管理系统和环境管理系统,用于安装和管理多个版本的软件包和其依赖项。它可以在不同的操作系统上运行,包括Windows、MacOS和Linux等。 - -通过Conda,用户可以创建和管理Python环境并安装各种Python包,也可以安装其他语言的软件包,如R、C++等。此外,Conda还提供了虚拟环境的功能,用户可以在虚拟环境中使用特定版本的Python和软件包,而不会影响全局安装环境。 - -Conda的优点在于它可以快速地安装和更新软件包,并且可以解决软件包之间的依赖关系,从而避免了因为不同版本的软件包之间的冲突而导致的问题。此外,Conda还提供了易于使用的命令行工具和图形界面来管理软件包和环境。 - -## 问题复现 -使用 ``conda env list`` -![Alt text](../../../../public/technical/Back-end/C++/Conda/image.png) -并且conda activate 没有显示名字的环境是不可以的 -![Alt text](../../../../public/technical/Back-end/C++/Conda/image-1.png) -## 解决方案 -### 以下操作以激活 ``pytorch_env`` 为例 - -先检查环境变量里是否有 anaconda3/bin -``` -echo $PATH -``` -如果没有的话 就加上 -``` -export PATH="/path/to/anaconda/bin:$PATH" -``` -再使用 ``conda env list`` 和 ``conda activate pytorch_env`` - -如果还不行的话 就输入以下指令 - -``` -source activate pytorch_env -``` -这时候就能成功激活``pytorch_env``环境了 - -再使用 -``` -conda env list -``` -就可以正常显示环境名称了 同样``conda activtae``也是可以正常使用了 - -## 总结 - -conda可能有时候会抽风出bug 无法正常使用自带的命令 - -而 ``source activate`` 命令是python命令 一般在Linux和MacOS上使用 在conda抽风的时候 临时用一下还是ok的 diff --git a/docs/zh/technical/Back-end/C/Conda_Environment.md b/docs/zh/technical/Back-end/C/Conda_Environment.md deleted file mode 100644 index a0c6aeb..0000000 --- a/docs/zh/technical/Back-end/C/Conda_Environment.md +++ /dev/null @@ -1,71 +0,0 @@ -# python指定版本安装及Conda环境配置(Ubuntu、MacOS) - -## 安装python -python许多新的版本不在默认apt源仓库中 因此我们需要增加仓库 -```bash -sudo add-apt-repository ppa:deadsnakes/ppa -``` - -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image.png) - -按Enter键以确定添加 - -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image-1.png) - -现在就可以安装指定版本了 -```bash -apt install python3.8 -``` - -如果觉得输入每次使用都要输入python3.8不太方便 可以使用别名功能,在`~/.bashrc`文件中添加 - -```bash -vim ~/.bashrc -``` - -```bash -alias python=python3.8 -``` - - -## 安装Conda - -在[官网](https://www.anaconda.com/download#downloads)获取指定的版本,下载后运行脚本即可 - -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image-2.png) - -```bash -bash Anaconda3-2023.09-0-Linux-x86_64.sh -``` - -安装成功后激活一下环境 -```bash -source ~/.bashrc -``` - -命令行最前端出现base标识,说明已激活conda环境 -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image-3.png) - -创建你所需要的虚拟环境,可指定python版本及你所需要的各种包 -``` -conda create -n python=3.8 numpy pandas -``` - -使用`conda env list`查看所有的conda虚拟环境 - -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image-4.png) - -使用`conda activate`命令激活指定环境 -```bash -conda activate audio_enhance -``` - -此时命令行前端现实的环境名称也会改变 -![Alt text](../../../../public/technical/Back-end/C++/Conda_Environment/image-5.png) - -可以验证下python版本 以及指定的各种包 -``` -python --version -pip list -``` - diff --git a/docs/zh/technical/Back-end/C/_meta.json b/docs/zh/technical/Back-end/C/_meta.json deleted file mode 100644 index d626045..0000000 --- a/docs/zh/technical/Back-end/C/_meta.json +++ /dev/null @@ -1,51 +0,0 @@ -[ - { - "type": "dir", - "name": "C_Environment_Configuration", - "label": "配置VSCode的C/C++环境", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "C", - "label": "简单的C#与C++对比", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "Conda_Environment", - "label": "python指定版本安装及Conda环境配置(Ubuntu、MacOS)", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "Conda", - "label": "关于conda虚拟环境无法显示名称的解决方案", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "ffmeg_develop", - "label": "Linux和Macos ffmpeg开发环境配置", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "ffmpeg_code_learn", - "label": "ffmpeg开发 入门教程", - "collapsible": "true", - "collapsed": "false" - }, - { - "type": "file", - "name": "gdb_lldb", - "label": "C/C++程序调试工具使用文档(gdb/lldb)", - "collapsible": "true", - "collapsed": "false" - } -] \ No newline at end of file diff --git a/docs/zh/technical/Back-end/C/ffmeg_develop.md b/docs/zh/technical/Back-end/C/ffmeg_develop.md deleted file mode 100644 index 7fd1c7b..0000000 --- a/docs/zh/technical/Back-end/C/ffmeg_develop.md +++ /dev/null @@ -1,75 +0,0 @@ -# Linux和Macos ffmpeg开发环境配置 - -## 声明,此文档针对macos和linux开发环境,但操作流程同样适用于windows - -### ffmpeg项目组成 - -* 源代码项目主要由`开源库`(下面以lib开头的文件夹)和`文档`以及`诊断程序`(./configure)组成 - -``` -libavutil -libavcodec -libavformat -libavdevice -libavfilter -libswscale -libswresample -libpostproc -``` -如图所示 -![Alt text](../../../../public/technical/Back-end/C++/ffmpeg_develop/image-3.png) - -### 下载源代码 - -* [源代码下载官网](https://ffmpeg.org/releases/) -选择你需要的版本,比如 `ffmpeg-3.4.1.tar.gz `或`ffmpeg-3.4.1.tar.xz `![Alt text](../../../../public/technical/Back-end/C++/ffmpeg_develop/image-2.png) - -* 解压 如果是Linux或MacOS,可以使用命令`tar -xzvf ffmpeg-3.4.1.tar.gz`或者`tar -xzvf ffmpeg-3.4.1.tar.xz` - -### 自行build项目 -* 下载的源代码项目主要由一些代码文件(.c和.h文件)和文档以及诊断程序组成,如果想要使用该项目的库,是需要手动build的,在Macos或Linux下,Terminal cd到该项目目录下,确保系统有 `cmake`,`yasm` 组件 -* 在项目目录下运行诊断工具并build项目(分别运行一下三行指令) -``` -./configure -make clean -make -j8 -``` -* `./configure`指运行该目录下congigure程序,此程序会自动诊断项目完整度 -* `make clean`是清空此前build的文件 首次build可以不输入这行指令 -* `make -j8`是build项目的指令,`-j8`中的`8`是指调用8个线程来build项目,可依据硬件性能自行修改此数字 - -### 整理文件以方便调用 - -* 首先在项目根目录下新建两个文件夹`lib`和`include` -``` -mkdir lib && mkdir include -``` -* 递归查看.a静态库文件并移动到`lib`文件夹下 -``` -mv **/*.a lib -``` -* 将`源代码`(上文提到的开源库 lib开头的文件夹)所在文件夹移至`include`下 -``` -find . -maxdepth 1 -type d -name "lib*" ! -name "lib" -exec mv {} include/ \; -``` - -### 验证是否能用调用库 - -在任意目录下新建一个代码文件 -``` -touch test.cpp -``` -输入以下代码 -``` -#include - -int main() -{ - return 0; -} -``` -在代码所在目录下编译 -``` -g++ -I/path/to/include test.cpp -o test -``` -如果编译成功,说明我们的ffmpeg开发环境配置完成 diff --git a/docs/zh/technical/Back-end/C/ffmpeg_code_learn.md b/docs/zh/technical/Back-end/C/ffmpeg_code_learn.md deleted file mode 100644 index c5610e3..0000000 --- a/docs/zh/technical/Back-end/C/ffmpeg_code_learn.md +++ /dev/null @@ -1,117 +0,0 @@ -# ffmpeg开发 入门教程 - -### 配置开发环境 - -下载源代码并手动编译 -[详见]() - -### 读取视频编码信息 - -在任意目录下创建好你所需的代码文件 -``` -touch AVCodecContext.cpp -``` -编辑此代码文件 -```c++ -#include -//inlcude these ffmpeg headers you need -extern "C" -{ - #include - #include -} - -int main() -{ - AVFormatContext *fmt_ctx=NULL; - AVCodecContext *codec_ctx=NULL; - const AVCodec *codec =NULL; - int ret; - //you should change to your absoulte path - const char *filename="/Users/jacklau/Movies/ffmpeg_test/input/test.mov"; - int VideoStreamIndex=-1; - - if((ret=avformat_open_input(&fmt_ctx,filename,NULL,NULL))) - { - av_log(NULL,AV_LOG_ERROR,"cannot open input file\n"); - goto end; - } - - if((ret=avformat_find_stream_info(fmt_ctx,NULL))<0) - { - av_log(NULL,AV_LOG_ERROR,"cannot get stream info\n"); - goto end; - } - - for(int i=0;i < fmt_ctx->nb_streams;i++) - { - if(fmt_ctx->streams[i]->codecpar->codec_type==AVMEDIA_TYPE_VIDEO) - { - VideoStreamIndex=i; - break; - } - } - - if(VideoStreamIndex<0) - { - av_log(NULL,AV_LOG_ERROR,"no stream found\n"); - goto end; - } - - av_dump_format(fmt_ctx,VideoStreamIndex,filename,false); - - codec_ctx=avcodec_alloc_context3(NULL); - - if((ret=avcodec_parameters_to_context(codec_ctx,fmt_ctx->streams[VideoStreamIndex]->codecpar))<0) - { - av_log(NULL,AV_LOG_ERROR,"cannot get codec params\n"); - goto end; - } - - codec=avcodec_find_decoder(codec_ctx->codec_id); - - if(codec==NULL) - { - av_log(NULL,AV_LOG_ERROR,"cannot find decoder\n"); - goto end; - } - - if((ret=avcodec_open2(codec_ctx,codec,NULL))<0) - { - av_log(NULL,AV_LOG_ERROR,"cannot open decoder\n"); - goto end; - } - - fprintf(stderr,"\nDecodeding code is : %s \n",codec->name); - - avformat_close_input(&fmt_ctx); - //end this execute -end: - if(codec_ctx) - avcodec_close(codec_ctx); - if(fmt_ctx) - avformat_close_input(&fmt_ctx); - - return 0; -} -``` - -#### 编译 -输入以下指令 -``` -g++ -I/path/to/ffmpeg/include -L/path/to/ffmpeg/lib AVCodecContext.cpp -lavformat -lavutil -lavcodec -o AVCodecContext -``` -* `-I` 指指定g++编译前加入的外部库(代码,由头文件和代码组成),后跟实际的库路径 - -* `-L` 指指定g++编译前加入的外部静态or动态库,后跟实际的库路径 - -* `-lavformat` `-lavutil` `-lavcodec` 指引用ffmpeg这三个静态or动态库 - -#### 运行 -输入下行代码以运行编译好的程序 -``` -./AVCodecContext -``` -屏幕正确输出视频所用编码即为成功 - - diff --git a/docs/zh/technical/Back-end/C/gdb_lldb.md b/docs/zh/technical/Back-end/C/gdb_lldb.md deleted file mode 100644 index 48aa6a4..0000000 --- a/docs/zh/technical/Back-end/C/gdb_lldb.md +++ /dev/null @@ -1,271 +0,0 @@ -# C/C++程序调试工具使用文档(gdb/lldb) - -## 前言 - - -## 安装 - -ubuntu -``` -sudo apt install gdb -``` - -macos -``` -xcode-select --install -``` - -## 使用 - -### 启动程序 - -无参数启动 -``` -(gdb) gdb -``` -``` -(lldb) lldb -``` - -设置参数 -``` -(gdb) set args 1 2 3 -(gdb) run -``` -``` -(lldb) settings set target.run-args 1 2 3 -(lldb) run -``` - -or 使用参数启动程序 -``` -gdb --args a.out 1 2 3 -(gdb) run -... -``` -``` -lldb -- a.out 1 2 3 -(lldb) run -... -``` - -### 环境变量 -查看环境变量 -``` -(lldb) settings show target.env-vars -``` -设置环境变量 -``` -(lldb) settings set target.env-vars DYLD_LIBRARY_PATH=/Users/jacklau/Documents/Programs/Git/Github/bmf/output/bmf/lib -``` - -## 设置断点 - -添加断点 -``` -(gdb) break test.c:12 -``` - -``` -(lldb) breakpoint set --file test.c --line 12 -(lldb) br s -f test.c -l 12 -(lldb) b test.c:12 -``` - -条件断点 -``` -(gdb) break /root/workspace/bmf_OSPP/bmf/sdk/cpp_sdk/src/task.cpp:99 if stream_id == 0 -``` - -``` -(lldb) breakpoint set --name foo --condition '(int)strcmp(y,"hello") == 0' -(lldb) br s -n foo -c '(int)strcmp(y,"hello") == 0' -``` - -修改断点条件 -``` -(gdb) condition 1 stream_id == 0 -``` -``` -(lldb) breakpoint modify 1 -c 'stream_id == 0' -(lldb) br mod 1 -c 'stream_id == 0' -``` - -打印断点信息 -``` -(gdb) info break -``` - -``` -(lldb) breakpoint list -(lldb) br l -``` - -删除断点 -``` -(gdb) delete 1 -``` -``` -(lldb) breakpoint delete 1 -(lldb) br del 1 -``` -临时屏蔽断点 -``` -(gdb) disable 1 -``` -``` -(lldb) breakpoint disable 1 -(lldb) br dis 1 -``` - - -取消屏蔽断点 -``` -(gdb) enable 1 -``` -``` -(lldb) breakpoint enable 1 -(lldb) br en 1 -``` - - -## 调试程序 - -步入 step in - -``` -(gdb) step -(gdb) s -``` - -``` -(lldb) thread step-in -(lldb) step -(lldb) s -``` -步过 step over -``` -(gdb) next -(gdb) n -``` -``` -(lldb) thread step-over -(lldb) next -(lldb) n -``` - -步出 step out -``` -(gdb) finish -``` - -``` -(lldb) thread step-out -(lldb) finish -``` - -## 信息查看 -### 查看当前执行代码段 -``` -(gdb) list -``` -``` -(lldb) list -``` -### 动态库 -``` -(gdb) info sharedlibrary -``` -``` -(lldb) image list -``` -### 临时变量 -``` -(gdb) info locals -``` -``` -(lldb) frame variable --no-args -(lldb) fr v -a -``` -### 线程 -``` -(gdb) info threads -``` -``` -(lldb) threads list -``` -### 栈 -``` -(gdb) backtrace -``` -``` -(lldb) thread backtrace -(lldb) bt -``` -### 内存映射表 -``` -info proc mappings -``` -### 打印相对地址 -``` -(gdb) p &((bmf_sdk::Task *)0)->inputs_queue_ -``` -### 观察点设置 -#### 变量观察点 -``` -(gdb) watch global_var -``` -``` -(lldb) watchpoint set variable global_var -(lldb) wa s v global_var -``` -#### 内存观察点 -``` -(gdb) watch -location g_char_ptr -``` -``` -(lldb) watchpoint set expression -- my_ptr -(lldb) wa s e -- my_ptr -``` - -#### 条件观察点 -``` -(lldb) watch set var global -(lldb) watchpoint modify -c '(global==5)' -``` -### 观察点查看 -``` -(gdb) info watchpoints -``` -``` -(lldb) watchpoint list -(lldb) watch l -``` -### 查看周围内存 -#### 查看十六进制 -``` -(gdb) x/20x 0x7fffbcc51b70 -``` -``` -(lldb) memory read --size 4 --format x --count 4 0xbffff3c0 -(lldb) me r -s4 -fx -c4 0xbffff3c0 -(lldb) x -s4 -fx -c4 0xbffff3c0 -``` -#### 查看二进制 -``` -(gdb) x/20b 0x7fffbcc51b70 -``` -``` -(lldb) memory read --size 1 --format b --count 20 0xbffff3c0 -(lldb) me r -s1 -fb -c20 0xbffff3c0 -(lldb) x -s1 -fb -c20 0xbffff3c0 -``` -### 查看当前指令 -``` -(gdb) x/i $pc -``` -### 单步执行 -``` -(gdb) si -``` - diff --git a/docs/zh/technical/Back-end/Java/Cokkie-Session-JWT.md b/docs/zh/technical/Back-end/Java/Cokkie-Session-JWT.md deleted file mode 100644 index f4c42cf..0000000 --- a/docs/zh/technical/Back-end/Java/Cokkie-Session-JWT.md +++ /dev/null @@ -1,83 +0,0 @@ -# Cookie,Session与JWT - -## 前言 - -由于早期的网页被设计出来只是为了满足人们浏览网络资源的需求,几乎没有交互,所以HTTP在设计之初就是无状态的,无法携带信息。随着互联网的发展,为了满足人们对于网络交互的需求,需要一种技术来保存用户信息,用于登录认证等。 - -目前常见的技术便是 **Cookie,Session,JWT** 。 - -## Cookie - -**Cookie**存储于客户端(浏览器),当用户访问一个页面时,客户端将用户填好的账号,密码,验证码等信息发送给服务器,服务器验证无误后会将用户信息保存在Cookie中,返回给客户端。 - -客户端(浏览器)在每次向服务器发起请求时都携带这个Cookie,服务器根据Cookie中的用户信息便可以识别出当前用户。 - -### 优点 - -- Cookie存储在客户端,服务器没有内存压力 -- 服务器可拓展性强,Cookie存储在客户端,当请求到不同的服务器时依旧可以识别身份 -- 由于Cookie存储于客户端(浏览器)中,用户可以自由清除 -- 网站往往会在Cookie中缓存用户基本信息,可以在某些时候自动帮助用户填写一些基本信息 -- 在Cookie存储一些用户信息有利于网站个性化用户体验(例如个性化广告) - -### 缺点 - -- 必须要客户端开启Cookie -- 当用户信息过多时,客户端效率会降低,因为内存占用过多 -- 存储在Cookie中,会完全暴露于网络环境中,安全性太低,任何人都可以读写 -- CSRF(Cross Site Request Forgery),易受跨站点请求伪造攻击。由于Cookie存储了你的用户信息,如果别人仿造了你的Cookie,那么就可以用你的身份来向服务器发起请求,服务器成功识别Cookie保存的你的用户信息,便可以向他人提供对你不利的服务。(例如在银行网站中拿到你的Cookie后向服务器发起转账请求) - -## Session - -**Session**存储于服务器端,当用户访问一个页面时,客户端将用户填好的账号,密码,验证码等信息发送给服务器,服务器验证无误后会生成一个用于标识用户身份的**sessionID**,同时创建一个Session来维护用户信息,并且创建一个Cookie,将sessionID存在Cookie中,返回给客户端。 - -此后每次客户端向服务器发起请求时都在Cookie中带上这个sessionID,服务器根据sessionID便可识别出需要处理哪个用户的信息。 - -### 优点 - -- 客户端(浏览器)Cookie中只需要存储sessionID,快捷高效 -- 较为灵活,服务器可以定义session的过期时间等等,客户端无法控制 - -### 缺点 - -- Session通常与Cookie混合使用,如果用户关闭了Cookie就无法实现。解决方案: - - 将sessionID存在url中,但这样安全性更低,前后端代码复杂度也会上升 - - 将sessionID放在请求体中,前后端代码复杂度提高,不利于维护 -- 同样无法避免CSRF。如果他人在Cookie中拿到了你的sessionID便可以伪造成你。 -- 如果部署了多台服务器,当负载均衡机制将请求分配到其它服务器时,会因为sessionID无法匹配而识别用户失败。有如下常见处理方案: - - 当产生一个Session时便在每台服务器上同步,会产生大量的服务器资源浪费 - - 通过特定算法将请求固定分配到一台服务器上,但是当这台服务器出问题时就无法处理用户请求 - - 最常用的是将所有的Session信息统一存储在一个地方,例如Redis,当请求到服务器时,服务器向Redis发起请求获取用户Session。注意部署Redis集群来提高抗灾能力。 - - 整合Spring Session实现会话(Session)共享合同步。 - -## JWT - -**JWT**(JSON Web Token)不依赖与Session,一般也不使用Cookie存储,而是存储在localStorage中,可以有效避免CSRF。 - -JWT由三部分组成: - -- **Header** : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。 -- **Payload** : 用来存放实际需要传递的数据,默认不加密,不宜存储私密信息 -- **Signature(签名)**:服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法生成 - -当用户访问一个页面时,客户端将用户填好的账号,密码,验证码等信息发送给服务器,服务器验证无误后会生成一个用于标识用户身份的JWT,返回给客户端,客户端一般将JWT存在localStorage中。 - -此后每次客户端向服务器发起请求时都在请求头中带上这个JWT,服务器根据JWT便可识别出需要处理哪个用户的信息。 - -### 优点 - -- 安全性较高 -- 服务器只需存储密钥,可扩展性强 -- JWT一般存于localStorage(也可存于Cookie),没有CSRF风险 - -### 缺点 - -- 前后端代码复杂度较高 -- 密钥泄露,全部完蛋 -- PayLoad默认不加密,不宜存储私密信息 -- 移动端友好(移动端没有Cookie) -- 由于JWT存在客户端,服务器没有其它逻辑,无法简单让JWT失效(退出登录,注销等)。有以下处理方法: - - 在数据库或Redis中维护JWT状态,每次请求先从数据库中查看JWT是否有效。会提高代码复杂度 - - 服务器给JWT设置有效期。但是有效期为多少以及什么时候更新有效期,难以把握 - - 设置备用JWT,当现JWT快过期时就启用备用JWT,同时再生成一个备用JWT。同样难以把握,备用JWT如果提前泄露,不利于用户安全 - - 将JWT过期时间设置在用户休眠期间。对于大型网站不友好 \ No newline at end of file diff --git a/docs/zh/technical/Back-end/Java/Java-ThreadLocal.md b/docs/zh/technical/Back-end/Java/Java-ThreadLocal.md deleted file mode 100644 index 0dee6fe..0000000 --- a/docs/zh/technical/Back-end/Java/Java-ThreadLocal.md +++ /dev/null @@ -1,213 +0,0 @@ -# Java - ThreadLocal - -## 什么是**ThreadLocal**? - -**ThreadLocal**可以翻译为*线程本地存储*,是用来解决多线程间对共享资源的访问安全性的一种技术。 - -当我们在面临多线程并发问题时,例如线程A创建了对于一个共享资源(static)的访问链接,此时当线程A正在访问该资源时,线程B也通过该链接开始对资源进行访问,而当线程A访问资源完毕后关闭了对于资源的访问链接,那么线程B就会出错。 - -一种解决方案是不将该资源设为共享的(不用static修饰),但是会造成内存资源的浪费,每个线程都会创建一个资源对象,对于内存不友好,并且随着线程的创建与销毁,服务器会频繁的创建与销毁资源对象,对服务器不友好且效率低下。 - -此时我们就可以使用**ThreadLocal**技术,用于解决多线程对共享资源的访问安全性问题。 - -## ThreadLocal如何实现线程隔离? - -**ThreadLocal**会为每个线程创建一个资源的副本,线程之间互不影响,每个线程只需要访问自己的资源副本即可,服务器效率大大提高。 - -> 但是正是由于每个线程中都会有一个资源的副本,所以使用ThreadLocal也不一定对内存更友好,需要具体问题具体分析。 - -**ThreadLocal**会将作为key-value形式存储在*ThreadLocalMap*对象中,线程可以通过当前线程来获取本线程的资源对象。 - -## ThreadLocalMap - -**ThreadLocalMap**类似于*Map*,但它不是*Map*,因为ThreadLocalMap并没有实现Map接口。 - -ThreadLocalMap中有一个**Entry**类: - -```java -static class Entry extends WeakReference> { - /** The value associated with this ThreadLocal. */ - Object value; - - Entry(ThreadLocal k, Object v) { - super(k); - value = v; - } - } -``` - -将*ThreadLocal*作为Key,资源对象*Object*作为Value存放在*Entry*中,**ThreadLocalMap**维护一个Entry数组来保存各个线程的本地资源。 - -**ThreadLocalMap**中有一个set方法来设置一个Entry: - -大致逻辑是通过ThreadLocal的Hash值来作为数组下标找到对应的Key,将其Value覆盖,如果没有找到对应Key,就新建一个 - -```java - private void set(ThreadLocal key, Object value) { - - // We don't use a fast path as with get() because it is at - // least as common to use set() to create new entries as - // it is to replace existing ones, in which case, a fast - // path would fail more often than not. - - Entry[] tab = table; - int len = tab.length; - int i = key.threadLocalHashCode & (len-1); - - for (Entry e = tab[i]; - e != null; - e = tab[i = nextIndex(i, len)]) { - if (e.refersTo(key)) { - e.value = value; - return; - } - - if (e.refersTo(null)) { - replaceStaleEntry(key, value, i); - return; - } - } - - tab[i] = new Entry(key, value); - int sz = ++size; - if (!cleanSomeSlots(i, sz) && sz >= threshold) - rehash(); - } - -``` - -**ThreadLocalMap**中有一个remove方法来移除一个Entry: - -大致的逻辑是,通过ThreadLocal的Hash值作为数组下标找到对应的Key,删除相应Entry - -```java -private void remove(ThreadLocal key) { - Entry[] tab = table; - int len = tab.length; - int i = key.threadLocalHashCode & (len-1); - for (Entry e = tab[i]; - e != null; - e = tab[i = nextIndex(i, len)]) { - if (e.refersTo(key)) { - e.clear(); - expungeStaleEntry(i); - return; - } - } - } -``` - -## 如何使用ThreadLocal? - -### init - -**ThreadLocal**中有一个初始化方法: - -```java -protected T initialValue() { - return null; - } -``` - -可以通过重写这个方法在线程创建时执行一些操作,例如数据库连接的创建: - -```java -public class ConnectionManager { - - private static final ThreadLocal dbConnectionLocal = new ThreadLocal() { - @Override - protected Connection initialValue() { - try { - return DriverManager.getConnection("", "", ""); - } catch (SQLException e) { - e.printStackTrace(); - } - return null; - } - }; - - public Connection getConnection() { - return dbConnectionLocal.get(); - } -} -``` - -> 我们可以看到,ThreadLocal的修饰符通常是private static final,它本身是一个共享资源,内部通过ThreadLocalMap维护一个形式的Key-Value数组来实现多线程隔离 - -### set - -**ThreadLocal**有一个set方法: - -```java - public void set(T value) { - Thread t = Thread.currentThread(); - ThreadLocalMap map = getMap(t); - if (map != null) { - map.set(this, value); - } else { - createMap(t, value); - } - } - -``` - -可以通过调用该方法将对象存到ThreadLocalMap中 - -### get - -**ThreadLocal**中有一个get方法: - -```java - public T get() { - Thread t = Thread.currentThread(); - ThreadLocalMap map = getMap(t); - if (map != null) { - ThreadLocalMap.Entry e = map.getEntry(this); - if (e != null) { - @SuppressWarnings("unchecked") - T result = (T)e.value; - return result; - } - } - return setInitialValue(); - } -``` - -可以通过调用该方法获取ThreadLocal对应的对象,如果没有相应对象,就会调用**setInitialValue()** - -```java - private T setInitialValue() { - T value = initialValue(); - Thread t = Thread.currentThread(); - ThreadLocalMap map = getMap(t); - if (map != null) { - map.set(this, value); - } else { - createMap(t, value); - } - if (this instanceof TerminatingThreadLocal) { - TerminatingThreadLocal.register((TerminatingThreadLocal) this); - } - return value; - } -``` - -**setInitialValue()**方法会通过**initialValue()**方法为ThreadLocal初始化一个Value - -### remove - -我们现在知道,在ThreadLocalMap中,一个ThreadLocal作为Key对应一个Value,可是如果线程ThreadLocal一直存在的话,内存中就会一直保存这个Entry,但是我们不可能因为不需要Value就销毁一个线程,此时无用却无法删除的Value便造成了**内存泄露**。 - -为此,**ThreadLocal**提供了一个**remove**方法: - -```java - public void remove() { - ThreadLocalMap m = getMap(Thread.currentThread()); - if (m != null) { - m.remove(this); - } - } -``` - -可以看出这个remove方法是调用的ThreadLocalMap.remove()方法,用于删除一个Entry - diff --git a/docs/zh/technical/Back-end/Java/MinioMarkdown.md b/docs/zh/technical/Back-end/Java/MinioMarkdown.md deleted file mode 100644 index b7b3105..0000000 --- a/docs/zh/technical/Back-end/Java/MinioMarkdown.md +++ /dev/null @@ -1,393 +0,0 @@ -# Minio - -## 安装minio - -### Linux安装 - -**第一步:拉取镜像** - -> docker pull minio/minio - -此处拉取的是最新版的minio容器。本项目使用8.2.0 - -如果要查看最新版的容器的详细版本,可以执行: - -```shell -docker image inspect minio/minio:latest | grep -i version -``` - -**第二步:启动** - -用户名和密码请自行配置 - -```纯文本 -docker run \ --p 9000:9000 \ --p 9001:9001 \ ---name=gmalldocker_minio \ --d --restart=always \ --e "MINIO_ROOT_USER=admin" \ --e "MINIO_ROOT_PASSWORD=admin123456" \ --v /home/data:/data \ --v /home/config:/root/.minio \ -minio/minio server /data --console-address ":9001" -``` - -浏览器访问:[http://IP:9001/minio/login,登录使用自定义账户密码admin/admin123456登录](http://IP:9001/minio/login,登录使用自定义账户密码admin/admin123456登录 "http://IP:9001/minio/login,登录使用自定义账户密码admin/admin123456登录") - -**注意**:文件上传时,需要调整一下linux 服务器的时间与windows 时间一致!(一定不要忘记!否则后续无法成功上传文件,这是因为minio底层为了防止恶意行为则要求上传文件的系统时间和服务器的时间必须要一致!) - -> 第一步:安装ntp服务 -> yum -y install ntp -> 第二步:开启开机启动服务 -> systemctl enable ntpd -> 第三步:启动服务 -> systemctl start ntpd -> 第四步:更改时区 -> timedatectl set-timezone Asia/Shanghai -> 第五步:启用ntp同步 -> timedatectl set-ntp yes -> 第六步:同步时间 -> ntpq -p - -### Windows安装 - -下载地址:[MinIO | Code and downloads to create high performance object storage](https://min.io/download#/windows) - -需要专门创建一个目录,下载minio.exe到这里。 - -进入到minio.exe所在目录打开终端(有可能需要以管理员身份运行),设置一下账号和密码: - -``` -setx MINIO_ROOT_USER admin -setx MINIO_ROOT_PASSWORD admin123 -``` - -> **注意:** 账号至少为3位,密码至少为8位 - -注意:别试图双击exe文件来启动,无效。 - -别忘了需要在minio文件夹中创建一个logs文件夹,需要把日志文件存入这里。 - -执行: - -```shell -./minio.exe server D:\minio\data --console-address ":9001" --address ":9000" > D:\minio\logs\minio.log -``` - -然后访问:[MinIO Console](http://localhost:9001/login) - -## 基本操作 - -操作我们使用Linux中安装的minio。 - -导入依赖: - -```xml - - - io.minio - minio - 8.2.0 - -``` - -配置参数,这是为了读取yml文件中的minio配置 - -````java -@Configuration -@ConfigurationProperties(prefix="minio") //读取节点 -@Data -public class MinioConstantProperties { - - private String endpointUrl; - private String accessKey; - private String secreKey; - private String bucketName; -} - -```` - -配置文件实例: - -```yml -minio: - endpointUrl: http://192.168.100.100:9000 - accessKey: admin - secreKey: admin123456 - bucketName: test -``` - -配置类,这是为了加载配置参数 - -```java -import io.minio.MinioClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class MinIOConfig { - - @Autowired - private MinioConstantProperties props; - - - /** - * 注册操作MInIO客户端对象 - * @return - */ - @Bean - public MinioClient minioClient() { - return MinioClient.builder() - .endpoint(props.getEndpointUrl()) //操作MinIO地址 端口9000 - .credentials(props.getAccessKey(), props.getSecreKey()) - .build(); - } - -} -``` - -文件上传示例(此处用图片文件举例): - -```java -@Slf4j -@Service -public class FileUploadServiceImpl implements FileUploadService { - @Autowired - private MinioClient minioClient; - - @Autowired - private MinioConstantProperties props; - - - @Override - public String uploadImage(MultipartFile file) { - - try { - log.info("上传图片"); - //检验上传的文件是否是一个图片(通过后缀名以及通过其文件内部构造) - BufferedImage read = ImageIO.read(file.getInputStream()); - if(read==null){ - throw new RuntimeException("图片格式非法!"); - } - //给文件生成一个唯一名称 /当日日期/uuid.后缀名 - String folderName= DateUtil.today(); - String fileName = IdUtil.randomUUID(); - String extName = FileUtil.extName(file.getOriginalFilename());//文件后缀名 - String objectName = "/"+folderName+"/"+fileName+"."+extName; - - //调用上传文件功能 - minioClient.putObject( - PutObjectArgs.builder().bucket(props.getBucketName()).object(objectName).stream( - file.getInputStream(), file.getSize(), -1) - .contentType(file.getContentType()) - .build()); - //拼接文件在线地址 - return props.getEndpointUrl() + "/" + props.getBucketName() + objectName; - } catch (Exception e) { - log.error("文件上传失败:{}",e); - throw new RuntimeException(e); - } - } -} -``` - -文件删除的方法示例: - -```java -/** - * 删除文件 - * - * @param bucketName minio bucket 名称 - * @param fileName 文件名 - * @return - */ - public Boolean removeFile(String bucketName, String fileName) { - try { - //判断桶是否存在 - boolean res = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); - if (res) { - //删除文件 - minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName) - .object(fileName).build()); - } - } catch (Exception e) { - log.error("minio 删除文件失败"); - e.printStackTrace(); - return false; - } - return true; - } - -``` - -当然,也可以直接用已经写好的工具类来实现: - -```java -@Slf4j -@Component -public class MinioUtils { - - @Autowired - private MinioClient minioClient; - - @Autowired - private MinioInfo minioInfo; - - - /** - * 上传文件 - * - * @param file 文件信息 - * @param bucketName minio bucket 名称 - * @return 上传文件路径 - */ - public String uploadFile(MultipartFile file, String bucketName) { - if (file == null || file.getSize() == 0) { - log.error("minio 上传文件:{}", "上传文件不能为空"); - return null; - } - try { - // 判断是否存在 - createBucket(bucketName); - // 原文件名 - String originalFilename = file.getOriginalFilename(); - minioClient.putObject( - PutObjectArgs.builder().bucket(bucketName).object(originalFilename).stream( - file.getInputStream(), file.getSize(), -1) - .contentType(file.getContentType()) - .build()); - return minioInfo.getEndpoint() + "/" + bucketName + "/" + originalFilename; - } catch (Exception e) { - log.error("minio 上传失败:{}", e.getMessage()); - } - log.error("minio 上传文件:{}", "上传失败"); - return null; - } - - /** - * 通过字节流上传 - * - * @param imageFullPath 图片路径 - * @param bucketName minio bucket 名称 - * @param imageData 图片数据 - * @return 上传文件路径 - */ - public String uploadImage(String imageFullPath, - String bucketName, - byte[] imageData) { - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageData); - try { - //判断是否存在 - createBucket(bucketName); - minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(imageFullPath) - .stream(byteArrayInputStream, byteArrayInputStream.available(), -1) - .contentType(".jpg") - .build()); - return minioInfo.getEndpoint() + "/" + bucketName + "/" + imageFullPath; - } catch (Exception e) { - log.error("minio 上传失败:{}", e.getMessage()); - } - log.error("minio 上传失败:{}", "上传失败"); - return null; - } - - /** - * 删除文件 - * - * @param bucketName minio bucket 名称 - * @param fileName 文件名 - * @return - */ - public Boolean removeFile(String bucketName, String fileName) { - try { - //判断桶是否存在 - boolean res = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); - if (res) { - //删除文件 - minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName) - .object(fileName).build()); - } - } catch (Exception e) { - log.error("minio 删除文件失败"); - e.printStackTrace(); - return false; - } - return true; - } - - /** - * 下载文件 - * - * @param fileName 文件名 - * @param bucketName minio bucket 名称 - * @param response 请求响应 - */ - public void fileDownload(String fileName, - String bucketName, - HttpServletResponse response) { - - InputStream inputStream = null; - OutputStream outputStream = null; - try { - if (StringUtils.isBlank(fileName)) { - response.setHeader("Content-type", "text/html;charset=UTF-8"); - String data = "文件下载失败"; - OutputStream ps = response.getOutputStream(); - ps.write(data.getBytes("UTF-8")); - return; - } - - outputStream = response.getOutputStream(); - // 获取文件对象 - inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - byte buf[] = new byte[1024]; - int length = 0; - response.reset(); - response.setHeader("Content-Disposition", "attachment;filename=" + - URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), "UTF-8")); - response.setContentType("application/octet-stream"); - response.setCharacterEncoding("UTF-8"); - // 输出文件 - while ((length = inputStream.read(buf)) > 0) { - outputStream.write(buf, 0, length); - } - System.out.println("下载成功"); - inputStream.close(); - } catch (Throwable ex) { - response.setHeader("Content-type", "text/html;charset=UTF-8"); - String data = "文件下载失败"; - try { - OutputStream ps = response.getOutputStream(); - ps.write(data.getBytes("UTF-8")); - } catch (IOException e) { - e.printStackTrace(); - } - } finally { - try { - outputStream.close(); - if (inputStream != null) { - inputStream.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - @SneakyThrows - public void createBucket(String bucketName) { - // 不存在就创建 - if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { - minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); - } - } -} - -``` - -## 参考 - -[SpringBoot 对接 MinIO 实现文件上传下载删除 - 掘金 (juejin.cn)](https://juejin.cn/post/7287914129573527609) - diff --git a/docs/zh/technical/Back-end/Java/MysqlMarkdown.md b/docs/zh/technical/Back-end/Java/MysqlMarkdown.md deleted file mode 100644 index 5cc8ee9..0000000 --- a/docs/zh/technical/Back-end/Java/MysqlMarkdown.md +++ /dev/null @@ -1,106 +0,0 @@ -# MySQL - -## 一、下载 - -本教程采用的是MySQL最新的社区版-MySQL Community Server 8.0.26 - -下载地址:https://downloads.mysql.com/archives/installer/ - -## 二、安装 - -要想使用MySQL,我们首先先得将MySQL安装好,我们可以根据下面的步骤,一步一步的完成MySQL的 -安装。 - -1. 双击官方下来的安装包文件 - -2. 根据安装提示进行安装 - -> 注意:路径选择没有中文空格等的规范路径 - -![image-01](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-01.png) - -![image-02](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-02.png) - -![image-03](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-03.png) - -安装MySQL的相关组件,这个过程可能需要耗时几分钟,耐心等待。 - -![image-04](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-04.png) - -![image-05](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-05.png) - -![image-06](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-06.png) - -![image-07](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-07.png) - -**输入MySQL中root用户的密码,一定记得记住该密码** - -![image-08](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-08.png) - -![image-09](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-09.png) - -![image-10](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-10.png) - -1. 配置 - -安装好MySQL之后,还需要配置环境变量,这样才可以在任何目录下连接MySQL。 - -A. 在此电脑上,右键选择属性 - -![image-11](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-11.png) - -B. 点击 "高级系统设置",选择环境变量 - -![image-12](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-12.png) - -C. 找到 Path 系统变量, 点击 "编辑" - -![image-13](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-13.png) - - -D. 选择 "新建" , 将MySQL Server的安装目录下的bin目录添加到环境变量 - -![image-14](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-14.png) - -## 三、 启动停止 - -MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,我们无需手动启动了。 - -当然,也可以手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令: - -``` -net start mysql80 -net stop mysql80 -``` - -![image-15](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-15.png) - -> 注意 : 上述的 mysql80 是我们在安装MySQL时,默认指定的mysql的系统服务名,不是固 -> 定的,如果未改动,默认就是mysql80。 -> ![image-16](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-16.png) - -## 四、客户端连接 - -1. 方式一:使用MySQL提供的客户端命令行工具 - -![image-17](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-17.png) - -2. 方式二:使用系统自带的命令行工具执行指令 - -``` -mysql [-h 127.0.0.1] [-P 3306] -u root -p - -参数: - -h : MySQL服务所在的主机IP - -P : MySQL服务端口号, 默认3306 - -u : MySQL数据库用户名 - -p : MySQL数据库用户名对应的密码 -``` - -[]内为可选参数,如果需要连接远程的MySQL,需要加上这两个参数来指定远程主机IP、端口,如果 -连接本地的MySQL,则无需指定这两个参数。 - -![image-18](../../../../public/technical/Back-end/Java/MysqlMarkdown/image-18.png) - -> 注意: 使用这种方式进行连接时,需要安装完毕后配置PATH环境变量。 - diff --git a/docs/zh/technical/Back-end/Java/RedisMarkdown/redisInstall.md b/docs/zh/technical/Back-end/Java/RedisMarkdown/redisInstall.md deleted file mode 100644 index e4afec1..0000000 --- a/docs/zh/technical/Back-end/Java/RedisMarkdown/redisInstall.md +++ /dev/null @@ -1,62 +0,0 @@ -# 安装配置redis - -## 一、下载redis - -- redis下载链接:https://github.com/tporadowski/redis/releases/tag/v5.0.14.1 - -> 点击下载Redis-x64-5.0.14.1.msi - -下载完后双击进行安装,选择安装地址,要求命名规模不能有中文空格等,记得点击添加到环境环境变量。 - -![image-01](../../../../../public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-01.png) - -点击Next,选择端口,若端口冲突则选择更换,反之则点击Next。 - -![image-02](../../../../../public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-02.png) - -随后一路Next最后finish - -## 二、配置redis用户名及其密码 - -1. win+R随后输入cmd打开命令框后输入,其中root可更换作为用户名 -``` -set name root -``` - -随后输入以下内容确认用户名 -``` -get name -``` - -2. 随后设置密码输入以下内容。其中123456可更换 -``` -config set requirepass 123456 -``` - -之后输入`get name`则会报错之后我们需要登录 - -输入以下内容登录,其中123456为自己设置的密码 -``` -auth 123456 -``` - -随后输入`get name`则正常显示,下一步下载安装redis图形化操作工具,最好不要关闭命令窗口。 - -## 三、下载安装redis图形化操作工具并连接 - -- redis图形化操作工具下载链接:https://github.com/lework/RedisDesktopManager-Windows/releases/tag/2022.5 -> 点击下载resp-2022.5.zip - -下载完后双击进行安装,路径选择要要求命名规模不能有中文空格等,随后点击安装即可。 - -安装完后点击finish则会自动运行,然后`点击连接到Redis服务器` - -![image-03](../../../../../public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-03.png) - -随后点击顶部栏的连接设置,随后输入名字与密码,名字可以随便输入,密码则是自己设置的密码。 -> 如果前面端口更改过记得确定是否为自己修改的端口 - -![iamge-04](../../../../../public/technical/Back-end/Java/RedisMarkdown/redisInstall/image-04.png) - -点击测试连接,如显示连接成功则之后点击确定则成功连接。 - diff --git a/docs/zh/technical/Back-end/Java/SpringBoot-MinIO-upload-download-files-preview-urls.md b/docs/zh/technical/Back-end/Java/SpringBoot-MinIO-upload-download-files-preview-urls.md deleted file mode 100644 index b58a62b..0000000 --- a/docs/zh/technical/Back-end/Java/SpringBoot-MinIO-upload-download-files-preview-urls.md +++ /dev/null @@ -1,350 +0,0 @@ -# SpringBoot整合MinIO后实现文件的上传下载以及获取预览URL - -> JDK17 SpringBoot3 -> -> 参考 https://min.io/docs/minio/linux/developers/java/API.html?ref=docs-redirect#uploadObject -> -> 源码 https://gitee.com/Uncommen/easy-min-io - -## 引入依赖 - -在*pom.xml*中添加 - -主要的依赖: - -```xml - - io.minio - minio - 8.5.7 - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-web - 3.2.1 - -``` - -其它依赖: - -```xml - - org.springframework.boot - spring-boot-starter-test - test - - - - - org.springframework.boot - spring-boot-configuration-processor - 3.2.4 - - - - - org.projectlombok - lombok - 1.18.30 - provided - - - - - org.apache.commons - commons-lang3 - 3.14.0 - -``` - -## 配置文件 - -在*application.yml*中添加minio相关配置: - -```yaml -minio: - endpoint: http://localhost:9000 - accessKey: Y1zXHmjPZHIf2R8Rp2jM - secretKey: nz8LdzSb3Defz1Gqs2UB9HAjBcpeRoiDiYZ1kLXE - bucketName: easy -``` - -- endpoint:MinIO服务器的地址 -- accesskey:MinIO生成的accessKey -- secretKey:MinIO生成的secretKey -- bucketName:桶名(如果桶名不固定,可以在代码中更改而不在这里写死) - -## 属性类 - -提供一个MinIO属性类以便与配置文件进行映射: - -**MinIOProperty.java** - -```java -/** - * MinIO 存储属性类 - * - * @author Uncommon - */ -@Data -@Configuration -@ConfigurationProperties(prefix = "minio") -public class MinIOProperty { - // MinIO地址 - private String endpoint; - // MinIO accessKey - private String accessKey; - // MinIO secretKey - private String secretKey; - // MiniO桶名称 - private String bucketName; -} -``` - -## 配置类 - -用于初始化MinIO配置 - -**MinIOConfig.java** - -```java -/** - * MinIO配置类 - * - * @author Uncommon - */ -@Configuration -public class MinioConfig { - - @Resource - private MinIOProperty minioProperty; - - /** - * 初始化minio配置 - */ - @Bean - public MinioClient minioClient() { - return MinioClient.builder() - .endpoint(minioProperty.getEndpoint()) //操作MinIO地址 - .credentials(minioProperty.getAccessKey(), minioProperty.getSecretKey()) - .build(); - } -} -``` - -## 具体代码逻辑实现 - -### 上传文件 - -**MinIOService.java** - -```java -/** - * 上传文件 - * - * @param file 文件 - * @return 文件名 - */ - String uploadFile(MultipartFile file); -``` - -**MinIOServiceImpl.java** - -```java - /** - * 上传文件 - * - * @param file 文件 - * @return 文件名 - */ - @Override - public String uploadFile(MultipartFile file) { - // 获取桶名 - String bucketName = minioProperty.getBucketName(); - log.info("开始向桶 {} 上传文件", bucketName); - //给文件生成一个唯一名称 当日日期-uuid.后缀名 - String folderName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")); - String fileName = String.valueOf(UUID.randomUUID()); - String extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//文件后缀名 - String objectName = folderName + "-" + fileName + extName; - - InputStream inputStream; - try { - inputStream = file.getInputStream(); - // 配置参数 - PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(objectName) - .stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build(); - //文件名称相同会覆盖 - minioClient.putObject(objectArgs); - } catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException | - InvalidResponseException | IOException | NoSuchAlgorithmException | ServerException | - XmlParserException e) { - log.error("文件上传失败: " + e); - throw new RuntimeException(e); - } - log.info("文件上传成功,文件名为:{}", objectName); - return objectName; - } -``` - -### 下载文件 - -**MinIOService.java** - -```java - /** - * 下载文件 - * - * @param fileName 文件名 - * @param response HttpServletResponse - */ - void downloadFile(String fileName, HttpServletResponse response); -``` - -**MinIOServiceImpl.java** - -```java - /** - * 下载文件 - * - * @param fileName 文件名 - * @param response HttpServletResponse - */ - @Override - public void downloadFile(String fileName, HttpServletResponse response) { - // 获取桶名 - String bucketName = minioProperty.getBucketName(); - if (StringUtils.isBlank(fileName)) { - log.error("文件名为空!"); - return; - } - try { - // 获取文件流 - InputStream file = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - response.reset(); - response.setHeader("Content-Disposition", "attachment;filename=" + - URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), StandardCharsets.UTF_8)); - response.setContentType("application/octet-stream"); - response.setCharacterEncoding("UTF-8"); - // 获取输出流 - ServletOutputStream servletOutputStream = response.getOutputStream(); - int len; - byte[] buffer = new byte[1024]; - while ((len = file.read(buffer)) > 0) { - servletOutputStream.write(buffer, 0, len); - } - servletOutputStream.flush(); - file.close(); - servletOutputStream.close(); - log.info("文件{}下载成功", fileName); - } catch (Exception e) { - log.error("文件名: " + fileName + "下载文件时出现异常: " + e); - } - } -``` - -### 删除文件 - -**MinIOService.java** - -````java - /** - * 删除文件 - * - * @param fileName 文件名 - */ - void deleteFile(String fileName); -```` - -**MinIOServiceImpl.java** - -```java - /** - * 删除文件 - * - * @param fileName 文件名 - */ - @Override - public void deleteFile(String fileName) { - // 获取桶名 - String bucketName = minioProperty.getBucketName(); - try { - if (StringUtils.isBlank(fileName)) { - log.error("删除文件失败,文件名为空!"); - return; - } - // 判断桶是否存在 - boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); - // 桶存在 - if (isExist) { - minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build()); - } else { // 桶不存在 - log.error("删除文件失败,桶{}不存在", bucketName); - } - } catch (Exception e) { - log.error("删除文件时出现异常: " + e.getMessage()); - } - } -``` - -### 获取文件预览URL - -**MinIOService.java** - -```java - /** - * 获取文件预览url - * - * @param fileName 文件名 - * @return - */ - String getPresignedUrl(String fileName); -``` - -**MinIOServiceImpl.java** - -```java - /** - * 获取文件预览url - * - * @param fileName 文件名 - * @return 文件预览url - */ - @Override - public String getPresignedUrl(String fileName) { - // 获取桶名 - String bucketName = minioProperty.getBucketName(); - String presignedUrl = null; - try { - if (StringUtils.isBlank(fileName)) { - log.error("获取文件预览url失败,文件名为空!"); - return presignedUrl; - } - // 判断桶是否存在 - boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); - // 桶存在 - if (isExist) { - presignedUrl = minioClient.getPresignedObjectUrl( - GetPresignedObjectUrlArgs.builder() - .method(Method.PUT) - .bucket(bucketName) - .object(fileName) - .expiry(1, TimeUnit.DAYS) // 一天过期时间 - .build()); - return presignedUrl; - } else { // 桶不存在 - log.error("获取文件预览url失败,桶{}不存在", bucketName); - } - } catch (Exception e) { - log.error("获取文件预览url时出现异常: " + e.getMessage()); - } - return presignedUrl; - } -``` - diff --git a/docs/zh/technical/Basic-knowlegde/1-Overview.md b/docs/zh/technical/Basic-knowlegde/1-Overview.md deleted file mode 100644 index b1e14ac..0000000 --- a/docs/zh/technical/Basic-knowlegde/1-Overview.md +++ /dev/null @@ -1,57 +0,0 @@ -# 开源社团基础知识分享仓库 - -欢迎来到开源基础知识分享仓库!这里是一个旨在分享和学习开源基础知识的地方。无论您是初学者还是有经验的开发者,都可以在这里找到有用的资源和信息。 - -## 目录 - -1. 什么是开源? -2. 开源许可证 -3. 如何参与开源项目 -4. 常见的开源工具和平台 -5. 学习资源推荐 - -## 什么是开源? - -开源是指将软件、代码或项目的源代码公开并允许他人查看、使用、修改和分发的开发模式。通过开源,人们可以自由地学习、改进和共享软件,促进了协作和创新。 - -## 开源许可证 - -开源许可证是一种法律协议,规定了使用、修改和分发开源软件或代码的条件。常见的开源许可证包括 GNU 通用公共许可证 (GPL)、MIT 许可证、Apache 许可证等。了解不同类型的开源许可证对于合理地选择和使用开源项目至关重要。 - -## 如何参与开源项目 - -参与开源项目可以帮助您提高编程技能、扩展社交网络,并为开源社区做出贡献。以下是一些参与开源项目的常见方式: - -* 寻找感兴趣的项目并开始阅读其文档和源代码。 -* 提交 bug 报告或修复现有的 bug。 -* 添加新功能或改进现有功能的代码。 -* 参与社区讨论和交流,提供反馈和建议。 -* 编写和改进项目的文档。 - -## 常见的开源工具和平台 - -在开源世界中,有许多工具和平台可用于管理、协作和分享开源项目。以下是一些常见的开源工具和平台: - -* GitHub:一个广泛使用的代码托管平台,提供版本控制、协作功能和社区支持。 -* GitLab:类似于 GitHub 的代码托管平台,也提供版本控制和协作功能。 -* Bitbucket:另一个代码托管平台,支持 Git 和 Mercurial。 -* SourceForge:一个老牌的开源项目托管平台,提供代码托管和项目管理功能。 -* GNU Savannah:GNU 项目的官方托管平台,专注于自由软件项目。 - -## 学习资源推荐 - -🚀学习开源基础知识是参与开源项目的关键。以下是一些学习资源推荐: - -* [Linux/Unix常用命令](./Linux_command.md) - -* [常用Windows终端命令](./Windows_command.md) - -* [Git](./git_command.md) - -* [docker命令](./docker_command.md) - -* [Markdown](./Markdown.md) - -* [Open Source Guides](https://opensource.guide/):由 GitHub 提供的一系列开源指南,涵盖了开源项目的各个方面。 -* [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/):一篇详细介绍如何参与开源项目的指南。 - \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/Linux_command.md b/docs/zh/technical/Basic-knowlegde/Linux_command.md deleted file mode 100644 index 5b9892d..0000000 --- a/docs/zh/technical/Basic-knowlegde/Linux_command.md +++ /dev/null @@ -1,466 +0,0 @@ -# Linux/Macos 常用命令 - -本文介绍了一些常用的 Linux 命令,可用于在终端中执行各种操作和管理任务。 - -## 目录操作 - -pwd :显示当前工作目录的路径。 - -``` -pwd -``` - -ls:列出当前目录的内容。 - -``` -ls -``` - -cd :切换到指定目录。 - -``` -cd -``` - -mkdir :创建一个新目录。 - -``` -mkdir -``` - -rm :删除指定的文件。 - -``` -rm -``` - -rm -r :递归删除指定的目录及其内容。 - -``` -rm -r -``` - -cp :将文件或目录从源位置复制到目标位置。 - -``` -cp -``` - -mv :将文件或目录从源位置移动到目标位置。 - -``` -mv -``` - -计算当前目录(包括子目录)下cpp,h,py代码行总数 - -``` -grep -r '' --include=*.{cpp,h,py} . | wc -l -``` - -or (on macos) - -``` -find . -maxdepth 2 \( -name '*.cpp' -o -name '*.h' -o -name '*.py' \) -print0 | xargs -0 cat | wc -l -``` - -递归查询命名包含`_hmp`的文件 - -``` -find /root/miniconda3/envs/deoldify_py39/ -type f -name '*_hmp*' - -``` - -## 文件操作 - -cat :显示文件的内容。 - -``` -cat -``` - -head :显示文件的前几行。 - -``` -head -``` - -tail :显示文件的最后几行。 - -``` -tail -``` - -touch :创建一个新文件。 - -``` -touch -``` - -nano :使用文本编辑器 Nano 打开文件进行编辑。 - -``` -nano -``` - -grep :在文件中搜索匹配指定模式的行。 - -``` -grep -``` - -du : 查看文件或文件夹大小 - -``` -du -h --max-depth=0 directory -``` - -## 互传文件 - -#### 本地向Linux传文件 - -* scp命令 - -``` -scp /path/to/local/file username@remote_host:/path/to/destination -``` - -* sftp - -``` -sftp username@remote_host -put /path/to/local/file /path/to/destination -``` - -#### Linux向本地传文件 - -* scp命令 - -``` -scp username@remote_host:/path/to/file /path/to/destination -``` - -* sftp - -``` -sftp username@remote_host -get /path/to/file /path/to/destination -``` - -#### 如果需要传输文件夹 就在scp命令后加一个参数-r - -下例是Linux向本地传输文件夹 - -``` -scp -r username@remote_host:/path/to/folder /path/to/destination -``` - -## 系统管理 - -top:显示系统中正在运行的进程和资源使用情况。 - -``` -top -``` - -ps:显示当前用户的进程状态。 - -``` -ps -``` - -df:显示磁盘使用情况。 -``` -df -``` - -iostat:显示磁盘的相关信息。 -``` -iostat -``` - -kill :终止指定进程。 - -``` -kill -``` - -which :查找命令的位置。 -``` -which -``` - -shutdown:关闭系统。 - -``` -shutdown -``` - -reboot:重启系统。 - -``` -reboot -``` - -## 网络管理 - -ping :测试与指定主机的连通性。 - -``` -ping -``` - -ifconfig:显示网络接口的配置信息。 - -``` -ifconfig -``` - -ip addr:显示网络接口的 IP 地址信息。 - -``` -ip addr -``` - -netstat:显示网络连接和统计信息。 - -``` -netstat -``` - -查看端口占用情况 - -``` -netstat -apn | grep LISTEN -``` - -lsof命令查看具体端口占用情况 - -``` -sudo lsof -i :端口号 -``` - -ssh @:通过 SSH 连接到远程主机。 - -``` -ssh @ -``` - -删除ssh host - -``` -ssh-keygen -R -``` - -查看防火墙已开放的端口 - -``` -firewall-cmd --zone=public --list-ports -``` - -添加开放的端口80 - -``` -firewall-cmd --zone=public --add-port=80/tcp --permanent -``` - -重载防火墙策略 - -``` -firewall-cmd --reload -``` - -查看指定的端口(比如) - -``` -firewall-cmd --zone=public --query-port=80/tcp -``` - -删除开放的端口80 - -``` -firewall-cmd --zone=public --remove-port=80/tcp --permanent -``` - -curl:发送网络请求。 -``` -curl url -``` - -#### 终端代理加速proxychains4 - -``` -sudo apt install proxychains4 -sudo vim /etc/proxychains4.conf -``` - -注释掉socks4 改为以下示例 -`socks5 127.0.0.1 7890` - -### 网络扫描 - -nmap - -``` -nmap -sn 192.168.137.0/24 -nmap -sn 192.168.0.0/16 -``` - -bettercap - -``` -sudo bettercap -net.probe on -net.show -``` - - -## 压缩和解压缩 - -tar -czvf :将指定目录压缩为 .tar.gz 归档文件。 - -``` -tar -czvf -``` - -tar -xzvf :解压缩 .tar.gz 归档文件。 - -``` -tar -xzvf -``` - -zip :将指定文件打包为 .zip 压缩文件。 - -``` -zip -``` - -unzip :解压缩 .zip 压缩文件。 - -``` -unzip -``` - -## 用户及权限管理 - -添加新用户 - -``` -sudo adduser -``` - -给用户设置密码 - -``` -passwd -``` - -给用户设置root权限 - -``` -sudo usermod -aG sudo -``` - -进入超级用户模式 - -``` -sudo su -``` - -或者 - -``` -sudo -s -``` - -退出超级用户模式 - -``` -exit -``` - -## 查看硬件信息 - -查看cpu信息 - -``` -cat /proc/cpuinfo -``` - -或者 - -``` -lscpu -``` - -查询内存信息 - -``` -cat /proc/meminfo -``` - -查询硬盘信息 - -``` -df -h -``` - -查询gpu信息 - -``` -lspci | grep -i vga -``` - -如果安装了nvdia驱动 则可以执行 - -``` -nvidia-smi -``` - -## 分区操作 - -检查分区组可用空间 - -``` -vgdisplay -``` - -初始化硬盘 - -``` -pvcreate /dev/sdb1 -``` - -添加至分区组 - -``` -vgextend cs_win10pe /dev/sdb1 -``` - -若有可用空间,添加分区组容量 - -``` -lvextend -L +10G /dev/mapper/cs_win10pe-root -``` - -调整文件系统大小 -ext4 - -``` -resize2fs /dev/mapper/cs_win10pe-root -``` - -xfs - -``` -xfs_growfs /dev/mapper/cs_win10pe-root -``` -## 动态库链接查询 -ldd(List Dynamic Dependencies) -``` -ldd -``` -otool(on macos) -``` -otool -L -``` \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/Markdown.md b/docs/zh/technical/Basic-knowlegde/Markdown.md deleted file mode 100644 index ae79aef..0000000 --- a/docs/zh/technical/Basic-knowlegde/Markdown.md +++ /dev/null @@ -1,1090 +0,0 @@ -# Markdown - -## 介绍 - -### 简介 - -- Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。 - -- 然后转换成有效的XHTML(或者HTML)文档,同时可以与HTML混编。 - -- 支持导出为HTML、PDF等格式的文件。 - -- 被大量应用于网络平台的写作,如Github、Gitee、Wikipedia(维基百科)等常用的网站中,以及各类技术网站、个人博客、网络教育、内容管理系统等。 - -- 官方文档:[Markdown 基本语法 | Markdown 官方教程](https://markdown.com.cn/basic-syntax/) - -- ### 发展历史 - -- Markdown由John Gruber在2004年创造。在语法上有很大一部分是跟亚伦·斯沃茨(Aaron Swartz)共同合作的 - -- John Gruber是一位网络作家、软件工程师和UI设计师,他在写作时发现传统的网页语言过于繁琐,影响了写作的效率和乐趣。于是他创造了Markdown,希望通过这种新型的标记语言,使文本编辑变得简单明了。 - -- 但是刚刚诞生的Markdown和现在的markdown有很多不同之处: - - - **语法拓展**:原生的Markdown语法支持的元素相对有限,例如不支持表格。而现在的Markdown,特别是各种衍生版本如GitHub Flavored Markdown(GFM),**增加了对表格、围栏式代码块、任务列表等的支持**,这些功能大大增强了Markdown的实用性和灵活性。 - - - **编辑器发展**:最初的Markdown使用者主要依赖于纯文本编辑器进行文档编写。随着技术的发展,现在市面上出现了许多专门针对Markdown编辑的应用程序,如**Typora、VS Code**等,这些工具不仅提供了丰富的编辑功能,还支持实时预览,极大地提升了用户的写作体验。 - - - **平台集成**:Markdown最初主要被技术写作者和程序员使用。但现在,它已经**成为许多内容创作平台和学习平台的**标准或可选**编辑工具**,如GitHub、WordPress、Hugo等,这些平台的集成使得Markdown的应用范围大大扩展。 - - - **社区生态**:Markdown的社区生态也发生了巨大变化。现在,有许多在线平台和社区专门为Markdown用户提供支持和资源,包括教程、插件、主题开发等,这些资源的丰富性为Markdown的发展提供了强有力的支持。 - - - **语法标准化**:虽然原生Markdown语法相对简单,但随着各种“方言”的出现,也带来了一定的混乱。现在,尽管仍然存在多种衍生语法,社区也在努力推动一些**标准化**的努力,以减少混淆并**提高兼容性**。 - - - **兼容性适应性**:原生的Markdown就具有良好的HTML兼容性,这一点在现代的Markdown编辑器中得到了保留和扩展。现代编辑器不仅支持直接导出为HTML,还支持**导出为PDF等多种格式**,使得文档的分享和发布更加方便。 - - - **可访问性**:随着Markdown的普及,越来越多的工具和平台开始关注Markdown文档的可访问性,例如通过**支持自定义CSS和JavaScript**来改善视觉障碍用户的阅读体验。 - - - **教育领域应用**:Markdown因其简洁性逐渐**成为教育领域的教学和学习工具**。教师和学生利用Markdown整理和分享知识,促进了学术信息的共享和传播。 - -- **总结**:自诞生以来,Markdown凭借其简洁性和灵活性迅速获得了广泛的认可和应用,成为了网络写作和文档编辑的重要工具。 - - - -### 主要特点 - -- **简洁性**:Markdown的语法设计非常直观,学习曲线平缓,用户可以在短时间内掌握基本的文档编辑技巧。 - -- **可读性**:即使不经过转换,Markdown格式的文本也能保持良好的可读性,这得益于其清晰的标记规则和纯文本的特性。 - -- **转换灵活性**:Markdown文档可以轻松转换为多种格式,包括但不限于HTML、PDF,这一特性使得它能够在不同平台和设备上无缝展示,极大地增强了文档的兼容性和适用性。 - - -### Markdown的优势与局限性 - -#### 优势 - -- **易于学习使用**:基础语法简单,用户无需专业知识即可快速上手。 - -- **兼容性强**:广泛适用于不同的平台和设备,无论是Windows、macOS还是Linux,都有对应的编辑器支持Markdown。 - -- **格式转换灵活**:轻松转换为HTML、PDF等格式,方便分享和发布,这对于需要在不同平台发布内容的内容创作者来说尤其重要。 - -#### 局限性 - -- **功能有限**:对于复杂格式和高级排版,Markdown的支持不如专业的文档处理软件,如Word或LaTeX。 - - > 关于LaTeX - > - > > 了解: - > > - > > [LaTeX:什么是LaTeX? - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/349047279) - > - > > 学习: - > > - > > [LaTeX 入门 - OI Wiki (oi-wiki.org)](https://oi-wiki.org/tools/latex/) - > > - > > [论文写作利器---LaTeX教程(入门篇)(更新中)_sci tex通用模板-CSDN博客](https://blog.csdn.net/brave_stone/article/details/88913010) - > - > > 官网: - > > - > > https://www.latex-project.org/ - -- **图像和表格处理**:在一些编辑器中,图像和表格的处理可能不够直观,需要用户有一定的耐心和技巧。 - -- **依赖第三方工具**:虽然有许多优秀的Markdown编辑器,但用户在选择和使用这些工具时可能需要花费额外的时间和精力。 - - -## 支持软件的介绍、下载与安装 - -### 支持软件 - -- 常见的软件,比如Vscode、typora、obsidian等; - -- 另外还有: - - - Mark Text - - - 它并没有采用普遍的双栏模式,而是使用了和 Typora 一样的“所见即所得” - - 支持 [CommonMark Spec](https://sspai.com/link?target=https%3A%2F%2Fspec.commonmark.org%2F0.29%2F) 和 [GitHub Flavored Markdown Spec](https://sspai.com/link?target=https%3A%2F%2Fgithub.github.com%2Fgfm%2F) 这两个 Markdown 扩展、数学表达式(KaTeX)、front matter 和 emoji。它还有各种预设主题,以后还会开放自己导入主题的功能。 - - 官方网站链接:[https://marktext.app/](https://sspai.com/link?target=https%3A%2F%2Fmarktext.app%2F) - - - VNote - - VNote 使用 C++ 开发,基于 Qt 5.9。它号称是更懂程序员和 Markdown 的笔记软件,虽然看上去并不十分美观,但它的功能很强大。它有 **Vim** 模式和一系列强大的快捷键、可以直接从剪切板插入图片、支持 [Mermaid](https://sspai.com/link?target=http%3A%2F%2Fknsv.github.io%2Fmermaid%2F)、 [Flowchart.js](https://sspai.com/link?target=http%3A%2F%2Fflowchart.js.org%2F)、 [MathJax](https://sspai.com/link?target=https%3A%2F%2Fwww.mathjax.org%2F)、 [PlantUML](https://sspai.com/link?target=http%3A%2F%2Fplantuml.com%2F) 和 [Graphviz](https://sspai.com/link?target=http%3A%2F%2Fwww.graphviz.org%2F)、强大的原地预览(图片、图表、公式)等功能,是一个很懂程序员的强大 Markdown 编辑器。 - - 链接:[https://tamlok.github.io/vnote](https://sspai.com/link?target=https%3A%2F%2Ftamlok.github.io%2Fvnote); - - - 思源笔记 - - 一款隐私优先、自托管且完全开源的个人知识管理系统,使用 typescript 和 golang 编写。 - - 思源笔记是一款 Markdown 块级引用和双向链接的开源且跨平台的云笔记和网状笔记应用,支持 Windows、Mac 和 Linux,可在浏览器上直接使用,支持移动端适配。 - - 链接:[思源笔记 - 隐私优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接 (b3log.org)](https://b3log.org/siyuan/) - -### 支持软件下载 - -- Typora:[Typora 官方中文站 (typoraio.cn)](https://typoraio.cn/) - -- Obsidian:[Obsidian - Sharpen your thinking](https://obsidian.md/) -- 中文论坛下载地址:[Thoughts (teambition.com)](https://thoughts.teambition.com/share/62a131711a6baa00416a79d3#title=Obsidian_安装包) -- 中文论坛使用指南:[obsidian新手不完全指南 - 经验分享 - Obsidian 中文论坛](https://forum-zh.obsidian.md/t/topic/1628) - -- Vscode:[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/) - -- 其他的请自行搜索下载安装 - - -## 配置编写环境 - -- 配置文件选项: - - 启动选项 - - 大纲 - - 保存和恢复 - -- 编辑器: - - 缩进 - - 成对符号 - - 拼写检查 - -- Markdown - - 语法偏好 - - 拓展语法 - - 代码块 - -- 外观 - - 窗口样式 - - 主题(可单独调整) - - 主题自定义 - -- 通用 - -- typora服务器 - - -## 语法讲解 - -### 基本语法 - -官方文档[Markdown 基本语法 | Markdown 官方教程](https://markdown.com.cn/basic-syntax/) - -#### 标题语法 - -**语法:** - -``` -# 第一级标签 -## 第二级标签 -### 第三级标签 -#### 第四级标签 -##### 第五级标签 -###### 第六级标签 -``` - -**效果:** *(技术文档展示时会出现些许问题,且同样无法展示图片,故采用转义字符展示)* - -\# 第一级标签 - -\## 第二级标签 - -\### 第三级标签 - -\#### 第四级标签 - -\##### 第五级标签 - -\###### 第六级标签 - -**快捷键:** - -一级标题: Ctrl + 1 - -二级标题: Ctrl + 2 - -三级标题: Ctrl + 3 - -四级标题: Ctrl + 4 - -五级标题: Ctrl + 5 - -六级标题: Ctrl + 6 - -**注意点:** - -> 不同的 Markdown 应用程序处理 `#` 和标题之间的空格方式并不一致。为了兼容考虑,请用一个空格在 `#` 和标题之间进行分隔。 -> -> ![Tag](../../../public/technical/Basic-knowledge/markdown/Tag.png) - -*在官方文档中另外有一可选语法,想要了解的同学请搜索官方文档查看* - ---- - -#### 段落语法 - -**语法:** - -``` -直接编写文档即可,基本没有特定格式和语法限制 -``` - -**效果:** - -直接编写文档既可,基本没有特定格式和语法限制 - -**注意点:** - -> 不要用空格(spaces)或制表符(tabs)缩进段落。 -> -> ![Paragraphs](../../../public/technical/Basic-knowledge/markdown/Paragraphs.png) - ---- - -#### 换行语法 - -**语法:** - -``` -文段(空格)(空格)... [Enter回车] -文段(空格)(空格)... [Enter回车] - -或者 - -文段 -[Enter回车] -文段 -...... -``` - -**效果:** - -文档 - -文档 -打开源代码模式可以看到`文档`后面有`↓`,即是换行) - -或者 - -文档 - -文档 -这个不是语法,只是在两段文字中间回车换行表示开启一个新的段落) - -**注意点:** - -> 几乎每个 Markdown 应用程序都支持两个或多个空格进行换行,称为 `结尾空格(trailing whitespace)` 的方式,但这是有争议的,因为很难在编辑器中直接看到空格,并且很多人在每个句子后面都会有意或无意地添加两个空格。由于这个原因,你可能要使用除结尾空格以外的其它方式来换行。幸运的是,几乎每个 Markdown 应用程序都支持另一种换行方式:HTML 的 `
` 标签。 -> -> 为了兼容性,请在行尾添加“结尾空格”或 HTML 的 `
` 标签来实现换行。 -> -> 还有两种其他方式我并不推荐使用。CommonMark 和其它几种轻量级标记语言支持在行尾添加反斜杠 (`\`) 的方式实现换行,但是并非所有 Markdown 应用程序都支持此种方式,因此从兼容性的角度来看,不推荐使用。并且至少有两种轻量级标记语言支持无须在行尾添加任何内容,只须键入回车键(`return`)即可实现换行。 -> ![Line-feed](../../../public/technical/Basic-knowledge/markdown/Line-feed.png) - ---- - -#### 强调语法 - -**语法:** - -- 粗体(Bold) - -``` -**文段1** -__文段2__ -``` - -- 斜体(Italic) - -``` -*文段1* -_文段2_ -``` - -- 下划线(underline) - -``` -Markdown没有实现下划线的语法,是直接引用HTML的来实现的。 -一般使用快捷键进行编写。 -在一些文章中提及不建议使用下划线,因为会和链接的样式类似,容易误解。 -``` - -- 高亮(highlight) - -``` -==文段==(不同主题或者不同编辑器,高亮的背景颜色可能会不一样) -``` - -- 粗体 + 斜体混合使用 - -**上述四种引用方式均可混用,在这里只展示粗体和斜体** - -``` -示例: -Markdown是一种**轻量级*标记*语言**,排版语法简洁,让人们更多地**关注*内容本身*而非排版**。// 粗体包含斜体 -Markdown是一种*轻量级**标记**语言*,排版语法简洁,让人们更多地*关注**内容本身**而非排版*。// 斜体包含粗体 -Markdown是一种__轻量级_标记_语言__,排版语法简洁,让人们更多地__关注_内容本身_而非排版__。// 粗体包含斜体 -Markdown是一种_轻量级__标记__语言_,排版语法简洁,让人们更多地_关注__内容本身__而非排版_。// 斜体包含粗体 - -Markdown是一种***轻量级标记语言***,排版语法简洁,让人们更多地***关注内容本身而非排版***。// 粗体 + 斜体 -Markdown是一种___轻量级标记语言___,排版语法简洁,让人们更多地___关注内容本身而非排版___。// 粗体 + 斜体 -``` - -**效果:** - -- 粗体: - -**文段1** - -__文段2__ - -- 斜体: - -*文段1* - -_文段2_ - -- 下划线: - -文段 - -- 高亮: - -==文段==(不同`主题`或者不同`编辑器`,高亮的颜色会不同) - -*可能没有正常展示,在编辑器中是有效果的,可以下载下来进行查看* - -- 粗体 + 斜体 混合使用: - -Markdown是一种**轻量级*标记*语言**,排版语法简洁,让人们更多地**关注*内容本身*而非排版**。 -// 粗体包含斜体 - -Markdown是一种*轻量级**标记**语言*,排版语法简洁,让人们更多地*关注**内容本身**而非排版**。 -// 斜体包含粗体 - -Markdown是一种***轻量级标记语言***,排版语法简洁,让人们更多地***关注内容本身而非排版***。 -// 斜体 + 粗体 - -**快捷键:** - -- 粗体:Ctrl + B -- 斜体:Ctrl + I -- 下划线:Ctrl + U -- 高亮默认没有快捷键,有需要的可以查询如何设置; - -**注意点:** - -- 粗体: - -> Markdown 应用程序在如何处理单词或短语中间的下划线上并不一致。为兼容考虑,在单词或短语中间部分加粗的话,请使用星号(asterisks)。 -> -> ![Emphasis-bold](../../../public/technical/Basic-knowledge/markdown/Emphasis-bold.png) - ---- - -#### 引用语法 - -**语法:** - -##### 单个段落的块引用 - -``` -> 文段 -``` - -##### 多个段落的块引用 - -``` -> 文段1 -> -> 文段2 -``` - -##### 嵌套块引用 - -``` -> 文段1 -> ->> 文段2 -``` - -##### 其他元素的块引用 - -``` -> #### It's not whether you get knocked down, it's whether you get up. -> -> - Your attitude, not your aptitude, will determine your altitude. -> - What you do today can improve all your tomorrows. -> -> *It always* seems impossible until it's done. -``` - -**效果:** - -- 用法一: - -> 文段 - -- 用法二: - -> 文段1 -> -> > 文段2 - -- 用法三:*(技术文档展示时会出现些许问题,且同样无法展示图片,故采用转义符展示)* - ->/#### It's not whether you get knocked down, it's whether you get up. -> ->- Your attitude, not your aptitude, will determine youraltitude. ->- What you do today can improve all your tomorrows. -> ->*It always* seems impossible until it's done. - ---- - -#### 列表语法 - -**语法** - -##### 有序列表 - -- 写法一 - -``` -1.(空格)2.(空格)3.(空格)... -或者 -1.(空格)[Enter回车] -2.(空格)[Enter回车] -3.... -// 第二种按回车键自动生 -``` - -- 写法二 - -``` -// 同上,不再赘述 -1. 1. 1... -或者 -1. -1. -1. -... -``` - ---- - -##### 无序列表 - -- 标准 - -``` -三种符号均可: --(短横线 / 破折号)(空格)文段1 - -+(加号)(空格)文段2 - -*(星号)(空格)文段3 -``` - -- 在表格中嵌套其他语法 - - - 段落 - - ``` - - 文段1 - - 文段2 - [四个空格或者一个制表符]文段3 - - 文段4 - ``` - - - 引用块 - - ``` - - 文段1 - - 文段2 - [同上]> 文段3 - - 文段4 - ``` - - - 代码块 - - ``` - - 文段1 - - 文段2 - [缩进八个空格或者两个制表符] - - Test - - - 文段4 - ``` - - - 图片 - - ``` - - 文段1 - - 文段2 - ![Linux](../../../public/technical/Basic-knowledge/markdown/Linux.png) - // ![图片Alt](图片地址) - - 文段4 - ``` - - - 列表 - - ``` - 1. 文段1 - 2. 文段2 - - 内容1 - - 内容2 - 3. 文段4 - ``` - -**效果:** - -- 有序列表: - -1. 文段1 -2. 文段2 -3. 文段3 - - -- 无序列表 - - - 文段1 - - 文段2 - - 文段3 - -- 在表格中嵌套其他语法: - - - 段落 - - 1. 文段1 - 2. 文段2 - 内容1 - 内容2 - 3. 文段3 - - - 引用块 - - - 文段1 - - - 文段2 - - > 文段3 - - - 文段4 - - - 代码块 - - - 文段1 - - - 文段2 - - - Test - - - - 文段4 - - - 图片 - - - 文段1 - - 文段2 - ![Linux](../../../public/technical/Basic-knowledge/markdown/Linux.png) - - 文段4 - - - 列表 - - 1. 文段1 - 2. 文段2 - - - 内容1 - - 内容2 - - 3. 文段 - -**快捷键:** - -- 有序列表:Ctrl + Shift + [ -- 无序列表:Ctrl + Shift + ] - -**注意点:** - -- 有序列表 - -> CommonMark和其他一些轻量级标记语言允许您使用括号 (`)`) 作为分隔符(例如,`1)第一项`),但并非所有Markdown应用程序都支持这一点,因此从兼容性的角度来看,这不是一个很好的选择。所以为了兼容性考虑,请您使用英文句点。 -> -> **// 原文档没有翻译,使用了机翻,逻辑与表达上可能存在某些问题** -> -> ![List-Ordered](../../../public/technical/Basic-knowledge/markdown/List-Ordered.png) - -- 无序列表 - -> Markdown应用程序不支持如何处理同一列表中的不同分隔符。所以为了兼容性,请不要在同一个列表中混合和匹配分隔符——选择一个并一直使用下去。 -> -> **// 原文档没有翻译,使用了机翻,逻辑与表达上可能存在某些问题** -> -> ![List-unordered](../../../public/technical/Basic-knowledge/markdown/List-unordered.png) - ---- - -#### 代码语法 - -**语法:** - -- 用法一 - -想要将一个单词或者短语表示为代码:使用反引号(`` `)包裹它们。 - -``` -Success is not `final`, failure is not `fatal`: It is `the courage to continue that counts`. -``` - -- 用法二 - -想要表示为代码的单词或者短语中包含一个或者多个反引号:使用双反引号(` `` `)包裹它们。 - -``` -`` Success is not `how high you have climbed`, but how you `make a positive difference to the world.` `` -``` - -- 用法三 - -代码块 - -``` -// 想要创建一个代码块,请将代码块的每一行缩进**至少四个空格**或者**一个制表符** -Every adversity, every failure, every heartache carries with it the seed of an equal or greater benefit. -The road to success and the road to failure are almost exactly the same. - - - Test - - -``` - -*NOTE:如果要创建不用缩进的代码块,请使用 `围栏式代码块 `* - -**效果:** - -- 用法一: - - Success is not `final`, failure is not `fatal`: It is `the courage to continue that counts`. - -- 用法二: - - `` Success is not `how high you have climbed`, but how you `make a positive difference to the world.` `` - -- 用法三: - - - - - Test - - - - - // 中间的为代码块,区别于围栏式代码 - ---- - -#### 分割线语法 - -**语法:** - -``` -三种符号均可: -第一种:***(星号) - -第二种:---(短横线 / 破折号) - -第三种:___(下划线)// 三条下划线 -``` - -**效果:** - -- 第一种:*** - -*** - -- 第二种:--- - ---- - - -- 第三种:___ - -___ - -**注意点:** - -> 为了兼容性,请在分隔线的前后均添加空白行。 -> -> ![Segmentation](../../../public/technical/Basic-knowledge/markdown/Segmentation.png) - ---- - -#### 链接语法 - -**语法:** - -- 第一种 - -``` -[超链接显示名](超链接地址) -``` - -- 第二种 - -当鼠标悬停在链接上时会出现的文字 - -``` - [超链接显示名](超链接地址 (空格) "超链接Title") -``` - -- 第三种 - -直接显示网址和Email地址 - -``` -// 尖括号包裹 - - -``` - -- 第四种:强调链接 - -``` -We can learn the basic grammer in **[markdown基本语法](https://markdown.com.cn/intro.html)** -``` - -*第五种:引用类型链接:内容过多,不再赘述这一小点* - -**效果:** - -- 第一种: - -[网站名称](网站地址) - -- 第二种: - -[网站名称](网站地址 "这是该网站的Title") - -- 第三种: - - - - -- 第四种: - -We can learn the basic grammer in **[markdown基本语法](https://markdown.com.cn/intro.html)** - ---- - -#### 图片语法 - -**语法:** - -- 用法一 - -标准使用方法 - -``` -![图片名称](图片在本地的地址 "图片的Title") -// 图片的Title与链接Title相同,都是在鼠标悬停在其上是显示Title -``` - -- 用法二 - -为图片添加链接,点击图片跳转至对应网页 - -``` -[![图片名称](图片在本地的地址 "图片的Title")](点击图片跳转的网址) -``` - -**效果:** - - - 第一种: - -![Example1](../../../public/technical/Basic-knowledge/markdown/Example1.png) - -- 第二种: - -[![示例图片2](../../../public/technical/Basic-knowledge/markdown/Example2.png)](https://markdown.com.cn/) - -==需要按住`Crtl`,并且点击图片,才能跳转网页== - -**快捷键:** - -- 插入图片:Crtl + Shift + I - ---- - -#### 转义字符语法 - -**语法:显示本需要格式化 Markdown 文档的字符**,即显示上述部分语法用到的符号。 - -``` -\* Challenges are what make life interesting and overcoming them is what makes life meaningful. -``` - -**效果:** - -\* Challenges are what make life interesting and overcoming them is what makes life meaningful. - -**可做出转义的字符:** - -| 符号 | 名称 | -| --------- | --------------- | -| \| 反斜线 | | -| ` | 反引号 | -| * | 星号 | -| _ | 下划线 | -| { } | 大括号 | -| [ ] | (方)括号 | -| ( ) | (圆)括号 | -| # | 井号 | -| + | 加号 | -| - | 破折号 / 短横线 | -| . | 英文句点 | -| ! | 感叹号 | -| \| | 竖线 | - -==所有符号都是英文字符== - ---- - -#### 内嵌HTML标签语法 - -**即Markdown语法可以与HTML语法混用** - - - -### 拓展语法 - -#### 上下标公式 - -**语法:** - -``` -上标:^x^ -下标:~y~ -``` - -**效果** - -- 上标:2^X^ - -- 下标:5~Y~ - ---- - -#### 表格 - -**语法:**==使用改语法较为复杂,一般建议使用`` 快捷键`Ctrl + T` ``来创建表格== - -``` - | 内容 | 内容 | - | 内容 | 内容 | - | 内容 | 内容 | -``` - -**效果:** - -| Syntax | Description | -| --------- | ----------- | -| Header | Title | -| Paragraph | Text | - -==表格还有一些用法,比较复杂,建议查看官方文档== - -**[Markdown 表格 | Markdown 官方教程](https://markdown.com.cn/extended-syntax/tables.html)** - ---- - -#### 删除线 - -**语法:** - -``` -~~文段~~ -``` - -**效果:** - -~~文段~~ - ---- - -#### 任务列表 - -**语法:** - -``` - -[x] 任务1 - -[] 任务2 - -[] 任务3 -``` - -**效果:** - -- [x] 任务1 - -- [ ] 任务2 - -- [ ] 任务3 - -==不同主题不同样式== - ---- - -#### emoji表情 - -**语法:** - -``` -:(对应的英文单词): -// 有些英文单词没有对应emoji,但是会出现相关的 -// 比如就没有`:sad:`,但是就有`:disappointed`;`cry`等相关的emoji -``` - -**效果** - -:happy: - -:sad: - -:disappointed: - ---- - -#### 数学公式语法 - -**语法:** - -- 文段内 / 行内:输入`$` + `Esc` - -``` -示例:这是前半部分内容 $+Esc 这是后段部分内容 -``` - -- 文段中间 / 行间:输入`$$` + `Enter回车` - -``` -这是前一段文段 - -\$$ [Enter回车] -//因为网站框架限制,在$$前面添加了转义字符/,实验的时候记得删除 - -这是后一段文段 -``` - -**效果:** - -- 行内: - -这是前半部分内容 $x_1^2$ 这是后端部分内容 - -- 行间 - -这是前一段文段 -$$ -a^2 + b^2 = c^2 -$$ -这是后一段文段 - -**注意点:** - - > 公式当中的上下标写法和直接输入上下标的语法不同 - > - > > 在公式中: - > > - > > - 上标:`a^2`,对应效果:$a^2$ - > > - 下标:`a_1`,对应效果:$a_1$ - > > - > > **下标的符号**和直接输入的符号有所不同 - > - > > 另外:在公式中的上下标是可以同时在一个基底上的 - > > - > > - 公式输入:$a_1^2$ - > > - > > - 而直接输入:a~1~^2^ - > > - > > 是没法在同一基底上的,也是直接输入的**局限性** - > > - > > *在`实战演练.md`中有出现过这道题* - -**快捷键:** - -- 创建公式块:Ctrl +Shift +M - - - -**公式还有很多用法,例如数学公式的运算符、结构以及希腊字母等,就不一一赘述了,这边给同学们提供参考文章:** - -**[使用Markdown语法编写数学公式(详细版)_markdown写公式-CSDN博客](https://blog.csdn.net/wzk4869/article/details/126863936)** - -**也可以自行搜索了解** - ---- - -#### 脚注语法 - -**用于为对应文字或短语添加注释** - -**语法:** - -``` -// 在需要注释的文字或者语段后添加: -[^1] - -// 并在该文字或语段后面的任意位置同样输入 `[^1]` 并在其后添加对应注释: -[^1]:(这是文字的对应注释) - -// **注释建议添加在文章末尾** -``` - -**效果:** - -这是一段文字,这是需要注释[^1]的内容 - -[^1]: 这是注释的内容 - -*鼠标悬浮在`脚注1`上即可看见对应的注释* - -*点击注释后的**返回符号**即可转跳到对应的**文字或文段* - -**注意点:** - -> Typora貌似并不支持多行注解,烦请各位想学习的同学自行查找实验 - -> **文段的注释一般建议添加在末尾,或者后文中会出现的地方** - - - -**这边也提供一些文档供大家参考学习:** - -官方文档:[Markdown 脚注 | Markdown 官方教程](https://markdown.com.cn/extended-syntax/footnotes.html) - -其他文章:[15---脚注(footnote)_markdown脚注-CSDN博客](https://blog.csdn.net/weixin_73453526/article/details/132377079) - - - -### 高级语法概述 - -Markdown还有很多高级用法,比如: - -#### **流程图** - -![Flow-chart](../../../public/technical/Basic-knowledge/markdown/Flow-chart.png) - -#### **时序图,也称序列图** - -![Sequence-diagram](../../../public/technical/Basic-knowledge/markdown/Sequence-diagram.png) - -#### **思维导图** - -![Logic-diagram](../../../public/technical/Basic-knowledge/markdown/Logic-diagram.png) - -#### **甘特图** - -![Gantt-chart](../../../public/technical/Basic-knowledge/markdown/Gantt-chart.png) - -- 甘特图(Gantt chart)又称为横道图、条状图(Bar chart),通过条状图来显示项目、进度和其他时间相关的系统进展的**内在关系**随着时间进展的情况。以提出者**亨利·劳伦斯·甘特**(Henry Laurence Gantt)先生的名字命名。 -- 百度百科:[甘特图_百度百科 (baidu.com)](https://baike.baidu.com/item/甘特图/113232) -- 亨利·劳伦斯·甘特:[亨利·劳伦斯·甘特_百度百科 (baidu.com)](https://baike.baidu.com/item/亨利·劳伦斯·甘特/5141066?fromModule=lemma_inlink) - - -#### 参考文档 - -- 在这里就不多赘述了,给大家提供几篇参考文献,感兴趣可以去学习。 - - 汇总:[手把手教会你使用Markdown【从入门到精通一篇就够了】-CSDN博客](https://blog.csdn.net/qq_40818172/article/details/126260661) -- 配套的在线可编辑的Markdown教程:[Cmd Markdown 编辑阅读器 - 作业部落出品 (zybuluo.com)](https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown#cmd-markdown-高阶语法手册) - - 流程图:[Markdown 流程图绘制详解-CSDN博客](https://blog.csdn.net/u014696856/article/details/135616695) - - 思维导图:[Markdown绘制思维导图_markdown 思维导图-CSDN博客](https://blog.csdn.net/skytruine/article/details/105828748) - - 甘特图:[项目管理必备 | 10分钟学会用markdown高效画出超简洁的甘特图_markdown 甘特图-CSDN博客](https://blog.csdn.net/weixin_43207777/article/details/106331431) - - 时序图,也称叙述图:[Markdown如何画时序图,一篇就够了_markdown 时序图-CSDN博客](https://blog.csdn.net/zhw21w/article/details/125749449) \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/Python.md b/docs/zh/technical/Basic-knowlegde/Python.md deleted file mode 100644 index 0499b26..0000000 --- a/docs/zh/technical/Basic-knowlegde/Python.md +++ /dev/null @@ -1,1395 +0,0 @@ -[Python官网](https://www.python.org/) - -### 环境管理 - -管理 Python 版本和环境的工具 - -* [p](https://github.com/qw3rtman/p):非常简单的交互式 Python 版本管理工具。 -* [pyenv](https://github.com/yyuu/pyenv):简单的 Python 版本管理工具。 -* [Vex](https://github.com/sashahart/vex):可以在虚拟环境中执行命令。 -* [virtualenv](https://pypi.python.org/pypi/virtualenv):创建独立 Python 环境的工具。 -* [virtualenvwrapper](https://pypi.python.org/pypi/virtualenvwrapper):virtualenv 的一组扩展。 -* [buildout](http://www.buildout.org/en/latest):在隔离环境初始化后使用声明性配置管理。 - -### 包管理 - -管理包和依赖的工具。 - -* [pip](https://pip.pypa.io/):Python 包和依赖关系管理工具。 -* [pip-tools](https://github.com/nvie/pip-tools):保证 Python 包依赖关系更新的一组工具。 -* [PyPI](https://pypi.org/):Python 正式的第三方包软件存储库。 -* [pipenv](https://github.com/pypa/pipenv):Python 官方推荐的新一代包管理工具。 -* [poetry](https://poetry.eustace.io):可完全取代 setup.py 的包管理工具。 -* [conda](https://github.com/conda/conda/):跨平台的 Python 二进制包管理工具。 -* [Curdling](http://clarete.li/curdling/):管理 Python 包的命令行工具。 -* [wheel](http://pythonwheels.com/):Python 分发的新标准,意在取代 eggs。 - -### 包仓库 - -本地 PyPI 仓库服务和代理。 - -* [warehouse](https://github.com/pypa/warehouse):下一代 PyPI。 -* [bandersnatch](https://bitbucket.org/pypa/bandersnatch):PyPA 提供的 PyPI 镜像工具。 -* [devpi](http://doc.devpi.net/):PyPI 服务和打包/测试/分发工具。 -* [localshop](https://github.com/mvantellingen/localshop):本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。 - -### 分发 - -打包为可执行文件以便分发。 - -* [PyInstaller](https://github.com/pyinstaller/pyinstaller):将 Python 程序转换成独立的执行文件(跨平台)。 -* [cx_Freeze](https://cx-freeze.readthedocs.io/en/latest/index.html):将python程序转换为带有一个动态链接库的可执行文件。 -* [dh-virtualenv](http://dh-virtualenv.readthedocs.org/):构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。 -* [Nuitka](http://nuitka.net/):将脚本、模块、包编译成可执行文件或扩展模块。 -* [py2app](http://pythonhosted.org/py2app/):将 Python 脚本变为独立软件包(Mac OS X)。 -* [py2exe](http://www.py2exe.org/):将 Python 脚本变为独立软件包(Windows)。 -* [pynsist](http://pynsist.readthedocs.org/):一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。 -* [pyarmor](https://github.com/dashingsoft/pyarmor):一个用于加密 python 脚本的工具,也可以将加密后的脚本绑定到固件上,或设置已加密脚本的有效期。 -* [shiv](https://github.com/linkedin/shiv):一个命令行工具,可用于构建完全独立的 zip 应用(PEP 441 所描述的那种),同时包含了所有的依赖项。 - -### 构建工具 - -将源码编译成软件。 - -* [buildout](http://www.buildout.org/):一个构建系统,从多个组件来创建,组装和部署应用。 -* [BitBake](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html):针对嵌入式 Linux 的类似 make 的构建工具。 -* [fabricate](https://code.google.com/archive/p/fabricate):对任何语言自动找到依赖关系的构建工具。 -* [PlatformIO](https://github.com/platformio/platformio):多平台命令行构建工具。 -* [PyBuilder](https://github.com/pybuilder/pybuilder):纯 Python 实现的持续化构建工具。 -* [SCons](http://www.scons.org/):软件构建工具。 - -### 交互式解析器 - -交互式 Python 解析器。 - -* [IPython](https://github.com/ipython/ipython):功能丰富的工具,非常有效的使用交互式 Python。 -* [bpython](https://github.com/bpython/bpython):界面丰富的 Python 解析器。 -* [ptpython](https://github.com/jonathanslenders/ptpython):高级交互式 Python 解析器, 构建于 [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。 -* [Jupyter Notebook (IPython)](https://jupyter.org):一个能够让你最大限度地以交互式方式使用 Python 的丰富工具包。 - * [awesome-jupyter](https://github.com/markusschanta/awesome-jupyter) - -### 文件 - -文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 - -* [aiofiles](https://github.com/Tinche/aiofiles):基于 asyncio,提供文件异步操作。 -* [imghdr](https://docs.python.org/2/library/imghdr.html):(Python 标准库)检测图片类型。 -* [mimetypes](https://docs.python.org/2/library/mimetypes.html):(Python 标准库)将文件名映射为 MIME 类型。 -* [path.py](https://github.com/jaraco/path.py):对 os.path 进行封装的模块。 -* [pathlib](https://pathlib.readthedocs.org/en/pep428/):(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。 -* [python-magic](https://github.com/ahupp/python-magic):文件类型检测的第三方库 libmagic 的 Python 接口。 -* [Unipath](https://github.com/mikeorr/Unipath):用面向对象的方式操作文件和目录。 -* [watchdog](https://github.com/gorakhargosh/watchdog):管理文件系统事件的 API 和 shell 工具。 -* [PyFilesystem2](https://github.com/pyfilesystem/pyfilesystem2):Python 的文件系统抽象层。 - -### 日期和时间 - -操作日期和时间的类库。 - -* [arrow](https://github.com/crsmithdev/arrow):更好的 Python 日期时间操作类库。 -* [Chronyk](https://github.com/KoffeinFlummi/Chronyk):Python 3 的类库,用于解析手写格式的时间和日期。 -* [dateutil](https://pypi.python.org/pypi/python-dateutil):Python datetime 模块的扩展。 -* [delorean](https://github.com/myusuf3/delorean/):解决 Python 中有关日期处理的棘手问题的库。 -* [maya](https://github.com/kennethreitz/maya):人性化的时间处理库。 -* [pendulum](https://github.com/sdispater/pendulum):一个比 arrow 更具有明确的,可预测的行为的时间操作库。 -* [PyTime](https://github.com/shinux/PyTime):一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。 -* [pytz](https://launchpad.net/pytz):现代以及历史版本的世界时区定义。将时区数据库引入 Python。 -* [when.py](https://github.com/dirn/When.py):提供用户友好的函数来帮助用户进行常用的日期和时间操作。 -* [dateutil](https://github.com/dateutil/dateutil):Python 标准包 [datetime](https://docs.python.org/3/library/datetime.html) 的扩展。 -* [moment](https://github.com/zachwill/moment):一个处理日期/时间的库,灵感来自 [Moment.js](http://momentjs.com/)。 -* [pytz](https://launchpad.net/pytz):支持跨平台时区计算,并将 [tz database](https://en.wikipedia.org/wiki/Tz_database) 引入 Python。 - -### 文本处理 - -用于解析和操作文本的库。 - -* 通用 - * [chardet](https://github.com/chardet/chardet):字符编码检测器,兼容 Python 2 和 Python 3。 - * [difflib](https://docs.python.org/2/library/difflib.html):(Python 标准库)帮助我们进行差异化比较。 - * [ftfy](https://github.com/LuminosoInsight/python-ftfy):让 Unicode 文本更完整更连贯。 - * [thefuzz](https://github.com/seatgeek/thefuzz):模糊字符串匹配。 - * [Levenshtein](https://github.com/ztane/python-Levenshtein/):快速计算编辑距离以及字符串的相似度。 - * [pangu.py](https://github.com/vinta/pangu.py):在中日韩语字符和数字字母之间添加空格。 - * [pypinyin](https://github.com/mozillazg/python-pinyin):汉字拼音转换工具 Python 版。 - * [shortuuid](https://github.com/stochastic-technologies/shortuuid):一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。 - * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。 - * [unidecode](https://pypi.python.org/pypi/Unidecode):Unicode 文本的 ASCII 转换形式 。 - * [uniout](https://github.com/moskytw/uniout):打印可读的字符,而不是转义的字符串。 - * [xpinyin](https://github.com/lxneng/xpinyin):一个用于把汉字转换为拼音的库。 - * [pyfiglet](https://github.com/pwaller/pyfiglet):figlet 的 Python 实现。 - * [flashtext](https://github.com/vi3k6i5/flashtext):一个高效的文本查找替换库。 - * [textdistance](https://github.com/orsinium/textdistance):支持 30 多种算法来计算序列之间的距离。 -* Slug 化 - * [awesome-slugify](https://github.com/dimka665/awesome-slugify):一个 Python slug 化库,可以保持 Unicode。 - * [python-slugify](https://github.com/un33k/python-slugify):Python slug 化库,可以把 unicode 转化为 ASCII。 - * [unicode-slugify](https://github.com/mozilla/unicode-slugify):一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。 -* 解析器 - * [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers):解析,格式化,储存,验证电话号码。 - * [python-phonenumbers](https://github.com/daviddrysdale/python-phonenumbers):解析,格式化,存储,校验国际电话号码。 - * [PLY](http://www.dabeaz.com/ply/):lex 和 yacc 解析工具的 Python 实现。 - * [Pygments](http://pygments.org/):通用语法高亮工具。 - * [pyparsing](http://pyparsing.wikispaces.com/):生成通用解析器的框架。 - * [python-nameparser](https://github.com/derek73/python-nameparser):把一个人名分解为几个独立的部分。 - * [python-user-agents](https://github.com/selwin/python-user-agents):浏览器 user agent 解析器。 - * [sqlparse](https://sqlparse.readthedocs.org/en/latest/):一个无验证的 SQL 解析器。 - -### 特殊文本格式处理 - -一些用来解析和操作特殊文本格式的库。 - -* 通用 - * [tablib](https://github.com/kennethreitz/tablib):一个用来处理中表格数据的模块。 -* Office - * [Marmir](https://github.com/brianray/mm):把输入的 Python 数据结构转换为电子表单。 - * [openpyxl](https://openpyxl.readthedocs.org/en/latest/):一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。 - * [pyexcel](https://github.com/pyexcel/pyexcel):一个提供统一 API,用来读写,操作 Excel 文件的库。 - * [python-docx](https://github.com/python-openxml/python-docx):读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。 - * [python-pptx](https://github.com/scanny/python-pptx):可用于创建和修改 ppt 文件的 Python 库。 - * [relatorio](http://relatorio.tryton.org/):模板化 OpenDocument 文件。 - * [unoconv](https://github.com/dagwieers/unoconv):在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。 - * [XlsxWriter](https://xlsxwriter.readthedocs.org/en/latest/):一个用于创建 Excel .xlsx 文件的 Python 模块。 - * [xlwings](http://xlwings.org/):一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。 - * [xlwt](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd):读写 Excel 文件的数据和格式信息。 - * [docxtpl](https://github.com/elapouya/python-docx-template):通过 jinja2 模版编辑 docx 文档。 -* PDF - * [PDFMiner](https://github.com/euske/pdfminer):一个用于从 PDF 文档中抽取信息的工具。 - * [PyPDF2](https://github.com/mstamy2/PyPDF2):一个可以分割,合并和转换 PDF 页面的库。 - * [ReportLab](http://www.reportlab.com/opensource/):快速创建富文本 PDF 文档。 -* Markdown - * [Mistune](https://github.com/lepture/mistune):快速并且功能齐全的纯 Python 实现的 Markdown 解析器。 - * [Python-Markdown](https://github.com/waylan/Python-Markdown):John Gruber’s Markdown 的 Python 版实现。 - * [Python-Markdown2](https://github.com/trentm/python-markdown2):纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。 -* YAML - * [PyYAML](http://pyyaml.org/):Python 版本的 YAML 解析器。 -* CSV - * [csvkit](https://github.com/wireservice/csvkit):用于转换和操作 CSV 的工具。 -* Archive - * [unp](https://github.com/mitsuhiko/unp):一个用来方便解包归档文件的命令行工具。 - -### 自然语言处理 - -用来处理人类语言的库。 - -* [NLTK](http://www.nltk.org/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。 -* [gensim](https://github.com/piskvorky/gensim):人性化的话题建模库。 -* [jieba](https://github.com/fxsjy/jieba):中文分词工具。 -* [langid.py](https://github.com/saffsd/langid.py):独立的语言识别系统。 -* [Pattern](http://www.clips.ua.ac.be/pattern):Python 网络信息挖掘模块。 -* [SnowNLP](https://github.com/isnowfy/snownlp):一个用来处理中文文本的库。 -* [TextBlob](http://textblob.readthedocs.org/en/latest/):为进行普通自然语言处理任务提供一致的 API。 -* [TextGrocery](https://github.com/2shou/TextGrocery):一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。 -* [thulac](https://github.com/thunlp/THULAC-Python):清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包。 -* [polyglot](https://github.com/aboSamoor/polyglot):支持数百种语言的自然语言处理管道。 -* [pytext](https://github.com/facebookresearch/pytext):基于 PyTouch 的自然语言模型框架。 -* [PyTorch-NLP](https://github.com/PetrochukM/PyTorch-NLP):一个支持快速深度学习 NLP 原型研究的工具包。 -* [spacy](https://spacy.io/):Python 和 Cython 中用于工业级自然语言处理的库。 -* [Stanza](https://github.com/stanfordnlp/stanza):斯坦福 NLP 集团的官方 Python 库,支持 60 多种语言。 -* [funNLP](https://github.com/fighting41love/funNLP):中文自然语言处理的工具和数据集。 -* [pkuseg-python](https://github.com/lancopku/pkuseg-python):一个支持对不同领域进行中文分词的工具箱。 - -### 文档 - -用以生成项目文档的库。 - -* [Sphinx](http://www.sphinx-doc.org/en/latest/):Python 文档生成器。 - * [awesome-sphinxdoc](https://github.com/yoloseem/awesome-sphinxdoc) -* [MkDocs](http://www.mkdocs.org/):对 Markdown 友好的文档生成器。 -* [pdoc](https://github.com/BurntSushi/pdoc):一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。 -* [Pycco](https://github.com/pycco-docs/pycco):文学编程(literate-programming)风格的文档生成器。 -* [readthedocs](https://github.com/rtfd/readthedocs.org/):一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。 - -### 配置 - -用来保存和解析配置的库。 - -* [config](https://www.red-dove.com/config-doc/):[logging](https://docs.python.org/2/library/logging.html) 模块作者写的分级配置模块。 -* [ConfigObj](http://www.voidspace.org.uk/python/configobj.html):INI 文件解析器,带验证功能。 -* [ConfigParser](https://docs.python.org/2/library/configparser.html):(Python 标准库) INI 文件解析器。 -* [profig](http://profig.readthedocs.org/en/default/):通过多种格式进行配置,具有数值转换功能。 -* [python-decouple](https://github.com/henriquebastos/python-decouple):将设置和代码完全隔离。 -* [hydra](https://github.com/facebookresearch/hydra):一个优雅地配置复杂应用程序的框架。 - -### 命令行工具 - -用于创建命令行程序的库。 - -* 命令行程序开发 - * [cement](http://builtoncement.com/):Python 的命令行程序框架。 - * [click](http://click.pocoo.org/dev/):一个通过组合的方式来创建精美命令行界面的包。 - * [cliff](http://docs.openstack.org/developer/cliff/):一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。 - * [clint](https://github.com/kennethreitz/clint):Python 命令行程序工具。 - * [docopt](http://docopt.org/):Python 风格的命令行参数解析器。 - * [Gooey](https://github.com/chriskiehl/Gooey):一条命令,将命令行程序变成一个 GUI 程序。 - * [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit):一个用于构建强大的交互式命令行程序的库。 - * [python-fire](https://github.com/google/python-fire):Google 出品的一个基于 Python 类的构建命令行界面的库。 - * [Pythonpy](https://github.com/Russell91/pythonpy/wiki):在命令行中直接执行任何 Python 指令。 -* 终端呈现方式 - * [asciimatics](https://github.com/peterbrittain/asciimatics):跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级 API。 - * [alive-progress](https://github.com/rsalmei/alive-progress):一款新的进度条,具有实时吞吐量信息以及非常酷的动画。 - * [colorama](https://pypi.python.org/pypi/colorama):跨平台彩色终端文本。 - * [bashplotlib](https://github.com/glamp/bashplotlib):在终端中进行基本绘图。 - * [rich](https://github.com/willmcgugan/rich):一个在终端中支持富文本和格式美化的 Python 库, 同时提供了`RichHandler`日志处理程序。 - * [tqdm](https://github.com/tqdm/tqdm):一个可在循环和命令行中使用的快速、可扩展的进度条。 -* 生产力工具 - * [aws-cli](https://github.com/aws/aws-cli):Amazon Web Services 的通用命令行界面。 - * [caniusepython3](https://github.com/brettcannon/caniusepython3):判断是哪个项目妨碍你你移植到 Python 3。 - * [cookiecutter](https://github.com/audreyr/cookiecutter):从 cookiecutters(项目模板)创建项目的一个命令行工具。 - * [doitlive](https://github.com/sloria/doitlive):一个用来在终端中进行现场演示的工具。 - * [pyftpdlib](https://github.com/giampaolo/pyftpdlib):一个速度极快和可扩展的 Python FTP 服务库。 - * [howdoi](https://github.com/gleitz/howdoi):通过命令行获取即时的编程问题解答。 - * [PathPicker](https://github.com/facebook/PathPicker):从 bash 输出中选出文件。 - * [percol](https://github.com/mooz/percol):向 UNIX shell 传统管道概念中加入交互式选择功能。 - * [thefuck](https://github.com/nvbn/thefuck):修正你之前的命令行指令。 - * [try](https://github.com/timofurrer/try):一个极其简单的命令行工具,用来试用 python 库。 - * [copier](https://github.com/pykong/copier):用于呈现项目模板的库和命令行实用程序。 - * [Invoke](https://github.com/pyinvoke/invoke#readme):用于管理面向 shell 的子进程,同时支持将可执行的 Python 代码组织成命令行可调用的状态。 - * [tmuxp](https://github.com/tony/tmuxp): [tmux](https://github.com/tmux/tmux) 会话管理器。 -* 高级 CLI - * [httpie](https://github.com/jkbrzt/httpie):一个命令行 HTTP 客户端,cURL 的替代品,易用性更好。 - * [iredis](https://github.com/laixintao/iredis):支持自动补全和高亮显示的 redis 命令行工具。 - * [kube-shell](https://github.com/cloudnativelabs/kube-shell):K8S 命令行集成的 shell 工具。 - * [litecli](https://github.com/dbcli/litecli):支持自动补全和语法高亮的 SQLite 命令行工具。 - * [mycli](https://github.com/dbcli/mycli):支持自动补全和语法高亮的 MySQL 命令行客户端 - * [pgcli](https://github.com/dbcli/pgcli):支持自动补全和语法高亮的 Postgres 命令行工具。 - * [SAWS](https://github.com/donnemartin/saws):一个加强版的 AWS 命令行。 -* Shell - * [xonsh](https://github.com/xonsh/xonsh/):一种基于 python 的跨平台,面向 unix 的 shell 语言和命令提示符。 - -### 下载器 - -用来进行下载的库. - -* [s3cmd](https://github.com/s3tools/s3cmd):一个用来管理 Amazon S3 和 CloudFront 的命令行工具。 -* [s4cmd](https://github.com/bloomreach/s4cmd):超级 S3 命令行工具,性能更加强劲。 -* [you-get](https://www.soimort.org/you-get/):一个 YouTube/Youku/Niconico 视频下载器,使用 Python 3 编写。 -* [youtube-dl](http://rg3.github.io/youtube-dl/):一个小巧的命令行程序,用来下载 YouTube 视频。 -* [akshare](https://github.com/jindaxiang/akshare):为方便人使用而创建的金融数据接口库。 - -### 图像处理 - -用来操作图像的库. - -* [pillow](http://pillow.readthedocs.org/en/latest/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。 -* [hmap](https://github.com/rossgoodwin/hmap):图像直方图映射。 -* [imgSeek](https://sourceforge.net/projects/imgseek/):一个使用视觉相似性搜索一组图片集合的项目。 -* [nude.py](https://github.com/hhatto/nude.py):裸体检测。 -* [python-barcode](https://github.com/WhyNotHugo/python-barcode):不借助其他库在 Python 程序中生成条形码。 -* [pygram](https://github.com/ajkumar25/pygram):类似 Instagram 的图像滤镜。 -* [python-qrcode](https://github.com/lincolnloop/python-qrcode):一个纯 Python 实现的二维码生成器。 -* [Quads](https://github.com/fogleman/Quads):基于四叉树的计算机艺术。 -* [scikit-image](http://scikit-image.org/):一个用于(科学)图像处理的 Python 库。 -* [thumbor](https://github.com/thumbor/thumbor):一个小型图像服务,具有剪裁,尺寸重设和翻转功能。 -* [wand](https://github.com/dahlia/wand):[MagickWand ](http://www.imagemagick.org/script/magick-wand.php)的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。 -* [face_recognition](https://github.com/ageitgey/face_recognition):简单易用的 Python 人脸识别库。 -* [pagan](https://github.com/daboth/pagan):基于输入和哈希的复古风图标(头像)生成工具。 -* [PyMatting](https://github.com/pymatting/pymatting):支持 alpha matting 的库。 -* [pywal](https://github.com/dylanaraps/pywal):由图像生成配色方案的工具。 -* [pyvips](https://github.com/libvips/pyvips):低内存消耗且快速的图像处理库。 - -### OCR - -光学字符识别库。 -* [paddleocr](https://github.com/PaddlePaddle/PaddleOCR): 除光学字符识别外还引入了表格识别。 -* [pyocr](https://gitlab.gnome.org/World/OpenPaperwork/pyocr):Tesseract 和 Cuneiform 的一个封装。 -* [pytesseract](https://github.com/madmaze/pytesseract):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个封装。 - -### 音频 - -用来操作音频的库 - -* [audiolazy](https://github.com/danilobellini/audiolazy):Python 的数字信号处理包。 -* [audioread](https://github.com/beetbox/audioread):交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。 -* [beets](http://beets.io/):一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具。 -* [dejavu](https://github.com/worldveil/dejavu):音频指纹提取和识别。 -* [django-elastic-transcoder](https://github.com/StreetVoice/django-elastic-transcoder):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。 -* [eyeD3](http://eyed3.nicfit.net/):一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。 -* [id3reader](http://nedbatchelder.com/code/modules/id3reader.py):一个用来读取 MP3 元数据的 Python 模块。 -* [m3u8](https://github.com/globocom/m3u8):一个用来解析 m3u8 文件的模块。 -* [mutagen](https://bitbucket.org/lazka/mutagen):一个用来处理音频元数据的 Python 模块。 -* [pydub](https://github.com/jiaaro/pydub):通过简单、简洁的高层接口来操作音频文件。 -* [pyechonest](https://github.com/echonest/pyechonest):[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端。 -* [talkbox](http://scikits.appspot.com/talkbox):一个用来处理演讲/信号的 Python 库。 -* [TimeSide](https://github.com/Parisson/TimeSide):开源 web 音频处理框架。 -* [tinytag](https://github.com/devsnd/tinytag):一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。 -* [mingus](http://bspaans.github.io/python-mingus/):一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。 -* [kapre](https://github.com/keunwoochoi/kapre):Keras 音频处理器。 -* [librosa](https://github.com/librosa/librosa):音频音乐分析 Python 库。 -* [matchering](https://github.com/sergree/matchering):用于音频母带制作的库。 -* [pyAudioAnalysis](https://github.com/tyiannak/pyAudioAnalysis):音频特征提取,分类,分段和应用。 -* [beets](https://github.com/beetbox/beets):一个音乐库管理器和 [MusicBrainz](https://musicbrainz.org/) 标记器。 - -### Video - -用来操作视频和 GIF 的库。 - -* [moviepy](http://zulko.github.io/moviepy/):一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。 -* [scikit-video](https://github.com/aizvorski/scikit-video):SciPy 视频处理常用程序。 -* [vidgear](https://github.com/abhiTronix/vidgear): 强大的多线程视频处理框架。 - -### 地理位置 - -地理编码地址以及用来处理经纬度的库。 - -* [GeoDjango](https://docs.djangoproject.com/en/dev/ref/contrib/gis/):世界级地理图形 web 框架。 -* [GeoIP](https://github.com/maxmind/geoip-api-python):MaxMind GeoIP Legacy 数据库的 Python API。 -* [geojson](https://github.com/frewsxcv/python-geojson):GeoJSON 的 Python 绑定及工具。 -* [geopy](https://github.com/geopy/geopy):Python 地址编码工具箱。 -* [GeoIP2](https://github.com/maxmind/GeoIP2-python):GeoIP2 Webservice 客户端与数据库 Python API。 -* [django-countries](https://github.com/SmileyChris/django-countries):一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。 -* [pygeoip](https://github.com/appliedsec/pygeoip):Python GeoIP 接口。 - -### HTTP - -使用 HTTP 的库。 - -* [aiohttp](https://github.com/aio-libs/aiohttp):基于 asyncio 的异步 HTTP 网络库。 -* [requests](http://docs.python-requests.org/en/latest/):人性化的 HTTP 请求库。 -* [grequests](https://github.com/kennethreitz/grequests):requests 库 + gevent ,用于异步 HTTP 请求。 -* [httplib2](https://github.com/jcgregorio/httplib2):全面的 HTTP 客户端库。 -* [treq](https://github.com/twisted/treq):类似 requests 的 Python API 构建于 Twisted HTTP 客户端之上。 -* [urllib3](https://github.com/shazow/urllib3):一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。 -* [httpx](https://github.com/encode/httpx):下一代 Python HTTP 客户端。 - -### 数据库 - -Python 实现的数据库。 - -* [pickleDB](https://pythonhosted.org/pickleDB/):一个简单,轻量级键值储存数据库。 -* [PipelineDB](https://www.pipelinedb.com/):流式 SQL 数据库。 -* [TinyDB](https://github.com/msiemens/tinydb):一个微型的,面向文档型数据库。 -* [ZODB](http://www.zodb.org/en/latest/):一个 Python 原生对象数据库。一个键值和对象图数据库。 - -### 数据库驱动 - -用来连接和操作数据库的库。 - -* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/) 系列 - * [aiomysql](https://github.com/aio-libs/aiomysql):基于 asyncio 的异步 MySQL 数据库操作库。 - * [mysql-python](https://sourceforge.net/projects/mysql-python/):Python 的 MySQL 数据库连接器。 - * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 - * [oursql](https://pythonhosted.org/oursql/):一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs。 - * [PyMySQL](https://github.com/PyMySQL/PyMySQL):纯 Python MySQL 驱动,兼容 mysql-python。 -* PostgreSQL - * [psycopg2](http://initd.org/psycopg/):Python 中最流行的 PostgreSQL 适配器。 - * [queries](https://github.com/gmr/queries):psycopg2 库的封装,用来和 PostgreSQL 进行交互。 - * [txpostgres](http://txpostgres.readthedocs.org/en/latest/):基于 Twisted 的异步 PostgreSQL 驱动。 -* 其他关系型数据库 - * [apsw](http://rogerbinns.github.io/apsw/):另一个 Python SQLite 封装。 - * dataset:在数据库中存储 Python 字典 - * [pymssql](http://www.pymssql.org/en/latest/):一个简单的 Microsoft SQL Server 数据库接口。 -* NoSQL 数据库 - * [asyncio-redis](https://github.com/jonathanslenders/asyncio-redis):基于 asyncio 的 redis 客户端 (PEP 3156)。 - * [cassandra-python-driver](https://github.com/datastax/python-driver):Cassandra 的 Python 驱动。 - * [HappyBase](http://happybase.readthedocs.org/en/latest/):一个为 Apache HBase 设计的,对开发者友好的库。 - * [Plyvel](https://plyvel.readthedocs.org/en/latest/):一个快速且功能丰富的 LevelDB 的 Python 接口。 - * [py2neo](http://py2neo.org/2.0/):Neo4j restful 接口的 Python 封装客户端。 - * [pycassa](https://github.com/pycassa/pycassa):Cassandra 的 Python Thrift 驱动。 - * [PyMongo](https://docs.mongodb.org/ecosystem/drivers/python/):MongoDB 的官方 Python 客户端。 - * [redis-py](https://github.com/andymccurdy/redis-py):Redis 的 Python 客户端。 - * [telephus](https://github.com/driftx/Telephus):基于 Twisted 的 Cassandra 客户端。 - * [txRedis](https://github.com/deldotdr/txRedis):基于 Twisted 的 Redis 客户端。 - * [kafka-python](https://github.com/dpkp/kafka-python):Apache Kafka Python 客户端。 -* 异步客户端 - * [motor](https://github.com/mongodb/motor):支持 MongoDB 的异步 Python 驱动程序。 - -### ORM - -实现对象关系映射或数据映射技术的库。 - -* 关系型数据库 - * [Django Models](https://docs.djangoproject.com/en/dev/topics/db/models/):Django 的一部分。 - * [SQLAlchemy](http://www.sqlalchemy.org/):Python SQL 工具以及对象关系映射工具。 - * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) - * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 - * [Peewee](https://github.com/coleifer/peewee):一个小巧,富有表现力的 ORM。 - * [PonyORM](https://ponyorm.com/):提供面向生成器的 SQL 接口的 ORM。 - * [python-sql](https://pypi.python.org/pypi/python-sql):编写 Python 风格的 SQL 查询。 - * [dataset](https://github.com/pudo/dataset):在数据库中存储字典,支持 SQLite,MySQL 和 PostgreSQL。 - * [orator](https://github.com/sdispater/orator):Orator ORM,提供了一个简单而美观的 ActiveRecord 实现。 - * [orm](https://github.com/encode/orm):一个异步的 ORM。 - * [pony](https://github.com/ponyorm/pony/):提供面向生成器的SQL接口的ORM。 - * [pydal](https://github.com/web2py/pydal/):纯 Python 数据库抽象接口层。 -* NoSQL 数据库 - * [django-mongodb-engine](https://github.com/django-nonrel/mongodb-engine):Django MongoDB 后端。 - * [PynamoDB](https://github.com/jlafon/PynamoDB):[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。 - * [flywheel](https://github.com/mathcamp/flywheel):Amazon DynamoDB 的对象映射工具。 - * [MongoEngine](http://mongoengine.org/):一个 Python 对象文档映射工具,用于 MongoDB。 - * [hot-redis](https://github.com/stephenmcd/hot-redis):为 Redis 提供 Python 丰富的数据类型。 - * [redisco](https://github.com/kiddouk/redisco):一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。 -* 其他 - * [butterdb](https://github.com/Widdershin/butterdb):Google Drive 电子表格的 Python ORM。 - -### Web 框架 - -全栈 Web 框架。 - -* [Django](https://www.djangoproject.com/):Python 界最流行的 web 框架。 - * [awesome-django(by shahraizali)](https://github.com/shahraizali/awesome-django) 系列 - * [awesome-django(by wsvincent)](https://github.com/wsvincent/awesome-django) 系列 -* [Flask](http://flask.pocoo.org/):一个 Python 微型框架。 - * [awesome-flask](https://github.com/humiaozuzu/awesome-flask) 系列 -* [Pyramid](https://pylonsproject.org/):一个小巧,快速,接地气的开源 Python web 框架。 - * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) 系列 -* [Bottle](http://bottlepy.org/docs/dev/index.html):一个快速小巧,轻量级的 WSGI 微型 web 框架。 -* [CherryPy](http://www.cherrypy.org/):一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。 -* [TurboGears](http://www.turbogears.org/):一个可以扩展为全栈解决方案的微型框架。 -* [web.py](http://webpy.org/):一个 Python 的 web 框架,既简单,又强大。 -* [web2py](http://www.web2py.com/):一个全栈 web 框架和平台,专注于简单易用。 -* [Tornado](http://www.tornadoweb.org/en/latest/):一个 web 框架和异步网络库。 -* [sanic](https://github.com/channelcat/sanic/):基于 Python3.5+ 的异步网络框架。 -* [starlette](https://www.starlette.io/): 一款轻量级,高性能的 ASGI 框架。 -* [Masonite](https://github.com/MasoniteFramework/masonite):以开发者为中心的现代 Python Web 框架。 - -### WebSocket - -Web socket 相关库。 - -* [autobahn-python](https://github.com/crossbario/autobahn-python):适用于 Twisted 和 asyncio 的 Python WebSocket 和 WAMP。 -* [channels](https://github.com/django/channels):开发者友好的 Django 异步工具。 -* [websockets](https://github.com/aaugustin/websockets):一个用于构建 WebSocket 服务器和客户端的库,着重于正确性和简单性。 - -### 权限 - -允许或拒绝用户访问数据或功能的库。 - -* [Carteblanche](https://github.com/neuman/python-carteblanche/):站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。 -* [django-guardian](https://github.com/django-guardian/django-guardian):Django 1.2+ ,实现了单个对象权限。 -* [django-rules](https://github.com/dfunckt/django-rules):一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。 - -### CMS - -内容管理系统。 - -* [odoo-cms](http://www.odoo.com):一个开源的,企业级 CMS,基于 odoo。 -* [django-cms](http://www.django-cms.org/en/):一个开源的,企业级 CMS,基于 Django。 -* [djedi-cms](http://djedi-cms.org/):一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。 -* [FeinCMS](http://www.feincms.org/):基于 Django 构建的最先进的内容管理系统之一。 -* [Kotti](http://kotti.pylonsproject.org/):一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。 -* [Mezzanine](http://mezzanine.jupo.org/):一个强大的,持续的,灵活的内容管理平台。 -* [Opps](http://opps.github.io/opps/):一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。 -* [Plone](https://plone.org/):一个构建于开源应用服务器 Zope 之上的 CMS。 -* [Quokka](https://quintagroup.com/cms/python/quokka):灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。 -* [Wagtail](https://wagtail.io/):一个 Django 内容管理系统。 -* [Widgy](https://wid.gy/):最新的 CMS 框架,基于 Django。 -* [indico](https://github.com/indico/indico):一个功能丰富的事件管理系统,由 @[CERN](https://en.wikipedia.org/wiki/CERN) 开发。 - -### 电子商务 - -用于电子商务以及支付的框架和库。 - -* [django-oscar](http://oscarcommerce.com/):一个用于 Django 的开源的电子商务框架。 -* [django-shop](https://github.com/awesto/django-shop):一个基于 Django 的店铺系统。 -* [Cartridge](https://github.com/stephenmcd/cartridge):一个基于 Mezzanine 构建的购物车应用。 -* [shoop](https://www.shoop.io/en/):一个基于 Django 的开源电子商务平台。 -* [alipay](https://github.com/lxneng/alipay):非官方的 Python 支付宝 API。 -* [merchant](https://github.com/agiliq/merchant):一个可以接收来自多种支付平台支付的 Django 应用。 -* [money](https://github.com/carlospalol/money):一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。 -* [python-currencies](https://github.com/Alir3z4/python-currencies):显示货币格式以及它的数值。 -* [forex-python](https://github.com/MicroPyramid/forex-python):外汇汇率,比特币价格指数和货币换算。 -* [saleor](http://getsaleor.com/):一款兼容 Django 的电子商务平台。 - -### RESTful API - -用来开发 RESTful APIs 的库 - -* Django - * [django-rest-framework](http://www.django-rest-framework.org/):一个强大灵活的工具,用来构建 web API。 - * [django-tastypie](http://tastypieapi.org/):为 Django 应用开发 API。 - * [django-formapi](https://github.com/5monkeys/django-formapi):为 Django 的表单验证,创建 JSON APIs 。 -* Flask - * [flask-api](http://www.flaskapi.org/):为 flask 开发的,可浏览 Web APIs 。 - * [flask-restful](http://flask-restful.readthedocs.org/en/latest/):为 flask 快速创建 REST APIs 。 - * [flask-restless](https://flask-restless.readthedocs.org/en/latest/):为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。 - * [flask-api-utils](https://github.com/marselester/flask-api-utils):为 Flask 处理 API 表示和验证。 - * [eve](https://github.com/nicolaiarocci/eve):REST API 框架,由 Flask, MongoDB 等驱动。 -* Pyramid - * [cornice](https://cornice.readthedocs.org/en/latest/):一个 Pyramid 的 REST 框架 。 -* 与框架无关的 - * [falcon](http://falconframework.org/):一个用来建立云 API 和 web app 后端的高性能框架。 - * [sandman](https://github.com/jeffknupp/sandman):为现存的数据库驱动系统自动创建 REST APIs 。 - * [restless](http://restless.readthedocs.org/en/latest/):框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。 - * [ripozo](https://github.com/vertical-knowledge/ripozo):快速创建 REST/HATEOAS/Hypermedia APIs。 - * [apistar](https://github.com/encode/apistar):专为Python 3设计的智能 Web API 框架。 - * [fastapi](https://github.com/tiangolo/fastapi):一个现代,快速,基于标准 Python 类型注解的的 web框架,可使用 Python3.6+ 版本构建 API。 - * [hug](https://github.com/hugapi/hug):一个为纯净公开的 API 打造的 Python 3 框架。 - * [sandman2](https://github.com/jeffknupp/sandman2):为数据库驱动的系统自动生成 REST API。 - * [vibora](https://vibora.io/):快速高效且支持异步的 Web 框架,灵感来源于 Flask。 - -### 验证 - -实现验证方案的库。 - -* OAuth - * [authlib](https://github.com/lepture/authlib):一个强大的Python库,用来构建 OAuth 和 OpenID 服务端。包括:JWS, JWK, JWA, JWT。 - * [Authomatic](http://peterhudec.github.io/authomatic/):简单但是强大的框架,身份验证/授权客户端。 - * [django-allauth](https://github.com/pennersr/django-allauth):Django 的验证应用。 - * [django-oauth-toolkit](https://github.com/evonove/django-oauth-toolkit):为 Django 用户准备的 OAuth2。 - * [django-oauth2-provider](https://github.com/caffeinehit/django-oauth2-provider):为 Django 应用提供 OAuth2 接入。 - * [Flask-OAuthlib](https://github.com/lepture/flask-oauthlib):OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。 - * [OAuthLib](https://github.com/idan/oauthlib):一个 OAuth 请求-签名逻辑通用、 完整的实现。 - * [python-oauth2](https://github.com/joestump/python-oauth2):一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。 - * [python-social-auth](https://github.com/omab/python-social-auth):一个设置简单的社会化验证方式。 - * [rauth](https://github.com/litl/rauth):OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。 - * [sanction](https://github.com/demianbrecht/sanction):一个超级简单的 OAuth2 客户端实现。 -* 其他 - * [PyJWT](https://github.com/jpadilla/pyjwt):JSON Web 令牌草案 01。 - * [python-jws](https://github.com/brianloveswords/python-jws):JSON Web 签名草案 02 的实现。 - * [python-jwt](https://github.com/davedoesdev/python-jwt):一个用来生成和验证 JSON Web 令牌的模块。 - * [python-jose](https://github.com/mpdavis/python-jose/):python 版 JOSE 实现。 - -### 模板引擎 - -模板生成和词法解析的库和工具。 - -* [Jinja2](https://github.com/pallets/jinja):一个现代的,对设计师友好的模板引擎。 -* [Chameleon](https://chameleon.readthedocs.org/en/latest/):一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。 -* [Genshi](https://genshi.edgewall.org/):Python 模板工具,用以生成 web 感知的结果。 -* [Mako](http://www.makotemplates.org/):Python 平台的超高速轻量级模板。 - -### 队列 - -处理事件以及任务队列的库。 - -* [celery](http://www.celeryproject.org/):一个异步任务队列/作业队列,基于分布式消息传递 -* [daramatiq](https://github.com/Bogdanp/dramatiq):适用于Python 3的快速可靠的后台任务处理库。 -* [huey](https://github.com/coleifer/huey):小型多线程任务队列。 -* [mrq](https://github.com/pricingassistant/mrq):一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。 -* [rq](http://python-rq.org/):简单的 Python 作业队列。 -* [simpleq](https://github.com/rdegges/simpleq):一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。 - -### 搜索 - -对数据进行索引和执行搜索查询的库和软件。 - -* [django-haystack](https://github.com/django-haystack/django-haystack):Django 模块化搜索。 -* [elasticsearch-py](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html):Elasticsearch 的官方底层 Python 客户端。 -* [elasticsearch-dsl-py](https://github.com/elastic/elasticsearch-dsl-py):Elasticsearch 的官方高级 Python 客户端。 -* [solrpy](https://github.com/edsu/solrpy):[solr](http://lucene.apache.org/solr/) 的 Python 客户端。 -* [pysolr](https://github.com/django-haystack/pysolr):支持 [Apache Solr](https://lucene.apache.org/solr/) 的轻量级 Python 装饰器。 -* [Whoosh](http://whoosh.readthedocs.org/en/latest/):一个快速的纯 Python 搜索引擎库。 - -### 动态消息 - -用来创建用户活动的库。 - -* [django-activity-stream](https://github.com/justquick/django-activity-stream):从你的站点行为中生成通用活动信息流。 -* [Stream-Framework](https://github.com/tschellenbach/Stream-Framework):使用 Cassandra 和 Redis 创建动态消息和通知系统。 - -### Web 资源管理 - -管理、压缩、缩小网站资源的工具。 - -* [django-compressor](https://github.com/django-compressor/django-compressor):将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。 -* [django-pipeline](https://github.com/jazzband/django-pipeline):Django 的资源包装库。 -* [django-storages](http://django-storages.readthedocs.org/en/latest/):一个针对 Django 的自定义存储后端的工具集合。 -* [fanstatic](http://www.fanstatic.org/en/latest/):打包、优化,并且把静态文件依赖作为 Python 的包来提供。 -* [File Conveyor](https://wimleers.com/fileconveyor/):一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。 -* [Flask-Assets](http://flask-assets.readthedocs.org/en/latest/):帮你将 web 资源整合到你的 Flask app 中。 -* [jinja-assets-compressor](https://github.com/jaysonsantos/jinja-assets-compressor):一个 Jinja 扩展,用来编译和压缩你的资源。 -* [webassets](http://webassets.readthedocs.org/en/latest/):为你的静态资源打包、优化和管理生成独一无二的缓存 URL。 - -### 缓存 - -缓存数据的库。 - -* [Beaker](http://beaker.readthedocs.org/en/latest/):一个缓存和会话库,可以用在 web 应用和独立 Python 脚本和应用上。 -* [django-cache-machine](https://github.com/django-cache-machine/django-cache-machine):Django 模型的自动缓存和失效。 -* [django-cacheops](https://github.com/Suor/django-cacheops):具有自动颗粒化事件驱动失效功能的 ORM。 -* [django-viewlet](https://github.com/5monkeys/django-viewlet):渲染模板,同时具有额外的缓存控制功能。 -* [dogpile.cache](http://dogpilecache.readthedocs.org/en/latest/):dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。 -* [HermesCache](https://pypi.python.org/pypi/HermesCache):Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。 -* [johnny-cache](https://github.com/jmoiron/johnny-cache):django 应用缓存框架。 -* [pylibmc](https://github.com/lericson/pylibmc):[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。 -* [python-diskcache](http://www.grantjenks.com/docs/diskcache/):SQLite 和文件支持的缓存后端,具有比 memcached 和 redis 更快的查找速度。 - -### 电子邮件 - -用来发送和解析电子邮件的库。 - -* [django-celery-ses](https://github.com/StreetVoice/django-celery-ses):带有 AWS SES 和 Celery 的 Django email 后端。 -* [envelopes](http://tomekwojcik.github.io/envelopes/):供人类使用的电子邮件库。 -* [flanker](https://github.com/mailgun/flanker):一个 email 地址和 Mime 解析库。 -* [imbox](https://github.com/martinrusev/imbox):Python IMAP 库。 -* [inbox.py](https://github.com/kennethreitz/inbox.py):Python SMTP 服务器。 -* [inbox](https://github.com/nylas/sync-engine):一个开源电子邮件工具箱。 -* [lamson](https://github.com/zedshaw/lamson):Python 风格的 SMTP 应用服务器。 -* [mailjet](https://github.com/WoLpH/mailjet):Mailjet API 实现,用来提供批量发送邮件,统计等功能。 -* [marrow.mailer](https://github.com/marrow/mailer):高性能可扩展邮件分发框架。 -* [modoboa](https://github.com/tonioo/modoboa):一个邮件托管和管理平台,具有现代的、简约的 Web UI。 -* [pyzmail](http://www.magiksys.net/pyzmail/):创建,发送和解析电子邮件。 -* [Talon](https://github.com/mailgun/talon):Mailgun 库,用来抽取信息和签名。 -* [yagmail](https://pypi.org/project/yagmail/):yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。 -* [salmon](https://github.com/moggers87/salmon):一个 Python 邮件服务器。 -* [mailer](https://github.com/marrow/mailer):一款高性能可扩展的邮件投递框架。 - -### 国际化 - -用来进行国际化的库。 - -* [Babel](http://babel.pocoo.org/en/latest/):一个 Python 的国际化库。 -* [Korean](https://korean.readthedocs.org/en/latest/):一个韩语词态库。 -* [PyICU](https://github.com/ovalhub/pyicu):一个封装了 [ICU](http://site.icu-project.org/) C++ 库的 Python 扩展。 - -### URL 处理 - -解析 URLs 的库 - -* [furl](https://github.com/gruns/furl):一个让处理 URL 更简单小型 Python 库。 -* [purl](https://github.com/codeinthehole/purl):一个简单的,不可变的 URL 类,具有简洁的 API 来进行询问和处理。 -* [pyshorteners](https://github.com/ellisonleao/pyshorteners):一个纯 Python URL 缩短库。 -* [shorturl](https://github.com/Alir3z4/python-shorturl):生成短小 URL 和类似 bit.ly 短链的 Python 实现。 -* [webargs](https://github.com/sloria/webargs):一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado 和 Pyramid。 - -### HTML 处理 - -处理 HTML 和 XML 的库。 - -* [BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/bs4/doc/):以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。 -* [bleach](http://bleach.readthedocs.org/en/latest/):一个基于白名单的 HTML 清理和文本链接库。 -* [cssutils](https://pypi.python.org/pypi/cssutils/):一个 Python 的 CSS 库。 -* [html5lib](https://github.com/html5lib/html5lib-python):一个兼容标准的 HTML 文档和片段解析及序列化库。 -* [lxml](http://lxml.de/):一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。 -* [MarkupSafe](https://github.com/pallets/markupsafe):为 Python 实现 XML/HTML/XHTML 标记安全字符串。 -* [pyquery](https://github.com/gawel/pyquery):一个解析 HTML 的库,类似 jQuery。 -* [requests-html](https://github.com/kennethreitz/requests-html):人性化的,Pythonic 的 HTML 解析库。 -* [untangle](https://github.com/stchris/untangle):将 XML 文档转换为 Python 对象,使其可以方便的访问。 -* [xhtml2pdf](https://github.com/xhtml2pdf/xhtml2pdf):HTML/CSS 转 PDF 工具。 -* [xmltodict](https://github.com/martinblech/xmltodict):像处理 JSON 一样处理 XML。 -* [WeasyPrint](http://weasyprint.org):用于HTML和CSS的可视化呈现引擎,并可以导出为 PDF。 -* [xmldataset](https://xmldataset.readthedocs.io/en/latest/):简单 XML 解析。 - -爬取网络站点的库 - -* [Scrapy](http://scrapy.org/):一个快速高级的屏幕爬取及网页采集框架。 -* [ScrapydWeb](https://github.com/my8100/scrapydweb):一个用于 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化,自动打包,定时器任务和邮件通知等特色功能。 -* [cola](https://github.com/chineking/cola):一个分布式爬虫框架。 -* [Demiurge](https://github.com/matiasb/demiurge):基于 PyQuery 的爬虫微型框架。 -* [feedparser](http://pythonhosted.org/feedparser/):通用 feed 解析器。 -* [Grab](http://grablib.org/):站点爬取框架。 -* [MechanicalSoup](https://github.com/hickford/MechanicalSoup):用于自动和网络站点交互的 Python 库。 -* [portia](https://github.com/scrapinghub/portia):Scrapy 可视化爬取。 -* [pyspider](https://github.com/binux/pyspider):一个强大的爬虫系统。 -* [RoboBrowser](https://github.com/jmcarp/robobrowser):一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。 - -### 网页内容提取 - -用于进行网页内容提取的库。 - -* [Haul](https://github.com/vinta/Haul):一个可以扩展的图像爬取工具。 -* [html2text](https://github.com/Alir3z4/html2text):将 HTML 转换为 Markdown 格式文本。 -* [lassie](https://github.com/michaelhelmick/lassie):人性化的网页内容检索库。 -* [micawber](https://github.com/coleifer/micawber):一个小型网页内容提取库,用来从 URLs 提取富内容。 -* [newspaper](https://github.com/codelucas/newspaper):使用 Python 进行新闻提取,文章提取以及内容策展。 -* [opengraph](https://github.com/erikriver/opengraph):一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。 -* [python-goose](https://github.com/grangier/python-goose):HTML 内容/文章提取器(python2)。 -* [goose3](https://github.com/goose3/goose3):HTML 内容/文章提取器(python3)。 -* [python-readability](https://github.com/buriy/python-readability):arc90 公司 readability 工具的 Python 高速端口。 -* [sanitize](https://github.com/Alir3z4/python-sanitize):为杂乱的数据世界带来调理性。 -* [sumy](https://github.com/miso-belica/sumy):一个为文本文件和 HTML 页面进行自动摘要的模块。 -* [textract](https://github.com/deanmalmgren/textract):从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。 - -### 表单 - -进行表单操作的库。 - -* [Deform](http://deform.readthedocs.org/en/latest/):Python HTML 表单生成库,受到了 formish 表单生成库的启发。 -* [django-bootstrap3](https://github.com/dyve/django-bootstrap3):集成了 Bootstrap 3 的 Django。 -* [django-bootstrap4](https://github.com/zostera/django-bootstrap4):集成了 Bootstrap 4 的 Django。 -* [django-crispy-forms](http://django-crispy-forms.readthedocs.org/en/latest/):一个 Django 应用,他可以让你以一种非常优雅且 DRY (Don't repeat yourself) 的方式来创建美观的表单。 -* [django-remote-forms](https://github.com/WiserTogether/django-remote-forms):一个平台独立的 Django 表单序列化工具。 -* [WTForms](http://wtforms.readthedocs.org/en/latest/):一个灵活的表单验证和呈现库。 -* [WTForms-JSON](http://wtforms-json.readthedocs.org/en/latest/):一个 WTForms 扩展,用来处理 JSON 数据。 - -### 数据验证 - -数据验证库。多用于表单验证。 - -* [Cerberus](http://docs.python-cerberus.org/en/stable/):一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。 -* [colander](http://docs.pylonsproject.org/projects/colander/en/latest/):一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。 -* [kmatch](https://github.com/ambitioninc/kmatch):一种用于匹配/验证/筛选 Python 字典的语言。 -* [schema](https://github.com/keleshev/schema):一个用于对 Python 数据结构进行验证的库。 -* [Schematics](https://github.com/schematics/schematics):数据结构验证。 -* [valideer](https://github.com/podio/valideer):轻量级可扩展的数据验证和适配库。 -* [voluptuous](https://github.com/alecthomas/voluptuous):一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。 -* [jsonschema](https://github.com/Julian/jsonschema):[JSON Schema](http://json-schema.org/) 的 python 实现,用于 JSON 数据的验证。 - -### 序列化 - -复杂数据类型序列化相关库。 - -* [marshmallow](https://github.com/marshmallow-code/marshmallow):一个轻量级的库,用于将复杂对象与简单 Python 数据类型相互转换。 -* [pysimdjson](https://github.com/TkTech/pysimdjson):与 Python 绑定的 [simdjson](https://github.com/lemire/simdjson) 。 -* [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson): [RapidJSON](https://github.com/Tencent/rapidjson) 的 Python 封装。 -* [ultrajson](https://github.com/esnme/ultrajson):使用 Python 绑定的,用 C 编写的快速 JSON 解码器和编码器。 - -### 反垃圾技术 - -帮助你和电子垃圾进行战斗的库。 - -* [django-simple-captcha](https://github.com/mbi/django-simple-captcha):一个简单、高度可定制的 Django 应用,可以为任何 Django 表单添加验证码。 -* [django-simple-spam-blocker](https://github.com/moqada/django-simple-spam-blocker):一个用于 Django 的简单的电子垃圾屏蔽工具。 - -### 标记 - -用来进行标记的库。 - -* [django-taggit](https://github.com/alex/django-taggit):简单的 Django 标记工具。 - -### 管理面板 - -管理界面库。 - -* [Ajenti](https://github.com/ajenti/ajenti):一个你的服务器值得拥有的管理面板。 -* [django-suit](http://djangosuit.com/):Django 管理界面的一个替代品(仅对于非商业用途是免费的)。 -* [django-xadmin](https://github.com/sshwsfc/django-xadmin):Django admin 的一个替代品,具有很多不错的功能。 -* [flask-admin](https://github.com/flask-admin/flask-admin):一个用于 Flask 的简单可扩展的管理界面框架。 -* [flower](https://github.com/mher/flower):一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。 -* [Grappelli](http://grappelliproject.com/):Django 管理界面的一个漂亮的皮肤。 -* [Wooey](https://github.com/wooey/wooey):一个 Django 应用,可以为 Python 脚本创建 web 用户界面。 -* [django-grappelli](https://grappelliproject.com/):拥有绚丽外观的 Django Admin 界面。 -* [django-jet](https://github.com/geex-arts/django-jet):具有改进功能的现代响应式 Django 管理界面模板。 -* [jet-bridge](https://github.com/jet-admin/jet-bridge):管理面板框架,适用于任何具有良好 UI 的应用(例如 Django)。 - -### Serverless 框架 - -使用 Python 开发 Serverless 模型相关的库。 - -* [python-lambda](https://github.com/nficano/python-lambda) :在 AWS Lambda 开发和部署 Python 代码的工具包。 -* [Zappa](https://github.com/Miserlou/Zappa):在 AWS Lambda 和 API Gateway 部署 WSGI 应用的工具。 - -### 静态站点生成器 - -静态站点生成器是一个软件,它把文本和模板作为输入,然后输出 HTML 文件。 - -* [Pelican](http://blog.getpelican.com/):使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。 -* [Cactus](https://github.com/koenbok/Cactus/):为设计师设计的静态站点生成器。 -* [Hyde](http://hyde.github.io/):基于 Jinja2 的静态站点生成器。 -* [Nikola](https://www.getnikola.com/):一个静态网站和博客生成器。 -* [Tinkerer](http://tinkerer.me/):Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。 -* [Lektor](https://www.getlektor.com/):一个简单易用的静态 CMS 和博客引擎。 -* [makesite](https://github.com/sunainapai/makesite):简单轻量的站点/博客生成器(小于 130 行代码)。 - -### 进程 - -操作系统进程启动及通信库。 - -* [envoy](https://github.com/kennethreitz/envoy):比 Python [subprocess](https://docs.python.org/2/library/subprocess.html) 模块更人性化。 -* [sarge](http://sarge.readthedocs.org/en/latest/):另一 种 subprocess 模块的封装。 -* [sh](https://github.com/amoffat/sh):一个完备的 subprocess 替代库。 -* [delegator.py](https://github.com/amitt001/delegator.py):人性化的 [Subprocesses](https://docs.python.org/3/library/subprocess.html) 2.0 版本。 - -### 并发和并行 - -用以进行并发和并行操作的库。 - -* [multiprocessing](https://docs.python.org/2/library/multiprocessing.html):(Python 标准库) 基于进程的“线程”接口。 -* [threading](https://docs.python.org/2/library/threading.html):(Python 标准库)更高层的线程接口。 -* [eventlet](http://eventlet.net/):支持 WSGI 的异步框架。 -* [gevent](http://www.gevent.org/):一个基于协程的 Python 网络库,使用 [greenlet](https://github.com/python-greenlet/greenlet)。 -* [Tomorrow](https://github.com/madisonmay/Tomorrow):用于产生异步代码的神奇的装饰器语法实现。 -* [uvloop](https://github.com/MagicStack/uvloop):在 libuv 之上超快速实现 asyncio 事件循环。 -* [concurrent.futures](https://docs.python.org/3/library/concurrent.futures.html):(Python 标准库) 异步执行可调用对象的高级接口。 -* [gevent](http://www.gevent.org/):使用 [greenlet](https://github.com/python-greenlet/greenlet) 且基于协程的 Python 网络库。 -* [scoop](https://github.com/soravux/scoop):支持在 Python 中进行可伸缩并行操作。 - -### 网络 - -用于网络编程的库。 - -* [asyncio](https://docs.python.org/3/library/asyncio.html):(Python 标准库) 异步 I/O,事件循环,协程以及任务。 -* [trio](https://github.com/python-trio/trio):异步并发和 I/O 友好的库。 -* [Twisted](https://twistedmatrix.com/trac/):一个事件驱动的网络引擎。 -* [pulsar](https://github.com/quantmind/pulsar):事件驱动的并发框架。 -* [diesel](https://github.com/dieseldev/diesel):基于 Greenlet 的事件 I/O 框架。 -* [pyzmq](http://zeromq.github.io/pyzmq/):一个 ZeroMQ 消息库的 Python 封装。 -* [Toapi](https://github.com/gaojiuli/toapi):一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。 -* [txZMQ](https://github.com/smira/txZMQ):基于 Twisted 的 ZeroMQ 消息库的 Python 封装。 - -### WebSocket - -帮助使用 WebSocket 的库。 - -* [AutobahnPython](https://github.com/crossbario/autobahn-python):给 Python、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。 -* [Crossbar](https://github.com/crossbario/crossbar/):开源统一应用路由(Websocket & WAMP for Python on Autobahn)。 -* [django-socketio](https://github.com/stephenmcd/django-socketio):给 Django 用的 WebSockets。 -* [WebSocket-for-Python](https://github.com/Lawouach/WebSocket-for-Python):为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。 - -### WSGI 服务器 - -兼容 WSGI 的 web 服务器 - -* [gunicorn](https://pypi.python.org/pypi/gunicorn):Pre-forked, 部分是由 C 语言编写的。 -* [uwsgi](https://uwsgi-docs.readthedocs.org/en/latest/):uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务,由 C 语言编写。 -* [bjoern](https://pypi.python.org/pypi/bjoern):异步,非常快速,由 C 语言编写。 -* [fapws3](http://www.fapws.org/):异步 (仅对于网络端),由 C 语言编写。 -* [meinheld](https://pypi.python.org/pypi/meinheld):异步,部分是由 C 语言编写的。 -* [netius](https://github.com/hivesolutions/netius):异步,非常快速。 -* [paste](http://pythonpaste.org/):多线程,稳定,久经考验。 -* [rocket](https://pypi.python.org/pypi/rocket):多线程。 -* [waitress](https://waitress.readthedocs.org/en/latest/):多线程,是它驱动着 Pyramid 框架。 -* [Werkzeug](http://werkzeug.pocoo.org/):一个 WSGI 工具库,驱动着 Flask,而且可以很方便大嵌入到你的项目中去。 - -### ASGI 服务器 - -兼容 ASGI 的 web 服务器。 - -* [daphne](https://github.com/django/daphne):用于 ASGI 和 ASGI-HTTP 的,支持 HTTP,HTTP2 和 WebSocket 协议的服务器。 -* [uvicorn](https://github.com/encode/uvicorn):使用 uvloop 和 httptools 实现的闪电般快速的 ASGI 服务器。 - -### RPC 服务器 - -兼容 RPC 的服务器。 - -* [SimpleJSONRPCServer](https://github.com/joshmarshall/jsonrpclib/):这个库是 JSON-RPC 规范的一个实现。 -* [SimpleXMLRPCServer](https://docs.python.org/2/library/simplexmlrpcserver.html):(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。 -* [zeroRPC](https://github.com/0rpc/zerorpc-python):zerorpc 是一个灵活的 RPC 实现,基于 [ZeroMQ](http://zeromq.org/) 和 [MessagePack](http://msgpack.org/)。 -* [RPyC](https://github.com/tomerfiliba/rpyc) (Remote Python Call):适用于 Python 的透明且对称的RPC库。 - -### 密码学 - -* [cryptography](https://cryptography.io/en/latest/):这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。 -* [hashids](https://github.com/davidaurelio/hashids-python):在 Python 中实现 [hashids](http://hashids.org/) 。 -* [Paramiko](http://www.paramiko.org/):SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。 -* [Passlib](https://pythonhosted.org/passlib/):安全密码存储/哈希库。 -* [PyCrypto](https://www.dlitz.net/software/pycrypto/):Python 密码学工具箱。 -* [PyNacl](https://github.com/pyca/pynacl):网络和密码学(NaCl) 库的 Python 绑定。 - -### 图形用户界面 - -用来创建图形用户界面程序的库。 - -* [curses](https://docs.python.org/2/library/curses.html#module-curses):内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。 -* [enaml](https://github.com/nucleic/enaml):使用类似 QML 的 Declaratic 语法来创建美观的用户界面。 -* [kivy](https://kivy.org/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。 -* [pyglet](https://bitbucket.org/pyglet/pyglet/wiki/Home):一个 Python 的跨平台窗口及多媒体库。 -* [PyQt](https://riverbankcomputing.com/software/pyqt/intro):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。 -* [PySide](https://wiki.qt.io/PySide):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。 -* [Tkinter](https://wiki.python.org/moin/TkInter):Tkinter 是 Python GUI 的一个事实标准库。 -* [Toga](https://github.com/pybee/toga):一个 Python 原生的,操作系统原生的 GUI 工具包。 -* [urwid](http://urwid.org/):一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。 -* [wxPython](http://wxpython.org/):wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。 -* [PyGObject](https://wiki.gnome.org/Projects/PyGObject):GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。 -* [Flexx](https://github.com/zoofIO/flexx):Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。 -* [Eel](https://github.com/ChrisKnott/Eel):用于制作简单离线 HTML/JS GUI 应用的库。 -* [PySimpleGUI](https://github.com/PySimpleGUI/PySimpleGUI):tkinter,Qt,WxPython 和 Remi 的封装。 -* [pywebview](https://github.com/r0x0r/pywebview/):围绕网页视图组件的轻量级跨平台的原生包装。 -* [DearPyGui](https://github.com/RaylockLLC/DearPyGui/):一个简单的可使用 GPU 加速的 Python GUI 框架。 - -### 游戏开发 - -超赞的游戏开发库。 - -* [Cocos2d](http://cocos2d.org/):cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。 -* [Panda3D](https://www.panda3d.org/):由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用 C++ 编写, 针对 Python 进行了完全的封装。 -* [Pygame](http://www.pygame.org/news.html):Pygame 是一组 Python 模块,用来编写游戏。 -* [PyOgre](http://www.ogre3d.org/tikiwiki/PyOgre):Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。 -* [PyOpenGL](http://pyopengl.sourceforge.net/):OpenGL 的 Python 绑定及其相关 APIs。 -* [PySDL2](http://pysdl2.readthedocs.org/en/latest/):SDL2 库的封装,基于 ctypes。 -* [RenPy](https://www.renpy.org/):一个视觉小说(visual novel)引擎。 -* [Arcade](https://arcade.academy/index.html):一个现代 Python 框架,用于制作具有引人入胜的图形与声音的游戏。 -* [Harfang3D](http://www.harfang3d.com):支持3D,VR 与游戏开发的 Python 框架。 - -### 日志 - -用来生成和操作日志的库。 - -* [logging](https://docs.python.org/2/library/logging.html):(Python 标准库) 为 Python 提供日志功能。 -* [logbook](http://pythonhosted.org/Logbook/):Logging 库的替代品。 -* [Eliot](https://eliot.readthedocs.org/en/latest/):为复杂的和分布式系统创建日志。 -* [Raven](http://raven.readthedocs.org/en/latest/):Sentry 的 Python 客户端。 -* [Sentry](https://pypi.python.org/pypi/sentry):实时记录和收集日志的服务器。 -* [sentry-python](https://github.com/getsentry/sentry-python):Python 版 Sentry SDK。 -* [loguru](https://github.com/Delgan/loguru):旨在带来愉悦体验的 Python 日志库。 -* [structlog](https://www.structlog.org/en/stable/):结构化日志,让日志变得简单。 - -### 测试 - -进行代码库测试和生成测试数据的库。 - -* 测试框架 - * [unittest](https://docs.python.org/2/library/unittest.html):(Python 标准库) 单元测试框架。 - * [nose](https://nose.readthedocs.org/en/latest/):nose 扩展了 unittest 的功能。 - * [nose2](https://github.com/nose-devs/nose2) `nose`的继任者,基于 `unittest2`。 - * [contexts](https://github.com/benjamin-hodgson/Contexts):一个 Python 3.3+ 的 BDD 框架。受到 C# Machine.Specifications 的启发。 - * [hypothesis](https://github.com/DRMacIver/hypothesis):Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。 - * [mamba](http://nestorsalceda.github.io/mamba/):Python 的终极测试工具, 拥护 BDD。 - * [pyshould](https://github.com/drslump/pyshould):Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。 - * [pytest](http://pytest.org/latest/):一个成熟的全功能 Python 测试工具。 - * [green](https://github.com/CleanCut/green):干净,多彩的测试工具。 - * [pyvows](http://heynemann.github.io/pyvows/):BDD 风格的测试工具,受 Vows.js 的启发。 - * [Robot Framework](https://github.com/robotframework/robotframework):一个通用的自动化测试框架。 - * [tox](https://tox.readthedocs.io/en/latest/):自动化测试与发布的工具,支持多个 Python 版本。 -* GUI / Web 测试 - * [Selenium](https://pypi.python.org/pypi/selenium):[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。 - * [PyAutoGUI](https://github.com/asweigart/pyautogui):PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。 - * [locust](https://github.com/locustio/locust):使用 Python 编写的,可扩展的用户加载测试工具。 - * [sixpack](https://github.com/seatgeek/sixpack):一个和语言无关的 A/B 测试框架。 - * [splinter](https://splinter.readthedocs.org/en/latest/):开源的 web 应用测试工具。 - * [Schemathesis](https://github.com/kiwicom/schemathesis):基于属性的自动测试工具,用于测试使用 Open API / Swagger 规范构建的 Web 应用程序。 -* Mock 测试 - * [mock](https://docs.python.org/3/library/unittest.mock.html):(Python 标准库) 一个用于伪造测试的库。 - * [doublex](https://pypi.python.org/pypi/doublex):Python 的一个功能强大的 doubles 测试框架。 - * [freezegun](https://github.com/spulec/freezegun):通过伪造日期模块来生成不同的时间。 - * [httmock](https://github.com/patrys/httmock):针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。 - * [httpretty](http://falcao.it/HTTPretty/):Python 的 HTTP 请求 mock 工具。 - * [responses](https://github.com/getsentry/responses):伪造 Python 中的 requests 库的一个通用库。 - * [VCR.py](https://github.com/kevin1024/vcrpy):在你的测试中记录和重放 HTTP 交互。 - * [mocket](https://github.com/mindflayer/python-mocket):gevent/asyncio/SSL 支持的 socket mock 框架。 -* 对象工厂 - * [factoryboy](https://github.com/rbarrois/factoryboy):一个 Python 用的测试固件 (test fixtures) 替代库。 - * [mixer](https://github.com/klen/mixer):另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。 - * [modelmommy](https://github.com/vandersonmota/modelmommy):为 Django 测试创建随机固件。 -* 代码覆盖率 - * [coverage](https://pypi.python.org/pypi/coverage):代码覆盖率测量。 - * [Codecov](https://codecov.io/):一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。 -* 伪数据 - * [faker](http://www.joke2k.net/faker/):一个 Python 库,用来生成伪数据。 - * [fake2db](https://github.com/emirozer/fake2db):伪数据库生成器。 - * [mimesis](https://github.com/lk-geimfari/mimesis):一个帮助你生成伪数据的 Python 库。 - * [radar](https://pypi.python.org/pypi/radar):生成随机的日期/时间。 -* 错误处理 - * [FuckIt.py](https://github.com/ajalt/fuckitpy):使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。 - -### 渗透测试 - -渗透测试相关框架和工具。 - -* [fsociety](https://github.com/Manisso/fsociety):一款渗透测试框架。 -* [setoolkit](https://github.com/trustedsec/social-engineer-toolkit):社会工程工具包。 -* [sqlmap](https://github.com/sqlmapproject/sqlmap):自动 SQL 注入和数据库接管工具。 - -### 代码分析和 Lint 工具 - -进行代码分析、解析和操作代码库的库和工具。 - -* 代码分析 - * [coala](http://coala-analyzer.org/):语言独立和易于扩展的代码分析应用程序。 - * [code2flow](https://github.com/scottrogowski/code2flow):把你的 Python 和 JavaScript 代码转换为流程图。 - * [pycallgraph](https://github.com/gak/pycallgraph):这个库可以把你的 Python 应用的流程(调用图)进行可视化。 - * [pysonar2](https://github.com/yinwang0/pysonar2):Python 类型推断和检索工具。 - * [prospector](https://github.com/PyCQA/prospector):分析 Python 代码的工具。 - * [vulture](https://github.com/jendrikseipp/vulture):用于发现和分析无效 Python 代码的工具。 - -* Lint 工具 - * [Flake8](https://pypi.python.org/pypi/flake8):模块化源码检查工具,提供与 `pycodestyle`、`pyflakes` 、McCabe 相关的装饰器。 - * [awesome-flake8-extensions](https://github.com/DmytroLitvinov/awesome-flake8-extensions) - - * [Pylint](https://www.pylint.org/):一个完全可定制的源码分析器。 - * [YAPF](https://github.com/google/yapf):Google 的 Python 代码格式化工具。 - * [pylama](https://pylama.readthedocs.org/en/latest/):Python 和 JavaScript 的代码审查工具。 - * [wemake-python-styleguide](https://github.com/wemake-services/wemake-python-styleguide):有史以来最严格的 Python 代码审查工具。 - -* 代码格式化 - * [autopep8](https://github.com/hhatto/autopep8):自动格式化 Python 代码,以使其符合 PEP8 规范。 - * [black](https://github.com/ambv/black):一个坚定的 Python 代码格式化工具。 - * [isort](https://github.com/timothycrosley/isort):用于纠正包导入顺序的 Python 库。 - -* 静态类型检查,也可以参考 [awesome-python-typing](https://github.com/typeddjango/awesome-python-typing) - - * [mypy](http://mypy-lang.org/):在编译期间检查变量类型。 - * [pyre-check](https://github.com/facebook/pyre-check):性能类型检查。 - * [typeshed](https://github.com/python/typeshed):带有静态类型的Python库存根的集合。 - -* 静态类型注释生成器 - - * [MonkeyType](https://github.com/Instagram/MonkeyType):通过收集运行时的类型来为 Python 生成静态类型注释的系统。 - * [pyannotate](https://github.com/dropbox/pyannotate):自动生成符合 PEP-484 的注解。 - * [pytype](https://github.com/google/pytype):检查和推断 Python 代码中的类型,无需添加注解。 - -### 调试工具 - -用来进行代码调试的库。 - -* 调试器 - * [ipdb](https://pypi.python.org/pypi/ipdb):IPython 启用的 [pdb](https://docs.python.org/2/library/pdb.html)。 - * [pudb](https://pypi.python.org/pypi/pudb):全屏,基于控制台的 Python 调试器。 - * [pdb++](https://github.com/antocuni/pdb):另一种 pdb 的替代。 - * [pyringe](https://github.com/google/pyringe):可以在 Python 进程中附加和注入代码的调试器。 - * [wdb](https://github.com/Kozea/wdb):一个奇异的 web 调试器,通过 WebSockets 工作。 - * [winpdb](http://winpdb.org/):一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。 -* 追踪器 - * [lptrace](https://github.com/khamidou/lptrace):为 Python 程序打造的 [strace](http://man7.org/linux/man-pages/man1/strace.1.html)。 - * [manhole](https://github.com/ionelmc/python-manhole):调试UNIX套接字连接,并显示所有线程的堆栈跟踪和交互式提示。 - * [pyringe](https://github.com/google/pyringe):能够附加到 Python 进程并将代码注入Python进程的调试器。 - * [python-hunter](https://github.com/ionelmc/python-hunter):一个灵活的代码追踪工具包。 - -* 性能分析器 - * [lineprofiler](https://github.com/rkern/lineprofiler):逐行性能分析。 - * [Memory Profiler](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler):监控 Python 代码的内存使用。 - * [profiling](https://github.com/what-studio/profiling):一个交互式 Python 性能分析工具。 - * [py-spy](https://github.com/benfred/py-spy):Python 程序采样分析器,使用 Rust 实现。 - * [pyflame](https://github.com/uber/pyflame):用于 Python 的跟踪分析器。 - * [vprof](https://github.com/nvdv/vprof):视觉 Python 分析器。 -* 其他 - * [pyelftools](https://github.com/eliben/pyelftools):解析和分析 ELF 文件以及 DWARF 调试信息。 - * [python-statsd](https://github.com/WoLpH/python-statsd):[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。 - * [django-debug-toolbar](https://github.com/django-debug-toolbar/django-debug-toolbar):为 Django 显示各种调试信息。 - * [django-devserver](https://github.com/dcramer/django-devserver):一个 Django 运行服务器的替代品。 - * [flask-debugtoolbar](https://github.com/mgood/flask-debugtoolbar):django-debug-toolbar 的 flask 版。 - * [icecream](https://github.com/gruns/icecream):通过一个简单的函数调用检查变量、表达式和程序执行情况。 - -### 科学计算和数据分析 - -用来进行科学计算和数据分析的库。 - -* [astropy](http://www.astropy.org/):一个天文学 Python 库。 -* [bcbio-nextgen](https://github.com/chapmanb/bcbio-nextgen):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。 -* [bccb](https://github.com/chapmanb/bcbb):生物分析相关代码集合。 -* [Biopython](http://biopython.org/wiki/MainPage):Biopython 是一组可以免费使用的用来进行生物计算的工具。 -* [blaze](http://blaze.readthedocs.org/en/latest/index.html):NumPy 和 Pandas 的大数据接口。 -* [cclib](http://cclib.github.io/):一个用来解析和解释计算化学软件包输出结果的库。 -* [NetworkX](https://networkx.github.io/):一个为复杂网络设计的高性能软件。 -* [Neupy](http://neupy.com/pages/home.html):执行和测试各种不同的人工神经网络算法。 -* [NumPy](http://www.numpy.org/):使用 Python 进行科学计算的基础包。 -* [Open Babel](http://openbabel.org/wiki/MainPage):一个化学工具箱,用来描述多种化学数据。 -* [Open Mining](https://github.com/mining/mining):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。 -* [orange](http://orange.biolab.si/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。 -* [Pandas](http://pandas.pydata.org/):提供高性能,易用的数据结构和数据分析工具。 -* [PyDy](http://www.pydy.org/):PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。 -* [PyMC](https://github.com/pymc-devs/pymc3):马尔科夫链蒙特卡洛采样工具。 -* [RDKit](http://www.rdkit.org/):化学信息学和机器学习软件。 -* [SciPy](http://www.scipy.org/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。 -* [statsmodels](https://github.com/statsmodels/statsmodels):统计建模和计量经济学。 -* [SymPy](https://github.com/sympy/sympy):一个用于符号数学的 Python 库。 -* [zipline](https://github.com/quantopian/zipline):一个 Python 算法交易库。 -* [Bayesian-belief-networks](https://github.com/eBay/bayesian-belief-networks):优雅的贝叶斯理念网络框架。 -* [AWS Data Wrangler](https://github.com/awslabs/aws-data-wrangler):AWS 平台上使用的 Pandas。 -* [Optimus](https://github.com/ironmussa/Optimus):在使用 PySpark 时,让敏捷数据科学工作流程变得简单。 -* [Colour](http://colour-science.org/):大量色彩理论转换和算法的实现。 -* [Karate Club](https://github.com/benedekrozemberczki/karateclub):用于图形结构化数据的无监督机器学习工具箱。 -* [NIPY](http://nipy.org):神经影响学工具箱集合。 -* [ObsPy](https://github.com/obspy/obspy/wiki/):地震学 Python 工具箱。 -* [QuTiP](http://qutip.org/):Python 版 Quantum 工具箱。 -* [SimPy](https://gitlab.com/team-simpy/simpy):一个基于过程的离散事件模拟框架。 - -### 数据可视化 - -进行数据可视化的库。 参见:[awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)。 - -* [matplotlib](http://matplotlib.org/):一个 Python 2D 绘图库。 -* [bokeh](https://github.com/bokeh/bokeh):用 Python 进行交互式 web 绘图。 -* [ggplot](https://github.com/yhat/ggplot):ggplot2 给 R 提供的 API 的 Python 版本。 -* [plotly](https://plot.ly/python/):协同 Python 和 matplotlib 工作的 web 绘图库。 -* [pyecharts](https://github.com/chenjiandongx/pyecharts):基于百度 Echarts 的数据可视化库。 -* [pygal](http://www.pygal.org/en/latest/):一个 Python SVG 图表创建工具。 -* [pygraphviz](https://pypi.python.org/pypi/pygraphviz):Graphviz 的 Python 接口。 -* [PyQtGraph](http://www.pyqtgraph.org/):交互式实时 2D/3D/ 图像绘制及科学/工程学组件。 -* [SnakeViz](http://jiffyclub.github.io/snakeviz/):一个基于浏览器的 Python's cProfile 模块输出结果查看工具。 -* [vincent](https://github.com/wrobstory/vincent):把 Python 转换为 Vega 语法的转换工具。 -* [VisPy](http://vispy.org/):基于 OpenGL 的高性能科学可视化工具。 -* [Altair](https://github.com/altair-viz/altair):用于 Python 的声明式统计可视化库。 -* [bqplot](https://github.com/bloomberg/bqplot):Jupyter Notebook 的交互式绘图库。 -* [Cartopy](https://github.com/SciTools/cartopy):具有 matplotlib 支持的 Python 制图库。 -* [Dash](https://plot.ly/products/dash/):构建在 Flask、React 和 Plotly 之上,旨在用于分析 Web 应用程序。 - * [awesome-dash](https://github.com/Acrotrend/awesome-dash) -* [diagrams](https://github.com/mingrammer/diagrams):用图表作为代码。 -* [plotnine](https://github.com/has2k1/plotnine):基于ggplot2的Python图形语法。 -* [PyGraphviz](https://pypi.org/project/pygraphviz/): [Graphviz](http://www.graphviz.org/) 的 Python 接口。 -* [Seaborn](https://github.com/mwaskom/seaborn):使用 Matplotlib 进行统计数据可视化。 - -### 计算机视觉 - -计算机视觉相关库。 - -* [OpenCV](http://opencv.org/):开源计算机视觉库。 -* [pyocr](https://github.com/jflesch/pyocr):Tesseract 和 Cuneiform 的包装库。 -* [pytesseract](https://github.com/madmaze/pytesseract):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。 -* [SimpleCV](http://simplecv.org/):一个用来创建计算机视觉应用的开源框架。 -* [EasyOCR](https://github.com/JaidedAI/EasyOCR):支持40多种语言的即用型 OCR。 -* [Face Recognition](https://github.com/ageitgey/face_recognition):简单的面部识别库。 -* [Kornia](https://github.com/kornia/kornia/):PyTorch 的开源差异化计算机视觉库。 -* [tesserocr](https://github.com/sirfz/tesserocr):另一个简单的,兼容 Pillow 的 `tesseract-ocr` API 装饰器,可用于 OCR。 - -### 深度学习 - -神经网络和深度学习相关框架。 也可以参考 [awesome-deep-learning](https://github.com/ChristosChristofidis/awesome-deep-learning)。 - -* [Caffe](http://caffe.berkeleyvision.org):一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。 -* [Caffe2](https://caffe2.ai/):一个轻量级的,模块化的,可扩展的深度学习框架。 -* [keras](https://keras.io/):以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。 -* [MXNet](http://mxnet.incubator.apache.org/):一个高效和灵活的深度学习框架。 -* [Pytorch](http://pytorch.org/):一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。 -* [SerpentAI](https://github.com/SerpentAI/SerpentAI):游戏代理框架,可使用任意视频游戏作为深度学习沙箱。 -* [Theano](https://github.com/Theano/Theano):一个快速数值计算库。 -* [TensorFlow](http://tensorflow.org/):谷歌开源的最受欢迎的深度学习框架。 -* [skflow](https://github.com/tensorflow/skflow):一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。 -* [hebel](https://github.com/hannes-brt/hebel):GPU 加速的深度学习库。 -* [pydeep](https://github.com/andersbll/deeppy):Python 深度学习库。 - -### 机器学习 - -机器学习相关库,也可以参考 [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python)。 - -* [Crab](https://github.com/muricoca/crab):灵活、快速的推荐引擎。 -* [NuPIC](https://github.com/numenta/nupic):智能计算 Numenta 平台。 -* [pattern](https://github.com/clips/pattern):Python 网络挖掘模块。 -* [PyBrain](https://github.com/pybrain/pybrain):另一个 Python 机器学习库。 -* [Pylearn2](https://github.com/lisa-lab/pylearn2):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。 -* [python-recsys](https://github.com/ocelma/python-recsys):一个用来实现推荐系统的 Python 库。 -* [scikit-learn](http://scikit-learn.org/):基于 SciPy 构建的机器学习 Python 模块。 -* [vowpalporpoise](https://github.com/josephreisinger/vowpalporpoise):轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。 -* [gym](https://github.com/openai/gym):开发和比较强化学习算法的工具包。 -* [H2O](https://github.com/h2oai/h2o-3):开源快速可扩展的机器学习平台。 -* [Metrics](https://github.com/benhamner/Metrics):机器学习的评估指标。 -* [vowpal_porpoise](https://github.com/josephreisinger/vowpal_porpoise):Python 版 [Vowpal Wabbit](https://github.com/JohnLangford/vowpal_wabbit/) 装饰器。 -* [xgboost](https://github.com/dmlc/xgboost):可扩展,便携式和分布式梯度提升库。 -* [MindsDB](https://github.com/mindsdb/mindsdb):MindsDB 是现有数据库的开源 AI 层,可让使用标准查询轻松地进行开发,训练和部署最新的机器学习模型。 - -### 推荐系统 - -用于构建推荐系统的相关库。 - -* [annoy](https://github.com/spotify/annoy):对 C++/Python 实现的近似近邻算法进行了内存优化。 -* [fastFM](https://github.com/ibayer/fastFM):Factorization Machine 相关库。 -* [implicit](https://github.com/benfred/implicit):对隐式数据集进行协作过滤的快速 Python 实现。 -* [libffm](https://github.com/guestwalk/libffm):Field-aware Factorization Machine (FFM) 相关库。 -* [lightfm](https://github.com/lyst/lightfm):很多流行的推荐算法的 Python 实现。 -* [spotlight](https://github.com/maciejkula/spotlight):使用 PyTorch 实现的深度推荐模型。 -* [Surprise](https://github.com/NicolasHug/Surprise):用于构建和分析推荐系统的科学工具。 -* [tensorrec](https://github.com/jfkirk/tensorrec):TensorFlow 的推荐引擎框架。 - -### 分布式计算 - -分布式计算相关的框架和库。 - -* [dpark](https://github.com/douban/dpark):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。 -* [dumbo](https://github.com/klbostee/dumbo):这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。 -* [luigi](https://github.com/spotify/luigi):这个模块帮你构建批处理作业的复杂流水线。 -* [mrjob](https://github.com/Yelp/mrjob):在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。 -* [dask](https://github.com/dask/dask):用于分析计算的灵活的并行计算库。 -* [PySpark](http://spark.apache.org/docs/latest/programming-guide.html):Spark 的 Python API 。 -* [Ray](https://github.com/ray-project/ray/):一个用于并行和分布式 Python 的系统,它统一了机器学习生态系统。 -* [faust](https://github.com/robinhood/faust):一个 Python 流处理库,核心思想来源 [Kafka Streams](https://kafka.apache.org/documentation/streams/)。 -* [streamparse](https://github.com/Parsely/streamparse):运行针对事实数据流的 Python 代码。集成了 [Apache Storm](http://storm.apache.org/)。 -* [mars](https://github.com/mars-project/mars):是基于张量的,用于进行大规模数据计算的统一计算框架。 - -### 函数式编程 - -使用 Python 进行函数式编程。 - -* [CyToolz](https://github.com/pytoolz/cytoolz/):Toolz 的 Cython 实现:高性能函数式工具。 -* [fn.py](https://github.com/kachayev/fn.py):在 Python 中进行函数式编程:实现了一些享受函数式编程缺失的功能。 -* [funcy](https://github.com/Suor/funcy):炫酷又实用的函数式工具。 -* [Toolz](https://github.com/pytoolz/toolz):一组用于迭代器,函数和字典的函数式编程工具。 -* [Coconut](https://github.com/evhub/coconut):为了简单、优雅、更 Pythonic 的函数式编程而构建的 Python 变体。 -* [more-itertools](https://github.com/erikrose/more-itertools):比 `itertools` 拥有更多的可迭代对象的操作方式。 -* [returns](https://github.com/dry-python/returns):一个类型安全的单元、转换器与合成工具集合。 - -### 第三方 API - -用来访问第三方 API 的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 - -* [apache-libcloud](https://libcloud.apache.org/):一个为各种云设计的 Python 库。 -* [boto3](https://github.com/boto/boto3):Amazon Web Services 的 Python 接口。 -* [django-wordpress](https://github.com/sunlightlabs/django-wordpress/):Django 的 WordPress 模型与视图。 -* [facebook-sdk](https://github.com/mobolic/facebook-sdk):Facebook 平台的 Python SDK。 -* [facepy](https://github.com/jgorset/facepy):Facepy 让和 Facebook's Graph API 的交互变得更容易。 -* [gmail](https://github.com/charlierguo/gmail):Gmail 的 Python 接口。 -* [google-api-python-client](https://github.com/google/google-api-python-client):Python 用的 Google APIs 客户端库。 -* [gspread](https://github.com/burnash/gspread):Google 电子表格的 Python API。 -* [twython](https://github.com/ryanmcgrath/twython):Twitter API 的封装。 - -### DevOps 工具 - -用于 DevOps 的软件和库。 - -* [Ansible](https://github.com/ansible/ansible):一个非常简单的 IT 自动化平台。 -* [SaltStack](https://github.com/saltstack/salt):基础设施自动化和管理系统。 -* [OpenStack](http://www.openstack.org/):用于构建私有和公有云的开源软件。 -* [Docker Compose](https://docs.docker.com/compose/):快速,分离的开发环境,使用 Docker。 -* [Fabric](http://www.fabfile.org/):一个简单的,Python 风格的工具,用来进行远程执行和部署。 -* [cuisine](https://github.com/sebastien/cuisine):为 Fabric 提供一系列高级函数。 -* [Fabtools](https://github.com/ronnix/fabtools):一个用来编写超赞的 Fabric 文件的工具。 -* [gitapi](https://bitbucket.org/haard/gitapi):Git 的纯 Python API。 -* [hgapi](https://bitbucket.org/haard/hgapi):Mercurial 的纯 Python API。 -* [honcho](https://github.com/nickstenning/honcho):[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile) 的应用。 -* [pexpect](https://github.com/pexpect/pexpect):在一个伪终端中控制交互程序,就像 GNU expect 一样。 -* [psutil](https://github.com/giampaolo/psutil):一个跨平台进程和系统工具模块。 -* [supervisor](https://github.com/Supervisor/supervisor):UNIX 的进程控制系统。 -* [cloudinit](https://cloudinit.readthedocs.io/en/latest/):一个多分发包,用于处理云实例的早期初始化。 -* [pyinfra](https://github.com/Fizzadar/pyinfra):一个通用的 CLI 工具包和 python 库,用于自动化的基础设施。 -* [honcho](https://github.com/nickstenning/honcho):[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用于管理基于 Procfile 的应用。 -* [BorgBackup](https://www.borgbackup.org/):具有压缩和加密功能的重复数据删除存档器。 -* [docker-compose](https://docs.docker.com/compose/): 使用 [Docker](https://www.docker.com/) 的快速独立的开发环境。 - -### 任务调度 - -任务调度库。 - -* [APScheduler](http://apscheduler.readthedocs.org/en/latest/):轻巧但强大的进程内任务调度,使你可以调度函数。 -* [django-schedule](https://github.com/thauber/django-schedule):一个 Django 排程应用。 -* [doit](http://pydoit.org/):一个任务执行和构建工具。 -* [gunnery](https://github.com/gunnery/gunnery):分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。 -* [Joblib](http://pythonhosted.org/joblib/index.html):一组为 Python 提供轻量级作业流水线的工具。 -* [Plan](https://github.com/fengsp/plan):如有神助地编写 crontab 文件。 -* [schedule](https://github.com/dbader/schedule):人性化的 Python 任务调度库。 -* [Spiff](https://github.com/knipknap/SpiffWorkflow):使用纯 Python 实现的强大的工作流引擎。 -* [TaskFlow](http://docs.openstack.org/developer/taskflow/):一个可以让你方便执行任务的 Python 库,一致并且可靠。 -* [Airflow](https://airflow.apache.org/) :是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。 -* [Prefect](https://github.com/PrefectHQ/prefect):一个现代的工作流程编排框架,使构建、计划和监视健壮的数据管道变得容易。 - -### 外来函数接口 - -使用外来函数接口的库。 - -* [cffi](https://pypi.python.org/pypi/cffi):用来调用 C 代码的外来函数接口。 -* [ctypes](https://docs.python.org/2/library/ctypes.html):(Python 标准库) 用来调用 C 代码的外来函数接口。 -* [PyCUDA](https://mathema.tician.de/software/pycuda/):Nvidia CUDA API 的封装。 -* [SWIG](http://www.swig.org/Doc1.3/Python.html):简化的封装和接口生成器。 - -### 重构 - -Python 重构相关库和工具。 - - * [Bicycle Repair Man](http://bicyclerepair.sourceforge.net/):Python 的重构工具。 - * [Bowler](https://pybowler.io/):适用于现代Python的安全代码重构。 - * [Rope](https://github.com/python-rope/rope):一个 Python 的重构库。 - -### 高性能 - -让 Python 更快的库。 - -* [Cython](http://cython.org/):优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。 -* [CLPython](https://github.com/metawilm/cl-python):用 Common Lisp 编写的 Python 编程语言的实现。 -* [Grumpy](https://github.com/google/grumpy):编译器比解释器更强大的 cpython2.7 替代品(alpha)。 -* [IronPython](https://github.com/IronLanguages/ironpython3):用 C# 编写的 Python 编程语言的实现。 -* [Jython](https://hg.python.org/jython):为 JVM 用 Java 编写的 Python 编程语言的实现。 -* [MicroPython](https://github.com/micropython/micropython):精简高效的 Python 编程语言实现。 -* [Pyjion](https://github.com/Microsoft/Pyjion):基于 CoreCLR 的 Python JIT。 -* [Numba](http://numba.pydata.org/):Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。 -* [PeachPy](https://github.com/Maratyszcza/PeachPy):嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows,Linux,OS X,Native Client 或者 Go 。 -* [PyPy](http://pypy.org/):使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。 -* [Pyston](https://github.com/dropbox/pyston):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。 -* [Stackless Python](https://bitbucket.org/stackless-dev/stackless/overview):一个强化版的 Python。 - -### 微软的 Windows 平台 - -在 Windows 平台上进行 Python 编程。 - -* [Python(x,y)](http://python-xy.github.io/):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。 -* [pythonlibs](http://www.lfd.uci.edu/~gohlke/pythonlibs/):非官方的 Windows 平台 Python 扩展二进制包。 -* [PythonNet](https://github.com/pythonnet/pythonnet):Python 与 .NET 公共语言运行库 (CLR)的集成。 -* [PyWin32](https://sourceforge.net/projects/pywin32/):针对 Windows 的 Python 扩展。 -* [WinPython](https://winpython.github.io/):Windows 7/8 系统下便携式开发环境。 - -### 网络可视化和 SDN - -用来进行网络可视化和 SDN(软件定义网络)的工具和库。 - -* [Mininet](http://mininet.org/):一款流行的网络模拟器以及用 Python 编写的 API。 -* [POX](https://github.com/noxrepo/pox):一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。 -* [Pyretic](http://frenetic-lang.org/pyretic/):火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。 -* [SDX Platform](https://github.com/sdn-ixp/internet2award):基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。 -* [NRU](http://ryu.readthedocs.io/en/latest/):一个基于组件的软件定义网络框架。 -* [napalm](https://github.com/napalm-automation/napalm):可跨供应商 API 来操纵网络设备。 - -### 硬件 - -用来对硬件进行编程的库。 - -* [ino](http://inotool.org/):操作 [Arduino](https://www.arduino.cc/) 的命令行工具。 -* [Pyro](http://pyrorobotics.com/):Python 机器人编程库。 -* [PyUserInput](https://github.com/SavinaRoja/PyUserInput):跨平台的,控制鼠标和键盘的模块。 -* [scapy](https://github.com/secdev/scapy):一个非常棒的操作数据包的库。 -* [wifi](https://wifi.readthedocs.org/en/latest/):一个 Python 库和命令行工具用来在 Linux 平台上操作 WiFi。 -* [Pingo](http://www.pingo.io/):Pingo 为类似 Raspberry Pi,pcDuino, Intel Galileo 等设备提供统一的 API 用以编程。 -* [keyboard](https://github.com/boppreh/keyboard):在 Windows 和 Linux 上挂钩并模拟全局键盘事件。 -* [mouse](https://github.com/boppreh/mouse):在 Windows 和 Linux 上挂钩并模拟全局鼠标事件。 - -### 兼容性 - -帮助从 Python 2 向 Python 3 迁移的库。 - -* [Python-Future](http://python-future.org/index.html):这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。 -* [Six](https://pypi.python.org/pypi/six):Python 2 和 3 的兼容性工具。 -* [modernize](https://github.com/PyCQA/modernize):使 Python 代码更加现代化以便最终迁移到 Python 3。 - -### 算法和设计模式 - -数据结构、算法和设计模式的 Python 实现。也可以参考 [awesome-algorithms](https://github.com/tayllan/awesome-algorithms) 。 - -* 算法 - * [algorithms](https://github.com/keon/algorithms):数据结构和算法的简单示例。 - * [python-ds](https://github.com/prabhupant/python-ds):用于面试的数据结构和算法的集合。 - * [sortedcontainers](https://github.com/grantjenks/python-sortedcontainers):排序集合的快速的纯 Python 实现。 - * [TheAlgorithms](https://github.com/TheAlgorithms/Python):所有算法的 Python 实现。 -* 设计模式 - * [PyPattyrn](https://github.com/tylerlaberge/PyPattyrn):一个简单而有效的库,用于实现常见的设计模式。 - * [python-patterns](https://github.com/faif/python-patterns):一个 Python 设计模式集合。 - * [transitions](https://github.com/pytransitions/transitions):轻量级的,面向对象的有限状态机实现。 - - - -### 内置类的增强版实现 - -一些 Python 内置类的增强版实现库。 - -* [attrs](https://github.com/python-attrs/attrs):一个在类定义时可替换 `__init__`, `__eq__`, `__repr__`等方法的样板。 -* [bidict](https://github.com/jab/bidict):高效的 Pythonic 的双向映射数据结构和相关功能。 -* [Box](https://github.com/cdgriffith/Box):具有高级点符号访问权限的 Python 字典。 -* [dataclasses](https://docs.python.org/3/library/dataclasses.html):(Python 标准库) 数据类。 -* [DottedDict](https://github.com/carlosescri/DottedDict):提供一种使用点路径符号访问列表和字典的方法的库。 - -### 机器人 - -机器人相关库。 - -* [PythonRobotics](https://github.com/AtsushiSakai/PythonRobotics):各种具有可视化效果的机器人算法的汇总。 -* [rospy](http://wiki.ros.org/rospy):ROS (Robot Operating System) 库。 - -### 聊天工具 - -聊天机器人开发相关的库。 - -* [errbot](https://github.com/errbotio/errbot/):实现 ChatOps 的最简单最受欢迎的聊天机器人。 - -### 编辑器插件和 IDE - -* Emacs - * [elpy](https://github.com/jorgenschaefer/elpy):Emacs Python 开发环境。 -* Sublime Text - * [anaconda](https://github.com/DamnWidget/anaconda):Anaconda 可将功能齐全的 Python 开发 IDE 转换为 Sublime Text 3。 - * [SublimeJEDI](https://github.com/srusskih/SublimeJEDI):一个很棒的自动补全库 Jedi 的Sublime Text 插件。 -* Vim - * [jedi-vim](https://github.com/davidhalter/jedi-vim):用于 Python 的 Jedi 自动补全库的 Vim 绑定。 - * [python-mode](https://github.com/python-mode/python-mode):一个将 Vim 转换为 Python IDE 的多合一插件。 - * [YouCompleteMe](https://github.com/Valloric/YouCompleteMe):包含 Jedi 补全的 Python 引擎。 -* Visual Studio - * [PTVS](https://github.com/Microsoft/PTVS):Visual Studio Python 工具。 -* Visual Studio Code - * [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python):对 Python 有丰富支持的官方 VSCode 扩展。 -* IDE - * [PyCharm](https://www.jetbrains.com/pycharm/):JetBrains 提供的商业 Python IDE,也有免费的社区版。 - * [spyder](https://github.com/spyder-ide/spyder): 开源 Python IDE。 - -### 企业级应用集成 - -企业级环境中用于集成的平台与工具。 - -* [Zato](https://zato.io):ESB, SOA, REST, APIs 以及云的 Python 整合。 - -### GraphQL - -GraphQL 相关库。 - -* [graphene](https://github.com/graphql-python/graphene/):Python GraphQL 框架。 -* [tartiflette-aiohttp](https://github.com/tartiflette/tartiflette-aiohttp/):Tartiflette 的基于 aiohttp 的装饰器,用于通过 HTTP 公开 GraphQL API。 -* [tartiflette-asgi](https://github.com/tartiflette/tartiflette-asgi/):Tartiflette GraphQL 引擎的 ASGI 支持。 -* [tartiflette](https://tartiflette.io):支持 Python 3.6+ 和 asyncio 的 SDL 优先的 GraphQL 引擎实现。 - -### 股票金融 -- [QUANTAXIS](https://github.com/QUANTAXIS/QUANTAXIS):支持任务调度,分布式部署的股票/期货/期权/港股/虚拟货币的数据/回测/模拟/交易/可视化/多账户纯本地量化解决方案 -- [abu](https://github.com/bbfamily/abu): 基于python的开源量化交易,量化投资架构 -- [Hikyuu Quant](https://github.com/fasiondog/hikyuu):基于C++/Python的开源量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等) -- [vnpy](https://github.com/vnpy/vnpy):基于Python的开源量化交易系统开发框架,整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用 - -### 杂项 - -不属于上面任何一个类别,但是非常有用的库。 - -* [blinker](https://github.com/jek/blinker):快速的 Python 运行时信号/事件分配系统。 -* [boltons](https://github.com/mahmoud/boltons):一组纯 Python 实用工具。 -* [itsdangerous](https://github.com/pallets/itsdangerous):将受信任的数据传递到不受信任的环境的帮助工具。 -* [magenta](https://github.com/magenta/magenta):使用人工智能生成音乐与艺术的工具。 -* [pluginbase](https://github.com/mitsuhiko/pluginbase):一个简单但灵活的 Python 插件系统。 -* [tryton](http://www.tryton.org/):一个通用业务框架。 diff --git a/docs/zh/technical/Basic-knowlegde/Ubuntu use.md b/docs/zh/technical/Basic-knowlegde/Ubuntu use.md deleted file mode 100644 index 24dcdfa..0000000 --- a/docs/zh/technical/Basic-knowlegde/Ubuntu use.md +++ /dev/null @@ -1,202 +0,0 @@ -# Ubuntu使用指南 - -## Ubuntu的安装 - -- 搜索下载Ubuntu桌面版 - ![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu1-oc-output.jpg) - 打开VMware--创建新的虚拟机名称--选择下载好的Ubuntu文件--创建虚拟机名称--按需选择最大磁盘大小 - 以下为上面步骤完成后的操作流程 - - 1.可以看图片操作,从第4步开始看(语言选择中文),可以跳过第6步,看到第10步即可 - 2.一直点击右下角的下一步即可 -   - -## 以下是用VScode连接ubuntu - -- 第一步:下载ssh - ![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu4-oc-output.jpg) - -- 第二步:新建--输入电脑IP--选择Linux - ![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu5-oc-output.jpg) - -## 若出现无法连接的情况 - -1.先查看ubuntu上是否安装ssh - -按Ctrl+Alt+T打开终端,依次执行以下命令 - -``` -sudo apt update -sudo apt install openssh-server -``` - -若出现以下情况,则需要进行换源 - -![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu6-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu3-oc-output.jpg) - - - - -以下以清华源为例 - - - -1. 备份原配置文件 - - ``` - sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak - ``` - -2. 编辑新的源文件 - - ``` - sudo vi /etc/apt/sources,list - ``` - -3. 复制粘贴源文件 - -4. 按Esc键退出编辑模式 - -5. 输入 :wq 并回车,即保存并退出 - -可以查看当前源文件 - -``` -cat /etc/apt/sources.list -``` - -换源完成后可以安装ssh - -``` -sudo apt update -sudo apt install openssh-server -``` - -可以通过以下指令查看状态 - -``` -sudo systemctl status ssh -``` - -![alt text](../../../public/technical/Basic-knowledge/markdown/Ubuntu2-oc-output.jpg) - -此为连接成功 - - - -以下指令可以查看备份文件 - -``` -cat /etc/apt/sources.list.bak -``` - -确认文件是否丢失 - -``` -ls -l /etc/apt/ | grep<文件名> -#查看是否有相关文件 -``` - -``` -find /etc/apt/-name"sources.list*" -#搜索所有以sources.list开头的文件 -``` - -## Ubuntu使用指南 - -#### 桌面环境入门:GNOME的基本操作 - -1. 顶部栏:屏幕顶部的栏 - - - 活动:左上角或按 Super(Windows)键,可以显示所有窗口和程序坞。 - - - 程序坞:屏幕左侧的快捷栏,可以固定常用应用。 - - - 状态菜单:右上角,包含网络、声音、电池、用户和系统设置。 - -2. 工作区:GNOME 默认使用多工作区来管理窗口。在“活动”视图中,你可以将窗口拖到右侧的空白工作区,实现任务分离。 - -3. 基本快捷键 - - * Win键:打开/关闭“活动”概述 - - * Win + A:打开应用视图 - - * Win + Tab:在运行的应用间切换 - - * Alt + Tab:在相同工作区的窗口间切换 - - * Ctrl + Alt + T:快速打开终端 - - * Win + L:锁定屏幕 - -#### 软件管理:安装、更新和卸载 - -1. Ubuntu 软件中心(图形化,推荐新手)类似于手机的应用商店。你可以浏览、搜索和一键安装成千上万的免费软件。它还会自动处理更新。 - -2. APT 包管理器(命令行,最常用)这是 Ubuntu 软件管理的核心工具,功能强大。 - - * 更新软件源列表:sudo apt update - - * 升级已安装的软件包:sudo apt upgrade - - * 安装一个软件:sudo apt install <软件包名> - - * 卸载一个软件:sudo apt remove <软件包名> - - * 搜索软件:apt search <关键词> - -#### 终端与命令行 - -1. 基本命令 - - * pwd:显示当前所在目录的路径 - - * ls:列出当前目录下的文件和文件夹 - - * cd <目录名>:切换目录。(cd .. 返回上一级;cd ~ 回到家目录) - - * cp <源文件> <目标位置>:复制文件 - - * mv <源文件> <目标位置>:移动文件(也可用于重命名) - - * rm <文件名>:删除文件(小心使用,默认不进回收站)。rm -r <目录名> 删除目录 - - * mkdir <目录名>:创建新目录 - - * man <命令>:查看某个命令的详细手册(如 man ls) - -2. 使用技巧 - - * Tab 键自动补全:输入命令或文件名的一部分,按 Tab 键可以自动补全,避免输错 - - * 上下箭头:快速调用之前执行过的命令 - - * sudo:在命令前加上 sudo,表示以管理员权限执行该命令(需要输入你的密码) - -#### 常见问题与技巧 - -* 如何安装 .deb 包?双击下载的 .deb 文件,它会在“软件中心”中打开并提示安装。或者使用命令行:sudo dpkg -i <文件名.deb> - -* 如何解压 .tar.gz 或 .zip 文件?右键点击文件,通常会有“解压缩到此处”的选项。命令行使用 tar -xzf <文件名.tar.gz> 或 unzip <文件名.zip> - -* 如何访问 Windows 分区或 U 盘?插入 U 盘或启动到 Ubuntu 后,它们通常会自动挂载并出现在左侧程序坞或“文件”应用中 - -* 如何解决依赖问题?在安装软件时如果遇到依赖错误,可以运行 sudo apt --fix-broken install 来尝试修复 - -* 忘记密码怎么办?这是一个比较进阶的操作,需要进入恢复模式重置 root 密码,然后修改用户密码。建议新手通过搜索引擎查找详细步骤。 - -总结: -=== - -1. .图形界面操作与终端命令相结合;使用“软件”应用或sudo apt install 命令来安装和管理软件。 -2. 熟练使用基础终端命令(如ls, cd, sudo)和包管理器 (apt update && apt upgrade)是高效使用Ubuntu的关键。 -3. 定期更新系统,并通过“快照”功能备份虚拟机状态,以便在出现问题时快速恢复。 - - - - 简单来说:熟悉图形界面,掌握终端基础命令和apt软件安装,并养成定期更新和备份的好习惯,就能轻松上手Ubuntu。 - -### diff --git a/docs/zh/technical/Basic-knowlegde/VMinstall.md b/docs/zh/technical/Basic-knowlegde/VMinstall.md deleted file mode 100644 index 50d1f02..0000000 --- a/docs/zh/technical/Basic-knowlegde/VMinstall.md +++ /dev/null @@ -1,25 +0,0 @@ -# VM安装流程 - -#### 搜索VM官网 - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM1-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM2-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM3-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM4-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM5-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM6-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM7-oc-output.jpg) - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM8-oc-output.jpg) - -#### 任意版本都可以 - -![alt text](../../../public/technical/Basic-knowledge/markdown/VM9-oc-output.jpg) - -#### 先阅读条款与条件,然后再下载 diff --git a/docs/zh/technical/Basic-knowlegde/Windows_command.md b/docs/zh/technical/Basic-knowlegde/Windows_command.md deleted file mode 100644 index 96f2461..0000000 --- a/docs/zh/technical/Basic-knowlegde/Windows_command.md +++ /dev/null @@ -1,105 +0,0 @@ -# 常用Windows终端命令 - - -#### 列出当前目录中的文件和文件夹 - -``` -dir -``` - -#### 切换当前目录 - -``` -cd C:\Users\user_name\Desktop -``` - -#### 新建一个目录 - -``` -md new_folder -``` - -#### 删除一个目录 - -``` -rd old_folder -``` - -#### 显示指定文件的内容 - -``` -type file.txt -``` - -#### 复制文件或文件夹 - -``` -copy file.txt backup_file.txt -``` - -#### 复制文件夹及其内容 - -``` -xcopy source_folder destination_folder /E -``` - -* 将source_folder替换为要复制的源文件夹路径,将destination_folder替换为目标文件夹路径。 - -#### 移动文件或文件夹 - -``` -move file.txt C:\Users\user_name\Documents -``` - -#### 删除一个或多个文件 - -``` -del file.txt -``` - -#### 测试网络连接状态 - -``` -ping www.google.com -``` - -#### 显示计算机的网络配置信息,如IP地址、子网掩码等 - -``` -ipconfig -``` - -#### 追踪数据包从本地计算机到目标计算机的路由路径 - -``` -tracert www.google.com -``` - -#### 显示当前计算机的网络连接状态、协议等信息 - -``` -netstat -a -``` - -#### 显示当前正在运行的进程列表 - -``` -tasklist -``` - -#### 结束一个进程 - -``` -taskkill /im process.exe /f -``` - -* 将process.exe替换为要结束的进程名称。 - - -#### 显示计算机的硬件和软件配置信息 - -``` -systeminfo -``` - -### 这些是一些常用的Windows终端命令及其示例,它们可以帮助您在命令行中完成许多任务。 \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/docker_command.md b/docs/zh/technical/Basic-knowlegde/docker_command.md deleted file mode 100644 index d04962b..0000000 --- a/docs/zh/technical/Basic-knowlegde/docker_command.md +++ /dev/null @@ -1,121 +0,0 @@ -# Docker常用命令 - -### 从 Docker 镜像仓库获取镜像 - -``` -docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -``` - -* Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址 是 Docker Hub。 -* 仓库名:如之前所说,这里的仓库名是两段式名称,即 。 对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。 - -### 运行 - -``` -docker run -it --rm \ - ubuntu:18.04 \ - bash -``` - -* `-it` :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们 这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终 端。 -* `--rm` :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需 求,退出的容器并不会立即删除,除非手动 * `docker rm` 。我们这里只是随便 执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免 浪费空间。 -* `ubuntu:18.04`:这是指用 ubuntu:18.04 镜像为基础来启动容器。 -* `bash`:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的 - 是。 - -### 列出镜像 - -``` -docker image ls -``` - -### 查看docker所占磁盘空间 - -``` -docker system df -``` - -### 删除镜像 - -``` -docker image rm -``` - -* ``可以是长ID,短ID(取前三位),镜像名 - -### 提交镜像 - -``` -docker commit -``` - -* `` 替换为实际的容器名称或ID -* `` 替换为新镜像的命名 - -### 通过Dockerfile下载镜像 - -在Dockerfile文件所在目录下执行以下命令 - -``` -docker build -t . -``` - -* `` 替换为新镜像的命名 - - - -### 操作容器 - -创建容器 - -``` -docker run -d --name -``` - -运行容器 - -``` -docker start -``` - -进入容器 - -``` -docker exec -it sh -``` - -停止容器 - -``` -docker stop -``` - -删除容器 - -``` -docker rm -``` - -查看运行的容器 - -``` -docekr ps -``` - -查看所有容器 - -``` -docker ps -a -``` - -保存镜像 - -``` -docker save -o ubuntu.tar ubuntu -``` - -加载镜像 - -``` -docker load -i ubuntu.tar -``` \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/git_command.md b/docs/zh/technical/Basic-knowlegde/git_command.md deleted file mode 100644 index f3be69e..0000000 --- a/docs/zh/technical/Basic-knowlegde/git_command.md +++ /dev/null @@ -1,1086 +0,0 @@ -# Git - -## 介绍 - -Git是一种分布式版本控制系统,它可以记录文件的变更历史并协调多人在同一个代码库上的开发。使用Git,开发人员可以轻松地跟踪代码的修改、回退到以前的版本、合并不同的代码分支和解决代码冲突等任务。Git最初由Linus Torvalds创建,现在是开源社区中最流行的版本控制系统之一。 - -### 在Git中,有四个重要的概念:工作区、缓冲区、本地仓库和远程仓库。 - -* 工作区:工作区(Working Directory)是指开发者正在进行开发工作的目录。它包含了项目的源码文件、资源文件等内容。在这个目录下,开发者可以自由修改、添加、删除文件等操作。 - -* 缓冲区:缓冲区(Staging Area)也称为索引(Index),它是一个临时存储区域,用于存放即将提交到本地仓库的文件变更。开发者对工作区所做的修改,需要先通过git add命令将修改加入到缓冲区,才能提交到本地仓库。 - -* 本地仓库:本地仓库(Local Repository)是指保存在本地计算机上的Git仓库。它包含了代码库的完整历史记录、分支、标签等信息。在开发过程中,每次提交到缓冲区的变更,都可以通过git commit命令保存到本地仓库中。 - -* 远程仓库:远程仓库(Remote Repository)是指保存在远程服务器上的Git仓库。它包含了与本地仓库相同的内容,但它是由多个开发者共享的中央代码库。开发者可以通过git push命令将本地仓库中的变更推送到远程仓库,也可以通过git pull命令将远程仓库的变更更新至本地仓库。 - -## 信息配置 - -### 初始配置 - -``` -git config --global user.name "你的用户名" -git config --global user.email "你的邮箱" -``` - - -### 代理配置 - -``` -git config --global http.proxy http://127.0.0.1:7890 -``` - - -### 清除代理 - -``` -git config --global --unset http.proxy -git config --global --unset https.proxy -``` - - -## 查看配置信息 - -``` -git config --list -``` - - -## 查看Git版本 - -``` -git -v -``` - - -## 操作仓库 - -### 拉取远程仓库 - -``` -git clone https://github.com/JackLau1222/OpenConverter -``` - - -### 切换分支 - -`git switch` 和 `git checkout` 都可以用于切换分支,但它们的用途和行为有一些区别。以下是它们的详细对比: - -#### git checkout - -`git checkout` 是 Git 中一个非常通用的命令,用途广泛,但正是因为它的多功能性,容易让人混淆。 - -##### 主要操作 - -**1. 切换分支** - -``` -git checkout develop -``` - -**2. 创建并切换到新分支** - -``` -git checkout -b new-branch -``` - -**3. 检出文件或提交** - -- 检出某个提交的文件 - - ``` - git checkout -- - ``` - -- 检出某个提交(进入分离头指针状态) - - ``` - git checkout - ``` - - ------ - -#### git switch - -`git switch` 是 Git 2.23 版本引入的新命令,专门用于切换分支,目的是简化分支操作,避免 `git checkout` 的多功能性问题。 - -##### 主要操作 - -**1. 切换分支** - - ``` - git switch develop - ``` - -**2. 创建并切换到新分支** - - ``` - git switch -c new-branch - ``` - -**3. 切换到已存在的分支** - - ``` - git switch existing-branch - ``` - - ------ - -#### 主要区别 - -| 特性 | `git checkout` | `git switch` | -| :----------------- | :--------------------------------------- | :------------------------- | -| **用途** | 多功能:切换分支、检出文件、检出提交等。 | 单一功能:仅用于切换分支。 | -| **创建新分支** | `git checkout -b new-branch` | `git switch -c new-branch` | -| **切换分支** | `git checkout develop` | `git switch develop` | -| **检出文件或提交** | 支持(如 `git checkout `) | 不支持 | -| **语义清晰度** | 容易混淆 | 更直观,语义更清晰 | -| **Git 版本要求** | 所有版本 | Git 2.23 及以上版本 | - - -### 更新本地仓库(自动同步) - -``` -git pull -``` - - -### 更新本地仓库(手动同步) - -``` -git fetch -git merge -``` - - -### 添加一个名为test的cpp文件(Unix/Linux) - -``` -touch test.cpp -``` - - -### 添加一个名为test的cpp文件(Windows) - -``` -type nul > test.cpp -``` - - -### 将此更改提交到缓冲区 - -``` -git add test.cpp -``` - - -### 将更改提交到本地仓库 - -``` -git commit -a -m “add test.cpp” -``` -在commit中,我们可以使用-m参数,以便能够直接在命令行上提供日志消息。如果您希望通过交互式编辑器会话提供详细的日志消息,也可以这样做。你需要配置Git在Git提交期间启动你最喜欢的编辑器(去掉-m参数);如果尚未设置,则可以设置 - -$GIT_EDITOR环境变量如下: -``` -# In bash or zsh -$ export GIT_EDITOR=vim - -# In tcsh -$ setenv GIT_EDITOR emacs -``` - -更改commit message -``` -git commit --amend -``` - -更改commit author email -``` -git commit --amend --author="Jack Lau " -``` - -### 提交到目标仓库 - -``` -git push -``` - - -### 查看提交日志 - -#### 主要操作 - -``` -git log -``` - -- 用于显示当前分支的提交历史,按时间倒序排列。 - ---- - -### 查看提交摘要(按作者分组) - -#### 主要操作 - -``` -git shortlog -``` - -- 用于按作者分组显示提交摘要,默认按作者名字母顺序排列。 - ---- - -#### 常用参数 - -**1. 统计提交数量** - -- `-s` 或 `--summary`:仅显示每个作者的提交数量。 - - ``` - git shortlog -s - ``` - -- `-n` 或 `--numbered`:按提交数量排序(从多到少)。 - - ``` - git shortlog -sn - ``` - -**2. 显示邮箱** - -- `-e` 或 `--email`:显示作者的邮箱地址。 - - ``` - git shortlog -se - ``` - -**3. 过滤提交** - -- `--author=`:按作者过滤。 - - ``` - git shortlog --author="John" - ``` - -- `--since=` 和 `--until=`:按时间范围过滤。 - - ``` - git shortlog --since="2023-01-01" --until="2023-12-31" - ``` - -- `-- `:查看特定文件或目录的提交摘要。 - - ``` - git shortlog -- README.md - ``` - -**4. 其他常用参数** - -- `--all`:显示所有分支的提交摘要。 - - ``` - git shortlog --all - ``` - -- `--no-merges`:排除合并提交。 - - ``` - git shortlog --no-merges - ``` - ---- - -#### 组合使用示例 - -- 显示所有作者的提交数量,按数量排序: - - ``` - git shortlog -sn - ``` - -- 显示某个时间范围内的提交摘要: - - ``` - git shortlog --since="2023-01-01" --until="2023-12-31" - ``` - -- 显示某个作者的提交摘要,包含邮箱: - - ``` - git shortlog -e --author="John" - ``` - ---- - -#### 常用参数 - -**1. 格式化输出** - -- `--oneline`:每个提交显示为一行,包含简短的提交哈希和提交信息。 - - ``` - git log --oneline - ``` - -- `--graph`:以 ASCII 图形显示分支和合并历史。 - - ``` - git log --graph - ``` - -- `--decorate`:显示分支、标签等引用信息。 - - ``` - git log --decorate - ``` - -- `--pretty=`:自定义输出格式。常用的格式包括: - - - `short`:简短格式。 - - `full`:完整格式。 - - `fuller`:更详细的格式。 - - `format:"<自定义格式>"`:完全自定义格式。 - - ``` - git log --pretty=format:"%h - %an, %ar : %s" - ``` - -**2. 过滤提交** - -- `-n `:限制显示的提交数量。 - - ``` - git log -n 5 # 显示最近 5 条提交 - ``` - -- `--author=`:按作者过滤提交。 - - ``` - git log --author="John" - ``` - -- `--grep=`:按提交信息过滤提交。 - - ``` - git log --grep="bug fix" - ``` - -- `--since=` 和 `--until=`:按时间范围过滤提交。 - - ``` - git log --since="2023-01-01" --until="2023-12-31" - ``` - -- `-- `:查看特定文件或目录的提交历史。 - - ``` - git log -- README.md - ``` - -**3. 显示差异** - -- `-p` 或 `--patch`:显示每个提交的详细差异。 - - ``` - git log -p - ``` - -- `--stat`:显示每个提交的简略统计信息(修改的文件和行数)。 - - ``` - git log --stat - ``` - -**4. 其他常用参数** - -- `--all`:显示所有分支的提交历史。 - - ``` - git log --all - ``` - -- `--branches`:显示所有分支的提交历史。 - - ``` - git log --branches - ``` - -- `--tags`:显示所有标签的提交历史。 - - ``` - git log --tags - ``` - -- `--merges`:仅显示合并提交。 - - ``` - git log --merges - ``` - -- `--no-merges`:排除合并提交。 - - ``` - git log --no-merges - ``` - ------- - -#### 组合使用参数 - -你可以将多个参数组合使用,以满足特定的需求。例如: - -- 显示最近 10 条提交,并以单行格式显示: - - ``` - git log -n 10 --oneline - ``` - -- 显示带有分支图的提交历史,并显示引用信息: - - ``` - git log --graph --decorate - ``` - -- 显示某个作者的提交,并显示详细差异: - - ``` - git log --author="John" -p - ``` - -- 显示某个时间范围内的提交,并显示简略统计信息: - - ``` - git log --since="2023-01-01" --until="2023-12-31" --stat - ``` - ------- - -#### 自定义格式 - -使用 `--pretty=format:"<格式>"` 可以完全自定义日志输出。常用的占位符包括: - -- `%H`:提交的完整哈希值。 -- `%h`:提交的简短哈希值。 -- `%an`:作者名字。 -- `%ae`:作者邮箱。 -- `%ad`:作者日期(格式可用 `--date=` 指定)。 -- `%ar`:作者日期(相对时间,如 "2 days ago")。 -- `%s`:提交信息。 - -例如: - -``` -git log --pretty=format:"%h - %an, %ar : %s" -``` - ------- - -#### 查看帮助 - -如果你想查看 `git log` 的所有参数,可以运行: - -``` -git log --help -``` - -这会打开 Git 的帮助文档,列出所有可用的参数及其说明。 - - -### 查看提交状态 - -``` -git status -``` - - -### 代码回滚 - -``` -git reset --hard -``` - - -### 撤销提交(创建反向提交) - -#### 作用 - -`git revert` 用于撤销一个或多个提交,通过创建一个新的提交来反向应用之前的更改。与 `git reset` 不同,`git revert` 不会修改提交历史,因此更适合在已推送的提交上使用。 - -#### 主要操作 - -##### 1. 撤销单个提交 - -- 撤销指定的提交: - - ``` - git revert - ``` - - 例如: - - ``` - git revert a1b2c3d - ``` - -##### 2. 撤销多个提交 - -- 撤销一个范围内的提交: - - ``` - git revert .. - ``` - - 例如: - - ``` - git revert a1b2c3d..e4f5g6h - ``` - -##### 3. 撤销合并提交 - -- 撤销合并提交需要指定主线(mainline): - - ``` - git revert -m 1 - ``` - - `-m 1` 表示保留第一个父提交的更改。 - -#### 常用参数 - -- `-n` 或 `--no-commit`:撤销更改但不自动创建提交,允许你手动修改后再提交。 - - ``` - git revert -n - ``` - -- `-e` 或 `--edit`:在创建撤销提交前编辑提交信息(默认行为)。 - - ``` - git revert -e - ``` - -- `--no-edit`:使用默认的提交信息,不进入编辑器。 - - ``` - git revert --no-edit - ``` - -- `--continue`:在解决冲突后继续撤销操作。 - - ``` - git revert --continue - ``` - -- `--abort`:取消撤销操作,恢复到撤销前的状态。 - - ``` - git revert --abort - ``` - -#### 注意事项 - -- **不修改历史**:`git revert` 会创建新的提交,不会修改现有的提交历史,因此适合在团队协作中使用。 -- **解决冲突**:如果撤销过程中发生冲突,需要手动解决冲突后使用 `git revert --continue` 继续。 -- **revert vs reset**: - - `git revert`:创建新提交来撤销更改,保留历史记录。 - - `git reset`:直接修改提交历史,适合本地未推送的提交。 - - -### 使远程仓库回滚生效 - -``` -git push orgin main --force -``` - - -### 选择性应用提交(拣选提交) - -#### 作用 - -`git cherry-pick` 用于将一个或多个提交从一个分支应用到当前分支。这在需要将特定的更改从一个分支移植到另一个分支时非常有用。 - -#### 主要操作 - -##### 1. 拣选单个提交 - -- 将指定的提交应用到当前分支: - - ``` - git cherry-pick - ``` - - 例如: - - ``` - git cherry-pick a1b2c3d - ``` - -##### 2. 拣选多个提交 - -- 拣选多个连续的提交: - - ``` - git cherry-pick .. - ``` - - 例如: - - ``` - git cherry-pick a1b2c3d..e4f5g6h - ``` - -- 拣选多个不连续的提交: - - ``` - git cherry-pick - ``` - - 例如: - - ``` - git cherry-pick a1b2c3d e4f5g6h i7j8k9l - ``` - -##### 3. 拣选并记录来源 - -- 使用 `-x` 参数在提交信息中记录原始提交的哈希值: - - ``` - git cherry-pick -x - ``` - - 这会在提交信息末尾添加类似 `(cherry picked from commit a1b2c3d)` 的信息,便于追踪提交来源。 - - **注意**:`-x` 参数通常用于在公共分支之间拣选提交,不建议在本地分支使用。 - -#### 常用参数 - -- `-x`:在提交信息中添加原始提交的哈希值,用于追踪来源。 - - ``` - git cherry-pick -x - ``` - -- `-n` 或 `--no-commit`:应用更改但不自动创建提交,允许你手动修改后再提交。 - - ``` - git cherry-pick -n - ``` - -- `-e` 或 `--edit`:在创建提交前编辑提交信息。 - - ``` - git cherry-pick -e - ``` - -- `--continue`:在解决冲突后继续拣选操作。 - - ``` - git cherry-pick --continue - ``` - -- `--abort`:取消拣选操作,恢复到拣选前的状态。 - - ``` - git cherry-pick --abort - ``` - -- `--skip`:跳过当前提交,继续拣选下一个提交。 - - ``` - git cherry-pick --skip - ``` - -#### 使用场景 - -- **修复 bug**:将 bug 修复提交从开发分支拣选到生产分支。 -- **功能移植**:将特定功能的提交从一个分支移植到另一个分支。 -- **提交整理**:将分散在不同分支的相关提交整合到一个分支。 - -#### 注意事项 - -- **解决冲突**:如果拣选过程中发生冲突,需要手动解决冲突后使用 `git cherry-pick --continue` 继续。 -- **避免重复提交**:拣选提交会创建新的提交哈希,因此要注意避免在同一分支上重复拣选相同的提交。 -- **使用 -x 参数**:在公共分支之间拣选提交时,建议使用 `-x` 参数记录来源,便于后续追踪和维护。 - - -### 查看可用分支 - -``` -git branch -``` - - -### 查看所有分支 - -``` -git branch -a -``` - - -### 切换到可用分支 - -``` -git checkout -``` - - -### 获取本地分支最新哈希值 - -``` -git rev-parse HEAD -``` - - -### 获取远程分支最新哈希值 - -``` -git rev-parse origin/ -``` - - -### 显示特定提交的详细信息 - -``` -git show -``` - - -### 重写提交历史(变基) - -#### 作用 - -`git rebase` 用于将一个分支的提交“重新应用”到另一个分支上,从而整理提交历史,使其更加线性化。 - -#### 主要操作 - -##### 1. 合并分支 - -- 将当前分支的提交“移动”到目标分支的最新提交之后。 - -- 例如,将 `feature` 分支的提交“变基”到 `main` 分支上: - - ``` - git checkout feature - git rebase main - ``` - -##### 2. 整理提交历史 - -- 将多个提交合并为一个(交互式变基)。 - -- 例如,将最近 3 个提交合并为 1 个: - - ``` - git rebase -i HEAD~3 - ``` - -##### 3. 解决冲突 - -- 在变基过程中,如果发生冲突,Git 会暂停并提示你解决冲突。 - -- 解决冲突后,使用以下命令继续变基: - - ``` - git add <冲突文件> - git rebase --continue - - #### 常用参数 - -- `-i` 或 `--interactive`:进入交互式模式,可以编辑、合并或删除提交。 -- `--continue`:在解决冲突后继续变基。 -- `--abort`:取消变基操作,恢复到变基前的状态。 -- `--skip`:跳过当前提交(通常用于解决冲突后放弃某个提交)。 - -#### 注意事项 - -- **不要对已推送的提交进行变基**:变基会重写提交历史,如果这些提交已经被推送到远程仓库,可能会导致冲突和混乱。 -- **变基 vs 合并**: - - `git rebase`:生成线性的提交历史,适合整理本地分支。 - - `git merge`:保留分支的合并历史,适合团队协作。 - - -### 管理远程仓库 - -#### 作用 - -`git remote` 用于管理远程仓库的链接。你可以通过它查看、添加、删除或重命名远程仓库。 - -#### 主要操作 - -##### 1. 查看远程仓库 - -- 查看当前配置的远程仓库: - - ``` - git remote -v - ``` - - 输出示例: - - ``` - origin https://github.com/user/repo.git (fetch) - origin https://github.com/user/repo.git (push) - ``` - - -##### 2. 添加远程仓库 - -- 添加一个新的远程仓库: - - ``` - git remote add - ``` - - 例如: - - ``` - git remote add upstream https://github.com/username/repo.git - ``` - -##### 3. 重命名远程仓库 - -- 将远程仓库 `origin` 重命名为 `upstream`: - - ``` - git remote rename origin upstream - ``` - -##### 4. 删除远程仓库 - -- 删除名为 `upstream` 的远程仓库: - - ``` - git remote remove upstream - ``` - -##### 5. 更新远程仓库 URL - -- 修改远程仓库的 URL: - - ``` - git remote set-url origin https://github.com/username/new-repo.git - ``` - -##### 6. 查看远程仓库详细信息 - -- 查看远程仓库的详细信息: - - ``` - git remote show origin - ``` - - -## 修改历史记录 - -### 修改最新的提交内容 - ``` -git commit --amend --allow-empty - ``` - -### 使用filter-branch工具删除指定文件"*.ipch" - -``` -git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch **/*.ipch' --prune-empty --tag-name-filter cat -- --all -``` - - -### 使用bfg工具删除指定文件夹名 - -``` -bfg --delete-folders ".vs" -``` - - -### 删除后执行以下命令实现垃圾回收,合并对象 - -``` -git reflog expire --expire=now --all && git gc --prune=now --aggressive -``` - -## git format-patch - -### 作用 - -`git format-patch` 用于将提交转换为补丁文件(patch files),这些文件可以通过邮件发送或在不同的仓库之间共享。补丁文件包含了提交的所有信息,包括作者、日期、提交信息和代码更改。 - -### 主要操作 - -#### 1. 生成单个提交的补丁 - -- 为最近的一个提交生成补丁: - - ``` - git format-patch -1 - ``` - -- 为指定的提交生成补丁: - - ``` - git format-patch -1 - ``` - - 例如: - - ``` - git format-patch -1 a1b2c3d - ``` - -#### 2. 生成多个提交的补丁 - -- 为最近的 N 个提交生成补丁: - - ``` - git format-patch - - ``` - - 例如,生成最近 3 个提交的补丁: - - ``` - git format-patch -3 - ``` - -- 为指定范围的提交生成补丁: - - ``` - git format-patch .. - ``` - - 例如: - - ``` - git format-patch a1b2c3d..e4f5g6h - ``` - -#### 3. 生成从某个提交到当前的所有补丁 - -- 生成从指定提交到 HEAD 的所有补丁: - - ``` - git format-patch - ``` - - 例如: - - ``` - git format-patch a1b2c3d - ``` - -#### 4. 指定输出目录 - -- 将补丁文件保存到指定目录: - - ``` - git format-patch -1 -o - ``` - - 例如: - - ``` - git format-patch -3 -o patches/ - ``` - -### 常用参数 - -- `-1`, `-2`, `-N`:生成最近 N 个提交的补丁。 - -- `-o ` 或 `--output-directory `:指定补丁文件的输出目录。 - - ``` - git format-patch -1 -o patches/ - ``` - -- `--stdout`:将补丁输出到标准输出而不是文件。 - - ``` - git format-patch -1 --stdout > my-patch.patch - ``` - -- `--subject-prefix=`:自定义补丁邮件的主题前缀(默认为 `[PATCH]`)。 - - ``` - git format-patch -1 --subject-prefix="RFC PATCH" - ``` - -- `--numbered`:为补丁文件添加序号(如 `[PATCH 1/3]`)。 - - ``` - git format-patch -3 --numbered - ``` - -- `--cover-letter`:生成一个封面信件(cover letter),用于描述整个补丁系列。 - - ``` - git format-patch -3 --cover-letter - ``` - -- `--signoff`:在补丁中添加 `Signed-off-by` 行。 - - ``` - git format-patch -1 --signoff - ``` - -### 应用补丁 - -生成的补丁文件可以使用 `git am` 命令应用到其他仓库: - -``` -git am -``` - -例如: - -``` -git am 0001-Fix-bug.patch -``` - -### 使用场景 - -- **邮件列表开发**:在使用邮件列表进行代码审查的项目(如 Linux 内核、FFmpeg)中,开发者使用 `git format-patch` 生成补丁并通过邮件发送。 -- **跨仓库共享**:在不同的 Git 仓库之间共享提交。 -- **备份提交**:将重要的提交导出为补丁文件进行备份。 - -### 示例 - -- 生成最近 3 个提交的补丁并保存到 `patches/` 目录: - - ``` - git format-patch -3 -o patches/ - ``` - -- 生成从 `a1b2c3d` 到 `HEAD` 的所有补丁,并添加封面信件: - - ``` - git format-patch a1b2c3d --cover-letter - ``` - -- 生成单个提交的补丁并输出到标准输出: - - ``` - git format-patch -1 --stdout > my-fix.patch - ``` - ---- - -## git send-email -配置SMTP基本信息(以qq为例) -```Shell -git config --global sendemail.smtpServer smtp.qq.com -git config --global sendemail.smtpPort 465 -git config --global sendemail.smtpUser "your_email@qq.com" -git config --global sendemail.smtpPass "your_app_password" -git config --global sendemail.smtpssl true # Ensure SSL is enabled -git config --global sendemail.smtpAuth LOGIN # Use LOGIN method -``` -发送邮件(以ffmpeg为例) -``` -git send-email --smtp-ssl --to ffmpeg-devel@ffmpeg.org --subject "[PATCH] Fix time_base handling" -1 b438672b11645e1152375beba759a0d2c704e3b1 -``` - -## git官网 - - \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/mac-freashman-guide.md b/docs/zh/technical/Basic-knowlegde/mac-freashman-guide.md deleted file mode 100644 index c98fd41..0000000 --- a/docs/zh/technical/Basic-knowlegde/mac-freashman-guide.md +++ /dev/null @@ -1,133 +0,0 @@ -# Mac用户生存指南 - -## 软件安装报错,显示文件已损坏 - -### Solution: -`sudo xattr -r -d com.apple.quarantine /Application/` - - -## 包管理器homebrew -国外官网`https://brew.sh` -国内镜像脚本`https://gitee.com/cunkai/HomebrewCN` - -## 下载一些常用开发工具 -``` -brew install pkg-config telnet openssl wget proxychains-ng cmake -``` - -## oh-my-zsh - -``` -wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -sh install.sh -``` - - -## 以终端打开一个文件(如.sh文件)没有反应或无效? -试试在该文件夹目录下打开终端,可以尝试输入如下命令 -``` -chmod +x 你的文件名 -``` -这个命令作用可以理解为给文件赋予执行能力 - -## 快捷键 - -### **一、基础操作快捷键(⌘ = Command,⌥ = Option,⇧ = Shift,⌃ = Control)** - -| | | -|---|---| -|功能|快捷键| -|复制|⌘ + C| -|粘贴|⌘ + V| -|剪切(粘贴并替换)|⌘ + C → ⌘ + ⌥ + V| -|撤销操作|⌘ + Z| -|重做(撤销撤销)|⌘ + ⇧ + Z| -|退出当前应用|⌘ + Q| -|关闭当前窗口|⌘ + W| -|强制退出应用(任务管理器)|⌘ + ⌥ + Esc| -|全选|⌘ + A| -|查找|⌘ + F| -|替换|⌘ + ⌥ + F| -|显示 / 隐藏访达侧边栏|⌘ + ⇧ + T| - -### **二、文件与应用管理** - -| | | -|---|---| -|功能|快捷键| -|新建文件 / 窗口|⌘ + N| -|新建文件夹|⌘ + ⇧ + N| -|打开文件|⌘ + O| -|保存文件|⌘ + S| -|另存为|⌘ + ⇧ + S| -|关闭应用所有窗口|⌘ + ⌥ + W| -|切换应用|⌘ + Tab(按住 Tab 可选择)| -|切换同一应用的窗口|⌘ + `(重音符,键盘左上角)| -|显示应用菜单隐藏项|按住 ⌥ 键点击菜单名称| - -### **三、界面导航与系统功能** - -| | | -|---|---| -|功能|快捷键| -|打开 Spotlight 搜索|⌘ + 空格| -|打开 Launchpad|⌘ + ⇧ + 空格| -|显示桌面|⌘ + ⇧ + F11(或触控板下推)| -|Mission Control(所有窗口)|⌘ + 上箭头| -|调度中心(应用全屏 / 分屏)|⌘ + 下箭头(或长按绿色最大化按钮)| -|切换全屏应用|⌘ + 左右箭头(已全屏时)| -|调节亮度|F1 / F2(或 ⌘ + ⇧ + F1/F2 微调)| -|调节音量|F11 / F12| -|锁屏 / 睡眠|⌘ + ⌥ + 电源键(或 ⌃ + ⌘ + Q)| -|显示隐藏文件|⌘ + ⇧ + .(句点,访达中)| - -### **四、文本编辑与快捷键** - -| | | -|---|---| -|功能|快捷键| -|加粗 / 倾斜 / 下划线|⌘ + B / ⌘ + I / ⌘ + U| -|左 / 右对齐 / 居中 / 两端对齐|⌘ + ⇧ + L/R/C/J| -|跳转行首 / 行尾|⌘ + 左箭头 / ⌘ + 右箭头| -|跳转文档开头 / 结尾|⌘ + 上箭头 / ⌘ + 下箭头| -|向前 / 后删除单词|⌥ + Delete / ⌥ + ⇧ + Delete| -|换行(不结束段落)|⌘ + ⇧ + 回车| -|新建段落(换行)|回车| -|快速访问剪贴板历史|⌘ + ⇧ + V(粘贴并保留原格式)| - -### **五、截图与屏幕操作** - -| | | -|---|---| -|功能|快捷键| -|截取选定区域|⌘ + ⇧ + 4| -|截取当前窗口 / 菜单|⌘ + ⇧ + 4 → 空格点击目标| -|截取全屏|⌘ + ⇧ + 5(调出截图工具后选择)| -|录制屏幕(含音频)|⌘ + ⇧ + 5 → 选择录制区域| - -### **六、其他实用快捷键** - -| | | -|---|---| -|功能|快捷键| -|打开终端|⌘ + 空格 → 输入 “终端”| -|快速查看文件(空格预览)|选中文件按 空格| -|计算器科学模式|打开计算器后按 ⌘ + 2| -|切换输入法|⌃ + 空格(或 ⌃ + ⇧ + 空格)| - -### **快捷键记忆技巧** - -- **Command 键**:几乎所有高频操作的核心键(类比 Windows 的 Ctrl 键)。 - -- **Option 键**:常用于调出隐藏功能(如调整音量 / 亮度的精细调节)。 - -- **Control 键**:多与方向键配合(如 ⌃ + 方向键 切换桌面空间)。 - -## 使用VScode的Debug遇到的问题 - -- 报错内容:`process exited with status -1 (this is a non-interactive debug session, cannot get permission to debug processes.)` -- 解决方案: - - 1. 在隐私与安全性中的完全磁盘访问权限中打开VScode - 2. 开发者工具中添加VScode - 3. `sudo /usr/sbin/DevToolsSecurity -enable` diff --git a/docs/zh/technical/Basic-knowlegde/network_trafiic_control.md b/docs/zh/technical/Basic-knowlegde/network_trafiic_control.md deleted file mode 100644 index 914488e..0000000 --- a/docs/zh/technical/Basic-knowlegde/network_trafiic_control.md +++ /dev/null @@ -1,46 +0,0 @@ -# pfctl + dnctl - -## Step-by-Step: Simulate Packet Loss on Loopback (lo0) -Enable packet filter (pf): - -```bash -sudo pfctl -E -``` -Configure a dummynet pipe: - -Example: 5% packet loss and 100 ms delay: - -```bash -sudo dnctl pipe 1 config plr 0.05 delay 100ms -``` -Apply the pipe to both incoming & outgoing UDP on loopback: - -```bash -echo "dummynet out on lo0 proto udp from any to any pipe 1" | sudo pfctl -f - -echo "dummynet in on lo0 proto udp from any to any pipe 1" | sudo pfctl -f - -``` -This ensures both directions are affected - -Confirm it’s working: - -```bash -sudo dnctl list -``` -Or run your local UDP test (e.g., via FFmpeg)—you should see packet losses and delays. - -Remove/flush when done: - -```bash -sudo dnctl -q flush -sudo pfctl -F all -sudo pfctl -d -``` - -## Why This Works -dnctl configures the traffic shaping (packet loss, delay, bandwidth). - -pfctl applies that shaping to loopback (lo0) UDP traffic. - -The approach mirrors real-world network behaviors—packet drops and jitter—even when testing locally - -> genreate by ChatGPT \ No newline at end of file diff --git a/docs/zh/technical/Basic-knowlegde/raw-data-view.md b/docs/zh/technical/Basic-knowlegde/raw-data-view.md deleted file mode 100644 index 41c627d..0000000 --- a/docs/zh/technical/Basic-knowlegde/raw-data-view.md +++ /dev/null @@ -1,208 +0,0 @@ -# Viewing Raw Data in Hex or Binary on macOS / Linux / Windows (CLI Guide) - -Inspecting raw bytes is essential for debugging, reverse-engineering, verifying file formats, or examining file headers. -This guide introduces common command-line tools to display file contents in **hexadecimal** or **binary**, and how to limit output to a specific number of bytes. - ---- - -## macOS & Linux - -macOS and Linux share most Unix tools, so their usage is nearly identical. - ---- - -## 1. `hexdump` - -### Hex output - -```sh -hexdump -C file.bin -``` - -* `-C` → canonical hex + ASCII view (similar to `xxd`) - -### Limit output to N bytes - -#### First 16 bytes - -```sh -hexdump -C -n 16 file.bin -``` - -#### 16 bytes from offset 32 - -```sh -hexdump -C -s 32 -n 16 file.bin -``` - -* `-s OFFSET` → seek to offset -* `-n BYTES` → read N bytes - ---- - -## 2. `xxd` - -### Hex output - -```sh -xxd file.bin -``` - -### Binary output - -```sh -xxd -b file.bin -``` - -### Limit output to N bytes - -#### First 16 bytes - -```sh -xxd -l 16 file.bin -``` - -#### 16 bytes from offset 32 - -```sh -xxd -s 32 -l 16 file.bin -``` - -#### First 16 bytes in binary - -```sh -xxd -b -l 16 file.bin -``` - ---- - -## 3. `od` (POSIX standard) - -### Hex output - -```sh -od -Ax -t x1 file.bin -``` - -### Binary output - -```sh -od -An -t b1 file.bin -``` - -### Limit output to N bytes (hex) - -```sh -od -Ax -t x1 -N 16 file.bin -``` - -### Limit output to N bytes (binary) - -```sh -od -An -t b1 -N 16 file.bin -``` - ---- - -## 4. `hd` - -Available on macOS via Homebrew (`brew install hexedit`) or on Linux (util-linux). - -```sh -hd file.bin -``` - ---- - -# Windows - ---- - -## 1. PowerShell: `Format-Hex` (built-in) - -### Hex output - -```powershell -Format-Hex file.bin -``` - -### Limit output to N bytes - -#### First 16 bytes (hex) - -```powershell -Get-Content file.bin -Encoding Byte -TotalCount 16 | Format-Hex -``` - -#### First 16 bytes (binary) - -```powershell -Get-Content file.bin -Encoding Byte -TotalCount 16 | ForEach-Object { - [Convert]::ToString($_, 2).PadLeft(8, '0') -} -``` - ---- - -## 2. CertUtil (hex only) - -```cmd -certutil -dump file.bin -``` - -CertUtil cannot directly limit byte count, but you can limit lines using a Unix-like environment (Git Bash/MSYS2/WSL): - -```sh -certutil -dump file.bin | head -n 5 -``` - ---- - -## 3. Windows Subsystem for Linux (WSL) - -WSL allows you to use all Linux tools: - -```sh -xxd -l 16 file.bin -``` - ---- - -# Summary Table - -| Platform | Hex Output | Binary Output | Limit Output Size | -| -------- | ------------------------------- | ------------------------- | ------------------------------- | -| macOS | `xxd`, `hexdump -C`, `od -t x1` | `xxd -b`, `od -t b1` | `hexdump -n`, `xxd -l`, `od -N` | -| Linux | same as macOS | same as macOS | same as macOS | -| Windows | `Format-Hex`, `certutil -dump` | PowerShell bit conversion | `Get-Content -TotalCount` | -| WSL | Linux tools | Linux tools | Linux tools | - ---- - -# Quick Examples - -### Print first 32 bytes in hex - -```sh -xxd -l 32 file.bin -``` - -### Print bytes starting at offset 0x100 - -```sh -hexdump -C -s 0x100 -n 64 file.bin -``` - -### Print first 10 bytes in binary (Linux/macOS) - -```sh -od -An -t b1 -N 10 file.bin -``` - -### Print first 16 bytes in binary (Windows PowerShell) - -```powershell -Get-Content file.bin -Encoding Byte -TotalCount 16 | % { [Convert]::ToString($_,2).PadLeft(8,'0') } -``` - -> Generated By ChatGPT-5.1 diff --git a/docs/zh/technical/Basic-knowlegde/tmux.md b/docs/zh/technical/Basic-knowlegde/tmux.md deleted file mode 100644 index 88f1de0..0000000 --- a/docs/zh/technical/Basic-knowlegde/tmux.md +++ /dev/null @@ -1,99 +0,0 @@ -# A Beginner’s Guide to tmux: Simple Usage for Session Management -If you’re looking to improve your terminal workflow, tmux is a must-have tool. tmux is a terminal multiplexer that allows you to manage multiple terminal sessions from one window. In this guide, we’ll cover the basics such as creating, deleting, and switching tmux sessions, as well as how to enable scrolling to view your terminal’s content history. - -## What is tmux? -tmux stands for terminal multiplexer. It allows you to run and manage multiple terminal sessions inside a single terminal window. This is especially useful for long-running processes, multitasking, or keeping your work organized when switching between projects. With tmux, you can detach from a session and reattach later without interrupting your running processes. - -## Installing tmux -Before getting started, you need to install tmux. On most Linux distributions and macOS, you can install tmux using your package manager. For example: - -Ubuntu/Debian: - -```shell -sudo apt-get update -sudo apt-get install tmux -``` -Fedora: - -```shell -sudo dnf install tmux -``` - -macOS (using Homebrew): -```shell -brew install tmux -``` - -Once installed, you can check your version by running: - -```shell -tmux -V -``` -## Creating a tmux Session -To start a new tmux session, simply type: - -```shell -tmux new -s mysession -``` -Here, mysession is the name of your new session. Naming sessions makes it easier to manage multiple sessions later. - -## Switching Between Sessions -After creating multiple sessions, you can switch between them without closing any. First, list all your active sessions: - -```shell -tmux ls -``` -Then, attach to the session you want: - -```shell -tmux attach -t mysession -``` -If you’re already inside a tmux session and want to create or switch sessions, you can use tmux’s built-in commands. Press Ctrl+b (the default prefix), then type : to bring up the command prompt. For example, typing: - -```shell -switch-client -t mysession -``` -will switch you to the session named mysession. - -## Deleting (Killing) a tmux Session -When you’re done with a session, you can kill it to free up resources. To kill a session, first list the sessions: - -```shell -tmux ls -``` - -Then, use the kill-session command: - -```shell -tmux kill-session -t mysession -``` -Alternatively, if you are inside the session you want to close, simply type: - -```shell -exit -``` -This will terminate the session. - -## Enabling Scroll in tmux -One of the advantages of tmux is that it lets you scroll through previous terminal output. To enable scrolling: - -`Enter Copy Mode`: Press Ctrl+b then [ (the square bracket). This puts you in copy mode. - -`Scroll`: You can now use the arrow keys or Page Up/Page Down keys to navigate the scrollback history. - -`Exit Copy Mode`: Press q to exit copy mode. - -You can also customize the scrollback buffer size by adding this line to your tmux configuration file (~/.tmux.conf): - -```shell -set-option -g history-limit 10000 -``` -This example increases the history limit to 10,000 lines. - -## Additional Tips -Splitting Windows: You can split your tmux window vertically using Ctrl+b then % and horizontally using Ctrl+b then ". This allows you to have multiple panes in a single session. - -Resizing Panes: Hold Ctrl+b then press and hold one of the arrow keys to resize the active pane. - -Customization: tmux is highly customizable. Explore your ~/.tmux.conf to personalize keybindings, colors, and other settings. - diff --git a/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md b/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md deleted file mode 100644 index 8ecf245..0000000 --- a/docs/zh/technical/Basic-knowlegde/xcode_activate_CLI.md +++ /dev/null @@ -1,54 +0,0 @@ -# 激活xcode中CLI - -## 未激活状态 -输入 `xcode-select -p` - -应输出: - -``` -$ /Library/Developer/CommandLineTools - -或 - -$ xcode-select: error: unable to get active developer directory -``` - -## 进行激活 -执行下面这条命令(需要 sudo): -``` -sudo xcode-select -s /Applications/Xcode.app/Contents/Developer -``` - -⚠️ 注意:如果你的 Xcode 不在 `/Applications`(比如叫 “Xcode-beta.app”), - -可以用: - -``` -ls /Applications -``` - -找到确切的名字后再替换路径。 - -## 进行验证 -``` -$ xcode-select -p -``` -应输出: -``` -/Applications/Xcode.app/Contents/Developer -``` - -## xctrace验证(Apple Xcode 的性能分析命令行工具) - -``` -$ xcrun xctrace version - -或 - -$ xctrace version -``` - -应输出: -``` -$ xctrace version 16.0 (16F6) -``` \ No newline at end of file diff --git a/docs/zh/technical/Front-end/JavaScript.md b/docs/zh/technical/Front-end/JavaScript.md deleted file mode 100644 index ee4ae5b..0000000 --- a/docs/zh/technical/Front-end/JavaScript.md +++ /dev/null @@ -1,873 +0,0 @@ - -JavaScript语言并没有其他编程语言意义上的官网,TC39(JS标准委员会)的官网:[tc39.es](http://tc39.es),[详细教程](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript) -## 包管理器 - -管理、读取和打包 JavaScript 库的工具。 - -* [npm](https://www.npmjs.com/):npm 是 JavaScript 的包管理器。 -* [Bower](https://github.com/bower/bower):一个 web 应用的包管理器。 -* [component](https://github.com/componentjs/component):能构建更好 web 应用的客户端包管理器。 -* [spm](https://github.com/spmjs/spm):全新的静态包管理器。 -* [jam](https://github.com/caolan/jam):一个专注于浏览器端的包管理器, 兼容 RequireJS 。 -* [jspm](https://github.com/jspm/jspm-cli):流畅的浏览器包管理器。 -* [Ender](https://github.com/ender-js/Ender):没有库文件的程序库。 -* [volo](https://github.com/volojs/volo):以项目模板、添加依赖项与自动化生成的方式创建前端项目。 -* [Duo](https://github.com/duojs/duo):融合了 Component、Browserify 和 Go 的最佳思想,快速无痛开发组织前端代码的下一代包管理器。 -* [yarn](https://yarnpkg.com/lang/en/):高效、稳定、安全的依赖管理器。 -* [pnpm](https://pnpm.js.org/):效率高、磁盘利用率高的包管理器 - -## 组件管理器 - -* [Bit](https://github.com/teambit/bit):跨应用创建、查找、复用组件(支持 React、Angular、Node.js 等等)的组件管理器 - -## 加载器 - -JavaScript 模块或加载系统。 - -* [RequireJS](https://github.com/jrburke/requirejs):一种 JavaScript 文件和模块加载器。 -* [browserify](https://github.com/substack/node-browserify):像在 Node.js 一样在浏览器端使用 require() 函数。 -* [SeaJS](https://github.com/seajs/seajs):Web 端模块加载器。 -* [HeadJS](https://github.com/headjs/headjs):HEAD 里只有唯一一个 script 引入。 -* [curl](https://github.com/cujojs/curl):小巧、快速且易扩展的模块加载器,它能处理 AMD、CommonJS Modules/1.1、CSS、HTML/text 和非模块化脚本。 -* [lazyload](https://github.com/rgrove/lazyload/):小巧且无依赖的异步 JavaScript 和 CSS 加载器。 -* [script.js](https://github.com/ded/script.js):异步 JavaScript 加载器和依赖管理器。 -* [systemjs](https://github.com/systemjs/systemjs):AMD、CJS(commonJS) 和符合 ES6 规范的模块加载器。 -* [LodJS](https://github.com/yanhaijing/lodjs):基于 AMD 的模块加载器。 -* [ESL](https://github.com/ecomfe/esl):浏览器端的模块加载器,支持懒定义和 AMD。 -* [modulejs](https://github.com/lrsjng/modulejs):轻量的 JavaScript 模块系统。 - -## 打包工具 - -* [browserify](https://github.com/substack/node-browserify):Browserify 帮助你在浏览器端使用 require('modules') 打包所有依赖。 -* [webpack](https://github.com/webpack/webpack):为浏览器打包 CommonJs/AMD 模块。 -* [Rollup](https://github.com/rollup/rollup):下一代 ES6 模块打包工具。 -* [Brunch](https://github.com/brunch/brunch):只需要简单声明式配置的快速前端 Webapp 构建工具。 -* [Parcel](https://github.com/parcel-bundler/parcel):零配置,超快速 Web 应用打包工具。 -* [Microbundle](https://github.com/developit/microbundle):用于小模块的零配置打包工具。 -* [FuseBox](https://github.com/fuse-box/fuse-box):一个只做正确事情的打包工具。 - -## 类型检测 - -* [TypeScript](https://www.typescriptlang.org/):JavaScript 的超集,可以编译成原生 JavaScript 。 -* [Flow.js](https://flow.org/en/):Facebook 出品的静态类型检查器。 -* [Hegel](https://jsmonk.github.io/hegel/):偏向于强类型推断的静态类型检查器。 -* [TypL](https://github.com/getify/TypL):偏向于类型推断的 JavaScript 类型检查器。 -* [Hindley Milner Definitions](https://github.com/xodio/hm-def):使用类似 Haskell 的 Hindley Milner 类型签名的 JavaScript 函数运行时类型检查。 - -## 测试框架 - -### 框架 - -* [mocha](https://github.com/mochajs/mocha):适用于 node.js 和浏览器的简易、灵活、有趣的 JavaScript 测试框架。 -* [jasmine](https://github.com/jasmine/jasmine):简单无 DOM 的 JavaScript 测试框架。 -* [qunit](https://github.com/jquery/qunit):一个易用的 JavaScript 单元测试框架。 -* [jest](https://github.com/facebook/jest):能无痛使用的 JavaScript 单元测试框架。 -* [prova](https://github.com/azer/prova):基于 Tape 和 Browserify 的测试运行器,适用于 Node 和 浏览器。 -* [DalekJS](https://github.com/dalekjs/dalek):跨浏览器的 JavaScript 自动化功能测试框架(已经停止维护——译者注)。 -* [Protractor](https://github.com/angular/protractor):适用于 AngularJS 应用的端到端测试框架。 -* [tape](https://github.com/substack/tape):适用于 Node 和浏览器的 tap 生成器测试套件。 -* [TestCafe](https://github.com/DevExpress/testcafe):适用于现代 Web 应用开发栈的自动化浏览器测试工具。 -* [ava](https://github.com/avajs/ava):🚀 未来感十足的测试运行器。 -* [Cypress](https://www.cypress.io/):一个完整的端到端测试框架,用于测试在浏览器中运行的所有代码。 - -### 断言 - -* [chai](https://github.com/chaijs/chai):适用于 node.js 和浏览器的 BDD / TDD 断言框架,并能搭配任意测试框架使用。 -* [Enzyme](http://airbnb.io/enzyme/index.html):Enzyme 是一款 React 专用的 JavaScript 测试工具,让断言、操作和遍历 React 组件之后输出更加容易。 -* [react testing library](https://github.com/kentcdodds/react-testing-library):简单完备的 React DOM 测试工具,引导更好的测试实践。 -* [Sinon.JS](https://github.com/sinonjs/sinon):对 JavaScript 进行 spies、stubs 和 mock 测试。 -* [expect.js](https://github.com/Automattic/expect.js):简约的、适用于 Node.js 和浏览器端的 BDD 风格的断言工具。 -* [proxyquire](https://github.com/thlorenz/proxyquire):Node.js 依赖桩代码。 - -### 覆盖率 - -* [istanbul](https://github.com/gotwarlost/istanbul):一个 JavaScript 代码覆盖率检测工具。 -* [blanket](https://github.com/alex-seville/blanket):一个简单的代码覆盖率检测库。它的设计理念是易于安装和使用,浏览器和 node.js 都可用。 -* [JSCover](https://github.com/tntim96/JSCover):JSCover 是一个检测 JavaScript 程序代码覆盖率的工具。 - -### 运行器 - -* [phantomjs](https://github.com/ariya/phantomjs):无界面的 Webkit 运行时(已暂停开发——译者注)。 -* [slimerjs](https://github.com/laurentj/slimerjs):一个内核为 Gecko 的类似 PhantomJS 工具。 -* [casperjs](https://github.com/n1k0/casperjs):基于 PhantomJS 和 Slimer JS 的导航脚本和测试工具。 -* [zombie](https://github.com/assaf/zombie):基于 node.js 的超快速、全栈且无图形界面的浏览器的测试工具。 -* [totoro](https://github.com/totorojs/totoro):一个简单可靠的跨浏览器测试工具。 -* [karma](https://github.com/karma-runner/karma):一款超级棒的 JavaScript 测试运行器(多浏览器测试场景下的 JavaScript 执行工具——译者注)。 -* [nightwatch](https://github.com/nightwatchjs/nightwatch):基于 node.js 和 selenium webdriver 的图形界面自动化测试框架。 -* [intern](https://github.com/theintern/intern):下一代 JavaScript 代码测试栈。 -* [yolpo](http://www.yolpo.com/):在浏览器逐句执行的 JavaScript 解释器。 -* [puppeteer](https://github.com/GoogleChrome/puppeteer):谷歌 Chrome 团队出品,无界面 Chrome (Chromium) Node.js API 环境。 -* [webdriverio](https://github.com/webdriverio/webdriverio):下一代 Web 驱动的 Node.js 自动化测试框架。 -* [taiko](https://github.com/getgauge/taiko):用于自动测试 Chromium 内核浏览器的简易 Node.js API 库。 - -## QA 工具 - -* [Prettier](https://github.com/prettier/prettier):Prettier 是一款固执(严格)的代码格式化工具。 -* [JSHint](https://github.com/jshint/jshint/):JSHint 是一款用于检测 JavaScript 代码错误和潜在问题的工具。 -* [jscs](https://github.com/jscs-dev/node-jscs):JavaScript 代码风格检测工具。 -* [jsfmt](https://github.com/rdio/jsfmt):格式化、搜索和改写 JavaScript。 -* [jsinspect](https://github.com/danielstjules/jsinspect):检测复制粘贴和结构类似的代码。 -* [buddy.js](https://github.com/danielstjules/buddy.js):检测 JavaScript 代码里的魔术数字。 -* [ESLint](https://github.com/eslint/eslint):一款完全可插拔的 JavaScript 模板检测和报告工具。 -* [JSLint ](https://github.com/douglascrockford/JSLint):高标准、严要求且固执的代码质量工具,旨在保持语言的精华部分。 -* [JavaScript Standard Style](https://github.com/feross/standard):固执、无需配置的代码风格规范、检查器和格式化工具。 -* [Pre-evaluate code at buildtime](https://github.com/kentcdodds/preval.macro):构建阶段前端 JavaScript 代码与评估器。 -* [JS-Beautifier](https://github.com/beautify-web/js-beautify):格式化 JavaScript 代码的 npm 脚手架和库。 -* [husky](https://github.com/typicode/husky):防止劣质的 git commit、git push 等 git 操作。 - -## MVC 框架和库 - -* [angular.js](https://github.com/angular/angular.js):专为 web 应用设计的增强型 HTML 。 -* [aurelia](http://aurelia.io/):一个适用于移动设备、桌面设备和 web 的 JavaScript 客户端框架。 -* [backbone](https://github.com/jashkenas/backbone):web 应用模型层、视图层、数据集合和事件的骨架。 -* [ember.js](https://github.com/emberjs/ember.js):一个旨在创建非凡 web 应用的 JavaScript 框架。 -* [meteor](https://github.com/meteor/meteor):一个超简单的、数据库无处不在的、只传输数据的纯 JavaScript web 框架。 -* [ractive](https://github.com/ractivejs/ractive):新一代 DOM 操作。 -* [vue](https://github.com/vuejs/vue):一套用于构建用户界面的渐进式框架。 -* [svelte](https://github.com/sveltejs/svelte):svelte 是一种构建 web 应用的新方式。svelte 编译器将声明式组件编译成高效的 JavaScript 代码,并且会像外科手术那样更新 DOM。 -* [knockout](https://github.com/knockout/knockout):Knockout 让使用 JavaScript 创建响应式富 UI 更加容易。 -* [spine](https://github.com/spine/spine):轻量级 JavaScript 应用 MVC 框架。 -* [espresso.js](https://github.com/techlayer/espresso.js):一个极小的、用于制作用户界面的 JavaScript 库。 -* [canjs](https://github.com/canjs/canjs):让 JS 更好、更快、更简单。 -* [react](https://facebook.github.io/react/):用于建构用户界面的库。它是声明式的、高效的和极度灵活的。以虚拟 DOM 作为其实现。 -* [hyperapp](https://github.com/hyperapp/hyperapp):体积仅 1kb 的前端应用构件库。 -* [preact](https://github.com/developit/preact):体积仅 3kb 的用 ES6 api 实现的 React 替代方案。(和 React 一样基于)组件和虚拟 DOM。 -* [nativescript](https://github.com/NativeScript/NativeScript):构建真正的跨平台原生 JavaScript 应用,支持 iOS 和 Android 。 -* [react-native](https://github.com/facebook/react-native):一个用 React 构建原生应用的框架。 -* [riot](https://github.com/riot/riot):轻量级类 React 库。 -* [thorax](https://github.com/walmartlabs/thorax):强化版 Backbone。 -* [chaplin](https://github.com/chaplinjs/chaplin):使用 Backbone.js 库的 JavaScript 应用架构。 -* [marionette](https://github.com/marionettejs/backbone.marionette):一个 Backbone.js 的复合应用程序库,旨在简化大型 JavaScript 应用结构。 -* [ripple](https://github.com/ripplejs/ripple):一个小巧的、用于构建响应界面的基础框架。 -* [rivets](https://github.com/mikeric/rivets):轻量却拥有强大的数据绑定和模板解决方案。 -* [derby](https://github.com/derbyjs/derby):让编写实时和协同应用更简单的 MVC 框架,能够同时在 Node.js 和浏览器运行。 - * [derby-awesome](https://github.com/russll/awesome-derby):很棒的 derby 组件集合。 -* [way.js](https://github.com/gwendall/way.js):简单、轻量、持久的双向数据绑定库。 -* [mithril.js](https://github.com/lhorie/mithril.js):Mithril 是一个客户端 MVC 框架(轻量、强大和快速) -* [jsblocks](https://github.com/astoilkov/jsblocks):jsblocks 是一个更好的类 MV 框架。 -* [LiquidLava](http://www.lava-framework.com/):用于构建用户界面的透明 MVC 框架。 -* [feathers](https://github.com/feathersjs/feathers):专为未来应用设计的极简主义实时 JavaScript 库。 -* [Keo](https://github.com/Wildhoney/Keo):基于 Shadow DOM 的函数式无状态的 React 组件(框架)。 -* [atvjs](https://github.com/emadalam/atvjs):使用原生 JavaScript 快速开发 Apple TV 应用。 -* [makefun](https://www.npmjs.com/package/makefun):链式 Promise 调用。 -* [Alpine.js](https://github.com/alpinejs/alpine):Alpine.js 以更低的代价实现了像 Vue 和 React 这类大型架构一样的响应式和声明式的特性。 -* [inferno](https://github.com/infernojs/inferno):🔥 一款用于构建现代用户界面的超级快速、类似 React 的 JS 库。 - -## 基于 Node 的 CMS 框架 - -* [KeystoneJS](https://github.com/keystonejs/keystone):强大的 CMS 和 Web 应用框架。 -* [Reaction Commerce](https://github.com/reactioncommerce/reaction):拥有实时的架构和设计的响应式 CMS。 -* [Ghost](https://github.com/tryghost/Ghost):简单、强大的发布平台。 -* [Apostrophe](https://github.com/punkave/apostrophe):提供内容编辑和基本服务的 CMS。 -* [We.js](https://github.com/wejs/we/):适用于实时应用、网站或博客的框架。 -* [Hatch.js](https://github.com/inventures/hatchjs):拥有社交特性的 CMS 平台。 -* [TaracotJS](https://github.com/xtremespb/taracotjs-generator/):基于 Node.js 的快速、极简风格 CMS。 -* [Nodizecms](https://github.com/nodize/nodizecms):为 CoffeeScript 爱好者准备的 CMS。 -* [Cody](https://github.com/jcoppieters/cody):拥有所见即所得编辑器的 CMS。 -* [PencilBlue](https://github.com/pencilblue/pencilblue/):一个 CMS 和博客平台。 -* [Strapi](https://github.com/strapi/strapi):开源无界面的 Node.js CMS 系统,可轻松定制个性化接口。 -* [Factor](https://github.com/fiction-com/factor):一款 JavaScript CMS。 - -## 模板引擎 - -*模板引擎用于执行字符串插值。* - -* [mustache.js](https://github.com/janl/mustache.js):JavaScript 最精简的 {{mustaches}} 模板 -* [handlebars.js](https://github.com/wycats/handlebars.js/):Mustache 模板语言的扩展。 -* [nunjucks](https://mozilla.github.io/nunjucks/):Mozilla 出品,丰富且强大的 JavaScript 模板语言。 -* [hogan.js](https://github.com/twitter/hogan.js):是 Mustache 模板语言的编译器。 -* [doT](https://github.com/olado/doT):最快速简洁的 JavaScript 模板引擎,适用于 Node.js 和浏览器。 -* [dustjs](https://github.com/linkedin/dustjs/):适用于浏览器和 Node.js 的异步模板。 -* [eco](https://github.com/sstephenson/eco/):嵌入式的 CoffeeScript 模板。 -* [JavaScript-Templates](https://github.com/blueimp/JavaScript-Templates):轻量(小于 1KB)、快速、强大且无依赖的 JavaScript 模版引擎。 -* [t.js](https://github.com/jasonmoo/t.js):小巧的 JavaScript 模板框架,压缩后约为 400 字节。 -* [Pug](https://github.com/pugjs/pug):健壮的、优雅且功能丰富的 nodejs 模板引擎。`(曾用名:Jade)` -* [EJS](https://github.com/mde/ejs):高效的 JavaScript 模板。 -* [xtemplate](https://github.com/xtemplate/xtemplate):可扩展的模板引擎,适用于 node.js 和浏览器。 -* [marko](https://github.com/marko-js/marko):基于 HTML 快速轻量的模板引擎,支持异步、流、自定义标签,支持 CommonJS 模块作为编译后输出,适用于 Node.js 和浏览器。 -* [swig](https://github.com/paularmstrong/swig):一款简单、强大、可扩展的基于 Node.js 和 浏览器的 JavaScript 模板引擎。`(已停止维护)` -* [EHTML](https://github.com/Guseyn/EHTML):一款实现零编写 JavaScript 的 HTML 框架。 - -## 文章和帖子 - -* [你必须知道的 JavaScript 知识](https://medium.com/@pedropolisenso/o-javasscript-que-você-deveria-conhecer-b70e94d1d706):介绍 JavaScript 基本概念的葡萄牙语文章。 -* [JavaScript 运行原理](https://blog.sessionstack.com/tagged/tutorial):介绍 JavaScript 构建块的文集。 -* [利用 web-workers 实现多线程](https://www.loginradius.com/engineering/blog/adding-multi-threading-to-javascript-using-web-workers/):Web Worker :为 JavaScript 添加多线程。 -* [JavaScript 的 this 关键字](https://www.loginradius.com/engineering/blog/breaking-down-this-keyword-in-javascript/):细嚼慢咽理解 JS this 关键字。 - -## 数据可视化 - -Web 数据可视化工具 - -* [d3](https://github.com/mbostock/d3):一款 JavaScript 数据可视化库,使用 HTML、SVG 和 Canvas 技术展现数据。 - * [metrics-graphics](https://github.com/mozilla/metrics-graphics):更简洁和拥有更规范的数据图表布局优化算法的库。 -* [three.js](https://github.com/mrdoob/three.js):JavaScript 3D 库。 -* [Chart.js](https://github.com/nnnick/Chart.js):简单的基于 `` 标签的 HTML5 图表库。 -* [paper.js](https://github.com/paperjs/paper.js):矢量图形脚本的瑞士军刀,利用 HTML5 Canvas 将脚本-图表转换移植到 JavaScript 和浏览器。 -* [fabric.js](https://github.com/kangax/fabric.js):JavaScript Canvas 库,实现 SVG 与 Canvas 相互解析。 -* [peity](https://github.com/benpickles/peity):进度条、线状和饼状图。 -* [raphael](https://github.com/DmitryBaranovskiy/raphael):JavaScript 矢量库。 -* [Echarts](https://github.com/ecomfe/echarts):企业级图表库。 -* [vis](https://github.com/almende/vis):动态的、基于浏览器的可视化库。 -* [two.js](https://github.com/jonobr1/two.js):一个渲染器无关的适用于 web 的二维绘图 api 库。 -* [g.raphael](https://github.com/DmitryBaranovskiy/g.raphael):为 Raphaël 设计的图表库。 -* [sigma.js](https://github.com/jacomyal/sigma.js):一个致力于图形绘画的 JavaScript 库。 -* [arbor](https://github.com/samizdatco/arbor):一个基于 web workers 和 jQuery 的图形可视化库。 -* [cubism](https://github.com/square/cubism):可视化时间序列的 D3 插件。 -* [dc.js](https://github.com/dc-js/dc.js):与 crossfilter 无缝结合的多维图表绘制库,使用 d3.js 渲染。 -* [vega](https://github.com/trifacta/vega):一套可视化语法。 -* [processing.js](http://processingjs.org/):Processing.js 实现了 Web 标准使数据可视化,而且无需任何插件。 -* [envisionjs](https://github.com/HumbleSoftware/envisionjs):动态的 HTML5 可视化。 -* [rickshaw](https://github.com/shutterstock/rickshaw):用于构建交互式实时图表的 JavaScript 工具包。 -* [flot](https://github.com/flot/flot):吸引人的、基于 jQuery 的 JavaScript 图表库。 -* [morris.js](https://github.com/morrisjs/morris.js):漂亮的时间序列图。 -* [nvd3](https://github.com/novus/nvd3):一个为 d3.js 构建可复用图表和图表组件的库。 -* [svg.js](https://github.com/wout/svg.js):一个轻量级的 SVG 操作和动画库。 -* [heatmap.js](https://github.com/pa7/heatmap.js):基于 HTML5 canvas 的热力图 JavaScript 库。 -* [jquery.sparkline](https://github.com/gwatts/jquery.sparkline):一个直接在浏览器端生成小型走势图的 jQuery 插件。 -* [trianglify](https://github.com/qrohlf/trianglify):基于 d3.js 的低聚风格背景图片生成器。 -* [d3-cloud](https://github.com/jasondavies/d3-cloud):创建词云效果的 JavaScript 库。 -* [d4](https://github.com/heavysixer/d4):一个基于 d3 、友好、可复用的 DSL 图表库 。 -* [dimple.js](http://dimplejs.org/):基于 d3 的简易商业分析图表库。 -* [chartist-js](https://github.com/gionkunz/chartist-js):简单的响应式图表。 -* [epoch](https://github.com/epochjs/epoch):一个通用的实时图表库。 -* [c3](https://github.com/masayuki0812/c3):基于 d3 的可复用图表库。 -* [BabylonJS](https://github.com/BabylonJS/Babylon.js):一个基于 HTML5 和 WebGL 的 3D 游戏的框架。 -* [recharts](https://github.com/recharts/recharts):基于 React 和 d3 ,重新定义图标库。 -* [GraphicsJS](https://github.com/AnyChart/GraphicsJS):轻量级直观接口 JavaScript 图形库,基于 SVG/VML 技术。 -* [mxGraph](https://github.com/jgraph/mxgraph):一款可快速创建交互式图表应用的图形库,支持任何主流浏览器(`已停止开发——译者注`)。 -* [Frappe Charts](https://github.com/frappe/charts):GitHub 驱动,为 web 设计的简易、现代且零依赖的 SVG 图形库。 -* [Frappe Gantt](https://github.com/frappe/gantt):一款简单、可交互、现代的 Web 甘特图库。 - -还有一些很棒的收费库,如 [amchart](https://www.amcharts.com/)、[plotly](https://plot.ly/) 和 [highchart](http://www.highcharts.com/)。 - -## 时间轴 - -* [TimelineJS](https://github.com/NUKnightLab/TimelineJS):一个用 JavaScript 编写的可叙事时间轴库。 -* [timesheet.js](https://github.com/semu/timesheet.js):用于构建简单的 HTML5 & CSS3 时间表的 JavaScript 库。 - -## 电子表格 - -* [HANDSONTABLE](https://github.com/handsontable/handsontable):Handsontable 是一款面向开发者的 JavaScript/HTML -5 电子表格库。 -* [Frappe Datatable](https://github.com/frappe/datatable):Frappe DataTable 是一款适用于展示 Tabular 数据的简单、现代、可交互的数据表格库。 -* [Luckysheet](https://github.com/mengshukeji/Luckysheet):Luckysheet 是一款类似 Excel 的在线电子表格,配置简单且强大,完全开源。 - -## 编辑器 - -* [ace](https://github.com/ajaxorg/ace):Ace ,即 Ajax.org Cloud9 Editor。 -* [CodeMirror](https://github.com/codemirror/CodeMirror):一个浏览器端的代码编辑器,用 JS 实现。 -* [esprima](https://github.com/ariya/esprima):用于多用途分析的 ECMAScript 解析器。 -* [quill](https://github.com/quilljs/quill):一个带有 API 的跨浏览器富文本编辑器。 -* [medium-editor](https://github.com/yabwe/medium-editor):Medium.com 使用的所见即所得编辑器的克隆版。 -* [pen](https://github.com/sofish/pen):享受在线编辑(支持 markdown)。 -* [jquery-notebook](https://github.com/raphaelcruzeiro/jquery-notebook):一个易用的、简洁优雅的文本编辑器。灵感来源于 Medium。 -* [bootstrap-wysiwyg](https://github.com/mindmup/bootstrap-wysiwyg):小巧的、兼容 bootstrap 的所见即所得的富文本编辑器。 -* [ckeditor-releases](https://github.com/ckeditor/ckeditor-releases):适用于每个人的 web 文本编辑器。 -* [editor](https://github.com/lepture/editor):一个 markdown 编辑器,但仍在开发中。 -* [EpicEditor](https://github.com/OscarGodson/EpicEditor):一个可嵌入的 JavaScript Markdown 的编辑器,拥有分屏编辑、即时预览、自动保存草稿和离线支持等功能。 -* [jsoneditor](https://github.com/josdejong/jsoneditor):查看、编辑和格式化 JSON 的 web 工具。 -* [vim.js](https://github.com/coolwanglu/vim.js):拥有持久化 ~/.vimrc 特性,支持 Vim 的 JavaScript 接口。 -* [Squire](https://github.com/neilj/Squire):一个 HTML5 富文本编辑器。 -* [TinyMCE](https://github.com/tinymce/tinymce):一个 JavaScript 富文本编辑器。 -* [trix](https://github.com/basecamp/trix):由 Basecamp 制作,适用于每天写作的富文本编辑器。 -* [Trumbowyg](https://github.com/Alex-D/Trumbowyg):一款轻量且惊人的所见即所得 JavaScript 编辑器 -* [Draft.js](https://github.com/facebook/draft-js):用于构建文本编辑器的 React 框架。 -* [bootstrap-wysihtml5](https://github.com/jhollingworth/bootstrap-wysihtml5):一款简单漂亮的所见即所得编辑器。 -* [wysihtml5](https://github.com/xing/wysihtml5):基于 HTML5 ,渐进增强的开源富文本编辑器,利用非常严苛的规则旨在生成符合 HTML5 规范的标签,避免生成非规范标签和同行样式。 -* [raptor-editor](https://github.com/PANmedia/raptor-editor):Raptor,一款 HTML5 所见即所得内容编辑器! -* [popline](https://github.com/kenshin54/popline):Popline 是一款 HTML5 富文本工具栏。 -* [Summernote](https://github.com/summernote/summernote):一个极简的所见即所得编辑器。 - -## 文档 - -* [DevDocs](http://devdocs.io/):一款多合一接口文档阅读器,界面统一、高效、排版精良。 -* [dexy](http://www.dexy.it/):一款格式自由且文艺的文档工具,可用于编写任何包含代码的技术文档。 -* [docco](http://jashkenas.github.io/docco/):一款快且脏、百来行、文艺范的文档生成器,用 Literate CoffeeScript 实现。 -* [styledocco](http://jacobrask.github.io/styledocco/):根据样式表生成风格规范文档。 -* [Ronn](https://github.com/rtomayko/ronn):构建手册。把对人类阅读友好的简单文本文件转换成 roff 格式文件,便于终端显示,也可以转换为 HTML ,便于 Web 端显示。 -* [dox](https://github.com/tj/dox):一款 Node.js 开发的 JavaScript 文档生成器。Dox 不会生成结构样式严苛的文档,而是采用 JSON 表示法,以实现 markdown 和 JSDoc 风格标签。 -* [jsdox](https://github.com/sutoiku/jsdox):一款将 JSDoc3 转换成 markdown 的文档生成器。 -* [ESDoc](https://github.com/esdoc/esdoc):一款为 JavaScript 设计的优秀文档生成器。 -* [YUIDoc](http://yui.github.io/yuidoc/):一款提取源码注释生成接口文档的 Node.js 应用,功能类似 Javadoc and Doxygen 。 -* [coddoc](http://doug-martin.github.io/coddoc/):一款 jsdoc 解析库。Coddoc 与其他工具相比)的不同之处在于,它很容易扩展,通过 coddoc.addTagHandler 和 coddoc.addCodeHandler 来添加标签和代码解析器。 Coddoc 还可以解析源码生成接口文档。 -* [sphinx](http://www.sphinx-doc.org/):一款让创建智能且漂亮文档更加简单的工具。 -* [Using JSDoc](http://usejsdoc.org/) -* [Beautiful docs](http://beautifuldocs.com/):一款 markdown 格式文档阅读器。 -* [documentation.js](http://documentation.js.org):支持 ES2015+ 和流注释的接口文档生成器。 -* [jsduck](https://github.com/senchalabs/jsduck):为 Sencha JavaScript 框架开发的接口文档生成器,当然其他框架也能用。 -* [codecrumbs](https://github.com/Bogdan-Lyashenko/codecrumbs):一款用于学习和记录代码库的可视化工具,通过在源码中插入面包屑来实现功能。 - -## 文件 - -*处理文件的库。* - -* [Papa Parse](https://github.com/mholt/PapaParse):一款强大的 CSV 库,支持解析 CSV 文件/字符串,也能导出 CSV。 -* [jBinary](https://github.com/jDataView/jBinary):对用声明式语法描述文件类型和数据结构的二进制文件,进行高级 I/O(加载、解析、操作、序列化、存储)操作。 -* [diff2html](https://github.com/rtfpessoa/diff2html):git 差异输出解析器,也是 HTML 美化器。 -* [jsPDF](https://github.com/MrRio/jsPDF):一款 JavaScript PDF 文件生成器。 -* [PDF.js](https://github.com/mozilla/pdf.js):一个 JavaScript PDF 阅读器,社区驱动,Mozilla 支持。 - -## 函数式编程 - -*函数式编程库提升了 JavaScript 的能力。* - -* [underscore](https://github.com/jashkenas/underscore):JavaScript 的实用工具。 -* [lodash](https://github.com/lodash/lodash):提供一致性、可定制、高性能和额外功能的实用库。 -* [Sugar](https://github.com/andrewplummer/Sugar):一个扩展了原生对象功能的 JavaScript 库。 -* [lazy.js](https://github.com/dtao/lazy.js):类似 `Underscore`,但性能更优越 -* [ramda](https://github.com/CrossEye/ramda):一个针对 JavaScript 程序员的实用函数库。 -* [mout](https://github.com/mout/mout):模块化的 JavaScript 工具库。 -* [mesh](https://github.com/crcn/mesh.js):流数据同步工具。 -* [preludejs](https://github.com/alanrsoares/prelude-js):JavaScript 硬核函数式编程。 -* [rambda](https://github.com/selfrefactor/rambda):*Ramda* 快速小巧的替代品。 - -## 响应式编程 - -*响应式程序库提升了 JavaScript 的能力。* - -* [RxJs](https://github.com/Reactive-Extensions/RxJS):对 JavaScript 进行响应式扩展。 -* [Bacon](https://github.com/baconjs/bacon.js):JavaScript 的 FPR(函数式响应式编程)库。 -* [Kefir](https://github.com/pozadi/kefir):受 Bacon.js 和 RxJS 启发的 FRP 库,专注于高性能和低内存消耗。 -* [Highland](http://highlandjs.org/):对 JavaScript 实用工具的重新思考,Highland 能轻易地管理同步和异步信息,而且仅使用标准 JavaScript 和类 Node 流。 -* [Most.js](https://github.com/cujojs/most):高性能 FRP 库。 -* [MobX](https://github.com/mobxjs/mobx):一款简单可扩展的状态管理 TFRP (`Transparently Functional Reactive Programming ,透明函数式响应式编程——译者注`)库。 -* [Cycle.js](https://cycle.js.org):一款用于可预测代码的函数式和响应式 JavaScript 框架。 -* [concent](https://github.com/concentjs/concent):绝对是 ❤️ 最简单却 ⚡️ 最强大的 react 状态管理开发框架,可预测、渐进式、高性能。 - -## 数据结构 - -*数据结构库用于构建一个更复杂的应用。* - -* [immutable-js](https://github.com/facebook/immutable-js):不可变的数据集合,包括 Sequence、Range、Repeat、Map、OrderedMap、Set 和 sparse Vector。 -* [mori](https://github.com/swannodette/mori):使用 ClojureScript 持久化数据结构和支持原生 JavaScript API 的库。 -* [buckets](https://github.com/mauriciosantos/Buckets-JS):完整的、经过充分测试和文档完备的数据结构的 JavaScript 库。 -* [hashmap](https://github.com/flesler/hashmap):简单的哈希映射实现,支持任何类型的键值。 - -## 日期 - -*日期库。* - -* [moment](https://github.com/moment/moment):解析、验证、操作和显示日期。 -* [moment-timezone](https://github.com/moment/moment-timezone):基于 moment.js 的时区库。 -* [jquery-timeago](https://github.com/rmm5t/jquery-timeago):一款支持自动更新模糊时间戳的 jQuery 插件(如:"4 分钟之前")。 -* [timezone-js](https://github.com/mde/timezone-js):让 JavaScript Date 对象拥有时区功能。使用 Olson zoneinfo 文件记录时区数据。 -* [date](https://github.com/MatthewMueller/date):对人类友好的 Date()。 -* [ms.js](https://github.com/rauchg/ms.js):小巧的毫秒转换工具。 -* [countdown.js](https://github.com/gumroad/countdown.js):超小倒计时。 -* [timeago.js](http://timeago.org):一个非常轻量级(~1.7 Kb)的用于将时间转化成 `xxx时间前` 格式的库。 -* [fecha](https://github.com/taylorhakes/fecha):轻量级日期格式化和解析库(约 2kb)。可以用来替换 moment.js 格式化和解析日期功能(moment.js 体积比较大——译者注)。 -* [date-fns](https://github.com/date-fns/date-fns):现代 JavaScript 日期功能库。 -* [map-countdown](https://github.com/dawidjaniga/map-countdown):构建在 Google 地图上的浏览器倒计时。 -* [dayjs](https://github.com/iamkun/dayjs):Day.js 是一款拥有和 Moment.js 一样的现代化接口的日期库,但它仅仅有 2kb 大小,可以用来替换 Moment.js。 - -## 字符串 - -*字符串库。* - -* [voca](https://github.com/panzerdp/voca):一款超级好用的 JavaScript 字符串库。 -* [selecting](https://github.com/EvandroLG/selecting):一个允许你获取用户选定文本的库。 -* [underscore.string](https://github.com/epeli/underscore.string):Underscore.js 的字符串操作扩展。 -* [string.js](https://github.com/jprichardson/string.js):额外的 JavaScript 字符串方法。 -* [he](https://github.com/mathiasbynens/he):健壮的 HTML 实体编码/解码器。 -* [multiline](https://github.com/sindresorhus/multiline):多行字符串。 -* [query-string](https://github.com/sindresorhus/query-string):解析和字符串化 URL 查询字符串。 -* [URI.js](https://github.com/medialize/URI.js/):URL 操作库。 -* [jsurl](https://github.com/Mikhus/jsurl):轻量的 URL 操作库。 -* [sprintf.js](https://github.com/alexei/sprintf.js):实现字符串格式化。 -* [url-pattern](https://github.com/snd/url-pattern):比正则表达式匹配 url 或其它字符串更简单,字符串和数据可相互转化。 -* [plexis](https://github.com/plexis-js/plexis):低保真、强大、社区驱动的字符串操作库。 - -## 数字 - -* [Numeral-js](https://github.com/adamwdraper/Numeral-js):对数字进行格式化和操作的库。 -* [chance.js](https://github.com/chancejs/chancejs):JavaScript 随机生成器,可以生成数字、字符串等。 -* [odometer](https://github.com/HubSpot/odometer):流畅的数字过渡效果。 -* [accounting.js](https://github.com/josscrowcroft/accounting.js):对数字、金钱、货币进行格式化的轻量库,完全本地化和无依赖。 -* [money.js](https://github.com/josscrowcroft/money.js):一个小巧(1kb)的货币转换库,适用于 web 和 nodeJS。 -* [Fraction.js](https://github.com/infusion/Fraction.js):一个有理数库。 -* [Complex.js](https://github.com/infusion/Complex.js):一个复数库。 -* [Polynomial.js](https://github.com/infusion/Polynomial.js):一个多项式库。 -* [Quaternion.js](https://github.com/infusion/Quaternion.js):一款适用于 JavaScript 的四元数操作库。 - -## 存储 - -* [store.js](https://github.com/marcuswestin/store.js):为所有浏览器封装了 LocalStorage,而没有使用 cookies 和 flash。隐秘地使用 localStorage、globalStorage 和用户数据。 -* [localForage](https://github.com/mozilla/localForage):改善后的离线存储。其封装了 IndexedDB、WebSQL 和 localStorage,拥有操作简单和强大的 API。 -* [jStorage](https://github.com/andris9/jStorage):jStorage 是一个简单的键值对数据库,用于在浏览器端存储数据。 -* [cross-storage](https://github.com/zendesk/cross-storage):获得权限后,能跨域名本地存储。 -* [basket.js](https://github.com/addyosmani/basket.js):用 localStorage 加载和缓存脚本的资源加载器。 -* [bag.js](https://github.com/nodeca/bag.js):可以缓存脚本和加载资源,与 basket.js 相似,但增加了键值对接口和对 localStorage / websql / indexedDB 的支持。 -* [basil.js](https://github.com/Wisembly/basil.js):智能的 JavaScript 数据持久层库。 -* [jquery-cookie](https://github.com/carhartl/jquery-cookie):轻量简单的、用于读取、编辑和删除 cookie 的 jQuery 插件。 -* [js-cookie](https://github.com/js-cookie/js-cookie):一款简单、轻量的 cookies 读写删 jQuery 插件。 -* [Cookies](https://github.com/ScottHamper/Cookies):一个客户端 Cookie 操作库。 -* [DB.js](https://github.com/aaronpowell/db.js/):基于 Promise 的、封装了 IndexedDB 的库。 -* [lawnchair.js](https://github.com/brianleroux/lawnchair/):简单的客户端 JSON 存储。 -* [sql.js](https://github.com/kripken/sql.js):基于 Emscripten 将 SQLite 编译成 JavaScript。 -* [crumbsjs](https://github.com/nirtz89/crumbsjs):一款轻量级原生 ES6 cookies 和本地存储 JavaScript 库。 -* [awesome-web-storage](https://github.com/softvar/awesome-web-storage):你必须知道的所有客户端存储知识。 - -## 颜色 - -* [randomColor](https://github.com/davidmerfield/randomColor):JavaScript 颜色生成器。 -* [chroma.js](https://github.com/gka/chroma.js):拥有各种各样颜色操作的 JavaScript 库。 -* [color](https://github.com/MoOx/color):JavaScript 颜色转换和操作库。 -* [colors](https://github.com/mrmrs/colors):更智能的默认 web 颜色。 -* [PleaseJS](https://github.com/Fooidge/PleaseJS):随机创建出赏心悦目的颜色和配色方案的 JavaScript 库。 -* [TinyColor](https://github.com/bgrins/TinyColor):快速、轻巧的颜色操作和转换库。 -* [Vibrant.js](https://github.com/jariz/vibrant.js/):从图像提取主要颜色。 - -## 国际化和本地化 - -*本地化(l10n)和国际化(i18n) JavaScript 库* - -* [i18next](https://github.com/i18next/i18next):用 JavaScript 实现国际化(i18n)简单的方法。 -* [polyglot](https://github.com/airbnb/polyglot.js):小巧的国际化助手库。 -* [babelfish](https://github.com/nodeca/babelfish/):提供友好易懂 API 的 i18n 库,并且内置多种支持。 -* [ttag](https://github.com/ttag-org/ttag):基于 ES6 标签模板和优秀的旧 GNU gettext ,新潮的 JavaScript 国际化、本地化库。 - -## 控制流 - -* [async](https://github.com/caolan/async):适用于 node.js 和浏览器的异步工具库。 -* [q](https://github.com/kriskowal/q):实现异步 promise 的 JavaScript 工具。 -* [step](https://github.com/creationix/step/):一款可以使逻辑执行更简单的异步控制流库。 -* [contra](https://github.com/bevacqua/contra/):函数式风格实现的异步流控制。 -* [Bluebird](https://github.com/petkaantonov/bluebird/):功能齐全的 promoise 库,专注于功能革新和性能提升。 -* [when](https://github.com/cujojs/when):快速可靠的、Promises/A+ 规范的 when() 实现,而且拥有其它异步操作的优秀特性。 -* [ObjectEventTarget](https://github.com/gartz/ObjectEventTarget):为普通对象添加事件监听原型(就如浏览器 DOMElement 的 EventTarget 一样)。 -* [sporadic](https://github.com/marcoonroad/sporadic):位于 promise 顶部的组合并发抽象(就像流、协程和类似 Go channels 一样),支持 Node.js 和浏览器引擎。 - -## 路由 - -* [director](https://github.com/flatiron/director):一个小巧的、与 URL 同构的路由。 -* [page.js](https://github.com/visionmedia/page.js):受 Express router 启发的小型客户端路由器(约为1200字节)。 -* [pathjs](https://github.com/mtrpcic/pathjs):简单、轻量的 web 路由。 -* [crossroads](https://github.com/millermedeiros/crossroads.js):JavaScript 路由。 -* [davis.js](https://github.com/olivernn/davis.js):基于 pushState 可降级 RESTful 风格的 JavaScript 路由。 -* [navaid](https://github.com/lukeed/navaid):一款浏览器端的导航辅助系统(也可以成为路由),体积才 850 字节! - -## 安全性 - -* [DOMPurify](https://github.com/cure53/DOMPurify):针对 HTML、MathML 和 SVG 的仅支持 DOM 的超快速、高容错的 XSS 过滤器。 -* [js-xss](https://github.com/leizongmin/js-xss):通过白名单配置,即可过滤不信任的 HTML(防止 XSS 攻击)。 -* [xss-filters](https://github.com/yahoo/xss-filters):Yahoo 出品的安全 XSS 过滤器。 - -## 日志 - -* [log](https://github.com/adamschwartz/log):带样式的 Console.log。 -* [Conzole](https://github.com/Oaxoa/Conzole):对 JavaScript 原生 console 对象方法和功能进行封装的 debug 面板,并将面板显示在页面内。 -* [console.log-wrapper](https://github.com/patik/console.log-wrapper):将日志清晰地记录到 console,兼容所有浏览器。 -* [loglevel](https://github.com/pimterry/loglevel):最轻量的 JavaScript 日志记录工具库,向封装后的 console.log 方法增加可靠的日志等级。 -* [minilog](http://mixu.net/minilog/):轻量的、流式 API 显示的、可用于客户端和服务器端的日志记录库。 -* [storyboard](http://guigrpa.github.io/storyboard/):通用日志库 + Chrome 扩展。提供一个单一入口查看包含客户端和服务端的任务触发日志。 - -## 正则表达式 - -* [RegEx101](https://regex101.com/#javascript):在线的 JavaScript 正则表达式测试器和调试器。同时也支持 Python、PHP 和 PCRE。 -* [RegExr](http://regexr.com/):用于创建、测试和学习正则表达式的 HTML/JS 工具。 - -## 语音命令 - -* [annyang](https://github.com/TalAter/annyang):向网站添加语音命令的语音识别库。 -* [voix.js](https://github.com/pazguille/voix):向网站、app 或游戏添加语音命令的 JavaScript 库。 - -## API - -* [axios](https://github.com/axios/axios):基于 Promise 的 HTTP 客户端,适用于 Node.js 和 浏览器。 -* [bottleneck](https://github.com/SGrondin/bottleneck):强大的速度限制器,使调节流量变得更容易。 -* [oauth-signature-js](https://github.com/bettiolo/oauth-signature-js):适用于 node 和 浏览器的 OAuth 1.0a 签名生成器。 -* [amygdala](https://github.com/lincolnloop/amygdala):为 Web 应用提供 RESTful HTTP 客户端解决方案。 -* [jquery.rest](https://github.com/jpillora/jquery.rest):一个让 RESTful API 更易用的 jQuery 插件。 -* [Rails Ranger](https://github.com/victor-am/rails-ranger):为 Ruby Tails 接口设计的严格的 REST 客户端。 -* [wretch](https://github.com/elbywan/wretch):一款小巧的直觉语法系 fetch 功能封装包。 -* [Bearer.sh](https://github.com/Bearer/bearer-js):支持 OAuth / API Key / Basic 等协议的全能型 API 客户端。`(已停止维护——译者注)` -* [FarFetch](https://github.com/WebsiteBeaver/far-fetch):简单易用的现代 Fetch 接口封装,简化了文件上传。 -* [Optic](https://github.com/opticdev/optic):Optic 用于对 API 自动测试和文档生成。 -* [SWR](https://github.com/vercel/swr):用于远端数据拉取的 React Hooks 库。 - -## 流媒体 - -* [Tailor](https://github.com/zalando/tailor):适用于前端微服务的流媒体布局服务,灵感来自 Facebook BigPipe。 - -## 视觉检测 - -* [tracking.js](https://github.com/eduardolundgren/tracking.js):在 web 上实现计算视觉的一种现代方法。 -* [ocrad.js](https://github.com/antimatter15/ocrad.js):基于 Emscripten 的 JavaScript OCR 实现。 - -## 机器学习 - -* [ConvNetJS](https://github.com/karpathy/convnetjs):JavaScript 深度学习。在浏览器环境训练卷积神经网络(或者普通神经网络)。 -* [DN2A](https://github.com/dn2a/dn2a-javascript):数字神经网络架构。 -* [Brain.js](https://github.com/harthur/brain):JavaScript 神经网络。 -* [Mind.js](https://github.com/stevenmiller888/mind):一款灵活的神经网络库。 -* [Synaptic.js](https://github.com/cazala/synaptic):适用于 Node.js 和浏览器的无架构神经网络库。 -* [TensorFlow.js](https://js.tensorflow.org):一款用于在 浏览器和 Node.js 中训练和部署 ML 模型的 JavaScript 库。 -* [ml5.js](https://ml5js.org):友好的 Web 端机器学习库。 -* [Synapses](https://github.com/mrdimosthenis/Synapses):轻量级跨平台神经网络库。 - -## 浏览器检测 - -* [bowser](https://github.com/ded/bowser):一个浏览器检测器,特点是小巧快速且 API 丰富。 - -## 基准测试 - -* [benchmark.js](https://github.com/bestiejs/benchmark.js):jsPerf.com 使用的基准测试库。 -* [matcha](https://github.com/logicalparadox/matcha):一款咖啡因驱动的基准测试简单实现。 - -## UI - -## 代码高亮 - -* [Highlight.js](https://github.com/isagalaev/highlight.js):JavaScript 语法高亮器。 -* [PrismJS](https://github.com/PrismJS/prism):轻量、健壮和优雅的语法高亮器。 - -## 加载状态 - -指示加载状态的库。 - -* [Mprogress.js](https://github.com/lightningtgc/MProgress.js):谷歌 Material 风格的线性进度条。 -* [NProgress](http://ricostacruz.com/nprogress/):在 Ajax'y 应用显示细长型进度条。 -* [Spin.js](https://github.com/fgnass/spin.js):一个旋转进度指示器。 -* [progress.js](https://github.com/usablica/progress.js):为页面中的任何对象创建和管理进度条。 -* [progressbar.js](https://github.com/kimmobrunfeldt/progressbar.js):基于 SVG path 动画,漂亮、响应式的进度条。 -* [pace](https://github.com/HubSpot/pace):自动向你的网站添加一个进度条。 -* [topbar](https://github.com/buunguyen/topbar):小巧漂亮的、与网站同宽的进度指示器。 -* [nanobar](https://github.com/jacoborus/nanobar):非常轻量的进度条,不依赖 jQuery。 -* [PageLoadingEffects](https://github.com/codrops/PageLoadingEffects):使用 SVG 动画展现新内容的现代方式。 -* [SpinKit](https://github.com/tobiasahlin/SpinKit):CSS 加载指示器动画集合。 -* [Ladda](https://github.com/hakimel/Ladda):内置在按钮的加载指示器。 -* [css-loaders](https://github.com/lukehaas/css-loaders):CSS 旋转加载指示器动画集合。 - -除了上述这些库,还有 [Codepen](http://codepen.io/collection/HtAne/) 珍藏,另外还有 [Ajaxload](http://www.ajaxload.info/),[Preloaders](http://preloaders.net/) 和 [CSSLoad](http://cssload.net/) 这些生成器。 - -## 验证 - -* [Parsley.js](https://github.com/guillaumepotier/Parsley.js):一行 JavaScript 代码都不用写就可以在前端验证表单。 -* [jquery-validation](https://github.com/jzaefferer/jquery-validation):jQuery 验证插件。 -* [validator.js](https://github.com/chriso/validator.js):字符串验证和过滤(清理用户输入中的有害或危险字符)。 -* [validate.js](https://github.com/rickharrison/validate.js):受 CodeIgniter 启发的轻量表单验证 JavaScript 库。 -* [validatr](https://github.com/jaymorrow/validatr/):跨浏览器的 HTML5 表单验证库。 -* [FormValidation](http://formvalidation.io/):jQuery 最好的表单验证插件。曾用名 BootstrapValidator. -* [is.js](https://github.com/arasatasaygin/is.js):用于类型、正则表达式、是否存在、时间等检查。 -* [FieldVal](https://github.com/FieldVal/fieldval-js):多用途验证库。同时支持同步和异步验证。 -* [Funval](https://github.com/neuledge/funval):函数接口式数据验证(支持 TypeScript)。 - -## 键盘封装器 - -* [mousetrap](https://github.com/ccampbell/mousetrap):处理键盘快捷键的简单 JavaScript 库。 -* [keymaster](https://github.com/madrobby/keymaster):定义和调度键盘快捷键的小型库。 -* [Keypress](https://github.com/dmauro/Keypress):键入捕捉工具库,任何键都可以成为一个修饰健。 -* [KeyboardJS](https://github.com/RobertWHurst/KeyboardJS):一个用于绑定组合键的 JavaScript 库,让你无痛解决快捷键和组合键冲突。 -* [jquery.hotkeys](https://github.com/jeresig/jquery.hotkeys):jQuery Hotkeys 能让你在代码任何的地方监听键盘事件,并几乎支持所有按键组合。 -* [jwerty](https://github.com/keithamus/jwerty):令人惊叹的键盘事件处理库。 - -## 导览与指南 - -* [intro.js](https://github.com/usablica/intro.js):一款用于网站项目新特性介绍和逐步导览库。 -* [shepherd](https://github.com/HubSpot/shepherd):通过引导让用户浏览你的应用程序。 -* [bootstrap-tour](https://github.com/sorich87/bootstrap-tour):应用 Twitter Bootstrap 气泡对产品进行快速简单的引导。 -* [tourist](https://github.com/easelinc/tourist):简单、灵活的应用引导库。 -* [chardin.js](https://github.com/heelhook/chardin.js):简单的应用遮罩层引号库。 -* [pageguide](https://github.com/tracelytics/pageguide):使用 jQuery 和 CSS3 的 web 页面元素交互引导库。 -* [hopscotch](https://github.com/linkedin/hopscotch):让开发者更容易向其产品页面添加引导的框架。 -* [joyride](https://github.com/zurb/joyride):基于 jQuery 的功能引导介绍插件。 -* [focusable](https://github.com/zzarcon/focusable):通过向页面其余部分添加遮罩层,使焦点聚集在特定 DOM 元素。 -* [driver.js](https://github.com/kamranahmedse/driver.js):用于聚焦用户注意力的强大却轻量的原生 JavaScript 引擎。 - -## 通知 - -* [iziToast](https://github.com/dolce/iziToast):优雅、响应式、灵活且轻量的零依赖通知插件。 -* [messenger](https://github.com/HubSpot/messenger):为应用添加 Growl-style 弹框和信息(Crowl 是 Mac OS X 下的一个通知系统)。 -* [noty](https://github.com/needim/noty):jQuery 通知插件。 -* [pnotify](https://github.com/sciactive/pnotify):适用于 Bootstrap、jQuery UI 和 Web Notifications Draft 的 JavaScript 通知库。 -* [toastr](https://github.com/CodeSeven/toastr):简单的 JavaScript 吐司通知库。 -* [humane-js](https://github.com/wavded/humane-js):一个简单、时髦的浏览器通知系统。 -* [smoke.js](https://github.com/hxgf/smoke.js):与框架无关的 JavaScript 弹框系统。 -* [notie](https://github.com/jaredreich/notie):简单的零依赖通知器和输入框。 - -## 幻灯片 - -* [Swiper](https://github.com/nolimits4web/Swiper):使用硬件加速动画的移动设备触控幻灯片框架。 -* [slick](https://github.com/kenwheeler/slick):(可能是)你最爱的跑马灯轮播库。 -* [slidesJs](http://www.slidesjs.com/):响应式的 jQuery(1.7.1+)幻灯片插件,具有触摸、 CSS3 过渡等特性。`(已停止维护——译者注)` -* [FlexSlider](https://github.com/woothemes/FlexSlider):一款令人惊叹的、全响应式的 jQuery 幻灯片插件。 -* [unslider](https://github.com/idiot/unslider):最简单的幻灯片 jQuery 插件。 -* [sly](https://github.com/darsain/sly):用于单向滚动的 JavaScript 库,支持基于项目的导航。`(注:最后更新时间是 7 年前)` -* [vegas](https://github.com/jaysalvat/vegas):向页面添加漂亮的全屏背景的 jQuery 插件,同时也支持幻灯片播放。 -* [Sequence](https://github.com/IanLunn/Sequence):用于创建响应式的幻灯片、演示、标语和其他分步导览应用的 CSS 动画框架。 -* [reveal.js](https://github.com/hakimel/reveal.js):用 HTML 创建漂亮演示文档控件的框架。 -* [impress.js](https://github.com/impress/impress.js):一款适用于现代浏览器,基于 CSS3 transforms 和 transitions 动画的演示文档框架。灵感来自 prezi.com 。 -* [bespoke.js](https://github.com/bespokejs/bespoke):一个超级小的(1KB min和gzip压缩),模块化的现代浏览器表示库,旨在促进一个丰富的插件生态系统。 -* [Strut](https://github.com/tantaman/Strut):Strut 是 Impress.js 和 Bespoke.js 演示文档编辑器。 -* [PhotoSwipe](https://github.com/dimsemenov/PhotoSwipe):适用于移动设备和桌面电脑的、模块化和独立框架的 JavaScript 画廊控件。 -* [jcSlider](https://github.com/JoanClaret/jcSlider):基于 CSS 动画实现的响应式幻灯片 jQuery 插件。 -* [basic-jquery-slider](https://github.com/jcobb/basic-jquery-slider):易于使用、指定主题和定制化。 -* [jQuery.adaptive-slider](https://github.com/creative-punch/jQuery.adaptive-slider/):带有自适应颜色标题和导航的幻灯片 jQuery 插件。 -* [slidr](https://github.com/bchanx/slidr):一个简单、轻量级的 JS 库,用于向页面添加幻灯片转换。无依赖关系。 -* [Flickity](https://github.com/metafizzy/flickity):可触摸的、响应式的和可轻弹的画廊。 -* [Glide.js](https://github.com/jedrzejchalubek/glidejs):响应式触摸友好型 jQuery 幻灯片。特点是小快灵。 -* [Embla Carousel](https://github.com/davidcetinkaya/embla-carousel):TypeScript 编写的一款可扩展的低级轮播库。 - -## 滑块控件 - -* [Ion.RangeSlider](https://github.com/IonDen/ion.rangeSlider):强大的、易于自定义的范围滑块选择库,支持丰富的配置和皮肤。 -* [jQRangeSlider](https://github.com/ghusse/jQRangeSlider):支持日期的滑块选择库。 -* [noUiSlider](https://github.com/leongersen/noUiSlider):轻量无冗余的、高度定制化的滑块选择库。 -* [rangeslider.js](https://github.com/andreruffert/rangeslider.js):HTML5 输入框滑块补丁。 - -## 表单组件 - -### 输入 - -* [typeahead.js](https://github.com/twitter/typeahead.js):快速、功能齐全的自动补全库。 -* [tag-it](https://github.com/aehlke/tag-it):处理多标签字段以及标签建议/自动补全的 jQuery UI 插件。 -* [At.js](https://github.com/ichord/At.js):在应用中添加类似 Github 的自动补全提示功能。 -* [Placeholders.js](https://github.com/jamesallardice/Placeholders.js):HTML5 placeholder 属性 JavaScript 补丁。 -* [fancyInput](https://github.com/yairEO/fancyInput):添加 CSS3 效果,让输入更有趣。 -* [jQuery-Tags-Input](https://github.com/xoxco/jQuery-Tags-Input):利用这个 jQuery 插件,可奇妙地将一个简单的文本输入转换成一个酷酷的标签列表。 -* [vanilla-masker](https://github.com/BankFacil/vanilla-masker):一个纯 JavaScript 实现的输入控制库。 -* [Ion.CheckRadio](https://github.com/IonDen/ion.checkRadio):一个为复选框和单选按钮添加样式的 jQuery 库,支持多种皮肤。 -* [awesomplete](https://github.com/LeaVerou/awesomplete):零依赖、超轻量、好用而且漂亮的自动补全库。 - [http://leaverou.github.io/awesomplete](http://leaverou.github.io/awesomplete) - -### 日历 - -* [pickadate.js](https://github.com/amsul/pickadate.js):对移动设备友好的、响应式的和轻量的 jQuery 日期 & 时间输入选择器。 -* [bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker):基于 bootstrap 的日历选择器。 -* [Pikaday](https://github.com/dbushell/Pikaday):一个崭新的 JavaScript 日期选择器 —— 轻量、无依赖和模块化的 CSS。 -* [fullcalendar](https://github.com/fullcalendar/fullcalendar):全尺寸、支持拖放事件的 jQuery 日历插件。 -* [rome](https://github.com/bevacqua/rome):可定制的日期(和时间)选择器。无依赖,可选 UI。 -* [datedropper](https://github.com/felicegattuso/datedropper):datedropper 是一个 jQuery 插件,它提供了快速简易的方式去管理日期输入框。 - -### 选择器 - -* [selectize.js](https://github.com/brianreavis/selectize.js):Selectize 是文本框和 `