explain结果每个字段的含义说明
explain结果每个字段的含义说明
我们都知道用explain xxx分析sql语句的性能,但是具体从explain的结果怎么分析性能以及每个字段的含义你清楚吗?这里我做下总结记录,也是供自己以后参考。
- 首先需要注意:MYSQL 5.6.3以前只能
EXPLAIN SELECT; MYSQL5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE
explain结果示例:
1 | mysql> explain select * from staff; |
先上一个官方文档表格的中文版:
| Column | 含义 |
|---|---|
| id | 查询序号 |
| select_type | 查询类型 |
| table | 表名 |
| partitions | 匹配的分区 |
| type | join类型 |
| prossible_keys | 可能会选择的索引 |
| key | 实际选择的索引 |
| key_len | 索引的长度 |
| ref | 与索引作比较的列 |
| rows | 要检索的行数(估算值) |
| filtered | 查询条件过滤的行数的百分比 |
| Extra | 额外信息 |
这是explain结果的各个字段,分别解释下含义:
1. id
SQL查询中的序列号。
id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行。
2. select_type
查询的类型,可以是下表的任何一种类型:
| select_type | 类型说明 |
|---|---|
| SIMPLE | 简单SELECT(不使用UNION或子查询) |
| PRIMARY | 最外层的SELECT |
| UNION | UNION中第二个或之后的SELECT语句 |
| DEPENDENT UNION | UNION中第二个或之后的SELECT语句取决于外面的查询 |
| UNION RESULT | UNION的结果 |
| SUBQUERY | 子查询中的第一个SELECT |
| DEPENDENT SUBQUERY | 子查询中的第一个SELECT, 取决于外面的查询 |
| DERIVED | 衍生表(FROM子句中的子查询) |
| MATERIALIZED | 物化子查询 |
| UNCACHEABLE SUBQUERY | 结果集无法缓存的子查询,必须重新评估外部查询的每一行 |
| UNCACHEABLE UNION | UNION中第二个或之后的SELECT,属于无法缓存的子查询 |
DEPENDENT 意味着使用了关联子查询。
3. table
查询的表名。不一定是实际存在的表名。
可以为如下的值:
- <unionM,N>: 引用id为M和N UNION后的结果。
: 引用id为N的结果派生出的表。派生表可以是一个结果集,例如派生自FROM中子查询的结果。 : 引用id为N的子查询结果物化得到的表。即生成一个临时表保存子查询的结果。
4. type(重要)
这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的连接类型依次为:
system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引。
表中只有一行数据或者是空表,这是const类型的一个特例。且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
最多只有一行记录匹配。当联合主键或唯一索引的所有字段跟常量值比较时,join类型为const。其他数据库也叫做唯一索引扫描
多表join时,对于来自前面表的每一行,在当前表中只能找到一行。这可能是除了system和const之外最好的类型。当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。
eq_ref可用于使用’=’操作符作比较的索引列。比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。
相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。
eq_ref只能找到一行,而ref能找到多行。
对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时,使用ref类型(也就是说,此联接能够匹配多行记录)。
ref可用于使用’=’或’<=>’操作符作比较的索引列。
使用全文索引的时候是这个类型。要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引
跟ref类型类似,只是增加了null值的比较。实际用的不多。
1 | eg. |
表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取多个索引,性能可能大部分时间都不如range
用于where中的in形式子查询,子查询返回不重复值唯一值,可以完全替换子查询,效率更高。
该类型替换了下面形式的IN子查询的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)
该联接类型类似于unique_subquery。适用于非唯一索引,可以返回重复值。
索引范围查询,常见于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等运算符的查询中。
1 | SELECT * FROM tbl_name |
索引全表扫描,把索引从头到尾扫一遍。这里包含两种情况:
一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因为索引通常比数据表小,而且还能避免二次查询。在extra中显示Using index,反之,如果在索引上进行全表扫描,没有Using index的提示。
1 | # 此表见有一个name列索引。 |
全表扫描,性能最差。
5. partitions
版本5.7以前,该项是explain partitions显示的选项,5.7以后成为了默认选项。该列显示的为分区表命中的分区情况。非分区表该字段为空(null)。
6. possible_keys
查询可能使用到的索引都会在这里列出来
7. key
查询真正使用到的索引。
select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
8. key_len
查询用到的索引长度(字节数)。
如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,用多少算多少。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。
key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。
9. ref
如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
10. rows(重要)
rows 也是一个重要的字段。 这是mysql估算的需要扫描的行数(不是精确值)。
这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好.
11. filtered
这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数。这个字段不重要
12. extra(重要)
EXplain 中的很多额外的信息会在 Extra 字段显示, 常见的有以下几种内容:
- distinct:在select部分使用了distinc关键字
- Using filesort:当 Extra 中有 Using filesort 时, 表示 MySQL 需额外的排序操作, 不能通过索引顺序达到排序效果. 一般有 Using filesort, 都建议优化去掉, 因为这样的查询 CPU 资源消耗大.
1 | # 例如下面的例子: |
- Using index
“覆盖索引扫描”, 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错 - Using temporary
查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.
除此之外还有其他值,这里就不一一一列举了。
通过以上这些总结,以后我们看到explain的结果,就知道该从哪些字段值去分析sql语句的执行效率了。
mysql连表操作后字符集不同导致索引失效问题
mysql 连表操作后字符集不同导致索引失效
背景
一个表的字符集为utf8mb4
一个表的字符集为utf8
连表查询后可以发现索引失效的情况,查询很慢。
t1为utf8,t2为utf8mb4。但是为什么表字符集不一样(实际是字段字符集不一样)就会导致t1全表扫描呢?
分析原因
(1)首先t2 left join t1决定了t2是驱动表,这一步相当于执行了
1 | select * from t2 where t2.name = 'dddd' |
取出code字段的值,假如为’8a77a32a7e0825f7c8634226105c42e5’;
(2)然后拿t2查到的code的值根据join条件去t1里面查找,这一步就相当于执行了
1 | select * from t1 where t1.code = '8a77a32a7e0825f7c8634226105c42e5'; |
(3)但是由于第(1)步里面t2表取出的code字段是utf8mb4字符集,而t1表里面的code是utf8字符集,这里需要做字符集转换,字符集转换遵循由小到大的原则,因为utf8mb4是utf8的超集,所以这里把utf8转换成utf8mb4,即把t1.code转换成utf8mb4字符集,转换了之后,由于t1.code上面的索引仍然是utf8字符集,所以这个索引会被执行计划忽略了,然后t1表只能选择全表扫描。如果t2筛选出来的记录不止1条,那么t1就会被多次全表扫描,性能之差可想而知。
修改字符集
1 | alter table t1 charset utf8mb4; |
这是错的,这只是改了表的默认字符集,即新的字段才会使用utf8mb4,已经存在的字段仍然是utf8。
1 | alter table t1 convert to charset utf8mb4; |
查看 SHOW FULL COLUMNS FROM t1 ;会发现字段的字符已经改变。
其他
排序规则概念:是指对指定字符集下不同字符的比较规则。排序规则有以下特征:
- 它和字符集(CHARSET)相关
- 每种字符集都有多种它支持的排序规则
- 每种字符集都会默认指定一种排序规则为默认值。
- mysql可对相应字符集,单独设置排序规则
排序规则作用:排序规则指定后,它会影响我们使用 ORDER BY语句查询的结果顺序,会影响到 WHERE条件中大于小于号的筛选结果,会影响 DISTINCT、GROUP BY、HAVING 语句的查询结果。另外,mysql 建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都和排序规则有关。
注意点
- 表字符集不同时,可能导致join的SQL使用不到索引,引起严重的性能问题;
- 建表语句一定要设置默认字符集,需要关联的表字符集一定要统一;
- 统一dev、fat、test、prod环境mysql对应库的字符集,可以及早发现问题;
mysql连表操作后字符集不同导致索引失效问题1
mysql 连表操作后字符集不同导致索引失效
背景
一个表的字符集为utf8mb4
一个表的字符集为utf8
连表查询后可以发现索引失效的情况,查询很慢。这时候可以通过show warnings;查询警告信息。发现了convert(testdb.t1.code using utf8mb4)之后,发现2个表的字符集不一样。
t1为utf8,t2为utf8mb4。但是为什么表字符集不一样(实际是字段字符集不一样)就会导致t1全表扫描呢?下面来做分析。
分析原因
(1)首先t2 left join t1决定了t2是驱动表,这一步相当于执行了
1 | select * from t2 where t2.name = 'dddd' |
取出code字段的值,这里为’8a77a32a7e0825f7c8634226105c42e5’;
(2)然后拿t2查到的code的值根据join条件去t1里面查找,这一步就相当于执行了
1 | select * from t1 where t1.code = '8a77a32a7e0825f7c8634226105c42e5'; |
(3)但是由于第(1)步里面t2表取出的code字段是utf8mb4字符集,而t1表里面的code是utf8字符集,这里需要做字符集转换,字符集转换遵循由小到大的原则,因为utf8mb4是utf8的超集,所以这里把utf8转换成utf8mb4,即把t1.code转换成utf8mb4字符集,转换了之后,由于t1.code上面的索引仍然是utf8字符集,所以这个索引就被执行计划忽略了,然后t1表只能选择全表扫描。如果t2筛选出来的记录不止1条,那么t1就会被多次全表扫描,性能之差可想而知。
修改字符集
1 | alter table t1 charset utf8mb4; |
但这是错的,这只是改了表的默认字符集,即新的字段才会使用utf8mb4,已经存在的字段仍然是utf8。
show create table t1 会发现DEFAULT CHARSET=utf8mb4改变了,但是SHOW FULL COLUMNS FROM pay_log_all_from_mq;会发现字段的字符集没有改变。
1 | alter table t1 convert to charset utf8mb4; |
查看 SHOW FULL COLUMNS FROM t1 ;会发现字段的字符已经改变。
注意点
- 表字符集不同时,可能导致join的SQL使用不到索引,引起严重的性能问题;
正则
规则
abcdefghijklmnopqurtuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZa
abced
abd
A[A-Z]{24}Z
abbabbbc
abbc
abc
ac
ab{5}c
ab((ce)?d)?
10^6ml
10^9ML
10E9 ML
10[^E][369] ?(ml|ML)
ad
1234567890
[^\s]
Ha HaHa
.转义
[abc]
[^abc]
[a-z]
[^a-z]
[a-zA-Z]
.
\s\S space
\w\W word
\d\D digit
(a|b)
a? 0-1次
a* 0-任意次
a+ 1-任意次
a{3} 3次
a{3,6} 三到六次
a{,6} 至多6次
a{3,} 至少三次
(a{3}|a{6}) 3次或6次
^ 开头
$ 结尾
MetaCharacters (Need to be escaped):
.[{()^$|?*+
coreyms.com
[-a-zA-Z0-9./]+.[a-zA-Z]+/?
\d{3}[.-]\d{3}[.-]\d{4}
192.168.0.1
255.255.255.255
[1-9]?\d|1\d{2}|2([0-4]\d|5[0-5])
(([1-9]?\d|1\d{2}|2([0-4]\d|5[0-5])).){3}([1-9]?\d|1\d{2}|2([0-4]\d|5[0-5])))
321-555-4321
123.555.1234
Mr. Schafer
Mr Smith
Ms Davis
Mrs. Robinson
Mr. T
Mr. t
M(s|r|rs).? [A-Z][a-z]*
https://deerchao.net/tutorials/regex/regex.htm
https://regex101.com/
https://www.regular-expressions.info/
练习
Dave Martin
615-555-7164
173 Main St., Springfield RI 55924
davemartin@bogusemail.com
Charles Harris
800-555-5669
969 High St., Atlantis VA 34075
charlesharris@bogusemail.com
Eric Williams
560-555-5153
806 1st St., Faketown AK 86847
laurawilliams@bogusemail.com
Corey Jefferson
900-555-9340
826 Elm St., Epicburg NE 10671
coreyjefferson@bogusemail.com
Jennifer Martin-White
714-555-7405
212 Cedar St., Sunnydale CT 74983
jenniferwhite@bogusemail.com
Erick Davis
800-555-6771
519 Washington St., Olympus TN 32425
tomdavis@bogusemail.com
Neil Patterson
783-555-4799
625 Oak St., Dawnstar IL 61914
neilpatterson@bogusemail.com
Laura Jefferson
516-555-4615
890 Main St., Pythonville LA 29947
laurajefferson@bogusemail.com
Maria Johnson
127-555-1867
884 High St., Braavos ME 43597
mariajohnson@bogusemail.com
Michael Arnold
608-555-4938
249 Elm St., Quahog OR 90938
michaelarnold@bogusemail.com
Michael Smith
568-555-6051
619 Park St., Winterfell VA 99000
michaelsmith@bogusemail.com
Erik Stuart
292-555-1875
220 Cedar St., Lakeview NY 87282
robertstuart@bogusemail.com
Laura Martin
900-555-3205
391 High St., Smalltown WY 28362
lauramartin@bogusemail.com
Barbara Martin
614-555-1166
121 Hill St., Braavos UT 92474
barbaramartin@bogusemail.com
Linda Jackson
530-555-2676
433 Elm St., Westworld TX 61967
lindajackson@bogusemail.com
Eric Miller
470-555-2750
838 Main St., Balmora MT 56526
stevemiller@bogusemail.com
Dave Arnold
800-555-6089
732 High St., Valyria KY 97152
davearnold@bogusemail.com
Jennifer Jacobs
880-555-8319
217 High St., Old-town IA 82767
jenniferjacobs@bogusemail.com
Neil Wilson
777-555-8378
191 Main St., Mordor IL 72160
neilwilson@bogusemail.com
Kurt Jackson
998-555-7385
607 Washington St., Blackwater NH 97183
kurtjackson@bogusemail.com
Mary Jacobs
800-555-7100
478 Oak St., Bedrock IA 58176
maryjacobs@bogusemail.com
Michael White
903-555-8277
906 Elm St., Mordor TX 89212
michaelwhite@bogusemail.com
Jennifer Jenkins
196-555-5674
949 Main St., Smalltown SC 96962
jenniferjenkins@bogusemail.com
Sam Wright
900-555-5118
835 Pearl St., Smalltown ND 77737
samwright@bogusemail.com
John Davis
905-555-1630
451 Lake St., Bedrock GA 34615
johndavis@bogusemail.com
Eric Davis
203-555-3475
419 Lake St., Balmora OR 30826
neildavis@bogusemail.com
Laura Jackson
884-555-8444
443 Maple St., Quahog MS 29348
laurajackson@bogusemail.com
John Williams
904-555-8559
756 Hill St., Valyria KY 94854
johnwilliams@bogusemail.com
Michael Martin
889-555-7393
216 High St., Olympus NV 21888
michaelmartin@bogusemail.com
Maggie Brown
195-555-2405
806 Lake St., Lakeview MD 59348
maggiebrown@bogusemail.com
Erik Wilson
321-555-9053
354 Hill St., Mordor FL 74122
kurtwilson@bogusemail.com
Elizabeth Arnold
133-555-1711
805 Maple St., Winterfell NV 99431
elizabetharnold@bogusemail.com
Jane Martin
900-555-5428
418 Park St., Metropolis ID 16576
janemartin@bogusemail.com
Travis Johnson
760-555-7147
749 Washington St., Braavos SD 25668
travisjohnson@bogusemail.com
Laura Jefferson
391-555-6621
122 High St., Metropolis ME 29540
laurajefferson@bogusemail.com
Tom Williams
932-555-7724
610 High St., Old-town FL 60758
tomwilliams@bogusemail.com
Jennifer Taylor
609-555-7908
332 Main St., Pythonville OH 78172
jennifertaylor@bogusemail.com
Erick Wright
800-555-8810
858 Hill St., Blackwater NC 79714
jenniferwright@bogusemail.com
Steve Doe
149-555-7657
441 Elm St., Atlantis MS 87195
stevedoe@bogusemail.com
Kurt Davis
130-555-9709
404 Oak St., Atlantis ND 85386
kurtdavis@bogusemail.com
Corey Harris
143-555-9295
286 Pearl St., Vice City TX 57112
coreyharris@bogusemail.com
Nicole Taylor
903-555-9878
465 Hill St., Old-town LA 64102
nicoletaylor@bogusemail.com
Elizabeth Davis
574-555-3194
151 Lake St., Eerie SD 17880
elizabethdavis@bogusemail.com
Maggie Jenkins
496-555-7533
504 Lake St., Gotham PA 46692
maggiejenkins@bogusemail.com
Linda Davis
210-555-3757
201 Pine St., Vice City AR 78455
lindadavis@bogusemail.com
Dave Moore
900-555-9598
251 Pine St., Old-town OK 29087
davemoore@bogusemail.com
Linda Jenkins
866-555-9844
117 High St., Bedrock NE 11899
lindajenkins@bogusemail.com
Eric White
669-555-7159
650 Oak St., Smalltown TN 43281
samwhite@bogusemail.com
Laura Robinson
152-555-7417
377 Pine St., Valyria NC 78036
laurarobinson@bogusemail.com
Charles Patterson
893-555-9832
416 Pearl St., Valyria AK 62260
charlespatterson@bogusemail.com
Joe Jackson
217-555-7123
683 Cedar St., South Park KS 66724
joejackson@bogusemail.com
Michael Johnson
786-555-6544
288 Hill St., Smalltown AZ 18586
michaeljohnson@bogusemail.com
Corey Miller
780-555-2574
286 High St., Springfield IA 16272
coreymiller@bogusemail.com
James Moore
926-555-8735
278 Main St., Gotham KY 89569
jamesmoore@bogusemail.com
Jennifer Stuart
895-555-3539
766 Hill St., King’s Landing GA 54999
jenniferstuart@bogusemail.com
Charles Martin
874-555-3949
775 High St., Faketown PA 89260
charlesmartin@bogusemail.com
Eric Wilks
800-555-2420
885 Main St., Blackwater OH 61275
joewilks@bogusemail.com
Elizabeth Arnold
936-555-6340
528 Hill St., Atlantis NH 88289
elizabetharnold@bogusemail.com
John Miller
372-555-9809
117 Cedar St., Thundera NM 75205
johnmiller@bogusemail.com
Corey Jackson
890-555-5618
115 Oak St., Gotham UT 36433
coreyjackson@bogusemail.com
Sam Thomas
670-555-3005
743 Lake St., Springfield MS 25473
samthomas@bogusemail.com
Patricia Thomas
509-555-5997
381 Hill St., Blackwater CT 30958
patriciathomas@bogusemail.com
Jennifer Davis
721-555-5632
125 Main St., Smalltown MT 62155
jenniferdavis@bogusemail.com
Patricia Brown
900-555-3567
292 Hill St., Gotham WV 57680
patriciabrown@bogusemail.com
Barbara Williams
147-555-6830
514 Park St., Balmora NV 55462
barbarawilliams@bogusemail.com
James Taylor
582-555-3426
776 Hill St., Dawnstar MA 51312
jamestaylor@bogusemail.com
Eric Harris
400-555-1706
421 Elm St., Smalltown NV 72025
barbaraharris@bogusemail.com
Travis Anderson
525-555-1793
937 Cedar St., Thundera WA 78862
travisanderson@bogusemail.com
Sam Robinson
317-555-6700
417 Pine St., Lakeview MD 13147
samrobinson@bogusemail.com
Steve Robinson
974-555-8301
478 Park St., Springfield NM 92369
steverobinson@bogusemail.com
Mary Wilson
800-555-3216
708 Maple St., Braavos UT 29551
marywilson@bogusemail.com
Sam Wilson
746-555-4094
557 Pearl St., Westworld KS 23225
samwilson@bogusemail.com
Charles Jones
922-555-1773
855 Hill St., Olympus HI 81427
charlesjones@bogusemail.com
Laura Brown
711-555-4427
980 Maple St., Smalltown MO 96421
laurabrown@bogusemail.com
Tom Harris
355-555-1872
676 Hill St., Blackwater AR 96698
tomharris@bogusemail.com
Patricia Taylor
852-555-6521
588 Pine St., Olympus FL 98412
patriciataylor@bogusemail.com
Barbara Williams
691-555-5773
351 Elm St., Sunnydale GA 26245
barbarawilliams@bogusemail.com
Maggie Johnson
332-555-5441
948 Cedar St., Quahog DE 56449
maggiejohnson@bogusemail.com
Kurt Miller
900-555-7755
381 Hill St., Quahog AL 97503
kurtmiller@bogusemail.com
Neil Stuart
379-555-3685
496 Cedar St., Sunnydale RI 49113
neilstuart@bogusemail.com
Linda Patterson
127-555-9682
736 Cedar St., Lakeview KY 47472
lindapatterson@bogusemail.com
Charles Davis
789-555-7032
678 Lake St., Mordor MN 11845
charlesdavis@bogusemail.com
Jennifer Jefferson
783-555-5135
289 Park St., Sunnydale WA 74526
jenniferjefferson@bogusemail.com
Erick Taylor
315-555-6507
245 Washington St., Bedrock IL 26941
coreytaylor@bogusemail.com
Robert Wilks
481-555-5835
573 Elm St., Sunnydale IL 47182
robertwilks@bogusemail.com
Travis Jackson
365-555-8287
851 Lake St., Metropolis PA 22772
travisjackson@bogusemail.com
Travis Jackson
911-555-7535
489 Oak St., Atlantis HI 73725
travisjackson@bogusemail.com
Laura Wilks
681-555-2460
371 Pearl St., Smalltown SC 47466
laurawilks@bogusemail.com
Neil Arnold
274-555-9800
504 Oak St., Faketown PA 73860
neilarnold@bogusemail.com
Linda Johnson
800-555-1372
667 High St., Balmora IN 82473
lindajohnson@bogusemail.com
Jennifer Wilson
300-555-7821
266 Pine St., Westworld DC 58720
jenniferwilson@bogusemail.com
Nicole White
133-555-3889
276 High St., Braavos IL 57764
nicolewhite@bogusemail.com
Maria Arnold
705-555-6863
491 Elm St., Metropolis PA 31836
mariaarnold@bogusemail.com
Jennifer Davis
215-555-9449
859 Cedar St., Old-town MT 31169
jenniferdavis@bogusemail.com
Mary Patterson
988-555-6112
956 Park St., Valyria CT 81541
marypatterson@bogusemail.com
Jane Stuart
623-555-3006
983 Oak St., Old-town RI 15445
janestuart@bogusemail.com
Robert Davis
192-555-4977
789 Maple St., Mordor IN 22215
robertdavis@bogusemail.com
James Taylor
178-555-4899
439 Hill St., Olympus NV 39308
jamestaylor@bogusemail.com
Eric Stuart
952-555-3089
777 High St., King’s Landing AZ 16547
johnstuart@bogusemail.com
Charles Miller
900-555-6426
207 Washington St., Blackwater MA 24886
charlesmiller@bogusemail.com
- ip正则:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
算法中文手册
[toc]
开篇词
第零章、必读系列
学习算法和刷题的框架思维
动态规划解题套路框架
回溯算法解题套路框架
BFS 算法解题套路框架
我写了首诗,让你闭着眼睛也能写对二分搜索
我写了首诗,把滑动窗口算法算法变成了默写题
一个方法团灭 LeetCode 股票买卖问题
一个方法团灭 LeetCode 打家劫舍问题
一个方法团灭 nSum 问题
经典动态规划:高楼扔鸡蛋
经典动态规划:子集背包问题
经典动态规划:完全背包问题
表达式求值算法:实现计算器
第一章、动态规划系列
动态规划解题套路框架
动态规划答疑篇
动态规划和回溯算法到底谁是谁爹?
动态规划设计:最⻓递增子序列
动态规划设计:最大子数组
经典动态规划:0-1 背包问题
经典动态规划:子集背包问题
经典动态规划:完全背包问题
经典动态规划:编辑距离
经典动态规划:高楼扔鸡蛋
经典动态规划:高楼扔鸡蛋(进阶)
经典动态规划:戳气球
经典动态规划:最⻓公共子序列
动态规划之子序列问题解题模板
动态规划之博弈问题
动态规划之正则表达
动态规划之四键键盘
动态规划之KMP字符匹配算法
贪心算法之区间调度问题
团灭 LeetCode 股票买卖问题
团灭 LeetCode 打家劫舍问题
第二章、数据结构系列
学习数据结构和算法读什么书
算法学习之路
二叉堆详解实现优先级队列
LRU算法详解
二叉搜索树操作集锦
如何计算完全二叉树的节点数
特殊数据结构:单调栈
特殊数据结构:单调队列
设计Twitter 递归反转链表的一部分
队列实现栈|栈实现队列
第三章、算法思维系列
学习算法和刷题的思路指南
回溯算法解题套路框架
回溯算法团灭子集、排列、组合问题
回溯算法最佳实践:解数独
回溯算法最佳实践:括号生成
二分查找详解
双指针技巧总结
滑动窗口技巧
twoSum问题的核心思想
常用的位操作
拆解复杂问题:实现计算器
烧饼排序
前缀和技巧
字符串乘法
FloodFill算法详解及应用
区间调度之区间合并问题
区间调度之区间交集问题
信封嵌套问题
几个反直觉的概率问题
第四章、高频面试系列
如何实现LRU算法
如何用 BFS 算法秒杀各种智力题
如何高效寻找素数
如何高效进行模幂运算
如何计算编辑距离
如何运用二分查找算法
如何高效解决接雨水问题
如何去除有序数组的重复元素
如何寻找最⻓回文子串
如何运用贪心思想玩跳跃游戏
如何k个一组反转链表
如何判定括号合法性
如何寻找缺失的元素
如何同时寻找缺失和重复的元素
如何判断回文链表
如何在无限序列中随机抽取元素
如何调度考生的座位
Union-Find算法详解
Union-Find算法应用
一行代码就能解决的算法题
二分查找高效判定子序列
第五章、技术文章系列
Linux的进程、线程、文件描述符是什么
关于 Linux shell 你必须知道的
Linux shell 的实用小技巧
一文看懂 session 和 cookie
加密算法的前身今世
我用四个命令概括了 Git 的所有套路
Git/SQL/正则表达式的在线练习平台
设计模式2
设计模式2
1.观察者模式
- 定义:在对象之间定义了一对多的依赖,这样的话,当一个对象改变状态,依赖他的对象会受到通知并自动更新。(其实就是发布订阅模式:发布者发布信息,订阅者获取信息,订阅了就能收到消息,没订阅的就收不到消息)
2.访问者模式
- 定义:封装作用于某种数据结构中各元素的操作,它可在不改变数据结构的前提下定义作用于这些元素的新的操作。
3.命令模式
- 定义:发送者和接收者之间引入了一个命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接受者的方法。
- spring框架:spring是怎么做的,view、controller、service是怎么连在一起的:spring是控制反转、依赖注入,解决了数据数据初始化一些问题,能够吧代码写得很简洁,然后脱颖而出,核心是怎么做的,数据初始化是怎么做的。面向切面的编程可以用在什么地方,spring的一般框架是mvc
:层是controller、中间层是service、底层是dao。为什么这么分?他比其他的区别是什么?对一些request包装了
找spring一两点深入研究:我不仅仅是用了spring,我还研究了他某一个组件,他是怎么实现的?讲讲(闪光点) - velocity(模板语言)
我用了velocity,我发现了velocity里的很多东西和我学的java、c++都是一样的,他这个框架他把一些公用的都提取出来,前面的spring boot是个java框架,为什么要用velocity,因为我要前后端分离,view和后面的数据要分离,data是怎么传过来的,怎么解析的,他支持什么东西?(不仅仅用了这个东西,还有思想,解耦)3.mybatis
- 怎么把数据库的一些前后的读取给做了,怎么把xml里的多重条件,怎么做文法的解析,然后把这些条件给处理掉。
4.登录/注册
- 网站安全(salt):密码为什么加了一个salt就变得安全?
- 通过拦截器来实现的:拦截器的思想、框架,留好接口;拦截器实现登录注册:我在cookie里放了一个token,token怎么处理用户登录注册的:在用户登录注册的时候,会下发一个token,把token与用户信息关联起来,关联起来之后我为了优化token信息,把token放到数据库里(redis),设计一个分布式的统一登录系统,现在的互联网产品都是统一登录的,比如,登录qq之后,登录网页就不需要登录了,qq登录过的token直接注入到网页上去。这是个ssension共享问题:、
- 保证数据安全:验证(邮件激活)
5.前缀树
- 构造一个前缀树,通过一个有限状态机来实现一传文本是不是包含敏感词,繁杂度是多少 很重要:优点有哪些?为什么不用kmp,文本查找算法:
可以很快的加一些词汇过来;有扩展性,以及性能更提高6.redis
- 数据结构:跳列表,哈希,优先队列,list:我了解redis底层是怎么实现的,为什么他的效率很高,他的字符串是怎么保存的,做这个工程的时候我用在的异步队列上、排序上、异步框架
7.异步框架
*思路:我这个网站附带的每一步操作可能附带的操作都非常多,为了更快的吧结果返回给用户,所以采用异步框架,自己写的,数据结构:使用redis的队列,因为redis能够保证线程同步;除了用队列,我还想过用有优先队列,这样我的异步框架能够把紧急的任务线处理掉。我这个异步框架:有消息的发射,消息的处理,事件的模型定义以及具体执行的eventhandle,我定义了一些公共接口把这些实现了。
8.邮件(smtp协议)
- 做了一个简单邮件,怎么连接上服务器,我当时做这个的时候,ssl问题
,ssl理解,服务器需要ssl链接,为了安全服务器是怎么做的;java sdk 1.7 1.8的问题,1.8是需要换一个jar包的 - 豆瓣电影排序:好的问题能挑选出来,互动越多,时间越新,评分越高。
9.timeline(时间轴)
- 肯定会问:为什么用推拉模式,用推实时性高能让好友快速得到消息,用拉能节省僵尸号、不是活跃用户的存储空间。怎么区分?最后把timeline组合起来‘timeline模板系统,每个新鲜事展向不一样,和velocity结合起来,后台存储的都是核心数据,每个数据对应的是一个模板,我把模板结合起来,我就能快速的把时间轴展示出来。
10.爬虫
11.solr搜索
- 搜索去重:对比相似度,敏感哈希算法,哈希算法:两个字符串稍微有一点点不一样,结构就是不一样的。可能头尾是不一样的,内容一样:采用敏感哈希算法把相似度求出来,区别:敏感哈希算法两个文档相似度很高,他生成的哈希值的比例是很相似的。
12.单元测试/部署
- 部署:运维,llinux nigix反向代理,与正向对比。负载均衡:为什么要负载均衡。
设计模式
常用设计模式
1.观察者模式
- 定义:在对象之间定义了一对多的依赖,这样的话,当一个对象改变状态,依赖他的对象会受到通知并自动更新。(其实就是发布订阅模式:发布者发布信息,订阅者获取信息,订阅了就能收到消息,没订阅的就收不到消息)
2.访问者模式
- 定义:封装作用于某种数据结构中各元素的操作,它可在不改变数据结构的前提下定义作用于这些元素的新的操作。
3.命令模式
- 定义:发送者和接收者之间引入了一个命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接受者的方法。
- spring框架:spring是怎么做的,view、controller、service是怎么连在一起的:spring是控制反转、依赖注入,解决了数据数据初始化一些问题,能够吧代码写得很简洁,然后脱颖而出,核心是怎么做的,数据初始化是怎么做的。面向切面的编程可以用在什么地方,spring的一般框架是mvc
:层是controller、中间层是service、底层是dao。为什么这么分?他比其他的区别是什么?对一些request包装了
找spring一两点深入研究:我不仅仅是用了spring,我还研究了他某一个组件,他是怎么实现的?讲讲(闪光点) - velocity(模板语言)
我用了velocity,我发现了velocity里的很多东西和我学的java、c++都是一样的,他这个框架他把一些公用的都提取出来,前面的spring boot是个java框架,为什么要用velocity,因为我要前后端分离,view和后面的数据要分离,data是怎么传过来的,怎么解析的,他支持什么东西?(不仅仅用了这个东西,还有思想,解耦)
3.mybatis
- 怎么把数据库的一些前后的读取给做了,怎么把xml里的多重条件,怎么做文法的解析,然后把这些条件给处理掉。
4.登录/注册
- 网站安全(salt):密码为什么加了一个salt就变得安全?
- 通过拦截器来实现的:拦截器的思想、框架,留好接口;拦截器实现登录注册:我在cookie里放了一个token,token怎么处理用户登录注册的:在用户登录注册的时候,会下发一个token,把token与用户信息关联起来,关联起来之后我为了优化token信息,把token放到数据库里(redis),设计一个分布式的统一登录系统,现在的互联网产品都是统一登录的,比如,登录qq之后,登录网页就不需要登录了,qq登录过的token直接注入到网页上去。这是个ssension共享问题:、
- 保证数据安全:验证(邮件激活)
5.前缀树
- 构造一个前缀树,通过一个有限状态机来实现一传文本是不是包含敏感词,繁杂度是多少 很重要:优点有哪些?为什么不用kmp,文本查找算法:
可以很快的加一些词汇过来;有扩展性,以及性能更提高
6.redis
- 数据结构:跳列表,哈希,优先队列,list:我了解redis底层是怎么实现的,为什么他的效率很高,他的字符串是怎么保存的,做这个工程的时候我用在的异步队列上、排序上、异步框架
7.异步框架
*思路:我这个网站附带的每一步操作可能附带的操作都非常多,为了更快的吧结果返回给用户,所以采用异步框架,自己写的,数据结构:使用redis的队列,因为redis能够保证线程同步;除了用队列,我还想过用有优先队列,这样我的异步框架能够把紧急的任务线处理掉。我这个异步框架:有消息的发射,消息的处理,事件的模型定义以及具体执行的eventhandle,我定义了一些公共接口把这些实现了。
8.邮件(smtp协议)
- 做了一个简单邮件,怎么连接上服务器,我当时做这个的时候,ssl问题
,ssl理解,服务器需要ssl链接,为了安全服务器是怎么做的;java sdk 1.7 1.8的问题,1.8是需要换一个jar包的 - 豆瓣电影排序:好的问题能挑选出来,互动越多,时间越新,评分越高。
9.timeline(时间轴)
- 肯定会问:为什么用推拉模式,用推实时性高能让好友快速得到消息,用拉能节省僵尸号、不是活跃用户的存储空间。怎么区分?最后把timeline组合起来‘timeline模板系统,每个新鲜事展向不一样,和velocity结合起来,后台存储的都是核心数据,每个数据对应的是一个模板,我把模板结合起来,我就能快速的把时间轴展示出来。
10.爬虫
11.solr搜索
- 搜索去重:对比相似度,敏感哈希算法,哈希算法:两个字符串稍微有一点点不一样,结构就是不一样的。可能头尾是不一样的,内容一样:采用敏感哈希算法把相似度求出来,区别:敏感哈希算法两个文档相似度很高,他生成的哈希值的比例是很相似的。
12.单元测试/部署
- 部署:运维,llinux nigix反向代理,与正向对比。负载均衡:为什么要负载均衡。
mac快捷键
mac快捷键
图形按键
| 按键或组合键 | 功能 |
|---|---|
| ⌘ | Command 键 |
| ⌃ | Control 键 |
| ⌥ | Option 键 |
| ⇧ | Shift 键 |
| ⇪ | Caps Lock |
| fn | 功能键常用快捷键 |
剪切、拷贝和粘贴
您可以在大多数 app 中使用这些快捷键来剪切、拷贝或粘贴选中的项目。其中包括文本、图片、音乐等等。您甚至可以在 Finder 中拷贝和粘贴文件,来将文件拷贝到新位置。
| 按键或组合键 | 功能 |
|---|---|
| Command-C | 将所选数据拷贝到剪贴板 |
| Command-X | 移除选中的项目,然后将副本放在剪贴板中 |
| Command-V | 将剪贴板副本放到(粘贴)到当前文稿或 app 中 |
拍摄屏幕快照
使用这些快捷键可拍摄一张屏幕内容的照片。您也可以使用 Grab 拍摄屏幕快照,这款 app 位于“实用工具”文件夹中。
| 按键或组合键 | 功能 |
|---|---|
| Command-Shift-3 | 将屏幕捕捉到文件 |
| Command-Shift-Control-3 | 将屏幕内容捕捉到剪贴板 |
| Command-Shift-4 | 将所选屏幕内容捕捉到一个文件,或按空格键仅捕捉一个窗口 |
| Command-Shift-Control-4 | 将所选屏幕内容捕捉到剪贴板,或按空格键仅捕捉一个窗口 |
启动快捷键
使用这些组合键可更改电脑的启动方式。启动 Mac 后立即按住相关按键或组合键,直到所需的功能出现。例如,启动时按住 Option 键,直到“启动管理器”出现。
注:如果您使用的不是 Apple 制造的键盘,则 Alt 键通常相当于 Option 键。如果此修饰键不起作用,请尝试改用 Apple 键盘。
| 按键或组合键 | 功能 |
|---|---|
| Option 或 Alt | 显示所有启动宗卷(启动管理器) |
| Shift | 在安全模式下启动 |
| C | 从可引导介质(DVD、CD、USB 闪存驱动器)启动 |
| T | 在目标磁盘模式下启动 |
| N | 从 NetBoot 服务器启动 |
| X | 强制 OS X 启动(如果非 OS X 启动宗卷可用) |
| D | 使用 Apple Hardware Test |
| Command-R | 使用 OS X 恢复功能(OS X Lion 或更高版本) |
| Command-Option-R | 在受支持的电脑上使用互联网恢复 |
| Command-V | 以详细模式启动 |
| Command-S | 以单用户模式启动 |
| Command-Option-P-R | 重置 NVRAM |
| 按住介质推出 (⏏) 键、F12 键、鼠标或触控板按钮 | 推出活动光盘 |
睡眠、关闭和注销快捷键
Mac 启动后使用这些组合键可让电脑进入睡眠状态、关机、注销或重新启动。
| 按键或组合键 | 功能 |
|---|---|
| 电源按钮 | 轻按可开机。在通电后,轻按“电源”按钮可使您的 Mac 唤醒或进入睡眠状态。 |
| 按住电源按钮 1.5 秒 | 显示重新启动/睡眠/关闭对话框 |
| 按住电源按钮 5 秒 | 强制 Mac 关机 |
| Control-电源按钮 | 显示重新启动/睡眠/关闭对话框 |
| Command-Control-电源按钮 | 强制 Mac 重新启动 |
| Command-Option-电源按钮 | 使电脑进入睡眠状态 |
| Command-Control-电源按钮 | 退出所有 app(会让您先存储对已打开文稿所作的更改),然后重新启动电脑 |
| Command-Option-Control-电源按钮 | 退出所有 app(会让您先存储对已打开文稿所作的更改),然后关闭电脑 |
| Shift-Control-电源按钮 | 使所有显示器进入睡眠状态 |
| Command-Shift-Q | 注销 |
| Command-Shift-Option-Q | 立即注销 |
App 快捷键
这些键盘快捷键适用于大部分 app。
| 组合键 | 功能 |
|---|---|
| Command-A | 在最前面的窗口中选择所有项目或文本 |
| Command-Z | 撤消上一命令(有些 app 可让您撤消多次) |
| Command-Shift-Z | 重做,恢复上次使用撤消进行的更改(有些 app 可让您重做多次) |
| Command-空格键 | 显示或隐藏 Spotlight 搜索栏(如果同时使用多语种,此快捷键可能会转而循环显示启用的脚本系统) |
| Command-Option-空格键 | 显示 Spotlight 搜索结果窗口(如果安装了多语种,则可能循环显示某一脚本中的键盘布局和输入法) |
| Command-Tab | 在打开的 app 列表中,向下移动到下一个最近使用的 app |
| Option-介质推出键 (⏏) | 从备选光盘驱动器中推出(如果已安装) |
| Command-调低亮度 (F1) | 切换针对多显示器配置的“镜像显示器” |
| Command-调高亮度 (F2) | 切换目标显示器模式 |
| Command-Mission Control (F3) | 显示桌面 |
| Command-F5 | 切换 VoiceOver 的开关 |
| Option-亮度 (F2) | 打开“显示器”系统偏好设置 |
| Option-Mission Control (F3) | 打开“Mission Control”偏好设置 |
| Option-音量键 (F12) | 打开“声音”偏好设置 |
| Command-减号 (–) | 缩小所选项 |
| Command-冒号 (:) | 显示“拼写和语法”窗口 |
| Command-分号 (;) | 查找文稿中拼写错误的词 |
| Command-逗号 (,) | 打开最前面的 app 的偏好设置窗口 |
| Command-问号 (?) | 打开“帮助”菜单 |
| Command-加号 (+)或 Command-Shift-等号 (=) | 放大所选项 |
| Command-Option-D | 显示或隐藏 Dock |
| Command-Control-D | 显示或隐藏选中字词的定义 |
| Command-D | 在“打开和存储”对话框中选择“桌面”文件夹 |
| Command-Delete | 选择包含“删除”或“不存储”按钮的对话框中的“不存储” |
| Command-E | 使用所选内容进行查找 |
| Command-F | 打开“查找”窗口,或在文稿中查找文本 |
| Command-Option-F | 移到搜索栏控件 |
| Command-G | 查找所选内容出现的下一个位置 |
| Command-Shift-G | 查找所选内容出现的上一个位置 |
| Command-H | 隐藏当前正在运行的 app 的窗口 |
| Command-Option-H | 隐藏所有其他正在运行的 app 的窗口 |
| Command-Option-I | 显示检查器窗口 |
| Command-M | 将活跃窗口最小化至 Dock |
| Command-Option-M | 将处于活动状态的 app 的所有窗口最小化至 Dock 中 |
| Command-N | 在最前面的 app 中创建新文稿 |
| Command-O | 显示一个对话框,用于选择要在最前面的 app 中打开的文稿 |
| Command-P | 打印当前文稿 |
| Command-Shift-P | 显示用于指定文稿参数(页面设置)的对话框 |
| Command-Q | 退出最前面的 app |
| Command-S | 存储活跃文稿 |
| Command-Shift-S | 显示“存储为”对话框或复制当前文稿 |
| Command-Option-T | 显示或隐藏工具栏 |
| Command-W | 关闭最前面的窗口 |
| Command-Option-W | 关闭当前 app 中的所有窗口 |
| Command-Z | 撤消上一命令(有些 app 允许多次撤消) |
| Command-Shift-Z | 重做,恢复上次使用撤消进行的更改(有些 app 可让您重做多次) |
| Command-Option-esc | 选择要强制退出的 app |
| Command-Shift-Option-Esc(按住三秒钟) | 强制退出最前面的 app |
对文本进行处理
编辑某个字段或文稿中的文本时可使用这些组合键。
| 组合键 | 功能 |
|---|---|
| Command-B | 以粗体显示所选文本或切换文本粗体显示开/关 |
| Command-I | 以斜体显示所选文本或切换文本斜体显示开/关 |
| Command-U | 对所选文本加下划线或打开/关闭加下划线功能 |
| Command-T | 显示或隐藏“字体”窗口 |
| fn-Delete | 向前删除(适用于便携式 Mac 的内建键盘) |
| fn-上箭头 | 向上滚动一页(相当于 Page Up 键) |
| fn-下箭头 | 向下滚动一页(相当于 Page Down 键) |
| fn-左箭头 | 滚动至文稿开头(相当于 Home 键) |
| fn-右箭头 | 滚动至文稿末尾(相当于 End 键) |
| Command-右箭头 | 将文本插入点移至当前行的行尾 |
| Command-左箭头 | 将文本插入点移至当前行的行首 |
| Command-下箭头 | 将文本插入点移至文稿末尾 |
| Command-上箭头 | 将文本插入点移至文稿开头 |
| Option-右箭头 | 将文本插入点移至下一个单词的末尾 |
| Option-左箭头 | 将文本插入点移至上一个单词的开头 |
| Option-Delete | 删除光标左侧的词,以及词后的任何空格或标点符号 |
| Command-Shift-右箭头 | 选中插入点与当前行行尾之间的文本 (*) |
| Command-Shift-左箭头 | 选中插入点与当前行行首之间的文本 (*) |
| Command-Shift-上箭头 | 选中插入点与文稿开头之间的文本 (*) |
| Command-Shift-下箭头 | 选中插入点与文稿末尾之间的文本 (*) |
| Shift-左箭头 | 将文本选择范围向左扩展一个字符 (*) |
| Shift-右箭头 | 将文本选择范围向右扩展一个字符 (*) |
| Shift-上箭头 | 将文本选择范围扩展到上一行相同水平位置的最近字符边缘 (*) |
| Shift-下箭头 | 将文本选择范围扩展到下一行相同水平位置的最近字符边缘 (*) |
| Shift-Option-右箭头 | 将文本选择范围扩展到当前词的词尾,再按一次则扩展到后一词的词尾 (*) |
| Shift-Option-左箭头 | 将文本选择范围扩展到当前词的词首,再按一次则扩展到后一词的词首 (*) |
| Shift-Option-下箭头 | 将文本选择范围扩展到当前段落的段尾,再按一次则扩展到下一段落的结尾 (*) |
| Shift-Option-上箭头 | 将文本选择范围扩展到当前段落的段首,再按一次则扩展到下一段落的段首 (*) |
| Control-A | 移至行或段落的开头 |
| Control-B | 向后移动一个字符 |
| Control-D | 删除光标前的字符 |
| Control-E | 移至行或段落的开头 |
| Control-F | 向前移动一个字符 |
| Control-H | 删除光标后的字符 |
| Control-K | 删除从光标前的字符到行或段落末尾的所有内容 |
| Control-L | 将光标或所选内容置于可见区域中央 |
| Control-N | 下移一行 |
| Control-O | 在光标后插入一行 |
| Control-P | 上移一行 |
| Control-T | 调换光标前后的字符 |
| Control-V | 下移 |
| Command-{ | 使所选内容左对齐 |
| Command-} | 使所选内容右对齐 |
| Command- | 使所选内容居中对齐 |
| Command-Option-C | 拷贝所选项的格式设置并存储到剪贴板 |
| Command-Option-V | 将某对象的样式应用于所选对象(粘贴样式) |
| Command-Shift-Option-V | 将周围文本的样式应用于所插入对象(粘贴并匹配样式) |
| Command-Control-V | 将格式设置应用于所选对象(粘贴标尺) |
辅助功能
这些键盘快捷键可帮助您通过键盘或辅助设备控制 Mac。这些快捷键中,有些快捷键需要在“系统偏好设置”的“键盘”面板或“辅助功能”面板中启用。
| 组合键 | 功能 |
|---|---|
| Command-Option-F5 | 显示辅助功能选项 |
| Command-F5 或 fn-Command-F5 | 打开或关闭 VoiceOver |
| Option-Control-F8 或 fn-Option-Control-F8 | 打开 VoiceOver 实用工具(如果 VoiceOver 已打开) |
| Command-Option-8 | 打开或关闭缩放功能 |
| Command-Option-加号 (+) | 放大 |
| Command-Option-减号 (–) | 缩小 |
| Command-Option-Control-8 | 反转/复原屏幕颜色 |
| Command-Option-Control-逗号 (,) | 降低对比度 |
| Command-Option-Control-句点 (.) | 增强对比度 |
全键盘控制
通过全键盘控制,您可以使用键盘进行导航,并与屏幕上的项目进行交互。使用这些快捷键可选择并调整文本栏和滑块等控件。按 Control-F7 或从“系统偏好设置”中“键盘”偏好设置的“快捷键”面板中选择“全键盘控制”,可以切换此设置开/关。
| 组合键 | 功能 |
|---|---|
| Tab | 移至下一个控件 |
| Shift-Tab | 移至上一个控件 |
| Control-Tab | 已选择文本栏时移至下一个控件 |
| Shift-Control-Tab | 将焦点移至上一组控件 |
| 箭头键 | 移至列表、标签组或菜单中的相邻项,或移动滑块和调节器(用于增加和减小值的垂直上下箭头) |
| Control-箭头键 | 移至与文本栏相邻的控件 |
| 空格键 | 选择高亮显示的菜单项 |
| Return 或 Enter 键 | 点按默认按钮或执行默认操作 |
| Esc 键 | 点按“取消”按钮,或关闭菜单而不选取项目 |
| Shift-Control-F6 | 将焦点移至上一个面板 |
| Control-F7 | 临时覆盖窗口和对话框中的当前键盘访问模式 |
| Control-F8 | 移到菜单栏中的状态菜单 |
| Command-重音符 (`) | 激活最前面的 app 中下一个打开的窗口 |
| Command-Shift-重音符 (`) | 激活最前面的 app 中上一个打开的窗口 |
| Command-Option-重音符 (`) | 将焦点移至窗口抽屉 |
您可以在菜单栏中浏览菜单,而无需使用鼠标或触控板。若要将焦点置于菜单栏中,请按 Control-F2(便携式键盘上的 fn-Control-F2)。然后使用下列组合键。
| 组合键 | 功能 |
|---|---|
| 左箭头和右箭头 | 从一个菜单移到另一个菜单 |
| Return | 打开所选菜单 |
| 上箭头和下箭头 | 移至所选菜单中的菜单项 |
| 键入菜单项的名称 | 跳到所选菜单中的菜单项 |
| Return | 选择菜单项 |
辅助功能 - 鼠标键
在“辅助功能”偏好设置中打开“鼠标键后,您可以使用键盘或数字小键盘上的按键移动鼠标指针。
| 组合键 | 功能 |
|---|---|
| 8 或数字小键盘上的 8 | 上移 |
| K 或数字小键盘上的 2 | 下移 |
| U 或数字小键盘上的 4 | 左移 |
| O 或数字小键盘上的 6 | 右移 |
| J 或数字小键盘上的 1 | 沿对角线向左下角移 |
| L 或数字小键盘上的 3 | 沿对角线向右下角移 |
| 7 或数字小键盘上的 7 | 沿对角线向左上角移 |
| 9 或数字小键盘上的 9 | 沿对角线向右上角移 |
| I 或数字小键盘上的 5 | 按鼠标按钮 |
| M 或数字小键盘上的 0 | 按住鼠标按钮 |
| .(句点键) | 释放按住的鼠标按钮 |
Finder 快捷键
| 组合键 | 功能 |
|---|---|
| Command-A | 选择最前面的窗口中的所有文件 |
| Command-Option-A | 取消选择所有项 |
| Command-C | 拷贝选中的文件,然后使用“粘贴”或“移动”来移动这些文件。 |
| Command-D | 重复选中的文件 |
| Command-E | 推出 |
| Command-F | 查找任何匹配 Spotlight 属性的内容 |
| Command-I | 显示选中的文件的“显示简介”窗口 |
| Command-Shift-C | 打开“电脑”窗口 |
| Command-Shift-D | 打开“桌面”文件夹 |
| Command-Shift-F | 显示“我的所有文件”窗口 |
| Command-Shift-G | 前往文件夹 |
| Command-Shift-H | 打开当前已登录用户帐户的个人文件夹 |
| Command-Shift-I | 打开 iCloud Drive |
| Command-Shift-K | 打开“网络”窗口 |
| Command-Shift-L | 打开“下载”文件夹 |
| Command-Shift-O | 打开“文稿”文件夹 |
| Command-Shift-R | 打开 AirDrop 窗口 |
| Command-Shift-U | 打开“实用工具”文件夹 |
| Command-Control-T | 添加到边栏 (OS X Mavericks) |
| Command-Option-I | 显示或隐藏“检查器”窗口 |
| Command-Control-I | 获得摘要信息 |
| Command-Option-P | 隐藏或显示路径栏 |
| Command-Option-S | 隐藏或显示边栏 |
| Command-正斜线 (/) | 隐藏或显示状态栏 |
| Command-J | 调出“显示”选项 |
| Command-K | 连接到服务器 |
| Command-L | 为所选项制作替身 |
| Command-N | 新建 Finder 窗口 |
| Command-Shift-N | 新建文件夹 |
| Command-Option-N | 新建智能文件夹 |
| Command-O | 打开所选项 |
| Command-R | 显示(替身的)原身 |
| Command-T | 在当前 Finder窗口中打开单个标签时显示或隐藏标签栏 |
| Command-Shift-T | 显示或隐藏 Finder 标签 |
| Command-Option-T | 在当前 Finder窗口中打开单个标签时显示或隐藏工具栏 |
| Command-V | 将您放在剪贴板上的文本副本粘贴到当前位置。 |
| Command-Option-V | 将您放在剪贴板上的文本从其原始位置移动到当前位置。 |
| Command-Option-Y | 查看选中文件的快速查看幻灯片。 |
| Command-1 | 以图标显示 |
| Command-2 | 以列表方式显示 |
| Command-3 | 以分栏方式显示 |
| Command-4 | 以 Cover Flow 方式显示(Mac OS X v10.5 或更高版本) |
| Command-逗号 (,) | 打开 Finder 偏好设置 |
| Command-左中括号 ([) | 前往上一文件夹 |
| Command-右中括号 (]) | 前往下一文件夹 |
| Command-Control-上箭头 | 在新窗口中打开包含当前文件夹的文件夹 |
| Command-下箭头 | 打开高亮显示的项目 |
| 右箭头(以列表视图显示) | 打开所选文件夹 |
| 左箭头(以列表视图显示) | 关闭所选文件夹 |
| Option-点按显示三角形 | (以列表视图显示)打开所选文件夹内的所有文件夹 |
| Option-连按 | 在单独窗口中打开文件夹,并关闭当前窗口 |
| Command-连按 | 在单独标签或窗口中打开文件夹 |
| Command-点按窗口标题 | 查看包含当前窗口的文件夹 |
| Command-Delete | 移至废纸篓 |
| Command-Shift-Delete | 清倒废纸篓 |
| Command-Shift-Option-Delete | 清倒废纸篓(不显示确认对话框) |
| 空格键(或 Command-Y) | 快速查看选中的文件 |
| 拖移时按 Command 键 | 将拖移的项目移至其他宗卷或位置(按住按键时指针会改变) |
| 拖移时按 Option键 | 拷贝拖移的项目(按住按键时指针会改变) |
| 拖移时按 Command-Option 组合键 | 对拖移的项目赋予别名(按住按键时指针会改变) |
NAS上搭建SS客户端
群辉NAS上搭建SS客户端来连接远程并提供本地HTTP/Socks5代理

**Contents** [hide](https://1024.ee/index.php/2020/04/06/群辉nas上搭建ss客户端来连接远程并提供本地http-socks5代理/#)
下载docker – ss-privoxy

高级设置
注意是文件,不是文件夹。而且,文件名就是config, 不是config.conf之类。
1 | #配置文件 |
设置端口
- 7070 For Socks5 – All Traffic
- 8118 for Http/Https – 部分域名翻墙,改conf文件即可

最后查一查

开启后查查日志,一切正常即可

群辉自己的使用,开这里就行。

指令
1 | docker run -d --restart=always \ |