-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
3860 lines (3800 loc) · 216 KB
/
search.xml
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title></title>
<url>/2022/08/26/CORS%E9%80%9A%E4%BF%A1/</url>
<content><![CDATA[<h1 id="CORS-通信"><a href="#CORS-通信" class="headerlink" title="CORS 通信"></a>CORS 通信</h1><ol>
<li>CORS(Cross-Origin-Resource-Sharing),中文名跨域资源共享。</li>
<li>CORS 的作用是允许浏览器向跨域服务器发送 XMLHttpRequest(XHR)。</li>
<li>实现 CORS 跨域通信,主要看服务器是否实现 CORS 接口,也就是说主要在服务器端配置</li>
<li>服务器端配置 CORS 跨域的方法是设置 Access-Control-Allow-Origin<span id="more"></span></li>
<li>CORS 可分为两种请求:<ol>
<li>简答请求<ol>
<li>简答请求需要请求方法和头信息字段都满足条件</li>
<li>请求方法<ol>
<li>HEAD</li>
<li>POST</li>
<li>GET</li>
</ol>
</li>
<li>头信息字段<ol>
<li>Accept</li>
<li>Content-Language</li>
<li>Accept-Language</li>
<li>Last-Event-ID</li>
<li>Content-Type:只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain</li>
</ol>
</li>
<li>不满足上面两个条件的,称为非简单请求。</li>
<li>CORS 通信的基本流程:<ol>
<li>浏览器发起 CORS 请求,并且在头信息增加 origin 字段,表示要发起跨域请求的域。</li>
<li>服务器判断浏览器发过来的 origin 是否在许可范围内。</li>
<li>如不在许可范围内,则发送正常的 HTTP 回应,但不会包含 Access-Control-Allow-Origin 字段。</li>
<li>如在许可范围内,发送的 HTTP 回应会包含以下字段<ol>
<li>Access-Control-Allow-Origin 字段: 表示服务器可允许跨域的域名,如果是*,则表示可接受任意域名。</li>
<li>Access-Control-Allow-Credentials:表示是否允许发送 cookie。</li>
<li>Access-Control-Expose-Headers:表示是否返回其他非基本字段。</li>
</ol>
</li>
<li>要想发送 cookie 给服务器,开发者需要将 xhr.withCredentials 设置为 true,注意有些浏览器的 xhr.withCredentials 默认为 false。</li>
</ol>
</li>
</ol>
</li>
<li>非简单请求<ol>
<li>非简单请求在发送 CORS 请求前,需要先发出预检请求。</li>
<li>预检请求是浏览器询问是否接受当前网页的域名,以及可接受哪些 HTTP 方法和字段。</li>
<li>预检请求的请求方法是 OPTIONS。</li>
<li>预检请求的头信息包含的部分字段如下<ol>
<li>origin</li>
<li>Access-Control-Request-Method,发送 CORS 请求用到的方法。</li>
<li>Access-Control-Requset-Headers,发送 CORS 请求额外发送的头部信息</li>
</ol>
</li>
<li>如通过预检请求,则每次的 CORS 请求就跟简单请求一样。</li>
<li>CORS 和 JSONP 的比较<ol>
<li>JSONP 只支持 Get 请求,而 CORS 支持所有类型的请求。</li>
<li>JSONP 可以在老式浏览器上运行,也可以向不支持 CORS 的网站上请求数据。</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
]]></content>
</entry>
<entry>
<title>DeepL</title>
<url>/2021/06/19/DeepL/</url>
<content><![CDATA[<h1 id="DeepL"><a href="#DeepL" class="headerlink" title="DeepL"></a>DeepL</h1><blockquote>
<p>科技巨头谷歌(Google)、微软(Microsoft)和脸书(Facebook)都将机器学习应用到翻译领域,但一家名为DeepL的小公司却超越了他们,并且提高了该领域的标准。<br>其翻译速度可与规模庞大的竞争者相媲美,但比我们使用过的任何一个翻译工具都要准确和细致。<br>——<a href="https://techcrunch.com/2017/08/29/deepl-schools-other-online-translators-with-clever-machine-learning/" title="动点科技(TechCrunch)">动点科技(TechCrunch)</a>美国</p>
</blockquote>
<span id="more"></span>
<p>本期介绍一款翻译器<strong>DeepL</strong>,可能很多人没听说过这个翻译器。</p>
<p>可能大家用惯了比较主流的翻译器吧,比如谷歌,搜狗,必应,百度等主流翻译器。</p>
<p>然而你可能不知道,这款毫不起眼的翻译器,才是最强最好的AI翻译工具,口说无凭,现在上图。</p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628110258.png" alt="中英对比"></p>
<p>以上是DeepL要求中文译员对来自不同在线翻译器提供的一组翻译文本进行评估。</p>
<p>但译员们并不知道哪个翻译版本是由哪个网站(包括百度)翻译的。</p>
<p>如下所示,DeepL的结果被选为最佳翻译,其质量完胜其他翻译器。</p>
<p>如果你觉得这组数据对比具有偶然性,并不能推断DeepL是最佳翻译器,那么再继续看下图,是对不同语言的对比评测:</p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628110857.png" alt="日英对比"></p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628111053.png" alt="多语言对比"></p>
<p>目前DeepL支持11种语言的双向翻译,预计以后会增加更多语言的翻译支持,接下来说说我对DeepL的使用体验。</p>
<ul>
<li>翻译准确度高。这个其他主流翻译器应该也是同样具备的。</li>
<li>翻译流畅度高。这个真的没得说,DeepL给出的翻译结果可读性好,自然流畅度比其他翻译器好太多了,表示很惊喜。</li>
</ul>
<p>不信咱再看下图对比:</p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628112100.png" alt="DeepL"></p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628112304.png" alt="Google"></p>
<p><img src="https://gitee.com/liubeep/blogimage/raw/master/img/20200628112415.png" alt="Baidu"></p>
<p>仔细看看以上三张图的翻译结果,是不是觉得DeepL翻译的更自然更亲切,更贴合我们平常的语言风格?</p>
<p>所以这就是DeepL的强大之处,它翻译的质量差不多已经接近人工翻译的质量。</p>
<p>而其他翻译器的虽然也足够强大,但有一个明显的缺点就是直译更明显,有点”机器味”,翻译结果不自然亲切,有时难以理解。</p>
<p>目前DeepL仅支持网页在线和Window版本,但我相信这么优秀的翻译器,后续应该会陆续开发多种平台的翻译器吧。</p>
<p>下面我给出了DeepL的在线翻译官网,在这个网站里也可以下载相应Window版软件。</p>
<p>我觉得这个Window版软件做的特别方便简单。</p>
<p>其中一个便是当我们任意复制了其中一段文本时,便会自动唤醒<a href="https://www.deepl.com/translator" title="DeepL">DeepL</a>在window桌面右下角显示以供我们翻译。</p>
]]></content>
<categories>
<category>分享</category>
</categories>
<tags>
<tag>工具</tag>
</tags>
</entry>
<entry>
<title></title>
<url>/2022/08/31/Docker%E4%BB%8B%E7%BB%8D/</url>
<content><![CDATA[<h1 id="Docker-介绍"><a href="#Docker-介绍" class="headerlink" title="Docker 介绍"></a>Docker 介绍</h1><ol>
<li>虚拟化技术与容器技术<ol>
<li>虚拟化技术的理解<ol>
<li>它是一种将计算机物理资源抽象化,转化成计算机虚拟资源以提供给程序使用</li>
</ol>
</li>
<li>虚拟化技术很好地解决了跨平台兼容的问题</li>
<li>虚拟化只是提高了计算机计算机资源的利用率,并不会减少资源的占用。</li>
<li>资源隔离<ol>
<li>将程序分隔在不同的运行环境中</li>
</ol>
</li>
<li>容器技术<ol>
<li>操作系统提供接口,让多个应用程序在不同的环境中独立运行,互不干扰。</li>
</ol>
</li>
</ol>
</li>
</ol>
<span id="more"></span>
<ol start="2">
<li><p>Docker 介绍</p>
<ol>
<li>Docker 属于操作系统层面的虚拟化技术</li>
<li>Docker 与传统的虚拟化技术的不同之处<ol>
<li>Docker 没有虚拟出硬件,并且它的容器直接运行于宿主内核,容器内并没有自己的内核</li>
<li>传统的虚拟化技术需要虚拟出硬件,在其上运行一个操作系统,并且在这个操作系统里面运行应用程序</li>
</ol>
</li>
<li>命名空间<ol>
<li>集合相同模块的类,区分不同模块的同名类</li>
</ol>
</li>
</ol>
</li>
<li><p>Docker 镜像</p>
<ol>
<li>是一种特殊的文件系统,提供了 容器运行需要的库,配置文件,等等,还包含了容器运行需要的配置参数,它的核心精髓是保证了环境的一致性</li>
<li>Docker 镜像技术是一套统一的接口技术,它适配了不同的开发语言<ol>
<li>Docker 镜像采用分层存储结构,每一次的修改都只对当前所在的一层有效,对前面几层不起作用</li>
</ol>
</li>
<li>中间层镜像:<ol>
<li>是其他镜像依赖需要的镜像</li>
<li>用于提高镜像复用性,加速镜像构建</li>
</ol>
</li>
<li>删除镜像<ol>
<li>两类删除行为:Untagged 和 Deleted</li>
<li>有时候删除镜像,可能仅仅是取消了镜像的标签,也就是 Untagged 的意义,真正影响镜像删除的,要考虑其他镜像是否依赖当前要删除镜像的某一层,或者有容器依赖当前要删除镜像的某一层,或者有 别个标签指向了当前要删除的镜像,这种情况下就不会触发镜像删除行为,也就是 Delected 行为</li>
</ol>
</li>
</ol>
</li>
<li><p>Docker 容器</p>
<ol>
<li>容器是基于镜像构建,是独立运行的一个或一组应用</li>
<li>容器也是分层存储的,容器在作为基础层的镜像之上又构建用于容器运行的存储层</li>
<li>启动容器时,如果需要的镜像不存在,会自动 pull 下载</li>
<li>容器里只会存在必须的资源,多余的资源不会存在,所以 Docker 对资源的利用率很高</li>
<li>一个容器只有在执行任务时才会处于 running 状态,不管是否启动</li>
<li>启动容器的命令为 docker run <image>,如果要指定容器在后台运行可以指定-d 参数</li>
<li>启动处于 exited 状态的容器 docker container start [container-id]</li>
<li>列出正在执行任务也即 running 状态的容器 docker container ls</li>
<li>列出容器运行结果 docker container logs [containerId]</li>
<li>对处于后台运行的容器进行操作可以使用 docker exec 或者 attach 命令,但推荐使用 exec 命令,因为 exit 容器后,不会终止容器</li>
<li>docker container rm 只能删除处于 exited 的容器,如果要删除处于 running 状态的容器,可以加-f 参数</li>
<li>删除所有处于 exited 状态的容器 docker container prune</li>
<li>docker diff [container]查看对容器的更改</li>
<li>docker commit -a xxx -m xxx containerName [REPOSITORY[:TAG]] 从容器创建一个新镜像</li>
<li>docker history container 查看镜像的历史记录</li>
</ol>
</li>
<li><p>Docker 数据卷</p>
<ol>
<li>数据卷是容器用于管理数据的场所</li>
<li>数据卷的特性<ol>
<li>在多个容器之间共享</li>
<li>对数据卷的生效会即时生效</li>
<li>删除容器后,数据卷并不会消失</li>
<li>对数据卷的更新,不会影响镜像</li>
</ol>
</li>
<li>创建数据卷 docker volume create [volume-name]</li>
<li>查看某个数据卷的具体信息 docker volume inspect [volume-name]</li>
<li>删除数据卷 docker volume rm,如果要在删除容器的同时删除数据卷可以加上-v 参数</li>
<li>删除未挂载到容器的数据卷 docker volume prune</li>
</ol>
</li>
<li><p>Docker 网络配置</p>
<ol>
<li>-p -P 都能指定端口<ol>
<li>-P 随机指定一个主机端口映射到容器开放的端口</li>
<li>-p 主动指定端口映射<ol>
<li>几种格式的端口映射<ol>
<li>hostPort:containerPort<ol>
<li>这种情况下,不管本地的 ip 地址是啥,只要主机端口相同,他们指向同一个地址,也就是映射所有接口地址</li>
</ol>
</li>
<li>ip:hostPort:containerPort<ol>
<li>映射指定地址的映射端口,只能通过指定的 ip 地址加端口访问</li>
</ol>
</li>
<li>ip::containerPort<ol>
<li>映射到指定地址的任意端口,也就是说对于指定的 ip 地址,随机指定一个主机端口</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li>Docker 容器互联<ol>
<li>用自定义网络来互联容器<ol>
<li>docker network create -d bridge my-net 其中-d 参数指定网络类型</li>
<li>docker run –network my-net busybox 使用–network 参数 指定 busybox 容器链接到 mynet 网络</li>
</ol>
</li>
</ol>
</li>
<li>Dockerfile<ol>
<li>是一个文本文件,以指令为基础一层层构建镜像</li>
<li>如果不以任何镜像为基础,可以使用 scratch 镜像,scratch 镜像是一种虚拟空白镜像</li>
<li>使用指令书写命令的原则<ol>
<li>能写在一层的命令尽量写在一个指令里,因为一个指令构建一层镜像</li>
<li>尽力确保镜像只包含自己需要的东西,多余的东西记得及时清理,因为当前一层的镜像只能在当前一层处理,在下一层处理无效,负责会随着镜像的构建存在,造成镜像臃肿</li>
</ol>
</li>
<li>docker build xxx 命令用于构建镜像</li>
<li>Dockerfile 的文件名并不固定</li>
<li>Dockerfile 文件指令<ol>
<li>RUN 指令用于运行命令,每执行一次就会就会狗创建一层镜像</li>
<li>COPY 指令用于将源文件复制到目标文件</li>
<li>ADD 指令相当于进化版的 COPY 指令,只是增加了一些功能,ADD 指令更适用于自动加压缩,权限调整等场合</li>
<li>CMD 指令跟 RUN 指令类似,只不过 RUN 指令用在容器构建时,而 CMD 指令用在指令运行时,CMD 指令为启动的容器指定默认要执行的程序,只能有一个,如果有多个,则最后一个覆盖前面的,但它会被 docker run 参数中指定的命令覆盖</li>
<li>ENV 指令 设置环境变量,这样可以在全局环境中通过$引用这个环境变量</li>
<li>ARG 指令与 ENV 指令环境变量一致,不过它的作用域在 Dockerfile 内</li>
<li>Volume 指令定义匿名卷,容器会自动挂载到匿名卷</li>
<li>EXPOSE 指令声明要暴露出去的指令</li>
<li>WORKDIR 指令指定容器工作的目录</li>
<li>USER 指令用于指定执行后续程序需要的用户和用户组</li>
<li>HEALTHCHECK 指令用于指定程序监听 docker 容器服务的运行状态</li>
</ol>
</li>
</ol>
</li>
<li>Docker Compose<ol>
<li>用于实现 Docker 容器集群的快速编排</li>
<li>本质是定义和运行有多个容器的应用</li>
<li>两个概念<ol>
<li>服务<ol>
<li>多个有相同镜像的实例</li>
</ol>
</li>
<li>项目<ol>
<li>相关联的多个容器组成的业务单元</li>
</ol>
</li>
</ol>
</li>
<li>Compose 用 python 语言编写,可通过 pip 安装</li>
<li>Docker Compose 使用 YAML 文件对容器进行管理</li>
<li>Compose 模板文件<ol>
<li>build 指令指定 Dockerfile 文件所在的目录,可以利用这个指令构建镜像,而不用再从 compose 模板文件书写<ol>
<li>context 指令指定 dockerfile 文件所在目录</li>
<li>dockerfile 指令指定 dockerfile 文件名</li>
<li>args 指令指定构建镜像时的变量</li>
<li>cache-form 指令指定构建镜像时的缓存</li>
<li>cap-add 指令指定为容器增加的内核能力</li>
<li>cap-drop 指令指定为容器去掉的内核能力</li>
<li>command 指令指定容器启动后默认执行的命令</li>
<li>container_name 指令指定容器名称</li>
<li>devices 指令设定设备映射关系</li>
<li>depends_on 指令设备的依赖,先后启动的问题</li>
<li>dns 指令定义 DNS 服务器</li>
<li>dns_search 指令用于配置 DNS 搜索域</li>
<li>tmpfs 指令用于指定挂载一个 tmpfs 文件系统到容器</li>
<li>env_file 指令用于指定环境变量的路径</li>
<li>environment 指令用来设定环境变量</li>
<li>expose 指令指定容器向外暴露的端口,但不映射到宿主机</li>
<li>external_links 指令指定连接的 compose 外部的容器</li>
<li>image 指令指定镜像</li>
<li>labels 指令为容器添加元素据信息</li>
<li>network_mode 指令用来设置网络模式</li>
<li>ports 指令指定主机以及容器端口</li>
<li>secrets 指令用于存储敏感数据</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
]]></content>
</entry>
<entry>
<title></title>
<url>/2022/08/26/ECMAScript6/</url>
<content><![CDATA[<h1 id="ECMAScript6"><a href="#ECMAScript6" class="headerlink" title="ECMAScript6"></a>ECMAScript6</h1><ol>
<li><p>JavaScript 为动态类型语言。</p>
</li>
<li><p>静态语言:在编译阶段便检查数据类型。动态语言:在执行期间才检查语言的数据类型。</p>
</li>
<li><p>扩展运算符 1. 取出参数对象的所有可遍历属性,拷贝到当前对象中。</p>
<span id="more"></span>
</li>
<li><p>常用方法</p>
<ol>
<li>filter()<ol>
<li>语法:array.filter(function(currentValue,index,arr), thisValue)</li>
<li>功能:返回一个过滤符合要求的元素并且组成新数组</li>
</ol>
</li>
<li>map()<ol>
<li>功能:返回回调函数对每个原数组元素进行操作(比如加 1)之后组成的新数组,原数组不变。</li>
</ol>
</li>
<li>foreach()<ol>
<li>遍历数组并且对中的每个元素进行操作。</li>
</ol>
</li>
<li>shift()<ol>
<li>删除数组的第一个元素,并且返回该元素的值。</li>
<li>可改变数组的长度。</li>
</ol>
</li>
<li>splice()<ol>
<li>删除或增加或替换元素</li>
<li>第一个参数为修改开始的位置</li>
<li>第二个参数为删除元素个数</li>
<li>第三个参数为要增加或者替换的元素</li>
</ol>
</li>
<li>split()<ol>
<li>将字符串分割成字符串数组,字符串的每一个字母都可以是一个数组元素</li>
<li>参数是一种分隔符</li>
</ol>
</li>
<li>join()<ol>
<li>将数组组合成一个字符串</li>
<li>参数是一种分隔符,让生成的字符串根据这个分隔符分隔</li>
</ol>
</li>
<li>indexOf()<ol>
<li>数组<ol>
<li>返回某个在数组中的索引,如果没有找到则返回-1</li>
</ol>
</li>
<li>字符串<ol>
<li>返回第一个子串在字符串出现的索引,如果没有则返回-1</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li><p>计算属性概念</p>
<ol>
<li>一个对象的属性名从一个变量中获取,并且这个变量用[]表示。</li>
</ol>
</li>
</ol>
]]></content>
</entry>
<entry>
<title></title>
<url>/2022/08/26/Generator%E5%87%BD%E6%95%B0%E8%AF%AD%E6%B3%95/</url>
<content><![CDATA[<h1 id="Generator-函数语法"><a href="#Generator-函数语法" class="headerlink" title="Generator 函数语法"></a>Generator 函数语法</h1><ol>
<li><p>Generator 相当于一个状态机,里面封装了多种内部状态</p>
</li>
<li><p>创建 Generator 函数时,Function 关键字跟函数名之间要有*星号</p>
</li>
<li><p>调用 Generator 函数后,不会执行里面的代码,而是生成一个迭代器对象</p>
</li>
<li><p>返回的迭代器对象可以反复使用 next()方法迭代内部状态</p>
</li>
<li><p>使用 next 方法会返回一个对象,这个对象有两个属性 1. value:当前状态的值,即 yield 表达式的值 2. done:迭代是否结束</p>
<span id="more"></span>
</li>
<li><p>每次遇到 yield 语句并执行完成,函数会暂停执行</p>
</li>
<li><p>函数可以有多个 yield 语句,但只能有一个 yield 语句</p>
</li>
<li><p>next 方法带参数时,代表上一个 yield 返回值的结果为该参数的值</p>
</li>
<li><p>可以用 for-of 循环迭代 Generator 函数返回的迭代器对象,如果对象 done 属性为 true,不会输出该对象</p>
</li>
<li><p>yield 表达式如果用在另一个表达式中,必须放在圆括号里</p>
</li>
<li><p>Generator.prototype.throw()</p>
<ol>
<li>throw 方法是用来在函数外部抛出错误</li>
<li>注意只能用 throw 方法抛出,而不能用 throw 命令关键字抛出,否则 Generator 函数内部不会捕获错误</li>
</ol>
</li>
<li><p>Generator.prototype.return()</p>
<ol>
<li>return 语句可以返回一个值,并且终止此后的迭代操作</li>
<li>yield 参数为要返回的值,如果为空,则返回 underfined</li>
<li>如果 Generator 函数内有 try-finally 语句块,则会直接执行 finally 语句内的值,再返回 return 指定的返回值</li>
</ol>
</li>
<li><p>yield*表达式</p>
<ol>
<li>用来在一个 Generator 函数里执行另一个 Generator 函数</li>
<li>任何实现 Iterator 接口的数据结构也可以用 yield 表达式迭代</li>
</ol>
</li>
</ol>
]]></content>
</entry>
<entry>
<title>Git入门学习</title>
<url>/2020/06/04/Git/</url>
<content><![CDATA[<h1 id="Git"><a href="#Git" class="headerlink" title="Git"></a>Git</h1><h2 id="git-介绍"><a href="#git-介绍" class="headerlink" title="git 介绍"></a>git 介绍</h2><ol>
<li><p>由 Linus 用 C 语言编写.</p>
</li>
<li><p>分布式版本控制系统</p>
</li>
<li><p>集中式版本控制系统 CVS,SVN 缺点:</p>
<ul>
<li>缺点:更新速度慢,必须联网.</li>
</ul>
</li>
<li><p>集中式版本控制系统工作原理:</p>
<ul>
<li>版本库放在中央处理器.</li>
<li>处理数据时:先从中央处理器获取数据,个人处理完数据后,再传送到中央处理器.<span id="more"></span></li>
</ul>
</li>
<li><p>分布式版本控制系统工作原理:</p>
<ul>
<li>去中心化.</li>
<li>每一个主机都是一个版本库.</li>
<li>无需联网,除非主机之间需要相互传送文件.</li>
</ul>
</li>
</ol>
<h2 id="git-常用命令"><a href="#git-常用命令" class="headerlink" title="git 常用命令"></a>git 常用命令</h2><ol>
<li><p>git config 用来获取并设置存储库或者全局选择.</p>
<ul>
<li><p>查看用户名和邮箱.</p>
<ul>
<li>git config - -global user.name.</li>
<li>git config - -global user.email.</li>
</ul>
</li>
<li><p>修改用户名和邮箱.</p>
<ul>
<li>git config - -global user.name user.</li>
<li>git config - -global user.email email.</li>
</ul>
</li>
</ul>
</li>
<li><p>git init 文件名</p>
<ul>
<li>把当前文件夹或目录设置为 git 可以管理的仓库.</li>
<li>.git 文件用来管理跟踪版本库.</li>
</ul>
</li>
<li><p>将文件添加到暂存区</p>
<ul>
<li>git add 文件名.</li>
</ul>
</li>
<li><p>将当前在暂存区的所有文件提交到版本库</p>
<ul>
<li>git commit 文件名.</li>
<li>-m 参数::对要提交的文件进行说明.</li>
<li>多次上传 add,一次提交 commit.</li>
</ul>
</li>
<li><p>查看工作区和暂存区的文件状态</p>
<ul>
<li>git status.</li>
</ul>
</li>
<li><p>查看工作区和版本库最新文件的差异</p>
<ul>
<li>git diff HEAD - - 文件名.</li>
</ul>
</li>
<li><p>查看工作区和暂存区文件的差异</p>
<ul>
<li>git diff 文件名</li>
</ul>
</li>
<li><p>查看 commit 历史</p>
<ul>
<li>git log.</li>
<li>–pretty=oneline 简化 commit 历史记录.</li>
</ul>
</li>
<li><p>回退到某个版本</p>
<ul>
<li>git reset - -hard commit ID .</li>
</ul>
</li>
<li><p>回退到上一个版本</p>
</li>
</ol>
<ul>
<li>git reset - -hard HEAD^.</li>
</ul>
<ol start="11">
<li>查看历史命令</li>
</ol>
<ul>
<li>git reflog.</li>
</ul>
<ol start="12">
<li><p>撤销工作区文件的修改</p>
<ul>
<li>git checkout - -文件名.</li>
</ul>
</li>
<li><p>撤销暂存区文件的修改</p>
<ul>
<li>git reset HEAD 文件名</li>
</ul>
</li>
<li><p>删除版本库文件</p>
<ul>
<li>git rm 文件名</li>
<li>rm 删除工作区的文件,前面不带 git.</li>
<li>删除版本库里的文件后需要 commit.</li>
</ul>
</li>
</ol>
<h2 id="git-远程仓库"><a href="#git-远程仓库" class="headerlink" title="git 远程仓库"></a>git 远程仓库</h2><ol>
<li><p>生成 SSHKey</p>
<ul>
<li>ssh-keygen -t rsa -C “<a href="mailto:user@example.com">user@example.com</a>“.</li>
<li>id_rsa 私钥,id_ras.pub 公钥.</li>
</ul>
</li>
<li><p>为 GitHub 设置 SSHKey 的原因</p>
<ul>
<li>确保仓库内容的推送是本人推送.</li>
</ul>
</li>
<li><p>GitHub 作为远程仓库的两个好处</p>
<ul>
<li>作为远程同步仓库,备份本地仓库.</li>
<li>通过 GitHub 方便多人协同工作.</li>
</ul>
</li>
<li><p>关联本地仓库和远程 GitHub 仓库</p>
<ul>
<li><p>两种关联方式:</p>
<ul>
<li>git remote add origin <a href="mailto:git@github.com">git@github.com</a>:用户名/ 仓库名.git.</li>
<li>git remote add origin <a href="https://github.com/%E7%94%A8%E6%88%B7%E5%90%8D/%E4%BB%93%E5%BA%93%E5%90%8D.git">https://github.com/用户名/仓库名.git</a></li>
</ul>
</li>
</ul>
</li>
<li><p>推送内容到仓库</p>
<ul>
<li><p>把当前分支推送到远程仓库对应分支.</p>
<ul>
<li>git push -u orign master.</li>
</ul>
</li>
<li><p>加-u 参数 是为了把本地仓库 master 分支与远程仓库 master 分支关联起来,此后再次推送不再需要加-u 参数,简化命令.</p>
</li>
<li><p>把本地未 push 分叉提交历史整理成直线</p>
<ul>
<li>git rebase</li>
</ul>
</li>
</ul>
</li>
<li><p>从远程库克隆到本地</p>
<ul>
<li><p>两种克隆方式:</p>
<ul>
<li>git clone <a href="mailto:git@github.com">git@github.com</a>:用户名/仓库名.git.</li>
<li>git clone <a href="https://github/%E7%94%A8%E6%88%B7%E5%90%8D/%E4%BB%93%E5%BA%93%E5%90%8D.git">https://github/用户名/仓库名.git</a>.</li>
</ul>
</li>
<li><p>查看远程库信息</p>
<ul>
<li>git remote</li>
<li>git remote -v</li>
</ul>
</li>
<li><p>删除远程库</p>
<ul>
<li>git remote rm 远程仓库名</li>
</ul>
</li>
<li><p>git 支持多种协议,但相比于 https,git 协议最快.</p>
</li>
</ul>
</li>
</ol>
<h2 id="git-分支管理"><a href="#git-分支管理" class="headerlink" title="git 分支管理"></a>git 分支管理</h2><ol>
<li><p>HEAD 只指向分支,而且仅指向当前分支,master 是主分支,指向提交点.</p>
</li>
<li><p>分支合并的原理</p>
<ul>
<li>让 master 分支指向与已修改提交分支相同的提交点.</li>
</ul>
</li>
<li><p>创建分支</p>
<ul>
<li><p>创建分支并切换</p>
<ul>
<li>git checkout -b 分支名称.</li>
<li>git switch -c 分支名称.</li>
</ul>
</li>
<li><p>如果分支存在则表示切换分支</p>
<ul>
<li>git checkout 分支名称 .</li>
<li>git switch 分支名称.</li>
</ul>
</li>
</ul>
</li>
<li><p>查看所有分支及当前分支</p>
<ul>
<li>git branch</li>
</ul>
</li>
<li><p>分支合并</p>
<ul>
<li>git merge 分支名称.</li>
</ul>
</li>
<li><p>分支删除</p>
<ul>
<li>git branch -d 分支名称 .</li>
<li>git branch -D 分支名称 (强制删除分支).</li>
</ul>
</li>
<li><p>查看分支合并提交历史</p>
<ul>
<li>git log - -graph - -pretty=oneline - -abbrev-commit.</li>
</ul>
</li>
<li><p>fast forward 模式</p>
<ul>
<li><p>分支的默认模式为 fast-forward 模式,删除分支后不保留分支信息.</p>
</li>
<li><p>如想保留分支信息,可使用如下命令</p>
<ul>
<li>git merge - -no-ff -m “分支合并说明 “ 分支名称.</li>
<li>–no-ff 表示禁用 fast-forward 模式,-m 表示对被合并分支进行说明.</li>
</ul>
</li>
</ul>
</li>
<li><p>分支工作现场保存</p>
<ul>
<li><p>保存当前分支工作现场</p>
<ul>
<li>git stash .</li>
</ul>
</li>
<li><p>查看保存的分支现场</p>
<ul>
<li>git stash list.</li>
</ul>
</li>
<li><p>仅恢复分支</p>
<ul>
<li>git stash apply.</li>
</ul>
</li>
<li><p>删除分支</p>
<ul>
<li>git stash drop.</li>
</ul>
</li>
<li><p>恢复分支并删除</p>
<ul>
<li>git brash pop.</li>
</ul>
</li>
<li><p>把修复的分支 bug 合并到当前分支</p>
<ul>
<li>git cherry-pick < commit id ></li>
</ul>
</li>
</ul>
</li>
<li><p>抓取远程库最新提交</p>
<ul>
<li>git pull.</li>
<li>创建本地分支与远程分支的关联。 git branch - -set-upstream-to=origin/dev dev.</li>
</ul>
</li>
</ol>
<h2 id="git-标签管理"><a href="#git-标签管理" class="headerlink" title="git 标签管理"></a>git 标签管理</h2><ol>
<li><p>在 git 中打标签是为了管理各个历史版本,便于寻找</p>
</li>
<li><p>创建标签(默认打在最新提交上)</p>
<ul>
<li>git tag 标签名</li>
</ul>
</li>
<li><p>查看所有标签</p>
<ul>
<li>git tag</li>
</ul>
</li>
<li><p>给历史某个版本打标签</p>
<ul>
<li>git tag -a 标签名 -m” 说明” 提交 commitid</li>
<li>-a 指定标签名 -m 指定标签说明</li>
</ul>
</li>
<li><p>查看标签信息</p>
<ul>
<li>git show 标签名</li>
</ul>
</li>
<li><p>删除标签</p>
<ul>
<li>git tag -d 标签名</li>
</ul>
</li>
<li><p>推送标签到远程库</p>
<ul>
<li><p>推送单个标签</p>
<ul>
<li>git push origin 标签名.</li>
</ul>
</li>
<li><p>一次性全部推送</p>
<ul>
<li>git push origin - -tags</li>
</ul>
</li>
<li><p>从本地删除标签</p>
<ul>
<li>git tag -d 标签名</li>
</ul>
</li>
<li><p>从远程删除标签</p>
<ul>
<li>git push origin :refs/tags/标签名</li>
</ul>
</li>
</ul>
</li>
</ol>
<h2 id="git-自定义"><a href="#git-自定义" class="headerlink" title="git 自定义"></a>git 自定义</h2><ol>
<li><p>创建 .gitignore 文件</p>
<ul>
<li>在 window 中通过文本编辑器创建</li>
</ul>
</li>
<li><p>查看.gitignore 文件的过滤规则</p>
<ul>
<li>git check-ignore -v 文件名</li>
</ul>
</li>
<li><p>为 git 命令配置别名</p>
<ul>
<li>git config - -global alias.别名 原名</li>
</ul>
</li>
<li><p>删除别名</p>
<ul>
<li><p>查看.gitconfig 配置文件并删除相对应的行</p>
<ul>
<li>cat .gitconfig.</li>
</ul>
</li>
</ul>
</li>
</ol>
]]></content>
<categories>
<category>技术笔记</category>
<category>Git</category>
<category>Git入门学习</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title>HTML</title>
<url>/2020/06/04/HTML/</url>
<content><![CDATA[<h1 id="HTML"><a href="#HTML" class="headerlink" title="HTML"></a>HTML</h1><p>1.一种描述网页的文本标记语言. 2.通过 HTML 标签来表述网页.</p>
<h2 id="一-HTML-元素"><a href="#一-HTML-元素" class="headerlink" title="一.HTML 元素"></a>一.HTML 元素</h2><p>1.HTML 元素是开始标签到束标签之间的文本内容. 2.空元素在开始标签中结束。(在开始标签后尖括号加斜杠/).</p>
<h2 id="二-HTML-文档"><a href="#二-HTML-文档" class="headerlink" title="二.HTML 文档"></a>二.HTML 文档</h2><p>1.HTML 文档=网页=HTML 标签+纯文本. 2.以. htm 或 .html 为后缀名. 3.<DOCTYPE>声明 HTML 版本.</p>
<span id="more"></span>
<h2 id="三-基本-HTML-标签以及对应的属性"><a href="#三-基本-HTML-标签以及对应的属性" class="headerlink" title="三.基本 HTML 标签以及对应的属性"></a>三.基本 HTML 标签以及对应的属性</h2><p>1.用来描述网页. 2.以尖括号成对出现. 3.属性值由双引号括起来,如果属性值本身有双引号,就用单引号.</p>
<h3 id="1-lt-html-gt"><a href="#1-lt-html-gt" class="headerlink" title="1.< html >"></a>1.< html ></h3><p>描述网页内容.</p>
<h3 id="2-lt-body-gt"><a href="#2-lt-body-gt" class="headerlink" title="2.< body >"></a>2.< body ></h3><p>描述网页内容的主题.</p>
<ul>
<li><p>background</p>
<ul>
<li>设置背景图像.</li>
</ul>
</li>
<li><p>bgcolo</p>
<ul>
<li>设置背景颜色.</li>
</ul>
</li>
</ul>
<h3 id="3-lt-h1-h6-gt"><a href="#3-lt-h1-h6-gt" class="headerlink" title="3.< h1-h6 >"></a>3.< h1-h6 ></h3><p>将文本设置为标题文本.</p>
<h3 id="4-lt-p-gt"><a href="#4-lt-p-gt" class="headerlink" title="4.< p >"></a>4.< p ></h3><p>1.将为本设置为段落. 2.自动添加前后行. 3.浏览器会省去多余的空格和换行,统一以一个空格表示.</p>
<ul>
<li><p>align</p>
<ul>
<li>设置对齐方式.</li>
</ul>
</li>
<li><p>bgcolor</p>
<ul>
<li>设置背景颜色.</li>
</ul>
</li>
</ul>
<h3 id="6-lt-br-x2F-gt"><a href="#6-lt-br-x2F-gt" class="headerlink" title="6.< br / >"></a>6.< br / ></h3><p>插入一个空行来进行换行。</p>
<h3 id="8-lt-hr-x2F-gt"><a href="#8-lt-hr-x2F-gt" class="headerlink" title="8.< hr / >"></a>8.< hr / ></h3><p>创建水平线.</p>
<h3 id="9-lt-–-gt"><a href="#9-lt-–-gt" class="headerlink" title="9.< !– >"></a>9.< !– ></h3><p>1.注释作用,不会在浏览器中显示. 2.给计算机源代码注释.</p>
<h3 id="lt-link-gt"><a href="#lt-link-gt" class="headerlink" title="< link >"></a>< link ></h3><p>1.定义文档与被链接资源的关系. 2.最常见的用途事链接样式表.</p>
<ul>
<li><p>href</p>
<ul>
<li>定义被链接资源的位置.</li>
</ul>
</li>
<li><p>hreflang</p>
<ul>
<li>定义被链接文档的语言.</li>
</ul>
</li>
<li><p>rel</p>
<ul>
<li>定义被链接文档与当前文档的关系.</li>
</ul>
</li>
<li><p>type</p>
<ul>
<li>定义被链接文档的 MIME 类型.</li>
</ul>
</li>
<li><p>sizes</p>
<ul>
<li>定义被链接资源的尺寸,仅适用于 rel=”icon”.</li>
</ul>
</li>
</ul>
<h3 id="10-style-属性"><a href="#10-style-属性" class="headerlink" title="10.style 属性"></a>10.style 属性</h3><p>1.一个 HTML 标签的多个属性以空格分隔.<br>2.style 是一种通用属性,用于定义文本样式.<br>style=“ background-color:red”背景颜色. 3.多个属性值要以分号分隔开来.<br>style=”font-family:arial;color:red;font-size:20px;</p>
<ul>
<li><p>background-color</p>
<ul>
<li>设置背景颜色.</li>
</ul>
</li>
<li><p>font-family</p>
<ul>
<li>设置字体.</li>
</ul>
</li>
<li><p>font-size</p>
<ul>
<li>设置字体大小.</li>
</ul>
</li>
<li><p>text-align</p>
<ul>
<li>设置文本对齐方式.</li>
</ul>
</li>
</ul>
<h2 id="四-HTML-图像"><a href="#四-HTML-图像" class="headerlink" title="四.HTML 图像"></a>四.HTML 图像</h2><h3 id="7-lt-img-gt"><a href="#7-lt-img-gt" class="headerlink" title="7.< img >"></a>7.< img ></h3><p>1.描述图片. 2.设置图片链接的方式,将<img>标签作为<a>标签的元素.</p>
<ul>
<li><p>height</p>
<ul>
<li>设置图片宽度.</li>
</ul>
</li>
<li><p>width</p>
<ul>
<li>设置图片宽度.</li>
</ul>
</li>
<li><p>src</p>
<ul>
<li>设置图片地址.</li>
</ul>
</li>
<li><p>align</p>
<ul>
<li>设置图片对齐方式.</li>
</ul>
</li>
<li><p>alt</p>
<ul>
<li>为图像定义说明,当图片不能正常显示时.</li>
</ul>
</li>
</ul>
<h2 id="五-HTML-链接"><a href="#五-HTML-链接" class="headerlink" title="五.HTML 链接"></a>五.HTML 链接</h2><h3 id="5-lt-a-gt"><a href="#5-lt-a-gt" class="headerlink" title="5.< a >"></a>5.< a ></h3><p>1.描述链接地址。 2.单击文本元素可跳转。</p>
<ul>
<li><p>href</p>
<ul>
<li>设置目标的链接地址</li>
</ul>
</li>
<li><p>target</p>
<ul>
<li>设置链接目标的打开方式</li>
</ul>
</li>
<li><p>name</p>
<ul>
<li>定义锚的名称,主要用于书签,可以创建<a href=#锚>的链接跳转到书签。</li>
</ul>
</li>
</ul>
<h2 id="六-HTML-标签之文本格式化"><a href="#六-HTML-标签之文本格式化" class="headerlink" title="六.HTML 标签之文本格式化"></a>六.HTML 标签之文本格式化</h2><h3 id="lt-b-gt"><a href="#lt-b-gt" class="headerlink" title="<\b>"></a><\b></h3><ul>
<li>定义粗体文本</li>
</ul>
<h3 id="lt-big-gt"><a href="#lt-big-gt" class="headerlink" title="< big >"></a>< big ></h3><ul>
<li>定义大号字</li>
</ul>
<h3 id="lt-small-gt"><a href="#lt-small-gt" class="headerlink" title="< small >"></a>< small ></h3><ul>
<li>定义小号字</li>
</ul>
<h3 id="lt-i-gt"><a href="#lt-i-gt" class="headerlink" title="< i >"></a>< i ></h3><ul>
<li>定义斜体字</li>
</ul>
<h3 id="lt-em-gt"><a href="#lt-em-gt" class="headerlink" title="< em >"></a>< em ></h3><ul>
<li>定义强调字</li>
</ul>
<h3 id="lt-strong-gt"><a href="#lt-strong-gt" class="headerlink" title="< strong >"></a>< strong ></h3><ul>
<li>定义加重文字</li>
</ul>
<h3 id="lt-sub-gt"><a href="#lt-sub-gt" class="headerlink" title="< sub >"></a>< sub ></h3><ul>
<li>定义下标字</li>
</ul>
<h3 id="lt-sup-gt"><a href="#lt-sup-gt" class="headerlink" title="< sup >"></a>< sup ></h3><ul>
<li>定义上标字</li>
</ul>
<h3 id="lt-ins-gt"><a href="#lt-ins-gt" class="headerlink" title="< ins >"></a>< ins ></h3><ul>
<li>定义插入字</li>
</ul>
<h3 id="lt-del-gt"><a href="#lt-del-gt" class="headerlink" title="< del >"></a>< del ></h3><ul>
<li>定义删除字</li>
</ul>
<h3 id="lt-code-gt"><a href="#lt-code-gt" class="headerlink" title="< code >"></a>< code ></h3><ul>
<li>定义计算机代码</li>
</ul>
<h3 id="lt-bkd-gt"><a href="#lt-bkd-gt" class="headerlink" title="< bkd >"></a>< bkd ></h3><ul>
<li>定义键盘输入文字</li>
</ul>
<h3 id="lt-samp-gt"><a href="#lt-samp-gt" class="headerlink" title="< samp >"></a>< samp ></h3><ul>
<li>定义计算机代码样本</li>
</ul>
<h3 id="lt-var-gt"><a href="#lt-var-gt" class="headerlink" title="< var>"></a>< var></h3><ul>
<li>定义计算机变量</li>
</ul>
<h3 id="lt-tt-gt"><a href="#lt-tt-gt" class="headerlink" title="< tt>"></a>< tt></h3><ul>
<li>打字机代码</li>
</ul>
<h3 id="lt-pre-gt"><a href="#lt-pre-gt" class="headerlink" title="< pre >"></a>< pre ></h3><p>保留空格和拆行。</p>
<ul>
<li>定义预格式文本</li>
</ul>
<h3 id="lt-abbr-gt"><a href="#lt-abbr-gt" class="headerlink" title="< abbr >"></a>< abbr ></h3><ul>
<li>定义缩写</li>
</ul>
<h3 id="lt-acronym-gt"><a href="#lt-acronym-gt" class="headerlink" title="< acronym >"></a>< acronym ></h3><ul>
<li>定义缩写</li>
</ul>
<h3 id="lt-address-gt"><a href="#lt-address-gt" class="headerlink" title="< address >"></a>< address ></h3><ul>
<li>定义地址文本</li>
</ul>
<h3 id="lt-bdo-gt"><a href="#lt-bdo-gt" class="headerlink" title="< bdo >"></a>< bdo ></h3><ul>
<li>定义文字方向</li>
</ul>
<h3 id="lt-blockquote-gt"><a href="#lt-blockquote-gt" class="headerlink" title="< blockquote >"></a>< blockquote ></h3><ul>
<li>定义长引用</li>