Compare commits

..

797 Commits

Author SHA1 Message Date
c808475d59 released v1.43.0 2024-05-10 23:47:03 +08:00
63725cf4ab ci: update workflows config. 2024-05-10 23:47:03 +08:00
fad6a20b13 doc: update README.md. 2024-05-10 11:12:18 +00:00
1c5850b8e9 doc: update CONTRIBUTING.md. 2024-05-10 11:12:17 +00:00
a64e21d466 doc: update README #102 (#643) 2024-05-10 19:10:58 +08:00
fcda71cfd3 doc: update docs/neo4j.md 2024-05-09 21:58:42 +08:00
450d3d8f0e doc: update docs/neo4j.md 2024-05-09 19:03:58 +08:00
f24b08489d doc: update docs/docker.md #640 2024-05-09 08:24:51 +08:00
443f2ba7b0 doc: update README.md. 2024-05-08 22:51:00 +00:00
da0c16aab7 doc: update CONTRIBUTING.md. 2024-05-08 22:50:59 +00:00
35e2e58205 doc: Update docker.md (#640)
新增一些常见的Docker运维项
新增一些常见的中间件、数据库容器启动示例和备注信息
2024-05-09 06:49:54 +08:00
b9e327cfb7 doc: update README.md. 2024-05-08 00:02:10 +00:00
01c8c04b30 doc: update CONTRIBUTING.md. 2024-05-08 00:02:08 +00:00
1b1ad3453c doc: update README.md 2024-05-08 08:00:47 +08:00
70e94f5cc9 doc: update docs/cpp.md (#589) 2024-05-07 14:56:12 +08:00
d70b190edc doc: Delete assets/Neo4j.svg 2024-05-07 14:38:53 +08:00
1df034e846 doc: Delete docs/Neo4j.md 2024-05-07 14:36:45 +08:00
88d6e50319 doc: update README.md. 2024-05-07 06:20:57 +00:00
265bffe9c1 doc: update CONTRIBUTING.md. 2024-05-07 06:20:56 +00:00
ffa69578a6 doc: update docs/cpp.md (#589)
* 数据结构和开发技巧以及C++面试知识点

* Update cpp.md

修改md中cpp格式
2024-05-07 14:20:30 +08:00
73106942ca doc: docs/mysql.md (#639)
* update neo4j.md

* update neo4j.md
2024-05-07 14:19:55 +08:00
9446bc0ab9 doc: update README.md. 2024-05-07 01:53:51 +00:00
4c86b97c40 doc: update CONTRIBUTING.md. 2024-05-07 01:53:50 +00:00
6f16c43dc5 doc: update neo4j.md (#638) 2024-05-07 09:52:51 +08:00
7c005d8e8a doc: update docs/fastapi.md 2024-05-06 07:01:20 +08:00
1a829ec469 doc: update neo4j document #636 2024-05-05 17:31:37 +08:00
4d638b26c5 doc: update docs/java.md #628 2024-05-05 16:58:56 +08:00
22ecbc56a6 doc: update README.md. 2024-05-05 08:48:01 +00:00
3d2c2d4d25 doc: update CONTRIBUTING.md. 2024-05-05 08:48:00 +00:00
6f0ec249f6 doc: update README.md. 2024-05-05 08:46:57 +00:00
654dc15eb6 doc: update CONTRIBUTING.md. 2024-05-05 08:46:56 +00:00
c71ea7d356 doc: update docs/fastapi.md (#637)
Co-authored-by: AAJZ <aajz@163.com>
2024-05-05 16:46:46 +08:00
f6a29c9e9e fet: add docs/Neo4j.md (#636)
* 新增了c#中的类(所有内容都是经过书籍,资料证实的)

* 新增了c#中的类部分模块,元组模块,集合模块

* 更改了c#中集合的样式,之前显示出来有bug

* 新增了Neo4j模块

* 新增了Neo4j模块
2024-05-05 16:45:52 +08:00
bec51fa09f doc: Update README.md #102 2024-05-04 13:47:05 +08:00
aaf6d1669b doc: Update README.md (#102) 2024-04-29 19:30:55 +08:00
0c4c020aaf doc: update README.md. 2024-04-28 10:46:24 +00:00
5456dbfa24 doc: update CONTRIBUTING.md. 2024-04-28 10:46:24 +00:00
Aze
3ceb796324 doc: Update figma.md (#630)
figma.md  ffmpeg -> Figma
2024-04-28 18:45:21 +08:00
87554d1616 doc: update README.md. 2024-04-28 04:14:33 +00:00
69d5fe0b2a doc: update CONTRIBUTING.md. 2024-04-28 04:14:32 +00:00
404f5f1070 doc: uppdate docs/cs.md (#629)
* 新增了c#中的类(所有内容都是经过书籍,资料证实的)

* 新增了c#中的类部分模块,元组模块,集合模块

* 更改了c#中集合的样式,之前显示出来有bug
2024-04-28 12:13:30 +08:00
c0b8eb4da7 docs: update docs/java.md. (#628) 2024-04-26 11:15:25 +08:00
7fa1528be5 doc: Update vim.md fix #625 2024-04-24 14:59:25 +08:00
564ef54c1b doc: update tauri.md 2024-04-23 16:15:21 +08:00
dd0d19cf1c doc: update elasticsearch.md (#623) 2024-04-23 16:15:21 +08:00
5c34078de5 doc: docs/oracle.md (#617) 2024-04-23 16:15:21 +08:00
4e21fd05d1 doc: update README.md. 2024-04-23 05:49:16 +00:00
d1fb7ad8cb doc: update CONTRIBUTING.md. 2024-04-23 05:49:15 +00:00
43397a9cf7 feat: add elasticsearch reference (#623) 2024-04-23 13:48:00 +08:00
166cbbd02f doc: update README.md. 2024-04-18 15:23:32 +00:00
d52c7c2abc doc: update CONTRIBUTING.md. 2024-04-18 15:23:31 +00:00
21ddcb51cb doc: update docs/tauri.md (#618) 2024-04-18 23:22:10 +08:00
ac70a8d913 doc: update README.md. 2024-04-18 09:45:55 +00:00
b28c141fdf doc: update CONTRIBUTING.md. 2024-04-18 09:45:54 +00:00
a9552508a0 doc: update oracle.md (#617)
增加DBA对Oracle维护巡检的常用SQL命令
2024-04-18 17:44:39 +08:00
2c61572a99 doc: Update README.md 2024-04-17 23:15:13 +08:00
d3ece9328d doc: update docs/cpp.md 2024-04-16 23:41:10 +08:00
d3e778ee35 doc: update docs/github-actions.md (#613) 2024-04-16 23:39:57 +08:00
187fe9e8c0 doc: update README.md. 2024-04-16 13:50:12 +00:00
fe5d52682e doc: update CONTRIBUTING.md. 2024-04-16 13:50:11 +00:00
642aa08cd6 doc: update docs/github-actions.md (#613) 2024-04-16 21:48:51 +08:00
8c80f47c99 doc: update README.md. 2024-04-16 08:11:38 +00:00
e8e1a83240 doc: update CONTRIBUTING.md. 2024-04-16 08:11:37 +00:00
c0ebe199d1 doc: update docs/cpp.md (#611) 2024-04-16 16:10:24 +08:00
ebcae6d5cd doc: update docs/tauri.md (#610) 2024-04-14 20:46:12 +08:00
a39f00461b doc: update README.md. 2024-04-14 09:05:31 +00:00
73099249f4 doc: update CONTRIBUTING.md. 2024-04-14 09:05:30 +00:00
4db4c7a750 feat: add docs/tauri.md (#610) 2024-04-14 17:04:10 +08:00
9db13825c5 doc: update docs/github.md 2024-04-13 13:53:02 +08:00
444f2c8c91 doc: update README.md 2024-04-12 22:28:34 +08:00
e8af72372c doc: update docs/cs.md 2024-04-12 22:27:03 +08:00
d8e1bdf6ca doc: update README.md. 2024-04-12 08:54:02 +00:00
55587bd145 doc: update CONTRIBUTING.md. 2024-04-12 08:54:01 +00:00
9684f7c9e4 doc: update docs/cs.md (#609)
* 增加国内镜像

* add reference of syntax sugar for c#

* optimizing page format for cs.md

* optimizing page format for cs.md

* add reference of linq for c#
2024-04-12 16:52:44 +08:00
51336f8b86 doc: update docs/cs.md (#608) 2024-04-11 20:09:17 +08:00
f682690b9f doc: update README.md. 2024-04-11 09:43:17 +00:00
6e46907d5c doc: update CONTRIBUTING.md. 2024-04-11 09:43:16 +00:00
b0df70a952 doc: update docs/cs.md (#608)
* 增加国内镜像

* add reference of syntax sugar for c#

* optimizing page format for cs.md

* optimizing page format for cs.md
2024-04-11 17:42:00 +08:00
55be092001 doc: Update README.md 2024-04-11 02:10:55 +08:00
7cf8fae835 doc: update README.md. 2024-04-10 15:23:07 +00:00
8b3784038d doc: update CONTRIBUTING.md. 2024-04-10 15:23:07 +00:00
f000ab5d67 doc: update README.md (#607) 2024-04-10 23:22:02 +08:00
599e776b1a doc: update README.md. 2024-04-10 07:53:58 +00:00
959afe6bf7 doc: update CONTRIBUTING.md. 2024-04-10 07:53:57 +00:00
be81f1bfcb doc: update docs/mysql.md (#605) 2024-04-10 15:53:01 +08:00
3cee78a29e doc: add docs/ftp.md #596 2024-04-09 23:58:19 +08:00
742c4b0018 doc: update README.md. 2024-04-09 10:14:56 +00:00
e1d523036e doc: update CONTRIBUTING.md. 2024-04-09 10:14:55 +00:00
38bbf5d6d3 doc: update docs/kubernetes.md 2024-04-09 18:13:55 +08:00
0bced7ac0f doc: docs/bash.md 2024-04-09 18:13:55 +08:00
104f34dff9 doc: docs/bash.md 2024-04-09 18:13:55 +08:00
c3197fe24b doc: update docs/bash.md 2024-04-09 18:13:55 +08:00
d5e6cb3b62 doc: update docs/c.md 2024-04-09 18:13:55 +08:00
99e41b2798 doc: Update r.md (#604) 2024-04-09 18:13:38 +08:00
93d760298e doc: update README.md. 2024-04-09 09:04:41 +00:00
62777d1690 doc: update CONTRIBUTING.md. 2024-04-09 09:04:41 +00:00
881033ca36 doc: Update README.md (#602) (#102)
添加镜像站https://reference.cizai.io/
2024-04-09 17:03:43 +08:00
00cc7f7330 doc: Update README.md 2024-04-09 12:59:50 +08:00
8c7cecb128 doc: update README.md. 2024-04-09 04:58:11 +00:00
d4000a3c02 doc: update CONTRIBUTING.md. 2024-04-09 04:58:10 +00:00
7bb91f3f60 doc: update docs/java.md #601 2024-04-09 12:55:37 +08:00
1b9437656d docs: update docs/java.md. (#601) 2024-04-09 11:44:38 +08:00
2b6b58d7fb doc: update docs/fastapi.md 2024-04-08 02:40:02 +08:00
8dca5a8765 doc: update README.md. 2024-04-07 18:29:28 +00:00
ce4e16fb75 doc: update CONTRIBUTING.md. 2024-04-07 18:29:27 +00:00
ae10c15d2a doc: update docs/fastapi.md 2024-04-08 02:27:58 +08:00
844bc6d307 doc: update docs/sdkman.md 2024-04-07 19:11:32 +08:00
c343cb3587 doc: update docs/adb.md (#590) 2024-04-07 17:22:31 +08:00
7f0709f502 doc: Update README.md 2024-04-07 13:53:58 +08:00
d8427d22a9 doc: Update README.md 2024-04-07 13:53:19 +08:00
626b7ec961 doc: Update README.md (#102) 2024-04-07 00:45:58 +08:00
278ebee2c0 doc: update CONTRIBUTING.md 2024-04-06 12:05:42 +08:00
822af71d7f doc: update docs/twitter.md 2024-04-06 02:56:07 +08:00
b5f9d14ab1 doc: add docs/twitter.md 2024-04-06 02:27:19 +08:00
0a012311dd doc: update README.md. 2024-04-03 05:52:02 +00:00
c49b7002ce doc: update CONTRIBUTING.md. 2024-04-03 05:52:01 +00:00
bb605ea530 doc: update docs/sdkman.md (#588) 2024-04-03 13:49:47 +08:00
a3ffdd16fc doc: update docs/elixir.md #587 2024-04-03 12:37:20 +08:00
b880c23f05 feat: update docs/sdkman.md (#588) 2024-04-03 12:37:06 +08:00
df3e46f34d doc: Update README.md 2024-04-02 16:11:34 +08:00
a45fcfef20 doc: update README.md. 2024-04-02 08:10:42 +00:00
3b65deb8d1 doc: update CONTRIBUTING.md. 2024-04-02 08:10:41 +00:00
3fdfa19b74 doc: update docs/elixir.md #587 2024-04-02 16:09:00 +08:00
8d60181b96 feat: add docs/elixir.md (#587)
Co-authored-by: gowshwah <1099764281@qq.com>
2024-04-02 15:16:48 +08:00
cb5df68489 doc: update docs/cs.md 2024-04-02 11:18:01 +08:00
88f43a924a doc: update README.md. 2024-04-02 02:55:54 +00:00
6f50c1adfd doc: update CONTRIBUTING.md. 2024-04-02 02:55:53 +00:00
c6d9901d5e doc: update docs/cs.md (#586)
* 新增了c#中的类(所有内容都是经过书籍,资料证实的)

* 新增了c#中的类部分模块,元组模块,集合模块
2024-04-02 10:54:58 +08:00
bd2d631b02 doc: update docs/feds.md 2024-04-01 14:18:04 +08:00
e25412175f doc: update docs/homebrew.md 2024-03-31 13:49:55 +08:00
b6ca1e5166 doc: update docs/homebrew.md 2024-03-31 12:55:18 +08:00
3d0ce212a9 doc: Update README.md 2024-03-31 02:36:51 +08:00
2a4c08a69e doc: update README.md. 2024-03-29 07:25:37 +00:00
3ddb8959c5 doc: update CONTRIBUTING.md. 2024-03-29 07:25:36 +00:00
37906f6548 doc: update docs/docker.md #583 2024-03-29 15:23:58 +08:00
ce2640f9cf doc: update README.md. 2024-03-26 13:13:12 +00:00
9e42db6fcb doc: update CONTRIBUTING.md. 2024-03-26 13:13:11 +00:00
fd85b9d819 doc: update docs/docker.md #583 2024-03-26 09:11:41 -04:00
2dd3fd1e84 doc: update docs/cs.md #584 2024-03-26 09:09:14 -04:00
21dc25c2a4 doc: update docs/cs.md #584 2024-03-26 09:03:19 -04:00
ea8d6b3391 doc: update docs/cs.md (#584) 2024-03-26 08:38:18 -04:00
1efbb7155b doc: update docs/docker.md #583 2024-03-26 05:31:07 -04:00
22194283aa doc: Update docker.md (#583) 2024-03-26 05:09:37 -04:00
56d8186e0a doc: Update docker.md (#582)
add docker installation
2024-03-25 20:07:49 +08:00
9e5e671a1a doc: update README.md. 2024-03-24 08:20:36 +00:00
dc3005bc99 doc: update CONTRIBUTING.md. 2024-03-24 08:20:35 +00:00
dedb8b9475 doc: update docs/iso-3166-1.md (#581 #579)
* doc: Add content related to simplified and traditional Chinese

* doc: alter number

---------

Co-authored-by: zhangyanming <zhangyanming@kxsz.net>
2024-03-24 04:19:17 -04:00
6f978c8df0 doc: add docs/iso-3166-1.md #579 2024-03-22 20:34:32 +08:00
8ce7714bca doc: update docs/nvm.md (#512) 2024-03-22 06:18:15 +08:00
f8b4ef611f doc: update README.md. 2024-03-21 21:38:28 +00:00
057eddb4b2 doc: update CONTRIBUTING.md. 2024-03-21 21:38:27 +00:00
6dfc13ee6d doc: add nvm-windows (#512) 2024-03-22 05:37:22 +08:00
b77f29a1c2 doc: Update README.md #102 2024-03-20 13:12:46 +08:00
55f807f407 doc: update README.md. 2024-03-20 03:32:45 +00:00
2e2b3b8ee4 doc: update CONTRIBUTING.md. 2024-03-20 03:32:44 +00:00
234da6d914 doc: update docs/emacs.md (#573) 2024-03-20 11:31:37 +08:00
36068c9ad3 doc: Update README.md #102 2024-03-19 23:03:14 +08:00
359b81a44f feat: add docs/phpstorm.md. #571 2024-03-15 21:58:44 +08:00
20b3a1969d doc: Update README.md (#102) 2024-03-15 16:31:50 +08:00
d59d128bd1 doc: update docs/cs.md #566 2024-03-14 00:04:47 +08:00
f5ce635f97 doc: update README.md. 2024-03-13 15:45:11 +00:00
d6121b3ce9 doc: update CONTRIBUTING.md. 2024-03-13 15:45:10 +00:00
e5ccf68774 doc: Update README.md #102 2024-03-13 23:44:05 +08:00
f3699e12cd doc: Update cs.md (#566)
* doc: Update cs.md

将“逻辑运算”更变为一级标题

* <update>[cs.md]: add subtitle `运算符和表达式`

将`运算符和表达式`和`字符串`区分开
2024-03-13 23:42:36 +08:00
88452a8b07 feat: add docs/figma.md #567 2024-03-13 21:22:54 +08:00
2d8753a6a5 doc: update README.md. 2024-03-12 13:02:19 +00:00
a7a5d029d5 doc: update CONTRIBUTING.md. 2024-03-12 13:02:18 +00:00
dabb4b2cd7 doc: update docs/docker.md (#565)
* doc: update ansible.md

* doc: update ansible.md 代码格式

* 增加十分钟同步的域名、增加自动部署脚本

* 优化部署文档:定时任务同步pages的内容

* 优化 git-down-pages.sh 脚本 到配置

* update  README.md

* 更新代码

* update: doc ansible.md

* update CONTRIBUTING.md

* update CONTRIBUTING.md fix

* 优化ansible排版格式

* fix: 定时脚本的逻辑 bug

* update: ansible.md

* update: 增加 docker 的清除命令

---------

Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-03-12 21:01:17 +08:00
f318e2456d doc: update README.md. 2024-03-10 04:20:48 +00:00
8250615bca doc: update CONTRIBUTING.md. 2024-03-10 04:20:48 +00:00
f7c2d6555f doc: update docs/python.md (#564)
when we installed pipenv pkg, we can't run pipenv install command on our local shell, because maybe we didn't have the site-package-bin dir in system $PATH, so we need to add it firstly.
2024-03-10 12:19:42 +08:00
a15bd68a59 doc: Update README.md 2024-03-09 16:16:11 +08:00
5d82708d56 doc: update README.md. 2024-03-07 16:47:55 +00:00
fda807a97b doc: update CONTRIBUTING.md. 2024-03-07 16:47:54 +00:00
c076d32fc1 doc: update docs/swiftui.md (#562) 2024-03-08 00:46:43 +08:00
da7cccb50b doc: update README.md. 2024-03-07 16:46:18 +00:00
349d811c66 doc: update CONTRIBUTING.md. 2024-03-07 16:46:17 +00:00
4c7e86893d doc: update docs/r.md (#561)
Add book link to my study notes of R.
2024-03-08 00:45:16 +08:00
b040885e8b doc: update README.md. 2024-03-07 06:46:06 +00:00
925a2913c4 doc: update CONTRIBUTING.md. 2024-03-07 06:46:05 +00:00
76785c6c55 doc: Update README.md (#560) #102 2024-03-07 14:45:07 +08:00
13991b8b5e doc: update docs/swift.md (#558)
* fix issue

* add extension

* update
2024-03-06 17:36:48 +08:00
e5ad863e2d doc: update README.md. 2024-03-06 06:21:26 +00:00
3c2e52f47e doc: update CONTRIBUTING.md. 2024-03-06 06:21:25 +00:00
137210c886 doc: Update README.md (#557) (#102) 2024-03-06 14:20:23 +08:00
60e83d0e0b doc: update README.md. 2024-03-05 13:25:34 +00:00
338b54f3c5 doc: update CONTRIBUTING.md. 2024-03-05 13:25:33 +00:00
5fc5c065df doc: update docs/pytorch.md (#554) 2024-03-05 21:23:43 +08:00
435fdead51 doc: update README.md. 2024-03-05 08:37:46 +00:00
61f4697406 doc: update CONTRIBUTING.md. 2024-03-05 08:37:45 +00:00
6122942c95 doc: update docs/swift.md 2024-03-05 16:35:42 +08:00
57d42b29ba doc: update docs/swift.md (#550) 2024-03-05 15:12:10 +08:00
ee97d75160 chore: Update .gitattributes 2024-03-05 03:50:37 +08:00
cff4119203 doc: Update README.md #102 2024-03-04 23:20:17 +08:00
4dfb3c8e9f doc: Update README.md #102 2024-03-04 22:03:44 +08:00
50526ab7a4 chore: Update .gitattributes 2024-03-04 17:09:01 +08:00
6a9c656af6 doc: Update README.md #102 2024-03-04 17:07:46 +08:00
ee1c50166c chore: Update .gitattributes 2024-03-04 11:33:25 +08:00
18189760b7 doc: Update README.md 2024-03-03 22:17:14 +08:00
e8c86ad588 doc: update README.md. 2024-02-29 04:07:42 +00:00
d9ff20b22c doc: update CONTRIBUTING.md. 2024-02-29 04:07:41 +00:00
c03deba9a5 doc: update docs/ansible.md (#543)
* doc: update ansible.md

* doc: update ansible.md 代码格式

* 增加十分钟同步的域名、增加自动部署脚本

* 优化部署文档:定时任务同步pages的内容

* 优化 git-down-pages.sh 脚本 到配置

* update  README.md

* 更新代码

* update: doc ansible.md

* update CONTRIBUTING.md

* update CONTRIBUTING.md fix

* 优化ansible排版格式

* fix: 定时脚本的逻辑 bug

* update: ansible.md

---------

Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-02-29 12:06:43 +08:00
6358f19144 fix: fix markdown lint issue. 2024-02-29 11:29:56 +08:00
8ef5df72f0 doc: update docs/ansible.md #535 2024-02-29 11:29:15 +08:00
704ba7332e doc: update docs/ansible.md (#542)
* doc: update ansible.md

* doc: update ansible.md 代码格式

* 增加十分钟同步的域名、增加自动部署脚本

* 优化部署文档:定时任务同步pages的内容

* 优化 git-down-pages.sh 脚本 到配置

* update  README.md

* 更新代码

* update: doc ansible.md

* update CONTRIBUTING.md

* update CONTRIBUTING.md fix

* 优化ansible排版格式

---------

Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-02-29 10:59:18 +08:00
bc4e48c5fd doc: Update README.md #102 2024-02-29 10:27:39 +08:00
587aa7e304 doc: update README.md. 2024-02-29 01:51:38 +00:00
bacaf4df44 doc: update CONTRIBUTING.md. 2024-02-29 01:51:37 +00:00
1da65002ba doc: update docs/ansible.md (#541)
* doc: update ansible.md

* doc: update ansible.md 代码格式

* 增加十分钟同步的域名、增加自动部署脚本

* 优化部署文档:定时任务同步pages的内容

* 优化 git-down-pages.sh 脚本 到配置

* update  README.md

* 更新代码

* update: doc ansible.md

* update CONTRIBUTING.md

* update CONTRIBUTING.md fix

---------

Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-02-29 09:50:27 +08:00
11dc28cea3 doc: update CONTRIBUTING.md #535 2024-02-29 01:04:10 +08:00
8c21b7126a doc: update README.md. 2024-02-28 15:59:22 +00:00
7da5b74811 doc: update CONTRIBUTING.md. 2024-02-28 15:59:21 +00:00
893391cc3b doc: update docs/ansible.md & update CONTRIBUTING.md (#535)
* doc: update ansible.md

* doc: update ansible.md 代码格式

* 增加十分钟同步的域名、增加自动部署脚本

* 优化部署文档:定时任务同步pages的内容

* 优化 git-down-pages.sh 脚本 到配置

* update  README.md

---------

Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-02-28 23:58:09 +08:00
20c2bfdbef doc: Update README.md #102 2024-02-28 13:15:22 +08:00
4e40ae2b1d doc: update README.md. 2024-02-28 05:13:22 +00:00
52fc7597ca doc: update CONTRIBUTING.md. 2024-02-28 05:13:21 +00:00
f176bf6f56 doc: update ansible.md (#534)
Co-authored-by: 魏栋梁 <dongliang.wei@fujfu.com>
2024-02-28 13:12:11 +08:00
67c7a0ef49 ci: update workflows config. 2024-02-27 10:45:49 +08:00
04a12487c0 doc: Update README.md #102 2024-02-27 10:38:35 +08:00
4305ed8bd9 ci: update workflows config. 2024-02-26 23:35:00 +08:00
2f66dbc882 chore(deps): update dependency markdownlint to ^0.33.0 (#334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 23:31:42 +08:00
9d8e885aec chore(deps): update dependency lint-staged to v15 (#459)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 23:30:35 +08:00
fbbc5195f7 chore(deps): update dependency markdownlint-cli to ^0.39.0 (#362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 23:30:22 +08:00
72109ba7b6 chore(deps): update ruby docker tag to v3.3.0 (#494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 23:29:50 +08:00
f263431ab1 feat: add docs/r.md #410 #285 #283 2024-02-26 23:27:37 +08:00
fae20e6a71 chore: update husky config. 2024-02-26 16:10:09 +08:00
706fe7855f chore(deps): update dependency husky to v9 (#510)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 16:08:36 +08:00
f5e5357de7 doc: update docs/sketch.md 2024-02-26 16:06:30 +08:00
cb434e1180 feat: add finder.md. 2024-02-26 15:47:23 +08:00
df9bf1f5e9 feat: add Pacman. 2024-02-26 15:04:52 +08:00
a0754c5397 doc: Update README.md 2024-02-26 14:30:47 +08:00
997e176017 released v1.42.0 2024-02-26 14:08:07 +08:00
8f9da1cf83 ci: update workflows config. 2024-02-26 14:08:00 +08:00
6b29e84fda ci: update workflows config. 2024-02-26 14:05:13 +08:00
317f2db41f doc: update docs/feds.md 2024-02-26 14:01:35 +08:00
2c7400d446 doc: update README.md. 2024-02-12 14:22:53 +00:00
9549a30646 doc: update CONTRIBUTING.md. 2024-02-12 14:22:52 +00:00
77b4802177 doc: update docs/dart.md (#516)
* 新增Kotlin的高阶函数用法

* 新增和调整若干Kotlin示例代码
[新增] 扩展函数
[新增] 运算符重载
[新增] 中缀表达式
[新增] 次构造函数
[新增] Data 数据类
[新增] 内部类
[新增] object 单例类
[修改] 主构造函数示范代码,调整了部分缩进和变量定义。

* 新增Dart部分示例代码
[新增] 扩展函数
[新增] 运算符重载函数
[新增] 延迟初始化
2024-02-12 22:21:24 +08:00
7f9b132db9 doc: Update README.md (#102) 2024-02-12 22:19:02 +08:00
58745e7a4d doc: Update README.md #102 2024-02-10 18:10:52 +08:00
1d9d2f798c doc: update README.md. 2024-02-09 08:15:38 +00:00
8e11109e6f doc: update CONTRIBUTING.md. 2024-02-09 08:15:37 +00:00
2f6c263221 doc: update docs/kotlin.md (#515)
* 新增Kotlin的高阶函数用法

* 新增和调整若干Kotlin示例代码
[新增] 扩展函数
[新增] 运算符重载
[新增] 中缀表达式
[新增] 次构造函数
[新增] Data 数据类
[新增] 内部类
[新增] object 单例类
[修改] 主构造函数示范代码,调整了部分缩进和变量定义。
2024-02-09 16:14:36 +08:00
b8d46f0cee doc: update README.md. 2024-02-08 06:57:37 +00:00
70367ebff8 doc: update CONTRIBUTING.md. 2024-02-08 06:57:36 +00:00
c60876d078 doc: update docs/cs.md (#514) 2024-02-08 14:56:15 +08:00
e391ce4cd3 doc: update README.md. 2024-02-06 07:36:43 +00:00
f28f625a93 doc: update CONTRIBUTING.md. 2024-02-06 07:36:42 +00:00
bfc4a0198d doc: Update linux-command.md
- https://github.com/jaywcjlove/reference/discussions/434#discussioncomment-8366371
2024-02-06 15:35:41 +08:00
9436578123 doc: Update README.md 2024-02-01 22:37:18 +08:00
fd88141567 doc: Update README.md (#102) 2024-02-01 10:05:06 +08:00
2c10272d01 doc: update README.md. 2024-01-30 13:28:59 +00:00
a6bb4625d7 doc: update CONTRIBUTING.md. 2024-01-30 13:28:58 +00:00
cb1c236f5c doc: Update README.md (#102) 2024-01-30 21:27:49 +08:00
466c3c073d doc: update README.md. 2024-01-23 03:17:34 +00:00
56f1ce20a1 doc: update CONTRIBUTING.md. 2024-01-23 03:17:33 +00:00
119df317f2 fix: update docs/markdown.md (#509) 2024-01-23 11:16:21 +08:00
532cb88cf0 doc: Update README.md 2024-01-13 14:22:38 +08:00
b5f5c95680 doc: update README.md. 2024-01-13 06:22:22 +00:00
9d0cfca668 doc: update CONTRIBUTING.md. 2024-01-13 06:22:22 +00:00
4c02dfd878 doc: update docs/chown.md #503 2024-01-13 14:19:08 +08:00
83655d42a5 doc: update README.md. 2024-01-13 05:38:54 +00:00
e4bc989560 doc: update CONTRIBUTING.md. 2024-01-13 05:38:54 +00:00
05dae25ae7 feat: add chown.md (#503)
* 修改我在contributing.md的镜像链接

* chown备忘清单
2024-01-13 13:37:51 +08:00
f500aae1e7 doc: update README.md. 2024-01-01 13:03:35 +00:00
adcf084901 doc: update CONTRIBUTING.md. 2024-01-01 13:03:34 +00:00
3cabca0a7a doc: update README.md (#102 #496)
add ref.wdft.com
2024-01-01 21:01:55 +08:00
6d6ee93d7c doc: Update README.md (#102) 2023-12-30 19:31:25 +08:00
7663e0aa72 doc: update docs/nginx.md #493 2023-12-25 16:46:52 +08:00
70518c3d9a doc: update README.md. 2023-12-25 08:38:19 +00:00
26f49c9bc6 doc: update CONTRIBUTING.md. 2023-12-25 08:38:18 +00:00
76dc31a30c doc: update nginx.md (#493)
* add ulimit config of nginx

* minor
2023-12-25 16:36:57 +08:00
3bdcc831c4 doc: Update README.md #102 2023-12-22 20:10:43 +08:00
a2795d4691 doc: update README.md. 2023-12-22 12:08:37 +00:00
fa55cc17d1 doc: update CONTRIBUTING.md. 2023-12-22 12:08:37 +00:00
7f66d28d56 doc: Update README.md (#492) (#102) 2023-12-22 20:07:16 +08:00
de76161779 doc: update docs/docker.md 2023-12-22 13:04:21 +08:00
b935a35165 doc: update docs/kotlin.md 2023-12-22 13:00:44 +08:00
e1fad67e75 doc: update docs/linux-command.md #491 2023-12-22 08:38:27 +08:00
063369866e doc: update README.md. 2023-12-22 00:11:12 +00:00
1f6bcaabdf doc: update CONTRIBUTING.md. 2023-12-22 00:11:12 +00:00
1ee3fb8bed doc: Update linux-command.md (#491)
添加文件描述符、前后台等命令
2023-12-22 08:10:10 +08:00
a0bd5f7304 doc: update README.md. 2023-12-12 22:40:28 +00:00
534f39c6a7 doc: update CONTRIBUTING.md. 2023-12-12 22:40:27 +00:00
6cb067ce06 doc: Update README.md (#484 #102) 2023-12-13 06:39:02 +08:00
c8aba156f7 doc: update README.md. 2023-12-12 09:25:27 +00:00
53693bdeba doc: update CONTRIBUTING.md. 2023-12-12 09:25:26 +00:00
2dd35ecb40 doc: Update README.md #102 2023-12-12 17:23:59 +08:00
c278fb2454 doc: update docs/kotlin.md (#482)
* doc: update

* fix: kotlin 方法默认参数指定其类型;

---------

Co-authored-by: 小弟调调™ <kennyiseeyou@gmail.com>
2023-12-11 11:24:49 +08:00
ab0d82e7f5 doc: update README.md. 2023-12-09 11:28:27 +00:00
f726b3c6d4 doc: update CONTRIBUTING.md. 2023-12-09 11:28:26 +00:00
300aa903bd doc: update docs/tar.md (#480) 2023-12-09 19:27:23 +08:00
e332fa127f doc: update README.md. 2023-12-08 05:11:55 +00:00
6653bed2eb doc: update CONTRIBUTING.md. 2023-12-08 05:11:54 +00:00
3f822852bf doc: update docker.md (#479) 2023-12-08 13:10:20 +08:00
3e71fee21c chore(deps): update dependency prettier to v3 (#390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 16:36:31 +08:00
3a8b1a2cd7 doc: Update docs/javascript.md 2023-12-07 16:34:42 +08:00
bfe8934e88 doc: Update docs/javascript.md 2023-12-07 16:33:45 +08:00
6b737583ee chore: update .dockerignore 2023-12-07 00:01:02 +08:00
108c8005d4 ci: update workflows config. 2023-12-06 23:56:46 +08:00
75830aa8bc ci: update workflows config. 2023-12-06 23:40:49 +08:00
7e8f89418c doc: update README.md. 2023-12-06 14:47:38 +00:00
6f94d01850 doc: update CONTRIBUTING.md. 2023-12-06 14:47:37 +00:00
bd9c837102 feat: add github-copilot.md (#475)
* Add GitHub Copilot documentation

* Add inline chat useful instruction
2023-12-06 22:46:15 +08:00
d29ac4215c doc: update README.md. 2023-12-04 03:24:05 +00:00
a548bac591 doc: update CONTRIBUTING.md. 2023-12-04 03:24:04 +00:00
0f22978db4 doc: update git.md (#472)
Co-authored-by: zlfyuan <741136856@qq.com>
2023-12-04 11:22:45 +08:00
4b8567131f doc: Update README.md #102 2023-12-02 15:12:10 +08:00
6c0c6508ab doc: Update README.md 2023-12-01 18:34:55 +08:00
08b48b842f doc: update README.md. 2023-12-01 07:38:01 +00:00
6e2f615551 doc: update CONTRIBUTING.md. 2023-12-01 07:38:00 +00:00
fed14313e4 doc: Update README.md #102 2023-12-01 15:37:00 +08:00
9c7c381849 ci: update workflows config. 2023-11-26 20:12:06 +08:00
1bdd1afdd3 released v1.41.0 2023-11-26 20:06:43 +08:00
b137c67956 doc: update README.md. 2023-11-26 12:05:31 +00:00
feee371c24 doc: update CONTRIBUTING.md. 2023-11-26 12:05:30 +00:00
eaee21d4bf chore: add sponsor badge. 2023-11-26 20:04:04 +08:00
d3b7cfb613 doc: update README.md. 2023-11-22 11:03:08 +00:00
c1e3cdabcf doc: update CONTRIBUTING.md. 2023-11-22 11:03:07 +00:00
5b02481425 doc: Update linux-command.md (#467)
add `tree` command
2023-11-22 19:02:01 +08:00
4e651e3109 doc: update README.md. 2023-10-18 08:09:07 +00:00
4186c93202 doc: update CONTRIBUTING.md. 2023-10-18 08:09:06 +00:00
59509fc94e doc: update docs/lua.md 2023-10-18 16:06:44 +08:00
0acb2ca1f3 doc: update docs/symbol-code.md 2023-10-14 00:10:32 +08:00
a7f85c5268 doc: Update README.md (#102) 2023-10-10 04:09:01 -05:00
c993ed3228 ci: update workflows config. 2023-10-10 15:41:11 +08:00
f11a3bf99e ci: update workflows config. 2023-10-10 15:37:27 +08:00
c51e52b5c5 released v1.40.0 2023-10-10 15:24:13 +08:00
36d2ad88a6 doc: update docs/feds.md 2023-10-10 02:00:26 -05:00
17df489348 doc: update README.md. 2023-10-08 12:01:35 +00:00
8c71fdee72 doc: update CONTRIBUTING.md. 2023-10-08 12:01:35 +00:00
445ba9a5f8 doc: update docs/python.md (#451) 2023-10-08 06:59:56 -05:00
49d5254f2b doc: update README.md. 2023-10-07 17:03:34 +00:00
4bff216f48 doc: update CONTRIBUTING.md. 2023-10-07 17:03:33 +00:00
58425e0318 doc: update docs/ruby.md (#448)
* add doc for pg_upgrade

* add doc for ruby bundle lock
2023-10-07 12:02:00 -05:00
be3818f818 doc: update docs/nginx.md. (#446) 2023-09-28 14:34:56 +08:00
b717b1c67f doc: update docs/nginx.md. (#446) 2023-09-28 14:26:16 +08:00
d4b984c509 doc: update README.md. 2023-09-27 11:00:18 +00:00
2dbfe101c7 doc: update CONTRIBUTING.md. 2023-09-27 11:00:17 +00:00
34434fd402 Correct operator translation (#443) 2023-09-27 18:58:40 +08:00
68b7bf36bb doc: update docs/css.md 2023-09-27 10:34:27 +08:00
5815147509 doc: update README.md. 2023-09-26 12:48:55 +00:00
0b669ed687 doc: update CONTRIBUTING.md. 2023-09-26 12:48:53 +00:00
3c74a22420 doc: Update README.md (#442) 2023-09-26 20:47:11 +08:00
3a0a9f72f7 doc: update README.md. 2023-09-23 10:11:48 +00:00
84fa394a3a doc: update CONTRIBUTING.md. 2023-09-23 10:11:47 +00:00
c70a95e007 doc: update typescript.md (#440)
修正 范型推导出列表字面量内示例代码错误
2023-09-23 18:10:09 +08:00
c9dcfd2829 doc: update README.md. 2023-09-23 09:28:11 +00:00
bc4dea6930 doc: update CONTRIBUTING.md. 2023-09-23 09:28:10 +00:00
106d7aa602 doc: update typescript.md (#439)
修正类型技巧内Capitalize的推导结果
2023-09-23 17:26:33 +08:00
ecb59d8980 doc: update docs/css.md 2023-09-22 08:58:15 +08:00
f6cb68debf doc: Update feds.md 2023-09-20 10:09:02 +08:00
98f5cdd08c doc: update README.md. 2023-09-19 14:41:02 +00:00
355d360720 doc: update CONTRIBUTING.md. 2023-09-19 14:41:01 +00:00
5e12094078 doc: update docs/postgres.md (#436) 2023-09-19 22:39:42 +08:00
71eb82ae3a doc: update README.md. 2023-09-19 09:31:23 +00:00
6e1dc3467e doc: update CONTRIBUTING.md. 2023-09-19 09:31:22 +00:00
fba093f495 doc: Update gitlab-ci.md 2023-09-19 17:29:43 +08:00
34f6bba4a1 doc: Update ci.yml 2023-09-18 17:29:49 +08:00
7597799323 doc: Update README.md 2023-09-18 15:50:48 +08:00
11818ada00 doc: update README.md. 2023-09-16 15:16:12 +00:00
4cb46dc4ea doc: update CONTRIBUTING.md. 2023-09-16 15:16:11 +00:00
6ed219e2e1 doc: Update linux-command.md (#433)
add shortcuts
2023-09-16 23:14:02 +08:00
bffbc128f2 doc: update README.md. 2023-09-15 07:28:03 +00:00
b1ba4282f7 doc: update CONTRIBUTING.md. 2023-09-15 07:28:03 +00:00
bbd3292c8e doc: update docs/python.md (#432) 2023-09-15 15:26:50 +08:00
b14257542f doc: update docs/typescript.md 2023-09-14 10:52:05 +08:00
8f782f6204 doc: update README.md. 2023-09-12 15:23:11 +00:00
8e0df579c3 doc: update CONTRIBUTING.md. 2023-09-12 15:23:09 +00:00
870cc88b2a doc: Update docker.md (#429)
Add shortcuts of exit docker container
2023-09-12 23:21:41 +08:00
0f475095ad doc: Update README.md (#102) 2023-09-12 11:09:43 +08:00
e79adc056d doc: Update README.md 2023-09-12 08:49:24 +08:00
cc2061077c chore: update .refsrc.json 2023-09-11 20:07:21 +08:00
c407dce74b chore(deps): update dependency refs-cli to v1.5.1 2023-09-11 20:02:14 +08:00
08614a6ce8 doc: update docs/c.md (#426) 2023-09-10 15:35:31 +08:00
676c87ffe8 doc: update README.md. 2023-09-10 07:34:11 +00:00
c504469c86 doc: update CONTRIBUTING.md. 2023-09-10 07:34:10 +00:00
b3cf04d323 doc: Update c.md (#426)
修改了初始化,声明和定义的区别注释
2023-09-10 15:32:32 +08:00
5254c49bdd doc: update README.md. 2023-09-07 05:06:47 +00:00
011ee54010 doc: update CONTRIBUTING.md. 2023-09-07 05:06:47 +00:00
6c7d393cff doc: update docs/typescript.md 2023-09-07 12:47:55 +08:00
86c3191501 doc: update README.md. 2023-09-05 06:40:41 +00:00
03160c5ad4 doc: update CONTRIBUTING.md. 2023-09-05 06:40:40 +00:00
f3b532b4d9 doc: update docs/git.md (#425) 2023-09-05 14:39:12 +08:00
24290541e7 doc: update README.md. 2023-09-05 05:03:12 +00:00
e527de9a89 doc: update CONTRIBUTING.md. 2023-09-05 05:03:11 +00:00
fab09b1f13 doc: update docs/fastapi.md (#424) 2023-09-05 12:39:02 +08:00
7bb62ab3c3 doc: update README.md. 2023-09-05 00:18:34 +00:00
4c4f800427 doc: update CONTRIBUTING.md. 2023-09-05 00:18:33 +00:00
a2be0fa8a5 doc: update docs/fastapi.md (#423) 2023-09-05 08:17:10 +08:00
b3e8be65f6 doc: update docs/fastapi.md #422 2023-09-04 11:36:09 +08:00
4d21e9f1cf doc: update README.md. 2023-09-04 02:42:47 +00:00
337bdf3f6f doc: update CONTRIBUTING.md. 2023-09-04 02:42:46 +00:00
80cb879bc8 feat: Add FastAPI (#422) 2023-09-04 10:41:12 +08:00
9e24d8da48 doc: update README.md. 2023-08-30 11:43:14 +00:00
03ea09ed8d doc: update CONTRIBUTING.md. 2023-08-30 11:43:12 +00:00
45fbcae3f9 doc: Update README.md (#102) 2023-08-30 19:41:36 +08:00
78b431ffc7 doc: update README.md. 2023-08-29 01:36:23 +00:00
ab51674496 doc: update CONTRIBUTING.md. 2023-08-29 01:36:22 +00:00
a2a6011b31 doc: update docs/git.md 2023-08-29 09:34:28 +08:00
44bf2fdf10 doc: update docs/typescript.md 2023-08-25 10:15:26 +08:00
98efabd925 doc: update README.md 2023-08-24 17:27:41 +08:00
dc0412ed07 doc: update docs/symbol-code.md 2023-08-24 17:22:48 +08:00
ca05decbc0 feat: add docs/subversion.md (#403) 2023-08-24 14:13:05 +08:00
91f81b4958 released v1.39.0 2023-08-24 10:49:04 +08:00
36676240e2 doc: update docs/conda.md 2023-08-24 01:00:29 +08:00
0d0e73c0a3 doc: update docs/symbol-code.md 2023-08-24 01:00:29 +08:00
729cafa2d6 doc: update README.md. 2023-08-23 16:50:13 +00:00
cce405626a doc: update CONTRIBUTING.md. 2023-08-23 16:50:12 +00:00
2a8428076e feat: add docs/symbol-code.md 2023-08-24 00:48:19 +08:00
Fan
10f7b75d35 doc: Update c.md (#418)
代码 printf("%p\n", \&myAge); 中,符号\有语法错误
2023-08-21 08:34:24 +08:00
31a8351cce doc: update README.md. 2023-08-20 04:54:45 +00:00
867bb7344a doc: update CONTRIBUTING.md. 2023-08-20 04:54:44 +00:00
6c48ade999 doc: Update README.md (#102) 2023-08-20 12:53:18 +08:00
138500303b doc: update README.md. 2023-08-18 08:43:51 +00:00
9e6b4fccfb doc: update CONTRIBUTING.md. 2023-08-18 08:43:50 +00:00
39fb8143ac doc: update docs/conda.md (#417)
添加: 设置指定环境为默认环境
```bash
vim ~/.bashrc
export PATH="~/anaconda/envs/ENVNAME/bin:$PATH"  # 文件末尾添加
conda activate ENVNAME  # :wq 保存并关闭
source ~/.bashrc  # 更新
conda config --set auto_activate_base false # 禁用auto activate base环境
```
2023-08-18 16:42:12 +08:00
bcc6cb6335 doc: update conda.md (#416) 2023-08-18 15:42:24 +08:00
79497c0678 doc: update README.md. 2023-08-18 06:37:16 +00:00
2333d30ee5 doc: update CONTRIBUTING.md. 2023-08-18 06:37:15 +00:00
1ae43d171a doc: update docs/git.md (#415)
* 更正git清单的描述

* docs: update docs/git.md
2023-08-18 14:35:39 +08:00
31aa83c9b8 doc: update README.md. 2023-08-18 03:32:12 +00:00
7309e5d249 doc: update CONTRIBUTING.md. 2023-08-18 03:32:11 +00:00
60588c52f3 doc: update docs/toml.md 2023-08-18 11:28:34 +08:00
9ba0641cc7 doc: update docs/linux-command.md 2023-08-17 10:49:07 +08:00
d9e86b555f feat: add docs/ascii-code.md 2023-08-17 00:23:05 +08:00
71fa3b3c26 feat: add docs/ejs.md 2023-08-17 00:07:22 +08:00
fbd3a4fffa doc: update docs/mitmproxy.md 2023-08-16 23:19:51 +08:00
2f818808eb doc: update docs/taskset.md 2023-08-16 23:02:00 +08:00
8295db4b4e doc: update docs/git.md 2023-08-16 22:24:03 +08:00
be73485516 doc: update docs/git.md 2023-08-16 21:52:58 +08:00
e47092fec0 doc: update docs/curl.md 2023-08-16 21:52:58 +08:00
8c47a905d4 doc: update README.md. 2023-08-16 11:54:39 +00:00
624fe766df doc: update CONTRIBUTING.md. 2023-08-16 11:54:38 +00:00
2c7028efc3 doc: add docs/blender.md (#363) 2023-08-16 19:53:06 +08:00
01a6b7e36f doc: update ffmpeg.md (#413)
update:
视频参数
-crf
2023-08-16 10:37:03 +08:00
d588663619 doc: Update README.md #102 2023-08-15 16:03:06 +08:00
bd03383b62 doc: update README.md. 2023-08-14 16:16:29 +00:00
47aa71b7cc doc: update CONTRIBUTING.md. 2023-08-14 16:16:29 +00:00
86d4e8bea5 doc: update docs/python.md 2023-08-15 00:15:01 +08:00
4020036f93 doc: update docs/git.md 2023-08-15 00:11:22 +08:00
3c2e988059 doc: update docs/typescript.md 2023-08-15 00:07:00 +08:00
8f97826a84 doc: update README.md. 2023-08-11 08:45:41 +00:00
c229e915ca doc: update CONTRIBUTING.md. 2023-08-11 08:45:40 +00:00
2c9a399a9a doc: docs/http-status-code.md (#411)
Updated some translation from original Chinese docs, include:
 - String "Means"
 - The translation of 2xx response code
 - The translation of 4xx response code
 - More specifical explanation of 402 Payment Required response code (original English docs' are too brief)
PS: I'm not English native speaker, so there's may grammar mistakes in this PR description.
2023-08-11 16:44:27 +08:00
c06cbe37f0 doc: update docs/python.md (#408) 2023-08-05 09:32:30 +08:00
80b0443823 doc: update README.md. 2023-08-03 13:34:29 +00:00
ba543600e5 doc: update CONTRIBUTING.md. 2023-08-03 13:34:28 +00:00
ccd2310541 doc: update docs/python.md (#407)
* doc: 优化 Python 判断语句的示例

* doc: 添加 Python 解包清单
2023-08-03 21:32:50 +08:00
f421bfb764 doc: update README.md. 2023-08-02 04:27:04 +00:00
be0492518b doc: update CONTRIBUTING.md. 2023-08-02 04:27:03 +00:00
30eb2e8b0c doc: update docs/git.md (#406) 2023-08-02 12:25:50 +08:00
3ab21896c5 doc: update README.md. 2023-08-01 05:56:50 +00:00
e7d6c1318c doc: update CONTRIBUTING.md. 2023-08-01 05:56:49 +00:00
39fb171563 doc: Update README.md (#102) 2023-08-01 13:55:24 +08:00
d428322b0a doc: update README.md. 2023-07-31 00:52:41 +00:00
b51cfb3977 doc: update CONTRIBUTING.md. 2023-07-31 00:52:40 +00:00
9c86478101 doc: Update README.md 2023-07-31 08:51:31 +08:00
d3647a1817 doc: update README.md. 2023-07-31 00:50:31 +00:00
aedd5f5d9f doc: update CONTRIBUTING.md. 2023-07-31 00:50:31 +00:00
5b11b6e281 doc: update docs/python.md (#405) 2023-07-31 08:49:11 +08:00
07f6747c57 doc: update README.md. 2023-07-29 18:43:46 +00:00
752bd641a6 doc: update CONTRIBUTING.md. 2023-07-29 18:43:45 +00:00
yms
25f5aa4695 doc: update docs/python.md (#404)
添加了使用remove方法移除list内容以及搜索list的方法
2023-07-30 02:42:34 +08:00
a448246060 doc: update README.md (#402 #102)
* 增加我的站点作为镜像

* Update README.md
2023-07-26 18:13:01 +08:00
9fc8523762 doc: update docs/typescript.md 2023-07-23 00:23:57 +08:00
b22c815c29 doc: Update swiftui.md (#400) 2023-07-21 18:44:28 +08:00
3798e14e8a doc: update README.md. 2023-07-18 05:59:00 +00:00
2913dd244f doc: update CONTRIBUTING.md. 2023-07-18 05:58:59 +00:00
a0476287df doc: update docs/linux-command.md (#398)
Co-authored-by: mh-swift <zuojiadazhongma@gmail.com>
2023-07-18 13:57:14 +08:00
89be124f1d doc: update docs/typescript.md 2023-07-17 12:16:58 +08:00
7841be7bdd doc: Update README.md 2023-07-14 10:29:03 +08:00
f630c78dbc doc: update README.md. 2023-07-13 09:28:27 +00:00
a9310c38d1 doc: update CONTRIBUTING.md. 2023-07-13 09:28:27 +00:00
199e1613d4 doc: update README.md (#396)
* Update README.md

* Update README.md
2023-07-13 17:27:15 +08:00
c7b3633498 doc: update README.md. 2023-07-13 06:40:08 +00:00
b3a2a6dae6 doc: update CONTRIBUTING.md. 2023-07-13 06:40:07 +00:00
27cb494fa9 doc: 更正 django 清单的链接 (#395) 2023-07-13 14:38:25 +08:00
d734868ba7 doc: update README.md. 2023-07-12 05:43:52 +00:00
95baa9a508 doc: update CONTRIBUTING.md. 2023-07-12 05:43:51 +00:00
fb1fa4b47f doc: update docs/python.md (#394)
* doc: 修正 Python 清单中的机翻文本

* doc: 增补注释和示例,使用例更贴合本土

* doc: 更正修正中的错误

* doc: 配合 #385 将介绍中的链接也改为中文版
2023-07-12 13:42:21 +08:00
0d0e92dd56 doc: update README.md. 2023-07-11 15:55:51 +00:00
83c74bb912 doc: update CONTRIBUTING.md. 2023-07-11 15:55:50 +00:00
5f87a74720 doc: update docs/typescript.md 2023-07-11 23:54:21 +08:00
1e68618479 doc: Update README.md (#102) 2023-07-11 10:20:18 +08:00
a4891cef29 released v1.38.0 2023-07-07 12:46:57 +08:00
ff0b08acdb doc: update ansible.md 2023-07-07 12:41:19 +08:00
24ea8f6a6a doc: update README.md. 2023-07-07 04:08:40 +00:00
7900e348f1 doc: update CONTRIBUTING.md. 2023-07-07 04:08:39 +00:00
9680e2a113 doc: update docs/ansible.md (#391) 2023-07-07 12:04:31 +08:00
a1defb6f23 doc: update README.md. 2023-07-07 03:44:04 +00:00
af188f9f19 doc: update CONTRIBUTING.md. 2023-07-07 03:44:03 +00:00
f6b68c8d09 doc: update ansible.md (#391) 2023-07-07 11:42:40 +08:00
252c880f5f doc: update README.md. 2023-07-02 05:06:00 +00:00
39f16f5a97 doc: update CONTRIBUTING.md. 2023-07-02 05:05:59 +00:00
3b6495a781 doc: update docs/python.md (#389) 2023-07-02 13:04:47 +08:00
8576cbe101 doc: update README.md. 2023-07-02 05:00:47 +00:00
df4ef8c5ac doc: update CONTRIBUTING.md. 2023-07-02 05:00:46 +00:00
e9386b57a5 doc: update README.md (#102) (#388) 2023-07-02 12:59:33 +08:00
8ee2877234 doc: update README.md. 2023-06-29 01:10:34 +00:00
d5e8643497 doc: update CONTRIBUTING.md. 2023-06-29 01:10:32 +00:00
0125cc1c0b doc: update cs.md (#387)
* doc: update cs.md

* doc: update cs.md

* doc: update cs.md
2023-06-29 09:08:59 +08:00
937426be72 doc: update README.md. 2023-06-28 10:15:46 +00:00
de964317cd doc: update CONTRIBUTING.md. 2023-06-28 10:15:45 +00:00
fdb5b72830 doc: update cs.md (#386) 2023-06-28 18:14:23 +08:00
4039d6f04c doc: Update README.md 2023-06-27 14:35:35 +08:00
2a6da92c94 doc: update README.md. 2023-06-27 02:01:40 +00:00
c5c157ea3d doc: update CONTRIBUTING.md. 2023-06-27 02:01:39 +00:00
51fb218d6b doc: update php.md/python.md/yaml.md (#385) 2023-06-27 10:00:16 +08:00
150208884f doc: update README.md. 2023-06-10 08:07:20 +00:00
c44ace5edd doc: update CONTRIBUTING.md. 2023-06-10 08:07:19 +00:00
e97a1a8f8a doc: update google-chrome.md (#381) 2023-06-10 16:05:46 +08:00
3451e3b055 chore: update .dockerignore. fix #380 2023-06-09 10:45:17 +08:00
3cc761446e doc: Update README.md 2023-06-07 16:35:20 +08:00
cfbe8ae4b8 doc: update docs/typescript.md 2023-06-06 23:58:40 +08:00
9df9ff4354 doc: update README.md. 2023-06-06 08:31:17 +00:00
cf7e9aa29e doc: update CONTRIBUTING.md. 2023-06-06 08:31:16 +00:00
a38aaccd49 doc: update docs/ini.md (#379) 2023-06-06 16:29:40 +08:00
4d813c765f chore: update dependency refs-cli to v1.4.1 2023-06-06 14:02:52 +08:00
3d1abf5035 doc: Update README.md (#102) 2023-06-05 18:09:47 +08:00
f7b60c9a09 doc: update docs/typescript.md 2023-06-05 14:09:06 +08:00
93f1b473af doc: update docs/emoji.md 2023-06-04 18:43:07 +08:00
c35662155e doc: update docs/emoji.md 2023-06-04 14:58:07 +08:00
f3692146bf doc: update README.md. 2023-06-01 05:48:27 +00:00
f0135c77a1 doc: update CONTRIBUTING.md. 2023-06-01 05:48:26 +00:00
8aed2170e3 docs: Update README.md (#377) (#102)
* Update README.md

docs: 新增镜像站 https://tools.dadatom.com/reference

* docs: 修改镜像站地址

修改惊现站地址,讲 /reference path 修改为 /reference/
2023-06-01 13:46:40 +08:00
c4308aac0f doc: update README.md. 2023-06-01 00:52:15 +00:00
82c0e32a16 doc: update CONTRIBUTING.md. 2023-06-01 00:52:14 +00:00
80ac14cad6 dpc: Update README.md (#376) (#102)
docs: 新增镜像站 https://tools.dadatom.com/reference
2023-06-01 08:50:42 +08:00
41e7bac906 released v1.37.0 2023-05-28 23:18:23 +08:00
fe855c04c7 doc: update README.md. 2023-05-28 15:04:50 +00:00
ef6d1d7c76 doc: update CONTRIBUTING.md. 2023-05-28 15:04:49 +00:00
09ece3b274 doc: update docs/nestjs.md 2023-05-28 23:02:54 +08:00
56569c813a doc: update docs/css.md 2023-05-28 23:01:04 +08:00
f9fb17cb5e chore: update config.yml 2023-05-25 12:34:57 +08:00
d632dcac7e chore: update bug-report.yml 2023-05-25 12:26:37 +08:00
6529b5e85f chore: update bug-report.yml 2023-05-25 12:25:23 +08:00
1f8b93dbab chore: update bug-report.yml 2023-05-25 12:23:18 +08:00
22066608fe chore: add bug-report.yml 2023-05-25 12:19:48 +08:00
530e454bf8 chore: update cheatsheet-request.yml 2023-05-25 12:09:58 +08:00
f4b69f9b55 chore: delete cheatsheet-request.md 2023-05-25 12:07:35 +08:00
6b7e4322c9 doc: update cheatsheet-request.yml 2023-05-25 12:06:42 +08:00
3c1c37b4a9 chore: create cheatsheet-request.yml 2023-05-25 12:03:45 +08:00
fd26de4484 doc: update README.md. 2023-05-20 04:10:22 +00:00
b065d03300 doc: update CONTRIBUTING.md. 2023-05-20 04:10:22 +00:00
a732ff3892 doc: update README.md 2023-05-20 12:08:59 +08:00
a3bc1f8d20 doc: docs/emoji.md 2023-05-20 10:52:59 +08:00
36482c5846 doc: update docs/cs.md 2023-05-20 10:17:26 +08:00
862813a0fc doc: Update cs.md 2023-05-20 10:04:50 +08:00
e218c7ec86 doc: Update README.md 2023-05-20 10:00:20 +08:00
9acf9ae5a3 doc: Update README.md (#102) 2023-05-18 15:19:30 +08:00
0beda68e62 doc: update README.md. 2023-05-17 23:53:33 +00:00
f3754732bd doc: update CONTRIBUTING.md. 2023-05-17 23:53:32 +00:00
0bc4e3b09e doc: Update README.md 2023-05-18 07:52:02 +08:00
c83de17d72 doc: update README.md. 2023-05-15 07:55:25 +00:00
4eb3372413 doc: update CONTRIBUTING.md. 2023-05-15 07:55:24 +00:00
511db1fb0b doc: Update README.md (#102) 2023-05-15 15:53:59 +08:00
b724f66b27 doc: update README.md. 2023-05-12 04:09:18 +00:00
d2c11fab72 doc: update CONTRIBUTING.md. 2023-05-12 04:09:17 +00:00
a48806438e doc: update docs/dockerfile.md (#364)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 12:08:09 +08:00
ed399a9dc2 doc: update README.md. 2023-05-12 04:07:52 +00:00
a33a60838b doc: update CONTRIBUTING.md. 2023-05-12 04:07:51 +00:00
101fd365be doc: update README.md. 2023-05-12 04:06:33 +00:00
adb708e3ba doc: update CONTRIBUTING.md. 2023-05-12 04:06:33 +00:00
eff2e44e1e doc: docs/dockerfile.md (#366)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 12:06:22 +08:00
67bc79e60b doc: update docs/kubernetes.md (#373)
语法错误,正确的语法为
增加
kubectl label nodes <node-name> <label-key>=<label-value> 
删除
kubectl label nodes <node-name> <label-key>-
修改Label的值
kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
2023-05-12 12:05:20 +08:00
1d60e54663 doc: Update README.md (#371) (#102)
Add static resource mirroring address: ref.defense.ink
2023-05-10 20:45:56 +08:00
6f0b8fb175 doc: update README.md. 2023-05-08 09:39:37 +00:00
517a846133 doc: update CONTRIBUTING.md. 2023-05-08 09:39:35 +00:00
f3ebc461d4 doc: Update cs.md (#369) 2023-05-08 17:37:52 +08:00
6f45968e1a doc: Update README.md #102 2023-05-07 22:40:24 +08:00
2f0c809390 doc: update README.md. 2023-05-06 15:10:11 +00:00
2321368d3e doc: update CONTRIBUTING.md. 2023-05-06 15:10:10 +00:00
c65ba9df21 doc: Update README.md (#102) 2023-05-06 23:08:30 +08:00
cb0fe8ef7d doc: Update README.md 2023-05-05 21:45:10 +08:00
60380ceaa4 doc: Update README.md 2023-05-02 01:51:36 +08:00
fd6f325ef6 doc: update README.md. 2023-05-01 17:50:13 +00:00
14ed1d3f44 doc: update CONTRIBUTING.md. 2023-05-01 17:50:12 +00:00
f34851d2d5 doc: Update README.md 2023-05-02 01:48:32 +08:00
1626464167 doc: update README.md. 2023-04-27 12:05:11 +00:00
556b4f8655 doc: update CONTRIBUTING.md. 2023-04-27 12:05:10 +00:00
0915987573 doc: update docs/golang.md (#361) 2023-04-27 20:03:24 +08:00
fa15c32717 doc: update docs/pacman.md (#357) 2023-04-25 22:09:06 +08:00
ac217e7b99 doc: update README.md. 2023-04-25 13:59:31 +00:00
a2542e3e4d doc: update CONTRIBUTING.md. 2023-04-25 13:59:31 +00:00
b530554d1e doc: update docs/java.md (#360)
Co-authored-by: tmen <tmenblog@163.com>
2023-04-25 21:58:09 +08:00
6163e9b4f5 doc: update README.md. 2023-04-25 10:56:54 +00:00
ec3c285fbb doc: update CONTRIBUTING.md. 2023-04-25 10:56:53 +00:00
1aae2c027e doc: update docs/golang.md (#359) 2023-04-25 18:55:28 +08:00
dd53261d3c doc: update README.md. 2023-04-25 09:52:18 +00:00
0d643d4672 doc: update CONTRIBUTING.md. 2023-04-25 09:52:16 +00:00
70c68318ee feat: add docs/pacman.md (#357) 2023-04-25 17:50:28 +08:00
8bde7ad5de doc: Update README.md #102 2023-04-23 00:27:56 +08:00
2e05f1307b doc: Update README.md #102 2023-04-22 19:56:23 +08:00
3b33c3d9bc doc: update docs/html.md 2023-04-22 16:36:30 +08:00
9efd75d657 doc: update docs/html.md 2023-04-22 12:47:23 +08:00
a54aecde30 doc: update docs/css.md 2023-04-22 12:32:22 +08:00
21cc727b16 doc: update README.md. 2023-04-21 01:49:59 +00:00
9c875cf5f6 doc: update CONTRIBUTING.md. 2023-04-21 01:49:58 +00:00
Zhu
1ef8a1484d doc: update flask.md (#350) 2023-04-21 09:48:41 +08:00
c0da5393f5 chore: format docs/cs.md 2023-04-18 10:54:56 +08:00
e7d8b4aac6 doc: update docs/css.md 2023-04-18 10:54:56 +08:00
850fcfae54 doc: update README.md. 2023-04-18 02:40:52 +00:00
8f1d00647c doc: update CONTRIBUTING.md. 2023-04-18 02:40:51 +00:00
486ebb19c1 doc: update cs.md (#346)
* feat(cs.md): Fix logic

* feat(cs.md): Fix show header in logic operator section.

* fix(cs.md): the info from w3school is not correct.

sizeof(bool) == 1, it is 1 byte, but not 1 bit.
2023-04-18 10:39:08 +08:00
588f84f33c doc: update README.md. 2023-04-17 00:42:11 +00:00
298631fd5a doc: update CONTRIBUTING.md. 2023-04-17 00:42:10 +00:00
3ac3043898 feat: add docs/gdb.md #87 (#345) 2023-04-17 08:40:42 +08:00
bd8b551997 doc: update README.md. 2023-04-13 02:51:36 +00:00
a3c44b3088 doc: update CONTRIBUTING.md. 2023-04-13 02:51:35 +00:00
d98e60dc43 chore: update issue template. 2023-04-13 10:50:03 +08:00
34f59d161e doc: update README.md. 2023-04-09 13:19:08 +00:00
ac7e63e247 doc: update CONTRIBUTING.md. 2023-04-09 13:19:07 +00:00
e606837a88 doc: update mongodb.md (#343)
fix some translation issues
2023-04-09 21:17:31 +08:00
6f6526218f doc: Update vim.md fix #342 2023-04-07 10:58:31 +08:00
94f377ecd8 doc: update conda.md (#341) (#83) 2023-04-06 22:24:22 +08:00
55a072222b doc: update README.md. 2023-04-06 13:51:33 +00:00
f88ae30d7f doc: update CONTRIBUTING.md. 2023-04-06 13:51:32 +00:00
5e7bfa54f2 feat: add conda.md (#341) 2023-04-06 21:49:56 +08:00
faf1e52739 doc: update README.md. 2023-04-04 17:00:09 +00:00
17177a29a9 doc: update CONTRIBUTING.md. 2023-04-04 17:00:08 +00:00
801c90c059 doc: 移除不可用镜像站 (#340) 2023-04-05 00:58:54 +08:00
e6f011d607 doc: update docs/flutter.md (#339) 2023-04-03 23:26:23 +08:00
1d607ed3b5 doc: Update README.md #102 2023-04-02 19:53:29 +08:00
e385350aaa doc: Update feds.md 2023-03-31 12:13:52 +08:00
271c92336d doc: update README.md. 2023-03-28 09:16:52 +00:00
ca770c8d7a doc: update CONTRIBUTING.md. 2023-03-28 09:16:51 +00:00
e6dc5d1858 doc: update docs/intelli-j-idea.md (#336)
修改翻译错误1处
2023-03-28 17:15:14 +08:00
e1b507eafc doc: update README.md. 2023-03-23 15:07:49 +00:00
fadd789bbc doc: update CONTRIBUTING.md. 2023-03-23 15:07:49 +00:00
3d967056e5 doc: Update README.md (#333)
新增镜像站
ref.moeyuuko.com
每日同步
2023-03-23 23:06:17 +08:00
555238ff04 doc: update README.md. 2023-03-16 07:53:39 +00:00
909e7929d0 doc: update CONTRIBUTING.md. 2023-03-16 07:53:38 +00:00
cb293dc036 doc: update docs/kotlin.md (#331) 2023-03-16 15:52:17 +08:00
1eadc7748e doc: Update README.md 2023-03-14 20:58:34 +08:00
f3b8c65f73 chore: update workflows config. 2023-03-14 20:16:57 +08:00
5c4075497e feat: add docs/scala.md (#326) 2023-03-14 20:03:40 +08:00
b75cb75372 feat: add docs/scala.md (#326) 2023-03-14 20:03:13 +08:00
1ca1e49030 doc: update docs/dockerfile.md 2023-03-14 16:32:37 +08:00
03b2ce120d chore: update Dockerfile 2023-03-14 15:49:38 +08:00
881fd368c5 doc: update docs/typescript.md 2023-03-13 09:41:48 +08:00
8f2117970b doc: update docs/linux-command.md (#89) 2023-03-09 11:22:46 +08:00
32b7b03faa doc: update docs/linux-command.md 2023-03-09 11:04:18 +08:00
ea762bf805 feat: add linux-command.md (#89,#286,#185,#289,#226) 2023-03-09 10:08:59 +08:00
30999dcafc doc: update docs/zip.md (#319) 2023-03-08 21:12:17 +08:00
d1c8300dcf feat: add docs/zip.md (#319) 2023-03-08 21:07:40 +08:00
e3bf99b022 doc: update docs/css.md 2023-03-06 09:25:11 +08:00
8c7c9e1957 doc: update README.md. 2023-03-04 02:27:48 +00:00
da61a8d25d doc: update CONTRIBUTING.md. 2023-03-04 02:27:47 +00:00
3ddd8d7fea doc: update docs/css.md 2023-03-04 10:26:12 +08:00
7facfea3f9 doc: update docs/docker.md (#323) 2023-03-02 15:46:02 +08:00
f687d48666 doc: update docs/kubernetes.md (#322) 2023-03-02 15:11:51 +08:00
a90c8e2ed4 doc: update docs/java.md (#321) 2023-03-02 15:11:04 +08:00
3087afb4ee doc: update README.md. 2023-03-02 07:09:22 +00:00
710848dcac doc: update CONTRIBUTING.md. 2023-03-02 07:09:21 +00:00
6d8fe96e96 doc: update java.md (#321) 2023-03-02 15:08:15 +08:00
5c775c9074 doc: update kubernetes.md (#322) 2023-03-02 15:07:57 +08:00
c40b0dff2f feat: add Justfile. (#276) 2023-03-02 09:54:40 +08:00
94bbb4f6a7 chore: update issue template. 2023-03-02 09:07:00 +08:00
dbbb2cce54 doc: Update README.md 2023-03-02 09:07:00 +08:00
714db4d198 doc: update README.md. 2023-03-01 14:27:14 +00:00
5e02521794 doc: update CONTRIBUTING.md. 2023-03-01 14:27:13 +00:00
cb5b582b81 doc: 移除已不可用的镜像站 (#317) 2023-03-01 22:25:25 +08:00
3fe58b7c0d doc: update README.md. 2023-03-01 13:53:38 +00:00
5ca1e140d1 doc: update CONTRIBUTING.md. 2023-03-01 13:53:38 +00:00
64b52fc1bc doc: update README.md #102 2023-03-01 21:52:15 +08:00
ab26411164 doc: update docs/docker.md 2023-02-28 23:19:35 +08:00
2c858eb744 doc: update docs/cs.md (#316) 2023-02-28 23:18:56 +08:00
c39abea00a doc: update README.md #102 2023-02-28 23:08:45 +08:00
30fa592d95 doc: update bash.md (#312) 2023-02-28 23:06:08 +08:00
36f071de00 doc: update README.md. 2023-02-28 15:06:00 +00:00
289237d5b6 doc: update CONTRIBUTING.md. 2023-02-28 15:05:59 +00:00
b1a10ee797 doc: docs/cs.md (#316) 2023-02-28 23:04:29 +08:00
f597396afe doc: update README.md. 2023-02-27 00:48:57 +00:00
36a3bb2112 doc: update CONTRIBUTING.md. 2023-02-27 00:48:56 +00:00
88d42e6ac8 doc(cs): update cs.md. (#314) 2023-02-27 08:47:46 +08:00
59e840628b doc: update README.md. 2023-02-26 14:52:06 +00:00
2519135036 doc: update CONTRIBUTING.md. 2023-02-26 14:52:05 +00:00
32af22afaa doc: update docker.md (#313)
* add bash debug info

* Add some additional notes
2023-02-26 22:50:54 +08:00
fcf60fb56f doc: update README.md. 2023-02-26 14:00:24 +00:00
f81d2174f6 doc: update CONTRIBUTING.md. 2023-02-26 14:00:23 +00:00
9daa435dee doc: update bash.md (#312) 2023-02-26 21:58:52 +08:00
defd3d3fee doc: update README.md. 2023-02-23 15:35:38 +00:00
33103fb68d doc: update CONTRIBUTING.md. 2023-02-23 15:35:37 +00:00
2348522810 doc: Update java.md (#311)
添加List和Set集合中打印时使用lamba输出的方式。
2023-02-23 23:34:24 +08:00
5ca71fdb60 doc: update README.md. 2023-02-23 05:34:14 +00:00
bbf00328b3 doc: update CONTRIBUTING.md. 2023-02-23 05:34:13 +00:00
dba2f6c1fd chore: update README.md #206 #102 2023-02-23 13:29:34 +08:00
3523cdff76 doc: update README.md. 2023-02-20 05:16:48 +00:00
d4fd7a30c8 doc: update CONTRIBUTING.md. 2023-02-20 05:16:47 +00:00
7c153a0579 fix: typo adb.md (#306) 2023-02-20 13:15:17 +08:00
8f2a86457b chore: update workflows config. 2023-02-20 11:30:50 +08:00
b98e7d8395 released v1.36.0 2023-02-20 11:10:24 +08:00
3d1317603e doc: update homebrew.md 2023-02-20 11:07:54 +08:00
8a651c813b doc: update README.md. 2023-02-20 01:13:01 +00:00
10884e73f0 doc: update CONTRIBUTING.md. 2023-02-20 01:13:00 +00:00
de4286cd7f doc: Update adb.md & homebrew.md and delete repeated mirror items (#304)
* chore: delete duplicate items

* doc: update adb.md and homebrew.md
2023-02-20 09:11:28 +08:00
f31aab4b35 chore(deps): update dependency refs-cli to ^1.3.2 (#279) 2023-02-15 09:42:34 +08:00
485e83c5df doc: update README.md. 2023-02-11 12:25:25 +00:00
5f1e3f6a2b doc: update CONTRIBUTING.md. 2023-02-11 12:25:24 +00:00
9688866fdb doc: python.md (#299)
Maybe it's not perfect, but it's better than before
2023-02-11 20:24:13 +08:00
9c59d4a225 doc: update README.md. 2023-02-11 12:23:48 +00:00
3f2559c1e1 doc: update CONTRIBUTING.md. 2023-02-11 12:23:47 +00:00
606776662d Update rust.md (#296) 2023-02-11 20:22:44 +08:00
3cec40c4f9 doc: update python.md (#297)
fix anchor link
2023-02-11 20:22:20 +08:00
a5c1f3c02e doc: update README.md. 2023-02-11 12:17:05 +00:00
8171974454 doc: update CONTRIBUTING.md. 2023-02-11 12:17:04 +00:00
d50673ad3f doc: update google-chrome.md (#298) 2023-02-11 20:15:41 +08:00
7ca89af17c doc: Update docker.md (#294)
format file: remove "。" in the forms (obsessive-compulsive disorder ...)
2023-02-10 11:29:00 +08:00
e0ce750d73 doc: update README.md. 2023-02-07 09:54:19 +00:00
409e44a354 doc: update CONTRIBUTING.md. 2023-02-07 09:54:18 +00:00
8382555a20 doc: Update docker.md (#292)
update docker commit grammar
2023-02-07 17:52:24 +08:00
e3e6783703 doc: update README.md. 2023-02-04 02:02:08 +00:00
ea86c3a76c doc: update CONTRIBUTING.md. 2023-02-04 02:02:07 +00:00
49b1394090 doc: update README.md 2023-02-04 10:00:36 +08:00
03f1c20d2c doc: update README.md. 2023-02-02 04:01:31 +00:00
ae060ebac2 doc: update CONTRIBUTING.md. 2023-02-02 04:01:30 +00:00
358d8f4e17 doc: update golang.md (#282) 2023-02-02 11:59:57 +08:00
6614543e04 doc: update README.md. 2023-02-02 03:54:09 +00:00
5693510df6 doc: update CONTRIBUTING.md. 2023-02-02 03:54:08 +00:00
XYZ
dfaaee7ce5 doc: Update regex.md (#277) 2023-02-02 11:52:58 +08:00
XYZ
c356147d5f doc: Update regex.md (#278) 2023-02-02 11:52:27 +08:00
1e1836f949 doc: update README.md. 2023-02-02 03:47:26 +00:00
65aab8d920 doc: update CONTRIBUTING.md. 2023-02-02 03:47:26 +00:00
816aabf365 doc: update README.md. 2023-02-02 03:46:34 +00:00
9efea19f6b doc: update CONTRIBUTING.md. 2023-02-02 03:46:33 +00:00
e1661b5dc4 doc: update golang.md (#282)
doc: update jquery.md
2023-02-02 11:46:20 +08:00
45f42568fc doc: update javascript.md (#281) 2023-02-02 11:45:19 +08:00
04d063f1fe doc: update README.md. 2023-01-17 09:53:37 +00:00
7b5d556dcc doc: update CONTRIBUTING.md. 2023-01-17 09:53:37 +00:00
6900980460 doc: update nextjs.md (#274) 2023-01-17 17:52:24 +08:00
28066ae3c4 doc: update README.md. 2023-01-14 04:24:05 +00:00
39bd0173e8 doc: update CONTRIBUTING.md. 2023-01-14 04:24:04 +00:00
6b570f2035 doc: update javascript.md (#271)
add JavaScript Functions 函数
line: 472-480
2023-01-14 12:22:40 +08:00
dac7e778cb doc: update README.md. 2023-01-12 10:29:35 +00:00
9e16ec7005 doc: update CONTRIBUTING.md. 2023-01-12 10:29:34 +00:00
489d7f509e doc: Update README.md (#270) 2023-01-12 18:28:13 +08:00
c0855988c0 chore(deps): update dependency markdownlint-cli to ^0.33.0 (#262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-10 21:13:56 +08:00
e5e0160628 doc: update cs.md (#266) 2023-01-10 21:11:35 +08:00
cb7b542fb1 doc: update cs.md (#266) 2023-01-10 21:08:54 +08:00
101d5c1b09 doc: update README.md. 2023-01-09 05:29:08 +00:00
004553f1de doc: update CONTRIBUTING.md. 2023-01-09 05:29:07 +00:00
da7da9aae0 doc: Update README.md (#263)
* Update new mirror sources

* update mirror titles
2023-01-09 13:28:24 +08:00
6d4ce812d0 doc: update README.md #206 2023-01-09 13:27:46 +08:00
bab4e10038 doc: update README.md. 2023-01-06 07:01:43 +00:00
e30defe3bf doc: update CONTRIBUTING.md. 2023-01-06 07:01:41 +00:00
0691e82eb2 doc: update java.md (#261) 2023-01-06 14:59:49 +08:00
38b685315b doc: Update java.md (#261)
原来的 Java 官网弃用了
2023-01-05 18:52:11 +08:00
ae633b43e8 released v1.35.0 2023-01-05 11:37:05 +08:00
cc6e992a4b doc: update kotlin.md 2023-01-05 11:22:28 +08:00
2d994f8597 doc: update CONTRIBUTING.md 2023-01-05 11:04:07 +08:00
ad5accdeff doc: update julia.md 2023-01-05 10:34:41 +08:00
3a7af1eef3 feat: add kubernetes.md cheatsheet. #44 2023-01-05 10:27:01 +08:00
9ef65a9f3d feat: add ps.md cheatsheet. #251 2023-01-05 10:07:52 +08:00
6c220d88ae doc: update README.md #102 2023-01-05 09:15:55 +08:00
01da713410 doc: update README.md. 2023-01-03 08:45:58 +00:00
768bcb96d9 doc: update CONTRIBUTING.md. 2023-01-03 08:45:58 +00:00
fc11b2f0dc doc: Update README.md (#259) 2023-01-03 16:44:39 +08:00
dda6efdc7c doc: Update README.md (#258) 2023-01-03 11:09:33 +08:00
019b4d51ec chore(deps): update dependency markdownlint to ^0.27.0 (#250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-01 20:54:59 +08:00
f40b56ebb8 doc: update cpp.md #255 2022-12-31 22:43:36 +08:00
bb533b9081 doc: update README.md. 2022-12-31 13:56:18 +00:00
6ca7d88a48 doc: update CONTRIBUTING.md. 2022-12-31 13:56:17 +00:00
a2cfd4e785 doc: update cpp.md (#255)
* 更新排版

更新了以下内容的排版,以适应网页的风格:

+ lambda表达式
+ 多线程

* 更新C++多线程:锁

更新以下部分:

+ `mutex`
    + 上锁——`lock`
    + 解锁——`unlock`
    + 尝试上锁——`try_lock`
+ `lock_guard<Mutex>`
    + 额外参数`std::adopt_lock`
+ `unique_lock<Mutex>`
    + 额外参数
        + `std::adopt_lock`
        + `std::try_to_lock`
        + `std::defer_lock`
    + 成员函数
        + `lock`
        + `unlock`
        + `release`
        + `owns_lock`

* 更新C++11多线程内容

更新内容:
 
+ `call_once`
+ `condition_variable` 
    + `wait`
    + `notify_one`
    + `notify_all`
+ `async`
    + `std::launch::deferred`
    + `std::launch::async`
    + `std::deferred | std::launch::async`
+ `future`
    + `wait`
    + `get`
    + `wait_for`
    + `wait_until`
+ `future_status`
    + `ready`
    + `timeout`
    + `deferred`
+ `shared_future`
2022-12-31 21:54:47 +08:00
b08cc85e41 doc: update cpp.md (#254) 2022-12-30 16:03:26 +08:00
3f84fe66d3 doc: update README.md. 2022-12-30 06:37:49 +00:00
5cde10b118 doc: update CONTRIBUTING.md. 2022-12-30 06:37:48 +00:00
db7a9aa6f9 doc: Update cpp.md (#254)
开始添加多线程部分,主要添加了线程的创建、销毁和this_thread的所有函数

尚未开始的内容:锁、互斥量、线程同步
2022-12-30 14:36:19 +08:00
9879fabc78 doc: update README.md. 2022-12-30 02:45:46 +00:00
a2a2ae55ca doc: update CONTRIBUTING.md. 2022-12-30 02:45:46 +00:00
19f919f532 doc: update docs/css.md 2022-12-30 10:44:24 +08:00
cabda9b9c9 doc: update README.md. (#252) 2022-12-29 18:09:46 +08:00
ce12b2a329 doc: update README.md. 2022-12-29 06:10:04 +00:00
5e3d42d1ad doc: update CONTRIBUTING.md. 2022-12-29 06:10:04 +00:00
bf962194da released v1.34.0 2022-12-29 14:08:39 +08:00
f5e2ad2c31 doc: update feds.md (#248) 2022-12-27 09:05:13 +08:00
ff0cc58c1d doc: Update feds.md (#248)
两个codepen似乎具有误导性,建议明确指出两者协议的区别。
2022-12-27 09:03:30 +08:00
b42883e3de doc: Update cpp.md (#246) 2022-12-26 16:08:44 +08:00
931850d916 feat: add mongodb.md cheatsheet. #236 2022-12-26 16:07:30 +08:00
f4d2c99007 feat: add pycharm.md cheatsheet. #244 2022-12-26 14:53:36 +08:00
112a53c101 doc: update README.md. 2022-12-26 02:33:17 +00:00
9e525009c9 doc: update CONTRIBUTING.md. 2022-12-26 02:33:16 +00:00
f78562b95e doc: Update cpp.md (#246)
补充了Lambda表达式的内容
2022-12-26 10:32:02 +08:00
63d846b35d doc: Update iptables.md (#245) 2022-12-25 14:14:44 +08:00
afd924a928 doc: update javascript.md (#243) 2022-12-21 18:19:30 +08:00
fb19cda5bb doc: update README.md. 2022-12-21 09:45:41 +00:00
c9834110cd doc: update CONTRIBUTING.md. 2022-12-21 09:45:40 +00:00
98edffbca0 chore: update README.md #102 2022-12-21 17:44:08 +08:00
b3d206d981 doc: update README.md. 2022-12-21 09:34:54 +00:00
9ec7595b83 doc: update CONTRIBUTING.md. 2022-12-21 09:34:53 +00:00
ef823de9a5 doc: update javascript.md Proxy and Reflect (#243) 2022-12-21 17:33:23 +08:00
da22b78d8f doc: update README.md. 2022-12-20 06:46:14 +00:00
06978b1601 doc: update CONTRIBUTING.md. 2022-12-20 06:46:13 +00:00
b768bd4e9b doc: update README.md. 2022-12-20 06:45:19 +00:00
a143e30d93 doc: update CONTRIBUTING.md. 2022-12-20 06:45:18 +00:00
7ac675e34c feat: add mirror (#239) 2022-12-20 14:44:40 +08:00
8e3307272c doc: Update java.md (#240)
修正一些文字说明,补充下ConcurrentHashMap的使用
2022-12-20 14:44:11 +08:00
137 changed files with 21618 additions and 2051 deletions

View File

@ -1,6 +1,5 @@
.github
.husky
docs
scripts
node_modules
package-lock.json

5
.gitattributes vendored
View File

@ -1,3 +1,4 @@
Dockerfile linguist-documentation=false
.husky/* linguist-vendored
*.md linguist-detectable=true
*.svg linguist-language=md
*.md linguist-detectable=true

9
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,9 @@
# These are supported funding model platforms
# github: [jaywcjlove]
# patreon: # Replace with a single Patreon username
# open_collective: # Replace with a single Open Collective username
# ko_fi: # Replace with a single Ko-fi username
# tidelift: #npm/mocker-api
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
custom: https://jaywcjlove.github.io/#/sponsor

View File

@ -1,20 +0,0 @@
---
name: 🐞 错误报告
about: 当出现问题时提交报告以便修复!
title: '错误报告: xxx.md'
labels: bug
assignees: jaywcjlove
---
### 错误类型
- [ ] 排版 & 文字错误
- [ ] 清单内容示例错误
### 错误清单
`xxx.md`
### 错误内容描述
请在这里描述具体错误内容。

42
.github/ISSUE_TEMPLATE/bug-report.yml vendored Normal file
View File

@ -0,0 +1,42 @@
name: 🐞 错误报告
description: 当出现问题时提交报告以便修复!
title: '🐞 错误报告: xxx.md'
labels: ['request']
assignees: jaywcjlove
body:
- type: markdown
attributes:
value: |
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
注意:请求太多,请按照下面内容提供错误报告
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
- type: input
id: error-list
attributes:
label: 📄 错误清单
description: 指定错误清单文件,方便我们快速定位错误。
placeholder: ex. `docs/ansible.md`
validations:
required: true
- type: checkboxes
id: error-type
attributes:
label: 🧨 错误类型
description: 请选择错误类型。
options:
- label: 排版 & 文字错误
- label: 清单内容示例错误
- label: 其它
validations:
required: true
- type: textarea
id: description
attributes:
label: 📖 错误说明
description: 您可以在这里简单的提供一些资料,方便我们在 Quick Reference 中添加您想添加的备忘清单(速查表)。
placeholder: 请您在这里详细介绍具体错误问题
validations:
required: true

View File

@ -1,36 +0,0 @@
---
name: 🤙 备忘清单请求
about: 请求添加备忘清单和参考。
title: '请求添加备忘清单: '
labels: request
assignees: jaywcjlove
---
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
注意:请求太多,参考【优先级】快速添加内容
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
#### 优先级
- [ ] 提交 PR 优先合并(优先处理)
- [ ] 提供可复制的[中文/英文]备忘清单资料,优先添加
- [ ] 大众化的内容(java/python),优先搬运(小众内容请提供资料)
#### 说明项目
您可以在这里简单的提供一些资料,方便我们在 Quick Reference 中添加您想添加的备忘清单(速查表)。
【请您在这里介绍一下工具或者语言,这很重要】
- 如果你有一张不错的备忘清单(速查表) [`参考这里`](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md) 为仓库贡献。
- 如果您不方便贡献,请在下方参考资料中提供链接地址,方便共建备忘清单(速查表)
- 这里为您提供了 Markdown 排版[示例教程](https://jaywcjlove.github.io/reference/docs/quickreference.html)
#### 提供参考资料地址
提供更多参考资料有助于我们整理成备忘清单(速查表)
- 提供参考地址 https://jaywcjlove.github.io/reference
- 提供官网地址 https://jaywcjlove.github.io/reference
_⚠ 注意: 随着内容越来越多可能甚至找不到这个工具或者语言的官网请您在这里提供以便大家共同参与贡献内容_

View File

@ -0,0 +1,55 @@
name: 🤙 备忘清单请求
description: 请求添加备忘清单和参考
title: '【备忘清单】 请求: <Name>'
labels: ['request']
assignees: jaywcjlove
body:
- type: markdown
attributes:
value: |
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
注意:请求太多,参考【优先级】快速添加内容
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
### 优先级
- 提交 PR 优先合并(优先处理)
- 提供可复制的[中文/英文]备忘清单资料,优先添加
- 大众化的内容(java/python),优先搬运(小众内容请提供资料)
- type: textarea
id: description
attributes:
label: 说明项目
description: 您可以在这里简单的提供一些资料,方便我们在 Quick Reference 中添加您想添加的备忘清单(速查表)。
placeholder: 【请您在这里介绍一下工具或者语言,这很重要】
validations:
required: true
- type: input
id: official-website
attributes:
label: 提供官网
description: 提供官网网站有助于我们整理成备忘清单(速查表)
placeholder: ex. https://xxx.com
- type: markdown
attributes:
value: |
_⚠ 注意: 随着内容越来越多可能甚至找不到这个工具或者语言的官网请您在这里提供以便大家共同参与贡献内容_
- type: textarea
id: reference-url
attributes:
label: 参考资料 URL
description: 提供更多参考资料有助于我们整理成备忘清单(速查表)
placeholder: |
https://jaywcjlove.github.io/reference
https://jaywcjlove.github.io/reference
validations:
required: true
- type: markdown
attributes:
value: |
_⚠ 注意: 提供更多参考资料以便大家共同参与贡献内容_

14
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: 😍 投稿指南
url: https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md
about: 请在做出任何贡献之前通读!
- name: 🚀 部署镜像网站
url: https://github.com/jaywcjlove/reference/issues/102#issue-1451649637
about: 部署镜像网站教程在这里!
- name: 🪩 清单排版布局说明
url: https://jaywcjlove.github.io/reference/docs/quickreference.html
about: 部署镜像网站教程在这里!
- name: 🪩 Markdown 语法说明
url: https://jaywcjlove.github.io/reference/docs/markdown.html
about: 部署镜像网站教程在这里!

View File

@ -9,10 +9,10 @@ jobs:
if: github.repository == 'jaywcjlove/reference'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 20
- run: npm install
- run: npm run build
@ -52,7 +52,7 @@ jobs:
Website: https://jaywcjlove.github.io/reference
## Docker
[![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference) [![Docker Pulls](https://img.shields.io/docker/pulls/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference)
[![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor) [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference) [![Docker Pulls](https://img.shields.io/docker/pulls/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference)
轻松通过 `docker` 部署 `Quick Reference` 网站。
@ -74,7 +74,7 @@ jobs:
EOF
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
uses: peaceiris/actions-gh-pages@v4
with:
commit_message: ${{ github.event.head_commit.message }}
github_token: ${{ secrets.GITHUB_TOKEN }}
@ -84,7 +84,7 @@ jobs:
id: changelog
uses: jaywcjlove/changelog-generator@main
with:
filter-author: (小弟调调™)
filter-author: (小弟调调™|\@github-actions-bot\@renovate-bot|dependabot|renovate\\[bot\\]|dependabot\\[bot\\]|Renovate Bot)
filter: (^[\s]+?[R|r]elease)|(^[R|r]elease)
- name: Create Release
@ -95,7 +95,9 @@ jobs:
name: ${{ steps.create_tag.outputs.version }}
tag: ${{ steps.create_tag.outputs.version }}
body: |
Documentation ${{ needs.build.outputs.create_tag_version }}: https://raw.githack.com/jaywcjlove/reference/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html
[![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor)
Documentation ${{ steps.changelog.outputs.tag }}: https://raw.githack.com/jaywcjlove/reference/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html
Comparing Changes: ${{ steps.changelog.outputs.compareurl }}
${{ steps.changelog.outputs.changelog }}
@ -122,57 +124,56 @@ jobs:
```
# Create Docker Image
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- run: docker buildx prune
- name: Build and push image:latest
uses: docker/build-push-action@v3
uses: docker/build-push-action@v5
with:
push: true
context: .
platforms: linux/amd64,linux/arm64,linux/arm64/v7
tags: ${{ secrets.DOCKER_USER }}/reference:latest
platforms: linux/amd64,linux/arm64
tags: wcjiang/reference:latest
- name: Build and push image:tags
uses: docker/build-push-action@v3
uses: docker/build-push-action@v5
if: steps.create_tag.outputs.successful
with:
push: true
context: .
platforms: linux/amd64,linux/arm64,linux/arm64/v7
tags: ${{ secrets.DOCKER_USER }}/reference:${{steps.changelog.outputs.version}}
platforms: linux/amd64,linux/arm64
tags: wcjiang/reference:${{steps.changelog.outputs.version}}
# Create Docker Image in Github
- name: Login to the GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# # Create Docker Image in Github
# - name: Login to the GitHub Container Registry
# uses: docker/login-action@v2
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push image:latest
uses: docker/build-push-action@v3
with:
push: true
context: .
platforms: linux/amd64,linux/arm64,linux/arm64/v7
tags: ghcr.io/jaywcjlove/reference:latest
# - name: Build and push image:latest
# uses: docker/build-push-action@v3
# with:
# push: true
# context: .
# platforms: linux/amd64,linux/arm64
# tags: ghcr.io/jaywcjlove/reference:latest
- name: Build and push image:tags
uses: docker/build-push-action@v3
if: steps.create_tag.outputs.successful
with:
push: true
context: .
platforms: linux/amd64,linux/arm64,linux/arm64/v7
tags: ghcr.io/jaywcjlove/reference:${{steps.changelog.outputs.version}}
# - name: Build and push image:tags
# uses: docker/build-push-action@v3
# if: steps.create_tag.outputs.successful
# with:
# push: true
# context: .
# platforms: linux/amd64,linux/arm64
# tags: ghcr.io/jaywcjlove/reference:${{steps.changelog.outputs.version}}
# # Create Docker Image in Github
# - name: Login to GitHub registry

View File

@ -9,10 +9,10 @@ jobs:
if: github.repository == 'jaywcjlove/reference'
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 20
- run: npm install
- run: npm run build
@ -22,7 +22,7 @@ jobs:
cd dist
ls
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: dist
path: ${{ github.workspace }}\dist\**\*

3
.husky/pre-commit vendored
View File

@ -1,4 +1 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx --no-install lint-staged

View File

@ -5,6 +5,9 @@
"MD024": false,
"MD033": false,
"MD040": false,
"MD055": false,
"MD056": false,
"MD051": false,
"MD010": {
"code_blocks": true,
"spaces_per_tab": 2

View File

@ -12,5 +12,21 @@
},
"github": {
"url": "https://github.com/jaywcjlove/reference"
},
"giscus": {
"src": "https://giscus.app/client.js",
"data-repo": "jaywcjlove/reference",
"data-repo-id": "R_kgDOID2-Mw",
"data-category": "Q&A",
"data-category-id": "DIC_kwDOID2-M84CS5wo",
"data-mapping": "pathname",
"data-strict": "0",
"data-reactions-enabled": "1",
"data-emit-metadata": "0",
"data-input-position": "bottom",
"data-theme": "dark",
"data-lang": "zh-CN",
"crossorigin": "anonymous",
"async": true
}
}

View File

@ -1,7 +1,7 @@
Contributing 贡献
====
感谢您对**备忘清单**贡献的兴趣👍👍,是像您这样的人使 [`Quick Reference`](https://jaywcjlove.github.io/reference) 成为如此出色的网站 🎉🎉。随时提交问题和增强请求。
感谢您对**备忘清单**贡献的兴趣👍👍,是像您这样的人使 [`Quick Reference`](https://jaywcjlove.github.io/reference) 成为如此出色的网站 🎉🎉。随时提交问题和增强请求,还提供一个[在线说明排版说明]( https://wangchujiang.com/reference/docs/quickreference.html),所以各种使用技巧,都在这个排版说明中有预览和实现代码
`docs/{filename}.md` 文件将被处理成备忘清单,让我们创建或编辑一个 `markdown` 文件:
@ -66,13 +66,13 @@ Contributing 贡献
### 提示配置
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
[Django](./docs/django.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
```
添加 `contributing` 类名,会在卡片下方添加 _`👆待完善需要您的参与`_,添加 `data-info=👆看看还缺点儿什么?`,更换默认提示文本。
```markdown
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=tag&data-lang=Python-->
[Django](./docs/django.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=tag&data-lang=Python-->
```
添加 `class=tag&data-lang=Python` 类名和参数,会在卡片右上角标记 _`Python`_
@ -98,6 +98,123 @@ $ npm run start # 监听 md 文件编译输出 HTML
$ git clone https://github.com/jaywcjlove/reference.git -b gh-pages
```
**定时更新**
在 Linux 服务执行创建 `git-down-pages.sh` 脚本,将脚本放置在 `/opt/cron/` 目录下
> 注意:⚠️ 脚本会根据线上 pages 的 commit 和 本地 commit 比较。如果不一致才会同步更新,否则跳过
下面是脚本 `git-down-pages.sh` 的源码
```bash
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#author: 南宫乘风
DATA_DIR="/data"
REPO_URL="https://gitee.com/jaywcjlove/reference.git"
BRANCH="gh-pages"
MAX_BACKUPS=3
# 函数:备份旧版本
backup_old_version() {
echo "备份旧版本..."
mv ../reference ../reference_backup_$(date +%Y%m%d%H%M%S)
if [ $? -eq 0 ]; then
echo "备份完成。"
remove_old_backups
else
echo "备份时出现错误。"
exit 1
fi
}
# 函数:删除多余备份,保留最近的三个
remove_old_backups() {
echo "删除多余备份,保留最近的三个..."
ls -1d ../reference_backup_* | head -n -${MAX_BACKUPS} | xargs -r rm -r
}
# 函数:拉取最新代码
clone_latest_code() {
echo "拉取最新代码..."
# 进入 /data 目录
cd $DATA_DIR
git clone $REPO_URL -b $BRANCH
if [ $? -eq 0 ]; then
echo "拉取最新代码完成。"
else
echo "拉取最新代码时出现错误。"
exit 1
fi
}
# 检查是否存在 DATA_DIR 目录,不存在则创建
if [ ! -d "$DATA_DIR" ]; then
echo "目录 $DATA_DIR 不存在,创建中..."
mkdir -p "$DATA_DIR"
if [ $? -eq 0 ]; then
echo "目录创建成功。"
else
echo "目录创建失败。"
exit 1
fi
fi
# 进入 /data 目录
cd $DATA_DIR
# 检查是否存在 reference 目录
if [ -d "reference" ]; then
# 进入 reference 目录
cd reference
# 获取远程和本地的 commit 哈希值
REMOTE_COMMIT=$(git ls-remote $REPO_URL $BRANCH | cut -f1)
LOCAL_COMMIT=$(git rev-parse HEAD)
# 比较远程和本地的 commit
if [ "$REMOTE_COMMIT" == "$LOCAL_COMMIT" ]; then
echo "本地 'reference' 目录已经是最新版本,无需拉取。"
else
echo "本地 'reference' 目录不是最新版本,开始拉取最新代码..."
backup_old_version
clone_latest_code
fi
else
# 如果目录不存在,直接克隆
clone_latest_code
fi
echo "----------------------------------------------------------------------------"
endDate=`date +"%Y-%m-%d %H:%M:%S"`
echo "★[$endDate] Successful"
echo "----------------------------------------------------------------------------"
```
**创建定时任务**
注意:请把脚本放在 `/opt/cron/` 目录下 (时间可以根据自己需求设定),下面案例:每十分钟同步线上的 `pages` 的内容
```shell
crontab -e
*/10 * * * * /opt/cron/git-down-pages.sh >> /opt/cron/git-down.log 2>&1
```
**添加 NGINX 配置:**
```nginx
listen 80;
listen 443 ssl http2;
server_name xxx.xxx.top; #配置你的域名
index index.php index.html index.htm default.php default.htm default.html;
root /data/reference; # 文件存放的位置
```
### 方法二,使用 [docker](https://hub.docker.com/r/wcjiang/reference) 快捷部署 web 版
```shell
@ -132,193 +249,230 @@ REF_LABEL=网站首页
由于中国国内访问,时常打不开,你可以访问下面镜像网站。
- [quickref.cn](https://quickref.cn)
- [ecdata.cn](http://ref.ecdata.cn)
- [mofe.io](http://quickref.mofe.io)
- [aibk.cn](https://quickref.aibk.cn)
- [jgeek.cn](http://reference.jgeek.cn/)
- [laoleng.vip](http://bbs.laoleng.vip/reference/)
- [liujiapeng.com](https://www.liujiapeng.com/)
- [dbyun.net](https://www.dbyun.net/reference/index.html)
- [dc6.fun](https://dc6.fun/reference/)
- [if010.com](https://quickref.if010.com/)
- [pipecraft.net](https://quickref.pipecraft.net/)
- [isteed.cc](https://ref.isteed.cc/)
- [1han.wiki](https://code.1han.wiki/)
- [linzhe.top](https://linzhe.top/)
- [xushanxiang.com](https://xushanxiang.com/ref/)
- [winnerzr01.github.io](https://winnerzr01.github.io/Quick-Reference/index.html)
- [quickref.hestudio.net](https://quickref.hestudio.net)
- [surcode.cn](https://ref.surcode.cn)
- [cms.im](https://quickref.cms.im/)
- [nuomiphp.com](https://reference.tool.nuomiphp.com/)
- [eryajf.net](https://ref.eryajf.net/)
- [kjchmc.cn](https://ref.kjchmc.cn/)
- [likeadmin.cn](https://www.likeadmin.cn/quickref/)
- [qiubit.cc](http://ref.qiubit.cc)
- [aoh.cc](https://aoh.cc/)
- [reference.code05.com](https://reference.code05.com/)
- [kyoma.top](https://reference.kyoma.top/)
- [quickreference.pages.dev](https://quickreference.pages.dev/)
- [code05.com](https://reference.code05.com/)
- [xhfun.cn](https://ref.xhfun.cn/)
- [ownit.top](https://memo.ownit.top/)
感谢🙏
## 利用 Github Actions 定时任务来完成自动更新
在仓库添加 `.github/workflows/update-ref.yml` 文件 Github Actions 配置,感谢 @eryajf https://github.com/jaywcjlove/reference/issues/102#issuecomment-1368158419 提供方法
```yml
name: 每8个小时更新一次reference
on:
schedule:
- cron: '21 */8 * * *' # 定时任务
workflow_dispatch: # 手动运行
env: # 设置环境变量
TZ: Asia/Shanghai # 时区(设置时区可使页面中的`最近更新时间`使用时区时间)
jobs:
build: # 自定义名称
runs-on: ubuntu-latest
steps:
- name: 🚜 拉取最新代码
uses: actions/checkout@v3
with:
ref: 'main'
repository: 'jaywcjlove/reference'
- name: ♻️ 编译静态文件
run: |
echo -e 'REF_URL=https://refs.xxx.net/\nREF_LABEL=网站首页' > .env
npm install
npm run build
- name: 🚁 部署到服务器
uses: wlixcc/SFTP-Deploy-Action@v1.0
with:
username: 'root' #ssh user name
port: '22' # 远程服务器ssh端口默认22
server: 'prod.refs.xxx.net' # 远程服务器IP
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} # 认证服务器秘钥对的私钥
local_path: './dist/*' # 对应我们项目打包后的静态文件路径
remote_path: '/data/www/refs.xxx.net' # 服务器上的路径
delete_remote_files: true
```
## 贡献
请参阅[贡献指南](./CONTRIBUTING.md)了解如何开始。一如既往,感谢我们出色的贡献者!
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调">
<img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调™"/>
</a>
<a href="https://github.com/fwqaaq" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
</a>
<a href="https://github.com/mofelee" title="mofelee">
<img src="https://avatars.githubusercontent.com/u/5069410?v=4" width="42;" alt="mofelee"/>
</a>
<a href="https://github.com/JeffersonHuang" title="Jefferson">
<img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson"/>
</a>
<a href="https://github.com/Alex-Programer" title="Alex">
<img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/>
</a>
<a href="https://github.com/expoli" title="expoli">
<img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/>
</a>
<a href="https://github.com/heStudio-Network" title="醉、倾城">
<img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="醉、倾城"/>
</a>
<a href="https://github.com/sjh42" title="42:p">
<img src="https://avatars.githubusercontent.com/u/34529275?v=4" width="42;" alt="42:p"/>
</a>
<a href="https://github.com/LufsX" title="LufsX">
<img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/>
</a>
<a href="https://github.com/1834423612" title="kjch">
<img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/>
</a>
<a href="https://github.com/partoneplay" title="partoneplay">
<img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/>
</a>
<a href="https://github.com/ryanhex53" title="ryanhex53">
<img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/>
</a>
<a href="https://github.com/eryajf" title="二丫讲梵">
<img src="https://avatars.githubusercontent.com/u/33259379?v=4" width="42;" alt="二丫讲梵"/>
</a>
<a href="https://github.com/catcto" title="喵仙人">
<img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="喵仙人"/>
</a>
<a href="https://github.com/13812700839" title="花殇">
<img src="https://avatars.githubusercontent.com/u/58072506?v=4" width="42;" alt="花殇"/>
</a>
<a href="https://github.com/Smartdousha" title="dousha">
<img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="dousha"/>
</a>
<a href="https://github.com/Brid9e" title="Brid9e">
<img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Brid9e"/>
</a>
<a href="https://github.com/ch3nnn" title="Ch3nnn">
<img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="Ch3nnn"/>
</a>
<a href="https://github.com/CharlotteZeng" title="hanchZ">
<img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="hanchZ"/>
</a>
<a href="https://github.com/DaiNing810" title="DaiN">
<img src="https://avatars.githubusercontent.com/u/94962339?v=4" width="42;" alt="DaiN"/>
</a>
<a href="https://github.com/demigodliu" title="DemigodLiu">
<img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/>
</a>
<a href="https://github.com/eeeeeio" title="EEEEE">
<img src="https://avatars.githubusercontent.com/u/20723545?v=4" width="42;" alt="EEEEE"/>
</a>
<a href="https://github.com/jasnzhuang" title="Jason Zhuang">
<img src="https://avatars.githubusercontent.com/u/16612921?v=4" width="42;" alt="Jason Zhuang"/>
</a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel">
<img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/>
</a>
<a href="https://github.com/LightQuanta" title="Light_Quanta">
<img src="https://avatars.githubusercontent.com/u/18213217?v=4" width="42;" alt="Light_Quanta"/>
</a>
<a href="https://github.com/Lihuagreek" title="Lihuagreek">
<img src="https://avatars.githubusercontent.com/u/51040740?v=4" width="42;" alt="Lihuagreek"/>
</a>
<a href="https://github.com/likeshop-github" title="LikeShop技术社区">
<img src="https://avatars.githubusercontent.com/u/77180968?v=4" width="42;" alt="LikeShop技术社区"/>
</a>
<a href="https://github.com/mariuszmichalowski" title="Mariusz Michalowski">
<img src="https://avatars.githubusercontent.com/u/92091891?v=4" width="42;" alt="Mariusz Michalowski"/>
</a>
<a href="https://github.com/HanaNoryu" title="Noryu">
<img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/>
</a>
<a href="https://github.com/PipecraftNet" title="Pipecraft">
<img src="https://avatars.githubusercontent.com/u/88728670?v=4" width="42;" alt="Pipecraft"/>
</a>
<a href="https://github.com/QDelta" title="QDelta">
<img src="https://avatars.githubusercontent.com/u/60222316?v=4" width="42;" alt="QDelta"/>
</a>
<a href="https://github.com/whb1998a" title="WHB">
<img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="WHB"/>
</a>
<a href="https://github.com/hi-liyan" title="Yan Li">
<img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="Yan Li"/>
</a>
<a href="https://github.com/y52y" title="Zyj">
<img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/>
</a>
<a href="https://github.com/chyok" title="chyok">
<img src="https://avatars.githubusercontent.com/u/32629225?v=4" width="42;" alt="chyok"/>
</a>
<a href="https://github.com/gaoxiaoduan" title="coderduan">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="coderduan"/>
</a>
<a href="https://github.com/cool9203" title="cool9203">
<img src="https://avatars.githubusercontent.com/u/29609607?v=4" width="42;" alt="cool9203"/>
</a>
<a href="https://github.com/godotc" title="godotc">
<img src="https://avatars.githubusercontent.com/u/79260851?v=4" width="42;" alt="godotc"/>
</a>
<a href="https://github.com/greyhao" title="greyhao">
<img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/>
</a>
<a href="https://github.com/hua03" title="hua03">
<img src="https://avatars.githubusercontent.com/u/19561959?v=4" width="42;" alt="hua03"/>
</a>
<a href="https://github.com/hweining" title="hweining">
<img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/>
</a>
<a href="https://github.com/joyfully-W" title="joyfully-W">
<img src="https://avatars.githubusercontent.com/u/32212924?v=4" width="42;" alt="joyfully-W"/>
</a>
<a href="https://github.com/k983551019" title="k983551019">
<img src="https://avatars.githubusercontent.com/u/48147837?v=4" width="42;" alt="k983551019"/>
</a>
<a href="https://github.com/kdxcxs" title="kdxcxs">
<img src="https://avatars.githubusercontent.com/u/18746192?v=4" width="42;" alt="kdxcxs"/>
</a>
<a href="https://github.com/genius-kim" title="kim">
<img src="https://avatars.githubusercontent.com/u/119488561?v=4" width="42;" alt="kim"/>
</a>
<a href="https://github.com/larry-xue" title="larry">
<img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/>
</a>
<a href="https://github.com/liliangrong777" title="liliangrong777">
<img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/>
</a>
<a href="https://github.com/lykjjj" title="lykjjj">
<img src="https://avatars.githubusercontent.com/u/58510058?v=4" width="42;" alt="lykjjj"/>
</a>
<a href="https://github.com/mancuoj" title="mancuoj">
<img src="https://avatars.githubusercontent.com/u/45707684?v=4" width="42;" alt="mancuoj"/>
</a>
<a href="https://github.com/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/phygerr" title="phygerr">
<img src="https://avatars.githubusercontent.com/u/42068889?v=4" width="42;" alt="phygerr"/>
</a>
<a href="https://github.com/Mowmowj" title="shelton">
<img src="https://avatars.githubusercontent.com/u/24759562?v=4" width="42;" alt="shelton"/>
</a>
<a href="https://github.com/wjjwkwindy" title="wjjwkwindy">
<img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="wjjwkwindy"/>
</a>
<a href="https://github.com/xing133" title="xing133">
<img src="https://avatars.githubusercontent.com/u/5336490?v=4" width="42;" alt="xing133"/>
</a>
<a href="https://github.com/zxx-457" title="zxx-457">
<img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx-457"/>
</a>
<a href="https://github.com/lvzhenbo" title="吕振波">
<img src="https://avatars.githubusercontent.com/u/32427677?v=4" width="42;" alt="吕振波"/>
</a>
<a href="https://github.com/qyl27" title="秋雨落">
<img src="https://avatars.githubusercontent.com/u/53731501?v=4" width="42;" alt="秋雨落"/>
</a>
<a href="https://github.com/lisheng741" title="芦荟柚子茶">
<img src="https://avatars.githubusercontent.com/u/53617305?v=4" width="42;" alt="芦荟柚子茶"/>
</a><!--GAMFC-END-->
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调"><img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调"/></a>
<a href="https://github.com/fwqaaq" title="fwqaaq"><img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fwqaaq"/></a>
<a href="https://github.com/mofelee" title="mofelee"><img src="https://avatars.githubusercontent.com/u/5069410?v=4" width="42;" alt="mofelee"/></a>
<a href="https://github.com/Country-If" title="Maylon"><img src="https://avatars.githubusercontent.com/u/62837275?v=4" width="42;" alt="Maylon"/></a>
<a href="https://github.com/JeffersonHuang" title="Jefferson Huang"><img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson Huang"/></a>
<a href="https://github.com/LesterChang0987" title="Steve Hartwell"><img src="https://avatars.githubusercontent.com/u/114913921?v=4" width="42;" alt="Steve Hartwell"/></a>
<a href="https://github.com/nangongchengfeng" title="南宫乘风"><img src="https://avatars.githubusercontent.com/u/46562911?v=4" width="42;" alt="南宫乘风"/></a>
<a href="https://github.com/aixcyi" title="砹小翼"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="砹小翼"/></a>
<a href="https://github.com/Alex20180512" title="Alex"><img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/></a>
<a href="https://github.com/undefined-hestudio" title="undefined"><img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="undefined"/></a>
<a href="https://github.com/eryajf" title="二丫讲梵"><img src="https://avatars.githubusercontent.com/u/33259379?v=4" width="42;" alt="二丫讲梵"/></a>
<a href="https://github.com/k23223" title="k23223"><img src="https://avatars.githubusercontent.com/u/57606136?v=4" width="42;" alt="k23223"/></a>
<a href="https://github.com/expoli" title="expoli"><img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/></a>
<a href="https://github.com/mailbaoer" title="baoer"><img src="https://avatars.githubusercontent.com/u/5282978?v=4" width="42;" alt="baoer"/></a>
<a href="https://github.com/LufsX" title="LufsX"><img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/></a>
<a href="https://github.com/Darkiiiiiice" title="Darkiiiiiice"><img src="https://avatars.githubusercontent.com/u/3959555?v=4" width="42;" alt="Darkiiiiiice"/></a>
<a href="https://github.com/genius-kim" title="Kim同学"><img src="https://avatars.githubusercontent.com/u/119488561?v=4" width="42;" alt="Kim同学"/></a>
<a href="https://github.com/qyl27" title="秋 雨落"><img src="https://avatars.githubusercontent.com/u/53731501?v=4" width="42;" alt="秋 雨落"/></a>
<a href="https://github.com/MackDing" title="Blossom"><img src="https://avatars.githubusercontent.com/u/19878893?v=4" width="42;" alt="Blossom"/></a>
<a href="https://github.com/1250422131" title="萌新杰少"><img src="https://avatars.githubusercontent.com/u/52126790?v=4" width="42;" alt="萌新杰少"/></a>
<a href="https://github.com/zhangymPerson" title="zhangym"><img src="https://avatars.githubusercontent.com/u/40376181?v=4" width="42;" alt="zhangym"/></a>
<a href="https://github.com/chaos-cn" title="chaos"><img src="https://avatars.githubusercontent.com/u/71205599?v=4" width="42;" alt="chaos"/></a>
<a href="https://github.com/xia0ne" title="YuRuiH"><img src="https://avatars.githubusercontent.com/u/32591223?v=4" width="42;" alt="YuRuiH"/></a>
<a href="https://github.com/Willxup" title="Willxup"><img src="https://avatars.githubusercontent.com/u/51990395?v=4" width="42;" alt="Willxup"/></a>
<a href="https://github.com/LiuYuan-SHU" title="Yuan Liu"><img src="https://avatars.githubusercontent.com/u/96400967?v=4" width="42;" alt="Yuan Liu"/></a>
<a href="https://github.com/lvelvee" title="Lve Lvee"><img src="https://avatars.githubusercontent.com/u/25785753?v=4" width="42;" alt="Lve Lvee"/></a>
<a href="https://github.com/wsypower" title="魏"><img src="https://avatars.githubusercontent.com/u/31298317?v=4" width="42;" alt="魏"/></a>
<a href="https://github.com/itldg" title="老大哥"><img src="https://avatars.githubusercontent.com/u/13432299?v=4" width="42;" alt="老大哥"/></a>
<a href="https://github.com/catcto" title="小武Alan"><img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="小武Alan"/></a>
<a href="https://github.com/ryanhex53" title="ryanhex53"><img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/></a>
<a href="https://github.com/partoneplay" title="partoneplay"><img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/></a>
<a href="https://github.com/pangxiaoli" title="pangxiaoli"><img src="https://avatars.githubusercontent.com/u/54620953?v=4" width="42;" alt="pangxiaoli"/></a>
<a href="https://github.com/mancuoj" title="mancuoj"><img src="https://avatars.githubusercontent.com/u/45707684?v=4" width="42;" alt="mancuoj"/></a>
<a href="https://github.com/webeautiful" title="Albert"><img src="https://avatars.githubusercontent.com/u/3364316?v=4" width="42;" alt="Albert"/></a>
<a href="https://github.com/dadatom" title="Da Da"><img src="https://avatars.githubusercontent.com/u/33886943?v=4" width="42;" alt="Da Da"/></a>
<a href="https://github.com/ljq" title="Jack Liu"><img src="https://avatars.githubusercontent.com/u/7278286?v=4" width="42;" alt="Jack Liu"/></a>
<a href="https://github.com/jasnzhuang" title="Jason Zhuang"><img src="https://avatars.githubusercontent.com/u/16612921?v=4" width="42;" alt="Jason Zhuang"/></a>
<a href="https://github.com/Jovins" title="Jovins"><img src="https://avatars.githubusercontent.com/u/17738992?v=4" width="42;" alt="Jovins"/></a>
<a href="https://github.com/SuperDiscovery" title="SuperDiscovery"><img src="https://avatars.githubusercontent.com/u/49646863?v=4" width="42;" alt="SuperDiscovery"/></a>
<a href="https://github.com/XYZscratcher" title="XYZ"><img src="https://avatars.githubusercontent.com/u/108533817?v=4" width="42;" alt="XYZ"/></a>
<a href="https://github.com/findnr" title="findnr"><img src="https://avatars.githubusercontent.com/u/3909023?v=4" width="42;" alt="findnr"/></a>
<a href="https://github.com/greyhao" title="greyhao"><img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/></a>
<a href="https://github.com/1834423612" title="kjch"><img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/></a>
<a href="https://github.com/sunny0826" title="Xudong Guo"><img src="https://avatars.githubusercontent.com/u/24563928?v=4" width="42;" alt="Xudong Guo"/></a>
<a href="https://github.com/gzttcydxx" title="gzttcydxx"><img src="https://avatars.githubusercontent.com/u/50025185?v=4" width="42;" alt="gzttcydxx"/></a>
<a href="https://github.com/hua03" title="hua03"><img src="https://avatars.githubusercontent.com/u/19561959?v=4" width="42;" alt="hua03"/></a>
<a href="https://github.com/yanxuplay" title="hupilan"><img src="https://avatars.githubusercontent.com/u/69749541?v=4" width="42;" alt="hupilan"/></a>
<a href="https://github.com/hweining" title="hweining"><img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/></a>
<a href="https://github.com/infanx" title="infanx"><img src="https://avatars.githubusercontent.com/u/65985757?v=4" width="42;" alt="infanx"/></a>
<a href="https://github.com/auroraslot" title="irony"><img src="https://avatars.githubusercontent.com/u/48817882?v=4" width="42;" alt="irony"/></a>
<a href="https://github.com/jlchen5" title="jlchen5"><img src="https://avatars.githubusercontent.com/u/61578993?v=4" width="42;" alt="jlchen5"/></a>
<a href="https://github.com/joyfully-W" title="joyfully-W"><img src="https://avatars.githubusercontent.com/u/32212924?v=4" width="42;" alt="joyfully-W"/></a>
<a href="https://github.com/jqzhao7" title="jqzhao"><img src="https://avatars.githubusercontent.com/u/54694535?v=4" width="42;" alt="jqzhao"/></a>
<a href="https://github.com/jussker" title="jussker"><img src="https://avatars.githubusercontent.com/u/33953356?v=4" width="42;" alt="jussker"/></a>
<a href="https://github.com/k983551019" title="k983551019"><img src="https://avatars.githubusercontent.com/u/48147837?v=4" width="42;" alt="k983551019"/></a>
<a href="https://github.com/Zeng-qh" title="都一样"><img src="https://avatars.githubusercontent.com/u/40046415?v=4" width="42;" alt="都一样"/></a>
<a href="https://github.com/nodjoy" title="gowshwah"><img src="https://avatars.githubusercontent.com/u/145280043?v=4" width="42;" alt="gowshwah"/></a>
<a href="https://github.com/godotc" title="godot42"><img src="https://avatars.githubusercontent.com/u/79260851?v=4" width="42;" alt="godot42"/></a>
<a href="https://github.com/gi-b716" title="Gavin"><img src="https://avatars.githubusercontent.com/u/78394473?v=4" width="42;" alt="Gavin"/></a>
<a href="https://github.com/fjqz177" title="fjqz177"><img src="https://avatars.githubusercontent.com/u/83070583?v=4" width="42;" alt="fjqz177"/></a>
<a href="https://github.com/fakevn" title="fakevn"><img src="https://avatars.githubusercontent.com/u/11464386?v=4" width="42;" alt="fakevn"/></a>
<a href="https://github.com/cool9203" title="cool9203"><img src="https://avatars.githubusercontent.com/u/29609607?v=4" width="42;" alt="cool9203"/></a>
<a href="https://github.com/gaoxiaoduan" title="CoderDuan"><img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="CoderDuan"/></a>
<a href="https://github.com/lijc210" title="cizai"><img src="https://avatars.githubusercontent.com/u/10651081?v=4" width="42;" alt="cizai"/></a>
<a href="https://github.com/chyok" title="chyok"><img src="https://avatars.githubusercontent.com/u/32629225?v=4" width="42;" alt="chyok"/></a>
<a href="https://github.com/zlfyuan" title="bgbgPang"><img src="https://avatars.githubusercontent.com/u/19658018?v=4" width="42;" alt="bgbgPang"/></a>
<a href="https://github.com/Lmmmmmm-bb" title="_lmmmmmm"><img src="https://avatars.githubusercontent.com/u/54026110?v=4" width="42;" alt="_lmmmmmm"/></a>
<a href="https://github.com/y52y" title="Zyj"><img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/></a>
<a href="https://github.com/Leaderzhangyi" title="ZinkCas"><img src="https://avatars.githubusercontent.com/u/46915666?v=4" width="42;" alt="ZinkCas"/></a>
<a href="https://github.com/binscor" title="Zheng Nai Bin"><img src="https://avatars.githubusercontent.com/u/37325821?v=4" width="42;" alt="Zheng Nai Bin"/></a>
<a href="https://github.com/qwxingzhe" title="行者"><img src="https://avatars.githubusercontent.com/u/7071651?v=4" width="42;" alt="行者"/></a>
<a href="https://github.com/HanaChan233" title="花开花落"><img src="https://avatars.githubusercontent.com/u/75212820?v=4" width="42;" alt="花开花落"/></a>
<a href="https://github.com/lisheng741" title="芦荟柚子茶"><img src="https://avatars.githubusercontent.com/u/53617305?v=4" width="42;" alt="芦荟柚子茶"/></a>
<a href="https://github.com/ZIDOUZI" title="ZIDOUZI"><img src="https://avatars.githubusercontent.com/u/53157536?v=4" width="42;" alt="ZIDOUZI"/></a>
<a href="https://github.com/LuckyJie12" title="夜未央"><img src="https://avatars.githubusercontent.com/u/102901105?v=4" width="42;" alt="夜未央"/></a>
<a href="https://github.com/lvzhenbo" title="吕振波"><img src="https://avatars.githubusercontent.com/u/32427677?v=4" width="42;" alt="吕振波"/></a>
<a href="https://github.com/zxx457" title="zxx457"><img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx457"/></a>
<a href="https://github.com/zhouhw0306" title="zhouhw0306"><img src="https://avatars.githubusercontent.com/u/82752681?v=4" width="42;" alt="zhouhw0306"/></a>
<a href="https://github.com/hiyms" title="yms"><img src="https://avatars.githubusercontent.com/u/84654050?v=4" width="42;" alt="yms"/></a>
<a href="https://github.com/xing133" title="xing133"><img src="https://avatars.githubusercontent.com/u/5336490?v=4" width="42;" alt="xing133"/></a>
<a href="https://github.com/wjjwkwindy" title="Hudson Alen"><img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="Hudson Alen"/></a>
<a href="https://github.com/wannima66" title="tmen"><img src="https://avatars.githubusercontent.com/u/26410255?v=4" width="42;" alt="tmen"/></a>
<a href="https://github.com/swift-fs" title="swift"><img src="https://avatars.githubusercontent.com/u/77133741?v=4" width="42;" alt="swift"/></a>
<a href="https://github.com/suyangzuo" title="suyangzuo"><img src="https://avatars.githubusercontent.com/u/50766353?v=4" width="42;" alt="suyangzuo"/></a>
<a href="https://github.com/Mowmowj" title="nexo"><img src="https://avatars.githubusercontent.com/u/24759562?v=4" width="42;" alt="nexo"/></a>
<a href="https://github.com/phygerr" title="phygerr"><img src="https://avatars.githubusercontent.com/u/42068889?v=4" width="42;" alt="phygerr"/></a>
<a href="https://github.com/onewesong" title="onewesong"><img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/></a>
<a href="https://github.com/miclon-dev" title="miclon-dev"><img src="https://avatars.githubusercontent.com/u/111753685?v=4" width="42;" alt="miclon-dev"/></a>
<a href="https://github.com/lykjjj" title="lykjjj"><img src="https://avatars.githubusercontent.com/u/58510058?v=4" width="42;" alt="lykjjj"/></a>
<a href="https://github.com/lozhu20" title="lozhu"><img src="https://avatars.githubusercontent.com/u/44923922?v=4" width="42;" alt="lozhu"/></a>
<a href="https://github.com/liliangrong777" title="liliangrong777"><img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/></a>
<a href="https://github.com/larry-xue" title="larry"><img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/></a>
<a href="https://github.com/kubeme" title="kubernetes for me"><img src="https://avatars.githubusercontent.com/u/16346220?v=4" width="42;" alt="kubernetes for me"/></a>
<a href="https://github.com/kdxcxs" title="kdxcxs"><img src="https://avatars.githubusercontent.com/u/18746192?v=4" width="42;" alt="kdxcxs"/></a>
<a href="https://github.com/zhu0629" title="zhucong"><img src="https://avatars.githubusercontent.com/u/13188450?v=4" width="42;" alt="zhucong"/></a>
<a href="https://github.com/likeshop-github" title="likeshop技术社区"><img src="https://avatars.githubusercontent.com/u/77180968?v=4" width="42;" alt="likeshop技术社区"/></a>
<a href="https://github.com/Lihuagreek" title="Lihuagreek"><img src="https://avatars.githubusercontent.com/u/51040740?v=4" width="42;" alt="Lihuagreek"/></a>
<a href="https://github.com/LightQuanta" title="Light_Quanta"><img src="https://avatars.githubusercontent.com/u/18213217?v=4" width="42;" alt="Light_Quanta"/></a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel"><img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/></a>
<a href="https://github.com/jeremyjone" title="Jeremy Jone"><img src="https://avatars.githubusercontent.com/u/37676231?v=4" width="42;" alt="Jeremy Jone"/></a>
<a href="https://github.com/JavaZeroo" title="JavaZero"><img src="https://avatars.githubusercontent.com/u/71128095?v=4" width="42;" alt="JavaZero"/></a>
<a href="https://github.com/Ding-Kyoma" title="HooinKyoma"><img src="https://avatars.githubusercontent.com/u/44542198?v=4" width="42;" alt="HooinKyoma"/></a>
<a href="https://github.com/gongyeheyu" title="GONGYE Heyu"><img src="https://avatars.githubusercontent.com/u/85177605?v=4" width="42;" alt="GONGYE Heyu"/></a>
<a href="https://github.com/Fuku-L" title="Fuku-L"><img src="https://avatars.githubusercontent.com/u/38535911?v=4" width="42;" alt="Fuku-L"/></a>
<a href="https://github.com/sirius-fan" title="Fan"><img src="https://avatars.githubusercontent.com/u/25720015?v=4" width="42;" alt="Fan"/></a>
<a href="https://github.com/eeeeeio" title="EEEEE"><img src="https://avatars.githubusercontent.com/u/20723545?v=4" width="42;" alt="EEEEE"/></a>
<a href="https://github.com/demigodliu" title="DemigodLiu"><img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/></a>
<a href="https://github.com/dasferco" title="Dasferco"><img src="https://avatars.githubusercontent.com/u/92622404?v=4" width="42;" alt="Dasferco"/></a>
<a href="https://github.com/Damao2250" title="Damao"><img src="https://avatars.githubusercontent.com/u/19251992?v=4" width="42;" alt="Damao"/></a>
<a href="https://github.com/DEEMO101" title="DEEMO101"><img src="https://avatars.githubusercontent.com/u/35123091?v=4" width="42;" alt="DEEMO101"/></a>
<a href="https://github.com/ohto-ai" title="Choo"><img src="https://avatars.githubusercontent.com/u/46275725?v=4" width="42;" alt="Choo"/></a>
<a href="https://github.com/CharlotteZeng" title="hanchZ"><img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="hanchZ"/></a>
<a href="https://github.com/ch3nnn" title="chentong"><img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="chentong"/></a>
<a href="https://github.com/Brid9e" title="Joe"><img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Joe"/></a>
<a href="https://github.com/BobH-Official" title="BobH"><img src="https://avatars.githubusercontent.com/u/29333228?v=4" width="42;" alt="BobH"/></a>
<a href="https://github.com/Blanket58" title="Blanket58"><img src="https://avatars.githubusercontent.com/u/39766189?v=4" width="42;" alt="Blanket58"/></a>
<a href="https://github.com/BlacAmDK" title="BlacAmDK"><img src="https://avatars.githubusercontent.com/u/10971397?v=4" width="42;" alt="BlacAmDK"/></a>
<a href="https://github.com/gitchenze" title="Aze"><img src="https://avatars.githubusercontent.com/u/13357869?v=4" width="42;" alt="Aze"/></a>
<a href="https://github.com/dousha0w0" title="dousha0w0"><img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="dousha0w0"/></a>
<a href="https://github.com/13812700839" title="花殇"><img src="https://avatars.githubusercontent.com/u/58072506?v=4" width="42;" alt="花殇"/></a>
<a href="https://github.com/yikuaibro" title="yikuaibro"><img src="https://avatars.githubusercontent.com/u/44493045?v=4" width="42;" alt="yikuaibro"/></a>
<a href="https://github.com/dfshizhiqiang" title="Zech"><img src="https://avatars.githubusercontent.com/u/7030019?v=4" width="42;" alt="Zech"/></a>
<a href="https://github.com/Yo-gurts" title="Yogurt"><img src="https://avatars.githubusercontent.com/u/44612841?v=4" width="42;" alt="Yogurt"/></a>
<a href="https://github.com/hi-liyan" title="李李李"><img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="李李李"/></a>
<a href="https://github.com/BATTLEHAWK00" title="While True: learn()"><img src="https://avatars.githubusercontent.com/u/45313304?v=4" width="42;" alt="While True: learn()"/></a>
<a href="https://github.com/dwgeneral" title="Happy-Engineer"><img src="https://avatars.githubusercontent.com/u/8654993?v=4" width="42;" alt="Happy-Engineer"/></a>
<a href="https://github.com/whb1998a" title="Wafer"><img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="Wafer"/></a>
<a href="https://github.com/YLee9527" title="Terry Young"><img src="https://avatars.githubusercontent.com/u/18697332?v=4" width="42;" alt="Terry Young"/></a>
<a href="https://github.com/TRDSCSH" title="TRDSCSH"><img src="https://avatars.githubusercontent.com/u/125717891?v=4" width="42;" alt="TRDSCSH"/></a>
<a href="https://github.com/Xiwin" title="Xiwin"><img src="https://avatars.githubusercontent.com/u/107191230?v=4" width="42;" alt="Xiwin"/></a>
<a href="https://github.com/DataEraserC" title="Sacabambaspis"><img src="https://avatars.githubusercontent.com/u/102341238?v=4" width="42;" alt="Sacabambaspis"/></a>
<a href="https://github.com/qinxiongzhou" title="Ryan Zhou"><img src="https://avatars.githubusercontent.com/u/33239096?v=4" width="42;" alt="Ryan Zhou"/></a>
<a href="https://github.com/RivailleF" title="RivailleF"><img src="https://avatars.githubusercontent.com/u/93083015?v=4" width="42;" alt="RivailleF"/></a>
<a href="https://github.com/QDelta" title="QDelta"><img src="https://avatars.githubusercontent.com/u/60222316?v=4" width="42;" alt="QDelta"/></a>
<a href="https://github.com/sevenleave" title="Poirot Hercule"><img src="https://avatars.githubusercontent.com/u/24411140?v=4" width="42;" alt="Poirot Hercule"/></a>
<a href="https://github.com/PipecraftNet" title="Pipecraft"><img src="https://avatars.githubusercontent.com/u/88728670?v=4" width="42;" alt="Pipecraft"/></a>
<a href="https://github.com/Perzch" title="Perzch"><img src="https://avatars.githubusercontent.com/u/67987641?v=4" width="42;" alt="Perzch"/></a>
<a href="https://github.com/PILIHU2022" title="PILIHU2022"><img src="https://avatars.githubusercontent.com/u/100511118?v=4" width="42;" alt="PILIHU2022"/></a>
<a href="https://github.com/HanaNoryu" title="Noryu"><img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/></a>
<a href="https://github.com/NianwenDan" title="NianwenDan"><img src="https://avatars.githubusercontent.com/u/74407127?v=4" width="42;" alt="NianwenDan"/></a>
<a href="https://github.com/mo3et" title="Monet Lee"><img src="https://avatars.githubusercontent.com/u/34803812?v=4" width="42;" alt="Monet Lee"/></a>
<a href="https://github.com/Moeyuuko" title="Moeyuuko"><img src="https://avatars.githubusercontent.com/u/14266681?v=4" width="42;" alt="Moeyuuko"/></a>
<a href="https://github.com/malcolmyu" title="Minghao Yu"><img src="https://avatars.githubusercontent.com/u/3203962?v=4" width="42;" alt="Minghao Yu"/></a>
<a href="https://github.com/mariuszmichalowski" title="Mariusz Michalowski"><img src="https://avatars.githubusercontent.com/u/92091891?v=4" width="42;" alt="Mariusz Michalowski"/></a>
<a href="https://github.com/isecret" title="Mao Wang"><img src="https://avatars.githubusercontent.com/u/15724152?v=4" width="42;" alt="Mao Wang"/></a><!--GAMFC-END-->
上图贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成贡献者图片。

View File

@ -1,6 +1,6 @@
# https://lipanski.com/posts/smallest-docker-image-static-website
# https://github.com/lipanski/docker-static-website
FROM lipanski/docker-static-website:latest
FROM wcjiang/docker-static-website:latest
# Copy the static website
# Use the .dockerignore file to control what ends up inside the image!

533
README.md
View File

@ -2,6 +2,7 @@ Quick Reference
===
<!--rehype:ignore:start-->
[![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor)
[![CI](https://github.com/jaywcjlove/reference/actions/workflows/ci.yml/badge.svg)](https://github.com/jaywcjlove/reference/actions/workflows/ci.yml)
[![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference)
[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/reference)](https://hub.docker.com/r/wcjiang/reference)
@ -22,9 +23,10 @@ Quick Reference
[Ansible](./docs/ansible.md)<!--rehype:style=background: rgb(238 0 0);&class=contributing tag&data-lang=RedHat&data-info=👆看看还缺点儿什么?-->
[CMake](./docs/cmake.md)<!--rehype:style=background: rgb(92 107 192);&class=contributing-->
[C#](./docs/cs.md)<!--rehype:style=background: rgb(6 147 13);&class=contributing-->
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51);&class=contributing tag&data-lang=Python-->
[Django](./docs/django.md)<!--rehype:style=background: rgb(12 75 51);&class=contributing tag&data-lang=Python-->
[FFmpeg](./docs/ffmpeg.md)<!--rehype:style=background: rgb(0 193 9);&class=contributing-->
[Flask](./docs/flask.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[Flask](./docs/flask.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[FastAPI](./docs/fastapi.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[Flutter](./docs/flutter.md)<!--rehype:style=background: rgb(150 220 254);&class=contributing tag&data-lang=Dart-->
[Gitlab CI/CD](./docs/gitlab-ci.md)<!--rehype:style=background: rgb(226 67 41);&class=contributing-->
[LaTeX](./docs/latex.md)<!--rehype:style=background: rgb(0 128 128);&class=contributing-->
@ -34,72 +36,92 @@ Quick Reference
[Oracle](./docs/oracle.md)<!--rehype:style=background: rgb(255 0 0);&class=contributing tag&data-lang=SQL-->
[Pytorch](./docs/pytorch.md)<!--rehype:style=background: rgb(238 76 44);&class=contributing tag&data-lang=Python&data-info=👆看看还缺点儿什么?-->
[Vue 3](./docs/vue.md)<!--rehype:style=background: rgb(64 184 131);&class=contributing-->
[Github Copilot](./docs/github-copilot.md)<!--rehype:style=background: rgb(125 45 220);&class=tag contributing&data-lang=AI&data-info=👆看看还缺点儿什么?-->
[Chown](./docs/chown.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
[R 语言](./docs/r.md)<!--rehype:style=background: rgb(39 108 192);&class=contributing-->
[Elixir](./docs/elixir.md)<!--rehype:style=background: rgb(124 26 156);&class=contributing tag&data-lang=Elixir-->
[Tauri](./docs/tauri.md)<!--rehype:style=background: rgb(103 214 237);&class=contributing-->
<!--rehype:class=home-card-->
## 编程
[Bash](./docs/bash.md)<!--rehype:style=background: rgb(72 143 223);-->
[C](./docs/c.md)<!--rehype:style=background: rgb(92 107 192);-->
[C 语言](./docs/c.md)<!--rehype:style=background: rgb(92 107 192);-->
[C#](./docs/cs.md)<!--rehype:style=background: rgb(6 147 13);&class=contributing-->
[C++](./docs/cpp.md)<!--rehype:style=background: rgb(6 147 13);&class=contributing-->
[Dart](./docs/dart.md)<!--rehype:style=background: rgb(64 196 255);-->
[Docker](./docs/docker.md)<!--rehype:style=background: rgb(72 143 223);-->
[Dockerfile](./docs/dockerfile.md)<!--rehype:style=background: rgb(0 72 153);&class=tag&data-lang=Docker-->
[Django](./docs/djiango.md)<!--rehype:style=background: rgb(12 75 51);&class=contributing tag&data-lang=Python-->
[Flask](./docs/flask.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[Django](./docs/django.md)<!--rehype:style=background: rgb(12 75 51);&class=contributing tag&data-lang=Python-->
[Elixir](./docs/elixir.md)<!--rehype:style=background: rgb(124 26 156);&class=contributing tag&data-lang=Elixir-->
[Flask](./docs/flask.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[FastAPI](./docs/fastapi.md)<!--rehype:style=background: rgb(210 168 255);&class=contributing tag&data-lang=Python-->
[Flutter](./docs/flutter.md)<!--rehype:style=background: rgb(150 220 254);&class=contributing tag&data-lang=Dart-->
[Golang](./docs/golang.md)<!--rehype:style=background: rgb(39 160 193);-->
[GraphQL](./docs/graphql.md)<!--rehype:style=background: rgb(214 66 146);-->
[INI](./docs/ini.md)<!--rehype:style=background: rgb(57 59 60);-->
[JSON](./docs/json.md)<!--rehype:style=background: rgb(57 59 60);-->
[Java](./docs/java.md)<!--rehype:style=background: rgb(211 55 49);&class=contributing&data-info=👆看看还缺点儿什么?-->
[Julia](./docs/julia.md)<!--rehype:style=background: rgb(211 55 49);&class=contributing&data-info=👆看看还缺点儿什么?-->
[Julia](./docs/julia.md)<!--rehype:style=background: rgb(26 188 156);&class=contributing&data-info=👆看看还缺点儿什么?-->
[Kotlin](./docs/kotlin.md)<!--rehype:style=background: rgb(211 55 49);&class=contributing&data-info=👆看看还缺点儿什么?-->
[Kubernetes](./docs/kubernetes.md)<!--rehype:style=background: rgb(51 113 227);&class=contributing&data-info=👆看看还缺点儿什么?-->
[LaTeX](./docs/latex.md)<!--rehype:style=background: rgb(0 128 128);&class=contributing-->
[Laravel 8](./docs/laravel.md)<!--rehype:style=background: rgb(249 50 44);&class=contributing tag&data-lang=PHP-->
[Markdown](./docs/markdown.md)<!--rehype:style=background: rgb(103 61 156);-->
[MATLAB](./docs/matlab.md)<!--rehype:style=background: rgb(0 118 168);&class=contributing-->
[PHP](./docs/php.md)<!--rehype:style=background: rgb(79 91 147);-->
[Python](./docs/python.md)<!--rehype:style=background: rgb(43 91 132);-->
[R 语言](./docs/r.md)<!--rehype:style=background: rgb(39 108 192);&class=contributing&data-info-->
[Ruby](./docs/ruby.md)<!--rehype:style=background: rgb(204 52 45);-->
[Rust](./docs/rust.md)<!--rehype:style=background: rgb(71 71 71);-->
[Scala](./docs/scala.md)<!--rehype:style=background: rgb(34 82 94);-->
[Swift](./docs/swift.md)<!--rehype:style=background: rgb(240 81 57);-->
[SwiftUI](./docs/swiftui.md)<!--rehype:style=background: rgb(10 127 247);&class=tag&data-lang=swift-->
[TOML](./docs/toml.md)<!--rehype:style=background: rgb(132 132 132);-->
[YAML](./docs/yaml.md)<!--rehype:style=background: rgb(91 163 230);-->
[Lua](./docs/lua.md)<!--rehype:style=background: rgb(3 3 128);-->
[Pytorch](./docs/pytorch.md)<!--rehype:style=background: rgb(238 76 44);&class=contributing tag&data-lang=Python&data-info=👆看看还缺点儿什么?-->
<!--rehype:class=home-card-->
## 配置
[INI](./docs/ini.md)<!--rehype:style=background: rgb(57 59 60);-->
[JSON](./docs/json.md)<!--rehype:style=background: rgb(57 59 60);-->
[TOML](./docs/toml.md)<!--rehype:style=background: rgb(132 132 132);-->
[YAML](./docs/yaml.md)<!--rehype:style=background: rgb(91 163 230);-->
<!--rehype:class=home-card-->
## 前端
[前端导航](./docs/feds.md)<!--rehype:style=background: rgb(35 115 205);&class=tag&data-lang=导航-->
[CSS 3](./docs/css.md)<!--rehype:style=background: rgb(35 115 205);&class=tag&data-lang=CSS-->
[Electron](./docs/electron.md)<!--rehype:style=background: rgb(0 72 153);-->
[Emmet](./docs/emmet.md)<!--rehype:style=background: rgb(122 203 23);-->
[ES 6](./docs/es6.md)<!--rehype:style=background: rgb(122 203 23);&class=tag&data-lang=JS-->
[Styled Components](./docs/styled-components.md)<!--rehype:style=background: rgb(221 60 184);&class=tag&data-lang=CSS-->
[Stylus](./docs/stylus.md)<!--rehype:style=background: rgb(109 161 63);&class=tag&data-lang=CSS-->
[Sass](./docs/sass.md)<!--rehype:style=background: rgb(207 100 154);&class=tag&data-lang=CSS-->
[HTML](./docs/html.md)<!--rehype:style=background: rgb(228 77 39);-->
[JavaScript](./docs/javascript.md)<!--rehype:style=background: rgb(203 183 31);-->
[jQuery](./docs/jquery.md)<!--rehype:style=background: rgb(203 183 31);-->
[Less.js](./docs/lessjs.md)<!--rehype:style=background: rgb(29 54 93);&class=tag&data-lang=CSS-->
[Next.js](./docs/nextjs.md)<!--rehype:style=background: rgb(0 0 0);&class=tag&data-lang=React-->
[React](./docs/react.md)<!--rehype:style=background: rgb(34 143 173);-->
[React Router](./docs/reactrouter.md)<!--rehype:style=background: rgb(244 66 79);&class=tag&data-lang=React-->
[React Native](./docs/react-native.md)<!--rehype:style=background: rgb(34 143 173);&class=tag&data-lang=React-->
[RegEx 正则表达式](./docs/regex.md)<!--rehype:style=background: rgb(149 36 155);-->
[TypeScript](./docs/typescript.md)<!--rehype:style=background: rgb(49 120 198);-->
[Tailwind CSS](./docs/tailwindcss.md)<!--rehype:style=background: rgb(49 120 198);-->
[Tauri](./docs/tauri.md)<!--rehype:style=background: rgb(103 214 237);&class=contributing-->
[Vue 2](./docs/vue2.md)<!--rehype:style=background: rgb(64 184 131);-->
[Vue 3](./docs/vue.md)<!--rehype:style=background: rgb(64 184 131);&class=contributing-->
[</> htmx](./docs/htmx.md)<!--rehype:style=background: rgb(52 101 164);&class=contributing-->
<!--rehype:class=home-card-->
## CSS
[CSS 3](./docs/css.md)<!--rehype:style=background: rgb(35 115 205);&class=tag&data-lang=CSS-->
[Styled Components](./docs/styled-components.md)<!--rehype:style=background: rgb(221 60 184);&class=tag&data-lang=CSS-->
[Stylus](./docs/stylus.md)<!--rehype:style=background: rgb(109 161 63);&class=tag&data-lang=CSS-->
[Sass](./docs/sass.md)<!--rehype:style=background: rgb(207 100 154);&class=tag&data-lang=CSS-->
[Less.js](./docs/lessjs.md)<!--rehype:style=background: rgb(29 54 93);&class=tag&data-lang=CSS-->
[Tailwind CSS](./docs/tailwindcss.md)<!--rehype:style=background: rgb(49 120 198);-->
<!--rehype:class=home-card-->
## Nodejs
[Express.js](./docs/expressjs.md)<!--rehype:style=background: rgb(95 151 206);-->
[Ejs](./docs/ejs.md)<!--rehype:style=background: rgb(169 30 80);&class=tag&data-lang=JavaScript-->
[Jest](./docs/jest.md)<!--rehype:style=background: rgb(153 66 91);-->
[Koa.js](./docs/koajs.md)<!--rehype:style=background: rgb(95 151 206);-->
[Lerna](./docs/lerna.md)<!--rehype:style=background: rgb(192 132 252);-->
@ -108,6 +130,7 @@ Quick Reference
[PM2](./docs/pm2.md)<!--rehype:style=background: rgb(73 117 241);&class=contributing-->
[package.json](./docs/package.json.md)<!--rehype:style=background: rgb(132 132 132);-->
[Yarn](./docs/yarn.md)<!--rehype:style=background: rgb(33 136 182);-->
[nvm](./docs/nvm.md)<!--rehype:style=background: rgb(132 132 132);-->
<!--rehype:class=home-card-->
## 工具
@ -125,45 +148,65 @@ Quick Reference
[ADB, Android Debug Bridge](./docs/adb.md)<!--rehype:style=background: rgb(238 0 0);&class=contributing tag&data-lang=Android&data-info=👆看看还缺点儿什么?-->
[Ansible](./docs/ansible.md)<!--rehype:style=background: rgb(238 0 0);&class=contributing tag&data-lang=RedHat&data-info=👆看看还缺点儿什么?-->
[Awk](./docs/awk.md)<!--rehype:style=background: rgb(16 185 129);-->
[Conan](./docs/conan.md)<!--rehype:style=background: rgb(0 193 9);&class=tag&data-lang=C/C++-->
[CocoaPods](./docs/cocoapods.md)<!--rehype:style=background: rgb(251 0 6);&class=tag&data-lang=C/C++-->
[Cargo](./docs/cargo.md)<!--rehype:style=background: rgb(71 71 71);&class=tag&data-lang=Rust-->
[Curl](./docs/curl.md)<!--rehype:style=background: rgb(16 185 129);-->
[Chmod](./docs/chmod.md)<!--rehype:style=background: rgb(16 185 129);-->
[Chown](./docs/chown.md)<!--rehype:style=background: rgb(12 75 51/var(\-\-bg\-opacity));&class=contributing-->
[Cron](./docs/cron.md)<!--rehype:style=background: rgb(239 68 68);-->
[CMake](./docs/cmake.md)<!--rehype:style=background: rgb(92 107 192);&class=contributing-->
[Make](./docs/make.md)<!--rehype:style=background: rgb(99 99 99);&class=contributing-->
[Git](./docs/git.md)<!--rehype:style=background: rgb(215 89 62);-->
[Grep](./docs/grep.md)<!--rehype:style=background: rgb(16 185 129);-->
[CMD](./docs/cmd.md)<!--rehype:style=background: rgb(99 99 99);-->
[Find](./docs/find.md)<!--rehype:style=background: rgb(16 185 129);-->
[FFmpeg](./docs/ffmpeg.md)<!--rehype:style=background: rgb(0 193 9);&class=contributing-->
[Gdb](./docs/gdb.md)<!--rehype:style=background: rgb(215 89 62);-->
[Git](./docs/git.md)<!--rehype:style=background: rgb(215 89 62);&class=tag&data-lang=版本控制-->
[Grep](./docs/grep.md)<!--rehype:style=background: rgb(16 185 129);-->
[Htop](./docs/htop.md)<!--rehype:style=background: rgb(16 185 129);-->
[Homebrew](./docs/homebrew.md)<!--rehype:style=background: rgb(252 185 87);&class=tag&data-lang=macOS-->
[Netstat](./docs/netstat.md)<!--rehype:style=background: rgb(16 185 129);-->
[iptables](./docs/iptables.md)<!--rehype:style=background: rgb(32 74 135);-->
[jq](./docs/jq.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=JSON-->
[Justfile](./docs/justfile.md)<!--rehype:style=background: rgb(16 185 129);-->
[Lsof](./docs/lsof.md)<!--rehype:style=background: rgb(16 185 129);-->
[Mitmproxy](./docs/mitmproxy.md)<!--rehype:style=background: rgb(4 92 135);-->
[Make](./docs/make.md)<!--rehype:style=background: rgb(99 99 99);&class=contributing-->
[Netstat](./docs/netstat.md)<!--rehype:style=background: rgb(16 185 129);-->
[Netcat](./docs/netcat.md)<!--rehype:style=background: rgb(4 92 135);-->
[Sed](./docs/sed.md)<!--rehype:style=background: rgb(16 185 129);-->
[OpenSSL](./docs/openssl.md)<!--rehype:style=background: rgb(114 20 18);-->
[ps](./docs/ps.md)<!--rehype:style=background: rgb(99 99 99);-->
[Pandoc](./docs/pandoc.md)<!--rehype:style=background: rgb(99 99 99);&class=tag&data-lang=文档转换器-->
[Sed](./docs/sed.md)<!--rehype:style=background: rgb(16 185 129);-->
[Systemd](./docs/systemd.md)<!--rehype:style=background: rgb(16 185 129);-->
[SSH](./docs/ssh.md)<!--rehype:style=background: rgb(99 99 99);-->
[Subversion (SVN)](./docs/subversion.md)<!--rehype:style=background: rgb(99 99 99);&class=tag&data-lang=版本控制-->
[Screen](./docs/screen.md)<!--rehype:style=background: rgb(99 99 99);-->
[Sysdig](./docs/sysdig.md)<!--rehype:style=background: rgb(1 171 199);-->
[Tmux](./docs/tmux.md)<!--rehype:style=background: rgb(99 99 99);-->
[YUM](./docs/yum.md)<!--rehype:style=background: rgb(86 86 123);-->
[CMD](./docs/cmd.md)<!--rehype:style=background: rgb(99 99 99);-->
[Taskset](./docs/taskset.md)<!--rehype:style=background: rgb(99 99 99);-->
[tar](./docs/tar.md)<!--rehype:style=background: rgb(215 89 62);&class=tag&data-lang=解压缩-->
[Zip](./docs/zip.md)<!--rehype:style=background: rgb(99 99 99);&class=tag&data-lang=解压缩-->
[FTP](./docs/ftp.md)<!--rehype:style=background: rgb(99 99 99);-->
<!--rehype:class=home-card-->
## 工具箱
[APT](./docs/apt.md)<!--rehype:style=background: rgb(30 144 255);-->
[tar](./docs/tar.md)<!--rehype:style=background: rgb(215 89 62);-->
[Conan](./docs/conan.md)<!--rehype:style=background: rgb(0 193 9);&class=tag&data-lang=C/C++-->
[Conda](./docs/conda.md)<!--rehype:style=background: rgb(68 168 51);&class=tag&data-lang=Python-->
[CocoaPods](./docs/cocoapods.md)<!--rehype:style=background: rgb(251 0 6);&class=tag&data-lang=C/C++-->
[Cargo](./docs/cargo.md)<!--rehype:style=background: rgb(71 71 71);&class=tag&data-lang=Rust-->
[Homebrew](./docs/homebrew.md)<!--rehype:style=background: rgb(252 185 87);&class=tag&data-lang=macOS-->
[Linux Command](./docs/linux-command.md)<!--rehype:style=background: rgb(215 89 62);&class=tag&data-lang=命令速查-->
[Mitmproxy](./docs/mitmproxy.md)<!--rehype:style=background: rgb(4 92 135);-->
[Pacman](./docs/pacman.md)<!--rehype:style=background: rgb(24 147 209);&class=tag&data-lang=archlinux&class=contributing-->
[YUM](./docs/yum.md)<!--rehype:style=background: rgb(86 86 123);-->
[SDKMAN](./docs/sdkman.md)<!--rehype:style=background: rgb(0 118 198);-->
<!--rehype:class=home-card-->
## 数据库
[MySQL](./docs/mysql.md)<!--rehype:style=background: rgb(1 117 143);&class=tag&data-lang=SQL-->
[MongoDB](./docs/mongodb.md)<!--rehype:style=background: rgb(0 237 100);-->
[Oracle](./docs/oracle.md)<!--rehype:style=background: rgb(255 0 0);&class=tag&data-lang=SQL-->
[PostgreSQL](./docs/postgres.md)<!--rehype:style=background: rgb(43 109 163);&class=tag&data-lang=SQL-->
[Redis](./docs/redis.md)<!--rehype:style=background: rgb(198 47 44);-->
[Elasticsearch](./docs/elasticsearch.md)<!--rehype:style=background: rgb(36 187 177);-->
[Neo4j](./docs/neo4j.md)<!--rehype:style=background: rgb(86 86 123);-->
<!--rehype:class=home-card-->
## 快捷键
@ -172,29 +215,38 @@ Quick Reference
[Adobe Photoshop](./docs/adobe-photoshop.md)<!--rehype:style=background: rgb(49 168 255);-->
[Adobe XD](./docs/adobe-xd.md)<!--rehype:style=background: rgb(255 97 246);-->
[Android Studio](./docs/android-studio.md)<!--rehype:style=background: rgb(16 185 129);-->
[Blender](./docs/blender.md)<!--rehype:style=background: rgb(16 185 129);-->
[Firefox](./docs/firefox.md)<!--rehype:style=background: rgb(253 53 76);-->
[Finder](./docs/finder.md)<!--rehype:style=background: rgb(253 53 76);&class=tag&data-lang=macOS-->
[Figma](./docs/figma.md)<!--rehype:style=background: rgb(147 90 238);-->
[Gmail](./docs/gmail.md)<!--rehype:style=background: rgb(234 67 54);-->
[Gitlab](./docs/gitlab.md)<!--rehype:style=background: rgb(226 67 41);-->
[Google Chrome](./docs/google-chrome.md)<!--rehype:style=background: rgb(29 116 232);-->
[IntelliJ IDEA](./docs/intelli-j-idea.md)<!--rehype:style=background: rgb(223 148 0);&class=tag&data-lang=Java-->
[PyCharm](./docs/pycharm.md)<!--rehype:style=background: rgb(36 215 137);&class=tag&data-lang=Python-->
[PhpStorm](./docs/phpstorm.md)<!--rehype:style=\-\-bg\-opacity: 0.75;background-image: linear-gradient(to left, rgba(255 106 172 / var(\-\-bg\-opacity)), rgba(183 173 255 / var(\-\-bg\-opacity)));-->
[Sketch](./docs/sketch.md)<!--rehype:style=background: rgb(223 148 0);&class=tag&data-lang=macOS-->
[Sublime Text](./docs/sublime-text.md)<!--rehype:style=background: rgb(223 148 0);-->
[VSCode](./docs/vscode.md)<!--rehype:style=background: rgb(91 163 230);-->
[Twitter](./docs/twitter.md)<!--rehype:style=background: rgb(91 163 230);-->
[WebStorm](./docs/webstorm.md)<!--rehype:style=background: rgb(32 148 220);-->
[Xcode](./docs/xcode.md)<!--rehype:style=background: rgb(24 151 233);&class=tag&data-lang=macOS-->
<!--rehype:class=home-card-->
## 其它
[Quick Reference](./docs/quickreference.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=排版说明-->
[Quick Reference](./docs/quickreference.md)<!--rehype:style=background: rgb(0 182 122);&class=tag&data-lang=排版说明-->
[Aspect Ratio](./docs/aspect-ratio.md)<!--rehype:style=background: rgb(16 185 129);-->
[ASCII Code](./docs/ascii-code.md)<!--rehype:style=background: rgb(16 185 129);-->
[Symbol Code](./docs/symbol-code.md)<!--rehype:style=background: rgb(16 185 129);-->
[Github Actions](./docs/github-actions.md)<!--rehype:style=background: rgb(121 184 255);-->
[Gitlab CI/CD](./docs/gitlab-ci.md)<!--rehype:style=background: rgb(226 67 41);&class=contributing-->
[Colors Named](./docs/colors-named.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=CSS-->
[HTTP 状态码](./docs/http-status-code.md)<!--rehype:style=background: rgb(16 185 129);-->
[HTML 字符实体](./docs/html-char.md)<!--rehype:style=background: rgb(16 185 129);&class=tag&data-lang=HTML-->
[ISO 639-1 Language Code](./docs/iso-639-1.md)<!--rehype:style=background: rgb(16 185 129);-->
[Emoji](./docs/emoji.md)<!--rehype:style=background: rgb(16 185 129);-->
[ISO-3166 国家代码](./docs/iso-3166-1.md)<!--rehype:style=background: rgb(16 185 129);-->
[ISO-639 语言代码](./docs/iso-639-1.md)<!--rehype:style=background: rgb(16 185 129);-->
[Emoji](./docs/emoji.md)<!--rehype:style=\-\-bg\-opacity: 0.75;background-image: linear-gradient(to left, rgba(74 222 128 / var(\-\-bg\-opacity)), rgba(59 130 246 / var(\-\-bg\-opacity)));-->
[MIME types](./docs/mime.md)<!--rehype:style=background: rgb(16 185 129);-->
[Resolutions](./docs/resolutions.md)<!--rehype:style=background: rgb(16 185 129);-->
<!--rehype:class=home-card-->
@ -204,7 +256,7 @@ Quick Reference
上面的列表没有看到你想要的? 您是否正在寻找一些备忘清单或参考资料,或者您有一些片段备忘清单要分享,这是一个最好的机会!
[`请求添加备忘单(速查表)`](https://github.com/jaywcjlove/reference/issues/new?title=【备忘清单】+请求%3A+&labels=request&template=cheatsheet-request.md&assignee=jaywcjlove)<!--rehype:class=home-button&style=margin-top:2rem&target=__blank-->
[`请求添加备忘单(速查表)`](https://github.com/jaywcjlove/reference/issues/new?title=【备忘清单】+请求%3A+&labels=request&template=cheatsheet-request.md&assignee=)<!--rehype:class=home-button&style=margin-top:2rem&target=__blank-->
[`我有一张备忘单(速查表)`](https://github.com/jaywcjlove/reference/blob/main/CONTRIBUTING.md)<!--rehype:class=home-button text-grey&target=__blank-->
<!--rehype:style=margin-top:3rem-->
@ -214,180 +266,151 @@ Quick Reference
请参阅 [Quick Reference](./docs/quickreference.md) 了解如何开始。一如既往,感谢我们出色的[贡献者](https://github.com/jaywcjlove/reference/graphs/contributors)
<!--rehype:style=padding-bottom:1rem;-->
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调">
<img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调™"/>
</a>
<a href="https://github.com/fwqaaq" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
</a>
<a href="https://github.com/mofelee" title="mofelee">
<img src="https://avatars.githubusercontent.com/u/5069410?v=4" width="42;" alt="mofelee"/>
</a>
<a href="https://github.com/JeffersonHuang" title="Jefferson">
<img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson"/>
</a>
<a href="https://github.com/Alex-Programer" title="Alex">
<img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/>
</a>
<a href="https://github.com/expoli" title="expoli">
<img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/>
</a>
<a href="https://github.com/heStudio-Network" title="醉、倾城">
<img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="醉、倾城"/>
</a>
<a href="https://github.com/sjh42" title="42:p">
<img src="https://avatars.githubusercontent.com/u/34529275?v=4" width="42;" alt="42:p"/>
</a>
<a href="https://github.com/LufsX" title="LufsX">
<img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/>
</a>
<a href="https://github.com/1834423612" title="kjch">
<img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/>
</a>
<a href="https://github.com/partoneplay" title="partoneplay">
<img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/>
</a>
<a href="https://github.com/ryanhex53" title="ryanhex53">
<img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/>
</a>
<a href="https://github.com/eryajf" title="二丫讲梵">
<img src="https://avatars.githubusercontent.com/u/33259379?v=4" width="42;" alt="二丫讲梵"/>
</a>
<a href="https://github.com/catcto" title="喵仙人">
<img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="喵仙人"/>
</a>
<a href="https://github.com/13812700839" title="花殇">
<img src="https://avatars.githubusercontent.com/u/58072506?v=4" width="42;" alt="花殇"/>
</a>
<a href="https://github.com/Smartdousha" title="dousha">
<img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="dousha"/>
</a>
<a href="https://github.com/Brid9e" title="Brid9e">
<img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Brid9e"/>
</a>
<a href="https://github.com/ch3nnn" title="Ch3nnn">
<img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="Ch3nnn"/>
</a>
<a href="https://github.com/CharlotteZeng" title="hanchZ">
<img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="hanchZ"/>
</a>
<a href="https://github.com/DaiNing810" title="DaiN">
<img src="https://avatars.githubusercontent.com/u/94962339?v=4" width="42;" alt="DaiN"/>
</a>
<a href="https://github.com/demigodliu" title="DemigodLiu">
<img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/>
</a>
<a href="https://github.com/eeeeeio" title="EEEEE">
<img src="https://avatars.githubusercontent.com/u/20723545?v=4" width="42;" alt="EEEEE"/>
</a>
<a href="https://github.com/jasnzhuang" title="Jason Zhuang">
<img src="https://avatars.githubusercontent.com/u/16612921?v=4" width="42;" alt="Jason Zhuang"/>
</a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel">
<img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/>
</a>
<a href="https://github.com/LightQuanta" title="Light_Quanta">
<img src="https://avatars.githubusercontent.com/u/18213217?v=4" width="42;" alt="Light_Quanta"/>
</a>
<a href="https://github.com/Lihuagreek" title="Lihuagreek">
<img src="https://avatars.githubusercontent.com/u/51040740?v=4" width="42;" alt="Lihuagreek"/>
</a>
<a href="https://github.com/likeshop-github" title="LikeShop技术社区">
<img src="https://avatars.githubusercontent.com/u/77180968?v=4" width="42;" alt="LikeShop技术社区"/>
</a>
<a href="https://github.com/mariuszmichalowski" title="Mariusz Michalowski">
<img src="https://avatars.githubusercontent.com/u/92091891?v=4" width="42;" alt="Mariusz Michalowski"/>
</a>
<a href="https://github.com/HanaNoryu" title="Noryu">
<img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/>
</a>
<a href="https://github.com/PipecraftNet" title="Pipecraft">
<img src="https://avatars.githubusercontent.com/u/88728670?v=4" width="42;" alt="Pipecraft"/>
</a>
<a href="https://github.com/QDelta" title="QDelta">
<img src="https://avatars.githubusercontent.com/u/60222316?v=4" width="42;" alt="QDelta"/>
</a>
<a href="https://github.com/whb1998a" title="WHB">
<img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="WHB"/>
</a>
<a href="https://github.com/hi-liyan" title="Yan Li">
<img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="Yan Li"/>
</a>
<a href="https://github.com/y52y" title="Zyj">
<img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/>
</a>
<a href="https://github.com/chyok" title="chyok">
<img src="https://avatars.githubusercontent.com/u/32629225?v=4" width="42;" alt="chyok"/>
</a>
<a href="https://github.com/gaoxiaoduan" title="coderduan">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="coderduan"/>
</a>
<a href="https://github.com/cool9203" title="cool9203">
<img src="https://avatars.githubusercontent.com/u/29609607?v=4" width="42;" alt="cool9203"/>
</a>
<a href="https://github.com/godotc" title="godotc">
<img src="https://avatars.githubusercontent.com/u/79260851?v=4" width="42;" alt="godotc"/>
</a>
<a href="https://github.com/greyhao" title="greyhao">
<img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/>
</a>
<a href="https://github.com/hua03" title="hua03">
<img src="https://avatars.githubusercontent.com/u/19561959?v=4" width="42;" alt="hua03"/>
</a>
<a href="https://github.com/hweining" title="hweining">
<img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/>
</a>
<a href="https://github.com/joyfully-W" title="joyfully-W">
<img src="https://avatars.githubusercontent.com/u/32212924?v=4" width="42;" alt="joyfully-W"/>
</a>
<a href="https://github.com/k983551019" title="k983551019">
<img src="https://avatars.githubusercontent.com/u/48147837?v=4" width="42;" alt="k983551019"/>
</a>
<a href="https://github.com/kdxcxs" title="kdxcxs">
<img src="https://avatars.githubusercontent.com/u/18746192?v=4" width="42;" alt="kdxcxs"/>
</a>
<a href="https://github.com/genius-kim" title="kim">
<img src="https://avatars.githubusercontent.com/u/119488561?v=4" width="42;" alt="kim"/>
</a>
<a href="https://github.com/larry-xue" title="larry">
<img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/>
</a>
<a href="https://github.com/liliangrong777" title="liliangrong777">
<img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/>
</a>
<a href="https://github.com/lykjjj" title="lykjjj">
<img src="https://avatars.githubusercontent.com/u/58510058?v=4" width="42;" alt="lykjjj"/>
</a>
<a href="https://github.com/mancuoj" title="mancuoj">
<img src="https://avatars.githubusercontent.com/u/45707684?v=4" width="42;" alt="mancuoj"/>
</a>
<a href="https://github.com/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/phygerr" title="phygerr">
<img src="https://avatars.githubusercontent.com/u/42068889?v=4" width="42;" alt="phygerr"/>
</a>
<a href="https://github.com/Mowmowj" title="shelton">
<img src="https://avatars.githubusercontent.com/u/24759562?v=4" width="42;" alt="shelton"/>
</a>
<a href="https://github.com/wjjwkwindy" title="wjjwkwindy">
<img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="wjjwkwindy"/>
</a>
<a href="https://github.com/xing133" title="xing133">
<img src="https://avatars.githubusercontent.com/u/5336490?v=4" width="42;" alt="xing133"/>
</a>
<a href="https://github.com/zxx-457" title="zxx-457">
<img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx-457"/>
</a>
<a href="https://github.com/lvzhenbo" title="吕振波">
<img src="https://avatars.githubusercontent.com/u/32427677?v=4" width="42;" alt="吕振波"/>
</a>
<a href="https://github.com/qyl27" title="秋雨落">
<img src="https://avatars.githubusercontent.com/u/53731501?v=4" width="42;" alt="秋雨落"/>
</a>
<a href="https://github.com/lisheng741" title="芦荟柚子茶">
<img src="https://avatars.githubusercontent.com/u/53617305?v=4" width="42;" alt="芦荟柚子茶"/>
</a><!--GAMFC-END-->
<!--GAMFC--><a href="https://github.com/jaywcjlove" title="小弟调调"><img src="https://avatars.githubusercontent.com/u/1680273?v=4" width="42;" alt="小弟调调"/></a>
<a href="https://github.com/fwqaaq" title="fwqaaq"><img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fwqaaq"/></a>
<a href="https://github.com/mofelee" title="mofelee"><img src="https://avatars.githubusercontent.com/u/5069410?v=4" width="42;" alt="mofelee"/></a>
<a href="https://github.com/Country-If" title="Maylon"><img src="https://avatars.githubusercontent.com/u/62837275?v=4" width="42;" alt="Maylon"/></a>
<a href="https://github.com/JeffersonHuang" title="Jefferson Huang"><img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson Huang"/></a>
<a href="https://github.com/LesterChang0987" title="Steve Hartwell"><img src="https://avatars.githubusercontent.com/u/114913921?v=4" width="42;" alt="Steve Hartwell"/></a>
<a href="https://github.com/nangongchengfeng" title="南宫乘风"><img src="https://avatars.githubusercontent.com/u/46562911?v=4" width="42;" alt="南宫乘风"/></a>
<a href="https://github.com/aixcyi" title="砹小翼"><img src="https://avatars.githubusercontent.com/u/75880483?v=4" width="42;" alt="砹小翼"/></a>
<a href="https://github.com/Alex20180512" title="Alex"><img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/></a>
<a href="https://github.com/undefined-hestudio" title="undefined"><img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="undefined"/></a>
<a href="https://github.com/eryajf" title="二丫讲梵"><img src="https://avatars.githubusercontent.com/u/33259379?v=4" width="42;" alt="二丫讲梵"/></a>
<a href="https://github.com/k23223" title="k23223"><img src="https://avatars.githubusercontent.com/u/57606136?v=4" width="42;" alt="k23223"/></a>
<a href="https://github.com/expoli" title="expoli"><img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/></a>
<a href="https://github.com/mailbaoer" title="baoer"><img src="https://avatars.githubusercontent.com/u/5282978?v=4" width="42;" alt="baoer"/></a>
<a href="https://github.com/LufsX" title="LufsX"><img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/></a>
<a href="https://github.com/Darkiiiiiice" title="Darkiiiiiice"><img src="https://avatars.githubusercontent.com/u/3959555?v=4" width="42;" alt="Darkiiiiiice"/></a>
<a href="https://github.com/genius-kim" title="Kim同学"><img src="https://avatars.githubusercontent.com/u/119488561?v=4" width="42;" alt="Kim同学"/></a>
<a href="https://github.com/qyl27" title="秋 雨落"><img src="https://avatars.githubusercontent.com/u/53731501?v=4" width="42;" alt="秋 雨落"/></a>
<a href="https://github.com/MackDing" title="Blossom"><img src="https://avatars.githubusercontent.com/u/19878893?v=4" width="42;" alt="Blossom"/></a>
<a href="https://github.com/1250422131" title="萌新杰少"><img src="https://avatars.githubusercontent.com/u/52126790?v=4" width="42;" alt="萌新杰少"/></a>
<a href="https://github.com/zhangymPerson" title="zhangym"><img src="https://avatars.githubusercontent.com/u/40376181?v=4" width="42;" alt="zhangym"/></a>
<a href="https://github.com/chaos-cn" title="chaos"><img src="https://avatars.githubusercontent.com/u/71205599?v=4" width="42;" alt="chaos"/></a>
<a href="https://github.com/xia0ne" title="YuRuiH"><img src="https://avatars.githubusercontent.com/u/32591223?v=4" width="42;" alt="YuRuiH"/></a>
<a href="https://github.com/Willxup" title="Willxup"><img src="https://avatars.githubusercontent.com/u/51990395?v=4" width="42;" alt="Willxup"/></a>
<a href="https://github.com/LiuYuan-SHU" title="Yuan Liu"><img src="https://avatars.githubusercontent.com/u/96400967?v=4" width="42;" alt="Yuan Liu"/></a>
<a href="https://github.com/lvelvee" title="Lve Lvee"><img src="https://avatars.githubusercontent.com/u/25785753?v=4" width="42;" alt="Lve Lvee"/></a>
<a href="https://github.com/wsypower" title="魏"><img src="https://avatars.githubusercontent.com/u/31298317?v=4" width="42;" alt="魏"/></a>
<a href="https://github.com/itldg" title="老大哥"><img src="https://avatars.githubusercontent.com/u/13432299?v=4" width="42;" alt="老大哥"/></a>
<a href="https://github.com/catcto" title="小武Alan"><img src="https://avatars.githubusercontent.com/u/5467932?v=4" width="42;" alt="小武Alan"/></a>
<a href="https://github.com/ryanhex53" title="ryanhex53"><img src="https://avatars.githubusercontent.com/u/360426?v=4" width="42;" alt="ryanhex53"/></a>
<a href="https://github.com/partoneplay" title="partoneplay"><img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/></a>
<a href="https://github.com/pangxiaoli" title="pangxiaoli"><img src="https://avatars.githubusercontent.com/u/54620953?v=4" width="42;" alt="pangxiaoli"/></a>
<a href="https://github.com/mancuoj" title="mancuoj"><img src="https://avatars.githubusercontent.com/u/45707684?v=4" width="42;" alt="mancuoj"/></a>
<a href="https://github.com/webeautiful" title="Albert"><img src="https://avatars.githubusercontent.com/u/3364316?v=4" width="42;" alt="Albert"/></a>
<a href="https://github.com/dadatom" title="Da Da"><img src="https://avatars.githubusercontent.com/u/33886943?v=4" width="42;" alt="Da Da"/></a>
<a href="https://github.com/ljq" title="Jack Liu"><img src="https://avatars.githubusercontent.com/u/7278286?v=4" width="42;" alt="Jack Liu"/></a>
<a href="https://github.com/jasnzhuang" title="Jason Zhuang"><img src="https://avatars.githubusercontent.com/u/16612921?v=4" width="42;" alt="Jason Zhuang"/></a>
<a href="https://github.com/Jovins" title="Jovins"><img src="https://avatars.githubusercontent.com/u/17738992?v=4" width="42;" alt="Jovins"/></a>
<a href="https://github.com/SuperDiscovery" title="SuperDiscovery"><img src="https://avatars.githubusercontent.com/u/49646863?v=4" width="42;" alt="SuperDiscovery"/></a>
<a href="https://github.com/XYZscratcher" title="XYZ"><img src="https://avatars.githubusercontent.com/u/108533817?v=4" width="42;" alt="XYZ"/></a>
<a href="https://github.com/findnr" title="findnr"><img src="https://avatars.githubusercontent.com/u/3909023?v=4" width="42;" alt="findnr"/></a>
<a href="https://github.com/greyhao" title="greyhao"><img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/></a>
<a href="https://github.com/1834423612" title="kjch"><img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/></a>
<a href="https://github.com/sunny0826" title="Xudong Guo"><img src="https://avatars.githubusercontent.com/u/24563928?v=4" width="42;" alt="Xudong Guo"/></a>
<a href="https://github.com/gzttcydxx" title="gzttcydxx"><img src="https://avatars.githubusercontent.com/u/50025185?v=4" width="42;" alt="gzttcydxx"/></a>
<a href="https://github.com/hua03" title="hua03"><img src="https://avatars.githubusercontent.com/u/19561959?v=4" width="42;" alt="hua03"/></a>
<a href="https://github.com/yanxuplay" title="hupilan"><img src="https://avatars.githubusercontent.com/u/69749541?v=4" width="42;" alt="hupilan"/></a>
<a href="https://github.com/hweining" title="hweining"><img src="https://avatars.githubusercontent.com/u/8973985?v=4" width="42;" alt="hweining"/></a>
<a href="https://github.com/infanx" title="infanx"><img src="https://avatars.githubusercontent.com/u/65985757?v=4" width="42;" alt="infanx"/></a>
<a href="https://github.com/auroraslot" title="irony"><img src="https://avatars.githubusercontent.com/u/48817882?v=4" width="42;" alt="irony"/></a>
<a href="https://github.com/jlchen5" title="jlchen5"><img src="https://avatars.githubusercontent.com/u/61578993?v=4" width="42;" alt="jlchen5"/></a>
<a href="https://github.com/joyfully-W" title="joyfully-W"><img src="https://avatars.githubusercontent.com/u/32212924?v=4" width="42;" alt="joyfully-W"/></a>
<a href="https://github.com/jqzhao7" title="jqzhao"><img src="https://avatars.githubusercontent.com/u/54694535?v=4" width="42;" alt="jqzhao"/></a>
<a href="https://github.com/jussker" title="jussker"><img src="https://avatars.githubusercontent.com/u/33953356?v=4" width="42;" alt="jussker"/></a>
<a href="https://github.com/k983551019" title="k983551019"><img src="https://avatars.githubusercontent.com/u/48147837?v=4" width="42;" alt="k983551019"/></a>
<a href="https://github.com/Zeng-qh" title="都一样"><img src="https://avatars.githubusercontent.com/u/40046415?v=4" width="42;" alt="都一样"/></a>
<a href="https://github.com/nodjoy" title="gowshwah"><img src="https://avatars.githubusercontent.com/u/145280043?v=4" width="42;" alt="gowshwah"/></a>
<a href="https://github.com/godotc" title="godot42"><img src="https://avatars.githubusercontent.com/u/79260851?v=4" width="42;" alt="godot42"/></a>
<a href="https://github.com/gi-b716" title="Gavin"><img src="https://avatars.githubusercontent.com/u/78394473?v=4" width="42;" alt="Gavin"/></a>
<a href="https://github.com/fjqz177" title="fjqz177"><img src="https://avatars.githubusercontent.com/u/83070583?v=4" width="42;" alt="fjqz177"/></a>
<a href="https://github.com/fakevn" title="fakevn"><img src="https://avatars.githubusercontent.com/u/11464386?v=4" width="42;" alt="fakevn"/></a>
<a href="https://github.com/cool9203" title="cool9203"><img src="https://avatars.githubusercontent.com/u/29609607?v=4" width="42;" alt="cool9203"/></a>
<a href="https://github.com/gaoxiaoduan" title="CoderDuan"><img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="CoderDuan"/></a>
<a href="https://github.com/lijc210" title="cizai"><img src="https://avatars.githubusercontent.com/u/10651081?v=4" width="42;" alt="cizai"/></a>
<a href="https://github.com/chyok" title="chyok"><img src="https://avatars.githubusercontent.com/u/32629225?v=4" width="42;" alt="chyok"/></a>
<a href="https://github.com/zlfyuan" title="bgbgPang"><img src="https://avatars.githubusercontent.com/u/19658018?v=4" width="42;" alt="bgbgPang"/></a>
<a href="https://github.com/Lmmmmmm-bb" title="_lmmmmmm"><img src="https://avatars.githubusercontent.com/u/54026110?v=4" width="42;" alt="_lmmmmmm"/></a>
<a href="https://github.com/y52y" title="Zyj"><img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/></a>
<a href="https://github.com/Leaderzhangyi" title="ZinkCas"><img src="https://avatars.githubusercontent.com/u/46915666?v=4" width="42;" alt="ZinkCas"/></a>
<a href="https://github.com/binscor" title="Zheng Nai Bin"><img src="https://avatars.githubusercontent.com/u/37325821?v=4" width="42;" alt="Zheng Nai Bin"/></a>
<a href="https://github.com/qwxingzhe" title="行者"><img src="https://avatars.githubusercontent.com/u/7071651?v=4" width="42;" alt="行者"/></a>
<a href="https://github.com/HanaChan233" title="花开花落"><img src="https://avatars.githubusercontent.com/u/75212820?v=4" width="42;" alt="花开花落"/></a>
<a href="https://github.com/lisheng741" title="芦荟柚子茶"><img src="https://avatars.githubusercontent.com/u/53617305?v=4" width="42;" alt="芦荟柚子茶"/></a>
<a href="https://github.com/ZIDOUZI" title="ZIDOUZI"><img src="https://avatars.githubusercontent.com/u/53157536?v=4" width="42;" alt="ZIDOUZI"/></a>
<a href="https://github.com/LuckyJie12" title="夜未央"><img src="https://avatars.githubusercontent.com/u/102901105?v=4" width="42;" alt="夜未央"/></a>
<a href="https://github.com/lvzhenbo" title="吕振波"><img src="https://avatars.githubusercontent.com/u/32427677?v=4" width="42;" alt="吕振波"/></a>
<a href="https://github.com/zxx457" title="zxx457"><img src="https://avatars.githubusercontent.com/u/114141362?v=4" width="42;" alt="zxx457"/></a>
<a href="https://github.com/zhouhw0306" title="zhouhw0306"><img src="https://avatars.githubusercontent.com/u/82752681?v=4" width="42;" alt="zhouhw0306"/></a>
<a href="https://github.com/hiyms" title="yms"><img src="https://avatars.githubusercontent.com/u/84654050?v=4" width="42;" alt="yms"/></a>
<a href="https://github.com/xing133" title="xing133"><img src="https://avatars.githubusercontent.com/u/5336490?v=4" width="42;" alt="xing133"/></a>
<a href="https://github.com/wjjwkwindy" title="Hudson Alen"><img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="Hudson Alen"/></a>
<a href="https://github.com/wannima66" title="tmen"><img src="https://avatars.githubusercontent.com/u/26410255?v=4" width="42;" alt="tmen"/></a>
<a href="https://github.com/swift-fs" title="swift"><img src="https://avatars.githubusercontent.com/u/77133741?v=4" width="42;" alt="swift"/></a>
<a href="https://github.com/suyangzuo" title="suyangzuo"><img src="https://avatars.githubusercontent.com/u/50766353?v=4" width="42;" alt="suyangzuo"/></a>
<a href="https://github.com/Mowmowj" title="nexo"><img src="https://avatars.githubusercontent.com/u/24759562?v=4" width="42;" alt="nexo"/></a>
<a href="https://github.com/phygerr" title="phygerr"><img src="https://avatars.githubusercontent.com/u/42068889?v=4" width="42;" alt="phygerr"/></a>
<a href="https://github.com/onewesong" title="onewesong"><img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/></a>
<a href="https://github.com/miclon-dev" title="miclon-dev"><img src="https://avatars.githubusercontent.com/u/111753685?v=4" width="42;" alt="miclon-dev"/></a>
<a href="https://github.com/lykjjj" title="lykjjj"><img src="https://avatars.githubusercontent.com/u/58510058?v=4" width="42;" alt="lykjjj"/></a>
<a href="https://github.com/lozhu20" title="lozhu"><img src="https://avatars.githubusercontent.com/u/44923922?v=4" width="42;" alt="lozhu"/></a>
<a href="https://github.com/liliangrong777" title="liliangrong777"><img src="https://avatars.githubusercontent.com/u/58727146?v=4" width="42;" alt="liliangrong777"/></a>
<a href="https://github.com/larry-xue" title="larry"><img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/></a>
<a href="https://github.com/kubeme" title="kubernetes for me"><img src="https://avatars.githubusercontent.com/u/16346220?v=4" width="42;" alt="kubernetes for me"/></a>
<a href="https://github.com/kdxcxs" title="kdxcxs"><img src="https://avatars.githubusercontent.com/u/18746192?v=4" width="42;" alt="kdxcxs"/></a>
<a href="https://github.com/zhu0629" title="zhucong"><img src="https://avatars.githubusercontent.com/u/13188450?v=4" width="42;" alt="zhucong"/></a>
<a href="https://github.com/likeshop-github" title="likeshop技术社区"><img src="https://avatars.githubusercontent.com/u/77180968?v=4" width="42;" alt="likeshop技术社区"/></a>
<a href="https://github.com/Lihuagreek" title="Lihuagreek"><img src="https://avatars.githubusercontent.com/u/51040740?v=4" width="42;" alt="Lihuagreek"/></a>
<a href="https://github.com/LightQuanta" title="Light_Quanta"><img src="https://avatars.githubusercontent.com/u/18213217?v=4" width="42;" alt="Light_Quanta"/></a>
<a href="https://github.com/JetSquirrel" title="JetSquirrel"><img src="https://avatars.githubusercontent.com/u/20291255?v=4" width="42;" alt="JetSquirrel"/></a>
<a href="https://github.com/jeremyjone" title="Jeremy Jone"><img src="https://avatars.githubusercontent.com/u/37676231?v=4" width="42;" alt="Jeremy Jone"/></a>
<a href="https://github.com/JavaZeroo" title="JavaZero"><img src="https://avatars.githubusercontent.com/u/71128095?v=4" width="42;" alt="JavaZero"/></a>
<a href="https://github.com/Ding-Kyoma" title="HooinKyoma"><img src="https://avatars.githubusercontent.com/u/44542198?v=4" width="42;" alt="HooinKyoma"/></a>
<a href="https://github.com/gongyeheyu" title="GONGYE Heyu"><img src="https://avatars.githubusercontent.com/u/85177605?v=4" width="42;" alt="GONGYE Heyu"/></a>
<a href="https://github.com/Fuku-L" title="Fuku-L"><img src="https://avatars.githubusercontent.com/u/38535911?v=4" width="42;" alt="Fuku-L"/></a>
<a href="https://github.com/sirius-fan" title="Fan"><img src="https://avatars.githubusercontent.com/u/25720015?v=4" width="42;" alt="Fan"/></a>
<a href="https://github.com/eeeeeio" title="EEEEE"><img src="https://avatars.githubusercontent.com/u/20723545?v=4" width="42;" alt="EEEEE"/></a>
<a href="https://github.com/demigodliu" title="DemigodLiu"><img src="https://avatars.githubusercontent.com/u/30372735?v=4" width="42;" alt="DemigodLiu"/></a>
<a href="https://github.com/dasferco" title="Dasferco"><img src="https://avatars.githubusercontent.com/u/92622404?v=4" width="42;" alt="Dasferco"/></a>
<a href="https://github.com/Damao2250" title="Damao"><img src="https://avatars.githubusercontent.com/u/19251992?v=4" width="42;" alt="Damao"/></a>
<a href="https://github.com/DEEMO101" title="DEEMO101"><img src="https://avatars.githubusercontent.com/u/35123091?v=4" width="42;" alt="DEEMO101"/></a>
<a href="https://github.com/ohto-ai" title="Choo"><img src="https://avatars.githubusercontent.com/u/46275725?v=4" width="42;" alt="Choo"/></a>
<a href="https://github.com/CharlotteZeng" title="hanchZ"><img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="hanchZ"/></a>
<a href="https://github.com/ch3nnn" title="chentong"><img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="chentong"/></a>
<a href="https://github.com/Brid9e" title="Joe"><img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Joe"/></a>
<a href="https://github.com/BobH-Official" title="BobH"><img src="https://avatars.githubusercontent.com/u/29333228?v=4" width="42;" alt="BobH"/></a>
<a href="https://github.com/Blanket58" title="Blanket58"><img src="https://avatars.githubusercontent.com/u/39766189?v=4" width="42;" alt="Blanket58"/></a>
<a href="https://github.com/BlacAmDK" title="BlacAmDK"><img src="https://avatars.githubusercontent.com/u/10971397?v=4" width="42;" alt="BlacAmDK"/></a>
<a href="https://github.com/gitchenze" title="Aze"><img src="https://avatars.githubusercontent.com/u/13357869?v=4" width="42;" alt="Aze"/></a>
<a href="https://github.com/dousha0w0" title="dousha0w0"><img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="dousha0w0"/></a>
<a href="https://github.com/13812700839" title="花殇"><img src="https://avatars.githubusercontent.com/u/58072506?v=4" width="42;" alt="花殇"/></a>
<a href="https://github.com/yikuaibro" title="yikuaibro"><img src="https://avatars.githubusercontent.com/u/44493045?v=4" width="42;" alt="yikuaibro"/></a>
<a href="https://github.com/dfshizhiqiang" title="Zech"><img src="https://avatars.githubusercontent.com/u/7030019?v=4" width="42;" alt="Zech"/></a>
<a href="https://github.com/Yo-gurts" title="Yogurt"><img src="https://avatars.githubusercontent.com/u/44612841?v=4" width="42;" alt="Yogurt"/></a>
<a href="https://github.com/hi-liyan" title="李李李"><img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="李李李"/></a>
<a href="https://github.com/BATTLEHAWK00" title="While True: learn()"><img src="https://avatars.githubusercontent.com/u/45313304?v=4" width="42;" alt="While True: learn()"/></a>
<a href="https://github.com/dwgeneral" title="Happy-Engineer"><img src="https://avatars.githubusercontent.com/u/8654993?v=4" width="42;" alt="Happy-Engineer"/></a>
<a href="https://github.com/whb1998a" title="Wafer"><img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="Wafer"/></a>
<a href="https://github.com/YLee9527" title="Terry Young"><img src="https://avatars.githubusercontent.com/u/18697332?v=4" width="42;" alt="Terry Young"/></a>
<a href="https://github.com/TRDSCSH" title="TRDSCSH"><img src="https://avatars.githubusercontent.com/u/125717891?v=4" width="42;" alt="TRDSCSH"/></a>
<a href="https://github.com/Xiwin" title="Xiwin"><img src="https://avatars.githubusercontent.com/u/107191230?v=4" width="42;" alt="Xiwin"/></a>
<a href="https://github.com/DataEraserC" title="Sacabambaspis"><img src="https://avatars.githubusercontent.com/u/102341238?v=4" width="42;" alt="Sacabambaspis"/></a>
<a href="https://github.com/qinxiongzhou" title="Ryan Zhou"><img src="https://avatars.githubusercontent.com/u/33239096?v=4" width="42;" alt="Ryan Zhou"/></a>
<a href="https://github.com/RivailleF" title="RivailleF"><img src="https://avatars.githubusercontent.com/u/93083015?v=4" width="42;" alt="RivailleF"/></a>
<a href="https://github.com/QDelta" title="QDelta"><img src="https://avatars.githubusercontent.com/u/60222316?v=4" width="42;" alt="QDelta"/></a>
<a href="https://github.com/sevenleave" title="Poirot Hercule"><img src="https://avatars.githubusercontent.com/u/24411140?v=4" width="42;" alt="Poirot Hercule"/></a>
<a href="https://github.com/PipecraftNet" title="Pipecraft"><img src="https://avatars.githubusercontent.com/u/88728670?v=4" width="42;" alt="Pipecraft"/></a>
<a href="https://github.com/Perzch" title="Perzch"><img src="https://avatars.githubusercontent.com/u/67987641?v=4" width="42;" alt="Perzch"/></a>
<a href="https://github.com/PILIHU2022" title="PILIHU2022"><img src="https://avatars.githubusercontent.com/u/100511118?v=4" width="42;" alt="PILIHU2022"/></a>
<a href="https://github.com/HanaNoryu" title="Noryu"><img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/></a>
<a href="https://github.com/NianwenDan" title="NianwenDan"><img src="https://avatars.githubusercontent.com/u/74407127?v=4" width="42;" alt="NianwenDan"/></a>
<a href="https://github.com/mo3et" title="Monet Lee"><img src="https://avatars.githubusercontent.com/u/34803812?v=4" width="42;" alt="Monet Lee"/></a>
<a href="https://github.com/Moeyuuko" title="Moeyuuko"><img src="https://avatars.githubusercontent.com/u/14266681?v=4" width="42;" alt="Moeyuuko"/></a>
<a href="https://github.com/malcolmyu" title="Minghao Yu"><img src="https://avatars.githubusercontent.com/u/3203962?v=4" width="42;" alt="Minghao Yu"/></a>
<a href="https://github.com/mariuszmichalowski" title="Mariusz Michalowski"><img src="https://avatars.githubusercontent.com/u/92091891?v=4" width="42;" alt="Mariusz Michalowski"/></a>
<a href="https://github.com/isecret" title="Mao Wang"><img src="https://avatars.githubusercontent.com/u/15724152?v=4" width="42;" alt="Mao Wang"/></a><!--GAMFC-END-->
[贡献者](https://github.com/jaywcjlove/reference/graphs/contributors)列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 根据提交次数的先后顺序自动生成
<!--rehype:style=padding-top:1rem;-->
@ -395,34 +418,104 @@ Quick Reference
## 国内镜像网站
<!--rehype:wrap-style=text-align: center;max-width: 650px;margin: 0 auto;&class=home-title-reset-->
由于中国国内访问,时常打不开,你可以访问下面镜像网站。推荐自己的[镜像网站](https://github.com/jaywcjlove/reference/discussions/206#discussion-4625735)
由于中国国内访问,时常打不开,你可以访问下面镜像网站(国内打不开的不再收录)。推荐自己的[镜像网站](https://github.com/jaywcjlove/reference/discussions/206#discussion-4625735)
[dev.bi](https://dev.bi)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[server.wiki](https://ref.server.wiki)<!--rehype:target=_blank-->
[nihaosi.com](https://refs.nihaosi.com)<!--rehype:target=_blank-->
[quickref.cn](https://quickref.cn)<!--rehype:target=_blank-->
[ecdata.cn](http://ref.ecdata.cn)<!--rehype:target=_blank-->
[aibk.cn](https://quickref.aibk.cn)<!--rehype:target=_blank-->
[jgeek.cn](http://reference.jgeek.cn/)<!--rehype:target=_blank-->
[ecdata.cn](http://ref.ecdata.cn)<!--rehype:target=_blank-->
[quickref.hestudio.net](https://quickref.hestudio.net)<!--rehype:target=_blank&class=contributing&data-info=👆整点自动同步-->
[qiubit.cc](http://ref.qiubit.cc)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[guoxudong.io](https://reference.guoxudong.io/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[moeyuuko.com](https://ref.moeyuuko.com/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[defense.ink](https://ref.defense.ink)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[terryyoung.cn](http://ref.terryyoung.cn/)<!--rehype:target=_blank&class=contributing&data-info=👆每周一三五自动同步-->
[quickref.binscor.top](https://quickref.binscor.top)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[srebro.cn](https://ref.srebro.cn)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[haah.net](https://ref.haah.net)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[xiechengqi.top](https://ref.xiechengqi.top)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[ownit.top](https://memo.ownit.top)<!--rehype:target=_blank&data-info=👆每十分钟自动同步-->
[666666.dev](https://cheat.666666.dev)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[mmoke.com](https://ref.mmoke.com)<!--rehype:target=_blank&data-info=👆每天自动同步-->
[laoleng.vip](http://bbs.laoleng.vip/reference/)<!--rehype:target=_blank-->
[liujiapeng.com](https://www.liujiapeng.com/)<!--rehype:target=_blank-->
[dbyun.net](https://www.dbyun.net/reference/index.html)<!--rehype:target=_blank-->
[dc6.fun](https://dc6.fun/reference/)<!--rehype:target=_blank-->
[if010.com](https://quickref.if010.com/)<!--rehype:target=_blank-->
[pipecraft.net](https://quickref.pipecraft.net/)<!--rehype:target=_blank&class=contributing&data-info=👆需要梯子-->
[isteed.cc](https://ref.isteed.cc/)<!--rehype:target=_blank-->
[1han.wiki](https://code.1han.wiki/)<!--rehype:target=_blank-->
[linzhe.top](https://linzhe.top/)<!--rehype:target=_blank-->
[xushanxiang.com](https://xushanxiang.com/ref/)<!--rehype:target=_blank-->
[winnerzr01.github.io](https://winnerzr01.github.io/Quick-Reference/index.html)<!--rehype:target=_blank&class=contributing&data-info=👆需要梯子-->
[isteed.cc](https://ref.isteed.cc/)<!--rehype:target=_blank-->
[quickref.hestudio.org](https://quickref.hestudio.org)<!--rehype:target=_blank&class=contributing&data-info=👆整点自动同步-->
[surcode.cn](https://ref.surcode.cn)<!--rehype:target=_blank-->
[cms.im](https://quickref.cms.im/)<!--rehype:target=_blank-->
[nuomiphp.com](https://reference.tool.nuomiphp.com/)<!--rehype:target=_blank-->
[eryajf.net](https://ref.eryajf.net/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[kjchmc.cn](https://ref.kjchmc.cn/)<!--rehype:target=_blank&class=contributing&data-info=👆实时同步,多线路-->
[likeadmin.cn](https://www.likeadmin.cn/quickref/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[eryajf.net](https://ref.eryajf.net/)<!--rehype:target=_blank-->
[kjchmc.cn](https://ref.kjchmc.cn/)<!--rehype:target=_blank-->
[aoh.cc](https://aoh.cc/)<!--rehype:target=_blank-->
[quickreference.pages.dev](https://quickreference.pages.dev/)<!--rehype:target=_blank-->
[btaw.cn](https://btaw.cn/qr)<!--rehype:target=_blank&class=contributing-->
[lzw.me](https://lzw.me/x/reference/)<!--rehype:target=_blank-->
[itcent.cn](https://code.itcent.cn/)<!--rehype:target=_blank-->
[coolxy.top](https://refer.coolxy.top)<!--rehype:target=_blank-->
[notes-bin.top](https://notes-bin.top)<!--rehype:target=_blank-->
[tangcc.cn](https://web.tangcc.cn)<!--rehype:target=_blank-->
[xadocker.cn](https://reference.xadocker.cn)<!--rehype:target=_blank-->
[trtu.com.cn](https://reference.trtu.com.cn)<!--rehype:target=_blank-->
[lzzzt.cn](https://ref.lzzzt.cn)<!--rehype:target=_blank-->
[kclouder.cn](https://www.kclouder.cn/reference)<!--rehype:target=_blank-->
[djcoder.com](https://doc.djcoder.com)<!--rehype:target=_blank-->
[qirishuzhai.com](http://qirishuzhai.com/quickref)<!--rehype:target=_blank-->
[longdada.me](https://ref.longdada.me)<!--rehype:target=_blank-->
[xalaok.top](https://ref.xalaok.top)<!--rehype:target=_blank-->
[zhangyuanqian.top](https://reference.zhangyuanqian.top/)<!--rehype:target=_blank-->
[sosloli.com](https://ref.sosloli.com)<!--rehype:target=_blank-->
[chenze.cloud](https://quick.chenze.cloud)<!--rehype:target=_blank-->
[ref.v-ta.com](https://ref.v-ta.com)<!--rehype:target=_blank-->
[hao.kim](https://ref.hao.kim)<!--rehype:target=_blank-->
[tool.sakura.vin](https://tool.sakura.vin/ref/)<!--rehype:target=_blank-->
[guoyaxue.top](https://reference.guoyaxue.top/)<!--rehype:target=_blank-->
[chenchen.site](https://img.chenchen.site/reference/)<!--rehype:target=_blank-->
[jgeek.cn](http://reference.jgeek.cn/)<!--rehype:target=_blank-->
[itzcy.com](https://reference.itzcy.com/)<!--rehype:target=_blank-->
[fifo.site](https://ref.fifo.site)<!--rehype:target=_blank-->
[gaojs.com.cn](https://study.gaojs.com.cn)<!--rehype:target=_blank-->
[15926.tech](https://ref.15926.tech)<!--rehype:target=_blank-->
[jeffjade.com](https://codehelp.jeffjade.com)<!--rehype:target=_blank-->
[okhk.net](https://ref.okhk.net)<!--rehype:target=_blank-->
[wdft.com](https://ref.wdft.com)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[xuyiyang.vip](https://reference.xuyiyang.vip/)<!--rehype:target=_blank-->
[zsccodelnc.cn](https://zsccodelnc.cn/coderef/)<!--rehype:target=_blank-->
[chanlun.pro](https://ref.chanlun.pro)<!--rehype:target=_blank-->
[likui.info](https://r.likui.info)<!--rehype:target=_blank-->
[ruiange.work](https://code.ruiange.work/)<!--rehype:target=_blank-->
[denganliang.com](https://ref.denganliang.com)<!--rehype:target=_blank-->
[coderjia.cn](https://refer.coderjia.cn)<!--rehype:target=_blank-->
[ivanz.cc](https://ref.ivanz.cc)<!--rehype:target=_blank-->
[dev6.site](https://ref.dev6.site/)<!--rehype:target=_blank-->
[mingming.dev](https://ref.mingming.dev)<!--rehype:target=_blank-->
[clf.lol](https://ref.clf.lol/)<!--rehype:target=_blank-->
[zishu.me](https://ref.zishu.me/)<!--rehype:target=_blank-->
[sucan2233.cn](http://reference.sucan2233.cn)<!--rehype:target=_blank-->
[reference-bk9.pages.dev](https://reference-bk9.pages.dev/)<!--rehype:target=_blank&class=contributing&data-info=👆自动实时同步-->
[hrzweb.xyz](https://r.hrzweb.xyz)<!--rehype:target=_blank-->
[bobh.cool](https://quickref.bobh.cool)<!--rehype:target=_blank-->
[tangwudi.com](https://doc.tangwudi.com)<!--rehype:target=_blank-->
[alomerry.com](https://ref.alomerry.com)<!--rehype:target=_blank-->
[osz.icu](https://ref.osz.icu/)<!--rehype:target=_blank-->
[ylmty.cc](https://docs.ylmty.cc)<!--rehype:target=_blank-->
[g31.top](https://ref.g31.top/)<!--rehype:target=_blank-->
[9up.dev](https://devref.9up.dev)<!--rehype:target=_blank-->
[cizai.io](https://reference.cizai.io)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[docs.willxup.top](https://docs.willxup.top)<!--rehype:target=_blank-->
[wangchunfei.com](https://ref.wangchunfei.com/)<!--rehype:target=_blank-->
[object.cool](https://r.object.cool)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[luckyits.com](https://ref.luckyits.com/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[jeremyjone.com](https://ref.jeremyjone.com/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
<!--rehype:class=home-card home-links-->
如果你有资源,可以很方便部署 web 版,这非常简单,只需要克隆 [gh-pages](https://github.com/jaywcjlove/reference/tree/gh-pages) 分支代码到你的静态服务就可以了,还可以使用 [docker](https://hub.docker.com/r/wcjiang/reference) 快捷部署 web 版。
如果你有资源,可以很方便[部署 web 版](https://github.com/jaywcjlove/reference/issues/102#issue-1451649637),这非常简单,只需要克隆 [gh-pages](https://github.com/jaywcjlove/reference/tree/gh-pages) 分支代码到你的静态服务就可以了,还可以使用 [docker](https://hub.docker.com/r/wcjiang/reference) 快捷部署 web 版。
<!--rehype:ignore:start-->
## License

3
assets/blender.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M341.333333 128C341.333333 142.506667 348.586667 157.44 362.666667 165.546667L512 256 106.666667 256C71.253333 256 42.666667 284.586667 42.666667 320 42.666667 355.413333 71.253333 384 106.666667 384L358.826667 384 85.333333 554.666667C49.493333 576 42.666667 606.72 42.666667 640 42.666667 682.666667 75.52 725.333333 128 725.333333 157.44 725.333333 187.306667 704 213.333333 682.666667L298.666667 613.546667C307.2 794.453333 456.96 938.666667 640 938.666667 828.586667 938.666667 981.333333 785.92 981.333333 597.333333 981.333333 472.746667 914.346667 362.666667 814.506667 304.213333 813.226667 303.36 811.946667 302.08 810.666667 301.226667 810.666667 301.226667 807.253333 298.666667 804.693333 297.386667 672.426667 208.213333 555.946667 158.72 407.466667 90.88 398.506667 87.04 390.826667 85.333333 384 85.333333 358.4 85.333333 341.333333 104.96 341.333333 128M640 384C757.76 384 853.333333 479.573333 853.333333 597.333333 853.333333 715.093333 757.76 810.666667 640 810.666667 522.24 810.666667 426.666667 715.093333 426.666667 597.333333 426.666667 479.573333 522.24 384 640 384M640 448C557.653333 448 490.666667 514.986667 490.666667 597.333333 490.666667 679.68 557.653333 746.666667 640 746.666667 722.346667 746.666667 789.333333 679.68 789.333333 597.333333 789.333333 514.986667 722.346667 448 640 448Z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

1
assets/chown.svg Normal file
View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em"><path d="M912.9 130.6c-26.1 4.5-52.8 6.9-80.2 6.9-115.4 0-221.1-41.9-302.6-111.2-10.6-9-26.2-9-36.8 0-81.5 69.4-187.2 111.2-302.6 111.2-27 0-53.5-2.3-79.2-6.7-17.2-2.9-32.9 10.4-33 27.9-0.2 109.1-0.4 238.1-0.4 242.5 0 471 394.5 592.7 431 603 1.8 0.5 3.6 0.5 5.4 0C550.9 994 943 873 945.5 405.7l0.4-247c0-17.6-15.8-31.1-33-28.1zM546 568.9v154.5c0 18.8-15.2 34-34 34s-34-15.2-34-34V568.9c-68.2-15.5-119.1-76.4-119.1-149.3 0-84.5 68.5-153.1 153.1-153.1S665.1 335 665.1 419.6c0 72.9-50.9 133.9-119.1 149.3z"></path></svg>

After

Width:  |  Height:  |  Size: 640 B

1
assets/conda.svg Normal file
View File

@ -0,0 +1 @@
<svg height="1em" width="1em" role="img" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Anaconda</title><path d="M12.045.033a12.181 12.182 0 00-1.361.078 17.512 17.513 0 011.813 1.433l.48.438-.465.45a15.047 15.048 0 00-1.126 1.205l-.178.215a8.527 8.527 0 01.86-.05 8.154 8.155 0 11-4.286 15.149 15.764 15.765 0 01-1.841.106h-.86a21.847 21.848 0 00.264 2.866 11.966 11.967 0 106.7-21.89zM8.17.678a12.181 12.182 0 00-2.624 1.275 15.506 15.507 0 011.813.43A18.551 18.552 0 018.17.678zM9.423.75a16.237 16.238 0 00-.995 1.998 16.15 16.152 0 011.605.66 6.98 6.98 0 01.43-.509c.234-.286.472-.559.716-.817A15.047 15.048 0 009.423.75zM4.68 2.949a14.969 14.97 0 000 2.336c.587-.065 1.196-.1 1.812-.107a16.617 16.617 0 01.48-1.748 16.48 16.481 0 00-2.292-.481zM3.62 3.5A11.938 11.938 0 001.762 5.88a17.004 17.004 0 011.877-.444A17.39 17.391 0 013.62 3.5zm4.406.287c-.143.437-.265.888-.38 1.347a8.255 8.255 0 011.67-.803c-.423-.2-.845-.38-1.29-.544zM6.3 6.216a14.051 14.052 0 00-1.555.108c.064.523.157 1.038.272 1.554a8.39 8.391 0 011.283-1.662zm-2.55.137a15.313 15.313 0 00-2.602.716h-.078v.079a17.104 17.105 0 001.267 2.544l.043.071.072-.049a16.309 16.31 0 011.734-1.083l.057-.035V8.54a16.867 16.868 0 01-.408-2.094v-.092zM.644 8.095l-.063.2A11.844 11.845 0 000 11.655v.209l.143-.152a17.706 17.707 0 011.584-1.447l.057-.043-.043-.064a16.18 16.18 0 01-1.025-1.87zm3.77 1.253l-.18.1c-.465.273-.93.573-1.375.889l-.065.05.05.064c.309.437.645.867.996 1.276l.137.165v-.208a8.176 8.176 0 01.364-2.15zM2.2 10.853l-.072.05a16.574 16.574 0 00-1.813 1.734l-.058.058.066.057a15.449 15.45 0 001.991 1.483l.072.05.043-.08a16.738 16.74 0 011.053-1.64v-.05l-.043-.05a16.99 16.99 0 01-1.19-1.54zm1.855 2.071l-.121.172a15.363 15.363 0 00-.917 1.433l-.043.072.071.043a16.61 16.61 0 001.562.766l.193.086-.086-.193a8.04 8.04 0 01-.66-2.172zm-3.976.48v.2a11.758 11.759 0 00.946 3.326l.078.186.072-.194a16.215 16.216 0 01.845-2l.057-.063-.064-.043a17.197 17.198 0 01-1.776-1.284zm2.543 1.805l-.035.08a15.764 15.765 0 00-.983 2.479v.08h.086a16.15 16.152 0 002.688.5l.072.007v-.086a17.562 17.563 0 01.164-2.056v-.065H4.55a16.266 16.266 0 01-1.849-.896zm2.544 1.169v.114a17.254 17.255 0 00-.151 1.828v.078h.931c.287 0 .624.014.946 0h.209l-.166-.129a8.011 8.011 0 01-1.64-1.834zm-3.29 2.1l.115.172a11.988 11.988 0 002.502 2.737l.157.129v-.201a22.578 22.58 0 01-.2-2.336v-.071h-.072a16.23 16.23 0 01-2.3-.387z"/></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

1
assets/ejs.svg Normal file
View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em"><path d="M384.28144981 252.31647403v112.80048696L145.20918813 474.54291854 384.28144981 587.88378965v110.53930269L21.43812835 526.28761486v-100.68590819l362.84332146-173.28714866zm246.90017394 102.1173521c0-28.82050958-26.50183907-46.93105778-47.58641778-32.52080298-21.0845787 14.41025479-21.0845787 50.63135118 0 65.04352199 21.08649586 14.41025479 47.58641778-3.70220942 47.58641778-32.52271901zm-86.46152988 88.55216697c-71.49939257-39.1951269-71.49939257-137.71758023 0-176.91462428 71.50130859-39.1951269 161.36227954 10.06609977 161.36227954 88.45827072s-89.86096981 127.65339648-161.36036352 88.45635356zm382.94102812 229.81099065c0-28.82050958-26.50183907-46.93105778-47.58641778-32.52080298-21.0845787 14.41025479-21.0845787 50.63135118 0 65.04160597 21.08649586 14.41025479 47.58641778-3.69837625 47.58641778-32.51888697zm-86.46152988 88.55216583c-71.49939257-39.1951269-71.49939257-137.71758023 0-176.91462315S1002.56187165 594.50062621 1002.56187165 672.89279602s-89.86096981 127.65339648-161.36036352 88.45635356zm-219.70656598 13.75681195 372.53958429-526.21192306H866.73755363l-378.74825784 526.21192306h133.50181432z"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

5
assets/elasticsearch.svg Normal file
View File

@ -0,0 +1,5 @@
<svg viewBox="0 0 256 288" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" height="1em" width="1em">
<path d="M0 143.82c0 12.44 1.744 24.441 4.71 35.956h175.067c19.856 0 35.955-16.1 35.955-35.956 0-19.865-16.1-35.955-35.955-35.955H4.71C1.744 119.371 0 131.38 0 143.82" fill="#343741"/>
<path d="M242.013 68.863c5.025-4.629 9.7-9.6 13.987-14.93C229.636 21.079 189.213 0 143.82 0 87 0 38.101 33.052 14.775 80.9h196.559c11.38 0 22.319-4.324 30.678-12.037" fill="#FEC514"/>
<path d="M211.334 206.742H14.774c23.336 47.839 72.226 80.9 129.045 80.9 45.393 0 85.816-21.088 112.18-53.933a136.604 136.604 0 0 0-13.987-14.94c-8.36-7.721-19.299-12.027-30.678-12.027" fill="#00BFB3"/>
</svg>

After

Width:  |  Height:  |  Size: 703 B

1
assets/elixir.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711950965872" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4680" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"><path d="M519.381333 967.722667c-164.693333 0-298.24-155.306667-298.24-346.88 0-156.928 118.314667-348.672 209.749334-465.493334 43.264-55.296 125.013333-99.072 125.013333-99.072s-41.898667 223.530667 71.808 312.277334c100.949333 78.805333 175.189333 181.333333 175.189333 271.488 0 180.565333-118.784 327.68-283.52 327.68z" fill="currentColor" p-id="4681"></path></svg>

After

Width:  |  Height:  |  Size: 694 B

1
assets/es6.svg Normal file
View File

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em"><path d="M821.375 500.75c-16.875-11.25-33.75-16.875-56.25-11.25000001-22.50000001 0-33.75 11.25-45 28.12500001-11.25 16.875-11.25 33.75-11.25 56.25s5.625 33.75 22.5 50.62499999c11.25 11.25 28.125 22.50000001 50.625 22.50000001s39.375-5.625 50.625-22.50000001c11.25-11.25 16.875-33.75 16.87500001-61.87499999 0-33.75-5.625-50.625-28.12500001-61.875z"></path><path d="M62 62v900h900V62H62zm292.50000001 618.75H140.75V326.375H343.25v39.375H191.375v106.875h140.625V512H191.375v123.75h163.12500001v45zm230.62499999-22.5c-16.875 16.875-45 22.50000001-78.75 22.5-33.75 0-61.875-11.25-78.75-28.125-22.50000001-16.875-28.125-39.375-28.12500001-67.5V568.25h45v11.25000001c0 22.50000001 5.625 33.75 16.87500001 45 11.25 11.25 28.125 16.875 45 16.87499999 22.50000001 0 39.375-5.625 50.625-16.87499999 5.625-11.25 11.25-22.50000001 11.25-39.37500001 0-11.25-5.625-28.125-16.875-39.375-11.25-11.25-28.125-22.50000001-50.625-28.125-33.75-11.25-56.25-28.125-73.125-39.375-16.875-16.875-22.50000001-39.375-22.5-56.25 0-28.125 11.25-50.625 28.125-67.50000001 22.50000001-22.50000001 45-28.125 73.125-28.12499999 33.75 0 61.875 11.25 78.75 33.75 11.25 16.875 22.50000001 39.375 22.5 61.875h-45c0-16.875 0-28.125-11.25-39.375-11.25-11.25-28.125-16.875-45-16.875-16.875 0-28.125 5.625-39.375 11.25-11.25 11.25-11.25 22.50000001-11.25 39.375 0 11.25 0 22.50000001 11.25 28.12499999 5.625 11.25 28.125 16.875 56.25 33.75000001 28.125 11.25 50.625 28.125 67.5 45 16.875 16.875 22.50000001 39.375 22.5 56.24999999 5.625 33.75-5.625 56.25-28.125 78.75000001zm298.125-45c-5.625 16.875-16.875 33.75-33.75000001 50.625-16.875 16.875-39.375 22.50000001-67.49999999 22.5s-50.625-5.625-73.125-16.87499999c-22.50000001-11.25-33.75-28.125-39.37500001-50.62500001-5.625-22.50000001-11.25-39.375-11.24999999-61.875 0-22.50000001 5.625-33.75 11.24999999-50.625 11.25-11.25 22.50000001-28.125 33.75000001-50.625l84.375-129.375h45l-84.375 135c39.375-11.25 67.50000001-5.625 90 5.625 22.50000001 11.25 33.75 28.125 45 39.375 5.625 16.875 11.25 33.75 11.24999999 50.625 0 16.875 0 39.375-11.24999999 56.25z"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

3
assets/fastapi.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M12 0C5.375 0 0 5.375 0 12c0 6.627 5.375 12 12 12 6.626 0 12-5.373 12-12 0-6.625-5.373-12-12-12zm-.624 21.62v-7.528H7.19L13.203 2.38v7.528h4.029L11.376 21.62z"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

7
assets/figma.svg Normal file
View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 7.678 7.68" height="1em" width="1em">
<path d="M2.56 7.68A1.28 1.28 0 0 0 3.84 6.4V5.12H2.56a1.28 1.28 0 0 0 0 2.56z" fill="#0acf83"/>
<path d="M1.28 3.84a1.28 1.28 0 0 1 1.28-1.28h1.28v2.56H2.56a1.28 1.28 0 0 1-1.28-1.28z" fill="#a259ff"/>
<path d="M1.28 1.28A1.28 1.28 0 0 1 2.559 0h1.28v2.56H2.56a1.28 1.28 0 0 1-1.28-1.28z" fill="#f24e1e"/>
<path d="M3.84 0h1.28a1.28 1.28 0 0 1 0 2.56H3.84z" fill="#ff7262"/>
<path d="M6.4 3.84a1.28 1.28 0 0 1-2.56 0 1.28 1.28 0 0 1 2.56 0z" fill="#1abcfe"/>
</svg>

After

Width:  |  Height:  |  Size: 568 B

1
assets/finder.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 465 512"><path fill="currentColor" d="M248.872 63.164H0v381.678h261.91c-5.933-22.006-9.425-44.83-10.382-68.447c-68.347 4.003-133.766-13.78-180.387-34.21l8.366-19.544c57.24 24.51 114.676 35.3 171.812 32.432c.446-20.1 2.592-40.72 6.53-61.851h-80.66c-1.25-89.57 29.694-162.884 71.683-230.058m-134.6 60.62h21.255v51.408h-21.256z"/><path fill="currentColor" d="M275.335 353.01c37.076-4.358 73.997-14.42 110.621-30.343l8.48 19.491c-39.404 17.135-79.134 27.89-119.027 32.342c.925 24.412 4.796 47.862 11.426 70.342h177.716V63.164H277.265c-48.15 73.047-72.046 138.577-75.561 206.144h85.683c-4.489 18.091-10.965 48.315-12.052 83.702m60.787-177.818h-21.256v-51.407h21.256zM277.265 63.164c10.43-15.824 21.947-31.984 34.7-48.613L292.992 0c-16.643 21.701-31.247 42.669-44.12 63.164zm-15.378 381.678c6.312 23.342 15.365 45.765 27.28 67.158l20.893-11.635c-9.876-17.731-17.584-36.272-23.275-55.523z"/></svg>

After

Width:  |  Height:  |  Size: 968 B

213
assets/gdb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,4 @@
<svg width="1em" height="1em" viewBox="0 0 600 528" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path d="M300.05 526.091C129.331 526.091 5.42623 417.044 0.748474 385.796V312.898C3.92935 289.397 26.0832 249.805 60.1747 235.622C60.6612 233.002 61.0728 230.27 61.5219 227.464C62.6071 220.615 63.7672 213.094 66.237 204.561C58.7152 185.551 56.7318 163.996 56.7318 142.59C56.7318 110.033 61.5219 76.3908 82.6653 49.6341C104.333 22.2037 138.574 7.57172 184.603 2.4449C229.734 -2.56966 269.252 3.71724 294.773 31.0728C296.645 33.0561 298.366 35.1143 299.975 37.2474C301.622 35.1143 303.493 33.0561 305.326 31.0728C330.848 3.71724 370.366 -2.56966 415.497 2.4449C461.526 7.57172 495.767 22.2037 517.435 49.6341C538.615 76.3908 543.368 110.033 543.368 142.59C543.368 163.996 541.385 185.551 533.863 204.561C536.333 213.094 537.53 220.615 538.578 227.464C539.027 230.308 539.476 233.002 539.963 235.622C574.541 250.029 596.919 290.669 599.501 314.021V384.075C599.501 412.74 474.1 526.091 300.05 526.091ZM300.05 470.52C385.372 470.52 471.593 428.981 487.235 416.894V257.663L486.374 253.322C468.037 261.181 446.146 264.212 421.746 264.212C378.861 264.212 344.694 251.975 320.333 227.127C312.303 218.871 305.498 209.508 300.125 199.322C294.697 209.512 287.842 218.875 279.767 227.127C255.443 251.975 221.277 264.212 178.353 264.212C153.954 264.212 132.1 261.181 113.726 253.322L112.865 257.663V416.894C128.545 428.981 214.728 470.52 300.05 470.52ZM253.796 69.3555C246.574 61.6466 229.958 53.9002 190.852 58.2412C152.719 62.4698 135.505 73.3597 126.748 84.4366C117.505 96.1123 112.94 113.963 112.94 142.59C112.94 172.266 117.767 186.412 124.466 193.896C130.528 200.669 143.888 208.079 178.428 208.079C210.349 208.079 228.536 199.285 239.726 187.871C251.514 175.821 259.447 156.923 262.815 129.755C267.193 94.7651 261.43 77.5509 253.796 69.3555ZM409.285 58.2412C370.216 53.9002 353.601 61.6466 346.378 69.3555C338.744 77.5509 332.944 94.7651 337.322 129.755C340.728 156.923 348.661 175.821 360.449 187.871C371.638 199.285 389.788 208.079 421.746 208.079C456.25 208.079 469.647 200.669 475.709 193.896C482.408 186.412 487.235 172.266 487.235 142.59C487.235 113.963 482.632 96.1123 473.389 84.4366C464.669 73.3597 447.455 62.4698 409.285 58.2412Z"/>
<path d="M234.636 301.634C242.08 301.634 249.219 304.591 254.482 309.855C259.746 315.118 262.703 322.257 262.703 329.701V385.871C262.703 393.315 259.746 400.454 254.482 405.717C249.219 410.981 242.08 413.938 234.636 413.938C227.193 413.938 220.054 410.981 214.79 405.717C209.527 400.454 206.57 393.315 206.57 385.871V329.701C206.57 322.257 209.527 315.118 214.79 309.855C220.054 304.591 227.193 301.634 234.636 301.634ZM393.68 329.701V385.871C393.68 393.315 390.723 400.454 385.459 405.717C380.196 410.981 373.057 413.938 365.613 413.938C358.17 413.938 351.031 410.981 345.767 405.717C340.504 400.454 337.547 393.315 337.547 385.871V329.701C337.547 322.257 340.504 315.118 345.767 309.855C351.031 304.591 358.17 301.634 365.613 301.634C373.057 301.634 380.196 304.591 385.459 309.855C390.723 315.118 393.68 322.257 393.68 329.701Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

5
assets/kubernetes.svg Normal file
View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" height="1em" width="1em">
<path d="m10.013 13.738-2.254.387a4.475 4.475 0 0 0 1.753 2.231l.865-2.095a.27.27 0 0 0 .022-.228c-.022-.18-.204-.295-.386-.295zm.865-2.914c.205 0 .387-.159.387-.364l.114-2.277-.456.091a4.516 4.516 0 0 0-2.118 1.162l1.89 1.343c.069.022.115.045.183.045zm-1.002 1.48a.366.366 0 0 0-.045-.524l-1.685-1.503a4.797 4.797 0 0 0-.661 2.778l2.209-.637c.091-.023.137-.046.182-.114zm1.457.797.616.296.614-.296.16-.661-.433-.546h-.683l-.433.546zm1.344-2.436c.114.159.341.182.5.091l1.867-1.32a4.286 4.286 0 0 0-2.573-1.23l.137 2.3a.215.215 0 0 0 .069.159z"/>
<path d="m21.944 14.103-1.73-7.446c-.113-.364-.387-.66-.729-.842L12.541 2.49c-.182-.091-.387-.114-.569-.114s-.387 0-.569.045L4.457 5.769a1.22 1.22 0 0 0-.683.842l-1.708 7.492c-.068.387.023.774.25 1.093l4.805 5.943c.273.273.66.456 1.047.479h7.651c.41.045.797-.137 1.048-.479l4.805-5.943c.227-.319.318-.706.272-1.093zm-2.845.501c-.046 0-.068 0-.114-.023-.022-.023-.022-.023-.045-.023-.046 0-.068-.022-.092-.022-.091-.023-.159-.068-.25-.114a.32.32 0 0 1-.137-.045h-.022a3.91 3.91 0 0 0-.729-.205h-.022a.26.26 0 0 0-.182.068s0 .023-.023.023l-.183-.024a5.628 5.628 0 0 1-2.46 3.097l.068.182s-.022 0-.022.022a.264.264 0 0 0-.022.228c.091.228.205.455.364.66v.045a.396.396 0 0 1 .091.114.81.81 0 0 1 .159.228c.023.022.046.045.046.068 0 0 .022 0 .022.022a.582.582 0 0 1 .023.342.38.38 0 0 1-.205.25c-.068.022-.114.045-.183.045a.511.511 0 0 1-.433-.273c-.022 0-.022-.022-.022-.022-.022-.023-.022-.045-.046-.068-.045-.068-.068-.159-.091-.25l-.046-.137v-.022a3.816 3.816 0 0 0-.296-.706.353.353 0 0 0-.182-.137c0-.023 0-.023-.023-.023l-.091-.159c-.228.068-.479.159-.729.205-.41.114-.82.159-1.229.159a5.368 5.368 0 0 1-1.981-.364l-.091.182c0 .023 0 .023-.023.023a.35.35 0 0 0-.182.137c-.114.228-.228.455-.296.706l-.045.137c-.023.091-.068.159-.091.25-.022.023-.045.045-.045.068-.023 0-.023.022-.023.022a.508.508 0 0 1-.433.273.434.434 0 0 1-.159-.045.469.469 0 0 1-.182-.615c.023 0 .023-.023.023-.023.022-.023.022-.045.045-.068.068-.091.114-.182.159-.228s.068-.068.091-.114v-.023a3.73 3.73 0 0 0 .364-.66.268.268 0 0 0-.023-.228s-.022 0-.022-.022l.114-.16a3.578 3.578 0 0 1-.615-.41 5.493 5.493 0 0 1-1.867-2.664l-.205.022s0-.022-.023-.022a.256.256 0 0 0-.182-.068h-.022a4.015 4.015 0 0 0-.751.205h-.024c-.045 0-.091.023-.137.046-.068.022-.159.068-.25.091-.022 0-.091-.022-.091 0 0 .023 0 .023-.023.023-.045.023-.068.023-.114.023a.424.424 0 0 1-.456-.319.445.445 0 0 1 .364-.524c.023-.023.023-.023.046-.023.045 0 .068-.022.091-.022.091 0 .182-.023.273-.023.045-.022.091-.022.137-.022a4.2 4.2 0 0 0 .774-.137c.068-.046.137-.091.16-.16 0 0 .022 0 .022-.022l.182-.046c-.205-1.298.091-2.618.797-3.734.022-.045.045-.068.068-.114l-.131-.132a.106.106 0 0 1-.004.019v-.023l.004.004c.01-.065-.031-.145-.072-.186-.182-.182-.41-.319-.638-.455l-.136-.069a2.587 2.587 0 0 1-.251-.136c-.022 0-.068-.045-.068-.045s0-.023-.022-.023a.49.49 0 0 1-.092-.639c.068-.114.182-.159.319-.159a.54.54 0 0 1 .319.114l.023.023c.022.022.045.022.068.045.068.069.114.137.182.205.023.022.068.045.091.091.159.182.364.364.569.524.045.022.091.045.137.045.045 0 .068-.023.091-.023h.023l.137.091a5.426 5.426 0 0 1 2.801-1.594c.273-.046.523-.091.774-.114l.023-.182v-.045c.068-.045.091-.114.114-.182 0-.273 0-.524-.045-.774v-.023c0-.045 0-.091-.023-.137a1.129 1.129 0 0 1-.045-.273v-.113c0-.114.045-.228.137-.319.114-.114.25-.182.387-.159a.45.45 0 0 1 .387.478v.137c-.023.091-.023.182-.045.273 0 .045-.023.091-.023.136v.023c-.048.273-.048.524-.048.774.023.068.045.136.114.182v-.023l.023.182a5.84 5.84 0 0 1 2.96 1.184c.183.182.387.364.569.546l.183-.114h.022c.022.023.068.023.091.023.046 0 .091-.023.137-.045.205-.137.41-.319.569-.501.022-.023.068-.046.091-.091.046-.068.114-.137.183-.205.022 0 .045-.022.068-.045l.022-.023a.546.546 0 0 1 .318-.114c.114 0 .251.068.319.16.159.205.113.478-.091.637 0 .023.022.023 0 .046-.023.022-.046.022-.068.045-.092.045-.16.091-.251.137l-.137.068a4.104 4.104 0 0 0-.638.455c-.045.046-.068.137-.068.205v.023l-.136.137c.364.569.638 1.207.797 1.867.137.66.182 1.343.091 2.003l.182.046a.278.278 0 0 0 .16.159c.25.068.523.114.773.137h.023a.297.297 0 0 0 .137.022c.091 0 .182 0 .272.023.046 0 .092 0 .092.023 0 .022.022.022.045.022a.537.537 0 0 1 .41.479.49.49 0 0 1-.453.32z"/>
<path d="M12.085 14.718a.352.352 0 0 0-.455.091l-1.116 2.027c.456.136.957.228 1.435.228.341 0 .66-.045.979-.114.159-.045.296-.068.433-.091l-1.093-1.981c-.069-.069-.115-.115-.183-.16zm3.644-4.441-1.708 1.548a.36.36 0 0 0-.091.16c-.046.205.068.41.273.455l2.163.615a4.375 4.375 0 0 0-.092-1.435 4.63 4.63 0 0 0-.545-1.343zm-2.073 3.484a.371.371 0 0 0-.205.433l.889 2.141a4.366 4.366 0 0 0 1.366-1.366c.182-.25.318-.547.433-.865l-2.277-.387a.634.634 0 0 0-.206.044z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

3
assets/mongodb.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 120 257" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="M82.323 28.644C71.537 15.847 62.249 2.85 60.35.15c-.2-.2-.5-.2-.7 0-1.897 2.7-11.185 15.697-21.971 28.494C-54.902 146.721 52.26 226.406 52.26 226.406l.9.6C53.958 239.303 55.955 257 55.955 257h7.99s1.998-17.597 2.797-29.994l.899-.7c.1.1 107.263-79.585 14.68-197.662ZM59.95 224.606s-4.793-4.099-6.092-6.198v-.201l5.793-128.574c0-.4.6-.4.6 0l5.792 128.574v.201c-1.299 2.099-6.093 6.198-6.093 6.198Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 537 B

1
assets/neo4j.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" fill="#4581C3" role="img" viewBox="0 0 24 24"><title>Neo4j</title><path d="M9.629 13.227c-.593 0-1.139.2-1.58.533l-2.892-1.976a2.61 2.61 0 0 0 .101-.711 2.633 2.633 0 0 0-2.629-2.629A2.632 2.632 0 0 0 0 11.073a2.632 2.632 0 0 0 2.629 2.629c.593 0 1.139-.2 1.579-.533L7.1 15.145c-.063.226-.1.465-.1.711 0 .247.037.484.1.711l-2.892 1.976a2.608 2.608 0 0 0-1.579-.533A2.632 2.632 0 0 0 0 20.639a2.632 2.632 0 0 0 2.629 2.629 2.632 2.632 0 0 0 2.629-2.629c0-.247-.037-.485-.101-.711l2.892-1.976c.441.333.987.533 1.58.533a2.633 2.633 0 0 0 2.629-2.629c0-1.45-1.18-2.629-2.629-2.629ZM16.112.732c-4.72 0-7.888 2.748-7.888 8.082v3.802a3.525 3.525 0 0 1 3.071.008v-3.81c0-3.459 1.907-5.237 4.817-5.237s4.817 1.778 4.817 5.237v8.309H24V8.814C24 3.448 20.832.732 16.112.732Z"/></svg>

After

Width:  |  Height:  |  Size: 837 B

6
assets/nvm.svg Normal file
View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" fill="currentColor" height="1em" width="1em">
<g>
<path d="M499.8 990c-12.6 0-25.2-3.4-36.4-10.1l-115.9-71c-17.3-10-8.8-13.6-3.2-15.6 23.1-8.3 30-12.4 54.6-26.9 2.6-1.5 6-.9 8.7.7l86.9 51.4c3.2 1.9 7.8 1.9 10.8 0l339.5-201.8c3.2-1.9 5.3-5.8 5.3-9.7V298.5c0-4-2.1-7.9-5.4-9.9L505.3 81.5c-3.2-2-7.5-2-10.7 0L155.5 288.6c-3.4 2-5.5 5.9-5.5 9.8V707c0 4 2.1 7.7 5.4 9.6l87.3 52.4c51.6 26.7 82.2-.4 82.2-32V335.3c0-5.8 4.5-10.3 10.1-10.3h49.9c5.5 0 10.1 4.5 10.1 10.3v401.8c0 71.2-42.3 112.1-107.6 112.1-20 0-35.9 0-80-22.5l-91-54.2C93.9 759.1 80 734 80 707.1V292.6c0-26.9 13.9-52 36.5-65.4L463.6 19.6c21.9-12.9 51.1-12.9 72.9 0l347 207.5c22.5 13.5 36.5 38.6 36.5 65.4V707c0 26.9-13.9 52-36.5 65.5l-347 207.3c-11.1 6.6-23.7 10.1-36.5 10.1l-.2.1z" />
<path d="M607.1 710c-141.3 0-183.8-69.1-183.8-129.7 0-5.8 4.5-10.3 10-10.3h44.9c5 0 9.2 3.7 10 8.8 6.7 47.3 36.6 68.1 118.8 68.1 73.1 0 103-22.6 103-62.7 0-23.2-7.6-40.3-121.2-51.8-95-9.7-153.8-31.4-153.8-110 0-72.5 59.1-114.8 158-114.8 100.9 0 167.3 30.6 173.2 111.2.2 2.9-.8 5.8-2.7 8-1.9 2.1-4.5 3.3-7.3 3.3h-45c-4.7 0-8.8-3.4-9.8-8.1-9.6-37.1-37.1-51.2-108.4-51.2-79.8 0-89.1 27.9-89.1 49.5 0 26.2 11 33.8 118.8 48.5C729.3 483.2 780 503.9 780 581.4c0 78.3-63.1 128.6-172.9 128.6z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

3
assets/phpstorm.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 256 256">
<defs><linearGradient id="IconifyId18e425c03bba7dc7a0" x1="40.196%" x2="55.577%" y1="64.058%" y2="47.965%"><stop offset="0%" stop-color="#AF1DF5"/><stop offset="21%" stop-color="#BC20E4"/><stop offset="63%" stop-color="#DD29B8"/><stop offset="100%" stop-color="#FF318C"/></linearGradient><linearGradient id="IconifyId18e425c03bba7dc7a1" x1="42.885%" x2="63.378%" y1="78.603%" y2="-4.057%"><stop offset="2%" stop-color="#6B57FF"/><stop offset="42%" stop-color="#B74AF7"/><stop offset="75%" stop-color="#FF318C"/></linearGradient><linearGradient id="IconifyId18e425c03bba7dc7a2" x1="73.258%" x2="32.049%" y1="102.209%" y2="-3.688%"><stop offset="0%" stop-color="#293896"/><stop offset="8%" stop-color="#3B3AA2"/><stop offset="29%" stop-color="#6740C0"/><stop offset="49%" stop-color="#8A44D8"/><stop offset="68%" stop-color="#A347E9"/><stop offset="86%" stop-color="#B249F3"/><stop offset="100%" stop-color="#B74AF7"/></linearGradient><linearGradient id="IconifyId18e425c03bba7dc7a3" x1="62.87%" x2="39.747%" y1="72.446%" y2="45.568%"><stop offset="2%" stop-color="#6B57FF"/><stop offset="78%" stop-color="#B74AF7"/></linearGradient></defs><path fill="url(#IconifyId18e425c03bba7dc7a0)" d="M141.307 45.013L132.773 19.2L43.68 0L0 49.413l48 24.56v-28.96z"/><path fill="url(#IconifyId18e425c03bba7dc7a1)" d="m48 61.813l-48-12.4l24.4 146.56l23.52-.186z"/><path fill="url(#IconifyId18e425c03bba7dc7a2)" d="M208 45.013h-83.493L158.053 15.2l64.64 12L256 109.973l-47.973 47.654z"/><path fill="url(#IconifyId18e425c03bba7dc7a3)" d="M208.053 108.88L208 205.013H70.56l3.547 20.907L160.4 256l95.6-57.227z"/><path d="M47 43.771h162v162H47z"/><path fill="#FFF" d="M67.947 175.093h60v10h-60zm52.32-58.133l7.813-9.6a27.573 27.573 0 0 0 17.973 7.307c5.334 0 8.694-2.16 8.694-5.68v-.16c0-1.364-.343-2.46-1.422-3.451l-.242-.211a7.3 7.3 0 0 0-.557-.414l-.315-.204a11.058 11.058 0 0 0-.522-.302l-.382-.2a15.25 15.25 0 0 0-.201-.1l-.425-.198a20.305 20.305 0 0 0-.454-.198l-.484-.199a27.087 27.087 0 0 0-.254-.1l-.531-.198a34.56 34.56 0 0 0-.278-.1l-.58-.201l-.303-.101l-.63-.203l-.667-.205l-.702-.208c-.12-.035-.242-.07-.365-.104l-.758-.212l-.795-.215l-2.44-.633l-.766-.205l-1.126-.31l-.368-.105l-.728-.212l-.714-.215a67.125 67.125 0 0 1-.351-.11l-.694-.222l-.68-.226a50.843 50.843 0 0 1-.334-.116l-.658-.235l-.643-.24a23.119 23.119 0 0 1-.316-.124l-.622-.251l-.606-.259c-6.286-2.757-10.049-6.826-10.165-14.88l-.002-.573c0-10.792 8.59-17.981 20.68-18.131l.386-.003a34.667 34.667 0 0 1 22.347 7.654l-6.88 9.973a28.107 28.107 0 0 0-15.653-5.92c-5.067 0-7.734 2.32-7.734 5.333v.187c0 2.23.852 3.644 3.457 4.932l.414.197c.143.066.29.131.443.196l.472.195l.502.195l.533.195l.563.196l.596.198l.629.199l.662.202l1.057.308l1.137.318l1.219.328l1.303.341c.287.075.572.151.853.228l.836.232c.275.078.548.157.817.237l.8.242c.131.04.262.082.392.123l.772.25l.754.256c.372.13.737.262 1.096.397l.707.273c7.675 3.042 11.938 7.422 12.063 15.448l.003.554c0 11.947-9.12 18.667-22.106 18.667a38.27 38.27 0 0 1-25.52-9.627M68 65.333h24.533c14.15 0 22.786 8.312 22.958 20.354l.002.526c0 13.867-10.8 21.067-24.24 21.067h-9.92v17.973H68zm23.627 30.214c6.586 0 10.453-3.92 10.453-9.067v-.16c0-5.92-4.107-9.093-10.667-9.093h-10.08v18.32z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

3
assets/pycharm.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M7.833 6.666v-.055c0-1-.667-1.5-1.778-1.5H4.389v3.055h1.723c1.111 0 1.721-.666 1.721-1.5zM0 0v24h24V0H0zm2.223 3.167h4c2.389 0 3.833 1.389 3.833 3.445v.055c0 2.278-1.778 3.5-4.001 3.5H4.389v2.945H2.223V3.167zM11.277 21h-9v-1.5h9V21zm4.779-7.777c-2.944.055-5.111-2.223-5.111-5.057C10.944 5.333 13.056 3 16.111 3c1.889 0 3 .611 3.944 1.556l-1.389 1.61c-.778-.722-1.556-1.111-2.556-1.111-1.658 0-2.873 1.375-2.887 3.084.014 1.709 1.174 3.083 2.887 3.083 1.111 0 1.833-.445 2.61-1.167l1.39 1.389c-.999 1.112-2.166 1.779-4.054 1.779z"/>
</svg>

After

Width:  |  Height:  |  Size: 656 B

1
assets/r.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M12 4.29c-5.5 0-10 3-10 6.71c0 3.28 3.56 6 8.24 6.58v2.13h3.41v-2.12c.85-.09 1.64-.25 2.39-.48l1.38 2.6h3.86l-2.32-3.91C20.83 14.58 22 12.87 22 11c0-3.71-4.5-6.71-10-6.71m1.53 2.62c4.2 0 7.3 1.4 7.3 4.59c0 1.71-.92 2.91-2.42 3.65c-.09-.05-.17-.1-.22-.15c-.36-.16-.96-.34-.96-.34s2.98-.22 2.98-3.19c0-2.97-3.12-3.02-3.12-3.02h-6.85v7.16c-2.55-.74-4.31-2.31-4.31-4.11c0-2.54 3.4-4.59 7.6-4.59m.15 3.98h2.07s.95-.05.95.94c0 .97-.95.97-.95.97h-2.07zm-.03 4.41h.92c.18 0 .27.05.43.2c.13.1.27.29.39.46c-.55.07-1.13.1-1.74.1z"/></svg>

After

Width:  |  Height:  |  Size: 641 B

3
assets/scala.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" height="1em" width="1em">
<path d="M6.12 32c6.047 0 18.411-2.021 19.76-4v-7.641c-1.276 1.88-13.714 3.885-19.76 3.885zm0-10.182c6.047 0 18.411-2.021 19.76-4v-7.635c-1.276 1.875-13.714 3.88-19.76 3.88zm0-10.177c6.047 0 18.411-2.021 19.76-4V0C24.604 1.875 12.166 3.88 6.12 3.88z"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

3
assets/subversion.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 14 14" height="1em" width="1em">
<path d="M13 11.377V8.223c-1.643.648-3.681 1.278-6.115 1.893-2.267.573-4.229.986-5.885 1.238v.022h12zM1 8.038v2.566a51.332 51.332 0 0 0 5.065-.983c1.481-.374 2.623-.738 3.424-1.09.8-.351 1.17-.648 1.11-.89-.054-.21-.424-.318-1.109-.323-.351.005-.835.03-1.452.075-.618.045-1.387.117-2.305.213-1.425.152-2.608.269-3.55.348-.448.037-.842.066-1.183.085Zm.517 1.475c.03 0 .058.013.08.035a.116.116 0 0 1-.128.191.117.117 0 0 1-.037-.025.072.072 0 0 1-.025-.037c0-.008-.008-.023-.008-.045 0-.03.015-.06.037-.083.023-.022.053-.03.09-.03zm.406 0a.12.12 0 0 1 .082.035.115.115 0 0 1 .033.083c0 .033-.011.06-.034.084a.135.135 0 0 1-.135.024.097.097 0 0 1-.038-.025c-.014-.007-.022-.022-.03-.037-.007-.008-.007-.023-.007-.045 0-.03.007-.06.03-.083a.112.112 0 0 1 .082-.03zm-.405-.755c.03 0 .057.011.08.035.023.022.035.05.035.083 0 .031-.012.06-.035.082a.114.114 0 0 1-.082.035.114.114 0 0 1-.084-.035.115.115 0 0 1-.035-.082c0-.034.008-.062.03-.085a.117.117 0 0 1 .083-.034Zm.405 0c.031 0 .058.011.082.035.022.022.033.05.033.083 0 .031-.011.06-.034.082-.03.022-.053.035-.09.035a.106.106 0 0 1-.083-.035.118.118 0 0 1-.037-.082c0-.034.007-.062.03-.085a.116.116 0 0 1 .082-.034ZM13 3.299v2.406c-.818.05-1.84.138-3.069.267-1.245.135-2.26.24-3.046.307-.788.075-1.357.114-1.705.12-.682.016-1.045-.075-1.098-.277-.053-.224.353-.524 1.223-.885.87-.367 2.025-.735 3.45-1.095a43.649 43.649 0 0 1 4.244-.825zm-.428-.675a81.77 81.77 0 0 0-5.056 1.115C4.793 4.426 2.622 5.11 1 5.787V2.624h11.573z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

6
assets/tauri.svg Normal file
View File

@ -0,0 +1,6 @@
<svg viewBox="0 0 256 289" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" height="1em" width="1em">
<path d="M178.497 104.93c0 15.155-12.285 27.44-27.44 27.44-15.153 0-27.438-12.285-27.438-27.44 0-15.153 12.285-27.438 27.439-27.438s27.439 12.285 27.439 27.439Z" fill="#FFC131"/>
<circle fill="#24C8DB" transform="rotate(180 104.91 183.505)" cx="104.911" cy="183.505" r="27.439"/>
<path d="M207.93 192.86a104.766 104.766 0 0 1-36.168 14.717 73.586 73.586 0 0 0 3.617-33.176c29.953-10.472 49.82-38.964 49.292-70.69-.53-31.727-21.336-59.542-51.622-69.008-30.286-9.467-63.23 1.546-81.733 27.324a122.227 122.227 0 0 0-40.16 11.723C64.86 29.536 105.956-.445 152.244.005c46.288.45 86.794 31.224 99.636 75.697 12.841 44.473-5.026 92.103-43.95 117.157ZM52.404 92.832l25.693 3.118a73.586 73.586 0 0 1 3.243-14.593 104.766 104.766 0 0 0-28.936 11.475Z" fill="#FFC131"/>
<path d="M47.913 95.577a104.766 104.766 0 0 1 36.419-14.842 73.46 73.46 0 0 0-4.116 33.3c-29.847 10.619-49.549 39.148-48.906 70.822.642 31.673 21.484 59.38 51.738 68.78 30.253 9.399 63.127-1.62 81.604-27.352a122.227 122.227 0 0 0 40.16-11.6c-13.736 44.169-54.812 74.1-101.064 73.645-46.252-.453-86.733-31.184-99.602-75.612-12.87-44.427 4.92-92.037 43.768-117.141Zm155.528 100.026-.5.25.5-.25Z" fill="#24C8DB"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

3
assets/twitter.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M283.02655555 307.55600001c140.717 72.074 260.839 66.925 260.839 66.92499999s-44.617-157.87599999 94.384-228.234c138.998-70.359 236.816 48.048 236.816 48.048s24.025-6.863 42.901-13.728 44.617-18.87599999 44.61700001-18.876l-42.90100001 77.222 66.92500001-6.863s-8.579 12.014-34.31900001 36.038c-25.741 24.025-37.754 37.754-37.754 37.754s10.297 190.483-90.95 338.062c-99.53 147.58000001-229.952 235.099-417.002 253.973-187.05 18.87599999-310.606-58.347-310.606-58.347s82.37-5.149 133.852-24.025c51.483-20.592 126.99-73.79 126.99-73.79s-106.397-32.605-145.866-70.35899999-48.048-60.062-48.048-60.06200001l106.397-1.716s-111.542-60.062-142.433-106.397c-30.89-46.333-36.038-92.666-36.038-92.666l80.656 32.605s-66.925-92.666-77.222-163.025c-10.297-72.074 12.014-109.826 12.014-109.826s36.038 65.21 176.752 137.283z"></path>
</svg>

After

Width:  |  Height:  |  Size: 944 B

View File

@ -1,7 +1,7 @@
Android ADB 备忘清单
Android Debug Bridge 备忘清单
===
[ADB](https://developer.android.com/studio/command-line/adb.html)Android Debug Bridge包含在 Google 的 Android SDK 中,可用于从计算机控制您的 Android 设备。以下是您可以与 [ADB](https://developer.android.com/studio/command-line/adb.html) 一起使用的一些最常见的命令及其用法
[ADB](https://developer.android.com/studio/command-line/adb.html)Android Debug Bridge Google 的 Android SDK 中的一个命令行工具,可让您的计算机控制 Android 设备执行各种设备操作。以下是您可以与 [ADB](https://developer.android.com/studio/command-line/adb.html) 一起使用的一些最常见的命令及其用法
入门
----
@ -11,15 +11,18 @@ Android ADB 备忘清单
:-- | --
:-- | --
`adb devices` | 列出连接的设备
`adb devices -l` | 列出连接的设备和种类
`adb devices` | 列出连接的设备
`adb devices -l` | 列出连接的设备和种类
`adb connect [IP:PORT]` | 连接到指定 IP 和端口的设备
`adb disconnect [IP:PORT]` | 断开指定 IP 和端口的设备连接,若未指定,则断开所有连接
`adb root` | 以 `root` 权限重新启动 `adbd`
`adb start-server` | 启动 `adb` 服务
`adb kill-server` | 杀死 `adb` 服务
`adb start-server` | 启动 `adb` 服务
`adb kill-server` | 停止 `adb` 服务
`adb remount` | 重新挂载具有读/写访问权限的文件系统
`adb reboot` | 重启设备
`adb reboot bootloader` | 将设备重新启动到快速启动
`adb disable-verity` | 将设备重新启动到快速启动
`adb reboot bootloader` | 将设备重启到 fastboot 模式
`adb reboot recovery` | 将设备重启到恢复模式
`adb disable-verity` | 禁用设备的 dm-verity 安全特性
<!--rehype:className=left-align code-nowrap-->
---
@ -45,12 +48,12 @@ $ adb -s somedevice-1234 root
:-- | --
:-- | --
`adb logcat` | 开始将日志消息打印到标准输出
`adb logcat` | 将日志消息打印到标准输出
`adb logcat -g` | 显示当前日志缓冲区大小
`adb logcat -G <size>` | 设置缓冲区大小K 或 M
`adb logcat -c` | 清除日志缓冲区
`adb logcat *:V` | 启用所有日志消息(详细)
`adb logcat -f <filename>` | 转储到指定文件
`adb logcat -f <filename>` | 将日志转储到指定文件
<!--rehype:className=left-align code-nowrap-->
#### 示例
@ -62,16 +65,16 @@ $ adb logcat *:V > output.log
#### 过滤日志输出
- `V` 详细(最低优先级)
- `D` 调试
- `I` 信息
- `W` 警告
- `E` 错误
- `F` 严重错误
- `V` 详细的信息(最低优先级)
- `D` 调试信息
- `I` 普通信息
- `W` 警告信息
- `E` 错误信息
- `F` 致命错误信息
- `S` 静默(最高优先级)
<!--rehype:className=cols-2 shortcuts style-none-->
过滤器表达式显示优先级不低于 `警告` 的所有标记的所有日志消息:
例如,要显示优先级不低于 `警告` 的所有标记的所有日志消息,可以使用以下命令
```bash
$ adb logcat *:W
@ -81,8 +84,8 @@ $ adb logcat *:W
:-- | --
:-- | --
`adb push <local> <remote>` | 将本地复制到远程设备
`adb pull <remote> <local>` | 将远程设备从设备复制到本地
`adb push <local> <remote>` | 将本地文件复制到远程设备
`adb pull <remote> <local>` | 将远程设备文件复制到本地
<!--rehype:className=left-align code-nowrap-->
#### 示例
@ -97,22 +100,22 @@ $ adb pull /sdcard/test.txt pulledTest.txt
:-- | --
:-- | --
`adb shell <command>` | 在设备上运行指定的命令(大多数 unix 命令在这里工作)
`adb shell <command>` | 在设备上运行指定的命令(大多数 Unix 命令在这里工作)
`adb shell wm size` | 显示当前屏幕分辨率
`adb shell wm size WxH` | 将分辨率设置为 WxH
`adb shell pm list packages` | 列出所有已安装的包
`adb shell pm list packages -3` | 列出所有已安装的 3rd 方
`adb shell monkey -p app.package.name` | 启动指定包
`adb shell pm list packages` | 列出所有已安装的应用
`adb shell pm list packages -3` | 列出所有已安装的第三方的应用
`adb shell monkey -p app.package.name` | 启动指定包名的应用程序
<!--rehype:className=style-list-arrow-->
### 包安装
:-- | --
:-- | --
`adb shell install <apk>` | 安装应用程序
`adb shell install <path>` | 手机路径安装应用
`adb shell install -r <path>` | 手机路径安装应用
`adb shell uninstall <name>` | 删除应用程序
`adb shell install <apk>` | 安装应用程序
`adb shell install <path>` | 手机路径安装应用
`adb shell install -r <path>` | 手机路径安装应用(允许覆盖安装)
`adb shell uninstall <name>` | 卸载应用程序
<!--rehype:className=left-align code-nowrap-->
### Paths
@ -121,13 +124,13 @@ $ adb pull /sdcard/test.txt pulledTest.txt
:-- | --
:-- | --
`/data/data/<package>/databases` | 应用程序数据库
`/data/data/<package>/shared_prefs/` | 共享偏好
`/data/app` | 用户安装的apk
`/system/app` | 预装的 APK 文件
`/mmt/asec` | 加密的应用程序\|App2SD
`/mmt/emmc` | 内部 SD 卡
`/mmt/adcard` | 外部/内部 SD 卡
`/mmt/adcard/external_sd` | 外置 SD 卡
`/data/data/<package>/shared_prefs/` | 共享偏好设置
`/data/app` | 用户安装的 APK
`/system/app` | 系统预装的 APK 文件
`/mnt/asec` | 加密的应用程序App2SD
`/mnt/emmc` | 内部 SD 卡
`/mnt/sdcard` | 外部/内部 SD 卡
`/mnt/sdcard/external_sd` | 外置 SD 卡
<!--rehype:className=style-list-arrow-->
---
@ -145,17 +148,17 @@ $ adb pull /sdcard/test.txt pulledTest.txt
:-- | --
:-- | --
`adb get-statе` | 打印设备状态
`adb get-serialno` | 获取序列号
`adb shell dumpsys iphonesybinfo` | 获取 IMEI
`adb shell netstat` | 列出 TCP 连接
`adb get-serialno` | 获取设备的序列号
`adb shell dumpsys iphonesybinfo` | 获取设备的 IMEI 信息
`adb shell netstat` | 列出设备上的所有 TCP 连接
`adb shell pwd` | 打印当前工作目录
`adb shell dumpsys battery` | 电池状态
`adb shell pm list features` | 列出电话功能
`adb shell service list` | 列出所有服务
`adb shell dumpsys activity <package>/<activity>` | 活动信息
`adb shell ps` | 打印进程状态
`adb shell wm size` | 显示当前屏幕分辨率
`dumpsys window windows` \| `grep -E 'mCurrentFocus\|mFocusedApp'` | 打印当前应用程序的打开活动
`adb shell dumpsys battery` | 获取设备电池状态
`adb shell pm list features` |列出设备支持的所有功能
`adb shell service list` | 列出设备上运行的所有服务
`adb shell dumpsys activity <package>/<activity>` | 获取指定包和活动信息
`adb shell ps` | 打印设备上所有运行的进程状态
`adb shell wm size` | 显示当前设备的屏幕分辨率
`dumpsys window windows` \| `grep -E 'mCurrentFocus\|mFocusedApp'` | 打印当前应用程序的打开活动的信息
<!--rehype:className=style-list-arrow-->
### 包信息
@ -168,8 +171,8 @@ $ adb pull /sdcard/test.txt pulledTest.txt
`adb shell list packages -s` | 仅列出系统包
`adb shell list packages -u` | 列出包名称 + 已卸载
`adb shell dumpsys package packages` | 列出所有应用程序的信息
`adb shell dump <name>` | 列出一个包的信息
`adb shell path <package>` | apk文件的路径
`adb shell dump <name>` | 列出一个包的信息
`adb shell path <package>` | 列出 APK 文件的路径
<!--rehype:className=style-list-arrow-->
### 设备相关命令
@ -177,7 +180,7 @@ $ adb pull /sdcard/test.txt pulledTest.txt
:-- | --
:-- | --
`adb reboot-recovery` | 重启设备进入恢复模式
`adb reboot recovery` | 重启设备进入恢复模式
`adb reboot fastboot` | 重启设备进入恢复模式
`adb shell screencap -p "/path/to/screenshot.png"` | 截图
`adb shell screenrecord "/path/to/record.mp4"` | 录制设备屏幕
@ -193,8 +196,8 @@ $ adb pull /sdcard/test.txt pulledTest.txt
:-- | --
:-- | --
`adb shell permissions groups` | 列出权限组定义
`adb shell list permissions -g -r` | 列出权限详细信息
`adb shell permissions groups` | 列出所有已定义的权限组
`adb shell list permissions -g -r` | 列出了所有权限详细信息
<!--rehype:className=style-list-arrow-->
### Logs
@ -211,7 +214,7 @@ $ adb pull /sdcard/test.txt pulledTest.txt
### 将文件推送到 Android 设备的下载文件夹
```bash
$ adb push example.apk /mnt/Download/
$ adb push example.apk /sdcard/Download/
```
### 列出所有已安装的包并获取完整路径
@ -223,19 +226,19 @@ $ adb shell pm list packages -f
### 从安卓设备中提取文件
```bash
$ adb pull /mnt/Download/example.apk
$ adb pull /sdcard/Download/example.apk
```
### 从主机安装 apk 到 Android 设备
### 从主机安装 APK 到 Android 设备
```bash
$ adb shell install example.apk
```
### 从 Android 设备存储安装 apk
### 从 Android 设备存储安装 APK
```bash
$ adb shell install /mnt/Download/example.apk
$ adb shell install /sdcard/Download/example.apk
```
### 设置网络代理
@ -250,7 +253,7 @@ $ adb shell settings put global http_proxy <address>:<port>
$ adb shell settings put global http_proxy :0
```
### 显示连接的设备并选择一个设备和外壳
### 显示连接的设备并指定一个设备进行 Shell
```bash
$ adb devices
@ -259,16 +262,16 @@ $ adb -s 7f1c864e shell
`7f1c864e` 是设备 `ID`
### 通过 ip 地址无线连接到设备
### 通过 IP 地址连接到设备
```bash
$ adb connect 192.168.56.101:5555
```
### adb 通过 wifi
### 通过 Wi-Fi 连接 ADB
<!--rehype:wrap-class=row-span-5-->
我们可以通过 `wifi` 或专门使用 `tcp` 连接使用 `adb`。 要通过 `wifi` 使用 `adb`,首先通过 `usb` 连接手机并启用 `usb` 调试。然后列出所有设备:
我们可以通过 `Wi-Fi` 或专门使用 `tcp` 连接使用 `adb`。 要通过 `Wi-Fi` 使用 `adb`,首先通过 `USB` 连接手机并启用 `USB` 调试。然后列出所有设备:
```bash
$ adb devices
@ -276,7 +279,7 @@ $ adb devices
# device_id device
```
现在检查 `android` 设备的 `ip`
现在检查 `Android` 设备的 `IP`
```bash
$ adb shell ifconfig
@ -286,7 +289,7 @@ wlan0 Link encap:UNSPEC Driver icnss
inet addr:XXX.XXX.X.XX Bcast:XXX.XXX.X.XXX
```
记下 `inet addr``ip` 地址。我们稍后会需要它。现在在某个端口重新启动 `tcpip`
记下 `inet addr` 后的 `IP` 地址。稍后要用。现在在某个端口重新启动 `tcpip`
```bash
$ adb tcpip $port
@ -298,25 +301,25 @@ $ adb tcpip $port
$ adb tcpip 5555
```
您现在可以断开使用。 现在连接到设备只需给出以下命令:
您现在可以断开 USB 线缆使用。 若要连接到设备请键入以下命令:
```bash
$ adb connect $ip:$port
```
like:
例如:
```bash
$ adb connect 192.168.1.4:5555
```
### 计算机上的 apk 文件安装应用程序
### 计算机上的 APK 文件安装到设备
```bash
$ adb install /Users/dev/projects/myapp.apk
```
### 查找应用的 apk 路径
### 查找应用的 APK 路径
```bash
$ adb shell pm path com.example.myapp
@ -324,13 +327,13 @@ $ adb shell pm path com.example.myapp
`com.example.myapp` 替换为您自己的应用程序包名称
### 名称查找应用的包名
### 通过名称查找应用的包名
```bash
$ adb shell pm list package | grep app_name
```
### 将 apk 从设备提取到您的计算机
### 从设备提取 APK 到您的计算机
```bash
$ adb pull /data/app/com.example.myapp.apk ./
@ -366,7 +369,7 @@ $ adb shell input keyevent 66
### 发送点击
点击又名点击屏幕:
点击屏幕:
```bash
$ adb shell input tap x y

View File

@ -19,6 +19,7 @@ Ansible 备忘清单
- [Ansible 官方文档](https://docs.ansible.com)
### 配置位置
<!--rehype:wrap-class=col-span-2 row-span-2-->
文件路径 | 说明
:-|-
@ -26,13 +27,27 @@ Ansible 备忘清单
`~/ansible.cfg` | 用户特定的配置
`$pwd/ansible.cfg` | 当前目录下的配置
配置文件优先级
- 如果没有任何其他配置文件,默认使用 `/etc/ansible/ansible.cfg`
- `~/.ansible.cfg` `家`目录下的 `.ansible.cfg`
- 当前目录下的 `ansible.cfg`,即在同一目录下 `ansible.cfg` 优先级高于 `~/.ansible.cfg`
- 环境变量 `exoport ANSIBLE_CONFIG=/$DIR/ansible.cfg`
<!--rehype:className=style-timeline-->
查看正在使用的 `ansible` 配置文件:
```bash
ansible --version | grep "config file"
```
### Inventory文件(hosts列表)
#### 静态Inventory
`/etc/ansible/hosts`
```INI
```ini
mail.example.com
[webservers]
@ -42,7 +57,7 @@ bar.example.com
### Inventory 主机组使用多个IP和域名
```
```ini
[web]
172.18.12.5[1:4]
[webservers]
@ -125,7 +140,7 @@ $ ansible target -m copy -a "src=/tmp/seq dest=/tmp/seq"
### Ansible 命令帮助
<!--rehype:wrap-class=col-span-2 row-span-3-->
```bash
```shell
$ ansible
$ ansible <host-pattern> [options]
```
@ -156,6 +171,7 @@ $ ansible <host-pattern> [options]
`--vault-password-file=VAULT_PASSWORD_FILE` | 保险库密码文件
`-v`, `--verbose` | 详细模式(-vvv 更多,-vvvv 启用连接调试)
`--version` | 显示程序的版本号并退出
<!--rehype:className=left-align-->
控制谁以及如何连接到主机,连接选项:
@ -167,24 +183,26 @@ $ ansible <host-pattern> [options]
`-c CONNECTION`, `--connection=CONNECTION` | 要使用的连接类型 (default=smart)
`-T TIMEOUT`, `--timeout=TIMEOUT` | 以秒为单位覆盖连接超时 (default=10)
`--ssh-common-args=SSH_COMMON_ARGS` | 指定要传递给 sftp/scp/ssh 的常用参数 (e.g. ProxyCommand)
`--sftp-extra-args=SFTP_EXTRA_ARGS` | 指定仅传递给 sftp 的额外参数 (e.g. -f, -l)
`--sftp-extra-args=SFTP_EXTRA_ARGS` | 指定仅传递给 `sftp` 的额外参数 (e.g. -f, -l)
`--scp-extra-args=SCP_EXTRA_ARGS` | 指定仅传递给 `scp` 的额外参数 (e.g. -l)
`--ssh-extra-args=SSH_EXTRA_ARGS` | 指定仅传递给 `ssh` 的额外参数 (e.g. -R)
<!--rehype:className=left-align-->
控制您成为目标主机上的用户的方式和用户,特权升级选项:
:- | -
:- | -
`-s`, `--sudo` | 使用 sudo (nopasswd) 运行操作(已弃用,使用 become)
`-U SUDO_USER`, `--sudo-user=SUDO_USER` | 所需的 sudo 用户(默认=root)(已弃用,使用 become)
`-S`, `--su` | 使用 su 运行操作(已弃用,使用 become)
`-R SU_USER`, `--su-user=SU_USER` | 以该用户身份使用 su 运行操作(默认 = root)(已弃用,使用 become)
~~`-s`~~, ~~`--sudo`~~ | 使用 sudo (nopasswd) 运行操作(已弃用,使用 become)
~~`-U SUDO_USER`~~, ~~`--sudo-user=SUDO_USER`~~ | 所需的 sudo 用户(默认=root)(已弃用,使用 become)
~~`-S`~~, ~~`--su`~~ | 使用 su 运行操作(已弃用,使用 become)
~~`-R SU_USER`~~, ~~`--su-user=SU_USER`~~ | 以该用户身份使用 su 运行操作(默认 = root)(已弃用,使用 become)
`-b`, `--become` | 使用 become 运行操作(不暗示密码提示)
`--become-method=BECOME_METHOD` | 要使用的权限提升方法(默认=sudo),有效选择:[ sudo | su | pbrun | pfexec | runas | doas | dzdo ]
`--become-method=BECOME_METHOD` | 要使用的权限提升方法(默认=sudo),有效选择:\[ `sudo` \| `su` \| `pbrun` \| `pfexec` \| `runas` \| `doas` \| `dzdo` \]
`--become-user=BECOME_USER` | 以该用户身份运行操作(默认=root)
`--ask-sudo-pass` | 询问 sudo 密码(已弃用,使用 become)
`--ask-su-pass` | 询问 su 密码(已弃用,使用 become)
~~`--ask-sudo-pass`~~ | 询问 sudo 密码(已弃用,使用 become)
~~`--ask-su-pass`~~ | 询问 su 密码(已弃用,使用 become)
`-K`, `--ask-become-pass` | 要求提权密码
<!--rehype:className=left-align-->
### Ansible Galaxy 工具
@ -394,6 +412,38 @@ $ ansible-pull -U <repository> [options]
<!-- ### ansible-playbook -->
<!-- todo -->
### ansible常用模块
<!--rehype:wrap-class=col-span-3 -->
`Ansible` 的模块已经高达 `3000+` 之多。但是个人在日常工作中,比较常见的大约 `20` 多个
```bash
$ ansible-doc --list #查询所有模块
$ ansible <host-pattern> [options] # 标准使用方式
```
---
| :- | - | - |
| ---------------- | ------------------------------------------------ | ------------------------------------------------------------ |
| ping | 检查指定节点机器是否还能连通 | `ansible all -m ping` |
| command | 用于在各受控端节点运行指定的命令 | `ansible all -m command -a 'hostname'` |
| shell | shell模块可以特殊字符而command是不支持 | `ansible all -m shell -a 'hostname && date'` |
| hostname | 修改远程受控节点的主机名的模块 | `ansible -i /opt/hosts xx -m hostname -a 'name=ansible-client-199'` |
| copy | 在远程主机执行复制操作文件 | `ansible all -m copy -a 'src=/etc/hosts dest=/opt/hosts backup=yes'` |
| fetch | 从远程主机获取文件到管理节点,但是不支持目录操作 | `ansible all -m fetch -a "src=/etc/yum.repos.d/epel.repo dest=/usr/local/src"` |
| script | 管理端一个脚本,然后在远程服务器上执行 | `ansible all -m script -a '/root/time.sh'` |
| file | 主要用于远程主机上的文件和目录操作 | `ansible all -m file -a "path=/root/rsync.password mode=600 state=touch"` |
| cron | 管理执行任务计划模块(增删改查) | `ansible all -m cron -a "name='test a job' user=root job='/bin/sh /server/scripts/test.sh' minute=* hour=* day=* month=* weekday=*"` |
| yum | RedHat和CentOS的软件包安装和管理 | 安装<br />`ansible all -m yum -a "name=httpd state=present"`<br/>`ansible all -m yum -a "name=httpd state=installed"`<br />卸载<br />`ansible all -m yum -a "name=httpd state=absent"`<br/>`ansible all -m yum -a "name=httpd state=removed"` |
| `service``systemd` | 用于管理远程主机的服务 | `ansible all -m systemd -a "name=httpd state=started enabled=yes"`<br />`ansible all -m systemd -a "name=httpd state=restarted"` |
| user | useradd, userdel, usermod | `ansible all -m user -a 'name=haha remove=no state=absent'` |
| group | groupadd, groupdel, groupmod | `ansible all -m group -a 'name=mygroup state=absent'` |
| setup | 可收集远程主机的facts变量的信息 | `ansible all -m setup -a 'filter=ansible_default_ipv4'` |
| authorized_key | 为特定的用户账号添加或删除 SSH authorized keys | `ansible all -m authorized_key -a "user=root key='{{lookup('file','/root/.ssh/id_rsa.pub')}}' path=/root/.ssh/authorized_keys manage_dir=no"` |
| replace | 和 sed 命令比较类似,用于正则匹配和替换 | `ansible all -m replace -a "path=/etc/fstab regexp=^(UUID.*) replace='#\1'"` |
| lineinfile | 正则匹配,更改某个关键参数值 | `ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"` |
<!--rehype:className=left-align-->
另见
---

270
docs/ascii-code.md Normal file
View File

@ -0,0 +1,270 @@
ASCII Code 备忘清单
===
这份速查表是 ASCII 码表的完整列表,包含了它们的数字和名称
ASCII 代码表
---
<!--rehype:body-class=cols-1&style=display:none;-->
### ASCII 代码表
| Symbol(符号) | Dec | Oct | Hex | Bin |
|------------------------------------|------|------|------|----------|
| NUL (Null) | 0 | 0 | 0 | 0 |
| SOH (Start of Heading) | 1 | 1 | 1 | 1 |
| STX (Start of Text) | 2 | 2 | 2 | 10 |
| ETX (End of Text) | 3 | 3 | 3 | 11 |
| EOT (End of Transmission) | 4 | 4 | 4 | 100 |
| ENQ (Enquiry) | 5 | 5 | 5 | 101 |
| ACK (Acknowledgment) | 6 | 6 | 6 | 110 |
| BEL (Bell) | 7 | 7 | 7 | 111 |
| BS (Back Space) | 8 | 10 | 8 | 1000 |
| HT (Horizontal Tab) | 9 | 11 | 9 | 1001 |
| LF (Line Feed) | 10 | 12 | 0A | 1010 |
| VT (Vertical Tab) | 11 | 13 | 0B | 1011 |
| FF (Form Feed) | 12 | 14 | 0C | 1100 |
| CR (Carriage Return) | 13 | 15 | 0D | 1101 |
| SO (Shift Out / X-On) | 14 | 16 | 0E | 1110 |
| SI (Shift In / X-Off) | 15 | 17 | 0F | 1111 |
| DLE (Data Line Escape) | 16 | 20 | 10 | 10000 |
| DC1 (Device Control 1 / oft. XON) | 17 | 21 | 11 | 10001 |
| DC2 (Device Control 2) | 18 | 22 | 12 | 10010 |
| DC3 (Device Control 3 / oft. XOFF) | 19 | 23 | 13 | 10011 |
| DC4 (Device Control 4) | 20 | 24 | 14 | 10100 |
| NAK (Negative Acknowledgement) | 21 | 25 | 15 | 10101 |
| SYN (Synchronous Idle) | 22 | 26 | 16 | 10110 |
| ETB (End of Transmit Block) | 23 | 27 | 17 | 10111 |
| CAN (Cancel) | 24 | 30 | 18 | 11000 |
| EM (End of Medium) | 25 | 31 | 19 | 11001 |
| SUB (Substitute) | 26 | 32 | 1A | 11010 |
| ESC (Escape) | 27 | 33 | 1B | 11011 |
| FS (File Separator) | 28 | 34 | 1C | 11100 |
| GS (Group Separator) | 29 | 35 | 1D | 11101 |
| RS (Record Separator) | 30 | 36 | 1E | 11110 |
| US (Unit Separator) | 31 | 37 | 1F | 11111 |
| (Space) | 32 | 40 | 20 | 100000 |
| ! | 33 | 41 | 21 | 100001 |
| " | 34 | 42 | 22 | 100010 |
| # | 35 | 43 | 23 | 100011 |
| $ | 36 | 44 | 24 | 100100 |
| % | 37 | 45 | 25 | 100101 |
| &amp; | 38 | 46 | 26 | 100110 |
| ' | 39 | 47 | 27 | 100111 |
| ( | 40 | 50 | 28 | 101000 |
| ) | 41 | 51 | 29 | 101001 |
| * | 42 | 52 | 2A | 101010 |
| + | 43 | 53 | 2B | 101011 |
| , | 44 | 54 | 2C | 101100 |
| - | 45 | 55 | 2D | 101101 |
| . | 46 | 56 | 2E | 101110 |
| / | 47 | 57 | 2F | 101111 |
| 0 | 48 | 60 | 30 | 110000 |
| 1 | 49 | 61 | 31 | 110001 |
| 2 | 50 | 62 | 32 | 110010 |
| 3 | 51 | 63 | 33 | 110011 |
| 4 | 52 | 64 | 34 | 110100 |
| 5 | 53 | 65 | 35 | 110101 |
| 6 | 54 | 66 | 36 | 110110 |
| 7 | 55 | 67 | 37 | 110111 |
| 8 | 56 | 70 | 38 | 111000 |
| 9 | 57 | 71 | 39 | 111001 |
| : | 58 | 72 | 3A | 111010 |
| ; | 59 | 73 | 3B | 111011 |
| &lt; | 60 | 74 | 3C | 111100 |
| = | 61 | 75 | 3D | 111101 |
| &gt; | 62 | 76 | 3E | 111110 |
| ? | 63 | 77 | 3F | 111111 |
| @ | 64 | 100 | 40 | 1000000 |
| A | 65 | 101 | 41 | 1000001 |
| B | 66 | 102 | 42 | 1000010 |
| C | 67 | 103 | 43 | 1000011 |
| D | 68 | 104 | 44 | 1000100 |
| E | 69 | 105 | 45 | 1000101 |
| F | 70 | 106 | 46 | 1000110 |
| G | 71 | 107 | 47 | 1000111 |
| H | 72 | 110 | 48 | 1001000 |
| I | 73 | 111 | 49 | 1001001 |
| J | 74 | 112 | 4A | 1001010 |
| K | 75 | 113 | 4B | 1001011 |
| L | 76 | 114 | 4C | 1001100 |
| M | 77 | 115 | 4D | 1001101 |
| N | 78 | 116 | 4E | 1001110 |
| O | 79 | 117 | 4F | 1001111 |
| P | 80 | 120 | 50 | 1010000 |
| Q | 81 | 121 | 51 | 1010001 |
| R | 82 | 122 | 52 | 1010010 |
| S | 83 | 123 | 53 | 1010011 |
| T | 84 | 124 | 54 | 1010100 |
| U | 85 | 125 | 55 | 1010101 |
| V | 86 | 126 | 56 | 1010110 |
| W | 87 | 127 | 57 | 1010111 |
| X | 88 | 130 | 58 | 1011000 |
| Y | 89 | 131 | 59 | 1011001 |
| Z | 90 | 132 | 5A | 1011010 |
| [ | 91 | 133 | 5B | 1011011 |
| \ | 92 | 134 | 5C | 1011100 |
| ] | 93 | 135 | 5D | 1011101 |
| ^ | 94 | 136 | 5E | 1011110 |
| _ | 95 | 137 | 5F | 1011111 |
| <code>\`</code> | 96 | 140 | 60 | 1100000 |
| a | 97 | 141 | 61 | 1100001 |
| b | 98 | 142 | 62 | 1100010 |
| c | 99 | 143 | 63 | 1100011 |
| d | 100 | 144 | 64 | 1100100 |
| e | 101 | 145 | 65 | 1100101 |
| f | 102 | 146 | 66 | 1100110 |
| g | 103 | 147 | 67 | 1100111 |
| h | 104 | 150 | 68 | 1101000 |
| i | 105 | 151 | 69 | 1101001 |
| j | 106 | 152 | 6A | 1101010 |
| k | 107 | 153 | 6B | 1101011 |
| l | 108 | 154 | 6C | 1101100 |
| m | 109 | 155 | 6D | 1101101 |
| n | 110 | 156 | 6E | 1101110 |
| o | 111 | 157 | 6F | 1101111 |
| p | 112 | 160 | 70 | 1110000 |
| q | 113 | 161 | 71 | 1110001 |
| r | 114 | 162 | 72 | 1110010 |
| s | 115 | 163 | 73 | 1110011 |
| t | 116 | 164 | 74 | 1110100 |
| u | 117 | 165 | 75 | 1110101 |
| v | 118 | 166 | 76 | 1110110 |
| w | 119 | 167 | 77 | 1110111 |
| x | 120 | 170 | 78 | 1111000 |
| y | 121 | 171 | 79 | 1111001 |
| z | 122 | 172 | 7A | 1111010 |
| { | 123 | 173 | 7B | 1111011 |
| | 124 | 174 | 7C | 1111100 |
| } | 125 | 175 | 7D | 1111101 |
| ~ | 126 | 176 | 7E | 1111110 |
| (Delete) | 127 | 177 | 7F | 1111111 |
| € | 128 | 200 | 80 | 10000000 |
| | 129 | 201 | 81 | 10000001 |
| | 130 | 202 | 82 | 10000010 |
| ƒ | 131 | 203 | 83 | 10000011 |
| „ | 132 | 204 | 84 | 10000100 |
| … | 133 | 205 | 85 | 10000101 |
| † | 134 | 206 | 86 | 10000110 |
| ‡ | 135 | 207 | 87 | 10000111 |
| ˆ | 136 | 210 | 88 | 10001000 |
| ‰ | 137 | 211 | 89 | 10001001 |
| Š | 138 | 212 | 8A | 10001010 |
| | 139 | 213 | 8B | 10001011 |
| Œ | 140 | 214 | 8C | 10001100 |
| | 141 | 215 | 8D | 10001101 |
| Ž | 142 | 216 | 8E | 10001110 |
| | 143 | 217 | 8F | 10001111 |
| | 144 | 220 | 90 | 10010000 |
| | 145 | 221 | 91 | 10010001 |
| | 146 | 222 | 92 | 10010010 |
| “ | 147 | 223 | 93 | 10010011 |
| ” | 148 | 224 | 94 | 10010100 |
| • | 149 | 225 | 95 | 10010101 |
| | 150 | 226 | 96 | 10010110 |
| — | 151 | 227 | 97 | 10010111 |
| ˜ | 152 | 230 | 98 | 10011000 |
| ™ | 153 | 231 | 99 | 10011001 |
| š | 154 | 232 | 9A | 10011010 |
| | 155 | 233 | 9B | 10011011 |
| œ | 156 | 234 | 9C | 10011100 |
| | 157 | 235 | 9D | 10011101 |
| ž | 158 | 236 | 9E | 10011110 |
| Ÿ | 159 | 237 | 9F | 10011111 |
| (Non-breaking space) | 160 | 240 | A0 | 10100000 |
| ¡ | 161 | 241 | A1 | 10100001 |
| ¢ | 162 | 242 | A2 | 10100010 |
| £ | 163 | 243 | A3 | 10100011 |
| ¤ | 164 | 244 | A4 | 10100100 |
| ¥ | 165 | 245 | A5 | 10100101 |
| ¦ | 166 | 246 | A6 | 10100110 |
| § | 167 | 247 | A7 | 10100111 |
| ¨ | 168 | 250 | A8 | 10101000 |
| © | 169 | 251 | A9 | 10101001 |
| ª | 170 | 252 | AA | 10101010 |
| « | 171 | 253 | AB | 10101011 |
| ¬ | 172 | 254 | AC | 10101100 |
| (Soft hyphen) | 173 | 255 | AD | 10101101 |
| ® | 174 | 256 | AE | 10101110 |
| ¯ | 175 | 257 | AF | 10101111 |
| ° | 176 | 260 | B0 | 10110000 |
| ± | 177 | 261 | B1 | 10110001 |
| ² | 178 | 262 | B2 | 10110010 |
| ³ | 179 | 263 | B3 | 10110011 |
| ´ | 180 | 264 | B4 | 10110100 |
| µ | 181 | 265 | B5 | 10110101 |
| ¶ | 182 | 266 | B6 | 10110110 |
| · | 183 | 267 | B7 | 10110111 |
| ¸ | 184 | 270 | B8 | 10111000 |
| ¹ | 185 | 271 | B9 | 10111001 |
| º | 186 | 272 | BA | 10111010 |
| » | 187 | 273 | BB | 10111011 |
| ¼ | 188 | 274 | BC | 10111100 |
| ½ | 189 | 275 | BD | 10111101 |
| ¾ | 190 | 276 | BE | 10111110 |
| ¿ | 191 | 277 | BF | 10111111 |
| À | 192 | 300 | C0 | 11000000 |
| Á | 193 | 301 | C1 | 11000001 |
| Â | 194 | 302 | C2 | 11000010 |
| Ã | 195 | 303 | C3 | 11000011 |
| Ä | 196 | 304 | C4 | 11000100 |
| Å | 197 | 305 | C5 | 11000101 |
| Æ | 198 | 306 | C6 | 11000110 |
| Ç | 199 | 307 | C7 | 11000111 |
| È | 200 | 310 | C8 | 11001000 |
| É | 201 | 311 | C9 | 11001001 |
| Ê | 202 | 312 | CA | 11001010 |
| Ë | 203 | 313 | CB | 11001011 |
| Ì | 204 | 314 | CC | 11001100 |
| Í | 205 | 315 | CD | 11001101 |
| Î | 206 | 316 | CE | 11001110 |
| Ï | 207 | 317 | CF | 11001111 |
| Ð | 208 | 320 | D0 | 11010000 |
| Ñ | 209 | 321 | D1 | 11010001 |
| Ò | 210 | 322 | D2 | 11010010 |
| Ó | 211 | 323 | D3 | 11010011 |
| Ô | 212 | 324 | D4 | 11010100 |
| Õ | 213 | 325 | D5 | 11010101 |
| Ö | 214 | 326 | D6 | 11010110 |
| × | 215 | 327 | D7 | 11010111 |
| Ø | 216 | 330 | D8 | 11011000 |
| Ù | 217 | 331 | D9 | 11011001 |
| Ú | 218 | 332 | DA | 11011010 |
| Û | 219 | 333 | DB | 11011011 |
| Ü | 220 | 334 | DC | 11011100 |
| Ý | 221 | 335 | DD | 11011101 |
| Þ | 222 | 336 | DE | 11011110 |
| ß | 223 | 337 | DF | 11011111 |
| à | 224 | 340 | E0 | 11100000 |
| á | 225 | 341 | E1 | 11100001 |
| â | 226 | 342 | E2 | 11100010 |
| ã | 227 | 343 | E3 | 11100011 |
| ä | 228 | 344 | E4 | 11100100 |
| å | 229 | 345 | E5 | 11100101 |
| æ | 230 | 346 | E6 | 11100110 |
| ç | 231 | 347 | E7 | 11100111 |
| è | 232 | 350 | E8 | 11101000 |
| é | 233 | 351 | E9 | 11101001 |
| ê | 234 | 352 | EA | 11101010 |
| ë | 235 | 353 | EB | 11101011 |
| ì | 236 | 354 | EC | 11101100 |
| í | 237 | 355 | ED | 11101101 |
| î | 238 | 356 | EE | 11101110 |
| ï | 239 | 357 | EF | 11101111 |
| ð | 240 | 360 | F0 | 11110000 |
| ñ | 241 | 361 | F1 | 11110001 |
| ò | 242 | 362 | F2 | 11110010 |
| ó | 243 | 363 | F3 | 11110011 |
| ô | 244 | 364 | F4 | 11110100 |
| õ | 245 | 365 | F5 | 11110101 |
| ö | 246 | 366 | F6 | 11110110 |
| ÷ | 247 | 367 | F7 | 11110111 |
| ø | 248 | 370 | F8 | 11111000 |
| ù | 249 | 371 | F9 | 11111001 |
| ú | 250 | 372 | FA | 11111010 |
| û | 251 | 373 | FB | 11111011 |
| ü | 252 | 374 | FC | 11111100 |
| ý | 253 | 375 | FD | 11111101 |
| þ | 254 | 376 | FE | 11111110 |
| ÿ | 255 | 377 | FF | 11111111 |
<!--rehype:className=show-header-->

View File

@ -61,6 +61,7 @@ bash 注释
`$@` | 所有参数,从第一个开始
`$-` | 当前选项
`$_` | 上一个命令的最后一个参数
<!--rehype:className=left-align-->
见:[特殊参数](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables)
@ -152,6 +153,7 @@ Bash 参数扩展
`${FOO:=val}` | 如果未设置,则将 `$FOO` 设置为 `val`
`${FOO:+val}` | `val` 如果设置了`$FOO`
`${FOO:?message}` | 如果 `$FOO` 未设置,则显示消息并退出
<!--rehype:className=code-nowrap left-align-->
### 替代 Substitution
@ -195,15 +197,21 @@ echo ${name:0:length} # => Jo
SRC="/path/to/foo.cpp"
```
---
```bash
BASEPATH=${SRC##*/}
echo $BASEPATH # => "foo.cpp"
```
---
```bash
DIRPATH=${SRC%$BASEPATH}
echo $DIRPATH # => "/path/to/"
```
### Transform
### 转换
```bash
STR="HELLO WORLD!"
@ -265,7 +273,7 @@ for e in "${Fruits[@]}"; do
done
```
#### With index
#### 有索引
```bash
for i in "${!Fruits[@]}"; do
@ -348,12 +356,12 @@ Bash 条件句
条件 | 描述
:- | -
`[[ NUM -eq NUM ]]` | 等于 <yel>Eq</yel>ual |
`[[ NUM -ne NUM ]]` | 不等于 <yel>N</yel>ot <yel>e</yel>qual |
`[[ NUM -lt NUM ]]` | 小于 <yel>L</yel>ess <yel>t</yel>han |
`[[ NUM -le NUM ]]` | 小于等于 <yel>L</yel>ess than or <yel>e</yel>qual |
`[[ NUM -gt NUM ]]` | 大于 <yel>G</yel>reater <yel>t</yel>han |
`[[ NUM -ge NUM ]]` | 大于等于 <yel>G</yel>reater than or <yel>e</yel>qual |
`[[ NUM -eq NUM ]]` | 等于 <yel>Eq</yel>ual
`[[ NUM -ne NUM ]]` | 不等于 <yel>N</yel>ot <yel>e</yel>qual
`[[ NUM -lt NUM ]]` | 小于 <yel>L</yel>ess <yel>t</yel>han
`[[ NUM -le NUM ]]` | 小于等于 <yel>L</yel>ess than or <yel>e</yel>qual
`[[ NUM -gt NUM ]]` | 大于 <yel>G</yel>reater <yel>t</yel>han
`[[ NUM -ge NUM ]]` | 大于等于 <yel>G</yel>reater than or <yel>e</yel>qual
`(( NUM < NUM ))` | 小于
`(( NUM <= NUM ))` | 小于或等于
`(( NUM > NUM ))` | 比...更大
@ -448,10 +456,10 @@ fi
条件 | 描述
:- | -
`[[ -o noclobber ]]` | 如果启用 OPTION
`[[ ! EXPR ]]` | 不是 Not
`[[ X && Y ]]` | 和 And
`[[ X \|\| Y ]]` | 或者 Or
`[[ -o noclobber ]]` | 如果启用 <pur>OPTION</pur>
`[[ ! EXPR ]]` | 不是 <pur>Not</pur>
`[[ X && Y ]]` | 和 <pur>And</pur>
`[[ X \|\| Y ]]` | 或者 <pur>Or</pur>
### 逻辑和,或
@ -536,10 +544,10 @@ done
```bash
for number in $(seq 1 3); do
if [[ $number == 2 ]]; then
# Skip entire rest of loop.
# 跳过整个循环的其余部分。
break;
fi
# This will only print 1
# 这只会打印 1
echo "$number"
done
```
@ -558,7 +566,7 @@ done
```bash
while true; do
# here is some code.
# 下面是一些代码
done
```
@ -566,7 +574,7 @@ done
```bash
while :; do
# here is some code.
# 下面是一些代码
done
```
@ -589,8 +597,9 @@ myfunc() {
}
```
同上(替代语法)
```bash
# 同上(替代语法)
function myfunc() {
echo "hello $1"
}
@ -635,42 +644,61 @@ Bash 选项
### 选项
避免覆盖文件
```bash
# 避免覆盖文件
# (echo "hi" > foo)
set -o noclobber
```
# 用于出错时退出
# 避免级联错误
用于出错时退出,避免级联错误
```bash
set -o errexit
```
# 揭示隐藏的失败
揭示隐藏的失败
```bash
set -o pipefail
```
# 公开未设置的变量
公开未设置的变量
```bash
set -o nounset
```
### 全局选项
不匹配的 glob 被删除
```bash
# 不匹配的 glob 被删除
# ('*.foo' => '')
shopt -s nullglob
shopt -s nullglob # ('*.foo' => '')
```
# 不匹配的 glob 抛出错误
不匹配的 glob 抛出错误
```bash
shopt -s failglob
```
# 不区分大小写的球体
不区分大小写的球体
```bash
shopt -s nocaseglob
```
# 通配符匹配点文件
# ("*.sh" => ".foo.sh")
shopt -s dotglob
通配符匹配点文件
# 允许 ** 进行递归匹配
# ('lib/**/*.rb' => 'lib/a/b/c.rb')
shopt -s globstar
```bash
shopt -s dotglob # ("*.sh" => ".foo.sh")
```
允许 ** 进行递归匹配
```bash
shopt -s globstar # ('lib/**/*.rb' => 'lib/a/b/c.rb')
```
Bash 历史
@ -682,8 +710,9 @@ Bash 历史
命令 | 描述
:- | -
`history` | 显示历史
`sudo !!` | 使用 sudo 运行上一个命令
`sudo !!` | 使用 `sudo` 运行上一个命令
`shopt -s histverify` | 不要立即执行扩展结果
<!--rehype:className=left-align-->
### 表达式
@ -694,6 +723,7 @@ Bash 历史
`!-n` | 展开第 `n` 个最近的命令
`!n` | 展开历史中的第 `n` 个命令
`!<command>` | 展开最近调用的命令 `<command>`
<!--rehype:className=left-align-->
### 操作
@ -704,6 +734,7 @@ Bash 历史
`!!:gs/<FROM>/<TO>/` | 在最近的命令中将所有出现的 `<FROM>` 替换为 `<TO>`
`!$:t` | 仅从最近命令的最后一个参数扩展基本名称
`!$:h` | 仅从最近命令的最后一个参数展开目录
<!--rehype:className=left-align-->
`!!` 和 `!$` 可以替换为任何有效的扩展。
@ -716,34 +747,35 @@ Bash 历史
`!$` | 从最近的命令中展开最后一个标记
`!!:n-m` | 从最近的命令扩展令牌范围
`!!:n-$` | 从最近的命令中将第 `n` 个标记展开到最后
<!--rehype:className=left-align-->
`!!` 可以替换为任何有效的扩展,即 `!cat`、`!-2`、`!42` 等。
杂项
-------------
---
### 数值计算
```bash
$((a + 200)) # Add 200 to $a
$((a + 200)) # $a 加 200
```
```bash
$(($RANDOM%200)) # Random number 0..199
$(($RANDOM%200)) # 随机数 0..199
```
### 子 shell
```bash
(cd somedir; echo "I'm now in $PWD")
pwd # still in first directory
pwd # 仍然在第一个目录
```
### 检查命令
```bash
command -V cd
#=> "cd is a function/alias/whatever"
#=> "cd 是一个函数/别名/其他"
```
### 重定向
@ -964,11 +996,11 @@ END
### 转到上一个目录
```bash
pwd # /home/user/foo
pwd # /home/user/foo
cd bar/
pwd # /home/user/foo/bar
pwd # /home/user/foo/bar
cd -
pwd # /home/user/foo
pwd # /home/user/foo
```
### 读取输入
@ -1010,6 +1042,25 @@ echo "${args[@]}"
将参数放入数组中,然后追加
### 调试模式
启用调试模式,会把脚本中的每条命令的执行情况打印出来。它可以在整个会话或脚本上运行,也可以在脚本内以编程方式启用。
以调试模式运行脚本(整个脚本都会打印调试信息)
```bash
$ bash -x myscript.sh
```
在 bash 脚本中打开调试(针对部分内容打印调试信息)
```bash
#!/bin/bash
set -x # Enable debugging
# some code here
set +x # Disable debugging output.
```
Bash 颜色
----
@ -1018,10 +1069,6 @@ Bash 颜色
您可以通过为其输出着色来使您的 BASH 脚本更漂亮,使用以下模板编写彩色文本:
```bash
echo -e "\e[COLORm文字变色了\e[0m"
```
#### 示例
```bash
@ -1079,35 +1126,36 @@ m # 设置图形模式
`5` | 缓慢闪烁
`6` | 快速闪烁
`7` | 反显
`8` | 隐藏 | 未广泛支持
`8` | 隐藏 | 未广泛支持
`9` | 划除
<!--rehype:className=left-align-->
### ANSI — 颜色转义码
颜色 | 前景色 | 背景色 | 示例
:- | -- | -- | --
`Black` 黑色 | 30 | 40 | ``<!--rehype:style=background:#000;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Red` 红色 | 31 | 41 | ``<!--rehype:style=background:#c23621;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Green` 绿色 | 32 | 42 | ``<!--rehype:style=background:#25bc26;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Yellow` 黄色 | 33 | 43 | ``<!--rehype:style=background:#cdcd00;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Blue` 蓝色 | 34 | 44 | ``<!--rehype:style=background:#0000ee;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Purple` 紫色 | 35 | 45 | ``<!--rehype:style=background:#cd00cd;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Cyan` 青色 | 36 | 46 | ``<!--rehype:style=background:#00AAAA;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`White` 白色 | 37 | 47 | ``<!--rehype:style=background:#e5e5e5;padding:0.2rem 1.2rem;border: 1px solid #333;-->
颜色 | 名称 | 前景色 | 背景色 | 示例
:- | --| -- | -- | --
`Black` | 黑色 | 30 | 40 | `黑`<!--rehype:style=background:#000;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Red` | 红色 | 31 | 41 | `红`<!--rehype:style=background:#c23621;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Green` | 绿色 | 32 | 42 | `绿`<!--rehype:style=background:#25bc26;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Yellow` | 黄色 | 33 | 43 | `黄`<!--rehype:style=background:#cdcd00;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Blue` | 蓝色 | 34 | 44 | `蓝`<!--rehype:style=background:#0000ee;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Purple` | 紫色 | 35 | 45 | `紫`<!--rehype:style=background:#cd00cd;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Cyan` | 青色 | 36 | 46 | `青`<!--rehype:style=background:#00AAAA;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`White` | 白色 | 37 | 47 | `白`<!--rehype:style=background:#e5e5e5;padding:0.2rem 1.2rem;border: 1px solid #333;-->
<!--rehype:className=show-header left-align-->
### ANSI — 颜色转义码(亮色)
颜色 | 前色 | 背色 | 示例
颜色 | 前色 | 背色 | 示例
:- | -- | -- | --
`Bright Black(Gray)` 灰色 | 90 | 100 | ``<!--rehype:style=background:#555555;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Red` 亮红色 | 91 | 101 | ``<!--rehype:style=background:#FF5555;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Green` 亮绿色 | 92 | 102 | ``<!--rehype:style=background:#55FF55;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Yellow` 亮黄色 | 93 | 103 | ``<!--rehype:style=background:#FFFF55;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Blue` 亮蓝色 | 94 | 104 | ``<!--rehype:style=background:#5555FF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Magenta` 亮紫色 | 95 | 105 | ``<!--rehype:style=background:#FF55FF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Cyan` 亮青色 | 96 | 106 | ``<!--rehype:style=background:#55FFFF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright White` 浅灰 | 97 | 107 | ``<!--rehype:style=background:#ffffff;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`BrightBlack(Gray)` 灰色 | 90 | 100 | `90`<!--rehype:style=background:#555555;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Red` 亮红色 | 91 | 101 | `91`<!--rehype:style=background:#FF5555;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Green` 亮绿色 | 92 | 102 | `92`<!--rehype:style=background:#55FF55;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Yellow` 亮黄色 | 93 | 103 | `93`<!--rehype:style=background:#FFFF55;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Blue` 亮蓝色 | 94 | 104 | `94`<!--rehype:style=background:#5555FF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Magenta` 亮紫色 | 95 | 105 | `95`<!--rehype:style=background:#FF55FF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright Cyan` 亮青色 | 96 | 106 | `96`<!--rehype:style=background:#55FFFF;padding:0.2rem 1.2rem;border: 1px solid #333;-->
`Bright White` 浅灰 | 97 | 107 | `97`<!--rehype:style=background:#ffffff;padding:0.2rem 1.2rem;border: 1px solid #333;-->
<!--rehype:className=show-header left-align-->
### 可用功能
@ -1134,6 +1182,7 @@ m # 设置图形模式
`6n` | DSR 设备状态报告 | 以 `ESC[n;mR` (就像在键盘上输入)向应用程序报告光标位置(CPR),其中 `n`是行, `m` 是列
`s` | SCP 保存光标位置 | 保存光标的当前位置
`u` | RCP 恢复光标位置 | 恢复保存的光标位置
<!--rehype:className=left-align-->
另见
----

263
docs/blender.md Normal file
View File

@ -0,0 +1,263 @@
Blender 键盘快捷键
===
Blender 中 187 个键盘快捷键的视觉备忘单
键盘快捷键
---------
<!--rehype:body-class=cols-2-->
### 普遍的
快捷键 | 说明
---|---
`Esc` | 取消 Blender 功能而不做任何更改
`Space` | 打开工具箱
`Tab` | 启动或退出编辑模式
`F1` | 加载 Blender 文件,将窗口更改为文件窗口
`Shift` `F1` | 附加其他文件中的部分,或作为库数据加载
`F2` | 写入 Blender 文件,将窗口更改为文件窗口
`Shift` `F2` | 将场景导出为 DXF 文件
`Ctrl` `F2` | 将场景导出为 VRML1 文件
`F3` | 如果图片已渲染,并且文件格式如显示按钮中所示,则写入图片
`Ctrl` `F3` | 保存活动窗口的屏幕转储
`Ctrl` `Shift` `F3` | 保存整个 Blender 屏幕的屏幕转储
`F4` | 显示逻辑上下文
`F5` | 显示着色上下文、灯光、材质或世界子上下文
`F6` | 显示着色上下文和纹理子上下文
`F7` | 显示对象上下文
`F8` | 显示着色上下文和世界子上下文
`F9` | 显示编辑上下文
`F10` | 显示场景上下文
`F11` | 隐藏或显示渲染窗口
`F12` | 从活动相机开始渲染
`Left` | 转到上一帧
`Shift` `Left` | 转到第一帧
`Right` | 转到下一帧
`Shift` `Right` | 转到最后一帧
`Up` | 前进 10 帧
`Down` | 后退 10 帧
`Alt` `A` | 将当前Blender窗口更改为动画播放模式光标变为计数器
`Alt` `Shift` `A` | 将当前窗口和所有3D窗口更改为动画播放模式
`I` | 插入按键菜单,该菜单因窗口而异
`J` | 切换渲染缓冲区
`Ctrl` `O` | 打开上次保存的文件
`Q` | 退出搅拌机
`Ctrl` `Alt` `T` | 计时器菜单,此菜单提供有关绘图速度的信息的访问
`Ctrl` `U` | 保存用户默认值当前项目设置将写入默认文件每次启动时都会加载该文件Blender
`Ctrl` `W` | 写入文件而不打开文件窗口
`Alt` `W` | 写入视频景观文件
`Ctrl` `X` | 擦除除渲染缓冲区之外的所有内容,重新加载默认场景
`Ctrl` `Y` | 重做
`Ctrl` `Z` | 撤消
`Ctrl` `Shift` `Z` | 重做
<!--rehype:className=shortcuts-->
### 对象模式
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
---|---
`Home` | 可见层中的所有对象均完整显示,位于窗口中央
`PgUp` | 选择下一个对象键,如果选择了多个对象键,则选择循环向上移动
`Shift` `PgUp` | 将下一个对象键添加到选择中
`PgDn` | 选择上一个对象键,如果选择了多个对象键,则选择循环向上移动
`Shift` `PgDn` | 将前一个对象键添加到选择中
<code>\`</code> | 选择所有图层
`Shift` <code>\`</code> | 恢复到上一层设置
`Tab` | 启动或停止编辑模式
`A` | 选择或取消选择全部
`Ctrl` `A` | 应用尺寸和旋转
`Ctrl` `Shift` `A` | 如果活动对象被自动复制,则会弹出一个用于实际创建对象的菜单
`Shift` `A` | 调出添加菜单,以 ADD 开头的工具箱项目
`B` | 边框选择,用鼠标左键画一个矩形来选择对象
`Shift` `B` | 渲染边框,仅适用于相机视图模式
`C` | 中心视图3D光标的位置成为3D窗口的新中心
`Alt` `C` | 转换菜单,根据活动对象显示弹出菜单,使您可以转换某些类型的 ObData
`Ctrl` `C` | 复制菜单,此菜单将信息从活动对象复制到选定对象
`Shift` `C` | 中心零视图3D 光标设置为零并更改视图,以便可以显示所有对象
`D` | 显示绘图模式菜单
`Shift` `D` | 添加重复项,所选对象被重复
`Alt` `D` | 添加链接副本,创建所选对象的链接副本
`Ctrl` `D` | 将纹理图像绘制为线
`Alt` `E` | 启动或停止编辑模式
`F` | 如果所选对象是混搭,则打开或关闭面选择模式
`Ctrl` `F` | 对面进行排序,活动网格对象的面根据 3D 窗口中的当前视图进行排序
`G` | 抓取模式或翻译模式
`Alt` `G` | 清除以抓取模式给出的翻译
`Shift` `G` | 团体选拔
`I` | 插入对象关键点,在当前帧所有选定对象中插入一个关键位置
`Ctrl` `J` | 连接对象,所有选定的相同类型的对象都添加到活动对象中
`K` | 显示关键点,为所有选定对象打开绘制关键点选项
`Shift` `K` | 显示用于显示和选择所有键的弹出菜单
`L` | 使所选对象成为本地对象,使库链接对象成为当前场景的本地对象
`Ctrl` `L` | 链接选定对象,将一些活动对象数据链接到所有选定对象
`Shift` `L` | 选择链接,选择以某种方式链接到活动对象的所有对象
`M` | 将选定的对象移动到另一层
`Ctrl` `M` | 镜像菜单,可以沿 X、Y 或 Z 轴镜像对象
`N` | 数字面板,显示活动对象的位置、旋转、缩放比例并可修改
`Alt` `O` | 清除原点所有子对象的原点都被删除这导致它们移动到父对象的确切位置objects
`Shift` `O` | 如果选定的对象是网格,则打开或关闭 subsurf
`Ctrl` `P` | 使选定对象成为活动对象的子对象
`Alt` `P` | 清除父级关系,询问用户是否希望保留或清除父级引发的转换
`R` | 旋转模式,适用于选定的对象
`Alt` `R` | 清除旋转,将选定对象的 X、Y 和 Z 旋转设置为零
`S` | 大小模式或缩放模式,适用于选定的对象
`Alt` `S` | 清除大小,将选定对象的 X、Y、Z 尺寸设置为 1
`Shift` `S` | 打开快照菜单
`T` | 纹理空间模式可以以相同的方式更改所选对象的纹理空间维度的位置for grab and size mode
`Ctrl` `T` | 使选定的对象跟踪活动对象
`Alt` `T` | 清除旧样式轨道,约束轨道被删除,因为所有约束都被删除
`U` | 使对象成为单用户,链接的逆操作
`V` | 切换进入和退出顶点绘制模式
`Alt` `V` | 对象图像方面,此热键设置所选对象相对于对象尺寸的 X 和 Y 尺寸image texture they have
`W` | 打开对象布尔菜单
`X` | 删除选定的对象
`Z` | 打开或关闭固体模式
`Shift` `Z` | 打开或关闭着色模式
`Alt` `Z` | 打开或关闭纹理模式
<!--rehype:className=shortcuts-->
### 编辑模式 - 常规
快捷键 | 说明
---|---
`Tab` | 启动或停止编辑模式
`Alt` `E` | 启动或停止编辑模式(替代)
`Ctrl` `Tab` | 在顶点选择、边选择和面选择模式之间切换
`A` | 全选或取消全选
`B` `B` | 圆圈选择
`Ctrl` `H` | 选择顶点后,这将创建一个钩子对象
`N` | 数字面板,比对象模式一简单
`O` | 切换成比例编辑和退出成比例编辑
`Shift` `O` | 在平滑和锐利比例编辑之间切换
`P` | 分开,您可以选择用所有选定的顶点、边、面和曲线来制作一个新对象
`Ctrl` `P` | 使顶点成为父级
`Ctrl` `S` | 剪切,在编辑模式下此操作使您可以使选定的形状倾斜
`U` | 撤消
`W` | 显示特价弹出菜单
`Shift` `W` | 扭曲,使用此选项可以将选定的顶点弯曲成曲线
<!--rehype:className=shortcuts-->
### 编辑模式 - 网格
<!--rehype:wrap-class=row-span-3-->
快捷键 | 说明
---|---
`Ctrl` `+` | 将通过边连接到已选定顶点的所有顶点添加到选择中
`Ctrl` `-` | 从选择中删除选定顶点外环的所有顶点
`C` | 如果使用曲线变形,则打开或关闭曲线循环模式
`E` | 挤出选定的
`Shift` `E` | 折痕海面边缘
`Ctrl` `E` | 标记 LSCM 接缝
`F` | 制作边缘或面
`Shift` `F` | 填充选定,所有选定的由边包围并形成闭合多边形的顶点都用三角形面填充
`Alt` `F` | 美容填充,所有选定的三角形面的边缘都会交换,从而形成相同大小的面
`Ctrl` `F` | 翻转面,将选定的三角形面配对并交换每对的公共边
`H` | 隐藏选定,隐藏所有选定的顶点和面
`Shift` `H` | 隐藏未选中,隐藏所有未选中的顶点和面
`Alt` `H` | Reveal所有隐藏的顶点和面都重新绘制
`Alt` `J` | 连接面,选定的三角形面成对连接并转换为四边形
`K` | 刀工具菜单
`L` | 选择链接
`Shift` `L` | 取消选择链接
`Ctrl` `L` | 选择链接的选定内容
`M` | 镜像,打开一个弹出窗口,询问要镜像的轴
`Alt` `M` | 根据弹出窗口中的选择将选定的顶点合并为重心或光标处
`Ctrl` `N` | 计算外部法线
`Ctrl` `Shift` `N` | 计算内部法线
`Alt` `S` | 沿其局部法线方向缩放每个顶点
`Ctrl` `T` | 制作三角形,所有选定的面都转换为三角形
`U` | 撤消
`Shift` `U` | 重做
`Alt` `U` | 撤消菜单
`W` | 特别菜单
`X` | 删除所选内容
`Y` | 分割,此命令分割网格的选定部分而不删除面
<!--rehype:className=shortcuts-->
### 编辑模式 - 曲线
快捷键 | 说明
---|---
`C` | 将选定的曲线设置为循环或关闭循环
`E` | 挤出曲线
`F` | 添加线段,在两条曲线末端的两个选定顶点之间添加一条线段
`H` | 切换手柄对齐或自由
`Shift` `H` | 将句柄设置为自动
`Ctrl` `H` | 计算句柄
`L` | 选择链接
`Shift` `L` | 取消选择链接
`M` | 与网格中的顶点完全相同地镜像选定的控制点
`T` | 倾斜模式,为 3D 曲线中的每个顶点指定额外的轴旋转
`Alt` `T` | 清晰的倾斜
`V` | 矢量手柄
`W` | 出现曲线专用菜单
`X` | 删除所选内容
<!--rehype:className=shortcuts-->
### 编辑模式 - 曲面
快捷键 | 说明
---|---
`C` | 切换循环菜单
`E` | 挤出选定的
`F` | 添加线段,在两条曲线末端的两个选定顶点之间添加一条线段
`L` | 选择链接
`Shift` `L` | 取消选择链接
`M` | 与网格中的顶点完全相同地镜像选定的控制点
`Shift` `R` | 选择行,从最后一个选定的顶点开始
`W` | 出现曲面的特殊菜单
`X` | 删除所选内容
<!--rehype:className=shortcuts-->
### 编辑模式 - 字体
快捷键 | 说明
---|---
`Right` | 将文本光标向前移动一位
`Shift` `Right` | 将文本光标移至行尾
`Left` | 将文本光标向后移动一位
`Shift` `Left` | 将文本光标移至行首
`Down` | 将文本光标向前移动一行
`Shift` `Down` | 将文本光标移动到文本末尾
`Up` | 将文本光标向后移动一行
`Shift` `Up` | 将文本光标移动到文本开头
`Alt` `U` | 重新加载原始数据
`Alt` `V` | 粘贴文本
<!--rehype:className=shortcuts-->
### 脸部选择
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
---|---
`Tab` | 切换到编辑模式
`F` | 选择多个共面的面后,只要它们保持共面,这会将它们合并为一个 FGon
`L` | 选择链接的 UV
`R` | 调用允许旋转 UV 坐标或顶点列的菜单
`U` | 调用 UV 计算菜单
<!--rehype:className=shortcuts-->
### 顶点绘制
快捷键 | 说明
---|---
`Shift` `K` | 所有顶点颜色都被删除,它们更改为当前绘制颜色
`U` | 撤消,按两次重做撤消的操作
`W` | 共享顶点调用,共享顶点的所有面的颜色被混合
<!--rehype:className=shortcuts-->
### 紫外线编辑器
快捷键 | 说明
---|---
`E` | LSCM 展开,在 UV 编辑器中可见的面上启动
`P` | 固定选定的顶点,当执行 LSCM 展开时,它们将保留在 UV 编辑器上的适当位置
`Alt` `P` | 取消固定选定的顶点
<!--rehype:className=shortcuts-->
Also see
--------
- [Keyboard shortcuts for Blender](https://download.blender.org/documentation/BlenderHotkeyReference.pdf) _(download.blender.org)_

View File

@ -18,13 +18,13 @@ int main() {
}
```
使用 `gcc` 编译 `hello.c` 文件
使用 `gcc` 编译 `hello.c` 文件
```bash
$ gcc -o hello hello.c
```
运行编译后的二进制文件(`hello`)
运行编译后的二进制文件可执行文件(`hello`)
```bash
$ ./hello
@ -37,8 +37,11 @@ $ ./hello
```c
int myNum = 15;
int myNum2; // 不赋值,然后再赋值
myNum2 = 15;
int myNum2; // 声明变量 myNum2
// 变量声明后第一次赋值我们称为初始化
// 如果 初始化 和 赋值 在同一行
// 那么我们可以直接称为 定义变量 myNum2
myNum2 = 15;
int myNum3 = 15; // myNum3 值为 15
myNum3 = 10; // 现在 myNum3 值为 10
@ -55,6 +58,8 @@ int x = 5, y = 6, z = 50;
### 常量 Constants
常量在 C 语言中我们一般理解为不能被改变的值,活用常量与符号常量
```c
const int minutesPerHour = 60;
const float PI = 3.14;
@ -443,7 +448,7 @@ int* ptr = &myAge; // 名为 ptr 的指针变量,用于存储 myAge
printf("%d\n", myAge); // 输出 myAge (43) 的值
printf("%p\n", \&myAge); // 输出 myAge 的内存地址0x7ffe5367e044
printf("%p\n", &myAge); // 输出 myAge 的内存地址0x7ffe5367e044
printf("%p\n", ptr); // 用指针0x7ffe5367e044输出myAge的内存地址
```
@ -747,7 +752,8 @@ Carole 和 Debra: 我们爱你!
```c
#include <stdio.h>
#define tokenpaster(n) printf ("token" #n " = %d", token##n)
#define tokenpaster(n) \
printf ("token" #n " = %d", token##n)
int main(void){
int token34 = 40;
@ -766,8 +772,9 @@ int main(void){
#endif
int main(void) {
printf("Here is the message: %s\n", MESSAGE);
return 0;
printf("信息如下: %s\n", \
MESSAGE);
return 0;
}
```
@ -792,8 +799,9 @@ int square(int x) {
#define MAX(x,y) ((x) > (y) ? (x) : (y))
int main(void) {
printf("Max between 20 and 10 is %d\n", MAX(10, 20));
return 0;
printf("20 到 10 之间的最大值是 %d\n", \
MAX(10, 20));
return 0;
}
```

149
docs/chown.md Normal file
View File

@ -0,0 +1,149 @@
Chown 备忘清单
===
这份快速参考备忘单提供了改变文件或目录的所有者的简要概述,以及 chown 命令的操作
入门
--------
### 介绍
Linux/Unix 系统中的一个命令,全称为 `change owner`,用于改变文件或目录的所有者
```shell
chown [选项] [所有者][:[]] 文件或目录名
```
命令可以更改某个文件或目录的属主owner也可以同时更改其属组group
#### 示例
```shell
$ chown :groupname file1.txt
$ chown -R username:groupname *
$ chown $USER file.txt
```
`注意` 只有超级用户(root)才有权限改变文件或目录的所有者
### 选项
- `-c` : 显示更改的部分的信息
- `-f` : 忽略错误信息
- `-h` :修复符号链接
- `-v` : 显示详细的处理信息
- `-R` : 处理指定目录以及其子目录下的所有文件
- `--help` : 显示辅助说明
- `--version` : 显示版本
示例
--------
### 更改文件所有者
```shell
$ chown root /var/run/httpd.pid
```
`/var/run/httpd.pid` 的所有者设为 `root`
#### 仅更改所有者
```bash
$ chown new_owner file.txt
```
### 递归更改目录及其内容的所有者
<!--rehype:wrap-class=row-span-2-->
```shell
chown -R new_owner:new_group directory/
```
将文件夹 `directory` 的拥有者设为 `new_owner` ,群体的使用者设为 `new_group`
```shell
$ chown username:groupname file1.txt
```
将文件 file1.txt 的拥有者设为 `username` ,群体的使用者设为 `groupname`
```shell
$ chown -R username:groupname *
```
将当前目录以及子目录的所有文件的拥有者设为 `username` ,群体的使用者设为 `groupname`
### 更改所有者为当前用户
```bash
$ chown $USER file.txt
```
递归更改目录及其内容的所有者为当前用户
```bash
sudo chown -R $USER directory/
```
### 递归并且不显示错误信息
```bash
chown -R -f new_owner:new_group directory/
```
更改目录及其内容的所有者和组为 `alice`
```bash
chown -R alice: directory/
```
### 仅更改组
```shell
$ chown :groupname file1.txt
```
不修改文件 `file1.txt` 的拥有者,将文件使用群体改为 `groupname`
### 变更符号链接的所有者
<!--rehype:wrap-class=row-span-2-->
```bash
$ chown -h new_owner:new_group symlink
```
变更符号链接的所有者而不是链接指向的文件
```bash
$ chown -h manager symlink
```
更改符号链接的所有者为"manager"
### 更改所有者为根用户
<!--rehype:wrap-class=row-span-2-->
```bash
sudo chown root:root file.txt
```
#### 递归更改所有者为当前用户
```bash
sudo chown -R $USER directory/
# 更改目录及其内容的所有者和组为"alice":
chown -R alice: directory/
```
### 将文件所有者更改为其他用户,但保留组
```bash
chown new_owner file.txt
```
### 将文件所有者更改为其他用户,同时更改组
```bash
chown new_owner:new_group file.txt
```

123
docs/conda.md Normal file
View File

@ -0,0 +1,123 @@
Conda备忘清单
===
这是开始使用 `conda` 命令的快速参考备忘单,初次学习可参考[这里](https://anaconda.org.cn/anaconda/user-guide/getting-started/#open-nav-win)
入门
-----
<!--rehype:body-class=cols-1-->
### 常用基础命令
命令 | 说明
:-- | --
`conda info` | 查看 conda 的一系列基本信息(版本、源、路径等)
`conda update -n base conda` | 在base环境中更新conda
`conda install anconda=2022.05` | 安装最新的anaconda发行版(见[发行说明](https://docs.anaconda.com/navigator/release-notes/?utm_source=cheatsheet))
`conda create --name <ENVNAME>` | 创建一个新的环境
`conda activate <ENVNAME>` | 激活/切换/选择一个环境
`conda env list 或者 conda info -e` | 列出所有的环境和位置看
`conda list -n <ENVNAME> --show-channel-urls` | 列出某个环境所有包和包的下载源路径
`conda install -n <ENVNAME> <PKG1> <PKG2>` | 在某个环境中安装包
`conda uninstall <PKGNAME包名> -n <ENVNAME环境名>` | 从某个环境删除某个包
`conda update --all -n <ENVNAME环境名>` | 升级某个环境的所有包
<!--rehype:className=show-header-->
环境与包管理
-----
### 包与源管理
<!--rehype:wrap-class=col-span-2-->
> 在使用 `conda` 时,包依赖关系和平台细节会**自动解决**
查看命令均可搭配 `grep` 命令使用,例如:
```bash
conda list | grep torch #列出所有包含torch的包
```
Command | Description
:-- | --
`conda list` | 列出所有安装的包
`conda list --show-channel-urls` |列出包含源信息的已安装包
`conda update --all` | 更新所有包
`conda install -c <CHANNELNAME源地址> <PKG1包> <PKG2>` | 从特定源(如清华源、阿里源)安装包
`conda install PKGNAME=3.1.4` | 安装指定版本的包
`conda install "PKGNAME>2.5,<3.2"` | 使用AND逻辑安装包
`conda install "<PKGNAME> [version='2.5\|3.2']"` |
`conda uninstall <PKGNAME>` | 卸载包
`conda config --show-sources` | 查看源地址(位置越靠上,搜索的时候越优先)
`conda config --add channels <CHANNELNAME>` | 添加conda的源地址
`conda config --remove channels <CHANNELNAME>`| 移除conda的源地址
### 更改环境
Command | Description
:-- | --
`conda create -n <ENVNAME> python=3.10` | 指定Python版本创建环境
`conda create --clone <ENVNAME> -n <NEWENV>` | 从已有环境克隆一个新环境
`conda rename -n <ENVNAME> <NEWENVNAME>` | 对环境名字重命名
`conda remove -n <ENVNAME> --all` | 通过名字删除一个环境
`conda env remove -n <ENVNAME>` | 通过名字删除一个环境
`conda list -n <ENVNAME> --revisions` | 列出环境的各个修订版本
`conda install -n <ENVNAME> --revision <NUMBER>"` | 回滚到环境的某个版本本
<!--rehype:className=style-list-arrow-->
关于 `conda` 环境回滚可参考:[这里](https://www.pybloggers.com/2016/06/conda-revisions-letting-you-rollback-to-a-previous-version-of-your-environment/)
### 导出环境配置
<!--rehype:wrap-class=col-span-2 row-span-2-->
建议将导出文件命名为“environment”环境名称将被保留
Command | Description
:-- | --
`conda env export --from-history>ENV.yml` | 跨平台兼容需(通过这种方式,可以省去所有其他可能是特定于平台的依赖项)
`conda env export -n ENVNAME > ENV.yml` | 导出指定环境到yml文件
`conda env export > ENV.yml` | 导出当前环境到yml文件
`conda list --explicit>ENV.txt` | 导出包信息到当前目录
`conda env create -n ENVNAME --file ENV.yml` | 从yml文件导入
`conda create -n ENVNAME --file ENV.txt` | 从txt文件导入
<!--rehype:className=style-list-arrow-->
### 另外
查看命令帮助
```bash
conda <COMMAND> --help
conda search <PKGNAME> --info
conda clean --all # 清除所有未使用的文件
conda config --show # 检查conda配置
```
设置指定环境为默认环境
```bash
vim ~/.bashrc
export PATH="~/anaconda/envs/ENVNAME/bin:$PATH" # 文件末尾添加
conda activate ENVNAME # :wq 保存并关闭
source ~/.bashrc # 更新
conda config --set auto_activate_base false # 禁用auto activate base环境
```
### 额外提示
```bash
conda COMMAND --help # 获得任何命令的帮助
# 获取任何包裹的信息
conda search PKGNAME --info
# 运行没有用户提示的命令,例如,安装多个包
conda COMMAND ARG --yes
conda install PKG1 PKG2 --yes
conda clean --all # 删除所有未使用的文件
conda config --show # 检查 conda 配置
```
另见
----
- [Anaconda文档](https://anaconda.org.cn/)
- [官网命令Cheat sheet](https://conda.io/projects/conda/en/latest/user-guide/cheatsheet.html)
- [Conda cheatsheet PDF](https://conda.io/projects/conda/en/latest/_downloads/843d9e0198f2a193a3484886fa28163c/conda-cheatsheet.pdf)

View File

@ -73,6 +73,11 @@ int a = 5, b = 10;
std::swap(a, b);
// 输出: a=10, b=5
std::cout << "a=" << a << ", b=" << b;
// 整数交换的奇技淫巧
(x ^= y), (y ^= x), (x ^= y);
// 注意! 以下操作会造成 undefined behavior
x ^= y ^= x ^= y;
```
### 注释
@ -108,13 +113,13 @@ for (int i = 0; i < 10; i++) {
```cpp
#include <iostream>
void hello(); // 声明
int main() { // 主函数
hello(); // 执行函数
}
void hello() { // 定义
std::cout << "Hello Quick Reference!\n";
}
@ -155,7 +160,7 @@ using namespace ns1;
using namespace std;
int main()
{
cout << val();
cout << val();
}
```
@ -237,7 +242,7 @@ for (int i = 0; i < 2; ++i) {
std::cout << x[i][j] << " ";
}
}
// 输出: 1 2 3 4 5 6 6 5 4 3 2 1
// 输出: 1 2 3 4 5 6 6 5 4 3 2 1
```
C++ 条件
@ -475,7 +480,7 @@ for (char c: hello)
{
std::cout << c << " ";
}
// 输出: Q u i c k R e f . M E
// 输出: Q u i c k R e f . M E
```
### 中断语句
@ -502,6 +507,16 @@ for (int i = 0, j = 2; i < 3; i++, j--){
// 输出: i=0,j=2;i=1,j=1;i=2,j=0;
```
### auto
```cpp
std:: string s = "hello world";
for(auto c: s){
std:: cout << c << " ";
}
// 输出: h e l l o w o r l d
```
C++ 函数
------------
@ -510,10 +525,10 @@ C++ 函数
```cpp
#include <iostream>
int add(int a, int b) {
return a + b;
return a + b;
}
int main() {
std::cout << add(10, 20);
std::cout << add(10, 20);
}
```
@ -538,13 +553,515 @@ void fun(int a) {
```cpp
#include <iostream>
#include <cmath> // 导入库
int main() {
// sqrt() 来自 cmath
std::cout << sqrt(9);
}
```
### Lambda 表达式
<!--rehype:wrap-class=col-span-2-->
Lambda 表达式可以在函数内定义,可以理解为在函数内定义的临时函数。格式:
```cpp
auto func = []() -> return_type { };
```
- `[]`为捕获列表,能够捕获其所在函数的局部变量
- 一个空的捕获列表代表Lambda表达式不捕获任何的变量
- 对于值捕获,直接在中括号中填写要捕获的变量即可:
```cpp
int val = 5;
auto func = [val]() -> return_type { };
```
- 对于引用捕获,需要在捕获的变量前添加`&`
```cpp
string str("hello world!");
auto func = [&str]() -> return_type { };
```
- 如果变量太多,需要编译器根据我们编写的代码自动捕获,可以采用隐式捕获的方式。
- 全部值捕获:
```cpp
int val1, val2;
auto func = [=]() -> int
{
return val1 + val2;
};
```
- 全部引用捕获:
```cpp
string str1("hello"), str2("word!");
auto func = [&]() -> string
{
return str1 + str2;
};
```
- 混合隐式捕获:
如果希望对一部分变量采用值捕获,对其他变量采用引用捕获,可以混合使用:
```cpp
int val1 = 123, val2 = 456;
string str1("123"), str2(456);
auto func1 = [=, &str1]() -> int
{
return val1 == std::stoi(str1)
? val1 : val2;
};
auto func2 = [&, val1]() -> int
{
return str1 == std::to_string(val1)
? str1 : str2;
};
```
- `()` 是参数列表,我们只需要按照普通函数的使用方法来使用即可
- `return_type` 是函数的返回类型,`-> return_type` 可以不写,编译器会自动推导
- `{}` 中的内容就是函数体,依照普通函数的使用方法使用即可
<!--rehype:className=style-timeline-->
此处给出一个 Lambda 表达式的实际使用例子(当然可以使用 `str::copy`):
```cpp
// vec中包含1, 2, 3, 4, 5
std::vector<int> vec({1, 2, 3, 4, 5});
std::for_each(vec.begin(), vec.end(),
[](int& ele) -> void
{
std::cout << ele
<< " ";
});
```
## C++多线程
### 多线程介绍
g++编译选项:`-std=c++11`。包含头文件:
- `#include <thread>`C++多线程库
- `#include <mutex>`C++互斥量库
- `#include <future>`C++异步库
### 线程的创建
<!--rehype:wrap-class=row-span-2-->
以普通函数作为线程入口函数:
```cpp
void entry_1() { }
void entry_2(int val) { }
std::thread my_thread_1(entry_1);
std::thread my_thread_2(entry_2, 5);
```
以类对象作为线程入口函数:
```cpp
class Entry
{
void operator()() { }
void entry_function() { }
};
Entry entry;
// 调用operator()()
std::thread my_thread_1(entry);
// 调用Entry::entry_function
std::thread my_thread_2(&Entry::entry_function, &entry);
```
以lambda表达式作为线程入口函数
```cpp
std::thread my_thread([]() -> void
{
// ...
});
```
### 线程的销毁
```cpp
thread my_thread;
// 阻塞
my_thread.join();
// 非阻塞
my_thread.detach();
```
### `this_thread`
```cpp
// 获取当前线程ID
std::this_thread::get_id();
// 使当前线程休眠一段指定时间
std::this_thread::sleep_for();
// 使当前线程休眠到指定时间
std::this_thread::sleep_until();
// 暂停当前线程的执行,让别的线程执行
std::this_thread::yield();
```
### 锁
<!--rehype:wrap-class=row-span-5-->
> `#include <mutex>`
#### 锁的基本操作
创建锁
```cpp
std::mutex m;
```
上锁
```cpp
m.lock();
```
解锁
```cpp
m.unlock();
```
尝试上锁:成功返回`true`,失败返回`false`
```cpp
m.try_lock();
```
解锁
```cpp
m.unlock();
```
#### 更简单的锁 —— `std::lock_guard<Mutex>`
构造时上锁,析构时解锁
```cpp
std::mutex m;
std::lock_guard<std::mutex> lock(m);
```
额外参数:`std::adopt_lock`:只需解锁,无需上锁
```cpp
// 手动上锁
m.lock();
std::lock_guard<mutex> lock(m,
std::adopt_lock);
```
#### `unique_lock<Mutex>`
构造上锁,析构解锁
```cpp
std::mutex m;
std::unique_lock<mutex> lock(m);
```
##### `std::adopt_lock`
只需解锁,无需上锁
```cpp
// 手动上锁
m.lock();
std::unique_lock<mutex> lock(m,
std::adopt_lock);
```
##### `std::try_to_lock`
尝试上锁,可以通过`std::unique_lock<Mutex>::owns_lock()`查看状态
```cpp
std::unique_lock<mutex> lock(m,
std::try_to_lock);
if (lock.owns_lock())
{
// 拿到了锁
}
else
{
// 没有
}
```
##### `std::defer_lock`
绑定锁,但不上锁
```cpp
std::unique_lock<mutex> lock(m,
std::defer_lock);
lock.lock();
lock.unlock();
```
##### `std::unique_lock<Mutex>::release`
返回所管理的`mutex`对象指针,**释放所有权。**一旦释放了所有权,那么如果原来互斥量处于互斥状态,程序员有责任手动解锁。
#### `std::call_once`
当多个线程通过这个函数调用一个可调用对象时,只会有一个线程成功调用。
```cpp
std::once_flag flag;
void foo() { }
std::call_once(flag, foo);
```
### `std::condition_variable`
#### 创建条件变量
```cpp
std::condition_variable cond;
```
#### 等待条件变量被通知
```cpp
std::unique_lock<std::mutex>
lock;
extern bool predicate();
// 调用方式 1
cond.wait(lock);
// 调用方式 2
cond.wait(lock, predicate);
```
----
- `wait`不断地尝试重新获取并加锁该互斥量,如果获取不到,它就卡在这里并反复尝试重新获取,如果获取到了,执行流程就继续往下走
- `wait`在获取到互斥量并加锁了互斥量之后:
- 如果`wait`被提供了可调用对象,那么就执行这个可调用对象:
- 如果返回值为`false`,那么`wait`继续加锁,直到再次被 notified
- 如果返回值为`true`,那么`wait`返回,继续执行流程
- 如果`wait`没有第二个参数,那么直接返回,继续执行
#### `std::condition_variable::notify_one`
`notify_one` 唤醒一个调用 `wait` 的线程。注意在唤醒之前要解锁,否则调用 `wait` 的线程也会因为无法加锁而阻塞。
#### `std::condition_variable::notify_all`
唤醒所有调用 `wait` 的线程。
### 获取线程的运行结果
<!--rehype:wrap-class=row-span-5-->
> `#include <future>`
#### 创建异步任务
```cpp
double func(int val);
// 使用std::async创建异步任务
// 使用std::future获取结果
// future模板中存放返回值类型
std::future<double> result =
std::async(func, 5);
```
#### 获取异步任务的返回值
等待异步任务结束,但是不获取返回值:
```cpp
result.wait();
```
获取异步任务的返回值:
```cpp
int val = result.get();
```
注:
- `get()`返回右值,因此只可调用一次
- 只要调用上述任意函数,线程就会一直阻塞到返回值可用(入口函数运行结束)
#### `std::async` 的额外参数
额外参数可以被放在 `std::async` 的第一个参数位置,用于设定 `std::async` 的行为:
- `std::launch::deferred`:入口函数的运行会被推迟到`std::future<T>::get()`或者`std::future<T>::wait()`被调用时。此时调用线程会直接运行线程入口函数,换言之,**不会创建子线程**
- `std::launch::async`:立即创建子线程,并运行线程入口函数
- `std::launch::deferred | std::launch::async`:默认值,由系统自行决定
#### 返回值的状态
让当前线程等待一段时间(等待到指定时间点),以期待返回值准备好:
```cpp
extern double foo(int val) {}
std::future<double> result =
async(foo, 5);
//返回值类型
std::future_status status;
// 等待一段时间
status = result.wait_for(
std::chrono::seconds(1)
);
// 等待到某一时间点
status = result.wait_for(
std::chrono::now() +
std::chrono::seconds(1)
);
```
在指定的时间过去后,可以获取等待的结果:
```cpp
// 返回值已经准备好
if (status ==
std::future_status::ready)
{
}
// 超时:尚未准备好
else if (status ==
std::future_status::timeout)
{ }
// 尚未启动: std::launch::deferred
else if (status ==
std::future_status::deferred)
{ }
```
#### 多个返回值
如果要多次获取结果,可以使用`std::shared_future`,其会返回结果的一个**拷贝**。
```cpp
std::shared_future<T> result;
```
对于不可拷贝对象,可以在`std::shared_future`中存储对象的指针,而非指针本身。
### 创建线程
```cpp
void threadFunction() {
// 线程函数体
std::cout << "From thread" << std::endl;
}
int main() {
// 创建线程并开始执行线程函数
std::thread t(threadFunction);
// 等待线程执行完毕
t.join();
return 0;
}
```
### 传递参数给线程函数
```cpp
void threadFunction(int value) {
// 线程函数体
std::cout << "Received value: " << value << std::endl;
}
int main() {
int data = 42;
std::thread t(threadFunction, data);
t.join();
return 0;
}
```
### 使用Lambda表达式创建线程
```cpp
int main() {
int data = 42;
std::thread t([data]() {
// Lambda 表达式作为线程函数
std::cout << "Received value: " << data << std::endl;
});
t.join();
return 0;
}
```
### **处理线程间的同步:**
```cpp
#include <mutex>
std::mutex mtx;
void threadFunction() {
std::lock_guard<std::mutex> lock(mtx);
std::cout << "Thread safe output." << std::endl;
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}
```
### **使用`std::async`启动异步任务:**
```cpp
#include <future>
int taskFunction() {
// 异步任务
return 42;
}
int main() {
// 启动异步任务
std::future<int> fut = std::async(std::launch::async, taskFunction);
// 获取异步任务的结果
int result = fut.get();
std::cout << "Result: " << result << std::endl;
return 0;
}
```
C++ 预处理器
------------

1335
docs/cs.md

File diff suppressed because it is too large Load Diff

View File

@ -1264,10 +1264,13 @@ CSS 函数
### calc()
```css
width: calc(100% - 80px);
div {
width: calc(100% - 30px);
height: calc(100% - 30px);
}
```
声明 CSS 属性值时执行一些计算
[`calc()`](https://developer.mozilla.org/zh-CN/docs/Web/CSS/calc) CSS 函数允许您在指定 CSS 属性值时执行计算
### clamp()
@ -1468,6 +1471,35 @@ html {
[点击我](#入门)页面会平滑滚动到入门
### 修改浏览器自动填充 input 样式
```css
input[type="text"]:autofill {
box-shadow: 0 0 0 1000px #000 inset;
-webkit-text-fill-color: white;
}
```
另见: [:autofill](https://developer.mozilla.org/en-US/docs/Web/CSS/:autofill)
### 修改 input type="color" 样式
<!--rehype:wrap-class=col-span-2 row-span-2-->
```css
input[type="color"] {
-webkit-appearance: none;
border: none;
width: 32px;
height: 32px;
}
input[type="color"]::-webkit-color-swatch-wrapper {
padding: 0;
}
input[type="color"]::-webkit-color-swatch {
border: none;
}
```
### 忽略用作间距的换行符 \<br />
```css
@ -1491,6 +1523,7 @@ br + br {
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
@ -1519,6 +1552,24 @@ html {
上面示例设置了当前卡片灰色
### `<textarea>`自动增加其高度
```css
textarea {
form-sizing: normal
}
```
### 定义容器的长宽比
```css
div {
aspect-ratio: 1/1
}
```
属性 [aspect-ratio](https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio) 可以非常容易的定义一个容器的长宽比
### 使用 unset 而不是重置所有属性
使用 `all` 速记来指定元素的所有属性。将值设置为 `unset` 会将元素的属性更改为其初始值:
@ -1557,6 +1608,7 @@ body {
这样文本元素可以很容易地从 `body` 继承
### 使用图像作为光标
<!--rehype:wrap-class=col-span-2-->
```css
div {
@ -1593,17 +1645,6 @@ div {
多行文本截断到特定的行数,末尾显示省略号 _(...)_
### 计算函数
```css
div {
width: calc(100% - 30px);
height: calc(100% - 30px);
}
```
[`calc()`](https://developer.mozilla.org/zh-CN/docs/Web/CSS/calc) CSS 函数允许您在指定 CSS 属性值时执行计算
### 粘性定位元素
```css
@ -1677,16 +1718,6 @@ div {
通过样式来控制一个元素 `div` 是否可以编辑
### 定义容器的长宽比
```css
div {
aspect-ratio: 1/1
}
```
属性 [aspect-ratio](https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio) 可以非常容易的定义一个容器的长宽比
### 等宽表格单元格
尝试使用 `table-layout: fixed` 以保持单元格宽度相等:
@ -1785,6 +1816,22 @@ button:disabled {
就这么简单
### 子元素选中父元素
```css
div:has(img) {
background: black;
}
```
设置包含子元素 `img` 的 `div` 元素样式,还可以嵌套:
```css
div:has(h2):has(ul) {
background: black;
}
```
### 在用作间距的换行符上设置 `display: none`
用户使用额外的换行符
@ -1795,6 +1842,141 @@ br + br {
}
```
### 给 `body` 添加行高
```css
body {
line-height: 1.5;
}
```
您不需要为每个 `<p>`、`<h*>` 等分别添加行高。相反,将其添加到正文
### 检查本地是否安装了字体
<!--rehype:wrap-class=row-span-2-->
```css
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank-Mono"),
/* 否则,请下载它! */
url("//...a.server/DankMono.woff");
}
code {
font-family: "Dank Mono",
system-ui-monospace;
}
```
您可以在远程获取字体之前检查是否在本地安装了字体,这也是一个很好的性能提示
### 获取 HTML 元素的属性
```html
<a href="https://example.com">超链接</a>
```
attr HTML 元素的属性名。
```css
a:after {
content: " (" attr(href) ")";
}
```
### 为表单元素设置 `:focus`
```css
a:focus, button:focus, input:focus,
select:focus, textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
```
有视力的键盘用户依靠焦点来确定键盘事件在页面中的位置。使表单元素的焦点比浏览器的默认实现更加突出和一致
### 垂直居中任何东西
<!--rehype:wrap-class=row-span-2-->
```css
html, body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
```
...还有 CSS 网格:
```css
body {
display: grid;
height: 100vh;
margin: 0;
place-items: center center;
}
```
### 图片对齐不变形
```css
img {
width: 200px;
height: 200px;
/** 确保图片按原始宽高比例进行缩放 */
object-fit: cover;
object-position: left top;
transition: 1s;
}
img:hover {
/** 指定图片显示的位置,结合鼠标移动+过渡动画 */
object-position: right bottom;
}
```
### 多行截断,展示省略号
```css
.clamp {
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
```
`html` 文本超过 3 行将被截断,显示省略号...
```html
<p class="clamp">
展示多行文本,超过 3 行将被截断,显示省略号...
</p>
```
### 逗号分隔列表
```css
ul > li:not(:last-child)::after {
content: ",";
}
```
使列表项看起来像一个真实的逗号分隔列表,使用 `:not()` 伪类,最后一项不会添加逗号
另见
---------

View File

@ -63,14 +63,16 @@ Curl 是一种在服务器之间传输数据的工具,支持协议,包括 HT
### 头信息 Headers
```bash
-A <str> # --user-agent
-A <str> # --user-agent
-b name=val # --cookie
-b name=val # --cookie
# 从 URL 的指定文件加载 cookie
-b, --cookie FILE
# 将 cookie 从 URL 保存到指定文件
-c, --cookie-jar FILE
-b FILE # --cookie
-H "X-Foo: y" # --header
--compressed # 使用 deflate/gzip
```

View File

@ -320,7 +320,7 @@ int sum = add(2,3); // 回报5
int totalSum = add(2, add(2,3)); // 返回7
```
### 箭头语法 (=>)
### 箭头函数 (=>)
```dart
// 只包含一个表达式的函数,您可以使用简写语法
@ -346,6 +346,63 @@ list.forEach(
```
<!--rehype:className=wrap-text-->
### 扩展函数 (Extension)
```dart
//extension 定义扩展名称 on 扩展类
extension StringExtension on String {
//扩展方法
String capitalize() {
if (isEmpty) {
return this;
}
// 将字符串的首字母大写
String topStr = this[0].toUpperCase();
return '${topStr}${substring(1)}';
}
}
void main(List<String> args) {
print("apple".capitalize());
// Print: Apple
print("苹果apple".capitalize());
// Print: 苹果apple
}
```
在不修改 String 类的前提下为其新增了 capitalize 方法
<!--rehype:className=wrap-text-->
### 运算符重载 (Extension)
<!--rehype:wrap-class=col-span-2-->
```dart
class Money {
final num amount;
Money({required this.amount});
}
// 利用扩展函数特性
extension MoneyOperatorExtension<T> on Money {
// operator 重载运算符
Money operator +(Money elements) {
Money newMoney = Money(amount: this.amount + elements.amount);
return newMoney;
}
}
void main(List<String> args) {
// 怎么样?两个类加起来了
Money appleMoney = Money(amount: 10.0);
Money cardMoney = Money(amount: 6.0);
Money allMoney = cardMoney + appleMoney;
print(allMoney.amount);
//Print: 16.0
}
```
类和对象
----------
@ -747,6 +804,21 @@ var list2 = [0, ...list];
print(list2.length); // 打印: 4
```
### 延迟初始化
```dart
// token 类型非空,但是不用立即赋值
late String token;
void main(List<String> args) {
/// print(token);
/// Field 'token' has not been initialized
/// 在初始化前调用就会报错
token = "tokenContent";
print(token);
}
```
另见
----

View File

@ -9,6 +9,13 @@ Docker 备忘清单
### 入门
#### 安装
```shell
curl -sSL https://get.docker.com/ | sh
sudo chmod 777 /var/run/docker.sock
```
在后台创建和运行容器
```shell
@ -17,14 +24,14 @@ $ docker run -d -p 80:80 docker/getting-started
----
- `-d` - 以分离模式运行容器
- `-p 80:80` - 将端口 80 映射到容器中的端口 80
- `-d` - 以分离(后台)模式运行容器
- `-p 80:80` - 将端口 80 映射到容器中的端口 80,格式:宿主机端口:容器端口
- `docker/getting-started` - 要使用的镜像
在前台创建并运行容器
在前台创建并运行容器(之后如果要退出容器但是不关闭容器,按*Ctrl+P+Q*即可)
```shell
$ docker run -it -p --rm 8001:8080 --name my-nginx nginx
$ docker run -it --rm -p 8001:8080 --name my-nginx nginx
```
----
@ -41,7 +48,7 @@ $ docker run -it -p --rm 8001:8080 --name my-nginx nginx
|-------------------------------------|--------------------------------------------------|
| `docker ps` | 列出正在运行的容器 |
| `docker ps -a` | 列出所有容器 |
| `docker ps -s` | 列出正在运行的容器 _(带 CPU / 内存)_ |
| `docker ps -s` | 列出正在运行的容器 *(带 CPU / 内存)* |
| `docker images` | 列出所有镜像 |
| `docker exec -it <container> bash` | 连接到容器 |
| `docker logs <container>` | 显示容器的控制台日志 |
@ -142,13 +149,14 @@ Docker 镜像
`docker load --input ubuntu.tar` | 加载一个 tarred 存储库
`docker save busybox > ubuntu.tar` | 将镜像保存到 tar 存档
`docker history` | 显示镜像的历史
`docker commit nginx` | 将容器另存为镜像
`docker commit nginx my_nginx` | 将容器另存为镜像
`docker tag nginx eon01/nginx` | 标记镜像
`docker push eon01/nginx` | 推送镜像
### 构建镜像
```shell
# 注意有的最后面是英文 .
$ docker build .
$ docker build github.com/creack/docker-firefox
$ docker build - < Dockerfile
@ -168,49 +176,16 @@ Docker 网络
----
<!--rehype:body-class=cols-2-->
### 操作
删除网络
```shell
docker network rm MyOverlayNetwork
```
列出网络
```shell
docker network ls
```
获取有关网络的信息
```shell
docker network inspect MyOverlayNetwork
```
将正在运行的容器连接到网络
```shell
docker network connect MyOverlayNetwork nginx
```
启动时将容器连接到网络
```shell
docker run -it -d --network=MyOverlayNetwork nginx
```
断开容器与网络的连接
```shell
docker network disconnect MyOverlayNetwork nginx
```
### 创建网络
```shell
docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork
```
自定义网络子网和网关
```shell
docker network create -d overlay \
--subnet=192.168.0.0/16 \
--subnet=192.170.0.0/16 \
@ -224,21 +199,98 @@ docker network create -d overlay \
MyOverlayNetwork
```
### 操作
<!--rehype:wrap-class=row-span-3-->
获取容器连接的网络
```shell
docker inspect MyContainer | grep Network
```
获取有关网络的信息
```shell
docker network inspect <network_name>
```
将正在运行的容器连接到网络
```shell
docker network connect <network_name> <container_name>
```
启动时将容器连接到网络
```shell
docker run -it -d --network=<network_name> <container_name>
```
断开容器与网络的连接
```shell
docker network disconnect <network_name> <container_name>
```
### 删除网络
```bash
docker network rm <network_name>
```
### 列出网络
```shell
docker network ls
```
Docker 快捷键
----
需要特别注意的是,退出快捷键中的删除容器实例,只对于使用 `docker attach` 进入的容器生效,使用 `docker exec` 进入容器后,使用上面的快捷键后将隔离容器,且不会删除容器实例。
### 退出 - 关闭容器
| Docker 快捷键 | 说明 |
|------------|------|
`ctrl` `c` | 将关闭容器
<!--rehype:className=shortcuts-->
将关闭容器, 并删除当前的容器实例
### 退出 - 保留容器
| Docker 快捷键 | 说明 |
|------------|------|
`ctrl` `d` | 保留容器
<!--rehype:className=shortcuts-->
将保留容器并退出到Docker主机的命令行界面
### 退出 - 容器分离
| Docker 快捷键 | 说明 |
|------------|------|
`ctrl` `p` `q` | 容器分离
<!--rehype:className=shortcuts-->
将容器分离,保留容器,但是不退出
各种各样的
----
<!--rehype:body-class=cols-2-->
### Docker Hub
| Docker 语法 | 说明 |
|------------|------|
`docker search search_word` | 在 docker hub 中搜索镜像
`docker pull user/image` | 从 docker hub 下载镜像。
`docker login` | 向 docker hub 进行身份验证
`docker push user/image` | 将镜像上传到 docker hub。
```bash
$ docker search search_word # 在 docker hub 中搜索镜像
$ docker pull user/image # 从 docker hub 下载镜像
$ docker login # 向 docker hub 进行身份验证
$ docker push user/image # 将镜像上传到 docker hub
```
### 镜像仓库命令
<!--rehype:wrap-class=row-span-3-->
<!--rehype:wrap-class=row-span-2-->
登录到镜像仓库
@ -282,23 +334,22 @@ $ docker push eon01/nginx localhost:5000/myadmin/nginx
`docker stop -f $(docker ps -a -q)` | 停止所有容器
`docker rm -f $(docker ps -a -q)` | 删除所有容器
`docker rmi -f $(docker images -q)` | 删除所有镜像
`docker volume prune` | 删除所有未使用的Docker Volume
`docker network prune` | 删除所有未使用的Docker网络
`docker system prune` | 清理所有空闲或与任何Docker容器无关的资源
`docker image prune` | 删除悬空的Docker镜像
`docker container prune` | 删除所有未使用的Docker 容器
<!--rehype:className=left-align-->
### 卷 volume
检查卷
```shell
$ docker volume ls
```
清理未使用的卷
```shell
$ docker volume prune
$ docker volume ls # 检查卷
$ docker volume prune # 清理未使用的卷
```
### Docker Compose
<!--rehype:wrap-class=col-span-2-->
<!--rehype:wrap-class=row-span-2-->
:- | :-
:- | :-
@ -312,7 +363,8 @@ $ docker volume prune
`docker-compose config` | 验证并查看 Compose 文件
`docker-compose scale <service_name>=<replica>` | 为服务指定容器个数
`docker-compose top` | 显示正在运行的进程
`docker-compose run -rm -p 2022:22 web bash` | 启动 Web 服务并运行 bash 作为其命令,删除旧容器
`docker-compose run -rm -p 2022:22 web bash` | 启动 Web 服务并运行 bash 作为其命令,删除旧容器
<!--rehype:className=left-align-->
### Docker Services
@ -324,8 +376,10 @@ $ docker volume prune
`docker service ps` | 列出服务的任务
`docker service scale <service_name>=<replica>` | 规模特殊服务
`docker service update <options> <service_name>` | 更新服务选项
<!--rehype:className=left-align-->
### Docker Stack
<!--rehype:wrap-class=col-span-2-->
:- | :-
:- | :-
@ -334,6 +388,7 @@ $ docker volume prune
`docker stack services <appname>` | 列出与应用关联的服务
`docker stack ps <appname>` | 列出与应用关联的正在运行的容器
`docker stack rm <appname>` | 拆掉一个应用程序
<!--rehype:className=left-align-->
### Docker Machine
<!--rehype:wrap-class=col-span-2-->
@ -354,8 +409,10 @@ $ docker volume prune
`docker-machine rm $(docker-machine ls -q)` | 删除所有虚拟机及其磁盘映像
`docker-machine scp docker-compose.yml myvm1:~` | 将文件复制到节点的主目录
`docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"` | 部署应用
<!--rehype:className=left-align-->
### docker 主要命令
<!--rehype:wrap-class=row-span-3-->
:- | :-
:- | :-
@ -399,9 +456,68 @@ $ docker volume prune
`update` | 更新一个或多个容器的配置
`version` | 显示 Docker 版本信息
`wait` | 阻塞直到一个或多个容器停止,然后打印它们的退出代码
<!--rehype:className=left-align-->
### docker 管理命令
:- | :-
:- | :-
`docker builder` | 管理构建
`docker buildx*` | Docker BuildxDocker Inc.v0.7.1
`docker compose*` | Docker ComposeDocker Inc.v2.2.3
`docker config` | 管理 Docker 配置
`docker container` | 管理容器
`docker context` | 管理上下文
`docker image` | 管理镜像
`docker manifest` | 管理 Docker 镜像清单和清单列表
`docker network` | 管理网络
`docker node` | 管理 Swarm 节点
`docker plugin` | 管理插件
`docker scan*` | Docker 扫描Docker Inc.v0.16.0
`docker secret` | 管理 Docker 机密
`docker service` | 管理服务
`docker stack` | 管理 Docker 堆栈
`docker swarm` | 管理群
`docker system` | 管理 Docker
`docker trust` | 管理对 Docker 映像的信任
`docker volume` | 管理卷
<!--rehype:className=left-align-->
### docker 全局参数
```bash
--config string # 客户端配置文件的位置(默认“~/.docker”
-c, --context string # 用于连接到守护程序的上下文的名称(
# 覆盖 DOCKER_HOST 环境变量和使用
# “docker context use” 设置的默认上下文)
-D, --debug # 启用调试模式
-H, --host list # 要连接的守护进程套接字
-l, --log-level string # 设置日志级别
# 默认“info” ("debug"|"info"|"warn"|"error"|"fatal")
--tls # 使用 TLS 由 --tlsverify 暗示
--tlscacert string # 仅由该 CA 签署的信任证书
#(默认为“~/.docker/ca.pem”
--tlscert string # TLS证书文件路径
#(默认“~/.docker/cert.pem”
--tlskey string # TLS 密钥文件的路径
#(默认为“~/.docker/key.pem”
--tlsverify # 使用 TLS 并验证远程
-v, --version # 打印版本信息并退出
```
### docker images
```bash
-a, --all 显示所有镜像(默认隐藏中间镜像)
--digests 显示摘要
-f, --filter filter 根据提供的条件过滤输出
--format string 使用 Go 模板打印漂亮的镜像
--no-trunc 不要截断输出
-q, --quiet 仅显示镜像 ID
```
### docker run/create
<!--rehype:wrap-class=row-span-3-->
<!--rehype:wrap-class=col-span-2-->
```bash
--add-host list # 添加自定义主机到 IP 映射 (host:ip)
@ -411,11 +527,11 @@ $ docker volume prune
--cap-add list # 添加 Linux 功能
--cap-drop list # 放弃 Linux 功能
--cgroup-parent string # 容器的可选父 cgroup
--cgroupns string # 要使用的 Cgroup 命名空间(主机|私有)
# 'host': 在 Docker 主机的 cgroup 命名空间中运行容器
# 'private': 在自己的私有 cgroup 命名空间中运行容器
# '': 使用由守护进程上的
# default-cgroupns-mode 选项配置的 cgroup 命名空间(默认)
--cgroupns string # 要使用的 Cgroup 命名空间(主机|私有)
# 'host': 在 Docker 主机的 cgroup 命名空间中运行容器
# 'private': 在自己的私有 cgroup 命名空间中运行容器
# '': 使用由守护进程上的
# default-cgroupns-mode 选项配置的 cgroup 命名空间(默认)
--cidfile string # 将容器 ID 写入文件
--cpu-period int # 限制 CPU CFS完全公平调度器周期
--cpu-quota int # 限制 CPU CFS完全公平调度器配额
@ -505,60 +621,62 @@ $ docker volume prune
`run`/`create` 大部分参数一致
### docker 全局参数
### 修改Docker镜像拉取地址
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
```bash
--config string # 客户端配置文件的位置(默认“~/.docker”)
-c, --context string # 用于连接到守护程序的上下文的名称(
# 覆盖 DOCKER_HOST 环境变量和使用“docker context use”设置的默认上下文
-D, --debug # 启用调试模式
-H, --host list # 要连接的守护进程套接字
-l, --log-level string # 设置日志级别("debug"\|"info"\|"warn"\|"error"\|"fatal") 默认“info”
--tls # 使用 TLS 由 --tlsverify 暗示
--tlscacert string # 仅由该 CA 签署的信任证书(默认为“~/.docker/ca.pem”
--tlscert string # TLS证书文件路径默认“~/.docker/cert.pem”
--tlskey string # TLS 密钥文件的路径(默认为“~/.docker/key.pem”
--tlsverify # 使用 TLS 并验证远程
-v, --version # 打印版本信息并退出
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1ojaslt1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
### docker 管理命令
### 修改 Docker 数据存储路径
<!--rehype:wrap-class=row-span-2-->
:- | :-
:- | :-
`docker builder` | 管理构建
`docker buildx*` | Docker BuildxDocker Inc.v0.7.1
`docker compose*` | Docker ComposeDocker Inc.v2.2.3
`docker config` | 管理 Docker 配置
`docker container` | 管理容器
`docker context` | 管理上下文
`docker image` | 管理镜像
`docker manifest` | 管理 Docker 镜像清单和清单列表
`docker network` | 管理网络
`docker node` | 管理 Swarm 节点
`docker plugin` | 管理插件
`docker scan*` | Docker 扫描Docker Inc.v0.16.0
`docker secret` | 管理 Docker 机密
`docker service` | 管理服务
`docker stack` | 管理 Docker 堆栈
`docker swarm` | 管理群
`docker system` | 管理 Docker
`docker trust` | 管理对 Docker 映像的信任
`docker volume` | 管理卷
- 停止 Docker 服务:
### docker images
```bash
sudo systemctl stop docker
```
- 将现有的 Docker 数据移动到新的目录:
```bash
sudo mv /var/lib/docker /new/path/docker
```
- 更新 Docker 的配置文件 `/etc/docker/daemon.json`,添加或修改 `data-root` 选项:
```json
{ "data-root": "/new/path/docker" }
```
- 重新启动 Docker 服务:
```bash
sudo systemctl start docker
```
<!--rehype:className=style-timeline-->
⚠️注意:当你执行此操作时,旧的容器和镜像可能无法正常工作,因为它们的路径已更改。建议在部署 Docker 时执行此操作,以避免这些问题。如有必要,重新启动容器或重新创建它们,以确保它们的配置指向新的路径。
### Docker降级版本的方法
```bash
-a, --all 显示所有镜像(默认隐藏中间镜像)
--digests 显示摘要
-f, --filter filter 根据提供的条件过滤输出
--format string 使用 Go 模板打印漂亮的镜像
--no-trunc 不要截断输出
-q, --quiet 仅显示镜像 ID
yum downgrade --setopt=obsoletes=0 \
-y docker-ce-${version} docker-ce-selinux-${version}
```
Docker 示例
`${version}` 指定要降级的版本
Docker 常用示例
---
<!--rehype:body-class=cols-2-->
@ -574,6 +692,433 @@ $ docker run -d --name portainer \
portainer/portainer-ee:latest
```
### Nginx
<!--rehype:wrap-class=row-span-2-->
```bash
docker run -itd -p 80:80 --restart=always --name Nginx \
-v $HOME/nginx_data/html:/usr/share/nginx/html \
-v $HOME/nginx_data/conf:/etc/nginx/conf.d \
-v $HOME/nginx_data/nginx.conf:/etc/nginx/nginx.conf \
nginx
```
#### 参数解释
- `-itd`: 启动容器并保持后台运行
- `-p 80:80`: 将主机的 80 端口映射到容器的 80 端口,用于访问 Nginx 站点页面
- `--name Nginx`: 给容器指定一个名称为 "Nginx"
- `--restart=always`: 在容器退出时,总是重新启动容器
#### 持久化解释
-- | --
:-- | --
`-v $HOME/nginx_data/html:/usr/share/nginx/html`| 将容器中的 Nginx 站点页面路径映射到本地
`-v $HOME/nginx_data/conf:/etc/nginx/conf.d`| 将容器中的 Nginx 虚拟主机配置文件路径映射到本地 *(需要提前准备好文件)*
`-v $HOME/nginx_data/nginx.conf:/etc/nginx/nginx.conf`| 将容器中的 Nginx 主配置文件路径映射到本地 *(需要提前准备好文件)*
<!--rehype:className=style-list-arrow-->
### Tomcat
```bash
docker run -itd -p 8080:8080 --restart=always \
--name Tomcat \
-v $HOME/Tomcat_data/webapps:/usr/local/tomcat/webapps/ROOT \
tomcat
```
#### 参数解释
- `-itd`: 以后台运行的方式启动容器并分配一个伪终端pseudo-TTY和保持 STDIN 打开
- `-p 8080:8080`: 将主机的端口 8080 映射到容器的 8080 端口,用于访问 Tomcat 站点页面
- `--name Tomcat`: 为容器指定名称为 "Tomcat"
- `--restart=always`: 当容器退出时,总是重新启动容器
#### 持久化解释
将容器中的 `/usr/local/tomcat/webapps/ROOT` 路径挂载到宿主机中的 `$HOME/Tomcat_data/webapps` 目录下。
### Weblogic
<!--rehype:style=background:#d7a100;-->
```bash
docker run -itd \
-p 7001:7001 \
-p 7002:7002 \
-p 5556:5556 \
--restart=always --name Weblogic ismaleiva90/weblogic12
```
注意:`ismaleiva90/weblogic12` 是非官方或认证的 `Docker` 镜像!
#### 参数解释
- `-itd`: 后台运行容器,保持 STDIN 打开
- `-p 7001:7001`: 映射主机 7001 端口到容器 7001 端口,访问 Weblogic 控制台页面
- `-p 7002:7002`: 映射主机 7002 端口到容器 7002 端口,访问 Weblogic 站点页面
- `-p 5556:5556`: 映射主机 5556 端口到容器 5556 端口,访问 Weblogic 站点页面
- `--name Weblogic`: 容器名称为 "Weblogic"
- `--restart=always`: 容器退出时,总是重新启动容器
### MySQL
<!--rehype:wrap-class=row-span-2-->
```bash
docker run -d -it -p 3306:3306 --name MySQL --restart=always \
-v $HOME/MySQL_Data/data:/var/lib/mysql \
-v $HOME/MySQL_Data/conf:/etc/mysql/conf.d \
--privileged=true \
-e MYSQL_DATABASE='test_db' \
-e MYSQL_ROOT_PASSWORD='abc$123' \
-e MYSQL_USER='testuser' -e MYSQL_PASSWORD='abc$123' \
mysql:8.0.31 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
```
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 3306:3306` | 将主机的端口映射到容器的端口,这里是将主机的 3306 端口映射到容器的 3306 端口,用于访问 MySQL 数据库
`--name MySQL` | 为容器指定一个名称,这里是 "MySQL"
`--restart=always` | 表示当容器退出时,总是重新启动容器
`--privileged=true` | 若不加字段--privileged=true可能会报权限错误
`--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci` | 这两个选项参数是改变所有表的默认编码和排序规则以使用 UTF-8 (utf8mb4)
<!--rehype:className=style-list-arrow-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/MySQL_Data/data:/var/lib/mysql` | 将容器中的 MySQL 数据库数据存储到本地,以确保在容器重启时数据得以保留。
`-v $HOME/MySQL_Data/conf:/etc/mysql/conf.d` | 将容器中的 MySQL 自定义配置文件路径映射到本地,以方便自定义配置。*请确保提前准备好文件,否则可能会启动失败*。
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
-- | --
:-- | --
`MYSQL_ROOT_PASSWORD` *【必填】* | 必需的变量,用于指定 MySQL 的 root 超级用户帐户的密码。如果设置了 *`MYSQL_RANDOM_ROOT_PASSWORD=yes`* ,则会随机生成一个密码,并打印到 stdout。
`MYSQL_USER` *【可选】* | 可选变量,用于创建新用户。此用户将被授予指定数据库的超级用户权限。需要同时设置 `MYSQL_PASSWORD` 变量。
`MYSQL_PASSWORD` *【可选】* | 可选变量,用于创建新用户并设置密码。此用户将被授予指定数据库的超级用户权限。需要同时设置 `MYSQL_USER` 变量。
`MYSQL_DATABASE` *【可选】* | 可选变量,允许在容器启动时指定要创建的数据库的名称。如果设置了 `MYSQL_USER` 和 `MYSQL_PASSWORD`,则该用户将被授予对此数据库的超级用户访问权限。
<!--rehype:className=style-list-arrow-->
### Oracle
```bash
docker run -d -it -p 1521:1521 --name Oracle_11g --restart=always \
--mount source=oracle_vol,target=/home/oracle/app/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
```
注意registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 是非官方或认证的Docker镜像
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 1521:1521` | 将主机的端口映射到容器的端口,这里是将主机的 1521 端口映射到容器的 1521 端口,用于访问 Oracle 数据库
`--name Oracle_11g` | 为容器指定一个名称,这里是 "Oracle_11g"
`--restart=always` | 表示当容器退出时,总是重新启动容器
<!--rehype:className=style-list-arrow-->
#### 持久化解释
-- | --
:-- | --
`--mount source=oracle_vol,target=/home/oracle/app/oracle/oradata` | 将名为 "oracle_vol" 的 Docker 卷挂载到容器中的 "/home/oracle/app/oracle/oradata" 路径。这样做的目的是将 Oracle 数据库的数据存储在持久化的卷中,以便数据在容器重启时得以保留
<!--rehype:className=style-list-arrow-->
### PostgreSQL
```bash
docker run -d -p 5432:5432 --restart=always --name PostgreSQL \
-e POSTGRES_USER='postgres' \
-e POSTGRES_PASSWORD='abc$123' \
-e POSTGRES_DB='test' \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $HOME/Postgres_Data:/var/lib/postgresql/data \
-d postgres
```
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 5432:5432` | 将主机的端口映射到容器的端口,这里是将主机的 5432 端口映射到容器的 5432 端口,用于访问 Postgre 数据库
`--name PostgreSQL` | 为容器指定一个名称,这里是 "PostgreSQL"
`--restart=always` | 表示当容器退出时,总是重新启动容器
<!--rehype:className=auto-wrap left-align-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/Postgres_Data:/var/lib/postgresql/data` | 将到容器中的 "/var/lib/postgresql/data" 路径映射挂载到 宿主机中的 ”$HOME/Postgres_Data“目录下,这样做的目的是将 Postgre 数据库的数据存储在本地中,以便数据在容器重启时得以保留
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
-- | --
:-- | --
`POSTGRES_PASSWORD` *【必填】* | PostgreSQL 映像所需的环境变量。设置 PostgreSQL 超级用户的密码。不能为空或未定义。
`POSTGRES_USER` *【可选】* | 可选环境变量,用于创建用户及其密码。创建具有超级用户权限的指定用户和同名的数据库。默认用户是 "postgres"。
`POSTGRES_DB` *【可选】* | 可选环境变量,用于定义首次启动映像时创建的默认数据库的名称。默认值是 `POSTGRES_USER` 的值,如果未设置,则默认为 "postgres"。
`PGDATA` *【可选】* | 默认为 `/var/lib/postgresql/data`。如果使用的数据卷是文件系统挂载点或无法被用户 chowned 的远程文件夹,则需要设置此环境变量以包含数据。
<!--rehype:className=style-list-arrow-->
### 达梦
```bash
docker run -d -p 5236:5236 --restart=always --name DaMengDB \
--privileged=true \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e EXTENT_SIZE=32 \
-e BLANK_PAD_MODE=1 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e INSTANCE_NAME=dm8_test \
-v $HOME/DaMeng_Data:/opt/dmdbms/data \
if010/dameng
```
注意if010/dameng 是从官网下载上传至 Docker Hub 的镜像!
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 5236:5236` | 将主机的端口映射到容器的端口,这里是将主机的 5236 端口映射到容器的 5236 端口,用于访问达梦数据库
`--name DaMengDB` | 为容器指定一个名称,这里是 "DaMengDB"
`--restart=always` | 表示当容器退出时,总是重新启动容器
<!--rehype:className=auto-wrap left-align-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/DaMeng_Data:/opt/dmdbms/data` | 将容器中的达梦数据库数据存储路径 "/opt/dmdbms/data" 映射到本地主机的 "$HOME/DaMeng_Data" 目录,以确保在容器重启时数据得以保留
<!--rehype:className=style-list-arrow-->
### 人大金仓
```bash
docker run -idt -p 5432:54321 --restart=always \
--name Kingbase --privileged=true \
-e DB_MODE=oracle \
-e NEED_START=yes \
-e DB_USER=kingbase \
-e DB_PASSWORD=abc123 \
-e ENABLE_CI=yes \
-v $HOME/Kingbase_Data:/home/kingbase/userdata \
if010/kingbase:v009r001c001b0025 /usr/sbin/init
```
注意:`if010/kingbase:v009r001c001b0025` 是从官网下载上传至 Docker Hub 的镜像,官网提供了两个下载版本,一个是 `v008r006c008b0014`,另一个是 `v009r001c001b0025`,可以拉取对应的 `tag` 镜像进行测试使用!
#### 参数解释
-- | --
:-- | --
`-itd` | 以后台方式启动容器,保持 STDIN 打开
`-p 5432:54321` | 将主机的 5432 端口映射到容器的 5432 端口,访问数据库
`--name Kingbase` | 给容器指定名称为 "Kingbase"
`--restart=always` | 容器退出时,总是重新启动容器
<!--rehype:className=auto-wrap left-align-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/Kingbase_Data:/home/kingbase/userdata` | 将容器中的人大金仓数据库数据存储路径 "/home/kingbase/userdata" 映射到本地主机的 "$HOME/Kingbase_Data" 目录,以确保在容器重启时数据得以保留
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
-- | --
:-- | --
`DB_USER` *【可选】* | 设置用户及其密码,默认为 "system"
`DB_PASSWORD` *【可选】* | 设置用户密码,默认为 "123456"
`DB_MODE` *【可选】* | 设置数据库模式,支持的模式有 oracle、pg、mysql
`NEED_START` *【可选】* | 设置进入容器后是否启动数据库,默认为 "yes"
`ENABLE_CI` *【可选】* | 设置是否需要配置大小写敏感,默认为 "yes"
<!--rehype:className=auto-wrap left-align-->
### Redis
```bash
docker run -d -p 6379:6379 --restart=always --name Redis \
-v $HOME/Redis_Data/conf:/usr/local/etc/redis \
-v $HOME/Redis_Data/data:/data \
redis redis-server /usr/local/etc/redis/redis.conf
```
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 6379:6379` | 将主机的端口映射到容器的端口,这里是将主机的 6379 端口映射到容器的 6379 端口,用于访问 Redis 数据库
`--name Redis` | 为容器指定一个名称,这里是 "Redis"
`--restart=always` | 表示当容器退出时,总是重新启动容器
<!--rehype:className=style-list-arrow-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/Redis_Data/conf:/usr/local/etc/redis` | *(需提前准备好文件,否则可能会启动失败)* 将到容器中的 "/usr/local/etc/redis" 路径映射挂载到 宿主机中的"$HOME/Redis_Data/conf"目录下,这样子做的目的是可以自定义Redis的配置文件
`-v $HOME/Redis_Data/data:/data` | 将到容器中的 "/data" 路径映射挂载到 宿主机中的"$HOME/Redis_Data/data"目录下,这样做的目的是将 Redis 数据库的数据存储在本地中,以便数据在容器重启时得以保留
<!--rehype:className=style-list-arrow-->
#### 关于启动命令
-- | --
:-- | --
`redis-server /usr/local/etc/redis/redis.conf` | 容器内部执行该命令是为了按照我们自定义的配置文件启动,这个不是必须的!!!
<!--rehype:className=style-list-arrow-->
### Memcache
```bash
docker run -d -p 11211:11211 --name Memcached \
--restart=always memcached memcached -m 64
```
#### 参数解释
- `-d`: 以后台方式启动容器。
- `-it`: 分配一个伪终端pseudo-TTY并保持 STDIN 打开。
- `-p 11211:11211`: 将主机的 11211 端口映射到容器的 11211 端口,用于访问 Memcached 消息队列的 web 管理界面。
- `--name Memcached`: 容器的名称为 "Memcached"。
- `--restart=always`: 容器退出时,总是重新启动容器。
#### 命令执行解释
- `memcached -m 64` 这会将 Memcached 服务器设置为使用 64 MB 进行存储
### MongoDB
<!--rehype:wrap-class=row-span-2-->
```bash
docker run -d -p 27017:27017 --restart=always --name MongoDB \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=abc123 \
-v $HOME/MongoDB_Data/data:/data/db \
-v $HOME/MongoDB_Data/conf:/etc/mongo \
mongo --config /etc/mongo/mongod.conf --wiredTigerCacheSizeGB 1.5
```
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 27017:27017` | 将主机的端口映射到容器的端口,这里是将主机的 27017 端口映射到容器的 27017 端口,用于访问 MongoDB 数据库
`--name MongoDB` | 为容器指定一个名称,这里是 "MongoDB"
`--restart=always` | 表示当容器退出时,总是重新启动容器
`--config /etc/mongo/mongod.conf` | 指定配置文件路径 (这个不是必须的设置此选项之前需准备好mongod.conf文件映射到Docker内部)
`--wiredTigerCacheSizeGB 1.5` | 设置WiredTiger缓存大小限制为1.5G
<!--rehype:className=style-list-arrow-->
#### 持久化解释
-- | --
:-- | --
`-v $HOME/MongoDB_Data/conf:/etc/mongo` | 将到容器中的 "/etc/mongo" 路径映射挂载到 宿主机中的"$HOME/MongoDB_Data/conf"目录下,这样子做的目的是可以自定义MongoDB的配置文件 *(需提前准备好文件,否则可能会启动失败)*
`-v $HOME/Redis_Data/data:/data` | 将到容器中的 "/data/db" 路径映射挂载到 宿主机中的"$HOME/MongoDB_Data/data"目录下,这样做的目的是将 MongoDB 数据库的数据存储在本地中,以便数据在容器重启时得以保留
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
-- | --
:-- | --
`MONGO_INITDB_ROOT_USERNAME` *【可选】* | 该变量是创建管理员用户,该用户是在 admin 身份验证数据库中创建的,并被赋予角色 root这是一个"超级用户"角色。
`MONGO_INITDB_ROOT_PASSWORD` *【可选】* | 该变量是为创建管理员用户设置密码,需配合 `MONGO_INITDB_ROOT_USERNAME` 变量参数使用
<!--rehype:className=style-list-arrow-->
### RabbitMQ
```bash
docker run -itd -p 15672:15672 --name RabbitMQ \
--hostname rmq-test \
-e RABBITMQ_DEFAULT_VHOST=rmq-test \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=abc123 \
rabbitmq:3-management
```
#### 参数解释
-- | --
:-- | --
`-itd` | 表示以后台运行的方式启动容器,并分配一个伪终端pseudo-TTY和保持 STDIN 打开
`-p 15672:15672` | 将主机的端口映射到容器的端口,这里是将主机的 15672 端口映射到容器的 15672 端口,用于访问 RabbitMQ 控制台页面内部除了该端口外还开了4369/tcp、5671-5672/tcp、15671/tcp、15691-15692/tcp、25672/tcp
`--name RabbitMQ` | 为容器指定一个名称,这里是 "RabbitMQ"
`--restart=always` | 表示当容器退出时,总是重新启动容器
`--hostname` | 设置容器主机名称
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
-- | --
:-- | --
`RABBITMQ_DEFAULT_VHOST` *【可选】* | 该变量是可选的,是设置 RabbitMQ 的主机名称
`RABBITMQ_DEFAULT_USER` *【可选】* | 该变量是可选的,是设置 RabbitMQ 的账户
`RABBITMQ_DEFAULT_PASS` *【可选】* | 该变量是可选的,是设置 RabbitMQ 的密码
<!--rehype:className=auto-wrap left-align-->
### 远程协助工具 Guacd
<!--rehype:wrap-class=row-span-3-->
```bash
docker run -d -p 4822:4822 --privileged=true \
--restart=always --name Guacd \
-e LANG=zh_CN.UTF-8 \
-v /docker_data/Guacd/rdp-rec:/rdp-rec \
-v /docker_data/Guacd/rdp-file:/rdp-file \
guacamole/guacd
```
#### 参数解释
-- | --
:-- | --
`-d` | 表示以后台运行的方式启动容器
`-it` | 分别表示分配一个伪终端pseudo-TTY并保持 STDIN 打开
`-p 4822:4822` | 将主机的端口映射到容器的端口,这里是将主机的 4822 端口映射到容器的 4822 端口,用于访问 Guacd远程的API接口
`--name Guacd` | 为容器指定一个名称,这里是 "Guacd"
`--restart=always` | 表示当容器退出时,总是重新启动容器
`--privileged=true` | 若不加字段--privileged=true可能会报权限错误
<!--rehype:className=style-list-arrow-->
#### 持久化解释
-- | --
:-- | --
`-v /docker_data/Guacd/rdp-rec:/rdp-rec` | 代码内固定配置guacd服务rdp录屏文件存放路径
`-v /docker_data/Guacd/rdp-file:/rdp-file` | 代码内固定配置guacd服务rdp远程磁盘文件存放路
<!--rehype:className=style-list-arrow-->
#### 环境变量解释
- `LANG` 设置字符编码格式
### 在线代码编辑器 Code Server
```bash
@ -587,47 +1132,6 @@ $ docker run -it --name code-server \
codercom/code-server:latest
```
### MySQL
```bash
$ docker run --name mysql \
-p 3306:3306 \
-v $HOME/mysql/conf.d:/etc/mysql/conf.d \
-v $HOME/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.23
```
### Redis
```bash
$ docker run -d --name myredis \
-v $HOME/redis/conf:/usr/local/etc/redis \
-v /etc/localtime:/etc/localtime:ro \
redis redis-server /usr/local/etc/redis/redis.conf
```
### Nginx
```bash
$ docker run --name my-nginx \
-v "$HOME/nginx/nginx.conf:/etc/nginx/nginx.conf:ro" \
-v "$HOME/nginx/html:/usr/share/nginx/html:ro" \
-p 8080:80 \
-d nginx
```
### PostgreSQL
```bash
$ docker run --name my-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $HOME/nginx/mount:/var/lib/postgresql/data \
-d postgres
```
### 媒体管理工具 Dim
```bash
@ -658,6 +1162,7 @@ $ docker run -d --name gitlab \
另见
----
- [Dockerfile 备忘清单](./dockerfile.md) _(github.io)_
- [Docker 官方入门教程](https://docs.docker.com/get-started/) _(docker.com)_
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_
- [Dockerfile 备忘清单](./dockerfile.md) *(github.io)*
- [Docker 官方入门教程](https://docs.docker.com/get-started/) *(docker.com)*
- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) *(github.io)*
- [快速安装Docker及配置及Docker配置、Docker常用命令](https://www.loganjin.cn/article/docker-install/)

View File

@ -28,8 +28,8 @@ FROM [--platform=<platform>] <image> [AS <name>]
示例
```dockerfile
FROM ruby:2.2.2
FROM golang:1.19-alpine3.16 AS build-env
FROM ruby:3.3.0
FROM golang:1.20-alpine3.16 AS build-env
```
### 变量 ENV
@ -214,7 +214,7 @@ Dockerfile 示例
### 服务静态网站的最小 Docker 镜像
```dockerfile
FROM lipanski/docker-static-website:latest
FROM wcjiang/docker-static-website:latest
# 使用 .dockerignore 文件来控制镜像中的内容!
# 复制当前目录内容,到容器中
COPY ./ .
@ -223,13 +223,13 @@ COPY ./ .
这会产生一个 **`154KB +`** 的单层镜像。 如果您需要以不同的方式配置 `httpd`,您可以覆盖 CMD 行:
```dockerfile
FROM lipanski/docker-static-website:latest
FROM wcjiang/docker-static-website:latest
COPY . .
CMD ["/busybox","httpd","-f","-v","-p","3000","-c","httpd.conf"]
```
缩小镜像过程[查看原文](https://lipanski.com/posts/smallest-docker-image-static-website),镜像 [Dockerfile 源码](https://github.com/lipanski/docker-static-website)。
缩小镜像过程[查看原文](https://lipanski.com/posts/smallest-docker-image-static-website),镜像 [Dockerfile 源码](https://github.com/forksss/docker-static-website)。
### Docker 镜像多阶段构建

329
docs/ejs.md Normal file
View File

@ -0,0 +1,329 @@
Ejs 备忘清单
====
[![NPM version](https://img.shields.io/npm/v/ejs.svg?style=flat)](https://www.npmjs.com/package/ejs)
[![Downloads](https://img.shields.io/npm/dm/ejs.svg?style=flat)](https://www.npmjs.com/package/ejs)
[![Repo Dependents](https://badgen.net/github/dependents-repo/mde/ejs)](https://github.com/mde/ejs/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/mde/ejs)
EJS嵌入式 JavaScript是一种简单的模板语言可让您使用纯 JavaScript 生成 HTML 标记
<!--rehype:style=padding-top: 12px;-->
入门
----
### Hello world
#### 安装
```shell
$ npm install ejs
```
#### hello.ejs
```ejs
<% if (user.email) { %>
<h1><%= user.email %></h1>
<% } %>
```
#### 命令 CLI
```shell
$ ejs hello.ejs -o hello.html
```
### 使用数据渲染
```js
let ejs = require('ejs');
let people = ['geddy', 'neil', 'alex'];
let tpl = '<%= people.join(", "); %>';
let html = ejs.render(tpl, {
people: people
});
console.log(html);
```
`EJS` 传递模板字符串和一些数据
### 浏览器支持
```html
<script src="ejs.js"></script>
<script>
let people = ['geddy', 'neil', 'alex'];
let html = ejs.render(
'<%= people.join(", "); %>',
{ people: people }
);
</script>
```
在脚本标签中使用 `ejs`
### 变量
| | |
|--------------|----------------------------------|
| `<%= var %>` | 打印变量的值 |
| `<%- var %>` | 打印时不进行 HTML 转义 |
### CLI
渲染并指定输出文件
```shell
$ ejs hello.ejs -o hello.html
```
为其提供模板文件和数据文件
```shell
$ ejs hello.ejs -f data.json -o hello.html
```
### 注释
```ejs
<%# 该行将表示一条注释 %>
```
--------
```ejs
<%# 这是一个多行 EJS 注释。
它可以跨越多行,
但不会显示
在最终的 HTML 输出中。
%>
```
### 方法
```js
let ejs = require('ejs');
let template = ejs.compile(str, options);
template(data);
// => 渲染的 HTML 字符串
ejs.render(str, data, options);
// => 渲染的 HTML 字符串
ejs.renderFile(filename, data, options,
function(err, str){
// str => 渲染的 HTML 字符串
}
);
```
### 包括文件
<!--rehype:wrap-class=col-span-2-->
```ejs
<%- include('partials/navbar.ejs') %>
```
包含带有数据的模板:
```ejs
<% include('header', { title: 'My Page' }) %>
```
--------
```ejs
<ul>
<% users.forEach(function(user){ %>
<%- include('item', {user: user}); %>
<% }); %>
</ul>
```
要包含模板,需要文件名选项,路径是相对的
文档
--------
### 条件句
```ejs
<% if (userLoggedIn) { %>
<p>Welcome, <%= username %>!</p>
<% } else { %>
<p>Please log in.</p>
<% } %>
```
### 使用循环
```ejs
<% if (userLoggedIn) { %>
<p>Welcome, <%= username %>!</p>
<% } else { %>
<p>Please log in.</p>
<% } %>
```
### 自定义分隔符
<!--rehype:wrap-class=row-span-2-->
```js
let ejs = require('ejs'),
users = ['geddy', 'neil', 'alex'];
// 只需一个模板
ejs.render('<?= users.join(" | "); ?>',
{users: users},
{delimiter: '?'});
// => 'geddy | neil | alex'
// 或全局范围内
ejs.delimiter = '$';
ejs.render('<$= users.join(" | "); $>',
{users: users});
// => 'geddy | neil | alex'
```
### 缓存
```js
let ejs = require('ejs'),
LRU = require('lru-cache');
// LRU 缓存具有 100 项限制
ejs.cache = LRU(100);
```
### 布局
```ejs
<%- include('header'); -%>
<h1> Title </h1>
<p>
My page
</p>
<%- include('footer'); -%>
```
### 自定义文件加载器
<!--rehype:wrap-class=col-span-2-->
```js
let ejs = require('ejs');
let myFileLoader = function (filePath) {
return 'myFileLoader: ' + fs.readFileSync(filePath);
};
ejs.fileLoader = myFileLoader;
```
客户端支持
-----
<!--rehype:body-class=cols-2-->
### 例子
```html
<div id="output"></div>
<script src="ejs.min.js"></script>
<script>
let people = ['geddy', 'neil', 'alex'],
html = ejs.render('<%= people.join(", "); %>', {people: people});
// With jQuery:
$('#output').html(html);
// Vanilla JS:
document.getElementById('output').innerHTML = html;
</script>
```
### 注意事项
```js
let str = "Hello <%= include('file', {person: 'John'}); %>",
fn = ejs.compile(str, {client: true});
fn(data, null, function(path, d){ // include callback
// path -> 'file'
// d -> {person: 'John'}
// Put your code here
// Return the contents of file as a string
}); // returns rendered string
```
## 选项
<!--rehype:body-class=cols-1-->
### 选项列表
选项 | 描述
:---|---
`cache` | 编译后的函数被缓存,需要文件名
`filename` | 由缓存用于关键缓存,并用于包含
`root` | 使用绝对路径(例如 `/file.ejs`)设置包含项目的根目录。 可以是一个数组来尝试解析来自多个目录的包含。
`views` | 解析包含相对路径时要使用的路径数组。
`context` | 函数执行上下文
`compileDebug` | 当 `false` 时,不编译任何调试工具
`client` | 返回独立编译的函数
`delimiter` | 用于内部分隔符的字符,默认为 `%`
`openDelimiter` | 用于打开分隔符的字符,默认为 `<`
`closeDelimiter` | 用于结束分隔符的字符,默认为 `>`
`debug` | 输出生成的函数体
`strict` | 当设置为 `true` 时,生成的函数处于严格模式
`_with` | 是否使用 `with() {}` 构造。 如果为 `false`,则局部变量将存储在局部变量对象中。 (暗示`--strict`
`localsName` | 不使用时用于存储局部变量的对象的名称 默认为局部变量
`rmWhitespace` | 删除所有可安全删除的空格,包括前导和尾随空格。 它还为所有 `scriptlet` 标记启用了更安全版本的 `-%>` 行吸收(它不会在行中间去除新的标记行)
`escape` | 与 `<%=` 构造一起使用的转义函数。 它用于渲染,并在生成客户端函数时进行 `.toString()` 处理。 (默认情况下转义 XML
`outputFunctionName` | 设置为字符串(例如 `echo``print`),以便函数在 `scriptlet` 标签内打印输出
`async` | 当 `true`EJS 将使用异步函数进行渲染。 (取决于 `JS` 运行时中的 `async`/`await` 支持
## 标签
<!--rehype:body-class=cols-1-->
### 标签列表
标签 | 描述
:---|---
`<%` | 'Scriptlet' 标签,用于控制流,无输出
`<%_` | “Whitespace Slurping”Scriptlet 标签,删除其前面的所有空格
`<%=` | 将值输出到模板中HTML 转义)
`<%-` | 将未转义的值输出到模板中
`<%#` | 注释标签,不执行,不输出
`<%%` | 输出文字 `<%`
`%>` | 普通结束标签
`-%>` | 修剪模式('newline slurp')标签,修剪换行符后的内容
`_%>` | “Whitespace Slurping”结束标签删除其后的所有空格
## Cli
<!--rehype:body-class=cols-1-->
### Cli 列表
选项 | 描述
:---|---
`cache` | 编译后的函数被缓存,需要文件名
`-o / --output-file FILE` | 将渲染的输出写入 FILE 而不是 stdout。
`-f / --data-file FILE` | 必须是 JSON 格式。 使用来自 FILE 的解析输入作为渲染数据。
`-i / --data-input STRING` | 必须采用 JSON 格式和 URI 编码。 使用来自 STRING 的解析输入作为渲染数据。
`-m / --delimiter CHARACTER` | 使用带有尖括号的 CHARACTER 来表示打开/关闭(默认为 %)。
`-p / --open-delimiter CHARACTER` | 使用 CHARACTER 而不是左尖括号来打开。
`-c / --close-delimiter CHARACTER` | 使用 CHARACTER 而不是右尖括号来结束。
`-s / --strict` | 当设置为 `true` 时,生成的函数处于严格模式
`-n / --no-with` | 对变量使用 `locals` 对象,而不是使用 `with`(隐含--strict
`-l / --locals-name` | 不使用“with”时用于存储局部变量的对象的名称。
`-w / --rm-whitespace` | 删除所有可安全删除的空格,包括前导和尾随空格。
`-d / --debug` | 输出生成的函数体
`-h / --help` | 显示此帮助消息。
`-V/v / --version` | 显示 EJS 版本。
使用示例:
```bash
$ ejs -p [ -c ] ./template_file.ejs -o ./output.html
$ ejs ./test/fixtures/user.ejs name=Lerxst
$ ejs -n -l _ ./some_template.ejs -f ./data_file.json
```

606
docs/elasticsearch.md Normal file
View File

@ -0,0 +1,606 @@
Elasticsearch 备忘清单
===
这是 [Elasticsearch](https://www.elastic.co/guide/index.html) 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。
入门
---
### 入门
<!--rehype:wrap-class=row-span-2-->
Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎具有HTTP Web接口和无模式JSON文档。
#### 下载
注意: `${VERSION}` 需替换为指定版本,官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。
#### Windows
```
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip
```
<!--rehype:className=wrap-text-->
#### linux
```shell
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
$ tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz
$ cd elasticsearch-${VERSION}/
```
<!--rehype:className=wrap-text-->
#### macos
```shell
$ curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
$ tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ cd elasticsearch-${VERSION}/
```
<!--rehype:className=wrap-text-->
### 启动
<!--rehype:wrap-class=col-span-2-->
- 启动 Elasticsearch
```shell
$ ./bin/elasticsearch
```
- 设置密码
```shell
export ELASTIC_PASSWORD="your_password"
```
- 测试是否启动成功
```shell
curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
```
<!--rehype:className=wrap-text-->
- 成功则返回样例如下:
```json
{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "${VERSION}",
"build_type" : "tar",
"build_hash" : "f27399d",
"build_flavor" : "default",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}
```
<!--rehype:className=style-timeline-->
### Elasticsearch 和 RDMS 的对比
| RDMS | elasticsearch |
| ----------------------- | ----------------- |
| 数据库(database) | 索引(index) |
| 表(table) | 类型(type) |
| 行(row) | 文档(document) |
| 列(column) | 字段(field) |
| 表结构 | 映射 |
| 索引 | 全文索引 |
| SQL | 查询DSL |
| SELECT * FROM tablename | GET http://... |
| UPDATE table SET | PUT http://... |
| DELETE | DELETE http://... |
<!--rehype:className=left-align show-header-->
操作
---
### 基础语法规则
```shell
$ curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
```
<!--rehype:className=wrap-text-->
- `VERB HTTP` 方法GET, POST, PUT, HEAD, DELETE
- `PROTOCOL`http 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用)
- `HOST`Elasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost
- `PORT`Elasticsearch HTTP 服务所在的端口,默认为 9200
- `PATH API 路径`例如_count 将返回集群中文档的数量PATH可以包含多个组件例如_cluster/stats 或者_nodes/stats/jvm
- `QUERY_STRING`:一些可选的查询请求参数,例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
- `BODY`:一个 JSON 格式的请求主体(如果请求需要的话)
### 创建索引
<!--rehype:wrap-class=col-span-2 row-span-3-->
#### 统一请求 api 前缀
```
http://localhost:9200/
```
#### DSL语法
```json
PUT /user_info
{
"settings": { "number_of_replicas": 1, "number_of_shards": 1 },
"mappings": {
"properties": {
"id": { "type": "long", "index": true },
"username": { "type": "keyword", "index": true },
"nickname": { "type": "keyword", "index": true },
"password": { "type": "keyword", "index": false },
"age": { "type": "integer", "index": true },
"info": { "type": "text", "index": true },
"remark": { "type": "text", "index": true }
}
}
}
```
#### curl
```shell
curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }'
```
<!--rehype:className=wrap-text-->
#### 参数说明
- `settings`: 设置索引的信息
- `number_of_shards`: 每个索引的主分片数,一旦索引创建后,无法修改此配置
- `number_of_replicas`: 每个主分片的副本数,此配置可随时修改
- `mappings`: 索引映射定义
- `properties`: 字段定义。使用 JSON 配置,键为字段名称(自定义),值为嵌套 JSON其中 `type` 指定字段的类型
其他参数很多,请参考官网资料
### 删除索引
#### DSL语法
```http
DELETE /user_info
```
#### curl
```shell
curl -XDELETE "http://localhost:9200/user_info"
```
<!--rehype:className=wrap-text-->
### 判断索引是否存在
#### DSL语法
```http
# 查看索引是否存在
HEAD /user_info
```
#### curl
```shell
# 查看索引是否存在
curl -XHEAD "http://localhost:9200/user_info"
```
<!--rehype:className=wrap-text-->
### 开启/关闭索引
#### 开启DSL语法
```shell
POST /user_info/_open
```
`curl`
```shell
curl -XPOST "http://localhost:9200/user_info/_open"
```
<!--rehype:className=wrap-text-->
#### 关闭 DSL 语法
```shell
POST /user_info/_close
```
`curl`
```shell
curl -XPOST "http://localhost:9200/user_info/_close"
```
<!--rehype:className=wrap-text-->
### 索引的别名
<!--rehype:wrap-class=col-span-2-->
- 添加别名 DSL 语法
```shell
POST /user_info/_alias/user1
```
```shell
curl -XPOST "http://localhost:9200/user_info/_alias/user1"
```
- 删除别名DSL语法
```shell
DELETE /user_info/_alias/user1
```
```shell
curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
```
- 查看别名DSL语法
```shell
GET /_alias/user1
```
```shell
curl -XGET "http://localhost:9200/_alias/useraa"
```
Mapping 操作
---
类似修改数据库中列的操作
### 查看 mapping
#### DSL语法
```shell
GET /user_info/_mapping
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_mapping"
```
<!--rehype:className=wrap-text-->
### 新增 mapping
<!--rehype:wrap-class=col-span-2-->
#### DSL语法
```shell
PUT /user_info/_mapping
{
"properties":{
"sex":{ "type":"keyword" }
}
}
```
---
```shell
curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }'
```
<!--rehype:className=wrap-text-->
`注意`: 需要注意的是字段映射只能增加,不能更改删除
文档的操作
---
### 添加文档
<!--rehype:wrap-class=row-span-2-->
#### 新增一条数据 - DSL语法
```shell
POST /user_info/_doc/1
{
"id":1,
"username":"username",
"password":"123456",
"nickname":"nickname",
"age":18,
"info":"一些个人相关的介绍",
"remark":"备注信息",
"sex":"男"
}
```
---
```shell
curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }'
```
<!--rehype:className=wrap-text-->
### 查询指定索引的所有文档
<!--rehype:wrap-class=row-span-2-->
类似数据库中的 `select * from user_info;`
#### DSL语法
```json
GET /user_info/_search
{
"query": {
"match_all": {}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }'
```
<!--rehype:className=wrap-text-->
### 通过 id 查询文档
类似数据库中的 `select * from user_info where id = 1;`
#### DSL语法
```shell
GET /user_info/_doc/1
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_doc/1"
```
<!--rehype:className=wrap-text-->
### 模糊查找
类似数据库中的模糊查询 `select * from user_info where info like '%人%';`
#### DSL语法
```json
GET /user_info/_search
{
"query": { "match": { "info": "人" } }
}
```
### 通过条件查询文档
<!--rehype:wrap-class=col-span-2-->
类似数据库中的 `select * from user_info where username = 'username';`
#### 通过条件查询 - DSL语法
```json
GET /user_info/_search
{
"query": {
"bool": {
"must": [ { "term": { "username": "username" } } ]
}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'
```
<!--rehype:className=wrap-text-->
### 范围查找
类似数据库中的范围查询 `select * from user_info where age between 18 and 30;`
#### DSL语法
```json
GET /user_info/_search
{
"query": {
"range": {
"age": {
"gt": 18,
"lt": 30
}
}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }'
```
<!--rehype:className=wrap-text-->
### and 查询
<!--rehype:wrap-class=col-span-2-->
类似数据库中的 and 查询 `select * from user_info where age > 18 and sex = '男';`
#### DSL语法
```json
GET /user_info/_search
{
"query": {
"bool": {
"must": [
{ "range": { "age": { "gt": 18 } } },
{ "term": { "sex": "男" } }
]
}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }'
```
<!--rehype:className=wrap-text-->
### limit 查找
类似数据库中的 limit 查询 `select * from user_info limit 10;`
#### DSL语法
```json
GET /user_info/_search
{
"size": 10,
"query": {
"match_all": {}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'
```
<!--rehype:className=wrap-text-->
### limit offset 查找
类似数据库中的 limit 查询 `select * from user_info limit 0,10;`
#### DSL语法
```http
GET /user_info/_search
{
"size": 2,
"from": 1,
"query": {
"match_all": {}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
```
<!--rehype:className=wrap-text-->
#### 参数说明
- `size`: 10 表示我们想要返回的结果数量是10条
- `from`: 20 表示我们想要从结果集中的第21条记录开始返回因为偏移是从0开始的
- `query`: `{"match_all": {}}` 是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果
### or 查询
<!--rehype:wrap-class=col-span-2-->
类似数据库中的 or 查询 `select * from user_info where age > 18 or sex = '男';`
#### DSL语法
```json
GET /user_info/_search
{
"query": {
"bool": {
"should": [
{
"range": {
"age": { "gt": 18 }
}
},
{
"term": { "sex": "男" }
}
]
}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }'
```
<!--rehype:className=wrap-text-->
删除文档
---
### 删除指定 id
类似数据库中的 delete 查询 `delete from user_info where id = 3;`
#### DSL语法
```shell
# 删除文档
DELETE /user_info/_doc/3
```
---
```shell
# 删除文档
curl -XDELETE "http://localhost:9200/user_info/_doc/3"
```
<!--rehype:className=wrap-text-->
### 删除指定条件
<!--rehype:wrap-class=col-span-2-->
类似数据库中的 delete 查询 `delete from user_info where age > 18;`
#### DSL语法
```json
POST /user_info/_delete_by_query
{
"query": {
"range": { "age": { "gt": 18 } }
}
}
```
---
```shell
curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
```
<!--rehype:className=wrap-text-->

802
docs/elixir.md Normal file
View File

@ -0,0 +1,802 @@
Elixir 备忘清单
===
提供基本语法和方法的 Elixir 快速参考备忘单。
入门
------
### 安装 Elixir
<!--rehype:wrap-class=row-span-2-->
Elixir 自带了 `iex` 这样一个交互 shell可以随时计算 Elixir 表达式的值,运行`iex`命令,继续输入几个简单的表达式试试:
```shell
iex 2+3
5
iex 2+3 == 5
true
iex String.length("快速的狐狸跳过了懒惰的狗")
43
```
每个操作系统的文档可以在[官网](https://elixir-lang.org)网站上 [Installing Elixir](http://elixir-lang.org/install.html) 部分找到
### hello.exs
```elixir
IO.puts("Hello world from Elixir")
```
Elixir 运行命令
```shell
$ elixir hello.exs
```
### 基本类型
<!--rehype:wrap-class=row-span-3-->
Elixir 支持多种基本类型:整数、浮点、布尔值、原子和字符串。其他数据类型,如列表和元组
```elixir
# integer 整数
iex> 1
# integer支持2进制、8进制和16进制的整数
iex> 0x1F
# float
iex> 1.0
# boolean
iex> true
# atom / symbol
iex> :atom
# string
iex> "elixir"
# list
iex> [1, 2, 3]
# tuple
iex> {1, 2, 3}
```
### 注释
```elixir
# 这是一个单行注释
```
### 字符串插值与拼接
```elixir
iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"
iex> "Hello " <> "world!"
"Hello world!"
```
### 变量和模式匹配
```elixir
x = 1
# => x 现在等于 1
{a, b} = {1, 2}
# => a 等于 1b 等于 2
```
在 Elixir 中,使用 `=` 来进行赋值操作,但实际上是模式匹配。左边是模式,右边是值
### 原子Atoms
```elixir
:ok
```
原子是常量,它们的名称就是它们的值
### 列表Lists
```elixir
list = [1, 2, 3]
```
### 元组Tuples
```elixir
tuple = {:ok, "value"}
```
### 函数定义
```elixir
defmodule MyModule do
def my_function(parameter) do
# 函数体
end
end
```
### 匿名函数
```elixir
add = fn a, b -> a + b end
```
### 控制结构
<!--rehype:wrap-class=row-span-2-->
`if/else`
```elixir
if x > 0 do
"Positive"
else
"Non-positive"
end
```
`case`
```elixir
case {1, 2} do
{1, x} -> "Matched #{x}"
_ -> "Not matched"
end
```
`cond`
```elixir
cond do
x > 2 -> "Greater than 2"
x == 2 -> "Equal to 2"
true -> "Less than 2"
end
```
### 基本算术
<!--rehype:wrap-class=row-span-4-->
```elixir
iex> 1 + 2
3
iex> 5 * 5
25
iex> 10 / 2
5.0
```
运算符`/`总是返回一个 float。如果你想做整数除法或得到除法余数你可以调用 div 和 rem 函数:
```elixir
iex> div(10, 2)
5
```
允许在调用需要一个或多个参数的函数时删除括号
```elixir
iex> div 10, 2
5
iex> rem 10, 3
1
```
可以调用 round 函数来获取与给定浮点数最接近的整数,或者调用 trunc 函数来获取浮点数的整数部分
```elixir
iex> round(3.58)
4
iex> trunc(3.58)
3
```
可以使用 is_integer、is_float 或 is_number 分别检查参数是否为 integer、float 或 number 类型
```elixir
iex> is_integer(1)
true
iex> is_float(2.0)
true
iex> is_number(2.0)
false
```
### 布尔算术
<!--rehype:wrap-class=row-span-4-->
Elixir 提供了 `||``&&``!` 布尔操作符,它们支持任何类型的操作:
```elixir
iex> -20 || true
-20
iex> false || 42
42
iex> 42 && true
true
iex> 42 && nil
nil
iex> !42
false
iex> !false
true
```
还有三个操作符and、or、not它们的第一个参数**必须是布尔类型**true 和 false:
```elixir
iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error
```
### 模块和函数导入
```elixir
import List, only: [duplicate: 2]
```
### 管道操作符
```elixir
result = data
|> process1()
|> process2()
```
`|>` 用于链式调用函数,将前一个函数的结果作为下一个函数的第一个参数
### 比较运算符
比较运算符 `==`, `!=`, `===`, `!==`, `<=`, `>=`, `<``>`
```elixir
iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true
```
集合
------
>
> 列表list、元组tuple、关键字列表keyword list、映射map
>
### 列表List
<!--rehype:wrap-class=row-span-2-->
```elixir
iex> [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> list = [3.14, :pie, "Apple"]
iex> [3.14, :pie, "Apple"]
```
列表的开头添加元素
```elixir
iex> ["π" | list]
["π", 3.14, :pie, "Apple"]
```
列表的尾部添加元素/列表拼接
```elixir
iex> list ++ ["Cherry"]
[3.14, :pie, "Apple", "Cherry"]
```
获取列表的头部元素
```elixir
iex> hd [3.14, :pie, "Apple"]
3.14
```
获取列表的尾部元素
```elixir
iex> tl [3.14, :pie, "Apple"]
[:pie, "Apple"]
```
### 元组Tuple
```elixir
iex> {3.14, :pie, "Apple"}
{3.14, :pie, "Apple"}
```
### 关键字列表Keyword List
```elixir
iex> [foo: "bar", hello: "world"]
[foo: "bar", hello: "world"]
iex> [{:foo, "bar"}, {:hello, "world"}]
[foo: "bar", hello: "world"]
```
关键字列表非常重要,它有以下的特性:
-key都是原子atom
-key是有序的定义后顺序不会改变
-key不必是唯一的
因为这些原因,常见的用法是作为参数传递给函数
### 映射Map
Elixir 的映射maps是键值对结构的第一选择和关键字列表keywords不同映射允许任意类型的数据作为键而且数据并不严格排序。 你可以使用 %{} 来定义映射:
```elixir
iex> map = %{:foo => "bar", "hello" => :world}
%{:foo => "bar", "hello" => :world}
iex> map[:foo]
"bar"
iex> map["hello"]
:world
```
模式匹配
------
>
> 模式匹配是 Elixir 很强大的特性,它允许我们匹配简单值、数据结构、甚至函数。
>
### 匹配元组
```elixir
iex> {a, b, c} = {:hello, "world", 42}
{:hello, "world", 42}
iex> a
:hello
iex> b
"world"
```
### 匹配列表
```
iex> [a, b, c] = [1, 2, 3]
[1, 2, 3]
iex> a
1
```
### 匹配列表的头部元素
```
iex> [head | tail] = [1, 2, 3]
[1, 2, 3]
iex> head
1
iex> tail
[2, 3]
```
### Pin 操作符
pin 操作符,就是用已经绑定的值去匹配,而不是重新绑定一个新值。
```elixir
iex> {x, ^x} = {2, 1}
{2, 1}
iex> x
2
```
### 使用下划线 `_` 忽略匹配的值
```elixir
iex> [head | _] = [1, 2, 3]
[1, 2, 3]
iex> head
1
```
控制语句
------
### if/else/end
```elixir
if condition do
# 条件成立时执行的代码
else
# 条件不成立时执行的代码
end
```
### case/end
```elixir
case expression do
pattern1 -> # 匹配 pattern1 时执行的代码
pattern2 -> # 匹配 pattern2 时执行的代码
_ -> # 其他情况执行的代码
end
```
### cond/end
```elixir
cond do
condition1 -> # 条件1成立时执行的代码
condition2 -> # 条件2成立时执行的代码
true -> # 如果没有任何条件成立,执行这里的代码
end
```
### unless/do/end
```elixir
unless condition do
# 条件为假时执行的代码
end
```
### try/rescue/end
```elixir
try do
# 可能会引发异常的代码
rescue
pattern1 -> # 匹配 pattern1 的异常处理代码
pattern2 -> # 匹配 pattern2 的异常处理代码
_ -> # 其他异常处理代码
end
```
### case
<!--rehype:wrap-class=row-span-2-->
允许将一个值与许多模式进行比较,直到找到匹配的模式:
```elixir
iex> case {1, 2, 3} do
{4, 5, 6} ->
"This clause won't match"
{1, x, 3} ->
"该子句将匹配并绑定 x 到该子句中的 2"
_ ->
"This clause would match any value"
end
"该子句将匹配并绑定 x 到该子句中的 2"
```
还可以使用when指定额外的条件
```elixir
iex> case {1, 2, 3} do
{1, x, 3} when x > 0 ->
"Will match"
_ ->
"如果不满足保护条件,将匹配"
end
"Will match"
```
### cond
当我们需要根据条件进行匹配而不是值时,类似于其他语言的 `else if``elsif`,可以使用 `cond` 控制结构。
```elixir
iex> cond do
2 + 2 == 5 ->
"This will not be true"
2 * 2 == 3 ->
"Nor this"
1 + 1 == 2 ->
"But this will"
end
"But this will"
```
如果所有的条件都返回 `nil``false`则会引发一个错误CondClauseError。因此需要添加一个 `final` 条件,等于 `true`,它将始终匹配:
```elixir
iex> cond do
2 + 2 == 5 ->
"This is never true"
2 * 2 == 3 ->
"Nor this"
true ->
"这始终为真(等同于 else"
end
"这始终为真(等同于 else"
```
### 变量的作用域
如果在if、case和类似的构造中声明或更改了任何变量则声明和更改将只在构造中可见。
```elixir
iex> x = 1
1
if true do
x = x + 1
end
2
iex> x
1
```
如果要更改值则必须从if返回值
```elixir
iex> x = 1
1
iex> x = if true do
x + 1
else
x
end
2
```
函数
------
### 函数定义
```elixir
def function_name(param1, param2) do
# 函数体
end
```
示例:
```elixir
def sum(a, b) do
a + b
end
```
### 模式匹配的多个函数定义
<!--rehype:wrap-class=row-span-2-->
```elixir
def fun_name(:atom) do
# 对于 :atom 的处理
end
def fun_name("string") do
# 对于 "string" 的处理
end
def fun_name(number) when is_integer(number) do
# 对于整数的处理
end
```
示例:
```elixir
def is_positive(number) when number > 0 do
true
end
def is_positive(_), do: false
```
### 函数调用
```elixir
module_name.function_name(arg1, arg2)
```
示例:
```elixir
Enum.map([1, 2, 3], &(&1 * 2))
```
### 函数参数默认值
```elixir
def function_name(parameter \\ 默认值) do
# 函数体
end
```
示例:
```elixir
def greet(name \\ "World") do
"Hello, #{name}!"
end
```
### 可变参数数量
```elixir
def function_name(param1, param2 \\ []) do
# 函数体
end
```
示例:
```elixir
def sum(numbers) do
Enum.sum(numbers)
end
```
### 函数文档注释
```elixir
@doc """
这是函数的文档。
"""
```
示例:
```elixir
@doc """
Adds two numbers together.
## 示例
iex> MyModule.add(1, 2)
3
"""
def add(a, b) do
a + b
end
```
这些是 Elixir 函数语法的基本要点,可以帮助你开始编写函数。
### 匿名函数
```elixir
iex> sum = fn (a, b) -> a + b end
iex> sum.(2, 3)
5
```
可以使用 & 语法来简化匿名函数的定义:
```elixir
iex> sum = &(&1 + &2)
iex> sum.(2, 3)
5
```
### 闭包
匿名函数去引用外部的变量,这通常被称为闭包。
```elixir
iex> double = fn a -> add.(a, a) end
#Function<6.71889879/1 in :erl_eval.expr/5>
double.(2)
4
```
闭包与守卫
```elixir
iex> f = fn
x, y when x > 0 -> x + y
x, y -> x * y
end
iex> f.(1, 3)
4
iex> f.(-1, 3)
-3
```
### 命名函数
命名函数是通过 def 关键字定义在某个模块中
```elixir
defmodule Greeter do
def hello(name) do
"Hello, " <> name
end
end
iex> Greeter.hello("Sean")
"Hello, Sean"
```
简写为一行:
```elixir
defmodule Greeter do
def hello(name), do: "Hello, " <> name
end
```
私有函数
```elixir
defmodule Greeter do
def hello(name), do: phrase <> name
# 使用defp来定义私有函数
defp phrase, do: "Hello, "
end
```
函数的默认参数:使用 `\\` 来定义默认参数
```elixir
defmodule Greeter do
def hello(name, language_code \\ "en") do
phrase(language_code) <> name
end
defp phrase("en"), do: "Hello, "
defp phrase("es"), do: "Hola, "
end
```
Enumerables 与 Streams
------
>
> Elixir 提供了 Enum 和 Stream 两个模块,用于处理集合。
>
### Enum
>
> Enum 模块提供了对集合的常用操作,如 map、filter、reduce、sort、chunk、join、into 等。
```elixir
iex> Enum.map([1, 2, 3], fn x -> x * 2 end)
[2, 4, 6]
iex> Enum.map(%{1 => 2, 3 => 4}, fn {k, v} -> k * v end)
[2, 12]
```
### Stream
>
> 作为Enum的替代品Elixir提供了支持懒惰操作的Stream模块
```elixir
iex> 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum()
7500000000
```
> 流文件操作
```elixir
iex> stream = File.stream!("path/to/file")
%File.Stream{
line_or_bytes: :line,
modes: [:raw, :read_ahead, :binary],
path: "path/to/file",
raw: true
}
Enum.take(stream, 10)
# 上面的例子将提取所选文件的前10行。这意味着流对于处理大型文件甚至是网络资源等慢速资源非常有用。
```
另见
----
- [Elixir 官方](https://elixir-lang.org/) _(elixir-lang.org)_
- [Elixir School](https://elixirschool.com/) _(elixirschool.com)_

View File

@ -78,9 +78,9 @@ $ emacs
:- | :-
:- | :-
`C-g` | 中止部分键入或执行的命令
`M-x` 恢复会话 | 恢复因系统崩溃而丢失的文件
`M-x` recover-session | 恢复因系统崩溃而丢失的文件
`C-x` `u` `C-_` `C-/` | 撤消不需要的更改
`M-x` 恢复缓冲器 | 将缓冲区恢复到其原始内容
`M-x` revert-buffer | 将缓冲区恢复到其原始内容
`C-l` | 重绘垃圾屏幕
<!--rehype:className=shortcuts-->
@ -293,9 +293,9 @@ $ emacs
:- | :-
`M-.` | 查找标签(定义)
`C-u` `M-.` | 查找标签的下一个出现
`M-x` 访问标签表 | 指定一个新的标签文件
`M-x` 标签搜索 | 正则表达式搜索标签表中的所有文件
`M-x` 标签查询替换 | 对所有文件运行查询替换
`M-x` visit-tags-table | 指定一个新的标签文件
`M-x` tags-search | 正则表达式搜索标签表中的所有文件
`M-x` tags-query-replace | 对所有文件运行查询替换
`M-,` | 继续最后一个标签搜索或查询替换
<!--rehype:className=shortcuts-->
@ -494,9 +494,9 @@ Emacs 搜索
:- | :-
:- | :-
`M-$` | 检查当前单词的拼写
`M-x` ispell 地区 | 检查区域内所有单词的拼写
`M-x` ispell 缓冲区 | 检查整个缓冲区的拼写
`M-x` flyspell 模式 | 切换即时拼写检查
`M-x` ispell-region | 检查区域内所有单词的拼写
`M-x` ispell-buffer | 检查整个缓冲区的拼写
`M-x` flyspell-mode | 切换即时拼写检查
<!--rehype:className=shortcuts-->
### 编写命令

View File

@ -3,8 +3,109 @@ Emoji 备忘清单
有些表情符号代码不太容易记住,所以这里有一个小备忘单。
入门
----------
分类
----
### 笑脸
<!--rehype:wrap-style=font-size: 27px;-->
😀 😃 😄 😁 😆 😅 😂 🤣 🥲 🥹 ☺️
😊 😇 🙂 🙃 😉 😌 😍 🥰 😘 😗 😙
😚 😋 😛 😝 😜 🤪 🤨 🧐 🤓 😎 🥸
🤩 🥳 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣
😖 😫 😩 🥺 😢 😭 😮‍💨 😤 😠 😡 🤬
🤯 😳 🥵 🥶 😱 😨 😰 😥 😓 🫣 🤗
🫡 🤔 🫢 🤭 🤫 🤥 😶 😶‍🌫️ 😐 😑 😬
🫨 🫠 🙄 😯 😦 😧 😮 😲 🥱 😴 🤤
😪 😵 😵‍💫 🫥 🤐 🥴 🤢 🤮 🤧 😷 🤒
🤕 🤑 🤠 😈 👿 👹 👺 🤡 💩 👻 💀
☠️ 👽 👾 🤖 🎃
😺 😸 😹 😻 😼 😽 🙀 😿 😾
### 人与幻想
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-2-->
👶 👧 🧒 👦 👩 🧑 👨 👩‍🦱 🧑‍🦱 👨‍🦱 👩‍🦰 🧑‍🦰 👨‍🦰 👱‍♀️ 👱 👱‍♂️ 👩‍🦳 🧑‍🦳 👨‍🦳 👩‍🦲 🧑‍🦲 👨‍🦲 🧔‍♀️ 🧔 🧔‍♂️ 👵 🧓 👴 👲 👳‍♀️ 👳 👳‍♂️ 🧕 👮‍♀️ 👮 👮‍♂️ 👷‍♀️ 👷 👷‍♂️ 💂‍♀️ 💂 💂‍♂️ 🕵️‍♀️ 🕵️ 🕵️‍♂️ 👩‍⚕️ 🧑‍⚕️ 👨‍⚕️ 👩‍🌾 🧑‍🌾 👨‍🌾 👩‍🍳 🧑‍🍳 👨‍🍳 👩‍🎓 🧑‍🎓 👨‍🎓 👩‍🎤 🧑‍🎤 👨‍🎤 👩‍🏫 🧑‍🏫 👨‍🏫 👩‍🏭 🧑‍🏭 👨‍🏭 👩‍💻 🧑‍💻 👨‍💻 👩‍💼 🧑‍💼 👨‍💼 👩‍🔧 🧑‍🔧 👨‍🔧 👩‍🔬 🧑‍🔬 👨‍🔬 👩‍🎨 🧑‍🎨 👨‍🎨 👩‍🚒 🧑‍🚒 👨‍🚒 👩‍✈️ 🧑‍✈️ 👨‍✈️ 👩‍🚀 🧑‍🚀 👨‍🚀 👩‍⚖️ 🧑‍⚖️ 👨‍⚖️ 👰‍♀️ 👰 👰‍♂️ 🤵‍♀️ 🤵 🤵‍♂️ 👸 🫅 🤴 🥷 🦸‍♀️ 🦸 🦸‍♂️ 🦹‍♀️ 🦹 🦹‍♂️ 🤶 🧑‍🎄 🎅 🧙‍♀️ 🧙 🧙‍♂️ 🧝‍♀️ 🧝 🧝‍♂️ 🧛‍♀️ 🧛 🧛‍♂️ 🧟‍♀️ 🧟 🧟‍♂️ 🧞‍♀️ 🧞 🧞‍♂️ 🧜‍♀️ 🧜 🧜‍♂️ 🧚‍♀️ 🧚 🧚‍♂️ 🧌 👼 🤰 🫄 🫃 🤱 👩‍🍼 🧑‍🍼 👨‍🍼 🙇‍♀️ 🙇 🙇‍♂️ 💁‍♀️ 💁 💁‍♂️ 🙅‍♀️ 🙅 🙅‍♂️ 🙆‍♀️ 🙆 🙆‍♂️ 🙋‍♀️ 🙋 🙋‍♂️ 🧏‍♀️ 🧏 🧏‍♂️ 🤦‍♀️ 🤦 🤦‍♂️ 🤷‍♀️ 🤷 🤷‍♂️ 🙎‍♀️ 🙎 🙎‍♂️ 🙍‍♀️ 🙍 🙍‍♂️ 💇‍♀️ 💇 💇‍♂️ 💆‍♀️ 💆 💆‍♂️ 🧖‍♀️ 🧖 🧖‍♂️ 💅 🤳 💃 🕺 👯‍♀️ 👯 👯‍♂️ 🕴 👩‍🦽 🧑‍🦽 👨‍🦽 👩‍🦼 🧑‍🦼 👨‍🦼 🚶‍♀️ 🚶 🚶‍♂️ 👩‍🦯 🧑‍🦯 👨‍🦯 🧎‍♀️ 🧎 🧎‍♂️ 🏃‍♀️ 🏃 🏃‍♂️ 🧍‍♀️ 🧍 🧍‍♂️ 👭 🧑‍🤝‍🧑 👬 👫 👩‍❤️‍👩 💑 👨‍❤️‍👨 👩‍❤️‍👨 👩‍❤️‍💋‍👩 💏 👨‍❤️‍💋‍👨 👩‍❤️‍💋‍👨 👪 👨‍👩‍👦 👨‍👩‍👧 👨‍👩‍👧‍👦 👨‍👩‍👦‍👦 👨‍👩‍👧‍👧 👨‍👨‍👦 👨‍👨‍👧 👨‍👨‍👧‍👦 👨‍👨‍👦‍👦 👨‍👨‍👧‍👧 👩‍👩‍👦 👩‍👩‍👧 👩‍👩‍👧‍👦 👩‍👩‍👦‍👦 👩‍👩‍👧‍👧 👨‍👦 👨‍👦‍👦 👨‍👧 👨‍👧‍👦 👨‍👧‍👧 👩‍👦 👩‍👦‍👦 👩‍👧 👩‍👧‍👦 👩‍👧‍👧 🗣 👤 👥 🫂
### 手势和身体部位
<!--rehype:wrap-style=font-size: 32px;-->
👋 🤚 🖐 ✋ 🖖 👌 🤌 🤏 ✌️ 🤞 🫰 🤟 🤘 🤙 🫵 🫱 🫲 🫸 🫷 🫳 🫴 👈 👉 👆 🖕 👇 ☝️ 👍 👎 ✊ 👊 🤛 🤜 👏 🫶 🙌 👐 🤲 🤝 🙏 ✍️ 💅 🤳 💪 🦾 🦵 🦿 🦶 👣 👂 🦻 👃 🫀 🫁 🧠 🦷 🦴 👀 👁 👅 👄 🫦 💋 🩸
### 苍白的表情符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-2 row-span-2-->
👋🏻 🤚🏻 🖐🏻 ✋🏻 🖖🏻 👌🏻 🤌🏻 🤏🏻 ✌🏻 🤞🏻 🫰🏻 🤟🏻 🤘🏻 🤙🏻 🫵🏻 🫱🏻 🫲🏻 🫸🏻 🫷🏻 🫳🏻 🫴🏻 👈🏻 👉🏻 👆🏻 🖕🏻 👇🏻 ☝🏻 👍🏻 👎🏻 ✊🏻 👊🏻 🤛🏻 🤜🏻 👏🏻 🫶🏻 🙌🏻 👐🏻 🤲🏻 🙏🏻 ✍🏻 💅🏻 🤳🏻 💪🏻 🦵🏻 🦶🏻 👂🏻 🦻🏻 👃🏻
👶🏻 👧🏻 🧒🏻 👦🏻 👩🏻 🧑🏻 👨🏻 👩🏻‍🦱 🧑🏻‍🦱 👨🏻‍🦱 👩🏻‍🦰 🧑🏻‍🦰 👨🏻‍🦰 👱🏻‍♀️ 👱🏻 👱🏻‍♂️ 👩🏻‍🦳 🧑🏻‍🦳 👨🏻‍🦳 👩🏻‍🦲 🧑🏻‍🦲 👨🏻‍🦲 🧔🏻‍♀️ 🧔🏻 🧔🏻‍♂️ 👵🏻 🧓🏻 👴🏻 👲🏻 👳🏻‍♀️ 👳🏻 👳🏻‍♂️ 🧕🏻 👮🏻‍♀️ 👮🏻 👮🏻‍♂️ 👷🏻‍♀️ 👷🏻 👷🏻‍♂️ 💂🏻‍♀️ 💂🏻 💂🏻‍♂️ 🕵🏻‍♀️ 🕵🏻 🕵🏻‍♂️ 👩🏻‍⚕️ 🧑🏻‍⚕️ 👨🏻‍⚕️ 👩🏻‍🌾 🧑🏻‍🌾 👨🏻‍🌾 👩🏻‍🍳 🧑🏻‍🍳 👨🏻‍🍳 👩🏻‍🎓 🧑🏻‍🎓 👨🏻‍🎓 👩🏻‍🎤 🧑🏻‍🎤 👨🏻‍🎤 👩🏻‍🏫 🧑🏻‍🏫 👨🏻‍🏫 👩🏻‍🏭 🧑🏻‍🏭 👨🏻‍🏭 👩🏻‍💻 🧑🏻‍💻 👨🏻‍💻 👩🏻‍💼 🧑🏻‍💼 👨🏻‍💼 👩🏻‍🔧 🧑🏻‍🔧 👨🏻‍🔧 👩🏻‍🔬 🧑🏻‍🔬 👨🏻‍🔬 👩🏻‍🎨 🧑🏻‍🎨 👨🏻‍🎨 👩🏻‍🚒 🧑🏻‍🚒 👨🏻‍🚒 👩🏻‍✈️ 🧑🏻‍✈️ 👨🏻‍✈️ 👩🏻‍🚀 🧑🏻‍🚀 👨🏻‍🚀 👩🏻‍⚖️ 🧑🏻‍⚖️ 👨🏻‍⚖️ 👰🏻‍♀️ 👰🏻 👰🏻‍♂️ 🤵🏻‍♀️ 🤵🏻 🤵🏻‍♂️ 👸🏻 🫅🏻 🤴🏻 🥷🏻 🦸🏻‍♀️ 🦸🏻 🦸🏻‍♂️ 🦹🏻‍♀️ 🦹🏻 🦹🏻‍♂️ 🤶🏻 🧑🏻‍🎄 🎅🏻 🧙🏻‍♀️ 🧙🏻 🧙🏻‍♂️ 🧝🏻‍♀️ 🧝🏻 🧝🏻‍♂️ 🧛🏻‍♀️ 🧛🏻 🧛🏻‍♂️ 🧜🏻‍♀️ 🧜🏻 🧜🏻‍♂️ 🧚🏻‍♀️ 🧚🏻 🧚🏻‍♂️ 👼🏻 🤰🏻 🫄🏻 🫃🏻 🤱🏻 👩🏻‍🍼 🧑🏻‍🍼 👨🏻‍🍼 🙇🏻‍♀️ 🙇🏻 🙇🏻‍♂️ 💁🏻‍♀️ 💁🏻 💁🏻‍♂️ 🙅🏻‍♀️ 🙅🏻 🙅🏻‍♂️ 🙆🏻‍♀️ 🙆🏻 🙆🏻‍♂️ 🙋🏻‍♀️ 🙋🏻 🙋🏻‍♂️ 🧏🏻‍♀️ 🧏🏻 🧏🏻‍♂️ 🤦🏻‍♀️ 🤦🏻 🤦🏻‍♂️ 🤷🏻‍♀️ 🤷🏻 🤷🏻‍♂️ 🙎🏻‍♀️ 🙎🏻 🙎🏻‍♂️ 🙍🏻‍♀️ 🙍🏻 🙍🏻‍♂️ 💇🏻‍♀️ 💇🏻 💇🏻‍♂️ 💆🏻‍♀️ 💆🏻 💆🏻‍♂️ 🧖🏻‍♀️ 🧖🏻 🧖🏻‍♂️ 💃🏻 🕺🏻 🕴🏻 👩🏻‍🦽 🧑🏻‍🦽 👨🏻‍🦽 👩🏻‍🦼 🧑🏻‍🦼 👨🏻‍🦼 🚶🏻‍♀️ 🚶🏻 🚶🏻‍♂️ 👩🏻‍🦯 🧑🏻‍🦯 👨🏻‍🦯 🧎🏻‍♀️ 🧎🏻 🧎🏻‍♂️ 🏃🏻‍♀️ 🏃🏻 🏃🏻‍♂️ 🧍🏻‍♀️ 🧍🏻 🧍🏻‍♂️ 👭🏻 🧑🏻‍🤝‍🧑🏻 👬🏻 👫🏻 🧗🏻‍♀️ 🧗🏻 🧗🏻‍♂️ 🏇🏻 🏂🏻 🏌🏻‍♀️ 🏌🏻 🏌🏻‍♂️ 🏄🏻‍♀️ 🏄🏻 🏄🏻‍♂️ 🚣🏻‍♀️ 🚣🏻 🚣🏻‍♂️ 🏊🏻‍♀️ 🏊🏻 🏊🏻‍♂️ ⛹🏻‍♀️ ⛹🏻 ⛹🏻‍♂️ 🏋🏻‍♀️ 🏋🏻 🏋🏻‍♂️ 🚴🏻‍♀️ 🚴🏻 🚴🏻‍♂️ 🚵🏻‍♀️ 🚵🏻 🚵🏻‍♂️ 🤸🏻‍♀️ 🤸🏻 🤸🏻‍♂️ 🤽🏻‍♀️ 🤽🏻 🤽🏻‍♂️ 🤾🏻‍♀️ 🤾🏻 🤾🏻‍♂️ 🤹🏻‍♀️ 🤹🏻 🤹🏻‍♂️ 🧘🏻‍♀️ 🧘🏻 🧘🏻‍♂️ 🛀🏻 🛌🏻
### 服装和配饰
<!--rehype:wrap-style=font-size: 26px;-->
🧳 🌂 ☂️ 🧵 🪡 🪢 🪭 🧶 👓 🕶 🥽
🥼 🦺 👔 👕 👖 🧣 🧤 🧥 🧦 👗 👘 🥻 🩴 🩱 🩲 🩳 👙 👚 👛 👜 👝 🎒 👞 👟 🥾 🥿 👠 👡 🩰 👢 👑 👒 🎩 🎓 🧢 ⛑ 🪖 💄 💍 💼
### 奶油白色表情符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
👋🏼 🤚🏼 🖐🏼 ✋🏼 🖖🏼 👌🏼 🤌🏼 🤏🏼 ✌🏼 🤞🏼 🫰🏼 🤟🏼 🤘🏼 🤙🏼 🫵🏼 🫱🏼 🫲🏼 🫸🏼 🫷🏼 🫳🏼 🫴🏼 👈🏼 👉🏼 👆🏼 🖕🏼 👇🏼 ☝🏼 👍🏼 👎🏼 ✊🏼 👊🏼 🤛🏼 🤜🏼 👏🏼 🫶🏼 🙌🏼 👐🏼 🤲🏼 🙏🏼 ✍🏼 💅🏼 🤳🏼 💪🏼 🦵🏼 🦶🏼 👂🏼 🦻🏼 👃🏼 👶🏼 👧🏼 🧒🏼 👦🏼 👩🏼 🧑🏼 👨🏼 👩🏼‍🦱 🧑🏼‍🦱 👨🏼‍🦱 👩🏼‍🦰 🧑🏼‍🦰 👨🏼‍🦰 👱🏼‍♀️ 👱🏼 👱🏼‍♂️ 👩🏼‍🦳 🧑🏼‍🦳 👨🏼‍🦳 👩🏼‍🦲 🧑🏼‍🦲 👨🏼‍🦲 🧔🏼‍♀️ 🧔🏼 🧔🏼‍♂️ 👵🏼 🧓🏼 👴🏼 👲🏼 👳🏼‍♀️ 👳🏼 👳🏼‍♂️ 🧕🏼 👮🏼‍♀️ 👮🏼 👮🏼‍♂️ 👷🏼‍♀️ 👷🏼 👷🏼‍♂️ 💂🏼‍♀️ 💂🏼 💂🏼‍♂️ 🕵🏼‍♀️ 🕵🏼 🕵🏼‍♂️ 👩🏼‍⚕️ 🧑🏼‍⚕️ 👨🏼‍⚕️ 👩🏼‍🌾 🧑🏼‍🌾 👨🏼‍🌾 👩🏼‍🍳 🧑🏼‍🍳 👨🏼‍🍳 👩🏼‍🎓 🧑🏼‍🎓 👨🏼‍🎓 👩🏼‍🎤 🧑🏼‍🎤 👨🏼‍🎤 👩🏼‍🏫 🧑🏼‍🏫 👨🏼‍🏫 👩🏼‍🏭 🧑🏼‍🏭 👨🏼‍🏭 👩🏼‍💻 🧑🏼‍💻 👨🏼‍💻 👩🏼‍💼 🧑🏼‍💼 👨🏼‍💼 👩🏼‍🔧 🧑🏼‍🔧 👨🏼‍🔧 👩🏼‍🔬 🧑🏼‍🔬 👨🏼‍🔬 👩🏼‍🎨 🧑🏼‍🎨 👨🏼‍🎨 👩🏼‍🚒 🧑🏼‍🚒 👨🏼‍🚒 👩🏼‍✈️ 🧑🏼‍✈️ 👨🏼‍✈️ 👩🏼‍🚀 🧑🏼‍🚀 👨🏼‍🚀 👩🏼‍⚖️ 🧑🏼‍⚖️ 👨🏼‍⚖️ 👰🏼‍♀️ 👰🏼 👰🏼‍♂️ 🤵🏼‍♀️ 🤵🏼 🤵🏼‍♂️ 👸🏼 🫅🏼 🤴🏼 🥷🏼 🦸🏼‍♀️ 🦸🏼 🦸🏼‍♂️ 🦹🏼‍♀️ 🦹🏼 🦹🏼‍♂️ 🤶🏼 🧑🏼‍🎄 🎅🏼 🧙🏼‍♀️ 🧙🏼 🧙🏼‍♂️ 🧝🏼‍♀️ 🧝🏼 🧝🏼‍♂️ 🧛🏼‍♀️ 🧛🏼 🧛🏼‍♂️ 🧜🏼‍♀️ 🧜🏼 🧜🏼‍♂️ 🧚🏼‍♀️ 🧚🏼 🧚🏼‍♂️ 👼🏼 🤰🏼 🫄🏼 🫃🏼 🤱🏼 👩🏼‍🍼 🧑🏼‍🍼 👨🏼‍🍼 🙇🏼‍♀️ 🙇🏼 🙇🏼‍♂️ 💁🏼‍♀️ 💁🏼 💁🏼‍♂️ 🙅🏼‍♀️ 🙅🏼 🙅🏼‍♂️ 🙆🏼‍♀️ 🙆🏼 🙆🏼‍♂️ 🙋🏼‍♀️ 🙋🏼 🙋🏼‍♂️ 🧏🏼‍♀️ 🧏🏼 🧏🏼‍♂️ 🤦🏼‍♀️ 🤦🏼 🤦🏼‍♂️ 🤷🏼‍♀️ 🤷🏼 🤷🏼‍♂️ 🙎🏼‍♀️ 🙎🏼 🙎🏼‍♂️ 🙍🏼‍♀️ 🙍🏼 🙍🏼‍♂️ 💇🏼‍♀️ 💇🏼 💇🏼‍♂️ 💆🏼‍♀️ 💆🏼 💆🏼‍♂️ 🧖🏼‍♀️ 🧖🏼 🧖🏼‍♂️ 💃🏼 🕺🏼 🕴🏼 👩🏼‍🦽 🧑🏼‍🦽 👨🏼‍🦽 👩🏼‍🦼 🧑🏼‍🦼 👨🏼‍🦼 🚶🏼‍♀️ 🚶🏼 🚶🏼‍♂️ 👩🏼‍🦯 🧑🏼‍🦯 👨🏼‍🦯 🧎🏼‍♀️ 🧎🏼 🧎🏼‍♂️ 🏃🏼‍♀️ 🏃🏼 🏃🏼‍♂️ 🧍🏼‍♀️ 🧍🏼 🧍🏼‍♂️ 👭🏼 🧑🏼‍🤝‍🧑🏼 👬🏼 👫🏼 🧗🏼‍♀️ 🧗🏼 🧗🏼‍♂️ 🏇🏼 🏂🏼 🏌🏼‍♀️ 🏌🏼 🏌🏼‍♂️ 🏄🏼‍♀️ 🏄🏼 🏄🏼‍♂️ 🚣🏼‍♀️ 🚣🏼 🚣🏼‍♂️ 🏊🏼‍♀️ 🏊🏼 🏊🏼‍♂️ ⛹🏼‍♀️ ⛹🏼 ⛹🏼‍♂️ 🏋🏼‍♀️ 🏋🏼 🏋🏼‍♂️ 🚴🏼‍♀️ 🚴🏼 🚴🏼‍♂️ 🚵🏼‍♀️ 🚵🏼 🚵🏼‍♂️ 🤸🏼‍♀️ 🤸🏼 🤸🏼‍♂️ 🤽🏼‍♀️ 🤽🏼 🤽🏼‍♂️ 🤾🏼‍♀️ 🤾🏼 🤾🏼‍♂️ 🤹🏼‍♀️ 🤹🏼 🤹🏼‍♂️ 🧘🏼‍♀️ 🧘🏼 🧘🏼‍♂️ 🛀🏼 🛌🏼
### 棕色表情符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
👋🏽 🤚🏽 🖐🏽 ✋🏽 🖖🏽 👌🏽 🤌🏽 🤏🏽 ✌🏽 🤞🏽 🫰🏽 🤟🏽 🤘🏽 🤙🏽 🫵🏽 🫱🏽 🫲🏽 🫸🏽 🫷🏽 🫳🏽 🫴🏽 👈🏽 👉🏽 👆🏽 🖕🏽 👇🏽 ☝🏽 👍🏽 👎🏽 ✊🏽 👊🏽 🤛🏽 🤜🏽 👏🏽 🫶🏽 🙌🏽 👐🏽 🤲🏽 🙏🏽 ✍🏽 💅🏽 🤳🏽 💪🏽 🦵🏽 🦶🏽 👂🏽 🦻🏽 👃🏽 👶🏽 👧🏽 🧒🏽 👦🏽 👩🏽 🧑🏽 👨🏽 👩🏽‍🦱 🧑🏽‍🦱 👨🏽‍🦱 👩🏽‍🦰 🧑🏽‍🦰 👨🏽‍🦰 👱🏽‍♀️ 👱🏽 👱🏽‍♂️ 👩🏽‍🦳 🧑🏽‍🦳 👨🏽‍🦳 👩🏽‍🦲 🧑🏽‍🦲 👨🏽‍🦲 🧔🏽‍♀️ 🧔🏽 🧔🏽‍♂️ 👵🏽 🧓🏽 👴🏽 👲🏽 👳🏽‍♀️ 👳🏽 👳🏽‍♂️ 🧕🏽 👮🏽‍♀️ 👮🏽 👮🏽‍♂️ 👷🏽‍♀️ 👷🏽 👷🏽‍♂️ 💂🏽‍♀️ 💂🏽 💂🏽‍♂️ 🕵🏽‍♀️ 🕵🏽 🕵🏽‍♂️ 👩🏽‍⚕️ 🧑🏽‍⚕️ 👨🏽‍⚕️ 👩🏽‍🌾 🧑🏽‍🌾 👨🏽‍🌾 👩🏽‍🍳 🧑🏽‍🍳 👨🏽‍🍳 👩🏽‍🎓 🧑🏽‍🎓 👨🏽‍🎓 👩🏽‍🎤 🧑🏽‍🎤 👨🏽‍🎤 👩🏽‍🏫 🧑🏽‍🏫 👨🏽‍🏫 👩🏽‍🏭 🧑🏽‍🏭 👨🏽‍🏭 👩🏽‍💻 🧑🏽‍💻 👨🏽‍💻 👩🏽‍💼 🧑🏽‍💼 👨🏽‍💼 👩🏽‍🔧 🧑🏽‍🔧 👨🏽‍🔧 👩🏽‍🔬 🧑🏽‍🔬 👨🏽‍🔬 👩🏽‍🎨 🧑🏽‍🎨 👨🏽‍🎨 👩🏽‍🚒 🧑🏽‍🚒 👨🏽‍🚒 👩🏽‍✈️ 🧑🏽‍✈️ 👨🏽‍✈️ 👩🏽‍🚀 🧑🏽‍🚀 👨🏽‍🚀 👩🏽‍⚖️ 🧑🏽‍⚖️ 👨🏽‍⚖️ 👰🏽‍♀️ 👰🏽 👰🏽‍♂️ 🤵🏽‍♀️ 🤵🏽 🤵🏽‍♂️ 👸🏽 🫅🏽 🤴🏽 🥷🏽 🦸🏽‍♀️ 🦸🏽 🦸🏽‍♂️ 🦹🏽‍♀️ 🦹🏽 🦹🏽‍♂️ 🤶🏽 🧑🏽‍🎄 🎅🏽 🧙🏽‍♀️ 🧙🏽 🧙🏽‍♂️ 🧝🏽‍♀️ 🧝🏽 🧝🏽‍♂️ 🧛🏽‍♀️ 🧛🏽 🧛🏽‍♂️ 🧜🏽‍♀️ 🧜🏽 🧜🏽‍♂️ 🧚🏽‍♀️ 🧚🏽 🧚🏽‍♂️ 👼🏽 🤰🏽 🫄🏽 🫃🏽 🤱🏽 👩🏽‍🍼 🧑🏽‍🍼 👨🏽‍🍼 🙇🏽‍♀️ 🙇🏽 🙇🏽‍♂️ 💁🏽‍♀️ 💁🏽 💁🏽‍♂️ 🙅🏽‍♀️ 🙅🏽 🙅🏽‍♂️ 🙆🏽‍♀️ 🙆🏽 🙆🏽‍♂️ 🙋🏽‍♀️ 🙋🏽 🙋🏽‍♂️ 🧏🏽‍♀️ 🧏🏽 🧏🏽‍♂️ 🤦🏽‍♀️ 🤦🏽 🤦🏽‍♂️ 🤷🏽‍♀️ 🤷🏽 🤷🏽‍♂️ 🙎🏽‍♀️ 🙎🏽 🙎🏽‍♂️ 🙍🏽‍♀️ 🙍🏽 🙍🏽‍♂️ 💇🏽‍♀️ 💇🏽 💇🏽‍♂️ 💆🏽‍♀️ 💆🏽 💆🏽‍♂️ 🧖🏽‍♀️ 🧖🏽 🧖🏽‍♂️ 💃🏽 🕺🏽 🕴🏽 👩🏽‍🦽 🧑🏽‍🦽 👨🏽‍🦽 👩🏽‍🦼 🧑🏽‍🦼 👨🏽‍🦼 🚶🏽‍♀️ 🚶🏽 🚶🏽‍♂️ 👩🏽‍🦯 🧑🏽‍🦯 👨🏽‍🦯 🧎🏽‍♀️ 🧎🏽 🧎🏽‍♂️ 🏃🏽‍♀️ 🏃🏽 🏃🏽‍♂️ 🧍🏽‍♀️ 🧍🏽 🧍🏽‍♂️ 👭🏽 🧑🏽‍🤝‍🧑🏽 👬🏽 👫🏽 🧗🏽‍♀️ 🧗🏽 🧗🏽‍♂️ 🏇🏽 🏂🏽 🏌🏽‍♀️ 🏌🏽 🏌🏽‍♂️ 🏄🏽‍♀️ 🏄🏽 🏄🏽‍♂️ 🚣🏽‍♀️ 🚣🏽 🚣🏽‍♂️ 🏊🏽‍♀️ 🏊🏽 🏊🏽‍♂️ ⛹🏽‍♀️ ⛹🏽 ⛹🏽‍♂️ 🏋🏽‍♀️ 🏋🏽 🏋🏽‍♂️ 🚴🏽‍♀️ 🚴🏽 🚴🏽‍♂️ 🚵🏽‍♀️ 🚵🏽 🚵🏽‍♂️ 🤸🏽‍♀️ 🤸🏽 🤸🏽‍♂️ 🤽🏽‍♀️ 🤽🏽 🤽🏽‍♂️ 🤾🏽‍♀️ 🤾🏽 🤾🏽‍♂️ 🤹🏽‍♀️ 🤹🏽 🤹🏽‍♂️ 🧘🏽‍♀️ 🧘🏽 🧘🏽‍♂️ 🛀🏽 🛌🏽
### 深棕色表情符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
👋🏾 🤚🏾 🖐🏾 ✋🏾 🖖🏾 👌🏾 🤌🏾 🤏🏾 ✌🏾 🤞🏾 🫰🏾 🤟🏾 🤘🏾 🤙🏾 🫵🏾 🫱🏾 🫲🏾 🫸🏾 🫷🏾 🫳🏾 🫴🏾 👈🏾 👉🏾 👆🏾 🖕🏾 👇🏾 ☝🏾 👍🏾 👎🏾 ✊🏾 👊🏾 🤛🏾 🤜🏾 👏🏾 🫶🏾 🙌🏾 👐🏾 🤲🏾 🙏🏾 ✍🏾 💅🏾 🤳🏾 💪🏾 🦵🏾 🦶🏾 👂🏾 🦻🏾 👃🏾 👶🏾 👧🏾 🧒🏾 👦🏾 👩🏾 🧑🏾 👨🏾 👩🏾‍🦱 🧑🏾‍🦱 👨🏾‍🦱 👩🏾‍🦰 🧑🏾‍🦰 👨🏾‍🦰 👱🏾‍♀️ 👱🏾 👱🏾‍♂️ 👩🏾‍🦳 🧑🏾‍🦳 👨🏾‍🦳 👩🏾‍🦲 🧑🏾‍🦲 👨🏾‍🦲 🧔🏾‍♀️ 🧔🏾 🧔🏾‍♂️ 👵🏾 🧓🏾 👴🏾 👲🏾 👳🏾‍♀️ 👳🏾 👳🏾‍♂️ 🧕🏾 👮🏾‍♀️ 👮🏾 👮🏾‍♂️ 👷🏾‍♀️ 👷🏾 👷🏾‍♂️ 💂🏾‍♀️ 💂🏾 💂🏾‍♂️ 🕵🏾‍♀️ 🕵🏾 🕵🏾‍♂️ 👩🏾‍⚕️ 🧑🏾‍⚕️ 👨🏾‍⚕️ 👩🏾‍🌾 🧑🏾‍🌾 👨🏾‍🌾 👩🏾‍🍳 🧑🏾‍🍳 👨🏾‍🍳 👩🏾‍🎓 🧑🏾‍🎓 👨🏾‍🎓 👩🏾‍🎤 🧑🏾‍🎤 👨🏾‍🎤 👩🏾‍🏫 🧑🏾‍🏫 👨🏾‍🏫 👩🏾‍🏭 🧑🏾‍🏭 👨🏾‍🏭 👩🏾‍💻 🧑🏾‍💻 👨🏾‍💻 👩🏾‍💼 🧑🏾‍💼 👨🏾‍💼 👩🏾‍🔧 🧑🏾‍🔧 👨🏾‍🔧 👩🏾‍🔬 🧑🏾‍🔬 👨🏾‍🔬 👩🏾‍🎨 🧑🏾‍🎨 👨🏾‍🎨 👩🏾‍🚒 🧑🏾‍🚒 👨🏾‍🚒 👩🏾‍✈️ 🧑🏾‍✈️ 👨🏾‍✈️ 👩🏾‍🚀 🧑🏾‍🚀 👨🏾‍🚀 👩🏾‍⚖️ 🧑🏾‍⚖️ 👨🏾‍⚖️ 👰🏾‍♀️ 👰🏾 👰🏾‍♂️ 🤵🏾‍♀️ 🤵🏾 🤵🏾‍♂️ 👸🏾 🫅🏾 🤴🏾 🥷🏾 🦸🏾‍♀️ 🦸🏾 🦸🏾‍♂️ 🦹🏾‍♀️ 🦹🏾 🦹🏾‍♂️ 🤶🏾 🧑🏾‍🎄 🎅🏾 🧙🏾‍♀️ 🧙🏾 🧙🏾‍♂️ 🧝🏾‍♀️ 🧝🏾 🧝🏾‍♂️ 🧛🏾‍♀️ 🧛🏾 🧛🏾‍♂️ 🧜🏾‍♀️ 🧜🏾 🧜🏾‍♂️ 🧚🏾‍♀️ 🧚🏾 🧚🏾‍♂️ 👼🏾 🤰🏾 🫄🏾 🫃🏾 🤱🏾 👩🏾‍🍼 🧑🏾‍🍼 👨🏾‍🍼 🙇🏾‍♀️ 🙇🏾 🙇🏾‍♂️ 💁🏾‍♀️ 💁🏾 💁🏾‍♂️ 🙅🏾‍♀️ 🙅🏾 🙅🏾‍♂️ 🙆🏾‍♀️ 🙆🏾 🙆🏾‍♂️ 🙋🏾‍♀️ 🙋🏾 🙋🏾‍♂️ 🧏🏾‍♀️ 🧏🏾 🧏🏾‍♂️ 🤦🏾‍♀️ 🤦🏾 🤦🏾‍♂️ 🤷🏾‍♀️ 🤷🏾 🤷🏾‍♂️ 🙎🏾‍♀️ 🙎🏾 🙎🏾‍♂️ 🙍🏾‍♀️ 🙍🏾 🙍🏾‍♂️ 💇🏾‍♀️ 💇🏾 💇🏾‍♂️ 💆🏾‍♀️ 💆🏾 💆🏾‍♂️ 🧖🏾‍♀️ 🧖🏾 🧖🏾‍♂️ 💃🏾 🕺🏾 🕴🏿 👩🏾‍🦽 🧑🏾‍🦽 👨🏾‍🦽 👩🏾‍🦼 🧑🏾‍🦼 👨🏾‍🦼 🚶🏾‍♀️ 🚶🏾 🚶🏾‍♂️ 👩🏾‍🦯 🧑🏾‍🦯 👨🏾‍🦯 🧎🏾‍♀️ 🧎🏾 🧎🏾‍♂️ 🏃🏾‍♀️ 🏃🏾 🏃🏾‍♂️ 🧍🏾‍♀️ 🧍🏾 🧍🏾‍♂️ 👭🏾 🧑🏾‍🤝‍🧑🏾 👬🏾 👫🏾 🧗🏾‍♀️ 🧗🏾 🧗🏾‍♂️ 🏇🏾 🏂🏾 🏌🏾‍♀️ 🏌🏾 🏌🏾‍♂️ 🏄🏾‍♀️ 🏄🏾 🏄🏾‍♂️ 🚣🏾‍♀️ 🚣🏾 🚣🏾‍♂️ 🏊🏾‍♀️ 🏊🏾 🏊🏾‍♂️ ⛹🏾‍♀️ ⛹🏾 ⛹🏾‍♂️ 🏋🏾‍♀️ 🏋🏾 🏋🏾‍♂️ 🚴🏾‍♀️ 🚴🏾 🚴🏾‍♂️ 🚵🏾‍♀️ 🚵🏾 🚵🏾‍♂️ 🤸🏾‍♀️ 🤸🏾 🤸🏾‍♂️ 🤽🏾‍♀️ 🤽🏾 🤽🏾‍♂️ 🤾🏾‍♀️ 🤾🏾 🤾🏾‍♂️ 🤹🏾‍♀️ 🤹🏾 🤹🏾‍♂️ 🧘🏾‍♀️ 🧘🏾 🧘🏾‍♂️ 🛀🏾 🛌🏾
### 黑色表情符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
👋🏿 🤚🏿 🖐🏿 ✋🏿 🖖🏿 👌🏿 🤌🏿 🤏🏿 ✌🏿 🤞🏿 🫰🏿 🤟🏿 🤘🏿 🤙🏿 🫵🏿 🫱🏿 🫲🏿 🫸🏿 🫷🏿 🫳🏿 🫴🏿 👈🏿 👉🏿 👆🏿 🖕🏿 👇🏿 ☝🏿 👍🏿 👎🏿 ✊🏿 👊🏿 🤛🏿 🤜🏿 👏🏿 🫶🏿 🙌🏿 👐🏿 🤲🏿 🙏🏿 ✍🏿 💅🏿 🤳🏿 💪🏿 🦵🏿 🦶🏿 👂🏿 🦻🏿 👃🏿 👶🏿 👧🏿 🧒🏿 👦🏿 👩🏿 🧑🏿 👨🏿 👩🏿‍🦱 🧑🏿‍🦱 👨🏿‍🦱 👩🏿‍🦰 🧑🏿‍🦰 👨🏿‍🦰 👱🏿‍♀️ 👱🏿 👱🏿‍♂️ 👩🏿‍🦳 🧑🏿‍🦳 👨🏿‍🦳 👩🏿‍🦲 🧑🏿‍🦲 👨🏿‍🦲 🧔🏿‍♀️ 🧔🏿 🧔🏿‍♂️ 👵🏿 🧓🏿 👴🏿 👲🏿 👳🏿‍♀️ 👳🏿 👳🏿‍♂️ 🧕🏿 👮🏿‍♀️ 👮🏿 👮🏿‍♂️ 👷🏿‍♀️ 👷🏿 👷🏿‍♂️ 💂🏿‍♀️ 💂🏿 💂🏿‍♂️ 🕵🏿‍♀️ 🕵🏿 🕵🏿‍♂️ 👩🏿‍⚕️ 🧑🏿‍⚕️ 👨🏿‍⚕️ 👩🏿‍🌾 🧑🏿‍🌾 👨🏿‍🌾 👩🏿‍🍳 🧑🏿‍🍳 👨🏿‍🍳 👩🏿‍🎓 🧑🏿‍🎓 👨🏿‍🎓 👩🏿‍🎤 🧑🏿‍🎤 👨🏿‍🎤 👩🏿‍🏫 🧑🏿‍🏫 👨🏿‍🏫 👩🏿‍🏭 🧑🏿‍🏭 👨🏿‍🏭 👩🏿‍💻 🧑🏿‍💻 👨🏿‍💻 👩🏿‍💼 🧑🏿‍💼 👨🏿‍💼 👩🏿‍🔧 🧑🏿‍🔧 👨🏿‍🔧 👩🏿‍🔬 🧑🏿‍🔬 👨🏿‍🔬 👩🏿‍🎨 🧑🏿‍🎨 👨🏿‍🎨 👩🏿‍🚒 🧑🏿‍🚒 👨🏿‍🚒 👩🏿‍✈️ 🧑🏿‍✈️ 👨🏿‍✈️ 👩🏿‍🚀 🧑🏿‍🚀 👨🏿‍🚀 👩🏿‍⚖️ 🧑🏿‍⚖️ 👨🏿‍⚖️ 👰🏿‍♀️ 👰🏿 👰🏿‍♂️ 🤵🏿‍♀️ 🤵🏿 🤵🏿‍♂️ 👸🏿 🫅🏿 🤴🏿 🥷🏿 🦸🏿‍♀️ 🦸🏿 🦸🏿‍♂️ 🦹🏿‍♀️ 🦹🏿 🦹🏿‍♂️ 🤶🏿 🧑🏿‍🎄 🎅🏿 🧙🏿‍♀️ 🧙🏿 🧙🏿‍♂️ 🧝🏿‍♀️ 🧝🏿 🧝🏿‍♂️ 🧛🏿‍♀️ 🧛🏿 🧛🏿‍♂️ 🧜🏿‍♀️ 🧜🏿 🧜🏿‍♂️ 🧚🏿‍♀️ 🧚🏿 🧚🏿‍♂️ 👼🏿 🤰🏿 🫄🏿 🫃🏿 🤱🏿 👩🏿‍🍼 🧑🏿‍🍼 👨🏿‍🍼 🙇🏿‍♀️ 🙇🏿 🙇🏿‍♂️ 💁🏿‍♀️ 💁🏿 💁🏿‍♂️ 🙅🏿‍♀️ 🙅🏿 🙅🏿‍♂️ 🙆🏿‍♀️ 🙆🏿 🙆🏿‍♂️ 🙋🏿‍♀️ 🙋🏿 🙋🏿‍♂️ 🧏🏿‍♀️ 🧏🏿 🧏🏿‍♂️ 🤦🏿‍♀️ 🤦🏿 🤦🏿‍♂️ 🤷🏿‍♀️ 🤷🏿 🤷🏿‍♂️ 🙎🏿‍♀️ 🙎🏿 🙎🏿‍♂️ 🙍🏿‍♀️ 🙍🏿 🙍🏿‍♂️ 💇🏿‍♀️ 💇🏿 💇🏿‍♂️ 💆🏿‍♀️ 💆🏿 💆🏿‍♂️ 🧖🏿‍♀️ 🧖🏿 🧖🏿‍♂️ 💃🏿 🕺🏿 🕴🏿 👩🏿‍🦽 🧑🏿‍🦽 👨🏿‍🦽 👩🏿‍🦼 🧑🏿‍🦼 👨🏿‍🦼 🚶🏿‍♀️ 🚶🏿 🚶🏿‍♂️ 👩🏿‍🦯 🧑🏿‍🦯 👨🏿‍🦯 🧎🏿‍♀️ 🧎🏿 🧎🏿‍♂️ 🏃🏿‍♀️ 🏃🏿 🏃🏿‍♂️ 🧍🏿‍♀️ 🧍🏿 🧍🏿‍♂️ 👭🏿 🧑🏿‍🤝‍🧑🏿 👬🏿 👫🏿 🧗🏿‍♀️ 🧗🏿 🧗🏿‍♂️ 🏇🏿 🏂🏿 🏌🏿‍♀️ 🏌🏿 🏌🏿‍♂️ 🏄🏿‍♀️ 🏄🏿 🏄🏿‍♂️ 🚣🏿‍♀️ 🚣🏿 🚣🏿‍♂️ 🏊🏿‍♀️ 🏊🏿 🏊🏿‍♂️ ⛹🏿‍♀️ ⛹🏿 ⛹🏿‍♂️ 🏋🏿‍♀️ 🏋🏿 🏋🏿‍♂️ 🚴🏿‍♀️ 🚴🏿 🚴🏿‍♂️ 🚵🏿‍♀️ 🚵🏿 🚵🏿‍♂️ 🤸🏿‍♀️ 🤸🏿 🤸🏿‍♂️ 🤽🏿‍♀️ 🤽🏿 🤽🏿‍♂️ 🤾🏿‍♀️ 🤾🏿 🤾🏿‍♂️ 🤹🏿‍♀️ 🤹🏿 🤹🏿‍♂️ 🧘🏿‍♀️ 🧘🏿 🧘🏿‍♂️ 🛀🏿 🛌🏿
### 动物与自然
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
🐶 🐱 🐭 🐹 🐰 🦊 🐻 🐼 🐻‍❄️ 🐨 🐯 🦁 🐮 🐷 🐽 🐸 🐵 🙈 🙉 🙊 🐒 🐔 🐧 🐦 🐦‍⬛ 🐤 🐣 🐥 🦆 🦅 🦉 🦇 🐺 🐗 🐴 🦄 🐝 🪱 🐛 🦋 🐌 🐞 🐜 🪰 🪲 🪳 🦟 🦗 🕷 🕸 🦂 🐢 🐍 🦎 🦖 🦕 🐙 🦑 🦐 🦞 🦀 🪼 🪸 🐡 🐠 🐟 🐬 🐳 🐋 🦈 🐊 🐅 🐆 🦓 🫏 🦍 🦧 🦣 🐘 🦛 🦏 🐪 🐫 🦒 🦘 🦬 🐃 🐂 🐄 🐎 🐖 🐏 🐑 🦙 🐐 🦌 🫎 🐕 🐩 🦮 🐕‍🦺 🐈 🐈‍⬛ 🪽 🪶 🐓 🦃 🦤 🦚 🦜 🦢 🪿 🦩 🕊 🐇 🦝 🦨 🦡 🦫 🦦 🦥 🐁 🐀 🐿 🦔 🐾 🐉 🐲 🌵 🎄 🌲 🌳 🌴 🪹 🪺 🪵 🌱 🌿 ☘️ 🍀 🎍 🪴 🎋 🍃 🍂 🍁 🍄 🐚 🪨 🌾 💐 🌷 🪷 🌹 🥀 🌺 🌸 🪻 🌼 🌻 🌞 🌝 🌛 🌜 🌚 🌕 🌖 🌗 🌘 🌑 🌒 🌓 🌔 🌙 🌎 🌍 🌏 🪐 💫 ⭐️ 🌟 ✨ ⚡️ ☄️ 💥 🔥 🌪 🌈 ☀️ 🌤 ⛅️ 🌥 ☁️ 🌦 🌧 ⛈ 🌩 🌨 ❄️ ☃️ ⛄️ 🌬 💨 💧 💦 🫧 ☔️ ☂️ 🌊 🌫
### 食物和饮料
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
🍏 🍎 🍐 🍊 🍋 🍌 🍉 🍇 🍓 🫐 🍈 🍒 🍑 🥭 🍍 🥥 🥝 🍅 🍆 🥑 🥦 🫛 🥬 🥒 🌶 🫑 🌽 🥕 🫒 🧄 🧅 🫚 🥔 🍠 🫘 🥐 🥯 🍞 🥖 🥨 🧀 🥚 🍳 🧈 🥞 🧇 🥓 🥩 🍗 🍖 🦴 🌭 🍔 🍟 🍕 🫓 🥪 🥙 🧆 🌮 🌯 🫔 🥗 🥘 🫕 🥫 🍝 🍜 🍲 🍛 🍣 🍱 🥟 🦪 🍤 🍙 🍚 🍘 🍥 🥠 🥮 🍢 🍡 🍧 🍨 🍦 🥧 🧁 🍰 🎂 🍮 🍭 🍬 🍫 🍿 🍩 🍪 🌰 🥜 🍯 🥛 🍼 🫖 ☕️ 🍵 🧃 🥤 🧋 🫙 🍶 🍺 🍻 🥂 🍷 🫗 🥃 🍸 🍹 🧉 🍾 🧊 🥄 🍴 🍽 🥣 🥡 🥢 🧂
### 活动和运动
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
⚽️ 🏀 🏈 ⚾️ 🥎 🎾 🏐 🏉 🥏 🎱 🪀 🏓 🏸 🏒 🏑 🥍 🏏 🪃 🥅 ⛳️ 🪁 🏹 🎣 🤿 🥊 🥋 🎽 🛹 🛼 🛷 ⛸ 🥌 🎿 ⛷ 🏂 🪂 🏋️‍♀️ 🏋️ 🏋️‍♂️ 🤼‍♀️ 🤼 🤼‍♂️ 🤸‍♀️ 🤸 🤸‍♂️ ⛹️‍♀️ ⛹️ ⛹️‍♂️ 🤺 🤾‍♀️ 🤾 🤾‍♂️ 🏌️‍♀️ 🏌️ 🏌️‍♂️ 🏇 🧘‍♀️ 🧘 🧘‍♂️ 🏄‍♀️ 🏄 🏄‍♂️ 🏊‍♀️ 🏊 🏊‍♂️ 🤽‍♀️ 🤽 🤽‍♂️ 🚣‍♀️ 🚣 🚣‍♂️ 🧗‍♀️ 🧗 🧗‍♂️ 🚵‍♀️ 🚵 🚵‍♂️ 🚴‍♀️ 🚴 🚴‍♂️ 🏆 🥇 🥈 🥉 🏅 🎖 🏵 🎗 🎫 🎟 🎪 🤹 🤹‍♂️ 🤹‍♀️ 🎭 🩰 🎨 🎬 🎤 🎧 🎼 🎹 🥁 🪘 🪇 🎷 🎺 🪗 🎸 🪕 🎻 🪈 🎲 ♟ 🎯 🎳 🎮 🎰 🧩
### 旅游与地点
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
🚗 🚕 🚙 🚌 🚎 🏎 🚓 🚑 🚒 🚐 🛻 🚚 🚛 🚜 🦯 🦽 🦼 🛴 🚲 🛵 🏍 🛺 🚨 🚔 🚍 🚘 🚖 🛞 🚡 🚠 🚟 🚃 🚋 🚞 🚝 🚄 🚅 🚈 🚂 🚆 🚇 🚊 🚉 ✈️ 🛫 🛬 🛩 💺 🛰 🚀 🛸 🚁 🛶 ⛵️ 🚤 🛥 🛳 ⛴ 🚢 ⚓️ 🛟 🪝 ⛽️ 🚧 🚦 🚥 🚏 🗺 🗿 🗽 🗼 🏰 🏯 🏟 🎡 🎢 🛝 🎠 ⛲️ ⛱ 🏖 🏝 🏜 🌋 ⛰ 🏔 🗻 🏕 ⛺️ 🛖 🏠 🏡 🏘 🏚 🏗 🏭 🏢 🏬 🏣 🏤 🏥 🏦 🏨 🏪 🏫 🏩 💒 🏛 ⛪️ 🕌 🕍 🛕 🕋 ⛩ 🛤 🛣 🗾 🎑 🏞 🌅 🌄 🌠 🎇 🎆 🌇 🌆 🏙 🌃 🌌 🌉 🌁
### 对象
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
⌚️ 📱 📲 💻 ⌨️ 🖥 🖨 🖱 🖲 🕹 🗜 💽 💾 💿 📀 📼 📷 📸 📹 🎥 📽 🎞 📞 ☎️ 📟 📠 📺 📻 🎙 🎚 🎛 🧭 ⏱ ⏲ ⏰ 🕰 ⌛️ ⏳ 📡 🔋 🪫 🔌 💡 🔦 🕯 🪔 🧯 🛢 🛍️ 💸 💵 💴 💶 💷 🪙 💰 💳 💎 ⚖️ 🪮 🪜 🧰 🪛 🔧 🔨 ⚒ 🛠 ⛏ 🪚 🔩 ⚙️ 🪤 🧱 ⛓ 🧲 🔫 💣 🧨 🪓 🔪 🗡 ⚔️ 🛡 🚬 ⚰️ 🪦 ⚱️ 🏺 🔮 📿 🧿 🪬 💈 ⚗️ 🔭 🔬 🕳 🩹 🩺 🩻 🩼 💊 💉 🩸 🧬 🦠 🧫 🧪 🌡 🧹 🪠 🧺 🧻 🚽 🚰 🚿 🛁 🛀 🧼 🪥 🪒 🧽 🪣 🧴 🛎 🔑 🗝 🚪 🪑 🛋 🛏 🛌 🧸 🪆 🖼 🪞 🪟 🛍 🛒 🎁 🎈 🎏 🎀 🪄 🪅 🎊 🎉 🪩 🎎 🏮 🎐 🧧 ✉️ 📩 📨 📧 💌 📥 📤 📦 🏷 🪧 📪 📫 📬 📭 📮 📯 📜 📃 📄 📑 🧾 📊 📈 📉 🗒 🗓 📆 📅 🗑 🪪 📇 🗃 🗳 🗄 📋 📁 📂 🗂 🗞 📰 📓 📔 📒 📕 📗 📘 📙 📚 📖 🔖 🧷 🔗 📎 🖇 📐 📏 🧮 📌 📍 ✂️ 🖊 🖋 ✒️ 🖌 🖍 📝 ✏️ 🔍 🔎 🔏 🔐 🔒 🔓
### 符号
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-3-->
❤️ 🩷 🧡 💛 💚 💙 🩵 💜 🖤 🩶 🤍 🤎 ❤️‍🔥 ❤️‍🩹 💔 ❣️ 💕 💞 💓 💗 💖 💘 💝 💟 ☮️ ✝️ ☪️ 🪯 🕉 ☸️ ✡️ 🔯 🕎 ☯️ ☦️ 🛐 ⛎ ♈️ ♉️ ♊️ ♋️ ♌️ ♍️ ♎️ ♏️ ♐️ ♑️ ♒️ ♓️ 🆔 ⚛️ 🉑 ☢️ ☣️ 📴 📳 🈶 🈚️ 🈸 🈺 🈷️ ✴️ 🆚 💮 🉐 ㊙️ ㊗️ 🈴 🈵 🈹 🈲 🅰️ 🅱️ 🆎 🆑 🅾️ 🆘 ❌ ⭕️ 🛑 ⛔️ 📛 🚫 💯 💢 ♨️ 🚷 🚯 🚳 🚱 🔞 📵 🚭 ❗️ ❕ ❓ ❔ ‼️ ⁉️ 🔅 🔆 〽️ ⚠️ 🚸 🔱 ⚜️ 🔰 ♻️ ✅ 🈯️ 💹 ❇️ ✳️ ❎ 🌐 💠 Ⓜ️ 🌀 💤 🏧 🚾 ♿️ 🅿️ 🛗 🈳 🈂️ 🛂 🛃 🛄 🛅 🚹 🚺 🚼 ⚧ 🚻 🚮 🎦 🛜 📶 🈁 🔣 🔤 🔡 🔠 🆖 🆗 🆙 🆒 🆕 🆓 0⃣ 1⃣ 2⃣ 3⃣ 4⃣ 5⃣ 6⃣ 7⃣ 8⃣ 9⃣ 🔟 🔢 #⃣ *️⃣ ⏏️ ▶️ ⏸ ⏯ ⏹ ⏺ ⏭ ⏮ ⏩ ⏪ ⏫ ⏬ ◀️ 🔼 🔽 ➡️ ⬅️ ⬆️ ⬇️ ↗️ ↘️ ↙️ ↖️ ↕️ ↔️ ↪️ ↩️ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃 🎵 🎶 ➗ ✖️ 🟰 ♾ 💲 💱 ™️ ©️ ®️ 〰️ ➰ ➿ 🔚 🔙 🔛 🔝 🔜 ✔️ ☑️ 🔘 🔴 🟠 🟡 🟢 🔵 🟣 ⚫️ ⚪️ 🟤 🔺 🔻 🔸 🔹 🔶 🔷 🔳 🔲 ▪️ ▫️ ◾️ ◽️ ◼️ ◻️ 🟥 🟧 🟨 🟩 🟦 🟪 ⬛️ ⬜️ 🟫 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢 👁‍🗨 💬 💭 🗯 ♠️ ♣️ ♥️ ♦️ 🃏 🎴 🀄️ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 🕟 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧
### 非表情符号
<!--rehype:wrap-style=font-size: 28px;-->
✢ ✣ ✤ ✥ ✦ ✧ ★ ☆ ✯ ✡︎ ✩ ✪ ✫ ✬ ✭ ✮ ✶ ✷ ✵ ✸ ✹ → ⇒ ⟹ ⇨ ⇾ ➾ ⇢ ☛ ☞ ➔ ➜ ➙ ➛ ➝ ➞ ♠︎ ♣︎ ♥︎ ♦︎ ♤ ♧ ♡ ♢ ♚ ♛ ♜ ♝ ♞ ♟ ♔ ♕ ♖ ♗ ♘ ♙ ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ 🂠 ⚈ ⚉ ⚆ ⚇ 𓀀 𓀁 𓀂 𓀃 𓀄 𓀅 𓀆 𓀇 𓀈 𓀉 𓀊 𓀋 𓀌 𓀍 𓀎 𓀏 𓀐 𓀑 𓀒 𓀓 𓀔 𓀕 𓀖 𓀗 𓀘 𓀙 𓀚 𓀛 𓀜 𓀝
### 旗帜
<!--rehype:wrap-style=font-size: 28px;&wrap-class=col-span-2-->
🏳️ 🏴 🏁 🚩 🏳️‍🌈 🏳️‍⚧️ 🏴‍☠️ 🇦🇫 🇦🇽 🇦🇱 🇩🇿 🇦🇸 🇦🇩 🇦🇴 🇦🇮 🇦🇶 🇦🇬 🇦🇷 🇦🇲 🇦🇼 🇦🇺 🇦🇹 🇦🇿 🇧🇸 🇧🇭 🇧🇩 🇧🇧 🇧🇾 🇧🇪 🇧🇿 🇧🇯 🇧🇲 🇧🇹 🇧🇴 🇧🇦 🇧🇼 🇧🇷 🇮🇴 🇻🇬 🇧🇳 🇧🇬 🇧🇫 🇧🇮 🇰🇭 🇨🇲 🇨🇦 🇮🇨 🇨🇻 🇧🇶 🇰🇾 🇨🇫 🇹🇩 🇨🇱 🇨🇳 🇨🇽 🇨🇨 🇨🇴 🇰🇲 🇨🇬 🇨🇩 🇨🇰 🇨🇷 🇨🇮 🇭🇷 🇨🇺 🇨🇼 🇨🇾 🇨🇿 🇩🇰 🇩🇯 🇩🇲 🇩🇴 🇪🇨 🇪🇬 🇸🇻 🇬🇶 🇪🇷 🇪🇪 🇪🇹 🇪🇺 🇫🇰 🇫🇴 🇫🇯 🇫🇮 🇫🇷 🇬🇫 🇵🇫 🇹🇫 🇬🇦 🇬🇲 🇬🇪 🇩🇪 🇬🇭 🇬🇮 🇬🇷 🇬🇱 🇬🇩 🇬🇵 🇬🇺 🇬🇹 🇬🇬 🇬🇳 🇬🇼 🇬🇾 🇭🇹 🇭🇳 🇭🇰 🇭🇺 🇮🇸 🇮🇳 🇮🇩 🇮🇷 🇮🇶 🇮🇪 🇮🇲 🇮🇱 🇮🇹 🇯🇲 🇯🇵 🎌 🇯🇪 🇯🇴 🇰🇿 🇰🇪 🇰🇮 🇽🇰 🇰🇼 🇰🇬 🇱🇦 🇱🇻 🇱🇧 🇱🇸 🇱🇷 🇱🇾 🇱🇮 🇱🇹 🇱🇺 🇲🇴 🇲🇰 🇲🇬 🇲🇼 🇲🇾 🇲🇻 🇲🇱 🇲🇹 🇲🇭 🇲🇶 🇲🇷 🇲🇺 🇾🇹 🇲🇽 🇫🇲 🇲🇩 🇲🇨 🇲🇳 🇲🇪 🇲🇸 🇲🇦 🇲🇿 🇲🇲 🇳🇦 🇳🇷 🇳🇵 🇳🇱 🇳🇨 🇳🇿 🇳🇮 🇳🇪 🇳🇬 🇳🇺 🇳🇫 🇰🇵 🇲🇵 🇳🇴 🇴🇲 🇵🇰 🇵🇼 🇵🇸 🇵🇦 🇵🇬 🇵🇾 🇵🇪 🇵🇭 🇵🇳 🇵🇱 🇵🇹 🇵🇷 🇶🇦 🇷🇪 🇷🇴 🇷🇺 🇷🇼 🇼🇸 🇸🇲 🇸🇦 🇸🇳 🇷🇸 🇸🇨 🇸🇱 🇸🇬 🇸🇽 🇸🇰 🇸🇮 🇬🇸 🇸🇧 🇸🇴 🇿🇦 🇰🇷 🇸🇸 🇪🇸 🇱🇰 🇧🇱 🇸🇭 🇰🇳 🇱🇨 🇵🇲 🇻🇨 🇸🇩 🇸🇷 🇸🇿 🇸🇪 🇨🇭 🇸🇾 🇹🇼 🇹🇯 🇹🇿 🇹🇭 🇹🇱 🇹🇬 🇹🇰 🇹🇴 🇹🇹 🇹🇳 🇹🇷 🇹🇲 🇹🇨 🇹🇻 🇻🇮 🇺🇬 🇺🇦 🇦🇪 🇬🇧 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🏴󠁧󠁢󠁳󠁣󠁴󠁿 🏴󠁧󠁢󠁷󠁬󠁳󠁿 🇺🇳 🇺🇸 🇺🇾 🇺🇿 🇻🇺 🇻🇦 🇻🇪 🇻🇳 🇼🇫 🇪🇭 🇾🇪 🇿🇲 🇿🇼
Github emoji 图标标记
----
### People
@ -879,3 +980,16 @@ Emoji 备忘清单
| :milky_way: | `:milky_way:` |
| :partly_sunny: | `:partly_sunny:` |
| :carrot: | `:carrot:` |
另见
--------
- [Emoji searcher](https://emoji.muan.co/) _(muan.co)_
- [Get Emoji — All Emojis to ✂️ Copy and 📋 Paste](https://getemoji.com/) _(getemoji.com)_
- [Emoji Guide 🔥 The Ultimate Emoji Guide: 🌈 Meanings, 🍎 Platforms, 🆘 Codes and 😍 More](https://emojiguide.com/) _(emojiguide.com)_
- [Full Emoji List, v15.0](https://unicode.org/emoji/charts/full-emoji-list.html) _(unicode.org)_
- [Emoji Cheat Sheet](https://www.webfx.com/tools/emoji-cheat-sheet/) _(webfx.com)_
- [EmojiCopy | Simple emoji copy and paste keyboard by JoyPixels®](https://www.emojicopy.com/) _(emojicopy.com)_
- [Emojis 🌱☀️ - Copy & Paste Online 🕵️‍♀️ | Quicktools by Picsart](https://tools.picsart.com/text/emojis/) _(tools.picsart.com)_
- [Emojihub 😀 - All Emojis To Copy And Paste](https://emojihub.org/) _(emojihub.org)_
- [All Emojis Emoji List for Copy and Paste](https://www.freecodecamp.org/news/all-emojis-emoji-list-for-copy-and-paste/) _(freecodecamp.org)_

680
docs/fastapi.md Normal file
View File

@ -0,0 +1,680 @@
FastAPI 备忘清单
===
一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示
入门
---
<!--rehype:body-class=cols-2-->
### 安装 FastAPI
```shell
$ pip install "fastapi[all]"
```
#### 可以分开来安装
假如你想将应用程序部署到生产环境,你可能要执行以下操作:
```shell
$ pip install fastapi
```
并且安装 `uvicorn` 来作为服务器:
```shell
$ pip install "uvicorn[standard]"
```
#### 运行代码
```shell
$ uvicorn main:app --reload
```
Python: `3.9.5` FastAPI: `0.103.1`
### 最小程序
下面代码会直接启动http服务也可以使用 `uvicorn main:app --reload`
```python
from fastapi import FastAPI
import uvicorn
app = FastAPI()
```
添加一个 API 的示例
```python
# http://127.0.0.1:8000/
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run(app='main:app', reload=True)
```
### 路径参数
#### 最基本的路径参数
```python
# http://127.0.0.1:8000/items/1
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id} # item_id自定义
```
#### 多个路径参数
```python
# http://127.0.0.1:8000/items/1/2
@app.get("/items/{item_id}/{user_id}")
async def read_item(item_id, user_id):
return {"item_id": item_id, "user_id": user_id}
```
#### 有类型的路径参数
```python
# http://127.0.0.1:8000/items/1
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
```
#### 文件路径参数
```python
# http://127.0.0.1:8000/file//home/my/my.txt
@app.get("/file/{file_path:path}")
async def read_item(file_path):
return {"file_path": file_path}
```
### 查询参数
<!--rehype:wrap-class=row-span-2-->
#### 带默认值的查询参数
```python
# http://127.0.0.1:8000/items/?skip=0&limit=2
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}]
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return fake_items_db[skip: skip + limit]
```
#### 可选查询参数
```python
# http://127.0.0.1:8000/items/1?q=admin
from typing import Union
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
```
#### 多路径多查询参数
```python
# http://127.0.0.1:8000/users/1/items/2
# or
# http://127.0.0.1:8000/users/1/items/2?q=query&short=true
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(
user_id: int,
item_id: str,
q: Union[str, None] = None,
short: bool = False
):
item = {"item_id": item_id, "owner_id": user_id}
if q:
item.update({"q": q})
if not short:
item.update(
{"description": "这是一个令人惊叹的项目,有很长的描述"}
)
return item
```
#### 必需查询参数
```python
# http://127.0.0.1:8000/items/123?needy=yes
@app.get("/items/{item_id}")
async def read_user_item(item_id: str, needy: str):
item = {"item_id": item_id, "needy": needy}
return item
```
### 请求体
```python
from pydantic import BaseModel
from typing import Union
class Item(BaseModel):
name: str = '小明'
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
@app.post("/items/")
async def create_item(item: Item):
print(item.name)
return item
```
#### 调用
```bash
curl -X 'POST' \
'http://127.0.0.1:8000/items/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "小明",
"description": "string",
"price": 0,
"tax": 0
}'
```
### 查询参数和字符串校验
```python
from fastapi import Query
@app.get("/items/")
async def read_items(
q: Union[str, None] = Query(default=None, max_length=50)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
```
#### 参数列表
| 参数 | 含义 | 类型 |
| ---------- | ------------ | ------------- |
| `default` | 默认值 | 任意类型或... |
| `max_length` | 最大长度 | `int` |
| `min_length` | 最小长度 | `int` |
| `pattern` | 正则匹配 | `string` |
| `alias` | 别名参数 | `string` |
| `deprecated` | 准备弃用参数 | `bool` |
#### 多个相同的查询参数
```python
# http://127.0.0.1:8000/items/?q=foo&q=bar
@app.get("/items/")
async def read_items(
q: Union[List[str], None] = Query(default=None)
):
query_items = {"q": q}
return query_items
```
### 路径参数和数值校验
Path 用法基本和 Query 相同,参考:[FastAPI官方文档](https://fastapi.tiangolo.com/zh/tutorial/path-params-numeric-validations/)
#### 导入 Path
```python
from fastapi import FastAPI, Path, Query
from typing_extensions import Annotated
```
#### 声明元数据
```python
@app.get("/items/{item_id}")
async def read_items(
item_id: Annotated[int, Path(title="要获取的项目的 ID")],
q: Annotated[str | None, Query(alias="item-query")] = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
```
#### 参数列表
| 参数 | 含义 | 类型 |
| ----- | ------------------- | --------- |
| `...` | 和 Query 具有相同参数 | ... |
| `ge` | 大于等于 | `int float` |
| `gt` | 大于 | `int float` |
| `le` | 小于等于 | `int float` |
| `le` | 小于等于 | `int float` |
| `title` | api文档的标题 | `string` |
### 其他参数
都具有 `Query` 的参数,`max_length``min_length`
#### Cookie参数
```python
from fastapi import Cookie
@app.get("/items/")
async def read_items(
ads_id: Annotated[Union[str, None], Cookie()] = None
):
return {"ads_id": ads_id}
```
#### Header 参数
```python
from fastapi import Header
@app.get("/items/")
async def read_items(
user_agent: Annotated[Union[str, None], Header()] = None,
items_id: Annotated[Union[int, None], Header(ge=1)] = None
):
return {"User-Agent": user_agent, "items_id": items_id}
```
### 表单数据
接收的不是 JSON而是表单字段时要使用 Form。
#### 安装
```shell
$ pip install python-multipart
```
#### HTML
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<form method="post" action="http://127.0.0.1:8000/login">
<span>账号:</span><input type="text" name="username">
<br>
<span>密码:</span><input type="password" name="password">
<br>
<input type="submit" value="登录">
</form>
</body>
</html>
```
#### FastAPI
```python
from fastapi import FastAPI, Form
import uvicorn
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
return {"username": username}
if __name__ == '__main__':
uvicorn.run(app='main:app', reload=True)
```
### 文件上传
<!--rehype:wrap-class=col-span-2-->
```python
from fastapi import FastAPI, UploadFile
from fastapi.responses import HTMLResponse
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
print(file.file.read().decode())
return {"filenames": file.filename, "type": str(type(file.file))}
@app.get("/")
async def main():
content = """<body>
<form action="/uploadfile/" enctype="multipart/form-data" method="post">
<input name="file" type="file" multiple>
<input type="submit">
</form>
</body>"""
return HTMLResponse(content=content)
```
#### UploadFile 属性
| 属性名 | 含义 | 返回 |
| ------------ | -------- | --------------------------------------- |
| `filename` | 文件名 | 上传的文件名 |
| `content_type` | 内容类型 | `MIME` 类型 |
| `file` | 文件 | SpooledTemporaryFile 具有 `read``write` 方法 |
<!--rehype:className=left-align-->
#### UploadFile async 方法
| 方法名 | 含义 |
| ------------ | ----------------------------------------- |
| `write(data)` | 把 `data` 写入文件 |
| `read(size)` | 按指定数量的字节读取文件内容 |
| `seek(offset)` | 移动至文件 `offset` `int`)字节处的位置 |
| `close()` | 关闭文件 |
<!--rehype:className=left-align-->
依赖项
---
<!--rehype:body-class=cols-2-->
### 依赖项使用场景
- 共享业务逻辑(复用相同的代码逻辑)
- 共享数据库连接
- 实现安全、验证、角色权限
- 等……
### 创建依赖项
<!--rehype:wrap-class=row-span-2-->
```python
from typing import Union
from fastapi import Depends, FastAPI
app = FastAPI()
```
`read_items``read_users` 方法依赖 `common_parameters`
白话就是 `read_items``read_users` 都需要 `q``skip``limit` 查询参数
```python
async def common_parameters(
q: Union[str, None] = None,
skip: int = 0,
limit: int = 100
):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(
commons: dict = Depends(common_parameters)
):
return commons
@app.get("/users/")
async def read_users(
commons: dict = Depends(common_parameters)
):
return commons
```
### 类作为依赖项
```python
from typing import Union
from fastapi import Depends, FastAPI
app = FastAPI()
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}]
class CommonQueryParams:
def __init__(
self,
q: Union[str, None] = None,
skip: int = 0,
limit: int = 100
):
self.q = q
self.skip = skip
self.limit = limit
```
`read_itemsx` 接收一个 `commons` 参数,类型是 `CommonQueryParams`
`CommonQueryParams` 接收三个参数,这三个参数是调用 api 的时候传
```python
@app.get("/items/")
async def read_items(
commons: CommonQueryParams = Depends(CommonQueryParams)
):
response = {}
if commons.q:
response.update({"q": commons.q})
items = fake_items_db[commons.skip : commons.skip + commons.limit]
response.update({"items": items})
return response
```
#### 还可以简写
```python
@app.get("/items/")
async def read_items(
# 这里的 Depends 没有传参FastAPI 会自动使用 CommonQueryParams
commons: CommonQueryParams = Depends()
):
response = {}
if commons.q:
response.update({"q": commons.q})
items = fake_items_db[commons.skip : commons.skip + commons.limit]
response.update({"items": items})
return response
```
### 子依赖项
```python
from typing import Union
from fastapi import Cookie, Depends, FastAPI
app = FastAPI()
def query_extractor(q: Union[str, None] = None):
return q
def query_or_cookie_extractor(
q: str = Depends(query_extractor),
last_query: Union[str, None] = Cookie(default=None),
):
if not q:
return last_query
return q
# read_query函数依赖query_or_cookie_extractor函数
# query_or_cookie_extractor函数又依赖query_extractor函数
# 就是说依赖项可以依赖其他依赖项,只要你不晕,可以无数次套娃
@app.get("/items/")
async def read_query(
query_or_default: str = Depends(query_or_cookie_extractor)
):
return {"q_or_cookie": query_or_default}
```
#### 不使用缓存
使用 `use_cache = False` 参数不使用缓存数据,不使用 `use_cache = False``value``value1` 是一样的
```python
def result_value():
value = randint(1, 99)
return value
def get_value(
value: int = Depends(result_value, use_cache=False),
value1: int = Depends(result_value, use_cache=False)
):
return value, value1
@app.get('/value/')
async def needy_dependency(value: tuple = Depends(get_value)):
return {"value": value}
```
### 全局依赖项
```python
from fastapi import Depends, FastAPI, Header, HTTPException
async def verify_token(x_token: str = Header()):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token 标头无效")
async def verify_key(x_key: str = Header()):
if x_key != "fake-super-secret-key":
raise HTTPException(status_code=400, detail="X-Key 标头无效")
return x_key
```
全局依赖项很有用,后面的安全性就可以使用全局依赖项
```python
app = FastAPI(
dependencies=[Depends(verify_token), Depends(verify_key)]
)
@app.get("/items/")
async def read_items():
return [{"item": "Portal Gun"}, {"item": "Plumbus"}]
@app.get("/users/")
async def read_users():
return [{"username": "Rick"}, {"username": "Morty"}]
```
安全性
---
### 基于 Token 的认证
<!--rehype:wrap-class=col-span-2-->
```python
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
app = FastAPI()
```
使用 OAuth2PasswordBearer 创建一个 token 依赖
```python
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
```
假设这是你的用户数据库
```python
fake_users_db = {
"johndoe": {
"username": "johndoe",
"full_name": "John Doe",
"email": "johndoe@example.com",
"hashed_password": "fakehashedsecret",
"disabled": False,
}
}
```
创建一个用户模型
```python
class User(BaseModel):
username: str
email: str
full_name: str
disabled: bool
```
创建一个简单的认证函数
```python
def fake_hash_password(password: str):
return "fakehashed" + password
def get_user(db, username: str):
if username in db:
user_dict = db[username]
return User(**user_dict)
def fake_decode_token(token: str):
# 这个函数应该验证 token 并返回用户信息
# 这里我们只是简单地返回了用户名
return get_user(fake_users_db, token)
```
创建一个依赖,用于从请求中获取 token 并验证用户
```python
async def get_current_user(token: str = Depends(oauth2_scheme)):
user = fake_decode_token(token)
if not user:
raise HTTPException(
status_code=401,
detail="Invalid authentication credentials",
headers={"WWW-Authenticate": "Bearer"},
)
return user
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = get_user(fake_users_db, form_data.username)
if not user or user.hashed_password != fake_hash_password(form_data.password):
raise HTTPException(status_code=400, detail="Incorrect username or password")
return {"access_token": user.username, "token_type": "bearer"}
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
```
使用 OAuth2PasswordBearer 来创建一个简单的 token 认证流程。
### HTTPS 和证书
```python
from fastapi import FastAPI
app = FastAPI()
```
在生产环境中,你应该使用一个真正的证书和私钥,你可以从像 Let's Encrypt 这样的证书颁发机构获得免费的证书,或者使用 OpenSSL 生成自签名证书
```python
@app.get("/https")
async def read_https():
return {"message": "Hello, HTTPS!"}
```
启动服务器时,使用以下命令来指定证书和私钥:
```bash
uvicorn main:app --host 0.0.0.0 --port 443 --ssl-keyfile /path/to/your/key.pem --ssl-certfile /path/to/your/cert.pem
```
FastAPI 默认支持 HTTPS你只需要提供证书和私钥即可。
待更新
参考
---
- [Python 备忘清单](./python.md) _(jaywcjlove.github.io)_
- [FastAPI 官方文档](https://fastapi.tiangolo.com/zh/tutorial/) _(fastapi.tiangolo.com)_

View File

@ -9,14 +9,14 @@ FED 前端导航
[CSDN](https://www.csdn.net/)<!--rehype:target=_blank&style=background: rgb(252 85 49/var(\-\-bg\-opacity));-->
[GitHub](https://github.com/)<!--rehype:target=_blank&style=background: rgb(0 0 0/var(\-\-bg\-opacity));-->
[InfoQ](http://www.infoq.com/cn)<!--rehype:target=_blank&style=background: rgb(66 133 244/var(\-\-bg\-opacity));-->
[Medium](https://medium.com/topic/technology)<!--rehype:target=_blank-->
[Medium](https://medium.com/topic/technology)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[SegmentFault](https://segmentfault.com/)<!--rehype:target=_blank&style=background: rgb(0 150 94/var(\-\-bg\-opacity));-->
[Stack Overflow](https://stackoverflow.com/)<!--rehype:target=_blank&style=background: rgb(244 130 37/var(\-\-bg\-opacity));-->
[V2EX](https://www.v2ex.com/?tab=tech)<!--rehype:target=_blank&style=background: rgb(0 0 0/var(\-\-bg\-opacity));-->
[博客园](https://www.cnblogs.com/)<!--rehype:target=_blank&style=background: rgb(46 122 203/var(\-\-bg\-opacity));-->
[开源中国](https://www.oschina.net/)<!--rehype:target=_blank&style=background: rgb(43 179 81/var(\-\-bg\-opacity));-->
[稀土掘金](https://juejin.im/)<!--rehype:target=_blank&style=background: rgb(30 128 255/var(\-\-bg\-opacity));-->
[W3cplus](https://www.w3cplus.com/)<!--rehype:target=_blank-->
[W3cplus](https://www.w3cplus.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
构建工具
@ -34,32 +34,32 @@ FED 前端导航
[Turbopack](https://turbo.build/)<!--rehype:target=_blank&style=background: rgb(248 30 87/var(\-\-bg\-opacity));-->
[Create React App](https://create-react-app.dev/)<!--rehype:target=_blank&style=background: rgb(60 106 146/var(\-\-bg\-opacity));-->
[Browserify](http://browserify.org/)<!--rehype:target=_blank&style=background: rgb(60 106 146/var(\-\-bg\-opacity));-->
[Yeoman](http://yeoman.io/)<!--rehype:target=_blank-->
[Grunt](https://gruntjs.com/)<!--rehype:target=_blank-->
[Yeoman](http://yeoman.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Grunt](https://gruntjs.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Babel](https://babeljs.io/)<!--rehype:target=_blank&style=background: rgb(245 218 85/var(\-\-bg\-opacity));-->
[FIS3](https://fex-team.github.io/fis3/)<!--rehype:target=_blank-->
[FIS3](https://fex-team.github.io/fis3/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
教程文档
---
[MDN Web Docs](https://developer.mozilla.org/zh-CN/)<!--rehype:target=_blank&style=background: rgb(140 181 255/var(\-\-bg\-opacity));-->
[ECMAScript 6 入门](https://es6.ruanyifeng.com/)<!--rehype:target=_blank-->
[W3C 标准](http://w3help.org/)<!--rehype:target=_blank-->
[ECMAScript 6 入门](https://es6.ruanyifeng.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
JavaScript 工具
---
[Chrome Dev Tools](https://www.google.cn/chrome/)<!--rehype:target=_blank-->
[CoffeeScript](https://coffeescript.org/)<!--rehype:target=_blank-->
[Firefox Developer Tools](https://www.mozilla.org/zh-CN/firefox/new/)<!--rehype:target=_blank-->
[Chrome Dev Tools](https://www.google.cn/chrome/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CoffeeScript](https://coffeescript.org/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Firefox Developer Tools](https://www.mozilla.org/zh-CN/firefox/new/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[flow](https://flow.org/)<!--rehype:target=_blank&style=background: rgb(232 189 54/var(\-\-bg\-opacity));-->
[TypeScript](https://www.typescriptlang.org/)<!--rehype:target=_blank&style=background: rgb(49 120 197/var(\-\-bg\-opacity));-->
[JS 压缩,格式化](https://www.css-js.com/)<!--rehype:target=_blank-->
[JS 压缩,格式化](https://www.css-js.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[JSDoc](https://jsdoc.app/)<!--rehype:target=_blank&style=background: rgb(197 149 199/var(\-\-bg\-opacity));-->
[UglifyJS](http://lisperator.net/uglifyjs/transform)<!--rehype:target=_blank-->
[UglifyJS](http://lisperator.net/uglifyjs/transform)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Prettier](https://prettier.io/)<!--rehype:target=_blank&style=background: rgb(197 149 199/var(\-\-bg\-opacity));-->
[Biome - JS 语言格式化](https://prettier.io/)<!--rehype:target=_blank&style=background: rgb(96 165 250/var(\-\-bg\-opacity));&class=contributing tag&data-lang=格式化-->
<!--rehype:class=home-card-->
JavaScript 测试工具
@ -67,91 +67,90 @@ JavaScript 测试工具
[Chai](http://chaijs.com/)<!--rehype:target=_blank&style=background: rgb(164 8 1/var(\-\-bg\-opacity));-->
[ESLint](https://eslint.org/)<!--rehype:target=_blank&style=background: rgb(76 50 195/var(\-\-bg\-opacity));-->
[JSHint](http://jshint.com/)<!--rehype:target=_blank-->
[JSHint](http://jshint.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Jasmine](https://jasmine.github.io/)<!--rehype:target=_blank&style=background: rgb(138 65 130/var(\-\-bg\-opacity));-->
[Jest](https://jestjs.io/)<!--rehype:target=_blank&style=background: rgb(158 79 101/var(\-\-bg\-opacity));-->
[Mochajs](https://mochajs.org/)<!--rehype:target=_blank&style=background: rgb(141 103 72/var(\-\-bg\-opacity));-->
[Oxc - 比 ESLint 快 100 倍](https://oxc-project.github.io)<!--rehype:target=_blank&style=background: rgb(57 172 167/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
CSS 工具
---
[30秒CSS](https://atomiks.github.io/30-seconds-of-css/)<!--rehype:target=_blank-->
[Autoprefixer](https://github.com/postcss/autoprefixer)<!--rehype:target=_blank-->
[ColorZilla](http://www.colorzilla.com/gradient-editor/)<!--rehype:target=_blank-->
[CSS Protips](https://github.com/AllThingsSmitty/css-protips)<!--rehype:target=_blank-->
[CSS3 Maker](http://www.css3maker.com/)<!--rehype:target=_blank-->
[cssnano](http://cssnano.co/)<!--rehype:target=_blank-->
[CSSPIN](https://webkul.github.io/csspin/)<!--rehype:target=_blank-->
[CSSreference](https://cssreference.io/)<!--rehype:target=_blank-->
[CSSTree](https://github.com/csstree/csstree)<!--rehype:target=_blank-->
[CSS美化压缩](http://tool.css-js.com/)<!--rehype:target=_blank-->
[Easing Functions Cheat Sheet](http://easings.net/zh-cn)<!--rehype:target=_blank-->
[Emmet](https://www.emmet.io/)<!--rehype:target=_blank-->
[est](http://ecomfe.github.io/est/)<!--rehype:target=_blank-->
[Flex Layout Attribute](https://github.com/StefanKovac/flex-layout-attribute)<!--rehype:target=_blank-->
[Grid.Guide](http://grid.guide/)<!--rehype:target=_blank-->
[minireset.css](http://lesscss.org/)<!--rehype:target=_blank-->
[Normalize.css](http://necolas.github.io/normalize.css/)<!--rehype:target=_blank-->
[PostCSS](http://postcss.org/)<!--rehype:target=_blank-->
[purifycss](https://github.com/purifycss/purifycss)<!--rehype:target=_blank-->
[30秒CSS](https://www.30secondsofcode.org/css/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Autoprefixer](https://github.com/postcss/autoprefixer)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[ColorZilla](http://www.colorzilla.com/gradient-editor/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSS Protips](https://github.com/AllThingsSmitty/css-protips)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSS3 Maker](http://www.css3maker.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[cssnano](http://cssnano.co/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSSPIN](https://webkul.github.io/csspin/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSSreference](https://cssreference.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSSTree](https://github.com/csstree/csstree)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CSS美化压缩](http://tool.css-js.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Easing Functions Cheat Sheet](http://easings.net/zh-cn)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Emmet](https://www.emmet.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[est](http://ecomfe.github.io/est/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Flex Layout Attribute](https://github.com/StefanKovac/flex-layout-attribute)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[minireset.css](http://lesscss.org/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Normalize.css](http://necolas.github.io/normalize.css/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[PostCSS](http://postcss.org/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[purifycss](https://github.com/purifycss/purifycss)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Less](https://lesscss.org/)<!--rehype:target=_blank&style=background: rgb(36 74 121/var(\-\-bg\-opacity));-->
[SASS](http://sass-lang.com/)<!--rehype:target=_blank&style=background: rgb(191 64 128/var(\-\-bg\-opacity));-->
[Sprite Cow](http://www.spritecow.com/)<!--rehype:target=_blank-->
[Sprite Cow](http://www.spritecow.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Stylus](http://stylus-lang.com/)<!--rehype:target=_blank&style=background: rgb(126 194 66/var(\-\-bg\-opacity));-->
[Stylelint](https://stylelint.io/)<!--rehype:target=_blank-->
[Stylelint](https://stylelint.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
框架类库
---
[React](https://facebook.github.io/react/)<!--rehype:target=_blank&style=background: rgb(97 218 251/var(\-\-bg\-opacity));-->
[React](https://zh-hans.react.dev)<!--rehype:target=_blank&style=background: rgb(97 218 251/var(\-\-bg\-opacity));-->
[Vue 中文](https://cn.vuejs.org/)<!--rehype:target=_blank&style=background: rgb(66 184 131/var(\-\-bg\-opacity));-->
[Angular](https://angular.io/)<!--rehype:target=_blank&style=background: rgb(195 8 47/var(\-\-bg\-opacity));-->
[jQuery](http://www.jquery123.com/)<!--rehype:target=_blank-->
[jQuery](http://www.jquery123.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Bootstrap](https://getbootstrap.com/)<!--rehype:target=_blank&style=background: rgb(113 44 249/var(\-\-bg\-opacity));-->
[React Native 中文](https://reactnative.cn/)<!--rehype:target=_blank&style=background: rgb(36 120 194/var(\-\-bg\-opacity));-->
[Flutter](https://flutter.dev/)<!--rehype:target=_blank&style=background: rgb(35 104 215/var(\-\-bg\-opacity));-->
[RxJs](http://reactivex.io/rxjs/)<!--rehype:target=_blank-->
[RxJs](http://reactivex.io/rxjs/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[htmx](https://htmx.org/)<!--rehype:target=_blank&style=background: rgb(61 114 215/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
在线代码编辑器工具
---
[CodePen](http://codepen.io/)<!--rehype:target=_blank-->
[CodeSandbox](https://codesandbox.io/)<!--rehype:target=_blank-->
[CodePen](https://codepen.io/)<!--rehype:target=_blank-->
[StackBlitz](https://stackblitz.com/)<!--rehype:target=_blank-->
[esbuild](https://esbuild.github.io/)<!--rehype:target=_blank-->
[JSFiddle](https://jsfiddle.net/)<!--rehype:target=_blank-->
[Replit](https://replit.com/)<!--rehype:target=_blank-->
[JSRUN.NET](https://jsrun.net/)<!--rehype:target=_blank-->
[WebComponents.dev](https://webcomponents.dev/)<!--rehype:target=_blank-->
[JS Bin](https://jsbin.com/)<!--rehype:target=_blank-->
[RunKit](https://runkit.com/)<!--rehype:target=_blank-->
[CodePen](https://codepen.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[CodeSandbox](https://codesandbox.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[StackBlitz](https://stackblitz.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[esbuild](https://esbuild.github.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[JSFiddle](https://jsfiddle.net/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Replit](https://replit.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[JSRUN.NET](https://jsrun.net/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[WebComponents.dev](https://webcomponents.dev/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[JS Bin](https://jsbin.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[RunKit](https://runkit.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
兼容、性能测试
---
[Browser Sandbox](https://turbo.net/browsers)<!--rehype:target=_blank-->
[Browserdiet](https://browserdiet.com/zh/)<!--rehype:target=_blank-->
[browsershots](http://browsershots.org/)<!--rehype:target=_blank-->
[BrowserStack](https://www.browserstack.com/)<!--rehype:target=_blank-->
[Can I use](http://caniuse.com/)<!--rehype:target=_blank-->
[httpstatus](https://httpstatus.io/)<!--rehype:target=_blank-->
[Observatory](https://observatory.mozilla.org/)<!--rehype:target=_blank-->
[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/?hl=zh-CN)<!--rehype:target=_blank-->
[Security Headers](https://securityheaders.com/)<!--rehype:target=_blank-->
[Browser Sandbox](https://turbo.net/browsers)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Browserdiet](https://browserdiet.com/zh/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[browsershots](http://browsershots.org/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[BrowserStack](https://www.browserstack.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Can I use](http://caniuse.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[httpstatus](https://httpstatus.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Observatory](https://observatory.mozilla.org/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/?hl=zh-CN)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Security Headers](https://securityheaders.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
CDN
---
[cdnjs](https://cdnjs.com/)<!--rehype:target=_blank-->
[jsDelivr](https://www.jsdelivr.com/)<!--rehype:target=_blank-->
[前端静态资源库](https://cdn.baomitu.com/)<!--rehype:target=_blank-->
[UNPKG](https://unpkg.com/)<!--rehype:target=_blank-->
[Statically](https://statically.io/)<!--rehype:target=_blank-->
[raw.githack.com](http://raw.githack.com/)<!--rehype:target=_blank-->
[cdnjs](https://cdnjs.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[jsDelivr](https://www.jsdelivr.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[UNPKG](https://unpkg.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[Statically](https://statically.io/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
[raw.githack.com](http://raw.githack.com/)<!--rehype:target=_blank&style=background: rgb(106 106 106/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->

View File

@ -84,6 +84,7 @@ $ ffmpeg -i movie.webm movie.mp4
`-r RATE` | 每秒帧率
`-s WIDTHxHEIGHT` | 帧大小
`-vn` | 没有视频
`-crf` | 指定编码的质量,数值越大压缩越高,一般范围是 18-28
### 码率设置

203
docs/figma.md Normal file
View File

@ -0,0 +1,203 @@
Figma 备忘清单
===
Figma 中 119 个键盘快捷键的可视化备忘表
键盘快捷键
---
### 基本操作
快捷键 | 动作
---|---
`Ctrl` `\` | 显示/隐藏界面
`Ctrl` `C` | 选择颜色
`Ctrl` `/` | 搜索菜单
<!--rehype:className=shortcuts-->
### 工具
快捷键 | 动作
---|---
`V` | 移动工具
`F` | 框架工具
`P` | 钢笔工具
`Shift` `P` | 铅笔工具
`T` | 文本工具
`R` | 矩形工具
`O` | 椭圆工具
`L` | 线条工具
`Shift` `L` | 箭头工具
`C` | 添加/显示评论
`Ctrl` `C` | 选择颜色
`S` | 切片工具
<!--rehype:className=shortcuts-->
### 视图
快捷键 | 动作
---|---
`Shift` `R` | 切换标尺
`Ctrl` `Y` | 显示轮廓
`Ctrl` `P` | 像素预览
`Ctrl` `G` | 布局网格
`Ctrl` `'` | 像素网格
`Ctrl` `\` | 显示/隐藏界面
`Ctrl` `Alt` `\` | 显示多人光标
`Alt` `1` | 显示图层
`Alt` `2` | 显示组件
`Alt` `3` | 显示团队库
<!--rehype:className=shortcuts-->
### 缩放
快捷键 | 动作
---|---
`Space` `(拖拽)` | 平移
`+` | 放大
`-` | 缩小
`Shift` `0` | 缩放至100%
`Shift` `1` | 缩放以适应
`Shift` `2` | 缩放至选区
`Shift` `N` | 缩放至上一帧
`N` | 缩放至下一帧
`PgUp` | 上一页
`PgDown` | 下一页
`Home` | 查找上一帧
`End` | 查找下一帧
<!--rehype:className=shortcuts-->
### 文本
快捷键 | 动作
---|---
`Ctrl` `B` | 加粗
`Ctrl` `I` | 斜体
`Ctrl` `U` | 下划线
`Ctrl` `Shift` `V` | 粘贴并匹配样式
`Ctrl` `Alt` `L` | 文本左对齐
`Ctrl` `Alt` `T` | 文本居中对齐
`Ctrl` `Alt` `R` | 文本右对齐
`Ctrl` `Alt` `J` | 文本两端对齐
`Ctrl` `Shift` `</>` | 调整字体大小
`Alt` `,/.` | 调整字间距
`Alt` `Shift` `</>` | 调整行高
<!--rehype:className=shortcuts-->
### 形状
快捷键 | 动作
---|---
`P` | 钢笔
`Shift` `P` | 铅笔
`B` | 填充桶(编辑形状时)
`Ctrl` | 弯曲工具(编辑形状时)
`Alt` `/` | 移除填充
`/` | 移除描边
`Shift` `X` | 交换填充和描边
`Ctrl` `Shift` `O` | 描边轮廓
`Ctrl` `E` | 扁平化选择
`Ctrl` `J` | 连接选择(选择点后)
`Ctrl` `Shift` `J` | 平滑连接选择(选择点后)
`Shift` `Backspace` | 删除并修复选择(选择点后)
<!--rehype:className=shortcuts-->
### 选择
快捷键 | 动作
---|---
`Ctrl` `A` | 全选
`Ctrl` `Shift` `A` | 反向选择
`Esc` | 取消选择
`Ctrl` `(单击)` | 深度选择
`Ctrl` `(右键单击)` | 选择图层菜单
`Enter` | 选择子元素
`Shift` `Enter` | 选择父元素
`Tab` | 选择下一个同级元素
`Shift` `Tab` | 选择上一个同级元素
`Ctrl` `G` | 分组选择
`Ctrl` `Shift` `G` | 取消分组选择
`Ctrl` `Alt` `G` | 框架选择
`Ctrl` `Shift` `H` | 显示/隐藏选择
`Ctrl` `Shift` `L` | 锁定/解锁选择
<!--rehype:className=shortcuts-->
### 光标
快捷键 | 动作
---|---
`Alt` | 测量到选择区域(指向时)
`Alt` | 复制选择区域(移动时)
`Ctrl` `(单击)` | 深度选择(点击时)
`Ctrl` `(右键单击)` | 选择图层菜单(点击时)
`Ctrl` `(拖动)` | 矩形内深度选择(拖动选择时)
`Alt` | 从中心调整大小(调整大小时)
`Shift` | 等比例调整大小(调整大小时)
`Space` | 在调整大小时移动
`Ctrl` | 忽略约束(仅限框架)
<!--rehype:className=shortcuts-->
### 编辑
快捷键 | 动作
---|---
`Ctrl` `C` | 复制
`Ctrl` `X` | 剪切
`Ctrl` `V` | 粘贴
`Ctrl` `Shift` `V` | 在选择上粘贴
`Ctrl` `D` | 原地复制选择
`Ctrl` `R` | 重命名选择
`Ctrl` `Shift` `E` | 导出
`Ctrl` `Alt` `C` | 复制属性
`Ctrl` `Alt` `V` | 粘贴属性
<!--rehype:className=shortcuts-->
### 变换
快捷键 | 动作
---|---
`Shift` `H` | 水平翻转
`Shift` `V` | 垂直翻转
`Ctrl` `M` | 用作蒙版
`Enter` | 编辑形状或图像
`Ctrl` `Shift` `K` | 放置图像
`Alt` `(双击)` | 裁剪图像
`1` | 将不透明度设置为 10%
`5` | 将不透明度设置为 50%
`0` | 将不透明度设置为 100%
<!--rehype:className=shortcuts-->
### 排列
快捷键 | 动作
---|---
`Ctrl` `]` | 上移一层
`Ctrl` `[` | 下移一层
`Ctrl` `Alt` `]` | 移至顶层
`Ctrl` `Alt` `[` | 移至底层
`Alt` `A` | 左对齐
`Alt` `D` | 右对齐
`Alt` `W` | 顶部对齐
`Alt` `S` | 底部对齐
`Alt` `H` | 水平居中对齐
`Alt` `V` | 垂直居中对齐
`Ctrl` `Alt` `T` | 整理
`Ctrl` `Alt` `H` | 分布水平间距
`Ctrl` `Alt` `V` | 分布垂直间距
<!--rehype:className=shortcuts-->
### 组件
快捷键 | 动作
---|---
`Alt` `2` | 显示组件
`Ctrl` `Shift` `O` | 团队库
`Ctrl` `Shift` `K` | 创建组件
`Ctrl` `Shift` `B` | 分离实例
`Alt` | 替换组件实例(从资源拖动时)
<!--rehype:className=shortcuts-->
另见
---
- [Figma 的键盘快捷键](https://help.figma.com/article/77-keyboard-shortcuts) _(help.figma.com)_

93
docs/finder.md Normal file
View File

@ -0,0 +1,93 @@
Finder 备忘清单
===
Finder 中 55 个键盘快捷键的可视化小抄。此应用程序是 macOS 的一部分。
键盘快捷键
----
<!--rehype:body-class=cols-4-->
### 修饰键符号
<!--rehype:wrap-class=col-span-4-->
- `Command` (或 `Cmd`) ⌘
- `Option` (或 `Alt`) ⌥
- `Caps Lock`
- `Shift`
- `Control` (或 `Ctrl`) ⌃
- `Fn` 🌐
<!--rehype:className=cols-3-->
### Finder 快捷键
<!--rehype:wrap-class=col-span-2-->
快捷键 | 操作
---|---
`Cmd` `D` | 复制选定的文件
`Cmd` `E` | 弹出选定的磁盘或卷
`Cmd` `F` | 在Finder窗口中启动Spotlight搜索
`Cmd` `I` | 显示选定文件的详细信息窗口
`Cmd` `R` | 当在Finder中选择别名时显示所选别名的原始文件
`Cmd` `Shift` `C` | 打开计算机窗口
`Cmd` `Shift` `D` | 打开桌面文件夹
`Cmd` `Shift` `F` | 打开最近窗口,显示您最近查看或更改的所有文件
`Cmd` `Shift` `G` | 打开前往文件夹窗口
`Cmd` `Shift` `H` | 打开当前MacOS用户账户的主文件夹
`Cmd` `Shift` `I` | 打开iCloud驱动器
`Cmd` `Shift` `K` | 打开网络窗口
`Cmd` `Opt` `L` | 打开下载文件夹
`Cmd` `Shift` `N` | 创建新文件夹
`Cmd` `Shift` `O` | 打开文档文件夹
`Cmd` `Shift` `P` | 在Finder窗口中显示或隐藏预览窗格
`Cmd` `Shift` `R` | 打开AirDrop窗口
`Cmd` `Shift` `T` | 在Finder窗口中显示或隐藏选项卡栏
`Ctrl` `Cmd` `Shift` `T` | 将选定的Finder项目添加到Dock
`Cmd` `Shift` `U` | 打开实用工具文件夹
`Cmd` `Opt` `D` | 显示或隐藏Dock
`Cmd` `Ctrl` `T` | 将选定项目添加到侧边栏
`Cmd` `Opt` `P` | 在Finder窗口中隐藏或显示路径栏
`Cmd` `Opt` `S` | 在Finder窗口中隐藏或显示侧边栏
`Cmd` `/` | 在Finder窗口中隐藏或显示状态栏
`Cmd` `J` | 显示视图选项
`Cmd` `K` | 打开连接到服务器窗口
<!--rehype:className=shortcuts left-align-->
### Finder 快捷键
<!--rehype:wrap-class=col-span-2-->
快捷键 | 操作
---|---
`Cmd` `Ctrl` `A` | 制作所选项目的别名
`Cmd` `N` | 打开新的Finder窗口
`Cmd` `Opt` `N` | 创建新的智能文件夹
`Cmd` `T` | 在当前Finder窗口中打开或隐藏选项卡栏
`Cmd` `Opt` `T` | 在当前Finder窗口中打开或隐藏工具栏
`Cmd` `Opt` `V` | 将剪贴板中文件从其原始位置移动到当前位置
`Cmd` `Y` | 使用快速查看预览所选文件
`Cmd` `Opt` `Y` | 查看所选文件的快速查看幻灯片
`Cmd` `1` | 将Finder窗口中的项目以图标形式查看
`Cmd` `2` | 将Finder窗口中的项目以列表形式查看
`Cmd` `3` | 将Finder窗口中的项目以列形式查看
`Cmd` `4` | 将Finder窗口中的项目以画廊形式查看
`Cmd` `[` | 转到上一个文件夹
`Cmd` `]` | 转到下一个文件夹
`Cmd` `Up` | 打开包含当前文件夹的文件夹
`Cmd` `Ctrl` `Up` | 在新窗口中打开包含当前文件夹的文件夹
`Cmd` `Left` | 打开所选项目
`Right` | 打开所选文件夹(仅在列表视图中有效)
`Left` | 关闭所选文件夹(仅在列表视图中有效)
`Cmd` `Del` | 将所选项目移至废纸篓
`Cmd` `Shift` `Del` | 清空废纸篓
`Cmd` `Opt` `Shift` `Del` | 无需确认对话框即可清空废纸篓
`Cmd` `Bright-Down` | 在Mac连接到多个显示器时打开或关闭视频镜像
`Cmd` `Bright-Up` | 打开显示首选项
`Ctrl` `Bright` | 更改外部显示器的亮度(如果支持)
`Opt` `Shift` `Bright` | 以较小步长调整显示亮度
`Ctrl` `Down` | 显示前台应用程序的所有窗口
`Opt` `Vol` | 打开声音首选项
<!--rehype:className=shortcuts left-align-->
另见
----
- [macOS Finder 的键盘快捷键](https://support.apple.com/en-us/HT201236) _(support.apple.com)_

View File

@ -206,14 +206,14 @@ def getImg():
```py
from flask import Blueprint, abort, jsonify
# 定义Bp2并定义url前缀为/vedio
Bp2 = Blueprint('vedioBlue', __name__, template_folder='templates', url_prefix='/vedio')
# 定义Bp2并定义url前缀为/video
Bp2 = Blueprint('videoBlue', __name__, template_folder='templates', url_prefix='/video')
@Bp2.route('/getvedio')
def getVedio():
@Bp2.route('/getvideo')
def getvideo():
try:
return jsonify(name="vedio", size="100GB")
return jsonify(name="video", size="100GB")
except Exception as e:
abort(e)
```
@ -223,7 +223,7 @@ def getVedio():
```py
from flask import Flask, jsonify
from lantu.img import Bp1
from lantu.vedio import Bp2
from lantu.video import Bp2
app = Flask(__name__)
@ -250,6 +250,6 @@ curl http://127.0.0.1:5000/
curl http://127.0.0.1:5000/img/getimg
>> {"name": "img", "size": "100KB"}
curl http://127.0.0.1:5000/vedio/getvedio
>> {"name": "vedio", "size": "100GB"}
curl http://127.0.0.1:5000/video/getvideo
>> {"name": "video", "size": "100GB"}
```

View File

@ -616,10 +616,10 @@ Flex 的用法与 `Row` 或 `Column` 类似,但只需要额外传入 `directio
```dart
Flex(
direction: Axis.vertiacl,
children[
Fluterlogo(),
Fluterlogo(),
Fluterlogo(),
children: [
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
),
```
@ -628,11 +628,11 @@ Flex(
```dart
Flex(
dirction: Axis.horizontal,
direction: Axis.horizontal,
children: [
Flutterlogo(),
Flutterlogo(),
Flutterlogo(),
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
),
```

134
docs/ftp.md Normal file
View File

@ -0,0 +1,134 @@
ftp 备忘清单
===
此 ftp 备忘清单包含命令和使用 ftp 脚本实现自动化的技巧示例。
入门
----
### 介绍
<!--rehype:wrap-class=col-span-2-->
- FTP 命令允许用户通过FTPFile Transfer Protocol协议在本地计算机和远程服务器之间传输文件。
- FTP 是一种在网络上交换文件的标准协议,是 ARPANet 的标准文件传输协议ARPANet 网络就是现今 Internet 的前身。
- 使用 FTP 协议时,一方充当客户端,另一方充当服务器,客户端可以上传、下载、删除、重命名文件和目录,以及执行其他文件传输相关的操作。
### 选项
<!--rehype:wrap-class=row-span-3-->
```bash
ftp -v ftp.example.com
```
`-v`:启用或禁用详细模式。在详细模式下,`ftp`命令会显示所有来自服务器的响应消息。默认情况下,该选项为开启状态。
```bash
ftp -d ftp.example.com
```
`-d`启用调试模式。该选项会显示所有FTP传输过程中发送和接收到的命令有助于调试连接问题。
```bash
ftp -n ftp.example.com
```
`-n`:禁止自动登录。默认情况下,`ftp`命令会在连接到远程服务器后尝试自动登录。使用该选项可以禁止该行为,通常与`.netrc`文件联合使用。
```bash
ftp -g ftp.example.com
```
禁用文件名通配符扩展。`ftp`命令默认会展开文件名中的通配符。使用该选项可以关闭这一行为。
```bash
ftp -p ftp.example.com
```
`-p`使用被动模式PASV进行数据连接。被动模式在客户端位于防火墙或NAT后面时非常有用。
```bash
ftp -s:script.txt ftp.example.com # Windows
ftp -n ftp.example.com < script # Linux
```
:warning: Windows 上使用`-s`选项指定`script.txt`脚本执行 ftp 命令。Linux 上可以使用重定向实现。
### 目录操作
| 命令 | 描述 |
| -------------------- | -------------------------- |
| `cd` | 更改当前工作目录到指定目录 |
| `ls``dir` | 列出当前目录下的内容 |
| `pwd` | 显示当前目录的绝对路径 |
| `mkdir` | 创建目录 |
| `rmdir` | 删除一个目录 |
| `rename <old> <new>` | 重命名一个目录 |
### 快速开始
<!--rehype:wrap-class=row-span-2-->
使用匿名模式访问远程 FTP 服务器
```bash
ftp ftp.example.com
```
ftp 会启动交互式命令行
```bash
Connected to <host> (<ip address>).
220 (vsFTPd 3.*)
# 需要手动输入 anonymous
Name (192.168.10.10:root): anonymous
331 Please specify the password.
Password: # 匿名模式下直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
```
连接成功后进入交互式会话.
查看所有命令,使用 `helm``?`
```bash
ftp> help
# 或者
ftp> ?
```
### 文件操作
| 命令 | 描述 |
| ---------------------- | -------------------- |
| `get <remote> <local>` | 下载一个文件到本地 |
| `mget` | 下载多个文件到本地 |
| `put <local> <remote>` | 上传一个文件到服务器 |
| `mput` | 上传多个文件到服务器 |
| `delete <remote>` | 删除一个文件 |
| `rename <old> <new>` | 重命名一个文件 |
脚本
----
### 样例
<!--rehype:wrap-class=col-span-3-->
以匿名登录为例,将下列脚本代码放入文件 `script` 中:
```bash
user anonymous "\n" # 匿名用户
binary # 将文件传输模式设置为二进制模式,这对于非文本文件(如图片、压缩文件等)来说是必要的,以确保文件在传输过程中不会被更改。
ls <dir> # 进入某个目录
pwd # 输出当前路径
quit # 退出 ftp 连接
```
使用 `ftp` 命令执行脚本文件:
```bash
ftp -n ftp.example.com < script # 使用 -n 选项禁止自动登录,这样会继续执行 user 指令,而不是启动交互式命令行。
```

246
docs/gdb.md Normal file
View File

@ -0,0 +1,246 @@
GDB 备忘清单
===
本清单提供了对 [GDB](https://en.wikipedia.org/wiki/GNU_Debugger) 的入门简要概述,以及 `GDB` 常用示例,完整文档参阅 [Debugging with gdb](https://www.eecs.umich.edu/courses/eecs373/readings/Debugger.pdf),该文档最后有 `GDB index`,可以快速查找命令。
入门
---
<!--rehype:body-class=cols-2-->
### 常用命令
<!--rehype:wrap-class=row-span-2-->
`[]` 内为命令缩写
| 命令 `[缩写]` | 说明 |
|:--------------------|:-----------|
| `help[h]` | **查看命令帮助**。如 `help run` |
| `run[r]` | **运行程序**。可搭配参数使用 |
| `start` | **运行程序,停在第一条执行语句**。可搭配参数使用 |
| `list[l]` | **查看程序源码** |
| `break[b]` | **设置断点**。可指定文件名、函数名和行号等参数来设置断点 |
| `watch` | **设置监视点**。当监视的变量发生更改时,程序会被中断 |
| `delete` | **删除断点等**。可用于删除断点、监视点、`display` 等 |
| `continue[c]` | **继续执行程序**。让程序继续执行,到下一个断点或程序结束 |
| `next[n]` | **单步执行程序,跳过函数调用** |
| `step[s]` | **单步执行程序,进入函数调用** |
| `finish` | **结束当前函数**。返回到函数调用点 |
| `kill` | **杀死当前的调试进程** |
| `backtrace[bt]` | **查看函数调用栈**。它会打印出当前的函数调用栈 |
| `frame[fr]` | **切换栈帧**。以查看该栈帧中的局部变量和参数等 |
| `info` | **查看程序状态信息**。例如断点、寄存器、线程、局部变量等 |
| `show` | **查看 `gdb` 配置信息**。与 `info` 不同, `show` 查看 `GDB` 本身的配置信息 |
| `set` | **设置变量值**。有时指定变量类型才能设置,如 `set *(int*)(&a) = 3` |
| `whatis` | **查看变量、函数类型**。例如,`whatis a` 可以显示变量 `a` 的类型 |
| `ptype` | **查看变量、函数类型**。会显示完整的结构体类型 |
| `print[p]` | **打印变量的值**。例如,`print x` 可以显示变量 `x` 的当前值 |
| `display` | **持续打印变量的值**。与 `print` 类似,但它会在每次停下时自动输出值 |
| `thread` | **切换线程**。例如,`thread 2` 切换到编号为 `2` 的线程 |
| `signal` | **向进程发送信号**。例如,`signal 9` 发送编号为 `9` 的信号 |
<!--rehype:className=left-align-->
### 启动调试
启动进程,不带参数
```bash
# gdb <program>
(gdb) run
```
启动进程,带参数 `<args>`
```bash
# gdb <program>
(gdb) run <args>
```
启动 `gdb` 时传入参数,`run` 就不用传入了
```bash
# gdb --args <program> 1 2 3
(gdb) run
```
通过 `set` 设置参数
```bash
# gdb <program>
(gdb) set args 1 2 3
(gdb) run
```
显示运行时将要或已经传递给程序的参数
```bash
(gdb) show args
```
在启动进程前,添加环境变量
```bash
(gdb) set env DEBUG 1
```
在启动进程前,清除环境变量
```bash
(gdb) unset env DEBUG
```
通过进程号 `123` 连接到正在运行的进程
```bash
(gdb) attach 123
```
### core dump 文件
<!--rehype:wrap-class=row-span-2-->
默认情况下,`linux` 系统中程序崩溃时也不会生成 `core dump` 文件,需要先启用
```bash
ulimit -c unlimited
echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
```
调试 `core` 文件
```bash
gdb program /tmp/core-file
```
### 查看源码
<!--rehype:wrap-class=row-span-2-->
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) list 30` | 查看第 `30` 行为中心的上下 `5` 行源码 |
| `(gdb) list main` | 查看 `main` 函数为中心的上下 `5` 行源码 |
| `(gdb) list file.c:30` | 查看 `file.c` 文件中 `30` 行的源码 |
| `(gdb) list file.c:main` | 查看 `file.c` 文件中 `main` 函数 |
| `(gdb) disassemble` | 查看当前可执行文件的汇编源码 |
| `(gdb) disassemble myfun` | 查看指定函数的汇编源码 |
### 流程控制
<!--rehype:wrap-class=row-span-2-->
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) step[s]` | 执行源码级别的单步进入操作 |
| `(gdb) stepi[si]` | 执行指令级别的单步进入操作 |
| `(gdb) next[n]` | 执行源码级别的单步跳过操作 |
| `(gdb) nexti[ni]` | 执行指令级别的单步跳过操作 |
| `(gdb) continue[c]` | 继续执行,到下一个断点或程序结束 |
| `(gdb) finish` | 运行完当前函数,并返回到函数调用点 |
| `(gdb) return` | 直接退出当前函数,不执行剩下代码块 |
| `(gdb) return expression` | 可以指定返回值的内容 |
| `(gdb) until` | 结束当前循环 |
### 断点命令
<!--rehype:wrap-class=row-span-2-->
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) break main` | 在所有名为 `main` 的函数处设置一个断点 |
| `(gdb) break test.c:12` | 在文件 `test.c` 的第 `12` 行设置断点 |
| `(gdb) break test.c:func` | 在文件 `test.c``func` 函数处设置断点 |
| `(gdb) rbreak regular-expression` | 在正则表达式匹配的函数名上设置断点 |
| `(gdb) break foo if a < 100` | 设置**条件断点**,条件满足才停止 |
| `(gdb) info break` | 列出所有断点位置、编号 |
| `(gdb) delete 2` | 删除指定编号的断点 |
| `(gdb) clear` | 删除刚才停止处的断点 |
| `(gdb) disable 1` | `disable` 指定编号的断点 |
| `(gdb) enable 1` | `enable` 指定编号的断点 |
### watch 命令
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) watch var` | 监视变量,当值变化时会输出新、旧值 |
| `(gdb) info break` | 列出断点,也包括 `watchpoint` |
| `(gdb) i watch` | 只列出 `watchpoint` |
| `(gdb) delete 1` | 删除指定的 `watchpoint` |
### 查看变量
<!--rehype:wrap-class=row-span-2-->
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) info args` | 查看传入参数信息 |
| `(gdb) info local` | 查看当前栈帧(函数)的本地变量 |
| `(gdb) print var` | 查看指定变量的值 |
| `(gdb) print/x var` | 以十六进制输出变量的值 |
| `(gdb) print ptr` | 假设 `int *ptr=&a`,输出变量 `a` 的地址 |
| `(gdb) print *ptr` | 假设 `int *ptr=&a`,输出变量 `a` 的值 |
| `(gdb) print *ptr@5` | 假设 `int ptr[5]`,输出数组的值 |
| `(gdb) display var` | 与 `print` 作用相同,但每次停下来都自动输出变量的值 |
| `(gdb) info display` | 列出所有设置了 `display` 的变量 |
| `(gdb) undisplay 1` | 与 `display` 相反,不能指定变量名,只能是编号 |
| `(gdb) delete display 1` | 与 `undisplay` 类似,通过编号取消显示 |
| `(gdb) whatis var` | 查看变量类型 |
| `(gdb) ptype var` | 比 `type` 更详细,会给出结构体的定义 |
### frame 栈帧
每当一个函数被调用时,一个新的栈帧 `frame` 就会被压入栈中,栈帧包含了该函数的局部变量、参数、返回地址和其他信息,当函数执行完毕后,这个栈帧会被弹出栈并销毁。
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) frame` | 显示当前栈帧和源代码行 |
| `(gdb) backtrace` | 打印出当前正在执行的所有栈帧 |
| `(gdb) backtrace 5` | 只显示最近调用的 `5` 个栈帧 |
| `(gdb) frame 2` | 切换到第 `2` 个栈帧,以查看信息 |
| `(gdb) up` | 切换到上一级调用栈帧 |
| `(gdb) down` | 切换到下一级调用栈帧 |
### 函数调用
`call``print` 调用的函数如果存在全局变量、静态变量的修改,在函数返回后会恢复到调用之前的值,这两个调用不会影响程序的状态
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) call func(a, b)` | 调用指定的函数,不影响主线程变量 |
| `(gdb) print func(a, b)` | 与 `call` 类似 |
| `(gdb) finish` | 结束当前运行的函数 |
### 信号
<!--rehype:wrap-class=row-span-2-->
`linux` 下使用 `kill -l` 查看信号编号与信号名,使用 `info signal` 查看信号的处理方式、描述等:
```bash
(gdb) info signal
Signal Stop Print Pass to program Description
SIGHUP Yes Yes Yes Hangup
SIGINT Yes Yes No Interrupt
SIGQUIT Yes Yes Yes Quit
SIGILL Yes Yes Yes Illegal instruction
```
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) signal SIGKILL` | 向进程发送信号,用信号名或编号表示 |
| `(gdb) signal 9` | 向进程发送信号,用信号名或编号表示 |
| `(gdb) handle <signal> actions` | 指定信号的处理方式,选择如下,可以组合 |
| `stop/nostop` | 收到信号是否停止进程,类似断点 |
| `print/noprint` | 收到信号是否输出消息 |
| `pass/nopass` | 是否将信号传递给程序 |
### 线程
| 命令 | 说明 |
|:--------------------|:-----------|
| `(gdb) info threads` | 列出所有线程,标识当前所在线程 |
| `(gdb) thread 2` | 切换到编号为 `2` 的线程 |
| `(gdb) break file.c:23 thread all` | 在所有线程中相应的行上设置断点 |
| `(gdb) thread apply all command` | 让所有线程执行 `gdb` 命令 |
| `(gdb) thread apply ID1 ID2 command` | 让指定线程执行 `gdb` 命令 |
| `(gdb) set scheduler-locking off` | 所有线程都执行,这是默认值 |
| `(gdb) set scheduler-locking on` | 只让当前线程执行 |
另见
---
- [应用崩溃调试分析](https://carlyleliu.github.io/2022/%E5%BA%94%E7%94%A8%E5%B4%A9%E6%BA%83%E8%B0%83%E8%AF%95%E5%88%86%E6%9E%90)

View File

@ -155,7 +155,7 @@ $ git branch -av
$ git checkout my_branch
```
创建一个名为 `new_branch` 的新分支
创建并切换到新分支`new_branch`
```shell
$ git checkout -b new_branch
@ -389,21 +389,8 @@ $ git mv [existing-path] [new-path]
$ git log --stat -M
```
### git 配置 ssh 代理
<!--rehype:wrap-class=col-span-2-->
```bash
$ cat ~/.ssh/config
Host gitlab.com
# 直接使用 sh**socks 提供的 socks5 代理端口
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
Host github.com
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
```
<!--rehype:className=wrap-text-->
### .gitattributes
<!--rehype:wrap-class=col-span-2 row-span-2-->
```ini
# 设置默认行为,以防人们没有设置 core.autocrlf
@ -435,6 +422,390 @@ special-vendored-path/* linguist-vendored
*.rb linguist-language=Java
```
### git 配置 ssh 代理
```bash
$ cat ~/.ssh/config
Host gitlab.com
# 直接使用 sh**socks 提供的 socks5 代理端口
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
Host github.com
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
```
<!--rehype:className=wrap-text-->
Commit
---
### 改写历史
<!--rehype:wrap-class=row-span-2-->
重写最后的提交消息
```shell
$ git commit --amend -m "new message"
```
修改最新的提交而不更改提交消息
```shell
$ git commit --amend --no-edit
```
### 在 commit log 中显示 GPG 签名
```bash
$ git log --show-signature
```
### 修改远程 Commit 记录
<!--rehype:wrap-class=row-span-5-->
```shell
$ git rebase -i HEAD~3
# 表示要修改当前版本的倒数第三次状态
# 将要更改的记录行首单词 pick 改为 edit
pick 96dc3f9 提交 commit 描述内容 1
pick f1cce8a 提交 commit 描述内容 2
pick 6293516 提交 commit 描述内容 3
# Rebase eeb03a4..6293516 onto eeb03a4
# (3 commands)
#
# Commands:
# p, pick = 使用提交
# r, reword = 使用提交,但编辑提交消息
# e, edit = 使用提交,但停止修改
# s, squash = 使用提交,但融合到先前的提交中
# f, fixup = 像 squash但丢弃此提交的日志消息
# x, exec = 使用 shell 运行命令(该行的其余部分)
# d, drop = 删除提交
```
保存并退出,会弹出下面提示
```shell
# 您现在可以修改提交,使用
#
# git commit --amend
#
# 对更改感到满意后,运行
#
# git rebase --continue
#
# 1. 通过这条命令进入编辑更改 commit保存退出
$ git commit --amend
# 2. 保存退出确认修改,继续执行下面命令,
$ git rebase --continue
# 如果修改多条记录反复执行上面两条命令直到完成所有修改
# 最后,确保没有人提交进行推送,最好不要加 -f 强制推送
$ git push -f origin master
```
### Commit
```shell
$ git commit -v --amend
```
重写最后的提交信息
### 撤销远程记录
```shell
# 撤销一条记录
$ git reset --hard HEAD~1
# 强制同步到远程仓库
$ git push -f origin HEAD:master
```
### 放弃本地修改内容
```shell
# 如果有的修改以及加入暂存区的话
$ git reset --hard
# 还原所有修改,不会删除新增的文件
$ git checkout .
# 下面命令会删除新增的文件
$ git clean -xdf
```
### 把 A 分支的某一个 commit放到 B 分支上
```shell
# 切换到 B 分支
$ git checkout <B>
# 将 A 分支 <hash-id> 的内容 pick 到 B 分支
$ git cherry-pick <hash-id>
```
### 重设第一个 commit
```bash
$ git update-ref -d HEAD
```
把所有的改动都重新放回工作区,并**清空所有的 commit**,这样就可以重新提交第一个 `commit` 了
### 回到远程仓库的状态
```bash
$ git fetch --all && git reset --hard origin/master
```
<!--rehype:className=wrap-text-->
抛弃本地所有的修改,回到远程仓库的状态
### commit 历史中显示 Branch1 有的但是 Branch2 没有 commit
```bash
$ git log Branch1 ^Branch2
```
### git 迁移
- 从原地址克隆一份裸版本库
```bash
$ git clone --bare https://github.com/username/project.git
```
- 然后新建一个地址,比如一下
```bash
$ https://gitee.com/username/newproject.git
```
- 进入project.git这个全裸版本库以镜像推送的方式上传代码到newproject上。
```
$ cd project.git
$ git push --mirror https://gitee.com/username/newproject.git
```
- 使用新地址,直接 Clone 到本地就可以了。
```
$ git clone https://gitee.com/username/newproject.git
```
Git Submodule 子模块
------
### 添加子模块
```bash
$ git submodule add <仓库地址> <子模块路径>
```
### 克隆包含子模块的仓库
```bash
$ git clone <repository_url> --recursive
```
### 更新子模块
```bash
$ git submodule update --remote
```
### 切换到子模块的特定提交
```bash
$ cd <path_to_submodule>
$ git checkout <commit_hash>
```
### 查看当前仓库中的子模块
```bash
$ git submodule status
```
### 初始化子模块
```bash
$ git submodule init
```
### 切换到父仓库的特定提交,并更新子模块
```bash
$ cd ..
$ git checkout <commit_hash>
$ git submodule update --remote
```
### 获取并切换子模块的最新标签
<!--rehype:wrap-class=col-span-2-->
```bash
$ cd <path_to_submodule>
$ git fetch --tags
$ git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
```
### 子模块递归
<!--rehype:wrap-class=col-span-2 row-span-3-->
```bash
# 添加所有已存在的子模块
$ git submodule foreach --recursive git submodule add <repository_url>
# 更新所有子模块到最新提交
$ git submodule foreach --recursive git pull origin master
# 检出特定的子模块路径
$ git submodule foreach --recursive git checkout <branch_name>
# 获取仓库中的所有子模块变化
$ git submodule foreach --recursive git fetch
# 获取并合并子模块的远程分支
$ git submodule foreach --recursive git pull origin <branch_name>
# 将子模块还原到父仓库中的初始提交
$ git submodule foreach --recursive git checkout .
# 获取子模块的更新并忽略本地修改
$ git submodule foreach --recursive git fetch --all
$ git submodule foreach --recursive git reset --hard origin/master
```
### 获取子模块的最新提交
```bash
$ cd <path_to_submodule>
$ git pull
```
### 删除子模块
```bash
$ git submodule deinit <path_to_submodule>
$ git rm <path_to_submodule>
```
### 切换子模块的分支
```bash
$ cd <path_to_submodule>
$ git checkout <branch_name>
```
### 初始化并更新所有子模块
```bash
$ git submodule init
$ git submodule update
```
### 切换子模块的特定标签
```bash
$ cd <path_to_submodule>
$ git checkout tags/<tag_name>
```
Config 设置
---
### 查看配置的信息
```bash
$ git help config
```
获取帮助信息,查看修改个人信息的参数
### 忽略文件的权限变化
```shell
git config core.fileMode false
```
不再将文件的权限变化视作改动
### 配置自动换行
```bash
$ git config --global core.autocrlf input
```
自动转换坑太大提交到git是自动将换行符转换为 `lf`
### 获取帮助信息
```bash
$ git config --list
```
### 中文乱码的解决方案
```shell
$ git config --global core.quotepath false
```
### 删除全局设置
```bash
$ git config --global --unset <entry-name>
```
### 配置 http 和 socks 代理
<!--rehype:wrap-class=col-span-2 row-span-2-->
```bash
# 查看代理
$ git config --global http.proxy
$ git config --global https.proxy
$ git config --global socks.proxy
# 设置代理
# 适用于 privoxy 将 socks 协议转为 http 协议的 http 端口
$ git config --global http.proxy http://127.0.0.1:1080
$ git config --global https.proxy http://127.0.0.1:1080
$ git config --global socks.proxy 127.0.0.1:1080
# 取消代理
$ git config --global --unset http.proxy
$ git config --global --unset https.proxy
$ git config --global --unset socks.proxy
# 只对 github.com 设置代理
$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
$ git config --global https.https://github.com.proxy socks5://127.0.0.1:1080
# 取消 github.com 代理
$ git config --global --unset http.https://github.com.proxy
$ git config --global --unset https.https://github.com.proxy
```
### Git 别名
```shell
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
```
配置好后,再输入 `git` 命令的时候就不用再输入一大段了,例如我们要查看状态,只需:
```bash
$ git st
```
也可以看看:[更多别名](https://gist.github.com/johnpolacek/69604a1f6861129ef088)
### 设置大小写敏感
```shell
# 查看git 的设置
$ git config --get core.ignorecase
# 设置大小写敏感
$ git config core.ignorecase false
# 远程有俩相同目录,通过这种方式清除掉,然后提交记录
$ git rm -r --cached <目录/文件>
```
Git 技巧
------
@ -444,7 +815,7 @@ Git 技巧
```shell
$ git branch -m <new>
$ git branch -m <old> <new> #重命名分支
$ git branch -m <old> <new> #重命名分支
```
- **推送**并重置
@ -488,7 +859,7 @@ $ git log --pretty=oneline --graph --decorate --all
列出所有分支及其上游
```shell
$ git branch -vv
$ git branch -vv
```
快速切换到上一个分支
@ -512,109 +883,7 @@ $ git checkout <branch> -- <file>
删除本地存在远程不存在的分支
```shell
git remote prune origin
```
### Commit
```shell
$ git commit -v --amend
```
重写最后的提交信息
### 忽略文件的权限变化
```shell
git config core.fileMode false
```
不再将文件的权限变化视作改动
### Git 别名
```shell
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
```
也可以看看:[更多别名](https://gist.github.com/johnpolacek/69604a1f6861129ef088)
### 设置大小写敏感
```shell
# 查看git 的设置
$ git config --get core.ignorecase
# 设置大小写敏感
$ git config core.ignorecase false
# 远程有俩相同目录,通过这种方式清除掉,然后提交记录
$ git rm -r --cached <目录/文件>
```
### 修改远程 Commit 记录
<!--rehype:wrap-class=row-span-4-->
```shell
$ git rebase -i HEAD~3
# 表示要修改当前版本的倒数第三次状态
# 将要更改的记录行首单词 pick 改为 edit
pick 96dc3f9 提交 commit 描述内容 1
pick f1cce8a 提交 commit 描述内容 2
pick 6293516 提交 commit 描述内容 3
# Rebase eeb03a4..6293516 onto eeb03a4
# (3 commands)
#
# Commands:
# p, pick = 使用提交
# r, reword = 使用提交,但编辑提交消息
# e, edit = 使用提交,但停止修改
# s, squash = 使用提交,但融合到先前的提交中
# f, fixup = 像 squash但丢弃此提交的日志消息
# x, exec = 使用 shell 运行命令(该行的其余部分)
# d, drop = 删除提交
```
保存并退出,会弹出下面提示
```shell
# 您现在可以修改提交,使用
#
# git commit --amend
#
# 对更改感到满意后,运行
#
# git rebase --continue
#
# 1. 通过这条命令进入编辑更改 commit保存退出
$ git commit --amend
# 2. 保存退出确认修改,继续执行下面命令,
$ git rebase --continue
# 如果修改多条记录反复执行上面两条命令直到完成所有修改
# 最后,确保没有人提交进行推送,最好不要加 -f 强制推送
$ git push -f origin master
```
### 撤销远程记录
```shell
# 撤销一条记录
$ git reset --hard HEAD~1
# 强制同步到远程仓库
$ git push -f origin HEAD:master
```
### 放弃本地修改内容
```shell
# 如果有的修改以及加入暂存区的话
$ git reset --hard
# 还原所有修改,不会删除新增的文件
$ git checkout .
# 下面命令会删除新增的文件
$ git clean -xdf
$ git remote prune origin
```
### 获取最近一次提交的 Hash
@ -632,32 +901,6 @@ $ git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -
```
<!--rehype:className=wrap-text-->
### 把 A 分支的某一个 commit放到 B 分支上
```shell
# 切换到 B 分支
$ git checkout <B>
# 将 A 分支 <hash-id> 的内容 pick 到 B 分支
$ git cherry-pick <hash-id>
```
### 回到远程仓库的状态
```bash
$ git fetch --all && git reset --hard origin/master
```
<!--rehype:className=wrap-text-->
抛弃本地所有的修改,回到远程仓库的状态
### 重设第一个 commit
```bash
$ git update-ref -d HEAD
```
把所有的改动都重新放回工作区,并**清空所有的 commit**,这样就可以重新提交第一个 `commit` 了
### 查看冲突文件列表
```bash
@ -685,12 +928,6 @@ $ git diff <commit-id> <commit-id>
git diff --cached
```
### 中文乱码的解决方案
```shell
$ git config --global core.quotepath false
```
### 展示暂存区、工作区和最近版本的不同
```bash
@ -733,14 +970,6 @@ $ git remote show origin
$ git describe --tags --abbrev=0
```
### 查看某段代码是谁写的
```bash
$ git blame <file-name>
```
`blame` 的意思为`责怪`,你懂的。
### 修改作者名
```bash
@ -748,12 +977,6 @@ $ git commit --amend --author='Author Name <email@address.com>'
```
<!--rehype:className=wrap-text-->
### 修改远程仓库的 url
```bash
$ git remote set-url origin <URL>
```
### 增加远程仓库
```bash
@ -767,12 +990,6 @@ $ git remote add origin <remote-url>
$ git remote -v
```
### 查看两个星期内的改动
```bash
$ git whatchanged --since='2 weeks ago'
```
### 从 stash 中拿出某个文件的修改
```bash
@ -846,18 +1063,6 @@ $ git clean -X -f
$ git status --ignored
```
### commit 历史中显示 Branch1 有的但是 Branch2 没有 commit
```bash
$ git log Branch1 ^Branch2
```
### 在 commit log 中显示 GPG 签名
```bash
$ git log --show-signature
```
### 新建并切换到新分支上,同时这个分支没有任何 commit
```bash
@ -872,35 +1077,6 @@ $ git checkout --orphan <branch-name>
$ git show <branch-name>:<file-name>
```
### 配置 http 和 socks 代理
<!--rehype:wrap-class=row-span-4-->
```bash
# 查看代理
$ git config --global http.proxy
$ git config --global https.proxy
$ git config --global socks.proxy
# 设置代理
# 适用于 privoxy 将 socks 协议转为 http 协议的 http 端口
$ git config --global http.proxy http://127.0.0.1:1080
$ git config --global https.proxy http://127.0.0.1:1080
$ git config --global socks.proxy 127.0.0.1:1080
# 取消代理
$ git config --global --unset http.proxy
$ git config --global --unset https.proxy
$ git config --global --unset socks.proxy
# 只对 github.com 设置代理
$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
$ git config --global https.https://github.com.proxy socks5://127.0.0.1:1080
# 取消 github.com 代理
$ git config --global --unset http.https://github.com.proxy
$ git config --global --unset https.https://github.com.proxy
```
### clone 最新一次提交
```bash
@ -934,14 +1110,6 @@ git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads
最新的放在最上面
### 在 commit log 中查找相关内容
```bash
git log --all --grep='<given-text>'
```
通过 grep 查找given-text: 所需要查找的字段
### 把暂存区的指定 file 放到工作区中
```bash
@ -960,10 +1128,32 @@ Host github.com
```
<!--rehype:className=wrap-text-->
git 代码统计
### Fork仓库同步上游仓库
- 设置上游仓库
```shell
$ git remote add upstream https://github.com/jaywcjlove/reference.git
```
- 本地项目操作
```shell
$ git fetch upstream # 获取上游仓库更新
$ git stach # 暂存本地修改(如果有)
$ git branch -a # 列出所有远程仓库地址(非必须)
$ git rebase remotes/upstream/main # 使用远程仓库的提交记录来重写本地提交记录
$ git push -f # 强制推送到远程(github)仓库
$ git stach pop # 恢复暂存的本地修改(如果有)
```
<!--rehype:className=style-timeline-->
统计查询
---
### 查看 git 上的个人代码量
<!--rehype:wrap-class=row-span-2-->
- `username` 需要改成自己的
@ -971,8 +1161,10 @@ git 代码统计
git log --author="username" --pretty=tformat: --numstat | awk \
'{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
```
<!--rehype:className=wrap-text-->
### 统计每个人增删行数
<!--rehype:wrap-class=row-span-2-->
```bash
git log --format='%aN' | sort -u |\
@ -980,6 +1172,7 @@ git log --format='%aN' | sort -u |\
git log --author="$name" --pretty=tformat: --numstat | awk \
'{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
```
<!--rehype:className=wrap-text-->
### 查看仓库提交者排名
@ -988,6 +1181,7 @@ git log --format='%aN' | sort -u |\
```bash
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 10
```
<!--rehype:className=wrap-text-->
### 提交数统计
@ -995,6 +1189,46 @@ git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 10
git log --oneline | wc -l
```
### 查看某段代码是谁写的
```bash
$ git blame <file-name>
```
`blame` 的意思为`责怪`,你懂的。
### 查看两个星期内的改动
```bash
$ git whatchanged --since='2 weeks ago'
```
### 在 commit log 中查找相关内容
```bash
$ git log --all --grep='<given-text>'
```
通过 grep 查找given-text: 所需要查找的字段
### Git 仓库的大小
```bash
$ git ls-files | xargs -r du -hs
```
### Git 仓库的总大小
```bash
$ git count-objects -vH
```
### 查询历史体积大的 10 个文件
```bash
$ git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {print substr($0,6)}' | sort --numeric-sort --key=2 --reverse | head -n 10 | cut -c 13-
```
Conventional Commmits
----

View File

@ -155,6 +155,27 @@ jobs:
- run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}
```
### 定时触发
可以使用 cron 表达式配置周期性任务,定时执行
```yaml
name: schedule task
# 要注意时差,最好手动指定时区
env:
TZ: Asia/Shanghai
on:
# push 到 main 分支时执行任务
push:
branches:
- main
# 每隔两小时自动执行任务
schedule:
- cron: '0 0/2 * * *'
```
### 指定每项任务的虚拟机环境
```yml
@ -260,21 +281,21 @@ env:
#### 操作符
- `( )` _(逻辑分组)_
- `[ ]` _(指数)_
- `.` _(属性取消引用)_
- `!` _(不是)_
- `<` _(于)_
- `[ ]` _(索引)_
- `.` _(属性引用)_
- `!` _()_
- `<` _(于)_
- `<=` _(小于或等于)_
- `>` _(比...更棒)_
- `>` _(大于)_
- `>=` _(大于或等于)_
- `==` _(平等的)_
- `!=` _(不等)_
- `==` _(相等)_
- `!=` _(不等)_
- `&&` _(和)_
- `||` _(或)_
- `||` _(或)_
<!--rehype:className=cols-2 style-none-->
### Github 上下文
<!--rehype:wrap-class=col-span-2-->
<!--rehype:wrap-class=col-span-2 row-span-3-->
属性名称 | 类型 | 描述
---- | ---- | ----
@ -300,7 +321,49 @@ env:
[Github 上下文](https://help.github.com/cn/actions/reference/context-and-expression-syntax-for-github-actions)是访问有关工作流运行、运行器环境、作业和步骤的信息的一种方式
### 直接常量
作为表达式的一部分,可以使用 `boolean`, `null`, `number` 或 `string`数据类型
```yml
env:
myNull: ${{ null }}
myBoolean: ${{ false }}
myIntegerNumber: ${{ 711 }}
myFloatNumber: ${{ -9.2 }}
myHexNumber: ${{ 0xff }}
myExponentialNumber: ${{ -2.99e-2 }}
myString: Mona the Octocat
myStringInBraces: ${{ 'It''s source!' }}
```
### 函数 contains
使用字符串的示例
```js
contains('Hello world', 'llo') // 返回 true
```
使用对象过滤器的示例返回 true
```js
contains(github.event.issue.labels.*.name, 'bug')
```
<!--rehype:className=wrap-text -->
另见: [函数 contains](https://docs.github.com/cn/actions/learn-github-actions/expressions#contains)
### 函数 startsWith
```js
startsWith('Hello world', 'He') // 返回 true
```
另见: [函数 startsWith](https://docs.github.com/cn/actions/learn-github-actions/expressions#startswith),此函数不区分大小写
### 默认环境变量
<!--rehype:wrap-class=row-span-8 col-span-2-->
环境变量 | 描述
---- | ----
@ -326,49 +389,6 @@ env:
另见: [默认环境变量](https://docs.github.com/cn/actions/learn-github-actions/environment-variables#default-environment-variables)
### 直接常量
<!--rehype:wrap-class=row-span-2-->
作为表达式的一部分,可以使用 `boolean`, `null`, `number` 或 `string`数据类型
```yml
env:
myNull: ${{ null }}
myBoolean: ${{ false }}
myIntegerNumber: ${{ 711 }}
myFloatNumber: ${{ -9.2 }}
myHexNumber: ${{ 0xff }}
myExponentialNumber: ${{ -2.99e-2 }}
myString: Mona the Octocat
myStringInBraces: ${{ 'It''s source!' }}
```
### 函数 contains
<!--rehype:wrap-class=row-span-2-->
使用字符串的示例
```js
contains('Hello world', 'llo') // 返回 true
```
使用对象过滤器的示例返回 true
```js
contains(github.event.issue.labels.*.name, 'bug')
```
<!--rehype:className=wrap-text -->
另见: [函数 contains](https://docs.github.com/cn/actions/learn-github-actions/expressions#contains)
### 函数 startsWith
```js
startsWith('Hello world', 'He') // 返回 true
```
另见: [函数 startsWith](https://docs.github.com/cn/actions/learn-github-actions/expressions#startswith),此函数不区分大小写
### 函数 format
```js
@ -382,7 +402,7 @@ format('{{Hello {0} {1} {2}!}}', 'Mona', 'the', 'Octocat')
### 函数 join
```js
join(github.event.issue.labels.*.name, ', ')
join(github.event.issue.labels.*.name,', ')
// 也许返回 'bug, help wanted'.
```
@ -583,14 +603,15 @@ npm token revoke <id|token> # 撤销
Artifacts 是 GitHub Actions 为您提供持久文件并在运行完成后使用它们或在作业(文档)之间共享的一种方式。
要创建工件并使用它,您将需要不同的操作:上传和下载
- 要创建工件并使用它,您将需要不同的操作:上传和下载
要上传文件或目录,您只需像这样使用它:
```yml
steps:
- uses: actions/checkout@v2
- run: mkdir -p path/to/artifact
- run: echo hello > path/to/artifact/a.txt
- run: echo hello > path/to/file/a.txt
- uses: actions/upload-artifact@v2
with:
name: my-artifact

594
docs/github-copilot.md Normal file
View File

@ -0,0 +1,594 @@
Github Copilot 备忘清单
===
这是开始使用 [Github Copilot](https://code.visualstudio.com/docs/editor/github-copilot) 的快速参考指南
一、准备工作
----
### 1、账号注册
> 需要先拥有一个Github账号并订阅Copilot。
事项 | 说明
:-|-
Github 账号 | [注册地址](https://github.com/signup)
订阅 Github Copilot | [订阅地址](https://github.com/features/copilot)
### 2、安装Vscode插件
<!--rehype:wrap-class=col-span-1 row-span-1-->
> 在扩展商店中搜索安装下面插件
插件名称 | 功能
:-|-
`GitHub Copilot`|编辑器中进行代码补全提示
`GitHub Copilot Chat`|插件栏可以与copilot对话
### 3、Vscode 中登陆 Github 账号
<!--rehype:wrap-class=col-span-1 row-span-1-->
- 安装后,点击右下角的 `GitHub Copilot` 插件图标,然后点击 `Sign in to GitHub` 登陆。
- 或者,点击工具栏中的 `Accounts` 图标,然后点击 `使用 Github 登陆以使用Github Copilot` 进行登陆。
### 4、Copilot 订阅方案
<!--rehype:wrap-class=col-span-2 row-span-1-->
方案 | 价格 | 特性
:-|-|-
Copilot Individual | 10美元/人/月 <br> (学生, 教师, 开源项目贡献者 免费) | 代码补全, 聊天机器人
Copilot Business| 19美元/人/月 |代码补全, 聊天机器人, 命令行工具, 安全漏洞筛查, 代码参考, 公共代码筛查, 知识产权, 企业安全与隐私保障
Copilot Enterprise| 39美元/人/月 | Business 特性 + 私有代码库的个性化聊天 + 文档搜索总结 + Git Pull Request 摘要 + 代码审查 + 模型微调
<!--rehype:className=show-header left-align-->
### 5、Copilot 使用入口
<!--rehype:wrap-class=col-span-1 row-span-1-->
|名称 | 描述 |
|-|-|
Inline Suggestions| 在编辑器中紧邻光标所在位置显示建议
Completions Panel| 在编辑器中展示完整的建议列表
Inline Chat| 在编辑器中紧邻光标所在位置发起对话
Editor Chat| 在编辑器中打开完整的对话界面
Silde Chat| 在编辑器的侧边栏打开对话界面
Quick Chat| 在顶部唤起对话界面
二、提示技巧
----
### 提示之禅
<!--rehype:wrap-class=col-span-1 row-span-1-->
> 你与 `copilot` 之间的关系,就是作家和插画师的关系。
> 你只有尽可能的全面、干练、清晰的描述你的故事(即 `上下文`)。
> `copilot` 才能根据你的故事画出精美的插画 (即 `代码` )。
### 提示技巧
<!--rehype:wrap-class=col-span-1 row-span-1-->
- 1⃣ 提供上下文信息
- 2⃣ 上下文可被预测
### 实战教程
- [Youtube GitHub Copilot Series](https://www.youtube.com/playlist?list=PLj6YeMhvp2S5_hvBl2SE-7YCHYlLQ0bPt)
- [Pragmatic techniques to get the most out of GitHub Copilot](https://www.youtube.com/watch?v=CwAzIpc4AnA)
- [How I used GitHub Copilot to build a browser extension](https://github.blog/2023-05-12-how-i-used-github-copilot-to-build-a-browser-extension/)
### 上下文信息的种类
<!--rehype:wrap-class=col-span-2 row-span-1-->
类型|说明
-|-
文件|Copilot会查看编辑器中当前和紧邻打开的文件。
注释|Copilot会根据紧邻的注释为你的代码提供帮助和建议。如 docstring, 块注释, 行注释之类。
命名|良好的命名能帮助Copilot更好地理解你的代码如函数名, 变量名, 文件名等
代码|Copilot会查看你的代码和它附近的代码以生成帮助你的建议。
<!--rehype:className=show-header left-align-->
### 上下文:文件
> Copilot会查看编辑器中当前和紧邻打开的文件以分析上下文并提供适当的建议。
---
> - 1、避免打开过多的文件以便Copilot能够更好地理解你的代码。
> - 2、打开的文件尽量相关且有共性。
> - 3、如果是新项目可以打开一些模版代码、数据文件以及参考文档等相关示例文件。以便Copilot能够更好地理解你的期望。等已经开发了一些代码后这些示例文件就可以删除了。
### 上下文: 注释: 顶部注释
创建一个新文件时,在文件顶部添加注释,描述你的需求。这对 Copilot 很有帮助。
\* 下面说明将使用`...`表示copilot开始生成的位置
```python
# Download file from an URL and analyze its content
# Details:
# * Download the file from an URL
# * Save the downloaded files into `./download` folder
# * Use `filetype` of the file to specify how to parse
# * Filetype can be `.pdf`, `.html`, `.epub`, `.md` and `.txt`
# * Use NLP or OCR to get the file content
# * Tokenize the file content and get the statistics result
import ...
```
### 上下文: 注释: 行内注释
在每个函数上面或重要代码块的上面添加注释,以帮助 Copilot 了解你代码中的一些意图或问题。
\* 下面说明将使用`...`表示copilot开始生成的位置
函数上方添加注释说明
```python
# parse the JSON string into User object
def ...
```
---
代码添加注释说明
```python
# ...
api_sever = FastApi(...)
# starting the API Sever, enable ssl, bind to 8443 port
...
```
### 上下文: 注释: Docstring
<!--rehype:wrap-class=col-span-1 row-span-2-->
有时候当你已经拥有详细设计文档,但未编写功能代码时,可以直接使用 docstring 中的描述来让 copilot 生成代码。
```python
def send_email(to_address: Email, subject: str, content: HTML): -> StatusCode:
"""
Send email to specified address
Parameters
----------
to_address : Email
The email address to send to
subject : str
The email subject
content : HTML
The email content
Returns
-------
StatusCode
The sending result
"""
...
```
### 上下文: 注释: 提问
> 如果你不想切换到 copilot chat 时,注释也可以用于提问。
```python
# Q: What is the difference between `os.path.join` and `pathlib.PurePath`?
# A: ...
```
### 上下文: 注释: Todo
> 你也可以让 copilot 为你生成 `todo` 列表来评估工作量。
```python
# Parse the json file into a Talks object
# TODO:
# -[ ] 1. ...
```
### 上下文: 命名
> 你的命名应该足够明确以便于 Copilot 理解你的意图
#### bad case
```python
a = 60
def send(dict):
...
class data:
...
```
#### good case
```python
timeout = 60
def send_email(to_address: Email, subject: str, content: HTML): -> StatusCode:
...
class Email:
...
```
### 上下文: 代码: 代码示例
> 提供片段代码示例,以帮助 Copilot 更好地开始新的开发任务。
>
> - 使用的框架与库
> - 代码风格
> - 算法逻辑
```python
from typing import List
from typing import Optional
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user_account"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(30))
fullname: Mapped[Optional[str]]
addresses: Mapped[List["Address"]] = relationship(
back_populates="user", cascade="all, delete-orphan"
)
def __repr__(self) -> str:
return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
# Email Address
...
```
### 上下文: 代码: 数据示例
> 提供片段数据示例,以帮助 Copilot 更好地开始新的开发任务。
>
> - 数据结构与类型
> - 命名
> - 值处理逻辑
```python
dailogs = [
{
"timestamp": "May 1, 2023 11:00:00",
"text": "Hello, World!",
"speaker": "Jack",
},
{
"timestamp": "May 1, 2023 11:01:00",
"text": "Hello, Copilot!",
"speaker": "Copilot",
},
]
# Parse the json object into `Dialog` object
...
```
三、快捷键
----
<!--rehype:body-class=cols-2-->
对于mac用户建议修改alt相关的快捷键因为mac上的alt+字母键有可能被输入法使用了。若有自定义过输入法`keylayout`,则忽略这句话。
另外没有快捷键的命令,可以唤起`命令面板`后输入查询关键字筛选后执行。
### Github Copilot
<!--rehype:wrap-class=col-span-2 row-span-1-->
#### Copilot 中 Inline Suggestions 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`editor.action.inlineSuggest.trigger`| 触发内联建议 | `alt+\` | `alt+\`
`editor.action.inlineSuggest.showPrevious`| 显示上一个内联建议 | `alt+[`| `alt+[`
`editor.action.inlineSuggest.showNext`| 显示下一个内联建议 | `alt+]`| `alt+]`
`editor.action.inlineSuggest.acceptNextWord`| 接受内联建议的下一个字 | `ctl+right`| `cmd+right`
`editor.action.inlineSuggest.commit`| 接受内联建议 | `Tab`| `Tab`
`editor.action.inlineSuggest.hide`| 隐藏内联建议 | `Esc`| `Esc`
`editor.action.inlineSuggest.acceptNextLine`| 接受内联建议的下一行 | - | -
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot 中 Completions Panel 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`github.copilot.generate`| 打开 `Completions Panel` | `ctrl+enter`| `ctrl+enter`
`github.copilot.acceptCursorPanelSolution`| 接受`Completions Panel`光标所在的建议 | `ctrl+/` | `ctrl+/`
`github.copilot.previousPanelSolution`| 查看上一个建议 | `alt+[`| `alt+[`
`github.copilot.nextPanelSolution`| 查看下一个建议 | `alt+]`| `alt+]`
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot 中 其他命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`github.copilot.toggleCopilot`| 启用/禁用 Copilot 补全提示 | -| -
`github.copilot.collectDiagnostics`| 收集诊断信息 | -| -
`github.copilot.openLogs`| 打开日志窗口 | -| -
`github.copilot.sendFeedback`| 打开社区网站 | -| -
`github.copilot.signIn`| 登陆 | -| -
<!--rehype:className=show-header wrap-text left-align-->
### Github Copilot Chat
<!--rehype:wrap-class=col-span-2 row-span-1-->
#### Copilot Chat 中 Chat 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`github.copilot.interactiveEditor.explain`|进行解释(选中内容或光标所在的文件)|-|-
`github.copilot.terminal.explainTerminalSelection`|对此进行解释(需要在终端中使用)|-|-
`github.copilot.terminal.explainTerminalSelectionContextMenu`|Copilot: 对此进行解释(需要在终端中使用)|鼠标右键菜单|鼠标右键菜单
`github.copilot.terminal.explainTerminalLastCommand`|对终端中最后一个命令进行解释(需要在终端中使用)|-|-
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot Chat 中 Inline Chat 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`inlineChat.start`|代码内聊天| - | -
`github.copilot.interactiveEditor.generate`|在此生成(在光标所在位置唤起inline chat的`/generate`功能)| - | -
`github.copilot.interactiveEditor.generateDocs`|生成文档| - | -
`github.copilot.interactiveEditor.generateTests`|生成测试| - | -
`github.copilot.interactiveEditor.fix`|修复此| - | -
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot Chat 中 Quick Chat 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`workbench.action.quickchat.toggle`|开启/关闭 Quick Chat|`shift+cmd+i`|`shift+cmd+i`
`github.copilot.terminal.suggestCommand`|建议终端命令|`ctrl+i`(仅在终端起作用)|`cmd+i`
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot Chat 中 Editor Chat 相关命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`workbench.action.openChat.copilot`|打开编辑器聊天|-|-
<!--rehype:className=show-header wrap-text left-align-->
#### Copilot Chat 其他命令
| 命令 |说明 | 快捷键 | Mac 快捷键 |
|-|:-|:-|:-|
`github.copilot.interactiveSession.feedback`|打开github Issues|-|-
`github.copilot.debug.workbenchState`|日志工作台状态|-|-
`github.copilot.ghpr.applySuggestion`|为Github Pull Request提供代码建议|-|-
<!--rehype:className=show-header wrap-text left-align-->
四、Copilot Chat 的 Slash Commands 使用技巧
----
> 在聊天对话框中可以通过`/`开头的命令来与Copilot Chat进行交互。
### Slash Commands 示例
<!--rehype:wrap-class=col-span-1 row-span-1-->
#### Slash Commands 由四部分构成
|元素|说明|
|-|-|
|- Agent | 指定Agent, 符号为 `@`, 可选
|- Commands | 指定命令, 符号为 `/`, 可选
|- 变量 | 引用内容, 符号为 `#`, 可选
|- 用户输入的指令 | 可选
#### 例子
```
/explain def helloworld():...
@vscode /api 请解释 inlineChat.start 的作用
@workspace /explain def helloworld():...
在每一行代码末尾添加注释进行解释
```
#### Agent
| Agent |说明 |
|- |:-|
@vscode |vscode命令与插件的问题
@workspace|项目workspace相关的问题
### Inline Chat 的 Slash Commands
<!--rehype:wrap-class=col-span-1 row-span-1-->
---
> 通过命令 `inlineChat.start` 触发 `inline chat` 后使用
|命令 |说明 |
|- |:-|
/doc |在此添加文档注释
/explain |对选中的代码进行解释
/fix |修复此选中的代码
/tests |为选中的代码生成单元测试
---
> 通过命令 `github.copilot.interactiveEditor.generate` 触发
|命令 |说明 |
|- |:-|
/generate |在此生成, 该命令无法由用户输入
---
> 当然也可以直接选中区域然后在inline chat中输入指令执行 copilot会对选中区域进行指令操作
|常用指令|
| - |
|在每一行代码末尾添加注释进行解释|
|使代码满足PEP484要求|
<!--rehype:className=show-header wrap-text left-align-->
### Silde Chat 的 Slash Commands
<!--rehype:wrap-class=col-span-1 row-span-2-->
> 通过命令 `workbench.action.chat.openInSidebar` 触发 `chat` 后使用
> 或点击侧边栏上的Copilot聊天按钮
> 在Chat输入框中还允许指定Agent(即环境)
#### Slash Commands
|命令 |说明 |
|- |:-|
/api |回答vscode扩展插件开发的问题
/explain |对选中的代码进行解释
/fix |修复此选中的代码
/new |创建新项目workspace
/newNotebook |创建新的Jupyter Notebook
/terminal |解释命令行里的命令
/tests |为选中的代码生成单元测试
/help |帮助说明
/clear |清除会话
### `/terminal`特有的变量, 以`#`号开头
> 仅在`/terminal`命令中可用
| 变量 |说明 |
|-|:-|
`#terminalLastCommand`|最后一次执行的终端命令
`#terminalSelection`|选中的终端命令
### 的 Slash Commands
<!--rehype:wrap-class=col-span-1 row-span-1-->
- Quick Chat 与 Chat 的 Slash Commands相同
- Editor Chat 与 Chat 的 Slash Commands相同
五、参数设置
----
打开vscode 命令面板, 输入`Preferences:Open Settings` 打开配置文件,在文件模式下配置相关参数.
完整参数说明可以查看 `copilot``copilot chat` 两个[插件目录](https://code.visualstudio.com/docs/editor/extension-marketplace#_where-are-extensions-installed)下的 `package.json` 文件获知。
### 完整配置参考
```json
// settings.json
{
// ...
"github.copilot.chat.welcomeMessage": "always",
"github.copilot.chat.localeOverride": "zh-CN",
"github.copilot.editor.enableCodeActions": true,
"github.copilot.editor.iterativeFixing": true,
"github.copilot.editor.enableAutoCompletions": true,
"github.copilot.enable": {
"plaintext": false,
"ini": false,
"markdown": true,
"*": true
},
"github.copilot.advanced": {
"length": 4000,
"inlineSuggestCount": 5,
"top_p": 1,
"temperature": "0.8",
"listCount": 10,
"stops": {
"*": [
"\n\n\n"
],
"python": [
"\ndef ",
"\nclass ",
"\nif ",
"\n\n#"
]
},
"debug.showScores": true,
"indentationMode": {
"python": false,
"javascript": false,
"javascriptreact": false,
"jsx": false,
"typescript": false,
"typescriptreact": false,
"go": false,
"ruby": false,
"*": true
}
}
// ...
}
```
### 参数说明
<!--rehype:wrap-class=col-span-2 row-span-1-->
#### 代理参数
|设置参数 |值类型|说明 |
|:--|:--|:--|
`"http.proxy"`| string |配置网络代理地址
#### Copilot Chat 参数
|设置参数 |值类型|说明 |
|:--|:--|:--|
`"github.copilot.chat.localeOverride"`| string | 设置Copilot本地语言
`"github.copilot.chat.welcomeMessage"`| string |Copilot Chat 是否显示欢迎语<br>`first`: 仅第一次启动时, `always`: 总是, `never`: 从不
#### Copilot 基本参数
|设置参数 |值类型|说明 |
|:--|:--|:--|
`"editor.inlineSuggest.enabled"`| boolean |启用内联建议
`"github.copilot.editor.iterativeFixing"`| boolean| 允许 Copilot 提供迭代修复建议
`"github.copilot.editor.enableAutoCompletions"`| boolean |允许 Copilot 提供自动补全
`"github.copilot.editor.enableCodeActions"`| boolean|允许 Copilot 代码操作建议,这些操作可能包括重构代码、优化代码结构、修复可错误等
#### 设置 Copilot 生效的文件类型
|设置参数 |值类型|说明 |
|:--|:--|:--|
`"github.copilot.enable"`| json |请将 `"*": true` 放到末尾 <br>[语言](https://code.visualstudio.com/docs/languages/identifiers)后设置 `false` 表示禁用copilot, 设置 `true` 表示启用
#### Copilot 高级参数
> github.copilot.advanced 可以控制模型参数,最终影响到代码生成. 其值为json
|设置参数 |值类型|说明 |
|:--|:--|:--|
`"length"`| integer | 生成的代码字数, 默认为 `500`
`"top_p"`| number | 控制模型候选范围,默认值为 `1`,值范围为`0.0~1.0`
`"temperature"`| string | 控制模型的创造性,默认值为 `""`,值越大越不可预测,值范围为`0.0~1.0`
`"inlineSuggestCount"`| integer | 内联提示的个数, 默认为`3`
`"listCount"`| integer | 控制`Completions Panel`中建议个数,默认为 `10`
`"stops"`| json | 控制模型代码生成时停止的标志,可以按[语言](https://code.visualstudio.com/docs/languages/identifiers)来控制
`"indentationMode"`| json | 指定[语言](https://code.visualstudio.com/docs/languages/identifiers)是否采用该语言的缩近模式由此可能会与stops冲突比如采用`\{\}`缩近时,设置该参数时需要综合考虑
`"debug.showScores"`| boolean | 在代码建议列表中显示每个建议的分数
<!--rehype:className=wrap-text -->
END... ENJOY YOURSELF
----
> 欢迎大家添加新内容,校对、错误请指正。📮邮箱: <a href="mailto:jussker@outlook.com">jussker@outlook.com</a>
参考来源
----
\[1\]: [GitHub Copilot in VS Code](https://code.visualstudio.com/docs/editor/github-copilot)
\[2\]: [How to use GitHub Copilot: Prompts, tips, and use cases](https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/)
\[3\]: [GitHub Copilot Official Website](https://github.com/features/copilot)
\[4\]: [GitHub Copilot Series (Youtube)](https://www.youtube.com/playlist?list=PLj6YeMhvp2S5_hvBl2SE-7YCHYlLQ0bPt)
\[5\]: [Pragmatic techniques to get the most out of GitHub Copilot (Youtube)](https://www.youtube.com/watch?v=CwAzIpc4AnA)
\[6\]: [How I used GitHub Copilot to build a browser extension](https://github.blog/2023-05-12-how-i-used-github-copilot-to-build-a-browser-extension)
\[7\]: [Visual Studio Code, Where are extensions installed?](https://code.visualstudio.com/docs/editor/extension-marketplace#_where-are-extensions-installed)
\[8\]: [Visual Studio Code, Language Identifiers](https://code.visualstudio.com/docs/languages/identifiers)

View File

@ -27,6 +27,18 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`G` `W` | 转到 `Wiki` 选项卡
<!--rehype:className=shortcuts-->
### 源码浏览
快捷键 | 说明
:- | -
`T` | 激活文件查找器
`L` | 跳转到代码中的一行
`W` | 切换到新的分支或标签
`Y` | 将 URL 扩展为其规范形式
`I` | 显示或隐藏对差异的评论
`B` | 打开责备视图
<!--rehype:className=shortcuts-->
### 源代码编辑
快捷键 | 说明
@ -41,18 +53,6 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`Ctrl` `Y` | 重做
<!--rehype:className=shortcuts-->
### 源码浏览
快捷键 | 说明
:- | -
`T` | 激活文件查找器
`L` | 跳转到代码中的一行
`W` | 切换到新的分支或标签
`Y` | 将 URL 扩展为其规范形式
`I` | 显示或隐藏对差异的评论
`B` | 打开责备视图
<!--rehype:className=shortcuts-->
### 注释
快捷键 | 说明
@ -67,43 +67,8 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`R` | 在回复中引用所选文字
<!--rehype:className=shortcuts-->
### 问题和拉取请求列表
快捷键 | 说明
:- | -
`C` | 创建问题
`Ctrl` `/` | 将光标聚焦在问题或拉取请求搜索栏上
`U` | 按作者过滤
`L` | 按标签过滤或编辑标签
`M` | 按里程碑过滤或编辑里程碑
`A` | 按受让人过滤或编辑受让人
`O` | 打开问题
<!--rehype:className=shortcuts-->
### 问题和拉取请求
快捷键 | 说明
:- | -
`Q` | 请求审稿人
`M` | 设定一个里程碑
`L` | 应用标签
`A` | 设置受让人
<!--rehype:className=shortcuts-->
### 拉取请求的变化
快捷键 | 说明
:- | -
`C` | 打开拉取请求中的提交列表
`T` | 打开拉取请求中已更改文件的列表
`J` | 在列表中向下移动选择
`K` | 在列表中向上移动选择
`Ctrl` `Shift` `Enter` | 在拉取请求差异上添加单个评论
`Alt` `(click)` | 在拉取请求中折叠和展开所有过时的审阅评论之间切换
<!--rehype:className=shortcuts-->
### 项目板
<!--rehype:wrap-class=row-span-2-->
<!--rehype:wrap-class=row-span-4-->
快捷键 | 说明
:- | -
@ -131,6 +96,30 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`Ctrl` `Shift` `Right/L` | 将卡片移至最右侧列的顶部
<!--rehype:className=shortcuts-->
### 问题和拉取请求列表
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`C` | 创建问题
`Ctrl` `/` | 将光标聚焦在问题或拉取请求搜索栏上
`U` | 按作者过滤
`L` | 按标签过滤或编辑标签
`M` | 按里程碑过滤或编辑里程碑
`A` | 按受让人过滤或编辑受让人
`O` | 打开问题
<!--rehype:className=shortcuts-->
### 问题和拉取请求
快捷键 | 说明
:- | -
`Q` | 请求审稿人
`M` | 设定一个里程碑
`L` | 应用标签
`A` | 设置受让人
<!--rehype:className=shortcuts-->
### 通知
快捷键 | 说明
@ -139,6 +128,18 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`Shift` `M` | 静音线程
<!--rehype:className=shortcuts-->
### 拉取请求的变化
快捷键 | 说明
:- | -
`C` | 打开拉取请求中的提交列表
`T` | 打开拉取请求中已更改文件的列表
`J` | 在列表中向下移动选择
`K` | 在列表中向上移动选择
`Ctrl` `Shift` `Enter` | 在拉取请求差异上添加单个评论
`Alt` `(click)` | 在拉取请求中折叠和展开所有过时的审阅评论之间切换
<!--rehype:className=shortcuts-->
### 网络图
快捷键 | 说明
@ -175,6 +176,7 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`path:__init__.py` | 文件为 <pur>`__init__.py`</pur> 里面的内容搜索
`path:/.*shrc$/` | 文件路径包含 <pur>`.*shrc`</pur> 结尾的文件中搜索内容
`path:/src/*.js` | <pur>`src`</pur> 目录中的 <pur>`.js`</pur> 后缀的文件中搜索内容
`path:/(^\|\/)README\.md$/` | 使用正则,仅匹配特定文件名(而不是路径的一部分)
<!--rehype:className=style-list-->
### 完全符合
@ -192,6 +194,7 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
<!--rehype:className=style-list-->
### 基于仓库的条件
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
@ -204,6 +207,7 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
<!--rehype:className=style-list-->
### 基于 issue 的条件
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
@ -226,6 +230,59 @@ Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
`repos:0 repos:<40 repos:>5` | 仓库数量
<!--rehype:className=style-list-->
### Symbol 限定符
搜索 `go` 语言中的 `WithContext` 符号
```
language:go symbol:WithContext
```
查询将查找在 `Rust` 中实现的 `String` 类型转换:
```
language:rust symbol:/^String::to_.*/
```
### 使用布尔运算
<!--rehype:wrap-class=col-span-2-->
查询将匹配包含 `sparse``index` 的文档
```js
sparse OR index
```
排除 `__testing__` 目录中的文件,您可以搜索:
```js
"fatal error" NOT path:__testing__
```
您可以使用括号来表达更复杂的布尔表达式
```js
(language:ruby OR language:python) AND NOT path:"/tests/"
```
使用运算符 `AND``OR``NOT` 来组合搜索词
### is 限定符
- `archived`: 限制搜索`已存档`的版本库
- `fork`: 限制搜索已`分叉`的版本库
- `vendored`: 限制搜索被检测为 vendored 的内容
- `generated`: 限制搜索检测为`已生成`的内容
示例
:-- | --
:-- | --
`path:/^MIT.txt$/ is:archived` | 已归档存储库,中包含名为 <pur>MIT.txt</pur> 的文件
`log4j NOT is:archived` | 限定符 <pur>is:</pur> 可以与 <pur>NOT</pur> 运算符反转
`log4j NOT is:fork` | 从结果中排除<pur>分叉</pur>
<!--rehype:className=style-list-->
另见
-----

View File

@ -33,8 +33,10 @@ windows_job:
script:
- echo Hello, %USERNAME%!
linux_job: tags:
- linux script:
linux_job:
tags:
- linux
script:
- echo "Hello, $USER!"
```

View File

@ -33,6 +33,8 @@ s1 = "Learn Go!"
// 一次声明多个变量
var b, c int = 1, 2
var d = true
// 匿名赋值
_ , e = 10, 20
```
简短声明
@ -139,7 +141,6 @@ fmt.Println(!true) // false
参见:[更多操作符](#运算符和标点符号)
### 数组 Arrays
<!--rehype:wrap-class=row-span-2-->
```go
┌────┬────┬────┬────┬─────┬─────┐
@ -183,6 +184,7 @@ fmt.Println("2d: ", twoDimension)
```
### 指针(Pointers)
<!--rehype:wrap-class=col-span-2-->
```go
func main () {
@ -194,9 +196,30 @@ func getPointer () (myPointer *int) {
a := 234
return &a
}
//申明指针的时候如果没有指向某个变量默认值为nil
//不能直接进行操作,包括读写
var p *int
*p = 123 // panic nil pointer
```
a := new(int)
*a = 234
---
```go
//而用new返回的是有默认值的指针, 为数据类型的默认值
func main(){
//有一块内存存放了10它的地址由系统自动分配别名是a
a := 10
//内存存放的10变成了20
a = 20
var p *int
p = &a //或者直接写 p := &a
//上面的p是一个指针通过 *p 的方式同样可以访问 变量a指向 的内存
/*当你动态申请内存的时候,指针的存在意义之一就被体现出来了*/
ptr := new(int)
//申请了一块内存空间没有办法指定别名new()返回内存地址,用指针接收
//此时并没有变量能直接指向这块内存,所以只能通过内存地址来访问
}
```
参见:[指针(Pointers)](https://tour.golang.org/moretypes/1)
@ -225,11 +248,29 @@ const s string = "constant"
const Phi = 1.618
const n = 500000000
const d = 3e20 / n
fmt.Println(d)
```
常量声明可以使用 iota常量生成器 初始化,它用于
生成一组以相似规则初始化的常量,但是不用每行都
写一遍初始化表达式。
注意:
1. 在一个const声明语句中在第一个声明的常量所在的行iota被置为0然后在每一个有常量声明的行加一。
2. 写在同一行的值是相同的
```go
const (
a = iota
b
c
)
// a = 0, b = 1, c = 2
```
### 类型转换
Go语言中不允许隐式转换所有类型转换必须显式声明强制转换而且转换只能发生在两种相互兼容的类型之间。
```go
i := 90
f := float64(i)
@ -561,6 +602,8 @@ sum(1, 2) // => [1 2] 3
sum(1, 2, 3) // => [1 2 3] 6
nums := []int{1, 2, 3, 4}
sum(nums...) // => [1 2 3 4] 10
// 不定参在内存中是连续存储的
// 不定参内部再传递的时候,参数也要是不定的
```
### 初始化函数
@ -597,20 +640,8 @@ func main() {
}
```
### 关闭 1
```go
func scope() func() int{
outer_var := 2
foo := func() int {return outer_var}
return foo
}
// Outpus: 2
fmt.Println(scope()())
```
### 关闭 2
### 闭包
<!--rehype:wrap-class=col-span-2 row-span-2-->
```go
func outer() (func() int, int) {
outer_var := 2
@ -622,8 +653,25 @@ func outer() (func() int, int) {
return inner, outer_var
}
inner, val := outer()
fmt.Println(inner()) // => 200
fmt.Println(val) // => 101
fmt.Println(val)
// => 101
fmt.Println(inner())
// => 200这里涉及到golang中闭包和内存逃逸的概念inner()实际上执行了两次outer()中一次fmt又一次
//但为什么是200呢编译器不能确定outer_var在后续会不会使用
//所以outer_var不会随着outer()结束而释放它的栈Stack空间
//而会逃逸到Heap那么第二次的inner()中outer_var就会是101。
```
### 关闭 1
```go
func scope() func() int{
outer_var := 2
foo := func() int {return outer_var}
return foo
}
// Outpus: 2
fmt.Println(scope()())
```
Golang 包(Packages)
@ -835,8 +883,21 @@ Golang 方法(Methods)
<!--rehype:body-class=cols-2-->
### 接收器
<!--rehype:wrap-class=row-span-2-->
```go
//Go语言中的方法Method是一种作用于特定类型变量的函数。
//这种特定类型变量叫做接收者Receiver
//接收者的概念就类似于其他语言中的 this 或者 self。
//方法的定义格式如下:
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
// 其中,
// 1.接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名
//的第一个小写字母而不是self、this之类的命名。例如Person类型的接收者变量
// 应该命名为 pConnector类型的接收者变量应该命名为c等。
// 2.接收者类型:接收者类型和参数类似,可以是指针类型和非指针类型。
// 3.方法名、参数列表、返回参数:具体格式与函数定义相同。
type Vertex struct {
X, Y float64
}
@ -844,27 +905,82 @@ type Vertex struct {
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X * v.X + v.Y * v.Y)
}
func (v Vertex) valuechange() float64 {
v.X += 1
return v.X
}
func (v *Vertex) pointerchange() float64 {
v.X += 1
return v.X
}
func main() {
v := Vertex{1, 2}
v.Abs()
v = Vertex{1, 2}
fmt.Println(v.valuechange()) // 2
fmt.Println(v) // {1 2}
v = Vertex{1, 2}
fmt.Println(v.pointerchange())// 2
fmt.Println(v) // {2 2}
}
//如果在方法里修改receiver的值要对caller生效使用 pointer receiver。
v := Vertex{1, 2}
v.Abs()
```
参见:[Methods](https://tour.golang.org/methods/1)
参见:[Methods](https://tour.golang.org/methods/1)[指针接收器](https://tour.golang.org/methods/4)
### Mutation
### 方法表达式
方法表达式相当于提供一种语法将类型方法调用显式地转换为函数调用,接收者(receiver)必须显式地传递进去。
```go
func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
func (t T) Get(){
return t.a
}
v := Vertex{6, 12}
v.Scale(0.5)
// `v` 已更新
func (t *T) Set(i int){
t.a = i
}
//表达式`T.Get`和`(*T).Set`被称为方法表达式,
//需要注意的是在方法表达式中编译器不会做自动转换。
//值调用会自动转换,表达式调用则不会,例如:
type Data struct{}
func (Data) TestValue () {}
func (*Data) TestPointer () {}
//声明一个类型变量a
var a Data= struct{}{}
//表达式调用编译器不会进行自动转换
Data.TestValue(a)
//Data.TestValue(&a)
(*Data).TestPointer (&a)
//Data.TestPointer(&a) //type Data has no method TestPointer
//值调用编译器会进行自动转换
y : = (&a).TestValue //编译器帮助转换a.TestValue
g : = a.TestPointer //会转换为(&a).TestPointer
```
参见:[指针接收器](https://tour.golang.org/methods/4)
#### 组合结构的方法集
内嵌字段的访问不需要使用全路径,只要保证命名是唯一的就可以,尽量避免同名。如果外层字段和内层字段有相同的方法,则使用简化模式访问外层方法会覆盖内层的方法。
```go
x : = X{a: 1}
y : = Y{
X : x ,
b : 2 ,
}
z : = z {
Y : y ,
c : 3 ,
}//组合结构,内嵌字段
```
组合结构的方法集有如下规则:
- 若类型 T 包含匿名字段 S ,则 T 的方法集包含S的方法集
- 若类型 T 包含匿名字段 *S ,则 T 的方法集包含 S 和*S方法集
- 不管类型 T 中嵌入的匿名字段是 S 还是 *S *T 方法集总是包含 S 和 *S 方法集
Golang 接口(Interfaces)
--------
@ -912,6 +1028,279 @@ func main() {
```
<!--rehype:className=wrap-text -->
Golang Embed (Go version >= 1.16)
---
### 嵌入为string
``` go
package main
import (
_ "embed"
"fmt"
)
//go:embed version.txt
var version string
func main() {
fmt.Printf("version %q\n", version)
}
```
### 嵌入为[]byte
``` go
package main
import (
_ "embed"
"fmt"
)
//go:embed version.txt
var versionByte []byte
func main() {
fmt.Printf("version %q\n", string(versionByte))
}
```
### 嵌入为embed.FS
``` go
//go:embed hello.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("hello.txt")
fmt.Println(string(data))
}
```
### 嵌入多个文件
``` go
//go:embed hello.txt
//go:embed hello2.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("hello.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("hello2.txt")
fmt.Println(string(data))
}
```
### 嵌入子文件夹下的文件
``` go
//go:embed p/hello.txt p/hello2.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("p/hello.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("p/hello2.txt")
fmt.Println(string(data))
}
```
### 同一个文件嵌入为多个变量
``` go
//go:embed hello.txt
var s string
//go:embed hello.txt
var s2 string
func main() {
fmt.Println(s)
fmt.Println(s2)
}
```
### 匹配模式
``` go
//go:embed p/*
var f embed.FS
func main() {
data, _ := f.ReadFile("p/.hello.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("p/q/.hi.txt") // 没有嵌入 p/q/.hi.txt
fmt.Println(string(data))
}
```
Golang 泛型 (Go version >= 1.18)
-------------
### 泛型类型
<!--rehype:wrap-class=row-span-1-->
```text
type S[T int|float32|float64 ] []T
┬ ────────┬────────
┆ ╰─── 2. 类型约束
╰────────────── 1. 类型形参
```
<!--rehype:className=wrap-text -->
可以使用类型实参 int 或 string 实例化
``` go
type MyMap[K int|string, V float32 | float64] map[K]V
var a MyMap[string, float64] = map[string]float64{
"jack_score": 9.6,
"bob_score": 8.4,
}
```
<!--rehype:className=wrap-text -->
- **匿名结构体不支持泛型**<!--rehype:style=color: #b43c29;-->
- **匿名函数不支持泛型**<!--rehype:style=color: #b43c29;-->
### 泛型函数
<!--rehype:wrap-class=row-span-1-->
任意类型
``` go
func Add[T any](a,b T) T {
return a+b
}
```
对类型进行约束
``` go
func Add[T string | int | int8](a,b T) T {
return a+b
}
```
类型嵌套
``` go
type WowStruct[T int | float32, S []T] struct {
Data S
MaxValue T
MinValue T
}
var ws WowStruct[int, []int]
```
<!--rehype:className=wrap-text -->
泛型函数中进行类型声明 (go version >= 1.20)
``` go
func F[T1 any]() {
type x struct{}
type y = x
}
```
### 泛型约束
<!--rehype:wrap-class=row-span-2-->
通过接口实现
``` go
type Addable interface{
type int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr, float32, float64, complex64, complex128, string
}
func Add[T Addable](a,b T) T {
return a+b
}
```
<!--rehype:className=wrap-text -->
使用 ~ 符号
``` go
type Int interface {
~int | ~int8 | ~int16 | ~int32 | ~int64
}
type Uint interface {
~uint | ~uint8 | ~uint16 | ~uint32
}
type Float interface {
~float32 | ~float64
}
type Slice[T Int | Uint | Float] []T
var s Slice[int] // 正确
type MyInt int
var s2 Slice[MyInt] // MyInt底层类型是int所以可以用于实例化
type MyMyInt MyInt
var s3 Slice[MyMyInt] // 正确。MyMyInt 虽然基于 MyInt 但底层类型也是int所以也能用于实例化
type MyFloat32 float32 // 正确
var s4 Slice[MyFloat32]
```
<!--rehype:className=wrap-text -->
使用 ~ 时的限制:
<!--rehype:style=color: #b43c29;-->
1. ~后面的类型不能为接口
2. ~后面的类型必须为基本类型
<!--rehype:style=color: #b43c29;-->
### 泛型 Receiver
<!--rehype:wrap-class=row-span-1-->
定义普通类型支持泛型
``` go
type MySlice[T int | float32] []T
func (s MySlice[T]) Sum() T {
var sum T
for _, value := range s {
sum += value
}
return sum
}
```
<!--rehype:className=wrap-text -->
结构体支持泛型
``` go
type A[T int | float32 | float64] struct {
}
func (receiver A[T]) Add(a T, b T) T {
return a + b
}
```
<!--rehype:className=wrap-text -->
### 泛型接口
<!--rehype:wrap-class=row-span-1-->
``` go
type Uint interface { // 接口 Uint 中有类型,所以是一般接口
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64
}
type ReadWriter interface { // ReadWriter 接口既有方法也有类型,所以是一般接口
~string | ~[]rune
Read(p []byte) (n int, err error)
Write(p []byte) (n int, err error)
}
```
<!--rehype:className=wrap-text -->
一般接口类型不能用来定义变量,只能用于泛型的类型约束中
<!--rehype:style=color: #b43c29;-->
杂项
-------------
@ -1006,11 +1395,11 @@ Go 命令
另见
--------
- [Devhints](https://devhints.io/go) _(devhints.io)_
- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_
- [Golang wiki](https://github.com/golang/go/wiki/) _(github.com)_
- [Effective Go](https://golang.org/doc/effective_go.html) _(golang.org)_
- [Go by Example](https://gobyexample.com/) _(gobyexample.com)_
- [Awesome Go](https://awesome-go.com/) _(awesome-go.com)_
- [JustForFunc Youtube](https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw) _(youtube.com)_
- [Style Guide](https://github.com/golang/go/wiki/CodeReviewComments) _(github.com)_
- [Devhints](https://devhints.io/go) *(devhints.io)*
- [A tour of Go](https://tour.golang.org/welcome/1) *(tour.golang.org)*
- [Golang wiki](https://github.com/golang/go/wiki/) *(github.com)*
- [Effective Go](https://golang.org/doc/effective_go.html) *(golang.org)*
- [Go by Example](https://gobyexample.com/) *(gobyexample.com)*
- [Awesome Go](https://awesome-go.com/) *(awesome-go.com)*
- [JustForFunc Youtube](https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw) *(youtube.com)*
- [Style Guide](https://github.com/golang/go/wiki/CodeReviewComments) *(github.com)*

View File

@ -27,7 +27,7 @@ Google Chrome 键盘快捷键备忘清单
`Alt` `Space` `N` | 最小化当前窗口
`Alt` `Space` `X` | 最大化当前窗口
`Alt` `F4` | 关闭当前窗口
`Ctrl` `Shift` `Q` | 相当谷歌浏览器
`Ctrl` `Shift` `Q` | 退出谷歌浏览器
<!--rehype:className=shortcuts-->
### 谷歌浏览器功能
@ -59,7 +59,7 @@ Google Chrome 键盘快捷键备忘清单
:- | -
`(type)` `Enter` | 使用您的默认搜索引擎进行搜索
`(type)` `Tab` | 使用不同的搜索引擎搜索
`Ctrl` `Enter` | 添加 www. 和 .com 到站点名称,并在当前选项卡中打开
`Ctrl` `Enter` | 添加 <www>. 和 .com 到站点名称,并在当前选项卡中打开
`Alt` `Enter` | 打开新标签页并执行 Google 搜索
`Ctrl` `L` | 跳转到地址栏
`Ctrl` `K` | 从页面上的任何位置搜索
@ -206,7 +206,41 @@ Chrome 开发者工具键盘快捷键
`Enter` | 执行
<!--rehype:className=shortcuts-->
Chrome 搜索引擎查询语法
---
### 语法
语法 | 阐述
:- | -
`site:` | 指定网站
`inurl:` | URL 中存在的关键字页面
`intext:` | 网页内容里的关键字
`Filetype:` | 指定文件的类型
`intitle:` | 网页辩题中的关键字
`link:` | 返回所有你指定的域名链接
`info:` | 查找指定站点信息
`cache:` | 搜索 Google 中的内容缓存
`related:` | 搜索相关的网站
<span style="color:red">注意:</span>搜索语法的 `:` 后不应该存在空格,像这样 `site:google.com`,而不是这样 `site: google.com`
### 指令
指令 | 阐述
:- | -
`@` | 用于搜索社交媒体,如:`@twitter`
`*` | 通配符省略,如:`wlop *`
`$` | 用于搜索指定的价格,如:`phone $400`
`#` | 搜索 `#` 标签,如:`#疯狂星期四`
`-` | 排除特定关键字,如:`中国美食 -麻辣`
`""` | 完全匹配的结果,如:`"最高的建筑"`
`..` | 某个数字范围之内的,如:`phone $50..$100`
`OR` | 组合搜索,如:`疯狂星期四 OR 肯德基`
`AND` | 空格默认是 AND 指令
另见
----
- [Keyboard shortcuts for Google Chrome](https://support.google.com/chrome/answer/157179?hl=en) _(support.google.com)_
- [Search Help for Google Chrome](https://support.google.com/websearch/answer/2466433?hl=en)

View File

@ -33,99 +33,181 @@ export HOMEBREW_INSTALL_FROM_API=1
```
<!--rehype:className=wrap-text -->
### 命令
### 安装卸载
<!--rehype:wrap-class=row-span-2-->
命令 | 说明
:--- :---
`brew install git` | `安装`一个包
`brew reinstall git` | 重新`安装`一个包
:--- | :---
`brew install git` | `安装`一个软件
`brew reinstall git` | 重新`安装`一个软件
`brew uninstall git` | `删除`/`卸载`软件包
`brew upgrade git` | 升级包
:--- :---
`brew unlink git` | `取消`链接
`brew link git` | 关联
`brew switch git 2.5.0` | 更改版本
:--- :---
`brew list --versions git` | 看看你有什么版本
`brew switch git 2.5.0` | 切换软件包的版本
`brew unlink git` | 取消软件包的链接
`brew link git` | 链接已有的软件包
`brew cleanup git` | 删除旧版本的软件包及依赖
### 更多包命令
### 升级
命令 | 说明
:--- :---
`brew info git` | 列出版本、注意事项等
`brew cleanup git` | 删除旧版本
`brew edit git` | 编辑此软件包
`brew cat git` | 打印这个软件包
`brew home git` | 打开主页
`brew search git` | 搜索公式
:--- | :---
`brew upgrade git` | 升级一个软件包
`brew upgrade` | 升级所有可升级的软件包
`brew update` | 更新 `Homebrew``Cask`
### Brew Cask 命令
命令 | 说明
:--- :---
:--- | :---
`brew install --cask firefox` | 安装火狐浏览器
`brew list --cask` | 列出已安装应用
Cask 命令用于与图形应用程序交互
Cask 命令用于与图形界面应用程序交互,可以安装和管理 macOS 上的图形界面应用程序
### 更多包命令
<!--rehype:wrap-class=row-span-2-->
命令 | 说明
:--- | :---
`brew info git` | 显示软件包的版本、依赖、注意事项等信息
`brew edit git` | 编辑此软件包的安装脚本
`brew cat git` | 打印此软件包的安装脚本
`brew home git` | 打开此软件包的主页
`brew search git` | 搜索软件包公式并显示相关信息
`brew list --versions git` | 查看安装的软件包及其版本信息
<!--rehype:className=style-list-->
### 全局命令
<!--rehype:wrap-class=row-span-2-->
命令 | 说明
:--- :---
`brew update` | 更新 `brew``cask`
`brew upgrade` | 升级所有软件包
`brew list` | 已安装列表
`brew outdated` | 升级需要什么?
`brew doctor` | 诊断 brew 问题
`brew pin <formula>` | 防止指定软件包升级
`brew unpin <formula>` | 允许升级指定的软件包
:--- | :---
`brew list` | 列出已安装的软件包
`brew outdated` | 列出需要升级的软件包
`brew doctor` | 诊断 Homebrew 是否存在问题
`brew pin <formula>` | 防止指定软件包被升级
`brew unpin <formula>` | 允许指定软件包被升级
<!--rehype:className=style-list-->
### 帮助命令
命令 | 说明
:--- | :---
`brew help` | 打印帮助信息
`brew help <sub-command>` | 打印子命令的帮助信息
<!--rehype:className=style-list-->
### Brew 清理
<!--rehype:wrap-class=row-span-2-->
删除旧版本的已安装软件包
```bash
$ brew cleanup
```
删除旧版本指定软件包
```bash
$ brew cleanup <formula>
```
删除未安装的软件包
```bash
$ brew cleanup -s
```
删除所有 Homebrew 缓存
```bash
$ brew cleanup --prune=all
```
直接删除 Homebrew 的缓存目录
```bash
$ rm -rf $(brew --cache)
```
显示所有将被删除的软件包(试运行)
```bash
$ brew cleanup # 删除旧版本的已安装软件包
$ brew cleanup <formula> # 删除旧版本指定软件包
$ brew cleanup -s # 删除未安装的软件包
$ brew cleanup --prune=all # 删除所有 Homebrew 缓存
$ rm -rf $(brew --cache) # 直接删除 Homebrew 的缓存目录
# 显示所有将被删除的软件包(试运行)
$ brew cleanup -n
```
### Brew 源码仓库
列出所有当前点击的源码仓库(点击)
```bash
# 列出所有当前点击的源码仓库(点击)
$ brew tap
# 使用 https 从 Github 中点击软件包源码仓库以点击
```
使用 https 从 Github 中点击软件包源码仓库以点击
```bash
# https://github.com/user/homebrew-repo
$ brew tap <user/repo>
# 点击指定 URL 中的软件源码仓库
```
点击指定 URL 中的软件源码仓库
```bash
$ brew tap <user/repo> <URL>
# 从存储库中删除给定的源码仓库
```
从存储库中删除给定的源码仓库
```bash
$ brew untap <user/repo>
```
### 搜索查看
列出所有已安装的软件包
```bash
# 列出所有已安装的软件包
$ brew list
# 显示所有本地可用的 brew 配方
```
显示所有本地可用的 brew 配方
```bash
$ brew search
# 搜索包含指定字符的 brew 配方
```
搜索包含指定字符的 brew 配方
```bash
$ brew search <text>
# 显示有关软件包的信息
```
显示有关软件包的信息
```bash
$ brew info <formula>
```
### 帮助命令
### 依赖
命令 | 说明
:--- :---
`brew help` | 打印帮助信息
`brew help <sub-command>` | 打印子命令的帮助信息
:--- | :---
`brew deps --tree --installed` | 查看包和依赖关系图
`brew deps git` | 显示 git 依赖
<!--rehype:className=style-list-->
显示`包`的依赖关系。 特定于`包`的其他选项可能是附加到命令
### 卸载 Homebrew
- 使用官方卸载脚本卸载 Homebrew
- 验证文件是否已删除
```bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
$ sudo rm -rf /opt/homebrew
```
<!--rehype:className=wrap-text -->
另见
---

View File

@ -793,7 +793,7 @@ HTML meta 标签
<!--rehype:body-class=cols-2-->
### Meta 标签
<!--rehype:wrap-class=row-span-3-->
<!--rehype:wrap-class=row-span-5-->
meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他材料。
@ -821,7 +821,7 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
```html
<!-- 描述 -->
<meta name="description" content="···">
<meta name="description" content="网页描述···">
<meta property="og:description" content="···">
<meta name="twitter:description" content="···">
```
@ -849,6 +849,32 @@ meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他
<meta name="viewport" content="width=1024">
```
---
```html
<!-- 重定向 -->
<meta http-equiv="refresh" content="5;url=http://example.com/">
<meta name="robots" content="index,follow">
<meta name="generator" content="网站生成工具">
<meta name="csrf-token" content="token值">
```
### 常用 Meta
```html
<meta name="description" content="网页描述···">
<meta name="keywords" content="关键词1,关键词2,关键词3">
<meta name="author" content="作者名">
```
### 常用 Meta
```html
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="icon" href="favicon.jpg" type="image/jpeg">
```
### Open Graph
```html
@ -887,6 +913,106 @@ Facebook、Instagram、Pinterest、LinkedIn 等使用。
请参阅:[Geotagging](https://en.wikipedia.org/wiki/Geotagging#HTML_pages)
标签语义化
------
### 复杂布局
<!--rehype:wrap-class=row-span-2-->
```
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <header> ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <nav> ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <section> ┆
┆╭┈┈┈┈┈┈┈┈╮╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮┆
┆┆<aside> ┆┆ <main> ┆┆
┆┆ ┆┆╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈╮┆┆
┆┆ ┆┆┆ <article> ┆ ┆ <aside> ┆┆┆
┆┆ ┆┆┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ┆ <header> ┆ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ┆ <article> ┆ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ┆ <footer> ┆ ┆ ┆ ┆┆┆
┆┆ ┆┆┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆┆┆
┆┆ ┆┆╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈╯┆┆
┆╰┈┈┈┈┈┈┈┈╯╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <footer> ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
```
### 复杂布局
<!--rehype:wrap-class=row-span-2-->
```
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <header> ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ┆
┆ ┆ <nav> ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <main> ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆
┆ ┆ <article> ┆ ┆ <aside> ┆ ┆
┆ ┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆ ┆
┆ ┆ ┆ <header> ┆ ┆ ┆ ┆ ┆
┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆ ┆
┆ ┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆ ┆
┆ ┆ ┆ <section> ┆ ┆ ┆ ┆ ┆
┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆ ┆
┆ ┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆ ┆
┆ ┆ ┆ <footer> ┆ ┆ ┆ ┆ ┆
┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <footer> ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
```
### 区域语义化
```
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈┈┈╮
┆ <main> ┆ ┆ <aside> ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆
┆ ┆ <header> ┆ ┆ ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆
┆ ┆ <section> ┆ ┆ ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈╮ ┆ ┆ ┆
┆ ┆ <footer> ┆ ┆ ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈╯ ┆ ┆ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈┈┈╯
```
### 页面头语义化
```
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆ <header> ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ┆
┆ ┆ <section> ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈╮ ┆
┆ ┆ <nav> ┆ ┆ <aside> ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈╯ ┆
┆ ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮ ┆
┆ ┆ <footer> ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
```
另见
--------

View File

@ -6,34 +6,34 @@ HTTP 状态码备忘清单。 每个 HTTP 状态代码的快速参考。
HTTP 状态码
---
### Means
### 含义
- [1xx: Informational](#1xx-信息) _这意味着已收到请求并且该过程正在继续_<!--rehype:tooltips-->
- [2xx: Success](#2xx-成功) _这意味着该操作已成功接收、理解和接受_<!--rehype:tooltips-->
- [3xx: Redirection](#3xx-重定向) _这意味着必须采取进一步行动才能完成请求_<!--rehype:tooltips-->
- [4xx: Client Error](#4xx-客户端错误) _这意味着请求包含不正确的语法或无法完成_<!--rehype:tooltips-->
- [5xx: Server Error](#5xx-服务器错误) _这意味着服务器未能满足明显有效的请求_<!--rehype:tooltips-->
- [1xx: 信息](#1xx-信息) _代表已收到请求并且该过程正在继续_<!--rehype:tooltips-->
- [2xx: 成功](#2xx-成功) _代表该操作已成功接收、理解和接受_<!--rehype:tooltips-->
- [3xx: 重定向](#3xx-重定向) _代表必须采取进一步行动才能完成请求_<!--rehype:tooltips-->
- [4xx: 客户端错误](#4xx-客户端错误) _代表请求包含不正确的语法或无法完成_<!--rehype:tooltips-->
- [5xx: 服务器错误](#5xx-服务器错误) _代表服务器未能满足明显有效的请求_<!--rehype:tooltips-->
### 2xx. 成功
### 2xx. 成功
<!--rehype:wrap-class=row-span-2-->
- [200: OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) _请求没问题_<!--rehype:tooltips-->
- [201: Created](https://tools.ietf.org/html/rfc7231#section-6.3.2) _请求成,并创建了一个新资源_<!--rehype:tooltips-->
- [202: Accepted](https://tools.ietf.org/html/rfc7231#section-6.3.3) _接受请求进行处理但处理未完成_<!--rehype:tooltips-->
- [203: Non-Authoritative Information](https://tools.ietf.org/html/rfc7231#section-6.3.4) _实体标头中的信息来自本地或第三方副本,而不是来自原始服务器_<!--rehype:tooltips-->
- [204: No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) _响应给出了状态码和标头但响应中没有实体主体_<!--rehype:tooltips-->
- [205: Reset Content](https://tools.ietf.org/html/rfc7231#section-6.3.6) _浏览器应清除用于此事务的表单以获取其他输入_<!--rehype:tooltips-->
- [206: Partial Content](https://tools.ietf.org/html/rfc7233#section-4.1) _服务器正在返回请求大小的部分数据。 用于响应指定 Range 标头的请求。 服务器必须使用 Content-Range 标头指定响应中包含的范围_<!--rehype:tooltips-->
- [200: OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) _请求成功_<!--rehype:tooltips-->
- [201: 已创建](https://tools.ietf.org/html/rfc7231#section-6.3.2) _请求成,并创建了新资源_<!--rehype:tooltips-->
- [202: 已接受](https://tools.ietf.org/html/rfc7231#section-6.3.3) _请求成功,但处理未完成_<!--rehype:tooltips-->
- [203: Non-Authoritative Information](https://tools.ietf.org/html/rfc7231#section-6.3.4) _请求成功,但负载经过了第三方服务器的修改,而非原始负载_<!--rehype:tooltips-->
- [204: No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) _响应给出了状态码和标头但响应中没有实体主体_<!--rehype:tooltips-->
- [205: Reset Content](https://tools.ietf.org/html/rfc7231#section-6.3.6) _请求成功,但浏览器应重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面_<!--rehype:tooltips-->
- [206: Partial Content](https://tools.ietf.org/html/rfc7233#section-4.1) _请求成功,服务器正在返回请求所指定部分数据。用于响应标头中指定了数据区间的请求。服务器必须使用 Content-Range 标头指定响应中包含的数据区间_<!--rehype:tooltips-->
### 4xx. 客户端错误
<!--rehype:wrap-class=row-span-3-->
- [400: Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1) _服务器不理解该请求_<!--rehype:tooltips-->
- [401: Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1) _请求的页面需要用户名和密码_<!--rehype:tooltips-->
- [402: Payment Required](https://tools.ietf.org/html/rfc7231#section-6.5.2) _您还不能使用此代码_<!--rehype:tooltips-->
- [403: Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3) _禁止访问请求的页面_<!--rehype:tooltips-->
- [402: Payment Required](https://tools.ietf.org/html/rfc7231#section-6.5.2) _您目前还不能使用此代码。402 状态码被创建最初用于表明请求的内容只有付费之后才能获取。目前不存在标准的使用约定_<!--rehype:tooltips-->
- [403: Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3) _禁止了对于此页面的请求_<!--rehype:tooltips-->
- [404: Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4) _服务器找不到请求的页面_<!--rehype:tooltips-->
- [405: Method Not Allowed](https://tools.ietf.org/html/rfc7231#section-6.5.5) _请求中指定的方法不允许_<!--rehype:tooltips-->
- [405: Method Not Allowed](https://tools.ietf.org/html/rfc7231#section-6.5.5) _请求中指定的方法不允许_<!--rehype:tooltips-->
- [406: Not Acceptable](https://tools.ietf.org/html/rfc7231#section-6.5.6) _服务器只能生成客户端不接受的响应_<!--rehype:tooltips-->
- [407: Proxy Authentication Required](https://tools.ietf.org/html/rfc7235#section-3.2) _您必须先通过代理服务器进行身份验证然后才能提供此请求_<!--rehype:tooltips-->
- [408: Request Timeout](https://tools.ietf.org/html/rfc7231#section-6.5.7) _请求花费的时间比服务器准备等待的时间长_<!--rehype:tooltips-->

View File

@ -8,7 +8,7 @@ INI 备忘清单
### 介绍
INI 是一种固定标准格式的配置文件INI配置方法来自 MS-DOS 操作系统
INI 是一种固定标准格式的配置文件INI 配置方法来自 MS-DOS 操作系统
```ini
; 这里是注释
@ -37,7 +37,7 @@ file="acme payroll.dat"
name = value
```
与下面👇 JSON 大致相同
与下面👇 `JSON` 大致相同
```js
{

View File

@ -74,7 +74,7 @@ IDEA Windows 和 Linux 键盘映射
`Esc`| 转到编辑器
`Shift` `Esc`| 隐藏活动或最后一个活动窗口
`Ctrl` `Shift` `F4`| 关闭活动运行,消息...
`Ctrl` `G`| 去线
`Ctrl` `G`| 导航到行:列
`Ctrl` `E`| 最近的文件弹出窗口
`Ctrl` `Alt` `Left` _/_ `Right`| 向后/向前导航
`Ctrl` `Shift` `Backspace`| 导航到上次编辑位置
@ -192,4 +192,4 @@ IDEA Windows 和 Linux 键盘映射
`Ctrl` `Alt` `Shift` `S` | 打开项目结构对话框
`Ctrl` `Shift` `A` | 寻找行动
`Ctrl` `Tab` | 在工具和选项卡之间切换
<!--rehype:className=shortcuts-->
<!--rehype:className=shortcuts-->

View File

@ -1,7 +1,7 @@
iptables 备忘清单
====
iptables 是一个配置 Linux 内核 防火墙(opens new window)的命令行工具,是 [netfilter](https://en.wikipedia.org/wiki/Netfilter)(opens new window)项目的一部分。这个快速参考备忘单显示了它的常用命令使用清单
iptables 是一个配置 Linux 内核防火墙的命令行工具,是 [netfilter](https://en.wikipedia.org/wiki/Netfilter) 项目的一部分。这个快速参考备忘单显示了它的常用命令使用清单
入门
---

267
docs/iso-3166-1.md Normal file
View File

@ -0,0 +1,267 @@
ISO 3166-1 国家代码 备忘清单
===
这是一个符合 ISO 3166-1 标准的 ISO 国家代码列表,它为多语言网站提供参考。
ISO 3166-1 代码列表
----
### 完整代码
<!--rehype:wrap-class=col-span-3-->
英文短名称 | 二位代码 | 三位代码 | 数字代码 | 中文名称(简体) | 中文名称(繁体)
:-|:-|:-|:-|:-|:-
Afghanistan | AF | AFG | 004 | 阿富汗 | 阿富汗
Åland Islands | AX | ALA | 248 | 奥兰 | 奧蘭
Albania | AL | ALB | 008 | 阿尔巴尼亚 | 阿爾巴尼亞
Algeria | DZ | DZA | 012 | 阿尔及利亚 | 阿爾及利亞
American Samoa | AS | ASM | 016 | 美属萨摩亚 | 美屬薩摩亞
Andorra | AD | AND | 020 | 安道尔 | 安道爾
Angola | AO | AGO | 024 | 安哥拉 | 安哥拉
Anguilla | AI | AIA | 660 | 安圭拉 | 安圭拉
Antarctica | AQ | ATA | 010 | 南极洲 | 南極洲
Antigua and Barbuda | AG | ATG | 028 | 安提瓜和巴布达 | 安提瓜和巴布達
Argentina | AR | ARG | 032 | 阿根廷 | 阿根廷
Armenia | AM | ARM | 051 | 亚美尼亚 | 亞美尼亞
Aruba | AW | ABW | 533 | 阿鲁巴 | 阿魯巴
Australia | AU | AUS | 036 | 澳大利亚 | 澳大利亞
Austria | AT | AUT | 040 | 奥地利 | 奧地利
Azerbaijan | AZ | AZE | 031 | 阿塞拜疆 | 阿塞拜疆
Bahamas | BS | BHS | 044 | 巴哈马 | 巴哈馬
Bahrain | BH | BHR | 048 | 巴林 | 巴林
Bangladesh | BD | BGD | 050 | 孟加拉国 | 孟加拉國
Barbados | BB | BRB | 052 | 巴巴多斯 | 巴巴多斯
Belarus | BY | BLR | 112 | 白俄罗斯 | 白俄羅斯
Belgium | BE | BEL | 056 | 比利时 | 比利時
Belize | BZ | BLZ | 084 | 伯利兹 | 伯利茲
Benin | BJ | BEN | 204 | 贝宁 | 貝寧
Bermuda | BM | BMU | 060 | 百慕大 | 百慕大
Bhutan | BT | BTN | 064 | 不丹 | 不丹
Bolivia (Plurinational State of) | BO | BOL | 068 | 玻利维亚 | 玻利維亞
Bonaire, Sint Eustatius and Saba | BQ | BES | 535 | 荷兰加勒比区 | 荷蘭加勒比區
Bosnia and Herzegovina | BA | BIH | 070 | 波斯尼亚和黑塞哥维那 | 波斯尼亞和黑塞哥維那
Botswana | BW | BWA | 072 | 波札那 | 波札那
Bouvet Island | BV | BVT | 074 | 布韦岛 | 布韋島
Brazil | BR | BRA | 076 | 巴西 | 巴西
British Indian Ocean Territory | IO | IOT | 086 | 英属印度洋领地 | 英屬印度洋領地
Brunei Darussalam | BN | BRN | 096 | 汶莱 | 汶萊
Bulgaria | BG | BGR | 100 | 保加利亚 | 保加利亞
Burkina Faso | BF | BFA | 854 | 布基纳法索 | 布吉納法索
Burundi | BI | BDI | 108 | 布隆迪 | 蒲隆地
Cabo Verde | CV | CPV | 132 | 佛得角 | 佛得角
Cambodia | KH | KHM | 116 | 柬埔寨 | 柬埔寨
Cameroon | CM | CMR | 120 | 喀麦隆 | 喀麦隆
Canada | CA | CAN | 124 | 加拿大 | 加拿大
Cayman Islands | KY | CYM | 136 | 开曼群岛 | 開曼群島
Central African Republic | CF | CAF | 140 | 中非共和国 | 中非共和國
Chad | TD | TCD | 148 | 乍得 | 乍得
Chile | CL | CHL | 152 | 智利 | 智利
China | CN | CHN | 156 | 中华人民共和国 | 中華人民共和國
Christmas Island | CX | CXR | 162 | 圣诞岛 | 聖诞島
Cocos (Keeling) Islands | CC | CCK | 166 | 科科斯(基林)群岛 | 科科斯(基林)群島
Colombia | CO | COL | 170 | 哥伦比亚 | 哥倫比亞
Comoros | KM | COM | 174 | 葛摩 | 葛摩
Congo | CG | COG | 178 | 刚果 | 剛果共和國
Congo (Democratic Republic of the) | CD | COD | 180 | 刚果(金) | 剛果民主共和國
Cook Islands | CK | COK | 184 | 库克群岛 | 庫克群島
Costa Rica | CR | CRI | 188 | 哥斯达黎加 | 哥斯達黎加
Côte d'Ivoire | CI | CIV | 384 | 科特迪瓦 | 科特迪瓦
Croatia | HR | HRV | 191 | 克罗地亚 | 克羅地亞
Cuba | CU | CUB | 192 | 古巴 | 古巴
Curaçao | CW | CUW | 531 | 库拉索 | 庫拉索
Cyprus | CY | CYP | 196 | 塞浦路斯 | 賽普勒斯
Czechia | CZ | CZE | 203 | 捷克 | 捷克
Denmark | DK | DNK | 208 | 丹麦 | 丹麥
Djibouti | DJ | DJI | 262 | 吉布提 | 吉布提
Dominica | DM | DMA | 212 | 多米尼克 | 多米尼克
Dominican Republic | DO | DOM | 214 | 多米尼加 | 多明尼加
Ecuador | EC | ECU | 218 | 厄瓜多尔 | 厄瓜多爾
Egypt | EG | EGY | 818 | 埃及 | 埃及
El Salvador | SV | SLV | 222 | 萨尔瓦多 | 薩爾瓦多
Equatorial Guinea | GQ | GNQ | 226 | 赤道几内亚 | 赤道幾內亞
Eritrea | ER | ERI | 232 | 厄立特里亚 | 厄立特里亚
Estonia | EE | EST | 233 | 爱沙尼亚 | 愛沙尼亞
Eswatini | SZ | SWZ | 748 | 斯威士兰 | 斯威士蘭
Ethiopia | ET | ETH | 231 | 埃塞俄比亚 | 埃塞俄比亞
Falkland Islands (Malvinas) | FK | FLK | 238 | 福克兰群岛 | 福克蘭群島
Faroe Islands | FO | FRO | 234 | 法罗群岛 | 法羅群島
Fiji | FJ | FJI | 242 | 斐济 | 斐濟
Finland | FI | FIN | 246 | 芬兰 | 芬蘭
France | FR | FRA | 250 | 法国 | 法國
French Guiana | GF | GUF | 254 | 法属圭亚那 | 法屬圭亞那
French Polynesia | PF | PYF | 258 | 法属波利尼西亚 | 法屬玻里尼西亞
French Southern Territories | TF | ATF | 260 | 法属南部领地 | 法屬南部和南极領地
Gabon | GA | GAB | 266 | 加蓬 | 加蓬
Gambia | GM | GMB | 270 | 冈比亚 | 岡比亞
Georgia | GE | GEO | 268 | 格鲁吉亚 | 喬治亞
Germany | DE | DEU | 276 | 德国 | 德國
Ghana | GH | GHA | 288 | 加纳 | 加納
Gibraltar | GI | GIB | 292 | 直布罗陀 | 直布羅陀
Greece | GR | GRC | 300 | 希腊 | 希臘
Greenland | GL | GRL | 304 | 格陵兰 | 格陵蘭
Grenada | GD | GRD | 308 | 格林纳达 | 格林納達
Guadeloupe | GP | GLP | 312 | 瓜德罗普 | 瓜德羅普
Guam | GU | GUM | 316 | 关岛 | 關島
Guatemala | GT | GTM | 320 | 危地马拉 | 危地馬拉
Guernsey | GG | GGY | 831 | 根西 | 根西
Guinea | GN | GIN | 324 | 几内亚 | 幾內亞
Guinea-Bissau | GW | GNB | 624 | 几内亚比绍 | 幾內亞比索
Guyana | GY | GUY | 328 | 圭亚那 | 圭亞那
Haiti | HT | HTI | 332 | 海地 | 海地
Heard Island and McDonald Islands | HM | HMD | 334 | 赫德岛和麦克唐纳群岛 | 赫德島和麥克唐納群島
Holy See | VA | VAT | 336 | 梵蒂冈 | 梵蒂岡
Honduras | HN | HND | 340 | 洪都拉斯 | 洪都拉斯
Hong Kong | HK | HKG | 344 | 香港 | 香港
Hungary | HU | HUN | 348 | 匈牙利 | 匈牙利
Iceland | IS | ISL | 352 | 冰岛 | 冰島
India | IN | IND | 356 | 印度 | 印度
Indonesia | ID | IDN | 360 | 印度尼西亚 | 印度尼西亞
Iran (Islamic Republic of) | IR | IRN | 364 | 伊朗 | 伊朗
Iraq | IQ | IRQ | 368 | 伊拉克 | 伊拉克
Ireland | IE | IRL | 372 | 爱尔兰 | 愛爾蘭
Isle of Man | IM | IMN | 833 | 曼岛 | 曼島
Israel | IL | ISR | 376 | 以色列 | 以色列
Italy | IT | ITA | 380 | 意大利 | 義大利
Jamaica | JM | JAM | 388 | 牙买加 | 牙買加
Japan | JP | JPN | 392 | 日本 | 日本
Jersey | JE | JEY | 832 | 泽西 | 澤西
Jordan | JO | JOR | 400 | 约旦 | 約旦
Kazakhstan | KZ | KAZ | 398 | 哈萨克斯坦 | 哈薩克斯坦
Kenya | KE | KEN | 404 | 肯尼亚 | 肯尼亞
Kiribati | KI | KIR | 296 | 基里巴斯 | 基里巴斯
Korea (Democratic People's Republic of) | KP | PRK | 408 | 朝鲜 | 朝鮮民主主義人民共和國
Korea (Republic of) | KR | KOR | 410 | 韩国 | 大韓民國
Kuwait | KW | KWT | 414 | 科威特 | 科威特
Kyrgyzstan | KG | KGZ | 417 | 吉尔吉斯斯坦 | 吉爾吉斯斯坦
Lao People's Democratic Republic | LA | LAO | 418 | 老挝 | 老挝
Latvia | LV | LVA | 428 | 拉脱维亚 | 拉脫維亞
Lebanon | LB | LBN | 422 | 黎巴嫩 | 黎巴嫩
Lesotho | LS | LSO | 426 | 莱索托 | 賴索托
Liberia | LR | LBR | 430 | 利比里亚 | 利比里亚
Libya | LY | LBY | 434 | 利比亚 | 利比亞
Liechtenstein | LI | LIE | 438 | 列支敦士登 | 列支敦士登
Lithuania | LT | LTU | 440 | 立陶宛 | 立陶宛
Luxembourg | LU | LUX | 442 | 卢森堡 | 盧森堡
Macao | MO | MAC | 446 | 澳门 | 澳門
Madagascar | MG | MDG | 450 | 马达加斯加 | 馬達加斯加
Malawi | MW | MWI | 454 | 马拉维 | 馬拉維
Malaysia | MY | MYS | 458 | 马来西亚 | 馬來西亞
Maldives | MV | MDV | 462 | 马尔代夫 | 馬爾代夫
Mali | ML | MLI | 466 | 马里 | 馬里
Malta | MT | MLT | 470 | 马耳他 | 馬耳他
Marshall Islands | MH | MHL | 584 | 马绍尔群岛 | 馬紹爾群島
Martinique | MQ | MTQ | 474 | 马提尼克 | 馬提尼克
Mauritania | MR | MRT | 478 | 毛里塔尼亚 | 毛里塔尼亞
Mauritius | MU | MUS | 480 | 毛里求斯 | 毛里求斯
Mayotte | YT | MYT | 175 | 马约特 | 馬約特
Mexico | MX | MEX | 484 | 墨西哥 | 墨西哥
Micronesia (Federated States of) | FM | FSM | 583 | 密克罗尼西亚联邦 | 密克罗尼西亞聯邦
Moldova (Republic of) | MD | MDA | 498 | 摩尔多瓦 | 摩爾多瓦
Monaco | MC | MCO | 492 | 摩纳哥 | 摩納哥
Mongolia | MN | MNG | 496 | 蒙古 | 蒙古
Montenegro | ME | MNE | 499 | 黑山 | 蒙特內哥羅
Montserrat | MS | MSR | 500 | 蒙特塞拉特 | 蒙特塞拉特
Morocco | MA | MAR | 504 | 摩洛哥 | 摩洛哥
Mozambique | MZ | MOZ | 508 | 莫桑比克 | 莫桑比克
Myanmar | MM | MMR | 104 | 缅甸 | 緬甸
Namibia | NA | NAM | 516 | 纳米比亚 | 納米比亞
Nauru | NR | NRU | 520 | 诺鲁 | 諾魯
Nepal | NP | NPL | 524 | 荷兰 | 荷蘭
New Caledonia | NC | NCL | 540 | 新喀里多尼亚 | 新喀里多尼亞
New Zealand | NZ | NZL | 554 | 新西兰 | 新西蘭
Nicaragua | NI | NIC | 558 | 尼加拉瓜 | 尼加拉瓜
Niger | NE | NER | 562 | 尼日尔 | 尼日爾
Nigeria | NG | NGA | 566 | 尼日利亚 | 奈及利亞
Niue | NU | NIU | 570 | 纽埃 | 紐埃
Norfolk Island | NF | NFK | 574 | 诺福克岛 | 諾福克島
North Macedonia | MK | MKD | 807 | 北马其顿 | 北馬其頓
Northern Mariana Islands | MP | MNP | 580 | 北马里亚纳群岛 | 北馬里亞納群島
Norway | NO | NOR | 578 | 挪威 | 挪威
Oman | OM | OMN | 512 | 阿曼 | 阿曼
Pakistan | PK | PAK | 586 | 巴基斯坦 | 巴基斯坦
Palau | PW | PLW | 585 | 帛琉 | 帛琉
Palestine, State of | PS | PSE | 275 | 巴勒斯坦 | 巴勒斯坦國
Panama | PA | PAN | 591 | 巴拿马 | 巴拿馬
Papua New Guinea | PG | PNG | 598 | 巴布亚新几内亚 | 巴布亞新幾內亞
Paraguay | PY | PRY | 600 | 巴拉圭 | 巴拉圭
Peru | PE | PER | 604 | 秘鲁 | 秘魯
Philippines | PH | PHL | 608 | 菲律宾 | 菲律賓
Pitcairn | PN | PCN | 612 | 皮特凯恩群岛 | 皮特凱恩群島
Poland | PL | POL | 616 | 波兰 | 波蘭
Portugal | PT | PRT | 620 | 葡萄牙 | 葡萄牙
Puerto Rico | PR | PRI | 630 | 波多黎各 | 波多黎各
Qatar | QA | QAT | 634 | 卡塔尔 | 卡塔爾
Réunion | RE | REU | 638 | 留尼汪 | 留尼汪
Romania | RO | ROU | 642 | 罗马尼亚 | 羅馬尼亞
Russian Federation | RU | RUS | 643 | 俄罗斯 | 俄羅斯
Rwanda | RW | RWA | 646 | 卢旺达 | 盧旺达
Saint Barthélemy | BL | BLM | 652 | 圣巴泰勒米 | 聖巴泰勒米
Saint Helena, Ascension and Tristan da Cunha | SH | SHN | 654 | 圣赫勒拿 | 聖赫勒拿
Saint Kitts and Nevis | KN | KNA | 659 | 圣克里斯多福及尼维斯 | 聖克里斯多福及尼維斯
Saint Lucia | LC | LCA | 662 | 圣卢西亚 | 聖盧西亞
Saint Martin (French part) | MF | MAF | 663 | 法属圣马丁 | 法屬聖馬丁
Saint Pierre and Miquelon | PM | SPM | 666 | 圣皮埃尔和密克隆 | 聖皮埃爾和密克隆
Saint Vincent and the Grenadines | VC | VCT | 670 | 圣文森特和格林纳丁斯 | 聖文森特和格林納丁斯
Samoa | WS | WSM | 882 | 萨摩亚 | 薩摩亞
San Marino | SM | SMR | 674 | 圣马力诺 | 聖馬力諾
Sao Tome and Principe | ST | STP | 678 | 圣多美和普林西比 | 聖多美和普林西比
Saudi Arabia | SA | SAU | 682 | 沙特阿拉伯 | 沙特阿拉伯
Senegal | SN | SEN | 686 | 塞内加尔 | 塞內加爾
Serbia | RS | SRB | 688 | 塞尔维亚 | 塞爾維亞
Seychelles | SC | SYC | 690 | 塞舌尔 | 塞舌爾
Sierra Leone | SL | SLE | 694 | 塞拉利昂 | 塞拉利昂
Singapore | SG | SGP | 702 | 新加坡 | 新加坡
Sint Maarten (Dutch part) | SX | SXM | 534 | 荷属圣马丁 | 荷屬聖馬丁
Slovakia | SK | SVK | 703 | 斯洛伐克 | 斯洛伐克
Slovenia | SI | SVN | 705 | 斯洛文尼亚 | 斯洛文尼亞
Solomon Islands | SB | SLB | 090 | 所罗门群岛 | 所羅門群島
Somalia | SO | SOM | 706 | 索马里 | 索馬里
South Africa | ZA | ZAF | 710 | 南非 | 南非
South Georgia and the South Sandwich Islands | GS | SGS | 239 | 南乔治亚岛和南桑威奇群岛 | 南喬治亞島和南桑威奇群島
South Sudan | SS | SSD | 728 | 南苏丹 | 南蘇丹
Spain | ES | ESP | 724 | 西班牙 | 西班牙
Sri Lanka | LK | LKA | 144 | 斯里兰卡 | 斯里蘭卡
Sudan | SD | SDN | 729 | 苏丹 | 蘇丹
Suriname | SR | SUR | 740 | 苏里南 | 蘇利南
Svalbard and Jan Mayen | SJ | SJM | 744 | 斯瓦尔巴德群岛 | 斯瓦巴和揚馬延
Sweden | SE | SWE | 752 | 瑞典 | 瑞典
Switzerland | CH | CHE | 756 | 瑞士 | 瑞士
Syrian Arab Republic | SY | SYR | 760 | 叙利亚 | 敘利亞
Taiwan, Province of China | TW | TWN | 158 | 台湾 | 中國台灣省
Tanzania, United Republic of | TZ | TZA | 834 | 坦桑尼亚 | 坦桑尼亞
Thailand | TH | THA | 764 | 泰国 | 泰國
Timor-Leste | TL | TLS | 626 | 东帝汶 | 東帝汶
Togo | TG | TGO | 768 | 多哥 | 多哥
Tokelau | TK | TKL | 772 | 托克劳 | 托克勞
Tonga | TO | TON | 776 | 汤加 | 東加
Trinidad and Tobago | TT | TTO | 780 | 特立尼达和多巴哥 | 千里達及托巴哥
Tunisia | TN | TUN | 788 | 突尼斯 | 突尼西亞
Türkiye | TR | TUR | 792 | 土耳其 | 土耳其
Turkmenistan | TM | TKM | 795 | 土库曼斯坦 | 土庫曼斯坦
Turks and Caicos Islands | TC | TCA | 796 | 特克斯和凯科斯群岛 | 特克斯和凱科斯群島
Tuvalu | TV | TUV | 798 | 图瓦卢 | 圖瓦盧
Uganda | UG | UGA | 800 | 乌干达 | 烏干達
Ukraine | UA | UKR | 804 | 乌克兰 | 烏克蘭
United Arab Emirates | AE | ARE | 784 | 阿拉伯联合酋长国 | 阿拉伯聯合大公國
United Kingdom of Great Britain and Northern Ireland | GB | GBR | 826 | 英国 | 英國
United States of America | US | USA | 840 | 美国 | 美國
United States Minor Outlying Islands | UM | UMI | 581 | 美属小离岛 | 美國本土外小島嶼
Uruguay | UY | URY | 858 | 乌拉圭 | 烏拉圭
Uzbekistan | UZ | UZB | 860 | 乌兹别克斯坦 | 烏茲別克斯坦
Vanuatu | VU | VUT | 548 | 瓦努阿图 | 瓦努阿圖
Venezuela (Bolivarian Republic of) | VE | VEN | 862 | 委内瑞拉 | 委內瑞拉
Viet Nam | VN | VNM | 704 | 越南 | 越南
Virgin Islands (British) | VG | VGB | 92 | 英属维尔京群岛 | 英屬維爾京群島
Virgin Islands (U.S.) | VI | VIR | 850 | 美属维尔京群岛 | 美屬維爾京群島
Wallis and Futuna | WF | WLF | 876 | 瓦利斯群岛和富图纳群岛 | 瓦利斯群島和富圖納群島
Western Sahara | EH | ESH | 732 | 西撒哈拉 | 西撒哈拉
Yemen | YE | YEM | 887 | 也门 | 也門
Zambia | ZM | ZMB | 894 | 赞比亚 | 賛比亞
Zimbabwe | ZW | ZWE | 716 | 津巴布韦 | 津巴布韋
<!--rehype:className=show-header-->
另见
---
<!--rehype:wrap-class=col-span-3-->
- [ISO_3166-1](https://zh.wikipedia.org/wiki/ISO_3166-1) _(wikipedia.org)_

View File

@ -3,7 +3,7 @@ ISO 639-1 Language Code 备忘清单
这是一个符合 ISO 639-1 标准的 ISO 语言代码列表,它为多语言网站提供参考。
入门
说明
----
### 介绍

View File

@ -89,7 +89,7 @@ boolean[] answers = {true, false};
查看: [Arrays](#java-数组)
### Swap
### 交换变量 Swap
```java
int a = 1;
@ -101,14 +101,14 @@ b = temp;
System.out.println(a + " " + b); // 2 1
```
### Type Casting
### 类型转换 Type Casting
```java
// Widening
// byte<short<int<long<float<double
int i = 10;
long l = i; // 10
// Narrowing
// Narrowing
double d = 10.02;
long l = (long)d; // 10
String.valueOf(10); // "10"
@ -147,7 +147,7 @@ Java 字符串
### 基本的
```java
String str1 = "value";
String str1 = "value";
String str2 = new String("value");
String str3 = String.valueOf(123);
```
@ -242,8 +242,8 @@ sb.append("!");
### 比较
```java
String s1 = new String("QuickRef");
String s2 = new String("QuickRef");
String s1 = new String("QuickRef");
String s2 = new String("QuickRef");
s1 == s2 // false
s1.equals(s2) // true
"AB".equalsIgnoreCase("ab") // true
@ -341,10 +341,10 @@ String[] arr = {"a", "b", "c"};
for (int a: arr) {
System.out.print(a + " ");
}
// 输出: a b c
// 输出: a b c
```
### Multidimensional Arrays
### 二维数组 Multidimensional Arrays
```java
int[][] matrix = { {1, 2, 3}, {4, 5} };
@ -356,10 +356,10 @@ for (int i = 0; i < a.length; ++i) {
System.out.println(a[i][j]);
}
}
// 输出: 1 2 3 4 5 6 7
// 输出: 1 2 3 4 5 6 7
```
### Sort
### 排序 Sort
```java
char[] chars = {'b', 'a', 'c'};
@ -465,6 +465,47 @@ int max = (a > b) ? a : b;
System.out.println(max);
```
### 逻辑运算符
```java
// 与运算
if (condition1 && condition2) {
// 如果 condition1 和 condition2 都成立
// 则执行此处的代码
}
// 或运算
if (condition1 || condition2) {
// 如果condition1或condition2任意一个成立
// 则执行此处的代码
}
// 非运算
if (!condition) {
// 如果条件不成立,则执行此处的代码
}
```
### 比较运算
```java
// 等于
if (a == b) {
// 如果a等于b则执行此处的代码
}
// 不等于
if (a != b) {
// 如果a不等于b则执行此处的代码
}
// 大于、大于等于、小于、小于等于
if (a > b) {}
if (a >= b) {}
if (a < b) {}
if (a <= b) {}
```
Java 循环
----
@ -544,13 +585,183 @@ for (int i = 0; i < 5; i++) {
// 输出: 0123
```
Java 框架搜集
--------------------
Java 多线程
---
### Java 搜集
### 创建线程
<!--rehype:wrap-class=row-span-2 col-span-2-->
```java
// 实现Runnable接口
public class RunnableThread implements Runnable {
@Override
public void run() {
// todo something
}
}
```
实现Callable接口,T 替换成实际类型
```java
public class CallableTask implements Callable<T> {
@Override
public T call() throws Exception {
// todo something
return null;
}
}
```
继承Thrad类
```java
public class ExtendsThread extends Thread {
@Override
public void run() {
// todo something
}
}
```
运行线程
```java
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread(new RunnableThread()).start();
new ExtendsThread2().start();
FutureTask<Integer> integerFutureTask = new FutureTask<>(new CallableTask());
integerFutureTask.run();
}
```
### 线程池
- corePoolSize: 核心线程数
- maximumPoolSize: 最大线程数
- keepAliveTime: 线程空闲时间
- timeUni: 线程空闲时间单位
- workQueue: 线程等待队列
- threadFactory: 线程创建工厂
- handler: 拒绝策略
```java
ThreadPoolExecutor threadPoolExecutor
= new ThreadPoolExecutor(
2, 5,
5, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10),
new DefaultThreadFactory("pollName"),
new ThreadPoolExecutor.CallerRunsPolicy()
);
// 内置的线程池, 不推荐生产使用
Executors.newCachedThreadPool();
Executors.newFixedThreadPool(10);
Executors.newScheduledThreadPool(10);
Executors.newSingleThreadExecutor();
```
### synchronized
```java
// 代码块
synchronized(obj) {
...
}
// (静态)方法
public synchronized
(static) void methodName() {
...
}
```
### 线程编排
<!--rehype:wrap-class=row-span-2 col-span-2-->
```java
// CountDownLatch
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(() -> {
try {
...
}finally {
countDownLatch.countDown();
}
}).start();
countDownLatch.await();
```
CompletableFuture
```java
CompletableFuture<Void> task1 = CompletableFuture.runAsync(() -> {});
CompletableFuture<Void> task2 = CompletableFuture.runAsync(() -> {});
CompletableFuture<Void> task3 = CompletableFuture.runAsync(() -> {});
CompletableFuture.allOf(task1, task2, task3).get();
```
Semaphore
```java
Semaphore semaphore = new Semaphore(5);
try {
semaphore.acquire();
} finally {
semaphore.release();
}
```
### ThreadLocal
```java
ThreadLocal<Integer> threadLocal
= new ThreadLocal<>();
```
使用完之后一定要记得 `remove`, 否则会内存泄露
```java
threadLocal.set(1);
threadLocal.get();
threadLocal.remove();
```
### 线程等待与唤醒
```java
// 需要synchronized修饰的代码块才能使用
wait();
notify();
notifyAll();
// 使用lock的条件唤醒
ReentrantLock lock = new ReentrantLock();
Condition condition= lock.newCondition();
lock.lock();
try{
// 当前线程唤醒或等待
condition.await();
condition.signal();
condition.signalAll();
} finally {
lock.unlock
}
// LockSupport,可以先unpark,后续park不会阻塞线程
LockSupport.park(obj);
LockSupport.unpark(thread);
```
Java 框架搜集
---
### Java 集合
<!--rehype:wrap-class=col-span-2 row-span-2-->
集 | Interface | 有序 | 已排序 | 线程安全 | 复制 | Nullable
| Interface | 有序 | 已排序 | 线程安全 | 复制 | Nullable
:-|:-|:-|:-|:-|:-|:-
[ArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) | List | Y | _N_ | _N_ | Y | Y
[Vector](https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html) | List | Y | _N_ | Y | Y | Y
@ -595,6 +806,10 @@ nums.remove(0); // 非常慢
for (Integer value : nums) {
System.out.println(value);
}
// lambda 打印元素
nums.forEach(
e -> System.out.println(e.toString())
);
```
### HashMap
@ -615,6 +830,25 @@ m.forEach((key, value) -> {
});
```
### ConcurrentHashMap
```java
ConcurrentHashMap<Integer, String> m
= new ConcurrentHashMap<>();
m.put(100, "Hello");
m.put(101, "Geeks");
m.put(102, "Geeks");
// 移除
m.remove(101, "Geeks");
// 如果不存在,就添加,存在就不变更
m.putIfAbsent(103, "Hello");
// 替换
m.replace(101, "Hello", "For");
System.out.println(m);
```
### HashSet
```java
@ -634,6 +868,9 @@ set.remove("cat");
for (String element : set) {
System.out.println(element);
}
set.forEach(
e -> System.out.println(e.toString())
);
```
### ArrayDeque
@ -654,6 +891,510 @@ System.out.println(a.peek());
System.out.println(a.pop());
```
Java I/O流
---
### 常见的类和操作
<!--rehype:wrap-class=row-span-5-->
字节流
- `InputStream` 字节输入流的抽象基类
- `FileInputStream` 从文件中读取字节的输入流
- `ByteArrayInputStream` 从字节数组中读取字节的输入流
- `OutputStream` 字节输出流的抽象基类
- `FileOutputStream` 向文件中写入字节的输出流
- `ByteArrayOutputStream` 将字节写入到字节数组的输出流
字符流
- `Reader` 字符输入流的抽象基类
- `FileReader` 从文件中读取字符的输入流
- `BufferedReader` 带缓冲区的字符输入流
- `InputStreamReader` 字节流到字符流的桥接器
- `Writer` 字符输出流的抽象基类
- `FileWriter` 向文件中写入字符的输出流
- `BufferedWriter` 带缓冲区的字符输出流
- `OutputStreamWriter` 字符流到字节流的桥接器
对象流
- `ObjectInputStream` 从输入流中读取Java对象的流
- `ObjectOutputStream` 将Java对象写入输出流的流
缓冲流
- `BufferedInputStream` 带缓冲区的字节输入流
- `BufferedOutputStream` 带缓冲区的字节输出流
- `BufferedReader` 带缓冲区的字符输入流
- `BufferedWriter` 带缓冲区的字符输出流
数据流
- `DataInputStream` 从输入流中读取基本数据类型的数据
- `DataOutputStream` 将基本数据类型数据写入输出流
文件类
- `File` 文件和目录路径名的抽象表示
- `FileReader` 从文件中读取字符的输入流
- `FileWriter` 向文件中写入字符的输出流
输入输出异常处理
- `IOException` Java I/O操作中的通用异常
- `FileNotFoundException` 当试图打开指定文件失败时抛出
- `EOFException` 在尝试读取流的末尾时抛出
其他流
- `PrintStream` 打印格式化表示的对象的输出流
- `PrintWriter` 格式化的文本输出流
- `RandomAccessFile` 随机访问文件的类,支持读取和写入操作
### 字节流
```java
// 文件输入流
InputStream inputStream
= new FileInputStream("input.txt");
// 文件输出流
OutputStream outputStream
= new FileOutputStream("output.txt");
// 缓冲字节输入流
InputStream bufferedInputStream
= new BufferedInputStream(inputStream);
// 缓冲字节输出流
OutputStream bufferedOutputStream
= new BufferedOutputStream(outputStream);
```
### 字符流
```java
// 文件字符输入流
Reader fileReader
= new FileReader("input.txt");
// 文件字符输出流
Writer fileWriter
= new FileWriter("output.txt");
// 缓冲字符输入流
Reader bufferedFileReader
= new BufferedReader(
new FileReader("input.txt")
);
// 缓冲字符输出流
Writer bufferedFileWriter
= new BufferedWriter(
new FileWriter("output.txt")
);
```
### 数据流
```java
// 数据输入流
DataInputStream dataInputStream
= new DataInputStream(inputStream);
// 数据输出流
DataOutputStream dataOutputStream
= new DataOutputStream(outputStream);
```
### 对象流
```java
// 对象输入流
ObjectInputStream objectInputStream
= new ObjectInputStream(inputStream);
// 对象输出流
ObjectOutputStream objectOutputStream
= new ObjectOutputStream(outputStream);
```
### 序列化与反序列化
<!--rehype:wrap-class=col-span-2-->
序列化对象到文件
```java
try (
ObjectOutputStream objectOutputStream
= new ObjectOutputStream(new FileOutputStream("object.dat"))
) {
objectOutputStream.writeObject(object);
}
```
从文件反序列化对象
```java
try (
ObjectInputStream objectInputStream
= new ObjectInputStream(new FileInputStream("object.dat"))
) {
Object object = objectInputStream.readObject();
}
```
### 标准输入输出流
标准输入流
```java
InputStream standardInputStream
= System.in;
```
标准输出流
```java
PrintStream standardOutputStream
= System.out;
```
### 基本操作
<!--rehype:wrap-class=row-span-2-->
```java
// 读取字节数据
int byteData = inputStream.read();
// 写入字节数据
outputStream.write(byteData);
// 读取字符数据
int charData = reader.read();
// 写入字符数据
writer.write(charData);
```
### 关闭流
```java
// 关闭输入流
inputStream.close();
// 关闭输出流
outputStream.close();
```
Java Stream 流
---
<!--rehype:body-class=cols-2-->
### 创建流
从集合创建流
```java
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> streamFromList = list.stream();
```
从数组创建流
```java
String[] array = {"d", "e", "f"};
Stream<String> streamFromArray = Arrays.stream(array);
```
创建空流
```java
Stream<String> emptyStream = Stream.empty();
```
创建无限流
```java
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 2);
```
### 中间操作
```java
// 过滤
Stream<String> filteredStream = list.stream().filter(
s -> s.startsWith("a")
);
// 映射
Stream<Integer> mappedStream = list.stream().map(String::length);
// 排序
Stream<String> sortedStream = list.stream().sorted();
// 去重
Stream<String> distinctStream = list.stream().distinct();
// 截断
Stream<String> limitedStream = list.stream().limit(2);
// 跳过
Stream<String> skippedStream = list.stream().skip(1);
```
### 终端操作
```java
// 聚合操作
Optional<String> anyElement = list.stream().findAny();
Optional<String> firstElement = list.stream().findFirst();
long count = list.stream().count();
Optional<String> maxElement = list.stream()
.max(Comparator.naturalOrder());
Optional<String> minElement = list.stream()
.min(Comparator.naturalOrder());
// 检查匹配
boolean anyMatch = list.stream().anyMatch(s -> s.contains("a"));
boolean allMatch = list.stream().allMatch(s -> s.length() == 1);
boolean noneMatch = list.stream().noneMatch(s -> s.contains("z"));
// 归约
Optional<String> reducedString = list.stream()
.reduce((s1, s2) -> s1 + s2);
String reducedStringWithIdentity = list.stream()
.reduce("Start:", (s1, s2) -> s1 + s2);
// 收集
List<String> collectedList = list.stream()
.collect(Collectors.toList());
Set<String> collectedSet = list.stream()
.collect(Collectors.toSet());
Map<Integer, String> collectedMap = list.stream()
.collect(
Collectors.toMap(String::length, Function.identity())
);
```
### 并行流
```java
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
List<String> upperCaseList = list.parallelStream()
.map(String::toUpperCase)
.collect(Collectors.toList());
```
反射
---
这些是使用 Java 反射时常见的操作。使用反射需要注意性能和安全性问题,尽量避免在性能要求高的地方过度使用。
### 获取 Class 对象
<!--rehype:wrap-class=col-span-2-->
```java
// 通过类名获取Class对象
Class<?> clazz1 = MyClass.class;
// 通过对象获取Class对象
MyClass obj = new MyClass();
Class<?> clazz2 = obj.getClass();
// 通过完整类名字符串获取Class对象
Class<?> clazz3 = Class.forName("com.example.MyClass");
```
### 获取类的信息
<!--rehype:wrap-class=row-span-2-->
获取类的名称
```java
String className = clazz.getName();
```
获取类的修饰符
```java
int modifiers = clazz.getModifiers();
```
获取类的包信息
```java
Package pkg = clazz.getPackage();
```
获取类的父类
```java
Class<?> superClass = clazz.getSuperclass();
```
获取类实现的接口
```java
Class<?>[] interfaces = clazz.getInterfaces();
```
### 创建对象实例
<!--rehype:wrap-class=col-span-2-->
```java
// 使用默认构造函数创建对象
MyClass instance = (MyClass) clazz.newInstance();
// 使用带参数的构造函数创建对象
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
MyClass instanceWithArgs = (MyClass) constructor.newInstance("example", 123);
```
### 获取和设置字段值
<!--rehype:wrap-class=col-span-2-->
```java
// 获取字段值
Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true); // 如果字段是私有的,需要设置可访问
Object value = field.get(instance);
// 设置字段值
field.set(instance, newValue);
```
### 处理泛型
```java
// 获取泛型信息
Type genericType = field.getGenericType();
```
### 调用方法
<!--rehype:wrap-class=col-span-2-->
```java
// 获取方法
Method method = clazz.getDeclaredMethod("methodName", parameterTypes);
method.setAccessible(true); // 如果方法是私有的,需要设置可访问
// 调用方法
Object result = method.invoke(instance, args);
```
### 其他常用操作
<!--rehype:wrap-class=row-span-2-->
```java
// 判断是否是数组、枚举、注解等
boolean isArray = clazz.isArray();
boolean isEnum = clazz.isEnum();
boolean isAnnotation = clazz.isAnnotation();
// 获取构造函数、字段、方法等
Constructor<?>[] constructors = clazz.getConstructors();
Field[] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclaredMethods();
```
### 处理注解
<!--rehype:wrap-class=col-span-2-->
```java
// 获取注解信息
Annotation annotation = field.getAnnotation(MyAnnotation.class);
```
方法引用
---
### 方法引用
<!--rehype:wrap-class=row-span-3-->
Java 的 `Consumer` 接口里的 `accept` 方法接受参数但不返回值。要让它打印传入的参数,可以这样做:
```java
Consumer<String> test = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
test.accept("test");
```
更简单的我们可以直接传入Lambda表达式
```java
Consumer<String> test = System.out::println;
```
方法引用通过方法的名字指向一个方法,使语言构造更简洁,减少冗余代码。
#### 使用方式
- 引用方法
- 引用构造方法
- 引用数组
### 静态方法引用
```java
Comparator<Integer> comparator = Math::max;
int result = comparator.compare(1, 2);
// 返回 2
```
### 实例方法引用
```java
String str = "HELLO";
String lowerCase = str::toLowerCase;
// 返回 "hello"
```
### 构造方法引用
```java
Supplier<String> supplier = String::new;
String str = supplier.get();
// 返回一个空字符串
```
### 数组构造方法引用
```java
Function<Integer, String[]> function = String[]::new;
String[] array = function.apply(5);
// 返回 5 个空字符串的数组
```
<!--rehype:className=wrap-text-->
### 对象中的方法引用
```java
String someStr = "HELLO";
String lowerCase = someStr::toLowerCase;
// 返回 "hello"
```
### 对象中的静态方法引用
```java
SomeClass someObject = new SomeClass();
int result = someObject::staticMethod;
// 调用静态方法
```
杂项 Misc
----
@ -685,7 +1426,7 @@ text.split(Pattern.quote("|"));
```java
// 我是单行注释!
/*
而我是一个
多行注释!
@ -754,6 +1495,7 @@ text.split(Pattern.quote("|"));
<!--rehype:className=cols-7 style-none-->
### 数学方法
<!--rehype:wrap-class=row-span-2-->
方法 | 说明
:-|:-
@ -771,7 +1513,7 @@ text.split(Pattern.quote("|"));
`Math.toDegrees(rad)` | 以度为单位的角度弧度
`Math.toRadians(deg)` | 以弧度为单位的角度度
### Try/Catch/Finally
### 异常 Try/Catch/Finally
```java
try {
@ -783,44 +1525,40 @@ try {
}
```
### 反射
### util工具类
<!--rehype:wrap-class=row-span-2-->
- `ArrayDeque`: 可调整大小的数组双端队列实现了Deque接口
- `Arrays`: 提供静态工厂,允许将数组视为列表
- `Collections`: 包含操作集合或返回集合的静态方法
- `Date`: 表示特定时间瞬间,精度为毫秒
- `Dictionary`: 抽象父类可用于键值对映射例如Hashtable
- `EnumMap`: 专门用于枚举键的Map实现
- `EnumSet`: 专门用于枚举键的Set实现
- `Formatter`: 提供对布局、对齐、数字、字符串和日期/时间数据的格式化支持,以及特定于语言环境的输出
- `SecureRandom`: 生成安全的伪随机数流的实例
- `UUID`: 表示不可变的通用唯一标识符
- `Vector`: 实现了可增长的对象数组
- `LocalDate`: 表示无时区的日期仅包含年月日不可变且线程安全适用于Java 8及更高版本
- `LocalTime`: 表示无时区的时间仅包含时分秒不可变且线程安全适用于Java 8及更高版本
- `LocalDateTime`: 表示无时区的日期时间包含年月日时分秒不可变且线程安全适用于Java 8及更高版本
### Collections 工具类
```java
/**
* 利用反射动态加载依赖库
* java9及以上版本可用
* @param jar jar文件
*/
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
MethodHandle addURL = lookup.unreflect(method);
URL url = jar.toURI().toURL();
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] {url});
addURL.invoke(urlClassLoader, url);
//java8
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, url);
// 计算出现频率
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(3);
list.add(3);
int frequency = Collections
.frequency(list, 2); // frequency = 2
```
### util工具类
- `ArrayDeque` 提供 resizable-array 并实现 Deque 接
- `Arrays` 包含一个静态工厂,允许将数组视为列表
- `Collections` 包含对集合进行操作或返回集合的静态方法
- `Date` 表示特定的时间瞬间,精度为毫秒
- `Dictionary` 是任何类的抽象父类,例如 Hashtable它将键映射到值
- `EnumMap` 一个专门用于枚举键的 Map 实现
- `EnumSet` 一个专门用于枚举键的 Set 实现
- `Formatter` 提供对布局对齐和对齐、数字、字符串和日期/时间数据的常用格式以及特定于语言环境的输出的支持
- `SecureRandom` 实例用于生成安全的伪随机数流
- `UUID` 表示一个不可变的通用唯一标识符
- `Vector` 实现了一个可增长的对象数组
- `LocalDate` 表示没有时区的日期只包含年月日不可变并且线程安全的java8 及以上版本可用
- `LocalTime` 表示没有时区的时间只包含时分秒不可变并且线程安全的java8 及以上版本可用
- `LocalDateTime` 表示没有时区的日期时间同时包含年月日时分秒不可变并且线程安全的java8 及以上版本可用
另见
---
- [Java 官网](https://www.java.com/zh-CN/) _(java.com)_
- [Java 官网](https://www.oracle.com/cn/java/) _(oracle.com/cn/java)_

View File

@ -11,7 +11,7 @@ JavaScript 备忘清单
JavaScript 是一种轻量级的解释型编程语言。
- [JSON 备忘清单](json.md)
- [JavaScript 中的正则表达式](/regex#regex-in-javascript)
- [JavaScript 中的正则表达式](./regex.md#javascript-中的正则表达式)
- [TypeScript 备忘清单](./typescript.md)
### 打印调试
@ -88,7 +88,7 @@ console.log(single.length);
```javascript
5 + 5 = 10 // 加法 Addition
10 - 5 = 5 // 法 Subtraction
10 - 5 = 5 // 法 Subtraction
5 * 10 = 50 // 乘法 Multiplication
10 / 5 = 2 // 除法 Division
10 % 5 = 0 // 取模 Modulo
@ -469,6 +469,15 @@ function sum(num1, num2) {
sum(2, 4); // 6
```
### 立即执行函数
```javascript
//命名函数并立即执行一次
(function sum(num1, num2) {
return num1 + num2;
})(2,4)//6
```
### 函数表达式
```javascript
@ -1190,6 +1199,99 @@ console.log(myCat.name);
myCat.name = 'Yankee';
```
### Proxy
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。
```javascript
// 用于拦截对象的读取属性操作。
const handler = {
get: function(obj, prop) {
return prop in obj ? obj[prop] : 37;
}
};
const p = new Proxy({}, handler);
p.a = 1;
p.b = undefined;
console.log(p.a, p.b); // 1, undefined
console.log('c' in p, p.c); // false, 37
```
#### 语法
```javascript
const p = new Proxy(target, handler)
```
- target 要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
- handler 一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。
#### 方法
:- | :-
:- | :-
`Proxy.revocable()` | 创建一个可撤销的Proxy对象 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable)
#### handler 对象的方法
:- | :-
:- | :-
`handler.getPrototypeOf()` | Object.getPrototypeOf 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf)
`handler.setPrototypeOf()` | Object.setPrototypeOf 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf)
`handler.isExtensible()` | Object.isExtensible 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible)
`handler.preventExtensions()` | Object.preventExtensions 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions)
`handler.getOwnPropertyDescriptor()` | Object.getOwnPropertyDescriptor 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor)
`handler.defineProperty()` | Object.defineProperty 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty)
`handler.has()` | in 操作符的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has)
`handler.get()` | 属性读取操作的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get)
`handler.set()` | 属性设置操作的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set)
`handler.deleteProperty()` | delete 操作符的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty)
`handler.ownKeys()` | Object.getOwnPropertyNames 方法和 Object.getOwnPropertySymbols 方法的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys)
`handler.apply()` | 函数调用操作的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply)
`handler.construct()` | new 操作符的捕捉器 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct)
<!--rehype:className=style-list-arrow-->
### Reflect
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers (en-US)的方法相同。Reflect不是一个函数对象因此它是不可构造的。
```javascript
// 检测一个对象是否存在特定属性
const duck = {
name: 'Maurice',
color: 'white',
greeting: function() {
console.log(`Quaaaack! My name is ${this.name}`);
}
}
Reflect.has(duck, 'color');
// true
Reflect.has(duck, 'haircut');
// false
```
#### 静态方法
:- | :-
:- | :-
`Reflect.apply(target, thisArgument, argumentsList)` | 对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和 Function.prototype.apply() 功能类似 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply)
`Reflect.construct(target, argumentsList[, newTarget])` | 对构造函数进行 new 操作,相当于执行 new target(...args) [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct)
`Reflect.defineProperty(target, propertyKey, attributes)` | 和 Object.defineProperty() 类似。如果设置成功就会返回 true [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty)
`Reflect.deleteProperty(target, propertyKey)` | 作为函数的delete操作符相当于执行 delete target[name] [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty)
`Reflect.get(target, propertyKey[, receiver])` | 获取对象身上某个属性的值,类似于 target[name] [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get)
`Reflect.getOwnPropertyDescriptor(target, propertyKey)` | 类似于 Object.getOwnPropertyDescriptor()。如果对象中存在该属性,则返回对应的属性描述符,否则返回 undefined [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor)
`Reflect.getPrototypeOf(target)` | 类似于 Object.getPrototypeOf() [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf)
`Reflect.has(target, propertyKey)` | 判断一个对象是否存在某个属性,和 in 运算符 的功能完全相同 [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has)
`Reflect.isExtensible(target)` | 类似于 Object.isExtensible() [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible)
`Reflect.ownKeys(target)` | 返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 Object.keys(), 但不会受enumerable 影响) [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys)
`Reflect.preventExtensions(target)` | 类似于 Object.preventExtensions()。返回一个Boolean [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions)
`Reflect.set(target, propertyKey, value[, receiver])` | 将值分配给属性的函数。返回一个Boolean如果更新成功则返回true [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set)
`Reflect.setPrototypeOf(target, prototype)` | 设置对象原型的函数。返回一个 Boolean如果更新成功则返回 true [#](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf)
<!--rehype:className=style-list-arrow-->
JavaScript this 绑定
----

View File

@ -113,7 +113,7 @@ $("selector1, selector2 ...selectorn")
- [[name!="value"]](https://api.jquery.com/attribute-not-equal-selector/) _选择不具有指定属性或具有指定属性但不具有特定值的元素_<!--rehype:tooltips-->
- [[name^="value"]](https://api.jquery.com/attribute-starts-with-selector/) _选择具有指定属性且值恰好以给定字符串开头的元素_<!--rehype:tooltips-->
- [[name]](https://api.jquery.com/has-attribute-selector/) _选择具有指定属性和任意值的元素_<!--rehype:tooltips-->
- [[name="value"][name2="value2"]](https://api.jquery.com/multiple-attribute-selector/) _匹配匹配所有指定属性过滤器的元素_<!--rehype:tooltips-->
- [[name="value"]](https://api.jquery.com/multiple-attribute-selector/) _匹配匹配所有指定属性过滤器的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 子过滤器

View File

@ -1,7 +1,7 @@
Julia 备忘清单
===
本备忘清单旨在快速理解 [Julia](https://mysql.com) 一份简单而粗略的语言概览,供您参考。
本备忘清单旨在快速理解 [Julia](https://julialang.org/) 一份简单而粗略的语言概览,供您参考。
入门
---
@ -678,4 +678,5 @@ names(ModuleName, all::Bool, imported::Bool)
另见
---
- [快速入门一份简单而粗略的语言概览](https://cheatsheet.juliadocs.org/zh-cn/)
- [Julia 官方网站](https://julialang.org/) _(julialang.org)_
- [快速入门一份简单而粗略的语言概览](https://cheatsheet.juliadocs.org/zh-cn/) _(juliadocs.org)_

283
docs/justfile.md Normal file
View File

@ -0,0 +1,283 @@
Justfile 备忘清单
===
[![Repo Dependents](https://badgen.net/github/dependents-repo/casey/just)](https://github.com/casey/just/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/casey/just)
[`just`](https://github.com/casey/just) 为您提供一种保存和运行项目特有命令的便捷方式
入门
----
### 简单的 justfile
```bash
#!/usr/bin/env just --justfile
# hello 是配方(recipe)的名字
hello:
echo "Hello World!"
```
### 带参数的配方
<!--rehype:wrap-class=row-span-2-->
```bash
filter PATTERN:
echo {{PATTERN}}
# 带有默认值的 param
email address='master@example.com':
echo {{address}}
# 带表达式的参数
test triple=(arch() + "-unknown-unknown"):
./test {{triple}}
# 变量参数:“+”接受一个或多个值
backup +FILES:
scp {{FILES}} me@example.com
# 带*的可变参数:零个或多个值
commit MESSAGE *FLAGS:
git commit {{FLAGS}} -m "{{MESSAGE}}"
```
### 变量和子变量
```bash
version := "0.2.7"
tardir := "awesomesauce-" + version
tarball := tardir + ".tar.gz"
test:
echo {{version}}
# 仅从命令行设置/覆盖变量
$ just --set version 1.1.0
```
### 默认配置
```bash
default: lint build test
# 显示帮助信息的默认配方
default:
@just --list
# 如果没有默认配方,则默认第一个配方
```
### 命令的环境变量
```bash
export RUST_BACKTRACE := "1"
test:
# 如果堆栈崩溃,将打印堆栈跟踪
cargo test
```
### backtick-从评估中捕获输出
<!--rehype:wrap-class=row-span-2-->
```bash
JAVA_HOME := `jbang jdk home 11`
# Backtick 代码块
stuff := \```
foo="hello"
echo $foo "world"
\```
done BRANCH=`git rev-parse --abbrev-ref HEAD`:
git checkout master
sloc:
@echo "`wc -l *.c` lines of code"
# Backtick 在任何地方工作:字符串/变量/参数
```
注意: 上面示例中 <code>\\`</code> 没有转义过来
### 别名
```bash
alias t := test
alias c := check
```
### 带有命令 env 变量配置
```bash
# recipe 参数作为$符号的Env变量
hello $name:
echo $name
```
### 设置
```bash
set shell := ["zsh", "-cu"]
set dotenv-load := true
serv:
echo "$DATABASE_ADDRESS from .env"
set positional-arguments := true
foo:
echo $0
echo $1
```
### 配置依赖性-之前、之后和周围
```bash
# 执行序列A-> B-> C-> D
b: a && c d
# 执行配方(recipe)“A”
b:
echo 'B start!'
just a
echo 'B end!'
# 通过表达式依赖参数
default: (build "main")
build target:
@echo 'Building {{target}}...'
```
### Just 函数
```shell
hello name:
echo {{os()}}
echo {{uppercase(name)}}
# 函数类别
* 系统信息
* 系统信息
* Justfile 和 Justfile目录
* 字符串操纵
* 路径操纵
# String contact: (key + ":" + value)
```
### 字符串-用双引号转义
```bash
tring-with-tab := "\t"
string-with-newline := "\n"
escapes := '\t\n\r\"\\'
# 该字符串将评估为`foo\nbar\n`
x := '''
foo
bar
'''
```
### 命令注释quiet(@)、suppre­ss(-)、invert(!)
```bash
hello:
@ echo "command will not be echoed"
- echo "ignore none-zero exit status and continue"
@hello2:
echo "command will not be echoed"
# 反转命令退出状态!- shell 功能
hello3:
# 如果命令成功退出状态为0请仅退出
! git branch | grep '* master'
```
### 条件表达式if、loop 和 while
<!--rehype:wrap-class=row-span-2-->
```shell
# 正则表达匹配
fo := if "hi" =~ 'h.+' { "match" } else { "mismatch" }
test:
if true; then echo 'True!'; fi
for file in `ls .`; do echo $file; done
while `server-is-dead`; do ping -c 1 server; done
foo bar:
echo {{ if bar == "bar" { "hello" } else { "bye" } }}
```
### Just 命令行
<!--rehype:wrap-class=row-span-2-->
```bash
# 运行配方(recipe)
$ just hello param1
# 按字母顺序列出配方(recipe)
$ just --list
$ just --summary
# 显示有关配方(recipe)的完整信息
just --show test
# 选择以交互方式运行的配方(recipe)
$ just --choose
# shell 完成
just --comp­letions zsh
```
### 其他语言的配置
```bash
bash-test:
#!/usr/bin/env bash
set -euxo pipefail
hello='Yo'
echo "$hello from bash!"
```
### 私人配置 - 名称以开头 _
```bash
test: _test-helper
./bin/test
# ommited from 'just --list'
_test-helper:
./bin/super-secret-test-helper-stuff
```
### 注意
```bash
# 每个命令行都由一个新的 shell 执行
# 如果一个命令行执行失败just会退出
# 后面的命令行不会执行
change-working-dir:
cd bar && pwd
# 多行构造 - 用斜线转义换行符
if true; then \
echo 'True!'; \
fi
# justfile 不区分大小写Justfile、JUSTFILE 等
# justfile 可以被隐藏:'.justfile'
# 从子目录调用配方:`~/app1/target>$ just build`
```
### 作为 shell 别名的配置
```bash
for recipe in `just -f ~/.justfile --summary`; do
alias $recipe="just -f ~/.justfile -d. $recipe"
done
```
### IDE 集成
- VS Code: <https:­//m­ark­etp­lac­e.v­isu­als­tud­io.c­om­/it­ems­?it­emN­ame­=sk­ell­ock.just>
- JetBrains: <https:­//p­lug­ins.je­tbr­ain­s.c­om/­plu­gin­/18­658­-just>

View File

@ -17,6 +17,7 @@ fun main() {
main() 函数是每个 Kotlin 程序的起点,在执行之前必须包含在代码中
### 打印声明
<!--rehype:wrap-class=row-span-2-->
```kotlin
println("Greetings, earthling!")
@ -31,6 +32,7 @@ Take me to your leader.
```
### 注释
<!--rehype:wrap-class=row-span-2-->
```kotlin
// 这是单行注释
@ -109,7 +111,7 @@ println(monument.length)
```
### 字符转义序列
<!--rehype:wrap-class=row-span-2-->
<!--rehype:wrap-class=row-span-3-->
```kotlin
print("\"Excellent!\" I cried. \"Elementary,\" said he.")
@ -149,6 +151,7 @@ print("\"Excellent!\" I cried. \"Elementary,\" said he.")
```
### 增强赋值运算符
<!--rehype:wrap-class=row-span-2-->
```kotlin
var batteryPercentage = 80
@ -267,6 +270,7 @@ println(shorts && sunny) // false
```
### 或运算符:||
<!--rehype:wrap-class=row-span-2-->
```kotlin
var late = true
@ -295,6 +299,7 @@ println(!full) // true
```
### 评估顺序
<!--rehype:wrap-class=row-span-2-->
```kotlin
!true && (false || true) // false
@ -311,6 +316,16 @@ println(!full) // true
*/
```
### 等式运算符
```kotlin
var myAge = 22
var sisterAge = 21
myAge == sisterAge // false
myAge !== sisterAge // true
```
### 嵌套条件
```kotlin
@ -350,22 +365,12 @@ when(grade) {
var height = 46 // inches
if (height in 1..53) {
println("抱歉,您必须至少 54 英寸才能乘坐过山车"
println("抱歉,您必须至少 54 英寸才能乘坐过山车")
}
// Prints: 抱歉,您必须至少 54 英寸才能乘坐过山车
```
<!--rehype:className=wrap-text-->
### 等式运算符
```kotlin
var myAge = 22
var sisterAge = 21
myAge == sisterAge // false
myAge !== sisterAge // true
```
Collections
---
@ -523,7 +528,7 @@ fun main() {
### 默认参数
```kotlin
fun favoriteLanguage(name, language = "Kotlin") {
fun favoriteLanguage(name: String, language: String = "Kotlin") {
println("Hello, $name. Your favorite programming language is $language")
}
@ -606,23 +611,148 @@ fun main() {
```
<!--rehype:className=wrap-text-->
---
### 类示例
### 简单的高阶函数
<!--rehype:wrap-class=col-span-2-->
```kotlin
// 具有包含默认值的属性的类
class Student {
var name = "Lucia"
var semester = "Fall"
var gpa = 3.95
// 注意啦,这里的 num1AndNum2 有个 operation它是接收了一个函数作为形参
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
// 让我们试着向 operation 传入参数
return operation(num1, num2)
}
// 没有类体的简写语法
class Student
fun plus(num1: Int, num2: Int): Int {
return num1 + num2
}
fun main(args: Array<String>) {
val total = num1AndNum2(100, 200, ::plus)
println(total)//300
// 怎么样?我们利用传入一个函数来充当另一个函数的参数
}
```
还记得我们怎么在 Java 中用接口吗?试着用函数参数简化它
<!--rehype:className=wrap-text-->
### 以匿名函数作为参数的函数
```kotlin
//operation是一个函数类型的参数哦
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
return operation(num1, num2)
}
fun main(args: Array<String>) {
//这里我们定义一个匿名函数
val operation: (Int, Int) -> Int = { i: Int, i2: Int ->
i + i2
}
val total = num1AndNum2(100, 200, operation)
println(total) //300
}
```
<!--rehype:className=wrap-text-->
### Lambda表达式方式传入函数参数
<!--rehype:wrap-class=col-span-2-->
```kotlin
//我们还是不改变什么
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
return operation(num1, num2)
}
fun main(args: Array<String>) {
//wow哦天哪Lambda可以做到这样简洁
val total = num1AndNum2(100, 200) { n1, n2 ->
n1 + n2
}
println(total)
}
```
这里之所以可以把lambda写在外部是因为operation是最后一个参数。
<!--rehype:className=wrap-text-->
### 扩展函数
```kotlin
// Kotlin File
fun String.lettersCount(): Int {
var count = 0
// this 相当于我们下面写的字符串具体的内容
// for 可以用 forEach 代替
for (char in this) {
// 判断是不是字母(包括中文)
if (char.isLetter()) {
count++
}
}
return count
}
fun main() {
//不修改 String 类的情况下新增方法
println("123demo".lettersCount())
// Print: 4
}
```
### 运算符重载
```kotlin
class Money(var amount: Double)
// 配合扩展函数,重载运算符 + 即 plus
operator fun Money.plus(money: Money): Money {
// 把金额相加返回一个新的 Money对象
return Money(this.amount + money.amount)
}
fun main() {
val appleMoney = Money(10.0)
val eggMoney = Money(6.0)
// 你没有看错,我们将两个类对象相加了
val allMoney = appleMoney + eggMoney
println(allMoney.amount)
// Print: 16.0
}
```
这里的 **运算符重载** 依赖于 **扩展函数**
<!--rehype:className=wrap-text-->
### 中缀表达式
```kotlin
// infix 定义一个中缀表达式,类似扩展函数那样
infix fun LocalDate.formatBy(pattern:String):String{
val formatter = DateTimeFormatter.ofPattern(pattern)
return this.format(formatter)
}
fun main() {
val currentDate = LocalDate.now()
println(currentDate formatBy "yyyy-MM-dd")
// Print: 2024-02-08
(1 until 100).forEach {
println(it)
// Print 1 至 99
}
}
```
---
### 类实例
```kotlin
@ -646,42 +776,73 @@ fun main() {
```
### 主构造函数
<!--rehype:wrap-class=col-span-2-->
```kotlin
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int)
class Student(
val name: String,
val gpa: Double,
val semester: String,
val estimatedGraduationYear: Int
)
fun main() {
var student = Student("Lucia", 3.95, "Fall", 2022)
println(student.name)
// Prints: Lucia
println(student.gpa)
// Prints: 3.95
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints: 2022
val student = Student("Lucia", 3.95, "Fall", 2022)
println(student.name)
// Prints: Lucia
println(student.gpa)
// Prints: 3.95
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints: 2022
}
```
<!--rehype:className=wrap-text-->
### 初始化块
```
### 次构造函数
<!--rehype:wrap-class=col-span-2-->
```kotlin
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
init {
println("$name has ${estimatedGraduationYear - 2020} years left in college.")
}
class Student(
val name: String,
val gpa: Double,
val semester: String,
val estimatedGraduationYear: Int
) {
constructor(name: String, gpa: Double) : this(name, gpa, "Fall", 2024)
}
fun main() {
var student = Student("Lucia", 3.95, "Fall", 2022)
// Prints: Lucia has 2 years left in college.
val student = Student("Lucia", 3.95)
println(student.name)
// Prints: Lucia
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints: 2024
}
```
<!--rehype:className=wrap-text-->
### 类示例
```kotlin
// 具有包含默认值的属性的类
class Student {
var name = "Lucia"
var semester = "Fall"
var gpa = 3.95
}
// 没有类体的简写语法
class Student
```
### 成员函数
<!--rehype:wrap-class=col-span-2-->
<!--rehype:wrap-class=col-span-2 row-span-2-->
```kotlin
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
@ -712,6 +873,109 @@ fun main() {
```
<!--rehype:className=wrap-text-->
### 初始化块
```kotlin
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
init {
println("$name has ${estimatedGraduationYear - 2020} years left in college.")
}
}
fun main() {
var student = Student("Lucia", 3.95, "Fall", 2022)
// Prints: Lucia has 2 years left in college.
}
```
<!--rehype:className=wrap-text-->
### Data数据类
```kotlin
// 默认实现 getter/setter 和 toString 这些方法
data class UserInfo(
val name: String,
val age: Int
)
fun main() {
val userInfo = UserInfo("张三", 20)
println(userInfo.name)
// 张三
println(userInfo.toString())
// UserInfo(name=张三, age=20)
}
```
### 伴生对象
```kotlin
// 私有化构造方法
class User private constructor(val name: String) {
// 伴生对象,相当于一个静态类
companion object {
fun createUser(name: String): User {
return User(name)
}
}
}
fun main() {
// 就像是调用静态方法
val user = User.createUser("张三")
println(user.name)
//Print: 张三
}
```
### 内部类
```kotlin
class Outer {
val outStr: String = "Outer"
// inner 可以让内部类访问外部类
inner class Inner {
fun printOutStr(){
println(outStr)
}
}
}
fun main() {
val outer = Outer()
outer.Inner().printOutStr()
// Print: Outer
}
```
如果不用inner修饰会导致Inner类无法使用outStr
<!--rehype:className=wrap-text-->
### object单例类
```kotlin
object HttpUtils {
const val baseUrl = "https://xxxx.com"
fun getRequest(url: String): String {
// 示例代码....
return "Result"
}
}
fun main() {
println(HttpUtils.baseUrl)
// Print: "https://xxxx.com"
HttpUtils.getRequest("xxxxx")
}
```
object类中定义的函数和属性都可以用类名直接引用
<!--rehype:className=wrap-text-->
另见
---

367
docs/kubernetes.md Normal file
View File

@ -0,0 +1,367 @@
Kubernetes 备忘清单
===
查看资源信息
---
### 节点
资源名称: nodes, 缩写: no
```bash
$ kubectl get no # 显示所有节点信息
# 显示所有节点的更多信息
$ kubectl get no -o wide
$ kubectl describe no # 显示节点详情
# 以yaml格式显示节点详情
$ kubectl get no -o yaml
# 筛选指定标签的节点
$ kubectl get node --selector=[label_name]
# 输出 jsonpath 表达式定义的字段信息
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 显示节点(CPU/内存/存储)使用情况
$ kubectl top node [node_name]
```
### 容器组
<!--rehype:wrap-class=col-span-2-->
资源名称: pods, 缩写: po
```bash
$ kubectl get po # 显示所有容器组信息
$ kubectl get po -o wide
$ kubectl describe po
$ kubectl get po --show-labels # 查看容器组的labels
$ kubectl get po -l app=nginx
$ kubectl get po -o yaml
$ kubectl get pod [pod_name] -o yaml --export
$ kubectl get pod [pod_name] -o yaml --export > nameoffile.yaml
# 以yaml格式导出容器组信息到yaml文件
$ kubectl get pods --field-selector status.phase=Running
# 使用字段选择器筛选出容器组信息
```
### 命名空间
资源名称: `namespaces`, 缩写: `ns`
```bash
$ kubectl get ns
$ kubectl get ns -o yaml
$ kubectl describe ns
```
### 无状态
资源名称: `deployments`, 缩写: `deploy`
```bash
$ kubectl get deploy
$ kubectl describe deploy
$ kubectl get deploy -o wide
$ kubectl get deploy -o yaml
```
### 服务
资源名称: `services`, 缩写: `svc`
```bash
$ kubectl get svc
$ kubectl describe svc
$ kubectl get svc -o wide
$ kubectl get svc -o yaml
$ kubectl get svc --show-labels
```
### 守护进程集
<!--rehype:wrap-class=col-span-2-->
资源名称: `daemonsets`, 缩写: `ds`
```bash
$ kubectl get ds
$ kubectl describe ds --all-namespaces
$ kubectl describe ds [daemonset_name] -n [namespace_name]
$ kubectl get ds [ds_name] -n [ns_name] -o yaml
```
### 事件
资源名称: `events`, 缩写: `ev`
```bash
$ kubectl get events
$ kubectl get events -n kube-system
$ kubectl get events -w
```
### 服务帐户
<!--rehype:wrap-class=col-span-2-->
资源名称: `serviceaccounts`, 缩写: `sa`
```bash
$ kubectl get sa
$ kubectl get sa -o yaml
$ kubectl get serviceaccounts default -o yaml >./sa.yaml
$ kubectl replace serviceaccount default -f ./sa.yaml
```
### 日志
```bash
$ kubectl logs [pod_name]
$ kubectl logs --since=1h [pod_name]
$ kubectl logs --tail=20 [pod_name]
$ kubectl logs \
-f -c [container_name] [pod_name]
$ kubectl logs [pod_name] > pod.log
```
### 副本集
资源名称: replicasets, 缩写: rs
```bash
$ kubectl get rs
$ kubectl describe rs
$ kubectl get rs -o wide
$ kubectl get rs -o yaml
```
### 角色
```bash
$ kubectl get roles --all-namespaces
```
---
```
$ kubectl get roles \
--all-namespaces -o yaml
```
### 保密字典
```bash
$ kubectl get secrets
$ kubectl get secrets --all-namespaces
$ kubectl get secrets -o yaml
```
### 配置项
资源名称: configmaps, 缩写: cm
```bash
$ kubectl get cm
$ kubectl get cm --all-namespaces
$ kubectl get cm --all-namespaces -o yaml
```
### 路由
资源名称: ingresses, 缩写: ing
```bash
$ kubectl get ing
$ kubectl get ing --all-namespaces
```
### 持久卷
资源名称: persistentvolumes, 缩写: pv
```bash
$ kubectl get pv
$ kubectl describe pv
```
### 持久卷声明
资源名称: persistentvolumeclaims, 缩写: pvc
```bash
$ kubectl get pvc
$ kubectl describe pvc
```
### 存储类
资源名称: storageclasses, 缩写: sc
```bash
$ kubectl get sc
$ kubectl get sc -o yaml
```
### 多个资源
```bash
$ kubectl get svc, po
$ kubectl get deploy, no
$ kubectl get all
$ kubectl get all --all-namespaces
```
变更资源属性
---
### 污点
```bash
$ kubectl taint [node_name] [taint_name]
```
### 标签
<!--rehype:wrap-class=col-span-2-->
```bash
$ kubectl label nodes <node-name> <label-key>=<label-value> #增加
$ kubectl label nodes <node-name> <label-key>- #删除
$ kubectl label nodes <node-name> <label-key>=<label-value> --overwrite #修改
```
### 维护/可调度
```bash
$ kubectl cordon [node_name] # 节点维护
$ kubectl uncordon [node_name] # 节点可调度
```
### 清空节点
```bash
$ kubectl drain [node_name] # 清空节点
```
### 节点/容器组
```bash
$ kubectl delete node [node_name]
$ kubectl delete pod [pod_name]
$ kubectl edit node [node_name]
$ kubectl edit pod [pod_name]
```
### 无状态/命名空间
<!--rehype:wrap-class=col-span-2 row-span-2-->
```bash
$ kubectl edit deploy [deploy_name]
$ kubectl delete deploy [deploy_name]
$ kubectl expose deploy [deploy_name] --port=80 --type=NodePort
$ kubectl scale deploy [deploy_name] --replicas=5
$ kubectl delete ns
$ kubectl edit ns [ns_name]
```
### 服务
```bash
$ kubectl edit svc [svc_name]
$ kubectl delete svc [svc_name]
```
### 守护进程集
```bash
$ kubectl edit ds [ds_name] -n kube-system
$ kubectl delete ds [ds_name]
```
### 服务账号
```bash
$ kubectl edit sa [sa_name]
$ kubectl delete sa [sa_name]
```
### 注释
<!--rehype:wrap-class=col-span-2-->
```bash
$ kubectl annotatepo [pod_name] [annotation]
$ kubectl annotateno [node_name]
```
添加资源
---
### 创建容器组
<!--rehype:wrap-class=col-span-2-->
```bash
$ kubectl create -f [name_of_file]
$ kubectl apply -f [name_of_file]
$ kubectl run [pod_name] --image=nginx --restart=Never
$ kubectl run [pod_name] --generator=run-pod/v1 --image=nginx
$ kubectl run [pod_name] --image=nginx --restart=Never
```
### 创建服务
```bash
$ kubectl create svc nodeport [svc_name] \
--tcp=8080:80
```
### 创建无状态应用
```bash
$ kubectl create -f [name_of_file]
$ kubectl apply -f [name_of_file]
$ kubectl create deploy [deploy_name] \
--image=nginx
```
### 输出YAML文件
<!--rehype:wrap-class=col-span-2-->
```bash
$ kubectl create deploy [deploy_name] --image=nginx --dry-run -o yaml > deploy.yaml
$ kubectl get po [pod_name] -o yaml --export > pod.yaml
$ kubectl run nginx --image=nginx:alpine --dry-run -o -yaml > deploy.yaml
```
### 容器交互
```bash
$ kubectl run [pod_name] \
--image=busybox --rm -it \
--restart=Never -- sh
```
### 获取帮助
```bash
$ kubectl -h
$ kubectl create -h
$ kubectl run -h
$ kubectl explain deploy.spec
```
请求
---
### API调用
```bash
$ kubectl get --raw /apis/metrics.k8s.io/
```
### 集群信息
```bash
$ kubectl config
$ kubectl cluster-info
$ kubectl get componentstatus
```
另见
---
- [Kubernetes 官方文档 命令行工具 (kubectl)](https://kubernetes.io/zh-cn/docs/reference/kubectl/) _(kubernetes.io)_

338
docs/linux-command.md Normal file
View File

@ -0,0 +1,338 @@
Linux 命令速查表
===
这个快速参考备忘单提供了使用 Linux 常用命令的使用清单
命令速查表
---
### 系统
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`uname`** | 显示 linux 系统信息
**`uname -r`** | 显示内核版本信息
**`cat /etc/os-release`** | 显示 linux 系统详细信息
**`uptime`** | 显示系统运行的时间(包括平均负载)
**`hostname`** | 显示系统主机名
**`hostname -i`** | 显示系统的IP地址
**`last reboot`** | 显示系统重新启动历史记录
**`date`** | 显示当前系统日期和时间
**`timedatectl`** | 查询和更改系统时钟
**`cal`** | 显示当前日历的月份和日期
**`w`** | 显示系统中当前登录的用户
**`whoami`** | 显示您的登录身份
**`finger username`** | 显示有关用户的信息
<!--rehype:className=style-list-->
### 硬件
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`dmesg`** | 显示启动消息
**`cat /proc/cpuinfo`** | <pur>**CPU**</pur>: 显示 CPU 的更多信息,例如型号、核心等
**`cat /proc/meminfo`** | <pur>**内存**</pur>: 显示硬件内存的更多信息
**`df -h`** | <pur>**磁盘空间**</pur>: 显示磁盘空间大小(单位`G`)
**`hdparm -i /dev/xda`** | <pur>**磁盘**</pur>: 显示有关磁盘数据的信息
**`lshw`** | 显示有关系统硬件配置的信息
**`lsblk`** | 显示块设备相关信息
**`free -m`** | 显示系统中空闲和使用的内存,`-m`(MB)`-g`(GB)
**`lspci -tv`** | 在树状图中显示 PCI 设备
**`lsusb -tv`** | 以树状图的形式显示 USB 设备
**`dmidecode`** | 显示BIOS中的硬件信息
**`hdparm -tT /dev/xda <:code>`** | 在设备xda上进行读速度测试
**`badblocks -s /dev/xda`** | 测试磁盘上不可读的块
<!--rehype:className=style-list-->
### 用户
:--- | :---
:--- | :---
**`id`** | 显示活动用户的详细信息如uid、gid和组
**`last`** | 显示系统中的最后一次登录
**`who`** | 显示谁已登录到系统
**`groupadd "admin"`** | 添加组"admin"
**`adduser "Sam"`** | 添加用户 Sam
**`userdel "Sam"`** | 删除用户 Sam
**`usermod`** | 用于更改/修改用户信息
<!--rehype:className=style-list-->
### 登陆
:--- | :---
:--- | :---
**`ssh user@host`** | 使用指定用户安全连接到主机
**`ssh -p port_number user@host`** | 使用指定端口安全地连接到主机
**`ssh host`** | 通过SSH默认端口22安全连接到系统
**`telnet host`** | 通过telnet默认端口23连接到主机
<!--rehype:className=style-list-->
### 文件
<!--rehype:wrap-class=row-span-4-->
:--- | :---
:--- | :---
**`ls -al`** | 列出文件-包括常规文件和隐藏文件以及它们的权限
**`tree`** | 以树形结构列出文件,常用参数有:`-d`查看目录,`-L num`查看num层文件`-a`查看隐藏文件
**`pwd`** | 显示当前目录文件路径
**`mkdir 'directory_name'`** | 创建一个新目录
**`rm file_name`** | 删除一个文件
**`rm -f filename`** | 强制删除文件
**`rm -r directory_name`** | 递归地删除一个目录
**`rm -rf directory_name`** | 强制并递归地删除一个目录
**`cp file1 file2`** | 将file1的内容复制到file2
**`cp -r dir1 dir2`** | 递归地将dir1复制到dir2。如果dir2不存在则创建它
**`mv file1 file2`** | 将file1重命名为file2
**`ln -s /path/to/file_name link_name`** | 创建到file_name的软链接
**`touch file_name`** | 创建一个新文件
**`cat > file_name`** | 从键盘创建一个文件
**`more file_name`** | 输出文件的内容
**`head file_name`** | 显示文件的前10行
**`tail file_name`** | 显示文件的最后10行
**`gpg -c file_name`** | 加密一个文件
**`gpg file_name.gpg`** | 解密文件
**`wc`** | 打印文件中的字节、单词和行数
**`xargs`** | 从标准输入执行命令
<!--rehype:className=style-list-->
### 进程
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`ps`** | 显示当前活动的进程
**`ps aux \| grep 'telnet'`** | 搜索进程'telnet'的id
**`pmap`** | 显示进程的内存映射
**`top`** | 显示所有正在运行的进程
**`kill pid`** | 使用给定的pid终止进程
**`killall proc`** | 杀死/终止所有名为proc的进程
**`pkill process-name`** | 向具有其名称的进程发送信号
**`lsof`** | 列出进程打开的文件 [#](./lsof.md)
**`renice 19 PID`** | 使进程以非常低的优先级运行
**`pgrep firefox`** | 查找Firefox进程ID
**`pstree`** | 在树模型中可视化过程
<!--rehype:className=style-list-->
### 安装包
:--- | :---
:--- | :---
**`rpm -i pkg_name.rpm`** | 安装 rpm 包
**`rpm -e pkg_name`** | 删除 rpm 包
**`dnf install pkg_name`** | 使用 dnf 工具安装软件包
<!--rehype:className=style-list-->
### 文件权限
:--- | :---
:--- | :---
**`chmod octal filename`** | 将文件权限更改为八进制
**`chmod 777 /data/test.c`** | 将rwx权限设置为owner、group和everyone(其他可以访问服务器的人)
**`chmod 755 /data/test.c`** | 将rwx设置为所有者将r_x设置为组和所有人
**`chmod 766 /data/test.c`** | 为所有者设置rwx为组和每个人设置rw
**`chown owner user-file`** | 更改文件的所有权
**`chown owner-user:owner-group file_name`** | 更改文件的所有者和组所有者
**`chown owner-user:owner-group directory`** | 更改目录的所有者和组所有者
<!--rehype:className=style-list-->
### 安装源(编译)
:--- | :---
:--- | :---
**`./configure`** | 检查系统以获得构建程序所需的软件。它将构建包含有效构建项目所需的指令的Makefile
**`make`** |
**`make install`** | 编译后,该命令将二进制文件安装在默认/修改的路径中
<!--rehype:className=style-list-->
### 压缩/打包
:--- | :---
:--- | :---
**`tar -cf home.tar home<:code>`** | 创建名为"home"的存档文件。tar文件home'
**`tar -xf files.tar`** | 解压档案文件"files.tar"
**`tar -zcvf home.tar.gz source-folder`** | 从源文件夹创建压缩的tar存档文件
**`gzip file`** | 压缩扩展名为.gz的文件
<!--rehype:className=style-list-->
### 搜索
:--- | :---
:--- | :---
**`grep pattern files`** | 在文件中搜索给定的模式
**`grep -r pattern dir`** | Search recursively for a pattern in a given directory
**`locate file`** | 查找文件的所有实例
**`find /home/ -name "index"`** | 在/home文件夹中查找以index开头的文件名
**`find /home -size +10000k`** | 在主文件夹中查找大于10000k的文件
<!--rehype:className=style-list-->
### 网络
<!--rehype:wrap-class=row-span-3-->
:--- | :---
:--- | :---
**`ip addr show`** | 显示IP地址和所有网络接口
**`ip address add 192.168.0.1/24 dev eth0`** | 将IP地址192.168.0.1分配给接口eth0
**`ifconfig`** | 显示所有网络接口的IP地址
**`ping host`** | ping命令发送ICMP回送请求以建立到服务器/PC的连接
**`whois domain`** | 检索有关域名的更多信息
**`dig domain`** | 检索关于域的DNS信息
**`dig -x host`** | 对域执行反向查找
**`host google.com`** | 执行域名的IP查找
**`hostname -i`** | 显示本地IP地址
**`wget file_name`** | 从在线资源下载文件
**`netstat -pnltu`** | 显示所有活动监听端口
<!--rehype:className=style-list-->
### 文件传输
:--- | :---
:--- | :---
**`scp file1.txt server2/tmp`** | 安全地将file1.txt复制到/tmp目录中的server2
**`rsync -a /home/apps /backup/`** | 将/home/apps目录中的内容与/backup目录进行同步
<!--rehype:className=style-list-->
### 磁盘使用情况
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`df -h`** | 显示安装系统上的空闲空间
**`df -i`** | 显示文件系统上的空闲inode
**`fdisk -l`** | 显示磁盘分区、大小和类型
**`du -sh`** | 以人类可读的格式显示当前目录中的磁盘使用情况
**`findmnt`** | 显示所有文件系统的目标挂载点
**`mount device-path mount-point`** | 挂载设备
<!--rehype:className=style-list-->
### 目录遍历
:--- | :---
:--- | :---
**`cd ..`** | 在目录树结构中向上移动一层
**`cd`** | 将目录更改为$HOME目录
**`cd /test`** | 将目录更改为/test目录
<!--rehype:className=style-list-->
### 文件描述符
<!--rehype:wrap-class=row-span-1-->
:--- | :---
:--- | :---
**`0`** | 标准输入
**`1`** | 标准输出
**`2`** | 错误输出
**`/dev/null`** | Linux的空设备文件俗称“黑洞”
<!--rehype:className=style-list-->
### 输出重定向
<!--rehype:wrap-class=row-span-2 col-span-2-->
:--- | :---
:--- | :---
**`>`** | 覆盖运算符
**`>>`** | 追加运算符
**`>&`** | 重定向合并运算符
**`command > filename`** | 标准输出覆盖写入新文件
**`command 1> filename`** | 标准输出覆盖写入新文件(同上)
**`command 2> filename`** | 标准错误覆盖写入新文件
**`command >> filename`** | 标准输出追加到新文件
**`command 1>> filename`** | 标准输出追加到新文件(同上)
**`command 2>> filename`** | 标准错误追加到新文件
**`2>&1`** | 标准错误重定向到标准输出
**`1>&2`** | 标准输出重定向到标准错误
<!--rehype:className=left-align-->
前后台
---
### &(终端关闭,程序也关闭)
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`command &`** | 使用后台进程模式执行 command
**`Ctrl+Z`** | 将当前进程放到后台但程序是Stopped状态
**`jobs`** | 查看任务状态、ID等
**`fg n`** | 将jobID为n的任务切到**前台**运行
**`bg n`** | 将jobID为n的任务切到**后台**运行
<!--rehype:className=style-list-->
### nohup终端关闭程序继续运行
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`nohup command &`** | 后台执行 command标准输出到 nohup.out
**`nohup command > log_file &`** | 后台执行 command标准输出到 log_file
**`nohup command > log_file 2>&1 &`** | 后台执行 command标准输出和错误输出到 log_file
**`nohup command > log_file 2>err_log &`** | 后台执行 command标准输出到 log_file错误输出到 err_log
**`ps/kill`** | 查看进程/结束进程
<!--rehype:className=style-list-->
### screen创建独立会话
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`screen -S my_session`** | 创建一个名为 my_session 的会话
**`screen -ls`** | 列出当前所有的 session
**`screen -r my_session`** | 重新连接 my_session 这个会话
**`screen -d my_session`** | 脱离 my_session 这个会话
**`Ctrl+a+d`** | 在 screen 中,脱离当前会话
**`exit`** | 在 screen 中,退出并删除当前 screen
**`-X -S my_session quit`** | 删除 my_session 这个会话
**`screen -wipe`** | 删除所有已经失效的会话
<!--rehype:className=style-list-->
快捷键
---
### 命令行编辑
<!--rehype:wrap-class=row-span-2 col-span-2-->
:--- | :---
:--- | :---
`Tab` | 自动补全
`Ctrl`+`A` | 移动光标到命令行首
`Ctrl`+`E` | 移动光标到命令行尾
`Ctrl`+`Left` | 光标左移一个单词
`Ctrl`+`Right` | 光标右移一个单词
`Ctrl`+`K` | 删除光标之后所有字符
`Ctrl`+`U` | 清空当前键入的命令
`Ctrl`+`W` | 删除光标前的单词
`Ctrl`+`Y` | 粘贴 `Ctrl` + `W``Ctrl` + `K` 删除的内容
`Ctrl`+`D` | 删除当前光标所在字符 (在没有字符时会关闭终端)
`Ctrl`+`B` (Left) | 光标左移(后退)
`Ctrl`+`F` (Right) | 光标右移(前进)
`Ctrl`+`H` (Backspace) | 删除光标的前一个字符
<!--rehype:className=left-align shortcuts-->
### 其他
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
`Ctrl`+`L` | 清屏
`Ctrl`+`C` | 中断正在执行的程序
`Ctrl`+`R` | 按字符串寻找历史命令
`Ctrl`+`Z` | 将当前进程放到后台但程序是Stopped状态
`Shift`+`Insert` | 粘贴
`Ctrl`+`PageUp` | 屏幕输出向上翻页
`Ctrl`+`PageDown` | 屏幕输出向下翻页
`Ctrl`+`P` (Up) | 上一条命令
`Ctrl`+`N` (Down) | 下一条命令
<!--rehype:className=left-align shortcuts-->
另见
---
- [Linux命令大全搜索工具](https://jaywcjlove.github.io/linux-command) _(jaywcjlove.github.io)_
- [Linux命令大全(手册)](https://www.linuxcool.com/) _(linuxcool.com)_
- [MAN手册 - 中文](https://manpages.debian.org/buster/manpages-zh/index.html) _(debian.org)_
- [Linux 命令行速查表](https://www.cheat-sheet.cn/post/linux-command-line-cheat-sheet/) _(cheat-sheet.cn)_

View File

@ -97,7 +97,9 @@ local html = [[
<html>
<head></head>
<body>
<a href="https://www.twle.cn/">简单编程</a>
<a href="https://www.twle.cn/">
简单编程
</a>
</body>
</html>
]]
@ -211,6 +213,7 @@ print(x, y) -- 3, 1
```lua
local tab = {}
tab.one = 2
tab.two = 1
@ -243,13 +246,13 @@ print(tab.one, tab.two) -- 1 2
:- | :-
:- | :-
\+ | 加法
\- | 减法
\* | 乘法
\/ | 除法
\% | 取余,求出除法的余数
\^ | 乘幂,计算次方
\- | 负号,取负值
`+` | 加法
`-` | 减法
`*` | 乘法
`/` | 除法
`%` | 取余,求出除法的余数
`^` | 乘幂,计算次方
`-` | 负号,取负值
```lua
local a, b = 4, 3
@ -287,7 +290,27 @@ print(a ^ b) -- 64.0
print(type(tonumber("12"))) -- number
```
<!--rehype:className=style-round-->
<!--rehype:className=wrap-text -->
### goto 语法
<!--rehype:wrap-class=col-span-2-->
```lua
local function isValidNumber(num)
if type(num) ~= "number" then
goto invalidNumber -- 无条件地跳转到代码中的标签 `::invalidNumber::`
end
print("Valid number:", num)
return true
::invalidNumber::
print("Invalid number:", num)
return false
end
isValidNumber(123) -- 输出: Valid number: 123
isValidNumber("abc") -- 输出: Invalid number: abc
```
条件语句
---

View File

@ -1027,5 +1027,5 @@ origin 函数用于告诉这个变量的从何而来
---
* [make 中文教程](https://seisman.github.io/how-to-write-makefile/overview.html) _(seisman.github.io)_
* [make 手册](https://www.gnu.org/software/make/manual/make.html#toc-Overview-of-make) _(www.gnu.org)_
* [make 官网](https://www.gnu.org/software/make/) _www.gnu.org_
* [make 手册](https://www.gnu.org/software/make/manual/make.html#toc-Overview-of-make) _(<www.gnu.org>)_
* [make 官网](https://www.gnu.org/software/make/) _<www.gnu.org>_

View File

@ -131,13 +131,11 @@ ___
### 代码
```markdown
````markdown
```javascript
console.log("This is a block code")
```
```
````
```markdown
~~~css

View File

@ -198,8 +198,8 @@ c = 2×2 complex
### 输入命令
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[ans](https://ww2.mathworks.cn/help/matlab/ref/ans.html) | 最近计算的答案
[clc](https://ww2.mathworks.cn/help/matlab/ref/clc.html) | 清空命令行窗口
[diary](https://ww2.mathworks.cn/help/matlab/ref/diary.html) | 将命令行窗口文本记录到日志文件中
@ -221,8 +221,8 @@ c = 2×2 complex
创建和合并数组
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[zeros](https://ww2.mathworks.cn/help/matlab/ref/zeros.html) | 创建全零数组
[ones](https://ww2.mathworks.cn/help/matlab/ref/ones.html) | 创建全部为 1 的数组
[rand](https://ww2.mathworks.cn/help/matlab/ref/rand.html) | 均匀分布的随机数
@ -239,8 +239,8 @@ c = 2×2 complex
创建网格
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[linspace](https://ww2.mathworks.cn/help/matlab/ref/linspace.html) | 生成线性间距向量
[logspace](https://ww2.mathworks.cn/help/matlab/ref/logspace.html) | 生成对数间距向量
[freqspace](https://ww2.mathworks.cn/help/matlab/ref/freqspace.html) | 频率响应的频率间距
@ -249,8 +249,8 @@ c = 2×2 complex
确定大小、形状和排序
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[length](https://ww2.mathworks.cn/help/matlab/ref/length.html) | 最大数组维度的长度
[size](https://ww2.mathworks.cn/help/matlab/ref/size.html) | 数组大小
[ndims](https://ww2.mathworks.cn/help/matlab/ref/double.ndims.html) | 数组维度数目
@ -266,8 +266,8 @@ c = 2×2 complex
重构和重新排列
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[sort](https://ww2.mathworks.cn/help/matlab/ref/sort.html) | 对数组元素排序
[sortrows](https://ww2.mathworks.cn/help/matlab/ref/double.sortrows.html) | 对矩阵行或表行进行排序
[flip](https://ww2.mathworks.cn/help/matlab/ref/flip.html) | 翻转元素顺序
@ -285,8 +285,8 @@ c = 2×2 complex
索引
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[colon](https://ww2.mathworks.cn/help/matlab/ref/colon.html) | 向量创建、数组下标和 <code class="literal">for</code> 循环迭代
[end](https://ww2.mathworks.cn/help/matlab/ref/end.html) | 终止代码块或指示最大数组索引
[ind2sub](https://ww2.mathworks.cn/help/matlab/ref/ind2sub.html) | 将线性索引转换为下标
@ -297,8 +297,8 @@ c = 2×2 complex
创建数值变量
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[double](https://ww2.mathworks.cn/help/matlab/ref/double.html) | 双精度数组
[single](https://ww2.mathworks.cn/help/matlab/ref/single.html) | 单精度数组
[int8](https://ww2.mathworks.cn/help/matlab/ref/int8.html) | 8 位有符号整数数组
@ -312,15 +312,15 @@ c = 2×2 complex
在数值类型之间转换
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[cast](https://ww2.mathworks.cn/help/matlab/ref/cast.html) | 将变量转换为不同的数据类型
[typecast](https://ww2.mathworks.cn/help/matlab/ref/typecast.html) | 在不更改基础数据的情况下转换数据类型
查询类型和值
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[allfinite](https://ww2.mathworks.cn/help/matlab/ref/allfinite.html") | Determine if all array elements are finite
[anynan](https://ww2.mathworks.cn/help/matlab/ref/anynan.html") | Determine if any array element is NaN
[isinteger](https://ww2.mathworks.cn/help/matlab/ref/isinteger.html) | 确定输入是否为整数数组
@ -333,8 +333,8 @@ c = 2×2 complex
数值范围
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[eps](https://ww2.mathworks.cn/help/matlab/ref/eps.html) | 浮点相对精度
[flintmax](https://ww2.mathworks.cn/help/matlab/ref/flintmax.html) | 浮点格式的最大连续整数
[Inf](https://ww2.mathworks.cn/help/matlab/ref/inf.html) | 创建所有值均为 `Inf` 的数组
@ -363,8 +363,8 @@ c = 2×2 complex
### 字符串数组
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[string](https://ww2.mathworks.cn/help/matlab/ref/string.html) | 字符串数组
[strings](https://ww2.mathworks.cn/help/matlab/ref/strings.html) | 创建不包含字符的字符串数组
[join](https://ww2.mathworks.cn/help/matlab/ref/join.html) | 合并字符串
@ -372,8 +372,8 @@ c = 2×2 complex
### 字符数组
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[char](https://ww2.mathworks.cn/help/matlab/ref/char.html) | 字符数组
[cellstr](https://ww2.mathworks.cn/help/matlab/ref/cellstr.html) | 转换为字符向量元胞数组
[blanks](https://ww2.mathworks.cn/help/matlab/ref/blanks.html) | 创建空白字符数组
@ -381,8 +381,8 @@ c = 2×2 complex
### 字符或字符串数组
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[compose](https://ww2.mathworks.cn/help/matlab/ref/compose.html) | 将数据格式化为多个字符串
[sprintf](https://ww2.mathworks.cn/help/matlab/ref/sprintf.html) | 将数据格式化为字符串或字符向量
[strcat](https://ww2.mathworks.cn/help/matlab/ref/strcat.html) | 水平串联字符串
@ -399,8 +399,8 @@ c = 2×2 complex
### 字符或字符串 - 在数值和字符串之间转换
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[double](https://ww2.mathworks.cn/help/matlab/ref/double.html) | 双精度数组
[string](https://ww2.mathworks.cn/help/matlab/ref/string.html) | 字符串数组
[str2double](https://ww2.mathworks.cn/help/matlab/ref/str2double.html) | 将字符串转换为双精度值
@ -411,8 +411,8 @@ c = 2×2 complex
数据类型
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[ischar](https://ww2.mathworks.cn/help/matlab/ref/ischar.html) | 确定输入是否为字符数组
[iscellstr](https://ww2.mathworks.cn/help/matlab/ref/iscellstr.html) | 确定输入是否为字符向量元胞数组
[isstring](https://ww2.mathworks.cn/help/matlab/ref/isstring.html) | 确定输入是否为字符串数组
@ -420,8 +420,8 @@ c = 2×2 complex
文本属性
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[strlength](https://ww2.mathworks.cn/help/matlab/ref/strlength.html) | 字符串长度
[isstrprop](https://ww2.mathworks.cn/help/matlab/ref/isstrprop.html) | 确定输入字符串中的哪些字符属于指定类别
[isletter](https://ww2.mathworks.cn/help/matlab/ref/isletter.html) | 确定哪些字符为字母
@ -432,8 +432,8 @@ c = 2×2 complex
查找
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[contains](https://ww2.mathworks.cn/help/matlab/ref/contains.html) | 确定字符串中是否有模式
[matches](https://ww2.mathworks.cn/help/matlab/ref/matches.html) | 确定模式是否与字符串匹配
[count](https://ww2.mathworks.cn/help/matlab/ref/count.html) | 计算字符串中模式的出现次数
@ -444,22 +444,22 @@ c = 2×2 complex
替换
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[replace](https://ww2.mathworks.cn/help/matlab/ref/replace.html) | 查找并替换一个或多个子字符串
[replaceBetween](https://ww2.mathworks.cn/help/matlab/ref/replacebetween.html) | 替换起点和终点之间的子字符串
[strrep](https://ww2.mathworks.cn/help/matlab/ref/strrep.html) | 查找并替换子字符串
### 字符串匹配模式 - 构建模式
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[pattern](https://ww2.mathworks.cn/help/matlab/ref/pattern.html) | 用于搜索和匹配文本的模式
### 字符串匹配模式 - 字符匹配模式
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[alphanumericsPattern](https://ww2.mathworks.cn/help/matlab/ref/alphanumericspattern.html) | 匹配字母和数字字符
[characterListPattern](https://ww2.mathworks.cn/help/matlab/ref/characterlistpattern.html) | 匹配列表中的字符
[digitsPattern](https://ww2.mathworks.cn/help/matlab/ref/digitspattern.html) | 匹配数字字符
@ -469,8 +469,8 @@ c = 2×2 complex
### 字符串匹配模式 - 模式搜索规则
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[optionalPattern](https://ww2.mathworks.cn/help/matlab/ref/optionalpattern.html) | 使模式匹配可选
[possessivePattern](https://ww2.mathworks.cn/help/matlab/ref/possessivepattern.html) | 匹配模式而不回溯
[caseSensitivePattern](https://ww2.mathworks.cn/help/matlab/ref/casesensitivepattern.html) | 以区分大小写的方式匹配模式
@ -495,15 +495,15 @@ c = 2×2 complex
### 字符串匹配模式 - 自定义模式显示
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[maskedPattern](https://ww2.mathworks.cn/help/matlab/ref/maskedpattern.html) | 具有指定显示名称的模式
[namedPattern](https://ww2.mathworks.cn/help/matlab/ref/namedpattern.html) | 指定命名模式
### 字符串匹配模式 - 正则表达式
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[regexp](https://ww2.mathworks.cn/help/matlab/ref/regexp.html) | 匹配正则表达式(区分大小写)
[regexpi](https://ww2.mathworks.cn/help/matlab/ref/regexpi.html) | 匹配正则表达式(不区分大小写)
[regexprep](https://ww2.mathworks.cn/help/matlab/ref/regexprep.html) | 使用正则表达式替换文本
@ -512,8 +512,8 @@ c = 2×2 complex
### 字符串匹配模式 - 联接和拆分
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[join](https://ww2.mathworks.cn/help/matlab/ref/join.html) | 合并字符串
[plus](https://ww2.mathworks.cn/help/matlab/ref/plus.html) | 添加数字,追加字符串
[split](https://ww2.mathworks.cn/help/matlab/ref/split.html) | 在分隔符处拆分字符串
@ -529,8 +529,8 @@ c = 2×2 complex
### 字符串编辑
<!--rehype:wrap-class=row-span-2-->
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[erase](https://ww2.mathworks.cn/help/matlab/ref/erase.html) | 删除字符串内的子字符串
[eraseBetween](https://ww2.mathworks.cn/help/matlab/ref/erasebetween.html) | 删除起点和终点之间的子字符串
[extract](https://ww2.mathworks.cn/help/matlab/ref/extract.html) | 从字符串中提取子字符串
@ -550,8 +550,8 @@ c = 2×2 complex
### 字符串比较
:- | :- | :-
:- | :- | :-
:- | :-
:- | :-
[matches](https://ww2.mathworks.cn/help/matlab/ref/matches.html) | 确定模式是否与字符串匹配
[strcmp](https://ww2.mathworks.cn/help/matlab/ref/strcmp.html) | 比较字符串
[strcmpi](https://ww2.mathworks.cn/help/matlab/ref/strcmpi.html) | 比较字符串(不区分大小写)

View File

@ -55,6 +55,7 @@ $ brew install mitmproxy # macOS
```
### 代理模式
<!--rehype:wrap-class=col-span-2-->
Argument | Effect
:-- | --
@ -64,6 +65,48 @@ Argument | Effect
`-U UPSTREAM_PROXY`, `--upstream UPSTREAM_PROXY` | 将所有请求转发到上游代理服务器:`http://host[:port]`
<!--rehype:className=style-list-->
### 复制到剪贴板
命令语法:
```
:export.clip format flow
```
例子:
| 描述 | 命令示例 |
| ---|--- |
| 1. 复制为 curl 命令 | `:export.clip curl @focus` |
| 2. 复制为 httpie | `:export.clip httpie @focus` |
| 3. 复制为原始文件 | `:export.clip raw @focus` |
| 4. 复制为原始 HTTP 请求 | `:export.clip raw_request @focus` |
| 5. 复制为原始 HTTP 响应 | `:export.clip raw_response @focus` |
<!--rehype:className=style-list-->
将流程导出到系统剪贴板
### 保存到文件
命令语法:
```
:export.file format flow path
```
例子:
| 描述 | 命令示例 |
| ---|--- |
| 1. 导出到 `/tmp/a.curl` | `:export.file curl @focus /tmp/a.curl` |
| 2. 导出到 `/tmp/a.httpie` | `:export.file httpie @focus /tmp/a.httpie` |
| 3. 导出到 `/tmp/a.raw` | `:export.file raw @focus /tmp/a.raw` |
| 4. 导出到 `/tmp/a.request` | `:export.file raw_request @focus /tmp/a.request` |
| 5. 导出到 `/tmp/a.response` | `:export.file raw_response @focus /tmp/a.response` |
<!--rehype:className=style-list-->
将流程导出到系统剪贴板
### 流(视图)
<!--rehype:wrap-class=row-span-2-->

434
docs/mongodb.md Normal file
View File

@ -0,0 +1,434 @@
MongoDB 备忘清单
===
[MongoDB](https://www.mongodb.com/developer/products/mongodb/cheat-sheet/#connect-mongodb-shell) 此备忘单包含一些方便的提示、命令和快速参考,可让您立即连接并进行 CRUD
入门
---
### 连接 MongoDB Shell
<!--rehype:wrap-class=col-span-2-->
```bash
mongo # 默认连接到 mongodb://127.0.0.1:27017
mongo --host <host> --port <port> -u <user> -p <pwd> # 如果需要提示,请省略密码
mongo "mongodb://192.168.1.1:27017"
# MongoDB 地图集
mongo "mongodb+srv://cluster-name.abcde.mongodb.net/<dbname>" --username <username>
```
### 显示数据库
```mongodb
show dbs
db // 打印当前数据库
```
### 切换数据库
```mongodb
use <database_name>
```
### 显示集合
```mongodb
show collections
```
### 运行 JavaScript 文件
```mongodb
load("myScript.js")
```
CRUD
---
### 创建
<!--rehype:wrap-class=col-span-3-->
```mongodb
db.coll.insertOne({ name: "Max" })
db.coll.insert([{ name: "Max"}, {name:"Alex"}]) // 批量插入
db.coll.insert([{ name: "Max"}, {name:"Alex"}], {ordered: false}) // 无序批量插入
db.coll.insert({ date: ISODate()})
db.coll.insert({ name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
```
### 寻找文件
Commands | Description
:-- | ---
`db.docx.findOne()` | 查找一个随机文档
`db.docx.find().prettyPrint()` | 查找所有文档
`db.docx.find({}, {name:true, _id:false})` | 仅显示文档 Docx 的名称
`db.docx.find({}, {name:true, _id:false})` | 可以在多个文件中按属性查找一个文件
### 使用运算符查找文档
<!--rehype:wrap-class=col-span-2-->
Operator | Description | Commands
:-- | --- | ---
`$gt` | 大于 | `db.docx.find({class:{$gt:'T'}`
`$gte` | 大于等于 | `db.docx.find({class:{$gt:'T'}`
`$lt` | 小于 | `db.docx.find({class:{$lt:'T'}`
`$lte` | 小于等于 | `db.docx.find({class:{$lte:'T'}`
`$exists` | 属性是否存在 | `db.docx.find({class:{$gt:'T'}`
`$regex` | 正则表达式匹配 | `db.docx.find({name:{$regex:'^USS\\sE'}})`
`$type` | 按元素类型搜索 | `db.docx.find({name : {$type:4}})`
### 读取
<!--rehype:wrap-class=col-span-3-->
```mongodb
db.coll.findOne() // 返回单个文档
db.coll.find() // 返回一个游标 - 显示 20 个结果 - "it" 显示更多
db.coll.find().pretty()
db.coll.find({name: "Max", age: 32}) // 隐式逻辑“与”。
db.coll.find({date: ISODate("2020-09-25T13:57:17.180Z")})
// 或“queryPlanner”或“allPlansExecution”
db.coll.find({name: "Max", age: 32}).explain("executionStats")
db.coll.distinct("name")
// 数数
db.coll.count({age: 32}) // 基于馆藏元数据的估计
db.coll.estimatedDocumentCount() // 基于馆藏元数据的估计
db.coll.countDocuments({age: 32}) // 聚合管道的别名 - 准确计数
// Comparison 比较
db.coll.find({"year": {$gt: 1970}})
db.coll.find({"year": {$gte: 1970}})
db.coll.find({"year": {$lt: 1970}})
db.coll.find({"year": {$lte: 1970}})
db.coll.find({"year": {$ne: 1970}})
db.coll.find({"year": {$in: [1958, 1959]}})
db.coll.find({"year": {$nin: [1958, 1959]}})
// Logical 逻辑
db.coll.find({name:{$not: {$eq: "Max"}}})
db.coll.find({$or: [{"year" : 1958}, {"year" : 1959}]})
db.coll.find({$nor: [{price: 1.99}, {sale: true}]})
db.coll.find({
$and: [
{$or: [{qty: {$lt :10}}, {qty :{$gt: 50}}]},
{$or: [{sale: true}, {price: {$lt: 5 }}]}
]
})
// Element 元素
db.coll.find({name: {$exists: true}})
db.coll.find({"zipCode": {$type: 2 }})
db.coll.find({"zipCode": {$type: "string"}})
// Aggregation Pipeline 聚合管道
db.coll.aggregate([
{$match: {status: "A"}},
{$group: {_id: "$cust_id", total: {$sum: "$amount"}}},
{$sort: {total: -1}}
])
// 使用“文本”索引进行文本搜索
db.coll.find({$text: {$search: "cake"}}, {score: {$meta: "textScore"}})
.sort({score: {$meta: "textScore"}})
// Regex 正则表达式
db.coll.find({name: /^Max/}) // 正则表达式以字母“M”开头
db.coll.find({name: /^Max$/i}) // 正则表达式不区分大小写
// Array
db.coll.find({tags: {$all: ["Realm", "Charts"]}})
db.coll.find({field: {$size: 2}}) // 无法索引 - 更喜欢存储数组的大小并更新它
db.coll.find({results: {$elemMatch: {product: "xyz", score: {$gte: 8}}}})
// Projections 预测
db.coll.find({"x": 1}, {"actors": 1}) // actors + _id
db.coll.find({"x": 1}, {"actors": 1, "_id": 0}) // actors
db.coll.find({"x": 1}, {"actors": 0, "summary": 0}) // 除了“actors”和“summary”之外的所有内容
// Sort 排序, skip 跳过, limit 限制
db.coll.find({}).sort({"year": 1, "rating": -1}).skip(10).limit(3)
// Read Concern 阅读关注
db.coll.find().readConcern("majority")
```
### 更新
<!--rehype:wrap-class=col-span-3-->
```mongodb
db.coll.update({"_id": 1}, {"year": 2016}) // 警告! 替换整个文档
db.coll.update({"_id": 1}, {$set: {"year": 2016, name: "Max"}})
db.coll.update({"_id": 1}, {$unset: {"year": 1}})
db.coll.update({"_id": 1}, {$rename: {"year": "date"} })
db.coll.update({"_id": 1}, {$inc: {"year": 5}})
db.coll.update({"_id": 1}, {$mul: {price: NumberDecimal("1.25"), qty: 2}})
db.coll.update({"_id": 1}, {$min: {"imdb": 5}})
db.coll.update({"_id": 1}, {$max: {"imdb": 8}})
db.coll.update({"_id": 1}, {$currentDate: {"lastModified": true}})
db.coll.update({"_id": 1}, {$currentDate: {"lastModified": {$type: "timestamp"}}})
// Array
db.coll.update({"_id": 1}, {$push :{"array": 1}})
db.coll.update({"_id": 1}, {$pull :{"array": 1}})
db.coll.update({"_id": 1}, {$addToSet :{"array": 2}})
db.coll.update({"_id": 1}, {$pop: {"array": 1}}) // 最后一个元素
db.coll.update({"_id": 1}, {$pop: {"array": -1}}) // 第一个元素
db.coll.update({"_id": 1}, {$pullAll: {"array" :[3, 4, 5]}})
db.coll.update({"_id": 1}, {$push: {scores: {$each: [90, 92, 85]}}})
db.coll.updateOne({"_id": 1, "grades": 80}, {$set: {"grades.$": 82}})
db.coll.updateMany({}, {$inc: {"grades.$[]": 10}})
db.coll.update({}, {$set: {"grades.$[element]": 100}}, {multi: true, arrayFilters: [{"element": {$gte: 100}}]})
// 更新很多
db.coll.update({"year": 1999}, {$set: {"decade": "90's"}}, {"multi":true})
db.coll.updateMany({"year": 1999}, {$set: {"decade": "90's"}})
// FindOneAndUpdate 查找并更新
db.coll.findOneAndUpdate({"name": "Max"}, {$inc: {"points": 5}}, {returnNewDocument: true})
// Upsert 更新插入
db.coll.update({"_id": 1}, {$set: {item: "apple"}, $setOnInsert: {defaultQty: 100}}, {upsert: true})
// Replace 代替
db.coll.replaceOne({"name": "Max"}, {"firstname": "Maxime", "surname": "Beugnet"})
// Save 保存
db.coll.save({"item": "book", "qty": 40})
// Write concern 写关注
db.coll.update({}, {$set: {"x": 1}}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
```
### 删除
<!--rehype:wrap-class=col-span-3-->
```mongodb
db.coll.remove({name: "Max"})
db.coll.remove({name: "Max"}, {justOne: true})
db.coll.remove({}) // 警告!删除所有文档但不删除集合本身及其索引定义
db.coll.remove({name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
db.coll.findOneAndDelete({"name": "Max"})
```
数据库和集合
---
### Drop
```mongodb
// 删除集合及其索引定义
db.coll.drop()
// 仔细检查你*不*在 PROD 集群上......:-)
db.dropDatabase()
```
### 创建集合
<!--rehype:wrap-class=col-span-2 row-span-2-->
```mongodb
// 使用 $jsonschema 创建集合
db.createCollection("contacts", {
validator: {$jsonSchema: {
bsonType: "object",
required: ["phone"],
properties: {
phone: {
bsonType: "string",
description: "必须是一个字符串并且是必需的"
},
email: {
bsonType: "string",
pattern: "@mongodb\.com$",
description: "必须是字符串并匹配正则表达式模式"
},
status: {
enum: [ "Unknown", "Incomplete" ],
description: "只能是枚举值之一"
}
}
}}
})
```
### 其他采集功能
```mongodb
db.coll.stats()
db.coll.storageSize()
db.coll.totalIndexSize()
db.coll.totalSize()
db.coll.validate({full: true})
// 第二个参数用于删除目标集合(如果存在)
db.coll.renameCollection("new_coll", true)
```
索引
---
### 列表索引
```mongodb
db.coll.getIndexes()
db.coll.getIndexKeys()
```
### 创建索引
<!--rehype:wrap-class=col-span-2 row-span-3-->
```mongodb
// 索引类型
db.coll.createIndex({"name": 1}) // 单字段索引
db.coll.createIndex({"name": 1, "date": 1}) // 复合索引
db.coll.createIndex({foo: "text", bar: "text"}) // 文本索引
db.coll.createIndex({"$**": "text"}) // 通配符文本索引
db.coll.createIndex({"userMetadata.$**": 1}) // 通配符索引
db.coll.createIndex({"loc": "2d"}) // 二维索引
db.coll.createIndex({"loc": "2dsphere"}) // 2dsphere 索引
db.coll.createIndex({"_id": "hashed"}) // 哈希索引
// Index Options
db.coll.createIndex({"lastModifiedDate": 1}, {expireAfterSeconds: 3600}) // TTL指数
db.coll.createIndex({"name": 1}, {unique: true})
db.coll.createIndex({"name": 1}, {partialFilterExpression: {age: {$gt: 18}}}) // 部分索引
// 强度为 1 或 2 的不区分大小写的索引
db.coll.createIndex({"name": 1}, {collation: {locale: 'en', strength: 1}})
db.coll.createIndex({"name": 1 }, {sparse: true})
```
### 删除索引
```mongodb
db.coll.dropIndex("name_1")
```
### 隐藏/取消隐藏索引
```mongodb
db.coll.hideIndex("name_1")
db.coll.unhideIndex("name_1")
```
方便的命令
---
###
<!--rehype:wrap-class=col-span-3&style=display:none;&wrap-style=padding-top: 0;-->
```mongodb
use admin
db.createUser({"user": "root", "pwd": passwordPrompt(), "roles": ["root"]})
db.dropUser("root")
db.auth( "user", passwordPrompt() )
use test
db.getSiblingDB("dbname")
db.currentOp()
db.killOp(123) // opid
db.fsyncLock()
db.fsyncUnlock()
db.getCollectionNames()
db.getCollectionInfos()
db.printCollectionStats()
db.stats()
db.getReplicationInfo()
db.printReplicationInfo()
db.isMaster()
db.hostInfo()
db.printShardingStatus()
db.shutdownServer()
db.serverStatus()
db.setSlaveOk()
db.getSlaveOk()
db.getProfilingLevel()
db.getProfilingStatus()
db.setProfilingLevel(1, 200) // 0 == OFF, 1 == ON with slowms, 2 == ON
db.enableFreeMonitoring()
db.disableFreeMonitoring()
db.getFreeMonitoringStatus()
db.createView("viewName", "sourceColl", [{$project:{department: 1}}])
```
各种各样的
---
### 改变流
```mongodb
watchCursor = db.coll.watch([
{
$match : {"operationType": "insert" }
}
])
while (!watchCursor.isExhausted()){
if (watchCursor.hasNext()){
print(tojson(watchCursor.next()));
}
}
```
### 分片集群
<!--rehype:wrap-class=col-span-2 row-span-3-->
```mongodb
sh.status()
sh.addShard("rs1/mongodbd1.example.net:27017")
sh.shardCollection("mydb.coll", {zipcode: 1})
sh.moveChunk("mydb.coll", { zipcode: "53187" }, "shard0019")
sh.splitAt("mydb.coll", {x: 70})
sh.splitFind("mydb.coll", {x: 70})
sh.disableAutoSplit()
sh.enableAutoSplit()
sh.startBalancer()
sh.stopBalancer()
sh.disableBalancing("mydb.coll")
sh.enableBalancing("mydb.coll")
sh.getBalancerState()
sh.setBalancerState(true/false)
sh.isBalancerRunning()
sh.addTagRange("mydb.coll", {state: "NY",zip: MinKey}, {state: "NY",zip: MaxKey}, "NY")
sh.removeTagRange("mydb.coll", {state: "NY",zip: MinKey}, {state: "NY",zip: MaxKey}, "NY")
sh.addShardTag("shard0000", "NYC")
sh.removeShardTag("shard0000", "NYC")
sh.addShardToZone("shard0000", "JFK")
sh.removeShardFromZone("shard0000", "NYC")
sh.removeRangeFromZone("mydb.coll", {a: 1, b: 1}, {a: 10, b: 10})
```
### 副本集
```mongodb
rs.status()
rs.initiate({"_id": "replicaTest",
members: [
{ _id: 0, host: "127.0.0.1:27017" },
{ _id: 1, host: "127.0.0.1:27018" },
{ _id: 2, host: "127.0.0.1:27019",
arbiterOnly:true }]
})
rs.add("mongodbd1.example.net:27017")
rs.addArb("mongodbd2.example.net:27017")
rs.remove("mongodbd1.example.net:27017")
rs.conf()
rs.isMaster()
rs.printReplicationInfo()
rs.printSlaveReplicationInfo()
rs.reconfig(<valid_conf>)
rs.slaveOk()
rs.stepDown(20, 5)
// (stepDownSecs, secondaryCatchUpPeriodSecs)
```

View File

@ -556,7 +556,7 @@ ON t(c3,c4)
删除索引
```sql
DROP INDEX idx_name;
DROP INDEX idx_name ON t;
```
MySQL 数据类型
@ -601,6 +601,80 @@ MySQL 数据类型
| `DOUBLE` | Decimal (24 to 53 digits) |
| `DECIMAL` | "­DOU­BLE­" stored as string |
## 函数
### 聚合函数
| 函数 | 解释 |
| :--------- |:-------------------------------|
| `SUM()` | 计算一列值的总和 |
| `AVG()` | 计算一列值的平均值 |
| `COUNT()` | 计算行数可选择性地忽略NULL值 |
| `MAX()` | 找出一列的最大值 |
| `MIN()` | 找出一列的最小值 |
### 数学函数
<!--rehype:wrap-class=col-span-2 -->
| 函数 | 解释 | 示例语法 | 结果 |
| :-------------- | :---------------------------------------------- | :----------------------- | :-------- |
| `ABS(x)` | 返回数值的绝对值 | `ABS(-5)` | 5 |
| `ROUND(x,y)` | 四舍五入到指定的小数位数y为小数位数默认为0 | `ROUND(3.1415,2)` | 3.14 |
| `FLOOR(x)` | 向下取整至最接近的整数 | `FLOOR(3.7)` | 3 |
| `CEIL(x)` | 向上取整至最接近的整数 | `CEIL(3.3)` | 4 |
| `SQRT(x)` | 返回一个数的平方根 | `SQRT(16)` | 4 |
| `MOD(x,y)` | 返回x除以y的余数 | `MOD(10,3)` | 1 |
| `RAND([seed])` | 返回0到1之间的随机数可选种子值 | `RAND()``RAND(123)` | 0.345... |
### 日期和时间函数
| 函数 | 解释 |
| :--------------- | :-------------------------- |
| `NOW()` | 返回当前日期和时间 |
| `CURDATE()` | 返回当前日期 |
| `CURTIME()` | 返回当前时间 |
| `DATE_FORMAT()` | 格式化日期时间输出 |
| `DATEDIFF()` | 计算两个日期之间相差的天数 |
| `STR_TO_DATE()` | 将字符串转换为日期格式 |
### 字符串函数
<!--rehype:wrap-class=col-span-2 -->
| 函数 | 解释 | 示例语法 | 结果 |
| :------------------------------ | :------------------------ | ---------------------------- | --------------- |
| `CONCAT(s1,s2,...)` | 连接两个或更多字符串 | `CONCAT('Hello, ','World!')` | 'Hello, World!' |
| `LOWER(str)` | 转换为小写 | `LOWER('HELLO')` | 'hello' |
| `UPPER(str)` | 转换为大写 | `UPPER('world')` | 'WORLD' |
| `TRIM(str)` | 去除字符串两端空格 | `TRIM(' Hello ')` | 'Hello' |
| `LEFT(str,len)` | 提取字符串左侧的若干字符 | `LEFT('Hello', 3)` | 'Hel' |
| `RIGHT(str,len)` | 提取字符串右侧的若干字符 | `RIGHT('Hello', 2)` | 'lo' |
| `SUBSTR(str,pos,len)` | 提取字符串中的一部分 | `SUBSTR('Hello', 2, 3)` | 'ell' |
| `REPLACE(str,from_str,to_str)` | 替换字符串中的部分文本 | `REPLACE('Hello', 'l', 'L')` | 'HeLLo' |
### 高级函数
<!--rehype:wrap-class=col-span-3 -->
| 函数 | 解释 | 示例语法 | 结果 |
| ----------------------------------- | -------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------- |
| BIN(x) | 返回 x 的二进制编码x 为十进制数。 | `BIN(2)` | `10` |
| BINARY(s) | 将字符串 s 转换为二进制字符串。 | `BINARY 'RUNOOB'` | `'RUNOOB'`(显示效果,实际存储为二进制) |
| CASE | 复合条件函数,根据条件返回不同结果。 | `CASE WHEN 1 > 0 THEN '1 > 0' WHEN 2 > 0 THEN '2 > 0' ELSE '3 > 0' END` | `'1 > 0'` |
| CAST(x AS type) | 转换数据类型。 | `CAST('2017-08-29' AS DATE)` | `2017-08-29` |
| COALESCE(expr1, expr2, ..., expr_n) | 返回第一个非空表达式的值。 | `COALESCE(NULL, NULL, 'runoob.com', NULL, 'google.com')` | `'runoob.com'` |
| CONNECTION_ID() | 返回当前连接的唯一ID。 | `CONNECTION_ID()` | `4292835`(示例值) |
| CONV(x, f1, f2) | 将 f1 进制数转换为 f2 进制数。 | `CONV(15, 10, 2)` | `1111` |
| CONVERT(s USING cs) | 转换字符串 s 的字符集为 cs。 | `CHARSET(CONVERT('ABC' USING gbk))` | `gbk` |
| CURRENT_USER() | 返回当前用户。 | `CURRENT_USER()` | `guest@%` |
| DATABASE() | 返回当前数据库名。 | `DATABASE()` | `runoob` |
| IF(expr, v1, v2) | 条件表达式expr 为真则 v1否则 v2。 | `IF(1 > 0, '正确', '错误')` | `'正确'` |
| IFNULL(v1, v2) | 如果 v1 不为 NULL则返回 v1否则返回 v2。 | `IFNULL(NULL, 'Hello Word')` | `'Hello Word'` |
| ISNULL(expression) | 判断表达式是否为 NULL。 | `ISNULL(NULL)` | `1` |
| LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值。 | `LAST_INSERT_ID()` | `6`(示例值) |
| NULLIF(expr1, expr2) | 若 expr1 等于 expr2则返回 NULL否则返回 expr1。 | `NULLIF(25, 25)` | `NULL` |
另见
---

Some files were not shown because too many files have changed in this diff Show More