报告分类bash

for file in *.pdf; do mkdir -p -- "${file%%-*}" && \
    mv -- "$file" "${file%%-*}"; done
l

explain结果每个字段的含义说明

我们都知道用explain xxx分析sql语句的性能,但是具体从explain的结果怎么分析性能以及每个字段的含义你清楚吗?这里我做下总结记录,也是供自己以后参考。

  • 首先需要注意:MYSQL 5.6.3以前只能EXPLAIN SELECT; MYSQL5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE

explain结果示例:

1
2
3
4
5
6
7
mysql> explain select * from staff;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | staff | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set

先上一个官方文档表格的中文版:

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只可以用到一个索引。

  • 1、system

表中只有一行数据或者是空表,这是const类型的一个特例。且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index

  • 2、const

最多只有一行记录匹配。当联合主键或唯一索引的所有字段跟常量值比较时,join类型为const。其他数据库也叫做唯一索引扫描

  • 3、eq_ref

多表join时,对于来自前面表的每一行,在当前表中只能找到一行。这可能是除了system和const之外最好的类型。当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。

eq_ref可用于使用’=’操作符作比较的索引列。比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。

相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。
eq_ref只能找到一行,而ref能找到多行。

  • 4、ref

对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时,使用ref类型(也就是说,此联接能够匹配多行记录)。

ref可用于使用’=’或’<=>’操作符作比较的索引列。

  • 5、 fulltext

使用全文索引的时候是这个类型。要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引

  • 6、ref_or_null

跟ref类型类似,只是增加了null值的比较。实际用的不多。

1
2
3
eg.
SELECT * FROM ref_table
WHERE key_column=expr OR key_column IS NULL;
  • 7、index_merge

表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取多个索引,性能可能大部分时间都不如range

  • 8、unique_subquery

用于where中的in形式子查询,子查询返回不重复值唯一值,可以完全替换子查询,效率更高。
该类型替换了下面形式的IN子查询的ref:
value IN (SELECT primary_key FROM single_table WHERE some_expr)

  • 9、index_subquery

该联接类型类似于unique_subquery。适用于非唯一索引,可以返回重复值。

  • 10、range

索引范围查询,常见于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等运算符的查询中。

1
2
3
4
5
SELECT * FROM tbl_name
WHERE key_column BETWEEN 10 and 20;

SELECT * FROM tbl_name
WHERE key_column IN (10,20,30);
  • 11、index

索引全表扫描,把索引从头到尾扫一遍。这里包含两种情况:
一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因为索引通常比数据表小,而且还能避免二次查询。在extra中显示Using index,反之,如果在索引上进行全表扫描,没有Using index的提示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 此表见有一个name列索引。
# 因为查询的列name上建有索引,所以如果这样type走的是index
mysql> explain select name from testa;
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| 1 | SIMPLE | testa | index | NULL | idx_name | 33 | NULL | 2 | Using index |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
1 row in set

# 因为查询的列cusno没有建索引,或者查询的列包含没有索引的列,这样查询就会走ALL扫描,如下:
mysql> explain select cusno from testa;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | testa | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set

# 包含有未见索引的列
mysql> explain select * from testa;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | testa | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set
  • 12、all

全表扫描,性能最差。

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 例如下面的例子:

mysql> EXPLAIN SELECT * FROM order_info ORDER BY product_name \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: order_info
partitions: NULL
type: index
possible_keys: NULL
key: user_product_detail_index
key_len: 253
ref: NULL
rows: 9
filtered: 100.00
Extra: Using index; Using filesort
1 row in set, 1 warning (0.00 sec)
我们的索引是

KEY `user_product_detail_index` (`user_id`, `product_name`, `productor`)
但是上面的查询中根据 product_name 来排序, 因此不能使用索引进行优化, 进而会产生 Using filesort.
如果我们将排序依据改为 ORDER BY user_id, product_name, 那么就不会出现 Using filesort 了. 例如:

mysql> EXPLAIN SELECT * FROM order_info ORDER BY user_id, product_name \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: order_info
partitions: NULL
type: index
possible_keys: NULL
key: user_product_detail_index
key_len: 253
ref: NULL
rows: 9
filtered: 100.00
Extra: Using index
1 row in set, 1 warning (0.00 sec)
  • Using index
    “覆盖索引扫描”, 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错
  • Using temporary
    查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.

除此之外还有其他值,这里就不一一一列举了。


通过以上这些总结,以后我们看到explain的结果,就知道该从哪些字段值去分析sql语句的执行效率了。

l

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对应库的字符集,可以及早发现问题;
l

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使用不到索引,引起严重的性能问题;
l

规则

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]))
l

[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 的实用小技巧

加密算法的前身今世

我用四个命令概括了 Git 的所有套路

Git/SQL/正则表达式的在线练习平台

l

设计模式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反向代理,与正向对比。负载均衡:为什么要负载均衡。
l

常用设计模式

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反向代理,与正向对比。负载均衡:为什么要负载均衡。
l

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 组合键 对拖移的项目赋予别名(按住按键时指针会改变)
l

群辉NAS上搭建SS客户端来连接远程并提供本地HTTP/Socks5代理

img

主要参考了这片文章。

shadowsocks的Http代理桥接为SOCKS5代理,使群晖SS同步Dropbox和GoogleDrive

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

1 下载docker – ss-privoxy

2 高级设置

3 设置端口

4 最后查一查

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

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

7指令

下载docker – ss-privoxy

img

高级设置

img注意是文件,不是文件夹。而且,文件名就是config, 不是config.conf之类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#配置文件

confdir /etc/privoxy
logdir /var/log/privoxy

actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file
actionsfile user.action # User customizations

filterfile default.filter
filterfile user.filter # User customizations

logfile privoxy.log
#下面这行的意思是监听来自任意地址的8118访问
listen-address :8118
toggle 1

enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0

buffer-limit 4096
enable-proxy-authentication-forwarding 0

#启用这段全局代理模式#####################################
##下面一行表示将所有网址转发给本地7070端口,也就是本地的SS客户端所开放的端口。
#forward-socks5 / 127.0.0.1:7070 .
#启动这段只有部分网址走代理###############################
forward / .
#下面这一段表示需要走代理的规则
forward-socks5 .dropbox*.com 127.0.0.1:7070 .
forward-socks5 .*google*.* 127.0.0.1:7070 .
forward-socks5 .*facebook*.* 127.0.0.1:7070 .
forward-socks5 .*twitter*.* 127.0.0.1:7070 .
#forward-socks5 .*youtube*.* 127.0.0.1:7070 .
##########################################################
forwarded-connect-retries 0

accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 300
tolerate-pipelining 1
default-server-timeout 60
socket-timeout 300

#配置文件结束

设置端口

  • 7070 For Socks5 – All Traffic
  • 8118 for Http/Https – 部分域名翻墙,改conf文件即可

img

最后查一查

img

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

img

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

img

指令

1
2
3
4
5
6
7
8
9
10
11
docker run -d --restart=always \
-i -t -e SERVER_ADDR=n24.boom.party \
-e SERVER_PORT=12000 \
-e PASSWORD=Uk92CS \
-e METHOD=aes-256-cfb \
-e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
-e TIME_OUT=300 \
-p 7070:7070 \
-p 8118:8118 \
-v /share/CACHEDEV1_DATA/Container/etc/privoxy/config:/etc/privoxy/config \
oldiy/ss-privoxy
l