This repository was archived by the owner on Mar 18, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
2559 lines (2406 loc) · 379 KB
/
Copy pathsearch.xml
File metadata and controls
2559 lines (2406 loc) · 379 KB
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>Python期末复习</title>
<url>/2022/05/12/14-38-52/</url>
<content><![CDATA[<p>Python期末的一些东西,课件上的,后期应该会发课件。</p>
<span id="more"></span>
<h4 id="第一章(没啥东西)"><a href="#第一章(没啥东西)" class="headerlink" title="第一章(没啥东西)"></a>第一章(没啥东西)</h4><p>没写完</p>
<h4 id="第二章-Python程序实例解析"><a href="#第二章-Python程序实例解析" class="headerlink" title="第二章 Python程序实例解析"></a>第二章 Python程序实例解析</h4><p>第一个实例:温度转换</p>
<blockquote>
<p>1.为了使程序结构清晰,子语句采用“缩进”的格式进行编写。语句后不需要加符号,只有语句后有子语句的需要加冒号。</p>
<p>2.标识符的命名规则:以字母,数字,下划线和汉字构成,并且首字母不能是数字,中间不能出现空格,且大小写敏感。</p>
<p>3.Python中使用=进行赋值,可以同时对多个变量进行赋值。</p>
<p>x,y,z = 2,5,6</p>
<p>连续赋值:</p>
<p>x = y = z = 1</p>
<p>交换赋值:</p>
<p>x,y = y,x</p>
<p>4.Python中的字符串是用双引号或者单引号括起来的零到多个字符组成。字符串可以通过下表进行索引,正向递增索引(1,2,3,…)反向递减索引(…,-4,-3,-2,-1)</p>
<p>这里有图</p>
<p>可以使用区间索引的方式[N:M]表示从字符串的第N到M-1个字符,并且采用区间索引时可以正向和反向混合使用。</p>
<p>5.eval函数:能以Python表达式的方式解析执行字符串</p>
<p>6.input函数:从控制台获得用的输入。无论用户在控制台输入什么内容,input函数都是以字符串类型返回结果。</p>
<p>7.print函数:实例中用print函数输出信息,当输出纯字符时,可直接将待输出的内容传递给print函数,当输出变量值时,需采用format()方法格式化输出。</p>
</blockquote>
<p>第二个实例:Python绘制蟒蛇</p>
<blockquote>
<p>1.库导入</p>
<p>import <库名>,此后可通过<库名>.<函数名(参数)>的方式中调用库的所有函数。</p>
<p>form <库名> import <函数1,函数2,…></p>
<p>form <库名> import * ,其中*为通配符,表示<库名>的所有函数,调用函数,直接用<函数名(参数)>调用即可。</p>
<p>2.turtle.setup(width,heigh,startx,startxy):设置绘制区域大小和位置。</p>
<p>penup():抬起画笔</p>
<p>pendown():落下画笔</p>
<p>pensize():设置画笔的尺寸</p>
<p>pencolor():设置画笔颜色</p>
<p>fd(distance):画笔前进distance距离</p>
<p>seth(to_angle):改变绘制方向</p>
<p>circle(radius,extent):绘制弧线,radius为半径,extent为弧形角度。</p>
<p>range(start,stop[,step])</p>
<blockquote>
<ul>
<li>start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);</li>
<li>stop: 计数到 stop 结束,<strong>但不包括 stop</strong>。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5</li>
<li>step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)</li>
</ul>
</blockquote>
</blockquote>
<h4 id="第三章"><a href="#第三章" class="headerlink" title="第三章"></a>第三章</h4>]]></content>
<categories>
<category>Python程序设计</category>
</categories>
<tags>
<tag>Python</tag>
</tags>
</entry>
<entry>
<title>C艹中的面向对象编程</title>
<url>/2022/10/12/20-30-18/</url>
<content><![CDATA[<h2 id="面向对象程序的基本设计特点"><a href="#面向对象程序的基本设计特点" class="headerlink" title="面向对象程序的基本设计特点"></a>面向对象程序的基本设计特点</h2><ol>
<li><p><strong>抽象</strong></p>
<p>抽象是指具体问题或者对象进行概括,抽出其公共性质并加以描述的过程。一般情况下抽象分为<strong>数据抽象和行为抽象</strong>,其中数据抽象是指一个对象区别于另一个对象的特征,行为抽象是指某类对象的共同特征。</p>
</li>
<li><p><strong>封装</strong></p>
<p>封装是指将抽象所得的数据和行为相结合,隐藏对象属性和实现细节仅对外提供公共访问方式的过程。</p>
</li>
</ol>
<span id="more"></span>
<ol start="3">
<li><p><strong>继承</strong></p>
<p>继承是指通过代码复用在保持原有的类特性的基础上对子类进行具体说明的过程,通俗来讲<strong>继承就是精简重复代码的手段</strong>.</p>
</li>
<li><p><strong>多态</strong></p>
<p>多态是指一段程序能够处理多种类型对象的能力,<strong>函数重载</strong>就是实现多态的一种手段。在C++语言中多态可分为<strong>强制多态,重载多态,类型参数化多态和包含多态.</strong></p>
</li>
</ol>
<h2 id="类"><a href="#类" class="headerlink" title="类"></a>类</h2><p>类是 C++ 语言支持面向对象思想的重要机制,是实现封装的基本单元。</p>
<ol>
<li><strong>类的定义</strong></li>
</ol>
<p>类一般由<strong>类名、数据成员、函数成员</strong>三部分组成,定义类的基本形式为:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> 类的名称</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">public</span>:</span><br><span class="line"> 外部接口</span><br><span class="line"> <span class="keyword">protected</span>:</span><br><span class="line"> 保护性成员</span><br><span class="line"> <span class="keyword">private</span>:</span><br><span class="line"> 私有成员</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>其中 public、protected、private 表示访问控制属性,用于控制类成员的访问权限。特别的,<strong>没有分配控制属性的默认为 private 私有成员。</strong></p>
<p>2.<strong>类的成员访问控制</strong></p>
<p>使用 <strong>public</strong> 关键字声明的公有成员可在类外访问,即公有类型成员定义了外部接口。例如:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">"iostream"</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="comment">//定义类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">area</span>{</span><br><span class="line"> <span class="comment">//公有类成员</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="type">double</span> width,length;</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> area area1; <span class="comment">//定义对象area1</span></span><br><span class="line"> <span class="type">double</span> AREA; <span class="comment">//定义double类型变量AREA</span></span><br><span class="line"> area1.width = <span class="number">3</span>; <span class="comment">//外部访问public成员并赋值</span></span><br><span class="line"> area1.length = <span class="number">3.1</span>; <span class="comment">//外部访问public成员并赋值</span></span><br><span class="line"> AREA = area1.length * area1.width; <span class="comment">//计算面积</span></span><br><span class="line"> cout << <span class="string">"area:"</span> << AREA << endl;<span class="comment">//输出面积</span></span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>输出结果:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">area:9.3</span><br></pre></td></tr></table></figure>
<p>使用<strong>rpotected</strong>关键字声明受保护的成员可在子类中访问。例如:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">"iostream"</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="comment">//定义类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">area</span>{</span><br><span class="line"> <span class="comment">//受保护类成员</span></span><br><span class="line"> <span class="keyword">protected</span>:</span><br><span class="line"> <span class="type">double</span> width;</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">superarea</span>:area{</span><br><span class="line"> <span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">setsquarewidth</span><span class="params">(<span class="type">double</span> wid)</span></span>; <span class="comment">//定义成员函数</span></span><br><span class="line"> <span class="function"><span class="type">double</span> <span class="title">getsquarewidth</span><span class="params">(<span class="type">void</span>)</span></span>;</span><br><span class="line">};</span><br><span class="line"><span class="comment">//子类的成员函数</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">superarea::setsquarewidth</span><span class="params">(<span class="type">double</span> wid)</span> </span>{</span><br><span class="line"> width = wid; <span class="comment">//通过superarea子类访问父类area的受保护的成员变量。</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">double</span> <span class="title">superarea::getsquarewidth</span><span class="params">(<span class="type">void</span>)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> width;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> superarea square;</span><br><span class="line"> square.<span class="built_in">setsquarewidth</span>(<span class="number">3.1</span>);</span><br><span class="line"> cout << <span class="string">"width:"</span> << square.<span class="built_in">getsquarewidth</span>() << endl;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>此程序可分为相互独立的三部分,一类是对父类area的定义,而是对superarea子类及子类函数的定义,三是主函数main(),对于area类中受保护的成员width可以通过子类进行访问。</p>
<p>输出结果:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">width:3.1</span><br></pre></td></tr></table></figure>
<p>使用 <strong>private</strong> 关键字声明的私有成员只能被本类的成员函数访问。例如:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">"iostream"</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">area</span>{</span><br><span class="line"> <span class="comment">//定义公有成员</span></span><br><span class="line"> <span class="keyword">public</span>:</span><br><span class="line"> <span class="type">double</span> length;</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">setwidth</span><span class="params">(<span class="type">double</span> wid)</span></span>;</span><br><span class="line"> <span class="function"><span class="type">double</span> <span class="title">getwidth</span><span class="params">()</span></span>;</span><br><span class="line"> <span class="comment">//定义私有成员</span></span><br><span class="line"> <span class="keyword">private</span>:</span><br><span class="line"> <span class="type">double</span> width;</span><br><span class="line">};</span><br><span class="line"><span class="comment">//公有成员函数</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">area::setwidth</span><span class="params">(<span class="type">double</span> wid)</span> </span>{</span><br><span class="line"> width = wid;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="type">double</span> <span class="title">area::getwidth</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> width;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> area len1,wid1; <span class="comment">//对象</span></span><br><span class="line"> len1.length = <span class="number">3.1</span>; <span class="comment">//访问area共有类成员</span></span><br><span class="line"> cout << <span class="string">"length:"</span> << len1.length << endl;</span><br><span class="line"> wid1.<span class="built_in">setwidth</span>(<span class="number">3.2</span>); <span class="comment">//使用公有成员函数设置private私有成员变量的值</span></span><br><span class="line"> cout << <span class="string">"width:"</span> << wid1.<span class="built_in">getwidth</span>() << endl;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>此程序可以分为相对独立的两个部分,一是 area 类及其公有成员函数的定义,二是主函数 main()。私有成员 width 只能先被类中成员函数访问,再通过相关的公共成员函数实现外部访问。若在类外部使用 <code>area.width=3.2;</code> 方式访问 area 类的私有成员 width,则会报错。</p>
<p>输出结果:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">length:3.1</span><br><span class="line">width:3.2</span><br></pre></td></tr></table></figure>
<h2 id="对象"><a href="#对象" class="headerlink" title="对象"></a>对象</h2><p>在C++语言里,对象是某类事物的实例。其声明格式为:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">类名 对象名;</span><br></pre></td></tr></table></figure>
<p>例如声明area类的对象square:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">area square;</span><br></pre></td></tr></table></figure>
<p><strong>访问对象的成员</strong></p>
<p>定义了类及其成员对象后,则可访问对象的成员。访问<strong>数据成员</strong>的基本格式为:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">对象名.成员名</span><br></pre></td></tr></table></figure>
<p>例如访问area类的对象square的数据成员width:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">square.width = <span class="number">3.2</span>;</span><br></pre></td></tr></table></figure>
<p>访问<strong>函数成员</strong>得基本格式为:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">对象名.函数名(参数列表)</span><br></pre></td></tr></table></figure>
<p>例如访问 area 类的对象 square 的函数成员 setwidth(double wid):</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line">square.<span class="built_in">setwidth</span>(<span class="number">3.2</span>);</span><br></pre></td></tr></table></figure>
<p><strong>类的成员函数</strong></p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名{</span><br><span class="line"> 函数的返回类型 函数名(参数列表)</span><br><span class="line">}</span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">特别的,在类外说明函数的具体实现时,需要使用类名限制成员函数,其形式为:类名::函数名(参数列表)。</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line">返回值类型 类名::函数名(参数列表) {</span><br><span class="line"> 函数体</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>例如在 area 类中有成员函数 <font color=deeppink>void setwidth(double wid);</font>:</p>
<figure class="highlight c++"><table><tr><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">area</span>{</span><br><span class="line"> ...</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">setwidth</span><span class="params">(<span class="type">double</span> wid)</span></span>;</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//在类外说明函数的具体实现</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">area::setwidth</span><span class="params">(<span class="type">double</span> wid)</span></span>{</span><br><span class="line"> 函数体</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>C艹</category>
</categories>
<tags>
<tag>C艹</tag>
</tags>
</entry>
<entry>
<title>Hexo Next主题代码块美化</title>
<url>/2022/04/11/01-00-09/</url>
<content><![CDATA[<h4 id="1-正文"><a href="#1-正文" class="headerlink" title="1.正文"></a>1.正文</h4><p>在NexT主题下的scripts目录中创建events.js</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line"><span class="selector-tag">var</span> exec = require('child_process')<span class="selector-class">.exec</span>;</span><br><span class="line"></span><br><span class="line">hexo<span class="selector-class">.on</span>('new', function(data){</span><br><span class="line"> exec('open -<span class="selector-tag">a</span> MacDown ' + data<span class="selector-class">.path</span>);</span><br><span class="line">});</span><br></pre></td></tr></table></figure>
<span id="more"></span>
<p>在NexT主题下的scripts目录中创建codeblock.js</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="selector-tag">var</span> attributes = <span class="selector-attr">[ <span class="string">'autocomplete="off"'</span>, <span class="string">'autocorrect="off"'</span>, <span class="string">'autocapitalize="off"'</span>, <span class="string">'spellcheck="false"'</span>, <span class="string">'contenteditable="true"'</span>]</span></span><br><span class="line"></span><br><span class="line"><span class="selector-tag">var</span> attributesStr = attributes<span class="selector-class">.join</span>(' ')</span><br><span class="line"></span><br><span class="line">hexo<span class="selector-class">.extend</span><span class="selector-class">.filter</span><span class="selector-class">.register</span>('after_post_render', function (data) {</span><br><span class="line"> while (/<<span class="selector-tag">figure</span> class="highlight (<span class="selector-attr">[a-zA-Z]</span>+)">.*?<\/<span class="selector-tag">figure</span>>/<span class="selector-class">.test</span>(data<span class="selector-class">.content</span>)) {</span><br><span class="line"> data<span class="selector-class">.content</span> = data<span class="selector-class">.content</span><span class="selector-class">.replace</span>(/<<span class="selector-tag">figure</span> class="highlight (<span class="selector-attr">[a-zA-Z]</span>+)">.*?<\/<span class="selector-tag">figure</span>>/, function () {</span><br><span class="line"> <span class="selector-tag">var</span> language = RegExp.$<span class="number">1</span> || 'plain'</span><br><span class="line"> <span class="selector-tag">var</span> lastMatch = RegExp<span class="selector-class">.lastMatch</span></span><br><span class="line"> lastMatch = lastMatch<span class="selector-class">.replace</span>(/<<span class="selector-tag">figure</span> class="highlight /, '<<span class="selector-tag">figure</span> class="iseeu highlight /')</span><br><span class="line"> return '<<span class="selector-tag">div</span> class="highlight-wrap"' + attributesStr + 'data-rel="' + language<span class="selector-class">.toUpperCase</span>() + '">' + lastMatch + '</<span class="selector-tag">div</span>>'</span><br><span class="line"> })</span><br><span class="line"> }</span><br><span class="line"> return data</span><br><span class="line">})</span><br></pre></td></tr></table></figure>
<p>在 themes/next/source/css/_common/components/highlight/highlight.styl 的基础上调整了下样式,包裹上一层类 mac Panel 的效果。</p>
<p><strong>==注: 这里不用删除原来highlight.styl里边的内容,只需要在末尾添加下面代码即可==</strong></p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line"><span class="selector-class">.highlight-wrap</span><span class="selector-attr">[data-rel]</span> {</span><br><span class="line"> <span class="attribute">position</span>: relative;</span><br><span class="line"> <span class="attribute">overflow</span>: hidden;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">5px</span>;</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">10px</span> <span class="number">30px</span> <span class="number">0px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.4</span>);</span><br><span class="line"> <span class="attribute">margin</span>: <span class="number">35px</span> <span class="number">0</span>;</span><br><span class="line"> ::-webkit-scrollbar {</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">10px</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> ::-webkit-scrollbar-track {</span><br><span class="line"> -webkit-<span class="attribute">box-shadow</span>: inset <span class="number">0</span> <span class="number">0</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.3</span>);</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">10px</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> ::-webkit-scrollbar-thumb {</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">10px</span>;</span><br><span class="line"> -webkit-<span class="attribute">box-shadow</span>: inset <span class="number">0</span> <span class="number">0</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.5</span>);</span><br><span class="line"> }</span><br><span class="line"> &<span class="selector-pseudo">::before</span> {</span><br><span class="line"> <span class="attribute">color</span>: white;</span><br><span class="line"> <span class="attribute">content</span>: <span class="built_in">attr</span>(data-rel);</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">38px</span>;</span><br><span class="line"> <span class="attribute">line-height</span>: <span class="number">38px</span>;</span><br><span class="line"> <span class="attribute">background</span>: <span class="number">#21252b</span>;</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#fff</span>;</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line"> <span class="attribute">position</span>: absolute;</span><br><span class="line"> <span class="attribute">top</span>: <span class="number">0</span>;</span><br><span class="line"> <span class="attribute">left</span>: <span class="number">0</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">font-family</span>: <span class="string">'Source Sans Pro'</span>, sans-serif;</span><br><span class="line"> <span class="attribute">font-weight</span>: bold;</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">0px</span> <span class="number">80px</span>;</span><br><span class="line"> <span class="attribute">text-indent</span>: <span class="number">15px</span>;</span><br><span class="line"> <span class="attribute">float</span>: left;</span><br><span class="line"> }</span><br><span class="line"> &<span class="selector-pseudo">::after</span> {</span><br><span class="line"> <span class="attribute">content</span>: <span class="string">" "</span>;</span><br><span class="line"> <span class="attribute">position</span>: absolute;</span><br><span class="line"> -webkit-<span class="attribute">border-radius</span>: <span class="number">50%</span>;</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">50%</span>;</span><br><span class="line"> <span class="attribute">background</span>: <span class="number">#fc625d</span>;</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">height</span>: <span class="number">12px</span>;</span><br><span class="line"> <span class="attribute">top</span>: <span class="number">0</span>;</span><br><span class="line"> <span class="attribute">left</span>: <span class="number">20px</span>;</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">13px</span>;</span><br><span class="line"> -webkit-<span class="attribute">box-shadow</span>: <span class="number">20px</span> <span class="number">0px</span> <span class="number">#fdbc40</span>, <span class="number">40px</span> <span class="number">0px</span> <span class="number">#35cd4b</span>;</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">20px</span> <span class="number">0px</span> <span class="number">#fdbc40</span>, <span class="number">40px</span> <span class="number">0px</span> <span class="number">#35cd4b</span>;</span><br><span class="line"> <span class="attribute">z-index</span>: <span class="number">3</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>在highlight.styl中找到如下部分代码,修改margin为36px 0 0 0:</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">$<span class="selector-tag">code</span>-block {</span><br><span class="line"> <span class="attribute">overflow</span>: auto;</span><br><span class="line">- <span class="attribute">margin</span>: <span class="number">20px</span> <span class="number">0</span>; //这一行改为</span><br><span class="line">+ <span class="attribute">margin</span>: <span class="number">36px</span> <span class="number">0</span> <span class="number">0</span> <span class="number">0</span>; //这个</span><br><span class="line"> <span class="attribute">padding</span>: <span class="number">0</span>;</span><br><span class="line"> <span class="attribute">font-size</span> $<span class="selector-tag">code</span>-<span class="attribute">font-size</span>;</span><br><span class="line"> <span class="attribute">color</span>: $highlight-foreground;</span><br><span class="line"> <span class="attribute">background</span>: $highlight-background;</span><br><span class="line"> <span class="attribute">line-height</span>: $line-height-code-block;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>在主题中将高亮代码变为:night eighties</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">highlight_theme: night eighties</span><br></pre></td></tr></table></figure>
<p>最后来要在网站根目录下打开Git Bash,然后执行以下命令重新生成静态页面:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">hexo clean && hexo g</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Hexo配置&美化</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>NexT主题</tag>
<tag>主题美化</tag>
</tags>
</entry>
<entry>
<title>一、启发式搜索</title>
<url>/2022/04/18/13-00-06/</url>
<content><![CDATA[<h4 id="1-人工智能中的搜索"><a href="#1-人工智能中的搜索" class="headerlink" title="1.人工智能中的搜索"></a>1.人工智能中的搜索</h4><p>在<strong>海量信息源</strong>中利用<strong>问题求解器</strong>,加上一定的<strong>约束条件</strong>和<strong>额外信息</strong>即可找到<strong>问题所对应的答案</strong>。</p>
<span id="more"></span>
<p><strong>1.寻找最短路径为例</strong></p>
<p><a href="https://imgtu.com/i/LdFksH"><img src="https://s1.ax1x.com/2022/04/18/LdFksH.png" alt="LdFksH.png"></a></p>
<p>寻找出路径最短,时间最少,价钱最经济的路径</p>
<blockquote>
<p>搜索算法的形式化描述:<strong>状态,动作,状态转移,路径,测试目标</strong>。</p>
<p>状态:从原问题转化出的问题描述。</p>
<p>动作:从当前时刻所处的状态转移到下一时刻所处状态所进行的操作。一般而言这些操作都是离散的。</p>
<p>状态转移:对面某一时刻对应状态进行某一种操作后,所能够到达的状态。</p>
<p>路径:一个状态序列。该状态序列被一系列操作所连接。</p>
<p>测试目标:评估当前状态是否为所求解的目标状态。</p>
</blockquote>
<p><strong>2.搜索算法:启发式搜索(有信息搜索)</strong></p>
<p>在搜索的过程中利用与所求解问题相关的辅助信息,其代表算法为<strong>贪婪最佳优先搜索</strong>和<strong>A*搜索</strong>。</p>
<p>有信息搜索要定义如下辅助信息:</p>
<p><a href="https://imgtu.com/i/LdAHRf"><img src="https://s1.ax1x.com/2022/04/18/LdAHRf.png" alt="LdAHRf.png"></a></p>
<p>贪婪最佳优先搜索:<strong>评价函数f(n)=启发函数h(n)</strong></p>
<p><a href="https://imgtu.com/i/LdEUYt"><img src="https://s1.ax1x.com/2022/04/18/LdEUYt.png" alt="LdEUYt.png"></a></p>
<p>根据上图所知,从当前Arad出发,选择相邻的后续节点并找出其最短路径。上图找出的最短直线距离是:Arad→Sibiu→Fagaras→Bucharest。此为贪婪最佳优先算法。</p>
<p>不足之处:</p>
<p><a href="https://imgtu.com/i/LdZwqg"><img src="https://s1.ax1x.com/2022/04/18/LdZwqg.png" alt="LdZwqg.png"></a></p>
<p>为了解决上述问题,提出了<strong>A*算法。</strong></p>
<p><strong>3.搜索算法:A*搜索</strong></p>
]]></content>
<categories>
<category>人工智能</category>
</categories>
<tags>
<tag>人工智能</tag>
</tags>
</entry>
<entry>
<title>markdown笔记</title>
<url>/2022/04/09/11-49-01/</url>
<content><![CDATA[<h3 id="markdown笔记"><a href="#markdown笔记" class="headerlink" title="markdown笔记"></a>markdown笔记</h3><h5 id="1-代码块"><a href="#1-代码块" class="headerlink" title="1.代码块"></a>1.代码块</h5><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="code">```java 语言代码</span></span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span>{</span><br><span class="line"> System.out.print(<span class="string">"Hello World!"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<span id="more"></span>
<h5 id="2-标题"><a href="#2-标题" class="headerlink" title="2.标题"></a>2.标题</h5><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="section"># 一级标题</span></span><br><span class="line"><span class="section">## 二级标题</span></span><br><span class="line"><span class="section">### 三级标题</span></span><br><span class="line">...</span><br><span class="line"><span class="section">###### 六级标题</span></span><br></pre></td></tr></table></figure>
<h1 id="一级标题"><a href="#一级标题" class="headerlink" title="一级标题"></a>一级标题</h1><h2 id="二级标题"><a href="#二级标题" class="headerlink" title="二级标题"></a>二级标题</h2><h3 id="三级标题"><a href="#三级标题" class="headerlink" title="三级标题"></a>三级标题</h3><h3 id="…"><a href="#…" class="headerlink" title="…"></a>…</h3><h6 id="六级标题"><a href="#六级标题" class="headerlink" title="六级标题"></a>六级标题</h6><h3 id="3-字体"><a href="#3-字体" class="headerlink" title="3.字体"></a>3.字体</h3><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="strong">**加粗**</span></span><br><span class="line">==高亮==</span><br><span class="line">~~删除线~~</span><br><span class="line"><span class="emphasis">*斜体*</span></span><br></pre></td></tr></table></figure>
<p><strong>加粗</strong></p>
<p><del>删除线</del></p>
<p><em>斜体</em></p>
<h3 id="4-引用"><a href="#4-引用" class="headerlink" title="4.引用"></a>4.引用</h3><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">>作者:某某某</span><br><span class="line">>>二级作者</span><br><span class="line">>>>三级作者</span><br></pre></td></tr></table></figure>
<blockquote>
<p>作者:某某某</p>
<blockquote>
<p>二级作者</p>
<blockquote>
<p>三级作者</p>
</blockquote>
</blockquote>
</blockquote>
<h3 id="5-分割"><a href="#5-分割" class="headerlink" title="5.分割"></a>5.分割</h3><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line"><span class="section">分割线</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line">分割线2</span><br><span class="line"><span class="strong">**<span class="emphasis">*</span></span></span><br></pre></td></tr></table></figure>
<p>分割线1</p>
<hr>
<p>分割线2</p>
<hr>
<h3 id="6-插图"><a href="#6-插图" class="headerlink" title="6.插图"></a>6.插图</h3><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">在线图片</span><br><span class="line"></span><br><span class="line">本地图片</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p><img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201804%2F18%2F2018041882506_fGU3F.thumb.700_0.jpeg&refer=http%3A%2F%2Fb-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1651976555&t=832a30901b8a64eb4e655e9170d08f84" alt="照片"></p>
<h3 id="7-超链接"><a href="#7-超链接" class="headerlink" title="7.超链接"></a>7.超链接</h3><figure class="highlight markdown"><table><tr><td class="code"><pre><span class="line">[<span class="string">名字</span>](<span class="link">地址</span>)</span><br></pre></td></tr></table></figure>
<p><a href="https://music.163.com/playlist?id=557481298&userid=392935859">我的网易云歌单</a></p>
<h3 id="8-列表"><a href="#8-列表" class="headerlink" title="8.列表"></a>8.列表</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">无序列表</span><br><span class="line">- 目录1</span><br><span class="line">- 目录2</span><br><span class="line">- 目录3</span><br><span class="line">- 目录4</span><br><span class="line">有序列表</span><br><span class="line">1. 名称</span><br></pre></td></tr></table></figure>
<ul>
<li><p>无序列表</p>
</li>
<li><p>目录1</p>
</li>
<li><p>目录2</p>
</li>
</ul>
<ol>
<li><p>有序列表</p>
</li>
<li><p>自动生成的2</p>
</li>
</ol>
<h3 id="9-表格"><a href="#9-表格" class="headerlink" title="9.表格"></a>9.表格</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">| 你好 | 你好 | 早安 |</span><br><span class="line">| ---- | ---- | ---- |</span><br><span class="line">| 晚安 | | |</span><br><span class="line">| | | |</span><br><span class="line">| | | |</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p><strong>表格</strong></p>
<table>
<thead>
<tr>
<th>你好</th>
<th>你好</th>
<th>早安</th>
</tr>
</thead>
<tbody><tr>
<td>晚安</td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
]]></content>
<categories>
<category>杂七杂八的笔记</category>
</categories>
<tags>
<tag>随想随记</tag>
</tags>
</entry>
<entry>
<title>Hexo Next8.x美化配置记录</title>
<url>/2022/04/15/09-42-48/</url>
<content><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>网上收集的方法做一个整合贴。</p>
<span id="more"></span>
<h4 id="1-基础配置"><a href="#1-基础配置" class="headerlink" title="1.基础配置"></a>1.基础配置</h4><p><strong>(1)安装Next8.x</strong></p>
<p>可以直接下载Next,将文件夹直接复制到hexo项目的theme文件夹下,修改项目的_config.yml切换主题。</p>
<p>或者直接使用git下载Next最新版本。<a href="https://github.com/next-theme/hexo-theme-next">Next8的Github</a></p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> hexo</span><br><span class="line">git clobe https://github.com/next-theme/hexo-theme-next themes/next</span><br></pre></td></tr></table></figure>
<p><strong>(2)将博客更换为next主题</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">theme:</span> <span class="string">next</span></span><br></pre></td></tr></table></figure>
<p><strong>(3)配置基本信息</strong></p>
<p>这里的配置项是在博客根目录下的_config.yml,并非主题下的。</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Site</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">樱花换小鱼干</span> <span class="comment">#博客的标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">''</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">''</span> <span class="comment">#博客的描述</span></span><br><span class="line"><span class="attr">keywords:</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">樱花换小鱼干</span> <span class="comment">#你的笔名</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span> <span class="comment">#主题语言</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">''</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p><strong>(4)选配主题的几种排版</strong></p>
<p>有四种,只能选其一,去掉注释#</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Schemes</span></span><br><span class="line"><span class="comment">#scheme: Muse</span></span><br><span class="line"><span class="comment">#scheme: Mist</span></span><br><span class="line"><span class="comment">#scheme: Pisces</span></span><br><span class="line"><span class="attr">scheme:</span> <span class="string">Gemini</span></span><br></pre></td></tr></table></figure>
<p><strong>(7)配置语言</strong></p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># You can set a language value if you prefer a translated version of CC license, e.g. deed.zh</span></span><br><span class="line"><span class="comment"># CC licenses are available in 39 languages, you can find the specific and correct abbreviation you need on https://creativecommons.org</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br></pre></td></tr></table></figure>
<p>Next支持多种语言。进入 /next/languages,找到我们所需要要的语言,然后将其文件名替换上面的zh-CN.</p>
<p><strong>(8)配置菜单</strong></p>
<p>Next默认设置两个菜单项home和archives。</p>
<p>菜单项包含三个值:key:/link/ || icon</p>
<p>注意:key,对大小写敏感。</p>
<p>key即为下图中‘:’前单词,例如home,</p>
<p>/link 、icon与之对应.</p>
<p>key与之前设置的luanage相对应,如果设置为中文,则会自动转换为中文。</p>
<p>/link 为网页对应的url</p>
<p>icon 为对应字体图标的类名。</p>
<p>这里字体图标采用font-awesome.</p>
<p>如果要自定义菜单项,修改Next配置文件,如下:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line"> <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-home</span></span><br><span class="line"> <span class="attr">about:</span> <span class="string">/about/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-user</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-tags</span></span><br><span class="line"> <span class="comment">#categories: /categories/ || fa fa-th</span></span><br><span class="line"> <span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-archive</span></span><br><span class="line"> <span class="comment">#schedule: /schedule/ || fa fa-calendar</span></span><br><span class="line"> <span class="comment">#sitemap: /sitemap.xml || fa fa-sitemap</span></span><br><span class="line"> <span class="comment">#commonweal: /404/ || fa fa-heartbeat</span></span><br></pre></td></tr></table></figure>
<p>菜单配置完成后需要配置对应的文件夹,否则点击相应的栏目会报错。</p>
<p>比如要创建关于菜单,除了要在menu配置项目里取消注释,还要在站点根目录配置相应的链接。比如,我想要创建tags菜单,除了要取消menu的tags注释外,还要再根目录执行以下命令:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">hexo new page tags</span><br></pre></td></tr></table></figure>
<p>其他的菜单类似。也可以在相应的目录里配置要显示的内容,支持markdown语法。</p>
<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: 2022-04-15 11:41:49</span><br><span class="line"><span class="section">type: "tags"</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></table></figure>
<p>更改ttle后在站点的对应菜单会显示你更改的内容,此文本不可被删除,否则报错。</p>
<p>如果自动生成的index.md里没有type配置项请自行按照上面的格式添加。</p>
<p><strong>(9)配置favicon</strong></p>
<p>站点默认使用的favicon是Next Icon 存在于hexo-site/themes/next/source/images/目录下。里面存在有对应不同设备使用不同的favicon。在这里我们可以使用自定义favicon来替代它。</p>
<p>首先,我们将我们的favicon存放到hexo-site/themes/next/source/images/ 目录下,然后配置项目配置文件,否则favicon将不会被更改。</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">favicon:</span></span><br><span class="line"> <span class="attr">small:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">medium:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">apple_touch_icon:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">safari_pinned_tab:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="comment">#android_manifest: /manifest.json</span></span><br></pre></td></tr></table></figure>
<p><strong>(10)配置头像</strong></p>
<p>在Next中默认不展示头像,如需展示,我们需要进入Next配置文件,进行更改。</p>
<p>修改自己头像</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Sidebar Avatar</span></span><br><span class="line"><span class="attr">avatar:</span> </span><br><span class="line"> <span class="comment"># Replace the default image and set the url here.</span></span><br><span class="line"> <span class="attr">url:</span> <span class="string">/images/xiaoyugan.png</span> <span class="comment">#/images/avatar.gif</span></span><br><span class="line"> <span class="comment"># 这里置为true可以显示圆形头像。</span></span><br><span class="line"> <span class="attr">rounded:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># 这里置为true鼠标放在头像上会转动</span></span><br><span class="line"> <span class="attr">rotated:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure>
<p>其中url可以直接指定url地址</p>
<p><strong>(11)启用本地搜索</strong></p>
<p>在主题配置文件中找到</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Local Search</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/next-theme/hexo-generator-searchdb</span></span><br><span class="line"><span class="attr">local_search:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># If auto, trigger search by changing input.</span></span><br><span class="line"> <span class="comment"># If manual, trigger search by pressing enter key or search button.</span></span><br><span class="line"> <span class="attr">trigger:</span> <span class="string">auto</span></span><br><span class="line"> <span class="comment"># Show top n results per article, show all results by setting to -1</span></span><br><span class="line"> <span class="attr">top_n_per_article:</span> <span class="number">1</span></span><br><span class="line"> <span class="comment"># Unescape html strings to the readable one.</span></span><br><span class="line"> <span class="attr">unescape:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Preload the search data when the page loads.</span></span><br><span class="line"> <span class="attr">preload:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure>
<p>将enable置为true,并在站点根目录下执行:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install hexo-generator-searchdb --save</span><br></pre></td></tr></table></figure>
<p><strong>(11)启用不蒜子阅读统计</strong></p>
<p>在主题配置目录中找到</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Show Views / Visitors of the website / page with busuanzi.</span></span><br><span class="line"><span class="comment"># For more information: http://ibruce.info/2015/04/04/busuanzi/</span></span><br><span class="line"><span class="attr">busuanzi_count:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_visitors:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_visitors_icon:</span> <span class="string">fa</span> <span class="string">fa-user</span></span><br><span class="line"> <span class="attr">total_views:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_views_icon:</span> <span class="string">fa</span> <span class="string">fa-eye</span></span><br><span class="line"> <span class="attr">post_views:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">post_views_icon:</span> <span class="string">far</span> <span class="string">fa-eye</span></span><br></pre></td></tr></table></figure>
<p>将enable置为true</p>
<p><strong>(12)添加代码复制按钮</strong></p>
<p>找到如下配置项</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="attr">codeblock:</span></span><br><span class="line"> <span class="comment"># Code Highlight theme</span></span><br><span class="line"> <span class="comment"># All available themes: https://theme-next.js.org/highlight/</span></span><br><span class="line"> <span class="attr">theme:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">default</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">stackoverflow-dark</span></span><br><span class="line"> <span class="attr">prism:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">prism</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">prism-dark</span></span><br><span class="line"> <span class="comment"># Add copy button on codeblock</span></span><br><span class="line"> <span class="attr">copy_button:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Available values: default | flat | mac</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">mac</span></span><br></pre></td></tr></table></figure>
<p>将copy_button的enable改为true即可,style可以选择default | flat | mac这三种。</p>
<p><strong>(13)安装相关依赖</strong></p>
<p>分别在站点根目录和主题根目录下执行:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install --save</span><br></pre></td></tr></table></figure>
<p>至此,基本配置完成,站点基本元素已完善。</p>
<p><strong>(14)还有一些琐碎的配置</strong></p>
<p>如果觉得太麻烦可以直接用我的这一份配置文件:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># ===============================================================</span></span><br><span class="line"><span class="comment"># It's recommended to use Alternate Theme Config to configure NexT</span></span><br><span class="line"><span class="comment"># Modifying this file may result in merge conflict</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/getting-started/configuration</span></span><br><span class="line"><span class="comment"># ===============================================================</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Theme Core Configuration Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Allow to cache content generation.</span></span><br><span class="line"><span class="attr">cache:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Remove unnecessary files after hexo generate.</span></span><br><span class="line"><span class="attr">minify:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Define custom file paths.</span></span><br><span class="line"><span class="comment"># Create your custom files in site directory `source/_data` and uncomment needed files below.</span></span><br><span class="line"><span class="attr">custom_file_path:</span></span><br><span class="line"> <span class="comment">#head: source/_data/head.njk</span></span><br><span class="line"> <span class="comment">#header: source/_data/header.njk</span></span><br><span class="line"> <span class="comment">#sidebar: source/_data/sidebar.njk</span></span><br><span class="line"> <span class="comment">#postMeta: source/_data/post-meta.njk</span></span><br><span class="line"> <span class="comment">#postBodyEnd: source/_data/post-body-end.njk</span></span><br><span class="line"> <span class="comment">#footer: source/_data/footer.njk</span></span><br><span class="line"> <span class="comment">#bodyEnd: source/_data/body-end.njk</span></span><br><span class="line"> <span class="comment">#variable: source/_data/variables.styl</span></span><br><span class="line"> <span class="comment">#mixin: source/_data/mixins.styl</span></span><br><span class="line"> <span class="comment">#style: source/_data/styles.styl</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Scheme Settings</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Schemes</span></span><br><span class="line"><span class="comment">#scheme: Muse</span></span><br><span class="line"><span class="comment">#scheme: Mist</span></span><br><span class="line"><span class="comment">#scheme: Pisces</span></span><br><span class="line"><span class="attr">scheme:</span> <span class="string">Gemini</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Dark Mode</span></span><br><span class="line"><span class="attr">darkmode:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Site Information Settings</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="attr">favicon:</span></span><br><span class="line"> <span class="attr">small:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">medium:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">apple_touch_icon:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="attr">safari_pinned_tab:</span> <span class="string">/images/xiaoyugan.png</span></span><br><span class="line"> <span class="comment">#android_manifest: /manifest.json</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Custom Logo (Warning: Do not support scheme Mist)</span></span><br><span class="line"><span class="attr">custom_logo:</span> <span class="comment">#/uploads/custom-logo.jpg</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Creative Commons 4.0 International License.</span></span><br><span class="line"><span class="comment"># See: https://creativecommons.org/about/cclicenses/</span></span><br><span class="line"><span class="attr">creative_commons:</span></span><br><span class="line"> <span class="comment"># Available values: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | cc-zero</span></span><br><span class="line"> <span class="attr">license:</span> <span class="string">by-nc-sa</span></span><br><span class="line"> <span class="comment"># Available values: big | small</span></span><br><span class="line"> <span class="attr">size:</span> <span class="string">small</span></span><br><span class="line"> <span class="attr">sidebar:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">post:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># You can set a language value if you prefer a translated version of CC license, e.g. deed.zh</span></span><br><span class="line"> <span class="comment"># CC licenses are available in 39 languages, you can find the specific and correct abbreviation you need on https://creativecommons.org</span></span><br><span class="line"> <span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Open graph settings</span></span><br><span class="line"><span class="comment"># See: https://hexo.io/docs/helpers#open-graph</span></span><br><span class="line"><span class="attr">open_graph:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">options:</span></span><br><span class="line"> <span class="comment">#twitter_card: <twitter:card></span></span><br><span class="line"> <span class="comment">#twitter_id: <twitter:creator></span></span><br><span class="line"> <span class="comment">#twitter_site: <twitter:site></span></span><br><span class="line"> <span class="comment">#twitter_image: <twitter:image></span></span><br><span class="line"> <span class="comment">#google_plus: <g+:profile_link></span></span><br><span class="line"> <span class="comment">#fb_admins: <fb:admin_id></span></span><br><span class="line"> <span class="comment">#fb_app_id: <fb:app_id></span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Menu Settings</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Usage: `Key: /link/ || icon`</span></span><br><span class="line"><span class="comment"># Key is the name of menu item. If the translation for this item is available, the translated text will be loaded, otherwise the Key name will be used. Key is case-sensitive.</span></span><br><span class="line"><span class="comment"># Value before `||` delimiter is the target link, value after `||` delimiter is the name of Font Awesome icon.</span></span><br><span class="line"><span class="comment"># External url should start with http:// or https://</span></span><br><span class="line"><span class="attr">menu:</span></span><br><span class="line"> <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-home</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-tags</span></span><br><span class="line"> <span class="attr">categories:</span> <span class="string">/categories/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-th</span></span><br><span class="line"> <span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-archive</span></span><br><span class="line"> <span class="attr">about:</span> <span class="string">/about/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-user</span></span><br><span class="line"> <span class="comment">#schedule: /schedule/ || fa fa-calendar</span></span><br><span class="line"> <span class="comment">#sitemap: /sitemap.xml || fa fa-sitemap</span></span><br><span class="line"> <span class="comment">#commonweal: /404/ || fa fa-heartbeat</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Enable / Disable menu icons / item badges.</span></span><br><span class="line"><span class="attr">menu_settings:</span></span><br><span class="line"> <span class="attr">icons:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">badges:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Sidebar Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/sidebar</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="attr">sidebar:</span></span><br><span class="line"> <span class="comment"># Sidebar Position.</span></span><br><span class="line"> <span class="attr">position:</span> <span class="string">left</span></span><br><span class="line"> <span class="comment">#position: right</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Manual define the sidebar width. If commented, will be default for:</span></span><br><span class="line"> <span class="comment"># Muse | Mist: 320</span></span><br><span class="line"> <span class="comment"># Pisces | Gemini: 240</span></span><br><span class="line"> <span class="comment">#width: 300</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Sidebar Display (only for Muse | Mist), available values:</span></span><br><span class="line"> <span class="comment"># - post expand on posts automatically. Default.</span></span><br><span class="line"> <span class="comment"># - always expand for all pages automatically.</span></span><br><span class="line"> <span class="comment"># - hide expand only when click on the sidebar toggle icon.</span></span><br><span class="line"> <span class="comment"># - remove totally remove sidebar including sidebar toggle.</span></span><br><span class="line"> <span class="attr">display:</span> <span class="string">post</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Sidebar padding in pixels.</span></span><br><span class="line"> <span class="attr">padding:</span> <span class="number">18</span></span><br><span class="line"> <span class="comment"># Sidebar offset from top menubar in pixels (only for Pisces | Gemini).</span></span><br><span class="line"> <span class="attr">offset:</span> <span class="number">12</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Sidebar Avatar</span></span><br><span class="line"><span class="attr">avatar:</span></span><br><span class="line"> <span class="comment"># Replace the default image and set the url here.</span></span><br><span class="line"> <span class="attr">url:</span> <span class="string">/images/xiaoyugan.png</span> <span class="comment">#/images/avatar.gif</span></span><br><span class="line"> <span class="comment"># If true, the avatar will be displayed in circle.</span></span><br><span class="line"> <span class="attr">rounded:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># If true, the avatar will be rotated with the cursor.</span></span><br><span class="line"> <span class="attr">rotated:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Posts / Categories / Tags in sidebar.</span></span><br><span class="line"><span class="attr">site_state:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Social Links</span></span><br><span class="line"><span class="comment"># Usage: `Key: permalink || icon`</span></span><br><span class="line"><span class="comment"># Key is the link label showing to end users.</span></span><br><span class="line"><span class="comment"># Value before `||` delimiter is the target permalink, value after `||` delimiter is the name of Font Awesome icon.</span></span><br><span class="line"><span class="attr">social:</span></span><br><span class="line"> <span class="comment">#GitHub: https://github.com/yourname || fab fa-github</span></span><br><span class="line"> <span class="attr">E-Mail:</span> <span class="string">mailto:orange_lun@outlook.com</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-envelope</span></span><br><span class="line"> <span class="comment">#Weibo: https://weibo.com/yourname || fab fa-weibo</span></span><br><span class="line"> <span class="comment">#Google: https://plus.google.com/yourname || fab fa-google</span></span><br><span class="line"> <span class="comment">#Twitter: https://twitter.com/yourname || fab fa-twitter</span></span><br><span class="line"> <span class="comment">#FB Page: https://www.facebook.com/yourname || fab fa-facebook</span></span><br><span class="line"> <span class="comment">#StackOverflow: https://stackoverflow.com/yourname || fab fa-stack-overflow</span></span><br><span class="line"> <span class="comment">#YouTube: https://youtube.com/yourname || fab fa-youtube</span></span><br><span class="line"> <span class="comment">#Instagram: https://instagram.com/yourname || fab fa-instagram</span></span><br><span class="line"> <span class="comment">#Skype: skype:yourname?call|chat || fab fa-skype</span></span><br><span class="line"></span><br><span class="line"><span class="attr">social_icons:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">icons_only:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">transition:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Blog rolls</span></span><br><span class="line"><span class="attr">links_settings:</span></span><br><span class="line"> <span class="attr">icon:</span> <span class="string">fa</span> <span class="string">fa-globe</span></span><br><span class="line"> <span class="attr">title:</span> <span class="string">Links</span></span><br><span class="line"> <span class="comment"># Available values: block | inline</span></span><br><span class="line"> <span class="attr">layout:</span> <span class="string">block</span></span><br><span class="line"></span><br><span class="line"><span class="attr">links:</span></span><br><span class="line"> <span class="comment">#Title: https://example.com</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Table of Contents in the Sidebar</span></span><br><span class="line"><span class="comment"># Front-matter variable (nonsupport wrap expand_all).</span></span><br><span class="line"><span class="attr">toc:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Automatically add list number to toc.</span></span><br><span class="line"> <span class="attr">number:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># If true, all words will placed on next lines if header width longer then sidebar width.</span></span><br><span class="line"> <span class="attr">wrap:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># If true, all level of TOC in a post will be displayed, rather than the activated part of it.</span></span><br><span class="line"> <span class="attr">expand_all:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Maximum heading depth of generated toc.</span></span><br><span class="line"> <span class="attr">max_depth:</span> <span class="number">6</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Footer Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/footer</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Show multilingual switcher in footer.</span></span><br><span class="line"><span class="attr">language_switcher:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="attr">footer:</span></span><br><span class="line"> <span class="comment"># Specify the year when the site was setup. If not defined, current year will be used.</span></span><br><span class="line"> <span class="comment">#since: 2021</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Icon between year and copyright info.</span></span><br><span class="line"> <span class="attr">icon:</span></span><br><span class="line"> <span class="comment"># Icon name in Font Awesome. See: https://fontawesome.com/icons</span></span><br><span class="line"> <span class="attr">name:</span> <span class="string">fa</span> <span class="string">fa-heart</span></span><br><span class="line"> <span class="comment"># If you want to animate the icon, set it to true.</span></span><br><span class="line"> <span class="attr">animated:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Change the color of icon, using Hex Code.</span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">"#ff0000"</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># If not defined, `author` from Hexo `_config.yml` will be used.</span></span><br><span class="line"> <span class="attr">copyright:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Powered by Hexo & NexT</span></span><br><span class="line"> <span class="attr">powered:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Beian ICP and gongan information for Chinese users. See: https://beian.miit.gov.cn, http://www.beian.gov.cn</span></span><br><span class="line"> <span class="attr">beian:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">icp:</span></span><br><span class="line"> <span class="comment"># The digit in the num of gongan beian.</span></span><br><span class="line"> <span class="attr">gongan_id:</span></span><br><span class="line"> <span class="comment"># The full num of gongan beian.</span></span><br><span class="line"> <span class="attr">gongan_num:</span></span><br><span class="line"> <span class="comment"># The icon for gongan beian. See: http://www.beian.gov.cn/portal/download</span></span><br><span class="line"> <span class="attr">gongan_icon_url:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Post Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/posts</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Automatically excerpt description in homepage as preamble text.</span></span><br><span class="line"><span class="attr">excerpt_description:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Read more button</span></span><br><span class="line"><span class="comment"># If true, the read more button will be displayed in excerpt section.</span></span><br><span class="line"><span class="attr">read_more_btn:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Post meta display settings</span></span><br><span class="line"><span class="attr">post_meta:</span></span><br><span class="line"> <span class="attr">item_text:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">created_at:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">updated_at:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">another_day:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">categories:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Post wordcount display settings</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/next-theme/hexo-word-counter</span></span><br><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line"> <span class="attr">separated_meta:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">item_text_total:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Use icon instead of the symbol # to indicate the tag at the bottom of the post</span></span><br><span class="line"><span class="attr">tag_icon:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Donate (Sponsor) settings</span></span><br><span class="line"><span class="comment"># Front-matter variable (nonsupport animation).</span></span><br><span class="line"><span class="attr">reward_settings:</span></span><br><span class="line"> <span class="comment"># If true, a donate button will be displayed in every article by default.</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">animation:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment">#comment: Buy me a coffee</span></span><br><span class="line"></span><br><span class="line"><span class="attr">reward:</span></span><br><span class="line"> <span class="comment">#wechatpay: /images/wechatpay.png</span></span><br><span class="line"> <span class="comment">#alipay: /images/alipay.png</span></span><br><span class="line"> <span class="comment">#paypal: /images/paypal.png</span></span><br><span class="line"> <span class="comment">#bitcoin: /images/bitcoin.png</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Subscribe through Telegram Channel, Twitter, etc.</span></span><br><span class="line"><span class="comment"># Usage: `Key: permalink || icon` (Font Awesome)</span></span><br><span class="line"><span class="attr">follow_me:</span></span><br><span class="line"> <span class="comment">#Twitter: https://twitter.com/username || fab fa-twitter</span></span><br><span class="line"> <span class="comment">#Telegram: https://t.me/channel_name || fab fa-telegram</span></span><br><span class="line"> <span class="comment">#WeChat: /images/wechat_channel.jpg || fab fa-weixin</span></span><br><span class="line"> <span class="comment">#RSS: /atom.xml || fa fa-rss</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Related popular posts</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/sergeyzwezdin/hexo-related-posts</span></span><br><span class="line"><span class="attr">related_posts:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">title:</span> <span class="comment"># Custom header, leave empty to use the default one</span></span><br><span class="line"> <span class="attr">display_in_home:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Post edit</span></span><br><span class="line"><span class="comment"># Easily browse and edit blog source code online.</span></span><br><span class="line"><span class="attr">post_edit:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">url:</span> <span class="string">https://github.com/user-name/repo-name/tree/branch-name/subdirectory-name/</span> <span class="comment"># Link for view source</span></span><br><span class="line"> <span class="comment">#url: https://github.com/user-name/repo-name/edit/branch-name/subdirectory-name/ # Link for fork & edit</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Show previous post and next post in post footer if exists</span></span><br><span class="line"><span class="comment"># Available values: left | right | false</span></span><br><span class="line"><span class="attr">post_navigation:</span> <span class="string">left</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Custom Page Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/custom-pages</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># TagCloud settings for tags page.</span></span><br><span class="line"><span class="attr">tagcloud:</span></span><br><span class="line"> <span class="attr">min:</span> <span class="number">14</span> <span class="comment"># Minimum font size in px</span></span><br><span class="line"> <span class="attr">max:</span> <span class="number">14</span> <span class="comment"># Maximum font size in px</span></span><br><span class="line"> <span class="attr">amount:</span> <span class="number">200</span> <span class="comment"># Total amount of tags</span></span><br><span class="line"> <span class="attr">orderby:</span> <span class="string">name</span> <span class="comment"># Order of tags</span></span><br><span class="line"> <span class="attr">order:</span> <span class="number">1</span> <span class="comment"># Sort order</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Google Calendar</span></span><br><span class="line"><span class="comment"># Share your recent schedule to others via calendar page.</span></span><br><span class="line"><span class="attr">calendar:</span></span><br><span class="line"> <span class="attr">calendar_id:</span> <span class="string"><required></span> <span class="comment"># Your Google account E-Mail</span></span><br><span class="line"> <span class="attr">api_key:</span> <span class="string"><required></span></span><br><span class="line"> <span class="attr">orderBy:</span> <span class="string">startTime</span></span><br><span class="line"> <span class="attr">showLocation:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">offsetMax:</span> <span class="number">72</span> <span class="comment"># Time Range</span></span><br><span class="line"> <span class="attr">offsetMin:</span> <span class="number">4</span> <span class="comment"># Time Range</span></span><br><span class="line"> <span class="attr">showDeleted:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">singleEvents:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">maxResults:</span> <span class="number">250</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Misc Theme Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/miscellaneous</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Preconnect CDN for fonts and plugins.</span></span><br><span class="line"><span class="comment"># For more information: https://www.w3.org/TR/resource-hints/#preconnect</span></span><br><span class="line"><span class="attr">preconnect:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Set the text alignment in posts / pages.</span></span><br><span class="line"><span class="attr">text_align:</span></span><br><span class="line"> <span class="comment"># Available values: start | end | left | right | center | justify | justify-all | match-parent</span></span><br><span class="line"> <span class="attr">desktop:</span> <span class="string">justify</span></span><br><span class="line"> <span class="attr">mobile:</span> <span class="string">justify</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Reduce padding / margin indents on devices with narrow width.</span></span><br><span class="line"><span class="attr">mobile_layout_economy:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Browser header panel color.</span></span><br><span class="line"><span class="attr">theme_color:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">"#222"</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">"#222"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Override browsers' default behavior.</span></span><br><span class="line"><span class="attr">body_scrollbar:</span></span><br><span class="line"> <span class="comment"># Place the scrollbar over the content.</span></span><br><span class="line"> <span class="attr">overlay:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Present the scrollbar even if the content is not overflowing.</span></span><br><span class="line"> <span class="attr">stable:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="attr">codeblock:</span></span><br><span class="line"> <span class="comment"># Code Highlight theme</span></span><br><span class="line"> <span class="comment"># All available themes: https://theme-next.js.org/highlight/</span></span><br><span class="line"> <span class="attr">theme:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">default</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">stackoverflow-dark</span></span><br><span class="line"> <span class="attr">prism:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">prism</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">prism-dark</span></span><br><span class="line"> <span class="comment"># Add copy button on codeblock</span></span><br><span class="line"> <span class="attr">copy_button:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Available values: default | flat | mac</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">mac</span></span><br><span class="line"></span><br><span class="line"><span class="attr">back2top:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Back to top in sidebar.</span></span><br><span class="line"> <span class="attr">sidebar:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Scroll percent label in b2t button.</span></span><br><span class="line"> <span class="attr">scrollpercent:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Reading progress bar</span></span><br><span class="line"><span class="attr">reading_progress:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Available values: left | right</span></span><br><span class="line"> <span class="attr">start_at:</span> <span class="string">left</span></span><br><span class="line"> <span class="comment"># Available values: top | bottom</span></span><br><span class="line"> <span class="attr">position:</span> <span class="string">top</span></span><br><span class="line"> <span class="attr">reversed:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">"#37c6c0"</span></span><br><span class="line"> <span class="attr">height:</span> <span class="string">3px</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Bookmark Support</span></span><br><span class="line"><span class="attr">bookmark:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Customize the color of the bookmark.</span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">"#222"</span></span><br><span class="line"> <span class="comment"># If auto, save the reading progress when closing the page or clicking the bookmark-icon.</span></span><br><span class="line"> <span class="comment"># If manual, only save it by clicking the bookmark-icon.</span></span><br><span class="line"> <span class="attr">save:</span> <span class="string">auto</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># `Follow me on GitHub` banner in the top-right corner.</span></span><br><span class="line"><span class="attr">github_banner:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">permalink:</span> <span class="string">https://github.com/yourname</span></span><br><span class="line"> <span class="attr">title:</span> <span class="string">Follow</span> <span class="string">me</span> <span class="string">on</span> <span class="string">GitHub</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Font Settings</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Find fonts on Google Fonts (https://fonts.google.com)</span></span><br><span class="line"><span class="comment"># All fonts set here will have the following styles:</span></span><br><span class="line"><span class="comment"># light | light italic | normal | normal italic | bold | bold italic</span></span><br><span class="line"><span class="comment"># Be aware that setting too much fonts will cause site running slowly</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Web Safe fonts are recommended for `global` (and `title`):</span></span><br><span class="line"><span class="comment"># Arial | Tahoma | Helvetica | Times New Roman | Courier New | Verdana | Georgia | Palatino | Garamond | Comic Sans MS | Trebuchet MS</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="attr">font:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Uri of fonts host, e.g. https://fonts.googleapis.com (Default).</span></span><br><span class="line"> <span class="attr">host:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Font options:</span></span><br><span class="line"> <span class="comment"># `external: true` will load this font family from `host` above.</span></span><br><span class="line"> <span class="comment"># `family: Times New Roman`. Without any quotes.</span></span><br><span class="line"> <span class="comment"># `size: x.x`. Use `em` as unit. Default: 1 (16px)</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Global font settings used for all elements inside <body>.</span></span><br><span class="line"> <span class="attr">global:</span></span><br><span class="line"> <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">family:</span> <span class="string">Lato</span></span><br><span class="line"> <span class="attr">size:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Font settings for site title (.site-title).</span></span><br><span class="line"> <span class="attr">title:</span></span><br><span class="line"> <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">family:</span></span><br><span class="line"> <span class="attr">size:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Font settings for headlines (<h1> to <h6>).</span></span><br><span class="line"> <span class="attr">headings:</span></span><br><span class="line"> <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">family:</span></span><br><span class="line"> <span class="attr">size:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Font settings for posts (.post-body).</span></span><br><span class="line"> <span class="attr">posts:</span></span><br><span class="line"> <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">family:</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Font settings for <code> and code blocks.</span></span><br><span class="line"> <span class="attr">codes:</span></span><br><span class="line"> <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">family:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># SEO Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/theme-settings/seo</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># If true, site-subtitle will be added to index page.</span></span><br><span class="line"><span class="comment"># Remember to set up your site-subtitle in Hexo `_config.yml` (e.g. subtitle: Subtitle)</span></span><br><span class="line"><span class="attr">index_with_subtitle:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Automatically add external URL with Base64 encrypt & decrypt.</span></span><br><span class="line"><span class="attr">exturl:</span> <span class="literal">false</span></span><br><span class="line"><span class="comment"># If true, an icon will be attached to each external URL</span></span><br><span class="line"><span class="attr">exturl_icon:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Google Webmaster tools verification.</span></span><br><span class="line"><span class="comment"># See: https://developers.google.com/search</span></span><br><span class="line"><span class="attr">google_site_verification:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Bing Webmaster tools verification.</span></span><br><span class="line"><span class="comment"># See: https://www.bing.com/webmasters</span></span><br><span class="line"><span class="attr">bing_site_verification:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Yandex Webmaster tools verification.</span></span><br><span class="line"><span class="comment"># See: https://webmaster.yandex.ru</span></span><br><span class="line"><span class="attr">yandex_site_verification:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Baidu Webmaster tools verification.</span></span><br><span class="line"><span class="comment"># See: https://ziyuan.baidu.com/site</span></span><br><span class="line"><span class="attr">baidu_site_verification:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Third Party Plugins & Services Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/</span></span><br><span class="line"><span class="comment"># More plugins: https://github.com/next-theme/awesome-next</span></span><br><span class="line"><span class="comment"># You may need to install the corresponding dependency packages</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Math Formulas Render Support</span></span><br><span class="line"><span class="comment"># Warning: Please install / uninstall the relevant renderer according to the documentation.</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/math-equations</span></span><br><span class="line"><span class="comment"># Server-side plugin: https://github.com/next-theme/hexo-filter-mathjax</span></span><br><span class="line"><span class="attr">math:</span></span><br><span class="line"> <span class="comment"># Default (false) will load mathjax / katex script on demand.</span></span><br><span class="line"> <span class="comment"># That is it only render those page which has `mathjax: true` in front-matter.</span></span><br><span class="line"> <span class="comment"># If you set it to true, it will load mathjax / katex script EVERY PAGE.</span></span><br><span class="line"> <span class="attr">every_page:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">mathjax:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Available values: none | ams | all</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="string">none</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">katex:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex</span></span><br><span class="line"> <span class="attr">copy_tex:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Easily enable fast Ajax navigation on your website.</span></span><br><span class="line"><span class="comment"># For more information: https://github.com/next-theme/pjax</span></span><br><span class="line"><span class="attr">pjax:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># FancyBox is a tool that offers a nice and elegant way to add zooming functionality for images.</span></span><br><span class="line"><span class="comment"># For more information: https://fancyapps.com/fancybox/</span></span><br><span class="line"><span class="attr">fancybox:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># A JavaScript library for zooming images like Medium.</span></span><br><span class="line"><span class="comment"># Warning: Do not enable both `fancybox` and `mediumzoom`.</span></span><br><span class="line"><span class="comment"># For more information: https://medium-zoom.francoischalifour.com</span></span><br><span class="line"><span class="attr">mediumzoom:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Vanilla JavaScript plugin for lazyloading images.</span></span><br><span class="line"><span class="comment"># For more information: https://apoorv.pro/lozad.js/demo/</span></span><br><span class="line"><span class="attr">lazyload:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Pangu Support</span></span><br><span class="line"><span class="comment"># For more information: https://github.com/vinta/pangu.js</span></span><br><span class="line"><span class="comment"># Server-side plugin: https://github.com/next-theme/hexo-pangu</span></span><br><span class="line"><span class="attr">pangu:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Quicklink Support</span></span><br><span class="line"><span class="comment"># For more information: https://getquick.link</span></span><br><span class="line"><span class="comment"># Front-matter variable (nonsupport home archive).</span></span><br><span class="line"><span class="attr">quicklink:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Home page and archive page can be controlled through home and archive options below.</span></span><br><span class="line"> <span class="comment"># This configuration item is independent of `enable`.</span></span><br><span class="line"> <span class="attr">home:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">archive:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Default (true) will initialize quicklink after the load event fires.</span></span><br><span class="line"> <span class="attr">delay:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Custom a time in milliseconds by which the browser must execute prefetching.</span></span><br><span class="line"> <span class="attr">timeout:</span> <span class="number">3000</span></span><br><span class="line"> <span class="comment"># Default (true) will attempt to use the fetch() API if supported (rather than link[rel=prefetch]).</span></span><br><span class="line"> <span class="attr">priority:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Comments Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/comments</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Multiple Comment System Support</span></span><br><span class="line"><span class="attr">comments:</span></span><br><span class="line"> <span class="comment"># Available values: tabs | buttons</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">tabs</span></span><br><span class="line"> <span class="comment"># Choose a comment system to be displayed by default.</span></span><br><span class="line"> <span class="comment"># Available values: disqus | disqusjs | changyan | livere | gitalk | utterances</span></span><br><span class="line"> <span class="attr">active:</span></span><br><span class="line"> <span class="comment"># Setting `true` means remembering the comment system selected by the visitor.</span></span><br><span class="line"> <span class="attr">storage:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># Lazyload all comment systems.</span></span><br><span class="line"> <span class="attr">lazyload:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Modify texts or order for any naves, here are some examples.</span></span><br><span class="line"> <span class="attr">nav:</span></span><br><span class="line"> <span class="comment">#disqus:</span></span><br><span class="line"> <span class="comment"># text: Load Disqus</span></span><br><span class="line"> <span class="comment"># order: -1</span></span><br><span class="line"> <span class="comment">#gitalk:</span></span><br><span class="line"> <span class="comment"># order: -2</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Disqus</span></span><br><span class="line"><span class="comment"># For more information: https://disqus.com</span></span><br><span class="line"><span class="attr">disqus:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">shortname:</span></span><br><span class="line"> <span class="attr">count:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># DisqusJS</span></span><br><span class="line"><span class="comment"># For more information: https://disqusjs.skk.moe</span></span><br><span class="line"><span class="attr">disqusjs:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># API Endpoint of Disqus API (https://disqus.com/api/docs/).</span></span><br><span class="line"> <span class="comment"># Leave api empty if you are able to connect to Disqus API. Otherwise you need a reverse proxy for it.</span></span><br><span class="line"> <span class="comment"># For example:</span></span><br><span class="line"> <span class="comment"># api: https://disqus.skk.moe/disqus/</span></span><br><span class="line"> <span class="attr">api:</span></span><br><span class="line"> <span class="attr">apikey:</span> <span class="comment"># Register new application from https://disqus.com/api/applications/</span></span><br><span class="line"> <span class="attr">shortname:</span> <span class="comment"># See: https://disqus.com/admin/settings/general/</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Changyan</span></span><br><span class="line"><span class="comment"># For more information: https://changyan.kuaizhan.com</span></span><br><span class="line"><span class="attr">changyan:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">appid:</span></span><br><span class="line"> <span class="attr">appkey:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># LiveRe comments system</span></span><br><span class="line"><span class="comment"># You can get your uid from https://livere.com/insight/myCode (General web site)</span></span><br><span class="line"><span class="attr">livere_uid:</span> <span class="comment"># <your_uid></span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Gitalk</span></span><br><span class="line"><span class="comment"># For more information: https://gitalk.github.io</span></span><br><span class="line"><span class="attr">gitalk:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">github_id:</span> <span class="comment"># GitHub repo owner</span></span><br><span class="line"> <span class="attr">repo:</span> <span class="comment"># Repository name to store issues</span></span><br><span class="line"> <span class="attr">client_id:</span> <span class="comment"># GitHub Application Client ID</span></span><br><span class="line"> <span class="attr">client_secret:</span> <span class="comment"># GitHub Application Client Secret</span></span><br><span class="line"> <span class="attr">admin_user:</span> <span class="comment"># GitHub repo owner and collaborators, only these guys can initialize gitHub issues</span></span><br><span class="line"> <span class="attr">distraction_free_mode:</span> <span class="literal">true</span> <span class="comment"># Facebook-like distraction free mode</span></span><br><span class="line"> <span class="comment"># When the official proxy is not available, you can change it to your own proxy address</span></span><br><span class="line"> <span class="attr">proxy:</span> <span class="string">https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token</span> <span class="comment"># This is official proxy address</span></span><br><span class="line"> <span class="comment"># Gitalk's display language depends on user's browser or system environment</span></span><br><span class="line"> <span class="comment"># If you want everyone visiting your site to see a uniform language, you can set a force language value</span></span><br><span class="line"> <span class="comment"># Available values: en | es-ES | fr | ru | zh-CN | zh-TW</span></span><br><span class="line"> <span class="attr">language:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Utterances</span></span><br><span class="line"><span class="comment"># For more information: https://utteranc.es</span></span><br><span class="line"><span class="attr">utterances:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">repo:</span> <span class="string">user-name/repo-name</span> <span class="comment"># Github repository owner and name</span></span><br><span class="line"> <span class="comment"># Available values: pathname | url | title | og:title</span></span><br><span class="line"> <span class="attr">issue_term:</span> <span class="string">pathname</span></span><br><span class="line"> <span class="comment"># Available values: github-light | github-dark | preferred-color-scheme | github-dark-orange | icy-dark | dark-blue | photon-dark | boxy-light</span></span><br><span class="line"> <span class="attr">theme:</span> <span class="string">github-light</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Isso</span></span><br><span class="line"><span class="comment"># For more information: https://posativ.org/isso/</span></span><br><span class="line"><span class="attr">isso:</span> <span class="comment"># <data_isso></span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Post Widgets & Content Sharing Services</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/post-widgets</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Star rating support to each article.</span></span><br><span class="line"><span class="comment"># To get your ID visit https://widgetpack.com</span></span><br><span class="line"><span class="attr">rating:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">id:</span> <span class="comment"># <app_id></span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">"#fc6423"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># AddThis Share. See: https://www.addthis.com</span></span><br><span class="line"><span class="comment"># Go to https://www.addthis.com/dashboard to customize your tools.</span></span><br><span class="line"><span class="attr">add_this_id:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Statistics and Analytics</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/statistics-and-analytics</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Google Analytics</span></span><br><span class="line"><span class="comment"># See: https://analytics.google.com</span></span><br><span class="line"><span class="attr">google_analytics:</span></span><br><span class="line"> <span class="attr">tracking_id:</span> <span class="comment"># <app_id></span></span><br><span class="line"> <span class="comment"># By default, NexT will load an external gtag.js script on your site.</span></span><br><span class="line"> <span class="comment"># If you only need the pageview feature, set the following option to true to get a better performance.</span></span><br><span class="line"> <span class="attr">only_pageview:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Baidu Analytics</span></span><br><span class="line"><span class="comment"># See: https://tongji.baidu.com</span></span><br><span class="line"><span class="attr">baidu_analytics:</span> <span class="comment"># <app_id></span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Growingio Analytics</span></span><br><span class="line"><span class="comment"># See: https://www.growingio.com</span></span><br><span class="line"><span class="attr">growingio_analytics:</span> <span class="comment"># <project_id></span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Cloudflare Web Analytics</span></span><br><span class="line"><span class="comment"># See: https://www.cloudflare.com/web-analytics/</span></span><br><span class="line"><span class="attr">cloudflare_analytics:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Microsoft Clarity Analytics</span></span><br><span class="line"><span class="comment"># See: https://clarity.microsoft.com/</span></span><br><span class="line"><span class="attr">clarity_analytics:</span> <span class="comment"># <project_id></span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Show number of visitors of each article.</span></span><br><span class="line"><span class="comment"># You can visit https://www.leancloud.cn to get AppID and AppKey.</span></span><br><span class="line"><span class="attr">leancloud_visitors:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">app_id:</span> <span class="comment"># <your app id></span></span><br><span class="line"> <span class="attr">app_key:</span> <span class="comment"># <your app key></span></span><br><span class="line"> <span class="comment"># Required for apps from CN region</span></span><br><span class="line"> <span class="attr">server_url:</span> <span class="comment"># <your server url></span></span><br><span class="line"> <span class="comment"># Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security</span></span><br><span class="line"> <span class="comment"># If you don't care about security in leancloud counter and just want to use it directly</span></span><br><span class="line"> <span class="comment"># (without hexo-leancloud-counter-security plugin), set `security` to `false`.</span></span><br><span class="line"> <span class="attr">security:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Another tool to show number of visitors to each article.</span></span><br><span class="line"><span class="comment"># Visit https://console.firebase.google.com/u/0/ to get apiKey and projectId.</span></span><br><span class="line"><span class="comment"># Visit https://firebase.google.com/docs/firestore/ to get more information about firestore.</span></span><br><span class="line"><span class="attr">firestore:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">collection:</span> <span class="string">articles</span> <span class="comment"># Required, a string collection name to access firestore database</span></span><br><span class="line"> <span class="attr">apiKey:</span> <span class="comment"># Required</span></span><br><span class="line"> <span class="attr">projectId:</span> <span class="comment"># Required</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Show Views / Visitors of the website / page with busuanzi.</span></span><br><span class="line"><span class="comment"># For more information: http://ibruce.info/2015/04/04/busuanzi/</span></span><br><span class="line"><span class="attr">busuanzi_count:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_visitors:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_visitors_icon:</span> <span class="string">fa</span> <span class="string">fa-user</span></span><br><span class="line"> <span class="attr">total_views:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">total_views_icon:</span> <span class="string">fa</span> <span class="string">fa-eye</span></span><br><span class="line"> <span class="attr">post_views:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">post_views_icon:</span> <span class="string">far</span> <span class="string">fa-eye</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Search Services</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/search-services</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Algolia Search</span></span><br><span class="line"><span class="comment"># For more information: https://www.algolia.com</span></span><br><span class="line"><span class="attr">algolia_search:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">hits:</span></span><br><span class="line"> <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Local Search</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/next-theme/hexo-generator-searchdb</span></span><br><span class="line"><span class="attr">local_search:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># If auto, trigger search by changing input.</span></span><br><span class="line"> <span class="comment"># If manual, trigger search by pressing enter key or search button.</span></span><br><span class="line"> <span class="attr">trigger:</span> <span class="string">auto</span></span><br><span class="line"> <span class="comment"># Show top n results per article, show all results by setting to -1</span></span><br><span class="line"> <span class="attr">top_n_per_article:</span> <span class="number">1</span></span><br><span class="line"> <span class="comment"># Unescape html strings to the readable one.</span></span><br><span class="line"> <span class="attr">unescape:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Preload the search data when the page loads.</span></span><br><span class="line"> <span class="attr">preload:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Chat Services</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/third-party-services/chat-services</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># A button to open designated chat widget in sidebar.</span></span><br><span class="line"><span class="comment"># Firstly, you need to enable and configure the chat service.</span></span><br><span class="line"><span class="attr">chat:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">icon:</span> <span class="string">fa</span> <span class="string">fa-comment</span> <span class="comment"># Icon name in Font Awesome, set false to disable icon.</span></span><br><span class="line"> <span class="attr">text:</span> <span class="string">Chat</span> <span class="comment"># Button text, change it as you wish.</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Chatra Support</span></span><br><span class="line"><span class="comment"># For more information: https://chatra.com</span></span><br><span class="line"><span class="comment"># Dashboard: https://app.chatra.io/settings/general</span></span><br><span class="line"><span class="attr">chatra:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">async:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">id:</span> <span class="comment"># Visit Dashboard to get your ChatraID</span></span><br><span class="line"> <span class="comment">#embed: # Unfinished experimental feature for developers. See: https://chatra.com/help/api/#injectto</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Tidio Support</span></span><br><span class="line"><span class="comment"># For more information: https://www.tidio.com</span></span><br><span class="line"><span class="comment"># Dashboard: https://www.tidio.com/panel/dashboard</span></span><br><span class="line"><span class="attr">tidio:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">key:</span> <span class="comment"># Public Key, get it from dashboard. See: https://www.tidio.com/panel/settings/developer</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Gitter Support</span></span><br><span class="line"><span class="comment"># For more information: https://gitter.im</span></span><br><span class="line"><span class="attr">gitter:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">room:</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Tags Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/tag-plugins/</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Note tag (bootstrap callout)</span></span><br><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 bootstrap callout old alert style. Default.</span></span><br><span class="line"> <span class="comment"># - modern bootstrap 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="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><span class="line"></span><br><span class="line"><span class="comment"># Tabs tag</span></span><br><span class="line"><span class="attr">tabs:</span></span><br><span class="line"> <span class="comment"># Make the nav bar of tabs with long content stick to the top.</span></span><br><span class="line"> <span class="attr">sticky:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">transition:</span></span><br><span class="line"> <span class="attr">tabs:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">labels:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># PDF tag</span></span><br><span class="line"><span class="comment"># NexT will try to load pdf files natively, if failed, pdf.js will be used.</span></span><br><span class="line"><span class="comment"># So, you have to install the dependency of pdf.js if you want to use pdf tag and make it available to all browsers.</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/next-theme/theme-next-pdf</span></span><br><span class="line"><span class="attr">pdf:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Default height</span></span><br><span class="line"> <span class="attr">height:</span> <span class="string">500px</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Mermaid tag</span></span><br><span class="line"><span class="attr">mermaid:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"> <span class="comment"># Available themes: default | dark | forest | neutral</span></span><br><span class="line"> <span class="attr">theme:</span></span><br><span class="line"> <span class="attr">light:</span> <span class="string">default</span></span><br><span class="line"> <span class="attr">dark:</span> <span class="string">dark</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># Animation Settings</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Use Animate.css to animate everything.</span></span><br><span class="line"><span class="comment"># For more information: https://animate.style</span></span><br><span class="line"><span class="attr">motion:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">async:</span> <span class="literal">false</span></span><br><span class="line"> <span class="attr">transition:</span></span><br><span class="line"> <span class="comment"># All available transition variants: https://theme-next.js.org/animate/</span></span><br><span class="line"> <span class="attr">post_block:</span> <span class="string">fadeIn</span></span><br><span class="line"> <span class="attr">post_header:</span> <span class="string">fadeInDown</span></span><br><span class="line"> <span class="attr">post_body:</span> <span class="string">fadeInDown</span></span><br><span class="line"> <span class="attr">coll_header:</span> <span class="string">fadeInLeft</span></span><br><span class="line"> <span class="comment"># Only for Pisces | Gemini.</span></span><br><span class="line"> <span class="attr">sidebar:</span> <span class="string">fadeInUp</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Progress bar in the top during page loading.</span></span><br><span class="line"><span class="comment"># For more information: https://github.com/CodeByZach/pace</span></span><br><span class="line"><span class="attr">pace:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="comment"># All available colors:</span></span><br><span class="line"> <span class="comment"># black | blue | green | orange | pink | purple | red | silver | white | yellow</span></span><br><span class="line"> <span class="attr">color:</span> <span class="string">black</span></span><br><span class="line"> <span class="comment"># All available themes:</span></span><br><span class="line"> <span class="comment"># big-counter | bounce | barber-shop | center-atom | center-circle | center-radar | center-simple</span></span><br><span class="line"> <span class="comment"># corner-indicator | fill-left | flat-top | flash | loading-bar | mac-osx | material | minimal</span></span><br><span class="line"> <span class="attr">theme:</span> <span class="string">material</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Canvas ribbon</span></span><br><span class="line"><span class="comment"># For more information: https://github.com/hustcc/ribbon.js</span></span><br><span class="line"><span class="attr">canvas_ribbon:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">size:</span> <span class="number">300</span> <span class="comment"># The width of the ribbon</span></span><br><span class="line"> <span class="attr">alpha:</span> <span class="number">0.4</span> <span class="comment"># The transparency of the ribbon</span></span><br><span class="line"> <span class="attr">zIndex:</span> <span class="number">-1</span> <span class="comment"># The display level of the ribbon</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="comment"># CDN Settings</span></span><br><span class="line"><span class="comment"># See: https://theme-next.js.org/docs/advanced-settings/vendors</span></span><br><span class="line"><span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"></span><br><span class="line"><span class="attr">vendors:</span></span><br><span class="line"> <span class="comment"># The CDN provider of NexT internal scripts.</span></span><br><span class="line"> <span class="comment"># Available values: local | jsdelivr | unpkg | cdnjs | custom</span></span><br><span class="line"> <span class="comment"># Warning: If you are using the latest master branch of NexT, please set `internal: local`</span></span><br><span class="line"> <span class="attr">internal:</span> <span class="string">local</span></span><br><span class="line"> <span class="comment"># The default CDN provider of third-party plugins.</span></span><br><span class="line"> <span class="comment"># Available values: local | jsdelivr | unpkg | cdnjs | custom</span></span><br><span class="line"> <span class="comment"># Dependencies for `plugins: local`: https://github.com/next-theme/plugins</span></span><br><span class="line"> <span class="attr">plugins:</span> <span class="string">jsdelivr</span></span><br><span class="line"> <span class="comment"># Custom CDN URL</span></span><br><span class="line"> <span class="comment"># For example:</span></span><br><span class="line"> <span class="comment"># custom_cdn_url: https://cdn.jsdelivr.net/npm/${npm_name}@${version}/${minified}</span></span><br><span class="line"> <span class="comment"># custom_cdn_url: https://cdnjs.cloudflare.com/ajax/libs/${cdnjs_name}/${version}/${cdnjs_file}</span></span><br><span class="line"> <span class="attr">custom_cdn_url:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Assets</span></span><br><span class="line"><span class="comment"># Accelerate delivery of static files using a CDN</span></span><br><span class="line"><span class="comment"># The js option is only valid when vendors.internal is local.</span></span><br><span class="line"><span class="attr">css:</span> <span class="string">css</span></span><br><span class="line"><span class="attr">js:</span> <span class="string">js</span></span><br><span class="line"><span class="attr">images:</span> <span class="string">images</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># Waline</span></span><br><span class="line"><span class="comment"># For more information: https://waline.js.org, https://github.com/lizheming/waline</span></span><br><span class="line"><span class="attr">waline:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">avatarCDN:</span> <span class="string">https://sdn.geekzu.org/avatar/</span></span><br><span class="line"> <span class="attr">serverURL:</span> <span class="string">https://waline-qmkdgwexn-ivy-lun.vercel.app/</span> <span class="comment"># Waline server address url</span></span><br><span class="line"> <span class="attr">placeholder:</span> <span class="string">'请在评论时在上面留下昵称和邮箱哦😊'</span> <span class="comment"># Comment box placeholder</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">robohash</span> <span class="comment"># Gravatar style</span></span><br><span class="line"> <span class="attr">meta:</span> [<span class="string">nick</span>, <span class="string">mail</span>, <span class="string">link</span>] <span class="comment"># Custom comment header</span></span><br><span class="line"> <span class="attr">pageSize:</span> <span class="number">10</span> <span class="comment"># Pagination size</span></span><br><span class="line"> <span class="attr">lang:</span> <span class="string">zh-cn</span> <span class="comment"># Language, available values: en, zh-cn</span></span><br><span class="line"> <span class="attr">visitor:</span> <span class="literal">false</span> <span class="comment"># Article reading statistic</span></span><br><span class="line"> <span class="attr">comment_count:</span> <span class="literal">true</span> <span class="comment"># If false, comment count will only be displayed in post page, not in home page</span></span><br><span class="line"> <span class="attr">requiredMeta:</span> [] <span class="comment"># Set required fields: [nick] | [nick, mail]</span></span><br><span class="line"> <span class="attr">libUrl:</span> <span class="comment"># Set custom library cdn url</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h4 id="2-花里胡哨的配置"><a href="#2-花里胡哨的配置" class="headerlink" title="2.花里胡哨的配置"></a>2.花里胡哨的配置</h4><p><strong>==一些稍微高级点的配置教程==</strong></p>
<p><strong>(1)添加waline评论系统</strong></p>
<p>具体文档请看——><a href="https://waline.js.org/">Waline官网</a>,按照官网教程配置后端。</p>
<p>配置完成后,在站点根目录打开命令执行下面的命令,安装waline插件最新版本:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install @waline/hexo-next --save</span><br></pre></td></tr></table></figure>
<p>随后在主题配置文件中引入waline:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Waline</span></span><br><span class="line"><span class="comment"># For more information: https://waline.js.org, https://github.com/lizheming/waline</span></span><br><span class="line"><span class="attr">waline:</span></span><br><span class="line"> <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">serverURL:</span> <span class="string">https://waline.example.com</span> <span class="comment"># 在这里粘贴你获得的评论地址</span></span><br><span class="line"> <span class="attr">placeholder:</span> <span class="string">'Just go'</span> <span class="comment"># 这里是评论框里显示的文字</span></span><br><span class="line"> <span class="attr">avatar:</span> <span class="string">mm</span> <span class="comment"># 头像</span></span><br><span class="line"> <span class="attr">meta:</span> [<span class="string">nick</span>, <span class="string">mail</span>, <span class="string">link</span>] <span class="comment"># Custom comment header</span></span><br><span class="line"> <span class="attr">pageSize:</span> <span class="number">10</span> <span class="comment"># Pagination size</span></span><br><span class="line"> <span class="attr">lang:</span> <span class="string">zh-cn</span> <span class="comment"># Language, available values: en, zh-cn</span></span><br><span class="line"> <span class="attr">visitor:</span> <span class="literal">false</span> <span class="comment"># Article reading statistic</span></span><br><span class="line"> <span class="attr">comment_count:</span> <span class="literal">true</span> <span class="comment"># If false, comment count will only be displayed in post page, not in home page</span></span><br><span class="line"> <span class="attr">requiredMeta:</span> [] <span class="comment"># Set required fields: [nick] | [nick, mail]</span></span><br><span class="line"> <span class="attr">libUrl:</span> <span class="comment"># Set custom library cdn url</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>如果avatar无法使用,可以直接在waline的配置中添加gravatar的国内cdn:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string">https://sdn.geekzu.org/avatar/</span></span><br></pre></td></tr></table></figure>
<p><strong>(2)彩色标签云</strong></p>
<p>在<code>/themes/next/layout/</code>目录下,新增`tag-color.njk文件,加入下方代码:</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"> <span class="tag"><<span class="name">script</span> <span class="attr">type</span>=<span class="string">"text/javascript"</span>></span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> alltags = <span class="variable language_">document</span>.<span class="title function_">getElementsByClassName</span>(<span class="string">'tag-cloud-tags'</span>);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> tags = alltags[<span class="number">0</span>].<span class="title function_">getElementsByTagName</span>(<span class="string">'a'</span>);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">for</span> (<span class="keyword">var</span> i = tags.<span class="property">length</span> - <span class="number">1</span>; i >= <span class="number">0</span>; i--) {</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> golden_ratio = <span class="number">0.618033988749895</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> s = <span class="number">0.5</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> v = <span class="number">0.999</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> h = golden_ratio + <span class="title class_">Math</span>.<span class="title function_">random</span>()*<span class="number">0.8</span> - <span class="number">0.5</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> h_i = <span class="built_in">parseInt</span>(h * <span class="number">6</span>);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> f = h * <span class="number">6</span> - h_i;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> p = v * (<span class="number">1</span> - s);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> q = v * (<span class="number">1</span> - f * s);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> t = v * (<span class="number">1</span> - (<span class="number">1</span> - f) * s);</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">var</span> r, g, b;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">switch</span> (h_i) {</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">0</span>:</span></span><br><span class="line"><span class="language-javascript"> r = v;</span></span><br><span class="line"><span class="language-javascript"> g = t;</span></span><br><span class="line"><span class="language-javascript"> b = p;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">1</span>:</span></span><br><span class="line"><span class="language-javascript"> r = q;</span></span><br><span class="line"><span class="language-javascript"> g = v;</span></span><br><span class="line"><span class="language-javascript"> b = p;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">2</span>:</span></span><br><span class="line"><span class="language-javascript"> r = p;</span></span><br><span class="line"><span class="language-javascript"> g = v;</span></span><br><span class="line"><span class="language-javascript"> b = t;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">3</span> :</span></span><br><span class="line"><span class="language-javascript"> r = p;</span></span><br><span class="line"><span class="language-javascript"> g = q;</span></span><br><span class="line"><span class="language-javascript"> b = v;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">4</span>:</span></span><br><span class="line"><span class="language-javascript"> r = t;</span></span><br><span class="line"><span class="language-javascript"> g = p;</span></span><br><span class="line"><span class="language-javascript"> b = v;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">case</span> <span class="number">5</span>:</span></span><br><span class="line"><span class="language-javascript"> r = v;</span></span><br><span class="line"><span class="language-javascript"> g = p;</span></span><br><span class="line"><span class="language-javascript"> b = q;</span></span><br><span class="line"><span class="language-javascript"> <span class="keyword">break</span>;</span></span><br><span class="line"><span class="language-javascript"> <span class="attr">default</span>:</span></span><br><span class="line"><span class="language-javascript"> r = <span class="number">1</span>;</span></span><br><span class="line"><span class="language-javascript"> g = <span class="number">1</span>;</span></span><br><span class="line"><span class="language-javascript"> b = <span class="number">1</span>;</span></span><br><span class="line"><span class="language-javascript"> }</span></span><br><span class="line"><span class="language-javascript"> tags[i].<span class="property">style</span>.<span class="property">background</span> = <span class="string">"rgba("</span>+<span class="built_in">parseInt</span>(r*<span class="number">255</span>)+<span class="string">","</span>+<span class="built_in">parseInt</span>(g*<span class="number">255</span>)+<span class="string">","</span>+<span class="built_in">parseInt</span>(b*<span class="number">255</span>)+<span class="string">","</span>+<span class="number">0.5</span>+<span class="string">")"</span>;</span></span><br><span class="line"><span class="language-javascript"> }</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">style</span>></span><span class="language-css"></span></span><br><span class="line"><span class="language-css"> <span class="selector-class">.tag-cloud-tags</span>{</span></span><br><span class="line"><span class="language-css"> <span class="attribute">text-align</span>: center;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">counter-reset</span>: tags;</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css"> <span class="selector-class">.tag-cloud-tags</span> <span class="selector-tag">a</span>{</span></span><br><span class="line"><span class="language-css"> <span class="attribute">display</span>: inline-block;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">border</span>: <span class="number">0px</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">border-radius</span>: <span class="number">10px</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">padding</span>: <span class="number">0px</span> <span class="number">10px</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">margin</span>: <span class="number">8px</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">color</span>: <span class="built_in">rgba</span>(<span class="number">34</span>, <span class="number">34</span>, <span class="number">34</span>, <span class="number">0.8</span>);</span></span><br><span class="line"><span class="language-css"> </span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css"><span class="comment">/* 文字前添加相应的符号,content后的Unicode可以自定义*/</span></span></span><br><span class="line"><span class="language-css"> <span class="selector-class">.tag-cloud-tags</span> <span class="selector-tag">a</span><span class="selector-pseudo">:before</span>{</span></span><br><span class="line"><span class="language-css"> <span class="attribute">font-family</span>: <span class="string">'Font Awesome 5 Free'</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">content</span>: <span class="string">"\f02b"</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">font-weight</span>: <span class="number">900</span>;</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css"></span></span><br><span class="line"><span class="language-css"> <span class="selector-class">.tag-cloud-tags</span> <span class="selector-tag">a</span><span class="selector-pseudo">:hover</span>{</span></span><br><span class="line"><span class="language-css"> <span class="attribute">box-shadow</span>: <span class="number">0px</span> <span class="number">5px</span> <span class="number">15px</span> <span class="number">0px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,.<span class="number">4</span>);</span></span><br><span class="line"><span class="language-css"> <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.1</span>);</span></span><br><span class="line"><span class="language-css"> <span class="attribute">transition-duration</span>: <span class="number">0.15s</span>;</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css"></span><span class="tag"></<span class="name">style</span>></span></span><br></pre></td></tr></table></figure>
<p>在/themes/next/layout/page.swig/中引入tag-color.swig:</p>
<p>在下方加上 <code>{% include 'tag-color.swig' %}</code> 代码</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string"><div</span> <span class="string">class="post-body{%</span> <span class="string">if</span> <span class="string">page.direction</span> <span class="string">and</span> <span class="string">page.direction.toLowerCase()</span> <span class="string">===</span> <span class="string">'rtl'</span> <span class="string">%}</span> <span class="string">rtl{%</span> <span class="string">endif</span> <span class="string">%}"></span></span><br><span class="line"> {<span class="string">%-</span> <span class="string">if</span> <span class="string">page.type</span> <span class="string">===</span> <span class="string">'tags'</span> <span class="string">%</span>}</span><br><span class="line"> {<span class="string">%-</span> <span class="string">include</span> <span class="string">'_partials/page/tags.njk'</span> <span class="string">-%</span>}</span><br><span class="line"> {<span class="string">%</span> <span class="string">elif</span> <span class="string">page.type</span> <span class="string">===</span> <span class="string">'categories'</span> <span class="string">%</span>}</span><br><span class="line"> {<span class="string">%-</span> <span class="string">include</span> <span class="string">'_partials/page/categories.njk'</span> <span class="string">-%</span>}</span><br><span class="line"> {<span class="string">%</span> <span class="string">elif</span> <span class="string">page.type</span> <span class="string">===</span> <span class="string">'schedule'</span> <span class="string">%</span>}</span><br><span class="line"> {<span class="string">%-</span> <span class="string">include</span> <span class="string">'_partials/page/schedule.njk'</span> <span class="string">-%</span>}</span><br><span class="line"> {<span class="string">%</span> <span class="string">else</span> <span class="string">%</span>}</span><br><span class="line"> {{ <span class="string">page.content</span> }}</span><br><span class="line"> {<span class="string">%-</span> <span class="string">endif</span> <span class="string">%</span>}</span><br><span class="line"> {<span class="string">%-</span> <span class="string">include</span> <span class="string">'tag-color.njk'</span> <span class="string">%</span>} <span class="comment">#这里是添加的代码</span></span><br><span class="line"><span class="string"></div></span></span><br></pre></td></tr></table></figure>
<p>修改文章底部标签样式</p>
<p>打开themes/next/layout/_macro/post.njk,找到以下代码并修改:</p>
<figure class="highlight twig"><table><tr><td class="code"><pre><span class="line"><span class="language-xml">- {%- set tag_indicate = '<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-tag"</span>></span><span class="tag"></<span class="name">i</span>></span>' if theme.tag_icon else '#' %}</span></span><br><span class="line"><span class="language-xml">+ {%- set tag_indicate = '<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-tag"</span>></span><span class="tag"></<span class="name">i</span>></span>' if theme.tag_icon else '<span class="tag"><<span class="name">i</span> <span class="attr">class</span>=<span class="string">"fa fa-tag"</span>></span><span class="tag"></<span class="name">i</span>></span>' %}</span></span><br></pre></td></tr></table></figure>
<p><strong>(3)启用圆角</strong></p>
<p>打开next/source/css/_variables/Gemini.styl,将以下两行代码取消注释:</p>
<figure class="highlight twig"><table><tr><td class="code"><pre><span class="line"><span class="language-xml">// $border-radius-inner = 0 0 3px 3px;</span></span><br><span class="line"><span class="language-xml">// $border-radius = 3px;</span></span><br></pre></td></tr></table></figure>
<p>并修改为:</p>
<figure class="highlight twig"><table><tr><td class="code"><pre><span class="line"><span class="language-xml">$border-radius-inner = 25px 25px 25px 25px;</span></span><br><span class="line"><span class="language-xml">$border-radius = 25px;</span></span><br></pre></td></tr></table></figure>
<p>即可启用大圆角,如不喜欢可以自行修改上面的值。</p>
<p><strong>(4)更改鼠标指针</strong></p>
<p>找到themes/next/source/css/_variables/Gemini.styl,添加如下代码:</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line">* {</span><br><span class="line"> <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://deerblog.xyz/blog-image/Arrow.cur</span>),auto;</span><br><span class="line">}</span><br><span class="line"><span class="selector-pseudo">:link</span> {</span><br><span class="line"> <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://deerblog.xyz/blog-image/Hand.cur</span>),auto</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p><strong>(5)添加全站美化元素</strong></p>
<p>找到文件themes/next/layout/_partials/footer.njk,在末尾添加以下代码:</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line">{# 樱花飘落 #}</span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.jsdelivr.net/gh/wallleap/cdn@latest/js/sakura.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line">{# 星星跟随坠落 #}</span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.jsdelivr.net/gh/cungudafa/cdn@2.1.2/js/cursor.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line">{# 搞怪标题 #}</span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.jsdelivr.net/gh/wallleap/cdn@latest/js/hititle.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br><span class="line">{# 爱心 #}</span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.jsdelivr.net/gh/wallleap/cdn/js/love.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure>
<p><strong>(6)添加背景图像并调整排版布局</strong></p>
<p>在next版本8中,默认不启用自定义布局。你需要在配置文件中修改以下代码:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># Define custom file paths.</span></span><br><span class="line"><span class="comment"># Create your custom files in site directory `source/_data` and uncomment needed files below.</span></span><br><span class="line"><span class="attr">custom_file_path:</span></span><br><span class="line"> <span class="comment">#head: source/_data/head.njk</span></span><br><span class="line"> <span class="comment">#header: source/_data/header.njk</span></span><br><span class="line"> <span class="comment">#sidebar: source/_data/sidebar.njk</span></span><br><span class="line"> <span class="comment">#postMeta: source/_data/post-meta.njk</span></span><br><span class="line"> <span class="comment">#postBodyEnd: source/_data/post-body-end.njk</span></span><br><span class="line"> <span class="comment">#footer: source/_data/footer.njk</span></span><br><span class="line"> <span class="comment">#bodyEnd: source/_data/body-end.njk</span></span><br><span class="line"> <span class="comment">#variable: source/_data/variables.styl</span></span><br><span class="line"> <span class="comment">#mixin: source/_data/mixins.styl</span></span><br><span class="line"> <span class="attr">style:</span> <span class="string">source/_data/styles.styl</span> <span class="comment">#去掉这里的注释</span></span><br></pre></td></tr></table></figure>
<p>然后在 themes/next/source/css里新建文件夹_data并在 _data中新建styles.styl</p>
<p>继续找到themes/next/source/css/main.styl,修改最后一句代码:</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><span class="line"><span class="string">//</span> <span class="string">Custom</span> <span class="string">Layer</span></span><br><span class="line"><span class="string">//</span> <span class="string">--------------------------------------------------</span></span><br><span class="line"><span class="string">for</span> <span class="string">$inject_style</span> <span class="string">in</span> <span class="string">hexo-config('injects.style')</span></span><br><span class="line"> <span class="string">@import</span> <span class="string">'_data/styles.styl'</span><span class="string">;</span></span><br></pre></td></tr></table></figure>
<p>打开刚刚新建的styles.styl加入以下代码:</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* 鼠标样式 */</span></span><br><span class="line">* {</span><br><span class="line"> <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://deerblog.xyz/blog-image/Arrow.cur</span>),auto;</span><br><span class="line">}</span><br><span class="line"><span class="selector-pseudo">:link</span> {</span><br><span class="line"> <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://deerblog.xyz/blog-image/Hand.cur</span>),auto</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">body</span> {</span><br><span class="line"> <span class="attribute">background</span>:<span class="built_in">url</span>(<span class="string">https://api.ixiaowai.cn/api/api.php</span>);</span><br><span class="line"> <span class="attribute">background-repeat</span>: no-repeat;</span><br><span class="line"> <span class="attribute">background-attachment</span>:fixed;</span><br><span class="line"> <span class="attribute">background-position</span>:<span class="number">50%</span> <span class="number">50%</span>;</span><br><span class="line"> // <span class="attribute">background-size</span>: <span class="number">100%</span> <span class="number">100%</span>;</span><br><span class="line"> <span class="attribute">background-size</span>: cover;</span><br><span class="line"> -webkit-<span class="attribute">background-size</span>: cover;</span><br><span class="line"> -o-<span class="attribute">background-size</span>: cover;</span><br><span class="line"> -moz-<span class="attribute">background-size</span>: cover;</span><br><span class="line"> -ms-<span class="attribute">background-size</span>: cover;</span><br><span class="line"> <span class="attribute">opacity</span> <span class="number">0.88</span></span><br><span class="line">}</span><br><span class="line"><span class="selector-class">.site-brand-container</span> {</span><br><span class="line"> <span class="attribute">border-radius</span>: <span class="number">25px</span> <span class="number">25px</span> <span class="number">0</span> <span class="number">0</span></span><br><span class="line">}</span><br><span class="line">// 修改菜单栏透明度</span><br><span class="line"><span class="selector-class">.header-inner</span> {</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">30px</span></span><br><span class="line">}</span><br><span class="line">// sidebar侧边工具栏样式属性</span><br><span class="line"><span class="selector-class">.sidebar</span>{</span><br><span class="line"> <span class="attribute">margin-top</span> <span class="number">30px</span></span><br><span class="line"> // 动画过渡时间</span><br><span class="line"> <span class="attribute">transition-duration</span>: <span class="number">0.4s</span>;</span><br><span class="line"> // 透明度</span><br><span class="line">}</span><br><span class="line">// 标题样式</span><br><span class="line"><span class="selector-class">.posts-expand</span> <span class="selector-class">.post-title-link</span> {</span><br><span class="line"> // 设置字体颜色</span><br><span class="line"> <span class="attribute">color</span>: <span class="number">#222</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">// 文章版块样式</span><br><span class="line"><span class="selector-class">.post-block</span> {</span><br><span class="line"> //<span class="attribute">background</span>: <span class="built_in">var</span>(--content-bg-color);</span><br><span class="line"> <span class="attribute">background</span>: <span class="number">#fff</span></span><br><span class="line"> border-radius: initial;</span><br><span class="line"> <span class="attribute">padding-bottom</span>: <span class="number">30px</span></span><br><span class="line"> margin-bottom: <span class="number">30px</span></span><br><span class="line"> margin-top: <span class="number">30px</span></span><br><span class="line"> margin-left: <span class="number">30px</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>具体修改内容看注释。</p>
<p>所有对页面样式的修改都应该在styles.styl中重写,避免直接修改到主题本体。</p>
<p>尽量不要在hexo中添加过多花里胡哨的样式或是js,尽可能保证hexo的性能。网站太慢有违背与hexo的初衷。</p>
<p>文章写于2022年4月15日,如内容过期可以clion一份最新版本。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">git clion https://github.com/ivy-lun/ivy-lun.github.io</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Hexo配置&美化</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>NexT主题</tag>
<tag>主题美化</tag>
</tags>
</entry>
<entry>
<title>一、操作系统的基本特征</title>
<url>/2022/04/09/11-44-01/</url>
<content><![CDATA[<h2 id="●-操作系统的基本特征"><a href="#●-操作系统的基本特征" class="headerlink" title="● 操作系统的基本特征"></a>● 操作系统的基本特征</h2><p>操作系统的四个特性:<strong>并发性,共享性,虚拟性,异步性</strong></p>
<span id="more"></span>
<h4 id="1-并发性"><a href="#1-并发性" class="headerlink" title="1. 并发性"></a>1. 并发性</h4><p>并发是指两个或多个事件在同一时间间隔内发生,<strong>宏观上是同时发生的</strong>,但是<strong>微观上是交替发生的</strong>。</p>
<p><strong>操作系统的并发性</strong>指计算机系统中同时存在多个运行的程序。</p>
<h4 id="2-共享性"><a href="#2-共享性" class="headerlink" title="2. 共享性"></a>2. 共享性</h4><p>即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。</p>
<p>(1)两种资源共享方式</p>
<ul>
<li>互斥共享方式(<strong>一个时间段内只允许一个进程访问资源</strong>)</li>
<li>同时共享方式(<strong>允许一个时间段内由多个进程“同时”对他们进行访问</strong>)</li>
</ul>
<p><strong>同时</strong>是宏观上的概念,微观上资源往往是交替进行资源访问的(分时共享)。</p>
<blockquote>
<p>==并发性和共享性两者的关系:==</p>
<p>假如使用QQ发送文件A,使用微信发送文件B.<br>1.两个进程正在并发执行(并发性)<br>2.需要共享地访问硬盘资源(共享性)</p>
<p>如果失去并发行,系统中只有一个程序在执行,则共享性即失去意义。<br>如果失去共享性,QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发。</p>
<p><strong>即并发性和共享性二者互为存在条件</strong></p>
</blockquote>
<h4 id="3-虚拟性"><a href="#3-虚拟性" class="headerlink" title="3. 虚拟性"></a>3. 虚拟性</h4><p>虚拟是指把一个物理上的实体变为逻辑上的对应物,物理实体是实际存在的,而逻辑上对应物是用户感受到的。</p>
<ul>
<li>空分复用技术(如虚拟存储器)</li>
<li>时分复用技术(如虚拟处理器),微观上处理机在各个微小的时间段内交替着为各个进程服务。</li>
</ul>
<h4 id="4-异步性"><a href="#4-异步性" class="headerlink" title="4. 异步性"></a>4. 异步性</h4><p>异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。</p>
<p>如果失去了并发性,则系统只能串行的执行所有的进程,每个程序的执行会一贯到底,<strong>只有系统拥有并发性,才有可能导致异步性。</strong></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>一些关于Blog的想法</title>
<url>/2022/04/16/03-10-33/</url>
<content><![CDATA[<p>我估计这东西应该不会有人看见吧。</p>
<span id="more"></span>
<p>搭博客前后共经历了大概两个周的时间,一直期望Blog能够达到自己想要的体验效果。<br>但是由于自己的水平不足,在这期间曾经换过好几个主题,但也都时曾经的热门主题,大部分都停更了。也有第三方修改过的,但是第三方的主题文档不足导致修改起来异常困难,因为next主题最多使用的版本是next5,而next又有三个分支,最新版本8比版本5少了很多的star,于是导致网络上的大部分教程都是用于next5的,改起来很麻烦,可谓是一波三折。</p>
<p><strong>但是Blog最重要的还是其内容</strong>,于是又重新推到再来,大约花了三天重建时间,就有了现在的这个Blog的样子。</p>
<p>对于cms系统,大部分人大概都会去选择更简单易用的动态博客如word press,typecho等,静态博客用的人比较少,而且还很折腾。静态博客主要是可以免费搭建在各大开源平台上,付出的仅仅只是时间,也没什么金钱成本。</p>
<blockquote>
<p><del>好吧,其实只是因为穷😓</del></p>
</blockquote>
<p>这些天天天熬夜改样式,修代码,天天三四点睡,每天都弄的自己很累 ……….. fuck</p>
<p>也就一破博客今换个主题名改个样式的,有什么用呢</p>
<p>也就算是另一个QQ空间吧</p>
<p>不改了,再也不改了</p>
]]></content>
<categories>
<category>想法</category>
</categories>
<tags>
<tag>随想随记</tag>
</tags>
</entry>
<entry>
<title>七、进程的定义、组成、自制方式、特征</title>
<url>/2022/04/16/18-02-44/</url>
<content><![CDATA[<h4 id="1-进程的定义"><a href="#1-进程的定义" class="headerlink" title="1.进程的定义"></a>1.进程的定义</h4><p>程序什么么?程序就是一个指令序列。</p>
<p>早期的计算机支支持单道程序。引入多道程序后,多道程序可以并发执行。为了方便操作系统管理、完成程序并发执行,引入了<strong>进程,进程实体</strong>的概念。</p>
<p><strong>PCB(进程控制块),程序段和数据段三部分构成了进程实体</strong>。进程实体被简称为进程。所谓创建进程实际上是创建进程实体中的PCB;撤销进程实质上就是撤销进程实体中的PCB。</p>
<blockquote>
<p><strong>PCB是进程存在的唯一标志。</strong></p>
</blockquote>
<span id="more"></span>
<p>从不同角度,进程可以有不同的定义,比较传统典型的定义有:</p>
<ul>
<li>进程是程序的一次<strong>执行过程</strong>。</li>
<li>进程是一个程序及其数据在处理机上顺序执行时<strong>所发生的活动</strong>。</li>
<li>进程是具有独立功能的程序存在数据集合上<strong>运行的过程(强调动态性)</strong>,他是系统进行资源分配和调度的一个独立单位。</li>
</ul>
<p>引入进程实体的概念后,进程可被定义为:</p>
<ul>
<li><strong>进程</strong>是实体的<strong>运行过程</strong>,是系统进行<strong>资源分配和调度</strong>的一个独立单位。</li>
</ul>
<blockquote>
<p>注:严格来说进程和实体进程并不一样,进程实体是<strong>静态的</strong>,进程则是<strong>动态的</strong>。除非题目专门考察二者区别,否则可以认为进程实体就是进程。因此也可以说“进程由程序段,数据段和PCB三部分组成”</p>
</blockquote>
<h4 id="2-进程的组成"><a href="#2-进程的组成" class="headerlink" title="2.进程的组成"></a>2.进程的组成</h4><p><strong>PCB的组成</strong></p>
<p><img src="https://s1.ax1x.com/2022/04/17/LUmoCt.png" alt="PCB"></p>
<p><strong>进程的组成</strong></p>
<p><img src="https://s1.ax1x.com/2022/04/17/LUnCvT.png" alt="进程"></p>
<p><strong>只要是和操作系统有关于管理进程的项目一定是被存储在PCB中。</strong></p>
<h4 id="3-进程的组织"><a href="#3-进程的组织" class="headerlink" title="3. 进程的组织"></a>3. 进程的组织</h4><p>在一个系统中通常有数百乃至数千个PCB,为了对他们加以有效的管理,应当采用适当的方式把这些PCB组织起来。</p>
<blockquote>
<p>注:进程的<strong>组成</strong>讨论的是一个<strong>进程内部</strong>有哪些部分构成的问题,而进程的<strong>组织</strong>讨论的<strong>多个进程之间</strong>的组织方式的问题。</p>
</blockquote>
<p>进程的组织方式包括:</p>
<ol>
<li>链接方式<ul>
<li>按照进程的状态将PCB分为多个队列</li>
<li>操作系统持有指向各个队列的指针</li>
</ul>
</li>
<li>索引方式<ul>
<li>根据进程状态的不同,建立几张索引表</li>
<li>操作系统持有指向各个索引表的指针</li>
</ul>
</li>
</ol>
<blockquote>
<p>链接方式:</p>
<p><img src="https://s1.ax1x.com/2022/04/17/LUKsCn.png" alt="链接"></p>
<p>索引方式:</p>
<p><img src="https://s1.ax1x.com/2022/04/17/LUKjVe.png" alt="索引"></p>
</blockquote>
<h4 id="4-进程的特征"><a href="#4-进程的特征" class="headerlink" title="4.进程的特征"></a>4.进程的特征</h4><p>进程和程序是两种概念,相比较于程序,进程有以下特征:</p>
<p><strong>(1)动态性:</strong>进程是程序的一次执行过程,是动态地产生、变化和消亡的。</p>
<p><strong>(2)并发性</strong>:内存中有多个进程实体,个进程可以并发执行</p>
<p><strong>(3)独立性</strong>:进程是能独立运行,独立获得资源、独立接受调度的基本单位。</p>
<p><strong>(4)异步性</strong>:个进程按各自独立的,不可预知的速度向前推进,操作系统要提供<strong>进程同步机制</strong>来解决异步问题。</p>
<p><strong>(5)结构性</strong>:每个进程都会配置一个PCB凑够结构上看,该进程由程序段,数据段,PCB组成</p>
<blockquote>
<p><strong>动态性是进程最基本的特征。</strong></p>
<p><strong>进程是资源分配,接收调度的基本单位。</strong></p>
<p><strong>异步性会导致并发程序的执行结果的不确定性。</strong></p>
</blockquote>
<h4 id="5-小结"><a href="#5-小结" class="headerlink" title="5.小结"></a>5.小结</h4><p><img src="https://s1.ax1x.com/2022/04/17/LUMkqS.png" alt="小结"></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>三、操作系统的发展和分类</title>
<url>/2022/04/09/11-46-01/</url>
<content><![CDATA[<h4 id="1-手工操作阶段"><a href="#1-手工操作阶段" class="headerlink" title="1. 手工操作阶段"></a>1. 手工操作阶段</h4><p>缺点:用户独占全机,人机速度矛盾导致资源利用率极低。人的速度慢,输入输出速度也慢,但计算机处理速度极快,人机速度矛盾。</p>
<span id="more"></span>
<p><img src="https://s1.ax1x.com/2022/04/10/LA2eu4.png" alt="手工操作阶段"></p>
<h4 id="2-批处理阶段"><a href="#2-批处理阶段" class="headerlink" title="2. 批处理阶段"></a>2. 批处理阶段</h4><p><strong>(1)单道批处理系统</strong></p>
<p>引入<strong>脱机输入/输出技术</strong>(用磁带完成),并<strong>监督程序</strong>负责控制作业的输入、输出。</p>
<p>主要优点:一定程度缓解了人机速度矛盾,资源利用率有所提升</p>
<p>主要缺点:<strong>内存中仅能有一道程序运行</strong>,只有该程序运行结束之后才能进入到下一道程序,<strong>cpu有大量的时间都是在空闲等待I/O完成,</strong>资源利用率仍然很低。</p>
<p><img src="https://s1.ax1x.com/2022/04/10/LA2nb9.png" alt="单道批处理系统"></p>
<p><strong>(2)多道批处理系统</strong></p>
<p> 在多道批处理系统中,<strong>操作系统</strong>开始出现。</p>
<p>主要优点:多道程序<strong>并发</strong>执行,<strong>共享</strong>计算机资源,<strong>资源利用率大幅度提升</strong>。</p>
<p>主要缺点:用户响应时间长,<strong>没有人机交互功能</strong>(用户不能对执行的程序进行任何操作)。</p>
<blockquote>
<p>在单道批处理系统中,输入,计算和输出都是串行进行,资源利用率低。</p>
</blockquote>
<p> <img src="https://s1.ax1x.com/2022/04/10/LA2gbj.png" alt="1"></p>
<blockquote>
<p>而在多道批处理系统中,当一个系统资源不再被使用时,可以提前进行下一个任务,系统<strong>并行执行任务</strong>,资源利用率大幅度提高。</p>
</blockquote>
<p><img src="https://s1.ax1x.com/2022/04/10/LA2Wan.png" alt="2"></p>
<p><strong>(3)分时操作系统</strong></p>
<p>计算机以<strong>时间片</strong>为单位<strong>轮流为各个用户/作业服务</strong>,各个用户可通过终端与计算机交互。</p>
<p>主要优点:用户请求可以被即时响应,<strong>解决了人机交互的问题</strong>,允许多个用户同时使用一台计算机,并且用户对计算机的操作<strong>相互独立</strong>,感受不到别人的存在。</p>
<p>主要却带你:<strong>不能优先处理一些紧急任务</strong>,操作系统的各个用户、作业都是完全公平的,循环为每个用户、作业服务一个时间片,不区分任务的紧急性。</p>
<p><strong>(4)实时操作系统</strong></p>
<p>主要优点:可以实时处理一些紧急任务,某些紧急任务不需要时间片排队。</p>
<p>在实时操作系统的控制下,计算机接受到外部信号后及时进行处理,并且<strong>要在严格的时间限制内处理完成事件</strong>,实时操作系统的主要特点是<strong>及时性和可靠性</strong>。</p>
<p>实时操作系统可分为:</p>
<ul>
<li><p>硬实时系统:必须在<strong>绝对严格</strong>的规定时间内完成处理。如导弹控制系统,自动驾驶系统。</p>
</li>
<li><p>软实时系统:能接受偶尔违反时间规定。如12306火车订票系统。</p>
</li>
</ul>
<p><strong>(5)网络操作系统</strong></p>
<p>伴随计算机网络的发展而诞生的,能把网络的各个计算机有机地结合起来,实现数据传送等功能,<strong>实现网络中各种资源的共享(如文件共享)和各个计算机之间的通信</strong>。</p>
<p><strong>(6)分布式操作系统</strong></p>
<p>主要特点是<strong>分布性和并行性</strong>,系统中的割台计算机地位相同,<strong>任何工作都可以分布在这些计算机上,由他们并行、协同完成这个任务。</strong></p>
<p><strong>(7)个人计算机操作系统</strong></p>
<p>略,如windows,macos等</p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>九、进程控制</title>
<url>/2022/04/18/00-39-23/</url>
<content><![CDATA[<h4 id="1-什么是进程控制"><a href="#1-什么是进程控制" class="headerlink" title="1.什么是进程控制"></a>1.什么是进程控制</h4><p>进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程,撤销进程,实现进程间的状态转换等功能。简而言之,<strong>进程控制就是要时间进程状态的转换。</strong></p>
<span id="more"></span>
<h4 id="2-如何实现进程控制"><a href="#2-如何实现进程控制" class="headerlink" title="2.如何实现进程控制"></a>2.如何实现进程控制</h4><p><a href="https://imgtu.com/i/LaGOvd"><img src="https://s1.ax1x.com/2022/04/18/LaGOvd.png" alt="LaGOvd.png"></a></p>
<p>进程之间的状态切换中间都需要对PCB进行修改并且放入相应的队列中。假如说某一进程把PCB从某一队列放入另一个队列中,但PCB中状态标志并未被修改,这种情况会导致系统错误,因为PCB所处的队列与PCB中存储的状态标志位数据不一致。于是引入<strong>原语</strong>来实现进程控制。原语的特点是<strong>执行过程中不允许被中断。</strong>这种不可被中断的操作即<strong>原子操作</strong>。原语使用<strong>关中断指令</strong>和<strong>开中断指令</strong>实现。</p>
<p>当原语开始执行时会先执行关中断指令,此时外部中断信号会被忽略。这样保证原语的操作不会被中断。当原语执行完毕后会执行开中断指令,这样外部中断信号又会被响应了,如下图:</p>
<p><img src="https://s1.ax1x.com/2022/04/18/LaY3Y8.png" alt="LaY3Y8.png"></p>
<p>由此可见,<strong>开/关中断指令的权限非常大,必须只允许在核心态下执行的 特权指令 。</strong></p>
<h4 id="3-进程控制相关原语"><a href="#3-进程控制相关原语" class="headerlink" title="3.进程控制相关原语"></a>3.进程控制相关原语</h4><p>四种原语:</p>
<ul>
<li><strong>创建原语</strong></li>
<li><strong>撤销原语</strong></li>
<li><strong>阻塞原语</strong></li>
<li><strong>唤醒原语</strong></li>
<li><strong>切换原语</strong></li>
</ul>
<p><img src="https://s1.ax1x.com/2022/04/18/LatY4K.png" alt="LatY4K.png"></p>
<hr>
<p><img src="https://s1.ax1x.com/2022/04/18/LatN9O.png" alt="LatN9O.png"></p>
<hr>
<p><img src="https://s1.ax1x.com/2022/04/18/LatdjH.png" alt="LatdjH.png"></p>
<hr>
<p><img src="https://s1.ax1x.com/2022/04/18/LatDHI.png" alt="LatDHI.png"></p>
<hr>
<h4 id="4-知识回顾"><a href="#4-知识回顾" class="headerlink" title="4.知识回顾"></a>4.知识回顾</h4><p><img src="https://s1.ax1x.com/2022/04/18/LatoEq.png" alt="LatoEq.png"></p>
<hr>
<center>分割线</center>
<hr>
<p>这章疑问有点多,应该看看书。</p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>二、操作系统的概念、功能和目标</title>
<url>/2022/04/09/11-45-01/</url>
<content><![CDATA[<h4 id="1-操作系统的概念"><a href="#1-操作系统的概念" class="headerlink" title="1.操作系统的概念"></a>1.操作系统的概念</h4><p>(1)操作系统是计算机中最基本的系统软件。</p>
<p>(2)负责管理协调硬件、软件等计算机资源的工作</p>
<p>(3)为上层用户、应用程序提供简单易用的服务</p>
<span id="more"></span>
<h4 id="2-操作系统的功能和目标"><a href="#2-操作系统的功能和目标" class="headerlink" title="2.操作系统的功能和目标"></a>2.操作系统的功能和目标</h4><p><strong>(1)作为系统资源的管理者</strong></p>
<ul>
<li><p>处理机管理</p>
</li>
<li><p>存储管理</p>
</li>
<li><p>文件管理</p>
</li>
<li><p>设备管理</p>
</li>
</ul>
<p><strong>(2)作为用户和计算机硬件之间的接口</strong></p>
<ol>
<li><p>命令接口</p>
<p>用户直接使用的</p>
<ul>
<li>联机命令接口(也叫<strong>交互式命令接口</strong>,输入一句执行一句)</li>
<li>脱机命令接口(也叫<strong>批处理命令接口</strong>,输入一堆执行一堆)</li>
</ul>
</li>
<li><p>程序接口(系统调用)</p>
<p>用户通过程序间接实用</p>
</li>
<li><p>GUI(图形用户界面)</p>
<p>图形化用户操作界面</p>
</li>
</ol>
<p><strong>(3)作为最接近硬件的层次</strong></p>
<p>扩充机器</p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>二十一、用信号量机制实现进程互斥、同步和前驱关系</title>
<url>/2022/04/27/19-48-11/</url>
<content><![CDATA[<h4 id="1-信号量机制实现进程互斥"><a href="#1-信号量机制实现进程互斥" class="headerlink" title="1.信号量机制实现进程互斥"></a>1.信号量机制实现进程互斥</h4><ol>
<li>分析并发进程的关键活动,划定临界区(如:对临界资源打印机的访问就应放在临界区)</li>
<li>设置<strong>互斥信号量mutex,初始值为1</strong></li>
<li>在临界区之前执行P(mutex)</li>
<li>在临界区之后执行V(mutex)</li>
</ol>
<span id="more"></span>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">//信号量机制实现互斥</span></span><br><span class="line">semaphore mutex=<span class="number">1</span>; <span class="comment">//初始化信号量</span></span><br><span class="line"></span><br><span class="line">P1(){</span><br><span class="line"> ...</span><br><span class="line"> P(mutex); <span class="comment">//使用临界区资源前需要加锁</span></span><br><span class="line"> 临界代码区段....</span><br><span class="line"> V(mutex); <span class="comment">//使用临界区资源后需要解锁</span></span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">P2(){</span><br><span class="line"> ...</span><br><span class="line"> P(mutex);</span><br><span class="line"> 临界代码区段....</span><br><span class="line"> V(mutex);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//原理与上节类似</span></span><br></pre></td></tr></table></figure>
<p>注意:<strong>对不同的临界资源需要设置不同的互斥信号量。P,V操作必须成对出现。</strong>缺少P(mutex)就不能保证临界区资源的互斥访问。缺少V(mutex)会导致资源永不被释放,等待进程永不被唤醒。</p>
<p><img src="https://s1.ax1x.com/2022/04/27/LLm4VH.png" alt="LLm4VH.png"></p>
<h4 id="2-信号量机制实现进程同步"><a href="#2-信号量机制实现进程同步" class="headerlink" title="2.信号量机制实现进程同步"></a>2.信号量机制实现进程同步</h4><p>进程同步:要让各并发进程按要求有序地推进</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">//比如,P1、P2并发的执行,由于存在异步性,因此二者交替推进的次序是不确定的。</span></span><br><span class="line"><span class="comment">//若P2的“代码4”要基于P1的“代码1”和“代码2”的运行结果才能执行,那么我们就必须保证“代码4”一定是</span></span><br><span class="line"><span class="comment">//在“代码2”之后才会执行。</span></span><br><span class="line">P1(){</span><br><span class="line"> 代码<span class="number">1</span>;</span><br><span class="line"> 代码<span class="number">2</span>;</span><br><span class="line"> 代码<span class="number">3</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">P2(){</span><br><span class="line"> 代码<span class="number">4</span>;</span><br><span class="line"> 代码<span class="number">5</span>;</span><br><span class="line"> 代码<span class="number">6</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>用信号量实现进程同步:</p>
<ol>
<li>分析什么地方需要实现“同步关系”,即必须保证“一前一后”执行的两个操作(或两句代码)</li>
<li>设置<strong>同步信号量S,初始值为0</strong>。</li>
<li><strong>在“前操作”之后执行V(S);</strong></li>
<li><strong>在“后操作”之前执行P(S);</strong></li>
</ol>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">//信号量机制实现同步</span></span><br><span class="line">semaphore S=<span class="number">0</span>; <span class="comment">//初始化同步信号量</span></span><br><span class="line"></span><br><span class="line">P1(){</span><br><span class="line"> 代码<span class="number">1</span>;</span><br><span class="line"> 代码<span class="number">2</span>;</span><br><span class="line"> V(S);</span><br><span class="line"> 代码<span class="number">3</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">P2(){</span><br><span class="line"> P(S);</span><br><span class="line"> 代码<span class="number">4</span>;</span><br><span class="line"> 代码<span class="number">5</span>;</span><br><span class="line"> 代码<span class="number">6</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">若先执行到V(S)操作,则S++后S=1.之后当执行到P(S)操作时,由于S=1,表示有可用资源,会执行S--,S的值变回0,P2的进程不会执行block原语,而是继续往下执行代码4.</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">若先执行到P(S)操作,由于S=0,S--后S=-1,表示此时没有可用资源,因此P操作中会执行block原语,主动请求阻塞。之后当执行完代码2,继而执行V(S)操作,S++,使S变回0由于此时有进程在该信号量对应的阻塞队列中,因此会在V操作中执行wakeup原语,唤醒P2进程。这样P2就可以继续执行代码4了。</span></span><br><span class="line"><span class="comment">这样就保证了代码4一定是在代码2之后执行。</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">这里有一点不理解。前面说过了同步信号量S=0时表示没有可用资源,但是如果先执行了P(S)操作,同步信号量S的值会变为-1并阻塞自己,当V(S)被执行后同步信号量S的值变为0并执行wakeup操作唤醒进程P2,若按照前面的陈述那么P2也会认为此时并没有可用资源,因为同步信号量S的值为0,这样P2进程不就饿死了吗?</span></span><br><span class="line"><span class="comment">不知道是不是我听漏了什么。</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure>
<h4 id="3-信号量机制实现前驱关系"><a href="#3-信号量机制实现前驱关系" class="headerlink" title="3.信号量机制实现前驱关系"></a>3.信号量机制实现前驱关系</h4><p>进程P1中有句代码S1,P2中有句代码S2一直到P6。这些代码要求按照如下前驱图所示的顺序来执行。</p>
<p> <img src="https://s1.ax1x.com/2022/04/27/LL3Vcn.png" alt="LL3Vcn.png"></p>
<p>每一对前驱关系都是一个进程同步问题(需要保证一前一后的操作)</p>
<p>因此:</p>
<ol>
<li>要<strong>为每一对前驱关系各设置一个同步变量</strong>a,b,c,d,e,f,g</li>
<li><strong>在“前操作”之后对相应的同步变量执行V操作</strong></li>
<li><strong>在“后操作”之前对相应的同步变量执行P操作</strong></li>
</ol>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">P1(){</span><br><span class="line"> ...</span><br><span class="line"> S1;</span><br><span class="line"> V(a);</span><br><span class="line"> V(B);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">P2(){</span><br><span class="line"> ...</span><br><span class="line"> P(a);</span><br><span class="line"> S2;</span><br><span class="line"> V(c);</span><br><span class="line"> V(d);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">P3(){</span><br><span class="line"> ...</span><br><span class="line"> P(b);</span><br><span class="line"> S3;</span><br><span class="line"> V(g);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">P4(){</span><br><span class="line"> ...</span><br><span class="line"> P(c);</span><br><span class="line"> S4;</span><br><span class="line"> V(e);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">P5(){</span><br><span class="line"> ...</span><br><span class="line"> P(d);</span><br><span class="line"> P(f);</span><br><span class="line"> S5;</span><br><span class="line"> V(f);</span><br><span class="line"> ...</span><br><span class="line">}</span><br><span class="line">P6(){</span><br><span class="line"> ...</span><br><span class="line"> P(e);</span><br><span class="line"> P(f);</span><br><span class="line"> P(g);</span><br><span class="line"> S6;</span><br><span class="line"> ...</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>大概是这个样子:</p>
<p><img src="https://s1.ax1x.com/2022/04/27/LL8rIU.png" alt="LL8rIU.png"></p>
<h4 id="4-知识回顾"><a href="#4-知识回顾" class="headerlink" title="4.知识回顾"></a>4.知识回顾</h4><p><img src="https://s1.ax1x.com/2022/04/27/LLGPzj.png" alt="LLGPzj.png"></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>二十三、多生产者,消费者问题</title>
<url>/2022/05/10/17-20-14/</url>
<content><![CDATA[<h4 id="1-问题描述"><a href="#1-问题描述" class="headerlink" title="1.问题描述"></a>1.问题描述</h4><p>桌子上有一只盘子,每次只能向其中放入一个水果,爸爸专向盘子中放水果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子为空时,爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。用PV操作实现上述过程。</p>
<span id="more"></span>
<p>可以将盘子看做大小为1,初始为空的缓冲区,爸爸和妈妈分别看做生产者进程1和生产者进程2,女儿和儿子看做消费者进程1和消费者进程2,</p>
<blockquote>
<p>1.关系分析:找出</p>
</blockquote>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>二十、信号量机制</title>
<url>/2022/04/27/17-08-57/</url>
<content><![CDATA[<h4 id="1-信号量机制"><a href="#1-信号量机制" class="headerlink" title="1.信号量机制"></a>1.信号量机制</h4><p>进程互斥的四种软件实现方式和进程互斥的三种硬件实现方式都存在一些问题。</p>
<p>1.在双标志检查法中,<strong>进入区的“检查”、‘上锁”操作无法一气呵成</strong>,从而导致了两个进程有可能同时进入临界区的问题。</p>
<p>2.所有的解决方案都<strong>无法实现“让权等待”</strong>。</p>
<p>1965年,荷兰学者迪杰斯特拉Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法–<strong>信号量机制</strong></p>
<span id="more"></span>
<p>用户可以通过使用操作系统提供的<strong>一对原语</strong>来对<strong>信号量</strong>进行操作,从而很方便地实现了进程互斥、进程同步。<strong>信号量</strong>其实就是一个变量(可以是一个整数,也可以是更复杂的记录型信号量),可以用一个信号量来<strong>表示系统中的某种资源的数量</strong>。</p>
<p><strong>原语</strong>是一种特殊的程序段,其<strong>执行只能一气呵成,不可被中断。</strong>原语是由<strong>关中断/开中断指令</strong>实现的,软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用原语实现,使这些操作能“一气呵成”就能避免问题。</p>
<p><strong>一对原语</strong>:<strong>wait(s)</strong>原语和<strong>signal(s)</strong>原语,可以把原语理解为我们自己写的函数,函数名称分别为wait和signal,括号里的<strong>信号量s</strong>其实就是函数调用时传入的一个参数。wait、signal原语常<strong>简称为P,V操作</strong>(来自荷兰语proberen和verhogen,意思是“尝试”和“增加”)。因此,wait(s)和signal(s)可被简写为<strong>P(s)和V(s)。</strong></p>
<h4 id="2-整形信号量"><a href="#2-整形信号量" class="headerlink" title="2.整形信号量"></a>2.整形信号量</h4><p>用一个<strong>整数型的变量</strong>作为信号量,来<strong>表示系统中的某种资源的数量。</strong></p>
<p>如:某计算机系统中有一台打印机:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="variable">S</span> <span class="operator">=</span> <span class="number">1</span>; <span class="comment">//初始化整形信号量S,表示当前系统中可用的打印机资源数</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">void</span> <span class="title function_">wait</span><span class="params">(<span class="type">int</span> S)</span>{ <span class="comment">//wait原语,相当于“进入区”</span></span><br><span class="line"> <span class="keyword">while</span>(s <= <span class="number">0</span>); <span class="comment">//如果资源数不够,就一直循环等待</span></span><br><span class="line"> S = S - <span class="number">1</span>; <span class="comment">//如果资源数够,就占用一个资源</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">void</span> <span class="title function_">signal</span><span class="params">(<span class="type">int</span> S)</span>{ <span class="comment">//signal原语,相当于"退出区"</span></span><br><span class="line"> S = S + <span class="number">1</span>; <span class="comment">//使用完资源后,在退出区释放资源</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//如果一个进程P0想要访问打印机,则其操作的伪代码为:</span></span><br><span class="line">...</span><br><span class="line">wait(S); <span class="comment">//进入区,申请自愿</span></span><br><span class="line">使用的印记资源... <span class="comment">//临界区,访问资源</span></span><br><span class="line">signal(S); <span class="comment">//退出区,释放资源</span></span><br><span class="line">...</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"><span class="comment">//如果进程P1在进程P0正在放问打印机时想要访问打印机资源,只能一直执行wait(S),等待进程P0释放</span></span><br><span class="line"><span class="comment">//临界区资源。</span></span><br><span class="line">...</span><br><span class="line">wait(S);</span><br><span class="line">访问打印机资源...</span><br><span class="line">signal(S);</span><br><span class="line">...</span><br></pre></td></tr></table></figure>
<p>信号量其与普通整数变量的区别:对信号量的操作只有三种,即 初始化、P操作、V操作。在wait原语中,“检查”和“上锁”一气呵成,避免了并发、异步导致的问题。但是如果信号量S为0,则其中的while语句会一直检查信号量S的占用情况,会一直占用处理机,不满足“让权等待”原则,会发生“忙等”。</p>
<h4 id="3-记录型信号量(重要)"><a href="#3-记录型信号量(重要)" class="headerlink" title="3.记录型信号量(重要)"></a>3.记录型信号量(<font color=red>重要</font>)</h4><p>整形信号量的缺陷是存在“忙等”的问题,因此人们又提出了“记录型信号量”,即用记录型数据结构表示的信号量。</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">//信号量的数据结构</span></span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span>{</span></span><br><span class="line"> <span class="type">int</span> value; <span class="comment">//剩余资源数</span></span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">process</span> *<span class="title">L</span>;</span> <span class="comment">//等待队列</span></span><br><span class="line">} semphore;</span><br><span class="line"></span><br><span class="line"><span class="comment">//某进程需要使用资源时,通过wait原语申请</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">wait</span><span class="params">(semaphore S)</span>{</span><br><span class="line"> S.value--;</span><br><span class="line"> <span class="keyword">if</span>(S.value < <span class="number">0</span>){ <span class="comment">//如果剩余资源不够,使用block原语使进程从运行态进入阻塞态,并把它挂到</span></span><br><span class="line"> block(S.L); <span class="comment">//信号量S的等待队列(即阻塞队列)中</span></span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//进程使用完资源后,通过signal原语释放</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">signal</span><span class="params">(semaphore S)</span>{</span><br><span class="line"> S.value++;</span><br><span class="line"> <span class="keyword">if</span>(S.value<=<span class="number">0</span>){ <span class="comment">//释放资源后,如果还有别的进程在等待这种资源,则使用wakeup原语唤醒</span></span><br><span class="line"> wakeup(S.L); <span class="comment">//等待队列中的一个进程,使该进程从阻塞态变为就绪态。</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>例:某计算机系统中有两台打印机,则可在初始化信号量S时将S.value的值设为2,队列S.L设置为空</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span>{</span></span><br><span class="line"> <span class="type">int</span> value; <span class="comment">//剩余资源数为2</span></span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">process</span> *<span class="title">L</span>;</span> <span class="comment">//等待队列-→null</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//P0进程</span></span><br><span class="line">...</span><br><span class="line">wait(S);</span><br><span class="line">使用打印机...</span><br><span class="line">signal(S);</span><br><span class="line">...</span><br><span class="line"> </span><br><span class="line"><span class="comment">//P1进程</span></span><br><span class="line">...</span><br><span class="line">wait(S);</span><br><span class="line">使用打印机...</span><br><span class="line">signal(S);</span><br><span class="line">...</span><br><span class="line"> </span><br><span class="line"><span class="comment">//P2进程</span></span><br><span class="line">...</span><br><span class="line">wait(S);</span><br><span class="line">使用打印机..</span><br><span class="line">signal(S);</span><br><span class="line">...</span><br><span class="line"> </span><br><span class="line"><span class="comment">//P3进程</span></span><br><span class="line">...</span><br><span class="line">wait(S);</span><br><span class="line">使用打印机...</span><br><span class="line">signal(S);</span><br><span class="line">...</span><br><span class="line"> </span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">解释:有点啰嗦,能看得懂就行。</span></span><br><span class="line"><span class="comment">cpu首先为p0服务,P0使用wait原语检查剩余资源,系统中剩余打印机资源为2,可以分配给P0,value值减1变为1,P0可以使用打印机。之后cpu又为p1服务,P1使用wait原语检查剩余资源,系统中剩余打印机资源为1,value值减1变为0,可以分配给P1,P1可以使用打印机。再次cpu为P2服务,P2使用wait原语检查剩余打印机资源,系统中剩余打印机资源为0,资源已经暂时全部被占用,value值减1变为-1小于0,P2进程主动执行block原语,P2被挂载到了打印机的等待队列中,P3同理,value值变为-2.</span></span><br><span class="line"><span class="comment">value值为0时资源刚好被分配完,为-1时有一个进程在等待,为-2时有两个进程在等待。</span></span><br><span class="line"><span class="comment">当P0使用完成后,会执行signal原语释放打印机,value值加一变为-1,但此时value的值为-1仍然小于0,就说明此时等待队列中不止一个进程在等待打印机资源,进程P0会主动执行wakeup原语唤醒队列中的队头进程P2,P2从阻塞队列中被切换到就绪队列。待P2进程切换至运行态时,就可占用P0释放的打印机资源了。其余后续步骤同理。</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure>
<p>wait(S)和signal(S)也可记为P(S),V(S),这对原语用于<strong>实现系统资源的申请和释放</strong>。</p>
<p><strong>S.value的初始值</strong>表示系统中<strong>某种资源的数目。</strong></p>
<p>对信号量S的<strong>一次P操作</strong>意味着进程<strong>请求一个单位的该类资源</strong>,因此需要执行S.balue–,表示资源数减1,当S.value<0时表示该类资源已分配完毕,因此进程应<strong>调用block原语进行自我阻塞</strong>(当前运行的进程从<strong>运行态切换为阻塞态</strong>),主动放弃处理机,并插入该类资源的等待队列S.L中。可见,该机制<strong>遵循了“让权等待的原则”</strong>,不会出现“忙等”的现象。</p>
<p>对信号量S的<strong>一次V操作</strong>意味着进程<strong>释放一个单位的该类资源</strong>,因此需要执行S.value++,表示资源数+1,若加一后仍是S.value<=0,表示依然有进程在等待该类资源,因此应<strong>调用wakeup原语唤醒等待队列中的第一个进程</strong>(被唤醒的进程从<strong>阻塞态切换为就绪态</strong>)。</p>
<h4 id="4-知识回顾"><a href="#4-知识回顾" class="headerlink" title="4.知识回顾"></a>4.知识回顾</h4><p><img src="https://s1.ax1x.com/2022/04/27/LLCHn1.png" alt="LLCHn1.png"></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>二十二、生产者消费者问题</title>
<url>/2022/05/01/19-43-28/</url>
<content><![CDATA[<h4 id="1-问题描述"><a href="#1-问题描述" class="headerlink" title="1.问题描述"></a>1.问题描述</h4><p>系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中去除一个产品并使用。(这里的“产品”理解为某种数据)</p>
<span id="more"></span>
<p>生产者、消费者<strong>共享一个初始为空、大小为n的缓冲区。</strong></p>
<p>只有<strong>缓冲区没满</strong>时,生产者才能把产品放入缓冲区。</p>
<p>只有<strong>缓冲区不空</strong>时,消费者才能从中取走产品,否则必须等待。</p>
<p><img src="https://s1.ax1x.com/2022/05/01/OC1z3q.png"></p>
<p>生产者进程每次生产一个产品,消费者进程每次取走一个产品。当缓冲区为满时,只能阻塞生产者进程,切换为消费者进程取走产品。只要缓冲区中又大于或等于1个可用的空间时就可以唤醒生产者进程继续生产。</p>
<p><img src="https://s1.ax1x.com/2022/05/01/OC3t2t.png" alt="OC3t2t.png"></p>
<p>当缓冲区为空,消费者进程就没有可以被取走的产品了,只能阻塞消费者进程,等待产品被放入缓冲区。</p>
<p><img src="https://s1.ax1x.com/2022/05/01/OC8AL8.png" alt="OC8AL8.png"></p>
<p>缓冲区属于临界资源,各个进程必须互斥地访问。如果不属于临界资源,则各生产者进程并发地执行时由于无法控制执行进度,有可能导致两个进程同时访问缓冲区的同一块区域导致数据冲突。</p>
<p><strong>如何用信号量机制(P、V操作)实现生产者、消费者进程的这些功能?</strong></p>
<p>信号量机制可以实现互斥、同步、对一类系统资源的申请和释放。</p>
<p>互斥:设置初始值为1的互斥信号量。</p>
<p>同步:设置初始值为0的同步信号量(实现“一前一后”)</p>
<p>申请和释放资源:设置一个信号量,初始值为资源的数量(本质上也是属于“同步问题”,若无空闲资源,则申请自愿的进程需要等待别的进程释放资源后才能据需执行下去)</p>
<blockquote>
<p>分析:</p>
<p>1.关系分析:找出题目中描述的各个进程,分析它们之间的同步关系。</p>
<ul>
<li>只有<strong>缓冲区没满</strong>时,生产者才能把产品放入缓冲区。这个属于同步关系。缓冲区没满时,生产者要等待消费者取走产品。</li>
<li>只有<strong>缓冲区不空</strong>时,消费者才能从中取走产品,否则必须等待。这个也属于同步关系。缓冲区为空时(即没有产品时),消费者要等待生产者生产商品。</li>
<li>只有<strong>缓冲区不空</strong>时,消费者才能从中取走产品,否则必须等待。这个属于互斥关系。</li>
</ul>
<p>2.整理思路,根据各进程的操作流程确定P、V操作的大致顺序。</p>
<p>生产者每次要消耗(P)一个空闲缓冲区,并生产(V)一个产品。消费者者每次要消耗(P)一个产品,并释放一个空闲的缓冲区(V)。往缓冲区放入,取走产品需要互斥。</p>
<p>3.设置信号量。设置需要的信号量,并根据题目题目条件确定信号量初值(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">semaphore mutex = <span class="number">1</span>; <span class="comment">//互斥信号量,实现进程互斥访问。</span></span><br><span class="line">semaphore empty = n; <span class="comment">//同步信号量,表示空闲缓冲区的数量。</span></span><br><span class="line">semaphore full = <span class="number">0</span>; <span class="comment">//同步信号量,表示产品的数量,也即非空缓冲区的数量。</span></span><br></pre></td></tr></table></figure>
</blockquote>
<h4 id="2-如何实现"><a href="#2-如何实现" class="headerlink" title="2.如何实现"></a>2.如何实现</h4><p>根据上面设置的信号量,实现响应代码:</p>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">//生产者进程</span></span><br><span class="line">producer(){</span><br><span class="line"> <span class="keyword">while</span>(<span class="number">1</span>){</span><br><span class="line"> 生产一个产品;</span><br><span class="line"> P(empty); <span class="comment">//消耗一个空闲缓冲区</span></span><br><span class="line"> P(mutex); <span class="comment">//实现进程互斥</span></span><br><span class="line"> 把产品放入缓冲区;</span><br><span class="line"> V(mutex); </span><br><span class="line"> V(full); <span class="comment">//增加一个产品</span></span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//消费者进程</span></span><br><span class="line">consumer(){</span><br><span class="line"> <span class="keyword">while</span>(<span class="number">1</span>){</span><br><span class="line"> P(full); <span class="comment">//消耗一个产品(非空缓冲区),此P操作用于实现进程同步</span></span><br><span class="line"> P(mutex); <span class="comment">//此P操作用于实现进程互斥</span></span><br><span class="line"> 从缓冲区取走一个产品;</span><br><span class="line"> V(mutex);</span><br><span class="line"> V(empty); <span class="comment">//增加一个空闲缓冲区</span></span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">P(mutex);</span></span><br><span class="line"><span class="comment">把产品放入缓冲区;</span></span><br><span class="line"><span class="comment">V(mutex);</span></span><br><span class="line"><span class="comment">上面的代码实现了进程互斥,实现互斥是在同一进程中进程一对PV操作</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">生产者进程的V(full)和消费者进程的P(full)用于实现两个进程的同步关系。即在其中一个一个进程中执行P,另一个进程中执行V</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure>
<h4 id="3-思考:能否改变相邻P,V操作的顺序?"><a href="#3-思考:能否改变相邻P,V操作的顺序?" class="headerlink" title="3.思考:能否改变相邻P,V操作的顺序?"></a>3.思考:能否改变相邻P,V操作的顺序?</h4><p><img src="https://s1.ax1x.com/2022/05/01/OCUYTK.png" alt="OCUYTK.png"></p>
<p>生产者生产产品和消费者消费产品从代码上看是放在PV操作之外。能不能放到PV操作之内呢?从逻辑上来看是没问题,可以让消费者从缓冲区中取出一个产品后就立即使用这个产品。但会导致临界区代码量变大,消费者进程在访问临界区的过程中就需要花费更多的时间,如果此时有别的进程也需要访问临界资源则消费者进程会被阻塞,会导致进程的并发度降低,尽量不要放入PV操作之中。</p>
<h4 id="4-知识回顾"><a href="#4-知识回顾" class="headerlink" title="4.知识回顾"></a>4.知识回顾</h4><p><img src="https://s1.ax1x.com/2022/05/01/OCaFhD.png" alt="OCaFhD.png"></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>五、中断和异常</title>
<url>/2022/04/10/21-04-11/</url>
<content><![CDATA[<h4 id="1-中断机制的诞生"><a href="#1-中断机制的诞生" class="headerlink" title="1.中断机制的诞生"></a>1.中断机制的诞生</h4><p>为了解决早期计算机资源利用率低的的问题,人们发明了<strong>操作系统</strong>,引入了<strong>中断机制</strong>,实现多道程序并发执行。</p>
<span id="more"></span>
<p><strong>本质:发生了中断也就意味着需要操作系统介入,展开管理工作。</strong>CPU收到计时部件发送的<strong>中断信号</strong>,切换为<strong>内核态</strong>,操作系统负责处理中断。</p>
<h4 id="2-中断的概念和作用"><a href="#2-中断的概念和作用" class="headerlink" title="2.中断的概念和作用"></a>2.中断的概念和作用</h4><ol>
<li>当中断发生时,CPU立即进入<strong>核心态</strong>。</li>
<li>当中断发生后,当前运行的进程暂停执行,并由操作系统内核对中断进行处理。</li>
<li>对于不用的中断信号,会进行不同的处理。</li>
</ol>
<p><strong>中断</strong>可以使CPU从<strong>用户态切换为核心态,使操作系统获得计算机的控制权。</strong>有了终端,才能够实现多道程序并发执行。只有在<strong>核心态</strong>操作系统才能够执行特权指令。从<strong>用户态切换到核心态是通过中断实现的,并且是唯一的途径</strong>。</p>
<h4 id="3-中断的分类"><a href="#3-中断的分类" class="headerlink" title="3.中断的分类"></a>3.中断的分类</h4><p><strong>中断(广义上的):</strong></p>
<ol>
<li><p><strong>内中断(也称异常,例外,陷入)</strong></p>
<ul>
<li><p>信号来源:CPU<strong>内部</strong>,与当前执行的指令有关。</p>
</li>
<li><p>自愿中断——指令中断(系统中断)</p>
</li>
<li><p>强迫中断——硬件故障或软件中断</p>
</li>
</ul>
</li>
<li><p><strong>外中断(狭义上的中断)</strong></p>
<ul>
<li><p>信号来源:CPU<strong>外部</strong>与但钱执行的指令无关。</p>
</li>
<li><p>外设请求</p>
</li>
<li><p>人工干预</p>
</li>
</ul>
</li>
</ol>
<p><strong>另一种分类方式:</strong></p>
<p><img src="https://s1.ax1x.com/2022/04/10/LAsMqI.png" alt="分类"></p>
<h4 id="4-外部中断的处理过程"><a href="#4-外部中断的处理过程" class="headerlink" title="4.外部中断的处理过程"></a>4.外部中断的处理过程</h4><ol>
<li>每条指令执行结束后,CPU检查是否有外部中断信号</li>
<li>若有外部中断信号,则需要保护中断进程的CPU环境</li>
<li>根据中断信号类型转入相应的中断处理程序</li>
<li>恢复原进程的CPU环境并推出中断,返回原进程继续往下执行</li>
</ol>
<hr>
<h4 id="5-知识图谱"><a href="#5-知识图谱" class="headerlink" title="5.知识图谱"></a>5.知识图谱</h4><p><img src="https://s1.ax1x.com/2022/04/10/LA6gbR.png" alt="图谱"></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>八、进程的状态与转换</title>
<url>/2022/04/17/23-56-35/</url>
<content><![CDATA[<h4 id="1-进程的基本状态"><a href="#1-进程的基本状态" class="headerlink" title="1.进程的基本状态"></a>1.进程的基本状态</h4><p><strong>三种基本状态:</strong></p>
<ol>
<li><strong>运行态</strong>:占有cpu,并在cpu上运行</li>
<li><strong>就绪态</strong>:已具备运行条件,但没有空闲CPU而暂时不能运行</li>
<li><strong>阻塞态(或称等待态)</strong>:因等待某一事件而暂时不能执行</li>
</ol>
<span id="more"></span>
<blockquote>
<p>运行态:在单核处理及环境,每一时刻最多只能有一个进程处于运行态(双核环境下最多可以同时拥有两个进程处于运行态)</p>
<p>就绪态:进程已经拥有了除处理及之外所有需要的资源,一旦获得处理机即可立即进入运行态开始运行。(万事俱备,只欠CPU)</p>
<p>阻塞态:如:等待操作系统扽配打印机,等待读取磁盘操作的结果。为了提高CPU利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务。</p>
</blockquote>
<p><strong>另外的两种状态:</strong></p>
<p>进程运行结束(或者由于BUG导致进程无法继续下去,如数组越界)需要撤销进程,操作系统需要完成撤销进程的相关操作,完成将分配给进程的资源回收,撤销进程的PCB等操作。</p>
<ol>
<li><strong>创建态</strong>(新建态):进程正在被创建,操作系统为其分配资源、创建PCB</li>
<li><strong>终止态</strong>(结束态):进程正在从系统中撤销,操作系统会回收分配给进程的资源,撤销其PCB</li>
</ol>
<h4 id="2-进程的状态转换"><a href="#2-进程的状态转换" class="headerlink" title="2.进程的状态转换"></a>2.进程的状态转换</h4><p><a href="https://imgtu.com/i/La3vzd"><img src="https://s1.ax1x.com/2022/04/18/La3vzd.png" alt="La3vzd.png"></a></p>
<h4 id="3-知识回顾"><a href="#3-知识回顾" class="headerlink" title="3.知识回顾"></a>3.知识回顾</h4><p>绿框知识重要</p>
<p><a href="https://imgtu.com/i/La8kFS"><img src="https://s1.ax1x.com/2022/04/18/La8kFS.png" alt="La8kFS.png"></a></p>
]]></content>
<categories>
<category>操作系统</category>
</categories>
<tags>
<tag>操作系统</tag>
</tags>
</entry>
<entry>
<title>六、系统调用</title>
<url>/2022/04/13/20-45-57/</url>
<content><![CDATA[<h4 id="1-什么是系统调用"><a href="#1-什么是系统调用" class="headerlink" title="1.什么是系统调用"></a>1.什么是系统调用</h4><p>操作系统是用户和计算机硬件之间的接口需要向上层提供一些简单易用的服务。主要包括<strong>命令接口</strong>和<strong>程序接口</strong>。其中,程序接口由一组==<strong>系统调用</strong>==组成。</p>
<span id="more"></span>
<blockquote>
<p>用户接口:</p>
<ol>
<li><p>命令接口(允许用户直接使用)</p>
<ul>
<li>联机命令接口:用户说一句,系统做一句</li>
<li>脱机命令接口:用户说一堆,系统做一堆。</li>
</ul>
<ol start="2">
<li>程序接口(允许用户通过程序间接使用):由一组系统调用组成。</li>
</ol>
<p>系统调用就是操作系统提供给程序使用的接口,可以理解为一种可供应用程序调用的函数,应用程序可以发出系统调用请求来获得操作系统的服务。</p>
</li>
</ol>
</blockquote>
<h5 id="2-系统调用的作用:"><a href="#2-系统调用的作用:" class="headerlink" title="2.系统调用的作用:"></a>2.系统调用的作用:</h5><p>应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源由操作系统统一管理,因此在用户程序中,凡事与资源有关的操作(如存储分配,I/O操作,文件管理等),都必须通过系统调用的方式像操作系统提出服务请求,由操作系统代为完成,这样<strong>可以保证系统的稳定性和安全性</strong>,防止用户进行非法操作。</p>
<blockquote>
<p><strong>系统调用</strong>(按功能分类):</p>
<ul>
<li><strong>设备管理</strong>:完成设备的请求、释放、启动等工作</li>
<li><strong>文件管理</strong>:完成文件的读写、创建、删除等功能</li>
<li><strong>进程控制</strong>:完成进程的创建。撤销、阻塞、唤醒等功能</li>
<li><strong>进程通信</strong>:完成进程之间的消息传递、信号传递等功能</li>
<li><strong>内存管理</strong>:完成内存的分配、回收等功能</li>
</ul>
<blockquote>
<p>系统调用相关处理涉及到对系统资源的管理,对进程的控制,这些功能需要执行一些<strong>特权指令</strong>才能完成,因此<strong>系统调用的相关处理</strong>需要在<strong>核心态</strong>下完成。</p>
</blockquote>
</blockquote>
<h4 id="3-系统调用与库函数的区别"><a href="#3-系统调用与库函数的区别" class="headerlink" title="3.系统调用与库函数的区别"></a>3.系统调用与库函数的区别</h4><p><img src="https://s1.ax1x.com/2022/04/13/LMvy5D.png" alt="区别"></p>
<h4 id="4-系统调用背后的过程"><a href="#4-系统调用背后的过程" class="headerlink" title="4.系统调用背后的过程"></a>4.系统调用背后的过程</h4><p>首先需要做的是把传入系统调用的参数用相应的指令放入相应的通用寄存器中并执行相应的陷入指令(interrupt的缩写,此汇编指令的作用是引发一次系统中断),指令运行在<strong>用户态</strong>。当指令被执行时系统会执行相应的系统调用服务程序,这时候系统中断开始并运行在<strong>核心态</strong>,待系统调用完成后会把执行结果返回给用户程序,重新回到用户态,继续执行后续操作。如下图所示:</p>
<p><img src="https://s1.ax1x.com/2022/04/13/LMvRxA.png" alt="过程"></p>
<blockquote>
<p>有些书上陷入指令被叫做访管指令。概念是:因操作系统不允许用户态运行某些“危险性”高的指令,于是用户态运行这些指令的结果会转化成操作系统的核心态(管态)去运行。</p>