-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
2680 lines (2412 loc) · 596 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>官宣!宇宙贺岁片——总有一颗星辰属于你</title>
<url>/posts/2120410127.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><div class="note orange flat"><p>视频由星联CSVA创作<br>来源链接:星联CSVA官方微博和微信公众号</p>
</div>
<p><img src="/posts/2120410127/img_2.png" alt="描述文字"></p>
<center>
<p>斗转星移<br>地球又绕太阳转了一圈</p>
<p>过去的2023<br>你的脸上写着 <span style="background-color: #54b6a6; padding: 1px;"> ? 望</span><br>这是一则填空题<br>每个人自有答案</p>
<p>如果你不幸填成了<br><span style="background-color: #54b6a6; padding: 5px;">失 望</span><br>我想告诉你<br>传说星辰可以治愈<br>要不去仰望一下试试</p>
<p>2024依然未知<br>不要紧<br>未知本是宇宙的常态<br>惟一已知的是<br>地球又会绕太阳再转一圈<br>那时的填空题<br>但愿你能开心地填成<br><span style="background-color: #54b6a6; padding: 5px;">希 望</span></p>
<p>时间是冰冷的机器<br>你无法阻拦星球转动<br>但同样无法阻拦的是——<br>你可以永葆童心<br>对日月星辰<br>保持好奇和热爱</p>
<p>伴着21位孩子的童声<br>伴着2024新年的钟声<br>星联CSVA<br>官宣<br>宇宙贺岁片<br>正式发布</p>
<p>这是一份<br>来自宇宙的祝福——<br><span style="background-color: #54b6a6; padding: 5px;">2024</span><br><span style="background-color: #54b6a6; padding: 5px;">总有一颗星辰属于你</span></p>
</center>
<div class="bilibili">
<iframe src="//player.bilibili.com/player.html?aid=751242337&bvid=BV1dk4y1Q7Jn&cid=1404477617&p=1&high_quality=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"> </iframe>
</div>
<p style="font-size: 16px;"><strong>精美壁纸级的台历内页大放送!下面大片内页开始啦:</strong></p>
<p><img src="/posts/2120410127/img_3.png" alt="描述文字"><br><img src="/posts/2120410127/img_4.png" alt="描述文字"><br><img src="/posts/2120410127/img_5.png" alt="描述文字"><br><img src="/posts/2120410127/img_6.png" alt="描述文字"><br><img src="/posts/2120410127/img_7.png" alt="描述文字"><br><img src="/posts/2120410127/img_8.png" alt="描述文字"><br><img src="/posts/2120410127/img_9.png" alt="描述文字"><br><img src="/posts/2120410127/img_10.png" alt="描述文字"><br><img src="/posts/2120410127/img_11.png" alt="描述文字"><br><img src="/posts/2120410127/img_12.png" alt="描述文字"><br><img src="/posts/2120410127/img_13.png" alt="描述文字"><br><img src="/posts/2120410127/img_14.png" alt="描述文字"><br><img src="/posts/2120410127/img_15.png" alt="描述文字"><br><img src="/posts/2120410127/img_16.png" alt="描述文字"><br><img src="/posts/2120410127/img_17.png" alt="描述文字"><br><img src="/posts/2120410127/img_18.png" alt="描述文字"><br><img src="/posts/2120410127/img_19.png" alt="描述文字"><br><img src="/posts/2120410127/img_20.png" alt="描述文字"><br><img src="/posts/2120410127/img_21.png" alt="描述文字"><br><img src="/posts/2120410127/img_22.png" alt="描述文字"><br><img src="/posts/2120410127/img_23.png" alt="描述文字"><br><img src="/posts/2120410127/img_24.png" alt="描述文字"><br><img src="/posts/2120410127/img_25.png" alt="描述文字"><br><img src="/posts/2120410127/img_26.png" alt="描述文字"><br><img src="/posts/2120410127/img_27.png" alt="描述文字"><br><img src="/posts/2120410127/img_28.png" alt="描述文字"><br><img src="/posts/2120410127/img_29.png" alt="描述文字"><br><img src="/posts/2120410127/img_30.png" alt="描述文字"><br><img src="/posts/2120410127/img_31.png" alt="描述文字"><br><img src="/posts/2120410127/img_32.png" alt="描述文字"><br><img src="/posts/2120410127/img_33.png" alt="描述文字"><br><img src="/posts/2120410127/img_34.png" alt="描述文字"><br><img src="/posts/2120410127/img_35.png" alt="描述文字"><br><img src="/posts/2120410127/img_36.png" alt="描述文字"><br><img src="/posts/2120410127/img_37.png" alt="描述文字"><br><img src="/posts/2120410127/img_38.png" alt="描述文字"><br><img src="/posts/2120410127/img_39.png" alt="描述文字"><br><img src="/posts/2120410127/img_40.png" alt="描述文字"><br><img src="/posts/2120410127/img_41.png" alt="描述文字"><br><img src="/posts/2120410127/img_42.png" alt="描述文字"><br><img src="/posts/2120410127/img_43.png" alt="描述文字"><br><img src="/posts/2120410127/img_44.png" alt="描述文字"><br><img src="/posts/2120410127/img_45.png" alt="描述文字"><br><img src="/posts/2120410127/img_46.png" alt="描述文字"><br><img src="/posts/2120410127/img_47.png" alt="描述文字"><br><img src="/posts/2120410127/img_48.png" alt="描述文字"><br><img src="/posts/2120410127/img_49.png" alt="描述文字"><br><img src="/posts/2120410127/img_50.png" alt="描述文字"><br><img src="/posts/2120410127/img_51.png" alt="描述文字"><br><img src="/posts/2120410127/img_52.png" alt="描述文字"><br><img src="/posts/2120410127/img_53.png" alt="描述文字"><br><img src="/posts/2120410127/img_54.png" alt="描述文字"><br><img src="/posts/2120410127/img_55.png" alt="描述文字"><br><img src="/posts/2120410127/img_56.png" alt="描述文字"><br><img src="/posts/2120410127/img_57.png" alt="描述文字"><br><img src="/posts/2120410127/img_58.png" alt="描述文字"><br><img src="/posts/2120410127/img_59.png" alt="描述文字"><br><img src="/posts/2120410127/img_60.png" alt="描述文字"><br><img src="/posts/2120410127/img_61.png" alt="描述文字"><br><img src="/posts/2120410127/img_62.png" alt="描述文字"><br><img src="/posts/2120410127/img_63.png" alt="描述文字"><br><img src="/posts/2120410127/img_64.png" alt="描述文字"><br><img src="/posts/2120410127/img_65.png" alt="描述文字"><br><img src="/posts/2120410127/img_66.png" alt="描述文字"><br><img src="/posts/2120410127/img_67.png" alt="描述文字"><br><img src="/posts/2120410127/img_68.png" alt="描述文字"><br><img src="/posts/2120410127/img_69.png" alt="描述文字"><br><img src="/posts/2120410127/img_70.png" alt="描述文字"><br><img src="/posts/2120410127/img_71.png" alt="描述文字"><br><img src="/posts/2120410127/img_72.png" alt="描述文字"><br><img src="/posts/2120410127/img_73.png" alt="描述文字"><br><img src="/posts/2120410127/img_74.png" alt="描述文字"><br><img src="/posts/2120410127/img_75.png" alt="描述文字"><br><img src="/posts/2120410127/img_76.png" alt="描述文字"><br><img src="/posts/2120410127/img_77.png" alt="描述文字"><br><img src="/posts/2120410127/img_78.png" alt="描述文字"><br><img src="/posts/2120410127/img_79.png" alt="描述文字"><br><img src="/posts/2120410127/img_80.png" alt="描述文字"><br><img src="/posts/2120410127/img_81.png" alt="描述文字"><br><img src="/posts/2120410127/img_82.png" alt="描述文字"><br><img src="/posts/2120410127/img_83.png" alt="描述文字"><br><img src="/posts/2120410127/img_84.png" alt="描述文字"><br><img src="/posts/2120410127/img_85.png" alt="描述文字"><br><img src="/posts/2120410127/img_86.png" alt="描述文字"></p>
]]></content>
</entry>
<entry>
<title>Hexo图片显示问题的解决记录</title>
<url>/posts/998115418.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><p>遇到Hexo图片无法显示的问题,刚开始觉得只是小事,没太在意。但解决起来却出乎意料地费劲,最终参考了某位博主的方法,问题得以解决。</p>
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>最近尝试了一个新的方法,将图片放在与Hexo博客同名的文件夹下,并通过简洁的方式在博客中引用。我已经安装了hexo-asset-image插件,同时将post_asset_folder设置为true,但无论是使用<code>![](img.jpg)</code>的格式还是<code>{% asset_img example.jpg This is an example image %}</code>的格式,图片都无法正常显示。为了解决这个问题,我在谷歌上搜索了很久,终于找到了解决方案,成功解决了这个问题。</p>
<h1 id="解决步骤"><a href="#解决步骤" class="headerlink" title="解决步骤"></a>解决步骤</h1><ol>
<li>打开_config.yml文件,修改以下内容的目的是为了在新建文章时自动创建一个与文章名相同的文件夹,方便存放相关图片文件。</li>
</ol>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure>
<ol start="2">
<li>为了实现图片路径的转换,我们需要安装一个名为hexo-asset-image的插件。</li>
</ol>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">npm install hexo-asset-image --save</span><br></pre></td></tr></table></figure>
<ol start="3">
<li>打开/node_modules/hexo-asset-image/index.js文件,并将其中的内容替换为下面的代码。</li>
</ol>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="meta">'use strict'</span>;</span><br><span class="line"><span class="keyword">var</span> cheerio = <span class="built_in">require</span>(<span class="string">'cheerio'</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">getPosition</span>(<span class="params">str, m, i</span>) {</span><br><span class="line"> <span class="keyword">return</span> str.<span class="title function_">split</span>(m, i).<span class="title function_">join</span>(m).<span class="property">length</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> version = <span class="title class_">String</span>(hexo.<span class="property">version</span>).<span class="title function_">split</span>(<span class="string">'.'</span>);</span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">filter</span>.<span class="title function_">register</span>(<span class="string">'after_post_render'</span>, <span class="keyword">function</span>(<span class="params">data</span>){</span><br><span class="line"> <span class="keyword">var</span> config = hexo.<span class="property">config</span>;</span><br><span class="line"> <span class="keyword">if</span>(config.<span class="property">post_asset_folder</span>){</span><br><span class="line"> <span class="keyword">var</span> link = data.<span class="property">permalink</span>;</span><br><span class="line"> <span class="keyword">if</span>(version.<span class="property">length</span> > <span class="number">0</span> && <span class="title class_">Number</span>(version[<span class="number">0</span>]) == <span class="number">3</span>)</span><br><span class="line"> <span class="keyword">var</span> beginPos = <span class="title function_">getPosition</span>(link, <span class="string">'/'</span>, <span class="number">1</span>) + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">var</span> beginPos = <span class="title function_">getPosition</span>(link, <span class="string">'/'</span>, <span class="number">3</span>) + <span class="number">1</span>;</span><br><span class="line"> <span class="comment">// In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html".</span></span><br><span class="line"> <span class="keyword">var</span> endPos = link.<span class="title function_">lastIndexOf</span>(<span class="string">'/'</span>) + <span class="number">1</span>;</span><br><span class="line"> link = link.<span class="title function_">substring</span>(beginPos, endPos);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> toprocess = [<span class="string">'excerpt'</span>, <span class="string">'more'</span>, <span class="string">'content'</span>];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">var</span> i = <span class="number">0</span>; i < toprocess.<span class="property">length</span>; i++){</span><br><span class="line"> <span class="keyword">var</span> key = toprocess[i];</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">var</span> $ = cheerio.<span class="title function_">load</span>(data[key], {</span><br><span class="line"> <span class="attr">ignoreWhitespace</span>: <span class="literal">false</span>,</span><br><span class="line"> <span class="attr">xmlMode</span>: <span class="literal">false</span>,</span><br><span class="line"> <span class="attr">lowerCaseTags</span>: <span class="literal">false</span>,</span><br><span class="line"> <span class="attr">decodeEntities</span>: <span class="literal">false</span></span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> $(<span class="string">'img'</span>).<span class="title function_">each</span>(<span class="keyword">function</span>(<span class="params"></span>){</span><br><span class="line"> <span class="keyword">if</span> ($(<span class="variable language_">this</span>).<span class="title function_">attr</span>(<span class="string">'src'</span>)){</span><br><span class="line"> <span class="comment">// For windows style path, we replace '\' to '/'.</span></span><br><span class="line"> <span class="keyword">var</span> src = $(<span class="variable language_">this</span>).<span class="title function_">attr</span>(<span class="string">'src'</span>).<span class="title function_">replace</span>(<span class="string">'\\'</span>, <span class="string">'/'</span>);</span><br><span class="line"> <span class="keyword">if</span>(!<span class="regexp">/http[s]*.*|\/\/.*/</span>.<span class="title function_">test</span>(src) &&</span><br><span class="line"> !<span class="regexp">/^\s*\//</span>.<span class="title function_">test</span>(src)) {</span><br><span class="line"> <span class="comment">// For "about" page, the first part of "src" can't be removed.</span></span><br><span class="line"> <span class="comment">// In addition, to support multi-level local directory.</span></span><br><span class="line"> <span class="keyword">var</span> linkArray = link.<span class="title function_">split</span>(<span class="string">'/'</span>).<span class="title function_">filter</span>(<span class="keyword">function</span>(<span class="params">elem</span>){</span><br><span class="line"> <span class="keyword">return</span> elem != <span class="string">''</span>;</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">var</span> srcArray = src.<span class="title function_">split</span>(<span class="string">'/'</span>).<span class="title function_">filter</span>(<span class="keyword">function</span>(<span class="params">elem</span>){</span><br><span class="line"> <span class="keyword">return</span> elem != <span class="string">''</span> && elem != <span class="string">'.'</span>;</span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">if</span>(srcArray.<span class="property">length</span> > <span class="number">1</span>)</span><br><span class="line"> srcArray.<span class="title function_">shift</span>();</span><br><span class="line"> src = srcArray.<span class="title function_">join</span>(<span class="string">'/'</span>);</span><br><span class="line"> $(<span class="variable language_">this</span>).<span class="title function_">attr</span>(<span class="string">'src'</span>, config.<span class="property">root</span> + link + src);</span><br><span class="line"> <span class="variable language_">console</span>.<span class="property">info</span>&&<span class="variable language_">console</span>.<span class="title function_">info</span>(<span class="string">"update link as:-->"</span>+config.<span class="property">root</span> + link + src);</span><br><span class="line"> }</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="variable language_">console</span>.<span class="property">info</span>&&<span class="variable language_">console</span>.<span class="title function_">info</span>(<span class="string">"no src attr, skipped..."</span>);</span><br><span class="line"> <span class="variable language_">console</span>.<span class="property">info</span>&&<span class="variable language_">console</span>.<span class="title function_">info</span>($(<span class="variable language_">this</span>));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> data[key] = $.<span class="title function_">html</span>();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">});</span><br></pre></td></tr></table></figure>
<p>随后,使用Markdown语法插入图片就一切正常了。</p>
<h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ol>
<li><a href="https://juejin.cn/post/7006594302604214280img">https://juejin.cn/post/7006594302604214280img</a></li>
</ol>
]]></content>
</entry>
<entry>
<title>因为Vercel和Waline被墙,我决定转用Twikoo,并简要记录了在Vercel上部署Twikoo和绑定自定义域名等步骤的教程</title>
<url>/posts/1442946664.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><div class="note orange flat"><p>注意</p>
<p>Vercel 部署的环境需配合 1.4.0 以上版本的 twikoo.js 使用</p>
<p>默认域名 *.vercel.app 在中国大陆访问速度较慢甚至无法访问,绑定自己的域名可以提高访问速度</p>
</div>
<p><a href="https://www.bilibili.com/video/BV1Fh411e7ZH/">查看视频教程</a></p>
<h1 id="Vercel-部署"><a href="#Vercel-部署" class="headerlink" title="Vercel 部署"></a>Vercel 部署</h1><ol>
<li>申请 <a href="https://www.mongodb.com/cloud/atlas/register">MongoDB</a> 账号</li>
<li>创建免费 MongoDB 数据库,区域推荐选择 <code>AWS / N. Virginia (us-east-1)</code></li>
<li>在 Database Access 页面点击 Add New Database User 创建数据库用户,Authentication Method 选 Password,在 Password Authentication 下设置数据库用户名和密码,用户名和密码可包含数字和大小写字母,请勿包含特殊符号。点击 Database User Privileges 下方的 Add Built In Role,Select Role 选择 Atlas Admin,最后点击 Add User</li>
</ol>
<p><a href="https://twikoo.js.org/assets/mongodb-1.JM5sAL8N.png"><img src="https://twikoo.js.org/assets/mongodb-1.JM5sAL8N.png" alt="img"></a></p>
<ol start="4">
<li>在 Network Access 页面点击 Add IP Address,Access List Entry 输入 <code>0.0.0.0/0</code>(允许所有 IP 地址的连接),点击 Confirm</li>
</ol>
<p><a href="https://twikoo.js.org/assets/mongodb-2.MBgtne_z.png"><img src="https://twikoo.js.org/assets/mongodb-2.MBgtne_z.png" alt="img"></a></p>
<ol start="5">
<li>在 Database 页面点击 Connect,连接方式选择 Drivers,并记录数据库连接字符串,请将连接字符串中的 <code><username>:<password></code> 修改为刚刚创建的数据库 <code>用户名:密码</code></li>
</ol>
<p><a href="https://twikoo.js.org/assets/mongodb-3.ZQmwcPKb.png"><img src="https://twikoo.js.org/assets/mongodb-3.ZQmwcPKb.png" alt="img"></a></p>
<ol start="6">
<li>申请 <a href="https://vercel.com/signup">Vercel</a> 账号</li>
<li>点击以下按钮将 Twikoo 一键部署到 Vercel</li>
</ol>
<p><a href="https://vercel.com/import/project?template=https://github.com/twikoojs/twikoo/tree/main/src/server/vercel-min"><img src="https://vercel.com/button" alt="Deploy"></a></p>
<ol start="8">
<li>进入 Settings - Environment Variables,添加环境变量 <code>MONGODB_URI</code>,值为前面记录的数据库连接字符串</li>
<li>进入 Settings - Deployment Protection,设置 Vercel Authentication 为 Disabled,并 Save</li>
</ol>
<p><a href="https://twikoo.js.org/assets/vercel-1.s8rXmvLp.png"><img src="https://twikoo.js.org/assets/vercel-1.s8rXmvLp.png" alt="img"></a></p>
<ol start="10">
<li>进入 Deployments , 然后在任意一项后面点击更多(三个点) , 然后点击 Redeploy , 最后点击下面的 Redeploy</li>
<li>进入 Overview,点击 Domains 下方的链接,如果环境配置正确,可以看到 “Twikoo 云函数运行正常” 的提示</li>
<li>Vercel Domains(包含 <code>https://</code> 前缀,例如 <code>https://xxx.vercel.app</code>)即为您的环境 id</li>
</ol>
<h1 id="绑定自定义域名"><a href="#绑定自定义域名" class="headerlink" title="绑定自定义域名"></a>绑定自定义域名</h1><p>我选择了阿里云作为托管平台,你们可以根据自己使用的平台寻找相应的教程。</p>
<ol>
<li>在阿里云平台的域名解析设置页面添加记录。</li>
</ol>
<p><img src="https://i.postimg.cc/d3dGWhRY/Snipaste-2024-01-12-10-29-50.png" alt="img"></p>
<ol start="2">
<li>添加后呈现如下图所示。</li>
</ol>
<p><img src="https://i.postimg.cc/CKyg1bkj/Snipaste-2024-01-12-10-34-51.png" alt="!img"></p>
<ol start="3">
<li>接着,在 Vercel 中,进入你创建的 Twikoo 应用的 ‘domains’ 部分,输入你的域名进行搜索。我的域名是 comment.cc1204.cn。</li>
</ol>
<p><img src="https://i.postimg.cc/nh2W87TF/Snipaste-2024-01-12-10-46-16.png" alt="!img"></p>
<ol start="4">
<li>随后点击 ‘Add’,最后一键部署即可完成。</li>
</ol>
<h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ol>
<li><a href="https://twikoo.js.org/backend.html#vercel-%E9%83%A8%E7%BD%B2">https://twikoo.js.org/backend.html#vercel-%E9%83%A8%E7%BD%B2</a></li>
<li><a href="https://blog.csdn.net/qq_52475653/article/details/134723472">https://blog.csdn.net/qq_52475653/article/details/134723472</a></li>
</ol>
]]></content>
</entry>
<entry>
<title>使用vercel来加速访问你的网站</title>
<url>/posts/1696798745.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><div class="note orange flat"><p>在观看本教程前请确认:</p>
<ol>
<li>你的确需要对自己的网站的访问进行加速,并且不想花太多钱</li>
<li>你有自己的域名,或者能够购买一个可供使用的网名</li>
<li>你对域名的解析,DNS等有一定的理解</li>
</ol>
</div>
<h2 id="Vercel同步GitHub仓库"><a href="#Vercel同步GitHub仓库" class="headerlink" title="Vercel同步GitHub仓库"></a>Vercel同步GitHub仓库</h2><p>因为我们的博客都是部署在GitHub上并且通过GitHub Pages服务部署并提供访问,而GitHub在国内的访问情况并不算优秀。</p>
<p>因此,在尽可能减少成本的前提下,如何能提升访问速度?</p>
<p>答案是Vercel,Vercel是一个云计算平台,主要用于托管、构建和部署静态网站和单页面应用程序。它提供了一个简单易用的工具集,使开发人员可以更快、更方便地将他们的应用程序部署到云端。Vercel还提供了丰富的功能,如自动化部署、自动缩放、A/B 测试、性能分析、SSL证书管理等,以帮助开发人员更好地管理和维护他们的应用程序。</p>
<p>在一切开始之前,你需要注册一个Vercel账号并登陆。网站地址:<a href="https://vercel.com/">https://vercel.com</a></p>
<p>回到主页,点击右上角的Add New 选择Project</p>
<p><a href="https://postimg.cc/8FZqYj08"><img src="https://i.postimg.cc/0QvPbSGN/image-20231107134619407.png" alt="image-20231107134619407.png"></a></p>
<p>此时你就可以看见自己在GitHub的仓库在左边列出了</p>
<p><a href="https://postimg.cc/B8fTGgRH"><img src="https://i.postimg.cc/QMH01Yb4/image-20231107135335766.png" alt="image-20231107135335766.png"></a></p>
<p>选择你需要部署在Vercel的博客的仓库,点击Import</p>
<p><a href="https://postimg.cc/xJwYsXXf"><img src="https://i.postimg.cc/8c55zWD6/image-20231107135526940.png" alt="image-20231107135526940.png"></a></p>
<p>起一个自己喜欢的名字,然后Deploy,等待Deploy结束</p>
<p><a href="https://postimg.cc/Lg5CZD9h"><img src="https://i.postimg.cc/rsCv3Z7G/image-20231107135709948.png" alt="image-20231107135709948.png"></a></p>
<p>deploy完成后回到主页可以看见已经被创建好的仓库</p>
<p><a href="https://postimg.cc/F7DFvsqZ"><img src="https://i.postimg.cc/t4HshsNL/image-20231107135932748.png" alt="image-20231107135932748.png"></a></p>
<p>你其实原本可以直接通过Vercel自带这个地址访问已经被创建好的网站了,但是因为*.vercel.app这个域名在国内被墙了,所以你需要使用自定义域名才能访问。</p>
<p><a href="https://postimg.cc/0bpX3cWR"><img src="https://i.postimg.cc/c4jqvzfH/image-20231107140236837.png" alt="image-20231107140236837.png"></a></p>
<p>点击settings-Domains,这里就是管理你的博客域名的地方,但是首先你得先有一个域名,我的域名cc1204.cn是在阿里云买的。</p>
<p><a href="https://postimg.cc/PpT1CQbZ"><img src="https://i.postimg.cc/85r4nyjy/image-20231107140545192.png" alt="image-20231107140545192.png"></a></p>
<p>在输入框内输入你购买的域名的二级域名,如 Blog.xxx.com 或 <a href="http://www.xxx.com/">www.xxx.com</a> 之类的,我的是cn域名,这里我用了bolg.cc1204.cn作为我的二级域名绑定在这儿</p>
<p><a href="https://postimg.cc/bGjmRbHY"><img src="https://i.postimg.cc/VNJ2mWJt/image-20231107141106514.png" alt="image-20231107141106514.png"></a></p>
<p>接下来就是去域名提供商那解析这个域名</p>
<h2 id="阿里云解析域名"><a href="#阿里云解析域名" class="headerlink" title="阿里云解析域名"></a>阿里云解析域名</h2><p>登陆<a href="https://www.aliyun.com/">阿里云平台</a></p>
<p>点击云解析DNS控制台</p>
<p><a href="https://postimg.cc/9r6DNvM4"><img src="https://i.postimg.cc/7Z6Sb4rN/image-20231107141917111.png" alt="image-20231107141917111.png"></a></p>
<p>这时进到解析页面,然后点击解析设置</p>
<p><a href="https://postimg.cc/PpT3b3Z9"><img src="https://i.postimg.cc/DZb9TRzv/image-20231107142041397.png" alt="image-20231107142041397.png"></a></p>
<p>然后在DNS-记录中,点击添加记录,然后按照Vercel给出的值填写</p>
<p><a href="https://postimg.cc/ZWBB5J9K"><img src="https://i.postimg.cc/YC8189Mg/image-20231107142802704.png" alt="image-20231107142802704.png"></a></p>
<p>回到Vercel刷新一下,如果正确填写,那么Valid Configuration和Assigned to main前面会打勾,如果你的不长这样,那大概就是哪一步错了。</p>
<p><a href="https://postimg.cc/3WkdBKBj"><img src="https://i.postimg.cc/L4TLm5gW/image-20231107143129355.png" alt="image-20231107143129355.png"></a></p>
<p>等待DNS缓存刷新完毕之后,你就可以通过自己新的域名来访问建立在Vercel上的博客了,正常情况下,GitHub的修改会被实时同步到Vercel上并被自动构建。也就是说以后这里就不用再自己动手操心了,只需要在GitHub上进行修改,除非你另有他用。</p>
<p>参考链接:<a href="https://www.rikoneko.xyz/posts/65231819/">https://www.rikoneko.xyz/posts/65231819/</a></p>
]]></content>
<categories>
<category>hexo</category>
</categories>
</entry>
<entry>
<title>为Hexo+Butterfly博客增加动画特效</title>
<url>/posts/2238362440.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h2 id="安装插件"><a href="#安装插件" class="headerlink" title="安装插件"></a>安装插件</h2><figure class="highlight cmd"><table><tr><td class="code"><pre><span class="line">npm install hexo-butterfly-wowjs --save</span><br></pre></td></tr></table></figure>
<h2 id="添加配置信息"><a href="#添加配置信息" class="headerlink" title="添加配置信息"></a>添加配置信息</h2><p>在站点配置文件<code>_config.yml</code> 或者主题配置文件<code>_config_butterfly.yml</code> 中添加</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">wowjs:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment">#控制动画开关。true是打开,false是关闭</span></span><br><span class="line"> <span class="attr">priority:</span> <span class="number">10</span> <span class="comment">#过滤器优先级</span></span><br><span class="line"> <span class="attr">mobile:</span> <span class="literal">false</span> <span class="comment">#移动端是否启用,默认移动端禁用</span></span><br><span class="line"> <span class="attr">animateitem:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">class:</span> <span class="string">recent-post-item</span> <span class="comment">#必填项,需要添加动画的元素的class</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">animate__zoomIn</span> <span class="comment">#必填项,需要添加的动画</span></span><br><span class="line"> <span class="attr">duration:</span> <span class="string">2s</span> <span class="comment">#选填项,动画持续时间,单位可以是ms也可以是s。例如3s,700ms。</span></span><br><span class="line"> <span class="attr">delay:</span> <span class="string">1s</span> <span class="comment">#选填项,动画开始的延迟时间,单位可以是ms也可以是s。例如3s,700ms。</span></span><br><span class="line"> <span class="attr">offset:</span> <span class="number">100</span> <span class="comment">#选填项,开始动画的距离(相对浏览器底部)</span></span><br><span class="line"> <span class="attr">iteration:</span> <span class="number">2</span> <span class="comment">#选填项,动画重复的次数</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">class:</span> <span class="string">card-widget</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">animate__zoomIn</span></span><br><span class="line"> <span class="attr">animate_css:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/animate.min.css</span></span><br><span class="line"> <span class="attr">wow_js:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow.min.js</span></span><br><span class="line"> <span class="attr">wow_init_js:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow_init.js</span></span><br></pre></td></tr></table></figure>
<h2 id="参数释义"><a href="#参数释义" class="headerlink" title="参数释义"></a>参数释义</h2><table>
<thead>
<tr>
<th align="left">参数</th>
<th align="left">备选值/类型</th>
<th align="left">释义</th>
</tr>
</thead>
<tbody><tr>
<td align="left">enable</td>
<td align="left">true/false</td>
<td align="left">【必选】控制开关</td>
</tr>
<tr>
<td align="left">priority</td>
<td align="left">number</td>
<td align="left">【可选】过滤器优先级,数值越小,执行越早,默认为10,选填</td>
</tr>
<tr>
<td align="left">mobile</td>
<td align="left">true/false</td>
<td align="left">控制移动端是否启用,默认移动端禁用</td>
</tr>
<tr>
<td align="left">animateitem.class</td>
<td align="left">class</td>
<td align="left">【可选】添加动画类名,只支持给class添加</td>
</tr>
<tr>
<td align="left">animateitem.style</td>
<td align="left">text</td>
<td align="left">【可选】动画样式,具体类型参考<a href="https://animate.style/">animate.css</a></td>
</tr>
<tr>
<td align="left">animateitem.duration</td>
<td align="left">time,单位为s或ms</td>
<td align="left">【可选】动画持续时间,单位可以是ms也可以是s。例如3s,700ms。</td>
</tr>
<tr>
<td align="left">animateitem.delay</td>
<td align="left">time,单位为s或ms</td>
<td align="left">【可选】动画开始的延迟时间,单位可以是ms也可以是s。例如3s,700ms。</td>
</tr>
<tr>
<td align="left">animateitem.offset</td>
<td align="left">number,单位为px</td>
<td align="left">【可选】开始动画的距离(相对浏览器底部)。</td>
</tr>
<tr>
<td align="left">animateitem.iteration</td>
<td align="left">number,单位为s或ms</td>
<td align="left">【可选】动画重复的次数</td>
</tr>
<tr>
<td align="left">animate_css</td>
<td align="left">URL</td>
<td align="left">【可选】animate.css的CDN链接,默认为<code>https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/animate.min.css</code></td>
</tr>
<tr>
<td align="left">wow_js</td>
<td align="left">URL</td>
<td align="left">【可选】wow.min.js的CDN链接,默认为<code>https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow.min.js</code></td>
</tr>
<tr>
<td align="left">wow_init_js</td>
<td align="left">URL</td>
<td align="left">【可选】wow_init.js的CDN链接,默认为<code>https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow_init.js</code></td>
</tr>
</tbody></table>
<p>参考链接:<a href="https://zsyyblog.com/856ab348.html#post-comment">https://zsyyblog.com/856ab348.html#post-comment</a></p>
]]></content>
<categories>
<category>hexo</category>
</categories>
</entry>
<entry>
<title>更新日志</title>
<url>/posts/1517386736.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><div class="note blue icon-padding flat"><i class="note-icon fas fa-bullhorn"></i><p>以后更新日志将会单独文章发布, 请查看 <a href="https://cc1204.cn/2023/11/02/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97/">更新日志</a></p>
</div>
<div class="note orange icon-padding flat"><i class="note-icon fas fa-pen"></i><p>你可以通过点击右下角的 设置 按钮后点击 簡 按钮切换为简体显示</p>
</div>
<hr>
<details class="toggle"><summary class="toggle-button" style>20231102.1050</summary><div class="toggle-content"><ul>
<li>项目初始化</li>
<li>博客基础美化工作</li>
<li>添加访客地球</li>
<li>将项目文件迁移到github上, 并绑定阿里云域</li>
<li>搭建waline评论系统, 并绑定国内域名</li>
<li>注册评论管理系统, 对评论功能进行测试并验证</li>
<li>导航栏添加照片、读书、电影等模块, 接入豆瓣个人主页的数据 </li>
<li>新增音乐模块, 部分css文件增补、配置并接入网易云数据</li>
<li>增加全局吸底aplayer </li>
<li>新增百度统计功能</li>
<li>使用hexo douban命令,试图解决豆瓣读书页面书单显示不全的bug</li>
</ul>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20231102.1133</summary><div class="toggle-content"><p>更换博客封面及顶部默认封面</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">index_img:</span> <span class="string">http://qzs.qq.com/qzone/v6/v6_config/upload/upfile_2040396_1352170450.jpg</span></span><br><span class="line"></span><br><span class="line"><span class="attr">default_top_img:</span> <span class="string">http://qzs.qq.com/qzone/v6/v6_config/upload/upfile_2040396_1352170450.jpg</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231102.1702</summary><div class="toggle-content"><p>添加右下角简繁体转换按钮,修改配置文件</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">translate:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231102.1716</summary><div class="toggle-content"><p>修改配置文件使首页显示标签</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">post_meta:</span></span><br><span class="line"> <span class="attr">page:</span> <span class="comment"># Home Page</span></span><br><span class="line"> <span class="attr">date_type:</span> <span class="string">both</span> <span class="comment"># created or updated or both 主頁文章日期是創建日或者更新日或都顯示</span></span><br><span class="line"> <span class="attr">date_format:</span> <span class="string">date</span> <span class="comment"># date/relative 顯示日期還是相對日期</span></span><br><span class="line"> <span class="attr">categories:</span> <span class="literal">true</span> <span class="comment"># true or false 主頁是否顯示分類</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="literal">true</span> <span class="comment"># true or false 主頁是否顯示標籤</span></span><br><span class="line"> <span class="attr">label:</span> <span class="literal">true</span> <span class="comment"># true or false 顯示描述性文字</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231103.1448</summary><div class="toggle-content"><p>文字添加标签外挂并自定义icon, 图标在这里 <a href="https://fontawesome.com.cn/v5">Fontawesome中文网</a><br>修改 <font color="orange"><code>主题配置文件</code></font>, 这个只是通用设置,其他个性化配置以及具体用法请参考 <a href="https://butterfly.js.org/posts/4aa8abbe/#%E6%A8%99%E7%B1%A4%E5%A4%96%E6%8E%9B%EF%BC%88Tag-Plugins%EF%BC%89">标签外挂</a></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">note:</span></span><br><span class="line"> <span class="comment"># Note tag style values:</span></span><br><span class="line"> <span class="comment"># - simple bs-callout old alert style. Default.</span></span><br><span class="line"> <span class="comment"># - modern bs-callout new (v2-v3) alert style.</span></span><br><span class="line"> <span class="comment"># - flat flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line"> <span class="comment"># - disabled disable all CSS styles import of note tag.</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">simple</span></span><br><span class="line"> <span class="attr">icons:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">border_radius:</span> <span class="number">3</span></span><br><span class="line"> <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line"> <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line"> <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure>
<p>示例</p>
<figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">{% note blue 'fas fa-bullhorn' flat %}</span><br><span class="line">2021年快到了....</span><br><span class="line">{% endnote %}</span><br><span class="line">{% note pink 'fas fa-car-crash' flat %}</span><br><span class="line">小心开车 安全至上</span><br><span class="line">{% endnote %}</span><br><span class="line">{% note red 'fas fa-fan' flat%}</span><br><span class="line">这是三片呢?还是四片?</span><br><span class="line">{% endnote %}</span><br><span class="line">{% note orange 'fas fa-battery-half' flat %}</span><br><span class="line">你是刷 Visa 还是 UnionPay</span><br><span class="line">{% endnote %}</span><br><span class="line">{% note purple 'far fa-hand-scissors' flat %}</span><br><span class="line">剪刀石头布</span><br><span class="line">{% endnote %}</span><br><span class="line">{% note green 'fab fa-internet-explorer' flat %}</span><br><span class="line">前端最讨厌的浏览器</span><br><span class="line">{% endnote %}</span><br></pre></td></tr></table></figure>
<div class="note blue icon-padding flat"><i class="note-icon fas fa-bullhorn"></i><p>2024年快到了….</p>
</div>
<div class="note pink icon-padding flat"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p>
</div>
<div class="note red icon-padding flat"><i class="note-icon fas fa-fan"></i><p>这是三片呢?还是四片?</p>
</div>
<div class="note orange icon-padding flat"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p>
</div>
<div class="note purple icon-padding flat"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p>
</div>
<div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p>
</div></div></details>
<details class="toggle"><summary class="toggle-button" style>20231103.1530</summary><div class="toggle-content"><p>打赏二维码图片损坏问题修复,原因是之前图片存在public下面的文件夹里,部署的时候,使用hexo clean清理缓存,导致图片损坏。<br>解决办法是: 直接使用图床生成的链接,替换掉原来的图片。安利一下目前正在使用的 <a href="https://postimages.org/">图床软件</a>,个人觉得非常好用。</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Sponsor/reward</span></span><br><span class="line"><span class="attr">reward:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">text:</span></span><br><span class="line"> <span class="attr">QR_code:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">img:</span> <span class="string">https://i.postimg.cc/V64YJr5T/Wechat-IMG98.jpg</span></span><br><span class="line"> <span class="attr">link:</span></span><br><span class="line"> <span class="attr">text:</span> <span class="string">wechat</span></span><br><span class="line"><span class="comment"># - img: /img/alipay.jpg</span></span><br><span class="line"><span class="comment"># link:</span></span><br><span class="line"><span class="comment"># text: alipay</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231103.1657</summary><div class="toggle-content"><p>更换博客封面</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># The banner image of home page</span></span><br><span class="line"><span class="attr">index_img:</span> <span class="string">https://i.postimg.cc/G2rVBYd5/00b9429a6e618ff3eca9e66d399e4762bf737417.jpg</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># If the banner of page not setting, it will show the top_img</span></span><br><span class="line"><span class="attr">default_top_img:</span> <span class="string">https://i.postimg.cc/G2rVBYd5/00b9429a6e618ff3eca9e66d399e4762bf737417.jpg</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231103.1716</summary><div class="toggle-content"><p>一直觉得封面背景有点暗,直到我看见这个配置,试了一下果然有用,瞬间就变亮了,配置如下,部署之后可能反应有点慢,请耐心等待一会儿。</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Add mask to header or footer (为 header 或 footer 添加黑色半透遮罩)</span></span><br><span class="line"><span class="attr">mask:</span></span><br><span class="line"> <span class="attr">header:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">footer:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231103.1833</summary><div class="toggle-content"><p>更换网站图标工作,因为从网上下载下来是矢量格式的文件,需要转化成链接才可以使用,但目前从网上还没有找到可以将矢量格式的文件转化为url的方法,只好暂时先使用base64编码来代替,修改主题配置文件如下:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Favicon(網站圖標)</span></span><br><span class="line"><span class="attr">favicon:</span> <span class="string">data:image/svg+xml;base64,PHN2ZyBpZD0icHJpbWFyeV9Mb2dvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOTAuNyAyNTAuMiIgd2lkdGg9IjI1MDAiIGhlaWdodD0iMjE1MiI+PHN0eWxlPi5zdDB7ZmlsbDojMmZmYzhkfS5zdDF7ZmlsbDojMDNlMzcwfS5zdDJ7ZmlsbDojMTBjNzY3fS5zdDN7ZmlsbDojMDBhYjZjfTwvc3R5bGU+PGcgaWQ9IlhNTElEXzk4XyI+PGcgaWQ9IlhNTElEXzk5XyI+PHBhdGggaWQ9IlhNTElEXzEwM18iIGNsYXNzPSJzdDAiIGQ9Ik0xOTYuNS4zYy0xLjUtLjctMi43IDAtMi43IDEuN3YyMDIuOWw4OC45IDQ0LjRjNC40IDIuMiA4IDAgOC01VjQ5YzAtMS0uNS0xLjktMS40LTIuM0wxOTYuNS4zeiIvPjxwYXRoIGlkPSJYTUxJRF8xMDJfIiBjbGFzcz0ic3QxIiBkPSJNOTYuOSAxNTYuNUwxOTIuMiAxLjZjLjktMS40IDIuOC0yIDQuMy0xLjJsOTIuMSA0NmMxLjEuNiAxLjYgMiAuOSAzLjFsLTk1LjcgMTU1LjQtOTYuOS00OC40eiIvPjxwYXRoIGlkPSJYTUxJRF8xMDFfIiBjbGFzcz0ic3QyIiBkPSJNMTAuNyA0LjRjLTUuOS0zLTcuOS0uOC00LjQgNC45bDkwLjYgMTQ3LjIgOTYuOSA0OC41TDk3LjUgNDguNWMtLjQtLjctMS0xLjItMS43LTEuNkwxMC43IDQuNHoiLz48cGF0aCBpZD0iWE1MSURfMTAwXyIgY2xhc3M9InN0MyIgZD0iTTk2LjkgMjQ0LjRjMCA0LjktMy42IDcuMi04IDVMNS40IDIwNy42Yy0zLTEuNS01LjQtNS40LTUuNC04LjdWNUMwIDEuNyAyLjQuMiA1LjQgMS43bDkwLjMgNDUuMmMuNy40IDEuMiAxLjEgMS4yIDEuOXYxOTUuNnoiLz48L2c+PC9nPjwvc3ZnPg==</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231107.1441</summary><div class="toggle-content"><p>使用Vercel加速网站的访问速度,请查看 <a href="https://cc1204.cn/2023/11/07/%E4%BD%BF%E7%94%A8vercel%E6%9D%A5%E5%8A%A0%E9%80%9F%E8%AE%BF%E9%97%AE%E4%BD%A0%E7%9A%84%E7%BD%91%E7%AB%99/">博客</a></p>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20231107.1612</summary><div class="toggle-content"><p>完善友链页面,新增友情链接,收集并整理常用的网站,请查看 <a href="https://cc1204.cn/link/">友链页面</a></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">class_name:</span> <span class="string">友情鏈接</span></span><br><span class="line"> <span class="attr">class_desc:</span> <span class="string">那些人,那些事</span></span><br><span class="line"> <span class="attr">link_list:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Hexo</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://hexo.io/zh-tw/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">https://d33wubrfki0l68.cloudfront.net/6657ba50e702d84afb32fe846bed54fba1a77add/827ae/logo.svg</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">快速、簡單且強大的網誌框架</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Jerry</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://butterfly.js.org/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">https://butterfly.js.org/img/avatar.png</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">A</span> <span class="string">Simple</span> <span class="string">and</span> <span class="string">Card</span> <span class="string">UI</span> <span class="string">Design</span> <span class="string">theme</span> <span class="string">for</span> <span class="string">Hexo</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> <span class="attr">class_name:</span> <span class="string">網站</span></span><br><span class="line"> <span class="attr">class_desc:</span> <span class="string">值得推薦的網站</span></span><br><span class="line"> <span class="attr">link_list:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Youtube</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://www.youtube.com/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">視頻網站</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Weibo</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://www.weibo.com/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">中國最大社交分享平台</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Twitter</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://twitter.com/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">社交分享平台</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Instagram</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://www.instagram.com/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAH2klEQVR4AZ3SA7AsXZoF0HVSVXUfftttG2Pbtm07MLZt2/ZM27b97PcuSpl5vj436rY71CdixQ5l7p1IAPCtN8ZNY52/NWUfkyI9JOWYNJl6HDR50OVeW3ISg27cz2wqSu6jUxxkG1mjMKoNfaN/QW38vy2L37jTB50ESADfcdvwZRH1b0bEtM40UeRiHJVS02KS+5LF2JfCUWEa8fbSJpIGdYRGqGSlVKXQqwtWF1l+zd0++u8hwffduv6qITW/WwV10e7LdDlM9ovHwSz3ZuPadD+LMkgXodAWjaQOaklFkSVRlHIDRbJWYBnEJ9/i4/49/dC94s5+nV+epMPV24pDKQ7TMZvFYGvsi1UpXpuN++UHnyFGTXbw1EmlACEVCkYMUkGPtbCUrC7smt+3aVb5W+uUDtdo0GISpVw4ZHTbB4Y7P7kzOdTqjoRmi2YSUiKhCsAQZCwyl0fODIa/uyQ/c1sYi55ik4OS1x2Vv7U5XKUPFVRogs6m/KYHjR79861rHlV5X0/zHdeLF+wZP/OV4k29bC28IyvDB6c/um3spdRUQSO0ObvmtuwD/7U1vTmJZZj/x5xXLVTbvXqxVq9GVWQiCpKEoqs4dOBBMz77euDNS/ExzxWvuSJbF6tiabTaSf92e44QqihkbR48/gkThx9QGd4yOPUJp7THF6Z5pdDltZR7xkxEURVJKigAZO7ueOIjSs546gU+5InCulgZi1xUN8iuN7pW75pYu/2DslJO5uynn9Kd3jOrFmZpritSIS2p9q1IJa1FwWrjW2/mD+5L2/PxzyYHH3wdH3BYslSoi8pKc22s5JSLEYMbPmYGFv+yrTm+bVKKppbaWErW6DECN86kNXFuRa4IPOQIv3RfYFjzNc/jCWf5qJv4mBt5xuslK6wlveZoWhiNchGpN71+AuL1u6V8xyQW2oPVUi9d3/D1D+DL7811E5DeOOcvj/Ebb+DYFV6zy30O8ZRTWPCs05sBd02xwBq9ZK2Z2ZENxjQI+4uuBvV8T6ouaGMhpRWp33zL//h4biwJAPds8QP35wtu58OfwIP/lVsnvOUKBsY1UGcs3l7OoJm4IFe9US+nlWp6G6jWl9TtGVVeEWtuPST93UH5sW3xy8/jX95C1UgfcQff92juPsx/f6h4v3+R3nIBA3pWK2BWYYW1MEh6TVOdVAZIab0ZUD0E1OMlmtNEX2Tpax/HHUc5fll8xp9wYsnYkGvxV5d5yjHp/z+D+x2VvuE+4ieeI8WAol8BLazQSwa5qFL9FlX9JnXRNMdo1yDVV6TuDN15Jhf5uAeC+NX/5sIZur1iTrugK06fFb/3QuCL70ezJBUKA9DE2wcwYFSpj0ntcVV3sjghpTXQ7NBdYHKZm4Nbrwae+QIm82JRLDe6fXP+/oXA/a7l8CCapaiW6AHx9vIwFlmjFKt7qR5KjlLVg9TuidklVMwKYFM8K8aOvGZoi5q64tojQEKzS7dmGEkDIGM4SKDSXWRySSEVqgFEu2C6s7E4yaVLwCc/ZjNgemAyL7mRPuh24BUnsEu3pC3qdx0QQoBKVV4x3RWm20XJ1MPm4q1dDu0pxH/+E0if/4mbv31rj+neQc65Z4uv+wgQf/MUJgu6ZbES9QiMgYxAEhqNyQ7tSDMUJYc5SFtZlGKpJjr+98/4qI/hxtukX/gR/vpvxUtezXyUPuoj+IyP4eojHDvLvz5hM6AKEmaAPIgqyEmo0WqiDEjdSFO0mXEHOFKzNadqMBJnxM98jfR9v8tNt/It3yh5t/OGN4nv+ilcYooKCbMEYrWmDdEncoNOE9Mduix1BwPWl0Ec6Ti8oGowoGP5BvGzX8D7fbr0+E/i1nsTwbE3iCc+gX/+Ty4vmSFVVEiJJr/jDXRJqEXfSHmqDNiVJpluX4j1OQnp7geLIwdvIHUYyPtO8IzfFk/5A2JG3zIfWVdUxVZRJ6r9LEqmx9wPOHWODiopOqmfakxX0jSY2HjtP/Jh38IDP447bmP7zaQRRRR5YGwZ9q1ZNVQ166Kp3qEqUnH7nXzAo0D825PpoCaaolNVs2CGrQNnn8SJp1O10hf9L7fexpElR+fF4h2umpcsShYc2bfgULG13HjIPdKv/xzwrBdy8oSYkLqqaKV2IuVvrha28tSUt7vpAdIn/xeH7wKO/6c4/1xUjAPDWLIiF2NdVPSJ6MiTopXueSQPfhxw+rT8dd8t3rArrY6wvLrkdWJ1wzzl766faWt8PzNMD0wS19wlffBfcu37ed8PXvY88RM/LI7vicVhaXmUxbXS6np5fcMTmpjG/6Wp9zPl7SMmwfgm8bT35+oHc/vnS9PbqDrStGhQEWlj3JdZ9yzX9MSpYzzvabzidWJvQrcljSM5lwxCyfHfUnznkevzLXuvS4fzVZsBiUnQ2qiRDgDkAwP6mnWxLBYNu8Vey06xu2/C3lTMDzE/zOIqaXkdyxtPpvH6B1bp53fOD3Hoy7UpdLxXk3fPA1PMxqIv1htbxfTAZFCIbqDti0EqNEOfmuUXpdd9y3YFk+/e+cccs8+IpjqnDVp0aNC+W3Zo331gMB2LvtiUFnSb0o3egZNj1X9UevnPPBESAOz85k03bt1y5avT0f6j1On9yk2malRIcJD5wPgOVphjr2anZXtfx85EbM8up71Dzy8/4VOrqvvl9E9PugzwVkf7DxzeNaKAAAAAAElFTkSuQmCC</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">全球最大的社交媒体平台之一</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Worldvectorlogo</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://worldvectorlogo.com/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAXVBMVEUMW7o7e8cjasAqcMMdZ7/L3PD///+fvuTW4/Pe6PaQtOCIr91LhcxildISX7z2+f1Xjs+70ezg6vZ+qNrD1u51otg5ecdrm9WDq9zq8fmoxOZBf8lHg8tdktGXueIBgticAAAAtUlEQVR4Ae3IxwHCQBAEwZZr+Tu8h/zDZH+AlAL1GcPft6IoSkJVFBWhjoNvjbaETnvCoA3fRu2A0lACjY58m9QaZsMMSZ34lrJuoDW0MGlO/NjqADtztodRt/zaa0Ol24OWHPTIr5Oazrq/6JyyVixcdbrpfdL2oTuWbnq5mlPK9nttWTrrTrdw0E6fLJUG93AxWLPSGe7wMDSsvdScIGV1ZG2jHggH9cFaOp/Pd8I9SuLX3xsRbgi+Uy1txwAAAABJRU5ErkJggg==</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">提供全世界标志Logo的资源网站</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">WallpaperHub</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://www.wallpaperhub.app/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">data:image/png;base64,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</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">微软原生壁纸网站</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Postimages</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://postimages.org/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAbFBMVEU6gOo0feoteukoeOkxfOkadOhalO2UtvKzyvbI2vmqw/SJr/FEiOsidumErPHw9v7////Z5/tjmu5lme7U4vpPjOzs8/280ffL3Pn2+v90o/Cbu/OauvPn8P09hevg6/ywyPa+1PgAa+d7p/CSzhudAAAA50lEQVR4Ab2NRWLEMBAEhWaZmeH/f0zkMVNwt0+unrIavTuYEErY7ZlxRdV0w7QEvvxb2I4L8Xx+VkgAZ0hoHYeo6e4T4f37EdSxnqTwlZGdwOOxzDklghejoW0NnI8dg2EBtBVIIptirvg4k+PNgiMbPiP2JZZsI8iiEmsh2SBHgS9cXwrusslyiepJSMSMjUQf7wVZUaBWQsbRSXANLqgg4fhdsAvBzUIdzm5D0EnYpqHoJITdeu84OgteP8DzVasIdCVQRkkURIwTjC4FOYsxHK8FgN8LzYNAU13XW4IejM8Q9Jp8ANVnFTEdVbfVAAAAAElFTkSuQmCC</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">免费图片托管</span> <span class="string">/</span> <span class="string">图片上传</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Fontawesome中文网</span></span><br><span class="line"> <span class="attr">link:</span> <span class="string">https://fontawesome.com.cn/</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFnUlEQVR4AaWXc3QdWxhHp7atOKlt23iubT+/V1tBbdu2bdu2bc1p9rd6pqdttJI/flczmb0/zF03Vvk/qkQo7xuUaRuYw+/rl1aBz09e1yo+/tSZ2VHC+vehnvDm35bV3y918Zv4f0rfRa1+dTGPfWxQ9gJgnTe1itv6dZ4KTeJGSADY+/pl3rz/s6h6u9hFjWmfSoIIx6nWhJsCEwrnVsMKZ98WIQHzwggMapFcBHg+UjvX3Q/1y3wFf1otrwgAH1EkuyTcAsxVXxjQh9FZbC0wrElaNTVTUmUKAOb94jJf4IPyZJQxhFfgsIZz8Zf9ctqAyeCKMdTQtDGdYyYcaL/s6dScghXss7/9o962HnnybetR9ttmQ+X1u3ZjO4RJgNmbHXg8J93rgFruIjAobww6IHDaTk5WygVYBB7V7Knetx8nAa7Dex32K2QBA66XEIHh1b2l+pX53EXgWjEfBATO7E3It9BvpYIVYG7cXsAJ7UeA6k0BwAjwmsqDgugwgm/D7Q3PgQ4f5bpt9FgXRVg42qoFWEIWUAswAi3QwyOmTduDgpAXDfwZC+G1fIak3X6crwjwrfX2VgbATob0Sy0XRoLqETjawVPGgECv2JEFvjljXFk4LqwDaH3FP9SYMm2Vb/66TgaVaOGEY1Mq/zVABF4vdxn/8YKPEonBaSVIsO1IsIAI0AkEWEIEEEGAbQeqwRo44ptosI5eRAsAVb7b6W7fP+RlUz0SPANDhOqRWF7fVcaAAGkV3XLgQAC3dC+naiQrrarGKSLJZWVQJeLl+8jnHDerJxZwM1qCjOyWEgEJcET6lktls/UI1ExsOXAAJSNncoJEm4zt35A80QorHd5rOLFeL3E5ZQrQCT0OU4Ju6ABmPIQd+NujjFQKmKq75p+sBpZbbo/4ca09sfYOeV03VlfVIFGPz+n+xBRoCNgMO0E2zZSFlHBnIDKqUDQ1rkh06YS+CC32jJRaKizn9qeq5tNRtcjg/5UI74E7SdzjlL4Ng+yClmAkiNARulGycTwVKZ+rylUj4UctkCR5HRU5RgUJr/N4tUVC0rzQMIUAMbqgJRo6s9DLqKPvDFMEeJSfYzqJWrScilywkcSK7oqAKeJ0o2buvopR0BEkzC4Ad7JmlMvdFs2iKUCNmsdWfw1JIjHBqepGUy6NPQRIJ4BFyt5UxajeTpKsx0gVvcK/30n8mL270l0wJQTMl1GNgMy+ZbplUgQgLQZmBrDnPzlUwjpZlZUxHQICt7yry3OCDn4qVcAUlfHYGdt77gYE5BhwukCQ0J1gGZ1fPz/2zaiIlsjVMRsBSJzX3n4FJAgwgjjVR0nFjCH2b71FIt2GbTYS2TcfczpRv2CAE8aBSOMUfcaLANWbcFOAFPPNoSpPzqvKLC9pV9tcyqYTCABGIFHPPQjwXkaQbO5S5bb7oMp15bay2vdAQrrAQjYrOVIyp9khRedFYNCxgn4DjhZSHXYWtJvtLGYD4rV+TwDzjIhuP/D47RaqZGMu21SPgDkGJCJPnGojwZ2h4Y1LDNumfy2JQP61/apnXVheWTMrK2v6l/CZrloLASYAdfXJJ9+04zad7AjQBapnFAgQa9qMCxpq5suLGZXfAQ0yiHUrJpWb8AT/r5bqU8x/QidYOOCOAKMArhPib8KE4/1cQoIDZumoFDjPVI4A4S5gD2g/AowAaFgFzE50CMxBOiKZU/EC9zdAquSZUDUCfBbnl6kKATqjBcz2k1i+c/eE6z8j5karARFdObMHTOLWnIkAYATIdx1INmV+h3AJEASI3ngTrJOo0fi7biPmKYIAO/Bt+8MtQPsQoO1UbsIlNWY85jzP0QtHawlzCdmvCAkwhtRrPti0/ms4mXHRPBcY7S5496kvt3eE/zvW4VsrXr0546n2M/hwYBpyLCL5BG/TeekPWgMWAAAAAElFTkSuQmCC</span></span><br><span class="line"> <span class="attr">descr:</span> <span class="string">字体图标中文Icon</span></span><br></pre></td></tr></table></figure></div></details>
<details class="toggle"><summary class="toggle-button" style>20231107.1700</summary><div class="toggle-content"><p>新增文章置顶功能</p>
<ol>
<li>安装插件<figure class="highlight cmd"><table><tr><td class="code"><pre><span class="line">npm install hexo-generator-index-pin-top --save</span><br></pre></td></tr></table></figure></li>
<li>设置置顶<br>给需要置顶的文章加入top参数,如下:<figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: 更新日志</span><br><span class="line">date: 2023-11-02 15:33:57</span><br><span class="line">tags: 更新日志</span><br><span class="line">categories: 版本内容更新</span><br><span class="line"><span class="section">top: 1</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></table></figure>
如需多个文章置顶,top越大文章越靠前。</li>
</ol>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20231107.1817</summary><div class="toggle-content"><p>使用标签外挂Toggle折叠目录,它其实是可以折叠任意一部分文字和内容,如果你需要展示的内容太多,可以把它隐藏在收缩框里,需要时再把它展开。( display 不能包含英文逗号,可用 ‚)</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line">{% hideToggle display,bg,color %}</span><br><span class="line">content</span><br><span class="line">{% endhideToggle %}</span><br></pre></td></tr></table></figure>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line">{<span class="string">%</span> <span class="string">hideToggle</span> <span class="string">标题</span> <span class="string">%</span>}</span><br><span class="line"><span class="string">在你的博客根目录里</span></span><br><span class="line"></span><br><span class="line"><span class="string">git</span> <span class="string">clone</span> <span class="string">-b</span> <span class="string">master</span> <span class="string">https://github.com/jerryc127/hexo-theme-butterfly.git</span> <span class="string">themes/Butterfly</span></span><br><span class="line"></span><br><span class="line"><span class="string">如果想要安装比较新的dev分支,可以</span></span><br><span class="line"></span><br><span class="line"><span class="string">git</span> <span class="string">clone</span> <span class="string">-b</span> <span class="string">dev</span> <span class="string">https://github.com/jerryc127/hexo-theme-butterfly.git</span> <span class="string">themes/Butterfly</span></span><br><span class="line"></span><br><span class="line">{<span class="string">%</span> <span class="string">endhideToggle</span> <span class="string">%</span>}</span><br></pre></td></tr></table></figure>
<p>参考链接:<a href="https://blog.falling42.top/p/43fcab53.html#Tag-hide">https://blog.falling42.top/p/43fcab53.html#Tag-hide</a></p>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20231108.1820</summary><div class="toggle-content"><p>豆瓣主页书单展示不全的bug解决,将hexo_douban升级到最新版本,试图解决这个问题,但这个时候该组件的维护者后台强制更新了一下,然而我的版本也刚好升级完成,所以不确定是我们两个中谁解决的,后续如果还有回复,可以关注<a href="https://github.com/mythsman/hexo-douban/issues/159">这个问题</a></p>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20240112.1139</summary><div class="toggle-content"><p>因为Vercel和Waline被墙,我决定转用Twikoo,详情可查看<a href="https://cc1204.cn/2024/01/12/%E5%9B%A0%E4%B8%BAVercel%E5%92%8CWaline%E8%A2%AB%E5%A2%99%EF%BC%8C%E6%88%91%E5%86%B3%E5%AE%9A%E8%BD%AC%E7%94%A8Twikoo%EF%BC%8C%E5%B9%B6%E7%AE%80%E8%A6%81%E8%AE%B0%E5%BD%95%E4%BA%86%E5%9C%A8Vercel%E4%B8%8A%E9%83%A8%E7%BD%B2Twikoo%E5%92%8C%E7%BB%91%E5%AE%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D%E7%AD%89%E6%AD%A5%E9%AA%A4%E7%9A%84%E6%95%99%E7%A8%8B/">博客</a></p>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20240114.0339</summary><div class="toggle-content"><ol>
<li>解决手机上显示视频时页面过高的问题,需要进行一些CSS文件的修改。相关的目录在 themes/butterfly/source/css/_global/function.styl 中。参考<a href="https://paddylin.gitee.io/post/f609.html">这篇博客</a></li>
<li>因为在网易云音乐非会员下无法播放完整版,所以我找到了一个不错的翻唱版本,感觉和原版差不多好听。另外,刚打开页面时,侧边栏的音乐自动播放有点吵,所以我把自动播放改成了需要点击才能播放。</li>
</ol>
</div></details>
<details class="toggle"><summary class="toggle-button" style>20240115.0947</summary><div class="toggle-content"><p>通过以下配置,解决了博客单独文章链接过长的问题。由于链接过长,分享起来不太方便,因此采取了下述配置,使生成的链接更短。参考链接:<a href="https://blog.csdn.net/weixin_58068682/article/details/116612063">https://blog.csdn.net/weixin_58068682/article/details/116612063</a></p>
<ol>
<li>安装 hexo-abbrlink 插件的指令如下:<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">npm install hexo-abbrlink --save</span><br></pre></td></tr></table></figure></li>
<li>打开站点配置文件 _config.yml,并将 permalink 修改为:<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">permalink:</span> <span class="string">posts/:abbrlink.html</span></span><br></pre></td></tr></table></figure></li>
<li>在站点配置文件 _config.yml 中添加以下代码:<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment">#abbrlink配置</span></span><br><span class="line"><span class="attr">abbrlink:</span></span><br><span class="line"> <span class="attr">alg:</span> <span class="string">crc32</span> <span class="comment"># 算法:crc16(default) and crc32</span></span><br><span class="line"> <span class="attr">rep:</span> <span class="string">dec</span> <span class="comment"># 进制:dec(default) and hex</span></span><br></pre></td></tr></table></figure></li>
</ol>
</div></details>
]]></content>
<categories>
<category>版本内容更新</category>
</categories>
<tags>
<tag>更新日志</tag>
</tags>
</entry>
<entry>
<title>博客重新搭建过程中的问题记录</title>
<url>/posts/1496647469.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h1 id="之前博客一直托管在Gitee,但近期发现Gitee-Pages停止服务,给广大开发者带来了不小的困扰。因此,我决定重新搭建博客,迁移到Github,并绑定了阿里云域名。以下是在搭建过程中遇到的问题记录。"><a href="#之前博客一直托管在Gitee,但近期发现Gitee-Pages停止服务,给广大开发者带来了不小的困扰。因此,我决定重新搭建博客,迁移到Github,并绑定了阿里云域名。以下是在搭建过程中遇到的问题记录。" class="headerlink" title="之前博客一直托管在Gitee,但近期发现Gitee Pages停止服务,给广大开发者带来了不小的困扰。因此,我决定重新搭建博客,迁移到Github,并绑定了阿里云域名。以下是在搭建过程中遇到的问题记录。"></a>之前博客一直托管在Gitee,但近期发现Gitee Pages停止服务,给广大开发者带来了不小的困扰。因此,我决定重新搭建博客,迁移到Github,并绑定了阿里云域名。以下是在搭建过程中遇到的问题记录。</h1><h2 id="阿里云域名注册流程"><a href="#阿里云域名注册流程" class="headerlink" title="阿里云域名注册流程"></a>阿里云域名注册流程</h2><p><a href="https://baijiahao.baidu.com/s?id=1765615721998421361&wfr=spider&for=pc">https://baijiahao.baidu.com/s?id=1765615721998421361&wfr=spider&for=pc</a></p>
<h2 id="博客美化"><a href="#博客美化" class="headerlink" title="博客美化"></a>博客美化</h2><p><a href="https://butterfly.js.org/">https://butterfly.js.org/</a></p>
<h2 id="评论系统搭建"><a href="#评论系统搭建" class="headerlink" title="评论系统搭建"></a>评论系统搭建</h2><p><a href="https://vercel.com/chechuan/waline-test/settings/domains">https://vercel.com/chechuan/waline-test/settings/domains</a></p>
<h2 id="github部署报错问题"><a href="#github部署报错问题" class="headerlink" title="github部署报错问题"></a>github部署报错问题</h2><p><a href="https://blog.csdn.net/weixin_48927364/article/details/123405585">https://blog.csdn.net/weixin_48927364/article/details/123405585</a></p>
<h2 id="阿里云ssl证书"><a href="#阿里云ssl证书" class="headerlink" title="阿里云ssl证书"></a>阿里云ssl证书</h2><p><a href="https://yundunnext.console.aliyun.com/?spm=a2c4g.11186623.0.0.b2eade53LPbv2g&p=cas#/overview/cn-hangzhou">https://yundunnext.console.aliyun.com/?spm=a2c4g.11186623.0.0.b2eade53LPbv2g&p=cas#/overview/cn-hangzhou</a></p>
<h2 id="Github绑定自定义域名"><a href="#Github绑定自定义域名" class="headerlink" title="Github绑定自定义域名"></a>Github绑定自定义域名</h2><p><a href="https://codeantenna.com/a/BFBUro6Zkx#google_vignette">https://codeantenna.com/a/BFBUro6Zkx#google_vignette</a></p>
]]></content>
<categories>
<category>hexo</category>
</categories>
<tags>
<tag>报错收集</tag>
</tags>
</entry>
<entry>
<title>洪水过后</title>
<url>/posts/181603541.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h2 id="北京十渡风景区附近"><a href="#北京十渡风景区附近" class="headerlink" title="北京十渡风景区附近"></a>北京十渡风景区附近</h2><p><img src="/posts/181603541/img-001.jpeg"><br><img src="/posts/181603541/img-002.jpeg"><br><img src="/posts/181603541/img-003.jpeg"><br><img src="/posts/181603541/img-004.jpeg"><br><img src="/posts/181603541/img-005.jpeg"><br><img src="/posts/181603541/img-006.jpeg"><br><img src="/posts/181603541/img-007.jpeg"><br><img src="/posts/181603541/img-008.jpeg"><br><img src="/posts/181603541/img-009.jpeg"><br><img src="/posts/181603541/img-010.jpeg"></p>
]]></content>
<categories>
<category>考察</category>
</categories>
<tags>
<tag>洪水</tag>
</tags>
</entry>
<entry>
<title>6月内蒙之行</title>
<url>/posts/3535837600.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h4 id="6月的斗志一半被杀死在40°C的北京,一半被草原的夜晚降冷。"><a href="#6月的斗志一半被杀死在40°C的北京,一半被草原的夜晚降冷。" class="headerlink" title="6月的斗志一半被杀死在40°C的北京,一半被草原的夜晚降冷。"></a>6月的斗志一半被杀死在40°C的北京,一半被草原的夜晚降冷。</h4><p>刚进入内蒙地界,车内仪表温度显示20多摄氏度,要知道,此刻北京正经历着史上空前的高温蒸烤。</p>
<p>到了住的地方已经晚上了,路上看见烟花,能感受到他们欢乐的氛围,辉腾锡勒草原,听过这个名字。</p>
<p>篝火晚会,我的目光不自觉地,投在了一位舞者的身上,她穿着本地人的装束,动作自然、轻盈、又有力量,充满生命力, 不会是专业舞蹈演员吧?有可能。快结束,有位男士,突然拿起话筒,说要唱一首歌给一位女孩,但气温越来越低,我们穿得又少,便没有多待,就开始往回走。</p>
<p>在乌兰察布我们看到几万亿年前的火山喷发造就的地质面貌。看见敕勒川草原,还去了呼和浩特。</p>
<p>这趟旅程,我有个比较好奇的点,就是很多墓碑上都刻着十字架,他们也信奉基督教?我印象里,少数民族好像有一种自己的民族信奉的教,可能他们在很早的时候就接触到了基督教?</p>
<p>朋友对当地一种东西也很好奇,在他们房顶上有一种类似烟囱的东西,如果只有一个烟囱,可以理解,但同一个房子有好几个这样的烟囱,就很奇特了。</p>
<p><img src="/posts/3535837600/img-001.jpg"><br><img src="/posts/3535837600/img-002.jpg"><br><img src="/posts/3535837600/img-003.jpg"><br><img src="/posts/3535837600/img-004.jpg"><br><img src="/posts/3535837600/img-005.jpg"><br><img src="/posts/3535837600/img-006.jpg"><br><img src="/posts/3535837600/img-007.jpg"><br><img src="/posts/3535837600/img-008.jpg"><br><img src="/posts/3535837600/img-009.jpg"><br><img src="/posts/3535837600/img-010.jpg"><br><img src="/posts/3535837600/img-011.jpg"><br><img src="/posts/3535837600/img-012.jpg"><br><img src="/posts/3535837600/img-013.jpg"><br><img src="/posts/3535837600/img-014.jpg"><br><img src="/posts/3535837600/img-015.jpg"><br><img src="/posts/3535837600/img-016.jpg"><br><img src="/posts/3535837600/img-017.jpg"><br><img src="/posts/3535837600/img-018.jpg"><br><img src="/posts/3535837600/img-019.jpg"><br><img src="/posts/3535837600/img-020.jpg"><br><img src="/posts/3535837600/img-021.jpg"><br><img src="/posts/3535837600/img-022.jpg"><br><img src="/posts/3535837600/img-023.jpg"><br><img src="/posts/3535837600/img-024.jpg"><br><img src="/posts/3535837600/img-025.jpg"><br><img src="/posts/3535837600/img-026.jpg"><br><img src="/posts/3535837600/img-027.jpg"><br><img src="/posts/3535837600/img-028.jpg"><br><img src="/posts/3535837600/img-029.jpg"><br><img src="/posts/3535837600/img-030.jpg"></p>
]]></content>
<categories>
<category>旅行</category>
</categories>
<tags>
<tag>草原</tag>
</tags>
</entry>
<entry>
<title>周末时光</title>
<url>/posts/2613141365.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h2 id="北京房山高尔夫球场"><a href="#北京房山高尔夫球场" class="headerlink" title="北京房山高尔夫球场"></a>北京房山高尔夫球场</h2><p><img src="/posts/2613141365/img-001.jpeg"><br><img src="/posts/2613141365/img-002.jpeg"><br><img src="/posts/2613141365/img-003.jpeg"></p>
<h2 id="废弃铁路"><a href="#废弃铁路" class="headerlink" title="废弃铁路"></a>废弃铁路</h2><p><img src="/posts/2613141365/img-004.jpeg"><br><img src="/posts/2613141365/img-005.jpeg"><br><img src="/posts/2613141365/img-006.jpeg"><br><img src="/posts/2613141365/img-007.jpeg"><br><img src="/posts/2613141365/img-008.jpeg"><br><img src="/posts/2613141365/img-009.jpeg"></p>
<h2 id="麦当劳"><a href="#麦当劳" class="headerlink" title="麦当劳"></a>麦当劳</h2><p><a href="https://postimg.cc/06PRdXcS"><img src="https://i.postimg.cc/XvyjWT5s/Wechat-IMG173.jpg" alt="Wechat-IMG173.jpg"></a></p>
]]></content>
<categories>
<category>旅行</category>
</categories>
<tags>
<tag>周末时光</tag>
</tags>
</entry>
<entry>
<title>野三坡</title>
<url>/posts/107981024.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h2 id="野三坡"><a href="#野三坡" class="headerlink" title="野三坡"></a>野三坡</h2><p><img src="/posts/107981024/img-001.jpeg"><br><img src="/posts/107981024/img-002.jpeg"><br><img src="/posts/107981024/img-003.jpeg"><br><img src="/posts/107981024/img-004.jpeg"><br><img src="/posts/107981024/img-005.jpeg"><br><img src="/posts/107981024/img-006.jpeg"></p>
]]></content>
<categories>
<category>旅行</category>
</categories>
<tags>
<tag>野三坡</tag>
</tags>
</entry>
<entry>
<title>银山塔林</title>
<url>/posts/2485223985.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h2 id="银山塔林"><a href="#银山塔林" class="headerlink" title="银山塔林"></a>银山塔林</h2><p><img src="/posts/2485223985/img-001.jpeg"><br><img src="/posts/2485223985/img-002.jpeg"><br><img src="/posts/2485223985/img-003.jpeg"><br><img src="/posts/2485223985/img-004.jpeg"><br><img src="/posts/2485223985/img-005.jpeg"></p>
]]></content>
<categories>
<category>旅行</category>
</categories>
<tags>
<tag>辽金时期古塔</tag>
</tags>
</entry>
<entry>
<title>在北京郊区的时光</title>
<url>/posts/1139423548.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><p><img src="/posts/1139423548/img-001.jpeg"><br><img src="/posts/1139423548/img-002.jpeg"><br><img src="/posts/1139423548/img-003.jpeg"><br><img src="/posts/1139423548/img-004.jpeg"><br><img src="/posts/1139423548/img-005.jpeg"><br><img src="/posts/1139423548/img-006.jpeg"><br><img src="/posts/1139423548/img-007.jpeg"></p>
]]></content>
<categories>
<category>周末</category>
</categories>
<tags>
<tag>郊区</tag>
</tags>
</entry>
<entry>
<title>整数反转</title>
<url>/posts/3203360476.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="给你一个-32-位的有符号整数-x-,返回将-x-中的数字部分反转后的结果。"><a href="#给你一个-32-位的有符号整数-x-,返回将-x-中的数字部分反转后的结果。" class="headerlink" title="给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。"></a>给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。</h3><h3 id="如果反转后整数超过-32-位的有符号整数的范围-−231-231-−-1-,就返回-0。"><a href="#如果反转后整数超过-32-位的有符号整数的范围-−231-231-−-1-,就返回-0。" class="headerlink" title="如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。"></a>如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。</h3><h3 id="假设环境不允许存储-64-位整数(有符号或无符号)。"><a href="#假设环境不允许存储-64-位整数(有符号或无符号)。" class="headerlink" title="假设环境不允许存储 64 位整数(有符号或无符号)。"></a>假设环境不允许存储 64 位整数(有符号或无符号)。</h3><h3 id="Python3-两行代码解决,28ms。"><a href="#Python3-两行代码解决,28ms。" class="headerlink" title="Python3 两行代码解决,28ms。"></a>Python3 两行代码解决,28ms。</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span>(<span class="title class_ inherited__">object</span>):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">reverse</span>(<span class="params">self, x</span>):</span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> :type x: int</span></span><br><span class="line"><span class="string"> :rtype: int</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> y = [<span class="number">1</span>,-<span class="number">1</span>][x<<span class="number">0</span>] * <span class="built_in">int</span>(<span class="built_in">str</span>(<span class="built_in">abs</span>(x))[::-<span class="number">1</span>])</span><br><span class="line"> <span class="keyword">return</span> y <span class="keyword">if</span> y.bit_length() < <span class="number">32</span> <span class="keyword">else</span> <span class="number">0</span></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>移除元素</title>
<url>/posts/3330752109.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="给你一个数组-nums-和一个值-val,你需要-原地-移除所有数值等于-val-的元素,并返回移除后数组的新长度。"><a href="#给你一个数组-nums-和一个值-val,你需要-原地-移除所有数值等于-val-的元素,并返回移除后数组的新长度。" class="headerlink" title="给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。"></a>给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。</h3><h3 id="不要使用额外的数组空间,你必须仅使用-O-1-额外空间并-原地-修改输入数组。"><a href="#不要使用额外的数组空间,你必须仅使用-O-1-额外空间并-原地-修改输入数组。" class="headerlink" title="不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。"></a>不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。</h3><h3 id="元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。"><a href="#元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。" class="headerlink" title="元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。"></a>元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。</h3><h3 id="如下解法-执行时间12ms。"><a href="#如下解法-执行时间12ms。" class="headerlink" title="如下解法,执行时间12ms。"></a>如下解法,执行时间12ms。</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span>:</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">removeElement</span>(<span class="params">self, nums, val</span>):</span><br><span class="line"> <span class="keyword">while</span> (val <span class="keyword">in</span> nums):</span><br><span class="line"> nums.remove(val)</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">len</span>(nums)</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>罗马数字转整数</title>
<url>/posts/2030819439.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="罗马数字包含以下七种字符-I,-V,-X,-L,C,D-和-M。"><a href="#罗马数字包含以下七种字符-I,-V,-X,-L,C,D-和-M。" class="headerlink" title="罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。"></a>罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。</h3><h3 id="字符-数值"><a href="#字符-数值" class="headerlink" title="字符 数值"></a>字符 数值</h3><h3 id="I-1"><a href="#I-1" class="headerlink" title="I 1"></a>I 1</h3><h3 id="V-5"><a href="#V-5" class="headerlink" title="V 5"></a>V 5</h3><h3 id="X-10"><a href="#X-10" class="headerlink" title="X 10"></a>X 10</h3><h3 id="L-50"><a href="#L-50" class="headerlink" title="L 50"></a>L 50</h3><h3 id="C-100"><a href="#C-100" class="headerlink" title="C 100"></a>C 100</h3><h3 id="D-500"><a href="#D-500" class="headerlink" title="D 500"></a>D 500</h3><h3 id="M-1000"><a href="#M-1000" class="headerlink" title="M 1000"></a>M 1000</h3><h3 id="例如,-罗马数字-2-写做-II-,即为两个并列的-1。12-写做-XII-,即为-X-II-。-27-写做-XXVII-即为-XX-V-II-。"><a href="#例如,-罗马数字-2-写做-II-,即为两个并列的-1。12-写做-XII-,即为-X-II-。-27-写做-XXVII-即为-XX-V-II-。" class="headerlink" title="例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。"></a>例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。</h3><h3 id="通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如-4-不写做-IIII,而是-IV。数字-1-在数字-5-的左边,所表示的数等于大数-5-减小数-1-得到的数值-4-。同样地,数字-9-表示为-IX。这个特殊的规则只适用于以下六种情况:"><a href="#通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如-4-不写做-IIII,而是-IV。数字-1-在数字-5-的左边,所表示的数等于大数-5-减小数-1-得到的数值-4-。同样地,数字-9-表示为-IX。这个特殊的规则只适用于以下六种情况:" class="headerlink" title="通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:"></a>通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:</h3><h3 id="I-可以放在-V-5-和-X-10-的左边,来表示-4-和-9。"><a href="#I-可以放在-V-5-和-X-10-的左边,来表示-4-和-9。" class="headerlink" title="I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。"></a>I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。</h3><h3 id="X-可以放在-L-50-和-C-100-的左边,来表示-40-和-90。"><a href="#X-可以放在-L-50-和-C-100-的左边,来表示-40-和-90。" class="headerlink" title="X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。"></a>X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。</h3><h3 id="C-可以放在-D-500-和-M-1000-的左边,来表示-400-和-900。"><a href="#C-可以放在-D-500-和-M-1000-的左边,来表示-400-和-900。" class="headerlink" title="C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。"></a>C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。</h3><h3 id="给定一个罗马数字,将其转换成整数。输入确保在-1-到-3999-的范围内。"><a href="#给定一个罗马数字,将其转换成整数。输入确保在-1-到-3999-的范围内。" class="headerlink" title="给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。"></a>给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。</h3><h3 id="python解法-执行用时44ms。"><a href="#python解法-执行用时44ms。" class="headerlink" title="python解法,执行用时44ms。"></a>python解法,执行用时44ms。</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span>(<span class="title class_ inherited__">object</span>):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">romanToInt</span>(<span class="params">self, s</span>):</span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> :type s: str</span></span><br><span class="line"><span class="string"> :rtype: int</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> s = s.replace(<span class="string">'IV'</span>,<span class="string">'Q'</span>)</span><br><span class="line"> s = s.replace(<span class="string">'IX'</span>,<span class="string">'W'</span>)</span><br><span class="line"> s = s.replace(<span class="string">'XL'</span>,<span class="string">'E'</span>)</span><br><span class="line"> s = s.replace(<span class="string">'XC'</span>,<span class="string">'R'</span>)</span><br><span class="line"> s = s.replace(<span class="string">'CM'</span>,<span class="string">'T'</span>)</span><br><span class="line"> s = s.replace(<span class="string">'CD'</span>,<span class="string">'Y'</span>)</span><br><span class="line"></span><br><span class="line"> keys = {</span><br><span class="line"> <span class="string">'Q'</span>:<span class="number">4</span>,</span><br><span class="line"> <span class="string">'W'</span>:<span class="number">9</span>,</span><br><span class="line"> <span class="string">'E'</span>:<span class="number">40</span>,</span><br><span class="line"> <span class="string">'R'</span>:<span class="number">90</span>,</span><br><span class="line"> <span class="string">'T'</span>:<span class="number">900</span>,</span><br><span class="line"> <span class="string">'Y'</span>:<span class="number">400</span>,</span><br><span class="line"> <span class="string">'I'</span>:<span class="number">1</span>,</span><br><span class="line"> <span class="string">'V'</span>:<span class="number">5</span>,</span><br><span class="line"> <span class="string">'X'</span>:<span class="number">10</span>,</span><br><span class="line"> <span class="string">'L'</span>:<span class="number">50</span>,</span><br><span class="line"> <span class="string">'C'</span>:<span class="number">100</span>,</span><br><span class="line"> <span class="string">'D'</span>:<span class="number">500</span>,</span><br><span class="line"> <span class="string">'M'</span>:<span class="number">1000</span></span><br><span class="line"> }</span><br><span class="line"> ans = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> ch <span class="keyword">in</span> s:</span><br><span class="line"> ans += keys[ch]</span><br><span class="line"> <span class="keyword">return</span> ans</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>回文数</title>
<url>/posts/3747131552.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="给你一个整数-x-,如果-x-是一个回文整数,返回-true-;否则,返回-false-。"><a href="#给你一个整数-x-,如果-x-是一个回文整数,返回-true-;否则,返回-false-。" class="headerlink" title="给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。"></a>给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。</h3><h3 id="回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121-是回文,而-123-不是。"><a href="#回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121-是回文,而-123-不是。" class="headerlink" title="回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。"></a>回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。</h3><h3 id="python两种解法"><a href="#python两种解法" class="headerlink" title="python两种解法:"></a>python两种解法:</h3><h3 id="第一种执行用时64ms。"><a href="#第一种执行用时64ms。" class="headerlink" title="第一种执行用时64ms。"></a>第一种执行用时64ms。</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">def reverse(x):</span><br><span class="line"> if str(x)[::-1] == str(x):</span><br><span class="line"> return True</span><br><span class="line"> else:</span><br><span class="line"> return False</span><br></pre></td></tr></table></figure>
<h3 id="第二种执行用时108ms"><a href="#第二种执行用时108ms" class="headerlink" title="第二种执行用时108ms."></a>第二种执行用时108ms.</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">reverse</span>(<span class="params">x</span>):</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">str</span>(x)[::-<span class="number">1</span>] == <span class="built_in">str</span>(x)</span><br><span class="line"><span class="built_in">print</span>(reverse(<span class="number">121</span>))</span><br></pre></td></tr></table></figure>
<h3 id="实现-strStr-函数。"><a href="#实现-strStr-函数。" class="headerlink" title="实现 strStr() 函数。"></a>实现 strStr() 函数。</h3><h3 id="给你两个字符串-haystack-和-needle-,请你在-haystack-字符串中找出-needle-字符串出现的第一个位置(下标从-0-开始)。如果不存在,则返回-1-。"><a href="#给你两个字符串-haystack-和-needle-,请你在-haystack-字符串中找出-needle-字符串出现的第一个位置(下标从-0-开始)。如果不存在,则返回-1-。" class="headerlink" title="给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。"></a>给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。</h3><h3 id="python执行用时20ms。"><a href="#python执行用时20ms。" class="headerlink" title="python执行用时20ms。"></a>python执行用时20ms。</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">strStr</span>(<span class="params">haystack, needle</span>):</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span> <span class="keyword">if</span> needle == <span class="string">''</span> <span class="keyword">else</span> haystack.find(needle)</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>两数之和</title>
<url>/posts/3650023890.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="给定一个整数数组-nums-和一个整数目标值-target,请你在该数组中找出-和为目标值-target-的那-两个-整数,并返回它们的数组下标。"><a href="#给定一个整数数组-nums-和一个整数目标值-target,请你在该数组中找出-和为目标值-target-的那-两个-整数,并返回它们的数组下标。" class="headerlink" title="给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。"></a>给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。</h3><h3 id="你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。"><a href="#你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。" class="headerlink" title="你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。"></a>你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。</h3><h3 id="参考了大神们的解法,通过哈希来求解,这里通过字典来模拟哈希查询的过程。"><a href="#参考了大神们的解法,通过哈希来求解,这里通过字典来模拟哈希查询的过程。" class="headerlink" title="参考了大神们的解法,通过哈希来求解,这里通过字典来模拟哈希查询的过程。"></a>参考了大神们的解法,通过哈希来求解,这里通过字典来模拟哈希查询的过程。</h3><h3 id="个人理解这种办法其实就是字典记录了-num1-和-num2-的值和位置,而省了再查找-num2-索引的步骤。"><a href="#个人理解这种办法其实就是字典记录了-num1-和-num2-的值和位置,而省了再查找-num2-索引的步骤。" class="headerlink" title="个人理解这种办法其实就是字典记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。"></a>个人理解这种办法其实就是字典记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。</h3><h3 id="不需要-mun2-不需要在整个-dict-中去查找。可以在-num1-之前的-dict-中查找,因此就只需要一次循环可解决。"><a href="#不需要-mun2-不需要在整个-dict-中去查找。可以在-num1-之前的-dict-中查找,因此就只需要一次循环可解决。" class="headerlink" title="不需要 mun2 不需要在整个 dict 中去查找。可以在 num1 之前的 dict 中查找,因此就只需要一次循环可解决。"></a>不需要 <code>mun2</code> 不需要在整个 <code>dict</code> 中去查找。可以在 <code>num1</code> 之前的 <code>dict</code> 中查找,因此就只需要一次循环可解决。</h3><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">twoSum</span>(<span class="params">nums, target</span>):</span><br><span class="line"> hashmap={}</span><br><span class="line"> <span class="keyword">for</span> i,num <span class="keyword">in</span> <span class="built_in">enumerate</span>(nums):</span><br><span class="line"> <span class="keyword">if</span> hashmap.get(target - num) <span class="keyword">is</span> <span class="keyword">not</span> <span class="literal">None</span>:</span><br><span class="line"> <span class="keyword">return</span> [i,hashmap.get(target - num)]</span><br><span class="line"> hashmap[num] = i <span class="comment">#这句不能放在if语句之前,解决list中有重复值或target-num=num的情况</span></span><br></pre></td></tr></table></figure>
<h3 id="通过字典的方法,查找效率快很多,执行速度大幅缩短,共-12ms。"><a href="#通过字典的方法,查找效率快很多,执行速度大幅缩短,共-12ms。" class="headerlink" title="通过字典的方法,查找效率快很多,执行速度大幅缩短,共 12ms。"></a>通过字典的方法,查找效率快很多,执行速度大幅缩短,共 12ms。</h3><p><img src="https://img-blog.csdnimg.cn/4e489f986f3c4ec2ae0600645026e783.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASzExNjMzMTc1MTU=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>聊天机器人</title>
<url>/posts/1749448931.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h1 id="Keras"><a href="#Keras" class="headerlink" title="Keras"></a>Keras</h1><p>Keras tf.keras 是用于构建和训练深度学习模型的 TensorFlow 高阶 API。利用此 API,可实现快速原型设计、先进的研究和生产,它具有以下三大优势:</p>
<p>方便用户使用 Keras 具有针对常见用例做出优化的简单而一致的界面。它可针对用户错误提供切实可行的清晰反馈。 模块化和可组合 将可配置的构造块组合在一起就可以构建 Keras 模型,并且几乎不受限制。 易于扩展 可以编写自定义构造块,表达新的研究创意;并且可以创建新层、指标、损失函数并开发先进的模型。</p>
<span id="more"></span>
<h1 id="聊天机器人"><a href="#聊天机器人" class="headerlink" title="聊天机器人"></a>聊天机器人</h1><p>将数据传递到模型的内置训练循环时,应当使用 NumPy 数组(如果数据很小且适合装入内存)或 tf.data Dataset 对象。在接下来的段落中,我们将 MNIST 数据集用作 NumPy 数组,以演示如何使用优化器、损失和指标。</p>
<p>我们考虑以下模型(在这里,我们使用函数式 API 构建了此模型,但它也可以是序贯模型或子类化模型):</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">inputs = keras.Input(shape=(<span class="number">784</span>,), name=<span class="string">"digits"</span>)</span><br><span class="line">x = layers.Dense(<span class="number">64</span>, activation=<span class="string">"relu"</span>, name=<span class="string">"dense_1"</span>)(inputs)</span><br><span class="line">x = layers.Dense(<span class="number">64</span>, activation=<span class="string">"relu"</span>, name=<span class="string">"dense_2"</span>)(x)</span><br><span class="line">outputs = layers.Dense(<span class="number">10</span>, activation=<span class="string">"softmax"</span>, name=<span class="string">"predictions"</span>)(x)</span><br><span class="line"></span><br><span class="line">model = keras.Model(inputs=inputs, outputs=outputs)</span><br></pre></td></tr></table></figure>
<h1 id="所需依赖"><a href="#所需依赖" class="headerlink" title="所需依赖"></a>所需依赖</h1><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> nltk</span><br><span class="line"><span class="keyword">import</span> ssl</span><br><span class="line"><span class="keyword">from</span> nltk.stem.lancaster <span class="keyword">import</span> LancasterStemmer</span><br><span class="line">stemmer = LancasterStemmer()</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">from</span> keras.models <span class="keyword">import</span> Sequential</span><br><span class="line"><span class="keyword">from</span> keras.layers <span class="keyword">import</span> Dense, Activation, Dropout</span><br><span class="line"><span class="keyword">from</span> keras.optimizers <span class="keyword">import</span> SGD</span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"><span class="keyword">import</span> pickle</span><br><span class="line"><span class="keyword">import</span> random</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>TensorFlow</category>
</categories>
<tags>
<tag>TensorFlow</tag>
</tags>
</entry>
<entry>
<title>最长公共前缀</title>
<url>/posts/3145733633.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><h3 id="leetcode原题-编写一个函数来查找字符串数组中的最长公共前缀。"><a href="#leetcode原题-编写一个函数来查找字符串数组中的最长公共前缀。" class="headerlink" title="leetcode原题,编写一个函数来查找字符串数组中的最长公共前缀。"></a>leetcode原题,编写一个函数来查找字符串数组中的最长公共前缀。</h3><h3 id="如果不存在公共前缀,返回空字符串-。"><a href="#如果不存在公共前缀,返回空字符串-。" class="headerlink" title="如果不存在公共前缀,返回空字符串 ""。"></a>如果不存在公共前缀,返回空字符串 <code>""</code>。</h3><h3 id="利用python的max-和min-,在Python里字符串是可以比较的,按照ascII值排,举例abb,-aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀"><a href="#利用python的max-和min-,在Python里字符串是可以比较的,按照ascII值排,举例abb,-aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀" class="headerlink" title="利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀"></a>利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">def longestCommonPrefix(self, strs):</span><br><span class="line"> if not strs: return ""</span><br><span class="line"> s1 = min(strs)</span><br><span class="line"> s2 = max(strs)</span><br><span class="line"> for i,x in enumerate(s1):</span><br><span class="line"> if x != s2[i]:</span><br><span class="line"> return s2[:i]</span><br><span class="line"> return s1</span><br></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/3d5c6f3527a242e89a405db305928c9a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASzExNjMzMTc1MTU=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>operator模块</title>
<url>/posts/920646247.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><p>operator模块输出一系列对应Python内部操作符的函数。例如:operator.add(x, y)等价于表达式x+y。许多函数的名称都被一些特定的方法使用,没有下划线加持。为了向下兼容,它们中的许多都保留着由双下划线的变体。那些不具备双下划线的变体是为了使表达更清晰。</p>
<p>这些函数在各种函数目录里扮演者对相比较、逻辑操作、数学运算以及序列操作等角色。</p>
<p>对于所有对象来讲对象比较函数是十分有用的,并且这些函数以它们支持的丰富的比较操作命名。</p>
<span id="more"></span>
<p>最近遇到一个像这样的问题,搜索框以下拉框的形式展开,下拉框里包含着三级菜单,无论点哪级菜单,都会筛选出这级菜单下的数据来,是这样,前端保存的时候传的是一个数组。对于菜单其实是建了一个字段来存菜单id,现在查询,前端传一个菜单id,就可以查到,因为我们有一张单独的表来维护菜单,所以每级菜单的索引都是不同的,最重要的问题怎么用一个数组和另一个数字比较,用递归,也可以。我是这样做的,把前端传过来的id放到一个列表里,然后用高阶函数reduc配合operator来实现,让两个列表内的元素依次做比较,最终筛选出比较之后的数据。起初我是没有思路的,因为我是真的忘了,python还有这么一个模块,不得不说,实在是奇特。</p>
<p>代码示例:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">if</span> user_source:</span><br><span class="line"> new_list.append(user_source)</span><br><span class="line"> get_data = get_data.<span class="built_in">filter</span>(reduce(operator.and_,(Q(user_source__contains=x) <span class="keyword">for</span> x <span class="keyword">in</span> new_list)))</span><br></pre></td></tr></table></figure>
<p>以下是关于operator的用法,先码后看,我怕以后想看又找不到了。</p>
<p>operator. <strong>lt(a, b)</strong> //less than小于</p>
<p>operator. <strong>le(a, b)</strong> //lessthan or equal to小于等于</p>
<p>operator. <strong>eq(a, b)</strong> //equal to等于</p>
<p>operator. <strong>ne(a, b)</strong> //not equalto不等于</p>
<p>operator. <strong>ge(a, b)</strong> //greaterand equal to大于等于</p>
<p>operator. <strong>gt(a, b)</strong> //greater大于</p>
<p>operator. <strong><strong>le</strong>(a, b)</strong></p>
<p>operator. <strong><strong>lt</strong>(a, b)</strong></p>
<p>operator. <strong><strong>eq</strong>(a, b)</strong></p>
<p>operator. <strong><strong>ne</strong>(a, b)</strong></p>
<p>operator. <strong><strong>ge</strong>(a, b)</strong></p>
<p>operator. <strong><strong>gt</strong>(a, b)</strong></p>
<p>在a与b之间之行丰富的比较操作。特别地,lt(a, b)等价于a < b、le(a, b)等价于a <= b、eq(a, b)等价于a == b、ne(a, b)等价于a != b、gt(a, b)等价于a > b、ge(a, b)等价于a >= b。注意:这些函数可以返回任何值,这个值可能当做布尔值用、也有可能不行。</p>
<p><strong>逻辑操作一般也适用于所有对象,并且支持真值比较、定义测试和布尔操作。</strong></p>
<p>operator. <strong>not_(obj)</strong></p>
<p>operator. <strong><strong>not</strong>(obj)</strong></p>
<p>返回非obj的结果。(注意:对于对象实例不存在__not__()方法;只有解释器代码定义了这个操作。它的结果受__bool__()和__len__()方法影响)。</p>
<p>operator. <strong>truth(obj)</strong></p>
<p>如果obj是真的,就返回True,否则返回False。等价于使用布尔构造器。</p>
<p>operator. <strong>is_(a, b)</strong></p>
<p>返回表达式a is b,用于测试对象的定义。</p>
<p>operator. <strong>is_not(a, b)</strong></p>
<p>返回表达式a is not b,用于测试对象定义。</p>
<p> <strong>数学运算和按位运算是最多的:</strong></p>
<p>operator. <strong>abs(obj)</strong></p>
<p>operator. <strong><strong>abs</strong>(obj)</strong></p>
<p>返回obj的绝对值。</p>
<p>operator**. add(a, b)**</p>
<p>operator. <strong><strong>add</strong>(a, b)</strong></p>
<p>返回a+b,a与b应为数字。</p>
<p>operator. <strong>and(a, b)</strong></p>
<p>operator. <strong><strong>and</strong>(a, b)</strong></p>
<p>返回a与b的按位与操作结果。</p>
<p>operator. <strong>floordiv(a, b)</strong></p>
<p>operator. <strong>__floordiv(a, b)</strong></p>
<p>返回a//b。(a/b向下取整)</p>
<p>operator. <strong>index(a)</strong></p>
<p>operator. <strong><strong>index</strong>(a)</strong></p>
<p>将a转换为整数数据并返回。等价于a. <strong>index</strong>()</p>
<p>operator. <strong>inv(obj)</strong></p>
<p>operator. <strong>invert(obj)</strong></p>
<p>operator. <strong><strong>inv</strong>(obj)</strong></p>
<p>operator. <strong><strong>invert</strong>(obj)</strong></p>
<p>对数字obj按位求反,并返回。等价于~obj。</p>
<p>operator. <strong>lshift(a, b)</strong></p>
<p>operator. <strong><strong>lshift</strong>(a, b)</strong></p>
<p>将a左移b位后返回。</p>
<p>operator. <strong>mod(a, b)</strong></p>
<p>operator. <strong><strong>mod</strong>(a, b)</strong></p>
<p>返回a%b。</p>
<p>operator. <strong>mul(a, b)</strong></p>
<p>operator. <strong><strong>mul</strong>(a, b)</strong></p>
<p>返回a*b,a与b都为数字。</p>
<p>operator. <strong>matmul(a, b)</strong></p>
<p>operator. <strong><strong>matmul</strong>(a, b)</strong></p>
<p>返回a@b。</p>
<p>operator. <strong>nge(obj)</strong></p>
<p>operator. <strong><strong>neg</strong>(obj)</strong></p>
<p>返回obj的负值(-obj)。</p>
<p>operator. <strong>or(a, b)</strong></p>
<p>operator. <strong><strong>or</strong>(a, b)</strong></p>
<p>a与b按位求或,并返回结果值。</p>
<p>operator. <strong>pos(obj)</strong></p>
<p>operator. <strong><strong>pow</strong>(obj)</strong></p>
<p>返回obj的正值(+obj)。</p>
<p>operator. <strong>pow(a, b)</strong></p>
<p>operator. <strong><strong>pow</strong>(a, b)</strong></p>
<p>返回a ** b,a与b都为数字。</p>
<p>operator. <strong>rshift(a, b)</strong></p>
<p>operator. <strong><strong>rshift</strong>(a, b)</strong></p>
<p>a右移b位,并返回结果值。</p>
<p>operator. <strong>sub(a, b)</strong></p>
<p>operator. <strong><strong>sub</strong>(a, b)</strong></p>
<p>返回a – b。</p>
<p>operator. <strong>truediv(a, b)</strong></p>
<p>operator. <strong><strong>truediv</strong>(a, b)</strong></p>
<p>返回a / b,并且类似于2/3是0.66而不是0。它也被称为真除法。</p>
<p>operator. <strong>xor(a, b)</strong></p>
<p>operator. <strong><strong>xor</strong>(a, b)</strong></p>
<p>a与b按位异或,并返回结果。</p>
<p> <strong>和序列有关的操作(其中的一些也可用于映射),包括:</strong></p>
<p>operator. <strong>concat(a, b)</strong></p>
<p>operator. <strong><strong>concat</strong>(a, b)</strong></p>
<p>返回a + b,a与b都为序列。</p>
<p>operator. <strong>contains(a, b)</strong></p>
<p>operator. <strong><strong>contains</strong>(a, b)</strong></p>
<p>返回测试b in a的结果。请注意反转操作数。</p>
<p>operator. <strong>countof(a, b)</strong></p>
<p>返回b在a中出现的次数。</p>
<p>operator. <strong>delitem(a, b)</strong></p>
<p>operator. <strong><strong>delitem</strong>(a, b)</strong></p>
<p>删除a索引b的值。</p>
<p>operator. <strong>getitem(a, b)</strong></p>
<p>operator. <strong><strong>getitem</strong>(a, b)</strong></p>
<p>返回a索引b的值。</p>
<p>operator. <strong>indexof(a, b)</strong></p>
<p>返回b在a中第一次出现时的索引。</p>
<p>operator. <strong>setitem(a, b, c)</strong></p>
<p>operator. <strong><strong>setitem</strong>(a, b, c)</strong></p>
<p>a中索引b的位置上的值设置为c。</p>
<p>operator. <strong>length_hint(obj, default=0)</strong></p>
<p>返回对象obj的估算长度。首先试图返回真实的长度,不行的话使用obj.<strong>length_hint</strong>()估算长度,再不行的话返回默认值规定的长度。</p>
<p><strong>operator模块也定义了一些广义属性和项目查找的工具。它们常用于为诸如map()、sorted()、itertools. groupby()或其他需要函数作为参数的函数提供参数,该参数为一个高速的字段提取器。</strong></p>
<p>operator. attrgetter(attr)</p>
<p>operator. attrgetter(*attrs)</p>
<p>返回一个可点用对象,该对象能从其操作中捕获attr。如果提供了多个属性,返回一个属性构成的元组。属性名也可以包含符号点。例如:</p>
<p>•••运行 f = attrgetter(‘name’)之后,调用f(b),返回b.name。</p>
<p>•运行 f = attregetter(‘name’,’date’)之后,调用f(b),返回(b. name, b,date)。</p>
<p>•运行f =attregetter(‘name.first’, ‘name. last’)之后,调用f(b),返回(b. name. first, b. name. last)。</p>
<p>等价于:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">defattrgetter(*items):</span><br><span class="line"></span><br><span class="line"> ifany(notisinstance(item, <span class="built_in">str</span>) <span class="keyword">for</span> item <span class="keyword">in</span> items):</span><br><span class="line"></span><br><span class="line"> raiseTypeError(<span class="string">'attribute namemust be a string'</span>)</span><br><span class="line"></span><br><span class="line"> iflen(items) ==<span class="number">1</span>:</span><br><span class="line"></span><br><span class="line"> attr = items[<span class="number">0</span>]</span><br><span class="line"></span><br><span class="line"> defg(obj):</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> resolve_attr(obj, attr)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"></span><br><span class="line"> defg(obj):</span><br><span class="line"></span><br><span class="line"> returntuple(resolve_attr(obj, attr) <span class="keyword">for</span> attr <span class="keyword">in</span> items)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> g</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">defresolve_attr(obj, attr):</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> name <span class="keyword">in</span> attr.split(<span class="string">"."</span>):</span><br><span class="line"></span><br><span class="line"> obj =<span class="built_in">getattr</span>(obj, name)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> obj</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>operator. <strong>itemgetter(item)</strong></p>
<p>operator. <strong>itemgetter(*items)</strong></p>
<p>返回一个可调用对象,该对象可以使用操作__getitem__()方法从自身的操作中捕获item。如果制定了多个items,返回一个由查询值组成的元组。例如:</p>
<p>•运行f =itemgetter(2),然后调用f(r),返回r[2]。</p>
<p>•运行g =itemgetter(2, 5, 3),然后调用g(r),返回(r[2], r[5], r[3])。</p>
<p>等价于:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">itemgetter</span>(<span class="params">*items</span>):</span><br><span class="line"></span><br><span class="line"> iflen(items) ==<span class="number">1</span>:</span><br><span class="line"></span><br><span class="line"> item = items[<span class="number">0</span>]</span><br><span class="line"></span><br><span class="line"> defg(obj):</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> obj[item]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"></span><br><span class="line"> defg(obj):</span><br><span class="line"></span><br><span class="line"> returntuple(obj[item] <span class="keyword">for</span> item <span class="keyword">in</span> items)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> g</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>Items可以是任何类型,只要该类型可以接受__getitem__()方法的操作。字典结合搜任何可哈希的值。列表、元组和字符串接受索引或者片段:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">>>>itemgetter(<span class="number">1</span>)(<span class="string">'ABCDEFG'</span>)</span><br><span class="line"></span><br><span class="line"><span class="string">'B'</span></span><br><span class="line"></span><br><span class="line">>>>itemgetter(<span class="number">1</span>,<span class="number">3</span>,<span class="number">5</span>)(<span class="string">'ABCDEFG'</span>)</span><br><span class="line"></span><br><span class="line">(<span class="string">'B'</span>, <span class="string">'D'</span>,<span class="string">'F'</span>)</span><br><span class="line"></span><br><span class="line">>>>itemgetter(<span class="built_in">slice</span>(<span class="number">2</span>,<span class="literal">None</span>))(<span class="string">'ABCDEFG'</span>)</span><br><span class="line"></span><br><span class="line"><span class="string">'CDEFG'</span></span><br><span class="line"></span><br><span class="line">例如使用itemgetter()从元组记录中取回特定的字段:</span><br><span class="line"></span><br><span class="line">>>>inventory = [(<span class="string">'apple'</span>, <span class="number">3</span>), (<span class="string">'banana'</span>, <span class="number">2</span>), (<span class="string">'pear'</span>, <span class="number">5</span>), (<span class="string">'orange'</span>, <span class="number">1</span>)]</span><br><span class="line"></span><br><span class="line">>>>getcount = itemgetter(<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line">>>><span class="built_in">list</span>(<span class="built_in">map</span>(getcount, inventory))</span><br><span class="line"></span><br><span class="line">[<span class="number">3</span>, <span class="number">2</span>, <span class="number">5</span>,<span class="number">1</span>]</span><br><span class="line"></span><br><span class="line">>>><span class="built_in">sorted</span>(inventory, key=getcount)</span><br><span class="line"></span><br><span class="line">[(<span class="string">'orange'</span>,<span class="number">1</span>), (<span class="string">'banana'</span>, <span class="number">2</span>), (<span class="string">'apple'</span>, <span class="number">3</span>), (<span class="string">'pear'</span>, <span class="number">5</span>)]</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>operator. <strong>methodcaller(name[, args…])</strong></p>
<p>返回一个可调用的对象,该对象可以在其操作内调用名为name的方法。如果额外的参数或者关键字参数被给出,它们也会被传递给方法。例如:</p>
<p>•运行 f = methodcaller(‘name’),调用f(b),返回b. name()。</p>
<p>•运行 f = methodcaller(‘name’, ‘foo’, bar=1),调用f(b),返回b. name(‘foo’, bar=1)。</p>
<p>等价于:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">defmethodcaller(name, *args, **kwargs):</span><br><span class="line"></span><br><span class="line"> defcaller(obj):</span><br><span class="line"></span><br><span class="line"> returngetattr(obj, name)(*args, **kwargs)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> caller</span><br><span class="line"></span><br><span class="line"> </span><br></pre></td></tr></table></figure>
<p><strong>1. 函数的映射操作</strong></p>
<table>
<thead>
<tr>
<th>操作</th>
<th>语法</th>
<th>函数</th>
</tr>
</thead>
<tbody><tr>
<td>加法</td>
<td>a + b</td>
<td>add(a, b)</td>
</tr>
<tr>
<td>连接</td>
<td>seq1 + seq2</td>
<td>concat(seq1, seq2)</td>
</tr>
<tr>
<td>包含测试</td>
<td>obj in seq</td>
<td>contains(seq, obj)</td>
</tr>
<tr>
<td>除法</td>
<td>a / b</td>
<td>truediv(a, b)</td>
</tr>
<tr>
<td>除法</td>
<td>a // b</td>
<td>floordiv(a, b)</td>
</tr>
<tr>
<td>按位与</td>
<td>a & b</td>
<td>and_(a, b)</td>
</tr>
<tr>
<td>按位异或</td>
<td>a ^ b</td>
<td>xor(a, b)</td>
</tr>
<tr>
<td>按位求反</td>
<td>~ a</td>
<td>invert(a)</td>
</tr>
<tr>
<td>按位求或</td>
<td>a | b</td>
<td>or_(a, b)</td>
</tr>
<tr>
<td>求幂</td>
<td>a ** b</td>
<td>pow(a, b)</td>
</tr>
<tr>
<td>身份测试</td>
<td>a is b</td>
<td>is_(a, b)</td>
</tr>
<tr>
<td>身份测试</td>
<td>a is not b</td>
<td>is_not(a, b)</td>
</tr>
<tr>
<td>索引分配</td>
<td>obj[k] = v</td>
<td>setitem(obj, k, v)</td>
</tr>
<tr>
<td>索引删除</td>
<td>del obj[k]</td>
<td>delitem(obj, k)</td>
</tr>
<tr>
<td>得出索引键值</td>
<td>obj[k]</td>
<td>getitem(obj, k)</td>
</tr>
<tr>
<td>左移</td>
<td>a << b</td>
<td>lshift(a, b)</td>
</tr>
<tr>
<td>求模</td>
<td>a % b</td>
<td>mod(a, b)</td>
</tr>
<tr>
<td>乘法</td>
<td>a * b</td>
<td>mul(a, b)</td>
</tr>
<tr>
<td>矩阵乘法</td>
<td>a @ b</td>
<td>matmul(a, b)</td>
</tr>
<tr>
<td>求负值(数学)</td>
<td>- a</td>
<td>neg(a)</td>
</tr>
<tr>
<td>求负值(逻辑)</td>
<td>not a</td>
<td>not_(a)</td>
</tr>
<tr>
<td>求正值</td>
<td>+ a</td>
<td>pos(a)</td>
</tr>
<tr>
<td>右移</td>
<td>a >> b</td>
<td>rshift(a, b)</td>
</tr>
<tr>
<td>片段分配</td>
<td>seq[i: j] = values</td>
<td>setitem(seq, slice(I, j), values)</td>
</tr>
<tr>
<td>片段删除</td>
<td>del seq[i, j]</td>
<td>delitem(seq, slice(I, j))</td>
</tr>
<tr>
<td>得到片段</td>
<td>swq[i : j]</td>
<td>getitme(seq, slice(i, j))</td>
</tr>
<tr>
<td>字符串格式化</td>
<td>s % obj</td>
<td>mod(s, obj)</td>
</tr>
<tr>
<td>减法</td>
<td>a - b</td>
<td>sub(a, b)</td>
</tr>
<tr>
<td>真值测试</td>
<td>obj</td>
<td>truth(obj)</td>
</tr>
<tr>
<td>排序</td>
<td>a < b</td>
<td>lt(a, b)</td>
</tr>
<tr>
<td>排序</td>
<td>a <= b</td>
<td>le(a, b)</td>
</tr>
<tr>
<td>相等</td>
<td>a == b</td>
<td>eq(a, b)</td>
</tr>
<tr>
<td>不等</td>
<td>a !- b</td>
<td>ne(a, b)</td>
</tr>
<tr>
<td>排序</td>
<td>a >= b</td>
<td>ge(a, b)</td>
</tr>
<tr>
<td>排序</td>
<td>a > b</td>
<td>ge(a, b)</td>
</tr>
</tbody></table>
<p><strong>2.原址操作</strong></p>
<p>许多操作都有其原地操作版本。以下列出的函数提供了比普通语法操作更原始的原址操作。例如:语句x += y等价于x = operator. iadd(x, y)。其它方法提出说z = operatgor.iadd(x, y)等价于复合语句 z= x; z += y。</p>
<p>在其他例子中,注意,当一个原址操作被调用,计算和分配在讲个分割开来的步骤里进行。以下列出的原址函数值做了第一步,调用原址方法。第二步,分配却没有被操作。</p>
<p>对于不变的目标李如意字符串、数组和元组,被更新的值是需要计算的,但是不回配输入变量:</p>
<p>**>>>**a =’hello’</p>
<p>**>>>**iadd(a, ‘ world’)</p>
<p>‘helloworld’</p>
<p>**>>>**a</p>
<p>‘hello</p>
<p>对于可变对象例如列表和字典,预案之操作将会运行更新,因此不需要后续分配。</p>
<p>**>>>**s = [‘h’, ‘e’, ‘l’, ‘l’, ‘o’]</p>
<p>**>>>**iadd(s, [‘ ‘, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’])</p>
<p>[‘h’, ‘e’,’l’, ‘l’, ‘o’, ‘ ‘, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’]</p>
<p>**>>>**s</p>
<p>[‘h’, ‘e’,’l’, ‘l’, ‘o’, ‘ ‘, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’]</p>
<p>operator. <strong>iadd(a, b)</strong></p>
<p>operator. <strong><strong>iadd</strong>(a, b)</strong></p>
<p>a = iadd(a, b)等价于a += b。</p>
<p>operator. <strong>iand(a, b)</strong></p>
<p>operator. <strong><strong>iand</strong>(a, b)</strong></p>
<p>a = land(a, b)等价于a &= b。</p>
<p>operator. <strong>iconcat(a, b)</strong></p>
<p>operator. <strong><strong>iconcat</strong>(a, b)</strong></p>
<p>a = iconcat(a, b)等价于a += b,a与b都为序列。</p>
<p>operator. <strong>ifloordiv(a, b)</strong></p>
<p>operator. <strong><strong>ifloordiv</strong>(a, b)</strong></p>
<p>a = ifloordiv(a, b)等价于 a //= b。</p>
<p>operator. <strong>ilshift(a, b)</strong></p>
<p>operator. <strong><strong>ilshift</strong>(a, b)</strong></p>
<p>a = ilshift(a, b)等价于a <<= b。</p>
<p>operator. <strong>imod(a, b)</strong></p>
<p>operator. <strong><strong>imod</strong>(a, b)</strong></p>
<p>a = imud(a, b)等价于a %= b。</p>
<p>operator. <strong>imul(a, b)</strong></p>
<p>operator. <strong>imul(a, b)</strong></p>
<p>a = imul(a, b)等价于a *= b。</p>
<p>operator. <strong>imatmul(a, b)</strong></p>
<p>operator. <strong><strong>imatmul</strong>(a, b)</strong></p>
<p>a = imatmul(a, b)等价于a @= b。</p>
<p>operator. <strong>ior(a, b)</strong></p>
<p>operator. <strong><strong>ior</strong>(a, b)</strong></p>
<p>a = ior(a, b)等价于a |= b。</p>
<p>operator. <strong>ipow(a, b)</strong></p>
<p>operator. <strong><strong>ipow</strong>(a, b)</strong></p>
<p>a = ipow(a, b)等价于a ** b。</p>
<p>operator. <strong>irshift(a, b)</strong></p>
<p>operator. <strong><strong>irshift</strong>(a, b)</strong></p>
<p>a = irshift(a, b)等价于a >> b。</p>
<p>operator. <strong>isub(a, b)</strong></p>
<p>operator. <strong><strong>sub</strong>(a, b)</strong></p>
<p>a = isub(a, b)等价于a -= b。</p>
<p>operator. <strong>itruediv(a, b)</strong></p>
<p>operator. <strong><strong>itruediv</strong>(a, b)</strong></p>
<p>a = itruediv(a, b)等价于<strong>a /= b</strong>。</p>
<p>operator. <strong>ixor(a, b)</strong></p>
<p>operator. <strong><strong>ixor</strong>(a, b)</strong></p>
<p> a = ixor(a, b)等价于a ^= b。</p>
]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title>Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统</title>
<url>/posts/504574170.html</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/css/APlayer.min.css"><script src="/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script><p> 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能测试上自动化,而功能发布讲究三板斧:灰度、监控、止血。灰度属于测试范畴,止血则是亡羊补牢,今天我们来聊聊监控,提起监控,就不得不提在DepOps(自动化运维)领域鼎鼎有名的Prometheus(普罗米修斯),有人说这个开源系统的名字怎么有点如雷贯耳啊,没错,它的名字就是取自从宙斯手中为人类夺回圣火的古希腊神明普罗米修斯,而Prometheus的Logo恰恰就是奥林匹克圣火。Prometheus主要的功能就是可以无时不刻的监控所有部署在生产环境中的服务,如果服务出现问题则会及时报警以提醒开发者。</p>
<span id="more"></span>
<p><img src="https://v3u.cn/v3u/Public/Uploads/1607234636.png" alt="远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统"></p>
<p> 本次我们利用Docker和Prometheus以及周边的其他生态来搭建一套属于自己的全时监控告警平台,系统采用Centos7.6。</p>
<p> 首先在系统中安装Docker:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="comment">#升级yum</span></span><br><span class="line">sudo yum update</span><br><span class="line"><span class="comment">#卸载旧版本docker</span></span><br><span class="line">sudo yum remove docker docker-common docker-selinux docker-engine</span><br><span class="line"><span class="comment">#安装依赖</span></span><br><span class="line">sudo yum install -y yum-utils device-mapper-persistent-data lvm2</span><br><span class="line"><span class="comment">#设置源</span></span><br><span class="line">sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo</span><br><span class="line">sudo yum makecache fast</span><br><span class="line"><span class="comment">#安装docker</span></span><br><span class="line">sudo yum install docker-ce</span><br><span class="line"></span><br><span class="line"><span class="comment">#启动服务</span></span><br><span class="line">sudo systemctl start docker</span><br></pre></td></tr></table></figure>
<p> 安装成功后查看版本:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">[root@instance-53r3vagg tmp]<span class="comment"># docker -v</span></span><br><span class="line">Docker version <span class="number">19.03</span><span class="number">.14</span>, build 5eb3275d40</span><br></pre></td></tr></table></figure>
<p> 在下载镜像之前,我们需要设置一下国内源,用来提高下载速度,执行sudo vim /etc/docker/daemon.json 命令创建新文件,并添加如下代码:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="string">"registry-mirrors"</span>: [<span class="string">"https://d7grpode.mirror.aliyuncs.com"</span>]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p> 重启Docker:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">sudo systemctl restart docker</span><br></pre></td></tr></table></figure>
<p> 随后拉取Prometheus的Docker镜像:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">docker pull prom/prometheus:latest</span><br></pre></td></tr></table></figure>
<p> 这里我们以监控Redis数据库为例子,所以还需要拉取redis和redis状态收集器两个镜像:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">docker pull redis</span><br><span class="line">docker pull oliver006/redis_exporter:latest</span><br></pre></td></tr></table></figure>
<p> 分别启动redis和redis状态收集器:</p>
<p> 启动redis:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">docker run -d --name redis -p <span class="number">6379</span>:<span class="number">6379</span> redis</span><br></pre></td></tr></table></figure>
<p> 启动redis状态收集器</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">docker run -d --name redis_exporter -p <span class="number">9121</span>:<span class="number">9121</span> oliver006/redis_exporter:latest --redis.addr redis://<span class="number">120.48</span><span class="number">.20</span><span class="number">.113</span>:<span class="number">6379</span></span><br></pre></td></tr></table></figure>
<p> 这里redis_exporter监听服务器上的redis服务,而redis_exporter运行在9121端口上,注意redis的地址写服务器的公网ip。</p>
<p> 运行docker ps查看服务:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">[root@instance-53r3vagg tmp]<span class="comment"># docker ps</span></span><br><span class="line">CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</span><br><span class="line">51349113892a redis <span class="string">"docker-entrypoint.s…"</span> <span class="number">52</span> minutes ago Up <span class="number">52</span> minutes <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span>:<span class="number">6379</span>-><span class="number">6379</span>/tcp redis</span><br><span class="line">0ffcf81ea7ff oliver006/redis_exporter:latest <span class="string">"/redis_exporter --r…"</span> About an hour ago Up About an hour <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span>:<span class="number">9121</span>-><span class="number">9121</span>/tcp redis_exporter</span><br></pre></td></tr></table></figure>
<p> 随后创建prometheus的配置文件</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">vim /tmp/prometheus.yml</span><br></pre></td></tr></table></figure>
<p> 加入下面代码:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">scrape_configs:</span><br><span class="line"></span><br><span class="line"> <span class="comment"># The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.</span></span><br><span class="line"> - job_name: <span class="string">'redis'</span></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"> <span class="comment"># Override the global default and scrape targets from this job every 5 seconds.</span></span><br><span class="line"></span><br><span class="line"> scrape_interval: 5s</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> static_configs:</span><br><span class="line"></span><br><span class="line"> - targets: [<span class="string">'120.48.20.113:9121'</span>]</span><br></pre></td></tr></table></figure>
<p> 这里每隔5秒就获取一下服务运行信息,注意服务器地址要写公网ip,随后启动prometheus服务:</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line">docker run -d -p <span class="number">9090</span>:<span class="number">9090</span> -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest</span><br></pre></td></tr></table></figure>
<p> 此时,prometheus就运行在9090端口上,访问一下:<a href="http://120.48.20.113:9090/targets">http://120.48.20.113:9090/targets</a></p>