-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
1728 lines (1497 loc) · 428 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>vscodium使用vscode扩展</title>
<url>/2021/16VX7F1.html</url>
<content><![CDATA[<p> 发现vscodium插件较少时,可以修改插件下载位置,使用微软的插件库 </p>
<p><a href="https://zhuanlan.zhihu.com/p/276000982">https://zhuanlan.zhihu.com/p/276000982</a></p>
<p>vscodium默认使用的扩展源是<code>open-vsx.org</code>,部分扩展没有加入此扩展源,需要使用微软官方扩展源才能直接安装和自动更新。</p>
<p>修改<code>安装根目录/resources/app/product.json</code>文件中的<code>extensionsGallery</code>键对应的值如下:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">"extensionsGallery": {</span><br><span class="line"> "serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery",</span><br><span class="line"> "itemUrl": "https://marketplace.visualstudio.com/items"</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>重启vscodium。扩展里就可以搜索安装微软官方扩展源里的扩展。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/f73850c3c4002c0fab6a47804978b736.png" alt="image-20210713200101052"></p>
]]></content>
<categories>
<category>小技巧</category>
</categories>
<tags>
<tag>mixley</tag>
</tags>
</entry>
<entry>
<title>学习交流(持续更新)</title>
<url>/2021/11VPC9D.html</url>
<content><![CDATA[<h2 id="软件下载专区"><a href="#软件下载专区" class="headerlink" title="软件下载专区"></a>软件下载专区</h2><p><a href="https://mixley.stdcdn.com/tools.html">常用工具/精品软件</a></p>
<h2 id="书籍购买专区"><a href="#书籍购买专区" class="headerlink" title="书籍购买专区"></a>书籍购买专区</h2><p>[书籍购买推荐】(<a href="https://mixley.stdcdn.com/book.html">https://mixley.stdcdn.com/book.html</a>)</p>
<h2 id="影视文学"><a href="#影视文学" class="headerlink" title="影视文学"></a>影视文学</h2><h3 id="电影"><a href="#电影" class="headerlink" title="电影"></a>电影</h3><p><a href="https://tv.cctv.com/2021/02/02/VIDAJNNHiuXByYkLTOs0zo2k210202.shtml">觉醒年代</a>——明白当代青年的使命</p>
<h2 id="代码编程"><a href="#代码编程" class="headerlink" title="代码编程"></a>代码编程</h2><h3 id="教程网站"><a href="#教程网站" class="headerlink" title="教程网站"></a>教程网站</h3><p><a href="https://www.runoob.com/">菜鸟教程</a>——基础学习必备</p>
<p><a href="https://www.yiibai.com/">易百教程</a>——基础学习必备</p>
<p><a href="https://learnku.com/">LearnKu</a>——终身编程</p>
<h2 id="spring-java"><a href="#spring-java" class="headerlink" title="spring/java"></a>spring/java</h2><p><a href="http://www.spring4all.com/">Spring For All</a> ——民间社区</p>
<p><a href="https://github.com/wuyouzhuguli/SpringAll">SpringAll</a>——开源项目,由浅入深Spring系列学习</p>
<h3 id="web端"><a href="#web端" class="headerlink" title="web端"></a>web端</h3><p><a href="http://www.ydma.cn/">兄弟连</a>——H5</p>
<p><a href="http://www.w3cschool.cn/index-4.html">W3C</a>——web前端</p>
<p><a href="http://www.w3school.com.cn/index.html">w3</a>——H5</p>
<p><a href="http://www.axure.com.cn/">Axure中文学习网</a>——快速原型Axure学习</p>
<p><a href="https://waylau.gitbooks.io/netty-4-user-guide/content/">Netty 4.x</a>——Netty中文文档</p>
<p><a href="http://www.ruanyifeng.com/blog/">阮一峰</a>——web前端 yyds</p>
<h3 id="论坛-博客平台"><a href="#论坛-博客平台" class="headerlink" title="论坛/博客平台"></a>论坛/博客平台</h3><p><a href="https://www.52programer.com/">吾爱程序猿</a></p>
<p><a href="https://www.csdn.net/">csdn</a></p>
<p><a href="https://www.cnblogs.com/">博客园</a></p>
<h3 id="php相关"><a href="#php相关" class="headerlink" title="php相关"></a>php相关</h3><p><a href="http://www.thinkphp.cn/">ThinkPHP</a></p>
<p><a href="http://www.golaravel.com/">Laravel(PHP)</a></p>
<h3 id="数据可视化"><a href="#数据可视化" class="headerlink" title="数据可视化"></a>数据可视化</h3><p><a href="http://www.hcharts.cn/">Highcharts中文网</a></p>
<h2 id="设计相关"><a href="#设计相关" class="headerlink" title="设计相关"></a>设计相关</h2><p><a href="https://icomoon.io/">ico</a></p>
<p><a href="https://mp.weixin.qq.com/s/I2f4NYE13xLvnsxwDDnWrw">免费素材合集</a></p>
<p><a href="https://www.bilibili.com/video/BV1A4411M729">PS2019从入门到精通</a>——从安装到卸载</p>
<h2 id="英语学习"><a href="#英语学习" class="headerlink" title="英语学习"></a>英语学习</h2><p><a href="https://v.youku.com/v_show/id_XNTgwODM0MTYw.html?spm=a2h1n.8251843.0.0&f=19476545">《跟我学》(Follow Me)BBC 视频</a></p>
<h2 id="公务员"><a href="#公务员" class="headerlink" title="公务员"></a>公务员</h2><p><a href="https://pan.baidu.com/s/1_qpcc2hMFgdab7oO8gfgzA">公考备考资料</a>——度盘 提取码: 4but 考公资料分享 含思维导图 </p>
<p><a href="https://m.xue.huatu.com/fx/zx/detail/97845?t=LIAcEr9QHEbxm8rqpoHBJg==">华图在线常识-口诀歌系列</a>——粉笔常识课 王鹏讲得很有趣,可以听听。听完再配合李梦娇的魔性歌曲。一个是帮助理解,一个是加深记忆。两个都学是最好的</p>
<p><a href="https://pan.baidu.com/s/1OQpccl3AdRRoHgeWsr5mtA">公务员粉笔</a>——度盘 提取码: s3wd 系列教程,较全面 分模块攻略,总结出每道题型的正确答题思路,并固化这种答题思路(划重点)</p>
<h2 id="事业编"><a href="#事业编" class="headerlink" title="事业编"></a>事业编</h2><p><a href="http://www.fenbi.com/spa/doc-user/dir/4910">事业编—公基资料</a>——事业编资料(打不开多试几次)</p>
]]></content>
<categories>
<category>学习</category>
</categories>
<tags>
<tag>mixley</tag>
<tag>前端</tag>
<tag>java</tag>
<tag>spring</tag>
</tags>
</entry>
<entry>
<title>卸载edge</title>
<url>/2021/254DB2D.html</url>
<content><![CDATA[<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line">.\setup.exe -<span class="literal">-uninstall</span> -<span class="literal">-system</span><span class="literal">-level</span> -<span class="literal">-verbose</span><span class="literal">-logging</span> -<span class="literal">-force</span><span class="literal">-uninstall</span></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>小技巧</category>
</categories>
</entry>
<entry>
<title>书籍购买推荐(持续更新)</title>
<url>/2021/18A0XWM.html</url>
<content><![CDATA[<h2 id="开发"><a href="#开发" class="headerlink" title="开发"></a>开发</h2><h3 id="神经网络"><a href="#神经网络" class="headerlink" title="神经网络"></a>神经网络</h3><h4 id="入门"><a href="#入门" class="headerlink" title="入门"></a>入门</h4><p>python 神经网络编程——非常适合入门神经网络编程的一本书,初中生就能看懂(微量代码,原理通透)。</p>
<h3 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h3><p>从零开始学架构——由浅入深,有经验的程序员和才开始入行的架构师能收获很多,具体实践中能避免踩坑和注意到一些关键事项</p>
<h3 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h3><p>Linux编程与Shell脚本编程大全——比较全面详细的linux工具书</p>
<h2 id="建筑"><a href="#建筑" class="headerlink" title="建筑"></a>建筑</h2><h3 id="装修"><a href="#装修" class="headerlink" title="装修"></a>装修</h3><p>小家越住越大——漫画教人搞装修</p>
<h2 id="闲暇阅读"><a href="#闲暇阅读" class="headerlink" title="闲暇阅读"></a>闲暇阅读</h2><h3 id="漫画"><a href="#漫画" class="headerlink" title="漫画"></a>漫画</h3><p>今天你真好看</p>
<p>一禅小和尚</p>
]]></content>
<categories>
<category>学习</category>
</categories>
</entry>
<entry>
<title>使用Hexo搭建博客</title>
<url>/2021/3NPATC1.html</url>
<content><![CDATA[<p>我需要的快速、简洁且高效的博客框架->Hexo</p>
<blockquote>
<p>Hexo 支持 GitHub Flavored Markdown 的所有功能,甚至可以整合 Octopress 的大多数插件。</p>
</blockquote>
<h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">##全局安装hexo</span></span><br><span class="line">npm install hexo<span class="literal">-cli</span> <span class="literal">-g</span></span><br><span class="line"><span class="comment">#初始化hexo目录</span></span><br><span class="line">hexo init <folder></span><br><span class="line"><span class="built_in">cd</span> <folder></span><br><span class="line">npm install</span><br></pre></td></tr></table></figure>
<p>安装后目录结构说明:</p>
<!-- vscode -> file-tree-generator -->
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string">📦blog</span> <span class="comment">#博客·安装路径</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📂scaffolds</span> <span class="comment">#模板文件</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📜draft.md</span> <span class="comment">#草稿模板</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📜page.md</span> <span class="comment">#页面模板</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜post.md</span> <span class="comment">#文章模板</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📂source</span> <span class="comment">#资源文件</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📂_posts</span> <span class="comment">#文章路径</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜hello-world.md</span> <span class="comment">#实际文章</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📂themes</span> <span class="comment">#主题</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜.gitkeep</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📜package.json</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📜_config.landscape.yml</span> <span class="comment">#_config.[theme].yml 用于编辑主题配置</span></span><br><span class="line"> <span class="string">┗</span> <span class="string">📜_config.yml</span> <span class="comment">#配置文件 !重要!!</span></span><br></pre></td></tr></table></figure>
<h2 id="启动命令"><a href="#启动命令" class="headerlink" title="启动命令"></a>启动命令</h2><figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">#更多详细命令查看官网:https://hexo.io/zh-cn/docs/commands.html</span></span><br><span class="line"><span class="comment">#启动</span></span><br><span class="line">hexo s</span><br><span class="line"><span class="comment">#下面为指定配置文件</span></span><br><span class="line">hexo s -<span class="literal">-config</span> custom.yml,custom2.json,custom3.yml</span><br></pre></td></tr></table></figure>
<p>打开浏览器输入<a href="http://localhost:4000/">http://localhost:4000/</a> 出现hexo界面则表示启动成功了</p>
<h2 id="管理与编写博客"><a href="#管理与编写博客" class="headerlink" title="管理与编写博客"></a>管理与编写博客</h2><h3 id="文档管理结构"><a href="#文档管理结构" class="headerlink" title="文档管理结构"></a>文档管理结构</h3><p>下面是我们常见的一个文档管理方式,不论doc也好,还是md也罢,我们都喜欢通过建立文件夹的方式进行分类然后梳理,下面的我通过建立文档同名的方式(或者图床)表示文档需要的文件。</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string">📦macdown</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📂工具</span> <span class="comment">#分类</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📂minio</span> <span class="comment">#分类</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📂minio</span> <span class="comment">#对应md文件的附件</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜simplicity.gif</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜minio.md</span> <span class="comment">#md文件</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📂博客</span> <span class="comment">#分类</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📂使用Hexo搭建博客</span> <span class="comment">#对应md文件的附件</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜image-20210623193347044.png</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┣</span> <span class="string">📜使用Hexo搭建博客.md</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜关于管理与写博客.md</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📜常用工具.md</span> <span class="comment">#文章</span></span><br><span class="line"> <span class="string">┣</span> <span class="string">📂开发</span> <span class="comment">#分类</span></span><br><span class="line"> <span class="string">┃</span> <span class="string">┗</span> <span class="string">📂bat</span> <span class="comment">#更多分类与文章</span></span><br></pre></td></tr></table></figure>
<p>上面这个目录结构,我相信不管是写博客还是仅仅做笔记或者整理资料的人,大部分过程应该都是这样的,我习惯将这个结构放在OneDrive中,OneDrive可以通过邀请增加容量,嫌麻烦某宝有售(1.5¥,10G(最大10G,写文章够用),5分钟到)。</p>
<h3 id="推荐工具"><a href="#推荐工具" class="headerlink" title="推荐工具"></a>推荐工具</h3><p>编辑神器:<a href="https://typora.io/">Typora</a> MacDown编辑神器 (万年bate版本,免费使用)</p>
<p>生产力工具:<a href="https://u.tools/">uTools</a> ->安装自动化助手 辅助编辑更加方便(免费使用)</p>
<h2 id="发布配置"><a href="#发布配置" class="headerlink" title="发布配置"></a>发布配置</h2><h3 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h3><p>下面的自定义配置为使用git发布博客,首先需安装hexo-deployer-git 插件,其它插件为更方便使用</p>
<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">## git上传发布,一键部署时使用</span></span><br><span class="line">npm install hexo<span class="literal">-deployer</span><span class="literal">-git</span> -<span class="literal">-save</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#hexo增强配置,可以不用手动维护 front-matter,文章标题建议使用 20210628 标题.md</span></span><br><span class="line">npm install hexo<span class="literal">-enhancer</span> -<span class="literal">-save</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#处理图片路径转换问题,当开启post_asset_folder时,使用文件路径转换</span></span><br><span class="line">npm hexo<span class="literal">-asset</span><span class="literal">-image</span> -<span class="literal">-save</span></span><br></pre></td></tr></table></figure>
<h3 id="自定义配置文件"><a href="#自定义配置文件" class="headerlink" title="自定义配置文件"></a>自定义配置文件</h3><p>自定义配置文件如下,可在hexo目录下建立<strong>custom.yml</strong>文件,自定义以下内容,不污染原始文件便于后期升级hexo</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment">#详情看附录中配置文件详细介绍</span></span><br><span class="line"><span class="comment">#Site 网站设置 基础设置</span></span><br><span class="line"><span class="comment">#网站标题</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">mixley</span></span><br><span class="line"><span class="comment">#网站副标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">'呜啦啦'</span></span><br><span class="line"><span class="comment">#网站描述,SEO优化时会扫描</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">''</span></span><br><span class="line"><span class="comment">#网站关键字,SEO优化时会扫描,多个逗号分隔</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="string">'技术栈A,技术栈B'</span></span><br><span class="line"><span class="comment">#作者</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">mixley</span></span><br><span class="line"><span class="comment">#语言,使用主题时支持的语言列表,主题文件中languages文件夹下查看</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="comment">#时区,默认为电脑时区,中国大陆:Asia/Shanghai</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">Asia/Shanghai</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#URL 网址 基础设置,url如果发布到gitbub,请参考注册github.io建立免费页面</span></span><br><span class="line"><span class="comment">#生成的地址中,会携带这个地址,博客根路径(怎么访问的就怎么填写)</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">'https://mixley.github.io'</span></span><br><span class="line"><span class="comment">#文章访问编号 hexo-enhancer增强配置中提供</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:abbrlink.html</span></span><br><span class="line"><span class="comment">#网站关键字,增强配置专用,其余tag会收集keywords中tags自动匹配</span></span><br><span class="line"><span class="attr">tags:</span> <span class="string">'关键字A,关键字B'</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#启动 Asset 文件夹(推荐开启,会将同名目录一起打包,否则只打包md,也可以使用第三方图床解决)</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">true</span></span><br><span class="line"><span class="comment">#把链接改为与根目录的相对位址</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Home page setting 首页文章设置(可以不设置)</span></span><br><span class="line"><span class="attr">index_generator:</span></span><br><span class="line"> <span class="attr">path:</span> <span class="string">''</span></span><br><span class="line"> <span class="comment">#每页数量</span></span><br><span class="line"> <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"> <span class="attr">order_by:</span> <span class="string">-date</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Category & Tag 分类 & 标签 中文标签可能存在编码问题,需转换,格式为 中文: 英文 多个记录直接换行</span></span><br><span class="line"><span class="attr">default_category:</span> <span class="string">uncategorized</span></span><br><span class="line"><span class="comment">#分类对应值 后期建立文件夹,需要在这里增加英文映射</span></span><br><span class="line"><span class="attr">category_map:</span></span><br><span class="line"> <span class="string">嘿嘿:</span> <span class="string">heihei</span></span><br><span class="line"> <span class="string">哈哈:</span> <span class="string">haha</span></span><br><span class="line"><span class="comment">#标签对应值 keywords 关键字中文全部需要进行处理,tags中关键字同样需要处理</span></span><br><span class="line"><span class="attr">tag_map:</span></span><br><span class="line"> <span class="string">技术栈A:</span> <span class="string">jA</span></span><br><span class="line"> <span class="string">技术栈B:</span> <span class="string">jB</span></span><br><span class="line"> </span><br><span class="line"><span class="comment">#Pagination 分页设置(可以不设置)</span></span><br><span class="line"><span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"><span class="attr">pagination_dir:</span> <span class="string">page</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#使用主题,可以选择其它主题,这是默认主题</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">landscape</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#发布配置,若使用git,需要安装 npm install hexo-deployer-git --save</span></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line"> <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line"><span class="comment">#多服务配置</span></span><br><span class="line"> <span class="attr">repository:</span></span><br><span class="line"> <span class="comment">#使用ssh的方式,配置ssh密钥可以免登录发布</span></span><br><span class="line"> <span class="attr">github:</span> <span class="string">git@github.com:mixley/mixley.GitHub.io.git</span></span><br><span class="line"> <span class="attr">gitee:</span> <span class="string">git@gitee.com:mixley/mixley.git</span></span><br><span class="line"> <span class="attr">branch:</span> <span class="string">master</span></span><br></pre></td></tr></table></figure>
<h3 id="Hexo三连命令"><a href="#Hexo三连命令" class="headerlink" title="Hexo三连命令"></a>Hexo三连命令</h3><figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">#清除</span></span><br><span class="line">hexo clean</span><br><span class="line"></span><br><span class="line"><span class="comment">#指定配置文件生成</span></span><br><span class="line">hexo g -<span class="literal">-config</span> custom.yml</span><br><span class="line"></span><br><span class="line"><span class="comment">#发布</span></span><br><span class="line">hexo d -<span class="literal">-config</span> custom.yml</span><br><span class="line"></span><br><span class="line"><span class="comment">#指定配置文件生成并发布,可以使用下面命令</span></span><br><span class="line"><span class="comment">#hexo g -d --config custom.yml</span></span><br></pre></td></tr></table></figure>
<h2 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h2><h3 id="三连命令操作文件"><a href="#三连命令操作文件" class="headerlink" title="三连命令操作文件"></a>三连命令操作文件</h3><p>手动创建文件push.cmd(任意调整),针对文章放在OneDrive或其它同步文件夹,不习惯使用hexo目录的,可以使用此cmd进行发布。cmd设置好后,可以放开始菜单快速调用或者使用uTools等效率工具快速呼出 。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">@<span class="built_in">echo</span> off</span><br><span class="line">chcp 65001 > nul 2>&1</span><br><span class="line"></span><br><span class="line">@REM 此处设定安装的hexo文件夹路径</span><br><span class="line"><span class="built_in">set</span> dir=E:\work\js\hexo</span><br><span class="line">@REM 此处设定文章目录路径</span><br><span class="line"><span class="built_in">set</span> blog=.</span><br><span class="line"></span><br><span class="line">@REM 备份文件夹路径</span><br><span class="line"><span class="built_in">set</span> backDir=%dir%\back\%DATE%</span><br><span class="line"><span class="built_in">set</span> _postsDir=%dir%\<span class="built_in">source</span>\_posts</span><br><span class="line"><span class="built_in">set</span> aboutDir=%dir%\<span class="built_in">source</span>\about</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> 清理文件</span><br><span class="line">IF EXIST <span class="string">"%backDir%"</span> RD /Q/S <span class="string">"%backDir%"</span> > nul 2>&1</span><br><span class="line">IF NOT EXIST <span class="string">"%backDir%"</span> md <span class="string">"%backDir%"</span> > nul 2>&1</span><br><span class="line"><span class="built_in">echo</span> 备份文件夹(若发现备份异常,请将 关于我.md 中文修改为英文,如 about.md ,系统原因)</span><br><span class="line">IF EXIST <span class="string">"%aboutDir%\index.md"</span> move <span class="string">"%aboutDir%\index.md"</span> <span class="string">"%_postsDir%\关于我.md"</span></span><br><span class="line">move <span class="string">"%_postsDir%"</span> <span class="string">"%backDir%"</span></span><br><span class="line"><span class="built_in">echo</span> 备份成功,创建文件夹</span><br><span class="line">IF NOT EXIST <span class="string">"%_postsDir%"</span> md <span class="string">"%_postsDir%"</span></span><br><span class="line"><span class="built_in">echo</span> 复制文件夹 </span><br><span class="line">Xcopy <span class="string">"%blog%"</span> <span class="string">"%_postsDir%"</span> /Y/E/C/I > nul 2>&1</span><br><span class="line">move <span class="string">"%_postsDir%\关于我.md"</span> <span class="string">"%aboutDir%\index.md"</span> </span><br><span class="line"></span><br><span class="line">@REM 切换文件夹到hexo路径下执行命令</span><br><span class="line"><span class="built_in">pushd</span> %dir%</span><br><span class="line"><span class="built_in">echo</span> 复制成功,清理中。</span><br><span class="line">call hexo clean > nul 2>&1</span><br><span class="line"><span class="built_in">echo</span> 清理完成,生成发布文章中</span><br><span class="line">call hexo g -d --config custom.yml > nul 2>&1</span><br><span class="line"><span class="built_in">echo</span> 发布文件成功</span><br><span class="line">@REM 切换到当前目录</span><br><span class="line"><span class="built_in">popd</span></span><br><span class="line"><span class="built_in">echo</span> 执行结束</span><br><span class="line"></span><br><span class="line">pause</span><br><span class="line"><span class="built_in">exit</span></span><br></pre></td></tr></table></figure>
<h3 id="uTools自动化助手脚本"><a href="#uTools自动化助手脚本" class="headerlink" title="uTools自动化助手脚本"></a>uTools自动化助手脚本</h3><p>uTools,自动化助手脚本,快速生成<a href="https://hexo.io/zh-cn/docs/front-matter.html">Front Matter</a> (PS,开启文本无匹配功能,任意位置可以使用此脚本。另,超级面板输入脚本名称,按中键可以呼出执行脚本)</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="comment">//自动化助手,Fornt Matter Date Gennerate</span></span><br><span class="line"><span class="comment">//获取当前日期,格式YYYY-MM-DD</span></span><br><span class="line"><span class="keyword">let</span> getNowFormatDay = <span class="function"><span class="keyword">function</span>(<span class="params">nowDate</span>)</span>{</span><br><span class="line"> <span class="keyword">let</span> char = <span class="string">"-"</span>;</span><br><span class="line"> <span class="keyword">if</span>(nowDate == <span class="literal">null</span>){</span><br><span class="line"> nowDate = <span class="keyword">new</span> <span class="built_in">Date</span>();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">let</span> day = nowDate.getDate();</span><br><span class="line"> <span class="keyword">let</span> month = nowDate.getMonth() + <span class="number">1</span>;<span class="comment">//注意月份需要+1</span></span><br><span class="line"> <span class="keyword">let</span> year = nowDate.getFullYear();</span><br><span class="line"> <span class="comment">//补全0,并拼接</span></span><br><span class="line"> <span class="keyword">return</span> year + char + completeDate(month) + char +completeDate(day);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//获取当前时间,格式YYYY-MM-DD HH:mm:ss</span></span><br><span class="line"><span class="keyword">let</span> getNowFormatTime = <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">let</span> nowDate = <span class="keyword">new</span> <span class="built_in">Date</span>();</span><br><span class="line"> <span class="keyword">let</span> colon = <span class="string">":"</span>;</span><br><span class="line"> <span class="keyword">let</span> h = nowDate.getHours();</span><br><span class="line"> <span class="keyword">let</span> m = nowDate.getMinutes();</span><br><span class="line"> <span class="keyword">let</span> s = nowDate.getSeconds();</span><br><span class="line"> <span class="comment">//补全0,并拼接</span></span><br><span class="line"> <span class="keyword">return</span> getNowFormatDay(nowDate) + <span class="string">" "</span> + completeDate(h) + colon + completeDate(m) + colon + completeDate(s);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//补全0</span></span><br><span class="line"><span class="keyword">let</span> completeDate =<span class="function"><span class="keyword">function</span>(<span class="params">value</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> value < <span class="number">10</span> ? <span class="string">"0"</span>+value:value;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> date = getNowFormatTime();</span><br><span class="line"><span class="comment">//下面两行自动移动到MD头部增加日期,b</span></span><br><span class="line">utools.simulateKeyboardTap(<span class="string">'home'</span>, utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>)</span><br><span class="line">date=<span class="string">"---\ndate: "</span>+date+<span class="string">"\n---\n "</span></span><br><span class="line"></span><br><span class="line">utools.copyText(date)</span><br><span class="line">utools.simulateKeyboardTap(<span class="string">'v'</span>, utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h2 id="附录"><a href="#附录" class="headerlink" title="附录"></a>附录</h2><h3 id="主题推荐:next"><a href="#主题推荐:next" class="headerlink" title="主题推荐:next"></a>主题推荐:<a href="http://theme-next.iissnan.com/getting-started.html">next</a></h3><h3 id="配置文件详解"><a href="#配置文件详解" class="headerlink" title="配置文件详解"></a>配置文件详解</h3><figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment">#Hexo Configuration</span></span><br><span class="line"><span class="comment">##Docs: https://hexo.io/docs/configuration.html</span></span><br><span class="line"><span class="comment">##Source: https://github.com/hexojs/hexo/</span></span><br><span class="line"><span class="comment">##中文文档:https://hexo.io/zh-cn/docs/configuration</span></span><br><span class="line"><span class="comment">#Site 网站设置 基础设置</span></span><br><span class="line"><span class="comment">#网站标题</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">Hexo</span></span><br><span class="line"><span class="comment">#网站副标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">''</span></span><br><span class="line"><span class="comment">#网站描述,SEO优化时会扫描</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">'全栈的自我修养……'</span></span><br><span class="line"><span class="comment">#网站关键字,SEO优化时会扫描,多个逗号分隔</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="string">'java,C'</span></span><br><span class="line"><span class="comment">#作者</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">John</span></span><br><span class="line"><span class="comment">#语言,使用主题时支持的语言列表,主题文件中languages文件夹下查看</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="comment">#时区,默认为电脑时区,中国大陆:Asia/Shanghai</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">Asia/Shanghai</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#URL 网址 基础设置,url如果发布到gitbub,请参考注册github.io建立免费</span></span><br><span class="line"><span class="comment">##Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'</span></span><br><span class="line"><span class="comment">#生成的地址中,会携带这个地址,博客根路径(怎么访问的就怎么填写)</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">'http://example.com'</span></span><br><span class="line"><span class="comment">#文章路径,title为中文在github发布无法显示</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span> <span class="string">''</span> <span class="comment">#永久链接中各部分的默认值,如下</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="comment">#permalink_defaults: </span></span><br><span class="line"><span class="comment">#year: 2021</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="attr">pretty_urls:</span></span><br><span class="line"> <span class="comment">#是否在永久链接中保留尾部的 index.html,设置为 false 时去除</span></span><br><span class="line"> <span class="attr">trailing_index:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment">#是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效)</span></span><br><span class="line"> <span class="attr">trailing_html:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#Directory 目录</span></span><br><span class="line"><span class="comment">#资源文件夹,这个文件夹用来存放内容</span></span><br><span class="line"><span class="attr">source_dir:</span> <span class="string">source</span></span><br><span class="line"><span class="comment">#公共文件夹,这个文件夹用于存放生成的站点文件</span></span><br><span class="line"><span class="attr">public_dir:</span> <span class="string">public</span></span><br><span class="line"><span class="comment">#标签文件夹</span></span><br><span class="line"><span class="attr">tag_dir:</span> <span class="string">tags</span></span><br><span class="line"><span class="comment">#归档文件夹</span></span><br><span class="line"><span class="attr">archive_dir:</span> <span class="string">archives</span></span><br><span class="line"><span class="comment">#分类文件夹</span></span><br><span class="line"><span class="attr">category_dir:</span> <span class="string">categories</span></span><br><span class="line"><span class="comment">#Include code 文件夹,source_dir 下的子目录</span></span><br><span class="line"><span class="attr">code_dir:</span> <span class="string">downloads/code</span></span><br><span class="line"><span class="comment">#国际化(i18n)文件夹</span></span><br><span class="line"><span class="attr">i18n_dir:</span> <span class="string">:lang</span></span><br><span class="line"><span class="comment">#跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。如下</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="comment">##skip_render: "mypage/**/*"</span></span><br><span class="line"><span class="comment">#将会直接将 `source/mypage/index.html` 和 `source/mypage/code.js` 不做改动地输出到 'public' 目录</span></span><br><span class="line"><span class="comment">#你也可以用这种方法来跳过对指定文章文件的渲染</span></span><br><span class="line"><span class="comment">#skip_render: "_posts/test-post.md"</span></span><br><span class="line"><span class="comment">#这将会忽略对 'test-post.md' 的渲染</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="attr">skip_render:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#Writing 文章 基本不用动,只有那个post_asset_folder用来设置图片路径</span></span><br><span class="line"><span class="comment">#新文章的文件名称</span></span><br><span class="line"><span class="attr">new_post_name:</span> <span class="string">:title.md</span></span><br><span class="line"><span class="comment">#预设布局,默认布局是文章</span></span><br><span class="line"><span class="attr">default_layout:</span> <span class="string">post</span></span><br><span class="line"><span class="comment">#把标题转换为 title case</span></span><br><span class="line"><span class="attr">titlecase:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">external_link:</span></span><br><span class="line"> <span class="comment">#在新标签中打开链接</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment">#对整个网站(site)生效或仅对文章(post)生效</span></span><br><span class="line"> <span class="attr">field:</span> <span class="string">site</span></span><br><span class="line"> <span class="comment">#需要排除的域名。主域名和子域名如 www 需分别配置[]</span></span><br><span class="line"> <span class="attr">exclude:</span> <span class="string">''</span></span><br><span class="line"><span class="comment">#把文件名称转换为 (1) 小写或 (2) 大写</span></span><br><span class="line"><span class="attr">filename_case:</span> <span class="number">0</span></span><br><span class="line"><span class="comment">#显示草稿</span></span><br><span class="line"><span class="attr">render_drafts:</span> <span class="literal">false</span></span><br><span class="line"><span class="comment">#启动 Asset 文件夹(推荐开启)</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">true</span></span><br><span class="line"><span class="comment">#把链接改为与根目录的相对位址</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span></span><br><span class="line"><span class="comment">#显示未来的文章 ??</span></span><br><span class="line"><span class="attr">future:</span> <span class="literal">true</span></span><br><span class="line"><span class="comment">#代码块的设置, 请参考 Highlight.js 进行设置</span></span><br><span class="line"><span class="attr">highlight:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">auto_detect:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">tab_replace:</span> <span class="string">''</span></span><br><span class="line"> <span class="attr">wrap:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">hljs:</span> <span class="literal">false</span></span><br><span class="line"><span class="comment">#代码块的设置, 请参考 PrismJS 进行设置</span></span><br><span class="line"><span class="attr">prismjs:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">preprocess:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">tab_replace:</span> <span class="string">''</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Home page setting 首页文章设置</span></span><br><span class="line"><span class="comment">#path: Root path for your blogs index page. (default = '')</span></span><br><span class="line"><span class="comment">#per_page: Posts displayed per page. (0 = disable pagination)</span></span><br><span class="line"><span class="comment">#order_by: Posts order. (Order by date descending by default)</span></span><br><span class="line"><span class="attr">index_generator:</span></span><br><span class="line"> <span class="attr">path:</span> <span class="string">''</span></span><br><span class="line"> <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"> <span class="attr">order_by:</span> <span class="string">-date</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Category & Tag 分类 & 标签 !!需要映射为URLEncode</span></span><br><span class="line"><span class="comment">#uncategorized默认从属分类,%E6%9C%AA%E5%88%86%E7%B1%BB是未分类的URLEncode值</span></span><br><span class="line"><span class="comment">#default_category: uncategorized</span></span><br><span class="line"><span class="attr">default_category:</span> <span class="string">uncategorized</span></span><br><span class="line"><span class="comment">#分类对应值</span></span><br><span class="line"><span class="attr">category_map:</span></span><br><span class="line"><span class="comment">#标签对应值</span></span><br><span class="line"><span class="attr">tag_map:</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Metadata elements</span></span><br><span class="line"><span class="comment">##https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta</span></span><br><span class="line"><span class="comment">#Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签</span></span><br><span class="line"><span class="attr">meta_generator:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Date / Time format</span></span><br><span class="line"><span class="comment">##Hexo uses Moment.js to parse and display date</span></span><br><span class="line"><span class="comment">##You can customize the date format as defined in</span></span><br><span class="line"><span class="comment">##http://momentjs.com/docs/#/displaying/format/</span></span><br><span class="line"><span class="attr">date_format:</span> <span class="string">YYYY-MM-DD</span></span><br><span class="line"><span class="attr">time_format:</span> <span class="string">HH:mm:ss</span></span><br><span class="line"><span class="comment">##updated_option supports 'mtime', 'date', 'empty'</span></span><br><span class="line"><span class="attr">updated_option:</span> <span class="string">'mtime'</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Pagination</span></span><br><span class="line"><span class="comment">##Set per_page to 0 to disable pagination</span></span><br><span class="line"><span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"><span class="attr">pagination_dir:</span> <span class="string">page</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Include / Exclude file(s)</span></span><br><span class="line"><span class="comment">##include:/exclude: options only apply to the 'source/' folder</span></span><br><span class="line"><span class="comment">#Hexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 . 开头的文件和文件夹,Hexo 的 _posts 和 _data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下。</span></span><br><span class="line"><span class="attr">include:</span></span><br><span class="line"><span class="comment">#Hexo 会忽略这些文件和目录,项目文件忽略配置</span></span><br><span class="line"><span class="attr">exclude:</span></span><br><span class="line"><span class="comment">#Ignore files/folders,忽略包括themes/下文件与文件夹(所有上传忽略配置)</span></span><br><span class="line"><span class="attr">ignore:</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Extensions</span></span><br><span class="line"><span class="comment">##Plugins: https://hexo.io/plugins/</span></span><br><span class="line"><span class="comment">##Themes: https://hexo.io/themes/</span></span><br><span class="line"><span class="comment">#使用主题</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">landscape</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Deployment</span></span><br><span class="line"><span class="comment">##Docs: https://hexo.io/docs/one-command-deployment</span></span><br><span class="line"><span class="comment">#发布配置,若使用git,需要安装 npm install hexo-deployer-git --save</span></span><br><span class="line"><span class="comment">#安装</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="comment">#deploy:</span></span><br><span class="line"><span class="comment"># type: git</span></span><br><span class="line"><span class="comment">#单服务配置</span></span><br><span class="line"><span class="comment"># repo: <repository url> #https://bitbucket.org/JohnSmith/johnsmith.bitbucket.io</span></span><br><span class="line"><span class="comment">#多服务配置</span></span><br><span class="line"><span class="comment"># repository:</span></span><br><span class="line"><span class="comment"># github: <github url></span></span><br><span class="line"><span class="comment"># gitee: <gitee url></span></span><br><span class="line"><span class="comment"># branch: [branch]</span></span><br><span class="line"><span class="comment"># message: [message]</span></span><br><span class="line"><span class="comment">#------------------------</span></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line"> <span class="attr">type:</span> <span class="string">''</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>工具</category>
</categories>
<tags>
<tag>mixley</tag>
<tag>java</tag>
<tag>全栈</tag>
<tag>收集</tag>
</tags>
</entry>
<entry>
<title>快速上传微信素材</title>
<url>/2021/1P5AD68.html</url>
<content><![CDATA[<p> 当我们编写了博客后,想将博客内容发送到微信公众平台时,会遇到一个新的阻碍:图片需要重新上传。</p>
<p>MD转成微信样式后有很多方式,之前我们提到的<a href="https://md.openwrite.cn/">md.openwrite.cn</a>,或者直接使用OpenWrite中编辑文章后显示的<strong>公众号预览</strong>功能都能基本满足要求,但是!复制的内容粘贴在微信后,无法解决图片无法加载的问题,功能实用性大打折扣。</p>
<h2 id="理清思路"><a href="#理清思路" class="headerlink" title="理清思路"></a>理清思路</h2><h3 id="失败的素材的处理"><a href="#失败的素材的处理" class="headerlink" title="失败的素材的处理"></a>失败的素材的处理</h3><p>图片不是微信的,会提示失败图片,我们需要通过点击<strong>查看失败图片</strong>找到对应的图片,然后选中失败图片后,点击<strong>图片</strong>-><strong>本地上传</strong>再从本地选择图片上传,若提前存图片库的,可以从图片库中选择。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/68bbd53c0ed7e3797596e738ad1c8be8.png" alt="失败图片显示"></p>
<h3 id="重复动作梳理"><a href="#重复动作梳理" class="headerlink" title="重复动作梳理"></a>重复动作梳理</h3><p>1、找到失败图片,选中失败图片</p>
<p>2、获取失败图片路径</p>
<p>3、点击图片->本地上传</p>
<p>4、找到对应失败图片的本地路径</p>
<p>5、点击确定</p>
<h3 id="需要处理的核心问题"><a href="#需要处理的核心问题" class="headerlink" title="需要处理的核心问题"></a>需要处理的核心问题</h3><p>1、通过失败图片路径找到本地路径</p>
<p>2、重复动作太多,需要简化操作</p>
<h2 id="解决问题"><a href="#解决问题" class="headerlink" title="解决问题"></a>解决问题</h2><h3 id="替换图片路径为本地路径"><a href="#替换图片路径为本地路径" class="headerlink" title="替换图片路径为本地路径"></a>替换图片路径为本地路径</h3><p>我们可以uTools的自动化助手,帮我们将图片下载,然后替换成本地的路径</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> path = ENTER.payload</span><br><span class="line"><span class="comment">//路径为https://mixley.stdcdn.com/ 替换为应用中路径</span></span><br><span class="line"><span class="keyword">let</span> url=<span class="string">"https://mixley.stdcdn.com/"</span>;</span><br><span class="line"><span class="keyword">let</span> dic=<span class="string">"C:/Users/micke/OneDrive/应用/PoweredBy.Cloud/mixley.stdcdn.com/"</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">//图片下载保存路径</span></span><br><span class="line"><span class="keyword">let</span> imgdowndir=<span class="string">"E:/mixley/Pictures/Saved Pictures/"</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//定义获取UUID的方法</span></span><br><span class="line"><span class="keyword">let</span> getUUID=<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line"> <span class="comment">//UUID来自UUID插件中算法</span></span><br><span class="line"> <span class="keyword">const</span> uuid = <span class="string">'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'</span>.replace(<span class="regexp">/[xy]/g</span>, <span class="function"><span class="params">c</span> =></span> {</span><br><span class="line"> <span class="keyword">let</span> r = <span class="built_in">Math</span>.random() * <span class="number">16</span> | <span class="number">0</span></span><br><span class="line"> <span class="keyword">let</span> v = c === <span class="string">'x'</span> ? r : (r & <span class="number">0x3</span> | <span class="number">0x8</span>)</span><br><span class="line"> <span class="keyword">return</span> v.toString(<span class="number">16</span>)</span><br><span class="line"> })</span><br><span class="line"> <span class="keyword">return</span> uuid;</span><br><span class="line">}</span><br><span class="line"><span class="comment">//定义执行路径</span></span><br><span class="line"><span class="keyword">let</span> executePath=<span class="function"><span class="keyword">function</span>(<span class="params">path</span>)</span>{</span><br><span class="line"> utools.copyText(path);</span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'v'</span>,utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(path.indexOf(url)>-<span class="number">1</span>){</span><br><span class="line"> path = path.replace(url,dic);</span><br><span class="line"> executePath(path);</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="comment">//下面为下载图片后替换本地路径</span></span><br><span class="line">path = imgdowndir+getUUID()+<span class="string">'.png'</span>;</span><br><span class="line"><span class="comment">//下载</span></span><br><span class="line">utools.ubrowser.goto(ENTER.payload)</span><br><span class="line"> .wait(<span class="number">500</span>)</span><br><span class="line"> <span class="comment">//将Img截图,保存为png</span></span><br><span class="line"> .screenshot(<span class="string">"img"</span>, path)</span><br><span class="line"> .run({ <span class="attr">show</span>: <span class="literal">false</span> })</span><br><span class="line"> .then(<span class="function">() =></span> {</span><br><span class="line"> executePath(path)</span><br><span class="line"> })</span><br><span class="line"> .catch(<span class="function"><span class="params">err</span> =></span> { utools.showNotification(err.message) })</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p><img src="https://mixley.stdcdn.com/2021/07/752819242ad82d1fbeba89cc4c373144.png" alt="自动化设置"></p>
<p><strong>特别说明</strong></p>
<p>如果使用OD作为图床,再OD中找到应用文件夹,将它设置为始终在此设备保留,解决同步问题。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/76e2576d1cca88aeaa6722fdbb5ca9ad.png" alt="设置始终在此设备上保留"></p>
<h3 id="解决重复步骤问题"><a href="#解决重复步骤问题" class="headerlink" title="解决重复步骤问题"></a>解决重复步骤问题</h3><p>先看下浏览器有哪些操作可以让我们后面进行使用。</p>
<h4 id="浏览器特定操作说明"><a href="#浏览器特定操作说明" class="headerlink" title="浏览器特定操作说明"></a>浏览器特定操作说明</h4><p>1、Ctrl+L可以进入到link栏,即浏览器的地址栏(大部分浏览器)。</p>
<p>2、输入<strong>javascript:指令</strong>可以执行对应页面对应的指令,如下指令在浏览器地址栏输入后可在当前页面显示时间戳(注意,**javascript:**无法可能粘贴到浏览器,可以先输入j,再复制粘贴后面的部分)</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">javascript:(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{alert((<span class="keyword">new</span> <span class="built_in">Date</span>()).valueOf());})();</span><br></pre></td></tr></table></figure>
<p>3、选择文件的文件框选择中,如果输入互联网地址,系统会自动下载文件,并且跳转到对应的本地路径,但是可能存在下载多次。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/a3c4c1f72933512e083a2404bd147a84.png" alt="选择文件"></p>
<h4 id="微信公众号特定DOM元素及操作分析"><a href="#微信公众号特定DOM元素及操作分析" class="headerlink" title="微信公众号特定DOM元素及操作分析"></a>微信公众号特定DOM元素及操作分析</h4><p>咱们不用分析太多微信的内部逻辑,就顺着微信公众号的操作来简化,咱们是为了简化操作不是为了破解。</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//获取到ueditor_0编辑器的上下文(iframe)</span></span><br><span class="line"><span class="built_in">document</span>.getElementById(<span class="string">"ueditor_0"</span>)</span><br><span class="line"><span class="comment">//下面为具体获取的document</span></span><br><span class="line"><span class="built_in">document</span>.getElementById(<span class="string">"ueditor_0"</span>).contentWindow.document</span><br><span class="line"><span class="comment">//说明,后面的document都是指上面这个方式获取的。</span></span><br></pre></td></tr></table></figure>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--这个是获取到的错误图片的大概结构,具体内容分析见下--></span></span><br><span class="line"><span class="tag"><<span class="name">section</span> <span class="attr">class</span>=<span class="string">"page_image_error js_catchremoteimageerror js_uneditable custom_select_card js_uneditablemouseover custom_select_card_selected"</span> <span class="attr">data-remoteid</span>=<span class="string">"c1625917818338"</span> <span class="attr">data-scene</span>=<span class="string">"catch"</span> <span class="attr">data-global</span>=<span class="string">"0"</span> <span class="attr">data-canretry</span>=<span class="string">"1"</span> <span class="attr">data-reason</span>=<span class="string">"%E6%8B%89%E5%8F%96%E5%9B%BE%E7%89%87%E6%95%B0%E6%8D%AE%E5%A4%B1%E8%B4%A5"</span> <span class="attr">data-imgtype</span>=<span class="string">"img"</span> <span class="attr">data-cacheurl</span>=<span class="string">"https://mixley.stdcdn.com/2021/07/maven/clip_image010.jpg"</span> <span class="attr">data-filename</span>=<span class="string">"undefined"</span> <span class="attr">style</span>=<span class="string">"width:553px;height:153px;"</span> <span class="attr">contenteditable</span>=<span class="string">"false"</span>></span><span class="comment"><!--省略--></span><span class="tag"></<span class="name">section</span>></span></span><br></pre></td></tr></table></figure>
<p>1、 选中到错误的图片</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//获取方式1 可能存在多个,可以轮询。</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByClassName(<span class="string">"page_image_error"</span>)[<span class="number">0</span>].click();</span><br><span class="line"><span class="comment">//获取选中图片</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByClassName(<span class="string">"page_image_error"</span>)[<span class="number">0</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//获取方式2 .js_msg_next 进行点击,模拟界面上 查看失败图片按钮,不建议</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByClassName(<span class="string">"js_msg_next"</span>)[<span class="number">0</span>].click();</span><br><span class="line"><span class="comment">//获取选中图片</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByClassName(<span class="string">"custom_select_card_selected"</span>)[<span class="number">0</span>];</span><br></pre></td></tr></table></figure>
<p>2、获取到错误图片的地址</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//读取元素中的data-cacheurl,直接使用dataset</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByClassName(<span class="string">"page_image_error"</span>)[<span class="number">0</span>].dataset.cacheurl</span><br></pre></td></tr></table></figure>
<p>3、点击上传按钮</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//实际研究源码,是使用的jq,有兴趣的可以把图片下载后转base64,直接免打开上传按钮</span></span><br><span class="line"><span class="built_in">document</span>.getElementsByName(<span class="string">"file"</span>)[<span class="number">0</span>].click()</span><br></pre></td></tr></table></figure>
<p>4、粘贴并转换地址,这里使用替换图片路径为本地路径或者直接复制原地址</p>
<p>5、确定后上传,其余的步骤重复</p>
<h3 id="完整代码"><a href="#完整代码" class="headerlink" title="完整代码"></a>完整代码</h3><p>在uTools自动化工具中,我们编写代码</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//定义替换图片的本地路径</span></span><br><span class="line"><span class="keyword">let</span> url=<span class="string">"https://mixley.stdcdn.com/"</span>;</span><br><span class="line"><span class="keyword">let</span> dic=<span class="string">"C:/Users/micke/OneDrive/应用/PoweredBy.Cloud/mixley.stdcdn.com/"</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">//貌似会出现命令串行,需要暂停下</span></span><br><span class="line"><span class="keyword">let</span> sleep =<span class="function"><span class="keyword">function</span>(<span class="params">numberMillis</span>) </span>{ </span><br><span class="line"> <span class="keyword">let</span> now = <span class="keyword">new</span> <span class="built_in">Date</span>(); </span><br><span class="line"> <span class="keyword">let</span> exitTime = now.getTime() + numberMillis; </span><br><span class="line"> <span class="keyword">while</span> (<span class="literal">true</span>) { </span><br><span class="line"> now = <span class="keyword">new</span> <span class="built_in">Date</span>(); </span><br><span class="line"> <span class="keyword">if</span> (now.getTime() > exitTime) </span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line"> } </span><br><span class="line">}</span><br><span class="line"><span class="comment">//此方法在浏览器中执行js语句,可以直接操作dom</span></span><br><span class="line"><span class="keyword">let</span> executeJs=<span class="function"><span class="keyword">function</span>(<span class="params">data</span>)</span>{</span><br><span class="line"> <span class="keyword">let</span> d = <span class="string">'let url="'</span>+url+<span class="string">'";'</span>+</span><br><span class="line"> <span class="string">'let dic="'</span>+dic+<span class="string">'";'</span>;</span><br><span class="line"> <span class="comment">//进入到浏览器地址栏</span></span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'l'</span>,utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>);</span><br><span class="line"> <span class="comment">//这里不停下,可能会将文本复制到正文</span></span><br><span class="line"> sleep(<span class="number">100</span>);</span><br><span class="line"> <span class="comment">//本来是先输入j再输入后面的内容的,但是发现中文输入有问题,改为录入后删除</span></span><br><span class="line"> <span class="keyword">let</span> val=<span class="string">"_javascript:(function(){"</span>+d+data+<span class="string">"})();"</span></span><br><span class="line"> utools.copyText(val);</span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'v'</span>,utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>);</span><br><span class="line"> sleep(<span class="number">20</span>);</span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'home'</span>,utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>);</span><br><span class="line"> sleep(<span class="number">20</span>);</span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'delete'</span>);</span><br><span class="line"> sleep(<span class="number">20</span>);</span><br><span class="line"> utools.simulateKeyboardTap(<span class="string">'enter'</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//注意,execCommand已废弃,替代方法暂无。</span></span><br><span class="line"><span class="comment">//执行的内容,获取图片地址,注意,结尾需要分号; 别写//注释哦,否则无法执行</span></span><br><span class="line"><span class="keyword">let</span> urlPath=<span class="string">`</span></span><br><span class="line"><span class="string">let editDocument = document.getElementById("ueditor_0").contentWindow.document;</span></span><br><span class="line"><span class="string">let errorimg = editDocument.getElementsByClassName("page_image_error");</span></span><br><span class="line"><span class="string">/**将文本复制到剪贴板,后期浏览器废弃后,升级为其它方式**/</span></span><br><span class="line"><span class="string">let copyText=function(text){</span></span><br><span class="line"><span class="string"> let input = document.createElement('input');</span></span><br><span class="line"><span class="string"> input.setAttribute("value", text);</span></span><br><span class="line"><span class="string"> document.body.appendChild(input);</span></span><br><span class="line"><span class="string"> input.select();</span></span><br><span class="line"><span class="string"> document.execCommand("copy"); </span></span><br><span class="line"><span class="string"> document.body.removeChild(input);</span></span><br><span class="line"><span class="string">};</span></span><br><span class="line"><span class="string">if(errorimg.length){</span></span><br><span class="line"><span class="string"> errorimg[0].click();</span></span><br><span class="line"><span class="string"> let cacheurl = errorimg[0].dataset.cacheurl;</span></span><br><span class="line"><span class="string"> /**替换为本地路径**/</span></span><br><span class="line"><span class="string"> cacheurl = cacheurl.replace(url,dic);</span></span><br><span class="line"><span class="string"> if(cacheurl.indexOf(dic)>-1){</span></span><br><span class="line"><span class="string"> cacheurl=cacheurl.replaceAll("/", "\\\\");</span></span><br><span class="line"><span class="string"> };</span></span><br><span class="line"><span class="string"> copyText(cacheurl);</span></span><br><span class="line"><span class="string"> /**此处使用模拟打开文件上传的方式,可以替换为其它,源码是操作base64的,我懒得解析了,够用**/</span></span><br><span class="line"><span class="string"> document.getElementsByName("file")[0].click();</span></span><br><span class="line"><span class="string">};</span></span><br><span class="line"><span class="string">`</span></span><br><span class="line"><span class="comment">//开始执行(可以写循环,全部执行完毕,判断条件)</span></span><br><span class="line">executeJs(urlPath);</span><br><span class="line"><span class="comment">//依据电脑性能停留不同的时间</span></span><br><span class="line">sleep(<span class="number">500</span>);</span><br><span class="line">utools.simulateKeyboardTap(<span class="string">'v'</span>,utools.isMacOs() ? <span class="string">'command'</span> : <span class="string">'ctrl'</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//这里回车可以你自己按下去,继续使用前面提供的替换脚本,将图片快速下载,使用自带的下载比较慢</span></span><br><span class="line"><span class="comment">// sleep(20);</span></span><br><span class="line"><span class="comment">// utools.simulateKeyboardTap('enter');</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h2 id="演示效果"><a href="#演示效果" class="headerlink" title="演示效果"></a>演示效果</h2><p><img src="https://mixley.stdcdn.com/2021/07/5882273b259e21171750eacdc8a9d86f.gif" alt="动画3"></p>
]]></content>
<categories>
<category>工具</category>
</categories>
<tags>
<tag>mixley</tag>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>使用PicGo搭建图床</title>
<url>/2021/1PN15P4.html</url>
<content><![CDATA[<p>我需要能帮助我管理图片的工具,让我的博客能在网络获取图片,我将使用OneDrive作为免费的图床。</p>
<blockquote>
<p><strong>PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具</strong></p>
</blockquote>
<h2 id="调研"><a href="#调研" class="headerlink" title="调研"></a>调研</h2><p>经过了调研,PicGo实际并不提供存储,而是一个可以与博客工具配合的本地软件,他本身支持的格式能满足大部分,还可以支持插件。很赞的是,我发现了他有个Amazon S3插件,能支持Amazon S3格式,搜索S3就能得到它。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/4ea848da27772395ab80ea6fb496dc6a.png" alt="PicGo插件中搜索S3插件"></p>
<p>Amazon S3 是一个产品,也是一个标准,我们使用的主流的存储产品,比如阿里云OSS、华为OSS、minio等都是支持S3标准的。这意味着,当我拥有这个替代我存储的工具,我将来的文件迁移是0成本的。</p>
<h3 id="为什么使用S3"><a href="#为什么使用S3" class="headerlink" title="为什么使用S3"></a>为什么使用S3</h3><blockquote>
<p>引用自:<a href="https://zhuanlan.zhihu.com/p/112057573">一文读懂 AWS S3</a></p>
<p>AWS S3 全名是 Simple Storage Service,简便的存储服务。为什么这么起名啊?它:</p>
<ol>
<li>提供了统一的接口 REST/SOAP 来统一访问任何数据</li>
<li>对 S3 来说,存在里面的数据就是对象名(键),和数据(值)</li>
<li>不限量,单个文件最高可达 5TB</li>
<li>高速。每个 bucket 下每秒可达 3500 PUT/COPY/POST/DELETE 或 5500 GET/HEAD 请求</li>
<li>具备版本,权限控制能力</li>
<li>具备数据生命周期管理能力</li>
</ol>
</blockquote>
<p>简单的说,S3更多是一个标准,使用S3后我们能无缝切换其它S3协议的服务,而目前大部分存储服务都是支持S3的!</p>
<h3 id="如何搭建s3存储服务"><a href="#如何搭建s3存储服务" class="headerlink" title="如何搭建s3存储服务"></a>如何搭建s3存储服务</h3><blockquote>
<p>引用自:<a href="http://www.minio.org.cn/">minio</a></p>
<p>构建高性能的云原生数据<br>机器学习,大数据分析,海量存储的基础架构<br>MinIO支持各种应用程序数据工作负载<br>在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品</p>
</blockquote>
<p>你可以使用minio搭建高性能的存储服务。</p>
<h2 id="安装PicGo"><a href="#安装PicGo" class="headerlink" title="安装PicGo"></a>安装PicGo</h2><p><a href="https://picgo.github.io/PicGo-Doc/zh/">PicGo</a>是开源产品,你可以在GitHub找到它,点击此处下载 <a href="https://github.com/Molunerfinn/PicGo/releases">应用</a>。</p>
<p>这是一个应用,直接安装完成点击打开就可以运行了,它为Win、Linux、MacOS都提供了程序。</p>
<h2 id="配置PoweredBy-Cloud"><a href="#配置PoweredBy-Cloud" class="headerlink" title="配置PoweredBy.Cloud"></a>配置PoweredBy.Cloud</h2><p>PicGo是S3插件,需要一个支持S3的服务,当我们不想额外花费时,可以使用免费的方式,比如使用OneDrive提供的存储。PoweredBy.Cloud可以提供我们需要的服务。</p>
<h3 id="注册PoweredBy-Cloud"><a href="#注册PoweredBy-Cloud" class="headerlink" title="注册PoweredBy.Cloud"></a>注册PoweredBy.Cloud</h3><blockquote>
<p>引用自:<a href="https://zhuanlan.zhihu.com/p/376414195">免费把你的 GoogleDrive 和 OneDrive 变成图床</a></p>
<p>1、打开 PoweredBy.Cloud 并注册。注册非常简单,只需要提供一个可收邮件的邮箱,登录地址会发送到你的邮箱。<br>2、在邮箱里找到登录地址,并点击登录地址登录到 PoweredBy.Cloud。<br>3、在 PoweredBy.Cloud 的控制台里添加一个 site,例如 <a href="http://demo.stdcdn.com,选择/">http://demo.stdcdn.com,选择</a> GoogleDrive 或者 OneDrive 作为存储空间。PoweredBy.Cloud 会在你的网盘里创建一个 <a href="http://demo.stdcdn.com/">http://demo.stdcdn.com</a> 的文件夹。</p>
</blockquote>
<p>注册site截图如下,Site Name将在后面使用</p>
<p><img src="https://mixley.stdcdn.com/2021/07/5328e699c03243c4c8abff5f4c172f1d.png" alt="在PoweredBy.Cloud中创建你的站点名称"></p>
<h3 id="创建Developer密钥-S3"><a href="#创建Developer密钥-S3" class="headerlink" title="创建Developer密钥(S3)"></a>创建Developer密钥(S3)</h3><p>点击Developer选项->点击 Create Access Key 按钮->输入任意key名称(仅做备注)</p>
<p><img src="https://mixley.stdcdn.com/2021/07/0f88e1fa24fef8197afb6ec55d8ca7a2.png" alt="image-20210707222843012"></p>
<h3 id="配置PicGo的S3"><a href="#配置PicGo的S3" class="headerlink" title="配置PicGo的S3"></a>配置PicGo的S3</h3><p>配置S3的关键参数在创建密钥后,access_key、secret_access_key都已经出现,剩下的还有两个关键值</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="comment">//下面是两个关键参数</span></span><br><span class="line"><span class="comment">//固定值,endpoint 自定义节点</span></span><br><span class="line">endpoint_url=<span class="string">'https://stdcdn.com'</span></span><br><span class="line"><span class="comment">//桶,bucketName 这就是你的SiteName。</span></span><br><span class="line">bucket=<span class="string">"mixley"</span></span><br></pre></td></tr></table></figure>
<p><img src="https://mixley.stdcdn.com/2021/07/c4243fe369515cc8acd8084d8c18c29e.png" alt="配置S3"></p>
<h3 id="测试图片上传效果"><a href="#测试图片上传效果" class="headerlink" title="测试图片上传效果"></a>测试图片上传效果</h3><p>我们使用PicGo测试上传效果,最终会在我们的OneDrive中出现。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/fd3283b3a953c78e88540cf9e3fc20f6.png" alt="配置完成后测试上传的图片位置"></p>
<h2 id="Typora中使用PicGo"><a href="#Typora中使用PicGo" class="headerlink" title="Typora中使用PicGo"></a>Typora中使用PicGo</h2><p>Typora中,可以在图像中配置上传图片,并且上传可以进行验证图片上传选项操作。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/1d10d4fb89ddeaaa2771a0f7494a962e.png" alt="image-20210707224953978"></p>
]]></content>
<categories>
<category>工具</category>
</categories>
<tags>
<tag>mixley</tag>
</tags>
</entry>
<entry>
<title>搭建Minio服务</title>
<url>/2021/1GB6XPC.html</url>
<content><![CDATA[<h2 id="minio介绍"><a href="#minio介绍" class="headerlink" title="minio介绍"></a>minio介绍</h2><blockquote>
<p>minio 是高性能、可扩展、云的原生支持、开源免费的企业级文件存储服务,与Amazon S3 兼容,配置极简。</p>
</blockquote>
<p>minio中文网:<a href="http://www.minio.org.cn/">http://www.minio.org.cn/</a><br>minio官网:<a href="https://min.io/">https://min.io/</a></p>
<h3 id="linux下配置"><a href="#linux下配置" class="headerlink" title="linux下配置"></a>linux下配置</h3><p><img src="https://mixley.stdcdn.com/2021/07/4af3675d787d672cf6bc725351405524.gif" alt="img"></p>
<p>1、下载minio,建议下载到/usr/local/bin/ 目录下,可全局访问</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">cd /usr/local/bin/</span><br><span class="line">wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio</span><br><span class="line"><span class="meta">#</span><span class="bash"><span class="comment">#连不上,使用下面的:wget https://dl.minio.io/server/minio/release/linux-amd64/minio</span></span></span><br><span class="line"><span class="meta">#</span><span class="bash"><span class="comment">#还不行,试试:wget https://dl.min.io/server/minio/release/linux-amd64/minio</span></span></span><br><span class="line">chmod +x minio</span><br></pre></td></tr></table></figure>
<p>2、设置minio用户名密码到临时环境变量(重启后消失)</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">旧版使用 MINIO_ACCESS_KEY MINIO_SECRET_KEY,作废时间:Deprecated since version RELEASE.2021-04-22T15-44-28Z.</span></span><br><span class="line"><span class="meta">#</span><span class="bash">新版 配置用户名密码</span></span><br><span class="line">export MINIO_ROOT_USER=admin</span><br><span class="line">export MINIO_ROOT_PASSWORD=password</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">查看环境变量</span></span><br><span class="line">echo $MINIO_ROOT_USER</span><br><span class="line">echo $MINIO_ROOT_PASSWORD</span><br></pre></td></tr></table></figure>
<p>3、永久环境变量</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash"> 修改系统配置</span></span><br><span class="line">vim /etc/profile</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">最后一行输入(新版)</span> </span><br><span class="line">export MINIO_ROOT_USER=admin</span><br><span class="line">export MINIO_ROOT_PASSWORD=password</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash"> 设置立即生效</span></span><br><span class="line">source /etc/profile</span><br></pre></td></tr></table></figure>
<p>4、指定配置路径后启动 (建议修改默认端口)</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">后端启动</span></span><br><span class="line">nohup minio server --address ':9000' --console-address ':9001' --config-dir /root/.minio /data/minio > /data/minio.log 2>&1 &</span><br><span class="line"><span class="meta">#</span><span class="bash">确认是否启动</span></span><br><span class="line">ps -ef | grep minio | grep -v grep</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">前端启动</span></span><br><span class="line">minio server --address ':9000' --console-address ':9001' --config-dir /root/.minio /data/minio</span><br><span class="line"><span class="meta">#</span><span class="bash">查看端口占用lsof -i:d</span></span><br><span class="line">lsof -i:9000</span><br><span class="line"></span><br><span class="line">docker run -p 9000:9000 minio server /data/minio</span><br><span class="line"></span><br><span class="line">docker run -p 29235:29235 -p 29236:29236 \</span><br><span class="line"> --name minio1 \</span><br><span class="line"> -e "MINIO_ROOT_USER=minioUser" \</span><br><span class="line"> -e "MINIO_ROOT_PASSWORD=minioPassword" \</span><br><span class="line"> -e "MINIO_KMS_SECRET_KEY=my-minio-encryption-key:17Ej+Y0pA/BTjoTDom6W4ymEDIMNeDoB8ss83CtZVbE=" \</span><br><span class="line"> -v /data/minio/dir:/data \</span><br><span class="line"> -v /data/minio/config:/root/.minio \</span><br><span class="line"> minio/minio server --address ':29235' --console-address ':29236' /data </span><br></pre></td></tr></table></figure>
<p>5、开机启动(方式很多,例举其一)</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">修改系统配置</span></span><br><span class="line">vim /etc/rc.d/rc.local</span><br><span class="line">chmod +x /etc/rc.d/rc.local</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">每次登录 vim /etc/profile</span></span><br><span class="line"><span class="meta">#</span><span class="bash">最后一行输入</span></span><br><span class="line">nohup minio server --address ':9000' --config-dir /root/.minio /data/minio > /data/minio.log 2>&1 &</span><br></pre></td></tr></table></figure>
<p>6、服务方式启动</p>
<p>来自博文:<a href="https://blog.csdn.net/qq_38431927/article/details/107377166">MinIO安装并将MinIO设置成服务启动</a></p>
<h3 id="win配置"><a href="#win配置" class="headerlink" title="win配置"></a>win配置</h3><p>1、下载minio,下载到C:\WINDOWS可全局启动</p>
<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">#powershell 命令直接下载,选定</span></span><br><span class="line">powershell (<span class="built_in">new-object</span> System.Net.WebClient).DownloadFile(<span class="string">'http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe'</span>,<span class="string">'minio.exe'</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">### 下载时建议下载到环境变量,或者建议设置path路径,使用minio即可访问最好。</span></span><br></pre></td></tr></table></figure>
<p>2、设置minio用户名密码到临时环境变量(重启后消失)</p>
<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="built_in">set</span> MINIO_ROOT_USER=admin</span><br><span class="line"><span class="built_in">set</span> MINIO_ROOT_PASSWORD=password</span><br><span class="line"></span><br><span class="line"><span class="comment">#查看环境变量</span></span><br><span class="line"><span class="built_in">echo</span> %MINIO_ROOT_USER%</span><br><span class="line"><span class="built_in">echo</span> %MINIO_ROOT_PASSWORD%</span><br></pre></td></tr></table></figure>
<p>3、永久环境变量(手动设置也比较简单)</p>
<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">#用户环境变量</span></span><br><span class="line">setx MINIO_ROOT_USER admin</span><br><span class="line">setx MINIO_ROOT_PASSWORD password</span><br><span class="line"></span><br><span class="line"><span class="comment">#系统环境变量(需管理员,建议)</span></span><br><span class="line">setx MINIO_ROOT_USER admin /m</span><br><span class="line">setx MINIO_ROOT_PASSWORD password /m</span><br><span class="line"></span><br><span class="line"><span class="comment">#以下指令保存为setMinio.bat后,自动获取管理员权限</span></span><br><span class="line">@<span class="built_in">echo</span> off</span><br><span class="line">%<span class="number">1</span> %<span class="number">2</span> mshta vbscript:createobject(<span class="string">"shell.application"</span>).shellexecute(<span class="string">"%~s0"</span>,<span class="string">"goto :runas"</span>,<span class="string">""</span>,<span class="string">"runas"</span>,<span class="number">1</span>)(window.close)&<span class="keyword">exit</span> </span><br><span class="line">:runas setMinio.bat</span><br><span class="line">setx MINIO_ROOT_USER admin /m</span><br><span class="line">setx MINIO_ROOT_PASSWORD password /m</span><br><span class="line"><span class="built_in">echo</span> MINIO_ROOT_USER=%MINIO_ROOT_USER%</span><br><span class="line"><span class="built_in">echo</span> MINIO_ROOT_PASSWORD=%MINIO_ROOT_PASSWORD%</span><br><span class="line">pause&<span class="keyword">exit</span> </span><br></pre></td></tr></table></figure>
<p>4、指定配置路径后启动 (建议修改默认端口)</p>
<figure class="highlight powershell"><table><tr><td class="code"><pre><span class="line"><span class="comment">#静默启动(服务启动,以下命令设置服务为自动,开机后会自启动)</span></span><br><span class="line"><span class="built_in">set</span> confdir=<span class="string">"D:\\data\\.minio"</span></span><br><span class="line"><span class="built_in">set</span> datadir=<span class="string">"D:\\data\\minio"</span></span><br><span class="line"><span class="built_in">sc</span> create minio binpath=<span class="string">"minio server --address ':9000' --config-dir %confdir% %datadir%"</span> <span class="built_in">type</span>=own <span class="built_in">start</span>=auto displayname=minio</span><br><span class="line"><span class="comment">#启动服务 sc [start|stop|delete] server</span></span><br><span class="line"><span class="built_in">sc</span> <span class="built_in">start</span> minio</span><br><span class="line"><span class="comment">#查看服务状态</span></span><br><span class="line"><span class="built_in">sc</span> query minio</span><br><span class="line"></span><br><span class="line"><span class="comment">#cmd启动</span></span><br><span class="line">minio server -<span class="literal">-address</span> <span class="string">':9000'</span> -<span class="literal">-config</span><span class="literal">-dir</span> D:\\data\\.minio D:\\data\\minio </span><br></pre></td></tr></table></figure>
<h3 id="其它事项"><a href="#其它事项" class="headerlink" title="其它事项"></a><strong>其它事项</strong></h3><h4 id="安装宝塔的linux下运行闪退"><a href="#安装宝塔的linux下运行闪退" class="headerlink" title="安装宝塔的linux下运行闪退"></a>安装宝塔的linux下运行闪退</h4><p>通过宝塔面板中系统加固功能检查管理进程白名单,不存在则加入到白名单</p>
<p><img src="https://mixley.stdcdn.com/2021/07/08727c087384727021d598511ea00803.png" alt="image-20210707230525365"></p>
<h4 id="win下使用cmd-minio-server无法启动解决办法"><a href="#win下使用cmd-minio-server无法启动解决办法" class="headerlink" title="win下使用cmd minio server无法启动解决办法"></a>win下使用cmd minio server无法启动解决办法</h4><p>1、若文件夹在本地,使用./minio server再重试</p>
<p>2、环境变量中设置path,指定minio目录路径</p>
<h4 id="win下执行命令时提示需要管理员权限"><a href="#win下执行命令时提示需要管理员权限" class="headerlink" title="win下执行命令时提示需要管理员权限"></a>win下执行命令时提示需要管理员权限</h4><p>方法1:可使用管理员命令窗口打开</p>
<p>方法2:参考<strong>永久环境变量</strong>,设置一个cmd脚本自动提升管理员权限</p>
]]></content>
<categories>
<category>工具</category>
</categories>
<tags>
<tag>mixley</tag>
<tag>前端</tag>
<tag>后端</tag>
</tags>
</entry>
<entry>
<title>MQ</title>
<url>/2022/C64GPN.html</url>
<content><![CDATA[<p><img src="/2022/C64GPN/1355489-20180823155405420-191105903.png" alt="img"></p>
]]></content>
<categories>
<category>学习</category>
<category>MQ</category>
</categories>
</entry>
<entry>
<title>npmrc与scope</title>
<url>/2022/JGXQTS.html</url>
<content><![CDATA[<h2 id="npmrc简介"><a href="#npmrc简介" class="headerlink" title="npmrc简介"></a>npmrc简介</h2><p>我们经常会设置镜像源,用于加速,实际设置镜像源最终是保存在npm的配置文件中的,对应的配置文件叫.npmrc</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">npm config <span class="built_in">set</span> key value</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">下面是设置淘宝镜像的指令</span></span><br><span class="line">npm config set registry https://registry.npm.taobao.org</span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="meta">#</span><span class="bash">下面是全局设置,带了-g</span></span><br><span class="line"><span class="meta">#</span><span class="bash">npm config <span class="built_in">set</span> registry https://registry.npm.taobao.org -g</span></span><br></pre></td></tr></table></figure>
<p>对应的.npmrc文件会出现用户目录或npm的安装目录(全局情况下),并会有一个记录值</p>
<figure class="highlight ini"><table><tr><td class="code"><pre><span class="line"><span class="attr">registry</span>=https://registry.npm.taobao.org/</span><br></pre></td></tr></table></figure>
<p>优先级:<strong>项目配置>用户配置>全局配置</strong>,在项目根目录建立的.npmrc优先级别最高。仅支持单个地址。</p>
<h2 id="scope简介"><a href="#scope简介" class="headerlink" title="scope简介"></a>scope简介</h2><p>scope是作用域包的意思。使用@开头,到斜杠之间,整个包名带上域可以按”域”处理。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">@scope/project-name</span><br></pre></td></tr></table></figure>
<p>域的作用更多是私服时使用,在发布时指定name=@scope/project-name,使用时,同样使用@scope/project-name。</p>
<p>在使用npm时可能会遇见私服A、私服B、私服C镜像的问题。但是按.npmrc文件的配置,我们也肯定知道,只能选择其中一个作为镜像地址。普遍的办法就是自己再搭建一个私服,引用A、B、C私服的包。还有一个更简单的办法是,指定域的服务地址。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">设置@scope开头的包从test.npm下载</span></span><br><span class="line">npm config set @scope:registry https://test.npm.com</span><br><span class="line"><span class="meta">#</span><span class="bash">设置@testScope1开头的包从服务1.2.3.4下载</span></span><br><span class="line">npm config set @testScope1:registry http://1.2.3.4/npm-test/</span><br></pre></td></tr></table></figure>
<p>最后保留的.npmrc文件里面对应的是</p>
<figure class="highlight ini"><table><tr><td class="code"><pre><span class="line">@scope:<span class="attr">registry</span>=https://test.npm.com</span><br><span class="line">@testScope1:<span class="attr">registry</span>=http://<span class="number">1.2</span>.<span class="number">3.4</span>/npm-test/</span><br></pre></td></tr></table></figure>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>简单的处理方式:手动建立一个.npmrc直接丢<strong>项目</strong>里面啦<strong>(优先级最高)</strong>,记得文件要<strong>和package.json同级</strong>,根目录哦。打开项目就是npm install,私包和公共包全下载了。</p>
]]></content>
<categories>
<category>学习</category>
<category>node</category>
</categories>
</entry>
<entry>
<title>install</title>
<url>/2022/QWNFBS.html</url>
<content><![CDATA[<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">指定windows-build-tools版本,4.0好安装一点</span></span><br><span class="line"><span class="meta">#</span><span class="bash">搞不定可以c</span></span><br><span class="line">npm install --global --production windows-build-tools@4.0.0</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>学习</category>
<category>node</category>
</categories>
</entry>
<entry>
<title>Netflix</title>
<url>/2022/1M55EP7.html</url>
<content><![CDATA[<h4 id="Netflix组件替代方案"><a href="#Netflix组件替代方案" class="headerlink" title="Netflix组件替代方案"></a>Netflix组件替代方案</h4><p>Spring Cloud既然把Netflix OSS套件大刀阔斧的砍掉了,那总归得有替代方案吧。那是必然的,Spring Cloud团队给我们推荐了用于替代的产品:</p>
<table>
<thead>
<tr>
<th>Netflix</th>
<th>推荐替代品</th>
<th>说明</th>
</tr>
</thead>
<tbody><tr>
<td>Hystrix</td>
<td>Resilience4j</td>
<td>Hystrix自己也推荐你使用它代替自己</td>
</tr>
<tr>
<td>Hystrix Dashboard / Turbine</td>
<td>Micrometer + Monitoring System</td>
<td>说白了,监控这件事交给更专业的组件去做</td>
</tr>
<tr>
<td>Ribbon</td>
<td>Spring Cloud Loadbalancer</td>
<td>忍不住了,Spring终究亲自出手</td>
</tr>
<tr>
<td>Zuul 1</td>
<td>Spring Cloud Gateway</td>
<td>忍不住了,Spring终究亲自出手</td>
</tr>
<tr>
<td>Archaius 1</td>
<td>Spring Boot外部化配置 + Spring Cloud配置</td>
<td>比Netflix实现的更好、更强大</td>
</tr>
</tbody></table>
]]></content>
<categories>
<category>学习</category>
<category>java</category>
</categories>
<tags>
<tag>spring</tag>
<tag>spring boot</tag>
<tag>spring cloud</tag>
</tags>
</entry>
<entry>
<title>nrm</title>
<url>/2022/29G4ED9.html</url>
<content><![CDATA[<p>npm install -g nrm</p>
<p>nrm ls //查看镜像源, *表示正在使用的</p>
<pre><code>* npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
</code></pre>
<p>nrm use taobao //切换</p>
]]></content>
<categories>
<category>学习</category>
<category>node</category>
</categories>
</entry>
<entry>
<title>Spring Cloud注册中心</title>
<url>/2022/7PXA8K.html</url>
<content><![CDATA[<p><a href="https://www.jianshu.com/p/bc2587ec4e56">https://www.jianshu.com/p/bc2587ec4e56</a></p>
<h3 id="1、-什么是注册中心"><a href="#1、-什么是注册中心" class="headerlink" title="1、 什么是注册中心"></a>1、 什么是注册中心</h3><p>注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。<br> 服务提供者provider: 启动的时候向注册中心上报自己的网络信息。<br> 服务消费者consumer: 启动的时候向注册中心上报自己的网络信息,拉取provider的相关网络信息。</p>
<h3 id="2-、为什么需要注册中心"><a href="#2-、为什么需要注册中心" class="headerlink" title="2 、为什么需要注册中心"></a>2 、为什么需要注册中心</h3><p>微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题。</p>
<ul>
<li>主流的注册中心:zookeeper、Eureka、consul、etcd 等</li>
</ul>
<h3 id="3、分布式应用知识CAP定理"><a href="#3、分布式应用知识CAP定理" class="headerlink" title="3、分布式应用知识CAP定理"></a>3、分布式应用知识CAP定理</h3><p>CAP定理:指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可同时获得。</p>
<ul>
<li>一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时)。</li>
<li>可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求。(服务一直可用,而且是正常响应时间)。</li>
<li>分区容错性(P):分区容忍性,就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)。</li>
</ul>
<h3 id="4、分布式系统CAP注册中心选择"><a href="#4、分布式系统CAP注册中心选择" class="headerlink" title="4、分布式系统CAP注册中心选择"></a>4、分布式系统CAP注册中心选择</h3><p>CAP三者不可同时获得的原因:</p>
<ol>
<li>C A 满足的情况下,P不能满足的原因:<br> 数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足。</li>
<li>CP 满足的情况下,A不能满足的原因:<br> 数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以A就不满足。</li>
<li>AP 满足的情况下,C不能满足的原因:<br> 机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足。</li>
</ol>
<h6 id="注册中心选择:"><a href="#注册中心选择:" class="headerlink" title="注册中心选择:"></a>注册中心选择:</h6><ul>
<li><p>Zookeeper:CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足</p>
</li>
<li><p>Eureka:AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化<br> 结论:没有最好的选择,最好是根据业务场景来进行架构设计</p>
<p>注册中心对比图:</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-6939c67bd9713238.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
<p>注册中心对比图</p>
</li>
</ul>
<h3 id="5、注册中心搭建-使用IDEA"><a href="#5、注册中心搭建-使用IDEA" class="headerlink" title="5、注册中心搭建(使用IDEA)"></a>5、注册中心搭建(使用IDEA)</h3><p>File –> New –>Project</p>
<ul>
<li><p>拉取项目</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-b170be204585485a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-3252793a85e5e2cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-9d74d4f2f2e3e735.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
</li>
<li><p>打开项目在启动类添加注解@EnableEurekaServer</p>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="meta">@SpringBootApplication</span></span><br><span class="line"><span class="meta">@EnableEurekaServer</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">EurekaServerApplication</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"> SpringApplication.run(EurekaServerApplication.class, args);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>增加配置application.yml<br> (配置文件默认是application.properties格式,如需修改为yml直接重命名即可)</li>
</ul>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">server:</span><br><span class="line"> port: 8761</span><br><span class="line"></span><br><span class="line">eureka:</span><br><span class="line"> instance:</span><br><span class="line"> hostname: localhost</span><br><span class="line"> client:</span><br><span class="line"> <span class="comment">#声明自己是个服务端</span></span><br><span class="line"> registerWithEureka: <span class="literal">false</span></span><br><span class="line"> fetchRegistry: <span class="literal">false</span></span><br><span class="line"> serviceUrl:</span><br><span class="line"> defaultZone: http://<span class="variable">${eureka.instance.hostname}</span>:<span class="variable">${server.port}</span>/eureka/</span><br></pre></td></tr></table></figure>
<ul>
<li>启动项目 访问注册中心页面<br> http:// localhost:8761</li>
</ul>
<h3 id="6、创建服务提供者向注册中心上报"><a href="#6、创建服务提供者向注册中心上报" class="headerlink" title="6、创建服务提供者向注册中心上报"></a>6、创建服务提供者向注册中心上报</h3><ul>
<li><p>如上所示创建注册中心一样创建项目,不同的是选择依赖如下:</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-7d25bbaf0be5406e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
</li>
<li><p>开发接口</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-e284a51d7b3ae84d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
</li>
<li><p>增加配置application.yml</p>
</li>
</ul>
<figure class="highlight csharp"><table><tr><td class="code"><pre><span class="line">server:</span><br><span class="line"> port: <span class="number">8771</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#服务的名称</span></span><br><span class="line">spring:</span><br><span class="line"> application:</span><br><span class="line"> name: product-service</span><br><span class="line"></span><br><span class="line"><span class="meta">#指定注册中心地址</span></span><br><span class="line">eureka:</span><br><span class="line"> client:</span><br><span class="line"> service-url:</span><br><span class="line"> defaultZone: http:<span class="comment">//localhost:8761/eureka/</span></span><br></pre></td></tr></table></figure>
<ul>
<li><p>启动服务</p>
<p>此时访问注册中心地址:http:// localhost:8761 就可以看到如下注册的服务了</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-ead6dfe3cad3ef26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
</li>
</ul>
<h3 id="7、Eureka服务注册中心配置控制台问题"><a href="#7、Eureka服务注册中心配置控制台问题" class="headerlink" title="7、Eureka服务注册中心配置控制台问题"></a>7、Eureka服务注册中心配置控制台问题</h3><ol>
<li><p>eureka管理后台出现一串红色字体:是警告,说明有服务上线率低 </p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-2947d933608a24ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
<p>由于自我保护模式默认是开启状态<br> 关闭检查方法:eureka服务端配置文件加入</p>
</li>
</ol>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">server:</span><br><span class="line"> enable-self-preservation: <span class="literal">false</span></span><br></pre></td></tr></table></figure>
<p>注意:不建议关闭,因为关闭会导致如若因为网络问题没上报至注册中心的服务也会被认为挂掉而清除掉了此服务。</p>
<ol>
<li><p>为什么只加一个注册中心地址,就可以注册,而且很多资料显示启动类加注解@EnableEurekaClient</p>
<p>查阅官网,给出解释如下:</p>
<p><img src="https://upload-images.jianshu.io/upload_images/16750801-ce9478fd6ad5ab9e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp" alt="img"></p>
<p>官方文档:</p>
<p><a href="http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server">http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server</a></p>
</li>
</ol>
<p>作者:二圈儿<br>链接:<a href="https://www.jianshu.com/p/bc2587ec4e56">https://www.jianshu.com/p/bc2587ec4e56</a><br>来源:简书<br>著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</p>
]]></content>
<categories>
<category>学习</category>
<category>java</category>
</categories>
<tags>
<tag>java</tag>
<tag>spring</tag>
<tag>架构设计</tag>
</tags>
</entry>
<entry>
<title>Undertow</title>
<url>/2022/3FH16VE.html</url>
<content><![CDATA[<p><a href="https://www.cnblogs.com/javastack/p/13552577.html">https://www.cnblogs.com/javastack/p/13552577.html</a></p>
<h1 id="吊打-Tomcat-,Undertow-性能很炸!!"><a href="#吊打-Tomcat-,Undertow-性能很炸!!" class="headerlink" title="吊打 Tomcat ,Undertow 性能很炸!! "></a><a href="https://www.cnblogs.com/javastack/p/13552577.html">吊打 Tomcat ,Undertow 性能很炸!! </a></h1><p>在 Java Web 容器的世界里,Tomcat 和 Jetty 是大名鼎鼎的、用的最多的开源项目,也是大众熟知的。</p>
<p>今天再介绍另外一款能和 Tomcat 媲美的神器:Undertow,据说性能方面还要吊打 Tomcat,如果你还不知道它,那你就 OUT 了。</p>
<p>我们来看下 Spring Boot 默认支持的三种 Servlet 容器:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Servlet Version</th>
</tr>
</thead>
<tbody><tr>
<td>Tomcat 9.0</td>
<td>4.0</td>
</tr>
<tr>
<td>Jetty 9.4</td>
<td>3.1</td>
</tr>
<tr>
<td>Undertow 2.0</td>
<td>4.0</td>
</tr>
</tbody></table>
<p>以上来源于 Spring Boot 2.3.2 官方文档,更多信息请点击<a href="https://mp.weixin.qq.com/s/YfPFl1_l2sp9YirTppzRow">这里</a>参考这篇文章。</p>
<p>Undertow 它能成为 Spring Boot 默认集成的三大容器之一,就凭这点,我想就足以说明它的地位。</p>
<h2 id="Undertow-什么鬼?"><a href="#Undertow-什么鬼?" class="headerlink" title="Undertow 什么鬼?"></a>Undertow 什么鬼?</h2><p>Undertow 是 RedHat(红帽公司)的开源产品,采用 Java 开发,是一款灵活、高性能的 Web 服务器,提供了基于 NIO 的阻塞/非阻塞 APIs,也是 Wildfly 的默认 Web 容器。</p>
<p>搜索 Undertow:</p>
<p><img src="/2022/3FH16VE/1218593-20200824105305699-195814623.png" alt="img"></p>
<p>页面显示的是 JBoss Community,因为 2006 年 RedHat 收购了 JBoss,那也就不足为怪了。</p>
<p>Undertow 它是一个基于组合的体系结构,可以通过组合一系列小型处理器来构建一个 Web 服务器。这就让我们可以灵活的在 Java EE servlet 4.0 容器和底层非阻塞处理器或者其他更多之间进行选择。</p>
<p>Undertow 被设计成完全可嵌入式的,所以也叫嵌入式容器,具有易于使用的流畅构建 API,另外,Undertow 的生命周期也完全由所嵌入的应用程序所控制。</p>
<p>这也是为什么 Spring Boot 可以直接嵌入 Undertow 的原因,Undertow 它就是为了嵌入而发烧的。Spring Boot 基础知识就不介绍了,关注公众号Java技术栈在后台回复boot获取我写的系列教程。</p>
<p>官方网站:</p>
<blockquote>
<p><a href="https://undertow.io/">https://undertow.io/</a></p>
</blockquote>
<p>源码托管在 Github:</p>
<blockquote>
<p><a href="https://github.com/undertow-io/undertow">https://github.com/undertow-io/undertow</a></p>
</blockquote>
<h2 id="Undertow-有啥特性?"><a href="#Undertow-有啥特性?" class="headerlink" title="Undertow 有啥特性?"></a>Undertow 有啥特性?</h2><p><strong>1)HTTP/2 Support</strong></p>
<p>Undertow 支持 HTTP/2 开箱即用,不需要重写引导类路径。</p>
<p><strong>2)支持 HTTP 升级</strong></p>
<p>支持 HTTP 升级,允许多个协议通过 HTTP 端口上进行复用。</p>
<p><strong>3)支持 Web Socket</strong></p>
<p>Undertow 提供对 Web 套接字的全面支持,包括对 JSR-356 的支持。</p>
<p><strong>4)支持 Servlet 4.0</strong></p>
<p>Undertow 提供了对 Servlet 4.0 的支持,包括对嵌入式 Servlet 的支持,还可以混合部署 Servlet 和原生 Undertow 非阻塞处理程序。</p>
<p><strong>5)可嵌入式</strong></p>
<p>Undertow 可以嵌入到应用程序中,也可以通过几行代码独立运行。</p>
<p><strong>6)高灵活性</strong></p>
<p>一个 Undertow 服务器是通过链式处理器来配置的,可以根据需要添加功能,因此可以避免添加没有必要的功能。</p>
<h2 id="Undertow-性能如何?"><a href="#Undertow-性能如何?" class="headerlink" title="Undertow 性能如何?"></a>Undertow 性能如何?</h2><p>国外有篇帖子做了 Tomcat vs. Jetty vs. Undertow 三者的性能比较:</p>
<blockquote>
<p><a href="https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/">https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/</a></p>
</blockquote>
<p><img src="/2022/3FH16VE/1218593-20200824105306098-1526118676.png" alt="img"></p>
<p>从测试结果看,这三个 Servlet 容器都具有不错的性能,但 Undertow 性能更好,Tomcat 和 Jetty 紧随其后。</p>
<p>Jetty 在启动时的内存占用最大,为:311 MB, Tomcat 和 Undertow 的初始内存占用都很低,大约为:120 MB,而 Undertow 的初始内存占用最低,为:114 MB。</p>
<p>最后,关键的区别在于,Undertow 响应头参数默认包含 HTTP 持久连接信息,这个头参数在支持持久连接的客户端时,可以通过重用连接来优化性能。</p>
<h2 id="Show-me-the-code"><a href="#Show-me-the-code" class="headerlink" title="Show me the code"></a>Show me the code</h2><p>Undertow 目前有两个主要版本:</p>
<ul>
<li>2.1:当前支持 Servlet 4.0, JDK8+ 的稳定版本;</li>
<li>1.4:当前支持 Servlet 3.1, JDK7 的稳定版本;</li>
</ul>
<p>独立使用 Undertow 需要添加以下依赖:</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><span class="line"><span class="tag"><<span class="name">dependency</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>io.undertow<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>undertow-core<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">version</span>></span>2.1.0.Final<span class="tag"></<span class="name">version</span>></span></span><br><span class="line"><span class="tag"></<span class="name">dependency</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">dependency</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>io.undertow<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>undertow-servlet<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">version</span>></span>2.1.0.Final<span class="tag"></<span class="name">version</span>></span></span><br><span class="line"><span class="tag"></<span class="name">dependency</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">dependency</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>io.undertow<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>undertow-websockets-jsr<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">version</span>></span>2.1.0.Final<span class="tag"></<span class="name">version</span>></span></span><br><span class="line"><span class="tag"></<span class="name">dependency</span>></span></span><br></pre></td></tr></table></figure>
<p>以下示例来源官网:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">HelloWorldServer</span> </span>{</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(<span class="keyword">final</span> String[] args)</span> </span>{</span><br><span class="line"> Undertow server = Undertow.builder()</span><br><span class="line"> .addHttpListener(<span class="number">8080</span>, <span class="string">"localhost"</span>)</span><br><span class="line"> .setHandler(<span class="keyword">new</span> HttpHandler() {</span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">handleRequest</span><span class="params">(<span class="keyword">final</span> HttpServerExchange exchange)</span> <span class="keyword">throws</span> Exception </span>{</span><br><span class="line"> exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, <span class="string">"text/plain"</span>);</span><br><span class="line"> exchange.getResponseSender().send(<span class="string">"Hello World"</span>);</span><br><span class="line"> }</span><br><span class="line"> }).build();</span><br><span class="line"> server.start();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>这是一个使用了异常 IO 的简单 Hello World 示例。</p>
<h2 id="Spring-Boot-amp-Undertow"><a href="#Spring-Boot-amp-Undertow" class="headerlink" title="Spring Boot & Undertow"></a>Spring Boot & Undertow</h2><p>上面讲到,Undertow 是为嵌入式而生的 Web 容器,又是 Spring Boot 默认集成的容器之一,下面栈长带大家来看下如何在 Spring Boot 中使用 Undertow。</p>
<p>因为在 <code>spring-boot-starter-web</code> 启动器中,Tomcat 是 Spring Boot 默认的嵌入式容器,即:<code>spring-boot-starter-tomcat</code>。</p>
<p>Spring Boot 还提供了其他两个启动器以方便进行代替:</p>
<ul>
<li>spring-boot-starter-jetty</li>
<li>spring-boot-starter-undertow</li>
</ul>
<p>下面来简单实战下,如何在 Spring Boot 中使用 Undertow。Spring Boot 基础知识就不介绍了,不熟悉的可以关注公众号Java技术栈在后台回复boot获取我写的系列教程。</p>
<p>排除 Tomcat 依赖,然后加入 Undertow 依赖:</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><span class="line"><span class="tag"><<span class="name">dependencies</span>></span></span><br><span class="line"> </span><br><span class="line"> <span class="tag"><<span class="name">dependency</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>org.springframework.boot<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>spring-boot-starter-web<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">exclusions</span>></span></span><br><span class="line"> <span class="comment"><!-- Exclude the Tomcat dependency --></span></span><br><span class="line"> <span class="tag"><<span class="name">exclusion</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>org.springframework.boot<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>spring-boot-starter-tomcat<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">exclusion</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">exclusions</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">dependency</span>></span></span><br><span class="line"></span><br><span class="line"> <span class="comment"><!-- Use Undertow instead --></span></span><br><span class="line"> <span class="tag"><<span class="name">dependency</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">groupId</span>></span>org.springframework.boot<span class="tag"></<span class="name">groupId</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">artifactId</span>></span>spring-boot-starter-undertow<span class="tag"></<span class="name">artifactId</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">dependency</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">dependencies</span>></span></span><br></pre></td></tr></table></figure>
<p>一步就完成集成了,当然实际情况还需要在 application 配置文件中加入 Undertow 的更多自定义或者优化配置参数。</p>
<p>Undertow容器的具体配置可以看这两个类:</p>
<ul>
<li>org.springframework.boot.autoconfigure.web.ServerProperties</li>
<li>org.springframework.boot.autoconfigure.web.ServerProperties.Undertow</li>
</ul>
<p>也可以看 Spring Boot 官方文档:</p>
<blockquote>
<p><a href="https://docs.spring.io/spring-boot/docs/2.3.2.RELEASE/reference/htmlsingle/#server-properties">https://docs.spring.io/spring-boot/docs/2.3.2.RELEASE/reference/htmlsingle/#server-properties</a></p>
</blockquote>
<p>上面有所有 Server 配置参数和说明。</p>
<p>再写一个测试方法测试下:</p>
<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> org.springframework.boot.SpringApplication;</span><br><span class="line"><span class="keyword">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;</span><br><span class="line"><span class="keyword">import</span> org.springframework.web.bind.annotation.GetMapping;</span><br><span class="line"><span class="keyword">import</span> org.springframework.web.bind.annotation.RestController;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 微信公众号:Java技术栈</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="meta">@RestController</span></span><br><span class="line"><span class="meta">@SpringBootApplication</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Application</span> </span>{</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="built_in">void</span> <span class="function"><span class="title">main</span>(<span class="params"><span class="built_in">String</span>[] args</span>)</span> {</span><br><span class="line"> SpringApplication.run(Application.class);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="meta">@GetMapping</span>(value = <span class="string">"/undertow/test"</span>)</span><br><span class="line"> <span class="keyword">public</span> <span class="built_in">String</span> <span class="function"><span class="title">undertow</span>(<span class="params"></span>)</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"hello undertow"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>启动 Application:</p>
<p><img src="/2022/3FH16VE/1218593-20200824105306581-130064430.png" alt="img"></p>
<p>如上所示,可以看到 Undertow 的启动日志。</p>
<p>访问测试方法:</p>
<blockquote>
<p><a href="http://localhost:8080/undertow/test">http://localhost:8080/undertow/test</a></p>
</blockquote>
<p><img src="/2022/3FH16VE/1218593-20200824105306889-830058720.png" alt="img"></p>
<p>输出成功,测试完成。</p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>本文对 Undertow 作了一个介绍和集成实战,虽然 Undertow 性能很炸,但你可以去网上找一圈,根本没啥学习资料。</p>
<p>所以,对于学习和一般应用来说,Tomcat 足矣,一方面 Tomcat 学习资料多,另一方面 Tomcat 用的更广泛,很多坑别人帮你踩了,很多漏洞也已经暴露出来了。</p>
<p>那于那些一定要追求极致性能的又不想优化 Tomcat 的,可以考虑使用 Undertow,但同时你要有能力 Hold 住它,需要一定的积累经验,不然出一个问题你线上卡半天显然是不愿意看到的。</p>
<p>最后,网上很多文章说干掉 Tomcat 而要使用 Undertow 的,这就有点夸张,我只能呵呵了,持有保留意见,用啥都行,关键能不能用好。</p>
]]></content>
<categories>
<category>学习</category>
<category>java</category>
</categories>
<tags>
<tag>java</tag>
<tag>spring</tag>
<tag>spring boot</tag>
</tags>
</entry>
<entry>
<title>配置优先级</title>
<url>/2022/22ZWC5R.html</url>
<content><![CDATA[<p>前言<br>本文介绍SpringBoot常用外部化配置方法,其中优先级数值越高,优先级越大,会覆盖优先级底的配置</p>
<p>配置文件方式(优先级3)<br>boostrap.yml内指定spring.cloud.nacos.config.server-addr参数参考如下:</p>
<p>spring:<br> application:<br> name: service-a<br> cloud:<br> nacos:<br> config:<br> server-addr: 127.0.0.1:8848<br> file-extension: yml<br> discovery:<br> server-addr: 127.0.0.1:8848<br>项目打包</p>
<p>target/service-a-0.0.1-SNAPSHOT.jar</p>
<p>Java系统属性方式(优先级6)<br>java -jar target/service-a-0.0.1-SNAPSHOT.jar -Dspring.cloud.nacos.config.server-addr=127.0.0.2:8848<br>命令行参数方式(优先级11)<br>java -jar target/service-a-0.0.1-SNAPSHOT.jar –spring.cloud.nacos.config.server-addr=127.0.0.3:8848<br>系统环境变量参数方式(优先级5)<br>export SPRING_CLOUD_NACOS_CONFIG_SERVERADDR=127.0.0.4:8848<br>java -jar target/service-a-0.0.1-SNAPSHOT.jar<br>注意:环境变量同意采用大写字母,不允许使用.-符号,采用下划线“_”取代点“.” 减号“-”直接删除。</p>
<p>说明:系统环境变量方式自由度高,可配合k8s部署脚本,动态切换到各运行环境</p>
<p>参考如下:</p>
<p>kind: Deployment<br>apiVersion: apps/v1<br>metadata:<br> name: service-a<br>spec:<br> template:<br> spec:<br> containers:<br> - name: service-a<br> env:<br> - name: SPRING_PROFILES_ACTIVE<br> value: prod<br> - name: JAVA_OPTIONS<br> value: ‘-XX:MaxRAMFraction=2’<br> - name: SPRING_CLOUD_NACOS_CONFIG_SERVERADDR<br> value: ‘10.0.0.2:8848’<br> - name: SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR<br> value: ‘10.0.0.2:8848’</p>
<p>加载顺序、优先级参考<br>Spring Boot uses a very particular PropertySource order that is designed to allow sensible<br>overriding of values. Properties are considered in the following order (with values from lower<br>items overriding earlier ones):</p>
<ol>
<li>Default properties (specified by setting SpringApplication.setDefaultProperties).</li>
<li>@PropertySource annotations on your @Configuration classes. Please note that such property<br>sources are not added to the Environment until the application context is being refreshed. This is<br>too late to configure certain properties such as logging.* and spring.main.* which are read<br>before refresh begins.</li>
<li>Config data (such as application.properties files)</li>
<li>A RandomValuePropertySource that has properties only in random.*.</li>
<li>OS environment variables.</li>
<li>Java System properties (System.getProperties()).</li>
<li>JNDI attributes from java:comp/env.</li>
<li>ServletContext init parameters.</li>
<li>ServletConfig init parameters.</li>
<li>Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or<br>system property).</li>
<li>Command line arguments.</li>
<li>properties attribute on your tests. Available on @SpringBootTest and the test annotations for<br>54testing a particular slice of your application.</li>
<li>@TestPropertySource annotations on your tests.</li>
<li>Devtools global settings properties in the $HOME/.config/spring-boot directory when devtools is<br>active.</li>
</ol>
]]></content>
<categories>
<category>学习</category>
<category>java</category>
</categories>
<tags>
<tag>java</tag>
<tag>spring</tag>
<tag>spring boot</tag>
</tags>
</entry>
<entry>
<title>基本概念</title>
<url>/2021/338AHRP.html</url>
<content><![CDATA[<p>系统·子系统</p>
<p>系统:由多个”部件”关联,使用某些”规则”去完成独立组件无法完成的”工作”。</p>
<p>部件:可以是子系统、模块、组件、框架等个体。</p>
<p>规则:是部件协作的规则</p>
<p>工作:指最终完成的事件</p>
<p>(工作 ->部件1,部件2,规则连接)</p>
<p>子系统:是系统的组成部分,本身也是一个系统,子系统依然可以包含子系统(套娃)。</p>
<p>如:售票系统,有产品、票价、订单、登录等相关子系统和模块组成,产品子系统还有更多的架构设计,登录模块可以直接在售票系统中集成。</p>
<p>模块·组件</p>
<p>模块:逻辑划分功能,如:登录注册模块。</p>
<p>组件:物理划分功能,如:鉴权组件(可复用,组件化编程)</p>
<p>我们可以将一个或多个模块的全部或一部分封装为组件,提供单元复用。</p>
<p>框架·架构</p>
<p>如Spring MVC框架,属于MVC架构。</p>
]]></content>
<categories>
<category>学习</category>
<category>架构师之路</category>
</categories>
<tags>
<tag>spring</tag>
<tag>架构设计</tag>
</tags>
</entry>
<entry>
<title>批量插入</title>
<url>/2022/2W88D9Q.html</url>
<content><![CDATA[<p>批量方式插入数据库</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">SqlSession batchSqlSession = <span class="keyword">null</span>;</span><br><span class="line"><span class="keyword">try</span> {</span><br><span class="line"> <span class="comment">// 获取批量方式的sqlsession</span></span><br><span class="line"> batchSqlSession = sessionFactory.openSession(ExecutorType.BATCH, <span class="keyword">false</span>);</span><br><span class="line"> <span class="keyword">for</span> (Ticket ticket : tickets) {</span><br><span class="line"> batchSqlSession.insert(<span class="string">"com.newland.mapper.TicketMapper.insert"</span>,ticket);</span><br><span class="line"> }</span><br><span class="line"> batchSqlSession.commit();</span><br><span class="line">}<span class="keyword">catch</span> (Exception e){</span><br><span class="line"> batchSqlSession.rollback();</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> <span class="keyword">throw</span> e;</span><br><span class="line">}<span class="keyword">finally</span> {</span><br><span class="line"> batchSqlSession.close();</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>学习</category>
<category>数据库</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>图片的由来与存储</title>
<url>/2021/1DC25F7.html</url>
<content><![CDATA[<p>我们知道,计算机中的数据都是0和1,但是展示在我们屏幕上的却是多姿多彩,文字、图片、视频和游戏等等,0和1怎么变成我们从屏幕看到的内容的?</p>
<h2 id="黑白图片"><a href="#黑白图片" class="headerlink" title="黑白图片"></a>黑白图片</h2><p>假定,1=白色,0=黑色,我们现在就可以用0和1组合为一个黑白画面了</p>
<p>我们使用ps新建一个只有0、1的位图</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/1.png" alt="img"></p>
<p>图片新建完成如下(放大后效果)</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/2.png" alt="img"></p>
<p>假定我们直接按1表示白,0表示黑的方式排列,可以得到我们的存储结果</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/3.png" alt="img"></p>
<h2 id="图片存储格式"><a href="#图片存储格式" class="headerlink" title="图片存储格式"></a>图片存储格式</h2><p>我们按 OS/2 bmp 方式进行保存(win位图最初保存方式,且无压缩,这里面去除了ps自动生成的元信息)</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/4.png" alt="img"></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">OS/2 bmp:</span><br><span class="line">0x00-0x01: 2byte 424D表示BMP格式</span><br><span class="line">0x02-0x05: 4byte 此文件大小是0x0030bit(注意高低位,低位在前)</span><br><span class="line">0x06-0x09: 4byte 保留位</span><br><span class="line">0x0A-0x0D: 4byte 偏移量,数据开始起点,图中数据从0x0020开始 </span><br><span class="line">0x0E-0x11: 4byte BITMAPINFOHEADER结构体大小(以下为结构体定义),图中大小为0x000C(OS/2:12 | Windows DIB 40)</span><br><span class="line">0x12-0x13: 2byte 图像宽 图中为4像素</span><br><span class="line">0x14-0x15: 2byte 图像高 图中为2像素 </span><br><span class="line">0x16-0x17: 2byte 图像平面数 图中为1</span><br><span class="line">0x18-0x19: 2byte 一个像素有多少bit 图中为1</span><br><span class="line">0x1A-0x1C: 3byte 0表示的颜色BGR格式,图中为0x000000黑色</span><br><span class="line">0x1D-0x1F: 3byte 1表示的颜色BGR格式,图中为0xFFFFFF白色</span><br></pre></td></tr></table></figure>
<p>由于Windows默认的扫描的最小单位是4byte,所以bmp默认每行对齐是4的倍数,我们可以得到第一行的长度为宽度4*1分辨率*1位(bit)=4bit,对齐为byte时最小单位4byte,所以需要占用4byte,但仅前4个bit填充的值有效。</p>
<p>且bmp是从左下角开始扫码,从左到右,从下到上,二进制转换0101为5,1010为a</p>
<p>最终对应的结果在不对齐的情况下为a5a5,在对齐后补0的情况如下所示:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">A0 00 00 00 50 00 00 00 A0 00 00 00 50 00 00 00</span><br></pre></td></tr></table></figure>
<p>但是ps等软件在生成时会有一些元信息,所以可能会出现对齐为4byte时不是补0的情况,在算法读取时会自动跳过,但是人眼进行查看时,会造成干扰,自己排除掉即可</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/5.png" alt="img"></p>
<p>上图中,6 7F、8 22 56 F3等数据都是干扰数据,可替换为0或者替换为其它内容。</p>
<h2 id="图片放大"><a href="#图片放大" class="headerlink" title="图片放大"></a>图片放大</h2><p>图片放大是在图片使用中最常使用的功能,我们从图片放大这个角度看下黑白颜色后面该怎么处理,尝试放大下面这个长宽2x2的黑白图</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/6.png" alt="img"></p>
<p>我们存储在电脑中的数据可以抽象理解为,长宽2个像素的</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/7.png" alt="img"></p>
<p>当我们将这个放大为长宽4个像素很好处理</p>
<p>![а о 11 е 011 11 ее 11 ее ](<a href="https://mixley.stdcdn.com/2021/07/face/8">https://mixley.stdcdn.com/2021/07/face/8</a> .png)</p>
<p>我们得到的图片还是这样的没什么变化</p>
<p>但是当我们想将这个放大为长宽3像素呢?要知道,我们的图片放大缩小,从来都不是按倍数放大,动不动就直接放大2倍的,几乎没有。</p>
<p>可能我们得到的理想结果是</p>
<p>![e ø.5 1 ø.5 ø.5 ø.s ](<a href="https://mixley.stdcdn.com/2021/07/face/9">https://mixley.stdcdn.com/2021/07/face/9</a> .png)</p>
<p>但是我们的01世界中,不存在0.5这种数据,按四舍五入或者退1法,我们可以得到这样的结果</p>
<p>![1 1 1 ](<a href="https://mixley.stdcdn.com/2021/07/face/10">https://mixley.stdcdn.com/2021/07/face/10</a> .png)</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/11.png" alt="img"></p>
<p>但是这无疑是差距太大了,一个小的图片差距都如此大,更大一点的图片也会出现更大的偏差,无疑只使用黑白两个颜色是无法将图片的细节表述清楚的。</p>
<p>那么我们现在拓展下:0b00表示黑色,0b11表示白色,0b01与0b10表示灰色。这样在放大的时候可以有灰色填充,某些细节可以达到完善的程度了。(这只是一个极端例子,不用深究,我要表达的是0与1黑白中间拓展更多的颜色表达,让图片内容更加丰富)</p>
<h2 id="8位灰阶"><a href="#8位灰阶" class="headerlink" title="8位灰阶"></a>8位灰阶</h2><p>在计算机中,8位是1个字节,1byte=8bit,我们存储的最小单元几乎都是使用byte进行存储,8位灰阶就是将黑白颜色数据继续拓展,都是黑、灰、白色之间,有256个层次组成。</p>
<p>或许五彩斑斓的黑无法实现,但是层次分明的灰是可以达成的。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/12.png" alt="img"></p>
<h2 id="彩色图片"><a href="#彩色图片" class="headerlink" title="彩色图片"></a>彩色图片</h2><p>层次分明的灰再怎么分明,都无法表达我们看到的真实颜色,光学三原色与颜料三原色中红、绿、蓝可以组合出所有颜色,依据无色系黑白灰+彩色系红绿蓝可以组合出任何颜色的特性,我们继续拓展到0和1中的队伍来。</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/13.jpeg" alt="img"></p>
<p>首先 红+绿+蓝,在RGB光学三原色中可以组成白色,所有颜色都不存在,则可以变成黑色。</p>
<p>按上图我们先简单扩展(自定义),3位表示3个颜色0b000表示白色 0b100 表示红色 0b010表示绿色,0b001表示蓝色,0b111是白色,对应的0b010+0b001=0b011,蓝+绿=青,0b110=红+绿=黄,0b101=红+蓝=紫。彩色出现了。</p>
<p>那么现在我们已经有了最基本的颜色后,我们依然需要进行图片的放大</p>
<p>看下面这个四像素的图片,我们依然希望放大</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/14.png" alt="img"></p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/15.png" alt="е10 001 тео оое "></p>
<p>图片的放大肯定不是相加,而是中间是一个过渡的颜色进行替换,我们现在使用最简单粗暴的替换颜色相加取中间值的方式处理。</p>
<p>以红绿中间的填充色为例(0b010+0b100)/2,应该是靠近这两个颜色中的颜色,结果是2.5,我们不能用0b010绿色去填充,也不能用0b100红色去填充,如果使用0b110,黄色,更是相差太远,在一个大的照片的放大过程中,尽量的贴合两边的颜色的中间颜色,应该是棕褐色,既有绿的过渡也需要红的过渡。(下图的展示可能不是很明显,也不很合适,因为图片的放大,极少有长宽2像素放大为长宽3像素这种操作,颜色直接的过渡也不会这么夸张。)</p>
<p><img src="https://mixley.stdcdn.com/2021/07/face/img.png" alt="img"></p>
<p>对于我们棕褐色,在我们刚才的拓展中,是不存在的,正如灰色在01表示的黑白中不存在,所以我们依然需要一个拓展来表达更多的颜色。</p>
<p>我们现在将颜色拓展为6个bit了,0b000000表示黑色,0b111111表示白色,其余的0b1100000是红,0b001100是绿,0b000011是蓝色。第0-2位的00-11中可以表达4种不同程度的红,黑(无红)、淡红、浅红、正红,其余的等同划分。</p>
<p>现在,差不多可以将棕色表达出来了,虽然依然不够细致,我们现在有2^6 = 64种颜色了。</p>
<h2 id="高彩色"><a href="#高彩色" class="headerlink" title="高彩色"></a>高彩色</h2><p>15或16位彩色(高彩色):电脑所用的三原色是红、绿和蓝。在15位彩色中,每种原色有2^5 = 32个层次,共32768种颜色;而在16位彩色中,绿色有2^6=64个,共有65536个颜色</p>
<h2 id="真彩色"><a href="#真彩色" class="headerlink" title="真彩色"></a>真彩色</h2><p>24位彩色(真彩色):每种原色都有256个层次,它们的组合便有256<em>256</em>256种颜色。</p>
<h2 id="32位彩色"><a href="#32位彩色" class="headerlink" title="32位彩色"></a>32位彩色</h2><p>32位彩色:除了24位彩色的颜色外,额外的8位是储存重叠图层的图形资料(alpha频道)。</p>
<p>另外有高动态范围影像(High Dynamic Range Image),这种影像使用超过一般的256色阶来储存影像,通常来说每个像素会分配到32+32+32个bit来储存颜色资讯,也就是说对于每一个原色都使用一个32bit的浮点数来储存.</p>
<h2 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h2><p><a href="https://www.cnblogs.com/gwind/p/8215771.html">各种类型文件头标准编码</a></p>
]]></content>
<categories>
<category>学习</category>
<category>深度</category>
</categories>
<tags>
<tag>mixley</tag>
</tags>
</entry>
<entry>
<title>明史·海瑞传</title>
<url>/2021/1TBZ6GQ.html</url>
<content><![CDATA[<h2 id="明史·海瑞传"><a href="#明史·海瑞传" class="headerlink" title="明史·海瑞传"></a>明史·海瑞传</h2><h3 id="来源声明"><a href="#来源声明" class="headerlink" title="来源声明"></a>来源声明</h3><p>2022届高三一轮复习之文言文整体阅读题目</p>
<p>试卷问题网络位置:<a href="http://cooco.net.cn/question/11748.html">可圈可点(微信收费)</a>、<a href="https://baijiahao.baidu.com/s?id=1694794526031280061">百度百家号</a>,非原创,联系侵删。</p>
<h3 id="原文"><a href="#原文" class="headerlink" title="原文"></a>原文</h3><p>海瑞,字汝贤,琼山人。举乡试。署南平教谕,迁淳安知县。布袍脱粟,令老仆艺蔬自给。<strong>总督胡宗宪尝语人曰昨闻海令为母寿市肉二斤矣都御史鄢懋卿行部过供具甚薄抗言邑小不足容车马懋卿恚甚然素闻瑞名为敛威去</strong>久之,陆光祖为文选,擢瑞户部主事。时世宗享国日久,不视朝,深居西苑,专意斋醮。督抚大吏争上符瑞,礼官辄表贺,瑞独上疏。帝得疏,大怒,抵之地,顾左右曰:“趣执之,无使得遁!”宦官黄锦在侧曰:“此人素有痴名。闻其上疏时,自知触忤当死,市一棺,诀妻子,待罪于朝,僮仆亦奔散无留者,是不遁也。”帝默然。少顷复取读之,日再三,为感动太息,留中者数月。</p>
<p>遂逮瑞下诏狱,究主使者。帝初崩,外庭多未知。提牢主事闻状,以瑞且见用,设酒馔款之。瑞自疑当赴西市,恣饮啖,不顾。主事因附耳语:“宫车适晏驾,先生今即出大用矣。”即大恸,陨绝于地。既释,复故官。帝屡欲召用瑞,执政阴沮之,乃以为南京右都御史。<strong>诸司素偷惰,瑞以身矫之。有御史偶陈戏乐,欲遵太祖法予之杖。</strong>百司惴恐,多患苦之。提学御史房寰恐见纠擿,欲先发,给事中钟宇淳复怂恿,寰再上疏丑诋。瑞亦屡疏乞休,慰留不允。十五年,卒官。瑞无子。卒时,佥都御史王用汲入视,葛帏敝籯,有寒士所不堪者。因泣下,醵金为敛。<strong>小民罢市。丧出江上,白衣冠送者夹岸,酹而哭者百里不绝。</strong>瑞生平为学,以刚为主,因自号刚峰,天下称刚峰先生。故所至力行清丈,颁一条鞭法。意主于利民,而行事不能无偏云。</p>
<p>(节选自《明史·海瑞传》)</p>
<h3 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h3><p>10.下列对文中画波浪线部分的断句,正确的一项是( )</p>
<p>A.总督胡宗宪尝语人曰/昨闻海令为母寿/市肉二斤矣/都御史鄢懋卿行部过/供具甚薄/抗言邑小不足容车马/懋卿恚甚/然素闻瑞名/为敛威去/</p>
<p>B.总督胡宗宪尝语人曰/昨闻海令为母寿/市肉二斤矣/都御史鄢懋卿行部过/供具甚薄/抗言邑小不足容车马/懋卿恚甚然/素闻瑞名/为敛威去/</p>
<p>C.总督胡宗宪尝语人曰/昨闻海令/为母寿市肉二斤矣/都御史鄢懋卿行部过/供具甚薄/抗言邑小不足容车马/懋卿恚甚/然素闻瑞名/为敛威去/</p>
<p>D.总督胡宗宪尝语人曰/昨闻海令/为母寿市肉二斤矣/都御史鄢懋卿行部过/供具甚薄/抗言邑小不足容车马/懋卿恚甚然/素闻瑞名/为敛威去/</p>
<p>11.下列对文中加点词语的相关内容的解说,不正确的一项是( )</p>
<p>A.乡试是中国古代科举考试之一,由各地州、府主持,考生来自全国各地。</p>
<p>B.宦官也称太监,是古代宫中侍奉皇帝及其家属的人员,由阉割后的男子充任。</p>
<p>C.晏驾是帝王死去的委婉说法,“晏”义为晚,晏驾指帝王车驾未能按时发出。</p>
<p>D.执政指掌管国家政事,又指执掌国家大权的重臣,还可作为高级官员的通称。</p>
<p>12.下列对原文有关内容的概括和分析,不正确的一项是( )</p>
<p>A.海瑞生活俭朴,时时关心国事。他担任淳安知县时,布衣粗食,老仆种菜;任职户部时,见皇上深居西苑,不亲理朝政,又独自上奏劝谏。</p>
<p>B.海瑞劝谏皇上,不惧以死报国。皇上得疏大怒,命令火速捉拿,不要让他逃遁,但得知海瑞待罪于朝不会逃跑后,又细读疏文,并感动叹息。</p>
<p>C.海瑞严厉执法,受到小人诋毁。他任南京右都御史时,因要求严明,部下怨恨,部属房寰惧遭揭发,又受怂恿,上疏诋毁,致使海瑞被迫退休。</p>
<p>D.海瑞为人刚直,身后穷困窘迫。他生平以刚为主,虽然一心为民,但行事却有偏颇;他一生清廉自律,家境贫寒,死后竟至靠人凑钱殓葬。</p>
<p>13.把文中画横线的句子翻译成现代汉语。</p>
<p>(1)诸司素偷惰,瑞以身矫之。有御史偶陈戏乐,欲遵太祖法予之杖。</p>
<p>(2)小民罢市。丧出江上,白衣冠送者夹岸,酹而哭者百里不绝。</p>
<p>14.海瑞在向明世宗上疏前,为什么要事先“市一棺,诀妻子”?请简要说明。</p>
<h3 id="阅读答案"><a href="#阅读答案" class="headerlink" title="阅读答案"></a>阅读答案</h3><h4 id="【答案】"><a href="#【答案】" class="headerlink" title="【答案】"></a>【答案】</h4><p>10.A</p>
<p>11.A</p>
<p>12.C</p>
<p>13.(1)众多官吏一向偷安怠惰,海瑞以自己的行动加以纠正。有御史偶尔演戏奏乐,海瑞将要遵照太祖法规对他杖责。</p>
<p>(2)市民停业悼念。灵柩经过江面,民众穿戴白衣帽两岸送行,洒酒祭奠而哭的人百里不绝。</p>
<p>14.①自知触怒皇帝将死;②抱定必死的决心。</p>
<h4 id="【分析】"><a href="#【分析】" class="headerlink" title="【分析】"></a>【分析】</h4><p>10.本题考查文言文断句能力。</p>
<p>解答本题注意各选项间不同之处。“昨闻海令为母寿”,是一个完整的句子,中间不宜断开,排除C项、D项;“然”表转折,与后文关系密切,所以应在它之前断开,排除B项。</p>
<p>画波浪线部分句意为:总督胡宗宪曾经告诉别人说:“昨天我听说海县令为母亲祝寿,只买了二斤肉。”都御史(官职名)鄢懋卿从淳安县经过,海瑞对他们的招待都很简陋,说淳安县地方太小容不下车马。鄢懋卿非常愤恨。但是一直都听说过海瑞的名声,只好收敛威风离开了。</p>
<p>故选A。</p>
<p>11.本题考查文化常识。</p>
<p>A项,“考生来自全国各地”错误,考生为本地人。故选A。</p>
<p>12.</p>
<p>本题考查筛选并整合文中信息,归纳内容要点、概括中心意思的能力。</p>
<p>C项,“致使海瑞被迫退休”说法错误,原文为“瑞亦屡疏乞休,慰留不允”,皇上劝慰他,不让他辞官,并未“被迫退休”。</p>
<p>故选C。</p>
<p>13.本题考查理解并翻译文中的句子的能力。</p>
<p>(1)中“素”,一向;“矫”,矫正,纠正;“杖”,名词用作动词,杖责。</p>
<p>(2)中“罢市”,停业;“丧”,灵柩;“白衣冠”,名词用作动词,穿白衣戴白帽;“酹”,洒酒祭奠。</p>
<p>14.本题考查筛选并整合文章信息。</p>
<p>由“自知触忤当死”可知他自知触怒皇帝将死,所以买了一口棺材,诀别妻子儿女;</p>
<p>由“待罪于朝,僮仆亦奔散无留者,是不遁也”可知他抱定了必死的决心,并不打算逃走,而是遣散童仆,等待皇上降罪。</p>
<h3 id="译文"><a href="#译文" class="headerlink" title="译文"></a>译文</h3><p>海瑞,字汝贤,琼山人。乡试中举。(海瑞)代理南平县教谕,升任淳安县知县,在任上穿布衣,吃粗米,让家中老仆种菜自给。总督胡宗宪曾经告诉别人说:“昨天我听说海县令为母亲祝寿,只买了二斤肉。”都御史(官职名)鄢懋卿从淳安县经过,海瑞对他们的招待都很简陋,说淳安县地方太小容不下车马。鄢懋卿非常愤恨。但是一直都听说过海瑞的名声,只好收敛威风离开了。过了一段时间,陆光祖任吏部文选清吏司郎中,他提拔海瑞为户部主事。当时世宗在位时日已久,不再上朝听政,深居皇宫西苑,专心一意斋戒祀神。总督巡抚大臣争相进献各种祥瑞征兆,礼部官员往往就此上表祝贺,唯独海瑞一人上疏。世宗皇帝看了奏章大怒,把它扔到地下,回头对身边的宦官说:“赶紧把他抓起来,别让他跑了。”宦官黄锦在一旁说:“此人一向有痴名。听说他上疏时,自己知道冒犯皇上难免一死,就买了一口棺材,诀别妻子儿女,在朝廷待罪,家中僮仆也都是打发走了没有留一个,这表明他并不打算逃走。”世宗皇帝沉默不语。</p>
<p>过了一会儿,皇帝又拿出奏章来看,(就这样)一天之中看了两三次,被感动而叹息,将它留在宫中数月。于是命令逮捕海瑞,关进诏狱,追究主使他上疏的人。世宗刚去世时,外界多不知道。而监狱主事听到消息,估计海瑞将会受到任用,因此办了酒菜款待海瑞。海瑞怀疑以为要赴西市刑场斩首,于是就恣意饮食,没有顾及其它。提牢主事这时贴着海瑞耳语:“皇上适才已经驾崩,您马上就要出狱,受到重用了。”海瑞随即十分哀恸,晕倒在地。海瑞获释后,恢复了原来的官职。神宗数次想召用海瑞,但被执政的大臣暗地里阻止了,只当了南京右都御史。众多官吏一向偷安怠惰,海瑞以自己的行动加以纠正。有御史偶尔演戏奏乐,海瑞将要遵照太祖法规对他杖责。</p>
<p>官员们惶恐不安,多对此叫苦不迭。提学御史房寰,担心被检举揭露,想先下手发难,给事中钟宇淳又从中怂恿,房寰便二次上疏诬蔑海瑞。海瑞也屡次上疏要求告老回家,皇上劝慰他,不让他辞官。万历十五年,海瑞死于南京任上。海瑞没有儿子。去世之时,佥都御史王用汲前来探视,见他房中只有葛布做的帐子和空箱笼,过着一般寒士都不能忍受的生活。因而感动得流了泪,出面凑钱作为敛棺之用。市民停业悼念。灵柩经过江面,民众穿戴白衣帽两岸送行,洒酒祭奠而哭的人百里不绝。海瑞平生治学,以刚为主,因此自号为刚峰,天下人称他为刚峰先生。所以所到之处均致力于清丈土地,颁行一条鞭法。他的思想主要在于利民,而行事很难避免会出现一些偏差。</p>
]]></content>
<categories>
<category>学习</category>
<category>语文老师</category>
</categories>
</entry>
<entry>
<title>nacos</title>
<url>/2022/145360.html</url>
<content><![CDATA[<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">docker pull nacos/nacos-server</span><br></pre></td></tr></table></figure>
<p><a href="https://www.cnblogs.com/niunafei/p/12803965.html">https://www.cnblogs.com/niunafei/p/12803965.html</a></p>
<p>url后缀需要添加:&serverTimezone=UTC</p>
<p>完整:</p>
<figure class="highlight properties"><table><tr><td class="code"><pre><span class="line"><span class="attr">MYSQL_SERVICE_DB_PARAM</span>=<span class="string">characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=UTC</span></span><br><span class="line"><span class="attr">SPRING_DATASOURCE_PLATFORM</span>=<span class="string">mysql</span></span><br><span class="line"><span class="attr">MYSQL_DATABASE_NUM</span>=<span class="string">1</span></span><br><span class="line"><span class="attr">MYSQL_SERVICE_HOST</span>=<span class="string">128.0.0.172</span></span><br><span class="line"><span class="attr">MYSQL_SERVICE_PORT</span>=<span class="string">3307</span></span><br><span class="line"><span class="attr">MYSQL_SERVICE_DB_NAME</span>=<span class="string">nacos</span></span><br><span class="line"><span class="attr">MYSQL_SERVICE_USER</span>=<span class="string">root</span></span><br><span class="line"><span class="attr">MYSQL_SERVICE_PASSWORD</span>=<span class="string">1234</span></span><br></pre></td></tr></table></figure>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">-e PREFER_HOST_MODE=hostname \</span><br><span class="line">-e MODE=standalone \</span><br><span class="line">-e SPRING_DATASOURCE_PLATFORM=mysql \</span><br><span class="line">-e MYSQL_MASTER_SERVICE_HOST=127.0.0.1 \</span><br><span class="line">-e MYSQL_MASTER_SERVICE_PORT=3306 \</span><br><span class="line">-e MYSQL_MASTER_SERVICE_USER=nacos_config \</span><br><span class="line">-e MYSQL_MASTER_SERVICE_PASSWORD=DdsNLrPeRfZiDGNE \</span><br><span class="line">-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \</span><br><span class="line">-e MYSQL_SLAVE_SERVICE_HOST=127.0.0.1 \</span><br><span class="line">-p 8848:8848 \</span><br><span class="line">--name nacos \</span><br><span class="line">--restart=always \</span><br><span class="line">nacos/nacos-server</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">开启鉴权,切换端口</span></span><br><span class="line">docker run -d \</span><br><span class="line">-e PREFER_HOST_MODE=hostname \</span><br><span class="line">-e MODE=standalone \</span><br><span class="line">-e SPRING_DATASOURCE_PLATFORM=mysql \</span><br><span class="line">-e MYSQL_DATABASE_NUM=1 \</span><br><span class="line">-e MYSQL_SERVICE_HOST=10.177.43.37 \</span><br><span class="line">-e MYSQL_SERVICE_PORT=3306 \</span><br><span class="line">-e MYSQL_SERVICE_USER=root \</span><br><span class="line">-e MYSQL_SERVICE_PASSWORD=1234 \</span><br><span class="line">-e MYSQL_SERVICE_DB_NAME=nacos \</span><br><span class="line">-e NACOS_AUTH_CACHE_ENABLE=true \</span><br><span class="line">-e NACOS_AUTH_ENABLE=true \</span><br><span class="line">-e NACOS_APPLICATION_PORT=18848 \</span><br><span class="line">-p 18848:18848 \</span><br><span class="line">--name nacosAuth \</span><br><span class="line">--restart=always \</span><br><span class="line">nacos/nacos-server</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>运维</category>
<category>docker</category>
</categories>
<tags>
<tag>spring</tag>
</tags>
</entry>
<entry>
<title>常用工具精品软件(持续更新)</title>
<url>/2021/32T7DFH.html</url>
<content><![CDATA[<h2 id="系统高效快捷键"><a href="#系统高效快捷键" class="headerlink" title="系统高效快捷键"></a>系统高效快捷键</h2><table>
<thead>
<tr>
<th>Windows 部分高效快捷键</th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>打开文件管理器</td>
<td>Win键 + E</td>
</tr>
<tr>
<td>剪贴板历史功能(还能固定某些选项)</td>
<td>Win键 + V</td>
</tr>
<tr>
<td>打开高级用户功能(等同右击开始)</td>
<td>Win键 + X</td>
</tr>
<tr>
<td>显示桌面</td>
<td>Win键 + D</td>
</tr>
<tr>
<td>Xbox游戏录制工具栏(虽然是游戏工具栏,但是提供录屏、截屏)</td>
<td>Win键 + G</td>
</tr>
<tr>
<td>截屏(推荐,可延迟截图,可编辑)</td>
<td>Win键 + Shift + S</td>
</tr>
<tr>
<td>录屏(推荐,录屏后可再Win+G中编辑导出)</td>
<td>Win键 + Alt + R</td>
</tr>
<tr>
<td>运行(可输入命令行)</td>
<td>Win键 + R</td>
</tr>
<tr>
<td>Windows搜索(开启搜索增强后,文件搜索更方便)</td>
<td>Win键 + S</td>
</tr>
<tr>
<td>任务管理器</td>
<td>Ctrl+Shift+Esc</td>
</tr>
</tbody></table>
<h2 id="装机必备"><a href="#装机必备" class="headerlink" title="装机必备"></a>装机必备</h2><h3 id="uTools-免费效率神器"><a href="#uTools-免费效率神器" class="headerlink" title="uTools 免费效率神器"></a><a href="https://u.tools/">uTools</a> 免费效率神器</h3><p>对我而言,最常用的是搜索软件和翻译【大雾】,这种类似的效率神器还有<a href="https://docs.microsoft.com/zh-cn/windows/powertoys/">PowerToys</a>微软家的(功能不多)、<a href="https://getquicker.net/">Quicker</a>国产指尖工具集(这个可以与其它工具结合,设计感不强需要一段时间上手,但是很强大)、<a href="https://github.com/Wox-launcher/Wox">Wox</a>开源win下<strong>Spotlight</strong>神器(和uTools功能重合)……当然,嫌弃麻烦的可能使用Win+S直接打开windows搜索功能完成一切,毕竟现在win的搜索功能也不差了,而mac下面有Spotlight了。</p>
<p>快捷键 「Alt + Space」,功能:搜索软件、使用插件提供的场景功能</p>
<h3 id="7-zip-开源压缩软件"><a href="#7-zip-开源压缩软件" class="headerlink" title="7-zip 开源压缩软件"></a><a href="https://sparanoid.com/lab/7z/">7-zip</a> 开源压缩软件</h3><p>这里必须说一句,7z养活了一大票的国产软件,实际上按道理使用开源协议写的程序也应该开源的,但是实际国产某些X压不仅不开源,一开始还夹带私货让7z或者其它压缩软件无法兼容。后续,现在的国产压缩软件不再去搞什么“独家”压缩算法了,现在兼容性都不错。开源与不开源的争论不好说,如果现在都这样做:使用社区开源的产品做收费,不贡献代码去提升社区产品,甚至想把社区产品击垮。这样的行为真是,没法说。。</p>
<h3 id="QuickLook-开源空格键预览神器-仅Win-Mac本身有空格预览功能"><a href="#QuickLook-开源空格键预览神器-仅Win-Mac本身有空格预览功能" class="headerlink" title="QuickLook 开源空格键预览神器(仅Win,Mac本身有空格预览功能)"></a><a href="https://pooi.moe/QuickLook/">QuickLook </a> 开源空格键预览神器(仅Win,Mac本身有空格预览功能)</h3><p>空格键可以预览声音、视频、macdown、doc、excel等等,无需下载安装对应的软件,只需要在对应文件上按下空格。</p>
<p>office文档需要插件,<a href="https://github.com/QL-Win/QuickLook/wiki/Available-Plugins%EF%BC%8C%E4%B8%8B%E8%BD%BD%E5%90%8E%E7%A9%BA%E6%A0%BC%E9%94%AE%E5%AE%89%E8%A3%85">https://github.com/QL-Win/QuickLook/wiki/Available-Plugins,下载后空格键安装</a></p>
<h2 id="编辑器"><a href="#编辑器" class="headerlink" title="编辑器"></a>编辑器</h2><h3 id="VsCode-微软开源编辑器-VSCodium前者的开源编译版"><a href="#VsCode-微软开源编辑器-VSCodium前者的开源编译版" class="headerlink" title="VsCode 微软开源编辑器/VSCodium前者的开源编译版"></a><a href="https://code.visualstudio.com/">VsCode </a>微软开源编辑器/<a href="https://vscodium.com/">VSCodium</a>前者的开源编译版</h3><p>大名鼎鼎的VsCode,记事本超级替代工具,编码人员神器,超多插件。介意微软遥测等功能的,可以使用开源编译版本VSCodium,VSCodium已经是能找到的最”干净”的vscode了 。</p>
<p>VsCode缺陷:正则替换大文件会卡顿</p>
<h3 id="Typora-MacDown编辑神器"><a href="#Typora-MacDown编辑神器" class="headerlink" title="Typora MacDown编辑神器"></a><a href="https://typora.io/">Typora</a> MacDown编辑神器</h3><p>已经是bate版N多年的”免费”使用的MacDown编辑器,所见即所得。缺陷是非常长的文档编写时会卡顿,但是这个缺陷我从未碰到,因为没有写很长的文章,长到6k字以上的。</p>
<h2 id="办公神器"><a href="#办公神器" class="headerlink" title="办公神器"></a>办公神器</h2><h3 id="scrcpy-开源投屏神器-QtScrcpy-基于前者二开的开源投屏神器-荐!"><a href="#scrcpy-开源投屏神器-QtScrcpy-基于前者二开的开源投屏神器-荐!" class="headerlink" title="scrcpy 开源投屏神器/QtScrcpy 基于前者二开的开源投屏神器(荐!)"></a><a href="https://github.com/Genymobile/scrcpy">scrcpy</a> 开源投屏神器/<a href="https://github.com/barry-ran/QtScrcpy">QtScrcpy</a> 基于前者二开的开源投屏神器(荐!)</h3><p>USB(或通过TCP/IP)连接Android设备,并进行显示和控制,不需要root权限,不需手机安装apk。电脑上可以直接点击操作手机哦!</p>
<table>
<thead>
<tr>
<th>关键点</th>
<th>scrcpy</th>
<th>QtScrcpy</th>
</tr>
</thead>
<tbody><tr>
<td>界面</td>
<td>sdl</td>
<td>qt</td>
</tr>
<tr>
<td>视频解码</td>
<td>ffmpeg</td>
<td>ffmpeg</td>
</tr>
<tr>
<td>视频渲染</td>
<td>sdl</td>
<td>opengl</td>
</tr>
<tr>
<td>跨平台基础设施</td>
<td>自己封装</td>
<td>Qt提供</td>
</tr>
<tr>
<td>编程语言</td>
<td>C</td>
<td>C++</td>
</tr>
<tr>
<td>编程方式</td>
<td>同步</td>
<td>异步</td>
</tr>
<tr>
<td>按键映射</td>
<td>不支持自定义</td>
<td>支持自定义按键映射</td>
</tr>
<tr>
<td>编译方式</td>
<td>meson+gradle</td>
<td>Qt Creator</td>
</tr>
</tbody></table>
<p><a href="http://ffcell.com/">Excel工具箱</a>——插件-方方格子 工作室-做最专业的Excel工具箱 </p>
<p>专业的Excel工具箱</p>
<h2 id="程序员必备"><a href="#程序员必备" class="headerlink" title="程序员必备"></a>程序员必备</h2><h3 id="GitHub-Proxy-GitHub下载加速-在线"><a href="#GitHub-Proxy-GitHub下载加速-在线" class="headerlink" title="GitHub Proxy GitHub下载加速(在线)"></a><a href="https://ghproxy.com/">GitHub Proxy</a> GitHub下载加速(在线)</h3><p>良心加速、速度稳定、快,可以去作者那里点点赞。</p>
<h3 id="dev-sidecar-开发者边车-开源开发者便利工具"><a href="#dev-sidecar-开发者边车-开源开发者便利工具" class="headerlink" title="dev-sidecar 开发者边车 开源开发者便利工具"></a><a href="https://github.com/docmirror/dev-sidecar">dev-sidecar</a> 开发者边车 开源开发者便利工具</h3><p>这个车是个便车,实际上也包含了GitHub访问加速、下载加速等功能,代理功能的话你可以慢慢从代码中周旋一下,大致步骤:<br>1、找到注释<br>2、URL解码注释内容<br>3、Base64解码2中内容<br>4、打开解码后网址<br>5、找到网址中的二维码并扫码界面二维码中的文字</p>
<h3 id="glogg-大日志查看-klogg-大日志查看forked-from-glogg"><a href="#glogg-大日志查看-klogg-大日志查看forked-from-glogg" class="headerlink" title="glogg 大日志查看 / klogg 大日志查看forked from glogg"></a><a href="http://glogg.bonnefon.org/download.html">glogg</a> 大日志查看 / <a href="https://github.com/variar/klogg">klogg</a> 大日志查看forked from glogg</h3><p>klogg有便携版,其余区别没太大。</p>
<h3 id="LargeFileSplitter-大文件分割-仅win"><a href="#LargeFileSplitter-大文件分割-仅win" class="headerlink" title="LargeFileSplitter 大文件分割(仅win)"></a><a href="https://github.com/philoushka/LargeFileSplitter">LargeFileSplitter</a> 大文件分割(仅win)</h3><p>11kb,操作简单</p>
<p><a href="https://www.charlesproxy.com/">Charles</a>——web抓包工具,收费(全平台)</p>
<p>简单易用,神秘代码F12 <!-- [PJ文件](https://cloud.189.cn/t/EfMRVnzAnIZb) 访问码:rgc2 --></p>
<p><a href="https://www.telerik.com/fiddler">fiddler</a>——web抓包工具,免费(仅win) </p>
<p>简单易用,仅使用win的推荐使用</p>
<p><a href="https://www.wireshark.org/">Wireshark</a>——抓包神器,dddd,全平台</p>
<p>抓包工具,可抓TCP,强大,但是对于仅web抓包来讲操作稍微复杂点。适用于抓底层协议包。</p>
<h2 id="设计师必备"><a href="#设计师必备" class="headerlink" title="设计师必备"></a>设计师必备</h2><p><a href="https://www.adobe.com/cn/">adobe全家桶</a> 设计师绕不开的神话,神秘代码F12 <!--
2021 SP版和大师版实时更新。
天翼:[*O*网页链接](http://t.cn/A6f0W16M) 访问码:0aaw
百度:[*O*网页链接](http://t.cn/A6fMrOmc) 提取码:gvm5
默认密码为[@vposy](https://weibo.com/n/vposy?from=feed&loc=at)