Compare commits

...

428 Commits

Author SHA1 Message Date
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
0c9fb086ee released v1.33.0 2022-12-18 00:11:53 +08:00
f1200c67e1 feat: add adb.md cheatsheet. #233 2022-12-18 00:08:37 +08:00
cc20a31a47 doc: update quickreference.md. 2022-12-18 00:08:37 +08:00
1f34ea3bc3 doc: update README.md. 2022-12-17 13:48:04 +00:00
61b3b5deec doc: update CONTRIBUTING.md. 2022-12-17 13:48:03 +00:00
3fed079194 doc: update README.md. (#235) 2022-12-17 21:46:36 +08:00
c481bcdb7b doc: update README.md. 2022-12-17 13:07:35 +00:00
96e752e809 doc: update CONTRIBUTING.md. 2022-12-17 13:07:35 +00:00
01d238eaab doc: update make.md (#234) 2022-12-17 21:06:15 +08:00
07aaae0e2b chore: support more platforms. #232 2022-12-17 17:59:22 +08:00
247cd4d4e6 chore: support aarch64. #232 2022-12-17 17:24:43 +08:00
9945c1b16f chore: support aarch64. #232 2022-12-17 17:16:57 +08:00
8b151f891c doc: update lua.md. 2022-12-17 11:56:25 +08:00
9dd378128e doc: update README.md. 2022-12-17 01:05:50 +00:00
6b286b6eb6 doc: update CONTRIBUTING.md. 2022-12-17 01:05:49 +00:00
d280013c31 docs: update golang.md (#231) 2022-12-17 09:04:28 +08:00
bdf0dc17cd feat: add reactrouter.md cheatsheet. 2022-12-17 00:55:16 +08:00
4995e6f500 doc: update README.md. 2022-12-16 14:31:59 +00:00
822e08a6de doc: update CONTRIBUTING.md. 2022-12-16 14:31:58 +00:00
88f392c532 doc: update feds.md. 2022-12-16 22:30:13 +08:00
72766dfabe doc: update vscode.md (#230) 2022-12-16 15:05:38 +08:00
bfe5551acf feat: add feds.md cheatsheet. 2022-12-15 23:52:28 +08:00
c5792b7c7e doc: update README.md. 2022-12-15 14:34:54 +00:00
81548feeef doc: update CONTRIBUTING.md. 2022-12-15 14:34:53 +00:00
5e284e6f14 doc: update java.md (#229) 2022-12-15 22:33:42 +08:00
3c4540d248 doc: update README.md. 2022-12-15 06:31:36 +00:00
e8ccba5cbb doc: update CONTRIBUTING.md. 2022-12-15 06:31:35 +00:00
e6d2a48410 doc: update flask.md (#228) (#223) 2022-12-15 14:30:17 +08:00
a82f7b948e doc: update typescript.md. 2022-12-15 10:33:19 +08:00
7c17fe1222 chore: update script. 2022-12-14 12:59:16 +08:00
e781a3b20e doc: update flask logo. 2022-12-14 12:39:04 +08:00
0f18fbac08 released v1.32.0 2022-12-14 12:34:19 +08:00
17c188861e doc: update README.md. 2022-12-14 03:29:38 +00:00
1a1bf6cd66 doc: update CONTRIBUTING.md. 2022-12-14 03:29:37 +00:00
ab795d65aa doc: update react-native.md 2022-12-14 11:27:58 +08:00
150a9bc943 doc: update htmx.md 2022-12-13 11:05:04 +08:00
89fddf6b6f doc: update flask.md #223 2022-12-12 15:24:20 +08:00
a8ba4c4e7a doc: update flask.md #223 2022-12-12 15:24:19 +08:00
45908c8d90 doc: update ffmpeg.md #18 2022-12-12 15:24:19 +08:00
f626e21702 doc: update README.md. 2022-12-12 06:27:23 +00:00
83d9bda16e doc: update CONTRIBUTING.md. 2022-12-12 06:27:22 +00:00
470ccb5311 feat: add flask.md cheatsheet (#222) 2022-12-12 14:26:17 +08:00
3964c0c301 doc: update python.md (#221) 2022-12-12 11:21:22 +08:00
3d0d2947a0 doc: update react-native.md 2022-12-12 11:04:29 +08:00
df8e3a8099 doc: update README.md. 2022-12-10 09:55:52 +00:00
88b8c8f1c2 doc: update CONTRIBUTING.md. 2022-12-10 09:55:52 +00:00
f123f31449 doc: update flutter.md (#220) 2022-12-10 17:54:32 +08:00
c0641d2898 doc: update bash.md 2022-12-10 12:56:20 +08:00
a442108e0f chore: update workflows config. 2022-12-10 12:43:50 +08:00
2af557fa28 chore: update workflows config. 2022-12-10 12:39:29 +08:00
cb9af579f0 chore: update workflows config. 2022-12-10 12:35:20 +08:00
9a2cbcd359 doc: update css.md 2022-12-10 12:16:31 +08:00
0c81d4815b doc: update README.md. 2022-12-09 10:24:53 +00:00
d3e880b6d2 doc: update CONTRIBUTING.md. 2022-12-09 10:24:52 +00:00
8b2c227f73 feat: add tailwindcss.md cheatsheet. 2022-12-09 18:22:54 +08:00
545e702138 doc: update docker.md, dockerfile.md (#219) 2022-12-09 15:58:37 +08:00
6f61fab73d doc: update README.md. 2022-12-09 07:05:46 +00:00
95a03cef33 doc: update CONTRIBUTING.md. 2022-12-09 07:05:45 +00:00
c56a018d9b doc: Update README.md (#218) 2022-12-09 15:04:40 +08:00
a40568cc85 feat: add jquery.md cheatsheet. #217 2022-12-08 15:10:26 +08:00
768fb34db9 doc: update git.md 2022-12-08 14:30:32 +08:00
b13bb0d6b9 doc: update make.md #200 2022-12-07 22:38:58 +08:00
7348140ae1 doc: update git.md (#216) 2022-12-07 21:46:31 +08:00
403838287e doc: update make.md (#215) 2022-12-07 20:56:56 +08:00
b07df71f57 doc: update README.md. 2022-12-07 11:41:10 +00:00
5e88df2994 doc: update CONTRIBUTING.md. 2022-12-07 11:41:09 +00:00
58f486a9fb doc: update make.md (#214) 2022-12-07 19:39:50 +08:00
665b7d8ce3 doc: update README.md (#213) (#102)
发现一个镜像站更改了,故而去掉
2022-12-07 10:18:09 +08:00
0af1de43c7 doc: add intelli-j-idea.md cheatsheet. 2022-12-06 21:57:01 +08:00
c5f5f0cd19 released v1.31.0 2022-12-06 21:31:38 +08:00
0b704fd5e3 doc: add badges. 2022-12-06 21:30:53 +08:00
d7503afff2 doc: update jest.md #212. 2022-12-06 21:30:53 +08:00
381a23490e docs: add makefile (#209) #200 2022-12-06 11:57:44 +08:00
c1fbb99393 doc: update css.md 2022-12-06 11:49:53 +08:00
3dd01e372c doc: update README.md. 2022-12-06 03:35:04 +00:00
033709eb8d doc: update CONTRIBUTING.md. 2022-12-06 03:35:03 +00:00
260f1ec438 doc: add mirror ref.eryajf.net (#208)
添加 ref.eryajf.net 镜像
2022-12-06 11:33:41 +08:00
b104ca8bfd doc: update css.md 2022-12-05 16:16:19 +08:00
b3d7fb1ea1 docs: add makefile var (#207) 2022-12-05 13:17:26 +08:00
cd599f7798 doc: Update README.md #206 #102 2022-12-05 09:51:09 +08:00
5b649147ca doc: Update README.md 2022-12-04 19:10:29 +08:00
aa539136fc doc: update README.md #102 2022-12-04 19:00:20 +08:00
e57f03ce8d feat: add aspect-ratio.md cheatsheet. 2022-12-04 17:58:12 +08:00
cb33da466e doc: update vue.md #10 add typescript example 2022-12-04 17:44:56 +08:00
d2b583fc68 doc: update README.md. 2022-12-04 03:11:11 +00:00
6cde7a1b6f doc: update CONTRIBUTING.md. 2022-12-04 03:11:10 +00:00
57fb87d021 doc: Update README.md (#204)
Co-authored-by: 小弟调调™ <kennyiseeyou@gmail.com>
2022-12-04 11:09:52 +08:00
55f4a35a1a doc: update make.md (#203) 2022-12-04 11:02:51 +08:00
c5f73221f4 doc: update README.md. 2022-12-04 03:02:40 +00:00
6d8d80c68e doc: update CONTRIBUTING.md. 2022-12-04 03:02:39 +00:00
7efa3c1fca doc: change domain (#205)
我换域名了,麻烦重新推送一下
2022-12-04 11:01:15 +08:00
fbcd7edf78 doc: update typescript.md 2022-12-03 17:55:09 +08:00
33328e5987 doc: update make.md #200 2022-12-03 17:54:36 +08:00
3f191de637 doc: Update typescript.md 2022-12-03 17:44:57 +08:00
d75cda78f5 docs: add make cheatsheet (#202) #200 2022-12-03 17:41:21 +08:00
b5467ec1c2 doc: Update Home page. 2022-12-03 15:04:56 +08:00
51c4d2a719 doc: add badges. 2022-12-03 14:54:19 +08:00
ca80355477 feat: add htmx.md cheatsheet. 2022-12-03 11:30:46 +08:00
a24330243f doc: update README.md. 2022-12-03 01:04:23 +00:00
acaccae376 doc: update CONTRIBUTING.md. 2022-12-03 01:04:22 +00:00
0e2da4158f doc: add mirror (#199)
quick.hestudio.xyz
2022-12-03 09:03:12 +08:00
a26f95a1be doc: update README.md. 2022-12-02 16:26:27 +00:00
53b56623a4 doc: update CONTRIBUTING.md. 2022-12-02 16:26:26 +00:00
b58db5cc58 doc: add mirror (#197) 2022-12-03 00:25:08 +08:00
f00a647c3e feat: add iptables cheatsheet. #192 2022-12-02 14:30:50 +08:00
869fbc6b40 docs: update rust range (#194)
* docs: update rust range

* update

* update
2022-12-01 22:53:17 +08:00
5910a3f924 doc: update README.md 2022-12-01 20:29:52 +08:00
fadc13ae70 doc: Update README.md 2022-12-01 18:11:25 +08:00
36b984bb21 doc: Update README.md 2022-12-01 17:52:54 +08:00
f778b3c28e feat: add adobe-xd.md cheatsheet. 2022-12-01 17:49:31 +08:00
1c0bb6a9a5 feat: add adobe-lightroom.md cheatsheet. 2022-12-01 17:07:28 +08:00
b390eaca59 doc: update react-native.md 2022-12-01 16:37:01 +08:00
0e9d9ac16d doc: update redis.md #191 2022-12-01 10:18:10 +08:00
b117f3eab7 doc: update redis.md #191 2022-12-01 09:47:29 +08:00
8fddbda70d doc: update README.md. 2022-12-01 01:28:38 +00:00
0d236303a7 doc: update CONTRIBUTING.md. 2022-12-01 01:28:37 +00:00
d1c0ded4f7 doc: Add quickref.pipecraft.net to the home page. #102 2022-12-01 09:27:07 +08:00
kim
4f705878b6 feat: add redis.md cheatsheet. (#191)
* feat: add redis.md cheatsheet.

* feat: add a redis.md cheatsheet.
2022-12-01 09:06:44 +08:00
63e5cd5109 released v1.30.0 2022-11-30 23:45:57 +08:00
f21715f172 chore: update workflows config. 2022-11-30 23:38:34 +08:00
2bd72b4c05 feat: add firefox.md cheatsheet. 2022-11-30 23:36:34 +08:00
10a4fe3f5b feat: add gitlab.md cheatsheet. 2022-11-30 23:24:23 +08:00
0a5373796d doc: Update README.md 2022-11-30 23:14:30 +08:00
64a2fba903 feat: add google-chrome.md cheatsheet. 2022-11-30 23:01:01 +08:00
a9f661f87f doc: update sublime-text.md 2022-11-30 22:42:12 +08:00
dcd6d5bdbe doc: update android-studio.md 2022-11-30 22:37:58 +08:00
d25eaebcd2 doc: update sublime-text.md 2022-11-30 22:37:43 +08:00
501c7d757e feat: add github.md cheatsheet. 2022-11-30 22:29:41 +08:00
8db7257b7a doc: update README.md. 2022-11-30 10:13:26 +00:00
4c0c1c95e8 doc: update CONTRIBUTING.md. 2022-11-30 10:13:26 +00:00
7e263a21e7 feat: add android-studio.md cheatsheet. 2022-11-30 18:02:28 +08:00
54eba6ebd8 doc: update README.md. 2022-11-30 09:52:12 +00:00
97cda7ec9f doc: update CONTRIBUTING.md. 2022-11-30 09:52:11 +00:00
746a387005 feat: add adobe-photoshop.md cheatsheet. 2022-11-30 17:50:39 +08:00
93e23d581f feat: add pm2.md cheatsheet. 2022-11-30 01:00:42 +08:00
44711bf9a1 doc: Update READMe.md #102 2022-11-29 21:53:14 +08:00
e251179751 released v1.29.0 2022-11-29 21:51:36 +08:00
bf114d2ccf doc: update quickreference.md. 2022-11-29 12:33:53 +08:00
5877c04e57 doc: update quickreference.md #189 2022-11-29 12:09:28 +08:00
cb64b52cda doc: update react-native.md 2022-11-29 11:34:05 +08:00
396037f90a doc: Update README.md 2022-11-29 09:03:47 +08:00
3ad1e261c2 doc: modify README.md. 2022-11-28 17:12:51 +00:00
915a802060 doc: modify CONTRIBUTING.md. 2022-11-28 17:12:50 +00:00
b9ca744978 feat: add react-native.md cheatsheet. 2022-11-29 01:11:15 +08:00
c514341b29 doc: update typescript.md (#186) 2022-11-28 23:47:57 +08:00
9562c34876 doc: update cocoapods.md 2022-11-28 22:04:14 +08:00
91190ec29a doc: modify README.md. 2022-11-28 13:51:07 +00:00
7b5e77dd30 doc: modify CONTRIBUTING.md. 2022-11-28 13:51:06 +00:00
a41ec2693e doc: update github-action.md (#184) 2022-11-28 21:49:44 +08:00
f915f4c155 fix: webstorm.md (#182) 2022-11-28 17:42:25 +08:00
e1bf0f9655 doc: modify README.md. 2022-11-28 08:22:14 +00:00
5728ac71f9 doc: modify CONTRIBUTING.md. 2022-11-28 08:22:13 +00:00
39fef5e856 doc: update rust.md (#181) (#20) 2022-11-28 16:20:56 +08:00
d1b87b9de9 doc: Update ffmpeg.md (#180)
增加ffmpeg流处理
2022-11-28 10:27:14 +08:00
026dc585a8 released v1.28.0 2022-11-27 22:44:27 +08:00
d09737fcda doc: update flutter.md #179 #58 2022-11-27 22:42:25 +08:00
029e2751c4 feat: add nextjs.md cheatsheet. 2022-11-27 22:33:24 +08:00
0a4bd03900 doc: update flutter.md (#179)
* doc: update flutter.md

* doc: update flutter.md
2022-11-27 17:17:10 +08:00
fe7782a0c4 doc: update github-actions.md #170 2022-11-27 10:22:20 +08:00
9751df06b9 doc: update rust.md (#178)
* doc: match let

* update
2022-11-27 01:52:50 +08:00
111 changed files with 25672 additions and 419 deletions

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

@ -6,6 +6,7 @@ on:
jobs:
build:
if: github.repository == 'jaywcjlove/reference'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@ -44,6 +45,34 @@ jobs:
with:
package-path: ./package.json
- name: gh-pages README.md
working-directory: dist
run: |
cat << "EOF" > README.md
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)
轻松通过 `docker` 部署 `Quick Reference` 网站。
```bash
docker pull wcjiang/reference
```
```bash
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest
# Or
docker run --name reference -itd -p 9667:3000 wcjiang/reference:latest
```
在浏览器中访问以下 URL
```bash
http://localhost:9667/
```
EOF
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
@ -55,10 +84,9 @@ jobs:
id: changelog
uses: jaywcjlove/changelog-generator@main
with:
filter-author: (小弟调调™)
filter-author: (小弟调调™|github-actions-bot|dependabot|renovate\\[bot\\]|dependabot\\[bot\\]|Renovate Bot)
filter: (^[\s]+?[R|r]elease)|(^[R|r]elease)
- name: Create Release
uses: ncipollo/release-action@v1
if: steps.create_tag.outputs.successful
@ -69,33 +97,32 @@ jobs:
body: |
Documentation ${{ needs.build.outputs.create_tag_version }}: 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 }}
## 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)
轻松通过 `docker` 部署 `Quick Reference` 网站。
```bash
docker pull wcjiang/reference
```
```bash
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest
# Or
docker run --name reference -itd -p 9667:3000 wcjiang/reference:latest
```
在浏览器中访问以下 URL
```bash
http://localhost:9667/
```
# Create Docker Image
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
@ -108,7 +135,7 @@ jobs:
push: true
context: .
platforms: linux/amd64,linux/arm64
tags: ${{ secrets.DOCKER_USER }}/reference:latest
tags: wcjiang/reference:latest
- name: Build and push image:tags
uses: docker/build-push-action@v3
@ -117,7 +144,7 @@ jobs:
push: true
context: .
platforms: linux/amd64,linux/arm64
tags: ${{ secrets.DOCKER_USER }}/reference:${{steps.changelog.outputs.version}}
tags: wcjiang/reference:${{steps.changelog.outputs.version}}
# Create Docker Image in Github
- name: Login to the GitHub Container Registry
@ -144,8 +171,6 @@ jobs:
platforms: linux/amd64,linux/arm64
tags: ghcr.io/jaywcjlove/reference:${{steps.changelog.outputs.version}}
# # Create Docker Image in Github
# - name: Login to GitHub registry
# run: echo ${{ github.token }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
@ -166,7 +191,7 @@ jobs:
# # Create Docker Image
# - name: Docker login
# run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}
# - name: Build reference image
# run: docker image build -t reference .
@ -181,4 +206,4 @@ jobs:
# run: |
# echo "outputs.tag - ${{ steps.changelog.outputs.version }}"
# docker tag reference ${{ secrets.DOCKER_USER }}/reference:${{steps.changelog.outputs.version}}
# docker push ${{ secrets.DOCKER_USER }}/reference:${{steps.changelog.outputs.version}}
# docker push ${{ secrets.DOCKER_USER }}/reference:${{steps.changelog.outputs.version}}

View File

@ -6,6 +6,7 @@ on:
jobs:
build:
if: github.repository == 'jaywcjlove/reference'
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
@ -24,4 +25,4 @@ jobs:
- uses: actions/upload-artifact@v3
with:
name: dist
path: ${{ github.workspace }}\dist\**\*
path: ${{ github.workspace }}\dist\**\*

View File

@ -132,39 +132,134 @@ 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)
- [hestudio.org](https://quickref.hestudio.org)
- [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/)
感谢🙏
## 利用 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="小弟调调"/>
<!--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/Jack-Zhang-1314" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
<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/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/Alex-Programer" title="Alex">
<img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/>
</a>
<a href="https://github.com/JeffersonHuang" title="Jefferson">
<img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson"/>
<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/expoli" title="expoli">
<img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/>
</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 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/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/chaos-cn" title="chaos">
<img src="https://avatars.githubusercontent.com/u/71205599?v=4" width="42;" alt="chaos"/>
</a>
<a href="https://github.com/MarioMang" title="MarioMang">
<img src="https://avatars.githubusercontent.com/u/3959555?v=4" width="42;" alt="MarioMang"/>
</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/heStudio-Network" title="醉、倾城">
<img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="醉、倾城"/>
</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/1834423612" title="kjch">
<img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/>
</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/pangxiaoli" title="pangxiaoli">
<img src="https://avatars.githubusercontent.com/u/54620953?v=4" width="42;" alt="pangxiaoli"/>
</a>
<a href="https://github.com/partoneplay" title="partoneplay">
<img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/>
@ -175,75 +270,171 @@ REF_LABEL=网站首页
<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/Country-If" title="Maylon">
<img src="https://avatars.githubusercontent.com/u/62837275?v=4" width="42;" alt="Maylon"/>
</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="Anko">
<img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="Anko"/>
<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/Brid9e" title="Brid9e">
<img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Brid9e"/>
<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/CharlotteZeng" title="Chart">
<img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="Chart"/>
<a href="https://github.com/ch3nnn" title="陈通">
<img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="陈通"/>
</a>
<a href="https://github.com/DaiNing810" title="DaiN">
<img src="https://avatars.githubusercontent.com/u/94962339?v=4" width="42;" alt="DaiN"/>
<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/Damao2250" title="Damao">
<img src="https://avatars.githubusercontent.com/u/19251992?v=4" width="42;" alt="Damao"/>
</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/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/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/Ding-Kyoma" title="HooinKyoma">
<img src="https://avatars.githubusercontent.com/u/44542198?v=4" width="42;" alt="HooinKyoma"/>
</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/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/LufsX" title="LufsX">
<img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/>
<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/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/Moeyuuko" title="Moeyuuko">
<img src="https://avatars.githubusercontent.com/u/14266681?v=4" width="42;" alt="Moeyuuko"/>
</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/HanaNoryu" title="Noryu">
<img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/>
</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/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/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/whb1998a" title="WHB">
<img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="WHB"/>
</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/hi-liyan" title="嘉木旅人">
<img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="嘉木旅人"/>
</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/dfshizhiqiang" title="Zech">
<img src="https://avatars.githubusercontent.com/u/7030019?v=4" width="42;" alt="Zech"/>
</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/zhu0629" title="Zhu">
<img src="https://avatars.githubusercontent.com/u/13188450?v=4" width="42;" alt="Zhu"/>
</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/y52y" title="Zyj">
<img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/>
</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/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 href="https://github.com/gaoxiaoduan" title="Jerrod Cole">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="Jerrod Cole"/>
</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 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/fjqz177" title="fjqz177">
<img src="https://avatars.githubusercontent.com/u/83070583?v=4" width="42;" alt="fjqz177"/>
</a>
<a href="https://github.com/gi-b716" title="gi-b716">
<img src="https://avatars.githubusercontent.com/u/78394473?v=4" width="42;" alt="gi-b716"/>
</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/greyhao" title="greyhao">
<img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/>
</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/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/auroraslot" title="Tang Weize">
<img src="https://avatars.githubusercontent.com/u/48817882?v=4" width="42;" alt="Tang Weize"/>
</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/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/larry-xue" title="larry">
<img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/>
</a>
@ -253,29 +444,50 @@ REF_LABEL=网站首页
<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 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/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/wjjwkwindy" title="wjjwkwindy">
<img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="wjjwkwindy"/>
<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/wannima66" title="tmen">
<img src="https://avatars.githubusercontent.com/u/26410255?v=4" width="42;" alt="tmen"/>
</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/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 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/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 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/ZIDOUZI" title="子斗子">
<img src="https://avatars.githubusercontent.com/u/53157536?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/1250422131" title="萌新杰少">
<img src="https://avatars.githubusercontent.com/u/52126790?v=4" width="42;" alt="萌新杰少"/>
</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/Zeng-qh" title="都一样">
<img src="https://avatars.githubusercontent.com/u/40046415?v=4" width="42;" alt="都一样"/>
</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!

341
README.md
View File

@ -16,7 +16,7 @@ Quick Reference
## 正在建设中...
坑已挖,需要您的参与完善和贡献!🙏
坑已挖,需要您的参与完善和[贡献](./docs/quickreference.md)!🙏
<!--rehype:style=padding-bottom: 23px;-->
[Ansible](./docs/ansible.md)<!--rehype:style=background: rgb(238 0 0);&class=contributing tag&data-lang=RedHat&data-info=👆看看还缺点儿什么?-->
@ -24,10 +24,11 @@ Quick Reference
[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-->
[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-->
[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-->
[Lua](./docs/lua.md)<!--rehype:style=background: rgb(3 3 128);-->
[Lua](./docs/lua.md)<!--rehype:style=background: rgb(3 3 128);&class=contributing-->
[NestJS](./docs/nestjs.md)<!--rehype:style=background: rgb(237 21 67);&class=contributing-->
[MATLAB](./docs/matlab.md)<!--rehype:style=background: rgb(0 118 168);&class=contributing-->
[Oracle](./docs/oracle.md)<!--rehype:style=background: rgb(255 0 0);&class=contributing tag&data-lang=SQL-->
@ -44,26 +45,26 @@ Quick Reference
[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-->
[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-->
[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);-->
[MySQL](./docs/mysql.md)<!--rehype:style=background: rgb(1 117 143);&class=tag&data-lang=SQL-->
[MATLAB](./docs/matlab.md)<!--rehype:style=background: rgb(0 118 168);&class=contributing-->
[Oracle](./docs/oracle.md)<!--rehype:style=background: rgb(255 0 0);-->
[PHP](./docs/php.md)<!--rehype:style=background: rgb(79 91 147);-->
[Python](./docs/python.md)<!--rehype:style=background: rgb(43 91 132);-->
[PostgreSQL](./docs/postgres.md)<!--rehype:style=background: rgb(43 109 163);&class=tag&data-lang=SQL-->
[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);-->
@ -74,6 +75,7 @@ Quick Reference
## 前端
[前端导航](./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);-->
@ -83,12 +85,18 @@ Quick Reference
[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);-->
[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-->
## Nodejs
@ -99,6 +107,7 @@ Quick Reference
[Lerna](./docs/lerna.md)<!--rehype:style=background: rgb(192 132 252);-->
[npm](./docs/npm.md)<!--rehype:style=background: rgb(203 2 0);-->
[NestJS](./docs/nestjs.md)<!--rehype:style=background: rgb(237 21 67);&class=contributing-->
[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);-->
<!--rehype:class=home-card-->
@ -106,29 +115,28 @@ Quick Reference
## 工具
[Emacs](./docs/emacs.md)<!--rehype:style=background: rgb(98 36 134);-->
[Gmail](./docs/gmail.md)<!--rehype:style=background: rgb(234 67 54);-->
[Github](./docs/github.md)<!--rehype:style=background: rgb(36 41 47);-->
[nginx](./docs/nginx.md)<!--rehype:style=background: rgb(0 153 0);-->
[Semver](./docs/semver.md)<!--rehype:style=background: rgb(106 111 141);-->
[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);-->
[Vim](./docs/vim.md)<!--rehype:style=background: rgb(9 150 8);-->
[WebStorm](./docs/webstorm.md)<!--rehype:style=background: rgb(32 148 220);-->
[XPath](./docs/xpath.md)<!--rehype:style=background: rgb(91 163 230);-->
[Xcode](./docs/xcode.md)<!--rehype:style=background: rgb(24 151 233);&class=tag&data-lang=macOS-->
<!--rehype:class=home-card-->
## 命令
[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++-->
[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-->
[Curl](./docs/curl.md)<!--rehype:style=background: rgb(16 185 129);-->
[Chmod](./docs/chmod.md)<!--rehype:style=background: rgb(16 185 129);-->
[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-->
[Gdb](./docs/gdb.md)<!--rehype:style=background: rgb(215 89 62);-->
[Git](./docs/git.md)<!--rehype:style=background: rgb(215 89 62);-->
[Grep](./docs/grep.md)<!--rehype:style=background: rgb(16 185 129);-->
[Find](./docs/find.md)<!--rehype:style=background: rgb(16 185 129);-->
@ -136,12 +144,15 @@ Quick Reference
[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);-->
[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);-->
[Systemd](./docs/systemd.md)<!--rehype:style=background: rgb(16 185 129);-->
[SSH](./docs/ssh.md)<!--rehype:style=background: rgb(99 99 99);-->
[Screen](./docs/screen.md)<!--rehype:style=background: rgb(99 99 99);-->
@ -149,20 +160,52 @@ Quick Reference
[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);-->
[Zip](./docs/zip.md)<!--rehype:style=background: rgb(99 99 99);-->
[APT](./docs/apt.md)<!--rehype:style=background: rgb(30 144 255);-->
[tar](./docs/tar.md)<!--rehype:style=background: rgb(215 89 62);-->
[pacman](./docs/pacman.md)<!--rehype:style=background: rgb(24 147 209);&class=tag&data-lang=archlinux&class=contributing-->
[Linux Command](./docs/linux-command.md)<!--rehype:style=background: rgb(215 89 62);&class=tag&data-lang=命令速查-->
<!--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);-->
<!--rehype:class=home-card-->
## 快捷键
[Adobe Lightroom](./docs/adobe-lightroom.md)<!--rehype:style=background: rgb(49 168 255);-->
[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);-->
[Firefox](./docs/firefox.md)<!--rehype:style=background: rgb(253 53 76);-->
[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-->
[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);-->
[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);-->
[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);-->
[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-->
@ -172,36 +215,66 @@ 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-->
## 感谢所有贡献者
<!--rehype:wrap-style=text-align: center;max-width: 650px;margin: 0 auto;&class=home-title-reset-->
请参阅 [Quick Reference](./docs/quickreference.md) 了解如何开始。一如既往,感谢我们出色的贡献者!
请参阅 [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="小弟调调"/>
<!--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/Jack-Zhang-1314" title="fw_qaq">
<img src="https://avatars.githubusercontent.com/u/82551626?v=4" width="42;" alt="fw_qaq"/>
<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/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/Alex-Programer" title="Alex">
<img src="https://avatars.githubusercontent.com/u/115539090?v=4" width="42;" alt="Alex"/>
</a>
<a href="https://github.com/JeffersonHuang" title="Jefferson">
<img src="https://avatars.githubusercontent.com/u/47512530?v=4" width="42;" alt="Jefferson"/>
<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/expoli" title="expoli">
<img src="https://avatars.githubusercontent.com/u/31023767?v=4" width="42;" alt="expoli"/>
</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 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/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/chaos-cn" title="chaos">
<img src="https://avatars.githubusercontent.com/u/71205599?v=4" width="42;" alt="chaos"/>
</a>
<a href="https://github.com/MarioMang" title="MarioMang">
<img src="https://avatars.githubusercontent.com/u/3959555?v=4" width="42;" alt="MarioMang"/>
</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/heStudio-Network" title="醉、倾城">
<img src="https://avatars.githubusercontent.com/u/119711513?v=4" width="42;" alt="醉、倾城"/>
</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/1834423612" title="kjch">
<img src="https://avatars.githubusercontent.com/u/49981661?v=4" width="42;" alt="kjch"/>
</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/pangxiaoli" title="pangxiaoli">
<img src="https://avatars.githubusercontent.com/u/54620953?v=4" width="42;" alt="pangxiaoli"/>
</a>
<a href="https://github.com/partoneplay" title="partoneplay">
<img src="https://avatars.githubusercontent.com/u/5189132?v=4" width="42;" alt="partoneplay"/>
@ -212,75 +285,171 @@ Quick Reference
<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/Country-If" title="Maylon">
<img src="https://avatars.githubusercontent.com/u/62837275?v=4" width="42;" alt="Maylon"/>
</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="Anko">
<img src="https://avatars.githubusercontent.com/u/52566311?v=4" width="42;" alt="Anko"/>
<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/Brid9e" title="Brid9e">
<img src="https://avatars.githubusercontent.com/u/85558909?v=4" width="42;" alt="Brid9e"/>
<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/CharlotteZeng" title="Chart">
<img src="https://avatars.githubusercontent.com/u/19461184?v=4" width="42;" alt="Chart"/>
<a href="https://github.com/ch3nnn" title="陈通">
<img src="https://avatars.githubusercontent.com/u/40114564?v=4" width="42;" alt="陈通"/>
</a>
<a href="https://github.com/DaiNing810" title="DaiN">
<img src="https://avatars.githubusercontent.com/u/94962339?v=4" width="42;" alt="DaiN"/>
<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/Damao2250" title="Damao">
<img src="https://avatars.githubusercontent.com/u/19251992?v=4" width="42;" alt="Damao"/>
</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/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/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/Ding-Kyoma" title="HooinKyoma">
<img src="https://avatars.githubusercontent.com/u/44542198?v=4" width="42;" alt="HooinKyoma"/>
</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/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/LufsX" title="LufsX">
<img src="https://avatars.githubusercontent.com/u/33221883?v=4" width="42;" alt="LufsX"/>
<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/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/Moeyuuko" title="Moeyuuko">
<img src="https://avatars.githubusercontent.com/u/14266681?v=4" width="42;" alt="Moeyuuko"/>
</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/HanaNoryu" title="Noryu">
<img src="https://avatars.githubusercontent.com/u/109856546?v=4" width="42;" alt="Noryu"/>
</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/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/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/whb1998a" title="WHB">
<img src="https://avatars.githubusercontent.com/u/44045064?v=4" width="42;" alt="WHB"/>
</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/hi-liyan" title="嘉木旅人">
<img src="https://avatars.githubusercontent.com/u/40056492?v=4" width="42;" alt="嘉木旅人"/>
</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/dfshizhiqiang" title="Zech">
<img src="https://avatars.githubusercontent.com/u/7030019?v=4" width="42;" alt="Zech"/>
</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/zhu0629" title="Zhu">
<img src="https://avatars.githubusercontent.com/u/13188450?v=4" width="42;" alt="Zhu"/>
</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/y52y" title="Zyj">
<img src="https://avatars.githubusercontent.com/u/51304324?v=4" width="42;" alt="Zyj"/>
</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/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 href="https://github.com/gaoxiaoduan" title="Jerrod Cole">
<img src="https://avatars.githubusercontent.com/u/69953511?v=4" width="42;" alt="Jerrod Cole"/>
</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 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/fjqz177" title="fjqz177">
<img src="https://avatars.githubusercontent.com/u/83070583?v=4" width="42;" alt="fjqz177"/>
</a>
<a href="https://github.com/gi-b716" title="gi-b716">
<img src="https://avatars.githubusercontent.com/u/78394473?v=4" width="42;" alt="gi-b716"/>
</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/greyhao" title="greyhao">
<img src="https://avatars.githubusercontent.com/u/107107440?v=4" width="42;" alt="greyhao"/>
</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/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/auroraslot" title="Tang Weize">
<img src="https://avatars.githubusercontent.com/u/48817882?v=4" width="42;" alt="Tang Weize"/>
</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/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/larry-xue" title="larry">
<img src="https://avatars.githubusercontent.com/u/48818060?v=4" width="42;" alt="larry"/>
</a>
@ -290,50 +459,104 @@ Quick Reference
<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 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/onewesong" title="onewesong">
<img src="https://avatars.githubusercontent.com/u/17920822?v=4" width="42;" alt="onewesong"/>
</a>
<a href="https://github.com/wjjwkwindy" title="wjjwkwindy">
<img src="https://avatars.githubusercontent.com/u/9508591?v=4" width="42;" alt="wjjwkwindy"/>
<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/wannima66" title="tmen">
<img src="https://avatars.githubusercontent.com/u/26410255?v=4" width="42;" alt="tmen"/>
</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/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 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/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 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/ZIDOUZI" title="子斗子">
<img src="https://avatars.githubusercontent.com/u/53157536?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/1250422131" title="萌新杰少">
<img src="https://avatars.githubusercontent.com/u/52126790?v=4" width="42;" alt="萌新杰少"/>
</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/Zeng-qh" title="都一样">
<img src="https://avatars.githubusercontent.com/u/40046415?v=4" width="42;" alt="都一样"/>
</a><!--GAMFC-END-->
贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成
[贡献者](https://github.com/jaywcjlove/reference/graphs/contributors)列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 根据提交次数的先后顺序自动生成
<!--rehype:style=padding-top:1rem;-->
## 国内镜像网站
<!--rehype:wrap-style=text-align: center;max-width: 650px;margin: 0 auto;&class=home-title-reset-->
由于中国国内访问,时常打不开,你可以访问下面镜像网站。推荐自己的[镜像网站](https://github.com/jaywcjlove/reference/issues/102#issue-1451649637)
由于中国国内访问,时常打不开,你可以访问下面镜像网站。推荐自己的[镜像网站](https://github.com/jaywcjlove/reference/discussions/206#discussion-4625735)
[quickref.cn](https://quickref.cn)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[ecdata.cn](http://ref.ecdata.cn)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[aibk.cn](https://quickref.aibk.cn)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[jgeek.cn](http://reference.jgeek.cn/)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[laoleng.vip](http://bbs.laoleng.vip/reference/)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[liujiapeng.com](https://www.liujiapeng.com/)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[dbyun.net](https://www.dbyun.net/reference/index.html)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
[dc6.fun](https://dc6.fun/reference/)<!--rehype:target=_blank&style=background: rgb(16 185 129);height: 2.6rem;border-radius: 2rem;font-weight: bold;-->
<!--rehype:class=home-card&style=margin:2.2rem 0;display: flex;justify-content: center;gap: 1rem;flex-wrap: wrap;-->
[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-->
[laoleng.vip](http://bbs.laoleng.vip/reference/)<!--rehype:target=_blank-->
[dbyun.net](https://www.dbyun.net/reference/index.html)<!--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=👆需要梯子-->
[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=👆实时同步,多线路-->
[qiubit.cc](http://ref.qiubit.cc)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[aoh.cc](https://aoh.cc/)<!--rehype:target=_blank-->
[quickreference.pages.dev](https://quickreference.pages.dev/)<!--rehype:target=_blank-->
[xhfun.cn](https://ref.xhfun.cn/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[caitou.org](https://quickref.caitou.org/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[guoxudong.io](https://reference.guoxudong.io/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[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-->
[moeyuuko.com](https://ref.moeyuuko.com/)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[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-->
[defense.ink](https://ref.defense.ink)<!--rehype:target=_blank&class=contributing&data-info=👆每天自动同步-->
[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-->
<!--rehype:class=home-card home-links-->
如果你有资源,可以很方便部署 web 版,这非常简单,只需要克隆 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/adb.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" height="1em" width="1em">
<path d="m10.213 1.471.691-1.26c.046-.083.03-.147-.048-.192-.085-.038-.15-.019-.195.058l-.7 1.27A4.832 4.832 0 0 0 8.005.941c-.688 0-1.34.135-1.956.404l-.7-1.27C5.303 0 5.239-.018 5.154.02c-.078.046-.094.11-.049.193l.691 1.259a4.25 4.25 0 0 0-1.673 1.476A3.697 3.697 0 0 0 3.5 5.02h9c0-.75-.208-1.44-.623-2.072a4.266 4.266 0 0 0-1.664-1.476ZM6.22 3.303a.367.367 0 0 1-.267.11.35.35 0 0 1-.263-.11.366.366 0 0 1-.107-.264.37.37 0 0 1 .107-.265.351.351 0 0 1 .263-.11c.103 0 .193.037.267.11a.36.36 0 0 1 .112.265.36.36 0 0 1-.112.264Zm4.101 0a.351.351 0 0 1-.262.11.366.366 0 0 1-.268-.11.358.358 0 0 1-.112-.264c0-.103.037-.191.112-.265a.367.367 0 0 1 .268-.11c.104 0 .19.037.262.11a.367.367 0 0 1 .107.265c0 .102-.035.19-.107.264ZM3.5 11.77c0 .294.104.544.311.75.208.204.46.307.76.307h.758l.01 2.182c0 .276.097.51.292.703a.961.961 0 0 0 .7.288.973.973 0 0 0 .71-.288.95.95 0 0 0 .292-.703v-2.182h1.343v2.182c0 .276.097.51.292.703a.972.972 0 0 0 .71.288.973.973 0 0 0 .71-.288.95.95 0 0 0 .292-.703v-2.182h.76c.291 0 .54-.103.749-.308.207-.205.311-.455.311-.75V5.365h-9v6.404Zm10.495-6.587a.983.983 0 0 0-.702.278.91.91 0 0 0-.293.685v4.063c0 .271.098.501.293.69a.97.97 0 0 0 .702.284c.28 0 .517-.095.712-.284a.924.924 0 0 0 .293-.69V6.146a.91.91 0 0 0-.293-.685.995.995 0 0 0-.712-.278Zm-12.702.283a.985.985 0 0 1 .712-.283c.273 0 .507.094.702.283a.913.913 0 0 1 .293.68v4.063a.932.932 0 0 1-.288.69.97.97 0 0 1-.707.284.986.986 0 0 1-.712-.284.924.924 0 0 1-.293-.69V6.146c0-.264.098-.491.293-.68Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

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="M19.75.3H4.25C1.9.3 0 2.2 0 4.55v14.9c0 2.35 1.9 4.25 4.25 4.25h15.5c2.35 0 4.25-1.9 4.25-4.25V4.55C24 2.2 22.1.3 19.75.3zm-6.99 16.389c0 .051-.029.09-.06.121a.17.17 0 0 1-.101.029H6.26c-.11 0-.16-.061-.16-.18V6.44c-.01-.07.04-.13.11-.14h2c.05-.01.11.03.11.08v8.43h4.62c.101 0 .131.049.11.14l-.29 1.739zm6.25-7.859v1.95c0 .08-.05.11-.16.11-.649-.04-1.3.08-1.89.34-.2.09-.39.21-.54.37v5.1c0 .1-.04.14-.13.14h-1.95c-.08.01-.15-.04-.16-.119V11.14c0-.24 0-.49-.01-.75s-.01-.52-.02-.78c-.01-.22-.03-.44-.061-.66-.01-.05.02-.1.07-.11.01-.01.02-.01.04 0h1.75c.1 0 .18.07.21.16.04.07.07.15.08.23.02.1.039.21.05.31.01.11.021.23.021.36.299-.35.66-.64 1.069-.86.46-.25.97-.37 1.49-.36.069-.01.13.04.14.11l.001.04z"/>
</svg>

After

Width:  |  Height:  |  Size: 830 B

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="M9.85 8.42c-.37-.15-.77-.21-1.18-.2-.26 0-.49 0-.68.01-.2-.01-.34 0-.41.01v3.36c.14.01.27.02.39.02h.53c.39 0 .78-.06 1.15-.18.32-.09.6-.28.82-.53.21-.25.31-.59.31-1.03.01-.31-.07-.62-.23-.89a1.45 1.45 0 0 0-.7-.57zM19.75.3H4.25C1.9.3 0 2.2 0 4.55v14.899c0 2.35 1.9 4.25 4.25 4.25h15.5c2.35 0 4.25-1.9 4.25-4.25V4.55C24 2.2 22.1.3 19.75.3zm-7.391 11.65c-.399.56-.959.98-1.609 1.22-.68.25-1.43.34-2.25.34-.24 0-.4 0-.5-.01s-.24-.01-.43-.01v3.209c.01.07-.04.131-.11.141H5.52c-.08 0-.12-.041-.12-.131V6.42c0-.07.03-.11.1-.11.17 0 .33 0 .56-.01.24-.01.49-.01.76-.02s.56-.01.87-.02c.31-.01.61-.01.91-.01.82 0 1.5.1 2.06.31.5.17.96.45 1.34.82.32.32.57.71.73 1.14.149.42.229.85.229 1.3.001.86-.199 1.57-.6 2.13zm7.091 3.89c-.28.4-.671.709-1.12.891-.49.209-1.09.318-1.811.318-.459 0-.91-.039-1.359-.129-.35-.061-.7-.17-1.02-.32-.07-.039-.121-.109-.111-.189v-1.74c0-.029.011-.07.041-.09.029-.02.06-.01.09.01.39.23.8.391 1.24.49.379.1.779.15 1.18.15.38 0 .65-.051.83-.141.16-.07.27-.24.27-.42 0-.141-.08-.27-.24-.4-.16-.129-.489-.279-.979-.471-.51-.18-.979-.42-1.42-.719a2.625 2.625 0 0 1-.761-.85 2.158 2.158 0 0 1-.229-1.021c0-.43.12-.84.341-1.21.25-.4.619-.72 1.049-.92.469-.239 1.059-.349 1.769-.349.41 0 .83.03 1.24.09.3.04.59.12.86.23.039.01.08.05.1.09.01.04.02.08.02.12v1.63c0 .04-.02.08-.05.1-.09.02-.14.02-.18 0-.3-.16-.62-.27-.96-.34-.37-.08-.74-.13-1.12-.13-.2-.01-.41.02-.601.07-.129.03-.24.1-.31.2-.05.08-.08.18-.08.27s.04.18.101.26c.09.11.209.2.34.27.229.12.47.23.709.33.541.18 1.061.43 1.541.73.33.209.6.49.789.83.16.318.24.67.23 1.029.011.471-.129.94-.389 1.331z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

2
assets/adobe-xd.svg Normal file
View File

@ -0,0 +1,2 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 230 225">
<path fill="currentColor" d="M191.816406,0 C212.904623,-3.87384253e-15 230,17.0953772 230,38.1835938 L230,186.066406 C230,207.154623 212.904623,224.25 191.816406,224.25 L38.1835938,224.25 C17.0953772,224.25 2.58256169e-15,207.154623 0,186.066406 L0,38.1835938 C-2.58256169e-15,17.0953772 17.0953772,3.87384253e-15 38.1835938,0 L191.816406,0 Z M195.077284,49.091346 L194.968125,49.0996094 L175.526836,49.0996094 C174.910508,49.0996094 174.601445,49.4607813 174.601445,50.1795313 L174.601445,80.5754688 L173.781172,80.5035938 L172.659922,80.41375 L171.669844,80.3436719 L171.080469,80.3095313 L170.550391,80.2861719 L170.077813,80.2708984 L169.664531,80.2664063 C160.200391,80.2664063 152.125234,82.1180859 145.440859,85.8214453 L144.91168,86.1089453 C138.763421,89.5141795 133.664216,94.5369517 130.166523,100.633086 C126.671624,106.792265 124.861878,113.763817 124.919648,120.845234 L124.923242,121.532539 C125.011289,129.971563 126.759648,137.020703 130.165625,142.677266 C133.543408,148.383655 138.57396,152.930169 144.591836,155.715391 C151.05183,158.667646 158.088508,160.143302 165.190313,160.035078 L166.254063,160.023398 C170.866829,159.944136 175.465136,159.483464 180.001953,158.646094 C185.345985,157.661087 190.569912,156.10972 195.585352,154.018242 C196.182744,153.743842 196.550536,153.130974 196.511641,152.474727 L196.358906,150.159453 L196.071406,146.156914 C195.952813,144.392383 195.893516,142.742852 195.893516,141.211914 L195.893516,50.025 C195.930082,49.7701021 195.844423,49.5128727 195.662338,49.3307875 C195.480252,49.1487023 195.223023,49.0630429 194.968125,49.0996094 Z M121.116289,57.8451797 C120.918558,57.505081 120.519883,57.3365583 120.138164,57.4317187 L99.9260156,57.4317187 C99.5008674,57.3901695 99.0726792,57.4705716 98.6915625,57.6635156 C98.4049609,57.9411328 98.1929297,58.2861328 98.0743359,58.6670703 C95.989605,62.7301089 93.855056,66.7673925 91.6711719,70.7780078 C89.4592187,74.8407422 87.2984766,78.8792187 85.1916406,82.8907422 C83.046362,86.9730975 80.9632439,91.0878173 78.9430078,95.2334766 L78.7884766,95.2334766 C76.817187,91.0868307 74.6810973,87.0205574 72.3853125,83.044375 C70.0538061,79.0056478 67.7650584,74.9423869 65.5194531,70.8552734 C63.2562891,66.7422266 61.1988672,62.6273828 59.3471875,58.5125391 C59.1073047,58.1630469 58.7901562,57.8728516 58.4217969,57.6635156 C57.9815263,57.4848886 57.5072287,57.4053935 57.0328125,57.4317187 L35.2780469,57.4317187 C34.9257161,57.4076934 34.5826053,57.5507949 34.3517578,57.8180469 C34.1469141,58.0767969 34.198125,58.4110156 34.5062891,58.8207031 L63.5132422,107.884375 L33.7354297,156.795312 C33.5281595,157.114603 33.4456497,157.499009 33.5036328,157.875234 C33.5359766,158.128594 33.6366016,158.164531 33.8046094,158.154648 L34.1064844,158.127695 L34.198125,158.125 L55.3356641,158.125 L55.6860547,158.119609 C56.5278906,158.091758 57.1325391,157.921055 57.4964062,157.103477 C59.7587305,153.094326 61.9702615,149.056724 64.1304687,144.991641 C66.2894141,140.929805 68.4753125,136.840117 70.6881641,132.725273 C72.8822374,128.642268 75.0168509,124.527589 77.0913281,120.382539 L77.2458594,120.382539 C79.492198,124.571384 81.7809354,128.737353 84.1117187,132.879805 L84.9724219,134.419727 C86.9211424,137.916516 88.8200324,141.440844 90.6685156,144.991641 C92.7350026,148.972723 94.7924298,152.958502 96.8407813,156.948945 C97.3645703,157.824023 98.224375,157.994727 99.4175,158.026172 L99.8523438,158.033359 L121.989844,158.033359 C122.132695,158.01 122.261172,158.004609 122.376172,158.004609 L122.588203,158.01 L122.7625,158.012695 C122.919727,158.006406 123.022148,157.965078 123.069766,157.797969 C123.167695,157.40625 123.112891,156.992969 122.915234,156.640781 L92.2111328,106.341758 L120.909922,58.9734375 L120.99168,58.8997656 C121.263231,58.6151174 121.314021,58.1852783 121.116289,57.8451797 Z M168.892773,98.1641797 C169.949193,98.1613542 171.005057,98.212933 172.056172,98.3187109 C172.916134,98.4008331 173.7676,98.5556177 174.601445,98.7814063 L174.601445,140.902852 L174.125273,141.034922 C173.169038,141.283616 172.192412,141.445986 171.207148,141.520078 C169.971797,141.623398 168.634922,141.675787 167.195625,141.675787 C164.498244,141.68816 161.81606,141.271154 159.249844,140.440156 C156.820509,139.673501 154.602403,138.353156 152.770312,136.583164 C150.855907,134.659039 149.381532,132.342646 148.448828,129.793672 C147.303124,126.630834 146.753878,123.282959 146.828945,119.919844 L146.832539,119.401445 C146.901719,114.600195 147.955586,110.709961 149.992344,107.730742 C152.03261,104.703627 154.823739,102.257983 158.092656,100.633086 C161.448702,98.9729615 165.148754,98.1271298 168.892773,98.1641797 Z"/></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

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="M19.27 10.337a.604.604 0 0 0-.603.603v9.832h-1.738l-3.336-6.94c.476-.538.68-1.285.525-2a2.286 2.286 0 0 0-1.29-1.625v-.812a.847.847 0 0 0-.844-.864.848.848 0 0 0-.432.118.86.86 0 0 0-.412.766v.72a2.3 2.3 0 0 0-1.487 2.52 2.282 2.282 0 0 0 .591 1.21l-3.21 6.907h-2.94a1.996 1.996 0 0 1-1.983-1.99V5.017c-.006 1.102.883 2 1.986 2.006a2.024 2.024 0 0 0 .132-.004h14.745s2.535-.218 2.862 1.54a.495.495 0 0 0-.445.489c0 .711-.579 1.29-1.302 1.29h-.819zm-2.048 12.2a.973.973 0 0 1-.45 1.3.965.965 0 0 1-.402.093.974.974 0 0 1-.32-.045c-.024-.008-.046-.021-.07-.031a.97.97 0 0 1-.227-.132c-.025-.02-.05-.038-.072-.06a.96.96 0 0 1-.21-.276l-1.256-2.614-1.558-3.245a.772.772 0 0 0-.7-.444h-.002a.792.792 0 0 0-.709.444l-1.51 3.245-1.233 2.646a.972.972 0 0 1-.798.58c-.063.005-.124-.002-.185-.009-.034-.003-.069-.005-.103-.012-.048-.01-.095-.028-.142-.045-.03-.012-.06-.02-.09-.034a.987.987 0 0 1-.14-.09c-.021-.015-.045-.027-.066-.044a.986.986 0 0 1-.169-.185.979.979 0 0 1-.07-.985l.846-1.822 3.268-7.031a1.796 1.796 0 0 1-.708-1.164c-.155-.98.513-1.9 1.493-2.056V9.395a.354.354 0 0 1 .168-.316.347.347 0 0 1 .354 0 .354.354 0 0 1 .167.316v1.159l.013.006a1.803 1.803 0 0 1 1.288 1.378 1.784 1.784 0 0 1-.644 1.784l3.389 7.05.848 1.765zm-4.238-10.231a1.1 1.1 0 0 0-1.093-1.109 1.12 1.12 0 0 0-.786.322 1.101 1.101 0 0 0-.323.772 1.1 1.1 0 0 0 1.093 1.108h.008a1.1 1.1 0 0 0 1.101-1.093zm-1.027 5.277a.287.287 0 0 0-.257.155l-1.413 3.034h3.374l-1.457-3.033a.274.274 0 0 0-.247-.156zm8.143-6.746h-.83a.103.103 0 0 0-.103.103v12.91a.103.103 0 0 0 .096.103h.844a1.79 1.79 0 0 0 1.783-1.79V9.047a1.79 1.79 0 0 1-1.79 1.79zM2.61 5.017v.018a1.5 1.5 0 0 0 1.487 1.487 12.061 12.061 0 0 1 .131-.003h1.129a6.598 6.598 0 0 1 1.638-3.486H4.099A1.992 1.992 0 0 0 2.18 4.53c.242.036.43.235.43.486zm6.338-2.899L7.91.328a.219.219 0 0 1 0-.218.238.238 0 0 1 .187-.11.219.219 0 0 1 .187.11l1.05 1.815a6.49 6.49 0 0 1 5.318 0L15.696.11a.219.219 0 0 1 .373.22l-1.03 1.79a6.122 6.122 0 0 1 3.098 4.401L5.85 6.52a6.122 6.122 0 0 1 3.097-4.4zm5.377 2.62a.515.515 0 0 0 .527.503.515.515 0 0 0 .516-.515.521.521 0 0 0-.889-.367.515.515 0 0 0-.154.38zm-5.717-.006a.515.515 0 0 0 .52.51.509.509 0 0 0 .367-.149.521.521 0 1 0-.734-.734.515.515 0 0 0-.153.373z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

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

3
assets/firefox.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor" height="1em" width="1em">
<path d="M503.52 241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86 245.86 0 0 0-7.32-41.15c0-.12 0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27 8.27 0 0 0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48 0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07 18.07 0 0 0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63 15.63 0 0 0-1.2-1.8L463.2 119a15.63 15.63 0 0 0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76 248.76 0 0 0-23.51-26.64A186.82 186.82 0 0 0 412 62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49 162.49 0 0 0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254 254 0 0 0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35 236.35 0 0 0-38-4h-10.63a234.62 234.62 0 0 0-45.48 5c-33.59 7.08-63.23 21.24-82.91 39-1.08 1-1.92 1.68-2.4 2.16l-.48.48h.13l-.12.12.12-.12a.12.12 0 0 0 .12-.12l-.12.12a.42.42 0 0 1 .24-.12c14.64-8.76 34.92-16 49.44-19.56l5.88-1.44c.36-.12.84-.12 1.2-.24 1.68-.36 3.36-.72 5.16-1.08.24 0 .6-.12.84-.12C250.94 20.94 319.34 40.14 367 85.61a171.49 171.49 0 0 1 26.88 32.76c30.36 49.2 27.48 111.11 3.84 147.59-34.44 53-111.35 71.27-159 24.84a84.19 84.19 0 0 1-25.56-59 74.05 74.05 0 0 1 6.24-31c1.68-3.84 13.08-25.67 18.24-24.59-13.08-2.76-37.55 2.64-54.71 28.19-15.36 22.92-14.52 58.2-5 83.28a132.85 132.85 0 0 1-12.12-39.24c-12.24-82.55 43.31-153 94.31-170.51-27.48-24-96.47-22.31-147.71 15.36-29.88 22-51.23 53.16-62.51 90.36 1.68-20.88 9.6-52.08 25.8-83.88-17.16 8.88-39 37-49.8 62.88-15.6 37.43-21 82.19-16.08 124.79.36 3.24.72 6.36 1.08 9.6 19.92 117.11 122 206.38 244.78 206.38C392.77 503.42 504 392.19 504 255c-.12-4.52-.24-9.08-.48-13.52Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

8
assets/flask.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

213
assets/gdb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

3
assets/github.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 1984 2048" height="1em" width="1em">
<path d="M663.6 1589.6c0 8-9.2 14.4-20.8 14.4-13.2 1.2-22.4-5.2-22.4-14.4 0-8 9.2-14.4 20.8-14.4 12-1.2 22.4 5.2 22.4 14.4zm-124.4-18c-2.8 8 5.2 17.2 17.2 19.6 10.4 4 22.4 0 24.8-8s-5.2-17.2-17.2-20.8c-10.4-2.8-22 1.2-24.8 9.2zm176.8-6.8c-11.6 2.8-19.6 10.4-18.4 19.6 1.2 8 11.6 13.2 23.6 10.4 11.6-2.8 19.6-10.4 18.4-18.4-1.2-7.6-12-12.8-23.6-11.6zM979.2 32C424.4 32 0 453.2 0 1008c0 443.6 279.2 823.2 678 956.8 51.2 9.2 69.2-22.4 69.2-48.4 0-24.8-1.2-161.6-1.2-245.6 0 0-280 60-338.8-119.2 0 0-45.6-116.4-111.2-146.4 0 0-91.6-62.8 6.4-61.6 0 0 99.6 8 154.4 103.2 87.6 154.4 234.4 110 291.6 83.6 9.2-64 35.2-108.4 64-134.8-223.6-24.8-449.2-57.2-449.2-442 0-110 30.4-165.2 94.4-235.6-10.4-26-44.4-133.2 10.4-271.6 83.6-26 276 108 276 108 80-22.4 166-34 251.2-34s171.2 11.6 251.2 34c0 0 192.4-134.4 276-108 54.8 138.8 20.8 245.6 10.4 271.6 64 70.8 103.2 126 103.2 235.6 0 386-235.6 416.8-459.2 442 36.8 31.6 68 91.6 68 185.6 0 134.8-1.2 301.6-1.2 334.4 0 26 18.4 57.6 69.2 48.4 400-132.8 671.2-512.4 671.2-956 0-554.8-450-976-1004.8-976zM388.8 1411.6c-5.2 4-4 13.2 2.8 20.8 6.4 6.4 15.6 9.2 20.8 4 5.2-4 4-13.2-2.8-20.8-6.4-6.4-15.6-9.2-20.8-4zm-43.2-32.4c-2.8 5.2 1.2 11.6 9.2 15.6 6.4 4 14.4 2.8 17.2-2.8 2.8-5.2-1.2-11.6-9.2-15.6-8-2.4-14.4-1.2-17.2 2.8zm129.6 142.4c-6.4 5.2-4 17.2 5.2 24.8 9.2 9.2 20.8 10.4 26 4 5.2-5.2 2.8-17.2-5.2-24.8-8.8-9.2-20.8-10.4-26-4zm-45.6-58.8c-6.4 4-6.4 14.4 0 23.6 6.4 9.2 17.2 13.2 22.4 9.2 6.4-5.2 6.4-15.6 0-24.8-5.6-9.2-16-13.2-22.4-8z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

9
assets/gitlab.svg Normal file
View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 236" height="1em" width="1em">
<path d="m128.075 236.075 47.104-144.97H80.97l47.104 144.97z" fill="#E24329"/>
<path d="M128.075 236.074 80.97 91.104H14.956l113.119 144.97z" fill="#FC6D26"/>
<path d="M14.956 91.104.642 135.16a9.752 9.752 0 0 0 3.542 10.903l123.891 90.012-113.12-144.97z" fill="#FCA326"/>
<path d="M14.956 91.105H80.97L52.601 3.79c-1.46-4.493-7.816-4.492-9.275 0l-28.37 87.315z" fill="#E24329"/>
<path d="m128.075 236.074 47.104-144.97h66.015l-113.12 144.97z" fill="#FC6D26"/>
<path d="m241.194 91.104 14.314 44.056a9.752 9.752 0 0 1-3.543 10.903l-123.89 90.012 113.119-144.97z" fill="#FCA326"/>
<path d="M241.194 91.105h-66.015l28.37-87.315c1.46-4.493 7.816-4.492 9.275 0l28.37 87.315z" fill="#E24329"/>
</svg>

After

Width:  |  Height:  |  Size: 798 B

3
assets/google-chrome.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 512" height="1em" width="1em">
<path d="M0 256c0-46.6 12.47-90.4 34.27-128.9L144.1 318.3C166 357.5 207.9 384 256 384c14.3 0 27.1-2.3 40.8-6.6l-76.3 132.2C95.9 492.3 0 385.3 0 256zm365.1 65.6c12.3-19.2 18.9-42.5 18.9-65.6 0-38.2-16.8-72.5-43.3-96h152.7c12 29.6 18.6 62.1 18.6 96 0 141.4-114.6 255.1-256 256l109.1-190.4zM477.8 128H256c-62.9 0-113.7 44.1-125.5 102.7L54.19 98.47C101 38.53 174 0 256 0c94.8 0 177.5 51.48 221.8 128zM168 256c0-48.6 39.4-88 88-88s88 39.4 88 88-39.4 88-88 88-88-39.4-88-88z"/>
</svg>

After

Width:  |  Height:  |  Size: 589 B

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="M0 0v32h32V0zm4.964 4.145h6.667v2.448H9.776v8.371h1.855v2.443H4.964v-2.443h1.927V6.593H4.964zm14.739 0h2.964v8.667c0 .819-.073 1.485-.297 2.079a4.002 4.002 0 0 1-.963 1.479c-.371.371-.885.745-1.48.891a5.192 5.192 0 0 1-1.927.371c-1.036 0-1.927-.224-2.593-.595a6.403 6.403 0 0 1-1.704-1.405l1.855-2.073c.369.443.74.74 1.109.964.369.219.812.369 1.26.369.521 0 .959-.151 1.333-.521.292-.369.443-.891.443-1.703zM2.964 26h12v2h-12z"/>
</svg>

After

Width:  |  Height:  |  Size: 554 B

3
assets/jquery.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="M1.525 5.87c-2.126 3.054-1.862 7.026-.237 10.269.037.079.078.154.118.229.023.052.049.1.077.15.013.027.031.056.047.082.026.052.054.102.081.152l.157.266c.03.049.057.097.09.146.056.094.12.187.178.281.026.04.05.078.079.117a6.368 6.368 0 0 0 .31.445c.078.107.156.211.24.315.027.038.058.076.086.115l.22.269c.028.03.055.067.084.099.098.118.202.233.306.35l.005.006a3.134 3.134 0 0 0 .425.44c.08.083.16.165.245.245l.101.097c.111.105.223.209.34.309.002 0 .003.002.005.003l.057.05c.102.089.205.178.31.26l.125.105c.085.068.174.133.26.2l.137.105c.093.07.192.139.287.207.035.025.07.05.106.073l.03.023.28.185.12.08c.148.094.294.184.44.272.041.02.084.044.123.068.108.062.22.125.329.183.06.034.122.063.184.094.075.042.153.083.234.125a.324.324 0 0 1 .056.023c.033.015.064.031.096.047.12.06.245.118.375.175.024.01.05.02.076.034.144.063.289.123.438.182.034.01.07.027.105.04.135.051.274.103.411.152l.05.018c.154.052.305.102.46.15.036.01.073.023.111.033.16.048.314.105.474.137 10.273 1.872 13.258-6.177 13.258-6.177-2.508 3.266-6.958 4.127-11.174 3.169-.156-.036-.312-.086-.47-.132a13.539 13.539 0 0 1-.567-.182l-.062-.024c-.136-.046-.267-.097-.4-.148a1.615 1.615 0 0 0-.11-.04c-.148-.06-.29-.121-.433-.184-.031-.01-.057-.024-.088-.036a23.44 23.44 0 0 1-.362-.17 1.485 1.485 0 0 1-.106-.052c-.094-.044-.188-.095-.28-.143a3.947 3.947 0 0 1-.187-.096c-.114-.06-.227-.125-.34-.187-.034-.024-.073-.044-.112-.066a15.922 15.922 0 0 1-.439-.27 2.107 2.107 0 0 1-.118-.078 6.01 6.01 0 0 1-.312-.207c-.035-.023-.067-.048-.103-.073a9.553 9.553 0 0 1-.295-.212c-.042-.034-.087-.066-.132-.1-.088-.07-.177-.135-.265-.208l-.118-.095a10.593 10.593 0 0 1-.335-.28.258.258 0 0 0-.037-.031l-.347-.316-.1-.094c-.082-.084-.166-.164-.25-.246l-.098-.1a9.081 9.081 0 0 1-.309-.323l-.015-.016c-.106-.116-.21-.235-.313-.355-.027-.03-.053-.064-.08-.097l-.227-.277a21.275 21.275 0 0 1-.34-.449C2.152 11.79 1.306 7.384 3.177 3.771m4.943-.473c-1.54 2.211-1.454 5.169-.254 7.508a9.111 9.111 0 0 0 .678 1.133c.23.33.484.721.793.988.107.122.223.24.344.36l.09.09c.114.11.232.217.35.325l.016.013a9.867 9.867 0 0 0 .414.342c.034.023.063.05.096.073.14.108.282.212.428.316l.015.009c.062.045.128.086.198.13.028.018.06.042.09.06.106.068.21.132.318.197.017.007.032.016.048.023.09.055.188.108.282.157.033.02.065.035.1.054.066.033.132.068.197.102l.032.014c.135.067.273.129.408.19.034.014.063.025.092.039.111.048.224.094.336.137.05.017.097.037.144.052.102.038.21.073.31.108l.14.045c.147.045.295.104.449.13C22.164 17.206 24 11.098 24 11.098c-1.653 2.38-4.852 3.513-8.261 2.628a8.04 8.04 0 0 1-.449-.13c-.048-.014-.09-.029-.136-.043-.104-.036-.211-.07-.312-.109l-.144-.054c-.113-.045-.227-.087-.336-.135-.034-.015-.065-.025-.091-.04-.14-.063-.281-.125-.418-.192l-.206-.107-.119-.06a5.673 5.673 0 0 1-.265-.15.62.62 0 0 1-.062-.035c-.106-.066-.217-.13-.318-.198-.034-.019-.065-.042-.097-.062l-.208-.136c-.144-.1-.285-.208-.428-.313-.032-.029-.063-.053-.094-.079-1.499-1.178-2.681-2.79-3.242-4.613-.59-1.897-.46-4.023.56-5.75m4.292-.147c-.909 1.334-.996 2.99-.37 4.46.665 1.563 2.024 2.79 3.608 3.37.065.025.128.046.196.07l.088.027c.092.03.185.063.28.084 4.381.845 5.567-2.25 5.886-2.704-1.043 1.498-2.792 1.857-4.938 1.335a4.85 4.85 0 0 1-.516-.16 6.352 6.352 0 0 1-.618-.254 6.53 6.53 0 0 1-1.082-.66c-1.922-1.457-3.113-4.236-1.859-6.5"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 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

3
assets/nextjs.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 7.5a7.5 7.5 0 1 1 11.697 6.216L4.907 4.21A.5.5 0 0 0 4 4.5V12h1V6.06l5.83 8.162A7.5 7.5 0 0 1 0 7.5ZM10 10V4h1v6h-1Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 299 B

3
assets/pm2.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.7 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

7
assets/react-native.svg Normal file
View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" height="1em" width="1em">
<circle cx="12" cy="11.245" r="1.785"/>
<path d="m7.002 14.794-.395-.101c-2.934-.741-4.617-2.001-4.617-3.452 0-1.452 1.684-2.711 4.617-3.452l.395-.1.111.391a19.507 19.507 0 0 0 1.136 2.983l.085.178-.085.178c-.46.963-.841 1.961-1.136 2.985l-.111.39zm-.577-6.095c-2.229.628-3.598 1.586-3.598 2.542 0 .954 1.368 1.913 3.598 2.54.273-.868.603-1.717.985-2.54a20.356 20.356 0 0 1-.985-2.542zm10.572 6.095-.11-.392a19.628 19.628 0 0 0-1.137-2.984l-.085-.177.085-.179c.46-.961.839-1.96 1.137-2.984l.11-.39.395.1c2.935.741 4.617 2 4.617 3.453 0 1.452-1.683 2.711-4.617 3.452l-.395.101zm-.41-3.553c.4.866.733 1.718.987 2.54 2.23-.627 3.599-1.586 3.599-2.54 0-.956-1.368-1.913-3.599-2.542a20.683 20.683 0 0 1-.987 2.542z"/>
<path d="m6.419 8.695-.11-.39c-.826-2.908-.576-4.991.687-5.717 1.235-.715 3.222.13 5.303 2.265l.284.292-.284.291a19.718 19.718 0 0 0-2.02 2.474l-.113.162-.196.016a19.646 19.646 0 0 0-3.157.509l-.394.098zm1.582-5.529c-.224 0-.422.049-.589.145-.828.477-.974 2.138-.404 4.38.891-.197 1.79-.338 2.696-.417a21.058 21.058 0 0 1 1.713-2.123c-1.303-1.267-2.533-1.985-3.416-1.985zm7.997 16.984c-1.188 0-2.714-.896-4.298-2.522l-.283-.291.283-.29a19.827 19.827 0 0 0 2.021-2.477l.112-.16.194-.019a19.473 19.473 0 0 0 3.158-.507l.395-.1.111.391c.822 2.906.573 4.992-.688 5.718a1.978 1.978 0 0 1-1.005.257zm-3.415-2.82c1.302 1.267 2.533 1.986 3.415 1.986.225 0 .423-.05.589-.145.829-.478.976-2.142.404-4.384-.89.198-1.79.34-2.698.419a20.526 20.526 0 0 1-1.71 2.124z"/>
<path d="m17.58 8.695-.395-.099a19.477 19.477 0 0 0-3.158-.509l-.194-.017-.112-.162A19.551 19.551 0 0 0 11.7 5.434l-.283-.291.283-.29c2.08-2.134 4.066-2.979 5.303-2.265 1.262.727 1.513 2.81.688 5.717l-.111.39zm-3.287-1.421c.954.085 1.858.228 2.698.417.571-2.242.425-3.903-.404-4.381-.824-.477-2.375.253-4.004 1.841.616.67 1.188 1.378 1.71 2.123zM8.001 20.15a1.983 1.983 0 0 1-1.005-.257c-1.263-.726-1.513-2.811-.688-5.718l.108-.391.395.1c.964.243 2.026.414 3.158.507l.194.019.113.16c.604.878 1.28 1.707 2.02 2.477l.284.29-.284.291c-1.583 1.627-3.109 2.522-4.295 2.522zm-.993-5.362c-.57 2.242-.424 3.906.404 4.384.825.47 2.371-.255 4.005-1.842a21.17 21.17 0 0 1-1.713-2.123 20.692 20.692 0 0 1-2.696-.419z"/>
<path d="M12 15.313c-.687 0-1.392-.029-2.1-.088l-.196-.017-.113-.162a25.697 25.697 0 0 1-1.126-1.769 26.028 26.028 0 0 1-.971-1.859l-.084-.177.084-.179c.299-.632.622-1.252.971-1.858.347-.596.726-1.192 1.126-1.77l.113-.16.196-.018a25.148 25.148 0 0 1 4.198 0l.194.019.113.16a25.136 25.136 0 0 1 2.1 3.628l.083.179-.083.177a24.742 24.742 0 0 1-2.1 3.628l-.113.162-.194.017c-.706.057-1.412.087-2.098.087zm-1.834-.904c1.235.093 2.433.093 3.667 0a24.469 24.469 0 0 0 1.832-3.168 23.916 23.916 0 0 0-1.832-3.168 23.877 23.877 0 0 0-3.667 0 23.743 23.743 0 0 0-1.832 3.168 24.82 24.82 0 0 0 1.832 3.168z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

4
assets/reactrouter.svg Normal file
View File

@ -0,0 +1,4 @@
<svg viewBox="0 0 256 140" fill="currentColor" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" height="1em" width="1em">
<path d="M78.066 92.588c12.818 0 23.209-10.391 23.209-23.21 0-12.817-10.391-23.208-23.21-23.208-12.817 0-23.208 10.39-23.208 23.209 0 12.818 10.391 23.209 23.209 23.209Zm-54.857 46.417c12.818 0 23.209-10.39 23.209-23.209 0-12.817-10.391-23.208-23.21-23.208C10.392 92.588 0 102.978 0 115.796c0 12.818 10.39 23.21 23.209 23.21Zm209.582 0c12.818 0 23.209-10.39 23.209-23.209 0-12.817-10.39-23.208-23.209-23.208-12.818 0-23.209 10.39-23.209 23.208 0 12.818 10.391 23.21 23.21 23.21Z"/>
<path d="M156.565 70.357c-.742-7.754-1.12-14.208-7.06-18.744-7.522-5.744-16.044-2.017-26.54-5.806C112.65 43.312 105 34.155 105 23.24 105 10.405 115.578 0 128.626 0c9.665 0 17.974 5.707 21.634 13.883 5.601 10.64 1.96 21.467 8.998 26.921 8.333 6.458 19.568 1.729 32.104 7.848a23.614 23.614 0 0 1 9.84 8.425A22.858 22.858 0 0 1 205 69.718c0 10.915-7.65 20.073-17.964 22.568-10.497 3.789-19.019.062-26.541 5.806-8.46 6.46-3.931 17.267-10.826 28.682-3.913 7.518-11.867 12.663-21.043 12.663-13.048 0-23.626-10.405-23.626-23.24 0-9.323 5.582-17.364 13.638-21.066 12.536-6.12 23.77-1.39 32.104-7.848 4.807-3.726 5.823-9.473 5.823-16.926Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

11
assets/redis.svg Normal file
View File

@ -0,0 +1,11 @@
<svg viewBox="0 0 256 220" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" height="1em" width="1em">
<path d="M245.97 168.943c-13.662 7.121-84.434 36.22-99.501 44.075-15.067 7.856-23.437 7.78-35.34 2.09-11.902-5.69-87.216-36.112-100.783-42.597C3.566 169.271 0 166.535 0 163.951v-25.876s98.05-21.345 113.879-27.024c15.828-5.679 21.32-5.884 34.79-.95 13.472 4.936 94.018 19.468 107.331 24.344l-.006 25.51c.002 2.558-3.07 5.364-10.024 8.988" fill="#912626"/>
<path d="M245.965 143.22c-13.661 7.118-84.431 36.218-99.498 44.072-15.066 7.857-23.436 7.78-35.338 2.09-11.903-5.686-87.214-36.113-100.78-42.594-13.566-6.485-13.85-10.948-.524-16.166 13.326-5.22 88.224-34.605 104.055-40.284 15.828-5.677 21.319-5.884 34.789-.948 13.471 4.934 83.819 32.935 97.13 37.81 13.316 4.881 13.827 8.9.166 16.02" fill="#C6302B"/>
<path d="M245.97 127.074c-13.662 7.122-84.434 36.22-99.501 44.078-15.067 7.853-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.112-100.783-42.597C3.566 127.402 0 124.67 0 122.085V96.206s98.05-21.344 113.879-27.023c15.828-5.679 21.32-5.885 34.79-.95C162.142 73.168 242.688 87.697 256 92.574l-.006 25.513c.002 2.557-3.07 5.363-10.024 8.987" fill="#912626"/>
<path d="M245.965 101.351c-13.661 7.12-84.431 36.218-99.498 44.075-15.066 7.854-23.436 7.777-35.338 2.087-11.903-5.686-87.214-36.112-100.78-42.594-13.566-6.483-13.85-10.947-.524-16.167C23.151 83.535 98.05 54.148 113.88 48.47c15.828-5.678 21.319-5.884 34.789-.949 13.471 4.934 83.819 32.933 97.13 37.81 13.316 4.88 13.827 8.9.166 16.02" fill="#C6302B"/>
<path d="M245.97 83.653c-13.662 7.12-84.434 36.22-99.501 44.078-15.067 7.854-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.113-100.783-42.595C3.566 83.98 0 81.247 0 78.665v-25.88s98.05-21.343 113.879-27.021c15.828-5.68 21.32-5.884 34.79-.95C162.142 29.749 242.688 44.278 256 49.155l-.006 25.512c.002 2.555-3.07 5.361-10.024 8.986" fill="#912626"/>
<path d="M245.965 57.93c-13.661 7.12-84.431 36.22-99.498 44.074-15.066 7.854-23.436 7.777-35.338 2.09C99.227 98.404 23.915 67.98 10.35 61.497-3.217 55.015-3.5 50.55 9.825 45.331 23.151 40.113 98.05 10.73 113.88 5.05c15.828-5.679 21.319-5.883 34.789-.948 13.471 4.935 83.819 32.934 97.13 37.811 13.316 4.876 13.827 8.897.166 16.017" fill="#C6302B"/>
<path d="m159.283 32.757-22.01 2.285-4.927 11.856-7.958-13.23-25.415-2.284 18.964-6.839-5.69-10.498 17.755 6.944 16.738-5.48-4.524 10.855 17.067 6.391m-28.251 57.518L89.955 73.238l58.86-9.035-17.783 26.072m-56.95-50.928c17.375 0 31.46 5.46 31.46 12.194 0 6.736-14.085 12.195-31.46 12.195s-31.46-5.46-31.46-12.195c0-6.734 14.085-12.194 31.46-12.194" fill="#FFF"/>
<path d="m185.295 35.998 34.836 13.766-34.806 13.753-.03-27.52" fill="#621B1C"/>
<path d="m146.755 51.243 38.54-15.245.03 27.519-3.779 1.478-34.791-13.752" fill="#9A2928"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

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/tailwindcss.svg Normal file
View File

@ -0,0 +1,3 @@
<svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path d="M7.5 2.5c-1.026 0-1.908.277-2.6.87-.688.59-1.137 1.447-1.387 2.516a.5.5 0 0 0 .897.4c.316-.452.632-.723.936-.863.294-.135.611-.162.975-.065.366.098.65.386 1.095.87l.015.016c.336.365.745.81 1.305 1.156.582.359 1.305.6 2.264.6 1.026 0 1.908-.277 2.6-.87.688-.59 1.138-1.447 1.387-2.516a.5.5 0 0 0-.897-.4c-.316.452-.632.723-.936.863-.294.135-.611.162-.975.065-.366-.098-.65-.386-1.095-.87l-.015-.016c-.336-.365-.745-.81-1.305-1.156-.582-.359-1.305-.6-2.264-.6ZM4 7c-1.026 0-1.908.277-2.6.87C.712 8.46.263 9.317.013 10.386a.5.5 0 0 0 .897.4c.316-.452.632-.723.936-.863.294-.135.611-.162.975-.065.366.098.65.386 1.095.87l.015.016c.336.365.745.81 1.305 1.156.582.359 1.305.6 2.264.6 1.026 0 1.908-.277 2.6-.87.688-.59 1.138-1.447 1.387-2.516a.5.5 0 0 0-.897-.4c-.316.452-.632.723-.936.863-.294.135-.611.162-.975.065-.366-.098-.65-.386-1.095-.87l-.015-.016c-.335-.365-.745-.81-1.305-1.156C5.682 7.24 4.959 7 4 7Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

384
docs/adb.md Normal file
View File

@ -0,0 +1,384 @@
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) 一起使用的一些最常见的命令及其用法
入门
----
### 设备基础
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`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 remount` | 重新挂载具有读/写访问权限的文件系统
`adb reboot` | 重启设备
`adb reboot bootloader` | 将设备重启到 fastboot 模式
`adb reboot recovery` | 将设备重启到恢复模式
`adb disable-verity` | 禁用设备的 dm-verity 安全特性
<!--rehype:className=left-align code-nowrap-->
---
- `wait-for-device` 可以在 `adb` 之后指定,以确保该命令在设备连接后运行
- `-s` 可用于在多个连接时将命令发送到特定设备
#### 示例
```bash
$ adb wait-for-device devices
List of devices attached
somedevice-1234 device
someotherdevice-1234 device
```
```bash
$ adb -s somedevice-1234 root
```
### Logcat
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`adb logcat` | 将日志消息打印到标准输出
`adb logcat -g` | 显示当前日志缓冲区大小
`adb logcat -G <size>` | 设置缓冲区大小K 或 M
`adb logcat -c` | 清除日志缓冲区
`adb logcat *:V` | 启用所有日志消息(详细)
`adb logcat -f <filename>` | 将日志转储到指定文件
<!--rehype:className=left-align code-nowrap-->
#### 示例
```bash
$ adb logcat -G 16M
$ adb logcat *:V > output.log
```
#### 过滤日志输出
- `V` 最详细的信息(最低优先级)
- `D` 调试信息
- `I` 普通信息
- `W` 警告信息
- `E` 错误信息
- `F` 致命错误信息
- `S` 静默(最高优先级)
<!--rehype:className=cols-2 shortcuts style-none-->
例如,要显示优先级不低于 `警告` 的所有标记的所有日志消息,可以使用以下命令:
```bash
$ adb logcat *:W
```
### 文件管理
:-- | --
:-- | --
`adb push <local> <remote>` | 将本地文件复制到远程设备
`adb pull <remote> <local>` | 将远程设备文件复制到本地
<!--rehype:className=left-align code-nowrap-->
#### 示例
```bash
$ echo "This is a test" > test.txt
$ adb push test.txt /sdcard/test.txt
$ adb pull /sdcard/test.txt pulledTest.txt
```
### 远程 Shell
:-- | --
:-- | --
`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` | 列出所有已安装的第三方的应用包
`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>` | 卸载应用程序
<!--rehype:className=left-align code-nowrap-->
### Paths
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`/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 卡
<!--rehype:className=style-list-arrow-->
---
:-- | --
:-- | --
`adb shell ls` | 列出目录内容
`adb shell ls -s` | 每个文件的打印尺寸
`adb shell ls -R` | 递归列出子目录
<!--rehype:className=left-align code-nowrap-->
### 手机信息
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`adb get-statе` | 打印设备状态
`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'` | 打印当前应用程序的打开活动的信息
<!--rehype:className=style-list-arrow-->
### 包信息
:-- | --
:-- | --
`adb shell list packages` | 列出包名称
`adb shell list packages -r` | 列出包名 + apks 的路径
`adb shell list packages -3` | 列出第三方包名称
`adb shell list packages -s` | 仅列出系统包
`adb shell list packages -u` | 列出包名称 + 已卸载
`adb shell dumpsys package packages` | 列出所有应用程序的信息
`adb shell dump <name>` | 列出一个包的信息
`adb shell path <package>` | 列出 APK 文件的路径
<!--rehype:className=style-list-arrow-->
### 设备相关命令
<!--rehype:wrap-class=col-span-2 row-span-2-->
:-- | --
:-- | --
`adb reboot recovery` | 重启设备进入恢复模式
`adb reboot fastboot` | 重启设备进入恢复模式
`adb shell screencap -p "/path/to/screenshot.png"` | 截图
`adb shell screenrecord "/path/to/record.mp4"` | 录制设备屏幕
`adb backup -apk -all -f backup.ab` | 备份设置和应用程序
`adb backup -apk -shared -all -f backup.ab` | 备份设置、应用程序和共享存储
`adb backup -apk -nosystem -all -f backup.ab` | 仅备份非系统应用程序
`adb restore backup.ab` | 恢复以前的备份
`adb shell am start -a android.intent.action.VIEW -d URL` | 打开网址
`adb shell am start -t image/* -a android.intent.action.VIEW` | 打开画廊
<!--rehype:className=code-nowrap left-align-->
### 权限
:-- | --
:-- | --
`adb shell permissions groups` | 列出所有已定义的权限组
`adb shell list permissions -g -r` | 列出了所有权限的详细信息
<!--rehype:className=style-list-arrow-->
### Logs
:-- | --
:-- | --
`adb logcat [options] [filter] [filter]` | 查看设备日志
`adb bugreport` | 打印错误报告
<!--rehype:className=style-list-arrow-->
常见的 ADB 命令
---
### 将文件推送到 Android 设备的下载文件夹
```bash
$ adb push example.apk /sdcard/Download/
```
### 列出所有已安装的包并获取完整路径
```bash
$ adb shell pm list packages -f
```
### 从安卓设备中提取文件
```bash
$ adb pull /sdcard/Download/example.apk
```
### 从主机安装 APK 到 Android 设备
```bash
$ adb shell install example.apk
```
### 从 Android 设备存储安装 APK
```bash
$ adb shell install /sdcard/Download/example.apk
```
### 设置网络代理
```bash
$ adb shell settings put global http_proxy <address>:<port>
```
### 禁用网络代理
```bash
$ adb shell settings put global http_proxy :0
```
### 显示连接的设备并指定一个设备进行 Shell
```bash
$ adb devices
$ adb -s 7f1c864e shell
```
`7f1c864e` 是设备 `ID`
### 通过 IP 地址连接到设备
```bash
$ adb connect 192.168.56.101:5555
```
### 通过 Wi-Fi 连接 ADB
<!--rehype:wrap-class=row-span-5-->
我们可以通过 `Wi-Fi` 或专门使用 `tcp` 连接使用 `adb`。 要通过 `Wi-Fi` 使用 `adb`,首先通过 `USB` 连接手机并启用 `USB` 调试。然后列出所有设备:
```bash
$ adb devices
# 这应该给出这样的输出:
# device_id device
```
现在检查 `Android` 设备的 `IP`
```bash
$ adb shell ifconfig
# 输出:
wlan0 Link encap:UNSPEC Driver icnss
inet addr:XXX.XXX.X.XX Bcast:XXX.XXX.X.XXX
```
记下 `inet addr` 后的 `IP` 地址。稍后要用。现在在某个端口重新启动 `tcpip`
```bash
$ adb tcpip $port
```
例如 5555
```bash
$ adb tcpip 5555
```
您现在可以断开 USB 线缆使用。 若要连接到设备请键入以下命令:
```bash
$ adb connect $ip:$port
```
例如:
```bash
$ adb connect 192.168.1.4:5555
```
### 将计算机上的 APK 文件安装到设备
```bash
$ adb install /Users/dev/projects/myapp.apk
```
### 查找应用的 APK 路径
```bash
$ adb shell pm path com.example.myapp
```
`com.example.myapp` 替换为您自己的应用程序包名称
### 通过名称查找应用的包名
```bash
$ adb shell pm list package | grep app_name
```
### 从设备提取 APK 到您的计算机
```bash
$ adb pull /data/app/com.example.myapp.apk ./
```
### 将文件从计算机复制到设备
```bash
$ adb push path/to/local/file /sdcard/foo.txt
```
### 滚动屏幕
```bash
$ adb shell input swipe 300 300 500 1000 # 上
$ adb shell input swipe 500 1000 300 300 # 下
```
### 发文本
使用虚拟键盘发送文本:
```bash
$ adb shell input text "Hello World"
```
### 发送按键事件
```bash
$ adb shell input keyevent 66
# 66 是回车键码
```
### 发送点击
点击屏幕:
```bash
$ adb shell input tap x y
```
### 查看包的日志
```bash
$ adb shell 'logcat --pid=$(pidof -s <package_name>)'
```
查看特定包的日志

354
docs/adobe-lightroom.md Normal file
View File

@ -0,0 +1,354 @@
Adobe Lightroom 键盘快捷键
===
Adobe Lightroom CC 中 251 个键盘快捷键的可视化备忘单
键盘快捷键
--------
### 使用面板
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Tab` | 显示/隐藏侧面板
`Shift` `Tab` | 显示/隐藏所有面板
`T` | 显示/隐藏工具栏
`F5` | 显示/隐藏模块选择器
`F6` | 显示/隐藏胶片
`F7` | 显示/隐藏左侧面板
`F8` | 显示/隐藏右侧面板
`Alt` `(click a panel)` | 切换独奏模式
`Shift` `(click a panel)` | 在不关闭单独面板的情况下打开一个新面板
`Ctrl` `(click a panel)` | 打开/关闭所有面板
`Ctrl` `Shift` `0-5` | 打开/关闭左侧面板,从上到下
`Ctrl` `0-9` | 打开/关闭右侧面板、库和开发模块,从上到下
`Ctrl` `1-7` | 从上到下打开/关闭右面板、幻灯片、打印和 Web 模块
<!--rehype:className=shortcuts-->
### 导航模块
快捷键 | 说明
:- | -
`Ctrl` `Alt` `1` | 转到库模块
`Ctrl` `Alt` `2` | 转到开发模块
`Ctrl` `Alt` `3` | 转到幻灯片模块
`Ctrl` `Alt` `4` | 转到打印模块
`Ctrl` `Alt` `5` | 转到网络模块
`Ctrl` `Alt` `Left/Right` | 返回/前进
`Ctrl` `Alt` `Up` | 返回上一个模块
<!--rehype:className=shortcuts-->
### 使用辅助窗口
快捷键 | 说明
:- | -
`F11` | 打开辅助窗口
`Shift` `G` | 进入网格视图
`Shift` `E` | 进入正常的放大镜视图
`Ctrl` `Shift` `Enter` | 进入锁定的放大镜视图
`Shift` `C` | 进入比较视图
`Shift` `N` | 进入调查视图
`Ctrl` `Alt` `Shift` `Enter` | 进入幻灯片视图
`Shift` `F11` | 进入全屏模式(需要第二台显示器)
`Shift` `\` | 显示/隐藏过滤栏
`Ctrl` `Shift` `+/-` | 放大/缩小
<!--rehype:className=shortcuts-->
### 在开发模块中工作
<!--rehype:wrap-class=row-span-5-->
快捷键 | 说明
:- | -
`V` | 转换为灰度
`Ctrl` `U` | 自动音调
`Ctrl` `Shift` `U` | 自动白平衡
`Ctrl` `E` | 在 Photoshop 中编辑
`Ctrl` `Shift` `C/V` | 复制/粘贴开发设置
`Ctrl` `Alt` `V` | 粘贴上一张照片的设置
`Ctrl` `Alt` `Shift` `Left` | 将之后的设置复制到之前
`Ctrl` `Alt` `Shift` `Right` | 将之前的设置复制到之后
`Ctrl` `Alt` `Shift` `Up` | 交换前后设置
`Up/Down` | 以小增量增加/减少选定的滑块
`Shift` `Up/Down` | 以较大的增量增加/减少选定的滑块
`./,` | 循环浏览基本面板设置(向前/向后)
`(double-click slider name)` | 重置滑块
`Alt` `(click group name)` | 重置一组滑块
`Ctrl` `Shift` `R` | 重置所有设置
`Ctrl` `Shift` `S` | 同步设置
`Ctrl` `Alt` `S` | 绕过同步设置对话框同步设置
`Ctrl` `(click Sync button)` | 切换自动同步
`Ctrl` `Alt` `Shift` `A` | 启用自动同步
`Ctrl` `Alt` `Shift` `M` | 匹配总曝光量
`W` | 选择白平衡工具(来自任何模块)
`R` | 选择裁剪工具(来自任何模块)
`A` | 选择裁剪工具时限制纵横比
`Shift` `A` | 裁剪为与上一次裁剪相同的纵横比
`Alt` `(drag)` | 从照片中心裁剪
`O` | 循环作物网格覆盖
`Shift` `O` | 循环裁剪网格叠加方向
`X` | 在纵向和横向之间切换裁剪
`Ctrl` `Alt` `R` | 重置作物
`Shift` `T` | 选择 Guided Upright 工具
`Q` | 选择 Sopt 删除工具
`Shift` `T` | 选择污点去除工具时在克隆和修复模式之间切换笔刷
`K` | 选择调整画笔工具(来自任何模块)
`M` | 选择渐变滤镜工具
`Shift` `T` | 选择渐变/径向滤镜时在编辑和画笔模式之间切换蒙版
`]/[` | 增大/减小画笔大小
`Shift` `]/[` | 增加/减少笔刷羽化
`/` | 在局部调整刷A和B之间切换
`Alt` `(drag)` | 暂时从画笔 A 或 B 切换到橡皮擦
`Shift` `(drag)` | 绘制水平线或垂直线
`H` | 显示/隐藏局部调整引脚
`O` | 显示/隐藏局部调整蒙版覆盖
`Shift` `O` | 循环局部调整蒙版叠加颜色
`Ctrl` `Alt` `Shift` `T` | 选择目标调整工具以应用色调曲线调整
`Ctrl` `Alt` `Shift` `H` | 选择目标调整工具以应用色相调整
`Ctrl` `Alt` `Shift` `S` | 选择目标调整工具以应用饱和度调整
`Ctrl` `Alt` `Shift` `L` | 选择目标调整工具以应用亮度调整
`Ctrl` `Alt` `Shift` `G` | 选择目标调整工具以应用灰度混合调整
`Ctrl` `Alt` `Shift` `N` | 取消选择目标调整工具
`J` | 显示剪辑
`Ctrl` `]` | 向右旋转照片(顺时针)
`Ctrl` `[` | 向左旋转照片(逆时针)
`Space/Z` | 在放大镜和 1:1 缩放预览之间切换
`Ctrl` `+/-` | 放大/缩小
`Ctrl` `Enter` | 播放即兴幻灯片
`Y` | 查看左/右之前和之后
`Alt` `Y` | 查看顶部/底部之前和之后
`Shift` `Y` | 在分屏中查看之前和之后
`\` | 仅查看之前
`Ctrl` `N` | 创建新快照
`Ctrl` `Shift` `N` | 创建新预设
`Ctrl` `Alt` `N` | 创建一个新的预设文件夹
`Ctrl` `J` | 打开开发视图选项
<!--rehype:className=shortcuts-->
### 更改视图和屏幕模式
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`E` | 进入图书馆放大镜视图
`G` | 进入库网格视图
`C` | 进入图书馆比较视图
`N` | 进入图书馆调查视图
`D` | 在修改照片模块中打开选定的照片
`L` | 通过 Lights Out 模式向前循环
`Shift` `L` | 通过 Lights Out 模式向后循环
`Ctrl` `Shift` `L` | 切换灯光昏暗模式
`F` | 循环屏幕模式
`Ctrl` `Shift` `F` | 在普通和全屏之间切换,隐藏面板
`Ctrl` `Alt` `F` | 进入普通屏幕模式
`I` | 循环信息叠加
`Ctrl` `I` | 显示/隐藏信息覆盖
<!--rehype:className=shortcuts-->
### 管理照片和目录
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `Shift` `I` | 从磁盘导入照片
`Ctrl` `O` | 打开目录
`Ctrl` `,` | 打开首选项
`Ctrl` `Alt` `,` | 打开目录设置
`Ctrl` `Shift` `T` | 创建新的子文件夹(分段联机捕获)
`Ctrl` `T` | 隐藏/显示系绳捕获栏
`Ctrl` `Shift` `N` | 在库模块中创建一个新文件夹
`Ctrl` `'` | 创建虚拟副本(仅限库和开发模块)
`Ctrl` `R` | 在资源管理器/Finder 中显示(仅限库和开发模块)
`Right/Left` | 转到胶片中的下一张/上一张照片
`Shift/Ctrl` `Click` | 选择多个文件夹或集合(在库、幻灯片、打印和 Web 模块中)
`F2` | 重命名照片(在图库模块中)
`Delete` | 删除所选照片
`Alt` `Backspace` | 从目录中删除所选照片
`Ctrl` `Alt` `Shift` `Backspace` | 删除所选照片并移至废纸篓
`Ctrl` `Backspace` | 删除被拒绝的照片
`Ctrl` `E` | 在 Photoshop 中编辑
`Ctrl` `Alt` `E` | 在其他编辑器中打开
`Ctrl` `Shift` `E` | 导出所选照片
`Ctrl` `Alt` `Shift` `E` | 使用以前的设置导出
`Ctrl` `Alt` `Shift` `,` | 打开插件管理器
`Ctrl` `P` | 打印所选照片
`Ctrl` `Shift` `P` | 打开页面设置对话框
<!--rehype:className=shortcuts-->
### 比较图库模块中的照片
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`E/Enter` | 切换到放大视图
`G/Esc` | 切换到网格视图
`C` | 切换到比较视图
`N` | 切换到调查视图
`Space/E` | 从网格切换到放大视图
`Down` | 在比较视图中交换选择和候选照片
`Up` | 在比较视图中选择下一张照片和候选照片
`Z` | 切换缩放视图
`Ctrl` `+/-` | 在放大镜视图中放大/缩小
`PgUp/PgDown` | 在放大视图中向上/向下滚动放大的照片
`Home/End` | 转到网格视图的开头/结尾
`Ctrl` `Enter` | 播放即兴幻灯片
`Ctrl` `]` | 向右旋转照片(顺时针)
`Ctrl` `[` | 向左旋转照片(逆时针)
`=/-` | 增加/减少网格缩略图大小
`PgUp/PgDown` | 向上/向下滚动网格缩略图
`Ctrl` `Shift` `H` | 切换单元格附加功能
`Ctrl` `Alt` `Shift` `H` | 显示/隐藏徽章
`J` | 循环网格视图
`Ctrl` `J` | 打开库视图选项
`Ctrl` `(click)` | 选择多张离散照片
`Shift` `(click)` | 选择多张连续照片
`Ctrl` `A` | 选择所有照片
`Ctrl` `D` | 取消选择所有照片
`Ctrl` `Shift` `D` | 仅选择活动照片
`/` | 取消选择现用照片
`Shift` `Left/Right` | 将上一张/下一张照片添加到选择
`Ctrl` `Alt` `A` | 选择标记的照片
`Ctrl` `Alt` `Shift` `D` | 取消选择未标记的照片
`Ctrl` `G` | 分组入栈
`Ctrl` `Shift` `G` | 拆叠
`S` | 切换堆栈
`Shift` `S` | 移动到堆栈顶部
`Shift` `[` | 在堆栈中向上移动
`Shift` `]` | 在堆栈中向下移动
<!--rehype:className=shortcuts-->
### 评级和过滤照片
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`1-5` | 设置星级
`Shift` `1-5` | 设置星级并转到下一张照片
`0` | 删除星级
`Shift` `0` | 删除星级并转到下一张照片
`]/[` | 将评分提高/降低一颗星
`6` | 分配一个红色标签
`7` | 分配黄色标签
`8` | 分配一个绿色标签
`9` | 分配一个蓝色标签
`Shift` `6-9` | 分配颜色标签并转到下一张照片
`P` | 将照片标记为精选
`Shift` `P` | 将照片标记为精选并转到下一张照片
`X` | 将照片标记为拒绝
`Shift` `X` | 将照片标记为拒绝并转到下一张照片
`U` | 取消标记照片
`Shift` `U` | 取消标记照片并转到下一张照片
`Ctrl` `Up/Down` | 增加/减少标志状态
<code>\`</code> | 循环标志设置
`Ctrl` `Alt` `R` | 优化照片
`\` | 显示/隐藏库过滤器栏
`Shift` `(click filter labels)` | 在过滤器栏中打开多个过滤器
`Shift` `L` | 打开/关闭过滤器
`Ctrl` `F` | 在图库模块中查找照片
<!--rehype:className=shortcuts-->
### 使用集合
快捷键 | 说明
:- | -
`Ctrl` `N` | 在 Library 模块中创建一个新的集合
`B` | 添加到快速收藏
`Shift` `B` | 添加到快速收藏并转到下一张照片
`Ctrl` `B` | 显示快速收藏
`Ctrl` `Alt` `B` | 保存快速收藏
`Ctrl` `Shift` `B` | 清除快速收藏
`Ctrl` `Alt` `Shift` `B` | 设为目标集合
<!--rehype:className=shortcuts-->
### 在库模块中使用元数据和关键字
快捷键 | 说明
:- | -
`Ctrl` `K` | 添加关键字
`Ctrl` `Shift` `K` | 修改关键字
`Ctrl` `Alt` `Shift` `K` | 设置关键字快捷方式
`Shift` `K` | 从所选照片中添加/删除关键字快捷方式
`Ctrl` `Alt` `K` | 启用绘画
`Alt` `1-9` | 将关键字集中的关键字添加到所选照片
`Alt` `0` | 通过关键字集向前循环
`Alt` `Shift` `0` | 通过关键字集循环反向词
`Ctrl` `Alt` `Shift` `C/V` | 复制/粘贴元数据
`Ctrl` `S` | 将元数据保存到文件
<!--rehype:className=shortcuts-->
### 在幻灯片模块中工作
快捷键 | 说明
:- | -
`Enter` | 播放幻灯片
`Ctrl` `Enter` | 播放即兴幻灯片
`Space` | 暂停幻灯片放映
`Alt` `Enter` | 预览幻灯片
`Esc` | 结束幻灯片放映
`Right` | 转到下一张幻灯片
`Left` | 转到上一张幻灯片
`Ctrl` `]` | 向右旋转照片(顺时针)
`Ctrl` `[` | 向左旋转照片(逆时针)
`Ctrl` `Shift` `H` | 显示/隐藏指南
`Ctrl` `J` | 导出 PDF 幻灯片放映
`Ctrl` `Shift` `J` | 导出 JPEG 幻灯片放映
`Ctrl` `Alt` `J` | 导出视频幻灯片
`Ctrl` `N` | 创建新的幻灯片放映模板
`Ctrl` `Shift` `N` | 创建新的幻灯片放映模板文件夹
`Ctrl` `S` | 保存幻灯片放映设置
<!--rehype:className=shortcuts-->
### 在打印模块中工作
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `P` | 打印
`Ctrl` `Alt` `P` | 打印一份
`Ctrl` `Shift` `P` | 打开页面设置对话框
`Ctrl` `Alt` `Shift` `P` | 打开打印设置对话框
`Ctrl` `Shift` `Left` | 转到第一页
`Ctrl` `Shift` `Right` | 转到最后一页
`Ctrl` `Left` | 转到上一页
`Ctrl` `Right` | 转到下一页
`Ctrl` `Shift` `H` | 显示/隐藏指南
`Ctrl` `R` | 显示/隐藏标尺
`Ctrl` `Shift` `J` | 显示/隐藏页面出血
`Ctrl` `Shift` `M` | 显示/隐藏边距和装订线
`Ctrl` `Shift` `K` | 显示/隐藏图像单元格
`Ctrl` `Shift` `U` | 显示/隐藏尺寸
`Ctrl` `Enter` | 播放即兴幻灯片
`Ctrl` `]` | 向右旋转照片(顺时针)
`Ctrl` `[` | 向左旋转照片(逆时针)
`Ctrl` `N` | 创建一个新的打印模板
`Ctrl` `Shift` `N` | 创建一个新的打印模板文件夹
`Ctrl` `S` | 保存打印设置
<!--rehype:className=shortcuts-->
### 在 Web 模块中工作
快捷键 | 说明
:- | -
`Ctrl` `R` | 重新加载网络画廊
`Ctrl` `Alt` `P` | 在浏览器中预览
`Ctrl` `Enter` | 播放即兴幻灯片
`Ctrl` `J` | 导出网络画廊
`Ctrl` `N` | 创建新的 Web 画廊模板
`Ctrl` `Shift` `N` | 创建新的 Web 画廊模板文件夹
`Ctrl` `S` | 保存 Web 画廊设置
<!--rehype:className=shortcuts-->
### 使用帮助
快捷键 | 说明
:- | -
`Ctrl` `/` | 显示当前模块快捷方式
`(click)` | 隐藏当前模块快捷方式
`Ctrl` `Alt` `/` | 转到当前模块帮助
`F1` | 打开社区帮助
<!--rehype:className=shortcuts-->
另见
--------
- [Keyboard shortcuts for Adobe Lightroom CC](https://helpx.adobe.com/lightroom/help/keyboard-shortcuts.html) _(helpx.adobe.com)_

433
docs/adobe-photoshop.md Normal file
View File

@ -0,0 +1,433 @@
Adobe Photoshop 键盘快捷键 备忘清单
===
Adobe Photoshop 中 283 个[键盘快捷键](https://helpx.adobe.com/photoshop/using/default-keyboard-shortcuts.html)的可视化备忘单
键盘快捷键
---------
### 热门快捷方式
快捷键 | 说明
:- | -
`Ctrl` `T` | 自由变换
`[` | 减小画笔大小
`]` | 增加画笔大小
`Shift` `[` | 降低画笔硬度
`Shift` `]` | 增加笔刷硬度
`D` | 默认前景/背景颜色
`X` | 切换前景/背景颜色
`Ctrl` `J` | 通过复制新建图层
`Ctrl` `Shift` `J` | 通过剪切新建图层
`Esc` | 取消任何模态对话框窗口(包括启动工作区)
`Enter` | 选择工具栏的第一个编辑字段
`Tab` | 在字段之间导航
`Shift` `Tab` | 在相反方向的字段之间导航
`Alt` | 更改取消重置
`Ctrl` `F` | 调用搜索体验
<!--rehype:className=shortcuts-->
### 使用功能键
快捷键 | 说明
:- | -
`F1` | 开始帮助
`F2` | 剪切
`F3` | 复制
`F4` | 粘贴
`F5` | 显示/隐藏笔刷面板
`F6` | 显示/隐藏颜色面板
`F7` | 显示/隐藏图层面板
`F8` | 显示/隐藏信息面板
`F9` | 显示/隐藏操作面板
`F12` | 恢复
`Shift` `F5` | 充满
`Shift` `F6` | 羽毛选择
`Shift` `F7` | 反向选择
<!--rehype:className=shortcuts-->
### 选择工具
<!--rehype:wrap-class=row-span-3-->
快捷键 | 说明
:- | -
`V` | 移动工具
`M` | 矩形选框工具
`L` | 套索工具
`W` | 魔棒工具 > 快速选择工具
`C` | 裁剪工具 > 切片工具 > 切片选择工具
`I` | 吸管工具 > 标尺工具 > 注释工具
`J` | 斑点修复笔刷工具 > 修复笔刷工具 > 补丁工具 > 红眼工具
`B` | 画笔工具 > 铅笔工具 > 颜色替换工具 > 混合器画笔工具
`S` | 克隆图章工具 > 图案图章工具
`Y` | 历史画笔工具 > 艺术史画笔工具
`E` | 橡皮擦工具 > 背景橡皮擦工具 > 魔术橡皮擦工具
`G` | 渐变工具>油漆桶工具
`O` | 减淡工具 > 加深工具 > 海绵工具
`P` | 钢笔工具 > 自由钢笔工具
`T` | 横版工具 > 竖版工具 > 横版蒙版工具 > 竖版蒙版工具
`A` | 路径选择工具 > 直接选择工具
`U` | 矩形工具 > 圆角矩形工具 > 椭圆工具 > 多边形工具 > 直线工具
`H` | 手工具
`R` | 旋转视图工具
`Z` | 缩放工具
`D` | 默认前景/背景颜色
`X` | 切换前景/背景颜色
`Q` | 切换标准/快速蒙版模式
`J` | 内容感知移动工具
`C` | 透视裁剪工具
`V` | 画板工具
`R` | 旋转视图工具
`/` | 切换保持透明度
`,` | 上一刷
`.` | 下一刷
`Shift` `,` | 先刷
`Shift` `.` | 最后刷
<!--rehype:className=shortcuts-->
### 查看图片
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `Tab` | 循环浏览打开的文档
`Ctrl` `Shift` `Tab` | 切换到上一个文档
`Ctrl` `Shift` `W` | 在 Photoshop 中关闭文件并打开 Bridge
`F` | 在标准屏幕 > 带菜单栏的全屏 > 全屏模式之间向前切换
`Shift` `F` | 在标准屏幕 > 带菜单栏的全屏 > 全屏模式之间向后切换
`Space` `F` | 向前切换画布颜色
`Shift` `Space` `F` | 向后切换画布颜色
`Space` | 切换到手动工具(当不在文本编辑模式时)
`Ctrl` `Space` | 切换到放大工具
`Alt` `Space` | 切换到缩小工具
`Shift` `Enter` | 应用缩放百分比,并保持缩放百分比框处于活动状态
`PgUp/PgDn` | 向上或向下滚动 1 屏
`Shift` `PgUp/PgDn` | 向上或向下滚动 10 个单位
`Home` | 将视图移动到左上角
`End` | 将视图移动到右下角
`\` | 将图层蒙版打开/关闭为红宝石(必须选择图层蒙版)
<!--rehype:className=shortcuts-->
### 使用木偶变形
快捷键 | 说明
:- | -
`Esc` | 完全取消
`Ctrl` `Z` | 撤消最后一次引脚调整
`Ctrl` `A` | 选择所有引脚
`Ctrl` `D` | 取消选择所有引脚
`H` | 暂时隐藏图钉
<!--rehype:className=shortcuts-->
### 使用优化边缘
快捷键 | 说明
:- | -
`Ctrl` `Alt` `R` | 打开优化边缘对话框
`F` | 通过预览模式向前循环
`Shift` `F` | 通过预览模式向后循环
`X` | 在原始图像和选区预览之间切换
`P` | 在原始选择和优化版本之间切换
`J` | 打开和关闭半径预览
`Shift` `E` | 在 Refine Radius 和 Erase Refinement 工具之间切换
<!--rehype:className=shortcuts-->
### 使用滤镜库
快捷键 | 说明
:- | -
`Ctrl` `Alt` `F` | 重新应用上次使用的过滤器
`Ctrl` | 将取消按钮更改为默认值
`Alt` | 将取消按钮更改为重置
`Ctrl` `Z` | 撤销重做
`Ctrl` `Shift` `Z` | 向前一步
`Ctrl` `Alt` `Z` | 向后退一步
<!--rehype:className=shortcuts-->
### 使用液化滤镜
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`W` | 向前扭曲工具
`R` | 重构工具
`C` | 顺时针旋转工具
`S` | 皱褶工具
`B` | 膨胀工具
`O` | 向左推工具
`M` | 镜像工具
`T` | 湍流工具
`F` | 冻结蒙版工具
`D` | 解冻蒙版工具
`Alt` `(tool)` | 反转膨胀、褶皱、向左推和镜像工具的方向
`Tab` | 从右上角循环浏览控件
`Shift` `Tab` | 从右下角循环浏览控件
`Alt` | 更改取消重置
<!--rehype:className=shortcuts-->
### 使用消失点
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`X` | 缩放 2 倍(临时)
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 适合视图
`Ctrl` `Z` | 撤消上次操作
`Ctrl` `Shift` `Z` | 重做上一个动作
`Ctrl` `D` | 取消全选
`Ctrl` `H` | 隐藏选择和窗格
`Arrows` | 将选区移动 1 个像素
`Shift` `Arrows` | 将选区移动 10 个像素
`Ctrl` `C` | 复制
`Ctrl` `V` | 粘贴
`Ctrl` `Shift` `T` | 重复最后一个副本并移动
`Ctrl` `Alt` `T` | 从当前选区创建浮动选区
`Alt` `Shift` | 将选择限制为 15 度旋转
`Backspace` | 创建平面时删除最后一个节点
<!--rehype:className=shortcuts-->
### 使用 Camera Raw 对话框
<!--rehype:wrap-class=row-span-5-->
快捷键 | 说明
:- | -
`Z` | 缩放工具
`H` | 手工具
`I` | 白平衡工具
`S` | 颜色取样器工具
`C` | 裁剪工具
`A` | 拉直工具
`B` | 污点去除工具
`E` | 红眼消除工具
`Ctrl` `Alt` `1` | 基本面板
`Ctrl` `Alt` `2` | 色调曲线面板
`Ctrl` `Alt` `3` | 详情面板
`Ctrl` `Alt` `4` | HSL/灰度面板
`Ctrl` `Alt` `5` | 分离调色板
`Ctrl` `Alt` `6` | 镜头校正面板
`Ctrl` `Alt` `7` | 相机校准面板
`Ctrl` `Alt` `8` | 预设面板
`Ctrl` `Alt` `9` | 打开快照面板
`Ctrl` `Alt` `Shift` `T` | 参数化曲线针对性调整工具
`Ctrl` `Alt` `Shift` `H` | 色相针对性调整工具
`Ctrl` `Alt` `Shift` `S` | 饱和度针对性调整工具
`Ctrl` `Alt` `Shift` `L` | 亮度针对性调整工具
`Ctrl` `Alt` `Shift` `G` | 灰度混合针对性调整工具
`T` | 最后使用的针对性调整工具
`K` | 调整笔刷工具
`G` | 分级过滤工具
`Alt` | 暂时从调整画笔工具的添加模式切换到擦除模式,或从擦除模式切换到添加模式
`Alt` `]/[` | 增加/减少临时调整画笔工具大小
`Alt` `Shift` `]/[` | 增加/减少临时调整笔刷工具羽化
`Alt` `=/-` | 以 10 为增量增加/减少临时调整画笔工具大小流
`N` | 从调整画笔工具或渐变滤镜的添加或擦除模式切换到新建模式
`M` | 为调整画笔工具切换自动蒙版
`Y` | 切换调整画笔工具的显示蒙版
`V` | 调整画笔工具的切换销
`L` | 向左旋转图像
`R` | 向右旋转图像
`Ctrl` | 暂时切换到放大工具
`Alt` | 暂时切换为缩小工具,图片打开按钮改为打开复制
`P` | 切换预览
`F` | 全屏模式
`Shift` | 暂时激活白平衡工具并将打开图像按钮更改为打开对象
`Arrows` | 将曲线面板中的选定点移动 1 个像素
`Shift` `Arrows` | 将曲线面板中的选定点移动 10 像素
`Ctrl` `R` | 从 Bridge 打开 Camera Raw 对话框中的选定图像
`O` | 高亮剪裁警告
`U` | 阴影剪切警告
`Ctrl` `1-5` | 添加 1-5 星级(幻灯片模式)
`Ctrl` `./,` | 增加/减少评分(幻灯片模式)
`Ctrl` `6` | 添加红色标签(幻灯片模式)
`Ctrl` `7` | 添加黄色标签(幻灯片模式)
`Ctrl` `8` | 添加绿色标签(幻灯片模式)
`Ctrl` `9` | 添加蓝色标签(幻灯片模式)
`Ctrl` `Shift` `0` | 添加紫色标签(幻灯片模式)
`Ctrl` `K` | Camera Raw 首选项
`Ctrl` `Alt` | 删除 Adobe Camera Raw 首选项(打开时)
<!--rehype:className=shortcuts-->
### 使用黑白对话框
快捷键 | 说明
:- | -
`Ctrl` `Shift` `Alt` `B` | 打开黑白对话框
`Up/Down` | 将所选值增加/减少 1%
`Shift` `Up/Down` | 将所选值增加/减少 10%
<!--rehype:className=shortcuts-->
### 编辑路径
快捷键 | 说明
:- | -
`Ctrl` | 从路径选择、笔、添加锚点、删除锚点或将点工具转换为直接选择工具
`Alt` | 当指针位于锚点或方向点上时,从钢笔工具切换到自由钢笔工具以转换点工具
<!--rehype:className=shortcuts-->
### 变换选区、选区边框和路径
快捷键 | 说明
:- | -
`Alt` | 从中心变换或反射
`Shift` | 约束
`Ctrl` | 歪曲
`Enter` | 申请
`Ctrl` `.` | 取消
`Ctrl` `Alt` `T` | 具有重复数据的自由变换
`Ctrl` `Shift` `Alt` `T` | 用重复数据再次转换
<!--rehype:className=shortcuts-->
### 使用曲线
快捷键 | 说明
:- | -
`Ctrl` `M` | 打开曲线对话框
`+` | 选择曲线上的下一个点
`-` | 选择曲线上的前一点
`Ctrl` `D` | 取消选择一个点
`Del` | 删除曲线上的一个点
`Arrows` | 将所选点移动 1 个像素
`Shift` `Arrows` | 将所选点移动 10 个像素
<!--rehype:className=shortcuts-->
### 用于绘画
快捷键 | 说明
:- | -
`Alt` `Shift` `0-9` | 混合器画笔更改混合设置
`0-9` | 混合刷改变湿设置
`00` | 搅拌刷变湿并混合至零
`Shift` `+/-` | 循环混合模式
`Backspace` | 在背景或标准图层上打开填充对话框
`Alt` `Backspace` | 填充前景色
`Ctrl` `Backspace` | 填充背景色
`Ctrl` `Alt` `Backspace` | 从历史中填充
`Shift` `Backspace` | 显示填充对话框
`/` | 打开/关闭锁定透明像素
<!--rehype:className=shortcuts-->
### 用于混合模式
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `-/+` | 循环混合模式
`Shift` `Alt` `N` | 普通的
`Shift` `Alt` `I` | 溶解
`Shift` `Alt` `Q` | 背后(仅限画笔工具)
`Shift` `Alt` `R` | 清除(仅限画笔工具)
`Shift` `Alt` `K` | 变暗
`Shift` `Alt` `M` | 乘
`Shift` `Alt` `B` | 烧色
`Shift` `Alt` `A` | 线性燃烧
`Shift` `Alt` `G` | 减轻
`Shift` `Alt` `S` | 屏幕
`Shift` `Alt` `D` | 颜色减淡
`Shift` `Alt` `W` | 直线闪避
`Shift` `Alt` `O` | 覆盖
`Shift` `Alt` `F` | 柔光
`Shift` `Alt` `H` | 强光
`Shift` `Alt` `V` | 鲜艳的光
`Shift` `Alt` `J` | 线性光
`Shift` `Alt` `Z` | 针灯
`Shift` `Alt` `L` | 硬混
`Shift` `Alt` `E` | 区别
`Shift` `Alt` `X` | 排除
`Shift` `Alt` `U` | 色调
`Shift` `Alt` `T` | 饱和
`Shift` `Alt` `C` | 颜色
`Shift` `Alt` `Y` | 亮度
`Shift` `Alt` `N` | 将位图图像的混合模式设置为阈值<br/>所有其他图像的混合模式设置为正常
<!--rehype:className=shortcuts-->
### 格式类型
快捷键 | 说明
:- | -
`Ctrl` `Shift` `L/C/R` | 左对齐、居中或右对齐
`Ctrl` `Shift` `X` | 选择 100% 水平比例
`Ctrl` `Shift` `Alt` `X` | 选择 100% 垂直比例
`Ctrl` `Shift` `Alt` `A` | 选择自动行进
`Ctrl` `Shift` `Q` | 选择 0 进行跟踪
`Ctrl` `Shift` `J` | 对齐段落,左对齐最后一行
`Ctrl` `Shift` `F` | 证明段落,证明所有
`Ctrl` `Shift` `Alt` `H` | 打开/关闭段落断字
`Ctrl` `Shift` `Alt` `T` | 打开/关闭单个/每行作曲家
`Ctrl` `Shift` `</>` | 将所选文本的字号减小或增大 2 磅或像素
`Alt` `Up/Down` | 减少或增加前导 2 点或像素
`Shift` `Alt` `Up/Down` | 减少或增加基线偏移 2 个点或像素
`Alt` `Left/Right` | 减少或增加字距调整/字距调整 20/1000 em
<!--rehype:className=shortcuts-->
### 使用面板
快捷键 | 说明
:- | -
`Shift` `Enter` | 应用值并保持文本框处于活动状态
`Tab` | 显示/隐藏所有面板
`Shift` `Tab` | 显示/隐藏除工具箱和选项栏之外的所有面板
`Enter` | 高亮选项栏(先选择工具)
`Shift` `Up/Down` | 将所选值增加/减少 10
<!--rehype:className=shortcuts-->
### 使用调整图层
快捷键 | 说明
:- | -
`Alt` `3` | 选择红色通道进行调整
`Alt` `4` | 选择绿色通道进行调整
`Alt` `5` | 选择蓝色通道进行调整
`Alt` `2` | 选择复合通道进行调整
`Backspace` | 删除调整图层
<!--rehype:className=shortcuts-->
### 使用画笔面板
快捷键 | 说明
:- | -
`,/.` | 选择上一个/下一个画笔大小
`Shift` `,/.` | 选择第一个/最后一个画笔
`Caps Lock` | 显示画笔的精确十字线
`Shift` `Alt` `P` | 切换喷枪选项
<!--rehype:className=shortcuts-->
### 使用克隆源面板
快捷键 | 说明
:- | -
`Alt` `Shift` | 显示克隆源(覆盖 iamge)
`Alt` `Shift` `(arrows)` | 轻推克隆源
`Alt` `Shift` `</>` | 旋转克隆源
`Alt` `Shift` `[/]` | 缩放(增加或减小大小)克隆源
<!--rehype:className=shortcuts-->
### 使用图层面板
快捷键 | 说明
:- | -
`Ctrl` `Shift` `N` | 新层
`Ctrl` `J` | 通过复制新建图层
`Ctrl` `Shift` `J` | 通过剪切新建图层
`Ctrl` `G` | 图层组
`Ctrl` `Shift` `G` | 取消组合图层
`Ctrl` `Alt` `G` | 创建/释放剪贴蒙版
`Ctrl` `Alt` `A` | 选择所有图层
`Ctrl` `Shift` `E` | 合并可见层
`Alt` `.` | 选择顶层
`Alt` `.` | 选择底层
`Shift` `Alt` `[/]` | 添加到图层面板中的图层选择
`Alt` `[/]` | 向下/向上选择下一层
`Ctrl` `[/]` | 向下/向上移动目标图层
`Ctrl` `Shift` `Alt` `E` | 将所有可见图层的副本合并到目标图层中
`Ctrl` `E` | 合并图层(当图层突出显示时)
`Ctrl` `Shift` `[/]` | 将层移动到底部或顶部
`/` | 切换目标图层的锁定透明度或上次应用的锁定
`\` | 打开/关闭图层蒙版的 rubylith 模式
<!--rehype:className=shortcuts-->
另见
--------
- [Keyboard shortcuts for Adobe Photoshop](https://helpx.adobe.com/photoshop/using/default-keyboard-shortcuts.html) _(helpx.adobe.com)_

194
docs/adobe-xd.md Normal file
View File

@ -0,0 +1,194 @@
Adobe XD 键盘快捷键
===
Adobe XD 中 97 个键盘快捷键的可视化备忘单
键盘快捷键
--------
### 编辑菜单键
快捷键 | 说明
:- | -
`Ctrl` `Z` | 撤消
`Ctrl` `Shift` `Z` | 重做
`Ctrl` `X` | 剪切
`Ctrl` `C` | 复制
`Ctrl` `V` | 粘贴
`Ctrl` `Alt` `V` | 粘贴外观(设计模式)或粘贴交互(原型模式)
`Ctrl` `D` | 复制
`Del` | 删除
`Ctrl` `A` | 全选
`Ctrl` `Shift` `A` | 取消全选
<!--rehype:className=shortcuts-->
### 文件菜单键
快捷键 | 说明
:- | -
`Ctrl` `N` | 新的
`Ctrl` `Shift` `O` | 打开...
`Alt` `F4` | 关闭
`Ctrl` `S` | 节省...
`Ctrl` `Shift` `S` | 另存为...
`Ctrl` `Shift` `E` | 出口批量
`Ctrl` `E` | 导出选择
`Ctrl` `Shift` `I` | 进口
<!--rehype:className=shortcuts-->
### 笔/路径键
快捷键 | 说明
:- | -
`P` | 切换到钢笔工具
`Alt` | 不对称控制点
`Shift` | 捕捉控制点角度
`Shift` | 捕捉锚点角度
`Ctrl` `Alt` `U` | 添加
`Ctrl` `Alt` `S` | 减去
`Ctrl` `Alt` `I` | 相交
`Ctrl` `Alt` `X` | 排除重叠
`Ctrl` `8` | 转换为路径
<!--rehype:className=shortcuts-->
### 图层(对象)、组和画板的键
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `G` | 图层组
`Ctrl` `Shift` `G` | 取消组合图层
`Ctrl` `K` | 制作组件
`Ctrl` `L` | 锁定/解锁图层
`Ctrl` `,` | 隐藏/显示图层
`Ctrl` `Shift` `M` | 有形状的面具
`Ctrl` `R` | 制作重复网格
`1-9` | 更改图层不透明度
`Ctrl` `;` | 显示/隐藏画板指南
`Ctrl` `Shift` `;` | 锁定画板指南
<!--rehype:className=shortcuts-->
### 对齐键
快捷键 | 说明
:- | -
`Ctrl` `Shift` `Left` | 左边
`Shift` `C` | 中心(水平)
`Ctrl` `Shift` `Right` | 正确的
`Ctrl` `Shift` `Up` | 顶部
`Shift` `M` | 中间(垂直)
`Ctrl` `Shift` `Down` | 底部
<!--rehype:className=shortcuts-->
### 排列键
快捷键 | 说明
:- | -
`Ctrl` `Shift` `]` | 置于最前面
`Ctrl` `]` | 向前进
`Ctrl` `[` | 向后发送
`Ctrl` `Shift` `[` | 发送到后台
<!--rehype:className=shortcuts-->
### 分发键
快捷键 | 说明
:- | -
`Ctrl` `Shift` `H` | 水平的
`Ctrl` `Shift` `V` | 竖的
<!--rehype:className=shortcuts-->
### 文本键
快捷键 | 说明
:- | -
`Ctrl` `B` | 粗体
`Ctrl` `I` | 斜体
`Ctrl` `Shift` `.` | 增加字体大小
`Ctrl` `Shift` `,` | 减小字体大小
<!--rehype:className=shortcuts-->
### 操作菜单键
快捷键 | 说明
:- | -
`Alt` | 从中心
`Shift` | 约束
`Enter` | 编辑文字
`Shift` | 约束旋转15 度)
`Shift` | 线约束旋转45 度)
`Shift` `Alt` | 从中心约束
`Ctrl` | 直接选择
`Ctrl` `Tab` | 在设计和原型模式之间切换
<!--rehype:className=shortcuts-->
### 工具菜单键
快捷键 | 说明
:- | -
`V` | 选择
`R` | 长方形
`E` | 椭圆
`Y` | 多边形
`L` | 线
`P` | 笔
`T` | 文本
`A` | 画板
`Z` | 快速移动
`Ctrl` `3` | 缩放到所选内容
`I` | 滴管
<!--rehype:className=shortcuts-->
### 界面和查看选项的键
快捷键 | 说明
:- | -
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 缩放以适合
`Ctrl` `1` | 缩放至 `100%`
`Ctrl` `2` | 缩放至 `200%`
`Space` | 平底锅
`Ctrl` `Shift` `Y` | 资产
`Ctrl` `Y` | 图层
`Ctrl` `Shift` `'` | 显示布局网格
`Ctrl` `'` | 显示方形网格
`Ctrl` `Tab` | 在设计和原型模式之间切换
`Up/Down` | 将字段中的值增加或减少 `1`
`Shift` `Up/Down` | 将字段中的值增加或减少 `10`
<!--rehype:className=shortcuts-->
### 设计规范要点
快捷键 | 说明
:- | -
`Ctrl` `+/-` | 快速移动
`Ctrl` `0` | 重置缩放
`(arrows)` | 平底锅
`Shift` `(arrows)` | 更快的锅
`Esc` | 从规范视图转到用户体验流程视图
`Esc` | 在 UX 流视图中从画板上移除焦点
<!--rehype:className=shortcuts-->
### 矢量编辑键
快捷键 | 说明
:- | -
`Enter` | 开始编辑选定的矢量对象
`Esc` | 停止编辑选定的矢量对象
<!--rehype:className=shortcuts-->
### 原型制作的关键
快捷键 | 说明
:- | -
`Ctrl` `A` | 查看原型模式下的所有连接
`Ctrl` `Enter` | 预览
`Ctrl` `Shift` `E` | 在线分享原型
`Left/Right` | 在预览或共享原型中浏览画板
<!--rehype:className=shortcuts-->
另见
--------
- [Keyboard shortcuts for Adobe XD](https://helpx.adobe.com/xd/help/keyboard-shortcuts.html) _(helpx.adobe.com)_

205
docs/android-studio.md Normal file
View File

@ -0,0 +1,205 @@
Android Studio 键盘快捷键
====
Android Studio 软件中 130 个键盘快捷键的可视化备忘单
键盘快捷键
--------
### 一般的
快捷键 | 说明
---|---
`Ctrl` `S` | 保存全部
`Ctrl` `Alt` `Y` | 同步
`Ctrl` `Shift` `F12` | 最小化或最大化编辑器
`Alt` `Shift` `F` | 添加到收藏夹
`Alt` `Shift` `I` | 使用当前配置文件检查当前文件
`Ctrl` <code>\`</code> | 快速切换方案
`Ctrl` `Alt` `S` | 打开设置对话框
`Ctrl` `Alt` `Shift` `S` | 打开项目结构对话框
`Ctrl` `Tab` | 在选项卡和工具窗口之间切换
<!--rehype:className=shortcuts-->
### 导航和搜索
<!--rehype:wrap-class=row-span-3-->
快捷键 | 说明
---|---
`Shift` `Shift` | 搜索所有内容,包括代码和菜单
`Ctrl` `F` | 寻找
`F3` | 找下一个
`Shift` `F3` | 查找上一个
`Ctrl` `R` | 代替
`Ctrl` `Shift` `A` | 查找操作
`Ctrl` `Alt` `Shift` `N` | 按交易品种名称搜索
`Ctrl` `N` | 查找班级
`Ctrl` `Shift` `N` | 查找文件,而不是类
`Ctrl` `Shift` `F` | 在路径中查找
`Ctrl` `F12` | 打开文件结构弹出窗口
`Alt` `Right/Left` | 在打开的编辑器选项卡之间导航
`Ctrl` `Enter` | 跳转到源
`Shift` `F4` | 在新窗口中打开当前编辑器选项卡
`Ctrl` `E` | 最近打开的文件弹出窗口
`Ctrl` `Shift` `E` | 最近编辑的文件弹出窗口
`Ctrl` `Shift` `Backspace` | 转到上次编辑位置
`Ctrl` `F4` | 关闭活动编辑器选项卡
`Esc` | 从工具窗口返回到编辑器窗口
`Shift` `Esc` | 隐藏活动或最后活动的工具窗口
`Ctrl` `G` | 去线
`Ctrl` `H` | 开放式层次结构
`Ctrl` `Shift` `H` | 打开方法层次结构
`Ctrl` `Alt` `H` | 开放调用层级
<!--rehype:className=shortcuts-->
### 编写代码
<!--rehype:wrap-class=row-span-6-->
快捷键 | 说明
---|---
`Alt` `Insert` | 生成代码例如getters、setters、构造函数、新类
`Ctrl` `O` | 覆盖方法
`Ctrl` `I` | 实现方法
`Ctrl` `Alt` `T` | 用 if...else、try...catch 等包围
`Ctrl` `Y` | 删除插入符处的行
`Ctrl` `-` | 折叠当前代码块
`Ctrl` `+` | 展开当前代码块
`Ctrl` `Shift` `-` | 折叠所有代码块
`Ctrl` `Shift` `+` | 展开所有代码块
`Ctrl` `D` | 复制当前行或选择
`Ctrl` `Space` | 基本代码完成
`Ctrl` `Shift` `Space` | 智能代码完成,按预期类型过滤方法和变量列表
`Ctrl` `Shift` `Enter` | 完整声明
`Ctrl` `Q` | 快速文档查找
`Ctrl` `P` | 显示所选方法的参数
`Ctrl` `B` | 直接去报关
`Ctrl` `Alt` `B` | 转到实施
`Ctrl` `U` | 转到超方法或超类
`Ctrl` `Shift` `I` | 打开快速定义查找
`Alt` `1` | 切换项目工具窗口可见性
`F11` | 切换书签
`Ctrl` `F11` | 使用助记符切换书签
`Ctrl` `/` | 注释或取消注释行注释
`Ctrl` `Shift` `/` | 使用块评论评论或取消评论
`Ctrl` `W` | 选择连续递增的代码块
`Ctrl` `Shift` `W` | 将当前选择减少到以前的状态
`Ctrl` `[` | 移动到代码块开始
`Ctrl` `]` | 移动到代码块末尾
`Ctrl` `Shift` `[` | 选择到代码块开始
`Ctrl` `Shift` `]` | 选择到代码块结束
`Ctrl` `Del` | 删除到一个词的末尾
`Ctrl` `Backspace` | 删除到单词的开头
`Ctrl` `Alt` `O` | 优化导入
`Alt` `Enter` | 项目快速修复、显示意图操作和快速修复
`Ctrl` `Alt` `L` | 重新格式化代码
`Ctrl` `Alt` `I` | 自动缩进行
`Tab` | 缩进线
`Shift` `Tab` | 不缩进线
`Ctrl` `Shift` `J` | 智能线路加入
`Ctrl` `Enter` | 智能分线
`Shift` `Enter` | 开始新行
`F2` | 下一个突出显示的错误
`Shift` `F2` | 上一个突出显示的错误
<!--rehype:className=shortcuts-->
### 查看布局
快捷键 | 说明
---|---
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 适应屏幕
`Ctrl` `Shift` `1` | 实际尺寸
<!--rehype:className=shortcuts-->
### 布局编辑器
快捷键 | 说明
---|---
`B` | 在设计和蓝图模式之间切换
`O` | 在人像和风景模式之间切换
`D` | 切换设备
`R` | 强制刷新
`E` | 切换渲染错误面板
`Del` | 删除约束
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 缩放以适合
`Ctrl` `B` | 转到 XML
`Ctrl` `A` | 选择所有组件
`Shift` `(click)` | 选择多个组件
<!--rehype:className=shortcuts-->
### 导航编辑器
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
---|---
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 缩放以适合
`Ctrl` `B` | 转到 XML
`E` | 切换渲染错误面板
`Ctrl` `G` | 分组为嵌套图
`Tab` | 循环浏览目的地
`Ctrl` `A` | 选择所有目的地
`Ctrl` `(click)` | 选择多个目的地
<!--rehype:className=shortcuts-->
### 构建并运行
快捷键 | 说明
---|---
`Ctrl` `F9` | 建造
`Shift` `F10` | 构建并运行
`Ctrl` `F10` | 应用更改并重新启动活动
`Ctrl` `Alt` `F10` | 应用代码更改
<!--rehype:className=shortcuts-->
### 版本控制
快捷键 | 说明
---|---
`Ctrl` `K` | 提交项目到 VCS
`Ctrl` `T` | 从 VCS 更新项目
`Alt` `Shift` `C` | 查看最近的更改
`Alt` <code>\`</code> | 打开 VCS 弹出窗口
<!--rehype:className=shortcuts-->
### 调试
快捷键 | 说明
---|---
`Shift` `F9` | 调试
`F8` | 跨过
`F7` | 踏入
`Shift` `F7` | 智能步入
`Shift` `F8` | 走出去
`Alt` `F9` | 运行到光标处
`Alt` `F8` | 评估表达
`F9` | 恢复程序
`Ctrl` `F8` | 切换断点
`Ctrl` `Shift` `F8` | 查看断点
<!--rehype:className=shortcuts-->
### 重构
快捷键 | 说明
---|---
`F5` | 复制
`F6` | 移动
`Alt` `Del` | 安全删除
`Shift` `F6` | 改名
`Ctrl` `F6` | 更改签名
`Ctrl` `Alt` `N` | 排队
`Ctrl` `Alt` `M` | 提取方法
`Ctrl` `Alt` `V` | 提取变量
`Ctrl` `Alt` `F` | 提取字段
`Ctrl` `Alt` `C` | 提取常量
`Ctrl` `Alt` `P` | 提取参数
<!--rehype:className=shortcuts-->
另见
--------
- [Keyboard shortcuts for Android Studio](https://developer.android.com/studio/intro/keyboard-shortcuts) _(developer.android.com)_

249
docs/aspect-ratio.md Normal file
View File

@ -0,0 +1,249 @@
Aspect Ratio 备忘清单
===
此备忘单列出了一些常见的宽高比及其像素分辨率
入门
----
<!--rehype:body-class=cols-2-->
### 介绍
<!--rehype:wrap-class=col-span-2-->
- 宽高比是屏幕或图像的宽度和高度之间的比率
- 它通常写成由冒号或“x”分隔的两个数字例如16:9 或 16x9
- 这被解释为宽度为 W 像素,高度为每个 H 像素。
- 分辨率是像素数(颜色的各个点)
<!--rehype:className=style-round-->
宽高比列表
--------
### 1080p
<!--rehype:wrap-class=row-span-2-->
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 864 x 1080
1.25 (5:4) | 1350 x 1080
1.33 (4:3) | 1440 x 1080
1.66 (5:3) | 1800 x 1080
1.78 (16:9) | 1920 x 1080
1.85 | 1920 x 1038
1.90 | 1920 x 1011
2.00 | 1920 x 960
2.35 | 1920 x 817
2.37 | 1920 x 810
2.39 | 1920 x 803
2.40 | 1920 x 800
2.44 | 1920 x 787
<!--rehype:className=show-header-->
### 720p
<!--rehype:wrap-class=row-span-2-->
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 576 x 720
1.25 (5:4) | 900 x 720
1.33 (4:3) | 960 x 720
1.66 (5:3) | 1200 x 720
1.78 (16:9) | 1280 x 720
1.85 | 1280 x 692
1.90 | 1280 x 674
2.00 | 1280 x 640
2.35 | 1280 x 545
2.37 | 1280 x 540
2.39 | 1280 x 536
2.40 | 1280 x 533
2.44 | 1280 x 525
<!--rehype:className=show-header-->
### Cinema DCP 4K
纵横比 | 分辨率
:-- | --
Flat (1.85) | 3996 x 2160
Scope (2.39) | 4096 x 1716
Full Container (1.90) | 4096 x 2160
<!--rehype:className=show-header-->
### Cinema DCP 2K
纵横比 | 分辨率
:-- | --
Flat (1.85) | 1998 x 1080
Scope (2.39) | 2048 x 858
Full Container (1.90) | 2048 x 1080
<!--rehype:className=show-header-->
### 8K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 3686 x 4608
1.25 (5:4) | 5760 x 4608
1.33 (4:3) | 6144 x 4608
1.66 (5:3) | 7680 x 4608
1.78 (16:9) | 8192 x 4608
1.85 | 8192 x 4428
1.90 | 8192 x 4320
2.00 | 8192 x 4096
2.35 | 8192 x 3486
2.37 | 8192 x 3456
2.39 | 8192 x 3428
2.40 | 8192 x 3413
2.44 | 8192 x 3357
<!--rehype:className=show-header-->
### 6K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 2765 x 3456
1.25 (5:4) | 4320 x 3456
1.33 (4:3) | 4608 x 3456
1.66 (5:3) | 5760 x 3456
1.78 (16:9) | 6144 x 3456
1.85 | 6144 x 3321
1.90 | 6144 x 3234
2.00 | 6144 x 3072
2.35 | 6144 x 2614
2.37 | 6144 x 2592
2.39 | 6144 x 2571
2.40 | 6144 x 2560
2.44 | 6144 x 2518
<!--rehype:className=show-header-->
### 4K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 2765 x 3456
1.25 (5:4) | 4320 x 3456
1.33 (4:3) | 4608 x 3456
1.66 (5:3) | 5760 x 3456
1.78 (16:9) | 6144 x 3456
1.85 | 6144 x 3321
1.90 | 6144 x 3234
2.00 | 6144 x 3072
2.35 | 6144 x 2614
2.37 | 6144 x 2592
2.39 | 6144 x 2571
2.40 | 6144 x 2560
2.44 | 6144 x 2518
<!--rehype:className=show-header-->
### 3K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 1382 x 1728
1.25 (5:4) | 2160 x 1728
1.33 (4:3) | 2304 x 1728
1.66 (5:3) | 2880 x 1728
1.78 (16:9) | 3072 x 1728
1.85 | 3072 x 1661
1.90 | 3072 x 1620
2.00 | 3072 x 1536
2.35 | 3072 x 1307
2.37 | 3072 x 1296
2.39 | 3072 x 1285
2.40 | 3072 x 1280
2.44 | 3072 x 1259
<!--rehype:className=show-header-->
### 2K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 922 x 1152
1.25 (5:4) | 1440 x 1152
1.33 (4:3) | 1536 x 1152
1.66 (5:3) | 1920 x 1152
1.78 (16:9) | 2048 x 1152
1.85 | 2048 x 1107
1.90 | 2048 x 1078
2.00 | 2048 x 1024
2.35 | 2048 x 871
2.37 | 2048 x 864
2.39 | 2048 x 858
2.40 | 2048 x 853
2.44 | 2048 x 838
<!--rehype:className=show-header-->
### 8K UHD
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 2765 x 3456
1.25 (5:4) | 5400 x 3456
1.33 (4:3) | 5760 x 3456
1.66 (5:3) | 7200 x 3456
1.78 (16:9) | 7680 x 4320
1.85 | 7680 x 4151
1.90 | 7680 x 4042
2.00 | 7680 x 3840
2.35 | 7680 x 3268
2.37 | 7680 x 3240
2.39 | 7680 x 3213
2.40 | 7680 x 3200
2.44 | 7680 x 3148
<!--rehype:className=show-header-->
### 5K
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 2304 x 2880
1.25 (5:4) | 3600 x 2880
1.33 (4:3) | 3840 x 2880
1.66 (5:3) | 4800 x 2880
1.78 (16:9) | 5120 x 2880
1.85 | 5120 x 2768
1.90 | 5120 x 2700
2.00 | 5120 x 2560
2.35 | 5120 x 2179
2.37 | 5120 x 2160
2.39 | 5120 x 2142
2.40 | 5120 x 2133
2.44 | 5120 x 2098
<!--rehype:className=show-header-->
### 4K UHD
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 1728 x 2160
1.25 (5:4) | 2700 x 2160
1.33 (4:3) | 2880 x 2160
1.66 (5:3) | 3600 x 2160
1.78 (16:9) | 3840 x 2160
1.85 | 3840 x 2076
1.90 | 3840 x 2021
2.00 | 3840 x 1920
2.35 | 3840 x 1634
2.37 | 3840 x 1620
2.39 | 3840 x 1607
2.40 | 3840 x 1600
2.44 | 3840 x 1574
<!--rehype:className=show-header-->
### 3K UHD
纵横比 | 分辨率
:-- | --
0.80 (4:5) | 1296 x 1620
1.25 (5:4) | 2025 x 1620
1.33 (4:3) | 2160 x 1620
1.66 (5:3) | 2700 x 1620
1.78 (16:9) | 2880 x 1620
1.85 | 2880 x 1557
1.90 | 2880 x 1516
2.00 | 2880 x 1440
2.35 | 2880 x 1226
2.37 | 2880 x 1215
2.39 | 2880 x 1205
2.40 | 2880 x 1200
2.44 | 2880 x 1180
<!--rehype:className=show-header-->

View File

@ -4,7 +4,7 @@ Bash 备忘清单
这是开始使用 linux bash shell 脚本的快速参考备忘单。
入门
---------------
-----
### hello.sh
@ -837,7 +837,6 @@ if [[ "$1" == '--' ]]; then shift; fi
```
### 检查命令的结果
<!--rehype:wrap-class=col-span-2-->
```bash
if ping -c 1 google.com; then
@ -845,6 +844,73 @@ if ping -c 1 google.com; then
fi
```
### grep 检查
```bash
if grep -q 'foo' ~/.bash_history; then
echo "您过去似乎输入过“foo”"
fi
```
### 写入文件
<!--rehype:wrap-class=row-span-6-->
:-- | --
:-- | --
`cat` | 用于显示文本文件内容,全部输出
`EOF` | `end of file`,表示文本结束符
---
```bash
cat > output.txt <<EOF
this is test eof
this is test eof2
EOF
```
输出 `cat output.txt`
```
this is test eof
this is test eof2
```
追加内容
```bash
cat >>2.txt <<EOF
456
789
EOF
```
`$` 等特殊字符时,须利用转义字符 `\`
```bash
cat > file <<EOF
export ORACLE_SID=yqpt
export PATH=\$PATH:\$ORACLE_HOME/bin
EOF
```
取消变量替换,`EOF` 被加上双引号或者单引号,即可取消变量的替换
```bash
cat << "EOF" > output.sh
echo "This is output"
echo $1
EOF
```
所有TAB键将全部忽略[不能是空格]
```bash
cat << -EOF
echo "This is output"
EOF
```
### 特殊变量
<!--rehype:wrap-class=row-span-2-->
@ -857,15 +923,6 @@ fi
见[特殊参数](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables)。
### grep 检查
<!--rehype:wrap-class=col-span-2-->
```bash
if grep -q 'foo' ~/.bash_history; then
echo "您过去似乎输入过“foo”"
fi
```
### 反斜杠转义
<!--rehype:wrap-class=row-span-2-->
@ -953,6 +1010,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 颜色
----

View File

@ -11,6 +11,8 @@ CocoaPods 备忘清单
```bash
$ sudo gem install cocoapods
# OR
$ brew install cocoapods
```
无 Sudo 安装,不想为此过程授予 `RubyGems` 管理员权限

112
docs/conda.md Normal file
View File

@ -0,0 +1,112 @@
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 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
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

@ -545,6 +545,416 @@ int main() {
}
```
### 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-3-->
> `#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-2-->
> `#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)
{ }
```
#### 多个返回值
```cpp
std::shared_future<T> result;
```
如果要多次获取结果,可以使用`std::shared_future`,其会返回结果的一个**拷贝**。
对于不可拷贝对象,可以在`std::shared_future`中存储对象的指针,而非指针本身。
C++ 预处理器
------------

View File

@ -26,47 +26,34 @@ $ dotnet run
Hello, world!
```
### 变量
### 命名空间
```cs
int intNum = 9;
long longNum = 9999999;
float floatNum = 9.99F;
double doubleNum = 99.999;
decimal decimalNum = 99.9999M;
char letter = 'D';
bool @bool = true;
string site = "jaywcjlove.github.io";
var num = 999;
var str = "999";
var bo = false;
//使用时 using 命名名称
using Test;
//创建:
namespace Test{
class Test_className{
// main方法是程序的主入口
public void Myclass() {
console.writeline("Test")
}
}
}
```
### 原始数据类型
### 访问修饰符
<!--rehype:wrap-class=row-span-2-->
数据类型 | 尺寸 | 范围
:- | - | -
| `int` | 4 bytes | -2^31^ ^to^ 2^31^-1 |
| `long` | 8 bytes | -2^63^ ^to^ 2^63^-1 |
| `float` | 4 bytes | 6 ^to^ 7 decimal digits |
| `double` | 8 bytes | 15 decimal digits |
| `decimal` | 16 bytes | 28 ^to^ 29 decimal digits |
| `char` | 2 bytes | 0 ^to^ 65535 |
| `bool` | 1 bit | true / false |
| `string` | 2 bytes per char | _N/A_ |
<!--rehype:className=show-header-->
### 注释
```cs
// 单行注释
/* 多行
注释 */
// TODO向 Visual Studio 中的任务列表添加注释
/// 用于文档的单行注释
/** 多行 注释
用于文档 **/
```
| 声明的可访问性 | 含义 |
|-----|----------------------|
| `public` | 访问不受限制 |
| `protected` | 访问限于包含类或派生自包含类的类型 (该类内部和继承类中可以访问) |
| `internal` | 访问限于当前程序集 |
| `protected internal` | 访问限于当前程序集或派生自包含类的类型 |
| `private` | 访问限于包含类 |
| `private protected` | 访问限于包含类或当前程序集中派生自包含类的类型,自 C# 7.2 之后可用 |
<!--rehype:className=style-list-->
### 字符串
@ -91,6 +78,42 @@ if(int.TryParse(Console.ReadLine(),out int input))
}
```
### 变量
```cs
int intNum = 9;
long longNum = 9999999;
float floatNum = 9.99F;
double doubleNum = 99.999;
decimal decimalNum = 99.9999M;
char letter = 'D';
bool @bool = true;
string site = "jaywcjlove.github.io";
var num = 999;
var str = "999";
var bo = false;
```
### 注释
```cs
// 单行注释
/*
* 多行
* 注释
*/
// TODO向IDE中的任务列表添加注释VS、Rider都支持
/// XML 单行注释,用于文档
/**
* XML 多行注释,
* 用于文档
*/
```
### 条件判断
```cs
@ -132,6 +155,39 @@ foreach(int num in numbers) {
}
```
C# 数据类型
---------------------
### 原始数据类型
<!--rehype:wrap-class=col-span-2-->
| 关键字 | 名称 | System 别名 | 占用空间Byte | 数据范围 |
| ------ | ------------ | ----------- | ---------- | ---------------------------------------- |
| `bool` | 布尔型 | `Boolean` | 1 | true/false |
| `sbyte` | 有符号字节型 | `SByte` | 1 | -128 ~ 127 |
| `byte` | 字节型 | `Byte` | 1 | 0 ~ 255 |
| `short` | 短整型 | `Int16` | 2 | -32,768 ~ 32,767 |
| `ushort` | 无符号短整型 | `UInt16` | 2 | 0 ~ 65,535 |
| `int` | 整型 | `Int32` | 4 | -2,147,483,648 ~ 2,147,483,647 |
| `uint` | 无符号整型 | `UInt32` | 4 | 0 ~ 4,294,967,295 |
| `long` | 长整型 | `Int64` | 8 | -2^63 ~ 2^63-1 |
| `ulong` | 无符号长整型 | `UInt64` | 8 | 0 ~ 2^64-1 |
| `char` | 字符型 | `Char` | 8 | UTF-16 所编码的字符 |
| `float` | 单精度浮点型 | `Single` | 4 | ±1.5x10^45 ~ ±3.4x10^38 |
| `double` | 双精度浮点型 | `Double` | 8 | ±5.0x10^-324 ~ ±1.7x10^308 |
| `nint` | 指针型 | `IntPtr` | 与指针相同 | 与指针相同(受操作系统和处理器位宽影响) |
| `nuint` | 无符号指针型 | `UIntPtr` | 与指针相同 | 与指针相同(受操作系统和处理器位宽影响) |
<!--rehype:className=show-header-->
### 基本数据类型
关键字 | 名称 | System 别名 | 说明
:------ | ------ | ------ | ------
(除指针型外的全部原始数据类型) | - | - | 原始数据类型都是值类型,基本数据类型包含部分本质上是引用的数据类型
`string` | 字符串 | `String` | 可变长度
`decimal` | 十进制浮点数 | `Decimal` | 适合处理货币等计算16字节长不遵循 IEEE 754 关于浮点数的规则
<!--rehype:className=show-header-->
C# 字符串
----------------
@ -213,6 +269,78 @@ string multiLine = """
Console.WriteLine(multiLine); // => Content begin "Hello World!" /\n<>"" end.
```
### 字符串操作
#### 字符串分割
```cs
string Name = "字A符A串A分A割";
string[] Names=Name.Split(new char[] { 'A' });
//会以A为媒介把字符串分成若干份
for (int i = 0; i < Names.Length; i++)
{
Console.Write(Names[i]);
}
```
#### 字符串截取
```cs
string Str = "字符串截取";
Str = Str.Substring(2, 1);
Console.WriteLine(Str);
//输出结果“串”,意为从第二个下标开始截取一位字符
```
#### 字符串替换
```cs
string Rep = "字符1替换";
Rep = Rep.Replace("1", "串");
Console.WriteLine(Rep);
//会把字符中的 “1”替换成“串”
```
### 逻辑运算
<!--rehype:wrap-class=col-span-2-->
```cs
//或运算, 与运算, 非运算
bool A = true;
bool B = false;
bool Or = A || B; // = A | B
bool And = A && B; // = A & B
bool Not = !A;
// ||,&& 与 |,& 分别为逻辑运算和条件逻辑运算, 两者的区别在于,
// 前者仅在必要时才会计算右侧的值, 后者始终计算右侧的值. 例如:
bool C = false;
bool D = true;
bool CalcD() {
D = !D;
return D;
}
bool E = C && CalcD(); // C: false, D: false, E: false
bool F = C & CalcD(); // C:false, D: true, F: false
// 两种运算方法稍有不同, 计算结果始终相同, 但第二种可能造成其他影响.
//异或运算
bool Xor = A ^ B;
```
C# 中的逻辑运算支持可空布尔类型运算. 注意条件逻辑运算不支持可空布尔类型.
x | y | x & y | x \| y | x ^ y | ! x
:- | - | --- | --- | --- | --
true | true | true | true | false | false
true | false | false | true | true | false
true | null | null | true | null | false
false | true | false | true | true | true
false | false | false | false | false | true
false | null | false | null | null | true
null | true | null | true | null | null
null | false | false | null | null | null
null | null | null | null | null | null
<!--rehype:className=show-header-->
杂项
-----------
@ -221,8 +349,8 @@ Console.WriteLine(multiLine); // => Content begin "Hello World!" /\n<>"" end.
概念 | 中文名 | 定义
:- | -|--
Runtime | 运行时 | 执行给定的已编译代码单元所需的服务集合
Common Language Runtime (CLR) | 通用语言运行库 | 主要定位、加载和托管 .NET 对象。<br/>CLR 还处理内存管理、应用程序托管、线程协调、执行安全检查和其他低级细节
Managed code | 托管代码 | 在 `.NET` 运行时编译和运行的代码。 C#/F#/VB 就是例子
Unmanaged code | 非托管代码 | 直接编译为机器代码且不能由 .NET 运行时直接托管的代码。<br/>不包含空闲内存管理、垃圾收集等。从 C/C++ 创建的 DLL 就是示例
`Runtime` | 运行时 | 执行给定的已编译代码单元所需的服务集合
`Common Language Runtime (CLR)` | 通用语言运行库 | 主要定位、加载和托管 .NET 对象。<br/>CLR 还处理内存管理、应用程序托管、线程协调、执行安全检查和其他低级细节
`Managed code` | 托管代码 | 在 `.NET` 运行时编译和运行的代码。 C#/F#/VB 就是例子
`Unmanaged code` | 非托管代码 | 直接编译为机器代码且不能由 .NET 运行时直接托管的代码。<br/>不包含空闲内存管理、垃圾收集等。从 C/C++ 创建的 DLL 就是示例
<!--rehype:className=show-header-->

View File

@ -13,8 +13,6 @@ CSS 功能丰富,不仅仅是布局页面
#### 外部样式表 `<link>`
`
```html
<link
href="./path/to/stylesheet/style.css"
@ -1470,6 +1468,17 @@ 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)
### 忽略用作间距的换行符 \<br />
```css
@ -1487,6 +1496,7 @@ br + br {
```
### CSS 重置
<!--rehype:wrap-class=row-span-2-->
```css
html {
@ -1501,6 +1511,62 @@ html {
有助于在不同的浏览器之间强制样式一致性,并为样式元素提供干净的盒子
### 设置光标样式
```css
body {
caret-color: red;
}
```
### 设置整个页面灰色
<!--rehype:wrap-style=-webkit-filter: grayscale(.95);-->
```css
html {
-webkit-filter: grayscale(.95);
}
```
上面示例设置了当前卡片灰色
### 使用 unset 而不是重置所有属性
使用 `all` 速记来指定元素的所有属性。将值设置为 `unset` 会将元素的属性更改为其初始值:
```css
button {
all: unset;
}
```
注意:`IE11` 不支持 `all` 和 `unset` 速记
### 超出显示省略号
```css
p {
overflow: hidden;/*超出部分隐藏*/
/* 超出部分显示省略号 */
text-overflow:ellipsis;
/* 规定段落中的文本不进行换行 */
white-space: nowrap;
width: 250px;/*需要配合宽度来使用*/
}
```
### 给正文添加行高
您不需要为每个 `<p>`、`<h*>` 等添加行高。相反,将其添加到正文:
```css
body {
line-height: 1.5;
}
```
这样文本元素可以很容易地从 `body` 继承
### 使用图像作为光标
```css
@ -1624,7 +1690,7 @@ div {
### 定义容器的长宽比
```
```css
div {
aspect-ratio: 1/1
}
@ -1632,6 +1698,265 @@ div {
属性 [aspect-ratio](https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio) 可以非常容易的定义一个容器的长宽比
### 等宽表格单元格
尝试使用 `table-layout: fixed` 以保持单元格宽度相等:
```css
table {
table-layout: fixed;
}
```
### 利用属性选择器来选择空链接
当 `<a>` 元素没有文本内容,但有 `href` 属性的时候,显示它的 `href` 属性:
```css
a[href^="http"]:empty::before {
content: attr(href);
}
```
### 给 “默认” 链接定义样式
给 “默认” 链接定义样式:
```css
a[href]:not([class]) {
color: #008000;
text-decoration: underline;
}
```
通常没有 `class` 属性,以上样式可以甄别它们,而且不会影响其它样式
### 用 rem 调整全局大小;用 em 调整局部大小
<!--rehype:wrap-class=row-span-2-->
在根元素设置基本字体大小后 (`html { font-size: 100%; }`), 使用 em 设置文本元素的字体大小:
```css
h2 {
font-size: 2em;
}
p {
font-size: 1em;
}
```
然后设置模块的字体大小为 rem:
```css
article {
font-size: 1.25rem;
}
aside .module {
font-size: .9rem;
}
```
现在,每个模块变得独立,更容易、灵活的样式便于维护
### 隐藏没有静音、自动播放的影片
这是一个自定义用户样式表的不错的技巧。避免在加载页面时自动播放。如果没有静音,则不显示视频:
```css
video[autoplay]:not([muted]) {
display: none;
}
```
再次,我们利用了 `:not()` 的优点
### 为更好的移动体验,为表单元素设置字体大小
当触发 `<select>` 的下拉列表时为了避免表单元素在移动浏览器iOS Safari 和其它上的缩放加上font-size
```css
input[type="text"],
input[type="number"],
select,
textarea {
font-size: 16px;
}
```
### 使用指针事件来控制鼠标事件
指针事件允许您指定鼠标如何与其触摸的元素进行交互。要禁用按钮上的默认指针事件,例如:
```css
button:disabled {
opacity: .5;
pointer-events: none;
}
```
就这么简单
### 子元素选中父元素
```css
div:has(img) {
background: black;
}
```
设置包含子元素 `img` 的 `div` 元素样式,还可以嵌套:
```css
div:has(h2):has(ul) {
background: black;
}
```
### 在用作间距的换行符上设置 `display: none`
用户使用额外的换行符
```css
br + br {
display: none;
}
```
### 给 `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
ul > li:not(:last-child)::after {
content: ",";
}
```
使列表项看起来像一个真实的逗号分隔列表,使用 `:not()` 伪类,最后一项不会添加逗号
### 图片对齐不变形
```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>
```
另见
---------

View File

@ -17,14 +17,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 +41,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 +142,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
@ -232,10 +233,10 @@ docker network create -d overlay \
| Docker 语法 | 说明 |
|------------|------|
`docker search search_word` | 在 docker hub 中搜索镜像
`docker pull user/image` | 从 docker hub 下载镜像
`docker search search_word` | 在 docker hub 中搜索镜像
`docker pull user/image` | 从 docker hub 下载镜像
`docker login` | 向 docker hub 进行身份验证
`docker push user/image` | 将镜像上传到 docker hub
`docker push user/image` | 将镜像上传到 docker hub
### 镜像仓库命令
<!--rehype:wrap-class=row-span-3-->
@ -281,7 +282,7 @@ $ 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 rmi -f $(docker images -q)` | 删除所有
### 卷 volume
@ -307,12 +308,12 @@ $ docker volume prune
`docker-compose down` | 停止和删除容器、网络、映像和卷
`docker-compose logs` | 查看容器的输出
`docker-compose restart` | 重启所有服务
`docker-compose pull` | 拉取所有图片服务
`docker-compose build` | 构建所有图像服务
`docker-compose pull` | 拉取所有服务的镜像
`docker-compose build` | 构建所有服务的镜像
`docker-compose config` | 验证并查看 Compose 文件
`docker-compose scale <service_name>=<replica>` | 规模特殊服务
`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 作为其命令,删除旧容器
### Docker Services
@ -361,35 +362,35 @@ $ docker volume prune
:- | :-
`attach` | 将本地标准输入、输出和错误流附加到正在运行的容器
`build` | 从 Dockerfile 构建镜像
`commit` | 从容器的更改创建新
`commit` | 从容器的更改创建新
`cp` | 在容器和本地文件系统之间复制文件/文件夹
`create` | 创建一个新容器
`diff` | 检查容器文件系统上文件或目录的更改
`events` | 从服务器获取实时事件
`exec` | 在正在运行的容器中运行命令
`export` | 将容器的文件系统导出为 tar 存档
`history` | 显示像的历史
`images` | 列出
`history` | 显示像的历史
`images` | 列出
`import` | 从 tarball 导入内容以创建文件系统映像
`info` | 显示系统范围的信息
`inspect` | 返回有关 Docker 对象的低级信息
`kill` | 杀死一个或多个正在运行的容器
`load` | 从 tar 存档或 STDIN 加载
`load` | 从 tar 存档或 STDIN 加载
`login` | 登录到 Docker 注册表
`logout` | 从 Docker 注册表中注销
`logs` | 获取容器的日志
`pause` | 暂停一个或多个容器内的所有进程
`port` | 列出容器的端口映射或特定映射
`ps` | 列出容器
`pull` | 从注册表中提取像或存储库
`push` | 将像或存储库推送到注册表
`pull` | 从注册表中提取像或存储库
`push` | 将像或存储库推送到注册表
`rename` | 重命名容器
`restart` | 重启一个或多个容器
`rm` | 移除一个或多个容器
`rmi` | 移除一张或多张图片
`rmi` | 移除一张或多张镜像
`run` | 在新容器中运行命令
`save` | 将一个或多个像保存到 tar 存档(默认流式传输到 STDOUT
`search` | 在 `Docker Hub` 中搜索
`save` | 将一个或多个像保存到 tar 存档(默认流式传输到 STDOUT
`search` | 在 `Docker Hub` 中搜索
`start` | 启动一个或多个停止的容器
`stats` | 显示容器资源使用统计的实时流
`stop` | 停止一个或多个正在运行的容器
@ -431,12 +432,12 @@ $ docker volume prune
--device-read-iops list # 限制设备的读取速率(每秒 IO默认 []
--device-write-bps list # 限制设备的写入速率(每秒字节数)(默认 []
--device-write-iops list # 限制设备的写入速率(每秒 IO默认 []
--disable-content-trust # 跳过像验证(默认为 true
--disable-content-trust # 跳过像验证(默认为 true
--dns list # 设置自定义 DNS 服务器
--dns-option list # 设置 DNS 选项
--dns-search list # 设置自定义 DNS 搜索域
--domainname string # 容器 NIS 域名
--entrypoint string # 覆盖像的默认入口点
--entrypoint string # 覆盖像的默认入口点
-e, --env list # 设置环境变量
--env-file list # 读入环境变量文件
--expose list # 公开一个端口或一系列端口
@ -480,7 +481,7 @@ $ docker volume prune
--privileged # 授予此容器扩展权限
-p, --publish list # 将容器的端口发布到主机
-P, --publish-all # 将所有暴露的端口发布到随机端口
--pull string # 创建前拉取像("always"|"missing"|"never")(默认"missing")
--pull string # 创建前拉取像("always"|"missing"|"never")(默认"missing")
--read-only # 将容器的根文件系统挂载为只读
--restart string # 容器退出时应用的重启策略(默认“否”)
--rm # 容器退出时自动移除
@ -533,7 +534,7 @@ $ docker volume prune
`docker config` | 管理 Docker 配置
`docker container` | 管理容器
`docker context` | 管理上下文
`docker image` | 管理
`docker image` | 管理
`docker manifest` | 管理 Docker 镜像清单和清单列表
`docker network` | 管理网络
`docker node` | 管理 Swarm 节点
@ -550,12 +551,12 @@ $ docker volume prune
### docker images
```bash
-a, --all 显示所有像(默认隐藏中间像)
-a, --all 显示所有像(默认隐藏中间像)
--digests 显示摘要
-f, --filter filter 根据提供的条件过滤输出
--format string 使用 Go 模板打印漂亮的
--format string 使用 Go 模板打印漂亮的
--no-trunc 不要截断输出
-q, --quiet 仅显示像 ID
-q, --quiet 仅显示像 ID
```
Docker 示例
@ -658,6 +659,6 @@ $ 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)*

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.2.2
FROM golang:1.20-alpine3.16 AS build-env
```
### 变量 ENV
@ -214,8 +214,8 @@ Dockerfile 示例
### 服务静态网站的最小 Docker 镜像
```dockerfile
FROM lipanski/docker-static-website:latest
# 使用 .dockerignore 文件来控制像中的内容!
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 镜像多阶段构建

View File

@ -1,7 +1,13 @@
Electron 备忘清单
====
此快速参考备忘单提供了 Electron v21 API 说明和使用示例。
[![NPM version](https://img.shields.io/npm/v/electron.svg?style=flat)](https://www.npmjs.com/package/electron)
[![Downloads](https://img.shields.io/npm/dm/electron.svg?style=flat)](https://www.npmjs.com/package/electron)
[![Repo Dependents](https://badgen.net/github/dependents-repo/electron/electron)](https://github.com/electron/electron/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/electron/electron)
此快速参考备忘单提供了 Electron v21 API 说明和使用示例
<!--rehype:style=padding-top: 12px;-->
入门
----

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

View File

@ -1,7 +1,13 @@
Express 备忘清单
===
这是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架,包含 [Express.js](http://expressjs.com/) 的 API 参考列表和一些示例。
[![NPM version](https://img.shields.io/npm/v/express.svg?style=flat)](https://npmjs.org/package/express)
[![Downloads](https://img.shields.io/npm/dm/express.svg?style=flat)](https://www.npmjs.com/package/express)
[![Repo Dependents](https://badgen.net/github/dependents-repo/expressjs/express)](https://github.com/expressjs/express/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/expressjs/express)
这是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架,包含 [Express.js](http://expressjs.com/) 的 API 参考列表和一些示例
<!--rehype:style=padding-top: 12px;-->
入门
---

155
docs/feds.md Normal file
View File

@ -0,0 +1,155 @@
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-->
[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-->
<!--rehype:class=home-card-->
构建工具
---
[Webpack](http://webpack.github.io/)<!--rehype:target=_blank&style=background: rgb(107 148 216/var(\-\-bg\-opacity));-->
[NPM](https://www.npmjs.com/)<!--rehype:target=_blank&style=background: rgb(203 8 1/var(\-\-bg\-opacity));-->
[Yarn](https://yarnpkg.com/zh-Hans/)<!--rehype:target=_blank&style=background: rgb(33 136 182/var(\-\-bg\-opacity));-->
[pnpm](https://pnpm.io/)<!--rehype:target=_blank&style=background: rgb(246 146 32/var(\-\-bg\-opacity));-->
[Lerna](https://lerna.js.org/)<!--rehype:target=_blank&style=background: rgb(147 51 234/var(\-\-bg\-opacity));-->
[Vitejs](https://cn.vitejs.dev/)<!--rehype:target=_blank&style=background: rgb(188 52 254/var(\-\-bg\-opacity));-->
[Gulp](https://gulpjs.com/)<!--rehype:target=_blank&style=background: rgb(207 70 71/var(\-\-bg\-opacity));-->
[Parcel](https://en.parceljs.org/)<!--rehype:target=_blank&style=background: rgb(192 145 99/var(\-\-bg\-opacity));-->
[Rollup](https://rollupjs.org/guide/en/)<!--rehype:target=_blank&style=background: rgb(239 51 53/var(\-\-bg\-opacity));-->
[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-->
[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-->
<!--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-->
<!--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-->
[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-->
[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-->
[Prettier](https://prettier.io/)<!--rehype:target=_blank&style=background: rgb(197 149 199/var(\-\-bg\-opacity));-->
<!--rehype:class=home-card-->
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-->
[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));-->
<!--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-->
[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-->
[Stylus](http://stylus-lang.com/)<!--rehype:target=_blank&style=background: rgb(126 194 66/var(\-\-bg\-opacity));-->
[Stylelint](https://stylelint.io/)<!--rehype:target=_blank-->
<!--rehype:class=home-card-->
框架类库
---
[React](https://facebook.github.io/react/)<!--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-->
[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-->
<!--rehype:class=home-card-->
在线代码编辑器工具
---
[CodePen](https://codepen.io/)<!--rehype:target=_blank-->
[CodeSandbox](https://codesandbox.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-->
<!--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-->
<!--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-->
<!--rehype:class=home-card-->

View File

@ -581,6 +581,7 @@ $ ffmpeg -f concat -i mylist.txt -c:v copy -c:a flac -strict -2 output.mp4
视频过滤器
---
<!--rehype:body-class=cols-2-->
### 格式
@ -631,7 +632,6 @@ ffmpeg -i 1.mp4 -b:v 548k -vf delogo=x=10:y=10:w=120:h=45:show=1 output.mp4
<!--rehype:className=wrap-text -->
### 创建缩略图
<!--rehype:wrap-class=row-span-2-->
在 10 秒时创建一个缩略图
@ -686,6 +686,7 @@ $ ffmpeg -i 1.mp4 -i test.mp3 \
音频过滤器
---
<!--rehype:body-class=cols-2-->
### 调节音量
@ -718,6 +719,32 @@ $ ffmpeg -i test.mp4 -af "loudnorm=I=-5:LRA=1" out.mp4
$ ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3
```
流处理
---
<!--rehype:body-class=cols-2-->
### 拉流
```bash
# 拉取rtmp流并存储到本地
$ ffmpeg -i "rtsp://127.0.0.1/test" test.mp4
```
### 推流
```bash
# 推送test.mp4到远程
$ ffmpeg -re -i test.mp4 -f flv rtmp://127.0.0.1/test
```
### 转发
<!--rehype:wrap-class=col-span-2-->
```bash
# 拉取流并转发
$ ffmpeg -i "rtsp://127.0.0.1/test" -f mpegts -codec:v mpeg1video http://127.0.0.1/demo
```
另见
---

197
docs/firefox.md Normal file
View File

@ -0,0 +1,197 @@
Firefox 键盘快捷键备忘清单
===
Firefox 中 116 个键盘快捷键的可视化备忘单
火狐浏览器键盘快捷键
------------------
### 导航
快捷键 | 说明
:- | -
`Ctrl` `Left` | 后退
`Ctrl` `Right` | 向前
`Alt` `Home` | 家
`Ctrl` `O` | 打开文件
`Ctrl` `R` | 重新加载
`Ctrl` `Shift` `R` | 重新加载(覆盖缓存)
`Ctrl` `.` | 停止
<!--rehype:className=shortcuts-->
### 当前页面
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Tab` | 聚焦下一个链接或输入字段
`Shift` `Tab` | 聚焦上一个链接或输入字段
`Space` | 下一个屏幕
`Shift` `Space` | 上一个屏幕
`Ctrl` `Down` | 转到页面底部
`Ctrl` `Up` | 转到页面顶部
`F6` | 移动到下一帧
`Shift` `F6` | 移至上一帧
`Ctrl` `P` | 打印
`Ctrl` `S` | 将页面另存为
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 缩放重置
<!--rehype:className=shortcuts-->
### 编辑
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `C` | 复制
`Ctrl` `X` | 剪切
`Backspace` | 删除
`Home` | 转到行首
`End` | 转到行尾
`Ctrl` `V` | 粘贴
`Ctrl` `Shift` `V` | 粘贴(作为纯文本)
`Ctrl` `Shift` `Z` | 重做
`Ctrl` `A` | 全选
`Ctrl` `Z` | 撤消
<!--rehype:className=shortcuts-->
### 历史
快捷键 | 说明
:- | -
`Ctrl` `Shift` `H` | 历史边栏
`Ctrl` `Shift` `Delete` | 最近清除历史记录
<!--rehype:className=shortcuts-->
### 搜索
快捷键 | 说明
:- | -
`Ctrl` `F` | 查询
`Ctrl` `G` | 再找
`Ctrl` `Shift` `G` | 查找上一个
`'` | 仅在链接文本中快速查找
`/` | 快速查找
`Esc` | 关闭查找或快速查找栏
`Ctrl` `K` | 焦点搜索栏
`Ctrl` `Up/Down` | 更改默认搜索引擎
`Alt` `Up/Down` | 查看菜单以切换、添加或管理搜索引擎
<!--rehype:className=shortcuts-->
### 窗口和选项卡
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `W` | 关闭标签
`Ctrl` `Shift` `W` | 关闭窗口
`Ctrl` `Tab` | 按最近使用的顺序循环浏览选项卡
`Ctrl` `Q` | 退出
`Ctrl` `Alt` `Left` | 向左移动一个标签
`Ctrl` `Alt` `Right` | 向右移动一个标签
`Ctrl` `Shift` `PgUp` | 向左移动制表符
`Ctrl` `Shift` `PgDown` | 向右移动选项卡
`Ctrl` `Shift` `Home` | 将 Tab 移动到焦点以开始
`Ctrl` `Shift` `End` | 将 Tab 移动到焦点结束
`Ctrl` `M` | 静音/取消静音音频
`Ctrl` `T` | 新标签
`Ctrl` `N` | 新窗户
`Ctrl` `Shift` `P` | 新建私人窗口
`Alt` `Enter` | 在新前台选项卡中打开地址
`Enter` | 在当前选项卡中打开重点书签或链接
`Ctrl` `Enter` | 在新的前景选项卡中打开重点书签
`Ctrl` `Shift` `Enter` | 在新背景选项卡中打开重点书签
`Ctrl` `Enter` | 在新背景选项卡中打开焦点链接
`Shift` `Enter` | 在新窗口中打开重点书签或链接
`Ctrl` `Shift` `T` | 撤消关闭选项卡
`Ctrl` `Shift` `N` | 撤消关闭窗口
`Ctrl` `1-8` | 选择选项卡 1-8
`Ctrl` `9` | 选择最后一个标签
`Ctrl` `Shift` `X` | 向左或向右移动 URL
<!--rehype:className=shortcuts-->
### 书签
快捷键 | 说明
:- | -
`Ctrl` `Shift` `D` | 为所有标签添加书签
`Ctrl` `D` | 收藏此页
`Ctrl` `B` | 书签侧边栏
`Ctrl` `Shift` `S` | 库窗口(书签)
`(search field in Library)` `Space` | 搜索所有书签
<!--rehype:className=shortcuts-->
### 工具
快捷键 | 说明
:- | -
`Ctrl` `J` | 下载
`Ctrl` `Shift` `A` | 插件
`Ctrl` `Alt` `I` | 切换开发者工具
`Ctrl` `Alt` `K` | 网络控制台
`Ctrl` `Alt` `C` | 检查员
`Ctrl` `Alt` `S` | 调试器
`Shift` `F7` | 样式编辑器
`Shift` `F5` | 剖析器
`Ctrl` `Alt` `E` | 网络
`Shift` `F2` | 开发者工具栏
`Ctrl` `Alt` `M` | 响应式设计视图
`Shift` `F4` | 便笺
`Ctrl` `U` | 页面源
`Ctrl` `Shift` `J` | 浏览器控制台
`Ctrl` `I` | 页面信息
<!--rehype:className=shortcuts-->
### PDF 查看器
快捷键 | 说明
:- | -
`N/J/Right` | 下一页
`P/K/Left` | 上一页
`Ctrl` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 自动缩放
`R` | 顺时针旋转文档
`Ctrl` `R` | 逆时针旋转
`Ctrl` `Alt` `P` | 切换到演示模式
`S` | 选择文本选择工具
`H` | 选择手形工具
`Ctrl` `Alt` `G` | 聚焦页码输入框
<!--rehype:className=shortcuts-->
### 各种各样的
快捷键 | 说明
:- | -
`Ctrl` `Enter` | 完整的 .com 地址
`Shift` `Enter` | 完整的 .net 地址
`Ctrl` `Shift` `Enter` | 完整的 .org 地址
`Shift` `Delete` | 删除选定的自动完成条目
`Ctrl` `Shift` `F` | 切换全屏
`Ctrl` `Alt` `R` | 切换阅读器模式
`F7` | 插入符浏览
`Ctrl` `L` | 选择地址栏
<!--rehype:className=shortcuts-->
### 媒体快捷方式
快捷键 | 说明
:- | -
`Space` | 切换播放/暂停
`Down` | 降低音量
`Up` | 增加音量
`Ctrl` `Down` | 静音
`Ctrl` `Up` | 取消静音
`Left` | 后退 15 秒
`Ctrl` `Left` | 追回 10%
`Right` | 快进 15 秒
`Ctrl` `Right` | 向前寻求 10%
`Home` | 追寻至始
`End` | 求到底
<!--rehype:className=shortcuts-->
另见
--------
- [Keyboard shortcuts for Firefox](https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) _(support.mozilla.org)_

255
docs/flask.md Normal file
View File

@ -0,0 +1,255 @@
Flask 备忘清单
===
本清单对 Flask 的入门进行了简要的概述,以及其常用示例。需要有 `HTML``Python` 基础。
入门
-----
### 相关链接
- [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) _(developer.mozilla.org)_
- [Python](https://www.python.org/) _(python.org)_
- [Flask](https://flask.palletsprojects.com/) _(flask.palletsprojects.com)_
- [Python 备忘清单](./python.md) _(jaywcjlove.github.io)_
### Hello World
<!--rehype:wrap-class=row-span-2-->
#### hello.py
```python
# 导入 Flask 类
from flask import Flask
# 创建应用实例
app = Flask(__name__) # 'Flask' 参数是 应用程序模块 或 包 的名称
# __name__是适用于大多数情况的便捷快捷方式
# 路由 (装饰器)
@app.route('/') # route()装饰器告诉 Flask 什么路径触发下面的功能
def hello():
# 该函数返回我们想要在浏览器中显示的消息内容
return 'Hello World!'
# 默认类型 HTML, 因此字符串中的 HTML 将被浏览器渲染
# 启动服务
if __name__ == '__main__':
app.run()
```
### 运行 `hello.py` 程序
<!--rehype:wrap-class=row-span-2-->
```shell
$ python hello.py
* Serving Flask app 'hello'
* Running on http://127.0.0.1:5000
* Press CTRL+C to quit
```
#### 或
```shell
$ flask --app hello run
* Serving Flask app 'hello'
* Running on http://127.0.0.1:5000
* Press CTRL+C to quit
$ flask run --host=0.0.0.0
```
启用调试模式,使用 `--debug` 选项
```bash
$ flask --app hello --debug run
```
### HTML 转义
```py
from markupsafe import escape
@app.route("/<name>")
def hello(name):
return f"Hello, {escape(name)}!"
```
### 路由
```py
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
```
### 变量规则
<!--rehype:wrap-class=row-span-2-->
```py
from markupsafe import escape
@app.route('/user/<username>')
def show_user_profile(username):
# 显示该用户的用户个人资料
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
# 显示给定id的帖子id是一个整数
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# 在 /path/ 之后显示子路径
return f'Subpath {escape(subpath)}'
```
转换器类型:
:-- | --
:-- | --
`string` | (默认)接受任何没有斜杠的文本
`int` | 接受正整数
`float` | 接受正浮点值
`path` | 像字符串但也接受斜线
`uuid` | 接受 UUID 字符串
### 唯一 URL / 重定向行为
```py
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
```
项目端点的规范 `URL` 有一个尾部斜杠。它类似于文件系统中的文件夹。如果您访问没有尾部斜杠 (`/projects`) 的 `URL``Flask` 会将您重定向到带有尾部斜杠 (`/projects/`) 的规范 `URL`
### URL 建设
```py
from flask import url_for
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return f'{username}\'s profile'
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
```
### HTTP 方法
默认路由仅响应 `GET` 请求。可以使用 `route()` 装饰器的方法参数来处理不同的 `HTTP` 方法
```py
from flask import request
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
```
您还可以将不同方法的视图分成不同的函数。 `Flask` 为每个常见的 `HTTP` 方法提供了一种快捷方式,用于使用 `get()``post()` 等来装饰此类路由
```py
@app.get('/login')
def login_get():
return show_the_login_form()
@app.post('/login')
def login_post():
return do_the_login()
```
### Blueprint
创建蓝图Bp1
```py
from flask import Blueprint, abort, jsonify
# 定义Bp1并定义url前缀为/img
Bp1 = Blueprint('imgBlue', __name__, template_folder='templates', url_prefix='/img')
@Bp1.route('/getimg')
def getImg():
try:
return jsonify(name="img", size="100KB")
except Exception as e:
abort(e)
```
创建蓝图Bp2
```py
from flask import Blueprint, abort, jsonify
# 定义Bp2并定义url前缀为/video
Bp2 = Blueprint('videoBlue', __name__, template_folder='templates', url_prefix='/video')
@Bp2.route('/getvideo')
def getvideo():
try:
return jsonify(name="video", size="100GB")
except Exception as e:
abort(e)
```
在flask app中引用蓝图Bp1和Bp2
```py
from flask import Flask, jsonify
from lantu.img import Bp1
from lantu.video import Bp2
app = Flask(__name__)
# 注册蓝图到app
app.register_blueprint(Bp1)
app.register_blueprint(Bp2)
@app.route('/')
def index():
return jsonify(name='phyger')
if __name__ == '__main__':
app.run(host="127.0.0.1", debug=True)
```
简单测试
```bash
curl http://127.0.0.1:5000/
>> {"name":"phyger"}
curl http://127.0.0.1:5000/img/getimg
>> {"name": "img", "size": "100KB"}
curl http://127.0.0.1:5000/video/getvideo
>> {"name": "video", "size": "100GB"}
```

View File

@ -421,8 +421,6 @@ SizedBox(
在实际开发中Container常常用于对一个组件进行包装修饰。
```dart
// 将Contianer大小固定为100 * 100 背景色为蓝色。
// 把Text包裹在Container中并将其居中
Container(
width: 100,
height: 100,
@ -430,9 +428,10 @@ Container(
alignment: Alignment.center,
child: Text('Hello world'),
),
```
将 `Contianer` 大小固定为 `100 * 100` 背景色为蓝色。把 `Text` 包裹在 `Container` 中,并将其居中
### Column
列布局(Column),可以将多个子组件沿着垂直的方向摆放(竖的摆放)
@ -461,7 +460,6 @@ Column(
行布局(Row),可以将多个组件沿水平的方向摆放。
```dart
// 在同一行摆放3个Button
Row(
children: [
ElevatedButton(
@ -480,12 +478,13 @@ Row(
),
```
在同一行摆放 3 个 `Button`
### Wrap
将子组件从左到右依次排列,当空间不足时自动换行。
```dart
// 显示多个Flutter 的logo并自动换行
Wrap(
children: [
FlutterLogo(),
@ -498,14 +497,14 @@ Wrap(
),
```
显示多个 `Flutter` 的 `logo` 并自动换行
### Stack
Stack 可以将一多个子组件叠在一起显示。堆叠顺序按照children属性中的列表依次堆叠摆放默认将子控件沿左上角对齐。
需要控制子控件位置可以嵌套`Positoned`控件。
```dart
// 依次堆叠300*300的蓝色色块、200*200的黑色色块、
// 100*100的黄色色块
Stack(
children: [
Container(
@ -527,6 +526,8 @@ Stack(
),
```
依次堆叠 `300*300` 的蓝色色块、`200*200` 的黑色色块、`100*100` 的黄色色块
### Positioned
<!--rehype:wrap-class=row-span-2-->
若需要控制Stack中子控件的位置则可以嵌套改控件。
@ -603,6 +604,291 @@ Container(
),
```
### Flex
Flex 的用法与 `Row` 或 `Column` 类似,但只需要额外传入 `direction` 参数
- `Row` 和 `Column` 组件都继承 `Flex` 组件
- 设置 `direction` 为 `Axis.horizontal` 表示水平方向(`Row`),为 `Axis.vertical`则为垂直方向(`Column`)
垂直方向依次摆放3个flutter logo
```dart
Flex(
direction: Axis.vertiacl,
children: [
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
),
```
水平方向依次摆放 3 个 flutter logo
```dart
Flex(
direction: Axis.horizontal,
children: [
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
),
```
### Expaneded
<!--rehype:wrap-class=row-span-2-->
Expanded 用于扩张一个子组件。可以通过 `flex` 属性,用于表示该组件相对其他弹性组件放大的倍数(可以理解为一个权重)。
```dart
// Container 会占满剩余的全部空用空间
Row(
children: [
FlutterLogo(),
Expanded(
child: Container(
child: FlutterLogo(),
color: Colors.green,
),
),
FlutterLogo(),
],
),
// 按照1:2 的比例分配一整行的空间
Row(
children: [
Expanded(
flex: 1,
child: Container(
child: FlutterLogo(),
color: Colors.green,
),
),
Expanded(
flex: 2,
child: Container(
child: FlutterLogo(),
color: Colors.blue,
),
),
],
),
```
### Flexible
<!--rehype:wrap-class=row-span-2-->
`Flexible` 是 `Expanded` 组件的父类。
与 `Expanded` 不同的是,`Flexible` 可以通过 `fit` 属性设置子控件是否必须占满 `Flexibal` 扩展的空间。而 `Expaned` 默认子控件必须占满
```dart
// 如果将fit设置为tight
// 则绿色Container 和蓝色Container大小一样。
// 如果将fit设置为loose
// 则两个Flexible扩展的空间大小是一样的
// 但绿色Container并不会填充整个扩展的空间。
Row(
children: [
Flexible(
flex: 2,
// fit: FlexFit.tight,
child: Container(
child: FlutterLogo(),
color: Colors.green,
),
),
Expanded(
flex: 2,
child: Container(
child: FlutterLogo(),
color: Colors.blue,
),
),
],
),
```
将 `Flexible` 的 `fit` 属性设置为 `tingt`,就等价于使用 `Expanded`
### Spacer
Spacer 用于在布局中留白
```dart
Row(
children: [
Text('Item'),
Spacer(),
FlutterLogo(),
],
),
```
例如,需要文本和图标位于一个行的两端,而中间留白时。就可以使用 `Spacer`
### ListView
`ListView` 是一个支持滚动的列表组件。该组件默认支持上下滑动。
`ListView`的默认构造函数,会立即初始化`children`中的所有子`widget`,无法动态加载。
```dart
ListView(
children: [
Text('1'),
Text('2'),
Text('3'),
Text('4'),
],
),
```
需要动态加载,则可以使用 `ListView.builder()`命名构函数。
```dart
// 动态生成4个Text
ListView.builder(
itemBuilder: (BuildContext context, int index) {
return Text('$index');
},
itemCount: 4,
),
```
需要在对`ListView`中的`Item`添加分割线,则可以借助`ListView.separated()`。
```dart
// separatorBuilder 函数用于在元素之间插入分割线。
// 也可以返回其他widget。该widget会被插入各个元素之间。
ListView.separated(
itemBuilder: (BuildContext context, int index) {
return Text('$index');
},
itemCount: 4,
separatorBuilder: (BuildContext context, int index) {
// 使用Divider widget 画一条粗为5颜色为红色的线
return const Divider(
height: 5,
thickness: 5,
color: Colors.red,
);
},
),
```
### GridView
<!--rehype:wrap-class=col-span-2-->
`GridView`可将元素显示为二维网格状的列表组件,并支持主轴方向滚动。
使用GridView() 构造函数需要传入gridDelegate和children。Flutter中已经提供了两种实现方式分别是:
- `SliverGridDelegateWithFixedCrossAxisCount()` 用于交叉轴方向固定数。
- `SliverGridDelegateWithMaxCrossAxisExtent()` 用于交叉轴方向限制最大长度。
```dart
// 使用SliverGridDelegateWithFixedCrossAxisCount
GridView(
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
children: List.generate(
8,
(index) => Container(
color: Colors.red[index % 8 * 100],
child: Text("index $index"),
)),
),
// 使用SliverGridDelegateWithMaxCrossAxisExtent
GridView(
gridDelegate:
SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 200),
children: List.generate(
8,
(index) => Container(
color: Colors.red[index % 8 * 100],
child: Text("index $index"),
),
),
),
```
`GridView.builder()`命名构造可以实现元素的动态加载,与`ListView.builder()`类似
```dart
GridView.builder(
itemCount: 8,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4),
itemBuilder: (context, index) => Container(
color: Colors.red[index % 8 * 100],
child: Text("index $index"),
),
),
```
`Gridview.count()` 一个简单的构造函数,只需要传入`crossAxisCount`(交叉轴元素的个数)和`children`即可。
```dart
GridView.count(
crossAxisCount: 4, // 每行固定为4个
children: List.generate(
8,
(index) => Container(
color: Colors.red[index % 8 * 100],
child: Text("index $index"),
)),
),
```
`GridView.extent()` 用于设定每个元素在交叉轴方向的最大尺寸。当程序运行在较大屏幕时通常能看到更多的元素,而不是少量元素的放大版。通过传入`maxCrossAxisExtent`,`Gridview`会根据屏幕尺寸自动选择合适的行数量。
```dart
GridView.extent(
maxCrossAxisExtent: 200,
children: List.generate(
8,
(index) => Container(
color: Colors.red[index % 8 * 100],
child: Text("index $index"),
)),
),
```
`GridView.count()`和GridView.extent()`可以看作GridView的语法糖。
### PageView
使用`PageView`可以实现整屏页面滚动,默认为水平方向翻页。与`ListView`类似。
- `pageSnapping`参数可以设置滑动时`Page`停留在任意位置。
- `scrollDirection`参数设置滚动方向(默认为水平方向)。
```dart
PageView(
pageSnapping: false, // 取消页面固定
scrollDirection: Axis.vertical, // 设置为垂直方向滚动
children: [
for (int i = 0; i < 4; i++)
Container(
color: Colors.red[i % 4 * 100],
)
],
),
```
使用`PageView.builder()`命名构造,可以动态加载页面。与`ListView.builder()`类似。
```dart
PageView.builder(
pageSnapping: false,
scrollDirection: Axis.vertical,
itemBuilder: (BuildContext context, int index) => Container(
color: Colors.red[index % 4 * 100],
),
),
```
另见
---

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

@ -395,7 +395,7 @@ $ git log --stat -M
```bash
$ cat ~/.ssh/config
Host gitlab.com
# 直接使用 shadowsocks 提供的 socks5 代理端口
# 直接使用 sh**socks 提供的 socks5 代理端口
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
Host github.com
@ -960,6 +960,41 @@ Host github.com
```
<!--rehype:className=wrap-text-->
git 代码统计
---
### 查看 git 上的个人代码量
- `username` 需要改成自己的
```bash
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 }' -
```
### 统计每个人增删行数
```bash
git log --format='%aN' | sort -u |\
while read name; do echo -en "$name\t";\
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
```
### 查看仓库提交者排名
这里是排名前十,也可以更改排名
```bash
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 10
```
### 提交数统计
```bash
git log --oneline | wc -l
```
Conventional Commmits
----

View File

@ -414,7 +414,7 @@ toJSON(job)
```yml
steps:
...
- name: The job has succeeded
- name: 作业已成功
if: ${{ success() }}
```
@ -423,7 +423,7 @@ steps:
```yml
steps:
...
- name: The job has failed
- name: 作业失败
if: ${{ failure() }}
```
@ -829,6 +829,7 @@ steps:
[`coverage-badges-cli`](https://github.com/jaywcjlove/coverage-badges-cli) | 生成覆盖率徽章(Badges)图片
[`action-ejs`](https://github.com/jaywcjlove/action-ejs) | 基于 ejs 生成 HTML
[`github-action-package`](https://github.com/jaywcjlove/github-action-package) | 修改 JSON 文件内容
[`github-action-read-file`](https://github.com/jaywcjlove/github-action-read-file) | 读取文件内容
[`markdown-to-html-cli`](https://github.com/jaywcjlove/markdown-to-html-cli) | Markdown 转换成 HTML
[`ncipollo/release-action`](https://github.com/ncipollo/release-action) | 创建 `Release`
[`peaceiris/actions-gh-pages`](https://github.com/peaceiris/actions-gh-pages) | 将文件或文件夹内容提交到 `gh-pages` 分支
@ -924,8 +925,273 @@ steps:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
当 `npm` 推送包失败不影响整个流程,可用于自动发包
GitLab CI/CD 迁移到 GitHub Actions
---
### 语法示例
<yel>GitLab CI/CD</yel>
```yml
job1:
variables:
GIT_CHECKOUT: "true"
script:
- echo "Run your script here"
```
GitHub Actions
```yml
jobs:
job1:
steps:
- uses: actions/checkout@v3
- run: echo "Run your script here"
```
### 运行程序
<!--rehype:wrap-class=row-span-2-->
<yel>GitLab CI/CD</yel>
```yml
windows_job:
tags:
- windows
script:
- echo Hello, %USERNAME%!
linux_job: tags:
- linux script:
- echo "Hello, $USER!"
```
GitHub Actions
```yml
windows_job:
runs-on: windows-latest
steps:
- run: echo Hello, %USERNAME%!
linux_job:
runs-on: ubuntu-latest
steps:
- run: echo "Hello, $USER!"
```
在不同的平台上运行作业
### Docker 映像
<yel>GitLab CI/CD</yel>
```yml
my_job:
image: node:10.16-jessie
```
GitHub Actions
```yml
jobs:
my_job:
container: node:10.16-jessie
```
### 条件和表达式语法
<yel>GitLab CI/CD</yel>
```yml
deploy_prod:
stage: deploy
script:
- echo "部署到生产服务器"
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
```
GitHub Actions
```yml
jobs:
deploy_prod:
if: contains( github.ref, 'master')
runs-on: ubuntu-latest
steps:
- run: echo "部署到生产服务器"
```
### Artifacts
<yel>GitLab CI/CD</yel>
```yml
script:
artifacts:
paths:
- math-homework.txt
```
GitHub Actions
```yml
- name: Upload math result for job 1
uses: actions/upload-artifact@v3
with:
name: homework
path: math-homework.txt
```
### 作业之间的依赖关系
<yel>GitLab CI/CD</yel>
```yml
stages:
- build
- test
- deploy
build_a: stage: build script:
- echo "该作业将首先运行"
build_b: stage: build script:
- echo "该作业将首先运行,与 build_a 并行"
test_ab: stage: test script:
- echo "此作业将在 build_a 和 build_b 完成后运行"
deploy_ab: stage: deploy script:
- echo "此作业将在 test_ab 完成后运行"
```
GitHub Actions
```yml
jobs:
build_a:
runs-on: ubuntu-latest
steps:
- run: echo "该作业将首先运行"
build_b:
runs-on: ubuntu-latest
steps:
- run: echo "该作业将首先运行,与 build_a 并行"
test_ab:
runs-on: ubuntu-latest
needs: [build_a,build_b]
steps:
- run: echo "此作业将在 build_a 和 build_b 完成后运行"
deploy_ab:
runs-on: ubuntu-latest
needs: [test_ab]
steps:
- run: echo "此作业将在 test_ab 完成后运行"
```
### 缓存
<yel>GitLab CI/CD</yel>
```yml
image: node:latest
cache: key: $CI_COMMIT_REF_SLUG paths:
- .npm/
before_script:
- npm ci --cache .npm --prefer-offline
test_async: script:
- node ./specs/start.js ./specs/async.spec.js
```
GitHub Actions
```yml
jobs:
test_async:
runs-on: ubuntu-latest
steps:
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
restore-keys: v1-npm-deps-
```
### 数据库和服务容器
<yel>GitLab CI/CD</yel>
```yml
container-job:
variables:
POSTGRES_PASSWORD: postgres
# PostgreSQL 服务容器通信的主机名
POSTGRES_HOST: postgres
# 默认的 PostgreSQL 端口
POSTGRES_PORT: 5432
image: node:10.18-jessie
services:
- postgres
script:
# 执行 package.json 文件中
# 所有依赖项的全新安装
- npm ci
# 运行创建 PostgreSQL 客户端的脚本,
# 用数据填充客户端,并检索数据
- node client.js
tags:
- docker
```
GitHub Actions
```yml
jobs:
container-job:
runs-on: ubuntu-latest
container: node:10.18-jessie
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
steps:
- name: Check out repository code
uses: actions/checkout@v3
# 执行 package.json 文件中
# 所有依赖项的全新安装
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
# 运行创建 PostgreSQL 客户端的脚本,
# 用数据填充客户端,并检索数据
run: node client.js
env:
# PostgreSQL 服务容器通信的主机名
POSTGRES_HOST: postgres
# 默认的 PostgreSQL 端口
POSTGRES_PORT: 5432
```
另见
---
- [Github Actions 学习笔记](https://jaywcjlove.github.io/github-actions) _(jaywcjlove.github.io)_
- [了解 GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions) _(docs.github.com)_
- [从 GitLab CI/CD 迁移到 GitHub Actions](https://docs.github.com/cn/actions/migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions) _(docs.github.com)_

232
docs/github.md Normal file
View File

@ -0,0 +1,232 @@
Github 备忘清单
===
Github.com 上 80 个键盘快捷键和一些搜索技巧的备忘清单
键盘快捷键
--------
### 站点范围的快捷方式
快捷键 | 说明
:- | -
`S` | 聚焦搜索栏
`G` `N` | 转到您的通知
`H` | 打开并关注用户、问题或拉取请求悬浮卡
`Esc` | 当专注于上面时,关闭 hovercard
<!--rehype:className=shortcuts-->
### 资料库
快捷键 | 说明
:- | -
`G` `C` | 转到 `Code` 选项卡
`G` `I` | 转到 `Issues` 选项卡
`G` `P` | 转到拉取请求选项卡
`G` `B` | 转到 `Projects` 选项卡
`G` `W` | 转到 `Wiki` 选项卡
<!--rehype:className=shortcuts-->
### 源代码编辑
快捷键 | 说明
:- | -
`Ctrl` `F` | 开始在文件编辑器中搜索
`Ctrl` `G` | 找下一个
`Ctrl` `Shift` `G` | 查找上一个
`Ctrl` `Shift` `F` | 代替
`Ctrl` `Shift` `R` | 全部替换
`Alt` `G` | 跳转到行
`Ctrl` `Z` | 撤消
`Ctrl` `Y` | 重做
<!--rehype:className=shortcuts-->
### 源码浏览
快捷键 | 说明
:- | -
`T` | 激活文件查找器
`L` | 跳转到代码中的一行
`W` | 切换到新的分支或标签
`Y` | 将 URL 扩展为其规范形式
`I` | 显示或隐藏对差异的评论
`B` | 打开责备视图
<!--rehype:className=shortcuts-->
### 注释
快捷键 | 说明
:- | -
`Ctrl` `B` | 为粗体文本插入 Markdown 格式
`Ctrl` `I` | 插入斜体文本的 Markdown 格式
`Ctrl` `K` | 插入 Markdown 格式以创建链接
`Ctrl` `Shift` `P` | 在编写和预览评论选项卡之间切换
`Ctrl` `Enter` | 提交评论
`Ctrl` `.` | 打开已保存的回复菜单,然后使用已保存的回复自动填充评论字段
`Ctrl` `G` | 插入一个建议
`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-->
快捷键 | 说明
:- | -
`Enter/Space` | 开始移动焦点列
`Esc` | 取消正在进行的移动
`Enter` | 完成正在进行的移动
`Left/H` | 向左移动列
`Ctrl` `Left/H` | 将列移动到最左边的位置
`Right/L` | 向右移动列
`Ctrl` `Right/L` | 将列移动到最右边的位置
`Enter/Space` | 开始移动聚焦卡
`Esc` | 取消正在进行的移动
`Enter` | 完成正在进行的移动
`Down/J` | 向下移动卡片
`Ctrl` `Down/J` | 将卡片移动到列的底部
`Up/K` | 向上移动卡片
`Ctrl` `Up/K` | 将卡片移动到列的顶部
`Left/H` | 将卡片移动到左侧列的底部
`Shift` `Left/H` | 将卡片移动到左侧列的顶部
`Ctrl` `Left/H` | 将卡片移动到最左边一列的底部
`Ctrl` `Shift` `Left/H` | 将卡片移至最左侧列的顶部
`Right` | 将卡片移动到右侧列的底部
`Shift` `Right/L` | 将卡片移动到右侧列的顶部
`Ctrl` `Right/L` | 将卡片移动到最右侧列的底部
`Ctrl` `Shift` `Right/L` | 将卡片移至最右侧列的顶部
<!--rehype:className=shortcuts-->
### 通知
快捷键 | 说明
:- | -
`E/L/Y` | 标记为已读
`Shift` `M` | 静音线程
<!--rehype:className=shortcuts-->
### 网络图
快捷键 | 说明
:- | -
`Left/H` | 向左滚动
`Right/L` | 向右滚动
`Up/K` | 向上滑动
`Down/J` | 向下滚动
`Shift` `Left/H` | 一直向左滚动
`Shift` `Right/L` | 一直向右滚动
`Shift` `Up/K` | 一直向上滚动
`Shift` `Down/J` | 一直向下滚动
<!--rehype:className=shortcuts-->
搜索技巧
---
### 范围搜索
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`org:rails language:ruby` | 指定组织 <pur>`rails`</pur> 和编程语言 <pur>`ruby`</pur>
`repo:torvalds/linux io_uring` | 指定仓库 <pur>`torvalds/linux`</pur> 搜索 <pur>`io_uring`</pur>
`owner:tpope path:*.vim` | 指定拥有者 <pur>`tpope`</pur> 和文件后缀为 <pur>`*.vim`</pur>
`created:"> 2022-10-22" language:C#` | 创建于 <pur>`2022-10-22`</pur> 以后,语言为 <pur>`C#`</pur> 的条件
<!--rehype:className=style-list-->
### 文件路径
<!--rehype:wrap-class=row-span-2-->
:-- | --
:-- | --
`path:__init__.py` | 文件为 <pur>`__init__.py`</pur> 里面的内容搜索
`path:/.*shrc$/` | 文件路径包含 <pur>`.*shrc`</pur> 结尾的文件中搜索内容
`path:/src/*.js` | <pur>`src`</pur> 目录中的 <pur>`.js`</pur> 后缀的文件中搜索内容
<!--rehype:className=style-list-->
### 完全符合
:-- | --
:-- | --
`out of memory` | 文本匹配 <pur>`out of memory`</pur>
### 布尔运算符
:-- | --
:-- | --
`io_uring (language:c OR language:cpp)` | 语言为 <pur>`c`</pur> 或者 <pur>`cpp`</pur> 的文件中搜索 <pur>`io_uring`</pur>
`org:kubernetes NOT repo:kubernetes/api` | 组织为 <pur>`kubernetes`</pur> 排除里面的 <pur>`api`</pur> 仓库进行搜索
<!--rehype:className=style-list-->
### 基于仓库的条件
:-- | --
:-- | --
`stars:100..8000 stars:>10000` | 星星为 <pur>100 ~ 8000</pur><pur>10000</pur> 以上的
`forks:50..100 forks:200 forks:<5` | fork 为 <pur>50 ~ 100</pur> 或者 <pur>200</pur> 或者小于 <pur>5</pur>
`size:35` | 大小为 `35kb`
`pushed:<2022-11-23` | 推送代码时间 <pur>2022-11-23</pur> 之前
`fork:true`, `fork:only` |
`license:mit` | 基于协议 <pur>`mit`</pur> 条件
<!--rehype:className=style-list-->
### 基于 issue 的条件
:-- | --
:-- | --
`state:open`, `state:closed` | <pur>`关闭`</pur> / <pur>`打开`</pur>`issue`
`reason:completed` | <pur>`"not planned"`</pur>, <pur>`reopened`</pur>, <pur>`completed`</pur>
`label:bug` | 标签为 `bug` 的条件
`author:jaywcjlove` | 作者 <pur>`jaywcjlove`</pur> 打开
`mentions:jaywcjlove` | 提及 <pur>`jaywcjlove`</pur> 用户
`assignee:jaywcjlove` | 分配给 <pur>`jaywcjlove`</pur> 用户
`updated:<2022-11-23` | 更新日期之前
<!--rehype:className=style-list-->
### 基于用户的条件
:-- | --
:-- | --
`fullname:jaywcjlove` | 全名 <pur>jaywcjlove</pur>
`location:China` | 位置 <pur>China</pur>
`followers:20..50 followers:>200 followers:<2` | 追随者
`repos:0 repos:<40 repos:>5` | 仓库数量
<!--rehype:className=style-list-->
另见
-----
- [Keyboard shortcuts for Github](https://help.github.com/articles/using-keyboard-shortcuts/) _(help.github.com)_

126
docs/gitlab.md Normal file
View File

@ -0,0 +1,126 @@
GitLab 键盘快捷键 备忘清单
===
GitLab 中 58 个键盘快捷键的可视化备忘单
键盘快捷键
---------
### 全局的
快捷键 | 说明
:- | -
`?` | 显示或隐藏快捷方式参考表
`Shift` `P` | 转到您的项目页面
`Shift` `G` | 转到您的群组页面
`Shift` `A` | 前往您的活动页面
`Shift` `L` | 转到您的里程碑页面
`Shift` `S` | 转到您的摘要页面
`S` | 将光标放在问题或合并请求搜索中
`Shift` `I` | 转到您的问题页面
`Shift` `T` | 转到您的合并请求页面
`P` `B` | 显示或隐藏性能栏
`Up` | 编辑您的最后一条评论,您必须在主题下方的空白文本字段中
`Ctrl` `Shift` `P` | 在文本字段中编辑文本时切换降价预览
<!--rehype:className=shortcuts-->
### 项目
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`G` `P` | 进入项目主页
`G` `V` | 转到项目活动提要
`G` `R` | 转到项目发布列表
`G` `F` | 转到项目文件列表
`T` | 进入项目文件搜索页面
`G` `C` | 转到项目提交列表
`G` `N` | 转到存储库图页面
`G` `D` | 转到存储库图表
`G` `I` | 转到项目问题列表
`I` | 转到新问题页面
`G` `B` | 转到项目问题板列表
`G` `M` | 转到项目合并请求列表
`G` `J` | 转到 CI/CD 作业列表
`G` `L` | 转到项目指标
`G` `E` | 转到项目环境
`G` `K` | 进入项目Kubernetes集群集成页面
`G` `S` | 转到项目片段列表
`G` `W` | 转到项目 wiki如果启用
<!--rehype:className=shortcuts-->
### 问题和合并请求
快捷键 | 说明
:- | -
`E` | 编辑说明
`A` | 变更受让人
`M` | 改变里程碑
`L` | 更改标签
`R` | 开始写评论,如果选择了任何文本,它将被引用
`N` | 移至下一个未解决的讨论,仅合并请求
`P` | 移至先前未解决的讨论,仅合并请求
`]` | 移动到下一个文件,仅合并请求
`[` | 移动到上一个文件,仅合并请求
<!--rehype:className=shortcuts-->
### 项目文件
快捷键 | 说明
:- | -
`Up` | 向上移动选择
`Down` | 向下移动选择
`Enter` | 开放选择
`Esc` | 返回文件列表屏幕,仅在搜索文件时
`Y` | 仅在查看文件时转到文件永久链接
<!--rehype:className=shortcuts-->
### 网络集成开发环境
快捷键 | 说明
:- | -
`Ctrl` `P` | 搜索并打开另一个文件进行编辑
`Ctrl` `Enter` | 提交,在编辑提交消息时
<!--rehype:className=shortcuts-->
### 存储库
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Left` | 向左滚动
`Right` | 向右滚动
`Up` | 向上滑动
`Down` | 向下滚动
`Shift` `Up` | 滚动到顶部
`Shift` `Down` | 滚动到底部
<!--rehype:className=shortcuts-->
### 维基页面
快捷键 | 说明
:- | -
`E` | 编辑维基页面
<!--rehype:className=shortcuts-->
### 过滤搜索
快捷键 | 说明
:- | -
`Ctrl` `Backspace` | 清除整个搜索过滤器
`Alt` `Backspace` | 一次清除一个标记
<!--rehype:className=shortcuts-->
### 史诗
快捷键 | 说明
:- | -
`R` | 开始写评论,如果选择了任何文本,它将被引用
`E` | 编辑说明
`L` | 更改标签
<!--rehype:className=shortcuts-->
另见
----
- [Keyboard shortcuts for GitLab](https://docs.gitlab.com/ee/user/shortcuts.html) _(docs.gitlab.com)_

View File

@ -33,6 +33,8 @@ s1 = "Learn Go!"
// 一次声明多个变量
var b, c int = 1, 2
var d = true
// 匿名赋值
_ , e = 10, 20
```
简短声明
@ -70,7 +72,7 @@ func say(message string) {
多行注释 */
```
### 如果语句
### if 语句
```go
if true {
@ -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)
@ -431,7 +472,7 @@ for {
}
```
Golang 结构和映射
Golang 结构和Maps
--------
### 定义
@ -467,7 +508,7 @@ v := Vertex{X: 1}
您还可以输入字段名
### 映射
### Maps
<!--rehype:wrap-class=row-span-2-->
```go
@ -511,7 +552,7 @@ fmt.Println(plus(1, 2))
fmt.Println(plusPlus(1, 2, 3))
```
### 多返回
### 多返回
```go
func vals() (int, int) {
@ -533,7 +574,7 @@ r1, r2 := func() (string, string) {
fmt.Println(r1, r2)
```
### 命名返回
### 命名返回
```go
func split(sum int) (x, y int) {
@ -546,7 +587,7 @@ fmt.Println(x) // => 7
fmt.Println(y) // => 10
```
### 变量函数
### 可变参数函数
```go
func sum(nums ...int) {
@ -557,10 +598,12 @@ func sum(nums ...int) {
}
fmt.Println(total)
}
sum(1, 2) //=> [1 2] 3
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;-->
杂项
-------------
@ -987,7 +1376,7 @@ Go 命令
`GOOS` | 编译系统
`GOARCH` | 编译arch
`GO111MODULE` | gomod开关
`GOPROXY` | go代理 <https://goproxy.io> <https://goproxy.cn>
`GOPROXY` | go代理 <https://goproxy.io> <https://goproxy.cn> <https://mirrors.aliyun.com/goproxy/>
`GOSSAFUNC` | 生成 `SSA.html` 文件,展示代码优化的每一步 `GOSSAFUNC=func_name go build`
<!--rehype:className=style-list-arrow-->
@ -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)*

246
docs/google-chrome.md Normal file
View File

@ -0,0 +1,246 @@
Google Chrome 键盘快捷键备忘清单
===
谷歌浏览器中 65 个键盘快捷键和 Chrome 开发者工具中 56 个键盘快捷键的可视化备忘单
谷歌浏览器键盘快捷键
---------
<!--rehype:body-class=cols-2-->
### 选项卡和窗口
快捷键 | 说明
:- | -
`Ctrl` `N` | 打开一个新窗口
`Ctrl` `Shift` `N` | 以隐身模式打开新窗口
`Ctrl` `T` | 打开一个新标签,然后跳转到它
`Ctrl` `Shift` `T` | 重新打开上次关闭的选项卡,并跳转到它
`Ctrl` `Tab` | 跳转到下一个打开的标签页
`Ctrl` `Shift` `Tab` | 跳转到上一个打开的标签页
`Ctrl` `1-8` | 跳转到特定选项卡
`Ctrl` `9` | 跳转到最后一个标签
`Alt` `Home` | 在当前选项卡中打开您的主页
`Alt` `Left` | 在当前选项卡中打开历史记录中的上一页
`Alt` `Right` | 在当前选项卡中打开历史记录的下一页
`Ctrl` `W` | 关闭当前标签
`Ctrl` `Shift` `W` | 关闭当前窗口
`Alt` `Space` `N` | 最小化当前窗口
`Alt` `Space` `X` | 最大化当前窗口
`Alt` `F4` | 关闭当前窗口
`Ctrl` `Shift` `Q` | 相当谷歌浏览器
<!--rehype:className=shortcuts-->
### 谷歌浏览器功能
快捷键 | 说明
:- | -
`Alt` `F` | 打开 Chrome 菜单
`Ctrl` `Shift` `B` | 显示或隐藏书签栏
`Ctrl` `Shift` `O` | 打开书签管理器
`Ctrl` `H` | 在新标签页中打开历史记录页面
`Ctrl` `J` | 在新标签页中打开下载页面
`Shift` `Esc` | 打开 Chrome 任务管理器
`Shift` `Alt` `T` | 将焦点置于 Chrome 工具栏中的第一项
`F10` | 将焦点置于 Chrome 工具栏中的最后一项
`F6` | 将焦点切换到未聚焦的对话框(如果显示)
`Ctrl` `F` | 打开查找栏以搜索当前页面
`Ctrl` `G` | 跳转到查找栏搜索的下一个匹配项
`Ctrl` `Shift` `G` | 跳转到查找栏搜索的上一个匹配项
`F12` | 打开开发者工具
`Ctrl` `Shift` `Delete` | 打开清除浏览数据选项
`F1` | 在新标签页中打开 Chrome 帮助中心
`Ctrl` `Shift` `M` | 登录不同的用户或以访客身份浏览
`Alt` `Shift` `I` | 打开反馈表
<!--rehype:className=shortcuts-->
### 地址栏
快捷键 | 说明
:- | -
`(type)` `Enter` | 使用您的默认搜索引擎进行搜索
`(type)` `Tab` | 使用不同的搜索引擎搜索
`Ctrl` `Enter` | 添加 www. 和 .com 到站点名称,并在当前选项卡中打开
`Alt` `Enter` | 打开新标签页并执行 Google 搜索
`Ctrl` `L` | 跳转到地址栏
`Ctrl` `K` | 从页面上的任何位置搜索
`Shift` `Delete` | 从地址栏中删除预测
<!--rehype:className=shortcuts-->
### 网页快捷方式
快捷键 | 说明
:- | -
`Ctrl` `P` | 打开选项以打印当前页面
`Ctrl` `S` | 打开选项以保存当前页面
`Ctrl` `R` | 重新加载当前页面
`Ctrl` `Shift` `R` | 重新加载当前页面,忽略缓存内容
`Esc` | 停止页面加载
`Tab` | 向前浏览可点击的项目
`Shift` `Tab` | 浏览向后移动的可点击项目
`Ctrl` `O` | 在 Chrome 中打开计算机中的文件
`Ctrl` `U` | 显示当前页面不可编辑的 HTML 源代码
`Ctrl` `D` | 将当前网页保存为书签
`Ctrl` `Shift` `D` | 将所有打开的标签保存为新文件夹中的书签
`F11` | 打开或关闭全屏模式
`Ctrl` `+` | 使页面上的所有内容变大
`Ctrl` `-` | 缩小页面上的所有内容
`Ctrl` `0` | 将页面上的所有内容恢复为默认大小
`Space` | 向下滚动网页,一次滚动一个屏幕
`Shift` `Space` | 向上滚动网页,一次滚动一个屏幕
`Home` | 转到页面的顶部
`End` | 转到页面底部
`Shift` `(scroll mouse)` | 在页面上水平滚动
`Ctrl` `Left` | 将光标移动到文本字段中上一个单词的前面
`Ctrl` `Right` | 将光标移动到文本字段中下一个单词的后面
`Ctrl` `Backspace` | 删除文本字段中的前一个词
`Alt` `Home` | 在当前选项卡中打开主页
<!--rehype:className=shortcuts-->
Chrome 开发者工具键盘快捷键
---
### 打开 DevTools
快捷键 | 说明
:- | -
`Ctrl` `Shift` `I` | 打开您上次使用的任何面板
`Ctrl` `Shift` `J` | 打开控制台面板
`Ctrl` `Shift` `C` | 打开元素面板
<!--rehype:className=shortcuts-->
### 全局快捷方式
<!--rehype:wrap-class=row-span-3-->
快捷键 | 说明
:- | -
`F1` | 显示设置
`Ctrl` `]` | 聚焦下一个面板
`Ctrl` `[` | 聚焦上一个面板
`Ctrl` `Shift` `D` | 切换回您上次使用的任何对接位置
`Ctrl` `Shift` `M` | 切换设备模式
`Ctrl` `Shift` `C` | 切换检查元素模式
`Ctrl` `Shift` `P` | 打开命令菜单
`Esc` | 切换抽屉
`Ctrl` `R` | 正常装填
`Ctrl` `Shift` `R` | 硬重载
`Ctrl` `F` | 在当前面板中搜索文本
`Ctrl` `Shift` `F` | 在抽屉中打开“搜索”选项卡
`Ctrl` `P` | 在源面板中打开文件
`Ctrl` `Shift` `+` | 放大
`Ctrl` `-` | 缩小
`Ctrl` `0` | 恢复默认缩放级别
`Ctrl` `O` `!` | 运行片段
<!--rehype:className=shortcuts-->
### 元素面板
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `Z` | 撤消更改
`Ctrl` `Y` | 重做更改
`Up/Down` | 选择当前所选元素上方或下方的元素
`Right` | 展开当前选中的节点
`Left` | 折叠当前选中的节点
`Enter` | 在当前选定的元素上切换编辑属性模式
`Tab` | 进入编辑属性模式后选择下一个属性
`Shift` `Tab` | 进入编辑属性模式后选择上一个属性
`H` | 隐藏当前选中的元素
`F2` | 在当前选定的元素上切换编辑为 HTML 模式
<!--rehype:className=shortcuts-->
### 资源面板
<!--rehype:wrap-class=row-span-2-->
快捷键 | 说明
:- | -
`Ctrl` `\` | 暂停脚本执行(如果正在运行)或恢复(如果暂停)
`Ctrl` `'` | 跳过下一个函数调用
`Ctrl` `;` | 进入下一个函数调用
`Ctrl` `Shift` `;` | 跳出当前函数
`Ctrl` `./,` | 选择当前所选帧下方或上方的调用帧
`Ctrl` `S` | 将更改保存到本地修改
`Ctrl` `Alt` `S` | 保存所有更改
`Ctrl` `G` | 去线
`Alt` `W` | 关闭活动标签
<!--rehype:className=shortcuts-->
### 代码编辑器
快捷键 | 说明
:- | -
`Ctrl` `Del` | 删除最后一个单词中的所有字符,直到光标
`Ctrl` `M` | 转到匹配的括号
`Ctrl` `/` | 切换单行注释
`Ctrl` `D` | 选择光标所在的任何单词的下一个匹配项
`Ctrl` `U` | 取消选择光标所在的任何单词的下一个匹配项
<!--rehype:className=shortcuts-->
### 性能面板
快捷键 | 说明
:- | -
`Ctrl` `E` | 开始或停止录制
`Ctrl` `S` | 保存录音
`Ctrl` `O` | 载入录音
<!--rehype:className=shortcuts-->
### 内存面板
快捷键 | 说明
:- | -
`Ctrl` `E` | 开始或停止录制
<!--rehype:className=shortcuts-->
### 控制台面板
快捷键 | 说明
:- | -
`Tab` | 接受自动完成建议
`Esc` | 拒绝自动完成建议
`Up` | 获取之前的语句
`Down` | 获取下一条语句
`Ctrl` <code>\`</code> | 聚焦控制台
`Ctrl` `L` | 清除控制台
`Shift` `Enter` | 强制多行输入
`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

@ -37,27 +37,28 @@ export HOMEBREW_INSTALL_FROM_API=1
命令 | 说明
:--- :---
`brew install git` | `安装`一个包
`brew reinstall git` | 重新`安装`一个包
`brew install git` | `安装`一个软件
`brew reinstall git` | 重新`安装`一个软件
`brew uninstall git` | `删除`/`卸载`软件包
`brew upgrade git` | 升级包
`brew upgrade git` | 升级一个软件
`brew upgrade` | 升级所有可升级的包
:--- :---
`brew unlink git` | `取消`链接
`brew link git` | 关联
`brew switch git 2.5.0` | 更改版本
`brew unlink git` | 取消软件包的链接
`brew link git` | 链接已有的软件包
`brew switch git 2.5.0` | 切换软件包的版本
:--- :---
`brew list --versions git` | 看看你有什么版本
`brew list --versions git` | 查看安装的软件包及其版本信息
### 更多包命令
命令 | 说明
:--- :---
`brew info git` | 列出版本、注意事项等
`brew cleanup git` | 删除旧版本
`brew edit git` | 编辑此软件包
`brew cat git` | 打印这个软件包
`brew home git` | 打开主页
`brew search git` | 搜索公式
`brew info git` | 显示软件包的版本、依赖、注意事项等信息
`brew cleanup git` | 删除旧版本的软件包及其依赖
`brew edit git` | 编辑此软件包的安装脚本
`brew cat git` | 打印软件包的安装脚本
`brew home git` | 打开此软件包的主页
`brew search git` | 搜索软件包公式并显示相关信息
### Brew Cask 命令
@ -66,20 +67,20 @@ export HOMEBREW_INSTALL_FROM_API=1
`brew install --cask firefox` | 安装火狐浏览器
`brew list --cask` | 列出已安装应用
Cask 命令用于与图形应用程序交互
Cask 命令用于与图形界面应用程序交互,可以安装和管理 macOS 上的图形界面应用程序
### 全局命令
<!--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 update` | 更新 `Homebrew``Cask`
`brew upgrade` | 升级所有可升级的软件包
`brew list` | 列出已安装的软件包
`brew outdated` | 列出需要升级的软件包
`brew doctor` | 诊断 Homebrew 是否存在问题
`brew pin <formula>` | 防止指定软件包升级
`brew unpin <formula>` | 允许指定软件包被升级
### Brew 清理
@ -127,6 +128,27 @@ $ brew info <formula>
`brew help` | 打印帮助信息
`brew help <sub-command>` | 打印子命令的帮助信息
### 依赖
显示`包`的依赖关系。 特定于`包`的其他选项可能是附加到命令
```bash
# 您还可以看到包和依赖关系图
$ brew deps --tree --installed
$ brew deps git # 显示 git 依赖
```
### 卸载 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> ┆ ┆
┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ┆
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
```
另见
--------

328
docs/htmx.md Normal file
View File

@ -0,0 +1,328 @@
\</> htmx 备忘清单
===
[![NPM version](https://img.shields.io/npm/v/htmx.org.svg?style=flat)](https://npmjs.org/package/htmx.org)
[![Downloads](https://img.shields.io/npm/dm/htmx.org.svg?style=flat)](https://www.npmjs.com/package/htmx.org)
[![Repo Dependents](https://badgen.net/github/dependents-repo/bigskysoftware/htmx)](https://github.com/bigskysoftware/htmx/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/bigskysoftware/htmx)
适合初学者的综合 [htmx](https://htmx.org/) 备忘清单
<!--rehype:style=padding-top: 12px;-->
入门
---
### 快速开始
[htmx](https://htmx.org/) 是 [intercooler.js](http://intercoolerjs.org/) 的继承者
```html
<script
src="https://unpkg.com/htmx.org@1.8.4"
>
</script>
<!-- 有一个按钮POST通过AJAX点击 -->
<button
hx-post="/clicked"
hx-swap="outerHTML"
>
点击我
</button>
```
<!--rehype:className=wrap-text-->
`hx-post``hx-swap` 属性告诉 `htmx`
> 当用户单击此按钮时,向 `/clicked` 发出 `AJAX` 请求,并用响应替换整个按钮
```bash
$ npm install htmx.org
```
安装 `htmx` 将导入添加到您的 `index.js`
```js
import 'htmx.org';
```
### 点击编辑提交
<!--rehype:wrap-class=col-span-2-->
有一个按钮,可以从 `/contacts/1/edit` 获取联系人的编辑 UI
```html
<div hx-target="this" hx-swap="outerHTML">
<div><label>名字</label>: Joe</div>
<div><label></label>: Blow</div>
<div><label>邮箱</label>: joe@blow.com</div>
<button hx-get="/contact/1/edit" class="btn btn-primary">
点击编辑
</button>
</div>
```
这将返回一个可用于编辑联系人的表单
```html
<form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">
<div>
<label>名字</label>
<input type="text" name="firstName" value="Joe">
</div>
<div class="form-group">
<label></label>
<input type="text" name="lastName" value="Blow">
</div>
<div class="form-group">
<label>邮箱</label>
<input type="email" name="email" value="joe@blow.com">
</div>
<button class="btn">提交</button>
<button class="btn" hx-get="/contact/1">取消</button>
</form>
```
表单按照通常的 `REST-ful` 模式将 `PUT` 发回 `/contacts/1`
### 删除行
<!--rehype:wrap-class=col-span-2 row-span-2-->
```html
<table class="table delete-row-example">
<thead>
<tr>
<th>Name</th> <th>Email</th> <th>Status</th> <th></th>
</tr>
</thead>
<tbody hx-confirm="Are you sure?" hx-target="closest tr" hx-swap="outerHTML swap:1s">
...
</tbody>
</table>
```
表体有一个 `hx-confirm` 属性来确认删除动作。 它还将所有按钮的目标设置为最近的 `tr`,即最近的表格行(`hx-target` 继承自 DOM 中的父级)`hx-swap` 中的交换规范表示将整个目标换出并收到响应后等待 1 秒。最后一点是为了让我们可以使用以下 CSS
```css
tr.htmx-swapping td {
opacity: 0;
transition: opacity 1s ease-out;
}
```
在交换/删除之前淡出该行。每行都有一个带有 `hx-delete` 属性的按钮,该属性包含发出 `DELETE` 请求以从服务器中删除该行的 `url`。此请求以空内容响应,表明该行应替换为空内容
```html
<tr>
<td>Angie MacDowell</td>
<td>angie@macdowell.org</td>
<td>Active</td>
<td>
<button class="btn btn-danger" hx-delete="/contact/1">
Delete
</button>
</td>
</tr>
```
### 延迟加载
```html
<div hx-get="/graph" hx-trigger="load">
<img
alt="正在加载中..."
class="htmx-indicator"
width="150"
src="/img/bars.svg"/>
</div>
```
当我们加载图表时显示进度指示器。 然后通过稳定的 CSS(`htmx-settling`) 过渡加载图形并逐渐淡入视图
```css
.htmx-settling img {
opacity: 0;
}
img {
transition: opacity 300ms ease-in;
}
```
### hx-swap
:-- | --
:-- | --
`innerHTML` | 默认,替换目标元素的内部 `html`
`outerHTML` | 用响应替换整个目标元素
`beforebegin` | 在目标元素之前插入响应
`afterbegin` | 目标元素的第一个子元素之前插入响应
`beforeend` | 目标元素的最后一个子元素之后插入响应
`afterend` | 在目标元素之后插入响应
`delete` | 无论响应如何,都删除目标元素
`none` | 不附加来自响应的内容 <br />_(带外项目仍将被处理)_
<!--rehype:className=left-align-->
API 参考
---
<!--rehype:body-class=cols-2-->
### 核心属性参考
属性 | 说明
:- | --
`hx-boost` | 添加或删除链接和表单的[渐进增强](https://en.wikipedia.org/wiki/Progressive_enhancement)
`hx-get` | 向指定的 URL 发出 `GET`
`hx-post` | 向指定的 URL 发出 `POST`
`hx-push-url` | 将 URL 推入浏览器地址栏,创建一个新的历史条目
`hx-select` | 从响应中选择要换入的内容
`hx-select-oob` | 从带外(目标以外的某个地方)的响应中选择要换入的内容
`hx-swap` | 控制内容的交换方式(`outerHTML``beforeEnd``afterend`...)
`hx-swap-oob` | 将响应中的内容标记为带外(应该在目标以外的地方交换)
`hx-target` | 指定要交换的目标元素
`hx-trigger` | 指定触发请求的事件
`hx-vals` | 向参数添加值以随请求一起提交(JSON 格式)
<!--rehype:className=left-align-->
使用 htmx 时最常用的属性
### 附加属性参考
<!--rehype:wrap-class=row-span-2-->
属性 | 说明
:- | --
`hx-confirm` | 在发出请求之前显示一个 `confim()` 对话框
`hx-delete` | 向指定的 URL 发出 `DELETE`
`hx-disable` | 禁用给定节点和任何子节点的 htmx 处理
`hx-disinherit` | 控制和禁用子节点的自动属性继承
`hx-encoding` | 更改请求编码类型
`hx-ext` | 用于此元素的扩展
`hx-headers` | 添加到将与请求一起提交的标头
`hx-history-elt` | 在历史导航期间要快照和恢复的元素
`hx-include` | 在请求中包含额外数据
`hx-indicator` | 在请求期间放置 `htmx-request` 类的元素
`hx-params` | 过滤将与请求一起提交的参数
`hx-patch` | 向指定的 URL 发出 PATCH
`hx-preserve` | 指定在请求之间保持不变的元素
`hx-prompt` | 在提交请求之前显示一个 `prompt()`
`hx-put` | 向指定的 URL 发出 PUT
`hx-replace-url` | 替换浏览器地址栏中的 URL
`hx-request` | 配置请求的各个方面
`hx-sse` | 已移至分机。 [旧版本的文档](https://htmx.org/attributes/hx-sse)
`hx-sync` | 控制不同元素发出的请求如何同步
`hx-validate` | 强制元素在请求之前验证自己
~~`hx-vars`~~ | 将值动态添加到参数以随请求提交(已弃用,请使用 `hx-vals`)
`hx-ws` | 已移至分机。[旧版本的文档](https://htmx.org/attributes/hx-ws)
<!--rehype:className=left-align-->
列出了 htmx 中可用的所有其他属性
### CSS 类参考
Class | 说明
:- | --
`htmx-added` | 在交换之前应用于新的内容,在它被解决之后移除
`htmx-indicator` | 一个动态生成的类,当存在 `htmx-request` 类时将切换可见<br /> _(不透明度:`1`)_
`htmx-request` | 在请求进行时应用于元素或使用 `hx-indicator` 指定的元素
`htmx-settling` | 内容交换后应用于目标,内容确定后删除。<br /> _可以通过 `hx-swap` 修改持续时间_
`htmx-swapping` | 在交换任何内容之前应用于目标,在交换之后移除。<br /> _可以通过 `hx-swap` 修改持续时间_
### 事件参考
<!--rehype:wrap-class=row-span-3-->
事件 | 说明
:- | --
`htmx:abort` | 将此事件发送到元素以中止请求
`htmx:afterOnLoad` | AJAX 请求完成处理成功响应后触发
`htmx:afterProcessNode` | 在 htmx 初始化节点后触发
`htmx:afterRequest` | AJAX 请求完成后触发
`htmx:afterSettle` | DOM 稳定后触发
`htmx:afterSwap` | 换入新内容后触发
`htmx:beforeOnLoad` | 在任何响应处理发生之前触发
`htmx:beforeProcessNode` | 在 htmx 初始化节点之前触发
`htmx:beforeRequest` | 在发出 AJAX 请求之前触发
`htmx:beforeSwap` | 在交换完成之前触发,允许您配置交换
`htmx:beforeSend` | 在发送 ajax 请求之前触发
`htmx:configRequest` | 在请求之前触发,允许您自定义参数、标头
`htmx:confirm` | 在元素上发生触发器后触发<br /> _允许您取消(或延迟)发出 AJAX 请求_
`htmx:historyCacheError` | 在缓存写入期间因错误而触发
`htmx:historyCacheMiss` | 在历史子系统中的缓存未命中时触发
`htmx:historyCacheMissError` | 远程检索不成功时触发
`htmx:historyCacheMissLoad` | 在成功的远程检索时触发
`htmx:historyRestore` | 当 htmx 处理历史恢复操作时触发
`htmx:beforeHistorySave` | 在内容保存到历史缓存之前触发
`htmx:load` | 当新内容添加到 DOM 时触发
`htmx:noSSESourceError` | 当元素在其触发器中引用 SSE 事件<br/> _但未定义父 SSE 源时触发_
`htmx:onLoadError` | htmx中onLoad处理异常时触发
`htmx:oobAfterSwap` | 在交换了一个带元素之后触发
`htmx:oobBeforeSwap` | 在带外元素交换完成之前触发,允许您配置交换
`htmx:oobErrorNoTarget` | 当带外元素在当前 DOM 中没有匹配的 ID 时触发
`htmx:prompt` | 显示提示后触发
`htmx:pushedIntoHistory` | 在 url 被推送到历史记录后触发
`htmx:responseError` | 当发生 HTTP 响应错误<br/> _(非 200 或 300 响应代码)时触发_
`htmx:sendError` | 当网络错误阻止 HTTP 请求发生时触发
`htmx:sseError` | 当 SSE 源发生错误时触发
`htmx:swapError` | 在交换阶段发生错误时触发
`htmx:targetError` | 指定无效目标时触发
`htmx:timeout` | 发生请求超时时触发
`htmx:validation:validate` | 在验证元素之前触发
`htmx:validation:failed` | 当元素验证失败时触发
`htmx:validation:halted` | 当请求由于验证错误而停止时触发
`htmx:xhr:abort` | 当 `ajax` 请求中止时触发
`htmx:xhr:loadend` | `ajax` 请求结束时触发
`htmx:xhr:loadstart` | `ajax` 请求开始时触发
`htmx:xhr:progress` | 在支持进度事件的 `ajax` 请求期间定期触发
### JavaScript API 参考
方法 | 说明
:- | --
`htmx.addClass()` | 向给定元素添加一个类
`htmx.ajax()` | 发出一个 htmx 风格的 ajax 请求
`htmx.closest()` | 找到与选择器匹配的给定元素的最近父级
`htmx.config` | 保存当前 htmx 配置对象的属性
`htmx.createEventSource` | 包含为 htmx 创建 SSE EventSource 对象的函数的属性
`htmx.createWebSocket` | 包含为 htmx 创建 WebSocket 对象的函数的属性
`htmx.defineExtension()` | 定义一个 htmx 扩展
`htmx.find()` | 查找与选择器匹配的单个元素
`htmx.findAll()` \| `htmx.findAll(elt, selector)` | 查找与给定选择器匹配的所有元素
`htmx.logAll()` | 安装将记录所有 htmx 事件的记录器
`htmx.logger` | 设置为当前记录器的属性(默认为空)
`htmx.off()` | 从给定元素中删除事件侦听器
`htmx.on()` | 在给定元素上创建事件侦听器,并返回它
`htmx.onLoad()` | 为 htmx:load 事件添加回调处理程序
`htmx.parseInterval()` | 将间隔声明解析为毫秒值
`htmx.process()` | 处理给定元素及其子元素,连接任何 htmx 行为
`htmx.remove()` | 删除给定的元素
`htmx.removeClass()` | 从给定元素中删除一个类
`htmx.removeExtension()` | 删除一个 htmx 扩展
`htmx.takeClass()` | 从给定元素的其他元素中获取一个类
`htmx.toggleClass()` | 从给定元素切换一个类
`htmx.trigger()` | 在元素上触发事件
`htmx.values()` | 返回与给定元素关联的输入值
### 请求标头参考
标头 | 说明
:- | --
`HX-Boosted` | 表示请求是通过使用 `hx-boost` 的元素发出的
`HX-Current-URL` | 浏览器的当前 `URL`
`HX-History-Restore-Request` | 如果请求是在本地历史缓存未命中后进行历史恢复,则为 `true`
`HX-Prompt` | 用户对 `hx` 提示的响应
`HX-Request` | 总是 `true`
`HX-Target` | 目标元素的 id(如果存在)
`HX-Trigger-Name` | 触发元素的名称(如果存在)
`HX-Trigger` | 触发元素的 id(如果存在)
### 响应标头参考
标头 | 说明
:- | --
[`HX-Location`](https://htmx.org/headers/hx-location) | 允许您执行不执行整页重新加载的客户端重定向
[`HX-Push-Url`](https://htmx.org/headers/hx-push-url) | 将一个新的 `url` 推入历史堆栈
`HX-Redirect` | 可用于将客户端重定向到新位置
`HX-Refresh` | 如果设置为 `true`,客户端将完全刷新页面
[`HX-Replace-Url`](https://htmx.org/headers/hx-replace-url) | 替换地址栏中的当前 `URL`
`HX-Reswap` | 允许您指定如何交换响应<br /> _有关可能的值请参阅 [`hx-swap`](https://htmx.org/attributes/hx-swap)_
`HX-Retarget` | 将内容更新的目标更新为页面上不同元素的 CSS 选择器
[`HX-Trigger`](https://htmx.org/headers/hx-trigger) | 允许您触发客户端事件<br /> _请[参阅文档](https://htmx.org/headers/hx-trigger)以获取更多信息_
[`HX-Trigger-After-Settle`](https://htmx.org/headers/hx-trigger) | 允许您触发客户端事件<br /> _请[参阅文档](https://htmx.org/headers/hx-trigger)以获取更多信息_
[`HX-Trigger-After-Swap`](https://htmx.org/headers/hx-trigger) | 允许您触发客户端事件<br /> _请[参阅文档](https://htmx.org/headers/hx-trigger)以获取更多信息_

195
docs/intelli-j-idea.md Normal file
View File

@ -0,0 +1,195 @@
IntelliJ IDEA 键盘快捷键
===
IntelliJ IDEA 是一款非常优秀的 Java IDE它的大部分命令都有快捷键让你的手不离开键盘
IDEA Windows 和 Linux 键盘映射
---
### 编辑
<!--rehype:wrap-class=row-span-5-->
快捷键 | 说明
:-- | --
`Ctrl` `Space`| 基本代码完成
`Ctrl` `Shift` `Space`| 智能代码完成
`Ctrl` `Shift` `Enter`| 完整声明
`Ctrl` `P`| 参数信息
`Ctrl` `Q`| 快速文档查找
`Shift` `F1`| 外部文档
`Ctrl` `hover`| 简介
`Ctrl` `F1`| 插入符号处的错误或警告
`Alt` `Insert`| 生成代码
`Ctrl` `O`| 覆盖方法
`Ctrl` `I`| 实现方法
`Ctrl` `Alt` `T`| 环绕着
`Ctrl` `/`| 注释或取消注释行
`Ctrl` `Shift` `/`| 评论或取消评论块
`Ctrl` `W`| 选择连续递增的代码块
`Ctrl` `Shift` `W`| 将当前选择减少到以前的状态
`Alt` `Q`| 上下文信息
`Alt` `Enter`| 显示意图操作和快速修复
`Ctrl` `Alt` `L`| 重新格式化代码
`Ctrl` `Alt` `O`| 优化导入
`Ctrl` `Alt` `I`| 自动缩进行
`Tab`| 缩进所选行
`Shift` `Tab`| 取消缩进所选行
`Ctrl` `X`| 将当前行或选定的块剪切到剪贴板
`Ctrl` `C`| 将当前行或选定的块复制到剪贴板
`Ctrl` `V`| 从剪贴板粘贴
`Ctrl` `Shift` `V`| 从最近的缓冲区粘贴
`Ctrl` `D`| 复制当前行或选定的块
`Ctrl` `Y`| 删除插入符处的行
`Ctrl` `Shift` `J`| 智能线路加入
`Ctrl` `Enter`| 智能分线
`Shift` `Enter`| 开始新行
`Ctrl` `Shift` `U`| 在插入符号或选定块处切换单词的大小写
`Ctrl` `Shift` `]` _/_ `[`| 选择直到代码块结束/开始
`Ctrl` `Backspace`| 删除到词尾/开头
`Ctrl` `+` _/_ `-`| 展开/折叠代码块
`Ctrl` `Shift` `+`| 展开全部
`Ctrl` `Shift` `-`| 全部收缩
`Ctrl` `F4`| 关闭活动编辑器选项卡
<!--rehype:className=shortcuts-->
### 使用搜索
快捷键 | 说明
:-- | --
`Alt` `F7` _/_ `Ctrl` `F7`| 查找用法/在文件中查找用法
`Ctrl` `Shift` `F7`| 突出显示文件中的用法
`Ctrl` `Alt` `F7`| 显示用法
<!--rehype:className=shortcuts-->
### 导航
<!--rehype:wrap-class=row-span-4-->
快捷键 | 说明
:-- | --
`Ctrl` `N`| 去 class
`Ctrl` `Shift` `N`| 转到文件
`Ctrl` `Alt` `Shift` `N`| 转到符号
`Alt` `Right` _/_ `Left`| 转到下一个/上一个编辑器选项卡
`F12`| 返回上一个工具窗口
`Esc`| 转到编辑器
`Shift` `Esc`| 隐藏活动或最后一个活动窗口
`Ctrl` `Shift` `F4`| 关闭活动运行,消息...
`Ctrl` `G`| 导航到行:列
`Ctrl` `E`| 最近的文件弹出窗口
`Ctrl` `Alt` `Left` _/_ `Right`| 向后/向前导航
`Ctrl` `Shift` `Backspace`| 导航到上次编辑位置
`Alt` `F1`| 在任何视图中选择当前文件或符号
`Ctrl` `B` _/_ `Ctrl` `Click`| 去申报
`Ctrl` `Alt` `B`| 转到实施
`Ctrl` `Shift` `I`| 打开快速定义查找
`Ctrl` `Shift` `B`| 转到类型声明
`Ctrl` `U`| 转到超方法/超类
`Alt` `Up` _/_ `Down`| 转到上一个/下一个方法
`Ctrl` `]/[`| 移动到代码块结束/开始
`Ctrl` `F12`| 文件结构弹出窗口
`Ctrl` `H`| 类型层次结构
`Ctrl` `Shift` `H`| 方法层次
`Ctrl` `Alt` `H`| 调用层级
`F2` _/_ `Shift` `F2`| 下一个/上一个突出显示的错误
`F4` _/_ `Ctrl` `Enter`| 编辑源/查看源
`Alt` `Home`| 显示导航栏
`F11`| 切换书签
`Ctrl` `F11`| 使用助记符切换书签
`Ctrl` `0...9`| 转到编号书签
`Shift` `F11`| 显示书签
<!--rehype:className=shortcuts-->
### 搜索/替换
快捷键 | 说明
:-- | --
`Double Shift`| 到处搜索
`Ctrl` `F`| 寻找
`F3` `Shift` `F3`| 查找下一个/查找上一个
`Ctrl` `R`| 代替
`Ctrl` `Shift` `F`| 在路径中查找
`Ctrl` `Shift` `R`| 在路径中替换
<!--rehype:className=shortcuts-->
### 实时模板
快捷键 | 说明
:-- | --
`Ctrl` `Alt` `J` | 用实时模板环绕
`Ctrl` `J` | 插入实时模板
`iter` | 按照Java SDK 1.5风格迭代
`inst` | 使用 instanceof 检查对象类型并将其向下转换
`itco` | 迭代 java.util.Collection 的元素
`itit` | 迭代 java.util.Iterator 的元素
`itli` | 迭代 java.util.List 的元素
`psf` | 公共静态决赛
`thr` | 扔新的
<!--rehype:className=shortcuts-->
### 重构
快捷键 | 说明
:-- | --
`F5` | 复制
`F6` | 移动
`Alt` `Delete` | 安全删除
`Shift` `F6` | 改名
`Ctrl` `F6` | 更改签名
`Ctrl` `Alt` `N` | 排队
`Ctrl` `Alt` `M` | 提取方法
`Ctrl` `Alt` `V` | 提取变量
`Ctrl` `Alt` `F` | 提取字段
`Ctrl` `Alt` `C` | 提取常量
`Ctrl` `Alt` `P` | 提取参数
<!--rehype:className=shortcuts-->
### 调试
快捷键 | 说明
:-- | --
`F8/F7` | 跨过/进入
`Shift` `F7` _/_ `Shift` `F8` | 智能步入/走出
`Alt` `F9` | 运行到光标处
`Alt` `F8` | 评估表达
`F9` | 恢复程序
`Ctrl` `F8` | 切换断点
`Ctrl` `Shift` `F8` | 查看断点
<!--rehype:className=shortcuts-->
### 编译运行
快捷键 | 说明
:-- | --
`Ctrl` `F9` | 做项目
`Ctrl` `Shift` `F9` | 编译选定的文件、包或模块
`Alt` `Shift` `F10` _/_ `F9` | 选择配置并运行/和调试
`Shift` `F10` _/_ `F9` | 运行/调试
`Ctrl` `Shift` `F10` | 从编辑器运行上下文配置
<!--rehype:className=shortcuts-->
### VCS/本地历史
快捷键 | 说明
:-- | --
`Ctrl` `K` | 提交项目到 VCS
`Ctrl` `T` | 从 VCS 更新
`Alt` `Shift` `C` | 查看最近的更改
`Alt` <kbd>\`</kbd> | VCS 操作弹出窗口
<!--rehype:className=shortcuts-->
### 一般的
快捷键 | 说明
:-- | --
`Alt` `0...9` | 打开相应的工具窗口
`Ctrl` `S` | 保存全部
`Ctrl` `Alt` `Y` | 同步
`Ctrl` `Shift` `F12` | 切换最大化编辑器
`Alt` `Shift` `F` | 添加到收藏夹
`Alt` `Shift` `I` | 检查当前文件
`Ctrl` <kbd>\`</kbd> | 快速切换电流方案
`Ctrl` `Alt` `S` | 打开设置对话框
`Ctrl` `Alt` `Shift` `S` | 打开项目结构对话框
`Ctrl` `Shift` `A` | 寻找行动
`Ctrl` `Tab` | 在工具和选项卡之间切换
<!--rehype:className=shortcuts-->

779
docs/iptables.md Normal file
View File

@ -0,0 +1,779 @@
iptables 备忘清单
====
iptables 是一个配置 Linux 内核防火墙的命令行工具,是 [netfilter](https://en.wikipedia.org/wiki/Netfilter) 项目的一部分。这个快速参考备忘单显示了它的常用命令使用清单
入门
---
### 介绍
iptables 使用三个不同的链来允许或阻止流量:输入(input)、输出(output)和转发(forward)
- 输入(input) —— 此链用于控制传入连接的行为
- 输出(output) —— 此链用于传出连接
- 转发(forward) —— 这条链用于传入的连接,这些连接实际上不是在本地传递的,比如路由和 NATing
### 安装 iptables
CentOS 7 上默认安装了 firewalld 作为防火墙,使用 iptables 建议关闭并禁用 firewalld。
```bash
$ systemctl stop firewalld
$ systemctl disable firewalld
```
安装 iptables
```bash
$ yum install -y iptables-services
```
### 服务管理
```bash
$ systemctl status iptables # 查看服务状态
$ systemctl enable iptables # 启用服务
$ systemctl disable iptables # 禁用服务
$ systemctl start iptables # 启动服务
$ systemctl restart iptables # 重启服务
$ systemctl stop iptables # 关闭服务
```
### 命令参数
<!--rehype:wrap-class=row-span-3-->
基本语法:
```bash
$ iptables(选项)(参数)
```
---
参数 | 作用
:- | --
`-P` | 设置默认策略: <br/>_iptables -P INPUT (DROP_
`-F` | 清空规则链
`-L` | 查看规则链
`-A` | 在规则链的末尾加入新规则
`-I` | `num` 在规则链的头部加入新规则
`-D` | `num` 删除某一条规则
`-s` | 匹配来源地址 `IP/MASK` <br/>加叹号"!"表示除这个 `IP`
`-d` | 匹配目标地址
`-i` | 网卡名称 匹配从这块网卡流入的数据
`-o` | 网卡名称 匹配从这块网卡流出的数据
`-p` | 匹配协议,如 tcp,udp,icmp
`--dport num` | 匹配目标端口号
`--sport num` | 匹配来源端口号
---
```bash
$ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
```
<!--rehype:className=wrap-text-->
### 开始配置规则
默认情况下,所有链都配置为接受规则,因此在强化过程中,建议从拒绝所有配置开始,然后只打开需要的端口:
```bash
$ iptables --policy INPUT DROP
$ iptables --policy OUTPUT DROP
$ iptables --policy FORWARD DROP
```
### 删除/插入规则
<!--rehype:wrap-class=row-span-2-->
按链条和编号删除规则
```bash
$ iptables -D INPUT 10
```
按规范删除规则
```bash
$ iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
```
<!--rehype:className=wrap-text-->
刷新所有规则,删除所有链,并接受所有
```bash
$ iptables -P INPUT ACCEPT
$ iptables -P FORWARD ACCEPT
$ iptables -P OUTPUT ACCEPT
$ iptables -t nat -F
$ iptables -t mangle -F
$ iptables -F
$ iptables -X
```
---
```bash
# 冲洗所有链
$ iptables -F
# 刷新单链
$ iptables -F INPUT
# 插入规则
$ iptables -I INPUT 2 -s 202.54.1.2 -j DROP
```
### 显示规则
详细打印出所有活动的 `iptables` 规则
```bash
$ iptables -n -L -v
```
...具有行号的相同输出:
```bash
$ iptables -n -L -v --line-numbers
```
最后,相同的数据输出但与 `INPUT`/`OUTPUT` 链相关:
```bash
$ iptables -L INPUT -n -viptables -L OUTPUT -n -v --line-numbers
```
<!--rehype:className=wrap-text-->
### 列出特定链的规则
```bash
$ iptables -L INPUT
# 具有规则规范的相同数据:
$ iptables -S INPUT
# 包含数据包计数的规则列表
$ iptables -L INPUT -v
```
### 保存规则
```bash
# 在基于 Debian 的系统上
$ netfilter-persistent save
# 在基于 RedHat 的系统上
$ service iptables save
```
iptables 示例
---
<!--rehype:body-class=cols-2-->
### 清空当前的所有规则和计数
```bash
$ iptables -F # 清空所有的防火墙规则
$ iptables -X # 删除用户自定义的空链
$ iptables -Z # 清空计数
```
### 配置允许 ssh 端口连接
```bash
$ iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
```
`22` 为你的 `ssh` 端口, `-s 192.168.1.0/24` 表示允许这个网段的机器来连接,其它网段的 `ip` 地址是登陆不了你的机器的。`-j ACCEPT` 表示接受这样的请求
### 允许本地回环地址可以正常使用
```shell
$ iptables -A INPUT -i lo -j ACCEPT
# 本地圆环地址就是那个127.0.0.1
# 是本机上使用的,它进与出都设置为允许
$ iptables -A OUTPUT -o lo -j ACCEPT
```
### 设置默认的规则
```shell
# 配置默认的不让进
$ iptables -P INPUT DROP
# 默认的不允许转发
$ iptables -P FORWARD DROP
# 默认的可以出去
$ iptables -P OUTPUT ACCEPT
```
### 配置白名单
```shell
# 允许机房内网机器可以访问
$ iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT
# 允许机房内网机器可以访问
$ iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT
# 允许 183.121.3.7 访问本机的3380端口
$ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT
```
### 开启相应的服务端口
```shell
# 开启 80 端口因为web对外都是这个端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许被 ping
$ iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# 已经建立的连接得让它进来
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
```
### 保存规则到配置文件中
```shell
# 任何改动之前先备份,请保持这一优秀的习惯
$ cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
$ iptables-save > /etc/sysconfig/iptables
$ cat /etc/sysconfig/iptables
```
### 列出已设置的规则
<!--rehype:wrap-class=row-span-2-->
```bash
$ iptables -L [-t 表名][链名]
```
---
- 四个表名 `raw``nat``filter``mangle`
- 五个规则链名 `INPUT``OUTPUT``FORWARD``PREROUTING``POSTROUTING`
- filter 表包含`INPUT``OUTPUT``FORWARD`三个规则链
```shell
# 列出 nat 上面的所有规则
$ iptables -L -t nat
# ^ -t 参数指定,必须是 raw natfiltermangle 中的一个
# 规则带编号
$ iptables -L -t nat --line-numbers
$ iptables -L INPUT
# 查看,这个列表看起来更详细
$ iptables -L -nv
```
### 清除已有规则
```shell
# 清空指定链 INPUT 上面的所有规则
$ iptables -F INPUT
# 删除指定的链,这个链必须没有被其它任何规则引用,
# 而且这条上必须没有任何规则
$ iptables -X INPUT
# 如果没有指定链名,则会删除该表中所有非内置的链
# 把指定链,或者表中的所有链上的所有计数器清零
$ iptables -Z INPUT
```
### 删除已添加的规则
```shell
# 添加一条规则
$ iptables -A INPUT -s 192.168.1.5 -j DROP
```
将所有 iptables 以序号标记显示,执行:
```shell
$ iptables -L -n --line-numbers
```
比如要删除 INPUT 里序号为 8 的规则,执行:
```shell
$ iptables -D INPUT 8
```
### 开放指定的端口
<!--rehype:wrap-class=row-span-2-->
```shell
# 允许本地回环接口(即运行本机访问本机)
$ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许所有本机向外的访问
$ iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许访问80端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许ftp服务的21端口
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 允许FTP服务的20端口
$ iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 禁止其他未允许的规则访问
$ iptables -A INPUT -j reject
# 禁止其他未允许的规则访问
$ iptables -A FORWARD -j REJECT
```
### 屏蔽 IP
<!--rehype:wrap-class=row-span-2-->
```shell
# 屏蔽恶意主机比如192.168.0.8
$ iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP
# 屏蔽单个IP的命令
$ iptables -I INPUT -s 123.45.6.7 -j DROP
# 封整个段即从123.0.0.1到123.255.255.254的命令
$ iptables -I INPUT -s 123.0.0.0/8 -j DROP
# 封IP段即从123.45.0.1到123.45.255.254的命令
$ iptables -I INPUT -s 124.45.0.0/16 -j DROP
# 封IP段即从123.45.6.1到123.45.6.254的命令是
$ iptables -I INPUT -s 123.45.6.0/24 -j DROP
```
### 指定数据包出去的网络接口
只对 OUTPUTFORWARDPOSTROUTING 三个链起作用。
```shell
$ iptables -A FORWARD -o eth0
```
### 查看已添加的规则
<!--rehype:wrap-class=row-span-2-->
```shell
$ iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
```
### 启动网络转发规则
公网`210.14.67.7`让内网`192.168.188.0/24`上网
```shell
$ iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
```
<!--rehype:className=wrap-text-->
### 端口映射
本机的 2222 端口映射到内网 虚拟机的 22 端口
```shell
$ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22
```
<!--rehype:className=wrap-text-->
### 字符串匹配
<!--rehype:wrap-class=row-span-2-->
比如,我们要过滤所有 TCP 连接中的字符串`test`,一旦出现它我们就终止这个连接,我们可以这么做:
```shell
$ iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
$ iptables -L
# Chain INPUT (policy ACCEPT)
# target prot opt source destination
# REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target prot opt source destination
#
# Chain OUTPUT (policy ACCEPT)
# target prot opt source destination
```
### 阻止 Windows 蠕虫的攻击
```shell
$ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
```
<!--rehype:className=wrap-text-->
### 防止 SYN 洪水攻击
```shell
$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
```
### 允许环回连接
```bash
$ iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT
```
### 允许已建立和相关的传入连接
```bash
$ iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
```
### 允许已建立的传出连接
```bash
$ iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 内部到外部
```bash
$ iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
```
### 丢弃无效数据包
```bash
$ iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
```
### 阻止 IP 地址
```bash
$ iptables -A INPUT -s 192.168.1.10 -j DROP
```
### 阻止和 IP 地址并拒绝
```bash
$ iptables -A INPUT -s 192.168.1.10 -j REJECT
```
### 阻止与网络接口的连接
```bash
$ iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
```
### 允许所有传入的 SSH
```bash
$ iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许来自特定 IP 地址或子网的传入 SSH
```bash
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许传出 SSH
```bash
$ iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许来自特定 IP 地址或子网的传入 Rsync
```bash
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许传入 HTTP
```bash
$ iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许传入 HTTPS
```bash
$ iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许传入 HTTP 和 HTTPS
```bash
$ iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许来自特定 IP 地址或子网的 MySQL
```bash
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许 MySQL 到特定的网络接口
```bash
$ iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许来自特定 IP 地址或子网的 PostgreSQL
```bash
$ iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许 PostgreSQL 到特定的网络接口
```bash
$ iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 阻止传出 SMTP 邮件
```bash
$ iptables -A OUTPUT -p tcp --dport 25 -j REJECT
```
### 允许所有传入的 SMTP
```bash
$ iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许所有传入的 IMAP
```bash
$ iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许所有传入的 IMAPS
```bash
$ iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许所有传入的 POP3
```bash
$ iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 允许所有传入的 POP3S
```bash
$ iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
### 在公共接口上删除专用网络地址
```bash
$ iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j DROP
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
```
### 将所有传出到 Facebook 网络
获取 Facebook 作为:
```bash
$ whois -h v4.whois.cymru.com " -v $(host facebook.com | grep "has address" | cut -d " " -f4)" | tail -n1 | awk '{print $1}'
```
降低:
```bash
$ for i in $(whois -h whois.radb.net -- '-i origin AS1273' | grep "^route:" | cut -d ":" -f2 | sed -e 's/^[ \t]*//' | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 | cut -d ":" -f2 | sed 's/$/;/') ; do iptables -A OUTPUT -s "$i" -j REJECTdone
```
### 记录和丢弃数据包
```bash
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
```
默认情况下,所有内容都记录到 `/var/log/messages` 文件中:
```bash
$ tail -f /var/log/messagesgrep --color 'IP SPOOF' /var/log/messages
```
### 记录和丢弃日志条目数量有限的数据包
```bash
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
$ iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
```
### 丢弃或接受来自 Mac 地址的流量
```bash
$ iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
$ iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
```
### 阻止或允许 ICMP Ping 请求
```bash
$ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
```
### 使用 multiport 指定多个端口
```bash
$ iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m multiport --dports ssh,smtp,http,https -j ACCEPT
```
### 使用 `random*` 或 `nth*` 进行负载平衡
```bash
_ips=("172.31.250.10" "172.31.250.11" "172.31.250.12" "172.31.250.13")for ip in "${_ips[@]}" ; do iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 4 --packet 0 \ -j DNAT --to-destination ${ip}:80done
```
or
```bash
_ips=("172.31.250.10" "172.31.250.11" "172.31.250.12" "172.31.250.13")for ip in "${_ips[@]}" ; do iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m random --average 25 \ -j DNAT --to-destination ${ip}:80done
```
### 使用 limit 和 `iplimit*` 限制连接数
```bash
$ iptables -A FORWARD -m state --state NEW -p tcp -m multiport --dport http,https -o eth0 -i eth1 -m limit --limit 20/hour --limit-burst 5 -j ACCEPT
```
or
```bash
$ iptables -A INPUT -p tcp -m state --state NEW --dport http -m iplimit --iplimit-above 5 -j DROP
```
### 维护要匹配的最近连接列表
```bash
$ iptables -A FORWARD -m recent --name portscan --rcheck --seconds 100 -j DROPiptables -A FORWARD -p tcp -i eth0 --dport 443 -m recent --name portscan --set -j DROP
```
### 匹配数据包数据负载中的 “string*”
```bash
$ iptables -A FORWARD -m string --string '.com' -j DROP
$ iptables -A FORWARD -m string --string '.exe' -j DROP
```
### 带有“时间*”的基于时间的规则
```bash
$ iptables -A FORWARD -p tcp -m multiport --dport http,https -o eth0 -i eth1 -m time --timestart 21:30 --timestop 22:30 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT
```
### 基于 TTL 值的数据包匹配
```bash
$ iptables -A INPUT -s 1.2.3.4 -m ttl --ttl-lt 40 -j REJECT
```
### 防止端口扫描
```bash
$ iptables -N port-scanningiptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURNiptables -A port-scanning -j DROP
```
### SSH 暴力破解保护
```bash
$ iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --setiptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
```
### 同步泛洪保护
```bash
$ iptables -N syn_floodiptables -A INPUT -p tcp --syn -j syn_floodiptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
$ iptables -A syn_flood -j DROPiptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
$ iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
$ iptables -A INPUT -p icmp -j DROPiptables -A OUTPUT -p icmp -j ACCEPT
```
### 使用 SYNPROXY 缓解 SYN 泛洪
```bash
$ iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
$ iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
$ iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
```
### 阻止非 SYN 的新数据包
```bash
$ iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
```
```bash
$ iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
```
### 强制碎片数据包检查
```bash
$ iptables -A INPUT -f -j DROP
```
### XMAS 包
```bash
$ iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
```
### 丢弃所有 NULL 数据包
```bash
$ iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
```
### 阻止不常见的 MSS 值
```bash
$ iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
```
### 阻止带有虚假 TCP 标志的数据包
```bash
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
$ iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
```
### 阻止来自私有子网的数据包(欺骗)
```bash
_subnets=("224.0.0.0/3" "169.254.0.0/16" "172.16.0.0/12" "192.0.2.0/24" "192.168.0.0/16" "10.0.0.0/8" "0.0.0.0/8" "240.0.0.0/5")for _sub in "${_subnets[@]}" ; do iptables -t mangle -A PREROUTING -s "$_sub" -j DROPdoneiptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP
```
另见
---
- [Iptables 应用](https://dunwu.github.io/linux-tutorial/linux/ops/iptables.html)
- [netfilter 官网](https://netfilter.org/)

View File

@ -89,7 +89,7 @@ boolean[] answers = {true, false};
查看: [Arrays](#java-数组)
### Swap
### 交换变量 Swap
```java
int a = 1;
@ -101,7 +101,7 @@ b = temp;
System.out.println(a + " " + b); // 2 1
```
### Type Casting
### 类型转换 Type Casting
```java
// Widening
@ -344,7 +344,7 @@ for (int a: arr) {
// 输出: a b c
```
### Multidimensional Arrays
### 二维数组 Multidimensional Arrays
```java
int[][] matrix = { {1, 2, 3}, {4, 5} };
@ -359,7 +359,7 @@ for (int i = 0; i < a.length; ++i) {
// 输出: 1 2 3 4 5 6 7
```
### Sort
### 排序 Sort
```java
char[] chars = {'b', 'a', 'c'};
@ -544,13 +544,161 @@ for (int i = 0; i < 5; i++) {
// 输出: 0123
```
Java 多线程
--------------------
### 创建线程
```java
// 实现Runnable接口
public class RunnableThread implements Runnable {
@Override
public void run() {
// todo something
}
}
// 实现Callable接口,T 替换成实际类型
public class CallableTask implements Callable<T> {
@Override
public T call() throws Exception {
// todo something
return null;
}
}
// 继承Thrad类
public class ExtendsThread extends Thread {
@Override
public void run() {
// todo something
}
}
// 运行线程
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();
}
```
### 线程池
```java
/**
* corePoolSize: 核心线程数
* maximumPoolSize: 最大线程数
* keepAliveTime: 线程空闲时间
* timeUni: 线程空闲时间单位
* workQueue: 线程等待队列
* threadFactory: 线程创建工厂
* handler: 拒绝策略
*/
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
<!--rehype:wrap-class=row-span-1-->
```java
// 代码块
synchronized(obj) {
...
}
// (静态)方法
public synchronized (static) void methodName() {
...
}
```
### ThreadLocal
```java
// 使用完之后一定要记得remove, 否则会内存泄露
ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
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
// CountDownLatch
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(() -> {
try {
...
}finally {
countDownLatch.countDown();
}
}).start();
countDownLatch.await();
// CompletableFuture
CompletableFuture<Void> task1 = CompletableFuture.runAsync(() -> {});
CompletableFuture<Void> task2 = CompletableFuture.runAsync(() -> {});
CompletableFuture<Void> task3 = CompletableFuture.runAsync(() -> {});
CompletableFuture.allOf(task1, task2, task3).get();
// Semaphore
Semaphore semaphore = new Semaphore(5);
try {
semaphore.acquire();
} finally {
semaphore.release();
}
```
Java 框架搜集
--------------------
### 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 +743,8 @@ nums.remove(0); // 非常慢
for (Integer value : nums) {
System.out.println(value);
}
// lambda 打印元素
nums.forEach(e -> System.out.println(e.toString()));
```
### HashMap
@ -615,6 +765,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 +803,7 @@ set.remove("cat");
for (String element : set) {
System.out.println(element);
}
set.forEach(e -> System.out.println(e.toString()));
```
### ArrayDeque
@ -771,7 +941,7 @@ text.split(Pattern.quote("|"));
`Math.toDegrees(rad)` | 以度为单位的角度弧度
`Math.toRadians(deg)` | 以弧度为单位的角度度
### Try/Catch/Finally
### 异常 Try/Catch/Finally
```java
try {
@ -816,8 +986,59 @@ method.invoke(classLoader, url);
- `SecureRandom` 实例用于生成安全的伪随机数流
- `UUID` 表示一个不可变的通用唯一标识符
- `Vector` 实现了一个可增长的对象数组
- `LocalDate` 表示没有时区的日期只包含年月日不可变并且线程安全的java8 及以上版本可用
- `LocalTime` 表示没有时区的时间只包含时分秒不可变并且线程安全的java8 及以上版本可用
- `LocalDateTime` 表示没有时区的日期时间同时包含年月日时分秒不可变并且线程安全的java8 及以上版本可用
### IO流
```java
// 输入流转输出流
byte[] inputContent = "test".getBytes();
try (InputStream inputStream = new ByteArrayInputStream(inputContent);
OutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
```
### Collections 工具类
```java
// 计算出现频率
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
```
### Stream 流
```java
// 统计词频
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(1);
list.add(3);
list.add(2);
list.add(2);
list.add(2);
Map<Integer, Long> frequencyMap = list.stream().collect(Collectors.groupingBy(x -> x, Collectors.counting()));
// 1: 2
// 2: 3
// 3: 1
```
另见
---
- [Java 官网](https://www.java.com/zh-CN/) _(java.com)_
- [Java 官网](https://www.oracle.com/cn/java/) _(oracle.com/cn/java)_

View File

@ -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

@ -1,7 +1,13 @@
Jest 备忘清单
===
Jest 是一款优雅、简洁的 JavaScript 测试框架,这里介绍了它的入门和 一些 API 的索引。
[![NPM version](https://img.shields.io/npm/v/jest.svg?style=flat)](https://www.npmjs.com/package/jest)
[![Downloads](https://img.shields.io/npm/dm/jest.svg?style=flat)](https://www.npmjs.com/package/jest)
[![Repo Dependents](https://badgen.net/github/dependents-repo/facebook/jest)](https://github.com/facebook/jest/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/facebook/jest)
Jest 是一款优雅、简洁的 JavaScript 测试框架,这里介绍了它的入门和 一些 API 的索引
<!--rehype:style=padding-top: 12px;-->
入门
----
@ -41,6 +47,37 @@ npm test -- --watch
查看: [Getting started](https://jestjs.io/docs/getting-started)
### 常用命令
<!--rehype:wrap-class=col-span-2 row-span-2-->
```bash
# 指定测试文件的名称
$ jest my-test
# 指定测试文件的路径
$ jest path/to/my-test.js
# 仅运行在 hg/git 上有改动但尚未提交的文件
$ jest -o
# 仅运行与 fileA.js 和 fileB.js相关的测试
$ jest --findRelatedTests fileA.js fileB.js
# 仅运行匹配特定名称的测试用例
$ jest -t name-of-spec
# 运行监视模式默认执行 jest -o 监视有改动的测试
$ jest --watch
$ jest --watchAll # 监视所有测试
```
### 支持驼峰和串式命名的参数
<!--rehype:wrap-class=col-span-2-->
```bash
# 下面给出的命令执行的结果是一样的:
$ jest --collect-coverage
$ jest --collectCoverage
# 不同命名形式的参数还可以混用,如:
$ jest --update-snapshot \
--detectOpenHandles
```
### 编写测试
<!--rehype:wrap-class=col-span-2-->
@ -884,6 +921,79 @@ test('第二个文本', () => {
`Node.js` 和 `Jest` 会缓存你需要的模块。 要测试具有副作用的模块,您需要在测试之间重置模块注册表
命令参数参考
---
<!--rehype:body-class=cols-1-->
### 命令参数
:-- | --
:-- | --
`--bail[=<n>]`, `-b` | 在 `n` 个测试套件失败后立即退出测试套件
`--cache` | 是否使用缓存
`--changedFilesWithAncestor` | 运行与当前更改和上次提交中所做更改相关的测试
`--changedSince` | 运行与自提供的分支或提交哈希以来的更改相关的测试
`--ci` | 指定该参数时,`Jest` 会认为正在 `CI` 环境上运行
`--clearCache` | 删除 `Jest` 的缓存目录, 然后不运行测试直接退出
`--clearMocks` | 在每次测试前自动清除模拟的上下文
`--collectCoverageFrom=<glob>` | 相对于 `rootDir` 的 `glob` 模式匹配需要从中收集覆盖信息的文件
`--colors` | 即便 `stdout` 不是 `TTY` 模式,也要强制高亮显示测试结果
`--config=<path>` | 指定配置文件的路径
`--coverage[=<boolean>]`, `--collectCoverage` | 将测试覆盖率信息输出为报告
`--coverageProvider=<provider>` | 指示应该使用哪个提供程序来检测代码的覆盖率
`--debug` | 打印关于 `Jest` 配置的调试信息
`--detectOpenHandles` | 尝试收集并打印打开的句柄以防止 `Jest` 干净地退出
`--env=<environment>` | 所有测试都使用该测试环境设定
`--errorOnDeprecated` | 使调用已弃用的 `API` 抛出有用的错误消息
`--expand`, `-e` | 使用该参数来对比完整的差异和错误,而非修复
`--filter=<file>` | 导出过滤功能的模块的路径
`--findRelatedTests <spaceSeparatedListOfSourceFiles>` | 查找并运行涵盖作为参数传入的以空格分隔的源文件列表的测试
`--forceExit` | 强制 `Jest` 在所有测试运行完后退出
`--help` | 显示帮助信息,类似于本页文档
`--ignoreProjects <project1> ... <projectN>` | 忽略特定的测试项目
`--init` | 生成一个基础配置文件
`--injectGlobals` | 将全局变量(`expect`,`test`,`describe`,`beforeEach`等)插入到全局环境中
`--json` | 以 `JSON` 模式显示测试结果
`--lastCommit` | 运行受上次提交中的文件更改影响的所有测试
`--listTests` | 以 `JSON` 数组的形式列出所有将要运行的测试并退出
`--logHeapUsage` | 记录每个测试后的记录堆使用情况
`--maxConcurrency=<num>` | 防止 `Jest` 同时执行超过指定数量的测试
`--maxWorkers=<num>\|<string>` | 设定运行测试的最大工作池数目
`--noStackTrace` | 禁止栈跟踪信息在测试结果输出中
`--notify` | 激活测试结果通知
`--onlyChanged` `-o` | 尝试确定根据当前存储库中哪些已经更改的文件来运行的测试
`--outputFile=<filename>` | 通过 `——json` 参数可以将测试结果写入到指定文件
`--passWithNoTests` | 允许在没有找到文件的情况下通过测试
`--projects <path1> ... <pathN>` | 从指定路径中找到的一个或多个项目运行测试;也采用路径 `globs`
`--reporters` | 使用指定的记者进行测试
`--resetMocks` | 每次测试前自动重置模拟状态
`--restoreMocks` | 在每次测试前自动恢复模拟状态和实现
`--roots` | `Jest` 应该用来搜索文件的目录路径列表
`--runInBand`, `-i` | 仅在当前的进程中连续运行所有测试,而非通过创建的子进程的工作池来运行测试
`--runTestsByPath` | 仅运行使用其确切路径指定的测试
`--selectProjects <project1> ... <projectN>` | 运行指定的测试项目
`--setupFilesAfterEnv <path1> ... <pathN>` | 运行某些代码以在每次测试之前配置或设置测试框架的模块的路径列表
`--shard` | 测试套件分片以 `(?<shardIndex>\d+)/(?<shardCount>\d+)` 的格式执行
`--showConfig` | 输出 `Jest` 配置,然后退出
`--silent` | 阻止所有测试通过控制台输出信息
`--testEnvironmentOptions=<json string>` | 带有将传递给 `testEnvironment` 的选项的 `JSON` 字符串
`--testLocationInResults` | 向测试结果添加 `location` 字段
`--testMatch glob1 ... globN` | `Jest` 用于检测测试文件的 `glob` 模式
`--testNamePattern=<regex>`, `-t` | 仅运行名称与正则表达式匹配的测试
`--testPathIgnorePatterns=<regex>\|[array]` | 在执行测试之前针对所有测试路径进行测试的单个或一组正则表达式模式字符串
`--testPathPattern=<regex>` | 在运行测试前,匹配的 `regexp` 模式字符串的测试文件路径
`--testRunner=<path>` | 允许你指定自定义测试运行程序
`--testSequencer=<path>` | 允许您指定自定义测试定序器
`--testTimeout=<number>` | 测试的默认超时时间(以毫秒为单位)。默认值:`5000`
`--updateSnapshot`, `-u` | 在运行测试中使用这个参数来重新录制每个失败测试的快照
`--useStderr` | 转移所有输出到 `stderr` (标准错误输出)
`--verbose` | 层次显示测试套件中每个测试的结果
`--version`, `-v` | 打印版本并退出
`--watch` | 监视文件更改,并重新运行与已更改的文件相关的测试
`--watchAll` | 监视文件的更改并在任何更改时重新运行所有测试
`--watchman` | 是否使用 `watchman` 进行文件爬取。 默认为 `true`
<!--rehype:className=left-align-->
另见
----

689
docs/jquery.md Normal file
View File

@ -0,0 +1,689 @@
jQuery 备忘清单
===
[jQuery](https://jquery.com/) 备忘单对于初学者和有经验的开发人员都是很好的参考
入门
-----
### 引入 jQuery
```js
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
```
<!--rehype:className=wrap-text-->
#### 官方 CDN
```js
<script src="https://code.jquery.com/jquery-3.5.1.min.js" crossorigin="anonymous"></script>
```
<!--rehype:className=wrap-text-->
### jQuery 语法
```js
$(selector).methodOrFunction();
```
#### 例子
```js
$('#menu').on('click', () =>{
$(this).hide();
});
$("body").css("background", "red");
```
### jQuery 文档准备就绪
```js
$(document).ready(function() {
// 在加载 DOM 后运行
alert('DOM fully loaded!');
});
```
```js
$(function(){
// 在加载 DOM 后运行
alert('DOM fully loaded!');
});
```
jQuery 选择器
----------
### 例子
```js
$("button").click(() => {
$(":button").css("color", "red");
});
```
#### 组合选择器
```js
$("selector1, selector2 ...selectorn")
```
### 基本
- [*](https://api.jquery.com/all-selector/) _选择所有元素_<!--rehype:tooltips-->
- [.class](https://api.jquery.com/class-selector/) _选择具有给定类的所有元素_<!--rehype:tooltips-->
- [element](https://api.jquery.com/element-selector/) _选择具有给定标签名称的所有元素_<!--rehype:tooltips-->
- [#id](https://api.jquery.com/id-selector/) _选择具有给定 id 属性的单个元素_<!--rehype:tooltips-->
- [:hidden](https://api.jquery.com/hidden-selector/) _选择所有隐藏的元素_<!--rehype:tooltips-->
- [:visible](https://api.jquery.com/visible-selector/) _选择所有可见的元素_<!--rehype:tooltips-->
- [:contains()](https://api.jquery.com/contains-selector/) _选择包含指定文本的所有元素_<!--rehype:tooltips-->
- [:empty](https://api.jquery.com/empty-selector/) _选择所有没有子元素的元素(包括文本节点)_<!--rehype:tooltips-->
- [:has()](https://api.jquery.com/has-selector/) _选择至少包含一个与指定选择器匹配的元素的元素_<!--rehype:tooltips-->
- [:parent](https://api.jquery.com/parent-selector/) _选择具有至少一个子节点(元素或文本)的所有元素_<!--rehype:tooltips-->
- [parent &gt; child](https://api.jquery.com/child-selector/) _选择由父元素指定的子元素指定的所有直接子元素_<!--rehype:tooltips-->
- [ancestor descendant](https://api.jquery.com/descendant-selector/) _选择作为给定祖先的后代的所有元素_<!--rehype:tooltips-->
- [prev + next](https://api.jquery.com/next-adjacent-Selector/) _选择所有与 next 匹配且紧接在其前面的同级 prev 的下一个元素_<!--rehype:tooltips-->
- [prev ~ siblings](https://api.jquery.com/next-siblings-selector/) _选择 prev 元素之后的所有同级元素具有相同的父元素并匹配过滤同级选择器_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 基本过滤器
- [:animated](https://api.jquery.com/animated-selector/) _在运行选择器时选择动画进度中的所有元素_<!--rehype:tooltips-->
- [:eq()](https://api.jquery.com/eq-selector/) _选择匹配集中索引 n 处的元素_<!--rehype:tooltips-->
- [:even](https://api.jquery.com/even-selector/) _选择偶数元素索引为零。 另见奇数_<!--rehype:tooltips-->
- [:first](https://api.jquery.com/first-selector/) _选择第一个匹配的 DOM 元素_<!--rehype:tooltips-->
- [:gt()](https://api.jquery.com/gt-selector/) _选择匹配集中索引大于索引的所有元素_<!--rehype:tooltips-->
- [:header](https://api.jquery.com/header-selector/) _选择所有标题元素如 h1、h2、h3 等_<!--rehype:tooltips-->
- [:lang()](https://api.jquery.com/lang-selector/) _选择指定语言的所有元素_<!--rehype:tooltips-->
- [:last](https://api.jquery.com/last-selector/) _选择最后一个匹配的元素_<!--rehype:tooltips-->
- [:lt()](https://api.jquery.com/lt-selector/) _选择匹配集中索引小于索引的所有元素_<!--rehype:tooltips-->
- [:not()](https://api.jquery.com/not-selector/) _选择与给定选择器不匹配的所有元素_<!--rehype:tooltips-->
- [:odd](https://api.jquery.com/odd-selector/) _选择奇数元素索引为零。 另见甚至_<!--rehype:tooltips-->
- [:root](https://api.jquery.com/root-selector/) _选择作为文档根的元素_<!--rehype:tooltips-->
- [:target](https://api.jquery.com/target-selector/) _选择由文档的 URI 的片段标识符指示的目标元素_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 属性
- [[name|="value"]](https://api.jquery.com/attribute-contains-prefix-selector/) _选择具有指定属性且值等于给定字符串或以该字符串开头后跟连字符 (-) 的元素_<!--rehype:tooltips-->
- [[name*="value"]](https://api.jquery.com/attribute-contains-selector/) _选择具有指定属性且值包含给定子字符串的元素_<!--rehype:tooltips-->
- [[name~="value"]](https://api.jquery.com/attribute-contains-word-selector/) _选择具有指定属性的元素其值包含给定单词由空格分隔_<!--rehype:tooltips-->
- [[name$="value"]](https://api.jquery.com/attribute-ends-with-selector/) _选择具有指定属性且值恰好以给定字符串结尾的元素。 比较区分大小写_<!--rehype:tooltips-->
- [[name="value"]](https://api.jquery.com/attribute-equals-selector/) _选择具有指定属性且值恰好等于特定值的元素_<!--rehype:tooltips-->
- [[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"]](https://api.jquery.com/multiple-attribute-selector/) _匹配匹配所有指定属性过滤器的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 子过滤器
- [:first-child](https://api.jquery.com/first-child-selector/) _选择作为其父元素的第一个子元素的所有元素_<!--rehype:tooltips-->
- [:first-of-type](https://api.jquery.com/first-of-type-selector/) _选择具有相同元素名称的兄弟姐妹中第一个的所有元素_<!--rehype:tooltips-->
- [:last-child](https://api.jquery.com/last-child-selector/) _选择作为其父元素的最后一个子元素的所有元素_<!--rehype:tooltips-->
- [:last-of-type](https://api.jquery.com/last-of-type-selector/) _选择具有相同元素名称的兄弟中最后一个的所有元素_<!--rehype:tooltips-->
- [:nth-child()](https://api.jquery.com/nth-child-selector/) _选择作为其父元素的第 n 个子元素的所有元素_<!--rehype:tooltips-->
- [:nth-last-child()](https://api.jquery.com/nth-last-child-selector/) _选择作为其父元素的第 n 个子元素的所有元素从最后一个元素到第一个元素计数_<!--rehype:tooltips-->
- [:nth-last-of-type()](https://api.jquery.com/nth-last-of-type-selector/) _选择所有元素这些元素是其父元素的第 n 个子元素相对于具有相同元素名称的兄弟元素从最后一个元素到第一个元素计数_<!--rehype:tooltips-->
- [:nth-of-type()](https://api.jquery.com/nth-of-type-selector/) _选择所有元素这些元素是其父元素相对于具有相同元素名称的兄弟元素的第 n 个子元素_<!--rehype:tooltips-->
- [:only-child](https://api.jquery.com/only-child-selector/) _选择作为其父元素的唯一子元素的所有元素_<!--rehype:tooltips-->
- [:only-of-type()](https://api.jquery.com/only-of-type-selector/) _选择所有没有同名元素的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### Forms
- [:button](https://api.jquery.com/button-selector/) _选择所有按钮元素和按钮类型的元素_<!--rehype:tooltips-->
- [:checkbox](https://api.jquery.com/checkbox-selector/) _选择复选框类型的所有元素_<!--rehype:tooltips-->
- [:checked](https://api.jquery.com/checked-selector/) _匹配所有选中或选择的元素_<!--rehype:tooltips-->
- [:disabled](https://api.jquery.com/disabled-selector/) _选择所有禁用的元素_<!--rehype:tooltips-->
- [:enabled](https://api.jquery.com/enabled-selector/) _选择所有启用的元素_<!--rehype:tooltips-->
- [:focus](https://api.jquery.com/focus-selector/) _如果当前获得焦点则选择元素_<!--rehype:tooltips-->
- [:file](https://api.jquery.com/file-selector/) _选择类型文件的所有元素_<!--rehype:tooltips-->
- [:image](https://api.jquery.com/image-selector/) _选择图像类型的所有元素_<!--rehype:tooltips-->
- [:input](https://api.jquery.com/input-selector/) _选择所有输入、文本区域、选择和按钮元素_<!--rehype:tooltips-->
- [:password](https://api.jquery.com/password-selector/) _选择密码类型的所有元素_<!--rehype:tooltips-->
- [:radio](https://api.jquery.com/radio-selector/) _选择无线电类型的所有元素_<!--rehype:tooltips-->
- [:reset](https://api.jquery.com/reset-selector/) _选择重置类型的所有元素_<!--rehype:tooltips-->
- [:selected](https://api.jquery.com/selected-selector/) _选择所有选中的元素_<!--rehype:tooltips-->
- [:submit](https://api.jquery.com/submit-selector/) _选择提交类型的所有元素_<!--rehype:tooltips-->
- [:text](https://api.jquery.com/text-selector/) _选择文本类型的所有输入元素_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
jQuery 属性
-----
### 例子
<!--rehype:wrap-class=row-span-2-->
```js
$('h2').css({
color: 'blue',
backgroundColor: 'gray',
fontSize: '24px'
});
```
#### jQuery 添加类
```js
$('.button').addClass('active');
```
#### jQuery 移除类
```js
$('.button').on('mouseleave', evt => {
let e = evt.currentTarget;
$(e).removeClass('active');
});
```
#### jQuery 切换类
```js
$('.choice').toggleClass('highlighted');
```
### Attributes
- [.attr()](https://api.jquery.com/attr/) _获取匹配元素集中第一个元素的属性值_<!--rehype:tooltips-->
- [.prop()](https://api.jquery.com/prop/) _获取匹配元素集中第一个元素的属性值_<!--rehype:tooltips-->
- [.removeAttr()](https://api.jquery.com/removeAttr/) _从匹配元素集中的每个元素中删除一个属性_<!--rehype:tooltips-->
- [.removeProp()](https://api.jquery.com/removeProp/) _删除匹配元素集的属性_<!--rehype:tooltips-->
- [.val()](https://api.jquery.com/val/) _获取匹配元素集中第一个元素的当前值_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
#### Data
- [jQuery.data()](https://api.jquery.com/jQuery.data/) _存储与指定元素关联的任意数据。 返回设置的值_<!--rehype:tooltips-->
- [.data()](https://api.jquery.com/data/) _存储与匹配元素关联的任意数据_<!--rehype:tooltips-->
- [jQuery.hasData()](https://api.jquery.com/jQuery.hasData/) _确定一个元素是否有任何与之关联的 jQuery 数据_<!--rehype:tooltips-->
- [jQuery.removeData()](https://api.jquery.com/jQuery.removeData/) _删除以前存储的数据_<!--rehype:tooltips-->
- [.removeData()](https://api.jquery.com/removeData/) _删除以前存储的数据_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### CSS
- [.addClass()](https://api.jquery.com/addClass/) _将指定的类添加到匹配元素集中的每个元素_<!--rehype:tooltips-->
- [.hasClass()](https://api.jquery.com/hasClass/) _确定是否有任何匹配的元素被分配给给定的类_<!--rehype:tooltips-->
- [.removeClass()](https://api.jquery.com/removeClass/) _从匹配元素集中的每个元素中删除单个类、多个类或所有类_<!--rehype:tooltips-->
- [.toggleClass()](https://api.jquery.com/toggleClass/) _根据类的存在或状态参数的值从匹配元素集中的每个元素添加或删除一个或多个类_<!--rehype:tooltips-->
- [.css()](https://api.jquery.com/css/) _获取匹配元素集中第一个元素的计算样式属性_<!--rehype:tooltips-->
- [jQuery.cssHooks](https://api.jquery.com/jQuery.cssHooks/) _直接连接到 jQuery 以覆盖特定 CSS 属性的检索或设置方式、标准化 CSS 属性命名或创建自定义属性_<!--rehype:tooltips-->
- [jQuery.cssNumber](https://api.jquery.com/jQuery.cssNumber/) _包含所有可以在没有单位的情况下使用的 CSS 属性的对象。`.css()` 方法使用此对象来查看它是否可以将 px 附加到无单位值_<!--rehype:tooltips-->
- [jQuery.escapeSelector()](https://api.jquery.com/jQuery.escapeSelector/) _转义任何在 CSS 选择器中具有特殊含义的字符_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### Dimensions
- [.height()](https://api.jquery.com/height/) _获取匹配元素集中第一个元素的当前计算高度_<!--rehype:tooltips-->
- [.innerHeight()](https://api.jquery.com/innerHeight/) _获取匹配元素集中第一个元素的当前计算高度包括填充但不包括边框_<!--rehype:tooltips-->
- [.innerWidth()](https://api.jquery.com/innerWidth/) _获取匹配元素集中第一个元素的当前计算内部宽度包括填充但不包括边框_<!--rehype:tooltips-->
- [.outerHeight()](https://api.jquery.com/outerHeight/) _获取匹配元素集中第一个元素的当前计算外部高度(包括填充、边框和可选的边距)_<!--rehype:tooltips-->
- [.outerWidth()](https://api.jquery.com/outerWidth/) _获取匹配元素集中第一个元素的当前计算外部宽度(包括填充、边框和可选的边距)_<!--rehype:tooltips-->
- [.width()](https://api.jquery.com/width/) _获取匹配元素集中第一个元素的当前计算宽度_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### Offset
- [.offset()](https://api.jquery.com/offset/) _获取匹配元素集中第一个元素相对于文档的当前坐标_<!--rehype:tooltips-->
- [.offsetParent()](https://api.jquery.com/offsetParent/) _获取定位的最近的祖先元素_<!--rehype:tooltips-->
- [.position()](https://api.jquery.com/position/) _获取匹配元素集中第一个元素相对于偏移父元素的当前坐标_<!--rehype:tooltips-->
- [.scrollLeft()](https://api.jquery.com/scrollLeft/) _获取匹配元素集中第一个元素的滚动条的当前水平位置_<!--rehype:tooltips-->
- [.scrollTop()](https://api.jquery.com/scrollTop/) _获取匹配元素集中第一个元素的滚动条的当前垂直位置或为每个匹配元素设置滚动条的垂直位置_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
jQuery 操控
------------
### Examples
<!--rehype:wrap-class=row-span-3-->
```js
/*<span>Span.</span>*/
$('span').after('<p>Paragraph.</p>');
/*<span>Span.</span><p>Paragraph.</p>*/
/*<span>Span.</span>*/
$('<span>Span.</span>').replaceAll('p');
/*<p>Span.</p>*/
/*<span>This is span.</span>*/
$('span').wrap('<p></p>');
/*<p><span>This is span.</span></p>*/
```
### 复刻
- [.clone()](https://api.jquery.com/clone/) _创建匹配元素集的深层副本_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 插入,环绕
- [.wrap()](https://api.jquery.com/wrap/) _在匹配元素集中的每个元素周围包装一个 HTML 结构_<!--rehype:tooltips-->
- [.wrapAll()](https://api.jquery.com/wrapAll/) _在匹配元素集中的所有元素周围包装一个 HTML 结构_<!--rehype:tooltips-->
- [.wrapInner()](https://api.jquery.com/wrapInner/) _围绕匹配元素集中每个元素的内容包装一个 HTML 结构_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 插入,内部
- [.append()](https://api.jquery.com/append/) _在匹配的元素集中插入由参数指定的内容插入每个元素的末尾_<!--rehype:tooltips-->
- [.appendTo()](https://api.jquery.com/appendTo/) _将匹配元素集中的每个元素插入目标末端_<!--rehype:tooltips-->
- [.html()](https://api.jquery.com/html/) _在匹配元素集中获取第一个元素的HTML内容_<!--rehype:tooltips-->
- [.prepend()](https://api.jquery.com/prepend/) _插入由参数指定的内容插入匹配元素集中每个元素的开始_<!--rehype:tooltips-->
- [.prependTo()](https://api.jquery.com/prependTo/) _将匹配元素集中的每个元素插入目标开始_<!--rehype:tooltips-->
- [.text()](https://api.jquery.com/text/) _在匹配的元素集包括其后代中获取每个元素的组合文本内容_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 插入,外部
- [.after()](https://api.jquery.com/after/) _在匹配元素集中的每个元素之后插入由参数指定的内容_<!--rehype:tooltips-->
- [.before()](https://api.jquery.com/before/) _在匹配元素集中的每个元素之前插入由参数指定的内容_<!--rehype:tooltips-->
- [.insertAfter()](https://api.jquery.com/insertAfter/) _在目标之后插入匹配元素集中的每个元素_<!--rehype:tooltips-->
- [.insertBefore()](https://api.jquery.com/insertBefore/) _在目标之前插入匹配元素集中的每个元素_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 移除
- [.detach()](https://api.jquery.com/detach/) _从DOM上删除一组匹配的元素_<!--rehype:tooltips-->
- [.empty()](https://api.jquery.com/empty/) _从DOM中删除一组匹配元素的所有子节点_<!--rehype:tooltips-->
- [.remove()](https://api.jquery.com/remove/) _从DOM上删除一组匹配的元素_<!--rehype:tooltips-->
- [.unwrap()](https://api.jquery.com/unwrap/) _从DOM上删除一组匹配元素的父母将匹配的元素留在其位置_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 替换
- [.replaceAll()](https://api.jquery.com/replaceAll/) _用匹配的元素集替换每个目标元素_<!--rehype:tooltips-->
- [.replaceWith()](https://api.jquery.com/replaceWith/) _用提供的新内容替换一组匹配元素中的每个元素然后返回已删除的元素集_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
jQuery 遍历
------------
### 过滤
- [.eq()](https://api.jquery.com/eq/) _将匹配的元素集减少到指定索引处的集合_<!--rehype:tooltips-->
- [.filter()](https://api.jquery.com/filter/) _将匹配的元素集减少到匹配选择器或传递函数测试的元素_<!--rehype:tooltips-->
- [.first()](https://api.jquery.com/first/) _将匹配的元素集减少到集合中的第一个_<!--rehype:tooltips-->
- [.has()](https://api.jquery.com/has/) _将匹配的元素集减少到具有与选择器或DOM元素相匹配的后代的元素_<!--rehype:tooltips-->
- [.is()](https://api.jquery.com/is/) _检查当前匹配的元素与选择器元素或jQuery对象的元素集如果至少其中一个元素与给定参数匹配则返回true_<!--rehype:tooltips-->
- [.last()](https://api.jquery.com/last/) _将匹配的元素集减少到集合中的最后一个元素_<!--rehype:tooltips-->
- [.map()](https://api.jquery.com/map/) _将当前匹配的每个元素通过函数传递从而产生包含返回值的新jQuery对象_<!--rehype:tooltips-->
- [.not()](https://api.jquery.com/not/) _从匹配元素集中删除元素_<!--rehype:tooltips-->
- [.slice()](https://api.jquery.com/slice/) _将匹配的元素集减少为由一系列索引指定的子集_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 杂项遍历
- [.add()](https://api.jquery.com/add/) _创建一个新的jQuery对象其中添加到匹配元素集中的元素_<!--rehype:tooltips-->
- [.addBack()](https://api.jquery.com/addBack/) _将堆栈上的上一个元素添加到当前集合中并由选择器进行过滤_<!--rehype:tooltips-->
- [.andSelf()](https://api.jquery.com/andSelf/) _将堆栈上的先前元素添加到当前集合中_<!--rehype:tooltips-->
- [.contents()](https://api.jquery.com/contents/) _在一组匹配元素中获取每个元素的孩子包括文本和评论节点_<!--rehype:tooltips-->
- [.each()](https://api.jquery.com/each/) _在jQuery对象上迭代为每个匹配的元素执行一个函数_<!--rehype:tooltips-->
- [.end()](https://api.jquery.com/end/) _结束当前链中最新的过滤操作并将匹配元素集返回其先前状态_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 树遍历
- [.children()](https://api.jquery.com/children/) _在一组匹配元素中获取每个元素的孩子并被选择器进行过滤_<!--rehype:tooltips-->
- [.closest()](https://api.jquery.com/closest/) _对于集合中的每个元素通过测试元素本身并通过其祖先在DOM树中的祖先进行遍历来获取与选择器匹配的第一个元素_<!--rehype:tooltips-->
- [.find()](https://api.jquery.com/find/) _在当前匹配元素集中获取每个元素的后代并由选择器jQuery对象或元素过滤_<!--rehype:tooltips-->
- [.next()](https://api.jquery.com/next/) _在匹配的元素集中立即获取每个元素的兄弟姐妹。 如果提供了选择器则仅在匹配该选择器的情况下才能检索下一个兄弟姐妹_<!--rehype:tooltips-->
- [.nextAll()](https://api.jquery.com/nextAll/) _在一组匹配元素中获取每个元素的所有以下兄弟姐妹并由选择器进行过滤_<!--rehype:tooltips-->
- [.nextUntil()](https://api.jquery.com/nextUntil/) _将每个元素的所有以下兄弟姐妹添加到但不包括通过选择器DOM节点或jQuery对象匹配的元素_<!--rehype:tooltips-->
- [.parent()](https://api.jquery.com/parent/) _在当前匹配元素集中获取每个元素的父由选择器选择过滤_<!--rehype:tooltips-->
- [.parents()](https://api.jquery.com/parents/) _在当前匹配元素集中获取每个元素的祖先并被选择器进行过滤_<!--rehype:tooltips-->
- [.parentsUntil()](https://api.jquery.com/parentsUntil/) _在当前匹配元素集中获取每个元素的祖先直到但不包括由选择器DOM节点或jQuery对象匹配的元素_<!--rehype:tooltips-->
- [.prev()](https://api.jquery.com/prev/) _在匹配元素集中获取每个元素的立即兄弟姐妹。 如果提供了选择器则仅在匹配该选择器时才检索先前的同胞_<!--rehype:tooltips-->
- [.prevAll()](https://api.jquery.com/prevAll/) _在一组匹配元素中获取每个元素的所有先前兄弟姐妹并由选择器进行过滤_<!--rehype:tooltips-->
- [.prevUntil()](https://api.jquery.com/prevUntil/) _将每个元素的所有先前兄弟姐妹添加到但不包括由选择器DOM节点或jQuery对象匹配的元素_<!--rehype:tooltips-->
- [.siblings()](https://api.jquery.com/siblings/) _在匹配的元素集中获取每个元素的兄弟姐妹并被选择器进行过滤_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
jQuery 事件
------------
### Examples
<!--rehype:wrap-class=row-span-6-->
```js
// 鼠标事件“点击”
$('#menu-button').on('click', () => {
$('#menu').show();
});
// 键盘事件“键盘”
$('#textbox').on('keyup', () => {
$('#menu').show();
});
// 滚动事件“滚动”
$('#menu-button').on('scroll', () => {
$('#menu').show();
});
```
#### 事件对象
```js
$('#menu').on('click', event => {
$(event.currentTarget).hide();
});
```
#### 方法链
```js
$('#menu-btn').on('mouseenter', () => {
$('#menu').show();
}).on('mouseleave', () => {
$('#menu').hide();
});
```
#### 防止事件
```js
$( "p" ).click(function( event ) {
event.stopPropagation();
// Do something
});
```
### 浏览器事件
- [.error()](https://api.jquery.com/error/) _将事件处理程序绑定到错误 JavaScript 事件_ <!--rehype:tooltips-->
- [.resize()](https://api.jquery.com/resize/) _将事件处理程序绑定到调整大小的 JavaScript 事件或在元素上触发该事件_ <!--rehype:tooltips-->
- [.scroll()](https://api.jquery.com/scroll/) _将事件处理程序绑定到滚动 JavaScript 事件或在元素上触发该事件_ <!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 事件对象
<!--rehype:wrap-class=row-span-6-->
- [event.currentTarget](https://api.jquery.com/event.currentTarget/) _事件冒泡阶段中的当前 DOM 元素_ <!--rehype:tooltips-->
- [event.delegateTarget](https://api.jquery.com/event.delegateTarget/) _附加了当前调用的 jQuery 事件处理程序的元素_ <!--rehype:tooltips-->
- [event.data](https://api.jquery.com/event.data/) _绑定当前正在执行的处理程序时传递给事件方法的可选数据对象_ <!--rehype:tooltips-->
- [event.isDefaultPrevented()](https://api.jquery.com/event.isDefaultPrevented/) _返回是否曾在此事件对象上调用过 event.preventDefault()_ <!--rehype:tooltips-->
- [event.isImmediatePropagationStopped()](https://api.jquery.com/event.isImmediatePropagationStopped/) _返回是否曾在此事件对象上调用过 event.stopImmediatePropagation()_ <!--rehype:tooltips-->
- [event.isPropagationStopped()](https://api.jquery.com/event.isPropagationStopped/) _返回是否曾在此事件对象上调用过 event.stopPropagation()_ <!--rehype:tooltips-->
- [event.metaKey](https://api.jquery.com/event.metaKey/) _指示事件触发时是否按下了 META 键_ <!--rehype:tooltips-->
- [event.namespace](https://api.jquery.com/event.namespace/) _触发事件时指定的命名空间_ <!--rehype:tooltips-->
- [event.pageX](https://api.jquery.com/event.pageX/) _鼠标相对于文档左边缘的位置_ <!--rehype:tooltips-->
- [event.pageY](https://api.jquery.com/event.pageY/) _鼠标位置相对于文档的上边缘_ <!--rehype:tooltips-->
- [event.preventDefault()](https://api.jquery.com/event.preventDefault/) _如果调用该方法则不会触发事件的默认动作_ <!--rehype:tooltips-->
- [event.relatedTarget](https://api.jquery.com/event.relatedTarget/) _事件中涉及的其他 DOM 元素如果有_ <!--rehype:tooltips-->
- [event.result](https://api.jquery.com/event.result/) _由此事件触发的事件处理程序返回的最后一个值除非该值未定义_ <!--rehype:tooltips-->
- [event.stopImmediatePropagation()](https://api.jquery.com/event.stopImmediatePropagation/) _保持其余的处理程序不被执行并防止事件在 DOM 树中向上冒泡_ <!--rehype:tooltips-->
- [event.stopPropagation()](https://api.jquery.com/event.stopPropagation/) _防止事件在 DOM 树中向上冒泡从而防止任何父处理程序收到事件通知_ <!--rehype:tooltips-->
- [event.target](https://api.jquery.com/event.target/) _发起事件的 DOM 元素_ <!--rehype:tooltips-->
- [event.timeStamp](https://api.jquery.com/event.timeStamp/) _浏览器创建事件的时间与 1970 年 1 月 1 日之间的毫秒差_ <!--rehype:tooltips-->
- [event.type](https://api.jquery.com/event.type/) _描述事件的性质_ <!--rehype:tooltips-->
- [event.which](https://api.jquery.com/event.which/) _对于键或鼠标事件此属性指示按下的特定键或按钮_ <!--rehype:tooltips-->
<!--rehype:className=style-none-->
### 文档加载
- [.load()](https://api.jquery.com/load-event/) _将事件处理程序绑定到加载 JavaScript 事件_<!--rehype:tooltips-->
- [.ready()](https://api.jquery.com/ready/) _指定在 DOM 完全加载时执行的函数_<!--rehype:tooltips-->
- [.unload()](https://api.jquery.com/unload/) _将事件处理程序绑定到卸载 JavaScript 事件_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 事件处理程序附件
- [.bind()](https://api.jquery.com/bind/) _将处理程序附加到元素的事件_<!--rehype:tooltips-->
- [.delegate()](https://api.jquery.com/delegate/) _基于一组特定的根元素将处理程序附加到现在或将来与选择器匹配的所有元素的一个或多个事件_<!--rehype:tooltips-->
- [.die()](https://api.jquery.com/die/) _从元素中删除先前使用 .live() 附加的事件处理程序_<!--rehype:tooltips-->
- [.live()](https://api.jquery.com/live/) _现在和将来为所有匹配当前选择器的元素附加一个事件处理程序_<!--rehype:tooltips-->
- [.off()](https://api.jquery.com/off/) _删除事件处理程序_<!--rehype:tooltips-->
- [.on()](https://api.jquery.com/on/) _将一个或多个事件的事件处理函数附加到所选元素_<!--rehype:tooltips-->
- [.one()](https://api.jquery.com/one/) _将处理程序附加到元素的事件。 每个事件类型的每个元素最多执行一次处理程序_<!--rehype:tooltips-->
- [.trigger()](https://api.jquery.com/trigger/) _执行附加到给定事件类型的匹配元素的所有处理程序和行为_<!--rehype:tooltips-->
- [.triggerHandler()](https://api.jquery.com/triggerHandler/) _执行附加到事件元素的所有处理程序_<!--rehype:tooltips-->
- [.unbind()](https://api.jquery.com/unbind/) _从元素中删除先前附加的事件处理程序_<!--rehype:tooltips-->
- [.undelegate()](https://api.jquery.com/undelegate/) _根据一组特定的根元素从与当前选择器匹配的所有元素的事件中删除处理程序_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 形式事件
- [.blur()](https://api.jquery.com/blur/) _将事件处理程序绑定到 blur JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.change()](https://api.jquery.com/change/) _将事件处理程序绑定到更改 JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.focus()](https://api.jquery.com/focus/) _将事件处理程序绑定到焦点 JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.focusin()](https://api.jquery.com/focusin/) _将事件处理程序绑定到 focusin 事件_<!--rehype:tooltips-->
- [.focusout()](https://api.jquery.com/focusout/) _将事件处理程序绑定到 focusout JavaScript 事件_<!--rehype:tooltips-->
- [.select()](https://api.jquery.com/select/) _将事件处理程序绑定到 select JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.submit()](https://api.jquery.com/submit/) _将事件处理程序绑定到提交 JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 键盘事件
- [.keydown()](https://api.jquery.com/keydown/) _将事件处理程序绑定到 keydown JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.keypress()](https://api.jquery.com/keypress/) _将事件处理程序绑定到按键 JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.keyup()](https://api.jquery.com/keyup/) _将事件处理程序绑定到 keyup JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 鼠标事件
- [.click()](https://api.jquery.com/click/) _将事件处理程序绑定到 click JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.contextMenu()](https://api.jquery.com/contextmenu/) _将事件处理程序绑定到 contextmenu JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.dblclick()](https://api.jquery.com/dblclick/) _将事件处理程序绑定到 dblclick JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.hover()](https://api.jquery.com/hover/) _将两个处理程序绑定到匹配的元素当鼠标指针进入和离开元素时执行_<!--rehype:tooltips-->
- [.mousedown()](https://api.jquery.com/mousedown/) _将事件处理程序绑定到 mousedown JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.mouseenter()](https://api.jquery.com/mouseenter/) _绑定要在鼠标进入元素时触发的事件处理程序或在元素上触发该处理程序_<!--rehype:tooltips-->
- [.mouseleave()](https://api.jquery.com/mouseleave/) _绑定要在鼠标离开元素时触发的事件处理程序或在元素上触发该处理程序_<!--rehype:tooltips-->
- [.mousemove()](https://api.jquery.com/mousemove/) _将事件处理程序绑定到 mousemove JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.mouseout()](https://api.jquery.com/mouseout/) _将事件处理程序绑定到 mouseout JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.mouseover()](https://api.jquery.com/mouseover/) _将事件处理程序绑定到 mouseover JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.mouseup()](https://api.jquery.com/mouseup/) _将事件处理程序绑定到 mouseup JavaScript 事件或在元素上触发该事件_<!--rehype:tooltips-->
- [.toggle()](https://api.jquery.com/toggle-event/) _将两个或多个处理程序绑定到匹配的元素以在交替单击时执行_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
jQuery Effects
------------
### 例子
<!--rehype:wrap-class=row-span-2-->
```js
$('#menu-button').on('click', () => {
// $('#menu').fadeIn(400, 'swing')
$('#menu').fadeIn();
});
```
#### 淡出效果
```js
$('#menu-button').on('click', () => {
// $('#menu').fadeOut(400, 'swing')
$('#menu').fadeOut();
});
```
### 基本
- [.hide()](https://api.jquery.com/hide/) _隐藏匹配的元素_<!--rehype:tooltips-->
- [.show()](https://api.jquery.com/show/) _显示匹配的元素_<!--rehype:tooltips-->
- [.toggle()](https://api.jquery.com/toggle/) _显示或隐藏匹配的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 滑动
- [.slideDown()](https://api.jquery.com/slideDown/) _以滑动方式显示匹配的元素_<!--rehype:tooltips-->
- [.slideToggle()](https://api.jquery.com/slideToggle/) _通过滑动显示或隐藏匹配的元素_<!--rehype:tooltips-->
- [.slideUp()](https://api.jquery.com/slideUp/) _通过滑动隐藏匹配的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 自定义
- [.animate()](https://api.jquery.com/animate/) _执行一组 CSS 属性的自定义动画_<!--rehype:tooltips-->
- [.clearQueue()](https://api.jquery.com/clearQueue/) _从队列中删除所有尚未运行的项目_<!--rehype:tooltips-->
- [.delay()](https://api.jquery.com/delay/) _设置一个计时器来延迟队列中后续项目的执行_<!--rehype:tooltips-->
- [.dequeue()](https://api.jquery.com/dequeue/) _为匹配的元素执行队列上的下一个函数_<!--rehype:tooltips-->
- [jQuery.dequeue()](https://api.jquery.com/jQuery.dequeue/) _为匹配的元素执行队列上的下一个函数_<!--rehype:tooltips-->
- [.finish()](https://api.jquery.com/finish/) _停止当前运行的动画移除所有排队的动画并完成匹配元素的所有动画_<!--rehype:tooltips-->
- [jQuery.fx.interval](https://api.jquery.com/jQuery.fx.interval/) _动画触发的速率以毫秒为单位_<!--rehype:tooltips-->
- [jQuery.fx.off](https://api.jquery.com/jQuery.fx.off/) _全局禁用所有动画_<!--rehype:tooltips-->
- [jQuery.speed](https://api.jquery.com/jQuery.speed/) _创建一个对象其中包含一组准备用于自定义动画定义的属性_<!--rehype:tooltips-->
- [.queue()](https://api.jquery.com/queue/) _显示要在匹配元素上执行的函数队列_<!--rehype:tooltips-->
- [jQuery.queue()](https://api.jquery.com/jQuery.queue/) _显示要在匹配元素上执行的函数队列_<!--rehype:tooltips-->
- [.stop()](https://api.jquery.com/stop/) _停止匹配元素上当前运行的动画_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
### 衰退
- [.fadeIn()](https://api.jquery.com/fadeIn/) _通过将匹配的元素淡化为不透明来显示它们_<!--rehype:tooltips-->
- [.fadeOut()](https://api.jquery.com/fadeOut/) _通过将它们淡化为透明来隐藏匹配的元素_<!--rehype:tooltips-->
- [.fadeTo()](https://api.jquery.com/fadeTo/) _调整匹配元素的不透明度_<!--rehype:tooltips-->
- [.fadeToggle()](https://api.jquery.com/fadeToggle/) _通过设置不透明度动画来显示或隐藏匹配的元素_<!--rehype:tooltips-->
<!--rehype:className=cols-3 style-none-->
jQuery Ajax
------------
### Examples
<!--rehype:wrap-class=row-span-2-->
```js
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize()
}).done(function(server_data){
console.log("success" + server_data);
}).fail(function(jqXHR, status, err){
console.log("fail" + err);
});
```
### 全局 Ajax 事件处理程序
- [.ajaxComplete()](https://api.jquery.com/ajaxComplete/) _注册要在 Ajax 请求完成时调用的处理程序。 这是一个 AjaxEvent_<!--rehype:tooltips-->
- [.ajaxError()](https://api.jquery.com/ajaxError/) _注册一个处理程序当 Ajax 请求完成但出现错误时调用。 这是一个 Ajax 事件_<!--rehype:tooltips-->
- [.ajaxSend()](https://api.jquery.com/ajaxSend/) _附加一个要在发送 Ajax 请求之前执行的函数。 这是一个 Ajax 事件_<!--rehype:tooltips-->
- [.ajaxStart()](https://api.jquery.com/ajaxStart/) _注册一个处理程序在第一个 Ajax 请求开始时调用。 这是一个 Ajax 事件_<!--rehype:tooltips-->
- [.ajaxStop()](https://api.jquery.com/ajaxStop/) _注册一个处理程序在所有 Ajax 请求完成时调用。 这是一个 Ajax 事件_<!--rehype:tooltips-->
- [.ajaxSuccess()](https://api.jquery.com/ajaxSuccess/) _附加一个要在 Ajax 请求成功完成时执行的函数。 这是一个 Ajax 事件_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 辅助功能
- [jQuery.param()](https://api.jquery.com/jQuery.param/) _创建适合在 URL 查询字符串或 Ajax 请求中使用的数组、普通对象或 jQuery 对象的序列化表示。 如果传递了 jQuery 对象,它应该包含具有名称/值属性的输入元素_<!--rehype:tooltips-->
- [.serialize()](https://api.jquery.com/serialize/) _将一组表单元素编码为字符串以供提交_<!--rehype:tooltips-->
- [.serializeArray()](https://api.jquery.com/serializeArray/) _将一组表单元素编码为名称和值的数组_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 底层接口
- [jQuery.ajax()](https://api.jquery.com/jQuery.ajax/) _执行异步 HTTP (Ajax) 请求_<!--rehype:tooltips-->
- [jQuery.prefilter()](https://api.jquery.com/jQuery.ajaxPrefilter/) _在发送每个请求之前和 $.ajax() 处理它们之前处理自定义 Ajax 选项或修改现有选项_<!--rehype:tooltips-->
- [jQuery.ajaxSetup()](https://api.jquery.com/jQuery.ajaxSetup/) _为将来的 Ajax 请求设置默认值。 不推荐使用它_<!--rehype:tooltips-->
- [jQuery.ajaxTransport()](https://api.jquery.com/jQuery.ajaxTransport/) _创建一个对象来处理 Ajax 数据的实际传输_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 速记方法
- [jQuery.get()](https://api.jquery.com/jQuery.get/) _使用 HTTP GET 请求从服务器加载数据_<!--rehype:tooltips-->
- [jQuery.getJSON()](https://api.jquery.com/jQuery.getJSON/) _使用 GET HTTP 请求从服务器加载 JSON 编码的数据_<!--rehype:tooltips-->
- [jQuery.getScript()](https://api.jquery.com/jQuery.getScript/) _使用 GET HTTP 请求从服务器加载 JavaScript 文件然后执行它_<!--rehype:tooltips-->
- [jQuery.post()](https://api.jquery.com/jQuery.post/) _使用 HTTP POST 请求将数据发送到服务器_<!--rehype:tooltips-->
- [.load()](https://api.jquery.com/load/) _从服务器加载数据并将返回的 HTML 放入匹配的元素中_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
各种各样的
------------
### jQuery 对象
- [jQuery()](https://api.jquery.com/jQuery/) _接受包含 CSS 选择器的字符串然后用于匹配一组元_<!--rehype:tooltips-->
- [jQuery.noConflict()](https://api.jquery.com/jQuery.noConflict/) _放弃 jQuery 对 $ 变量的控_<!--rehype:tooltips-->
- [jQuery.sub()](https://api.jquery.com/jQuery.sub/) _创建一个新的 jQuery 副本,可以在不影响原始 jQuery 对象的情况下修改其属性和方_<!--rehype:tooltips-->
- [jQuery.holdReady()](https://api.jquery.com/jQuery.holdReady/) _持有或释放jQuery的就绪事件的执_<!--rehype:tooltips-->
- [jQuery.when()](https://api.jquery.com/jQuery.when/) _提供一种基于零个或多个 Thenable 对象执行回调函数的方法,通常是表示异步事件的 Deferred 对_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 延迟对象
<!--rehype:wrap-class=row-span-2-->
- [jQuery.Deferred()](https://api.jquery.com/jQuery.Deferred/) _返回可链接实用程序对象的工厂函数该对象具有将多个回调注册到回调队列、调用回调队列以及中继任何同步或异步函数的成功或失败状态的方法_<!--rehype:tooltips-->
- [deferred.always()](https://api.jquery.com/deferred.always/) _添加要在延迟对象被解析或拒绝时调用的处理程序_<!--rehype:tooltips-->
- [deferred.done()](https://api.jquery.com/deferred.done/) _添加要在解析延迟对象时调用的处理程序_<!--rehype:tooltips-->
- [deferred.fail()](https://api.jquery.com/deferred.fail/) _添加处理程序以在延迟对象被拒绝时调用_<!--rehype:tooltips-->
- [deferred.isRejected()](https://api.jquery.com/deferred.isRejected/) _判断一个 Deferred 对象是否被拒绝_<!--rehype:tooltips-->
- [deferred.isResolved()](https://api.jquery.com/deferred.isResolved/) _判断一个 Deferred 对象是否已经解析_<!--rehype:tooltips-->
- [deferred.notify()](https://api.jquery.com/deferred.notify/) _使用给定的 args 在 Deferred 对象上调用 progressCallbacks_<!--rehype:tooltips-->
- [deferred.notifyWith()](https://api.jquery.com/deferred.notifyWith/) _使用给定的上下文和参数调用 Deferred 对象的 progressCallbacks_<!--rehype:tooltips-->
- [deferred.pipe()](https://api.jquery.com/deferred.pipe/) _过滤和/或链接 Deferreds 的实用方法_<!--rehype:tooltips-->
- [deferred.progress()](https://api.jquery.com/deferred.progress/) _添加在 Deferred 对象生成进度通知时要调用的处理程序_<!--rehype:tooltips-->
- [deferred.promise()](https://api.jquery.com/deferred.promise/) _返回一个 Deferred 的 Promise 对象_<!--rehype:tooltips-->
- [deferred.reject()](https://api.jquery.com/deferred.reject/) _拒绝 Deferred 对象并使用给定的 args 调用任何 failCallbacks_<!--rehype:tooltips-->
- [deferred.rejectWith()](https://api.jquery.com/deferred.rejectWith/) _拒绝 Deferred 对象并使用给定的上下文和参数调用任何 failCallbacks_<!--rehype:tooltips-->
- [deferred.resolve()](https://api.jquery.com/deferred.resolve/) _解析一个 Deferred 对象并使用给定的 args 调用任何 doneCallbacks_<!--rehype:tooltips-->
- [deferred.resolveWith()](https://api.jquery.com/deferred.resolveWith/) _解析延迟对象并使用给定的上下文和参数调用任何 doneCallbacks_<!--rehype:tooltips-->
- [deferred.state()](https://api.jquery.com/deferred.state/) _确定 Deferred 对象的当前状态_<!--rehype:tooltips-->
- [deferred.then()](https://api.jquery.com/deferred.then/) _添加要在延迟对象被解析、拒绝或仍在进行中时调用的处理程序_<!--rehype:tooltips-->
- [.promise()](https://api.jquery.com/promise/) _返回一个 Promise 对象以观察绑定到集合的特定类型的所有操作无论是否排队何时完成_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 公用事业
<!--rehype:wrap-class=row-span-3-->
- [jQuery.boxModel](https://api.jquery.com/jQuery.boxModel/) _说明用户浏览器中的当前页面是否正在使用 W3C CSS 盒模型呈现_<!--rehype:tooltips-->
- [jQuery.browser](https://api.jquery.com/jQuery.browser/) _包含用户代理的标志从 navigator.userAgent 读取。 此属性在 jQuery 1.9 中被删除,只能通过 jQuery.migrate 插件使用。 请尝试改用特征检测_<!--rehype:tooltips-->
- [jQuery.contains()](https://api.jquery.com/jQuery.contains/) _检查一个 DOM 元素是否是另一个 DOM 元素的后代_<!--rehype:tooltips-->
- [jQuery.each()](https://api.jquery.com/jQuery.each/) _通用迭代器函数可用于无缝迭代对象和数组。 具有长度属性的数组和类似数组的对象(例如函数的参数对象)按数字索引迭代,从 0 到 length-1。 其他对象通过它们的命名属性迭代_<!--rehype:tooltips-->
- [jQuery.extend()](https://api.jquery.com/jQuery.extend/) _将两个或多个对象的内容合并到第一个对象中_<!--rehype:tooltips-->
- [jQuery.globalEval()](https://api.jquery.com/jQuery.globalEval/) _全局执行一些 JavaScript 代码_<!--rehype:tooltips-->
- [jQuery.grep()](https://api.jquery.com/jQuery.grep/) _查找满足过滤功能的数组元素。 原数组不受影响_<!--rehype:tooltips-->
- [jQuery.inArray()](https://api.jquery.com/jQuery.inArray/) _在数组中搜索指定值并返回其索引如果未找到则返回 -1_<!--rehype:tooltips-->
- [jQuery.isArray()](https://api.jquery.com/jQuery.isArray/) _判断参数是否为数组_<!--rehype:tooltips-->
- [jQuery.isEmptyObject()](https://api.jquery.com/jQuery.isEmptyObject/) _检查对象是否为空不包含可枚举属性_<!--rehype:tooltips-->
- [jQuery.isFunction()](https://api.jquery.com/jQuery.isFunction/) _确定其参数是否可作为函数调用_<!--rehype:tooltips-->
- [jQuery.isNumeric()](https://api.jquery.com/jQuery.isNumeric/) _确定其参数是否表示 JavaScript 数字_<!--rehype:tooltips-->
- [jQuery.isPlainObject()](https://api.jquery.com/jQuery.isPlainObject/) _检查对象是否为普通对象_<!--rehype:tooltips-->
- [jQuery.isWindow()](https://api.jquery.com/jQuery.isWindow/) _判断参数是否为窗口_<!--rehype:tooltips-->
- [jQuery.isXMLDoc()](https://api.jquery.com/jQuery.isXMLDoc/) _检查 DOM 节点是否在 XML 文档中(或者是 XML 文档_<!--rehype:tooltips-->
- [jQuery.makeArray()](https://api.jquery.com/jQuery.makeArray/) _将类数组对象转换为真正的 JavaScript 数组_<!--rehype:tooltips-->
- [jQuery.map()](https://api.jquery.com/jQuery.map/) _将数组或对象中的所有项转换为新的项数组_<!--rehype:tooltips-->
- [jQuery.merge()](https://api.jquery.com/jQuery.merge/) _将两个数组的内容合并到第一个数组中_<!--rehype:tooltips-->
- [jQuery.noop()](https://api.jquery.com/jQuery.noop/) _空函数_<!--rehype:tooltips-->
- [jQuery.now()](https://api.jquery.com/jQuery.now/) _返回代表当前时间的数字_<!--rehype:tooltips-->
- [jQuery.parseHTML()](https://api.jquery.com/jQuery.parseHTML/) _将字符串解析为 DOM 节点数组_<!--rehype:tooltips-->
- [jQuery.parseJSON()](https://api.jquery.com/jQuery.parseJSON/) _获取格式正确的 JSON 字符串并返回生成的 JavaScript 值_<!--rehype:tooltips-->
- [jQuery.parseXML()](https://api.jquery.com/jQuery.parseXML/) _将字符串解析为 XML 文档_<!--rehype:tooltips-->
- [jQuery.proxy()](https://api.jquery.com/jQuery.proxy/) _接受一个函数并返回一个总是有特定上下文的新函数_<!--rehype:tooltips-->
- [jQuery.support](https://api.jquery.com/jQuery.support/) _表示存在不同浏览器功能或错误的属性集合。 用于 jQuery 的内部使用; 当内部不再需要特定属性以提高页面启动性能时,可能会删除它们。 对于您自己项目的功能检测需求,我们强烈建议使用外部库(例如 Modernizr而不是依赖于 jQuery.support 中的属性_<!--rehype:tooltips-->
- [jQuery.trim()](https://api.jquery.com/jQuery.trim/) _删除字符串开头和结尾的空格_<!--rehype:tooltips-->
- [jQuery.type()](https://api.jquery.com/jQuery.type/) _确定对象的内部 JavaScript [[Class]]_<!--rehype:tooltips-->
- [jQuery.unique()](https://api.jquery.com/jQuery.unique/) _对 DOM 元素数组进行适当的排序,并删除重复项。 请注意,这仅适用于 DOM 元素数组不适用于字符串或数字_<!--rehype:tooltips-->
- [jQuery.uniqueSort()](https://api.jquery.com/jQuery.uniqueSort/) _对 DOM 元素数组进行适当的排序,并删除重复项。 请注意,这仅适用于 DOM 元素数组不适用于字符串或数字_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### DOM 元素方法
- [.get()](https://api.jquery.com/get/) _检索与 jQuery 对象匹配的元素之一_<!--rehype:tooltips-->
- [.index()](https://api.jquery.com/index/) _从匹配的元素中搜索给定的元素_<!--rehype:tooltips-->
- [.size()](https://api.jquery.com/size/) _返回 jQuery 对象中元素的数量_<!--rehype:tooltips-->
- [.toArray()](https://api.jquery.com/toArray/) _检索 jQuery 集合中包含的所有元素作为数组_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 内部结构
- [.jquery](https://api.jquery.com/jquery-2/) _包含 jQuery 版本号的字符串_<!--rehype:tooltips-->
- [.context](https://api.jquery.com/context/) _最初传递给 jQuery() 的 DOM 节点上下文; 如果未通过则上下文可能是文档_<!--rehype:tooltips-->
- [jQuery.error()](https://api.jquery.com/jQuery.error/) _获取一个字符串并抛出包含它的异常_<!--rehype:tooltips-->
- [.length](https://api.jquery.com/length/) _jQuery 对象中元素的数量_<!--rehype:tooltips-->
- [.pushStack()](https://api.jquery.com/pushStack/) _将一组 DOM 元素添加到 jQuery 堆栈中_<!--rehype:tooltips-->
- [.selector](https://api.jquery.com/selector/) _代表选择器的选择器在创建原始集合时传递给 jQuery()如果有的话_<!--rehype:tooltips-->
<!--rehype:className=cols-2 style-none-->
### 回调对象
- [jQuery.Callbacks()](https://api.jquery.com/jQuery.Callbacks/) _一个多用途回调列表对象提供了一种管理回调列表的强大方法_<!--rehype:tooltips-->
- [callbacks.add()](https://api.jquery.com/callbacks.add/) _将回调或回调集合添加到回调列表_<!--rehype:tooltips-->
- [callbacks.disable()](https://api.jquery.com/callbacks.disable/) _禁止回调列表做更多的事情_<!--rehype:tooltips-->
- [callbacks.disabled()](https://api.jquery.com/callbacks.disabled/) _确定回调列表是否已被禁用_<!--rehype:tooltips-->
- [callbacks.empty()](https://api.jquery.com/callbacks.empty/) _从列表中删除所有回调_<!--rehype:tooltips-->
- [callbacks.fire()](https://api.jquery.com/callbacks.fire/) _使用给定参数调用所有回调_<!--rehype:tooltips-->
- [callbacks.fired()](https://api.jquery.com/callbacks.fired/) _确定回调是否已至少被调用一次_<!--rehype:tooltips-->
- [callbacks.fireWith()](https://api.jquery.com/callbacks.fireWith/) _使用给定的上下文和参数调用列表中的所有回调_<!--rehype:tooltips-->
- [callbacks.has()](https://api.jquery.com/callbacks.has/) _确定列表是否附加了任何回调。如果回调作为参数提供请确定它是否在列表中_<!--rehype:tooltips-->
- [callbacks.lock()](https://api.jquery.com/callbacks.lock/) _将回调列表锁定在其当前状态_<!--rehype:tooltips-->
- [callbacks.locked()](https://api.jquery.com/callbacks.locked/) _判断回调列表是否被锁定_<!--rehype:tooltips-->
- [callbacks.remove()](https://api.jquery.com/callbacks.remove/) _从回调列表中删除回调或回调集合_<!--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

@ -1,7 +1,13 @@
Koajs 备忘清单
===
基于 Node.js 平台的下一代 web 开发框架,包含 [Koa](https://koajs.com/) 的 API 参考列表和一些示例。
[![NPM version](https://img.shields.io/npm/v/koa.svg?style=flat)](https://npmjs.org/package/koa)
[![Downloads](https://img.shields.io/npm/dm/koa.svg?style=flat)](https://www.npmjs.com/package/koa)
[![Repo Dependents](https://badgen.net/github/dependents-repo/koajs/koa)](https://github.com/koajs/koa/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/koajs/koa)
基于 Node.js 平台的下一代 web 开发框架,包含 [Koa](https://koajs.com/) 的 API 参考列表和一些示例
<!--rehype:style=padding-top: 12px;-->
入门
---

View File

@ -350,7 +350,7 @@ when(grade) {
var height = 46 // inches
if (height in 1..53) {
println("抱歉,您必须至少 54 英寸才能乘坐过山车"
println("抱歉,您必须至少 54 英寸才能乘坐过山车")
}
// Prints: 抱歉,您必须至少 54 英寸才能乘坐过山车
```
@ -606,6 +606,75 @@ fun main() {
```
<!--rehype:className=wrap-text-->
### 简单的高阶函数
<!--rehype:wrap-class=col-span-2-->
```kotlin
//注意啦这里的num1AndNum2有个operation它是接收了一个函数作为形参
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
//让我们试着向operation传入参数
return operation(num1, num2)
}
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-->
---

344
docs/kubernetes.md Normal file
View File

@ -0,0 +1,344 @@
Kubernetes 备忘清单
===
查看资源信息
---
### 节点
资源名称: nodes, 缩写: no
```bash
$ kubectl get no # 显示所有节点信息
$ kubectl get no -o wide # 显示所有节点的更多信息
$ kubectl describe no # 显示节点详情
$ kubectl get no -o yaml # 以yaml格式显示节点详情
$ kubectl get node --selector=[label_name] # 筛选指定标签的节点
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 输出jsonpath表达式定义的字段信息
$ kubectl top node [node_name] # 显示节点(CPU/内存/存储)使用情况
```
### 容器组
资源名称: 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
```
### 守护进程集
资源名称: 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
```
### 日志
```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
```
### 服务帐户
资源名称: 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
```
### 副本集
资源名称: 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]
```
### 标签
```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]
```
### 无状态/命名空间
```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]
```
### 注释
```bash
$ kubectl annotatepo [pod_name] [annotation]
$ kubectl annotateno [node_name]
```
添加资源
---
### 创建容器组
```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
```
### 容器交互
```bash
$ kubectl run [pod_name] --image=busybox --rm -it --restart=Never -- sh
```
### 输出YAML文件
```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 -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)_

View File

@ -1,7 +1,13 @@
Lerna 备忘清单
===
本备忘单旨在快速理解 [Lerna v6](https://github.com/lerna/lerna) 所涉及的主要概念,显示了它的常用命令使用清单。
[![NPM version](https://img.shields.io/npm/v/lerna.svg?style=flat)](https://www.npmjs.com/package/lerna)
[![Downloads](https://img.shields.io/npm/dm/lerna.svg?style=flat)](https://www.npmjs.com/package/lerna)
[![Repo Dependents](https://badgen.net/github/dependents-repo/lerna/lerna/nest)](https://github.com/lerna/lerna/nest/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/lerna/lerna/nest)
本备忘单旨在快速理解 [Lerna v6](https://github.com/lerna/lerna) 所涉及的主要概念,显示了它的常用命令使用清单
<!--rehype:style=padding-top: 12px;-->
入门
----

View File

@ -1,7 +1,13 @@
Less 备忘清单
===
本备忘单旨在快速理解 [Less](https://github.com/less/less.js) 所涉及的主要概念,显示了它的常用方法使用清单。
[![NPM version](https://img.shields.io/npm/v/less.svg?style=flat)](https://npmjs.org/package/less)
[![Downloads](https://img.shields.io/npm/dm/less.svg?style=flat)](https://www.npmjs.com/package/less)
[![Repo Dependents](https://badgen.net/github/dependents-repo/nestjs/nest)](https://github.com/less/less.js/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/less/less.js)
本备忘单旨在快速理解 [Less](https://github.com/less/less.js) 所涉及的主要概念,显示了它的常用方法使用清单
<!--rehype:style=padding-top: 12px;-->
入门
---

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

@ -0,0 +1,224 @@
Linux 命令速查表
===
这个快速参考备忘单提供了使用 Linux 常用命令的使用清单
命令速查表
---
### 系统
<!--rehype:wrap-class=row-span-2-->
:--- | :---
:--- | :---
**`uname`** | 显示linux系统信息
**`uname -r`** | 显示内核版本信息
**`uptime`** | 显示系统运行的时间<br/>(包括平均负载)
**`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`** | 显示有关CPU的更多信息例如型号、型号名称、核心、厂商标识
**`cat /proc/meminfo`** | 显示有关硬件内存的更多信息,例如总内存和可用内存
**`lshw`** | 显示有关系统硬件配置的信息
**`lsblk`** | 显示块设备相关信息
**`free -m`** | 显示系统中空闲和使用的内存(-m标志表示内存(MB))
**`lspci -tv`** | 在树状图中显示PCI设备
**`lsusb -tv`** | 以树状图的形式显示USB设备
**`dmidecode`** | 显示BIOS中的硬件信息
**`hdparm -i /dev/xda`** | 显示有关磁盘数据的信息
**`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`** | 列出文件-包括常规文件和隐藏文件以及它们的权限
**`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-3-->
:--- | :---
:--- | :---
**`ps`** | 显示当前活动的进程
**`ps aux \| grep 'telnet'`** | 搜索进程'telnet'的id
**`pmap`** | 显示进程的内存映射
**`top`** | 显示所有正在运行的进程
**`kill pid`** | 使用给定的pid终止进程
**`killall proc`** | 杀死/终止所有名为proc的进程
**`pkill process-name`** | 向具有其名称的进程发送信号
**`bg`** | 将一个在后台暂停的命令,变成继续执行
**`fg`** | 将后台中的命令调至前台继续运行
**`fg n`** | job n to the foreground
**`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-->
另见
---
- [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

@ -293,7 +293,7 @@ print(a ^ b) -- 64.0
---
### 运算符
<!--rehype:wrap-class=row-span-2-->
<!--rehype:wrap-class=row-span-3-->
#### 关系运算符

1031
docs/make.md Normal file

File diff suppressed because it is too large Load Diff

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

@ -1,7 +1,13 @@
NestJS 备忘清单
===
[![NPM version](https://img.shields.io/npm/v/@nestjs/core.svg?style=flat)](https://www.npmjs.com/package/@nestjs/core)
[![Downloads](https://img.shields.io/npm/dm/@nestjs/core.svg?style=flat)](https://www.npmjs.com/package/@nestjs/core)
[![Repo Dependents](https://badgen.net/github/dependents-repo/nestjs/nest)](https://github.com/nestjs/nest/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/nestjs/nest)
[NestJS](https://docs.nestjs.com/) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架
<!--rehype:style=padding-top: 12px;-->
创建应用
---
@ -109,7 +115,7 @@ $ npm run start
```
<!--rehype:className=wrap-text-->
需要[注意]((https://docs.nestjs.com/first-steps#language))的一点是,`JavaScript`的版本是需要`Babel`
需要[注意](<https://docs.nestjs.com/first-steps#language>)的一点是,`JavaScript` 的版本是需要 `Babel`
另见
---

1591
docs/nextjs.md Normal file

File diff suppressed because it is too large Load Diff

313
docs/pacman.md Normal file
View File

@ -0,0 +1,313 @@
Pacman 备忘清单
===
这个是 Arch Linux 软件包管理器 Pacman 快速参考备忘单显示了它的常用命令使用清单。
PACMAN 清单查询
---
### 介绍
<!--rehype:wrap-class=row-span-2-->
Pacman 是 Arch Linux 软件包管理器。帮助您在 Arch Linux 上使用 Pacman 软件包管理器进行软件包的安装、升级、搜索和删除等操作
---
命令语法格式
```bash
$ pacman [ OPTIONS ] COMMAND
```
同步非本地(local)软件仓库并升级系统的软件包
```bash
$ pacman -Syu
```
子命令描述和任务,显示 apt 命令和选项。
```bash
$ pacman -h or --help
# 或
$ pacman
```
查看指令用法
```bash
$ man pacman
```
请注意,使用 Pacman 命令时,需要管理员权限 `sudo`
---
相关参考文献
- [Archlinux Wiki 官方文档](https://wiki.archlinuxcn.org/wiki/Pacman)
### 示例
<!--rehype:wrap-class=row-span-2-->
Option | Function
:-- | --
`pacman -D, --database` | 操作软件包数据库
`pacman -Q, --query` | 从数据库中查询软件包
`pacman -R, --remove` | 从系统中移除软件包
`pacman -S, --sync` | 同步软件包
`pacman -T, --deptest` | 检查依赖关系
`pacman -U, --upgrade` | 将包升级或添加到系统,并从同步存储库安装所需的依赖项。
`pacman -F, --files` | 查询文件数据库。
`pacman -V, --version` | 显示版本
`pacman -h, --help` | 显示帮助信息
<!--rehype:className=style-list-arrow-->
升级所有已安装的软件包
```bash
$ sudo pacman -Syu
```
### 安装
要安装单个或者一系列软件包(包含软件包的依赖)
```bash
$ pacman -S 包名_1 包名_2 ...
```
要通过正则表达式安装一系列软件包
```bash
$ pacman -S $(pacman -Ssq 包正则表达式)
```
有时软件包有多个版本,放在不同的仓库内(例如 extra 和 testing
```bash
$ pacman -S extra/包名
```
要安装多个含有相似名称的软件包,可以使用花括号扩展
```bash
$ pacman -S plasma-{desktop,mediacenter,nm}
```
可以多层扩展到需要的层次:
```bash
$ pacman -S plasma-{workspace{,-wallpapers},pa}
```
### 安装包组
一些包属于一个可以同时安装的软件包组
```bash
$ pacman -S gnome
```
想要查看哪些包属于 gnome 组
```bash
$ pacman -Sg gnome
```
### 查询包数据库
<!--rehype:wrap-class=row-span-3-->
pacman 使用 -Q 参数查询本地软件包数据库, -S 查询同步数据库,以及 -F查询文件数据库
pacman 可以在包数据库中查询软件包,查询位置包含了软件包的名字和描述
```bash
$ pacman -Ss string1 string2 ...
```
使用正则
```bash
$ pacman -Ss '^vim-'
```
要查询已安装的软件包:
```bash
$ pacman -Qs string1 string2 ...
```
按文件名查找软件库:
```bash
$ pacman -F string1 string2 ...
```
显示软件包的详尽的信息:
```bash
$ pacman -Si package_name
```
查询本地安装包的详细信息:
```bash
$ pacman -Qi package_name
```
同时显示备份文件和修改状态:
```bash
$ pacman -Qii package_name
```
要获取已安装软件包所包含文件的列表:
```bash
$ pacman -Ql package_name
```
查询远程库中软件包包含的文件:
```bash
$ pacman -Fl package_name
```
查软件包安装的文件是否都存在:
```bash
$ pacman -Qk package_name
```
查询数据库获取某个文件属于哪个软件包
```bash
$ pacman -Qo /path/to/file_name
```
查询文件属于远程数据库中的哪个软件包:
```bash
$ pacman -F /path/to/file_name
```
查询所有不再作为依赖的软件包(孤立orphans)
```bash
$ pacman -Qdt
```
查询所有明确安装而且不被其它包依赖的软件包:
```bash
$ pacman -Qet
```
### 清理软件包缓存
pacman 将下载的软件包保存在 /var/cache/pacman/pkg/ 并且不会自动移除旧的和未安装版本的软件包
要删除目前没有安装的所有缓存的包,和没有被使用的同步数据库
```bash
$ pacman -Sc
```
要删除缓存中的全部文件
```bash
$ pacman -Scc
```
#### Pactree
> 注意: pactree 不再是pacman包的一部分。它现在在pacman-contrib包中。
要显示软件包的依赖树:
```bash
$ pactree package_name
```
### 删除软件包
删除单个软件包,保留其全部已经安装的依赖关系
```bash
$ pacman -R package_name
```
删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:
```bash
# ⚠️删除类似 gnome 这样的软件包组时,将会忽略组中软件包的安装原因,因为实际操作上执行的是逐一删除软件组的每一个软件,依赖软件包的安装原因不会被忽略。
$ pacman -Rs package_name
```
<!--rehype:className=wrap-text -->
要删除软件包和所有依赖这个软件包的程序:
```bash
# ⚠️此操作是递归的,请小心检查,可能会一次删除大量的软件包。
$ pacman -Rsc package_name
```
要删除一个被其他软件包依赖的软件包,但是不删除依赖这个软件包的其他软件包
```bash
# ⚠️ 此操作有破坏系统的能力,应该尽量避免使用
$ pacman -Rdd package_name
```
### 查询一个包含具体文件的包名
同步文件数据库:
```bash
$ pacman -Fy
```
查询包含某个文件的包名,比如:
```bash
$ pacman -F pacman
core/pacman 5.0.1-4
usr/bin/pacman
usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.36-1
usr/lib/xscreensaver/pacman
```
### 其它命令
升级系统时安装其他软件包:
```bash
$ pacman -Syu package_name1 package_name2 ...
```
下载包而不安装它:
```bash
$ pacman -Sw package_name
```
安装一个本地包(不从源里下载)
```bash
$ pacman -U /path/to/package/package_name-version.pkg.tar.zst
```
要将本地包保存至缓存
```bash
$ pacman -U file:///path/to/package/package_name-version.pkg.tar.zst
```
安装一个远程包(不在 pacman 配置的源里面):
```bash
$ pacman -U http://www.example.com/repo/example.pkg.tar.zst
```

317
docs/pm2.md Normal file
View File

@ -0,0 +1,317 @@
PM2 备忘清单
===
[![NPM version](https://img.shields.io/npm/v/pm2.svg?style=flat)](https://npmjs.org/package/pm2)
[![Downloads](https://img.shields.io/npm/dm/pm2.svg?style=flat)](https://www.npmjs.com/package/pm2)
[![Repo Dependents](https://badgen.net/github/dependents-repo/Unitech/pm2)](https://github.com/Unitech/pm2/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/Unitech/pm2)
[PM2](https://pm2.keymetrics.io/) 是一个守护进程管理器它将帮助您管理和保持您的应用程序在线。PM2 入门非常简单,它以简单直观的 CLI 形式提供
<!--rehype:style=padding-top: 12px;-->
入门
-----
### 安装
最新的 PM2 版本可通过 NPM 或 Yarn 安装
```shell
$ npm install pm2@latest -g
```
或者
```shell
$ yarn global add pm2
```
### 启动应用程序
启动、守护进程和监视应用程序的最简单方法是使用此命令行
```shell
$ pm2 start app.js
```
或者轻松启动任何其他应用程序
```shell
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520
```
### 您可以传递给 CLI 的一些选项
<!--rehype:wrap-class=row-span-3-->
指定应用名称
```shell
--name <app_name>
```
文件更改时监视并重新启动应用程序
```shell
--watch
```
设置应用重新加载的内存阈值
```shell
--max-memory-restart <200MB>
```
指定日志文件
```shell
--log <log_path>
```
将额外的参数传递给脚本
```shell
-- arg1 arg2 arg3
```
自动重启之间的延迟
```shell
--restart-delay <delay in ms>
```
带时间的前缀日志
```shell
--time
```
不要自动重启应用程序
```shell
--no-autorestart
```
指定 cron 强制重启
```shell
--cron <cron_pattern>
```
附加到应用程序日志
```shell
--no-daemon
```
### 管理流程
管理应用程序状态很简单,这里是命令
```shell
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name
```
#### 你可以传递而不是 app_name
- `all` 作用于所有进程
- `id` 作用于特定的进程 ID
### 检查状态、日志、指标
<!--rehype:wrap-class=row-span-2-->
现在您已经启动了这个应用程序,您可以检查它的状态、日志、指标,甚至可以使用 [pm2.io](https://pm2.io/) 获取在线仪表板
列出PM2管理的所有应用的状态
```shell
$ pm2 [list|ls|status]
```
实时显示日志
```shell
$ pm2 logs
```
挖掘旧日志
```shell
$ pm2 logs --lines 200
```
这是一个直接适合您的终端的实时仪表板
```shell
$ pm2 monit
```
基于 Web 的仪表板,具有诊断系统的跨服务器
```shell
$ pm2 plus
```
### 集群模式
对于 Node.js 应用程序PM2 包括一个自动负载均衡器,它将在每个衍生进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接
以集群模式启动应用程序
```shell
$ pm2 start app.js -i max
```
在 [此处](https://pm2.keymetrics.io/docs/usage/quick-start/) 阅读有关集群模式的更多信息
### 生态系统文件
<!--rehype:wrap-class=row-span-2-->
您还可以创建一个称为生态系统文件的配置文件来管理多个应用程序。生成生态系统文件
```shell
$ pm2 ecosystem
```
这将生成一个 `ecosystem.config.js` 文件
```js
module.exports = {
apps : [{
name: "app",
script: "./app.js",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}, {
name: 'worker',
script: 'worker.js'
}]
}
```
并轻松启动
```shell
$ pm2 start ecosystem.config.js
```
在 [此处](https://pm2.keymetrics.io/docs/usage/application-declaration/) 阅读有关应用程序声明的更多信息
### 设置启动脚本
<!--rehype:wrap-class=col-span-2-->
使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要。为了解决这个问题,只需运行这个命令来生成一个活动的启动脚本
```shell
$ pm2 save
```
在 [此处](https://pm2.keymetrics.io/docs/usage/startup/) 阅读有关启动脚本生成器的更多信息
### 重新启动应用程序更改
<!--rehype:wrap-class=col-span-2-->
使用 `--watch` 选项非常简单
```shell
$ cd /path/to/my/app
$ pm2 start env.js --watch --ignore-watch="node_modules"
```
这将在当前目录 `+` 所有子文件夹中的任何文件更改时监视并重新启动应用程序,并且它将忽略 `node_modules` 文件夹中的任何更改 `--ignore-watch="node_modules"`
```bash
$ pm2 logs
```
然后,您可以使用上面命令来检查重新启动的应用程序日志。
PM2 CheatSheet
---
<!--rehype:body-class=cols-2-->
以下是一些值得了解的命令。 只需使用示例应用程序或开发机器上当前的 Web 应用程序来尝试它们
### PM2 分叉模式
```shell
$ pm2 start app.js --name my-api # 名称进程
```
### PM2 集群模式
```shell
$ pm2 start app.js -i 0 # 将根据可用的 CPU 使用 LB 启动最大进程
$ pm2 start app.js -i max # 与上面相同,但已弃用。
$ pm2 scale app +3 # 将 `app` 增加 3 名工人
$ pm2 scale app 2 # 将 `app` 向上或向下扩展到总共 2 个工人
```
### PM2 清单
```shell
$ pm2 list # 显示所有进程状态
$ pm2 jlist # 以原始 JSON 格式打印进程列表
$ pm2 prettylist # 以美化JSON打印进程列表
$ pm2 describe 0 # 显示有关特定进程的所有信息
$ pm2 monit # 监控所有进程
```
### PM2 日志
```shell
$ pm2 logs [--raw] # 在流中显示所有进程日志
$ pm2 flush # 清空所有日志文件
$ pm2 reloadLogs # 重新加载所有日志
```
### PM2 动作
```shell
$ pm2 stop all # 停止所有进程
$ pm2 restart all # 重启所有进程
$ pm2 reload all # 将 0s 停机时间重新加载(对于 NETWORKED 应用程序)
$ pm2 stop 0 # 停止特定进程 ID
$ pm2 restart 0 # 重启特定进程id
$ pm2 delete 0 # 将从 pm2 列表中删除进程
$ pm2 delete all # 将从 pm2 列表中删除所有进程
```
### PM2 杂项
```shell
$ pm2 reset <process> # 重置元数据(重启时间...
$ pm2 updatePM2 # 更新内存 pm2
$ pm2 ping # 确保 pm2 守护进程已经启动
$ pm2 sendSignal SIGUSR2 my-app # 向脚本发送系统信号
$ pm2 start app.js --no-daemon
$ pm2 start app.js --no-vizion
$ pm2 start app.js --no-autorestart
```
### 更新 PM2
我们让它变得简单,版本之间没有重大变化,过程很简单
```shell
$ npm install pm2@latest -g
```
然后更新内存中的PM2
```shell
$ pm2 update
```
另见
--------
- [QUICK START](https://pm2.keymetrics.io/docs/usage/quick-start/) _(pm2.keymetrics.io)_

248
docs/ps.md Normal file
View File

@ -0,0 +1,248 @@
ps 备忘清单
===
Linux 为我们提供了一个名为 `ps` 的实用程序,用于查看与系统上的进程相关的信息,它是 `Process Status` 的缩写
这份 `ps` 命令备忘清单的快速参考列表,包含常用选项和示例。
入门
---
### 语法
<!--rehype:wrap-class=row-span-4-->
```bash
$ ps [options]
```
命令运行示例,列出当前 shell 中的所有进程:
```bash
$ ps
PID TTY TIME CMD
12330 pts/0 00:00:00 bash
21621 pts/0 00:00:00 ps
```
---
:-- | --
:-- | --
`PID` | 唯一的进程 ID
`TTY` | 用户登录的终端类型
`TIME` | 进程运行的 CPU 数量,以分钟和秒为单位
`CMD` | 启动进程的命令的名称
注意:有时当我们执行 `ps` 命令时,它显示 `TIME``00:00:00`
---
ps 命令支持 3 种使用语法风格
- `Unix` 可以分组并以连字符开头
- `BSD` 可以分组但前面没有连字符
- `GNU` 长选项,前面有双连字符
### 示例
<!--rehype:wrap-class=row-span-3-->
Option | Function
:-- | --
`ps -ef / -aux` | 以完整格式列出当前正在运行的进程
`ps -ax` | 列出当前正在运行的进程
`ps -u <username>` | 列出特定用户的进程
`ps -C <command>` | 列出给定命令的进程
`ps -p <PID>` | 列出具有给定 PID 的进程
`ps -ppid <PPID>` | 列出具有给定 ppid 的进程
`pstree` | 在层次结构中显示过程
`ps -L` | 列出特定进程的所有线程
`ps --sort pmem` | 查找内存泄漏
`ps -eo` | 显示安全信息
`ps T` | 允许您仅选择与此终端关联的所有进程
`ps -U root -u root u` | 显示由 root 运行的进程
<!--rehype:className=code-nowrap-->
### 查看系统上的每个进程
要使用标准语法查看系统上的每个进程:
```bash
$ ps -e # 列出所有进程
$ ps -ef
$ ps -eF
$ ps -ely
```
要使用 BSD 语法查看系统上的每个进程:
```bash
$ ps ax # 以 BSD 格式列出所有进程
$ ps axu
```
### 打印进程树
```bash
$ ps -ejH
$ ps axjf
```
### 仅打印 PID 42 的名称
```bash
$ ps -q 42 -o comm=
```
### 获取有关线程的信息
```bash
$ ps -eLf
$ ps axms
```
### 列出当前用户拥有的所有进程
```bash
$ ps x
```
### 获取安全信息
<!--rehype:wrap-class=col-span-2-->
```bash
$ ps -eo euser,ruser,suser,fuser,f,comm,label
$ ps axZ
$ ps -eM
```
### 查看以 root 身份运行的每个进程
查看以 root 身份运行的每个进程(真实且有效的 ID用户格式
```bash
$ ps -U root -u root u
```
### 查看具有用户定义格式的每个进程
<!--rehype:wrap-class=col-span-2-->
```bash
$ ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
$ ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
$ ps -Ao pid,tt,user,fname,tmout,f,wchan
```
### 仅打印 syslogd 的进程 ID
```bash
$ ps -C syslogd -o pid=
```
### 显示面向用户的格式
<!--rehype:wrap-class=col-span-2 row-span-2-->
```bash
$ ps u
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
refs 11400 1.1 0.0 34853544 5816 s025 Ss Tue02PM 0:02.82 /bin/zsh --login
refs 34561 0.6 0.0 34822644 3152 s016 S+ 14Dec22 115:59.28 zsh (figterm)
refs 21377 0.5 0.0 34973972 7076 s028 S+ Wed09AM 4:32.19 zsh (figterm)
refs 78881 0.5 0.0 34843484 3256 s015 S+ 17Dec22 90:27.10 zsh (figterm)
```
### 列出具有完整格式的进程
```bash
$ ps f
$ ps -F
```
### 显示虚拟内存格式
```bash
$ ps v
```
### 按有效用户 ID 或名称显示进程
```bash
$ ps -u user[name or id]
# OR
$ ps --user user[name or id]
$ ps -u root
```
按**真实**用户 ID 或名称显示进程
```bash
$ ps -U user[name or id]
# OR
$ ps --User user[name or id]
```
### 按实际组 ID 或名称显示进程
```bash
$ ps -G group[name or id]
# OR
$ ps --Group group[name or id]
```
### 隐藏 ps 命令输出的标题
```bash
$ ps h
PID TT STAT TIME COMMAND
33790 s000 S+ 104:10.45 zsh (figterm)
33800 s001 Ss+ 0:02.76 /bin/zsh --login
77830 s002 S+ 90:22.51 zsh (figterm)
77840 s003 Ss 0:00.66 /bin/zsh --login
```
### 显示命令后的环境
```bash
$ ps e
PID TTY STAT TIME COMMAND
886 tty2 Ssl+ 0:00 /usr/li....
```
### 重复 ps 命令输出的标题行
```bash
$ ps --headers -A
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
```
### 显示进程树
```bash
$ ps --forest -A
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
3 ? 00:00:00 \_ rcu_gp
4 ? 00:00:00 \_ rcu_par_gp
960 ? 00:00:00 \_ goa-identity-se
1118 ? 00:00:00 \_ at-spi-bus-laun
1124 ? 00:00:00 | \_ dbus-daemon
```
您可以使用 -H 选项打印进程层次结构
```bash
$ ps -H -A
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
1832 ? 00:00:37 gnome-terminal-
1840 pts/0 00:00:00 bash
1925 pts/1 00:00:00 bash
2867 pts/1 00:00:00 su
2868 pts/1 00:00:00 bash
```

163
docs/pycharm.md Normal file
View File

@ -0,0 +1,163 @@
PyCharm 键盘快捷键备忘清单
===
这个 [PyCharm](https://resources.jetbrains.com/storage/products/pycharm/docs/PyCharm_ReferenceCard.pdf) 快速参考备忘单显示了它的键盘快捷键和命令
快捷键
---
### 创建和编辑
<!--rehype:wrap-class=col-span-2 row-span-2-->
:-- | --
:-- | --
`Alt` + `Enter` | 显示意图动作
`Ctrl` + `Space` | 基本代码完成
`Ctrl` + `Shift` + `Space` | 智能代码完成
`Ctrl` + `Alt` + `Space` | 类型名称完成
`Ctrl` + `Shift` + `Enter` | 完整声明
`Ctrl` + `P` / `Alt` + `Q` | 参数信息/上下文信息
`Ctrl` + `Shift` + `I` | 快速定义
`Ctrl` + `Q` / `Shift` + `F1` | 快速/外部文档
`Alt` + `Insert` | 生成代码
`Ctrl` + `O` / `Ctrl` + `I` | 覆盖/实施成员
`Ctrl` + `Alt` + `T` | 围绕着……
`Ctrl` + `/` | 注释行注释
`Ctrl` + `W` / `Ctrl` + `Shift` + `W` | 扩展/收缩选择
`Ctrl` + `Alt` + `O` | 优化导入
`Ctrl` + `Alt` + `I` | 自动缩进行
`Ctrl` + `X` / `Ctrl` + `C` / `Ctrl` + `V` | 剪切/复制/粘贴
`Ctrl` + `Shift` + `C` | 复制文档路径
`Ctrl` + `Shift` + `V` | 从剪贴板历史粘贴
`Ctrl` + `D` | 复制当前行或选择
`Ctrl` + `Shift` + `Up` / `Down` | 向上/向下移动线
`Ctrl` + `Y` | 删除插入符处的行
`Ctrl` + `Shift` + `J` / `Ctrl` + `Enter` | 加入/分割线
`Shift` + `Enter` | 开始新行
`Ctrl` + `Shift` + `U` | 切换大小写
`Ctrl` + `NumPad` `+` / `-` | 展开/折叠代码块
`Ctrl` + `Shift` + `NumPad` `+` / `-` | 全部展开/折叠
`Ctrl` + `S` | 保存全部
<!--rehype:className=shortcuts-->
### 版本控制
:-- | --
:-- | --
`Alt` + <code>`</code> | VCS 操作弹出...
`Ctrl` + `K` | 提交
`Ctrl` + `T` | 更新项目
`Alt` + `Shift` + `C` | 近期变动
`Ctrl` + `Alt` + `Z` | 恢复
`Ctrl` + `Shift` + `K` | 推…
`Ctrl` + `Alt` + `Shift` + `Down` / `Up` | 下一个/上一个更改
<!--rehype:className=shortcuts-->
### 掌握您的 IDE
:-- | --
:-- | --
`Ctrl`+`Shift`+`A` | 寻找行动...
`Alt`+`[0-9]` | 打开一个工具窗口
`Ctrl`+`Alt`+`Y` | 同步
`Ctrl`+<code>`</code> | 快速切换方案...
`Ctrl`+`Alt`+`S` | 设置...
`F4` / `Alt`+`Home` | 跳转到源/导航栏
`F12` | 跳转到最后一个工具窗口
`Shift`+`Esc` / `Ctrl`+`Shift`+`F12` | 隐藏活动/所有工具窗口
`Alt`+`Right` / `Alt`+`Left` | 转到下一个/上一个编辑器选项卡
`Esc` | 转到编辑器(从工具窗口)
`Ctrl`+`Shift`+`F4` / `Ctrl`+`F4` | 关闭活动标签/窗口
<!--rehype:className=shortcuts left-align-->
### 找到一切
:-- | --
:-- | --
`Shift` + `Shift` | 到处搜索
`Ctrl` + `F` / `R` | 查找/替换
`Ctrl` + `Shift` + `F` / `R` | 在路径中查找/在路径中替换
`F3` / `Shift` + `F3` | 下/上一个事件
`Ctrl` + `F3` | 在插入符处查找单词
`Ctrl` + `N` / `Ctrl` + `Shift` + `N` | 去班级/档案
`Ctrl` + `F12` | 转到文件成员
`Ctrl` + `Alt` + `Shift` + `N` | 转到符号
<!--rehype:className=shortcuts-->
### 从符号导航
:-- | --
:-- | --
`Ctrl` + `B` | 声明
`Ctrl` + `Shift` + `B` | 类型声明 _(仅限 JavaScript)_
`Ctrl` + `U` | 超级方法
`Ctrl` + `Alt` + `B` | 实施
`Alt` + `F7` / `Ctrl` + `F7` | 查找用法/在文件中查找用法
`Ctrl` + `Shift` + `F7` | 突出显示文件中的用法
`Ctrl` + `Alt` + `F7` | 显示用法
<!--rehype:className=shortcuts-->
### 重构和清理
:-- | --
:-- | --
`Ctrl` + `Alt` + `Shift` + `T` | 重构这个……
`F5` /`F6` | 复制…/移动…
`Alt` + `Delete` | 安全删除…
`Shift` + `F6` | 改名…
`Ctrl` + `F6` | 更改签名…
`Ctrl` + `Alt` + `N` | 排队…
`Ctrl` + `Alt` + `M` | 提取方法
`Ctrl` + `Alt` + `V` / `P` | 引入变量/参数
`Ctrl` + `Alt` + `F` / `C` | 引入字段/常量
`Ctrl` + `Alt` + `L` | 重新格式化代码
<!--rehype:className=shortcuts-->
### 分析和探索
:-- | --
:-- | --
`Ctrl` + `F1` | 显示错误描述
`F2` / `Shift` + `F2` | 下一个/上一个突出显示的错误
`Ctrl` + `Alt` + `Shift` + `I` | 按名称运行检查...
`Ctrl` + `H` / `Ctrl` + `Alt` + `H` | 类型/调用层次结构
<!--rehype:className=shortcuts-->
### 在上下文中导航
:-- | --
:-- | --
`Alt`+`F1` | 选择...
`Ctrl`+`E` / `Ctrl`+`Shift`+`E` | 最近查看/最近位置
`Ctrl`+`Shift`+`Back` | 最后编辑位置
`Ctrl`+`Alt`+`Left` / `Right` | 向后/向前导航
`Alt`+`Up` / `Down` | 转到上一个/下一个方法
`Ctrl`+`G` | 转到行/列...
`Ctrl`+`]` / `[` | 转到代码块结束/开始
`Alt`+`Shift`+`F` | 添加到收藏夹
`F11` | 切换书签
`Ctrl`+`F11` | 使用助记符切换书签
`Ctrl`+`[0-9]` | 转到编号书签
`Shift`+`F11` | 显示书签
<!--rehype:className=shortcuts-->
### 构建、运行和调试
:-- | --
:-- | --
`Ctrl` + `Shift` + `F10` | 运行上下文配置
`Alt` + `Shift` + `F10`/`F9` | 运行/调试所选配置
`Shift` + `F10`/`F9` | 运行/调试当前配置
`F8` / `F7` | 跨过/进入
`Shift` + `F7` | 智能步入
`Shift` + `F8` | 走出去
`Alt` + `F9` / `Ctrl` + `Alt` + `F9` | 运行到光标/强制运行到光标
`Alt` + `F10` | 显示执行点
`Alt` + `F8` | 评估表达...
`Ctrl` + `F2` | 停止
`Ctrl` + `Shift` + `F2` | 停止后台进程...
`F9` | 恢复程序
`Ctrl` + `F8` | 切换行断点
`Ctrl` + `Alt` + `Shift` + `F8` | 切换临时行断点
`Ctrl` + `Shift` + `F8` | 编辑/查看断点
<!--rehype:className=shortcuts-->

View File

@ -152,7 +152,7 @@ message += "Part 2."
'10 + 10 = 20'
```
查看: [Python F-Strings](#f-字符串(Python 3.6+))
查看: [Python F-Strings](#python-f-字符串自-python-36-起)
Python 数据类型
---------------
@ -441,6 +441,18 @@ Enter your name: Tom
True
```
### 转义符号
| 转义符号 | 对应的操作 |
|---|---|
| `\\` | 输出反斜杠 |
| `\'` | 输出单引号 |
| `\"` | 输出双引号 |
| `\n` | 换行 |
| `\t` | 水平制表符 |
| `\r` | 光标回到首位 |
| `\b` | 退格 |
Python F 字符串(自 Python 3.6+ 起)
----------------
@ -477,7 +489,7 @@ Python F 字符串(自 Python 3.6+ 起)
'text '
>>> f'{"test":*>10}' # 向左填充
'******test'
>>> f'{"test":*<10}' # 填写正确
>>> f'{"test":*<10}' # 向右填充
'test******'
>>> f'{"test":*^10}' # 填充中心
'***test***'
@ -637,7 +649,7 @@ a_list[start:end:step]
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
```
#### 迈着大步
#### 跳跃索引
```python
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
@ -666,7 +678,7 @@ a_list[start:end:step]
['butter']
```
### 使用权
### 列表边界
```python
>>> li = ['a', 'b', 'c', 'd']

View File

@ -110,6 +110,84 @@ class=tag&data-info=👆看看还缺点儿什么?
添加 `class=tag&data-lang=Python` 类名和参数,会在卡片右上角标记 _`Python`_
### Command Help
```bash
Usage: refs-cli [output-dir] [--help|h]
显示帮助信息
Options:
--version, -v 显示版本号
--help, -h 显示帮助信息
--watch, -w 观看并编译 Markdown 文件
--output, -o 输出目录。默认(分布)
--force, -f 强制文件重新生成
Example:
$ npx refs-cli
$ refs-cli --watch
$ refs-cli --output website
$ refs-cli
refs-cli@v0.0.1
```
### Config
```json
{
"title": "文档网站名称",
"description": "{{description}} 网站说明",
"keywords": "关键字,refs-cli,refs,cli",
"data-info": "👆需要你的参与",
"search": {
"label": "搜索",
"placeholder": "搜索备忘清单",
"cancel": "取消"
},
"editor": {
"label": "编辑"
},
"github": {
"url": "https://<github url>"
},
"home": {
"label": "首页",
"url": "https://<你的网站>"
},
"footer": "<br />备案号支持HTML字符串",
"license": "支持 HTML 字符串"
}
```
`.refsrc.json` 存放在项目的根目录下
### 环境变量
导航菜单
```ini
REF_URL=http://ref.ecdata.cn/
REF_LABEL=网站首页
```
页脚添加 (支持 HTML 字符串)
```ini
REF_FOOTER=备案号沪ICP备20220000000号-1
```
修改版权信息 (支持 HTML 字符串)
```ini
LICENSE=Copyright (c) <b>2022</b> 小弟调调™
```
在项目根目录中创建 <pur>**.env**</pur> 文件
Markdown 语法注释
---
@ -760,6 +838,16 @@ H2 部分
默认表格末尾列`右对齐`,添加 `<!--rehype:className=left-align-->` 类让其`左对齐`
### 强制 code 不换行
| Command | Description |
| ---- | ---- |
| `adb remount` | Remounts file system with read/write access |
| `adb reboot bootloader` | Reboots the device into fastboot |
<!--rehype:className=show-header code-nowrap-->
添加 `<!--rehype:className=code-nowrap-->` 注释
列表
---

1651
docs/react-native.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,24 @@
React 备忘清单
===
适合初学者的综合 React 备忘清单。
[![NPM version](https://img.shields.io/npm/v/react.svg?style=flat)](https://npmjs.org/package/react)
[![Downloads](https://img.shields.io/npm/dm/react.svg?style=flat)](https://www.npmjs.com/package/react)
[![Repo Dependents](https://badgen.net/github/dependents-repo/facebook/react)](https://github.com/facebook/react/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/facebook/react)
适合初学者的综合 React 备忘清单
<!--rehype:style=padding-top: 12px;-->
入门
----
### 介绍
React 是一个用于构建用户界面的 JavaScript 库
React 是一个用于构建用户界面的 JavaScript 库
- [React 官方文档](https://reactjs.org/) _(reactjs.org)_
- [Styled Components 备忘清单](./styled-components.md) _(jaywcjlove.github.io)_
- [TypeScript JSX 备忘清单](./typescript.md#jsx) _(jaywcjlove.github.io)_
```js
import {createRoot} from 'react-dom/client'

1071
docs/reactrouter.md Normal file

File diff suppressed because it is too large Load Diff

3594
docs/redis.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -297,7 +297,7 @@ RegEX 备忘清单
范例 | 说明
:-|-
`colou?r` | 匹配 <yel>color</yel><yel>color</yel>
`colou?r` | 匹配 <yel>color</yel><yel>colour</yel>
`[BW]ill[ieamy's]*` | 匹配 <yel>Bill</yel><yel>Willy</yel><yel>William's</yel> 等。
`[a-zA-Z]+` | 匹配 1 个或多个字母
`\d{3}-\d{2}-\d{4}` | 匹配 SSN
@ -615,7 +615,7 @@ M(?(?=.*?\bher\b)s|r)\.
表达式 | 匹配示例
:- | -
`The` | The `fat` cat sat on the mat.
`The` | `The` fat cat sat on the mat.
`/The/gi` | `The` fat cat sat on `the` mat.
<!--rehype:className=show-header-->

View File

@ -180,7 +180,7 @@ let p = Point { x: 10, y: 11 };
let px: i32 = p.x;
```
#### 元结构体
#### 元结构体
```rust
struct Color (i32, i32, i32);
@ -223,6 +223,18 @@ fn main(){
}
```
### 区间表达式
<!--rehype:wrap-class=col-span-2-->
产生式/句法规则 | 句法 | 类型 | 区间语义
:- | :- | :- | :-
RangeExpr | `start..end` | std::ops::Range | start ≤ x < end
RangeFromExpr | `start..` | std::ops::RangeFrom | start x
RangeToExpr | `..end` | std::ops::RangeTo | x < end
RangeFullExpr | `..` | std::ops::RangeFull | -
RangeInclusiveExpr | `start..=end`| std::ops::RangeInclusive | start x end
RangeToInclusiveExpr | `..=end` | std::ops::RangeToInclusive | x end
Rust 类型
--------
@ -354,6 +366,14 @@ rand.capacity() // => 13
以字节为单位计算字符串的容量
### with_capacity()
```rust
let s = String::with_capacity(10);
```
指定一个足够大的容量值,来减少内存拷贝
### .contains()
```rust
@ -484,6 +504,147 @@ let arr = vec![
`drain(range)` | 删除 `vec` 中指定范围的元素,同时返回一个迭代该范围所有元素的迭代器
`split_off(index)` | 切分 `vec`,索引左边的元素保留在原 `vec` 中(含索引),索引右边的元素(不含索引)在返回的 `vec` 中
Rust HashMap\<K,V>
--------
### 使用
```rust
use std::collections::HashMap;
fn main() {
let mut map: HashMap<String, i32> = HashMap::new();
map.insert(String::from("blue"), 100);
// 查询Yellow对应的值若不存在则插入默认值
let v: &mut i32 =
map.entry("Yellow".to_string()).or_insert(5);
let v: &mut i32 =
map.entry("Yellow".to_string()).or_insert(50); // 不会修改值
}
```
### 获取元素
```rust
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
let team_name = String::from("Blue");
let score: Option<&i32> = scores.get(&team_name);
```
### 遍历
```rust
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
for (key, value) in &scores {
println!("{}: {}", key, value);
}
```
### vec -> HashMap
```rust
let teams_list = vec![
("中国队".to_string(), 100),
("美国队".to_string(), 10),
("日本队".to_string(), 50),
];
let teams_map: HashMap<_,_> =
teams_list.into_iter().collect();
```
----
```rust
let teams = vec![String::from("blue"),String::from("red")];
let intial_scores = vec![10,50];
let scores:HashMap<_,_> =
teams.iter().zip(intial_scores.iter()).collect();
```
Option & Result
--------
### Option
```rust
enum Option<T> {
Some(T),
None,
}
```
#### 使用
```rust
fn main(){
let a = Some(5);
// 直接获取原始值
println!("{}", a.unwrap());
// 给出错误信息
let x: Option<&str> = None;
x.expect("fruits are healthy"); // panics 带有 `fruits are healthy`
}
```
### Result
```rust
enum Result<T, E> {
Ok(T),
Err(E),
}
```
#### 使用
```rust
use std::fs::File;
fn main() {
let f: Result<File,Error> = File::open("hello.txt");
let f = match f {
Ok(file) => file,
Err(error) => {
panic!("Problem opening the file: {:?}", error)
},
};
}
```
### 宏 `?`
`?` 只能用于返回结果是 Result 或者 Option 的函数,或者实现了 Try 类型
```rust
use std::fs::File;
use std::io::{self, Read};
fn read_username_from_file() -> Result<String, io::Error> {
let mut s = String::new();
File::open("hello.txt")?.read_to_string(&mut s)?;
Ok(s)
}
```
----
```rust
fn first(arr: &[i32]) -> Option<&i32> {
let v = arr.get(0)?;
Some(v)
}
```
<!--rehype:className=wrap-text -->
枚举
--------
@ -642,7 +803,7 @@ let left_shift = h << 4; // => 32
示例 | 意义
:- | :-
`c && d` | 两者都是真的_(AND)_
`c || d` | 要么是真的_(OR)_
`c \|\| d` | 要么是真的_(OR)_
`!c` | `c` 为假 _(NOT)_
----
@ -853,12 +1014,25 @@ let (x, _, y) = (1, 2, 3);
println!("{x},{y}");
```
----
```rust
fn get_count_item(s: &str) -> (&str, &str) {
let mut it = s.split(' ');
let (Some(str1),Some(str2)) = (it.next(),it.next()) else {
panic!("Can't segment count item pair");
};
(str1, str2)
}
```
### 函数中的模式匹配
```rust
fn add((x, y): (i32, i32)) -> i32 {
x + y
}
fn main(){
let sum = add(1, 2);
println!("{sum}");

View File

@ -1,7 +1,13 @@
Sass
===
这是一份快速参考备忘单,列出了 [SASS](https://sass-lang.com) 最有用的功能。
[![NPM version](https://img.shields.io/npm/v/sass.svg?style=flat)](https://www.npmjs.com/package/sass)
[![Downloads](https://img.shields.io/npm/dm/sass.svg?style=flat)](https://www.npmjs.com/package/sass)
[![Repo Dependents](https://badgen.net/github/dependents-repo/sass/dart-sass)](https://github.com/sass/dart-sass/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/sass/dart-sass)
这是一份快速参考备忘单,列出了 [SASS](https://sass-lang.com) 最有用的功能
<!--rehype:style=padding-top: 12px;-->
Sass 基础
--------

356
docs/scala.md Normal file
View File

@ -0,0 +1,356 @@
Scala
===
[![Repo Dependents](https://badgen.net/github/dependents-repo/scala/scala)](https://github.com/scala/scala/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/scala/scala)
本速查表可以用于快速地查找 [Scala](https://github.com/scala/scala) 语法结构
<!--rehype:style=padding-top: 12px;-->
入门
-----
### 介绍
- [Scala](https://github.com/scala/scala) 官网 _(github.com)_
### 函数
<!--rehype:wrap-class=col-span-2 row-span-4-->
```scala
def f(x: Int) = { x*x } // ✅ GOOD
def f(x: Int) { x*x } // ❌ BAD 定义函数,潜在风险:
// 不加“=”号将会是一段返回Unit类型的过程
// 这将会导致意想不到的错误。
def f(x: Any) = println(x) // ✅ GOOD
def f(x) = println(x) // ❌ BAD 定义函数 语法错误: 每个参数都需要指定类型。
type R = Double // 类型别名
def f(x: R) vs.
def f(x: => R) // 传值调用 传名调用 (惰性参数)
(x:R) => x*x // 匿名函数
(1 to 5).map(_*2) vs. // 匿名函数: 下划线是参数的占位符
(1 to 5).reduceLeft( _+_ )
(1 to 5).map( x => x*x ) // 匿名函数: 必须命名以后才可以多次使用同一个参数
(1 to 5).map(2*) // ✅ GOOD
(1 to 5).map(*2) // ❌ BAD 匿名函数: 绑定中缀方法明智的做法是2*_。
(1 to 5).map { x => val y=x*2; println(y); y } // 匿名函数: 代码块风格,最后一个表达式作为返回值
(1 to 5) filter {_%2 == 0} map {_*2} // 匿名函数: 管道风格(或者用圆括号)
// 匿名函数: 要传入多个代码块的话,需要使用花括号。
def compose(g:R=>R, h:R=>R) = (x:R) => g(h(x))
val f = compose({_*2}, {_-1})
val zscore = (mean:R, sd:R) => (x:R) => (x-mean)/sd // 柯里化, 显然的语法。
def zscore(mean:R, sd:R) = (x:R) => (x-mean)/sd // 柯里化, 显然的语法。
def zscore(mean:R, sd:R)(x:R) = (x-mean)/sd // 柯里化,语法糖。然后:)
val normer = zscore(7, 0.4) _ // 需要在尾部加下划线来变成偏函数(只对语法糖版本适用)
def mapmake[T](g:T=>T)(seq: List[T]) = seq.map(g) // 泛型
5.+(3); 5 + 3
(1 to 5) map (_*2) // 中缀语法糖
def sum(args: Int*) = args.reduceLeft(_+_) // 变长参数
```
### 变量
```scala
var x = 5 // 可变变量
val x = 5 // ✅ GOOD
x=6 // ❌ BAD 常量
var x: Double = 5 // 显式类型
```
### 包
```scala
import scala.collection._ // 通配符导入
import scala.collection.Vector
// 选择性导入
import scala.collection.{Vector, Sequence}
// 重命名导入
import scala.collection.{Vector => Vec28}
// 导入java.util包里除Date之外的一切
import java.util.{Date => _, _}
// 文件开头的包名 pkg
package pkg { ... } // 声明这是一个包
```
### 数据结构
```scala
(1,2,3) // 元组字面量 (Tuple3)
// 解构绑定:通过模式匹配来解构元组。
var (x,y,z) = (1,2,3)
// ❌ BAD 潜在风险:整个元组被赋值给了每一个变量
var x,y,z = (1,2,3)
// 列表 (不可变)
var xs = List(1,2,3)
xs(2) // 用括号索引 (slides)
1 :: List(2,3) // Cons构成
1 to 5 /* 等价于 => */ 1 until 6
// Range类型语法糖
1 to 10 by 2
// Unit类型的唯一成员 (相当于 C/Java 里的void)
() (空括号)
```
控制结构
---
### 条件
```scala
if (check) happy else sad
```
### 条件(语法糖)
```scala
if (check) happy same as
if (check) happy else ()
```
### while 循环
```scala
while (x < 5) { println(x); x += 1}
```
### do while 循环
```scala
do { println(x); x += 1} while (x < 5)
```
### break. (slides)
```scala
import scala.util.control.Breaks._
breakable {
for (x <- xs) {
if (Math.random < 0.1) break
}
}
```
### for 表达式: filter/map
```scala
for (x <- xs if x%2 == 0) yield x*10
// 等价于
xs.filter(_%2 == 0).map(_*10)
```
### for 表达式: 解构绑定
```scala
for ((x,y) <- xs zip ys) yield x*y
// 等价于
(xs zip ys) map { case (x,y) => x*y }
```
### for 表达式: 叉乘
```scala
for (x <- xs; y <- ys) yield x*y
// 等价于
xs flatMap {x => ys map {y => x*y}}
```
### for 表达式: 不可避免的格式
```scala
for (x <- xs; y <- ys) {
println("%d/%d = %.1f".format(x, y, x/y.toFloat))
}
```
### for 表达式: 包括上边界的遍历
```scala
for (i <- 1 to 5) {
println(i)
}
```
### for 表达式: 忽略上边界的遍历
```scala
for (i <- 1 until 5) {
println(i)
}
```
模式匹配
---
### 在函数的参数中使用模式匹配
```scala
// ✅ GOOD
(xs zip ys) map { case (x,y) => x*y }
// ❌ BAD
(xs zip ys) map( (x,y) => x*y )
```
### 可以匹配任何Int类型值的名称
<!--rehype:wrap-class=col-span-2-->
```scala
val v42 = 42
Some(3) match {
case Some(v42) => println("42")
case _ => println("Not 42")
}
```
❌ BAD: “v42” 被解释为可以匹配任何Int类型值的名称打印输出”42”
```scala
val v42 = 42
Some(3) match {
case Some(`v42`) => println("42")
case _ => println("Not 42")
}
```
✅ GOOD: 有反引号的 “`v42`” 被解释为已经存在的 `val v42`,所以输出的是 “Not 42”.
```scala
val UppercaseVal = 42
Some(3) match {
case Some(UppercaseVal) => println("42")
case _ => println("Not 42")
}
```
✅ GOOD: UppercaseVal 被视作已经存在的 val而不是一个新的模式变量因为它是以大写字母开头的所以 `UppercaseVal` 所包含的值42和检查的值3不匹配输出”Not 42”
面向对象
----
### 构造器参数 - 私有
```scala
class C(x: R) same as
class C(private val x: R)
var c = new C(4)
```
### 构造器参数 - 公有
```scala
class C(val x: R)
var c = new C(4)
c.x
```
### 构造函数就是类的主体
<!--rehype:wrap-class=row-span-2-->
```scala
class C(var x: R) {
assert(x > 0, "positive please")
var y = x
val readonly = 5
private var secret = 1
def this = this(42)
}
```
### 匿名类
```scala
new{ ... }
```
### 定义一个抽象类
```scala
abstract class D { ... } // 不可创建
```
### 定义一个继承子类
```scala
class C extends D { ... }
```
### 继承与构造器参数
```scala
class D(var x: R)
class C(x: R) extends D(x)
```
愿望清单: 默认自动传参
### 定义一个单例
```scala
object O extends D { ... }
```
和模块一样
### 特质
```scala
trait T { ... }
class C extends T { ... }
class C extends D with T { ... }
```
带有实现的接口,没有构造参数
### 多个特质
```scala
trait T1; trait T2
class C extends T1 with T2
class C extends D with T1 with T2
```
### 必须声明覆盖该方法
```scala
class C extends D { override def f = ...}
```
### 创建对象
```scala
new java.io.File("f")
new List[Int] // ✅ GOOD
List(1,2,3) // ❌ BAD
```
### 类字面量
```scala
classOf[String]
```
### 类型检查 (运行时)
```scala
x.isInstanceOf[String]
```
### 类型强制转换 (运行时)
```scala
x.asInstanceOf[String]
```
### 归属 (编译时)
```scala
x: String
```

View File

@ -1,7 +1,13 @@
Styled Components 备忘清单
====
此快速参考备忘单提供了使用 CSS in JS 工具的各种方法。
[![NPM version](https://img.shields.io/npm/v/styled-components.svg?style=flat)](https://npmjs.org/package/styled-components)
[![Downloads](https://img.shields.io/npm/dm/styled-components.svg?style=flat)](https://www.npmjs.com/package/styled-components)
[![Repo Dependents](https://badgen.net/github/dependents-repo/styled-components/styled-components)](https://github.com/styled-components/styled-components/network/dependents)
[![Github repo](https://badgen.net/badge/icon/Github?icon=github&label)](https://github.com/styled-components/styled-components)
此快速参考备忘单提供了使用 CSS in JS 工具的各种方法
<!--rehype:style=padding-top: 12px;-->
入门
----

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