-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
1761 lines (970 loc) · 911 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>个人随笔</title>
<subtitle>z y d</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://www.singlelovely.cn/"/>
<updated>2021-01-09T07:58:21.199Z</updated>
<id>http://www.singlelovely.cn/</id>
<author>
<name>Cxsz Zhu</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>站室改造步骤</title>
<link href="http://www.singlelovely.cn/post/cf716142.html"/>
<id>http://www.singlelovely.cn/post/cf716142.html</id>
<published>2021-01-08T06:00:00.000Z</published>
<updated>2021-01-09T07:58:21.199Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="站室传感器点表整理"><a class="header-anchor" href="#站室传感器点表整理">☆</a>站室传感器点表整理</h2><ul><li>首先从原来站室的系统的数据库或者站控中查找该类型的传感器的位置、参数序号、调度号、位号、设备号等相关信息<ul><li>通过IP传输信息的设备,是通过调度号确定设备位置的</li><li>使用485传输数据的设备,是通过报文+位号确定设备位置的</li><li>需要将不同厂商的设备分类整理,以便于后序工作</li></ul></li></ul><p>附:<a href="https://data.singlelovely.cn/down/%E6%97%97%E4%B8%9C%E8%AE%BE%E5%A4%87%E7%82%B9%E8%A1%A8_1231.xlsx" target="_blank" rel="noopener">旗东设备点表</a></p><h2 id="站室智能网关以及串口服务器的安装"><a class="header-anchor" href="#站室智能网关以及串口服务器的安装">☆</a>站室智能网关以及串口服务器的安装</h2><ol><li>确定智能网关的安装位置,以及取电的位置,然后将智能网关安装到合适的位置,并且将数据传输的线路连接。</li></ol><p><img src="https://data.singlelovely.cn/images/20210109144401.png" alt="智能网关安装"></p><ol start="2"><li>将原来旧的串口服务器换为新的串口服务器,将休普温湿度、修普温度、消防、电池这四个传感器的数据线接到串口服务器上,然后将串口服务器的数据传输线接到智能网关上(如485线足够长,可以直接将485线接入网关,而不必加装串口服务器)</li></ol><p><img src="https://data.singlelovely.cn/images/20210109144745.jpg" alt="串口服务器"></p><p>安装串口服务器时,需注意com口顺序及485线序</p><h2 id="站室点表配置"><a class="header-anchor" href="#站室点表配置">☆</a>站室点表配置</h2><p>站室点表需要传入网关中,所以点表配置即为网关配置</p><p>主要涉及的有</p><ul><li>a_bit : 监测点位类型</li><li>硬件配置 : 需要外挂的设备硬件及IP,对应外键为config表中的接口</li><li>服务参数 : 参数序号及读取的命令</li><li>mqtt点表 : 监测点位配置</li><li>主站配置 : 与主站通讯相关配置</li><li>服务启用表 : 选择启用相对应的服务</li></ul><h3 id="修改主站配置表"><a class="header-anchor" href="#修改主站配置表">☆</a>修改主站配置表</h3><p><img src="https://data.singlelovely.cn/images/20210109151109.png" alt="主站配置"></p><p>一般情况需要修改的为设备地址项与IP地址项,设备地址项为主站总召的网关名称,IP地址为主站的mqtt服务器地址</p><h3 id="修改硬件配置表"><a class="header-anchor" href="#修改硬件配置表">☆</a>修改硬件配置表</h3><p><img src="https://data.singlelovely.cn/images/20210109151433.png" alt="硬件配置"></p><p>需要修改的为对方IP与端口号(通过485传输的无需填写),如需增加硬件,则需将硬件接口、波特率、停止位、数据位、校验方式、传感器厂家id与config表中的数据对应</p><h3 id="修改服务参数表"><a class="header-anchor" href="#修改服务参数表">☆</a>修改服务参数表</h3><p><img src="https://data.singlelovely.cn/images/20210109152203.png" alt="服务参数表"></p><p>网关本体1 为配置网关的DNS地址,需要配置为网关地址,格式为:route add default gw <a href="http://xxx.xxx.xxx.xxx" target="_blank" rel="noopener">xxx.xxx.xxx.xxx</a></p><p>网关本体2 为配置网关的ip地址,需要配置为网关地址,格式为:ifconfig eth0:1 <a href="http://xxx.xxx.xxx.xxx" target="_blank" rel="noopener">xxx.xxx.xxx.xxx</a></p><p>eth0:1 为给第一个网口添加一个IP地址,而不是直接修改IP地址,以防止数据库上传错误后无法连接网关</p><ul><li>网关默认IP为:<ul><li>eth0: 192.168.1.177</li><li>eth1: 192.168.2.177</li><li>eth2: 192.168.3.177</li><li>eth3: 192.168.4.177</li></ul></li></ul><p>此处的参数序号,对应mqtt点表中的参数序号,硬件id对应硬件配置中的id</p><p>参数序号一般为一种硬件对应一个,但消防、休普温度等,由于一次485命令最多读取100个点位,实际检测点位较多,则需要对应多个参数序号</p><p>参数序号理论上可以自由指定,但为了统一维护方便,请按照以下定义:</p><p>环境21-40、局放41-60、机器人61-80、机械特性81-100、消防101-120、休普121-140、</p><p>电池141-160、安防主机160-180。</p><p>注:1-20为网关本身预留,如有新增设备类型,从180继续增加。每个类型预留20个设备号。</p><h3 id="修改mqtt点表"><a class="header-anchor" href="#修改mqtt点表">☆</a>修改mqtt点表</h3><p><img src="https://data.singlelovely.cn/images/20210109153430.png" alt="mqtt点表"></p><p>首先需要确定的是点表序号,点表序号为主键,唯一值,为了方便管理,按如下规范定义点表序号:<a href="https://data.singlelovely.cn/down/%E7%82%B9%E8%A1%A8%E5%BA%8F%E5%8F%B7%E5%AE%9A%E4%B9%89.xlsx" target="_blank" rel="noopener">点表序号定义</a></p><p>位置为设备安装位置,此项内容会传输到主站作为设备安装展示,需要与现场对应,建议与主站沟通确定格式</p><p>点类型为 a_bit 表的外键,为区分不同监测传感器的唯一标识,同一厂家、同种设备的点类型为唯一,需要在 a_bit 表中查找确定</p><p>参数序号为服务参数表中参数序号的外键,一般同种设备相同,但消防、修普等可能会有不同,需要注意</p><p><img src="https://data.singlelovely.cn/images/20210109153712.png" alt="mqtt点表2"></p><p>位号为监测点位顺序号:</p><ol><li>通过485线传输数据的,一般为从1开始往后排,最高为100</li><li>通过网线传输数据的,一般为1、2、3、4 这样</li><li>机械特性与局放无位号</li><li>以上规律不具有普适性,需根据现场状况进一步确定</li></ol><p>值、状态,默认为0即可</p><p>模块号和设备号即为整理点表时的调度号</p><p>其他剩余项: 阈值、倍数、精度、越限值,不同的设备填写的数值不同,需要根据实际情况确定</p><h2 id="数据库写入网关"><a class="header-anchor" href="#数据库写入网关">☆</a>数据库写入网关</h2><p>点表配置完成后,需要将点表数据库写入网关</p><p>首先需要将数据库文件重命名为:00-0.0.6.db</p><p>使用ssh或者telnet连接到网关</p><p>在命令行使用 scp 或者 使用图形化软件winSCP 将数据库文件复制到 /ts/db/ 目录下</p><p>命令行下使用 ls -l /ts/db 查看数据库文件修改时间,确定修改文件正确</p><p>命令行下使用 reboot 重启网关,加载配置文件</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
</entry>
<entry>
<title>Hyper-V虚拟机映射端口到外网</title>
<link href="http://www.singlelovely.cn/post/56435b42.html"/>
<id>http://www.singlelovely.cn/post/56435b42.html</id>
<published>2020-12-21T05:21:00.000Z</published>
<updated>2020-12-21T05:36:46.559Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>Hyper-V中创建虚拟机后,可以连接虚拟交换机,通过虚拟交换机连接到物理机</p><p>但虚拟机如果有端口需要对外提供服务时,外部网络只能访问到物理机,无法访问到虚拟交换机的网络</p><p>此时则可以使用 <a href="https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh" target="_blank" rel="noopener">netsh</a> 将虚拟机网络端口映射到物理机</p><p><span id="inline-purple">添加端口转发</span></p><p>比如使用IPv4+Port访问转发到IPv4+Port访问,就使用</p><p>netsh interface portproxy add v4tov4 listenaddress=监听IP listenport=监听端口 connectport=目标端口 connectaddress=目标IP</p><p>其中listenaddress可以省略,省略后就会监听所有访问物理机的IP,就不用担心网络环境改变后物理机的IP改变需要重新设置的问题</p><p>比如我想外部访问80端口,转发到虚拟机的172.17.89.39:80,则命令如下(不指定IP时则监听所有IP):</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netsh interface portproxy add v4tov4 listenport=80 connectport=80 connectaddress=192.168.147.199</span><br></pre></td></tr></table></figure><p><span id="inline-purple">删除端口转发</span></p><p>比如我要删除一个v4tov4的端口转发,就使用</p><p>netsh interface portproxy delete v4tov4 listenaddress=监听IP listenport=监听端口</p><p>如果你的监听IP设置的泛型,删除也不用填</p><p>比如我要删除上述添加的转发规则,命令就是</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netsh interface portproxy delete v4tov4 listenport=80</span><br></pre></td></tr></table></figure><p><span id="inline-purple">查看所有转发规则</span></p><p>使用如下命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netsh interface portproxy show all</span><br></pre></td></tr></table></figure><p>当然如果你只想看v4tov4</p><p>就把最后改为v4tov4</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netsh interface portproxy show v4tov4</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
端口映射
</summary>
<category term="网络" scheme="http://www.singlelovely.cn/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="网络" scheme="http://www.singlelovely.cn/tags/%E7%BD%91%E7%BB%9C/"/>
<category term="虚拟机" scheme="http://www.singlelovely.cn/tags/%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
</entry>
<entry>
<title>ZeroTier安装配置及路由下整个网段异地组网</title>
<link href="http://www.singlelovely.cn/post/9611a2bf.html"/>
<id>http://www.singlelovely.cn/post/9611a2bf.html</id>
<published>2020-11-27T05:36:00.000Z</published>
<updated>2020-11-27T08:12:32.670Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p><code>ZeroTier</code>是一个基于UDP的异地组网工具,支持多平台,开箱即用。首次连接需要与转发服务器通信,建立连接后,则直接在两个客户端间通过UDP通信。</p><h2 id="下载安装"><a class="header-anchor" href="#下载安装">☆</a>下载安装</h2><p>Linux下安装方式如下,其它系统可以参照官网:<a href="https://www.zerotier.com/download/" target="_blank" rel="noopener">https://www.zerotier.com/download/</a></p><ul><li>一键安装程序</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -s https://install.zerotier.com/ | sudo bash</span><br></pre></td></tr></table></figure><blockquote><p>注意:此安装方式不适用于openwrt系统,openwrt可以直接安装ipk插件<br><code>opkg install zerotier</code></p></blockquote><h2 id="moon转发节点配置"><a class="header-anchor" href="#moon转发节点配置">☆</a>Moon转发节点配置</h2><p>Linux服务器可以作为Moon节点,可以改善与<code>ZeroTier</code>官方服务器通信的延迟。</p><ul><li>将VPS加入网络,需要在控制面板上同意</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">zerotier-cli join 网络ID</span><br></pre></td></tr></table></figure><ul><li>进入<code>zerotier-one</code>目录,生成配置文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /var/lib/zerotier-one</span><br><span class="line">zerotier-idtool initmoon identity.public > moon.json</span><br></pre></td></tr></table></figure><ul><li>修改moon.json文件</li></ul><p>修改文件中的“stableEndpoints”为 VPS的IP地址及开放的端口号,例如“stableEndpoints: [“8.8.8.8/9993”]</p><ul><li>生成签名文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">zerotier-idtool genmoon moon.json</span><br></pre></td></tr></table></figure><ul><li>在安装目录下创建一个moons.d的文件夹,并将000000xxxx.moon移入,并重启服务</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">service zerotier-one restart</span><br></pre></td></tr></table></figure><h2 id="客户端加入moon节点"><a class="header-anchor" href="#客户端加入moon节点">☆</a>客户端加入Moon节点</h2><ol><li>windows安装目录<ul><li>C:\ProgramData\ZeroTier\One</li></ul></li><li>linux安装目录<ul><li>/var/lib/zerotier-one</li></ul></li></ol><p>在安装目录下创建一个moons.d文件夹,将签名文件放入,随后重启服务即可。</p><p>在命令行执行:<code>zerotier-cli listpeers</code>,如果有Moon节点标签,则连接成功</p><h2 id="利用zerotier转发整个网段进行组网"><a class="header-anchor" href="#利用zerotier转发整个网段进行组网">☆</a>利用ZeroTier转发整个网段进行组网</h2><p>ZeroTier会自动对安装了客户端的机器进行配置下发,在网站管理面板直接修改配置后,几分钟即可自动下发到客户端。</p><p>在某些情况下,网络中的设备,不一定支持安装zerotier客户端,或者多客户端管理起来比较麻烦,则可以在路由器上安装zerotier,然后将整个路由器下的设备进行异地组网。</p><blockquote><p>需要zerotier虚拟局域网的网段与路由器lan下的网段不同,若多个路由的lan网段组网,需要每个路由下的lan网段不同。</p></blockquote><p>如zerotier的虚拟网段为:10.147.17.*,给路由器分配的IP为10.147.17.10,路由器下lan的网段为192.168.1.0,则需要添加的路由为:192.168.1.0 via 10.147.17.10</p><p><img src="https://data.singlelovely.cn/images/20201127160023.png" alt></p><p>添加路由后,等待几分钟(配置下发时间),即可在别的加入虚拟网络中的客户端,直接使用<code>192.168.1.*</code>地址访问路由器下的内网机器。</p>]]></content>
<summary type="html">
ZeroTier实在是太好用了
</summary>
</entry>
<entry>
<title>计算机操作系统笔记</title>
<link href="http://www.singlelovely.cn/post/521a3173.html"/>
<id>http://www.singlelovely.cn/post/521a3173.html</id>
<published>2020-09-21T13:41:07.553Z</published>
<updated>2020-09-21T13:41:07.553Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1>操作系统引论</h1><h2 id="发展过程"><a class="header-anchor" href="#发展过程">☆</a>发展过程</h2><h3 id="分时系统"><a class="header-anchor" href="#分时系统">☆</a>分时系统</h3><p>引入:</p><ul><li>人机交互</li><li>共享主机<br>解决的问题:</li></ul><ol><li>及时接收: 多路卡</li><li>及时处理: 各个用户的作业必须驻留在内存中,并能频繁的获得运行</li></ol><ul><li>作业直接进入内存。</li><li>采用轮转运行的方式。(引入时间片概念)</li></ul><p>特征:多路性、独立性、及时性、交互性</p><h3 id="实时系统"><a class="header-anchor" href="#实时系统">☆</a>实时系统</h3><p>类型:</p><ul><li>工业控制系统</li><li>信息查询系统</li><li>多媒体系统</li><li>嵌入式系统</li></ul><h2 id="基本特性"><a class="header-anchor" href="#基本特性">☆</a>基本特性</h2><h3 id="并发-concurrence"><a class="header-anchor" href="#并发-concurrence">☆</a>并发(Concurrence)</h3><p>1、并行与并发</p><p>并行是指两个或多个时间在同一时刻发生,并发是指两个或多个事件在同一时间间隔内发生。</p><p>2、进程</p><p>是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令数据和堆栈组成的,是一个能独立运行的活动实体。</p><h3 id="共享-sharing"><a class="header-anchor" href="#共享-sharing">☆</a>共享(Sharing)</h3><ul><li>互斥共享方式<ul><li>绝大多数物理设备,栈、变量、表格</li></ul></li><li>同时访问方式</li></ul><h3 id="虚拟-virtual"><a class="header-anchor" href="#虚拟-virtual">☆</a>虚拟(Virtual)</h3><ul><li>时分复用技术<ul><li>虚拟处理机</li><li>虚拟设备</li></ul></li><li>空分复用技术</li></ul><h3 id="异步"><a class="header-anchor" href="#异步">☆</a>异步</h3><h1>进程的描述与控制</h1><h2 id="前趋图和程序执行"><a class="header-anchor" href="#前趋图和程序执行">☆</a>前趋图和程序执行</h2><p>前趋图:为了能更好的描述程序的顺序和并执行情况。</p><p>顺序执行:顺序性、封闭性、可再现性</p><p>并发执行:间断性、失去封闭性、不可再现性</p><h2 id="进程的描述"><a class="header-anchor" href="#进程的描述">☆</a>进程的描述</h2><p>定义:</p><ul><li>进程是程序的一次执行。</li><li>进程是一个程序及其数据在处理机上顺序执行时所发生的活动。</li><li>进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。</li></ul><h2 id="信号量"><a class="header-anchor" href="#信号量">☆</a>信号量</h2><p>含义:</p><p>信号量是一个用来实现进程同步的整型或记录型变量,除了<code>定义初始化</code>外,对它只能执行 <code>wait(或P)</code>和<code>signal(或V)</code>这两种原子操作。</p><h3 id="信号量的物理意义"><a class="header-anchor" href="#信号量的物理意义">☆</a>信号量的物理意义</h3><p>一个信号量S通常对应于一类资源</p><h2 id="用信号量实现互斥"><a class="header-anchor" href="#用信号量实现互斥">☆</a>用信号量实现互斥</h2><p>为了实现进程对临界资源的互斥访问,需为每类临界资源设置一初值为 1的互斥信号量mutex。</p><div id="div-border-right-green">- wait操作----申请资源- signal操作----释放资源</div><h1>管程管理</h1><p>对于信号量机制,每个访问临界资源的进程自备wait、signal操作,给系统管理带来了麻烦,而且容易出现死锁。<br>共享变量分部到各程序中,使程序易读性差。<br>正确性难以保证。</p><h2 id="基本思想"><a class="header-anchor" href="#基本思想">☆</a>基本思想</h2><p>将共享资源用共享数据结构表示,用对数据结构操作的一组过程表示资源管理程序, 将共享数据结构和对它们的操作集中在一个模块中形成管程。</p><p>一个管程定义了一个数据结构和能为并发进程所执行在该数据结构上的一组操作,这组操作能同步进程和改变管程中的数据。</p><h2 id="进程同步问题"><a class="header-anchor" href="#进程同步问题">☆</a>进程同步问题</h2><h3 id="生产者消费者问题"><a class="header-anchor" href="#生产者消费者问题">☆</a>生产者消费者问题</h3><blockquote><p>☞若干进程共享缓存去的同步问题</p></blockquote><p>利用记录型信号量解决:</p><p>基本工作:</p><ul><li>生产者生产消息放入缓冲区</li><li>消费者从缓冲区取走消息</li></ul><p>互斥:缓冲池是临界资源,设置信号量mutex=1</p><p>同步: (生产者)有空缓冲区放产品,唤醒等待的消费者进程;无空缓冲区则阻塞。<br>(消费者)有产品取走,唤醒等待的生产者进程;无产品则阻塞。</p><p>实现同步需要设置两个信号量empty=n,full=0</p><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">producer</span><span class="params">()</span></span>{</span><br><span class="line"> producer an item nextp;</span><br><span class="line"> ...</span><br><span class="line"> wait(empty);</span><br><span class="line"> wait(mutex);</span><br><span class="line"> buffer[in] = netxp;</span><br><span class="line"> in = (in + <span class="number">1</span>) % n;</span><br><span class="line"> signal(mutex);</span><br><span class="line"> signal(full);</span><br><span class="line">}<span class="keyword">while</span>(<span class="keyword">true</span>);</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">consumer</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">do</span>{</span><br><span class="line"> wait(full);</span><br><span class="line"> wait(mutex);</span><br><span class="line"> nextc = buffer[out];</span><br><span class="line"> out = (out + <span class="number">1</span>) % n;</span><br><span class="line"> signal(mutex);</span><br><span class="line"> signal(empty);</span><br><span class="line"> consumer the item in nextc;</span><br><span class="line"> ...</span><br><span class="line"> }<span class="keyword">while</span>(<span class="keyword">true</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> cobegin</span><br><span class="line"> producer(); consumer();</span><br><span class="line"> coend</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>作业<br>进程的概念(定义) 状态 特征 标志 进程与程序的关系(异同)</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
</entry>
<entry>
<title>前端vue项目配置与运行</title>
<link href="http://www.singlelovely.cn/post/ead1bac9.html"/>
<id>http://www.singlelovely.cn/post/ead1bac9.html</id>
<published>2020-08-27T00:18:00.000Z</published>
<updated>2020-09-22T06:11:09.192Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="环境依赖"><a class="header-anchor" href="#环境依赖">☆</a>环境依赖</h2><ul><li><p>必需:</p><ul><li>Node.js</li><li>npm</li><li>vue-cli</li></ul></li><li><p>可选:</p><ul><li>IntelliJ IDEA (建议安装)<ul><li>必须安装 <code>Ultimate</code> 版, <code>Community</code> 版不支持 web 相关功能。</li></ul><blockquote><p>tips: 教育网邮箱可以官网申请一年 Ultimate 激活码</p></blockquote></li></ul></li></ul><h2 id="软件安装"><a class="header-anchor" href="#软件安装">☆</a>软件安装</h2><ol><li>Node.js<ul><li>下载地址 : <a href="https://nodejs.org/dist" target="_blank" rel="noopener">https://nodejs.org/dist</a></li><li>建议安装 v10 ~ v12 间的版本,版本过低或者过高都会出现一些奇怪的问题:见下文。</li></ul></li><li>npm<ul><li>node.js 中集成</li></ul></li><li>vue-cli<ul><li>打开命令行执行 <code>npm install vue-cli</code></li></ul></li></ol><h2 id="项目运行"><a class="header-anchor" href="#项目运行">☆</a>项目运行</h2><h3 id="使用命令行运行"><a class="header-anchor" href="#使用命令行运行">☆</a>使用命令行运行</h3><ol><li>克隆项目到本地,新建分支并切换</li></ol><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line">git clone http://222.129.11.38/Waver/vue.git</span><br><span class="line"></span><br><span class="line">cd vue</span><br><span class="line"></span><br><span class="line">git checkout -b run_dev</span><br></pre></td></tr></table></figure><ol start="2"><li>安装依赖包(以admin为例)</li></ol><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cd admin</span><br><span class="line"></span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><ol start="3"><li><p>启动项目并运行</p><ul><li>首先查看一下 <code>package.json</code> 中 scripts 下面配置的启动项</li><li><img src="https://data.singlelovely.cn/images/20200826220010.png" alt></li><li>根据启动项执行不同的命令,如在本例中就是: <code>npm run dev</code> 启动项目</li><li>如未报错的话,则会看到以下内容</li><li><img src="https://data.singlelovely.cn/images/20200826215832.png" alt></li></ul></li></ol><h3 id="intellij-idea-中运行"><a class="header-anchor" href="#intellij-idea-中运行">☆</a>IntelliJ IDEA 中运行</h3><ol><li><p>安装 <code>vue.js</code> 插件</p><ul><li><img src="https://data.singlelovely.cn/images/20200826220135.png" alt></li></ul></li><li><p>导入项目</p><ul><li>File -> Open -> 选中vue文件夹 -> 点击ok</li><li><img src="https://data.singlelovely.cn/images/20200826220049.png" alt></li></ul></li><li><p>安装依赖项</p><ul><li>根据弹出的提升点击 <code>npm install</code></li><li><img src="https://data.singlelovely.cn/images/20200826220215.png" alt></li><li>如未弹出,则手动在命令行进入当前目录后执行 <code>npm install</code></li></ul></li><li><p>配置运行环境</p><ul><li>点击上方工具栏的 <code>Edit Configurations</code></li><li><img src="https://data.singlelovely.cn/images/20200826220251.png" alt></li><li>添加一个 npm 运行环境</li><li><img src="https://data.singlelovely.cn/images/20200826220443.png" alt></li><li>配置运行参数</li><li><img src="https://data.singlelovely.cn/images/20200826220502.png" alt></li><li>然后点击运行即可</li></ul></li></ol><h2 id="连接后端服务"><a class="header-anchor" href="#连接后端服务">☆</a>连接后端服务</h2><blockquote><p>需要修改的文件有 <code>baseurl.config.js</code> 与 <code>vue.config.js</code></p></blockquote><p>配置相关内容,可以参考 webpack <a href="https://www.webpackjs.com/configuration/" target="_blank" rel="noopener">官方文档</a></p><p>主要内容如下:</p><figure class="highlight javascript"><figcaption><span>baseurl.config.js</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">exports.BASE_URL = {</span><br><span class="line"> <span class="string">'development'</span>: <span class="string">'http://platform.imch.com.cn/'</span>, <span class="comment">// 本地环境</span></span><br><span class="line"> <span class="string">'production'</span>: {</span><br><span class="line"> <span class="string">'127.0.0.1'</span>: <span class="string">'http://platform.imch.com.cn/'</span>, <span class="comment">// 本地打包请求地址</span></span><br><span class="line"> <span class="string">'192.168.1.200'</span>: <span class="string">'http://192.168.1.200:8093/'</span>, <span class="comment">// 200测试机请求接口地址</span></span><br><span class="line"> <span class="string">'220.249.8.102'</span>: <span class="string">'http://220.249.8.102:22334/'</span>, <span class="comment">// 潞电外网请求接口地址</span></span><br><span class="line"> <span class="string">'localhost'</span>: <span class="string">'http://yjzx.lddq.com:8285'</span>, <span class="comment">// 潞电外网请求接口地址</span></span><br><span class="line"> <span class="string">'192.168.0.155'</span>: <span class="string">'http://192.168.0.155:8285'</span> <span class="comment">// 潞电内网请求接口地址</span></span><br><span class="line"> },</span><br><span class="line">}</span><br><span class="line">exports.IMG_URL = {</span><br><span class="line"> <span class="comment">//'localhost': 'http://file.imch.com.cn', // 本地环境</span></span><br><span class="line"> <span class="comment">//'127.0.0.1': 'http://file.imch.com.cn', // 本地环境</span></span><br><span class="line"> <span class="comment">//'192.168.1.200': 'http://192.168.1.200:6003', // 200测试机</span></span><br><span class="line"> <span class="string">'localhost'</span>: <span class="string">'http://yjzx.lddq.com:22333'</span>, <span class="comment">// 潞电外网地址</span></span><br><span class="line"> <span class="comment">//'192.168.0.155': 'http://192.168.0.155:22333' // 潞电内网地址</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><figcaption><span>vue.config.js</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">devServer: {</span><br><span class="line"> <span class="comment">/* 自动打开浏览器 */</span></span><br><span class="line"> open: <span class="literal">true</span>,</span><br><span class="line"> <span class="comment">/* 设置为0.0.0.0则所有的地址均能访问 */</span></span><br><span class="line"> <span class="comment">// host: 'localhost',</span></span><br><span class="line"> host: <span class="string">'0.0.0.0'</span>,</span><br><span class="line"> port: <span class="number">8081</span>,</span><br><span class="line"> https: <span class="literal">false</span>,</span><br><span class="line"> hotOnly: <span class="literal">false</span>,</span><br><span class="line"> <span class="comment">/* 使用代理 */</span></span><br><span class="line"> proxy: {</span><br><span class="line"> <span class="string">'/api'</span>: {</span><br><span class="line"> <span class="comment">/* 目标代理服务器地址 */</span></span><br><span class="line"> <span class="comment">// target: 'http://192.168.1.200:8093',</span></span><br><span class="line"> <span class="comment">// target: 'http://192.168.1.84:8081',</span></span><br><span class="line"> <span class="comment">//target: target,</span></span><br><span class="line"> target: <span class="string">"http://yjzx.lddq.com:8285"</span>,</span><br><span class="line"> <span class="comment">/* 允许跨域 */</span></span><br><span class="line"> changeOrigin: <span class="literal">true</span>,</span><br><span class="line"> pathRewrite: {</span><br><span class="line"> <span class="string">'^/api'</span>: <span class="string">''</span></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><h2 id="一些问题的解决"><a class="header-anchor" href="#一些问题的解决">☆</a>一些问题的解决</h2><h3 id="运行时报错:cannot-find-module-babel-compat-data-corejs3-shipped-proposals"><a class="header-anchor" href="#运行时报错:cannot-find-module-babel-compat-data-corejs3-shipped-proposals">☆</a>运行时报错:cannot find module @babel/compat-data/corejs3-shipped-proposals</h3><p><img src="https://data.singlelovely.cn/images/20200826220807.png" alt></p><p>Node.js 版本兼容问题导致,详细问题可查看:<a href="https://github.com/storybookjs/storybook/issues/10477" target="_blank" rel="noopener">issues</a>、<a href="https://stackoverflow.com/questions/61238650/i-am-having-an-issue-with-babel-building-angular-app-for-production" target="_blank" rel="noopener">stackoverflow</a></p><p>解决方法:</p><ol><li>更换 node 版本</li><li>编辑 <code>package.json</code> 文件,在 <code>"devDependencies"</code> 下添加一行,然后执行<code>npm install</code></li></ol><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"@babel/compat-data": "7.9.0"</span><br></pre></td></tr></table></figure><ol start="3"><li>控制台执行以下命令</li></ol><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D babel-loader @babel/core @babel/preset-env webpack</span><br></pre></td></tr></table></figure><h3 id="页面控制台报错:cross-origin-read-blocking"><a class="header-anchor" href="#页面控制台报错:cross-origin-read-blocking">☆</a>页面控制台报错:Cross-Origin Read Blocking</h3><p><code>baseurl.config.js</code> 文件中配置的地址冲突所造成的跨域问题,将不需要的地址注释掉即可</p><p>详细问题原因可以查看:<a href="https://stackoverflow.com/questions/61238650/i-am-having-an-issue-with-babel-building-angular-app-for-production" target="_blank" rel="noopener">stackoverflow</a></p><h3 id="运行是无法编译"><a class="header-anchor" href="#运行是无法编译">☆</a>运行是无法编译</h3><p>偶发性问题,可以根据报错参数,具体查询 nodejs 的<a href="https://nodejs.org/api/errors.html#errors_common_system_errors" target="_blank" rel="noopener">文档</a></p><p> <br> <br> </p><blockquote><p>写的比较仓促,有问题请及时反馈。</p></blockquote>]]></content>
<summary type="html">
简单说明一下配置运行过程,及其中的坑
</summary>
<category term="前端" scheme="http://www.singlelovely.cn/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="前端" scheme="http://www.singlelovely.cn/tags/%E5%89%8D%E7%AB%AF/"/>
<category term="vue" scheme="http://www.singlelovely.cn/tags/vue/"/>
</entry>
<entry>
<title>记录一下买过的课</title>
<link href="http://www.singlelovely.cn/post/5239bbb3.html"/>
<id>http://www.singlelovely.cn/post/5239bbb3.html</id>
<published>2020-08-07T03:35:00.000Z</published>
<updated>2020-09-21T13:41:07.555Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>以下仅记录付费课</p><ul><li><p><a href="https://time.geekbang.org/" target="_blank" rel="noopener">极客时间</a></p><ul><li>算法面试通关40讲 <span id="inline-blue">视频课</span></li><li>Python核心技术与实战 <span id="inline-purple">专栏</span></li><li>小马哥讲Spring核心编程思想 <span id="inline-blue">视频课</span></li></ul></li><li><p><a href="https://www.imooc.com/" target="_blank" rel="noopener">慕课网</a></p><ul><li>Linux命令行与Shell脚本编程大全 <span id="inline-purple">专栏</span></li><li>面试官系统精讲Java源码及大厂真题 <span id="inline-purple">专栏</span></li></ul></li><li><p><a href="https://study.163.com/" target="_blank" rel="noopener">网易云课堂</a></p><ul><li>带你重新认识Redis <span id="inline-blue">视频课</span></li></ul></li><li><p><a href="https://www.jiuzhang.com/" target="_blank" rel="noopener">九章算法</a></p><ul><li>国内大厂高频动规题详解 <span id="inline-green">互动课</span></li></ul></li><li><p><a href="https://edu.lagou.com/learn" target="_blank" rel="noopener">拉勾教育</a></p></li></ul> <div class="note primary"><p>以下均为专栏</p></div><ul><li>分布式链路实战</li><li>数据挖掘思维与实战 24 讲</li><li>Dubbo源码解读与实战</li><li>52讲轻松搞定网络爬虫</li><li>微服务质量保障 20 讲</li><li>Java 性能优化实战 21 讲</li><li>Go 微服务实战 38 讲</li><li>Vue.js 3.0 核心源码解析</li><li>300分钟搞定数据结构与算法</li><li>腾讯敏捷项目管理实战</li><li>ShardingSphere 核心原理精讲</li><li>Flutter快学快用24讲</li><li>大数据运维实战</li><li>数据分析思维与实战 23 讲</li><li>重学数据结构与算法</li><li>前端高手进阶</li><li>ZooKeeper源码分析与实战</li><li>云原生微服务架构实战精讲</li><li>42讲轻松通关 Flink</li><li>即学即用的Spark实战44讲</li><li>Java 源码剖析 34 讲</li><li>分布式技术原理与实战45讲</li></ul>]]></content>
<summary type="html">
为了便宜,买的或者领取的课程平台太多,记录一下,用以备忘
</summary>
</entry>
<entry>
<title>linux常用命令</title>
<link href="http://www.singlelovely.cn/post/fe4ef317.html"/>
<id>http://www.singlelovely.cn/post/fe4ef317.html</id>
<published>2020-07-21T05:49:00.000Z</published>
<updated>2020-09-21T13:41:07.534Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h3 id="群组管理"><a class="header-anchor" href="#群组管理">☆</a>群组管理</h3><ul><li><p>addgroup friends</p><ul><li>创建</li></ul></li><li><p>usermod</p><ul><li>修改用户账户</li><li>-l:对用户重命名,但是 /home 目录中的用户家目录名不会改变,需要手动修改</li><li>-g:修改用户所在群组。此用户的家目录里的所有文件的所在群组会相应改变</li><li>-a:追加</li><li>usermod -g friends dong</li><li>usermod -G friends,happy,funny dong</li><li>usermod -aG good dong</li></ul></li><li><p>groups</p><ul><li>获知用户属于哪个群组</li></ul></li><li><p>delgroup</p><ul><li>删除群组</li></ul></li><li><p>chown</p><ul><li>改变文件的所有者</li><li>chown dong file.txt</li></ul></li><li><p>chgrp</p><ul><li>改变文件的群组</li><li>chgrp dong file.txt</li><li>-R:递归</li><li>chown -R oscar:oscar /home/dong</li></ul></li></ul><h3 id="权限管理"><a class="header-anchor" href="#权限管理">☆</a>权限管理</h3><ul><li>chmod<ul><li>修改访问权限</li></ul></li></ul><p>目录权限说明:</p><ul><li>d:英语 directory 的缩写,表示“目录”。就是说这是一个目录;</li><li>l:英语 link 的缩写,表示“链接”。就是说这是一个链接;</li><li>r:英语 read 的缩写,表示“读”。就是说可以读这个文件;</li><li>w:英语 write 的缩写,表示“写”。就是说可以写这个文件,也就是可- 以修改;</li><li>x:英语 execute 的缩写,表示“执行,运行”。就是说可以运行这个文件。</li></ul><p>文件访问权限:<code>-rw-r--r--</code></p><ul><li><ul><li>第一个短横表示这是一个普通文件。如果此处是 d,那么表示目录;如果是 l,那么表示链接等等;</li></ul></li><li><p>rw- 表明文件的所有者(此处是 oscar)对文件有读、写的权限,但是没有运行的权限。也很好理解,因为这是一个普通文件,默认没有可执行的属性。记住:如果有 w 权限(写的权限),那么表明也有删除此文件的权限;</p></li><li><p>r-- 表明文件所在的群组(此处是 oscar)的其他用户(除了 oscar 之外)只可以读此文件,但不能写也不能执行,“可远观而不可亵玩焉”;</p></li><li><p>r-- 表示其他用户(除去 oscar 这个群组的用户)只可以读此文件,但不能写也不能执行。</p></li><li><p>数字管理权限</p><ul><li>r : 4 , w : 2 , x : 1</li><li>chmod 640 renamed_file<ul><li>文件所有者读写</li><li>文件所在群组其他用户读</li><li>除此以外其他用户无权限</li></ul></li></ul></li></ul><table><thead><tr><th style="text-align:left">权限</th><th style="text-align:left">数字</th><th style="text-align:left">计算</th></tr></thead><tbody><tr><td style="text-align:left">——</td><td style="text-align:left">0</td><td style="text-align:left">0+0+0</td></tr><tr><td style="text-align:left">r-</td><td style="text-align:left">4</td><td style="text-align:left">4+0+0</td></tr><tr><td style="text-align:left">-w-</td><td style="text-align:left">2</td><td style="text-align:left">0+2+0</td></tr><tr><td style="text-align:left">-x</td><td style="text-align:left">1</td><td style="text-align:left">0+0+1</td></tr><tr><td style="text-align:left">rw-</td><td style="text-align:left">6</td><td style="text-align:left">4+2+0</td></tr><tr><td style="text-align:left">-wx</td><td style="text-align:left">3</td><td style="text-align:left">0+2+1</td></tr><tr><td style="text-align:left">r-x</td><td style="text-align:left">5</td><td style="text-align:left">4+0+1</td></tr><tr><td style="text-align:left">rwx</td><td style="text-align:left">7</td><td style="text-align:left">4+2+1</td></tr></tbody></table><ul><li>字母分配权限<ul><li>u:user 的缩写,是英语“用户”的意思。表示所有者;</li><li>g:group 的缩写,是英语“群组”的意思。表示群组用户;</li><li>o:other 的缩写,是英语“其他”的意思。表示其他用户;</li><li>a:all 的缩写,是英语“所有”的意思。表示所有用户。</li><li>+:加号,表示添加权限;</li><li>-:减号,表示去除权限;</li><li>=:等号,表示分配权限。</li></ul></li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">#文件 file.txt 的所有者增加读和运行的权限。</span><br><span class="line">chmod u+rx file.txt</span><br><span class="line"></span><br><span class="line">#文件 file.txt 的群组其他用户增加读的权限。</span><br><span class="line">chmod g+r file.txt </span><br><span class="line"></span><br><span class="line">#文件 file.txt 的其他用户移除读的权限。</span><br><span class="line">chmod o-r file.txt </span><br><span class="line"></span><br><span class="line">#文件 file.txt 的群组其他用户增加读的权限,其他用户移除读的权限。</span><br><span class="line">chmod g+r o-r file.txt </span><br><span class="line"></span><br><span class="line">#文件 file.txt 的群组其他用户和其他用户均移除读的权限。</span><br><span class="line">chmod go-r file.txt </span><br><span class="line"></span><br><span class="line">#文件 file.txt 的所有用户增加运行的权限。</span><br><span class="line">chmod +x file.txt </span><br><span class="line"></span><br><span class="line">#文件 file.txt 的所有者分配读,写和执行的权限;</span><br><span class="line">#群组其他用户分配读的权限,不能写或执行;</span><br><span class="line">#其他用户没有任何权限。</span><br><span class="line">chmod u=rwx,g=r,o=- file.txt</span><br></pre></td></tr></table></figure><ul><li>-R 参数:递归地修改访问权限</li></ul><h3 id="编辑"><a class="header-anchor" href="#编辑">☆</a>编辑</h3><ul><li>nano<ul><li>-m 激活鼠标</li><li>-i 激活自动缩进</li><li>-A 激活智能Home</li><li><code>/etc/nanorc</code> 配置文件</li></ul></li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">set mouse</span><br><span class="line">set autoindent</span><br><span class="line">set smarthome</span><br></pre></td></tr></table></figure><h3 id="软件相关"><a class="header-anchor" href="#软件相关">☆</a>软件相关</h3><p>源文件:<code>/etc/apt/sources.list</code></p><p>更新软件包缓存:<code>sudo apt update</code></p><p>更新软件包:<code>sudo apt upgrade</code></p><p>查询软件包: <code>apt-cache show package_name</code></p><p>安装软件包: <code>sudo dpkg -i *.deb</code></p><p>卸载:<code>sudo dpkg -r xxx</code></p><p>安装手册</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install manpages-de manpages-de-dev manpages-dev glibc-doc manpages-posix-dev manpages-posix</span><br></pre></td></tr></table></figure><p>apropos : 查找功能</p><h3 id="查找文件"><a class="header-anchor" href="#查找文件">☆</a>查找文件</h3><ul><li><p>locate</p><ul><li>locate renamed_file</li><li>在数据库中查找</li></ul></li><li><p>sudo updatedb</p><ul><li>更新文件数据库</li></ul></li><li><p>find</p><ul><li>find “何处”“何物”“做什么”</li><li>find /var/log -name “syslog”</li><li>find /var -size +10M</li><li>find /var -size -50k</li><li>find /var -size +20G</li><li>-type d :只查找目录类型。d 是 directory 的首字母,表示“目录”</li><li>-type f :只查找文件类型。f 是 file 的首字母,表示“文件”</li></ul></li><li><p>grep 查找数据</p><ul><li>grep text file</li><li>-i 参数:忽略大小写</li><li>-n 参数:显示行号</li><li>-v 参数:只显示文本不在的行</li><li>-r 参数:在所有子目录和子文件中查找</li><li>-E 参数:正则表达式 : <code>grep -E Alias .bashrc</code> 或 <code>egrep</code></li></ul></li></ul><h3 id="流-输出重定向-输入-管道"><a class="header-anchor" href="#流-输出重定向-输入-管道">☆</a>流、输出重定向、输入、管道</h3><ul><li><p>> results.txt :将标准输出重定向到 results.txt 文件中</p></li><li><p>2> errors.log :将标准错误输出重定向到 errors.log 文件中</p></li><li><p>2>&1:将标准错误输出重定向到与标准输出相同的地方</p><ul><li><code>cat not_exist_file.csv > results.txt 2>&1</code></li><li><code>cat not_exist_file.csv >> results.txt 2>&1</code></li></ul></li><li><p><:从文件中读取</p></li><li><p><<:从键盘读取</p><ul><li><code>sort -n << END</code> END:结束符</li></ul></li></ul><p>管道符号 | 可以将命令连接起来,好像一个个对接的管道一样,前一个命令的输出成为后一个命令的输入</p><h3 id="监视活动"><a class="header-anchor" href="#监视活动">☆</a>监视活动</h3><ul><li>w</li><li>date</li><li>uptime:运行时间</li><li>tload:负载变化</li><li>ps, ps -ef, ps -efH, ps -u user</li><li>ps -aux :通过 CPU 和内存使用来过滤进程<ul><li>ps -aux | less</li><li><code>ps -aux --sort -pcpu | less</code> 根据 CPU 使用率来降序排列</li><li><code>ps -aux --sort -pmem | less</code>根据内存使用率来降序排列</li><li><code>ps -aux --sort -pcpu,+pmem | head</code>将 CPU 和 内存 参数合并到一起,并通过管道显示前 10 个结果</li></ul></li><li>pstree:以树形结构显示进程</li><li>top:进程的动态列表</li><li>Ctrl+C</li><li>kill</li><li>kill 程序名</li><li>halt:关闭系统</li><li>reboot:重启系统</li><li>poweroff:直接关机</li></ul><hr><ul><li>at 命令:延时执行一个程序<ul><li>at 22:10</li><li>at now +7 weeks : 7周后执行</li></ul></li><li>atq:列出正在执行的at任务</li><li>atrm:删除正在执行的at任务</li><li>crontab:定时执行任务<ul><li>-e:修改crontab文件</li><li>-l:显示crontab文件</li><li>-r:删除crontab文件</li></ul></li></ul>]]></content>
<summary type="html">
记录一下常用命令,方便复习、查找
</summary>
<category term="Linux" scheme="http://www.singlelovely.cn/categories/Linux/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="Linux" scheme="http://www.singlelovely.cn/tags/Linux/"/>
</entry>
<entry>
<title>面试知识点</title>
<link href="http://www.singlelovely.cn/post/ed6658a4.html"/>
<id>http://www.singlelovely.cn/post/ed6658a4.html</id>
<published>2020-03-27T06:08:00.000Z</published>
<updated>2020-09-21T13:41:07.557Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="操作系统"><a class="header-anchor" href="#操作系统">☆</a>操作系统</h2><h3 id="基础"><a class="header-anchor" href="#基础">☆</a>基础</h3><ul><li>★★★ 进程与线程的本质区别、以及各自的使用场景</li></ul><ol><li>进程是资源分配的基本单位,线程是调度的基本单位。</li><li>同一进程的线程,对共享,栈私有,共享地址空间。</li><li>线程间可以直接通信,进程间需要经过IPC。</li><li>多进程:编程容易,不用考虑锁和同步资源问题,容错性强,数据隔离</li><li>多线程:创建快,数据共享,切换快,非均质服务</li></ol><ul><li>★★★ 进程调度算法的特点以及使用场景</li></ul><ol><li>FCFS(先来先服务):有利于长作业,不利于短作业,非抢占</li><li>SJF(短作业优先):估计最短运行时间调度,长作业可能会被饿死,非抢占</li><li>SRTN(最短剩余时间优先):最短作业优先的抢占式,按剩余运行时间调度</li></ol><ul><li>★★★ 进程通信方法的特点以及使用场景★</li></ul><ol><li>管道(无名管道):半双工,父子、兄弟进程间使用,pipe()</li><li>FIFO(命名管道、有名管道):客户服务器间应用,fifo()</li><li>消息队列:独立于读写进程、避免了同步阻塞、有选择性接受</li><li>信号量:控制多进程访问共享数据</li><li>共享存储:速度最快</li><li>套接字:不同机器间进程通信</li></ol><ul><li>★★★ 死锁问题</li></ul><p>原因:系统资源不足、进程运行推进的顺序不合适、资源分配不当等</p><ol><li>必要条件:互斥、请求保持、不可抢占、环路等待</li><li>检测:- 每种类型一个资源:对访问过的节点进行标记 - 每种类型多个资源:资源总量进行计算</li><li>解决:剥夺资源、撤销进程、利用抢占、回滚、杀死进程恢复</li><li>预防:破坏四个必要条件</li><li>避免:安全状态检测、银行家算法</li></ol><p>数据库中解决死锁:</p><ol><li>按同一顺序访问对象。</li><li>避免事务中的用户交互。</li><li>保持事务简短并在一个批处理中。</li><li>使用低隔离级别。</li><li>使用绑定连接。</li><li>用存储过程查出引起死锁的进程和SQL语句。</li></ol><ul><li>★★★ 虚拟内存的作用,分页系统实现虚拟内存原理</li></ul><ol><li>让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存</li><li>分页地址映射、内存管理单元(MMU)</li><li>虚拟地址:页面号、偏移量</li></ol><ul><li>★★★ 页面置换算法的原理</li></ul><ol><li>最近最久未使用(LRU)非常重要</li><li>最近未使用(NRU):使用链表实现,在Redis上作为缓存置换算法</li><li>先进先出(FIFO)</li><li>第二次机会:读写时R = 1,替换时R若为1,则改为0放在尾端,不换出</li><li>时钟</li></ol><ul><li>★★★ 比较分页与分段的区别</li></ul><ol><li>分页透明、分段需要程序员划分</li><li>分页为一维地址空间、分段为二维</li><li>页大小不变、段大小可变</li><li>分页:虚拟内存,分段:程序和数据在逻辑上独立、有利于共享和保护</li></ol><ul><li>★★★ 分析静态链接的不足,以及动态链接的特点★</li></ul><ol><li>不足:静态库更新时那么整个程序都要重新进行链接,对于 printf 这种标准函数库,如果每个程序都要有代码,这会极大浪费资源</li><li>动态:给定的文件系统中一个库只有一个文件,一个副本可以被不同的正在运行的进程共享</li></ol><ul><li>★★☆ 常见进程同步问题★</li></ul><ol><li>哲学家进餐</li><li>读者-写者</li></ol><ul><li>★★☆ 协程的作用</li></ul><ol><li>协程是单进程单线程的超越函数的调度机制,它通过一定的调度手段进行调度</li><li>可重入能力,类似与函数</li><li>用来控制过程输出状态的那些输入状态的管理工作</li></ol><ul><li><p>协程的优势,协程的轻量性体现在哪里?</p><ul><li>用户自己控制切换时机,不需要陷入内核态</li><li>没有线程切换的开销</li><li>不需要多线程锁机制,只要一个线程</li></ul></li><li><p>线程与堆栈的关系</p><ul><li>栈是线程私有的(局部变量、操作数、动态链接)</li><li>堆是线程共享的(对象的实例和数组)</li><li>方法区也是线程共享的</li></ul></li></ul><ul><li><p>★☆☆ 进程状态</p><ul><li>就绪:经调度算法可以转为运行</li><li>运行:cpu时间片用完后转为就绪</li><li>阻塞:缺少资源</li></ul></li><li><p>★☆☆ 线程实现的方式(Java),优劣</p><ul><li>继承Thread类,并重写其run()方法</li><li>实现Runnable接口,并实现其run()方法</li><li>实现Callable接口,并实现其call()方法</li><li>实现接口会更好一些:Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口</li></ul></li></ul><h3 id="linux"><a class="header-anchor" href="#linux">☆</a>Linux</h3><ul><li>★★★ 硬链接与软链接的区别</li></ul><ol><li>硬链接:文件1 和 文件2 直接指向内存 <code>ln file1 file2</code></li><li>软链接:指向另外一个文件 <code>ln -s file1 file2</code></li></ol><ul><li>★★★ 僵尸进程与孤儿进程的区别,从 SIGCHLD 分析产生僵尸进程的原因</li></ul><ol><li>僵尸进程:子进程退出后,父进程未调用wait()waitpid(),进程描述符未释放</li><li>孤儿进程:父进程退出,子进程运行,会被init进程收养,没有危害</li><li>杀死僵尸进程的父进程,僵尸进程变为孤儿进程</li></ol><ul><li>★★☆ 文件系统的原理,特别是 inode 和 block。数据恢复原理</li></ul><ol><li>inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;</li><li>block:记录文件的内容,文件太大时,会占用多个 block</li><li>superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等</li><li>block bitmap:记录 block 是否被使用的位图</li></ol><ul><li>Linux启动时调用那些文件★</li></ul><ol><li>开启电源 --> BIOS开机自检 --> 引导程序lilo或grub --> 内核的引导(kernel boot)–> 执行init(rc.sysinit、rc)–> mingetty(建立终端) --> shell</li><li>/etc/profile --> ~/.bash_profile --> ~/.bash_login --> ~/.profile</li></ol><ul><li><p>什么是linux的daemon进程?和一般进程有什么区别?</p><ul><li>守护进程,随系统启动和关闭,不与客户端交互,独立于终端。</li><li>使用ps axj命令查看进程时,其终端名(TTY)显示为?,ID显示为-1</li></ul></li><li><p>通过free命令查看内存时,看到的buffer和cache各表示什么含义?</p><ul><li>使用内存、剩余内存</li><li>Cache:缓存区,是高速缓存,是文件系统的cache</li><li>Buffer:缓冲区,传输数据,是块设备的读写缓冲区</li></ul></li><li><p>apache和nginx这两个web服务器有哪些区别?</p><ul><li>apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程</li><li>nginx轻量级,处理静态文件好,</li><li>apache 稳定,处理动态请求有优势</li></ul></li></ul><h2 id="网络"><a class="header-anchor" href="#网络">☆</a>网络</h2><h3 id="基础-v2"><a class="header-anchor" href="#基础-v2">☆</a>基础</h3><ul><li>★★★ <strong>各层的作用,TCP/IP 协议的特点</strong></li></ul><ol><li><p>应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。</p></li><li><p>传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。</p></li><li><p>网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。</p></li><li><p>数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。</p></li><li><p>物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异</p></li><li><p>表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。</p></li><li><p>会话层 :建立及管理会话。</p></li><li><p>TCP/IP : 只有四层,数据链路层和物理层合并为网络接口层</p></li></ol><ul><li><p>★★★ <strong>三次握手以及四次挥手具体过程、原因、TIME_WAIT</strong></p></li><li><p>★★★ <strong>可靠传输原理,并设计可靠 UDP 协议</strong></p></li></ul><ol><li>TCP 可靠传输:超时重传</li><li>可靠 UDP 协议:应用层实现确认机制、重传机制、窗口确认机制:RUDP、RTP、UDT</li></ol><ul><li>★★★ <strong>UDP 与 TCP 比较,分析上层协议应该使用 UDP 还是 TCP</strong></li></ul><ol><li>UDP:无连接、尽最大可能交付、一对一、多对多、多对一</li><li>TCP:面向连接、可靠交付、全双工、流量拥塞控制、字节流、一对一、确认机制、重传机制、滑动窗口</li></ol><ul><li><p>★★☆ <strong>路由选择协议及特点</strong></p><ul><li>RIP:距离向量、15跳、固定时间交换路由表、3分钟超时</li><li>OSPF:开放最短路径优先、洪泛发送信息、链路状态发生变化时发送信息</li><li>BGP:比较好不是最佳,TCP,发言人制度</li></ul></li><li><p>★★☆ <strong>DNS 的端口号;TCP 还是 UDP;作为缓存、负载均衡</strong></p></li></ul><ol><li>端口:53,UDP</li><li>使用TCP的情况:数据大于512字节,区域传送</li></ol><ul><li>★★☆ <strong>TCP 拥塞控制、四种方法、理解具体原理</strong>★</li></ul><ol><li>慢开始,拥塞避免,快重传,快恢复</li><li>防止过多的数据注入到网络当中,这样可以使网络中的路由器或链路不致过载</li></ol><ul><li><p>★★☆ <strong>浏览器访问页面(输入网址后发生了什么)</strong></p><ul><li>DHCP配置主机信息(可略过)<ul><li>DHCP 请求报文,UDP,255.255.255.255:67,0.0.0.0:68</li><li>DHCP 服务器: DHCP ACK 报文:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码</li></ul></li><li>ARP 解析 MAC 地址(获取路由网关地址)</li><li>DNS解析域名</li><li>HTTP 请求页面</li></ul></li><li><p>★★☆ <strong>集线器、交换机、路由器的作用,以及所属的层次</strong></p><ul><li>集线器:物理层、比特</li><li>交换机:链路层、自学习、按mac地址存储转发</li><li>路由器:网络层、IP地址转发</li></ul></li><li><p>★★☆ <strong>以太网的特点,以及帧结构</strong></p><ul><li>星型结构</li><li>帧结构:目的地址、源地址、类型、IP数据报、FCS</li></ul></li></ul><h3 id="http"><a class="header-anchor" href="#http">☆</a>HTTP</h3><ul><li><p>★★★ GET 与 POST 比较:作用、参数、安全性、幂等性、可缓存</p><ul><li>POST 主要用来传输数据,而 GET 主要用来获取资源</li><li>GET参数:ASCII码</li><li>GET安全、幂等,POST不安全不幂等</li><li>GET、HEAD可缓存,PUT、DELETE、POST不可缓存</li></ul></li><li><p>★★★ Cookie 作用、安全性问题、和 Session 的比较</p><ul><li>保存状态信息(会话管理、行为跟踪),cookie最大4kb</li><li>作用域:默认为当前文档的主机</li><li>Cookie可利用Session存在服务器端</li><li>Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据</li></ul></li><li><p>★★★ 长连接与短连接原理以及使用场景,流水线</p><ul><li>长连接:建立一个TCP多次进行HTTP通信</li><li>流水线:同一条长连接上连续发出请求</li></ul></li><li><p>★★★ HTTP 存在的安全性问题,以及 HTTPs 的加密、认证和完整性保护作用</p><ul><li>明文进行通信,不验证身份,无法证明报文的完整性</li><li>使用了SSL隧道进行通信</li><li>使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key</li><li>获取到 Secret Key 后,再使用对称密钥加密方式进行通信</li><li>SSL 提供报文摘要功能来进行完整性保护、MD5</li></ul></li><li><p>★★☆ 缓存 的Cache-Control 字段、Expires 和 max-age 的区别、ETag 验证原理</p><ul><li>缓解服务器压力,降低客户端获取资源的延迟</li><li>no-store:禁止,no-cache:强制确认,private:私有,public:公共</li><li>ETag : 资源唯一标识</li></ul></li><li><p>★★★ HTTP/1.1 的特性</p><ul><li>默认是长连接</li><li>支持流水线</li><li>支持同时打开多个 TCP 连接</li><li>支持虚拟主机</li><li>新增状态码 100:表示正常</li><li>支持分块传输编码</li><li>新增缓存处理指令 max-age</li></ul></li><li><p>★★☆ HTTP/1.x 的缺陷,以及 HTTP/2 的特点</p><ul><li>缺陷:多个连接才能实现并发和缩短延迟、不会压缩请求和响应首部浪费流量、没有优先级支持</li><li>二进制帧分层、服务端推送、首部压缩</li></ul></li><li><p>★★☆ HTTP 与 FTP 的比较</p></li><li><p>★☆☆ 状态码</p></li><li><p>http协议中的keeplive是做什么的?它的适应场景是什么?</p><ul><li>让多个http请求共享一个Tcp连接,避免每个http新建tcp连接</li><li>定时发送心跳包</li></ul></li><li><p>http请求有多少种?</p><ul><li>8种</li><li>opions:返回服务器针对特定资源所支持的HTML请求方法、get、post、put:向指定资源位置上上传其最新内容</li><li>head:查看某个页面的状态、delete、trace:回显服务器收到的请求、connect</li></ul></li><li><p>查看linux系统中tcp连接的状态和连接数量统计</p><ul><li><code>netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</code></li></ul></li><li><p>bash shell 里<code>$0.$?.$$</code>各表示什么含义</p><ul><li>$$ Shell本身的PID(ProcessID)</li><li>$! Shell最后运行的后台Process的PID</li><li>$? 最后运行的命令的结束代码(返回值)</li><li>$# 是传给脚本的参数个数</li><li>$0 是脚本本身的名字</li><li>$1 是传递给该shell脚本的第一个参数</li><li>$2 是传递给该shell脚本的第二个参数</li><li>$@ 是传给脚本的所有参数的列表</li></ul></li></ul><h3 id="socket"><a class="header-anchor" href="#socket">☆</a>Socket</h3><ul><li><p>★★★ select、poll、epoll 的原理、比较、以及使用场景;epoll 的水平触发与边缘触发</p><ul><li>都是多路复用的具体实现</li><li>select 会修改描述符,而 poll 不会</li><li>select 的描述符类型使用数组实现</li><li>poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高</li><li>如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定</li><li>select 和 poll 速度都比较慢</li></ul></li><li><p>★★☆ 五种 IO 模型的特点以及比较</p><ul><li>阻塞式I/O:阻塞应用,内核缓存–>应用缓存(数据复制),复制完返回</li><li>非阻塞式I/O:进程调用、返回错误码、继续执行、不断询问io(轮询),CPU利用率低</li><li>I/O复用:单进程处理多IO,无进程创建切换,系统开销小</li><li>信号驱动I/O:进程使用 sigaction 系统调用,内核立即返回,进程继续执行,数据到达时内核向应用发送 SIGIO 信号,进程调用 recvfrom 复制数据,CPU利用率高</li><li>异步I/O:进程执行 aio_read 系统调用会立即返回,进程继续执行,不被阻塞,内核在操作完成后向进程发送信号</li><li>比较<ul><li>同步 I/O:将数据从内核缓冲区复制到应用进程缓冲区的阶段(第二阶段),应用进程会阻塞</li><li>异步 I/O:第二阶段应用进程不会阻塞</li></ul></li></ul></li><li><p>多路复用</p></li><li><p>Java NIO</p></li></ul><h2 id="数据库"><a class="header-anchor" href="#数据库">☆</a>数据库</h2><ul><li>数据库范式<ul><li>第一范式:属性的原子性</li><li>第二范式:属性完全依赖于主键</li><li>第三范式:一个数据库表中不包含已经在其它表中包含的非主键关键字信息。</li></ul></li></ul><h3 id="sql"><a class="header-anchor" href="#sql">☆</a>SQL</h3><ul><li><p>★★☆ 手写 SQL 语句,特别是连接查询与分组查询</p></li><li><p>★★☆ 连接查询与子查询的比较</p></li><li><p>★★☆ drop、delete、truncate 比较</p><ul><li>作用<ul><li>DELETE 删除表中 WHERE 语句指定的数据。</li><li>TRUNCATE 清空表,相当于删除表中的所有数据。</li><li>DROP 删除表结构</li></ul></li><li>事务<ul><li>DELETE 会被放到日志中以便进行回滚;</li><li>TRUNCATE 和 DROP 立即生效,不会放到日志中,也就不支持回滚。</li></ul></li><li>删除空间<ul><li>DELETE 不会减少表和索引占用的空间;</li><li>TRUNCATE 会将表和索引占用的空间恢复到初始值;</li><li>DROP 会将表和索引占用的空间释放。</li></ul></li><li>耗时<ul><li>DELETE < TRUNCATE < DROP</li></ul></li></ul></li><li><p>★★☆ 视图的作用,以及何时能更新视图</p><ul><li>虚拟表</li><li>简化复杂操作、保证数据安全性</li><li>更改数据格式和表示</li></ul></li><li><p>★☆☆ 理解存储过程、触发器等作用</p><ul><li>存储过程可以看成是对一系列 SQL 操作的批处理<ul><li>优点:封装、提高安全性,代码复用,高性能</li><li>赋值用 select into ,每次只能给一个变量赋值,不支持集合的操作</li></ul></li><li>触发器会在某个表执行以下语句时而自动执行:DELETE、INSERT、UPDATE<ul><li>必须指定在语句执行之前还是之后自动执行(前:BEFORE,后:AFTER)</li></ul></li></ul></li></ul><h3 id="mysql"><a class="header-anchor" href="#mysql">☆</a>MySQL</h3><ol><li><p>MySQL主键</p><ul><li>其值能唯一地标识表中的每一行</li></ul></li><li><p>事务</p><ul><li>用于处理操作量大,复杂度高的数据</li><li>只有InnoDB支持事务</li><li>ACID</li></ul></li></ol><h2 id="其他"><a class="header-anchor" href="#其他">☆</a>其他</h2><ul><li>new和malloc区别</li></ul><ol><li>malloc和new都是在堆上开辟内存的</li><li>malloc只负责开辟内存,没有初始化功能</li><li>new不但开辟内存,还可以进行初始化</li><li>malloc是函数,开辟内存需要传入字节数</li><li>malloc开辟内存失败返回NULL,new开辟内存失败抛出bad_alloc类型的异常</li><li>malloc开辟的内存永远是通过free来释放的;而new单个元素内存,用的是delete,如果new[]数组,用的是delete[]来释放内存</li><li>malloc开辟内存只有一种方式,而new有四种分别是普通的new(内存开辟失败抛出bad_alloc异常), nothrow版本的new,const new以及定位new</li></ol><ul><li>闭包<ul><li>闭包函数:声明一个在函数中的函数</li><li>内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。</li><li>特点:<ul><li>外部函数访问内部变量成为可能</li><li>局部变量常驻内存</li><li>避免使用全局变量、防止全局变量污染</li><li>会造成内存泄漏</li></ul></li><li>每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址</li></ul></li></ul><h2 id="python"><a class="header-anchor" href="#python">☆</a>python</h2><ul><li>如何在Python中实现多线程?</li></ul><ol><li><p>答: Python有一个multi-threading包,但是如果你想让multi-thread加速你的代码,那么使用它通常不是一个好主意。</p></li><li><p>Python有一个名为Global Interpreter Lock(GIL)的结构。 GIL确保只有一个“线程”可以在任何时候执行。一个线程获取GIL,做一点工作,然后将GIL传递到下一个线程。</p></li><li><p>这种情况很快发生,因此对于人眼看来,您的线程似乎并行执行,但它们实际上只是轮流使用相同的CPU核心。</p></li><li><p>所有这些GIL传递都增加了执行的开销。这意味着如果您想让代码运行得更快,那么使用线程包通常不是一个好主意。</p></li></ol><ul><li>这是什么意思: *args,**kwargs?我们为什么要用呢?</li></ul><p>我们用<code>*args</code>当我们不确定将多少个参数传递给函数时,或者我们是否要将存储的列表或参数元组传递给函数时。<code>**kwargs</code>当我们不知道将多少关键字参数传递给函数时,或者它可以用于将字典的值作为关键字参数传递时使用。标识符args和kwargs是一个约定,你也可以使用<code>*bob</code>和<code>**billy</code>,但这不是明智之举.</p><ul><li><p>计算出从你生日之日起到今天一共过了多少天?(python、go、shell均可)</p></li><li><p>逆序输出偶数的平方 [1,2,3,4,5,6,7,8,9]</p></li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#列表切片</span></span><br><span class="line">list[i:j]</span><br><span class="line">list[i:j:<span class="number">2</span>] <span class="comment">#取i到j,步长为2</span></span><br><span class="line"><span class="comment">#取奇数位</span></span><br><span class="line">list[::<span class="number">2</span>]</span><br><span class="line"><span class="comment">#取偶数位</span></span><br><span class="line">list[<span class="number">1</span>::<span class="number">2</span>]</span><br></pre></td></tr></table></figure><h2 id="面向对象"><a class="header-anchor" href="#面向对象">☆</a>面向对象</h2><h3 id="思想"><a class="header-anchor" href="#思想">☆</a>思想</h3><ol><li>★★★ 面向对象三大特性<ul><li>继承:父类指向子类时为向上转型</li><li>封装:减少耦合、减轻维护负担、提高可重用性、减少重构风险</li><li>多态:编译时多态与运行时多态<ul><li>运行时多态:继承、覆盖(重写)、向上转型</li></ul></li></ul></li><li>★☆☆ 设计原则<ul><li>单一责任原则SRP</li><li>开放封闭原则OCP</li><li>李氏替换原则LSP</li><li>接口分离原则ISP</li><li>依赖倒置原则DIP</li></ul></li></ol><h3 id="设计模式"><a class="header-anchor" href="#设计模式">☆</a>设计模式</h3><h2 id="java"><a class="header-anchor" href="#java">☆</a>Java</h2><h3 id="基础-v3"><a class="header-anchor" href="#基础-v3">☆</a>基础</h3><ol><li>基本类型与包装类型<ul><li>byte/8 char/16 short/16 int/32 float/32 double/64 long/64 boolean/~</li></ul></li><li>缓存池、new Integer(123) 与 Integer.valueOf(123) 的区别<ul><li>Integer 缓存池的大小默认为 -128~127</li></ul></li><li>String不可变的原因、好处<ul><li>final 声明、不可被继承</li><li>Java8 中使用 char 存储、Java9 后使用byte数组存储</li><li>可以缓存hash值、String Pool的需要、提高安全性(参数不变)、线程安全</li><li>注意:StringBuffer可变、线程安全,StringBuilder可变、线程不安全</li></ul></li><li>参数传递的方式、类型转换、switch<ul><li>值传递、地址值</li><li>不能隐式向下转型、<code>+=</code> 或者 <code>++</code> 运算符会执行隐式类型转换</li><li>switch 不支持 long</li></ul></li><li>Java类的初始化顺序<ul><li>静态成员和<code>static块</code> -> 普通成员和非<code>static</code>块 -> 构造函数</li><li>父类静态 -> 子类静态 -> 父类普通 -> 父类构造 -> 子类普通 -> 子类构造</li></ul></li><li><code>equal()</code> 与 <code>==</code> 的区别<ul><li>对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法</li><li>对于引用类型,== 判断两个变量是否引用同一个对象,而 equals() 判断引用的对象是否等价</li></ul></li><li>在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象哈希值也相等</li><li>clone()、浅拷贝、深拷贝<ul><li>clone() 是 Object 的 protected 方法、需要显式重写</li><li>浅拷贝对象和原始对象的引用类型引用同一个对象</li><li>深拷贝对象和原始对象的引用类型引用不同对象</li><li>clone替代:拷贝构造函数、拷贝工厂</li></ul></li><li>反射的优缺点<ul><li>定义:允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性</li><li>优点:可扩展性、类浏览器和可视化开发环境、调试器和测试工具</li><li>缺点:性能开销高、安全限制、内部暴露</li></ul></li><li>Java与c++的区别<ul><li>Java面向对象,c++兼容c、可以面向过程</li><li>Java跨平台</li><li>Java无指针、自动垃圾回收</li><li>Java不支持多重继承,c++可以</li><li>Java不支持操作符重载</li><li>c++可以使用goto</li></ul></li><li>泛形相关<ul><li>允许在定义类、接口、方法时使用类型形参,在声明变量、创建对象、调用方法时再传入实际类型参数</li><li>好处:编译时检查类型安全、隐式强制转换</li><li>工作方式:通过类型擦除实现</li><li>限定通配符:<? extends T> <? super T> 非限定通配符:<?></li></ul></li></ol><h3 id="容器-集合"><a class="header-anchor" href="#容器-集合">☆</a>容器(集合)</h3><ul><li><a href="https://www.jianshu.com/p/75adf47958a7" target="_blank" rel="noopener">HashMap 相关面试题及其解答</a></li></ul>]]></content>
<summary type="html">
人,生而有崖,学而无涯
</summary>
<category term="学习" scheme="http://www.singlelovely.cn/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>linux折腾小记</title>
<link href="http://www.singlelovely.cn/post/5fdb7ae9.html"/>
<id>http://www.singlelovely.cn/post/5fdb7ae9.html</id>
<published>2020-02-21T15:28:00.000Z</published>
<updated>2020-09-21T13:41:07.534Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>主要记录一下最近在服务器上遇到的问题及解决办法,以便事后查找,以免忘记。</p><h2 id="用户"><a class="header-anchor" href="#用户">☆</a>用户</h2><h3 id="创建"><a class="header-anchor" href="#创建">☆</a>创建</h3><p>一把梭:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo useradd -r -m -s /bin/bash username</span><br></pre></td></tr></table></figure><ul><li>-r:建立系统账号</li><li>-m:自动建立用户的登入目录</li><li>-s:指定用户登入后所使用的shell</li></ul><p>正常方式:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo adduser username</span><br></pre></td></tr></table></figure><p>这种方式创建的用户,登陆以后只要一个$,没有显示用户名和路径。</p><p>查看 <code>/etc/passwd</code> 后发现,新建的用户未指定 shell,需要指定一下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo usermod -s /bin/bash username</span><br></pre></td></tr></table></figure><h3 id="授权"><a class="header-anchor" href="#授权">☆</a>授权</h3><p>编辑 <code>/etc/sudoers</code> 文件,root 用户可以直接编辑,其他用户使用以下命令授权</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="addition">+ sudo chmod u+w /etc/sudoers 授权</span></span><br><span class="line"><span class="deletion">- sudo chmod u-w /etc/sudoers 撤销</span></span><br></pre></td></tr></table></figure><p>然后增加以下行(按需添加)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">youuser ALL=(ALL) ALL</span><br><span class="line">%youuser ALL=(ALL) ALL</span><br><span class="line">youuser ALL=(ALL) NOPASSWD: ALL</span><br><span class="line">%youuser ALL=(ALL) NOPASSWD: ALL</span><br></pre></td></tr></table></figure><ol><li>允许用户youuser执行sudo命令(需要输入密码).</li><li>允许用户组youuser里面的用户执行sudo命令(需要输入密码).</li><li>允许用户youuser执行sudo命令,并且在执行的时候不输入密码.</li><li>允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.</li></ol><h3 id="改密"><a class="header-anchor" href="#改密">☆</a>改密</h3><ul><li>passwd <code>username</code></li></ul><h3 id="删除"><a class="header-anchor" href="#删除">☆</a>删除</h3><ol><li><code>sudo userdel username</code></li><li><code>sudo rm -rf /home/username</code></li><li>删除或者注释掉<code>/etc/sudoers</code>中关于要删除用户的配置。</li></ol><ul><li><code>sudo deluser --remove-home username</code></li><li><code>sudo deluser -r username</code></li></ul><h2 id="oh-my-zsh"><a class="header-anchor" href="#oh-my-zsh">☆</a>oh-my-zsh</h2><h3 id="安装-zsh"><a class="header-anchor" href="#安装-zsh">☆</a>安装 zsh</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install zsh</span><br><span class="line">zsh --version</span><br></pre></td></tr></table></figure><h3 id="安装-oh-my-zsh"><a class="header-anchor" href="#安装-oh-my-zsh">☆</a>安装 oh-my-zsh</h3><p>参考 : <a href="https://github.com/nianxiongdi/oh-my-zsh" target="_blank" rel="noopener">https://github.com/nianxiongdi/oh-my-zsh</a></p><h3 id="插件"><a class="header-anchor" href="#插件">☆</a>插件</h3><figure class="highlight shell"><figcaption><span>~/.zshrc</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash">zhs的主题</span></span><br><span class="line">ZSH_THEME="ys"</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash">z命令快速跳转目录 x命令解压一切文件</span></span><br><span class="line">plugins=(</span><br><span class="line"> git z zsh-autosuggestions extract web-search zsh-syntax-highlighting</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash">自动补全插件</span></span><br><span class="line">source ~/.oh-my-zsh/plugins/incr/incr.zsh</span><br></pre></td></tr></table></figure><p><code>zsh-autosuggestions</code>与<code>zsh-syntax-highlighting</code>需手动安装</p><p>地址:<a href="https://github.com/zsh-users/zsh-autosuggestions" target="_blank" rel="noopener">zsh-autosuggestions</a>、<a href="https://github.com/zsh-users/zsh-syntax-highlighting" target="_blank" rel="noopener">zsh-syntax-highlighting</a></p><h3 id="自动部署"><a class="header-anchor" href="#自动部署">☆</a>自动部署</h3><p>计划中。。。</p><h2 id="systemd"><a class="header-anchor" href="#systemd">☆</a>systemd</h2><p><a href="https://blog.csdn.net/weixin_37766296/article/details/80192633" target="_blank" rel="noopener">参考</a></p><h2 id="磁盘"><a class="header-anchor" href="#磁盘">☆</a>磁盘</h2><h2 id="nohup"><a class="header-anchor" href="#nohup">☆</a>nohup &</h2><p>nohup: 加在一个命令的最前面,表示不挂断的运行命令</p><p>&: 加载一个命令的最后面,表示这个命令放在后台执行</p><h3 id="查看后台运行的命令"><a class="header-anchor" href="#查看后台运行的命令">☆</a>查看后台运行的命令</h3><ul><li>jobs</li><li>pa</li></ul><p>例:<code>ps -aux|grep python</code></p><ul><li>a: 显示所有程序</li><li>u: 以用户为主的格式来显示</li><li>x: 显示所有程序,不以终端机来区分</li></ul><h3 id="关闭后台运行的程序"><a class="header-anchor" href="#关闭后台运行的程序">☆</a>关闭后台运行的程序</h3><p><code>kill %pid</code></p><h3 id="前后台进程的切换与控制"><a class="header-anchor" href="#前后台进程的切换与控制">☆</a>前后台进程的切换与控制</h3><ul><li>fg<ul><li>将后台中的命令调至前台继续运行</li><li>fg %pid</li></ul></li><li>Ctrl + z<ul><li>将一个正在前台执行的命令放到后台,并且处于暂停状态</li></ul></li><li>bg<ul><li>将一个在后台暂停的命令,变成在后台继续执行</li><li>bg %pid</li></ul></li></ul>]]></content>
<summary type="html">
用户、shell、oh-my-zsh、systemd、磁盘
</summary>
<category term="Linux" scheme="http://www.singlelovely.cn/categories/Linux/"/>
<category term="Linux" scheme="http://www.singlelovely.cn/tags/Linux/"/>
</entry>
<entry>
<title>docker及docker-compose的安装配置加速服务</title>
<link href="http://www.singlelovely.cn/post/bc197637.html"/>
<id>http://www.singlelovely.cn/post/bc197637.html</id>
<published>2020-02-04T14:47:00.000Z</published>
<updated>2020-09-21T13:41:07.531Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><blockquote class="blockquote-center"><p>本文系统全部以<span id="font-green">Ubuntu18.04 Service</span>为例</p></blockquote><h3 id="docker安装"><a class="header-anchor" href="#docker安装">☆</a>docker安装</h3><p>最近在服务器上部署应用,使用docker比较多,毕竟管理起来方便,腾讯云官方镜像已经默认换了腾讯的源,安装起来还可以,华为云的还是默认的源,下载速度非常不稳定。</p><p>最先试的是把腾讯云的源直接拷贝到华为的机器这边,然后发现更不更新不了,直接就断开链接了,推测是腾讯那边作了鉴权啥的,然后换网上搜到的源,发现好多文章的源列表并不是完全的(或者更新不及时),只是一部分,安装<code>docker</code>的时候会提示找不到包。</p><p>这里附上清华的<a href="https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/" target="_blank" rel="noopener">开源镜像站</a></p><p>安装教程建议使用<a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/" target="_blank" rel="noopener">官方文档</a>,以免出问题。</p><h3 id="docker-compose安装"><a class="header-anchor" href="#docker-compose安装">☆</a>docker-compose安装</h3><p>首先放上<a href="https://docs.docker.com/compose/install/" target="_blank" rel="noopener">官方文档</a></p><p>因为某些原因,国内速度比较慢,运气不好的时候还会直接失败,以下为镜像地址:</p><p>地址来自<a href="https://get.daocloud.io/#install-compose" target="_blank" rel="noopener">DaoCloud</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose</span><br><span class="line">chmod +x /usr/local/bin/docker-compose</span><br></pre></td></tr></table></figure><h3 id="配置加速服务"><a class="header-anchor" href="#配置加速服务">☆</a>配置加速服务</h3><p>这里选用阿里云的容器镜像加速器:<a href="https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors" target="_blank" rel="noopener">点击进入</a></p><p>按照操作文档配置就可以了</p><p>下面为Ubuntu的配置方式</p><ol><li><p>安装/升级Docker客户端<br>推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce</p></li><li><p>配置镜像加速器<br>针对Docker客户端版本大于 1.10.0 的用户</p></li></ol><p>您可以通过修改<code>daemon</code>配置文件<span id="inline-blue">/etc/docker/daemon.json</span>来使用加速器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">sudo mkdir -p /etc/docker</span><br><span class="line">sudo tee /etc/docker/daemon.json <<-'EOF'</span><br><span class="line">{</span><br><span class="line"> "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]</span><br><span class="line">}</span><br><span class="line">EOF</span><br><span class="line">sudo systemctl daemon-reload</span><br><span class="line">sudo systemctl restart docker</span><br></pre></td></tr></table></figure><div class="note warning"><p>因每个人的加速地址不同,所以上文中用xxxxx代替。</p></div>]]></content>
<summary type="html">
使用阿里云为docker加速
</summary>
<category term="docker" scheme="http://www.singlelovely.cn/categories/docker/"/>
<category term="docker" scheme="http://www.singlelovely.cn/tags/docker/"/>
</entry>
<entry>
<title>nginx配置</title>
<link href="http://www.singlelovely.cn/post/2bee8b90.html"/>
<id>http://www.singlelovely.cn/post/2bee8b90.html</id>
<published>2020-01-30T11:14:00.000Z</published>
<updated>2020-09-21T13:41:07.535Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>最近折腾的web应用比较多,在nginx使用中踩了不少坑,记录一下,以便以后查询</p><h3 id="安装"><a class="header-anchor" href="#安装">☆</a>安装</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install -y nginx</span><br></pre></td></tr></table></figure><h3 id="配置文件路径"><a class="header-anchor" href="#配置文件路径">☆</a>配置文件路径</h3><p><span id="font-blue"> /etc/nginx/conf.d </span></p><p>建议每个站点单独建一个 <code>***.conf</code> 放在此目录</p><h3 id="ssl证书位置"><a class="header-anchor" href="#ssl证书位置">☆</a>ssl证书位置</h3><p>默认相对目录为 <span id="font-blue">/etc/nginx</span> ,建议新建一个目录来存放,如 /etc/nginx/cert,<br>则在配置中填写为: <code>cert/证书名</code></p><div class="note success"><p>亦可将证书放在其他地方,配置文件中使用绝对路径</p></div><h3 id="http配置"><a class="header-anchor" href="#http配置">☆</a>http配置</h3><figure class="highlight"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">server {</span><br><span class="line"> listen 80; # 站点监听端口</span><br><span class="line"> server_name zfile.singlelovely.cn ; # 站点域名</span><br><span class="line"> root /www/test; # 网站根目录</span><br><span class="line"> index index.html index.htm index.jsp;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="https配置"><a class="header-anchor" href="#https配置">☆</a>https配置</h3><figure class="highlight"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">server {</span><br><span class="line"> listen 443;</span><br><span class="line"> server_name zfile.singlelovely.cn;</span><br><span class="line"> ssl on;</span><br><span class="line"> root /www/test;</span><br><span class="line"> index index.html index.htm index.jsp</span><br><span class="line"> ssl_certificate cert/1_zfile.singlelovely.cn_bundle.crt;</span><br><span class="line"> ssl_certificate_key cert/2_zfile.singlelovely.cn.key;</span><br><span class="line"> ssl_session_timeout 5m;</span><br><span class="line"> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;</span><br><span class="line"> ssl_protocols TLSv1 TLSv1.1 TLSv1.2;</span><br><span class="line"> ssl_prefer_server_ciphers on;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="反向代理配置"><a class="header-anchor" href="#反向代理配置">☆</a>反向代理配置</h3><figure class="highlight"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">location / {</span><br><span class="line"> proxy_pass http://127.0.0.1:666;</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> proxy_redirect off;</span><br><span class="line"> proxy_buffer_size 4k;</span><br><span class="line"> proxy_buffers 4 32k;</span><br><span class="line"> proxy_busy_buffers_size 64k;</span><br><span class="line"> proxy_send_timeout 300;</span><br><span class="line"> proxy_read_timeout 300;</span><br><span class="line"> proxy_set_header Host $host;</span><br><span class="line"> proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h3 id="http-强制重定向到https"><a class="header-anchor" href="#http-强制重定向到https">☆</a>http 强制重定向到https</h3><p id="div-border-left-purple">rewrite ^ https://$http_host$request_uri? permanent;</p><h3 id="检查配置问题"><a class="header-anchor" href="#检查配置问题">☆</a>检查配置问题</h3><p><span id="font-green">nginx -t</span></p><h3 id="重启服务"><a class="header-anchor" href="#重启服务">☆</a>重启服务</h3><p><span id="font-green">service nginx restart</span></p>]]></content>
<summary type="html">
nginx常用配置记录
</summary>
<category term="Linux" scheme="http://www.singlelovely.cn/categories/Linux/"/>
<category term="Ubuntu" scheme="http://www.singlelovely.cn/tags/Ubuntu/"/>
<category term="Linux" scheme="http://www.singlelovely.cn/tags/Linux/"/>
</entry>
<entry>
<title>计算机网络考研复习整理</title>
<link href="http://www.singlelovely.cn/post/1566eda6.html"/>
<id>http://www.singlelovely.cn/post/1566eda6.html</id>
<published>2019-09-05T14:46:00.000Z</published>
<updated>2020-09-21T13:41:07.554Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="各协议对应的osi层次"><a class="header-anchor" href="#各协议对应的osi层次">☆</a>各协议对应的osi层次</h2><p>物理层: RJ45 、 CLOCK 、 IEEE802.3 (中继器,集线器,网关) -<br>数据链路: PPP 、 FR 、 HDLC 、 VLAN 、 MAC (网桥,交换机) -<br>网络层: IP 、 ICMP 、 ARP 、 RARP 、 OSPF 、 IPX 、 RIP 、 IGRP 、 (路由器) -<br>传输层: TCP 、 UDP 、 SPX -<br>会话层: NFS 、 SQL 、 NETBIOS 、 RPC -<br>表示层: JPEG 、 MPEG 、 ASII -<br>应用层: FTP 、 DNS 、 Telnet 、 SMTP 、 HTTP 、 WWW 、 NFS</p><h2 id="http协议相关"><a class="header-anchor" href="#http协议相关">☆</a>HTTP协议相关</h2><p>1、OPTIONS<br>返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性<br>2、HEAD<br>向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。<br>3、GET<br>向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url<br>4、POST<br>向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form<br>5、PUT<br>向指定资源位置上传其最新内容<br>6、DELETE<br>请求服务器删除Request-URL所标识的资源<br>7、TRACE<br>回显服务器收到的请求,主要用于测试或诊断<br>8、CONNECT<br>HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。</p><p>HTTP协议的主要特点可概括如下:</p><p>1.支持客户/服务器模式。</p><p>2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。</p><p>3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。</p><p>4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。</p><p>5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。</p><h2 id="常见的网络协议-端口号"><a class="header-anchor" href="#常见的网络协议-端口号">☆</a>常见的网络协议\端口号</h2><p>一个网络协议至少包括三要素:<br>语法 用来规定信息格式;数据及控制信息的格式、编码及信号电平等。<br>语义 用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。<br>时序(定时 )详细说明事件的先后顺序;速度匹配和排序等<br>网际(络)层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。<br>传输层协议:TCP协议、UDP协议。<br>应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。</p><p>使用TCP协议的常见端口主要有以下几种:<br>(1)<br>FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。<br>(2)<br>Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。<br>(3)<br>SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。<br>(4)<br>POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Foxmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮箱来收信)。<br>使用UDP协议端口常见的有:<br>(1)<br>HTTP:这是大家用得最多的协议,它就是常说的"超文本传输协议"。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说"WWW服务"、“Web服务器"用的就是这个端口。<br>(2)<br>DNS:用于域名解析服务,这种服务在Windows<br>NT系统中用得最多的。因特网上的每一台计算机都有一个网络地址与之对应,这个地址是常说的IP地址,它以纯数字+”."的形式表示。然而这却不便记忆,于是出现了域名,访问计算机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53号端口。<br>(3)<br>SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。</p><p>另外代理服务器常用以下端口:<br>(1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080<br>(2). SOCKS代理协议服务器常用端口号:1080<br>(3). FTP协议代理服务器常用端口号:21<br>(4). Telnet协议代理服务器常用端口:23</p><p>WIN2003远程登陆,默认的端口号为3389;<br>DHCP server的端口号是67<br>端口号的范围是从1~65535。其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);从1025~65535的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。</p><p>一些常见的端口号及其用途如下:<br>TCP 21端口:FTP 文件传输服务<br>TCP 23端口:TELNET 终端仿真服务<br>TCP 25端口:SMTP 简单邮件传输服务<br>UDP 53端口:DNS 域名解析服务<br>TCP 80端口:HTTP 超文本传输服务<br>TCP 110端口:POP3 “邮局协议版本3”使用的端口<br>TCP 443端口:HTTPS 加密的超文本传输服务<br>TCP 1521端口:Oracle数据库服务<br>TCP 1863端口:MSN Messenger的文件传输功能所使用的端口<br>TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口<br>TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口<br>UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口<br>TCP 5000端口:MS SQL Server使用的端口<br>UDP 8000端口:腾讯QQ</p><h2 id="同步异步传输相关"><a class="header-anchor" href="#同步异步传输相关">☆</a>同步异步传输相关</h2><p>同步传输方式中发送方和接收方的时钟是统一的、字符与字符间的传输是同步无间隔的。<br>异步传输方式并不要求发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。</p><p>区别点<br>1,异步传输是面向字符的传输,而同步传输是面向比特的传输。<br>2,异步传输的单位是字符而同步传输的单位是帧。<br>3,异步传输通过字符起始和停止码抓住再同步的机会,而同步传输则是在数据中抽取同步信息。<br>4,异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。<br>5,异步传输相对于同步传输效率较低。</p><p>简单形容<br>同步传输就是,数据没有被对方确认收到则调用传输的函数就不返回。<br>接收时,如果对方没有发送数据,则你的线程就一直等待,直到有数据了才返回,可以继续执行其他指令<br>异步传输就是,你调用一个函数发送数据,马上返回,你可以继续处理其他事,<br>接收时,对方的有数据来,你会接收到一个消息,或者你的相关接收函数会被调用。</p><p>形象形容<br>异步传输: 你传输吧,我去做我的事了,传输完了告诉我一声<br>同步传输: 你现在传输,我要亲眼看你传输完成,才去做别的事</p><h2 id="各协议与对应的层次"><a class="header-anchor" href="#各协议与对应的层次">☆</a>各协议与对应的层次</h2><p><img src="https://data.singlelovely.cn/images/20190909234526.png" alt></p><p><code>注</code>:RIP 使用应用层520端口。</p><h2 id="tcp协议"><a class="header-anchor" href="#tcp协议">☆</a>TCP协议</h2><p><a href="https://blog.csdn.net/oyhy_/article/details/70201855" target="_blank" rel="noopener">图解TCP连接建立与释放</a></p><p><code>CLOSED</code>: 表示初始状态。</p><p><code>LISTEN</code>: 表示服务器端的某个SOCKET处于监听状态,可以接受连接。</p><p><code>SYN_RCVD</code>: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。</p><p><code>SYN_SENT</code>: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。</p><p><code>ESTABLISHED</code>:表示连接已经建立。</p><p><code>FIN_WAIT_1</code>: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。</p><p><code>FIN_WAIT_2</code>:FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,还有数据需要传送,稍后再关闭连接。</p><p><code>TIME_WAIT</code>: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。</p><p><code>CLOSING</code>: 属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。</p><p><code>CLOSE_WAIT</code>: 这种状态的含义表示在等待关闭。当对方close一个SOCKET后发送FIN报文,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。<br>LAST_ACK: 它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="网络" scheme="http://www.singlelovely.cn/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="网络" scheme="http://www.singlelovely.cn/tags/%E7%BD%91%E7%BB%9C/"/>
</entry>
<entry>
<title>jupyter notebook美化与配置自动补全</title>
<link href="http://www.singlelovely.cn/post/256ed997.html"/>
<id>http://www.singlelovely.cn/post/256ed997.html</id>
<published>2019-08-17T16:30:00.000Z</published>
<updated>2020-09-21T13:41:07.533Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="具体配置请参看以下文章"><a class="header-anchor" href="#具体配置请参看以下文章">☆</a>具体配置请参看以下文章</h2><p><a href="https://blog.csdn.net/az9996/article/details/88621028" target="_blank" rel="noopener">https://blog.csdn.net/az9996/article/details/88621028</a></p><h2 id="记录下我自己的配置"><a class="header-anchor" href="#记录下我自己的配置">☆</a>记录下我自己的配置</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">jt -t oceans16 -lineh <span class="number">140</span> -tf ptmono -f firacode -ofs <span class="number">12</span> -fs <span class="number">13</span> -nfs <span class="number">12</span> -T -N</span><br></pre></td></tr></table></figure><h2 id="上述文章中的错误更改"><a class="header-anchor" href="#上述文章中的错误更改">☆</a>上述文章中的错误更改</h2><p>按原文中的方法安装 <code>jupyter_contrib_nbextensions</code>和<code>jupyter_nbextensions_configurator</code> 时,会报以下错误</p><figure class="highlight js"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">(jupyter) λ conda install jupyter_contrib_nbextensions</span><br><span class="line">Collecting package metadata (current_repodata.json): done</span><br><span class="line">Solving environment: failed <span class="keyword">with</span> current_repodata.json, will retry <span class="keyword">with</span> next repodata source.</span><br><span class="line">Collecting package metadata (repodata.json): done</span><br><span class="line">Solving environment: failed</span><br><span class="line"></span><br><span class="line">PackagesNotFoundError: The following packages are not available <span class="keyword">from</span> current channels:</span><br><span class="line"></span><br><span class="line"> - jupyter_contrib_nbextensions</span><br><span class="line"></span><br><span class="line">Current channels:</span><br><span class="line"></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/main/win-64</span></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/main/noarch</span></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/r/win-64</span></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/r/noarch</span></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/msys2/win-64</span></span><br><span class="line"> - https:<span class="comment">//repo.anaconda.com/pkgs/msys2/noarch</span></span><br><span class="line"></span><br><span class="line">To search <span class="keyword">for</span> alternate channels that may provide the conda package you<span class="string">'re</span></span><br><span class="line"><span class="string">looking for, navigate to</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string"> https://anaconda.org</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">and use the search bar at the top of the page.</span></span><br></pre></td></tr></table></figure><p>然后按照提示去官网查询,找到响应的包,会看到 <code>Info: This package contains files in non-standard labels.</code> 就是不在标准标签中的意思。</p><p><img src="https://data.singlelovely.cn/images/20190818002421.png" alt></p><p>然后需要用以下命令安装</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda install -c conda-forge jupyter_contrib_nbextensions</span><br><span class="line">conda install -c conda-forge jupyter_nbextensions_configurator</span><br></pre></td></tr></table></figure><p>安装时候注意网络环境,不正确的网络异常的慢</p><p><img src="https://data.singlelovely.cn/images/20190818002516.png" alt></p>]]></content>
<summary type="html">
是时候需要给生活点颜色看看了
</summary>
<category term="python" scheme="http://www.singlelovely.cn/categories/python/"/>
<category term="python" scheme="http://www.singlelovely.cn/tags/python/"/>
</entry>
<entry>
<title>win10文件因继承权限等问题导致无法操作解决方案</title>
<link href="http://www.singlelovely.cn/post/c6360c4.html"/>
<id>http://www.singlelovely.cn/post/c6360c4.html</id>
<published>2019-08-15T20:00:00.000Z</published>
<updated>2020-09-21T13:41:07.543Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>首先吐槽一下win10的权限管理,个人感觉及其混乱,尤其是在重装系统以后,有些文件的权限就会莫名其妙的没有了,还有一些从网上下载的文件也会出现没有权限的情况,造成不能删除等问题。</p><p>以前出现这样的问题,去文件属性里面的安全选项卡,然后高级,启用一下继承,权限就来了,没有深究原因(又不是不能用) 实在不行还能进PE强行删文件嘛</p><p>这次是因为搞了个无损的原声带,想拷贝一下,结果有权限保护,一个一个的点属性太麻烦了,就上网找了一下,各种折腾半天没成功,最后花了点时间研究了下win10的权限管理,特此记录。</p><h2 id="方式一"><a class="header-anchor" href="#方式一">☆</a>方式一</h2><p>想获取整个文件夹内及其子文件的权限时,右键文件夹属性、安全选项卡,这个页面看一下那个组或用户名对文件具有完全控制的权限,然后高级、更改所有者,将所有者改为具有完全控制权限的用户(勾选替换子容器和对象的所有者),更改完成后登录具有权限的用户进行操作。</p><p><img src="https://data.singlelovely.cn/images/20190816034535.png" alt="01"></p><p><img src="https://data.singlelovely.cn/images/20190816034710.png" alt="02"></p><p><img src="https://data.singlelovely.cn/images/20190816034818.png" alt="03"></p><h2 id="方式二"><a class="header-anchor" href="#方式二">☆</a>方式二</h2><p>粗暴简单,推荐使用此方法</p><p>cmd命令行(管理员模式),执行类似如下命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">icacls "H:\音乐\五月天\步步自選作品輯 The Best of 1999-2013 [一路有你版] Disc 2\*.*" /grant Users:(F)</span><br></pre></td></tr></table></figure><p><code>"目录名"</code></p><p><code>*.*</code> 正则表达式</p><p><code>Users</code> 用户组或者用户名</p><p><code>(F)</code> 完全控制</p><p><img src="https://data.singlelovely.cn/images/20190816035552.png" alt="04"></p><p>这样修改完权限以后就可以随便怎么用了</p>]]></content>
<summary type="html">
自己电脑上的东西怎能没有权限呢!!!
</summary>
<category term="系统" scheme="http://www.singlelovely.cn/categories/%E7%B3%BB%E7%BB%9F/"/>
<category term="教程" scheme="http://www.singlelovely.cn/tags/%E6%95%99%E7%A8%8B/"/>
<category term="windows" scheme="http://www.singlelovely.cn/tags/windows/"/>
</entry>
<entry>
<title>JavaWeb复习笔记</title>
<link href="http://www.singlelovely.cn/post/7e6d3dbd.html"/>
<id>http://www.singlelovely.cn/post/7e6d3dbd.html</id>
<published>2019-05-28T16:20:00.000Z</published>
<updated>2020-09-21T13:41:07.522Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-YYwaVAly" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="40962509" data-server="netease" data-type="playlist" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#00CED1"></div><h2 id="第一章开发任务概述"><a class="header-anchor" href="#第一章开发任务概述">☆</a>第一章开发任务概述</h2><h3 id="web应用"><a class="header-anchor" href="#web应用">☆</a>Web应用</h3><ul><li>B/S结构:适用于大中型应用程序,极少事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现。这种结构的程序简化了客户端的功能负载,减轻了应用维护与升级的成本和工作量,降低了用户的总体成本,但应用服务器运行负荷较重。</li></ul><h3 id="客户端开发技术"><a class="header-anchor" href="#客户端开发技术">☆</a>客户端开发技术</h3><p>1、HTML技术</p><p>HTML(HyperText Markup Language,超文本标记语言)是一种用于表示网上信息的符号标记语言。</p><p>2、CSS技术</p><p>CSS(Cascading Style Sheets,层叠样式表)技术是一种定义样式结构(如字体、颜色、位置等)的语言,用于描述网页上的信息格式和显示的方式。</p><p>3、JavaScript技术</p><p>JavaScript是一种广泛应用于客户端的脚本语言,通过嵌入到HTML中来实现自身的功能;通过控制网页元素的行为和CSS代码中的样式定义,为网页增添了诸如表单内容验证、动画显示效果等交互能力,可以使静态网页具备一定的动态效果。<br>服务器端开发技术</p><h3 id="服务器端开发技术"><a class="header-anchor" href="#服务器端开发技术">☆</a>服务器端开发技术</h3><p>1、Servlet技术</p><p id="div-border-left-yellow">Servlet是以Java技术为基础的服务器端应用程序组件,与运行在浏览器端的Applet相对应。Serv」et是被Web服务器(如Tomcat)加载和执行,而Applet则是被浏览器加载和执行。Servlet通过Web服务器接收客户端浏览器发来的请求,执行预定的功能,然后将执行结果返回给客户端的浏览器。Servlet可以使用服务器端的所有Java 类库资源,所以理论上其功能可以无限扩展。</p>2、JSP技术<p id="div-border-left-yellow">JSP(Java Server Page)是建立在Servlet规范提供的功能之上的一种动态网页技术。</p>3、JavaBean技术<p id="div-border-left-yellow">JavaBean是Java组件技术的核心,它是Java平台上实现重用的软件组件模型。JavaBean是一种特殊的Java类,需要满足一定的规范要求。</p>4、JDBC技术<p id="div-border-left-yellow">JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API (Application Programming Interface,应用编程接口),由一组Java语言编写的类和接口组成。</p><h3 id="http请求-响应机制"><a class="header-anchor" href="#http请求-响应机制">☆</a>HTTP请求/响应机制</h3><p>处理过程包括以下步骤:</p><ul><li>浏览器向Web服务器发送请求报文。</li><li>服务器解析接收到的请求,定位请求资源,做相应处理,然后封装好响应报文,回送给浏览器。</li><li>浏览器收到响应报文,解析HTML、图片等静态内容,渲染网页呈现给用户,解析DOM(Document Object Model,文档对象模型)树,脚本引擎执行脚本代码,完成DOM 操作、CSS属性更改、发送AJAX(Asynchronous JavaScript And XML,异步JavaScript 和XML)请求等功能。</li></ul><p><span id="font-green">HTTP主要有以下特点:</span></p><ul><li>简单快速<br></li><li>灵活<br></li><li>无连接<br></li><li>无状态<br></li><li>支持B/S及C/S模式</li></ul><h2 id="第二章-用户界面设计"><a class="header-anchor" href="#第二章-用户界面设计">☆</a>第二章 用户界面设计</h2><h3 id="用户界面元素开发"><a class="header-anchor" href="#用户界面元素开发">☆</a>用户界面元素开发</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"><!-- 无序列表 --></span></span><br><span class="line"><span class="tag"><<span class="name">ul</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>Coffee<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>Milk<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"><span class="tag"></<span class="name">ul</span>></span></span><br><span class="line"><span class="comment"><!-- 文本段落 --></span></span><br><span class="line"><span class="tag"><<span class="name">p</span>></span>This is a paragraph<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="tag"><<span class="name">p</span>></span>This is another paragraph<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="comment"><!-- 块、行内元素、图片 --></span></span><br><span class="line"><span class="tag"><<span class="name">div</span>></span></span><br><span class="line"><span class="tag"><<span class="name">span</span>></span></span><br><span class="line"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">"boat.gif"</span> <span class="attr">alt</span>=<span class="string">"Big Boat"</span>></span></span><br><span class="line"><span class="comment"><!-- 表单 --></span></span><br><span class="line"><span class="tag"><<span class="name">form</span>></span></span><br><span class="line"> First name:<span class="tag"><<span class="name">br</span>></span></span><br><span class="line"><span class="tag"><<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">"firstname"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">br</span>></span></span><br><span class="line"> Last name:<span class="tag"><<span class="name">br</span>></span></span><br><span class="line"><span class="tag"><<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">"lastname"</span>></span></span><br><span class="line"><span class="tag"></<span class="name">form</span>></span></span><br><span class="line"><span class="comment"><!-- 下拉列表框 --></span></span><br><span class="line"><span class="tag"><<span class="name">select</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">option</span> <span class="attr">value</span> =<span class="string">"volvo"</span>></span>Volvo<span class="tag"></<span class="name">option</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">option</span> <span class="attr">value</span> =<span class="string">"saab"</span>></span>Saab<span class="tag"></<span class="name">option</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">option</span> <span class="attr">value</span>=<span class="string">"opel"</span>></span>Opel<span class="tag"></<span class="name">option</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">option</span> <span class="attr">value</span>=<span class="string">"audi"</span>></span>Audi<span class="tag"></<span class="name">option</span>></span></span><br><span class="line"><span class="tag"></<span class="name">select</span>></span></span><br><span class="line"><span class="comment"><!--多行文本框--></span></span><br><span class="line"><span class="tag"><<span class="name">textarea</span> <span class="attr">rows</span>=<span class="string">"3"</span> <span class="attr">cols</span>=<span class="string">"20"</span>></span></span><br><span class="line"> 在w3school,你可以找到你所需要的所有的网站建设教程。</span><br><span class="line"><span class="tag"></<span class="name">textarea</span>></span></span><br><span class="line"><span class="comment"><!--表格--></span></span><br><span class="line"><span class="tag"><<span class="name">table</span> <span class="attr">border</span>=<span class="string">"1"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">th</span>></span>Month<span class="tag"></<span class="name">th</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">th</span>></span>Savings<span class="tag"></<span class="name">th</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>January<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>$100<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br><span class="line"><span class="comment"><!-- 超链接 --></span></span><br><span class="line"><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">"http://www.w3school.com.cn"</span>></span>W3School<span class="tag"></<span class="name">a</span>></span></span><br><span class="line"><span class="comment"><!-- HTML文件的基本结构、HTML标记格式 --></span></span><br><span class="line">略</span><br></pre></td></tr></table></figure><h3 id="界面布局设计"><a class="header-anchor" href="#界面布局设计">☆</a>界面布局设计</h3><h4 id="什么是css"><a class="header-anchor" href="#什么是css">☆</a>什么是css</h4><p>CSS是Cascading Style Sheets(层叠样式表)的缩写,是一种美化网页的技术。它的引入使HTML网页美工设计不再烦琐。</p><h4 id="css选择器格式"><a class="header-anchor" href="#css选择器格式">☆</a>CSS选择器格式</h4><p>1、标记选择器:直接针对HTML标记定义样式。</p><div class="note info">HTML标记名{标记属性:属性值; 标记属性:属性值; 标记属性: 属性值;...}</div>2、类别选择器:<div class="note info">.类别选择器名{标记属性: 属性值; 标记属性: 属性值; 标记属性: 属性值;...;}<html 标记名 class="类别选择器名"></html></div>3、ID选择器:<div class="note info">#ID选择器名{标记属性:属性值; 标记属性: 属性值; 标记属性: 属性值;...;}<html 标记名 id="ID选择器名"></html></div>4、伪元素选择器:指对同一HTML元素的各种状态来定义样式的一种方式。<div class="note info">HTML标记:伪元素{样式}</div><h4 id="在html中使用css的方法"><a class="header-anchor" href="#在html中使用css的方法">☆</a>在HTML中使用CSS的方法</h4><p>1、嵌入式:将样式表嵌入到HTML标记的属性中,把样式的定义直接作为标记的style属性值。格式如下:</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">HTML</span> 标记 <span class="attr">style</span> = <span class="string">"属性名:属性值"</span>></span></span><br></pre></td></tr></table></figure><p>(2)头部式:把样式定义在HTML页面的头部,用<style>标记进行声明。这样定义的样式在整个页面中都可以使用。基本格式如下:</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">style</span>></span><span class="undefined"></span></span><br><span class="line"><span class="undefined"> 样式定义</span></span><br><span class="line"><span class="undefined"></span><span class="tag"></<span class="name">style</span>></span></span><br></pre></td></tr></table></figure><p>(3)外部式:当在很多网页里都要使用相同的样式时,可以使用外部样式表的形式。</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">< <span class="attr">link</span> <span class="attr">href</span>= <span class="string">""</span> <span class="attr">rel</span>= <span class="string">"stylesheet"</span> <span class="attr">type</span>= <span class="string">"text/css"</span> /></span></span><br></pre></td></tr></table></figure><h4 id="div-css布局的实现思路"><a class="header-anchor" href="#div-css布局的实现思路">☆</a>DIV+CSS布局的实现思路</h4><p>可以使用DIV+CSS 来实现网页布局,实现路是先用<div>标记对整个页面进行分块,然后再利用CSS样式对每个div分块进行布局设置,最后在各个div分块中添加内容。</p><h3 id="客户端功能开发"><a class="header-anchor" href="#客户端功能开发">☆</a>客户端功能开发</h3><h4 id="javascript概述"><a class="header-anchor" href="#javascript概述">☆</a>JavaScript概述</h4><p>JavaScript是一种简单的脚本语言,由浏览器解释执行,简单、易学、易用。其最基本的两个特点是基于对象和事件驱动。</p><p>所谓基于对象,是指JavaScript支持使用对象,但是没有提供面向对象语言的所有功能,不是完全的面向对象编程语言。</p><p>事件驱动指JavaScript程序的运行机制。它把GUl(图形用户界面)中的用户动作封装为各种事件,例如单击按钮、移动鼠标、按下键盘等都是事件,当某个事件发生时,就会触发相应的事件处理程序运行。</p><h4 id="javascript脚本的使用方式"><a class="header-anchor" href="#javascript脚本的使用方式">☆</a>JavaScript脚本的使用方式</h4><p>JavaScript代码可以直接嵌入到HTML文件中使用,嵌入方式主要有三种:嵌入标记事件属性、使用脚本语句块、链接独立的脚本文件。</p><h4 id="对象"><a class="header-anchor" href="#对象">☆</a>对象</h4><p>JavaScript中的对象由属性和方法构成,主要有三种类型:内置对象、浏览器提供的对象和自定义对象。</p><ul><li>Date对象:用于处理日期和时间,需要先创建才能使用。</li><li>window对象:代表当前浏览器窗口所有JavaScript全局对象、函数和变量均自动成为window对象的成员。<ul><li>window对象提供了多个属性和函数用于对浏览器窗口进行操作。</li><li>window对象的常用函数有:alert(警告对话框)、confirm(确认对话框)、prompt(消息框)、open(打开新窗口)、print(打印网页内容)等。</li><li>因为window对象是JavaScript中最顶级的对象,所以在使用当前窗口对象的函数时,可以省略函数前的window,即可以直接使用alert(),而不需要用window.alert()。</li></ul></li><li>document对象:属于HTML DOM(Document Object Model,文档对象模型)。当网页被加载时,浏览器会创建当前页面的DOM模型。DOM的最顶层就是HTML文档,document对象就代表当前HTML文档,通过它可以访问页面中的所有元素。</li></ul><p><span id="font-blue"><span id="font-green">document</span>对象的常用方法如下:</span></p><ul><li>write(字符串):将字符串或数值显示在显示器上。</li><li>getElementById():返回对指定id的第一个对象的引用。</li></ul><h2 id="第三章-web应用开发基础"><a class="header-anchor" href="#第三章-web应用开发基础">☆</a>第三章 web应用开发基础</h2><h3 id="开发环境和运行环境"><a class="header-anchor" href="#开发环境和运行环境">☆</a>开发环境和运行环境</h3><p>略</p><h3 id="jsp基本概念"><a class="header-anchor" href="#jsp基本概念">☆</a>jsp基本概念</h3><h4 id="运行机制"><a class="header-anchor" href="#运行机制">☆</a>运行机制</h4><p>当浏览器向服务器发出请求访问一个JSP页面时,所请求的JSP文件会被服务器端的JSP引擎转化为一个Java类,并被编译成一个字节码文件,再装载到Java虚拟机中运行,最后把运行产生的输出作为对本次请求的响应返回给浏览器。</p><h4 id="web应用目录结构"><a class="header-anchor" href="#web应用目录结构">☆</a>Web应用目录结构</h4><p>按照Java EE规范的规定,一个典型的Java Web应用包含四个部分:</p><ul><li>公开文件夹,存放能够被用户访问的资源,包括.jsp、.htm、.js、.css、.jpg等文件。</li><li>WEB-INF/web.xml文件,应用的部署描述文件。</li><li>WEB-INF/classes文件夹,存放编译好的Java类文件(.class)。</li><li>WEB-INF/lib文件夹,存放Java类库文件(.jar)。</li></ul><h3 id="jsp基础语法"><a class="header-anchor" href="#jsp基础语法">☆</a>jsp基础语法</h3><p>jap脚本代码:Java代码片段,可以实现业务逻辑处理,也可以产生输出。例如:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><%</span><br><span class="line"> SimpleDateFormat df = <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyy-M-d HH:mm:ss"</span>);</span><br><span class="line">%></span><br></pre></td></tr></table></figure><p>jsp声明:在声明中定义的变量和方法都会成为转义后的Java类的成员变量及类成员方法,声明的类则成为内部类。语法格式如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><%! 变量或方法、类的声明 %></span><br></pre></td></tr></table></figure><p>jsp表达式:一种简单的输出形式。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><% = 表达式 %></span><br></pre></td></tr></table></figure><h4 id="jsp指令"><a class="header-anchor" href="#jsp指令">☆</a>jsp指令</h4><p><span id="font-red">page指令</span>称为页面指令,用来定义JSP页面的全局属性,该配置会作用于整个页面。</p><ul><li><span id="font-purple">language</span>属性:设置当前页面中编写JSP脚本使用的语言,默认值为java。</li><li><span id="font-purple">import</span>属性:用来导入程序中要用到的包或类,可以有多个值,无论是Java核心包中自带的类还是用户自行编写的类,都要在import中引入,才能使用。</li><li><span id="font-purple">errorPage</span>属性:用于指示一个JSP文件的相对路径,以便在页面出错时,转到这个JSP文件来进行处理。与此相适应,需要将这个JSP文件的isErrorPage属性设为true。</li><li><span id="font-purple">isErrorPage</span>属性:指示一个页面是否为错误处理页面。设置为true时,在这个JSP页面中的内建对象exception将被定义,其值将被设定为呼叫此页面的JSP页面的错误对象,以处理该页面所产生的错误。</li><li><span id="font-purple">contentType</span>属性:设置发送到客户端文档的响应报头的MIME(Multipurpose Internet Mail Extention)类型和字符编码。</li><li><span id="font-purple">pageEncoding</span>属性:设置JSP页面字符的编码,常见的编码类型有ISO-8859-1、gb2312和GBK等。默认值为ISO-8859-1。</li></ul><p>用法示例:</p><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><%<span class="meta">@page</span> language=<span class="string">"java"</span> %></span><br><span class="line"><%<span class="meta">@page</span> <span class="keyword">import</span>=<span class="string">"包名.类名"</span>%></span><br><span class="line"><%<span class="meta">@page</span> <span class="keyword">import</span>=<span class="string">"包名.*"</span>%></span><br><span class="line"><%@ page pageEncoding=<span class="string">"gb2312"</span>%></span><br></pre></td></tr></table></figure><p><span id="font-red">include指令</span>:在JSP中,可以使用include指令来包含其他jsp文件。</p><p><span id="font-red">taglib指令</span>:声明用户使用自定义的标签,将标签库描述符文件导入到jsp页面。</p><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"> <%@ taglib (uri=<span class="string">"tigLibURL"</span> 或 tagDir=<span class="string">"tagDir"</span>) prefix=<span class="string">"tagPrefix"</span> %></span><br></pre></td></tr></table></figure><p>属性:</p><ul><li><span id="font-purple">uri</span>属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。</li><li><span id="font-purple">tagDir</span>属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。</li><li><span id="font-purple">prefix</span>属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。</li></ul><h4 id="jsp标记"><a class="header-anchor" href="#jsp标记">☆</a>JSP标记</h4><p><span id="font-green"><jsp:include></span>用于将HTML或者jsp动态内容插入到当前的jsp页面中。</p><p><span id="font-green"><jsp:param></span>用于向被包含的页面传递参数。</p><p><span id="font-green"><jsp:forward></span>用于实现页面请求的转发,可以把对当前jsp页面的请求转发到同一web应用中的另一个资源。</p><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><%<span class="meta">@include</span> file=<span class="string">"文件的URL"</span>%></span><br><span class="line"><jsp:forward page=<span class="string">"接受参数页面的URL"</span>></span><br><span class="line"> <jsp:param name=“参数名 value = <span class="string">"参数值"</span>/></span><br><span class="line"><jsp:forward/></span><br></pre></td></tr></table></figure><h2 id="第四章-流程控制与数据传递"><a class="header-anchor" href="#第四章-流程控制与数据传递">☆</a>第四章 流程控制与数据传递</h2><h3 id="jsp内置对象"><a class="header-anchor" href="#jsp内置对象">☆</a>jsp内置对象</h3><table><thead><tr><th>内置对象名称</th><th style="text-align:center">类型</th><th style="text-align:left">作用域</th><th>用途</th></tr></thead><tbody><tr><td>request</td><td style="text-align:center">javax.servlet.httpServletRequest</td><td style="text-align:left">Request</td><td>代表了客户端的请求信息,接受通过HTTP协议传送到服务器的数据。(乱码处理)</td></tr><tr><td>response</td><td style="text-align:center">javax.servlet.http.HttpServletResponse</td><td style="text-align:left">Page</td><td>对客户端的响应,将JSP容器处理过的对象传回到客户端。(页面重定向)</td></tr><tr><td>session</td><td style="text-align:center">javax.servlet.http.HttpSession</td><td style="text-align:left">Page</td><td>在第一个JSP页面被装载时自动创建,完成会话期管理。(存取属性值,保存用户的信息)</td></tr><tr><td>out</td><td style="text-align:center">javax.servlet.jsp.jspWriter</td><td style="text-align:left">Page</td><td>在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。</td></tr></tbody></table><p><strong><center><span id="font-blue">request对象主要方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">setAttribute(String name,Object)</td><td style="text-align:left">设置名字为name的request的參数值</td></tr><tr><td style="text-align:left">getAttribute(String name)</td><td style="text-align:left">返回由name指定的属性值</td></tr><tr><td style="text-align:left">getAttributeNames()</td><td style="text-align:left">返回request对象全部属性的名字集合,结果是一个枚举的实例</td></tr><tr><td style="text-align:left">getCookies()</td><td style="text-align:left">返回client的全部Cookie对象,结果是一个Cookie数组</td></tr><tr><td style="text-align:left">getCharacterEncoding()</td><td style="text-align:left">返回请求中的字符编码方式</td></tr><tr><td style="text-align:left">getContentLength()</td><td style="text-align:left">返回请求的Body的长度</td></tr><tr><td style="text-align:left">getHeader(String name)</td><td style="text-align:left">获得HTTP协议定义的文件头信息</td></tr><tr><td style="text-align:left">getHeaders(String name)</td><td style="text-align:left">返回指定名字的request Header的全部值,结果是一个枚举的实例</td></tr><tr><td style="text-align:left">getHeaderNames()</td><td style="text-align:left">返回所以request Header的名字,结果是一个枚举的实例</td></tr><tr><td style="text-align:left">getInputStream()</td><td style="text-align:left">返回请求的输入流,用于获得请求中的数据</td></tr><tr><td style="text-align:left">getMethod()</td><td style="text-align:left">获得client向server端传送数据的方法</td></tr><tr><td style="text-align:left">getParameter(String name)</td><td style="text-align:left">获得client传送给server端的有name指定的參数值</td></tr><tr><td style="text-align:left">getParameterNames()</td><td style="text-align:left">获得client传送给server端的全部參数的名字,结果是一个枚举的实例</td></tr><tr><td style="text-align:left">getParameterValues(String name)</td><td style="text-align:left">获得有name指定的參数的全部值</td></tr><tr><td style="text-align:left">getProtocol()</td><td style="text-align:left">获取client向server端传送数据所根据的协议名称</td></tr><tr><td style="text-align:left">getQueryString()</td><td style="text-align:left">获得查询字符串</td></tr><tr><td style="text-align:left">getRequestURI()</td><td style="text-align:left">获取发出请求字符串的client地址</td></tr><tr><td style="text-align:left">getRemoteAddr()</td><td style="text-align:left">获取client的IP地址</td></tr><tr><td style="text-align:left">getRemoteHost()</td><td style="text-align:left">获取client的名字</td></tr><tr><td style="text-align:left">getSession([Boolean create])</td><td style="text-align:left">返回和请求相关Session</td></tr><tr><td style="text-align:left">getServerName()</td><td style="text-align:left">获取server的名字</td></tr><tr><td style="text-align:left">getServletPath()</td><td style="text-align:left">获取client所请求的脚本文件的路径</td></tr><tr><td style="text-align:left">getServerPort()</td><td style="text-align:left">获取server的port号</td></tr><tr><td style="text-align:left">removeAttribute(String name)</td><td style="text-align:left">删除请求中的一个属性</td></tr></tbody></table><p><strong><center><span id="font-blue">response对象常用方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">void setContentType(String type)</td><td style="text-align:left">设置响应数据的MIME类型</td></tr><tr><td style="text-align:left">String getContentType()</td><td style="text-align:left">取得响应数据的MIME类型</td></tr><tr><td style="text-align:left">void setHeader(String name, String value)</td><td style="text-align:left">设置指定的响应报头</td></tr><tr><td style="text-align:left">void sendRedirect()</td><td style="text-align:left">重定向客户的请求到指定页面</td></tr><tr><td style="text-align:left">void addCookie(Cookie cookie)</td><td style="text-align:left">给客户端添加一个Cookie对象,以保存客户端的信息</td></tr><tr><td style="text-align:left">PrintWriter getWriter()</td><td style="text-align:left">返回一个输出字符流</td></tr><tr><td style="text-align:left">void flushBuffer()</td><td style="text-align:left">清空缓冲区,强行把Buffer的内容写到客户端浏览器</td></tr></tbody></table><p><strong><center><span id="font-blue">session对象常用方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">getAttribute(String name)</td><td style="text-align:left">获取session对象中名为name的属性值,不存在则为null</td></tr><tr><td style="text-align:left">removeAttribute(String name)</td><td style="text-align:left">删除session对象中名为name的属性</td></tr><tr><td style="text-align:left">setAttribute(String name, Object value)</td><td style="text-align:left">设置session对象属性,属性名为name,属性值为value</td></tr><tr><td style="text-align:left">getCreationTime()</td><td style="text-align:left">获取session对象的创建时间,返回1970年1月1日至今的毫秒数(Unix时间戳)</td></tr><tr><td style="text-align:left">getLastAccessTime()</td><td style="text-align:left">获取session对象对应客户端的最近发送请求的时间,返回1970年1月1日至今的毫秒数</td></tr><tr><td style="text-align:left">invalidate()</td><td style="text-align:left">销毁session对象中的信息,session本身不会被销毁</td></tr><tr><td style="text-align:left">getMaxInactiveInterval()</td><td style="text-align:left">获取会话超时时间,单位为秒</td></tr><tr><td style="text-align:left">setMaxInactiveInterval(int interval)</td><td style="text-align:left">设置会话超时时间,单位为秒</td></tr></tbody></table><h3 id="cookie机制"><a class="header-anchor" href="#cookie机制">☆</a>Cookie机制</h3><p>Cookie是Web服务器产生并嵌入在HTTP响应报头中的一小段文本。浏览器在收到一个Cookie后会把它保存到特定的文件夹下,并在接下来再次访问同一个Web服务器时,自动在请求报头中携带该Cookie,供服务器读取使用,从而弥补HTTP无状态的不足。基于这一工作机制,可以实现用户识别、应用定制等功能。</p><p>一个Cookie包含一个名称和值,以及一些可选的属性,如路径、最长存活时间等。Java提供了javax.servlet.http.Cookie类来支持Cookie机制的实现。可以使用response 对象的addCookie()方法向浏览器发送Cookie,使用request对象的getCookie()方法获取请求中的所有Cookie。</p><p><strong><center><span id="font-blue">cookie类的主要方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">String geyName()</td><td style="text-align:left">获取cookie的名称</td></tr><tr><td style="text-align:left">String getValue()</td><td style="text-align:left">获取cookie的值</td></tr><tr><td style="text-align:left">void setValue(String value)</td><td style="text-align:left">在cookie创建后,为cookie赋予新的值</td></tr><tr><td style="text-align:left">int getMaxAge()</td><td style="text-align:left">获取cookie的有效时间,以秒为单位,-1表示cookie将一直持续下去,直到浏览器关闭</td></tr><tr><td style="text-align:left">String getPath()</td><td style="text-align:left">返回cookie适用的路径</td></tr><tr><td style="text-align:left">void setPath(String uri)</td><td style="text-align:left">设置cookie的适用路径。如不指定,则当前页面的同目录与子目录下所有RRL都返回cookie</td></tr></tbody></table><h3 id="控制流和数据流的实现"><a class="header-anchor" href="#控制流和数据流的实现">☆</a>控制流和数据流的实现</h3><p>1、jsp页面间的流程控制</p><ul><li>超链接</li><li>表单提交</li><li>页面重定向</li><li>请求转发</li></ul><p>2、jsp页面间的数据传递</p><ul><li>表单传参</li><li>url传参</li><li><jsp:param>标记传参</li><li>作用域传参</li></ul><h2 id="数据库访问"><a class="header-anchor" href="#数据库访问">☆</a>数据库访问</h2><h3 id="数据库访问代码模板"><a class="header-anchor" href="#数据库访问代码模板">☆</a>数据库访问代码模板</h3><figure class="highlight jsp"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><%@ page language=<span class="string">"java"</span> <span class="keyword">import</span>=<span class="string">"java.util.*"</span> pageEncoding=<span class="string">"utf-8"</span>%></span><br><span class="line"><%@ page <span class="keyword">import</span>=<span class="string">"java.sql.*"</span> %></span><br><span class="line"></span><br><span class="line"><%</span><br><span class="line"></span><br><span class="line"> String driver = <span class="string">"com.mysql.jdbc.Driver"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// URL指向要访问的数据库名test1</span></span><br><span class="line"> String url = <span class="string">"jdbc:mysql://127.0.0.1:3306/test"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// MySQL配置时的用户名</span></span><br><span class="line"> String user = <span class="string">"root"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// Java连接MySQL配置时的密码</span></span><br><span class="line"> String password = <span class="string">"111"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> <span class="comment">// 1 加载驱动程序</span></span><br><span class="line"> Class.forName(driver);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 2 连接数据库</span></span><br><span class="line"> Connection conn = DriverManager.getConnection(url, user, password);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 3 用来执行SQL语句</span></span><br><span class="line"> Statement statement = conn.createStatement();</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 要执行的SQL语句</span></span><br><span class="line"> String sql = <span class="string">"select * from login"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">//处理执行结果</span></span><br><span class="line"> ResultSet rs = statement.executeQuery(sql);</span><br><span class="line"> String name = <span class="keyword">null</span>;</span><br><span class="line"> String mima=<span class="keyword">null</span>;</span><br><span class="line"> <span class="keyword">while</span> (rs.next()) { </span><br><span class="line"> name = rs.getString(<span class="string">"userName"</span>); </span><br><span class="line"> mima = rs.getString(<span class="string">"passWord"</span>); </span><br><span class="line"> out.println(name+<span class="string">"\t"</span>+mima); </span><br><span class="line"> }</span><br><span class="line"> rs.close();</span><br><span class="line"> conn.close();</span><br><span class="line"> } <span class="keyword">catch</span> (ClassNotFoundException e) {</span><br><span class="line"> System.out.println(<span class="string">"Sorry,can`t find the Driver!"</span>);</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> } <span class="keyword">catch</span> (SQLException e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> } <span class="keyword">catch</span> (Exception e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">%></span><br></pre></td></tr></table></figure><h3 id="jdbc技术"><a class="header-anchor" href="#jdbc技术">☆</a>JDBC技术</h3><h4 id="基础概念"><a class="header-anchor" href="#基础概念">☆</a>基础概念</h4><p>Java语言访问数据库的一种规范,是一套API</p><p>JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的存取操作。</p><h4 id="drivermanager类"><a class="header-anchor" href="#drivermanager类">☆</a>DriverManager类</h4><p>处理驱动程序的加载和建立新数据连接。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">connection.getConnection(String url, String user, String password)</span><br><span class="line">Connection con = DriverManager.getConnection(<span class="string">"jdbc:oracle:thin:@127.0.0.1:1521:name"</span>, <span class="string">"scott"</span>,<span class="string">"tiger"</span>);</span><br></pre></td></tr></table></figure><h4 id="connection接口"><a class="header-anchor" href="#connection接口">☆</a>Connection接口</h4><p>代表Java程序与数据库间的连接,用于提供创建语句以及管理连接及其属性方法。</p><p><strong><center><span id="font-blue">Connection接口常用方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">Statement createStatement()</td><td style="text-align:left">创建一个Statement对象,用于将SQL语句发送到数据库,通常在执行无参数的SQL语句时创建该实例</td></tr><tr><td style="text-align:left">PrepareStatement prepareStatement()</td><td style="text-align:left">通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行预编译处理</td></tr><tr><td style="text-align:left">void close()</td><td style="text-align:left">关闭数据库连接</td></tr></tbody></table><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Statement st = con.createStatement();</span><br></pre></td></tr></table></figure><h4 id="statement接口"><a class="header-anchor" href="#statement接口">☆</a>Statement接口</h4><p>用于执行静态SQL语句并返回它所生成结果的对象。</p><p><strong><center><span id="font-blue">Statement接口常用方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">ResultSet executeQuery(String sql)</td><td style="text-align:left">执行指定的静态select语句,并返回一个永远不为null的ResultSet实例</td></tr><tr><td style="text-align:left">int executeUpdate(String sql)</td><td style="text-align:left">执行指定的静态INSET、UPDATE或DELETE语句,并返回一个int型数值,未同步更新记录的条数</td></tr></tbody></table><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ResultSet rs = st.executeQuery(sql);</span><br></pre></td></tr></table></figure><h4 id="preparedstatement接口"><a class="header-anchor" href="#preparedstatement接口">☆</a>PreparedStatement接口</h4><p>继承自Statement,表示预编译的SQL语句的对象,预编译SQL效率高且支持参数查询</p><h4 id="resultset接口"><a class="header-anchor" href="#resultset接口">☆</a>ResultSet接口</h4><p>用于表示数据库结果集的数据表,通常由执行查询数据库的语句生成,其中存放了查询结果。</p><p>在ResultSet对象中具有指向当前数据行的游标,可以在<span id="font-green">while</span>循环中使用<span id="font-green">next()</span>方法来迭代处理结果集。</p><p><strong><center><span id="font-blue">ResultSet接口常用的获取列值方法</span></center></strong></p><table><thead><tr><th style="text-align:left">返回类型</th><th style="text-align:left">方法名称</th><th style="text-align:left">返回类型</th><th style="text-align:left">方法名称</th></tr></thead><tbody><tr><td style="text-align:left">byte</td><td style="text-align:left">getByte(inc columnIndex)</td><td style="text-align:left">byte</td><td style="text-align:left">getByte(String columnLabel)</td></tr><tr><td style="text-align:left">Date</td><td style="text-align:left">getDate(inc columnIndex)</td><td style="text-align:left">Date</td><td style="text-align:left">getDate(String columnLabel)</td></tr><tr><td style="text-align:left">double</td><td style="text-align:left">getDouble(inc columnIndex)</td><td style="text-align:left">double</td><td style="text-align:left">getDouble(String columnLabel)</td></tr><tr><td style="text-align:left">float</td><td style="text-align:left">getFloat(inc columnIndex)</td><td style="text-align:left">float</td><td style="text-align:left">getFloat(String columnLabel)</td></tr><tr><td style="text-align:left">int</td><td style="text-align:left">getInt(inc columnIndex)</td><td style="text-align:left">int</td><td style="text-align:left">getInt(String columnLabel)</td></tr><tr><td style="text-align:left">long</td><td style="text-align:left">getLong(inc columnIndex)</td><td style="text-align:left">long</td><td style="text-align:left">getLong(String columnLabel)</td></tr><tr><td style="text-align:left">String</td><td style="text-align:left">getString(inc columnIndex)</td><td style="text-align:left">String</td><td style="text-align:left">getString(String columnLabel)</td></tr></tbody></table><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">while</span>(rs.next()){</span><br><span class="line"> <span class="keyword">int</span> id = rs.getInt(<span class="string">"id"</span>);</span><br><span class="line"> String username = rs.getString(<span class="string">"username"</span>);</span><br><span class="line"> String gender = rs.getString(<span class="string">"gender"</span>);</span><br><span class="line"> java.sql.Date hiredate = rs.getDate(<span class="string">"hiredate"</span>);</span><br><span class="line"> System.out.println(id+<span class="string">"#"</span>+username+<span class="string">"#"</span>+gender+<span class="string">"+hiredate);</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure><h2 id="重构程序功能"><a class="header-anchor" href="#重构程序功能">☆</a>重构程序功能</h2><h3 id="javabean技术"><a class="header-anchor" href="#javabean技术">☆</a>JavaBean技术</h3><h4 id="javabean编写规范"><a class="header-anchor" href="#javabean编写规范">☆</a>JavaBean编写规范</h4><ul><li>是一个公共类</li><li>具有无参数的公共构造方法</li><li>具有公共的setter和getter方法来供外部存取其私有属性</li><li>需要放在命名包里,不能放在默认包中</li></ul><h4 id="javabean的编译"><a class="header-anchor" href="#javabean的编译">☆</a>JavaBean的编译</h4><p>略</p><h4 id="使用javabean"><a class="header-anchor" href="#使用javabean">☆</a>使用JavaBean</h4><ul><li><span id="font-green"><jsp:useBean></span> 装载一个将在JSP页面中使用的JavaBean。<ul><li>scope,作用域</li></ul></li></ul><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><jsp:useBean id=<span class="string">"name"</span> <span class="class"><span class="keyword">class</span></span>=<span class="string">"package.class"</span> scope=<span class="string">"page | request | session | application"</span> /></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><jsp:setProperty></span> 获取指定的JavaBean的值。<ul><li>详解见<a href="https://blog.csdn.net/u011024652/article/details/52012435" target="_blank" rel="noopener">jsp:useBean的用法</a></li></ul></li></ul><figure class="highlight jsp"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//自动匹配赋值</span></span><br><span class="line"><jsp:setProperty name=<span class="string">"JavaBean实例名"</span> property=<span class="string">"*"</span> /></span><br><span class="line"><span class="comment">//自动匹配指定属性</span></span><br><span class="line"><jsp:setProperty name=<span class="string">"JavaBean实例名"</span> property=<span class="string">"JavaBean属性名"</span> /></span><br><span class="line"><span class="comment">//手动设置属性值</span></span><br><span class="line"><jsp:setProperty name=<span class="string">"JavaBean实例名"</span> property=<span class="string">"JavaBean属性名"</span> value=<span class="string">"BeanValue"</span> /></span><br><span class="line"><span class="comment">//通过获取request的参数来为相应的属性赋值,其中param为参数名</span></span><br><span class="line"><jsp:setProperty name=<span class="string">"JavaBean实例名"</span> property=<span class="string">"JavaBean属性名"</span> param=<span class="string">"request对象中的参数名"</span> /></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><jsp:getProperty></span> 获取指定Javabean对象的属性值。</li></ul><h4 id="javabean实例"><a class="header-anchor" href="#javabean实例">☆</a>JavaBean实例</h4><figure class="highlight"><figcaption><span>login.jsp</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><%@ page language=<span class="string">"java"</span> <span class="keyword">import</span>=<span class="string">"java.util.*"</span> contentType=<span class="string">"text/html; charset=utf-8"</span> %></span><br><span class="line"><%</span><br><span class="line">String path = request.getContextPath();</span><br><span class="line">String basePath = request.getScheme()+<span class="string">"://"</span>+request.getServerName()+<span class="string">":"</span>+request.getServerPort()+path+<span class="string">"/"</span>;</span><br><span class="line">%></span><br><span class="line"></span><br><span class="line"><!DOCTYPE HTML PUBLIC <span class="string">"-//W3C//DTD HTML 4.01 Transitional//EN"</span>></span><br><span class="line"><html></span><br><span class="line"> <head></span><br><span class="line"> <base href=<span class="string">"<%=basePath%>"</span>></span><br><span class="line"> <title>My JSP 'login.jsp' starting page</title></span><br><span class="line"> <meta http-equiv=<span class="string">"pragma"</span> content=<span class="string">"no-cache"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"cache-control"</span> content=<span class="string">"no-cache"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"expires"</span> content=<span class="string">"0"</span>> </span><br><span class="line"> <meta http-equiv=<span class="string">"keywords"</span> content=<span class="string">"keyword1,keyword2,keyword3"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"description"</span> content=<span class="string">"This is my page"</span>> </span><br><span class="line"> </head></span><br><span class="line"> <body></span><br><span class="line"> <h1>系统登录</h1></span><br><span class="line"> <hr></span><br><span class="line"> <form name=<span class="string">"loginForm"</span> action=<span class="string">"dologin.jsp?mypass=999999"</span> method=<span class="string">"post"</span>></span><br><span class="line"> <table></span><br><span class="line"> <tr></span><br><span class="line"> <td>用户名:</td></span><br><span class="line"> <td><input type="text" name="username" value=""/></td></span><br><span class="line"> </tr></span><br><span class="line"> <tr></span><br><span class="line"> <td>密码:</td></span><br><span class="line"> <td><input type="password" name="password" value=""/></td></span><br><span class="line"> </tr></span><br><span class="line"> <tr></span><br><span class="line"> <td colspan="2" align="center"><input type="submit" value="登录"/></td></span><br><span class="line"> </tr></span><br><span class="line"> </table></span><br><span class="line"> </form></span><br><span class="line"> </body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><figure class="highlight"><figcaption><span>dologin.jsp</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><%@ page language=<span class="string">"java"</span> <span class="keyword">import</span>=<span class="string">"java.util.*"</span> contentType=<span class="string">"text/html; charset=utf-8"</span>%></span><br><span class="line"><%</span><br><span class="line">String path = request.getContextPath();</span><br><span class="line">String basePath = request.getScheme()+<span class="string">"://"</span>+request.getServerName()+<span class="string">":"</span>+request.getServerPort()+path+<span class="string">"/"</span>;</span><br><span class="line">%></span><br><span class="line"></span><br><span class="line"><!DOCTYPE HTML PUBLIC <span class="string">"-//W3C//DTD HTML 4.01 Transitional//EN"</span>></span><br><span class="line"><html></span><br><span class="line"> <head></span><br><span class="line"> <base href=<span class="string">"<%=basePath%>"</span>></span><br><span class="line"></span><br><span class="line"> <title>My JSP 'dologin.jsp' starting page</title></span><br><span class="line"></span><br><span class="line"> <meta http-equiv=<span class="string">"pragma"</span> content=<span class="string">"no-cache"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"cache-control"</span> content=<span class="string">"no-cache"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"expires"</span> content=<span class="string">"0"</span>> </span><br><span class="line"> <meta http-equiv=<span class="string">"keywords"</span> content=<span class="string">"keyword1,keyword2,keyword3"</span>></span><br><span class="line"> <meta http-equiv=<span class="string">"description"</span> content=<span class="string">"This is my page"</span>></span><br><span class="line"></span><br><span class="line"> </head></span><br><span class="line"> <body></span><br><span class="line"> <jsp:useBean id=<span class="string">"myUsers"</span> <span class="class"><span class="keyword">class</span></span>=<span class="string">"com.po.Users"</span> scope=<span class="string">"page"</span>/></span><br><span class="line"> <h1>setProperty动作元素</h1></span><br><span class="line"> <hr></span><br><span class="line"> <!--根据表单自动匹配所有的属性 --></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"*"</span>/> </span><br><span class="line"></span><br><span class="line"> <!--根据表单匹配所有部分的属性 --></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"username"</span>/> </span><br><span class="line"></span><br><span class="line"> <!--根表单无关,通过手工赋值给属性 --></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"username"</span> value=<span class="string">"lisi"</span>/></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"password"</span> value=<span class="string">"888888"</span>/></span><br><span class="line"></span><br><span class="line"> <!--通过URL传参数给属性赋值 --></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"username"</span>/></span><br><span class="line"> <jsp:setProperty name=<span class="string">"myUsers"</span> property=<span class="string">"password"</span> param=<span class="string">"mypass"</span>/></span><br><span class="line"></span><br><span class="line"> <!-- 使用传统的表达式方式来获取用户名和密码 --></span><br><span class="line"> 用户名:<%=myUsers.getUsername() %><br></span><br><span class="line"> 密码:<%=myUsers.getPassword() %><br></span><br><span class="line"></span><br><span class="line"> <!-- 使用getProperty方式来获取用户名和密码 --></span><br><span class="line"> 用户名:<jsp:getProperty name=<span class="string">"myUsers"</span> property=<span class="string">"username"</span>/> <br></span><br><span class="line"> 密码:<jsp:getProperty name=<span class="string">"myUsers"</span> property=<span class="string">"password"</span>/><br></span><br><span class="line"> <br></span><br><span class="line"> <br></span><br><span class="line"> </body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><h2 id="重构程序界面"><a class="header-anchor" href="#重构程序界面">☆</a>重构程序界面</h2><h3 id="el和jstl"><a class="header-anchor" href="#el和jstl">☆</a>EL和JSTL</h3><p>EL语法格式</p><pre><code> ${EL表达式}</code></pre><p>运算符:略</p><p><strong><center><span id="font-blue">EL常用内置对象</span></center></strong></p><table><thead><tr><th style="text-align:left">内置对象</th><th style="text-align:left">描述</th></tr></thead><tbody><tr><td style="text-align:left">pageScope</td><td style="text-align:left">取得 page 范围的属性名称所对应的值,${<a href="http://pageScope.name" target="_blank" rel="noopener">pageScope.name</a>}等同与pageContext.getAttribute(“name”);</td></tr><tr><td style="text-align:left">requstScope</td><td style="text-align:left">取得 request 范围的属性名称所对应的值,${<a href="http://requestScope.name" target="_blank" rel="noopener">requestScope.name</a>}等同与request.getAttribute(“name”);</td></tr><tr><td style="text-align:left">sessionScope</td><td style="text-align:left">取得 session 范围的属性名称所对应的值,${<a href="http://sessionScope.name" target="_blank" rel="noopener">sessionScope.name</a>}等同与session.getAttribute(“name”);</td></tr><tr><td style="text-align:left">applicationScope</td><td style="text-align:left">取得 application 范围的属性名称所对应的值,${<a href="http://applicationScope.name" target="_blank" rel="noopener">applicationScope.name</a>}等同与application.getAttribute(“name”);</td></tr><tr><td style="text-align:left">param</td><td style="text-align:left">可以用来获取参数,${param.username} 等同于request.getParameter(“username”); 返回 Slring[] 类型的值</td></tr><tr><td style="text-align:left">paramValues</td><td style="text-align:left">${paramValues.hobby} 如同 ServletRequest.getParameter Values(String name), 返回 string[] 类型的值</td></tr></tbody></table><p><span id="inline-blue">在JSP中使用JSTL的步骤如下</span></p><p id="div-border-left-purple">1. 首先需要到http://tomcat.apache.org/taglibs/standard/ 下载JSTL标记库的jar包。<br>2. 然后将获取到的JSTL标记库的jar包,复制到Web应用中的WEB-INF\lib文件夹下。<br>3. 最后在JSP页面中用taglib指令设置标记前缀,即可使用JSTL标记。<br></p>JSTL标记:<ul><li><span id="font-green"><c:out></span> 用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性<ul><li><span id="font-purple">value</span>:要输出的内容,必须</li><li><span id="font-purple">default</span>:输出的默认值,非必须,默认为主体中的内容</li><li><span id="font-purple">escapeXml</span>:是否忽略XML特殊字符,非必须,默认为true</li></ul></li></ul><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><c:out value=<span class="string">"<string>"</span> <span class="keyword">default</span>=<span class="string">"<string>"</span> escapeXml=<span class="string">"<true|false>"</span>/></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><c:set></span> 用于设置变量值和对象属性。<ul><li><span id="font-purple">value</span>:要存储的值,非必须,默认为主体的内容</li><li><span id="font-purple">target</span>:要修改的属性所属的对象,非必须</li><li><span id="font-purple">property</span>:要修改的属性,非必须</li><li><span id="font-purple">var</span>:存储信息的变量,非必须</li><li><span id="font-purple">scope</span>:var属性的作用域,非必须,默认为Page</li></ul></li></ul><div class="note warning">如果指定了target属性,那么property属性也需要被指定。</div><figure class="highlight jsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><c:set var=<span class="string">"<string>"</span> value=<span class="string">"<string>"</span> target=<span class="string">"<string>"</span> property=<span class="string">"<string>"</span> scope=<span class="string">"<string>"</span>/></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><c:if></span> 判断表达式的值,如果表达式的值为 true 则执行其主体内容。<ul><li><span id="font-purple">test</span>:条件,必须</li><li><span id="font-purple">var</span>:存储条件结果的变量,非必须</li><li><span id="font-purple">scope</span>:var属性作用域,非必须</li></ul></li></ul><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><c:<span class="keyword">if</span> test=<span class="string">"<boolean>"</span> var=<span class="string">"<string>"</span> scope=<span class="string">"<string>"</span>></span><br><span class="line"> ...</span><br><span class="line"></c:if></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><c:choose></span> 与Java switch语句的功能一样,用于在众多选项中做出选择。<ul><li>switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise></li><li><span id="font-purple">test</span>:条件,必须</li></ul></li></ul><figure class="highlight"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><c:choose></span><br><span class="line"> <c:when test=<span class="string">"<boolean>"</span>></span><br><span class="line"> ...</span><br><span class="line"> </c:when></span><br><span class="line"> <c:when test=<span class="string">"<boolean>"</span>></span><br><span class="line"> ...</span><br><span class="line"> </c:when></span><br><span class="line"> ...</span><br><span class="line"> ...</span><br><span class="line"> <c:otherwise></span><br><span class="line"> ...</span><br><span class="line"> </c:otherwise></span><br><span class="line"></c:choose></span><br></pre></td></tr></table></figure><ul><li><span id="font-green"><c:forEach></span> 迭代一个集合中的对象。<ul><li><span id="font-purple">items</span>:要被循环的信息,非必须</li><li><span id="font-purple">begin</span>:开始的元素(0=第一个元素,1=第二个元素),非必须,默认为0</li><li><span id="font-purple">end</span>:最后一个元素(0=第一个元素,1=第二个元素),非必须,默认为Last element</li><li><span id="font-purple">step</span>:每一次迭代的步长,非必须,默认为1</li><li><span id="font-purple">var</span>:代表当前条目的变量名称,非必须</li><li><span id="font-purple">varStatus</span>:代表循环状态的变量名称,非必须</li></ul></li></ul><figure class="highlight"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line"><c:forEach items=<span class="string">"<object>"</span> begin=<span class="string">"<int>"</span> end=<span class="string">"<int>"</span> step=<span class="string">"<int>"</span> var=<span class="string">"<string>"</span> varStatus=<span class="string">"<string>"</span>></span><br><span class="line"></span><br><span class="line"><c:forEach var=<span class="string">"i"</span> begin=<span class="string">"1"</span> end=<span class="string">"5"</span>></span><br><span class="line"> Item <c:out value=<span class="string">"${i}"</span>/><p></span><br><span class="line"></c:forEach></span><br></pre></td></tr></table></figure><h3 id="servlet开发"><a class="header-anchor" href="#servlet开发">☆</a>Servlet开发</h3><h4 id="httpservlet类-方法"><a class="header-anchor" href="#httpservlet类-方法">☆</a>HttpServlet类、方法</h4><p>对于Web应用而言,Servlet主要是用于处理HTTP请求,所以更一般的编写Servlet方法是继承javax.servlet.http.HttpServlet类。</p><p>HttpServlet类是GeniricServle类的子类,通过调用指定到HTTP请求的方法来实现service()方法。对于HTTP中定义的DELETE、HEAD、GET、POST、PUT等方法,分别调用doDelete(),doHead()、doGet()、doPost()、doPut()等方法来处理相应的请求。</p><p><strong><center><span id="font-blue">HttpServlet类主要方法</span></center></strong></p><table><thead><tr><th style="text-align:left">方法声明</th><th style="text-align:left">功能简介</th></tr></thead><tbody><tr><td style="text-align:left">void doGet(httpServletRequest request, HttpServletResponse, response)</td><td style="text-align:left">用来处理Http Get请求</td></tr><tr><td style="text-align:left">void doPost(httpServletRequest request, HttpServletResponse, response)</td><td style="text-align:left">用来处理Http Post请求</td></tr><tr><td style="text-align:left">void service(httpServletRequest request, HttpServletResponse, response)</td><td style="text-align:left">根据请求的类型,将请求导向doGet(),doPost()方法</td></tr></tbody></table><h4 id="编写-编译servlet"><a class="header-anchor" href="#编写-编译servlet">☆</a>编写、编译Servlet</h4><p>编写<span id="font-green">Servlet</span>的一般步骤如下:</p><p id="div-border-left-purple">1. 导入javax.servlet包、javax.servlet.http包及其他必要的包。<br>2. 继承HttpServlet类,并重写doPost()和doGet()方法。<br>3. 在doPost()和doGet()方法中依次实现获取请求参数、创建输出对象、设置响应类型、输出响应内容等功能。<br></p><span id="font-blue">编译</span>和<span id="font-blue">配置</span>Servlet:<ul><li>Servlet类编写完成之后,需要进行编译和部署。</li><li>编译Servlet之前需要先把Servlet API库文件添加到环境变量CLASSPATH 中。可以直接使用Tomcat发行版中包含的servlet-api.jar。向系统的CLASSPATH环境变量中增加下面的值(假定Tomcat安装目录为d:\tomcat):</li></ul><div class="note success"> d: \tomcat\lib\servlet-api . jar</div>- 然后打开命令行窗口,进入dem008应用中的src目录,使用下面的命令进行编译:<div class="note success">javac -d ..\classes servlet\HelloServlet.java</div><figure class="highlight xml"><figcaption><span>web.xml</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><?xml version="1.0" encoding="UTF-8"?></span><br><span class="line"><span class="tag"><<span class="name">web-app</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">servlet</span>></span> </span><br><span class="line"> <span class="tag"><<span class="name">servlet-name</span>></span>business<span class="tag"></<span class="name">servlet-name</span>></span> </span><br><span class="line"> <span class="tag"><<span class="name">servlet-class</span>></span>org.springframework.web.servlet.DispatcherServlet<span class="tag"></<span class="name">servlet-class</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">servlet</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">servlet-mapping</span>></span> </span><br><span class="line"> <span class="tag"><<span class="name">servlet-name</span>></span>LogOutServlet<span class="tag"></<span class="name">servlet-name</span>></span> </span><br><span class="line"> <span class="tag"><<span class="name">url-pattern</span>></span>/logout<span class="tag"></<span class="name">url-pattern</span>></span> </span><br><span class="line"> <span class="tag"></<span class="name">servlet-mapping</span>></span></span><br><span class="line"><span class="tag"></<span class="name">web-app</span>></span></span><br></pre></td></tr></table></figure><h3 id="mvc设计模式"><a class="header-anchor" href="#mvc设计模式">☆</a>MVC设计模式</h3><p id="div-border-left-yellow"> 所谓设计模式,是针对典型问题所提供的一套成熟的解决方案。MVC就是一种流行的程序设计模式,它把程序理解为由模型层(Model)、视图层(View)和控制器层(Controller)三个部分组成。其中,模型层表示程序的业务逻辑和状态,包括业务模型和数据模型;视图层是程序的用户界面,用于显示模型数据;控制器层响应用户请求,根据请求内容来操作模型层并控制程序的流程,决定要向用户显示的视图。</p>Java Web应用开发也可以采用MVC设计模式,用JSP作为视图层,Servlet作为控制器层,JavaBean作为模型层。这样的开发形式实现了程序的分层结构,将功能实现、用户界面和流程控制分别由不同的模块来实现,并在各个模块之间实现了良好的解耦。(<span id="font-blue">jsp Model2</span>)<p>在基于MVC的Web应用中,<span id="font-blue">一次用户请求的处理过程</span>如下:</p><p><span id="inline-toc">1.</span> 浏览器发出请求;<br><span id="inline-toc">2.</span> 作为控制器的Servlet接收请求,并将请求以适当的方式分发给对应的业务模型JavaBean来处理;<br><span id="inline-toc">3.</span> 如果该业务需要与数据库交互,由JavaBean来访问数据库;<br><span id="inline-toc">4.</span> 模型层JavaBean将处理结果返回给控制器Servlet;<br><span id="inline-toc">5.</span> Servlet以适当的方式将结果数据传递给视图层JSP页面,并将控制流程转向该JSP页面;<br><span id="inline-toc">6.</span> 应用服务器将JSP生成的HTML作为响应返回给浏览器。</p>]]></content>
<summary type="html">
完全根据PPT复习范围整理,如发现错误请在评论区留言,会及时修改
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>将python编译成.exe可执行程序</title>
<link href="http://www.singlelovely.cn/post/a044f431.html"/>
<id>http://www.singlelovely.cn/post/a044f431.html</id>
<published>2019-05-22T09:01:00.000Z</published>
<updated>2020-09-21T13:41:07.549Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>在将java程序打包成可执行程序后,因为运行时需要jvm虚拟机,还是没有办法直接给别人用,网上查了半天没有找到解决方法。最后决定用python将整个程序重写一遍,然后打包。</p><p>在此记录一下python打包的流程。</p><h2 id="安装pyinstaller"><a class="header-anchor" href="#安装pyinstaller">☆</a>安装pyinstaller</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install pyinstaller</span><br></pre></td></tr></table></figure><p>如果有 ~\Scripts 文件夹的环境变量的,应该可以直接使用,没有的配置一下环境变量可以了</p><h2 id="使用方法"><a class="header-anchor" href="#使用方法">☆</a>使用方法</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pyinstaller -F xxxx.py</span><br></pre></td></tr></table></figure><p>-F 的作用是打包为单文件</p><p>更多命令参数请参阅:<a href="https://pyinstaller.readthedocs.io/en/stable/usage.html" target="_blank" rel="noopener">官方文档</a></p>]]></content>
<summary type="html">
使用pyinstaller
</summary>
<category term="python" scheme="http://www.singlelovely.cn/categories/python/"/>
<category term="python" scheme="http://www.singlelovely.cn/tags/python/"/>
</entry>
<entry>
<title>将Java编译成.exe可执行程序</title>
<link href="http://www.singlelovely.cn/post/5f85a932.html"/>
<id>http://www.singlelovely.cn/post/5f85a932.html</id>
<published>2019-05-22T01:42:00.000Z</published>
<updated>2020-09-21T13:41:07.549Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="将java源代码打包成jar包"><a class="header-anchor" href="#将java源代码打包成jar包">☆</a>将Java源代码打包成jar包</h2><p>以<code>idea</code>为例,打开<code>项目结构</code>(Ctrl+Alt+Shift+S),选择<code>Artifacts</code>,点击加号,选择jar from modules with dependencis…</p><p><img src="https://data.singlelovely.cn/images/20190522091006.png" alt="图一"><br><img src="https://data.singlelovely.cn/images/20190522091120.png" alt="图二"></p><p>然后选择<code>构建</code>-><code>构建项目</code>,便会在out文件夹下生成编译后的jar包</p><p><img src="https://data.singlelovely.cn/images/20190522091415.png" alt="图三"></p><h2 id="将jar包打包生成-exe文件"><a class="header-anchor" href="#将jar包打包生成-exe文件">☆</a>将jar包打包生成.exe文件</h2><p>首先安装<code>exe4j</code>软件,然后按以下步骤执行</p><p><img src="https://data.singlelovely.cn/images/20190522091750.png" alt="1"><br><img src="https://data.singlelovely.cn/images/20190522091931.png" alt="2"><br><img src="https://data.singlelovely.cn/images/20190522092120.png" alt="3"><br><img src="https://data.singlelovely.cn/images/20190522092607.png" alt="4"><br><img src="https://data.singlelovely.cn/images/20190522092317.png" alt="5"><br><img src="https://data.singlelovely.cn/images/20190522093002.png" alt="6"><br><img src="https://data.singlelovely.cn/images/20190522093359.png" alt="7"></p><p>接下来,一直点下一步,直到打包完成。</p><p>然后测试是否能够正常运行。</p><h2 id="报错常见问题"><a class="header-anchor" href="#报错常见问题">☆</a>报错常见问题</h2><ul><li>jre目录路径设置不正确(注意相对路径)</li><li>32与64位和当前系统不对应</li><li>打包程序输出类型选择不正确</li></ul><h2 id="附"><a class="header-anchor" href="#附">☆</a>附</h2><p>exe4j :<a href="https://exe4j.apponic.com/" target="_blank" rel="noopener">下载地址</a> (官方)</p><p>exe4j,未注册版本会在程序开始提示程序由exe4j打包生成。</p><p>exe4j注册码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">用户名和公司名可随便填</span><br><span class="line">A-XVK258563F-1p4lv7mg7sav</span><br><span class="line"></span><br><span class="line">A-XVK209982F-1y0i3h4ywx2h1</span><br><span class="line"></span><br><span class="line">A-XVK267351F-dpurrhnyarva</span><br><span class="line"></span><br><span class="line">A-XVK204432F-1kkoilo1jy2h3r</span><br><span class="line"></span><br><span class="line">A-XVK246130F-1l7msieqiwqnq</span><br><span class="line"></span><br><span class="line">A-XVK249554F-pllh351kcke50</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
使用idea与exe4j(多图)
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
<category term="教程" scheme="http://www.singlelovely.cn/tags/%E6%95%99%E7%A8%8B/"/>
</entry>
<entry>
<title>VScode配置C++/Java开发环境</title>
<link href="http://www.singlelovely.cn/post/41bba354.html"/>
<id>http://www.singlelovely.cn/post/41bba354.html</id>
<published>2019-03-08T15:56:00.000Z</published>
<updated>2020-09-21T13:41:07.530Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-seIdtUxg" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="548651034" data-server="netease" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="auto" data-theme="#ad7a86"></div><h2 id="java配置"><a class="header-anchor" href="#java配置">☆</a>Java配置</h2><figure class="highlight"><figcaption><span>launch.json</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"version"</span>: <span class="string">"0.2.0"</span>,</span><br><span class="line"> <span class="attr">"configurations"</span>: [</span><br><span class="line"> {</span><br><span class="line"> <span class="attr">"type"</span>: <span class="string">"java"</span>,</span><br><span class="line"> <span class="attr">"name"</span>: <span class="string">"java"</span>,</span><br><span class="line"> <span class="attr">"request"</span>: <span class="string">"launch"</span>,</span><br><span class="line"> <span class="attr">"mainClass"</span>: <span class="string">"${file}"</span>,</span><br><span class="line"> "console": "integratedTerminal", //使用vscode终端</span><br><span class="line"> //"console": "externalTerminal"</span><br><span class="line"> },</span><br><span class="line"> ],</span><br><span class="line"> "compounds": []</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>可以将配置放在用户设置中,实先全局调用,如下:</p><figure class="highlight"><figcaption><span>settings.json</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">"launch": {</span><br><span class="line"> "version": "0.2.0",</span><br><span class="line"> "configurations": [</span><br><span class="line"> {</span><br><span class="line"> <span class="attr">"type"</span>: <span class="string">"java"</span>,</span><br><span class="line"> <span class="attr">"name"</span>: <span class="string">"java"</span>,</span><br><span class="line"> <span class="attr">"request"</span>: <span class="string">"launch"</span>,</span><br><span class="line"> <span class="attr">"mainClass"</span>: <span class="string">"${file}"</span>,</span><br><span class="line"> <span class="attr">"console"</span>: <span class="string">"integratedTerminal"</span>,</span><br><span class="line"> //"console": "externalTerminal"</span><br><span class="line"> },</span><br><span class="line"> ],</span><br><span class="line"> "compounds": []</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h3 id="插件"><a class="header-anchor" href="#插件">☆</a>插件</h3><p>推荐安装 <span id="font-purple">Java Extension Pack</span> ,一共5个插件,一次安装到处使用</p><p><span id="font-blue">Code Runner</span> :安装完成后会在右上角出现一个运行按钮,支持多种语言的直接运行,不需要配置文件,缺点是不能调试。</p><p>如果只需要简单的运行调试功能,安装以下两个插件就好</p><p><span id="font-blue">Debugger for Java</span></p><p><span id="font-blue">Language support for Java(TM)by Red Hat</span></p><h2 id="c-配置"><a class="header-anchor" href="#c-配置">☆</a>C++配置</h2><h3 id="准备条件"><a class="header-anchor" href="#准备条件">☆</a>准备条件</h3><p id="div-border-top-purple">电脑上安装g++、gcc、gdb等编译调试环境,并配置环境变量</p><p>因为<span id="inline-blue">launch.json</span>需要调用<span id="inline-blue">tasks.json</span>进行预编译,所以无法将配置写入setting.json中实现全局配置,需要在工作空间中配置.vscode目录</p><figure class="highlight json"><figcaption><span>launch.json</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"version"</span>: <span class="string">"0.2.0"</span>,</span><br><span class="line"> <span class="attr">"configurations"</span>: [</span><br><span class="line"> {</span><br><span class="line"> <span class="attr">"name"</span>: <span class="string">"C/C++"</span>,</span><br><span class="line"> <span class="attr">"type"</span>: <span class="string">"cppdbg"</span>,</span><br><span class="line"> <span class="attr">"request"</span>: <span class="string">"launch"</span>,</span><br><span class="line"> <span class="attr">"program"</span>: <span class="string">"${fileDirname}/${fileBasenameNoExtension}.exe"</span>,</span><br><span class="line"> <span class="attr">"args"</span>: [],</span><br><span class="line"> <span class="attr">"stopAtEntry"</span>: <span class="literal">false</span>,</span><br><span class="line"> <span class="attr">"cwd"</span>: <span class="string">"${fileDirname}"</span>,</span><br><span class="line"> <span class="attr">"environment"</span>: [],</span><br><span class="line"> <span class="attr">"externalConsole"</span>: <span class="literal">true</span>,</span><br><span class="line"> <span class="attr">"MIMode"</span>: <span class="string">"gdb"</span>,</span><br><span class="line"> <span class="attr">"miDebuggerPath"</span>: <span class="string">"F:/CMinGW/bin/gdb.exe"</span>,</span><br><span class="line"> <span class="attr">"preLaunchTask"</span>: <span class="string">"g++"</span>,</span><br><span class="line"> <span class="attr">"setupCommands"</span>: [</span><br><span class="line"> {</span><br><span class="line"> <span class="attr">"description"</span>: <span class="string">"Enable pretty-printing for gdb"</span>,</span><br><span class="line"> <span class="attr">"text"</span>: <span class="string">"-enable-pretty-printing"</span>,</span><br><span class="line"> <span class="attr">"ignoreFailures"</span>: <span class="literal">true</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><br></pre></td></tr></table></figure><figure class="highlight json"><figcaption><span>tasks.json</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> <span class="attr">"version"</span>: <span class="string">"2.0.0"</span>,</span><br><span class="line"> <span class="attr">"command"</span>: <span class="string">"g++"</span>,</span><br><span class="line"> <span class="attr">"args"</span>: [<span class="string">"-g"</span>,<span class="string">"${file}"</span>,<span class="string">"-o"</span>,<span class="string">"${fileDirname}/${fileBasenameNoExtension}.exe"</span>],</span><br><span class="line"> <span class="attr">"problemMatcher"</span>: {</span><br><span class="line"> <span class="attr">"owner"</span>: <span class="string">"cpp"</span>,</span><br><span class="line"> <span class="attr">"fileLocation"</span>: [<span class="string">"relative"</span>, <span class="string">"${workspaceRoot}"</span>],</span><br><span class="line"> <span class="attr">"pattern"</span>: {</span><br><span class="line"> <span class="attr">"regexp"</span>: <span class="string">"^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$"</span>,</span><br><span class="line"> <span class="attr">"file"</span>: <span class="number">1</span>,</span><br><span class="line"> <span class="attr">"line"</span>: <span class="number">2</span>,</span><br><span class="line"> <span class="attr">"column"</span>: <span class="number">3</span>,</span><br><span class="line"> <span class="attr">"severity"</span>: <span class="number">4</span>,</span><br><span class="line"> <span class="attr">"message"</span>: <span class="number">5</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="插件-v2"><a class="header-anchor" href="#插件-v2">☆</a>插件</h3><p><span id="font-blue"> C/C++ </span> :提供语言支持,debugging等功能。</p><p><span id="font-blue"> C++ Intellisense </span> :提供智能分析提示等。</p><h2 id="launch-json文件属性值详解-java举例"><a class="header-anchor" href="#launch-json文件属性值详解-java举例">☆</a>launch.json文件属性值详解(java举例)</h2><h3 id="launch"><a class="header-anchor" href="#launch">☆</a>Launch</h3><ul><li>mainClass (required): java 代码的 main 类 (例如:[mymodule/]com.xyz.MainClass).</li><li>args: 传递给程序的命令行参数</li><li>sourcePaths: 程序的额外源目录。默认情况下,调试器从项目设置中查找源代码。这个选项允许调试器在额外的目录中查找源代码</li><li>modulePaths: 用于启动JVM的模块路径。如果没有指定,调试器将自动从当前项目解析</li><li>classPaths: 启动JVM的类路径。如果没有指定,调试器将自动从当前项目解析</li><li>encoding: 该文件中的JVM的编码设置。如果没有指定,将使用’UTF-8’。在 Supported Encodings 中可以找到可能的值</li><li>vmArgs: JVM的额外选项和系统属性(例如:-Xms<size> -Xmx<size> -D<name>=<value>)</value></name></size></size></li><li>projectName: 调试器在其中搜索类的首选项目。在不同的项目中可能会有重复的类名。当调试器在启动程序时查找指定的主类时,这个设置也可以工作。表达式求值是必须的</li><li>cwd: 程序的工作目录</li><li>env: 程序的额外环境变量</li><li>stopOnEntry: 启动后自动暂停程序</li><li>console: 用于启动程序的指定控制台。默认为 internalConsole</li><li>internalConsole: VS Code Debug 控制台 (输入不被支持)</li><li>integratedTerminal: VS Code 集成终端</li><li>externalTerminal: 可以在用户设置中配置的外部终端</li><li>stepFilters: 在执行debug调试时,跳过指定的类或方法</li><li>classNameFilters: 跳过指定的类。类名应该完全限定,支持通配符</li><li>skipSynthetics: 跳过synthetic 方法</li><li>skipStaticInitializers: 跳过静态初始化方法</li><li>skipConstructors: 跳过构造方法</li></ul><h3 id="attach"><a class="header-anchor" href="#attach">☆</a>Attach</h3><ul><li>hostName (required): 远程调试器的主机名或IP地址</li><li>port (required): 远程调试器的debug端口</li><li>timeout: 重新连接之前的超时时间,以毫秒为单位(默认为30000ms)</li><li>sourcePaths: 程序的额外源目录。默认情况下,调试器从项目设置中查找源代码。这个选项允许调试器在额外的目录中查找源代码</li><li>projectName: 调试器在其中搜索类的首选项目。在不同的项目中可能会有重复的类名。当调试器在启动程序时查找指定的主类时,这个设置也可以工作</li><li>stepFilters: 在 debug 调试时,跳过指定的类或方法</li><li>classNameFilters: 跳过指定的类。类名应该完全限定,支持通配符</li><li>skipSynthetics: 跳过 synthetic 方法</li><li>skipStaticInitializers: 跳过静态初始化方法</li><li>skipConstructors: 跳过构造方法</li></ul><h3 id="user-settings"><a class="header-anchor" href="#user-settings">☆</a>User Settings</h3><ul><li>java.debug.logLevel: 发送到VS代码的调试器日志的最低级别,默认为警告</li><li>java.debug.settings.showHex: 在变量视图中以十六进制格式显示数字,默认为false</li><li>java.debug.settings.showStaticVariables: 在variables视图中显示静态变量,默认为true</li><li>java.debug.settings.showQualifiedNames: 在变量视图中显示完全限定的类名,默认为false</li><li>java.debug.settings.maxStringLength: 变量视图或调试控制台中显示的最大字符串长度。超过此长度的字符串将被裁剪。默认值为0,表示没有进行修剪</li><li>java.debug.settings.enableHotCodeReplace: 启用Java源代码的热代码替换。确保VScode 中的 Java 代码没有禁用自动构建。有关用法和限制的更多信息,请参阅 wiki page</li></ul><h2 id="后记"><a class="header-anchor" href="#后记">☆</a>后记</h2><p id="div-border-left-green">为了不违背轻量化的本质,只实现单文件执行,及简单的项目运行。复杂项目还是用IDE。如果啥IDE干的事儿啥都能干,和直接装一个IDE又有何区别???</p><h2 id="参考内容"><a class="header-anchor" href="#参考内容">☆</a>参考内容</h2><p><a href="https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes" target="_blank" rel="noopener">Launch.json attributes</a><br><a href="https://code.visualstudio.com/docs/java/java-tutorial" target="_blank" rel="noopener">Writing Java with Visual Studio Code</a><br><a href="https://code.visualstudio.com/docs/editor/variables-reference" target="_blank" rel="noopener">Variables Reference</a><br><a href="https://juejin.im/post/5ac193cd6fb9a028d208161c" target="_blank" rel="noopener">快速使用 vscode 进行 Java 编程</a></p>]]></content>
<summary type="html">
VScode配置C++/Java开发环境
</summary>
<category term="学习" scheme="http://www.singlelovely.cn/categories/%E5%AD%A6%E4%B9%A0/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
<category term="C/C++" scheme="http://www.singlelovely.cn/tags/C-C/"/>
</entry>
<entry>
<title>Ubuntu系统折腾记</title>
<link href="http://www.singlelovely.cn/post/1a300c2b.html"/>
<id>http://www.singlelovely.cn/post/1a300c2b.html</id>
<published>2019-02-17T11:54:00.000Z</published>
<updated>2020-09-21T13:41:07.542Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="换源"><a class="header-anchor" href="#换源">☆</a>换源</h2><p>Ubuntu18.04国内版默认的源地址为 <a href="http://cn.archive.ubuntu.com" target="_blank" rel="noopener">cn.archive.ubuntu.com</a> , ping结果显示归属地为英国,速度较慢,需要更换为国内的镜像地址。<br>使用如下命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line">//得到系统版本代号,防止更换错误</span><br><span class="line">lsb_release -c </span><br><span class="line"></span><br><span class="line">//备份原有源</span><br><span class="line">cp /etc/apt/sources.list /etc/apt/sources.list.backup</span><br></pre></td></tr></table></figure><p>清华大学镜像站: <a href="https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/" target="_blank" rel="noopener">https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/</a></p><p>阿里源</p><figure class="highlight js"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">deb http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span></span><br><span class="line">deb http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span></span><br><span class="line">deb http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span></span><br><span class="line">deb http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span></span><br><span class="line">deb http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span></span><br><span class="line">deb-src http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span></span><br><span class="line">deb-src http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span></span><br><span class="line">deb-src http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span></span><br><span class="line">deb-src http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span></span><br><span class="line">deb-src http:<span class="comment">//mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span></span><br></pre></td></tr></table></figure><p>更换完成后执行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update</span><br><span class="line">sudo apt-get upgrade</span><br></pre></td></tr></table></figure><h2 id="安装-span-id-font-red-ssr-span"><a class="header-anchor" href="#安装-span-id-font-red-ssr-span">☆</a>安装<span id="font-red">ssr</span></h2><p>桌面客户端下载:<a href="https://github.com/erguotou520/electron-ssr" target="_blank" rel="noopener">地址</a></p><p>参考:<a href="https://alanlee.fun/2018/05/18/ubuntu-ssr/" target="_blank" rel="noopener">教程</a></p><p>安装libsodium,用来支持chacha20系列加密方式</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/libsodium.sh && chmod +x libsodium.sh && bash libsodium.sh</span><br></pre></td></tr></table></figure><p><s>脚本来源:<a href="https://doubibackup.com/" target="_blank" rel="noopener">逗比根据地</a></s><br><img src="https://data.singlelovely.cn/images/20190313215256.png" alt><br>注意:装完libsodium后需要重启系统</p><h2 id="安装必备软件"><a class="header-anchor" href="#安装必备软件">☆</a>安装必备软件</h2><p>国外公司对Linux系统的支持还是比较好的,vscode、chrome等去官网下载deb包安装就行了</p><h2 id="安装国内软件"><a class="header-anchor" href="#安装国内软件">☆</a>安装国内软件</h2><p>国内的一些常用软件,微信,QQ等对Ubuntu的支持并不友好,Ubuntu版维护停止在多年以前,大多数已经不能使用,网上多数解决办法是通过网页版,网页版界面不友好操作麻烦,在此使用deepin深度定制的wine安装包。</p><p>github地址: <a href="https://github.com/wszqkzqk/deepin-wine-ubuntu" target="_blank" rel="noopener">https://github.com/wszqkzqk/deepin-wine-ubuntu</a></p><p>教程及演示: <a href="https://www.lulinux.com/archives/1319" target="_blank" rel="noopener">https://www.lulinux.com/archives/1319</a></p><p><img src="https://data.singlelovely.cn/images/20190329233059.png!CoverPicture" alt></p><p><img src="https://data.singlelovely.cn/images/20190329233016.png!CoverPicture" alt></p><h2 id="美化"><a class="header-anchor" href="#美化">☆</a>美化</h2><p><img src="https://data.singlelovely.cn/images/20190329232929.png!CoverPicture" alt></p><h3 id="终端及管理器安装"><a class="header-anchor" href="#终端及管理器安装">☆</a>终端及管理器安装</h3><p>打开终端,查看shell版本</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gnome-shell --version</span><br></pre></td></tr></table></figure><p>如无gnome shell 使用下面命令安装</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install gnome-shell</span><br></pre></td></tr></table></figure><p>然后安装 gnome-tweak 中文名为 优化</p><p>使用下面命令安装,或者在Ubuntu软件搜索<span id="inline-green">gnome-tweak</span>安装</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install gnome-tweak-tool</span><br></pre></td></tr></table></figure><h3 id="gnome-tweak-插件安装"><a class="header-anchor" href="#gnome-tweak-插件安装">☆</a>gnome-tweak 插件安装</h3><ul><li>通过Ubuntu软件商店搜索安装<ul><li>速度较慢,不推荐此方法</li></ul></li><li>通过<a href="extensions.gnome.org">官网</a>下载<ul><li>chrome浏览器需到应用商店安装 <span id="inline-green">GNOME Shell integration</span> 扩展程序</li><li>火狐浏览器根据页面提示执行</li></ul></li></ul><h3 id="推荐的插件"><a class="header-anchor" href="#推荐的插件">☆</a>推荐的插件</h3><ul><li>User Themes: 作用是从用户目录加载主题</li><li>Dash to Dock : 作用是制定Dock和Dash<ul><li>主题图标<a href="https://www.gnome-look.org/" target="_blank" rel="noopener">下载</a></li><li>主题目录:/usr/share/themes</li><li>sell主题目录:/usr/share/gnome-shell</li><li>图标包目录:/usr/share/icons</li></ul></li><li>TopIcons Plus : 起到了任务栏的作用,用来解决上面wine程序任务栏图标问题</li><li>Gnome-shell Extensions :通过Ubuntu软件商店安装 插件集合,一次性安装多个常用插件</li></ul><p><img src="https://data.singlelovely.cn/images/20190313215118.png" alt><br><img src="https://data.singlelovely.cn/images/20190313215028.png" alt></p><h3 id="参考教程"><a class="header-anchor" href="#参考教程">☆</a>参考教程</h3><p><a href="https://blog.csdn.net/weixin_38233274/article/details/80782483" target="_blank" rel="noopener">Ubuntu18.04美化及常用软件安装</a></p><p><a href="https://www.youtube.com/watch?v=B6oCQit90M8" target="_blank" rel="noopener">如何让Ubuntu美如画</a></p><p><a href="https://linux.cn/article-9447-1.html?pr" target="_blank" rel="noopener">GNOME Shell 详细指南</a></p><h2 id="网易云的安装及踩坑"><a class="header-anchor" href="#网易云的安装及踩坑">☆</a>网易云的安装及踩坑</h2><p>之所以要单独写一个网易云,实在是因为坑太多了,记录一下,以防万一</p><h3 id="安装"><a class="header-anchor" href="#安装">☆</a>安装</h3><p>去官网下载安装包,通过<span id="inline-blue">sudo dpkg -i</span>安装</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo dpkg -i netease-cloud-music_1.1.0_amd64_ubuntu.deb</span><br></pre></td></tr></table></figure><p>上面的操作可能会出错,一般来说就是依赖的软件环境不完整,执行以下命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get -f install</span><br></pre></td></tr></table></figure><h3 id="启动"><a class="header-anchor" href="#启动">☆</a>启动</h3><p>在软件中能看到网易云音乐的图标,可是点击运行之后却没有任何窗口出现。</p><p>通过终端进行启动</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">netease-cloud-music</span><br></pre></td></tr></table></figure><p>发现报错并卡住</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Gtk-Message: 12:02:46.607: Failed to load module <span class="string">"canberra-gtk-module"</span></span><br></pre></td></tr></table></figure><p>安装相应依赖,不安装依赖通过 <span id="inline-blue">sudo netease-cloud-music</span> 也能启动,但是控制台会有报错信息</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install libcanberra-gtk*</span><br></pre></td></tr></table></figure><p>结果安装依赖后还是得通过 <span id="inline-blue">sudo netease-cloud-music</span> 启动,并且不能关闭终端窗口</p><h3 id="问题解决"><a class="header-anchor" href="#问题解决">☆</a>问题解决</h3><p>以上方法虽然能够使网易云音乐运行,但每次都需要打开一个终端不能关闭,让有轻微强迫症的我看了觉得很不舒服。</p><div class="note success"><span id="font-blue">启动密籍:</span>双击网易云音乐图标后,点击关机,十秒内就出现界面(此方法实测可用)</div><p>方法2(请自行测试):<br>在~目录下新建一个脚本<span id="inline-blue">.netease.sh</span>,该脚本的内容如下(注意更换password):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">"password"</span> | sudo -S netease-cloud-music &</span><br><span class="line">sleep 0.1</span><br><span class="line"><span class="built_in">exit</span></span><br></pre></td></tr></table></figure><p>编辑~/.bashrc,在末尾增加了一行:</p><blockquote><p>alisa netease=". .netease.sh"</p></blockquote><h2 id="deb包安装方式"><a class="header-anchor" href="#deb包安装方式">☆</a>deb包安装方式</h2><ul><li><p>双击打开安装</p><ul><li>通过Ubuntu自带的软件管理器安装</li><li>容易出现依赖错误</li><li>安装速度慢</li><li>出错后报错信息不明确</li></ul></li><li><p>通过命令 <span id="inline-blue">sudo dpkg -i</span> 安装</p></li></ul><h2 id="双系统下无法访问win磁盘问题"><a class="header-anchor" href="#双系统下无法访问win磁盘问题">☆</a>双系统下无法访问win磁盘问题</h2><h3 id="方法一"><a class="header-anchor" href="#方法一">☆</a>方法一</h3><p>通过win系统重启进入ubuntu系统</p><h3 id="方法二"><a class="header-anchor" href="#方法二">☆</a>方法二</h3><p>执行以下命令,记得加磁盘分区号(如果执行前已挂载磁盘需要先卸载,执行完毕重新挂载即可)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo ntfsfix /dev/sda or sudo ntfsfix /dev/nvmeOn</span><br></pre></td></tr></table></figure><h2 id="pppoe-拨号上网"><a class="header-anchor" href="#pppoe-拨号上网">☆</a>PPPoE 拨号上网</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装 pppoeconf</span></span><br><span class="line">sudo apt install pppoeconf</span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo pppoeconf</span><br><span class="line"><span class="comment"># 手动连接</span></span><br><span class="line">sudo pon dsl-provider</span><br><span class="line"><span class="comment"># 手动断开</span></span><br><span class="line">sudo poff dsl-provider</span><br><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">sudo plog</span><br><span class="line"><span class="comment"># 查看接口信息</span></span><br><span class="line">sudo ip addr show ppp0</span><br></pre></td></tr></table></figure><p>注意:不适用于需要客户端的登陆方式,因为客户端一般都有二次验证</p>]]></content>
<summary type="html">
美化和必备软件安装
</summary>
<category term="系统" scheme="http://www.singlelovely.cn/categories/%E7%B3%BB%E7%BB%9F/"/>
<category term="Ubuntu" scheme="http://www.singlelovely.cn/tags/Ubuntu/"/>
<category term="Linux" scheme="http://www.singlelovely.cn/tags/Linux/"/>
</entry>
<entry>
<title>JavaScript笔记</title>
<link href="http://www.singlelovely.cn/post/2b866d21.html"/>
<id>http://www.singlelovely.cn/post/2b866d21.html</id>
<published>2019-02-12T08:25:00.000Z</published>
<updated>2020-09-21T13:41:07.516Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="变量"><a class="header-anchor" href="#变量">☆</a>变量</h2><p>保留字</p><table><thead><tr><th>abstract</th><th>delete</th><th>goto</th><th>null</th><th>throws</th></tr></thead><tbody><tr><td>as</td><td>do</td><td>if</td><td>package</td><td>transient</td></tr><tr><td>boolean</td><td>double</td><td>implements</td><td>private</td><td>true</td></tr><tr><td>break</td><td>else</td><td>import</td><td>protected</td><td>try</td></tr><tr><td>byte</td><td>enum</td><td>in</td><td>public</td><td>typeof</td></tr><tr><td>case</td><td>export</td><td>instanceof</td><td>return</td><td>use</td></tr><tr><td>catch</td><td>extends</td><td>int</td><td>short</td><td>var</td></tr><tr><td>char</td><td>false</td><td>interface</td><td>static</td><td>void</td></tr><tr><td>class</td><td>final</td><td>is</td><td>super</td><td>volatile</td></tr><tr><td>continue</td><td>finally</td><td>long</td><td>switch</td><td>while</td></tr><tr><td>const</td><td>float</td><td>namespace</td><td>synchronized</td><td>with</td></tr><tr><td>debugger</td><td>for</td><td>native</td><td>this</td><td></td></tr><tr><td>default</td><td>function</td><td>new</td><td>throw</td><td></td></tr></tbody></table><p>使用 <code>const</code> 声明的变量称为“常量”。它们不能被修改。</p><h3 id="总结"><a class="header-anchor" href="#总结">☆</a>总结</h3><ul><li><code>let</code> – 新时代的变量声明方式。Chrome(V8)中代码必须开启严格模式以使用 let。</li><li><code>var</code> – 旧时代的变量声明方式。</li><li><code>const</code> – 类似于let,但是变量的值无法被修改。</li></ul><h2 id="数据类型"><a class="header-anchor" href="#数据类型">☆</a>数据类型</h2><p>七种基本的类型:</p><ul><li><code>number</code> 用于任何类型的数字:整数或者浮点数。</li><li><code>string</code> 用于字符串。一个字符串可以包含一个或多个字符,所以没有单独的单字符类型。</li><li><code>boolean</code> 用于 <code>true</code> 和 <code>false</code>。</li><li><code>null</code> 用于未知的值 —— 只有一个 <code>null</code> 值的独立类型。</li><li><code>undefined</code> 用于未定义的值 —— 只有一个 <code>undefined</code> 值的独立类型。</li><li><code>object</code> 用于更复杂的数据结构。</li><li><code>symbol</code> 用于唯一的标识符。</li></ul><p>typeof 运算符可以查看变量的类型。</p><ul><li>两种形式:<code>typeof x</code> 或者 <code>typeof(x)</code>。</li><li>返回的类型的字符串,比如 <code>"string"</code>。</li><li><code>null</code> 返回 <code>"object"</code> —— 这是语言中的一个错误,实际上它并不是一个对象。</li></ul><p>JavaScript 中的 <code>null</code> 不是一个“对不存在对象的引用”或者 “null 指针”。</p><p>仅仅是一个含义为“无”、“空”或“值未知”的特殊值。</p><h2 id="类型转换"><a class="header-anchor" href="#类型转换">☆</a>类型转换</h2><p>有三种常用的类型转换:转换为 string 类型、转换为 number 类型和转换为 boolean 类型。</p><p>ToString —— 输出内容时 ToString 发生转换,或通过 String(value) 进行显式转换。原始类型值的 string 类型转换通常是可预见的。</p><p>ToNumber – 进行算术操作时发生 ToNumber 转换,或通过 Number(value) 进行显式转换。</p><p>ToNumber 转换遵循以下规则:</p><table><thead><tr><th>值</th><th>变成…</th></tr></thead><tbody><tr><td>undefined</td><td>NaN</td></tr><tr><td>null</td><td>0</td></tr><tr><td>true / false</td><td>1 / 0</td></tr><tr><td>string</td><td>字符串“按原样读取”,两端的空白被忽略。空字符串变成 0。出错变成 NaN。</td></tr></tbody></table><p>ToBoolean – 进行逻辑操作时发生 ToBoolean 转换。或通过 Boolean(value) 进行显式转换。</p><p>ToBoolean 遵循以下规则:</p><table><thead><tr><th>值</th><th>变成…</th></tr></thead><tbody><tr><td>0, null, undefined, NaN, “”</td><td>false</td></tr><tr><td>其他值</td><td>true</td></tr></tbody></table><ul><li>undefined 进行 ToNumber 时变成 NaN,而非 0。</li><li>“0” 和只有空格的字符串(比如:" " )在进行 ToBoolean 变成 true。</li></ul><h2 id="值的比较"><a class="header-anchor" href="#值的比较">☆</a>值的比较</h2><ul><li>字符串比较时按位比较</li><li>若直接比较两个值,其结果是相等的。</li><li>若把两个值转为布尔值,它们可能得出完全相反的结果,即 true 和 false。</li></ul><p>示例:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> a = <span class="number">0</span>;</span><br><span class="line">alert( <span class="built_in">Boolean</span>(a) ); <span class="comment">// false</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> b = <span class="string">"0"</span>;</span><br><span class="line">alert( <span class="built_in">Boolean</span>(b) ); <span class="comment">// true</span></span><br><span class="line"></span><br><span class="line">alert(a == b); <span class="comment">// true!</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> c = (<span class="string">"2"</span> > <span class="string">"12"</span>);<span class="comment">//字符串比较</span></span><br><span class="line">alert(<span class="string">"c = "</span> + c);<span class="comment">//true</span></span><br></pre></td></tr></table></figure><p>对于 JavaScript 而言这种现象蛮正常的,因为它会把待比较的值转为数字后再做比较(因此 “0” 变成了 0 )。若只是将一个变量转为 Boolean,则会使用其他的类型转换规则。</p><p>普通的相等性检查 == 存在一个问题,它不能区分出 0 和 false:</p><blockquote><p>alert( 0 == false ); // true</p></blockquote><p>也同样无法区分空字符串和 false:</p><blockquote><p>alert( ‘’ == false ); // true</p></blockquote><p>这是因为在比较不同类型的值时,处于相等判断符号 == 两侧的值会被转换为数字的原因。空字符串和 false 也是如此,转换后它们都等于 0。</p><h3 id="严格相等操作符-在进行比较时不会做任何的类型转换"><a class="header-anchor" href="#严格相等操作符-在进行比较时不会做任何的类型转换">☆</a>严格相等操作符 === 在进行比较时不会做任何的类型转换。</h3><p><code>undefined</code> 和 <code>null</code> 在相等性检测 <code>==</code> 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外不会等于任何其他的值。</p><h3 id="小结"><a class="header-anchor" href="#小结">☆</a>小结</h3><ul><li>比较操作符始终返回逻辑值。</li><li>字符串间按“词典”顺序逐字符比较大小。</li><li>当待比较的值类型不同时,它们会被转为数字(不包括严格相等检测)进行比较。</li><li>在非严格相等 <code>==</code> 下,<code>null</code> 和 <code>undefined</code> 相等且各自不等于任何其他的值。</li><li>在使用 <code>></code> 或 <code><</code> 进行比较时,需要注意变量可能为 <code>null/undefined</code> 的情况。比较好的方法是单独检查变量是否等于 <code>null/undefined</code>。</li></ul><h2 id="交互"><a class="header-anchor" href="#交互">☆</a>交互</h2><p>alert 弹出显示信息。</p><p>prompt 要求用户输入文本,确定返回文本,取消返回<code>null</code>。</p><p>confirm 显示信息等待确定或取消,确定返回<code>true</code>取消返回<code>false</code>。</p><h2 id="三元运算符"><a class="header-anchor" href="#三元运算符">☆</a>三元运算符 ‘?’</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> result = condition ? value1 : value2</span><br></pre></td></tr></table></figure><p>计算条件结果,如果结果为真,则返回 <code>value1</code>,否则返回 <code>value2</code>。</p><p>Java中同样适用</p><p>使用一系列问号 ? 运算符可以返回一个取决于多个条件的值。</p><p>例如:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> age = prompt(<span class="string">'age?'</span>, <span class="number">18</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> message = (age < <span class="number">3</span>) ? <span class="string">'Hi, baby!'</span> :</span><br><span class="line"> (age < <span class="number">18</span>) ? <span class="string">'Hello!'</span> :</span><br><span class="line"> (age < <span class="number">100</span>) ? <span class="string">'Greetings!'</span> :</span><br><span class="line"> <span class="string">'What an unusual age!'</span>;</span><br><span class="line"></span><br><span class="line">alert( message );</span><br></pre></td></tr></table></figure><h2 id="use-strict-新模式"><a class="header-anchor" href="#use-strict-新模式">☆</a>“use strict” 新模式</h2><p>2009 年 ECMAScript 5 (ES5) 的出现。ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能能够使用,大部分的修改是默认不生效的。需要一个特殊的指令 —— <code>"use strict"</code> 来明确地使用这些特性。</p><ul><li>请确保 <code>"use strict"</code> 出现在脚本的最顶部,否则严格模式可能无法启用。</li><li>没有类似于 <code>"no use strict"</code> 这样的指令,这会返回原来的默认模式。</li></ul><h2 id="函数"><a class="header-anchor" href="#函数">☆</a>函数</h2><ul><li>对于有参函数,如未传入参数,则默认值为 <code>undefined</code></li><li>如函数无返回值,则返回<code>undefined</code></li><li>空<code>return</code> 和 <code>return undefined</code> 一样</li></ul><h3 id="函数命名"><a class="header-anchor" href="#函数命名">☆</a>函数命名</h3><p>一种普遍的做法是用动词前缀来开始一个函数,这个前缀模糊地描述了这个动作。团队内部必须就前缀的含义达成一致。</p><ul><li><code>"get…"</code> —— 返回值,</li><li><code>"calc…"</code> —— 计算</li><li><code>"create…"</code> —— 创建,</li><li><code>"check…"</code> —— 检查并返回 boolean 值,等。</li></ul><h3 id="练习"><a class="header-anchor" href="#练习">☆</a>练习</h3><p>使用 ‘?’ 或者 ‘||’ 重写函数</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">checkAge</span>(<span class="params">age</span>) </span>{</span><br><span class="line"> <span class="keyword">if</span> (age > <span class="number">18</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> confirm(<span class="string">'Do you have your parents permission to access this page?'</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">checkAge</span>(<span class="params">age</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> (age > <span class="number">18</span>) ? <span class="literal">true</span> : confirm(<span class="string">'Did parents allow you?'</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">checkAge</span>(<span class="params">age</span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> (age > <span class="number">18</span>) || confirm(<span class="string">'Did parents allow you?'</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>写一个函数 pow(x,n),在 n 中返回 x。或者换句话说,将 x 与自身相乘 n 次,然后返回结果。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">pow</span>(<span class="params">x,n</span>)</span>{</span><br><span class="line"> <span class="keyword">let</span> result = x;</span><br><span class="line"> <span class="keyword">while</span> (n><span class="number">1</span>){</span><br><span class="line"> result *= x;</span><br><span class="line"> n--;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="逻辑运算符"><a class="header-anchor" href="#逻辑运算符">☆</a>逻辑运算符</h2><h3 id="或运算寻找第一个真值"><a class="header-anchor" href="#或运算寻找第一个真值">☆</a>或运算寻找第一个真值</h3><blockquote><p>result = value1 || value2 || value3;</p></blockquote><ul><li>从左到右依次计算操作数。</li><li>将每一个操作数转化为布尔值。如果结果是 true,就停止计算,返回这个操作数的初始值。</li><li>如果所有的操作数都被计算过(也就是,转换结果都是 false),返回最后一个操作数。</li></ul><p>例1:获取变量列表或者表达式的第一个真值</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> currentUser = <span class="literal">null</span>;</span><br><span class="line"><span class="keyword">let</span> defaultUser = <span class="string">"John"</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> name = currentUser || defaultUser || <span class="string">"unnamed"</span>;</span><br><span class="line"></span><br><span class="line">alert( name ); <span class="comment">// 选出了 “John” - 第一个真值</span></span><br></pre></td></tr></table></figure><p>例2:短路取值</p><figure class="highlight js"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> x;</span><br><span class="line"></span><br><span class="line">!<span class="literal">true</span>! || (x = <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line">alert(x); <span class="comment">// undefined,因为 (x = 1) 没有被执行</span></span><br></pre></td></tr></table></figure><h3 id="与操作寻找第一个假值"><a class="header-anchor" href="#与操作寻找第一个假值">☆</a>与操作寻找第一个假值</h3><blockquote><p>result = value1 && value2 && value3;</p></blockquote><ul><li>从左到右依次计算操作数。</li><li>将每一个操作数转化为布尔值。如果结果是 false,就停止计算,返回这个操作数的初始值。</li><li>如果所有的操作数都被计算过(也就是,转换结果都是 true),返回最后一个操作数。</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">alert( <span class="number">1</span> && <span class="number">2</span> && <span class="literal">null</span> && <span class="number">3</span> ); <span class="comment">// null</span></span><br><span class="line"></span><br><span class="line">alert( <span class="number">1</span> && <span class="number">2</span> && <span class="number">3</span> ); <span class="comment">// 3,最后一个值</span></span><br></pre></td></tr></table></figure><p>与运算 <code>&&</code> 的优先级比或运算 <code>||</code> 要高</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alert( <span class="number">5</span> || <span class="number">1</span> && <span class="number">0</span> ); <span class="comment">// 5</span></span><br></pre></td></tr></table></figure><h3 id="练习题"><a class="header-anchor" href="#练习题">☆</a>练习题</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">alert( <span class="literal">null</span> || <span class="number">2</span> && <span class="number">3</span> || <span class="number">4</span> ); <span class="comment">//3</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 执行。</span></span><br><span class="line"><span class="comment">// -1 || 0 的结果为 -1,真值</span></span><br><span class="line"><span class="keyword">if</span> (<span class="number">-1</span> || <span class="number">0</span>) alert( <span class="string">'first'</span> );</span><br><span class="line"></span><br><span class="line"><span class="comment">// 不执行。</span></span><br><span class="line"><span class="comment">// -1 && 0 = 0,假值</span></span><br><span class="line"><span class="keyword">if</span> (<span class="number">-1</span> && <span class="number">0</span>) alert( <span class="string">'second'</span> );</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">// 所以 -1 && 1 先执行,给出如下运算链:</span></span><br><span class="line"><span class="comment">// null || -1 && 1 -> null || 1 -> 1</span></span><br><span class="line"><span class="keyword">if</span> (<span class="literal">null</span> || <span class="number">-1</span> && <span class="number">1</span>) alert( <span class="string">'third'</span> );</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
随便写写
</summary>
<category term="学习" scheme="http://www.singlelovely.cn/categories/%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>Java面试题(持续更新)</title>
<link href="http://www.singlelovely.cn/post/d2fd1f13.html"/>
<id>http://www.singlelovely.cn/post/d2fd1f13.html</id>
<published>2019-02-01T14:45:00.000Z</published>
<updated>2020-09-21T13:41:07.529Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="为什么集合类没有实现cloneable和serializable接口?"><a class="header-anchor" href="#为什么集合类没有实现cloneable和serializable接口?">☆</a>为什么集合类没有实现Cloneable和Serializable接口?</h2><blockquote><p>克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。</p></blockquote><p>实现Serializable序列化的作用</p><ul><li>将对象的状态保存在存储媒体中以- 便可以在以后重写创建出完全相同的副本;</li><li>按值将对象从一个从一个应用程序域发向另一个应用程序域。</li></ul><p>实现 Serializable接口的作用就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没有序列化,怎么才能进行网络传输呢?要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化。如果你不需要分布式应用,那就没必要实现实现序列化。</p><h2 id="什么是迭代器-iterator-?"><a class="header-anchor" href="#什么是迭代器-iterator-?">☆</a>什么是迭代器(Iterator)?</h2><p>Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object Obj)删除,可以通过迭代器的remove()方法删除。</p>]]></content>
<summary type="html">
不断的重复造轮子······
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>网络安全复习</title>
<link href="http://www.singlelovely.cn/post/d3217c3b.html"/>
<id>http://www.singlelovely.cn/post/d3217c3b.html</id>
<published>2018-11-18T10:51:08.000Z</published>
<updated>2020-09-21T13:41:07.553Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-LmOUnTJj" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="2426530028" data-server="netease" data-type="playlist" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h1>第一章 网络安全特性概述</h1><h3 id="网络安全含义"><a class="header-anchor" href="#网络安全含义">☆</a>网络安全含义</h3><p><span id="inline-blue">网络安全</span>泛指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改和泄漏,系统能够连续可靠正常地运行,网络服务不被中断。</p><p>网络安全的内容包括系统安全和信息安全两部分。</p><ul><li>系统安全主要指网络设备的硬件、操作系统和应用软件的安全。</li><li>信息安全主要指各种信息的存储、传输安全,具体体现在信息的保密性、完整性及不可抵赖性方面。</li></ul><p>从内容看,网络安全大致包括4个方面 :</p><p><span id="inline-toc">1.</span> 物理实体安全 :设备安全;存储介质安全;环境安全</p><p><span id="inline-toc">2.</span> 软件安全:</p><ul><li>软件本身是安全的;</li><li>保护网络系统不被非法侵入,系统软件与应用软件不被非法复制、篡改、不受病毒的侵害等。</li></ul><p><span id="inline-toc">3.</span> 数据安全</p><ul><li>保护网络中数据不被非法存取和破坏,确保其完整性和机密性。</li></ul><p><span id="inline-toc">4.</span> 安全管理</p><ul><li>网络安全管理是以保护网络安全技术为基础,配以行政手段的管理活动。</li></ul><h3 id="两种网络安全基本模型与攻击方式"><a class="header-anchor" href="#两种网络安全基本模型与攻击方式">☆</a>两种网络安全基本模型与攻击方式</h3><ul><li>网络安全基本模型:通信主体双方、攻击者、可信第三方。</li><li>P2DR模型:Policy策略,Protection防护、Detection检测、Response响应</li></ul><h3 id="网络攻击类型"><a class="header-anchor" href="#网络攻击类型">☆</a>网络攻击类型</h3><p><span id="inline-toc">1.</span> 被动攻击</p><ul><li>只是窃听或监视数据传输,即取得中途的信息,这里的被动指攻击者不对数据进行任何修改。</li></ul><p><span id="inline-toc">2.</span> 主动攻击</p><ul><li>是指以某种方式修改消息内容或生成假消息。这种攻击很难防止,但容易被发现和恢复。这些攻击包括中断、篡改和伪造。</li></ul><h3 id="网络安全的服务与机制"><a class="header-anchor" href="#网络安全的服务与机制">☆</a>网络安全的服务与机制</h3><h4 id="五大网络安全服务"><a class="header-anchor" href="#五大网络安全服务">☆</a>五大网络安全服务</h4><ul><li>鉴别服务:<ul><li>对对方实体的合法性、真实性进行确认,以防假冒。这里的实体可以是用户或代表用户的进程。</li></ul></li><li>访问控制服务:<ul><li>用于防止未授权用户非法使用系统资源。它包括用户身份认证,用户的权限确认。</li><li>在实际网络安全的应用中,为了提高效率,这种保护服务常常提供给用户组,而不是单个用户。</li></ul></li><li>数据完整性服务:<ul><li>阻止非法实体对交换数据的修改、插入和删除。</li></ul></li><li>数据保密性服务:<ul><li>防止网络中各个系统之间交换的数据被截获或被非法存取而造成泄密,提供加密保护。</li></ul></li><li>抗抵赖性服务:<ul><li>防止发送方在发送数据后否认自己发送过此数据,接收方在收到数据后否认自己收到过此数据或伪造接收数据。</li></ul></li></ul><h4 id="八大网络安全机制"><a class="header-anchor" href="#八大网络安全机制">☆</a>八大网络安全机制</h4><ul><li>加密机制:<ul><li>提供信息保密的核心方法,分为对称密钥算法和非对称密钥算法。</li></ul></li><li>访问控制机制:<ul><li>通过对访问者的有关信息进行检查来限制或禁止访问者使用资源的技术。</li><li>访问控制还可以直接支持数据机密性、数据完整性、可用性,以及合法使用的安全目标。</li></ul></li><li>数据完整性机制:<ul><li>指数据不被增删改</li></ul></li><li>数字签名机制:<ul><li>作用类似于我们现实生活中的手写签名,具有鉴别作用。</li></ul></li><li>交换鉴别机制:<ul><li>通过互相交换信息的方式来确定彼此身份。</li></ul><ul><li>用于交换鉴别的常用技术有以下几种:<ul><li>①口令,②密码技术,③特征实物,如指纹、声音频谱等</li></ul></li></ul></li><li>公证机制:<ul><li>通过公证机构中转双方的交换信息,并提取必要的证据,日后一旦发生纠纷,就可以据此做出仲裁。</li></ul></li><li>流量填充机制:<ul><li>提供针对流量分析的保护,流量填充的实现方法是:随机生成数据并对其加密,再通过网络发送。</li></ul></li><li>路由控制机制:<ul><li>使得可以指定通过网络发送数据的路径。</li></ul></li></ul><h1>第三章 网络可用性实现机制与评价</h1><p><span id="inline-blue">网络可用性</span>是指网络可以提供正确服务的能力,它是为可修复系统提出的,是对系统服务正常和异常状态交互变化过程的一种量化,是网络可以被使用的概率。系统可靠性越高,可维护性越好则可用性越高。<br>可靠性:提供正确服务的连续性,描述为系统在一个特定时间内能持续执行特定任务的概率,侧重分析服务正常运行的连续性。</p><h3 id="网络可用性保障机制"><a class="header-anchor" href="#网络可用性保障机制">☆</a>网络可用性保障机制</h3><ul><li>网络可靠性+网络可维护性<ul><li>网络可靠性:避错机制+容错机制<ul><li>避错:通过改进硬件的制造工艺和设计,选择技术成熟可靠的软硬件等策略来防止网络系统的错误产生。</li><li>硬件避错+软件避错+管理避错</li><li>容错:在网络系统出错的情况下,通过外加冗余资源消除单点故障的措施使系统仍然能够正常工作。为了提高网络系统中的平均故障间隔时间,通过冗余手段来实现系统可靠性。</li><li>硬件容错+软件容错+管理容错。</li></ul></li><li>网络可维护性:快速检错+快速排错<ul><li>检错:在网络出现故障时,故障管理系统能即使发现故障部位和原因。- 故障检测+故障诊断</li><li>排错:网络出现故障时,逐一排除故障,恢复系统的可用性。</li><li>分层故障排错法+分块故障排错法+分段故障排错法+替换法</li></ul></li></ul></li></ul><h3 id="网络可用性a计算公式"><a class="header-anchor" href="#网络可用性a计算公式">☆</a>网络可用性A计算公式</h3><pre><code>A=MTBF/(MTBF+MTTR)x100%</code></pre><p><span id="inline-purple">MTBF:</span>平均无故障时间,反映网络系统的可靠性,取决于网络设备硬件和软件本身的质量,可靠性越高设备成本越高<br><span id="inline-purple">MTTR:</span>平均修复时间,反映网络系统的可维护性,在MTBF一定的情况下,MTTR越小网络的可用性越大</p><h3 id="网络可用性量化评估的基本方法"><a class="header-anchor" href="#网络可用性量化评估的基本方法">☆</a>网络可用性量化评估的基本方法</h3><p>如果平均无故障时间(MTBF)远大于平均修复时间(MTTR),那么系统的可用性将很高。</p><p>如果平均修复时间很小,那么可用性也将很高。</p><p>如果可靠性下降(MTBF变小),那么就需要减小MTTR (提高可维护性)才能达到同样的可用性。</p><p>对一定的可用性,如果可靠性增长了,可维护性就不那么重要了。</p><p>所以可以在可靠性和可维护性之间做出平衡来达到同样的可用性目的。</p><h3 id="设备串联形成的系统可用性评估方法"><a class="header-anchor" href="#设备串联形成的系统可用性评估方法">☆</a>设备串联形成的系统可用性评估方法</h3><p>设网络串联系统是由n个网络设备串联而成的,只要有一个设备不可用系统就是不可用的。</p><p>假设整个系统的可用性是A,每个设备的可靠性为A<sub>i</sub>,整个系统可用是指系统中的每个设备都必须可用,其计算公式如下:</p><p><img src="https://data.singlelovely.cn/xsj/2018/11/23/%E5%9B%BE%E7%89%8711.png" alt=" "></p><p>n个设备串联的可用性会随着设备串联结构的增多越来越低,例如,假设每个设备可用性值是0.99,5个设备串联后的可用性接近0.95,10 个设备串联后的可用性就已经接近0.9。</p><h3 id="设备并联形成的系统可用性评估方法"><a class="header-anchor" href="#设备并联形成的系统可用性评估方法">☆</a>设备并联形成的系统可用性评估方法</h3><p>为增加系统的可用性,将多个设备并联起来,n个网络设备并联的可用性是指:</p><ul><li><p>在并联系统中,多个并联设备同时运行工作,只要有一个设备正常工作系统就是可用的。</p></li><li><p>在并联系统中只有一个子系统是真正需要的,其余n-1个子系统都被称为冗余子系统。</p></li><li><p>系统随着冗余子系统数量的增加,其平均无故障时间(MTBF)也随着增加。这样的并联结构的冗余的代价也是很高的。</p></li></ul><p>整个系统的可用性是A,每个设备的可靠性为A<sub>i</sub>,计算公式如下:</p><p><img src="https://data.singlelovely.cn/xsj/2018/11/23/%E5%9B%BE%E7%89%8722.png" alt=" "></p><h1>第四章 网络访问的可控性实现机制与评价</h1><h3 id="网络安全中网络访问的可控性概述"><a class="header-anchor" href="#网络安全中网络访问的可控性概述">☆</a>网络安全中网络访问的可控性概述</h3><ul><li>网络访问的可控性:指控制网络信息的流向及用户的行为方式,是对所管辖的网络、主机和资源的访问行为进行有效的控制和管理。</li><li>访问控制机制是网络安全的一种解决方案,在计算机网络安全中,有四类安全特性与访问控制有直接和间接关系:<ul><li>用户的可鉴别性、数据保密性、数据的完整性、网络的可用性</li></ul></li></ul><h3 id="防火墙含义"><a class="header-anchor" href="#防火墙含义">☆</a>防火墙含义</h3><p>防火墙:在两个网络之间执行访问控制策略的一个或一组安全系统,可对整个网络进行访问控制。是一种计算机硬件和软件系统集合,是实现网络安全策略的有效工具之一。</p><div class="note primary">分为硬件防火墙和软件防火墙。</div><p>常说的防火墙通指硬件防火墙</p><p><span id="inline-blue">硬件防火墙:</span>路由器、计算机或二者的组合配上具有过滤功能的软件形成,软硬件结合打到隔离内外部网络的目的。价格较贵,效果较好</p><p><span id="inline-blue">软件防火墙:</span>用纯软件的方式实现防火墙功能,价格便宜,但只能通过一定的规则来打到限制一些非法用户访问内部网的目的。</p><p>防火墙技术<br><span id="font-green">防火墙基本技术</span>包括<span id="inline-green">包过滤技术</span>、<span id="inline-green">代理服务技术</span>和<span id="inline-green">NAT技术</span>。</p><p><span id="inline-toc">1.</span><span id="inline-green">包过滤:</span>通过拦截数据包过滤掉不应入网的信息。在网络的出入口(如路由器上)对通过的数据包进行检测,满足条件的数据包才允许通过,否则抛弃。优点:用一个放在重要位置的包过滤路由器即可保护整个网络;不需用户软件支持,也不要对客户机进行特殊设置。缺点:配置包过滤规则比较困难,常会忽略建立一些必要规则,或错误配置了已有的规则,且易产生难以发现的冲突。</p><p><span id="inline-toc">2.</span><span id="inline-green">代理服务技术:</span>又称应用级网关,建立协议过滤和转发功能。包过滤只是在网络层拦截所有的信息流,代理服务可以进行身份认证等包过滤没有的控制功能,能力强,缺点是对用户不透明,速度慢。</p><p><span id="inline-toc">3.</span><span id="inline-green">NAT:</span><span id="font-green">网络地址转换技术:</span>通过有限的全球唯一的IP地址(外部地址)作为中继,使计算机网内部使用的非全球位移的IP地址(内部地址)可以对Internet进行透明访问。打到屏蔽内部地址的作用,提高网络安全性,解决地址紧缺的问题。外部主机对内部主机的内部地址进行直接访问是不可能的,因此提高了网络安全性。</p><h3 id="防火墙体系结构"><a class="header-anchor" href="#防火墙体系结构">☆</a>防火墙体系结构</h3><p>防火墙体系结构一般有四种,安全程度递增的:过滤路由器结构、双穴主机结构、主机过滤结构、子网过滤结构。</p><p><span id="inline-toc">1. </span>过滤路由器结构:最简单的防火墙结构,可以由厂家专门生产的过滤路由器来实现,也可由安装了具有过滤功能软件的普通路由器实现。过滤路由器防火墙作为内外连接的唯一通道,要求所有的报文都必须在此通过检查。</p><p><span id="inline-toc">2. </span>双穴主机结构:围绕具有双重宿主的主机而构筑的。计算机至少有两个网络接口,同时连接两个不同的网络,这样的主机可以充当与这些接口相连的网络之间的路由器,并能够从一个网络到另一个网络发送IP数据包。防火墙内部的网络系统能与双重宿主主机通信,同时防火墙外部在Internet上的网络系统也能与双重宿主主机通信。通过双重宿主主机进行控制和代理,防火墙内外的计算机便可进行通信。</p><p><span id="inline-toc">3. </span>主机过滤结构:由内部网中提供安全保障的主机(堡垒主机),加上一台单独的过滤路由器,一起构成该结构的防火墙。它既有主机控制又有路由器过滤,因此称为主机过滤结构。又分为单宿堡垒主机和双宿堡垒主机,单宿堡垒主机只有一个网卡连接在内部网上,双宿堡垒主机有两个网卡:一个连接在内部网上,另一个连接在路由器上,具有更好的安全性。</p><p><span id="inline-toc">4. </span>子网过滤结构:添加了额外的安全层到主机过滤体系结构中,即通过添加一个称为参数网络的网络,更进一步地把内部网络与Internet隔离开。</p><h3 id="系统资源访问控制的分类"><a class="header-anchor" href="#系统资源访问控制的分类">☆</a>系统资源访问控制的分类</h3><p><span id="inline-toc">1.</span>访问控制的方式:分为自主访问控制和强制访问控制。</p><p><span id="inline-purple">自主访问控制:</span>允许用户可以自主地在系统中规定谁可以存取它拥有的资源实体。有权访问且可以授权或收权其他用户。可以非常灵活地对策略进行调整。由于其易用性与可扩展性,自主访问控制机制经常被用于商业系统。</p><p><span id="inline-purple">强制访问控制:</span>用户权限和文件安全属性都是固定的,由系统决定一个用户对某个客体能否实行访问。</p><p><span id="inline-toc">2.</span>访问控制的主体:分为基于用户的访问控制和基于角色的访问控制。</p><p><span id="inline-purple">基于用户:</span>指每个用户都分配其权限,缺点是用户太多,可扩展性差。</p><p><span id="inline-purple">基于角色:</span>是在用户和访问许可权之间引入角色的概念,用户与特定的一个或多个角色相联系,角色再与一个或多个访问许可权相联系,从而实现对用户的访问控制。角色可以根据实际的工作需要生成或取消。</p><h1>第五章 数据保密性实现机制与评价</h1><p><span id="inline-blue">数据保密性</span>在网络安全中,数据的保密性是指为了防止网络中各个系统之间交换的数据被未授权的实体截获或被非法存取造成泄密而提供的加密保护。</p><h3 id="基本加密技术与评价"><a class="header-anchor" href="#基本加密技术与评价">☆</a>基本加密技术与评价</h3><p><span id="font-green">替换加密:</span>明文消息的字符换成另一个字符、数字、符号。不一定替换成原字符集,同时也可以一对多替换。</p><p><span id="font-green">置换加密:</span>对明文字幕重新进行排列,字母本身不变。</p><h3 id="加密算法分类"><a class="header-anchor" href="#加密算法分类">☆</a>加密算法分类</h3><p><span id="inline-toc">1. </span>按密码体制:对称密钥、非对称密钥</p><p><span id="inline-green">对称密钥:</span>同一个密钥加密解密,<span id="font-blue">应用:</span>数据加密标准DES、高级加密标准AES。<span id="font-blue">优点:</span>速度快;<span id="font-blue">缺点:</span>用户必须让接收人知道自己用的密钥,需双方共同保密密钥。密钥发布时还需防止任何攻击者发现或窃听密钥。</p><p><span id="inline-green">非对称密钥:</span>用公钥加密的结果只能用私钥解密,用私钥加密的结果只能用公钥解密,公钥不能推导出来私钥。<span id="font-blue">优点:</span>加密解密能力分开,实现多个用户加密的消息只能由一个用户解读,或一个用户加密的消息可由多个用户解读。可扩展性强。目前应用最多的公开密钥系统有RSA</p><p><span id="inline-toc">2.</span>按加密方式分类:序列(流)加密法、分组(块)加密法</p><p><span id="inline-green">序列加密:</span>使用一次只对明文中的单个位或字节进行运算的算法。有点:产生流密钥序列简单、加密解密过程均不需复杂算法;缺点:明文、密文和密钥流任意两者可以很容易求得第三者,且很难得到完全随机的密钥流。密钥变换过于频繁,密钥分配较难。目前应用最广泛的序列密码:RC4</p><p><span id="inline-green">分组加密法:</span>是将明文按一定的位长分组,这个固定长度叫块大小。一次加密明文中的一个块。具有较强的抗攻击能力。块越大保密性越好,但加解密算法和设备越复杂,块大小一般64或128字节。应用:DES、IDEA、AES、TEA。</p><h3 id="数据加密标准des"><a class="header-anchor" href="#数据加密标准des">☆</a>数据加密标准DES</h3><p>DES:是一个分组加密算法,以64位为分组对数据加密;是一个对称算法,加密解密是同一个密钥。</p><p><span id="inline-blue">6步:</span></p><p><span id="inline-toc">1.</span> 输入64位明文(56位密钥+8位奇偶校验)</p><p><span id="inline-toc">2. </span>64位明文块送入初始置换函数进行初始置换</p><p><span id="inline-toc">3. </span>置换后的内容分为两块,左明文和右明文,各32位</p><p><span id="inline-toc">4. </span>两块明文都要经过16轮加密,每一轮都进行替换与置换操作</p><p><span id="inline-toc">5. </span>将左右明文重新连接起来,对组成的块进行最终置换</p><p><span id="inline-toc">6. </span>输出64位明文</p><blockquote class="blockquote-center"><p>加密解密过程的唯一差别是密钥部分倒过来。</p></blockquote><h3 id="数据加密标准des的分析评价"><a class="header-anchor" href="#数据加密标准des的分析评价">☆</a>数据加密标准DES的分析评价</h3><p>具有极高的安全性,目前为止,出了穷举搜索法对算法进行攻击,没有发现更有效的方法。通过利用多种加密思想实现安全性:替换机制、置换机制、进行多轮反复加密、在替换和置换中同时揉进了压缩与扩展操作、使用了异或的加密操作、算法不公开S盒的设计准则、算法具有雪崩效应。</p><p><span id="inline-green">雪崩效应:</span>明文的一点点变动就会引起密文发生大的变化。</p><p><span id="font-blue">DES密钥发布问题</span>也是决定DES安全程度的重要问题,基本解决方法:</p><p><span id="inline-toc">1.</span> 根据密钥交换协议/算法来实现密钥的发布问题,双方可以用这个方法确定对称密钥,然后用这个密钥进行加密解密;</p><p><span id="inline-toc">2.</span> 结合非对称密钥,先利用接收方得公钥对DES使用的密钥进行加密,然后再利用DES进行加密。</p><div class="note info">DES可扩展性不好,但密文长度等于明文长度,加密的信息有效率较高。<br>DES工作算法模式:电子编码簿、加密块链接、加密反馈、输出反馈。</div><h3 id="rsa加密机制分析与评价"><a class="header-anchor" href="#rsa加密机制分析与评价">☆</a>RSA加密机制分析与评价</h3><div class="note success">RSA:最广泛接受的公钥方案。</div><p>算法本身简单,关键选择正确密钥。不存在密钥的发布问题。可扩展性比DES好,信息有效率没有DES高。RSA算法比DES算法速度慢很多</p><h3 id="rsa与des结合加密机制与评价"><a class="header-anchor" href="#rsa与des结合加密机制与评价">☆</a>RSA与DES结合加密机制与评价</h3><p><span id="inline-toc">1.</span> 性能和信息有效率得到改善:用对称密钥加密算法和一次性会话密钥加密明文:速度快、明文小</p><p><span id="inline-toc">2.</span> 解决了密钥的发布问题</p><p><span id="inline-toc">3.</span> RSA的中间人攻击:指中间人不需要知道发送方和接收方的思瑶就可以非法查看双方的内容。主要漏洞是公钥被非法替换和调包。</p><h1>第六章 数据完整性 实现机制与评价</h1><h3 id="数据完整性"><a class="header-anchor" href="#数据完整性">☆</a>数据完整性</h3><p><span id="inline-blue">数据完整性</span>是防止非法实体对交换数据的修改、插入、替换和删除,或者如果被修改、插入、替换和删除时可以被检测出来。</p><p>在常规的网络安全中,可以通过消息认证模式来保证,基本思路是通过增加额外的信息验证码来对数据完整性验证。</p><p><span id="inline-green">碰撞:</span>对于两个不同的消息,如果它们的验证码值相同,则发生了碰撞。</p><h3 id="基于消息摘要的完整性验证与评价"><a class="header-anchor" href="#基于消息摘要的完整性验证与评价">☆</a>基于消息摘要的完整性验证与评价</h3><div class="note success">最常用的消息完整性验证方法。</div><ul><li>消息摘要一般通过摘要函数生成。</li></ul><ul><li><p>哈希函数是生成消息摘要常用的算法。</p></li><li><p>常用算法:MD4,MD5,SHA-1</p></li></ul><p>如果两个消息得到相同的消息摘要,则称为<span id="font-green">冲突。</span></p><p><span id="font-blue">优点:</span>双方不需要共享密钥;消息摘要与信息密切关联,接受者能够确信信息为被篡改过;信息有效率较高。</p><p><span id="font-blue">缺点:</span>若攻击者修改网络传输的信息部分同时也根据哈希函数重新计算消息摘要并替换,这时验证机制检测不出消息是否是伪造的,只知道是否完整。</p><h3 id="基于消息摘要与对称密钥加密的完整性验证机制与评价"><a class="header-anchor" href="#基于消息摘要与对称密钥加密的完整性验证机制与评价">☆</a>基于消息摘要与对称密钥加密的完整性验证机制与评价</h3><p>假设A是发送方,B是接收方,A要发送的消息是M0,A与B共享密钥K,产生摘要的函数为H。</p><ul><li>第1步:A用消息摘要算法H计算信息M0的消息摘要MD0。</li><li>第2步:A将M0、MD0合在一起,用K加密信息,通过网络发送给B。</li><li>第3步:B收到加密的信息后,用同一密钥K把密文解密,并将=者分开,分别设为M1和MD1。</li><li>第4步:B用与原始信息相同的消息摘要计算方法H重新计算信息M1的消息摘要MD2。</li><li>第5步:B将计算的消息摘要MD2同分离出的消息摘要MD1进行对比,如果相等,B断定信息是完整的,如果不相等,则B断定信息遭到篡改。</li></ul><p><span id="font-blue">优点:</span></p><ul><li>该机制防止了攻击者篡改信息的攻击。<ul><li>如果攻击者篡改了消息,则B 自己计算的消息摘要MD2同分离出来的消息摘要MD1就不相等了。</li></ul></li><li>也防止了攻击者同时把信息部分和消息摘要部分替换并且保持它们之间的正确匹配关系的攻击。<ul><li>因为密钥K只有双方知道,攻击者同时替换后没办法再用双方的密钥K重新加密。在这种机制中,参照对象是消息摘要。</li></ul></li></ul><p><span id="font-blue">缺点与改进:</span></p><ul><li>机制的前提是需要双方共享对称密钥K,存在密钥发布问题。</li><li>可以用非对称密钥加密体制加密信息</li><li>对合并后的信息全部用非对称密钥加密将导致加密的速度过慢,实用性较差</li><li>采用对称密钥体制和非对称密钥结合的方法解决密钥的发布问题,就产生基于非对称密钥和对称密钥结合的完整性验证机制。</li></ul><h4 id="md5消息摘要计算算法与评价"><a class="header-anchor" href="#md5消息摘要计算算法与评价">☆</a>MD5消息摘要计算算法与评价</h4><p>MD5是计算机安全领域广泛使用的一种哈希函数,用以提供消息的完整性保护,把一个任意长的信息变化产生一个128位的消息摘要。除了满足能满足完成完整性验证必须的要求外,还效率高,提高了完整性验证的性能。</p><p><span id="inline-blue">步骤:</span></p><p>MD5将消息分为若干个512位分组(大块)来处理输入的消息,且每一分组又被划分为16个32位子分组(子块),经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个分组链接生成一个128位的消息摘要。</p><p>对于每个大块,信息从512位压缩为128位,位数变为1/4,每一轮前初始化四个32位的固定值的链接量,四个组合在一起正好是128位。</p><p>MD5以32位运算为基础,加密有四轮,每轮运算16次。每一轮中每个小块按不同顺序都参与运算,四轮的第一步进行不同的P处理,其他步骤相同。</p><p>每一轮的操作也称压缩操作。如下所示:</p><ul><li>第1步:P处理首先处理b、c、d。(共abcd四个变量)</li><li>第2步:变量a加进P处理的输出</li><li>第3步:消息子块加进第2步输出</li><li>第4步:常量加进第3步输出</li><li>第5步:第4步的输出(abcd内容)循环左移S位</li><li>第6步:变量b加进第5步输出</li><li>第7步:第6步 的输出赋值给变量a</li><li>最后的输出成为下一步的新的abcd。</li></ul><p><span id="inline-blue">评价:</span><br>MD5的核心处理是重复进行位逻辑运算,使得最终输出的摘要中的每一位都与输入消息中所有位相关,达到很好的混淆效果,具有雪崩现象。</p><h1>第七章 用户身份可鉴别性实现机制与评价</h1><h3 id="用户身份可鉴别性"><a class="header-anchor" href="#用户身份可鉴别性">☆</a>用户身份可鉴别性</h3><p><span id="inline-blue">用户身份可鉴别性:</span>指用户在使用网络资源时,通过对用户身份信息的交换对用户身份的真实性进行确认的过程。<br>涉及对象:①提供身份信息的被验证者;②检验身份信息正确性和合法性的认证服务器;③提供仲裁和调解的可信第三方;④企图进行窃听和伪装身份的攻击者;⑤认证设备。</p><h3 id="用户身份鉴别因素的数量和种类"><a class="header-anchor" href="#用户身份鉴别因素的数量和种类">☆</a>用户身份鉴别因素的数量和种类</h3><p>用户身份鉴别一般通过多个因素来共同鉴别用户身份的真伪,称为多因子鉴别, 最常见的是以下三因子:</p><p><span id="inline-toc">1.</span> 用户所知道的东西,如口令、密码等:</p><p><span id="inline-toc">2.</span> 用户所拥有的东西,如信用卡或U盾等:</p><p><span id="inline-toc">3.</span> 用户所具有的东西,如声音、指纹、视网膜、签字或笔迹等。</p><h3 id="数字证书"><a class="header-anchor" href="#数字证书">☆</a>数字证书</h3><ul><li>为了进行有效的身份鉴别,类似现实生活中的身份证,在网络中每个用户也发一个网络身份证,即数字证书。由一个可信的权威机构发行。</li><li>是一种计算机文件,文件扩展名:.cer(certificate)。</li><li>证明证书中的用户与证书中的公钥关联的正确性。</li></ul><h3 id="数字证书的内容"><a class="header-anchor" href="#数字证书的内容">☆</a>数字证书的内容</h3><p>最简单的证书至少包括<span id="inline-blue">三项基本内容:</span><span id="inline-green">公钥</span>、<span id="inline-green">用户名</span>(<span id="font-green">也称主体名</span>)和<span id="inline-green">证书机构的数字签名</span>。</p><p>一般情况下证书中还包括<span id="font-green">序号</span>、<span id="font-green">起始日期</span>、 <span id="font-green">终止日期</span>、<span id="font-green">签发者名</span>等信息。</p><p>证书的内容和格式遵循X.509国际标准,它于1993和1995年做了两次修订。这个标准的最新版本是X.509V3。在数字证书中用户名被称为主题名,这是因为数字证书不仅可以发给个体用户,还可以发给组织,最后一个字段是证书机构的签名。</p><h3 id="生成数字证书的参与方"><a class="header-anchor" href="#生成数字证书的参与方">☆</a>生成数字证书的参与方</h3><p>生成数字证书的参与方至少需要两方参与,即主体(最终用户)和签发者(证书机构CA)。证书生成与管理还可能涉及第三方——注册机构RA。</p><p><span id="inline-toc">1.</span> 主体:申请数字证书的人或者组织,主要任务是产生公/私钥密钥对、提出申请和提供与申请者相关的证明材料等。</p><p><span id="inline-toc">2.</span> 注册机构及作用:从最终用户角度看,证书机构与注册机构差别不大。注册机构是用户与证书机构之间的中间实体,帮助证书机构完成日常工作</p><ul><li><p>注册机构通常提供下列服务:</p><ul><li>①接收与验证最终用户的注册信息:</li><li>②为最终用户生成密钥:</li><li>③接收与授权证书吊销请求。</li></ul></li><li><p>好处:</p><blockquote><p>证书机构成为被隔离的实体,更不容易受到安全攻击。最终用户只能通过注册机构与证书机构通信,因此可以将注册机构与证书机构通信高度保护,使这部分连接很难攻击。但注册机构主要为了帮助证书机构与最终用户间交互,不能签发证书,只能由证书机构签发。</p></blockquote></li></ul><p><span id="inline-toc">3.</span> 证书机构及作用:证书机构是公钥基础设施的核心机构,它的作用包括:</p><p> ① 证书的数字签名与发放,用户相信证书的真假主要看是不是经过可信的CA签名,因此CA对证书的签名很重要。为了防止数字凭证的伪造,证书机构的公共密钥必须是可靠的,证书机构必须公布其公钥。</p><p> ② 证书的管理工作,如跟踪证书状态,对因故无效的证书发出吊销通知等。</p><p><span id="inline-blue">证书的生成(5步)</span></p><ul><li>第1步:密钥生成:自己用软件生成;注册机构为用户生成。</li><li>第2步:主体注册:用户提供共相关的信息和证明材料。</li><li>第3步:由RA完成验证:验证用户身份材料是否真实可靠;验证用户自己持有的私钥跟向注册机构提供的公钥是否相对应。</li><li>第4步:数字证书的生成</li><li>第5步:数字证书的分发</li></ul><h3 id="用户身份可鉴别性机制与评价"><a class="header-anchor" href="#用户身份可鉴别性机制与评价">☆</a>用户身份可鉴别性机制与评价</h3><p><span id="inline-toc">1.</span> 基于口令的用户身份鉴别机制:最常用的鉴别形式</p><p> <span id="font-green">优点:</span>简单易用,在安全性要求不高的情况下易于实现</p><p> <span id="font-red">缺点:</span>数据库存放的是明文口令;口令以明文形式传递给服务器;口令相对固定。</p><p><span id="inline-toc">2.</span> 基于口令摘要的用户身份鉴别机制:</p><p> <span id="font-green">优点:</span>解决了基于口令的机制的两打安全隐患,在网络截获、副武器攻击和口令猜测方面都保证了用户鉴别的安全。</p><p> <span id="font-red">缺点:</span>无法阻止重放攻击。服务器不能鉴别出登录请求来自合法用户还是攻击者。</p><p><span id="inline-toc">3.</span> 基于随机挑战的用户身份鉴别机制:用户用口令摘要加密随机挑战</p><p> <span id="font-green">优点:</span>解决了基于口令摘要的重放攻击,增加了随机性,提高了安全性。</p><p> <span id="font-red">缺点:</span>比基于摘要的用户鉴别机制多了一次交互,同时需要客户本地计算机计算口令摘要,并用计算出来的口令摘要加密从服务器收到的随机挑战,存在密钥的分发问题。</p><h1>第八章 用户不可抵赖性实现机制</h1><h3 id="用户不可抵赖性"><a class="header-anchor" href="#用户不可抵赖性">☆</a>用户不可抵赖性</h3><p><span id="inline-blue">不可抵赖性:</span>旨在生成、手机、维护有关已声明的事件或动作的证据,并使该证据可得和缺人,一次来解决关于此事件或动作发生或未发生而引起的争议。</p><blockquote class="blockquote-center"><p>主要通过数字签名来保证。</p></blockquote><p><span id="font-blue">包括两个方面:</span><span id="font-green">发送信息方不可抵赖</span>;<span id="font-green">信息的接收方不可抵赖</span>。</p><p>一个完整的抗抵赖性机制包括两部分:<span id="font-green">签名部分</span>+<span id="font-green">验证部分</span>:</p><p>签名部分密钥必须秘密、独有,只有签名人掌握;</p><p>验证部分的密钥应当公开,以便于他人进行验证。</p><h3 id="数字签名"><a class="header-anchor" href="#数字签名">☆</a>数字签名</h3><p>数字签名:附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换允许数据单元的接收者用于确认数据单元的来源和数据单元的完整性,并保护数据,防止被他人伪造。</p><p>一个签名算法至少应满足三个条件:</p><p><span id="inline-toc">1.</span> 签名者时候不能否认自己的签名</p><p><span id="inline-toc">2.</span> 接收者能验证签名,而其他任何人都不能伪造签名;</p><p><span id="inline-toc">3.</span> 当双方关于签名的真伪性发生争执时,第三方能解决争执。</p><p><span id="inline-blue">数字签名的作用:</span><span id="font-green">不可抵赖</span>、<span id="font-green">身份认证</span>、<span id="font-green">防假冒</span></p><div class="note default">手写签名与数字签名的区别:<ol><li>签署文件方面的不同:手写签名是所签文件的物理部分,但数字签名并不是,它必须设法把签名绑到所签文件上。</li><li>验证方面的不同:手写签名是通过和真实的手写签名比较来验证,很不安全且容易伪造;数字签名通过一个公开的验证算法来验证,任何人都能验证。</li><li>拷贝方面不同:数字签名消息的复制品与其本身是一样的,而手写签名纸质文件的复制品与原品不同。</li></ol></div>]]></content>
<summary type="html">
网络安全课本内容整理
</summary>
<category term="网络" scheme="http://www.singlelovely.cn/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="网络" scheme="http://www.singlelovely.cn/tags/%E7%BD%91%E7%BB%9C/"/>
</entry>
<entry>
<title>Java学习笔记(day11)</title>
<link href="http://www.singlelovely.cn/post/35a8cbed.html"/>
<id>http://www.singlelovely.cn/post/35a8cbed.html</id>
<published>2018-11-04T10:00:00.000Z</published>
<updated>2020-09-21T13:41:07.528Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="11-01-常见开发工具介绍-了解"><a class="header-anchor" href="#11-01-常见开发工具介绍-了解">☆</a>11.01 常见开发工具介绍 (了解)</h2><ul><li>A:操作系统自带的记事本软件</li><li>B:高级记事本软件</li><li>C:集成开发环境 IDE<ul><li>(Integrated Development Environment)</li></ul></li><li>D:Eclipse和MyEclipse的区别<ul><li>a:Eclipse是一种可扩展的开放源代码的IDE。</li><li>b:Eclipse的特点描述<ul><li>免费</li><li>纯Java语言编写</li><li>免安装</li><li>扩展性强</li></ul></li><li>c:MyEclipse<ul><li>在Eclipse基础上追加的功能性插件,对插件收费</li><li>在WEB开发中提供强大的系统架构平台</li></ul></li></ul></li><li>E:下载 <a href="http://eclipse.org/" target="_blank" rel="noopener">http://eclipse.org/</a><ul><li>org是非盈利团体</li></ul></li><li>F:安装<ul><li>绿色版解压就可以使用(Eclipse)</li><li>安装版 双击运行,一路next即可(JDK)</li></ul></li><li>G:卸载<ul><li>绿色版直接删除文件夹即可</li><li>安装版 专业卸载软件或者控制面板添加删除程序</li></ul></li></ul><h2 id="11-02-eclipse中helloworld案例以及汉化-了解"><a class="header-anchor" href="#11-02-eclipse中helloworld案例以及汉化-了解">☆</a>11.02 Eclipse中HelloWorld案例以及汉化 (了解)</h2><ul><li>A:选择工作空间<ul><li>工作空间 其实就是我们写的源代码所在的目录</li></ul></li><li>B:用Eclipse来完成一个HelloWorld案例<ul><li>代码以项目为基本单位</li><li>创建项目</li><li>创建包</li><li>创建类</li><li>编写代码</li></ul></li><li>C:编译和运行</li><li>D:Eclipse的汉化<ul><li>从Eclipse3.5开始,安装目录下就多了一个dropins目录,只要将插件解压后放到到该目录即可。</li><li>同理,这种方式卸载插件也是特别的方便,推荐这种方式</li></ul></li><li>E:语法检查提示<ul><li>红色波浪线<ul><li>必须处理,否则编译通不过</li></ul></li><li>黄色波浪线<ul><li>可以不搭理他</li></ul></li></ul></li></ul><h2 id="11-03-eclipse的视窗和视图概述-了解"><a class="header-anchor" href="#11-03-eclipse的视窗和视图概述-了解">☆</a>11.03 Eclipse的视窗和视图概述 (了解)</h2><ul><li>A:视窗 每一个基本的窗体被称为视窗<ul><li>PackageExplorer 显示项目结构,包,类,及资源</li><li>Outline 显示类的结构,方便查找,识别,修改</li><li>Console 程序运行的结果在该窗口显示</li><li>Hierarchy 显示Java继承层次结构,选中类后F4</li></ul></li><li>B:视图 是由某些视窗的组合而成的<ul><li>Java视图</li><li>Debug视图</li></ul></li></ul><h2 id="11-04-eclipse工作空间的基本配置-掌握"><a class="header-anchor" href="#11-04-eclipse工作空间的基本配置-掌握">☆</a>11.04 Eclipse工作空间的基本配置 (掌握)</h2><ul><li>A:程序的编译和运行的环境配置(一般不改)<ul><li>window – Preferences – Java</li><li>编译环境:Compiler默认选中的就是最高版本。</li><li>运行环境:Installed JREs默认会找你安装的那个JDK。建议配置了Java的环境变量。</li><li>问题:<ul><li>低编译,高运行。可以。</li><li>高编译,低运行。不可以。</li><li>建议,编译和运行的版本一致。</li></ul></li></ul></li><li>B:如何去掉默认注释?<ul><li>window – Preferences – Java – Code Style – Code Templates</li><li>选择你不想要的内容,通过右边Edit编辑。</li><li>注意:请只删除注释部分,不是注释部分的不要删除。</li></ul></li><li>C:行号的显示和隐藏<ul><li>显示:在代码区域的最左边的空白区域,右键 – Show Line Numbers即可。</li><li>隐藏:把上面的动作再做一次。</li></ul></li><li>D:字体大小及颜色<ul><li>a:Java代码区域的字体大小和颜色:<ul><li>window – Preferences – General – Appearance – Colors And Fonts --Java修改 – Java Edit Text Font</li></ul></li><li>b:控制台<ul><li>window – Preferences – General – Appearance – Colors And Fonts – Debug – Console font</li></ul></li><li>c:其他文件<ul><li>window – Preferences – General – Appearance – Colors And Fonts – Basic – Text Font</li></ul></li></ul></li><li>E:窗体给弄乱了,怎么办?<ul><li>window – Reset Perspective</li></ul></li><li>F:控制台找不到了,怎么办?<ul><li>Window–Show View—Console</li></ul></li><li>G:取消悬浮提示<ul><li>window – Preferences – Java–Editor–Hovers。右边将Combined Hover勾去掉。</li><li>这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上,按F2即可。</li></ul></li></ul><h2 id="11-05-eclipse中内容辅助键的使用-掌握"><a class="header-anchor" href="#11-05-eclipse中内容辅助键的使用-掌握">☆</a>11.05 Eclipse中内容辅助键的使用 (掌握)</h2><ul><li>A:Alt+/ 起提示作用</li><li>B:main+alt+/,syso+alt+/,给出其他提示</li><li>C:补充输出语句,选中需要输出的部分,alt+/选择最后一项即可</li><li>C:定义自己的alt + /<ul><li>windows–perference-Java-Editor-Templates–New</li></ul></li></ul><h2 id="11-06-eclipse中快捷键的使用-掌握"><a class="header-anchor" href="#11-06-eclipse中快捷键的使用-掌握">☆</a>11.06 Eclipse中快捷键的使用 (掌握)</h2><ul><li>A:新建 ctrl + n</li><li>B:格式化 ctrl+shift+f</li><li>C:导入包 ctrl+shift+o</li><li>D:注释 ctrl+/,ctrl+shift+/,ctrl+shift+\</li><li>E:代码上下移动 选中代码alt+上/下箭头</li><li>F:查看源码 选中类名(F3或者Ctrl+鼠标点击)</li><li>G:查找具体的类 ctrl + shift + t</li><li>H:查找具体类的具体方法 ctrl + o</li><li>I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法</li><li>J:删除代码 ctrl + d</li><li>K:抽取方法alt + shift + m</li><li>L:改名alt + shift + r</li><li></li></ul><h2 id="11-07-eclipse中如何提高开发效率-掌握"><a class="header-anchor" href="#11-07-eclipse中如何提高开发效率-掌握">☆</a>11.07 Eclipse中如何提高开发效率 (掌握)</h2><ul><li>alt + shift + s</li><li>A:自动生成构造方法</li><li>B:自动生成get/set方法</li></ul><h2 id="11-08-eclipse中一个标准学生类及其测试-掌握"><a class="header-anchor" href="#11-08-eclipse中一个标准学生类及其测试-掌握">☆</a>11.08 Eclipse中一个标准学生类及其测试 (掌握)</h2><ul><li>A:案例演示<ul><li>用Eclipse实现标准学生类及其测试</li></ul></li></ul><h2 id="11-09-eclipse中接口抽象类具体类代码体现-掌握"><a class="header-anchor" href="#11-09-eclipse中接口抽象类具体类代码体现-掌握">☆</a>11.09 Eclipse中接口抽象类具体类代码体现 (掌握)</h2><ul><li>A:案例演示<ul><li>用Eclipse实现接口抽象类具体类代码</li></ul></li></ul><h2 id="11-10-eclipse中如何生成jar包并导入到项目中-了解"><a class="header-anchor" href="#11-10-eclipse中如何生成jar包并导入到项目中-了解">☆</a>11.10 Eclipse中如何生成jar包并导入到项目中 (了解)</h2><ul><li>A:jar是什么?<ul><li>jar是多个class文件的压缩包。</li></ul></li><li>B:jar有什么用?<ul><li>用别人写好的东西</li></ul></li><li>C:打jar包<ul><li>选中项目–右键–Export–Java–Jar–自己指定一个路径和一个名称–Finish</li></ul></li><li>D:导入jar包<ul><li>复制到项目路径下并添加至构建路径。</li></ul></li></ul><h2 id="11-11-eclipse中如何删除项目和导入项目-掌握"><a class="header-anchor" href="#11-11-eclipse中如何删除项目和导入项目-掌握">☆</a>11.11 Eclipse中如何删除项目和导入项目 (掌握)</h2><ul><li>A:删除项目<ul><li>选中项目 – 右键 – 删除<ul><li>从项目区域中删除</li><li>从硬盘上删除</li></ul></li></ul></li><li>B:导入项目<ul><li>在项目区域右键找到import</li><li>找到General,展开,并找到</li><li>Existing Projects into Workspace</li><li>点击next,然后选择你要导入的项目</li><li>注意:这里选择的是项目名称</li></ul></li></ul><h2 id="11-12-eclipse中断点调试的基本使用-了解"><a class="header-anchor" href="#11-12-eclipse中断点调试的基本使用-了解">☆</a>11.12 Eclipse中断点调试的基本使用 (了解)</h2><ul><li>A:Debug的作用<ul><li>调试程序</li><li>查看程序执行流程</li></ul></li><li>B:如何查看程序执行流程<ul><li><p>什么是断点:</p><ul><li>就是一个标记,从哪里开始。</li></ul></li><li><p>如何设置断点:</p><ul><li>你想看哪里的程序,你就在那个有效程序的左边双击即可。</li></ul></li><li><p>在哪里设置断点:</p><ul><li>哪里不会点哪里。</li><li>目前:我们就在每个方法的第一条有效语句上都加。</li></ul></li><li><p>如何运行设置断点后的程序:</p><ul><li>右键 – Debug as – Java Application</li></ul></li><li><p>看哪些地方:</p><ul><li>Debug:断点测试的地方<ul><li>在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。</li></ul></li><li>Variables:查看程序的变量变化</li><li>ForDemo:被查看的源文件</li><li>Console:控制台</li></ul></li><li><p>如何去断点:</p><ul><li>a:再次双击即可</li><li>b:找到Debug视图,Variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉。</li></ul></li></ul></li></ul><h2 id="11-13-eclipse查看java中参数传递问题-了解"><a class="header-anchor" href="#11-13-eclipse查看java中参数传递问题-了解">☆</a>11.13 Eclipse查看Java中参数传递问题 (了解)</h2><ul><li>A:断点演示<ul><li>断点查看Java中参数传递问题</li></ul></li></ul><h2 id="11-14-api概述-了解"><a class="header-anchor" href="#11-14-api概述-了解">☆</a>11.14 API概述 (了解)</h2><ul><li>A:API(Application Programming Interface)<ul><li>应用程序编程接口</li></ul></li><li>B:Java API<ul><li>就是Java提供给我们使用的类,这些类将底层的实现封装了起来,</li><li>我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。</li></ul></li></ul><h2 id="11-15-object类的概述-了解"><a class="header-anchor" href="#11-15-object类的概述-了解">☆</a>11.15 Object类的概述 (了解)</h2><ul><li>A:Object类概述<ul><li>类层次结构的根类</li><li>所有类都直接或者间接的继承自该类</li></ul></li><li>B:构造方法<ul><li>public Object()</li><li>回想面向对象中为什么说:</li><li>子类的构造方法默认访问的是父类的无参构造方法</li></ul></li></ul><h2 id="11-16-object类的hashcode-方法-了解"><a class="header-anchor" href="#11-16-object类的hashcode-方法-了解">☆</a>11.16 Object类的hashCode()方法 (了解)</h2><ul><li>A:案例演示<ul><li>public int hashCode()</li><li>a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。</li><li>b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。</li></ul></li></ul><h2 id="11-17-object类的getclass-方法-在反射的时候掌握"><a class="header-anchor" href="#11-17-object类的getclass-方法-在反射的时候掌握">☆</a>11.17 Object类的getClass()方法 (在反射的时候掌握)</h2><ul><li>A:案例演示<ul><li>public final Class getClass()</li><li>a:返回此 Object 的运行时类。</li><li>b:可以通过Class类中的一个方法,获取对象的真实类的全名称。<ul><li>public String getName()</li></ul></li></ul></li></ul><h2 id="11-18-object类的tostring-方法-掌握"><a class="header-anchor" href="#11-18-object类的tostring-方法-掌握">☆</a>11.18 Object类的toString()方法 (掌握)</h2><ul><li>A:案例演示<ul><li>public String toString()</li><li>a:返回该对象的字符串表示。</li></ul></li><li><pre><code>public Stirng toString() {return name + "," + age;}</code></pre><ul><li>b:它的值等于:<ul><li>getClass().getName() + “@” + Integer.toHexString(hashCode())</li></ul></li><li>c:由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。</li></ul></li><li>B:最终版<ul><li>自动生成</li></ul></li></ul><h2 id="11-19-object类的equals-方法-掌握"><a class="header-anchor" href="#11-19-object类的equals-方法-掌握">☆</a>11.19 Object类的equals()方法 (掌握)</h2><ul><li>A:案例演示:</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Studnet</span> </span>{</span><br><span class="line"> <span class="keyword">private</span> String name;</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> age;</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Studnet</span><span class="params">(String name, <span class="keyword">int</span> age)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name;</span><br><span class="line"><span class="keyword">this</span>.age = age;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">equals</span><span class="params">(Object obj)</span> </span>{</span><br><span class="line"> Studnet s = (Studnet)obj;</span><br><span class="line"><span class="keyword">return</span> <span class="keyword">this</span>.name.equals(s.name) && <span class="keyword">this</span>.age == s.age;</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><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">EqualsTest</span> </span>{</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Studnet s1 = <span class="keyword">new</span> Studnet(<span class="string">"张三"</span>,<span class="number">23</span>);</span><br><span class="line">Studnet s2 = <span class="keyword">new</span> Studnet(<span class="string">"张三"</span>, <span class="number">23</span>);</span><br><span class="line"><span class="keyword">boolean</span> b = s1.equals(s2);</span><br><span class="line"></span><br><span class="line">System.out.println(s1 == s2);</span><br><span class="line">System.out.println(b);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure><pre><code>* a:指示其他某个对象是否与此对象“相等”。 * b:默认情况下比较的是对象的引用是否相同。* c:由于比较对象的引用没有意义,一般建议重写该方法。</code></pre><h2 id="11-20-号和equals方法的区别-掌握"><a class="header-anchor" href="#11-20-号和equals方法的区别-掌握">☆</a>11.20 ==号和equals方法的区别 (掌握)</h2><ul><li>==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值</li><li>equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性</li></ul><h2 id="11-21-day11总结"><a class="header-anchor" href="#11-21-day11总结">☆</a>11.21_day11总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
Java开发工具、常见对象
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
<category term="Java开发工具" scheme="http://www.singlelovely.cn/tags/Java%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
</entry>
<entry>
<title>Java学习笔记(day10)</title>
<link href="http://www.singlelovely.cn/post/8d14ac88.html"/>
<id>http://www.singlelovely.cn/post/8d14ac88.html</id>
<published>2018-10-29T10:24:00.000Z</published>
<updated>2020-09-21T13:41:07.528Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="10-01-package关键字的概述及作用-了解"><a class="header-anchor" href="#10-01-package关键字的概述及作用-了解">☆</a>10.01 package关键字的概述及作用 (了解)</h2><ul><li><p>A:为什么要有包</p><ul><li>将字节码(.class)进行分类存放</li><li>包其实就是文件夹</li></ul></li><li><p>B:包的概述</p></li><li><p>举例:</p><ul><li>学生:增加,删除,修改,查询</li><li>老师:增加,删除,修改,查询</li></ul></li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">方案1:按照功能分</span><br><span class="line">com.heima.add</span><br><span class="line">AddStudent</span><br><span class="line">AddTeacher</span><br><span class="line">com.heima.delete</span><br><span class="line">DeleteStudent</span><br><span class="line">DeleteTeacher</span><br><span class="line">com.heima.update</span><br><span class="line">UpdateStudent</span><br><span class="line">UpdateTeacher</span><br><span class="line">com.heima.find</span><br><span class="line">FindStudent</span><br><span class="line">FindTeacher</span><br><span class="line"></span><br><span class="line">方案2:按照模块分</span><br><span class="line">com.heima.teacher</span><br><span class="line">AddTeacher</span><br><span class="line">DeleteTeacher</span><br><span class="line">UpdateTeacher</span><br><span class="line">FindTeacher</span><br><span class="line">com.heima.student</span><br><span class="line">AddStudent</span><br><span class="line">DeleteStudent</span><br><span class="line">UpdateStudent</span><br><span class="line">FindStudent</span><br></pre></td></tr></table></figure><h2 id="10-02-包的定义及注意事项-掌握"><a class="header-anchor" href="#10-02-包的定义及注意事项-掌握">☆</a>10.02 包的定义及注意事项 (掌握)</h2><ul><li>A:定义包的格式<ul><li>package 包名;</li><li>多级包用.分开即可</li></ul></li><li>B:定义包的注意事项<ul><li>A:package语句必须是程序的第一条可执行的代码</li><li>B:package语句在一个java文件中只能有一个</li><li>C:如果没有package,默认表示无包名</li></ul></li><li>C:案例演示<ul><li>包的定义及注意事项</li></ul></li></ul><h2 id="10-03-带包的类编译和运行-掌握"><a class="header-anchor" href="#10-03-带包的类编译和运行-掌握">☆</a>10.03 带包的类编译和运行 (掌握)</h2><ul><li>A:如何编译运行带包的类<ul><li>a:javac编译的时候带上-d即可<ul><li>javac -d . HelloWorld.java</li></ul></li><li>b:通过java命令执行。<ul><li>java 包名.HellWord</li></ul></li></ul></li></ul><h2 id="10-04-不同包下类之间的访问-掌握"><a class="header-anchor" href="#10-04-不同包下类之间的访问-掌握">☆</a>10.04 不同包下类之间的访问 (掌握)</h2><ul><li>A:案例演示<ul><li>不同包下类之间的访问</li></ul></li></ul><h2 id="10-05-import关键字的概述和使用-掌握"><a class="header-anchor" href="#10-05-import关键字的概述和使用-掌握">☆</a>10.05 import关键字的概述和使用 (掌握)</h2><ul><li>A:案例演示<ul><li>为什么要有import<ul><li>其实就是让有包的类对调用者可见,不用写全类名了</li></ul></li></ul></li><li>B:导包格式<ul><li>import 包名;</li><li>注意:</li><li>这种方式导入是到类的名称。</li><li>虽然可以最后写*,但是不建议。</li></ul></li><li>C:package,import,class有没有顺序关系(面试题)</li></ul><h2 id="10-06-四种权限修饰符的测试-掌握"><a class="header-anchor" href="#10-06-四种权限修饰符的测试-掌握">☆</a>10.06 四种权限修饰符的测试 (掌握)</h2><ul><li>A:案例演示<ul><li>四种权限修饰符</li></ul></li><li>B:结论</li><li></li></ul><table><thead><tr><th>本类</th><th>同一个包下(子类和无关类)</th><th>不同包下(子类)</th><th>不同包下(无关类)</th></tr></thead><tbody><tr><td>private</td><td>Y</td><td></td><td></td></tr><tr><td>默认</td><td>Y</td><td>Y</td><td></td></tr><tr><td>protected</td><td>Y</td><td>Y</td><td>Y</td></tr><tr><td>public</td><td>Y</td><td>Y</td><td>Y</td></tr></tbody></table><h2 id="10-07-类及其组成所使用的常见修饰符-掌握"><a class="header-anchor" href="#10-07-类及其组成所使用的常见修饰符-掌握">☆</a>10.07 类及其组成所使用的常见修饰符 (掌握)</h2><ul><li><p>A:修饰符:</p><ul><li>权限修饰符:private,默认的,protected,public</li><li>状态修饰符:static,final</li><li>抽象修饰符:abstract</li></ul></li><li><p>B:类:</p><ul><li><p>权限修饰符:默认修饰符,public</p></li><li><p>状态修饰符:final</p></li><li><p>抽象修饰符:abstract</p></li><li><p>用的最多的就是:public</p></li></ul></li><li><p>C:成员变量:</p><ul><li><p>权限修饰符:private,默认的,protected,public</p></li><li><p>状态修饰符:static,final</p></li><li><p>用的最多的就是:private</p></li></ul></li><li><p>D:构造方法:</p><ul><li><p>权限修饰符:private,默认的,protected,public</p></li><li><p>用的最多的就是:public</p></li></ul></li><li><p>E:成员方法:</p><ul><li><p>权限修饰符:private,默认的,protected,public</p></li><li><p>状态修饰符:static,final</p></li><li><p>抽象修饰符:abstract</p></li><li><p>用的最多的就是:public</p></li></ul></li><li><p>F:除此以外的组合规则:</p><ul><li>成员变量:public static final</li><li>成员方法:<ul><li>public static</li><li>public abstract</li><li>public final</li></ul></li></ul></li></ul><h2 id="10-08-内部类概述和访问特点-了解"><a class="header-anchor" href="#10-08-内部类概述和访问特点-了解">☆</a>10.08 内部类概述和访问特点 (了解)</h2><ul><li>A:内部类概述</li><li>B:内部类访问特点<ul><li>a:内部类可以直接访问外部类的成员,包括私有。</li><li>b:外部类要访问内部类的成员,必须创建对象。</li><li>外部类名.内部类名 对象名 = 外部类对象.内部类对象;</li></ul></li><li>C:案例演示<ul><li>内部类极其访问特点</li></ul></li></ul><h2 id="10-09-成员内部类私有使用-了解"><a class="header-anchor" href="#10-09-成员内部类私有使用-了解">☆</a>10.09 成员内部类私有使用 (了解)</h2><ul><li>private</li></ul><h2 id="10-10-静态成员内部类-了解"><a class="header-anchor" href="#10-10-静态成员内部类-了解">☆</a>10.10 静态成员内部类 (了解)</h2><ul><li>static</li><li>B:成员内部类被静态修饰后的访问方式是:<ul><li>外部类名.内部类名 对象名 = 外部类名.内部类对象;</li></ul></li></ul><h2 id="10-11-成员内部类的面试题-掌握"><a class="header-anchor" href="#10-11-成员内部类的面试题-掌握">☆</a>10.11 成员内部类的面试题 (掌握)</h2><ul><li>A:面试题</li></ul><p>要求:使用已知的变量,在控制台输出30,20,10。</p><p>//内部类之所以能访问外部类,是能获取到外部类的引用:外部类名.this</p><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Outer</span> </span>{</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Inner</span> </span>{</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">30</span>;</span><br><span class="line">System.out.println(num);</span><br><span class="line">System.out.println(<span class="keyword">this</span>.num);</span><br><span class="line">System.out.println(Outer.<span class="keyword">this</span>.num);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">InnerClassTest</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Outer.Inner oi = <span class="keyword">new</span> Outer().new Inner();</span><br><span class="line">oi.show();</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="10-12-局部内部类访问局部变量的问题-掌握"><a class="header-anchor" href="#10-12-局部内部类访问局部变量的问题-掌握">☆</a>10.12 局部内部类访问局部变量的问题 (掌握)</h2><ul><li>A:案例演示<ul><li><p>局部内部类访问局部变量必须用final修饰</p></li><li><p>局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?<br>因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用</p><p>但是jdk1.8取消了这个事情,所以我认为这是个bug</p></li></ul></li></ul><h2 id="10-13-匿名内部类的格式和理解"><a class="header-anchor" href="#10-13-匿名内部类的格式和理解">☆</a>10.13 匿名内部类的格式和理解</h2><ul><li>A:匿名内部类<ul><li>就是内部类的简化写法。</li></ul></li><li>B:前提:存在一个类或者接口<ul><li>这里的类可以是具体类也可以是抽象类。</li></ul></li><li>C:格式:</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">new 类名或者接口名(){</span><br><span class="line">重写方法;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><ul><li>D:本质是什么呢?<ul><li>是一个继承了该类或者实现了该接口的子类匿名对象。</li><li>匿名内部类当做参数传递</li></ul></li><li>E:案例演示<ul><li>按照要求来一个匿名内部类</li></ul></li></ul><h2 id="10-14-匿名内部类重写多个方法调用"><a class="header-anchor" href="#10-14-匿名内部类重写多个方法调用">☆</a>10.14 匿名内部类重写多个方法调用</h2><ul><li>A:案例演示<ul><li>匿名内部类的方法调用</li></ul></li></ul><h2 id="10-15-匿名内部类在开发中的应用"><a class="header-anchor" href="#10-15-匿名内部类在开发中的应用">☆</a>10.15 匿名内部类在开发中的应用</h2><ul><li>A:代码如下</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//这里写抽象类,接口都行</span></span><br><span class="line"><span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Person</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">PersonDemo</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">(Person p)</span> </span>{</span><br><span class="line">p.show();</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">PersonTest</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//如何调用PersonDemo中的method方法呢?</span></span><br><span class="line">PersonDemo pd = <span class="keyword">new</span> PersonDemo ();</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="10-16-匿名内部类的面试题"><a class="header-anchor" href="#10-16-匿名内部类的面试题">☆</a>10.16 匿名内部类的面试题</h2><ul><li>A:面试题<br>按照要求,补齐代码<br>要求在控制台输出”HelloWorld”</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">interface</span> <span class="title">Inter</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Outer</span> </span>{ </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Inter <span class="title">method</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">return</span> <span class="keyword">new</span> Inner(){</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line">System.out.println(<span class="string">"HelloWorld"</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="class"><span class="keyword">class</span> <span class="title">OuterDemo</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Outer.method().show();</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="10-17-day10总结"><a class="header-anchor" href="#10-17-day10总结">☆</a>10.17_day10总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
面向对象
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java学习笔记(day08)</title>
<link href="http://www.singlelovely.cn/post/75c0add7.html"/>
<id>http://www.singlelovely.cn/post/75c0add7.html</id>
<published>2018-10-09T15:35:55.000Z</published>
<updated>2020-09-21T13:41:07.528Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="08-01-代码块的概述和分类-了解-面试的时候会问-开发不用或者很少用"><a class="header-anchor" href="#08-01-代码块的概述和分类-了解-面试的时候会问-开发不用或者很少用">☆</a>08.01 代码块的概述和分类(了解)(面试的时候会问,开发不用或者很少用)</h2><ul><li>A:代码块概述<ul><li>在Java中,使用{}括起来的代码被称为代码块。</li></ul></li><li>B:代码块分类<ul><li>根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。</li></ul></li><li>C:常见代码块的应用<ul><li>a:局部代码块<ul><li>在方法中出现;限定变量生命周期,及早释放,提高内存利用率</li></ul></li><li>b:构造代码块 (初始化块)<ul><li>在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行</li></ul></li><li>c:静态代码块<ul><li>在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。</li><li>一般用于加载驱动</li></ul></li></ul></li></ul><h2 id="08-02-代码块的面试题-掌握"><a class="header-anchor" href="#08-02-代码块的面试题-掌握">☆</a>08.02 代码块的面试题 (掌握)</h2><ul><li>A:看程序写结果</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span> </span>{</span><br><span class="line"><span class="keyword">static</span> {</span><br><span class="line">System.out.println(<span class="string">"Student 静态代码块"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">{</span><br><span class="line">System.out.println(<span class="string">"Student 构造代码块"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"Student 构造方法"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Demo2_Student</span> </span>{</span><br><span class="line"><span class="keyword">static</span> {</span><br><span class="line">System.out.println(<span class="string">"Demo2_Student静态代码块"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"我是main方法"</span>);</span><br><span class="line"></span><br><span class="line">Student s1 = <span class="keyword">new</span> Student();</span><br><span class="line">Student s2 = <span class="keyword">new</span> Student();</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/*Demo2_Student静态代码块</span></span><br><span class="line"><span class="comment"> 我是main方法</span></span><br><span class="line"><span class="comment"> Student 静态代码块</span></span><br><span class="line"><span class="comment"> Student 构造代码块</span></span><br><span class="line"><span class="comment"> Student 构造方法</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"> Student 构造代码块</span></span><br><span class="line"><span class="comment"> Student 构造方法*/</span></span><br></pre></td></tr></table></figure><h2 id="08-03-继承案例演示-掌握"><a class="header-anchor" href="#08-03-继承案例演示-掌握">☆</a>08.03 继承案例演示 (掌握)</h2><ul><li>A:继承(extends)<ul><li>让类与类之间产生关系,子父类关系</li></ul></li><li>B:继承案例演示:<ul><li>动物类,猫类,狗类</li><li>定义两个属性(颜色,腿的个数)两个功能(吃饭,睡觉)</li></ul></li><li>C:案例演示<ul><li>使用继承前</li></ul></li><li>D:案例演示<ul><li>使用继承后</li></ul></li></ul><h2 id="08-04-继承的好处和弊端-掌握"><a class="header-anchor" href="#08-04-继承的好处和弊端-掌握">☆</a>08.04 继承的好处和弊端 (掌握)</h2><ul><li>A:继承的好处<ul><li>a:提高了代码的复用性</li><li>b:提高了代码的维护性</li><li>c:让类与类之间产生了关系,是多态的前提</li></ul></li><li>B:继承的弊端<ul><li><p>类的耦合性增强了。</p></li><li><p>开发的原则:高内聚,低耦合。</p></li><li><p>耦合:类与类的关系</p></li><li><p>内聚:就是自己完成某件事情的能力</p></li></ul></li></ul><h2 id="08-05-java中类的继承特点-掌握"><a class="header-anchor" href="#08-05-java中类的继承特点-掌握">☆</a>08.05 Java中类的继承特点 (掌握)</h2><ul><li>A:Java中类的继承特点<ul><li>a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)<ul><li>有些语言是支持多继承,格式:extends 类1,类2,…</li></ul></li><li>b:Java支持多层继承(继承体系)</li></ul></li><li>B:案例演示<ul><li>Java中类的继承特点<ul><li>如果想用这个体系的所有功能用最底层的类创建对象</li><li>如果想看这个体系的共性功能,看最顶层的类</li></ul></li></ul></li></ul><h2 id="08-06-继承的注意事项和什么时候使用继承-掌握"><a class="header-anchor" href="#08-06-继承的注意事项和什么时候使用继承-掌握">☆</a>08.06 继承的注意事项和什么时候使用继承 (掌握)</h2><ul><li><p>A:继承的注意事项</p><ul><li>a:子类只能继承父类所有非私有的成员(成员方法和成员变量)</li><li>b:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。</li><li>c:不要为了部分功能而去继承</li><li>项目经理 姓名 工号 工资 奖金</li><li>程序员姓名 工号 工资</li></ul></li><li><p>B:什么时候使用继承</p><ul><li>继承其实体现的是一种关系:“is a”。<br>Person<br>Student<br>Teacher<br>水果<br>苹果<br>香蕉<br>橘子</li></ul><p>采用假设法。<br>如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。</p></li></ul><h2 id="08-07-继承中成员变量的关系-掌握"><a class="header-anchor" href="#08-07-继承中成员变量的关系-掌握">☆</a>08.07 继承中成员变量的关系 (掌握)</h2><ul><li>A:案例演示<ul><li>a:不同名的变量</li><li>b:同名的变量</li></ul></li></ul><h2 id="08-08-this和super的区别和应用-掌握"><a class="header-anchor" href="#08-08-this和super的区别和应用-掌握">☆</a>08.08 this和super的区别和应用 (掌握)</h2><ul><li>A:this和super都代表什么<ul><li>this:代表当前对象的引用,谁来调用我,我就代表谁</li><li>super:代表当前对象父类的引用</li></ul></li><li>B:this和super的使用区别<ul><li>a:调用成员变量<ul><li>this.成员变量 调用本类的成员变量,也可以调用父类的成员变量</li><li>super.成员变量 调用父类的成员变量</li></ul></li><li>b:调用构造方法<ul><li>this(…)调用本类的构造方法</li><li>super(…)调用父类的构造方法</li></ul></li><li>c:调用成员方法<ul><li>this.成员方法 调用本类的成员方法,也可以调用父类的方法</li><li>super.成员方法 调用父类的成员方法</li></ul></li></ul></li></ul><h2 id="08-09-继承中构造方法的关系-掌握"><a class="header-anchor" href="#08-09-继承中构造方法的关系-掌握">☆</a>08.09 继承中构造方法的关系 (掌握)</h2><ul><li>A:案例演示<ul><li>子类中所有的构造方法默认都会访问父类中空参数的构造方法</li></ul></li><li>B:为什么呢?<ul><li><p>因为子类会继承父类中的数据,可能还会使用父类的数据。</p></li><li><p>所以,子类初始化之前,一定要先完成父类数据的初始化。</p></li><li><p>其实:</p><ul><li>每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。</li></ul></li></ul></li></ul><h2 id="08-10-继承中构造方法的注意事项-掌握"><a class="header-anchor" href="#08-10-继承中构造方法的注意事项-掌握">☆</a>08.10 继承中构造方法的注意事项 (掌握)</h2><ul><li>A:案例演示<ul><li>父类没有无参构造方法,子类怎么办?</li><li>super解决</li><li>this解决</li></ul></li><li>B:注意事项<ul><li>super(…)或者this(….)必须出现在构造方法的第一条语句上</li></ul></li></ul><h2 id="08-11-继承中的面试题-掌握"><a class="header-anchor" href="#08-11-继承中的面试题-掌握">☆</a>08.11 继承中的面试题 (掌握)</h2><ul><li>A:案例演示</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line">看程序写结果<span class="number">1</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Fu</span></span>{</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Fu</span><span class="params">()</span></span>{</span><br><span class="line">System.out.println(<span class="string">"fu"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span></span>{</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span></span>{</span><br><span class="line">System.out.println(<span class="string">"zi"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">30</span>;</span><br><span class="line">System.out.println(num);</span><br><span class="line">System.out.println(<span class="keyword">this</span>.num);</span><br><span class="line">System.out.println(<span class="keyword">super</span>.num);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Test1_Extends</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Zi z = <span class="keyword">new</span> Zi();</span><br><span class="line">z.show();</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">看程序写结果<span class="number">2</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">static</span> {</span><br><span class="line">System.out.println(<span class="string">"静态代码块Fu"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">{</span><br><span class="line">System.out.println(<span class="string">"构造代码块Fu"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Fu</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"构造方法Fu"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">static</span> {</span><br><span class="line">System.out.println(<span class="string">"静态代码块Zi"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">{</span><br><span class="line">System.out.println(<span class="string">"构造代码块Zi"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"构造方法Zi"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">Zi z = <span class="keyword">new</span> Zi(); 请执行结果。</span><br></pre></td></tr></table></figure><h2 id="08-12-继承中成员方法关系-掌握"><a class="header-anchor" href="#08-12-继承中成员方法关系-掌握">☆</a>08.12 继承中成员方法关系 (掌握)</h2><ul><li>A:案例演示<ul><li>a:不同名的方法</li><li>b:同名的方法</li></ul></li></ul><h2 id="08-13-方法重写概述及其应用-掌握"><a class="header-anchor" href="#08-13-方法重写概述及其应用-掌握">☆</a>08.13 方法重写概述及其应用 (掌握)</h2><ul><li>A:什么是方法重写<ul><li>重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类,这个我们学完面向对象讲)</li></ul></li><li>B:方法重写的应用:<ul><li>当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。</li></ul></li><li>C:案例演示<ul><li>a:定义一个手机类。</li></ul></li></ul><h2 id="08-14-方法重写的注意事项-掌握"><a class="header-anchor" href="#08-14-方法重写的注意事项-掌握">☆</a>08.14 方法重写的注意事项 (掌握)</h2><ul><li>A:方法重写注意事项<ul><li><p>a:父类中私有方法不能被重写</p><ul><li>因为父类私有方法子类根本就无法继承</li></ul></li><li><p>b:子类重写父类方法时,访问权限不能更低</p><ul><li>最好就一致</li></ul></li><li><p>c:父类静态方法,子类也必须通过静态方法进行重写</p><ul><li>其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)</li></ul></li><li><p>子类重写父类方法的时候,最好声明一模一样。</p></li></ul></li><li>B:案例演示<ul><li>方法重写注意事项</li></ul></li></ul><h2 id="08-15-方法重写的面试题-掌握"><a class="header-anchor" href="#08-15-方法重写的面试题-掌握">☆</a>08.15 方法重写的面试题 (掌握)</h2><ul><li>A:方法重写的面试题<ul><li><p>Override和Overload的区别?Overload能改变返回值类型吗?</p></li><li><p>overload可以改变返回值类型,只看参数列表</p></li><li><p>方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的</p></li><li><p>方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。</p></li><li><p>子类对象调用方法的时候:</p><ul><li>先找子类本身,再找父类。</li></ul></li></ul></li></ul><h2 id="08-16-使用继承前的学生和老师案例-掌握"><a class="header-anchor" href="#08-16-使用继承前的学生和老师案例-掌握">☆</a>08.16 使用继承前的学生和老师案例 (掌握)</h2><ul><li>A:案例演示<ul><li>使用继承前的学生和老师案例</li><li>属性:姓名,年龄</li><li>行为:吃饭</li><li>老师有特有的方法:讲课</li><li>学生有特有的方法:学习</li></ul></li></ul><h2 id="08-17-使用继承后的学生和老师案例-掌握"><a class="header-anchor" href="#08-17-使用继承后的学生和老师案例-掌握">☆</a>08.17 使用继承后的学生和老师案例 (掌握)</h2><ul><li>A:案例演示<ul><li>使用继承后的学生和老师案例</li></ul></li></ul><h2 id="08-18-猫狗案例分析-实现及测试-掌握"><a class="header-anchor" href="#08-18-猫狗案例分析-实现及测试-掌握">☆</a>08.18 猫狗案例分析,实现及测试 (掌握)</h2><ul><li>A:猫狗案例分析</li><li>B:案例演示<ul><li>猫狗案例继承版</li><li>属性:毛的颜色,腿的个数</li><li>行为:吃饭</li><li>猫特有行为:抓老鼠catchMouse</li><li>狗特有行为:看家lookHome</li></ul></li></ul><h2 id="08-19-final关键字修饰类-方法以及变量的特点-掌握"><a class="header-anchor" href="#08-19-final关键字修饰类-方法以及变量的特点-掌握">☆</a>08.19 final关键字修饰类,方法以及变量的特点 (掌握)</h2><ul><li>A:final概述</li><li>B:final修饰特点<ul><li>修饰类,类不能被继承</li><li>修饰变量,变量就变成了常量,只能被赋值一次</li><li>修饰方法,方法不能被重写</li></ul></li><li>C:案例演示<ul><li>final修饰特点</li></ul></li></ul><h2 id="08-20-final关键字修饰局部变量-掌握"><a class="header-anchor" href="#08-20-final关键字修饰局部变量-掌握">☆</a>08.20 final关键字修饰局部变量 (掌握)</h2><ul><li>A:案例演示<ul><li><p>方法内部或者方法声明上都演示一下(了解)</p></li><li><p>基本类型,是值不能被改变</p></li><li><p>引用类型,是地址值不能被改变,对象中的属性可以改变</p></li></ul></li></ul><h2 id="08-21-final修饰变量的初始化时机-掌握"><a class="header-anchor" href="#08-21-final修饰变量的初始化时机-掌握">☆</a>08.21 final修饰变量的初始化时机 (掌握)</h2><ul><li>A:final修饰变量的初始化时机<ul><li>显示初始化</li><li>在对象构造完毕前即可</li></ul></li></ul><h2 id="08-22-day08总结"><a class="header-anchor" href="#08-22-day08总结">☆</a>08.22_day08总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
面向对象
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java学习笔记(day07)</title>
<link href="http://www.singlelovely.cn/post/2da3bd81.html"/>
<id>http://www.singlelovely.cn/post/2da3bd81.html</id>
<published>2018-10-09T07:15:55.000Z</published>
<updated>2020-09-21T13:41:07.527Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="07-01-构造方法constructor概述和格式-掌握"><a class="header-anchor" href="#07-01-构造方法constructor概述和格式-掌握">☆</a>07.01 构造方法Constructor概述和格式 (掌握)</h2><ul><li>A:构造方法概述和作用<ul><li>给对象的数据(属性)进行初始化</li></ul></li><li>B:构造方法格式特点<ul><li>a:方法名与类名相同(大小也要与类名一致)</li><li>b:没有返回值类型,连void都没有</li><li>c:没有具体的返回值return;</li></ul></li></ul><h2 id="07-02-构造方法的重载及注意事项-掌握"><a class="header-anchor" href="#07-02-构造方法的重载及注意事项-掌握">☆</a>07.02 构造方法的重载及注意事项 (掌握)</h2><ul><li>A:案例演示<ul><li>构造方法的重载</li><li>重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表</li></ul></li><li>B:构造方法注意事项<ul><li>a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。</li><li>b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。<ul><li>注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法</li></ul></li></ul></li></ul><h2 id="07-03-给成员变量赋值的两种方式的区别"><a class="header-anchor" href="#07-03-给成员变量赋值的两种方式的区别">☆</a>07.03 给成员变量赋值的两种方式的区别</h2><ul><li>A:setXxx()方法<ul><li>修改属性值</li></ul></li><li>B:构造方法<ul><li>给对象中属性进行初始化</li></ul></li></ul><h2 id="07-04-学生类的代码及测试-掌握"><a class="header-anchor" href="#07-04-学生类的代码及测试-掌握">☆</a>07.04 学生类的代码及测试 (掌握)</h2><ul><li><p>A:案例演示</p><ul><li>学生类:<ul><li>成员变量:<ul><li>name,age</li></ul></li><li>构造方法:<ul><li>无参,带两个参</li></ul></li><li>成员方法:<ul><li>getXxx()/setXxx()</li><li>show():输出该类的所有成员变量值</li></ul></li></ul></li></ul></li><li><p>B:给成员变量赋值:</p><ul><li>a:setXxx()方法</li><li>b:构造方法</li></ul></li><li><p>C:输出成员变量值的方式:</p><ul><li>a:通过getXxx()分别获取然后拼接</li><li>b:通过调用show()方法搞定</li></ul></li></ul><h2 id="07-05-手机类的代码及测试-掌握"><a class="header-anchor" href="#07-05-手机类的代码及测试-掌握">☆</a>07.05 手机类的代码及测试 (掌握)</h2><ul><li>A:案例演示<ul><li>模仿学生类,完成手机类代码</li></ul></li></ul><h2 id="07-06-创建一个对象的步骤-掌握"><a class="header-anchor" href="#07-06-创建一个对象的步骤-掌握">☆</a>07.06 创建一个对象的步骤 (掌握)</h2><ul><li>A:画图演示<ul><li>画图说明一个对象的创建过程做了哪些事情?</li><li>Student s = new Student();</li><li>1,Student.class加载进内存</li><li>2,声明一个Student类型引用s</li><li>3,在堆内存创建对象,</li><li>4,给对象中属性默认初始化值</li><li>5,属性进行显示初始化</li><li>6,构造方法进栈,对对象中的属性赋值,构造方法弹栈</li><li>7,将对象的地址值赋值给s</li></ul></li></ul><h2 id="07-07-长方形案例练习-掌握"><a class="header-anchor" href="#07-07-长方形案例练习-掌握">☆</a>07.07 长方形案例练习 (掌握)</h2><ul><li>A:案例演示<ul><li>需求:<ul><li>定义一个长方形类,定义 求周长和面积的方法,</li><li>然后定义一个测试类进行测试。</li></ul></li></ul></li></ul><h2 id="07-08-员工类案例练习-掌握"><a class="header-anchor" href="#07-08-员工类案例练习-掌握">☆</a>07.08 员工类案例练习 (掌握)</h2><ul><li>A:案例演示<ul><li>需求:定义一个员工类Employee</li><li>自己分析出几个成员,然后给出成员变量<ul><li>姓名name,工号id,工资salary</li></ul></li><li>构造方法,<ul><li>空参和有参的</li></ul></li><li>getXxx()setXxx()方法,</li><li>以及一个显示所有成员信息的方法。并测试。<ul><li>work</li></ul></li></ul></li></ul><h2 id="07-09-static关键字及内存图-了解"><a class="header-anchor" href="#07-09-static关键字及内存图-了解">☆</a>07.09 static关键字及内存图 (了解)</h2><ul><li><p>A:案例演示</p><ul><li>通过一个案例引入static关键字。</li><li>人类:Person。每个人都有国籍,中国。</li></ul></li><li><p>B:画图演示</p><ul><li>带有static的内存图</li></ul></li></ul><h2 id="07-10-static关键字的特点-掌握"><a class="header-anchor" href="#07-10-static关键字的特点-掌握">☆</a>07.10 static关键字的特点 (掌握)</h2><ul><li>A:static关键字的特点<ul><li>a:随着类的加载而加载</li><li>b:优先于对象存在</li><li>c:被类的所有对象共享<ul><li>举例:咱们班级的学生应该共用同一个班级编号。</li><li>其实这个特点也是在告诉我们什么时候使用静态?<ul><li>如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。</li></ul></li><li>举例:<ul><li>饮水机(用静态修饰)</li><li>水杯(不能用静态修饰)</li><li>共性用静态,特性用非静态</li></ul></li></ul></li><li>d:可以通过类名调用<ul><li>其实它本身也可以通过对象名调用。</li><li>推荐使用类名调用。</li><li>静态修饰的内容一般我们称其为:与类相关的,类成员</li></ul></li></ul></li><li>B:案例演示<ul><li>static关键字的特点</li></ul></li></ul><h2 id="07-11-static的注意事项-掌握"><a class="header-anchor" href="#07-11-static的注意事项-掌握">☆</a>07.11 static的注意事项 (掌握)</h2><ul><li>A:static的注意事项<ul><li>a:在静态方法中是没有this关键字的<ul><li>如何理解呢?<ul><li>静态是随着类的加载而加载,this是随着对象的创建而存在。</li><li>静态比对象先存在。</li></ul></li></ul></li><li>b:静态方法只能访问静态的成员变量和静态的成员方法<ul><li>静态方法:<ul><li>成员变量:只能访问静态变量</li><li>成员方法:只能访问静态成员方法</li></ul></li><li>非静态方法:<ul><li>成员变量:可以是静态的,也可以是非静态的</li><li>成员方法:可是是静态的成员方法,也可以是非静态的成员方法。</li></ul></li><li>简单记:<ul><li>静态只能访问静态。</li></ul></li></ul></li></ul></li><li>B:案例演示<ul><li>static的注意事项</li></ul></li></ul><h2 id="07-12-静态变量和成员变量的区别-掌握"><a class="header-anchor" href="#07-12-静态变量和成员变量的区别-掌握">☆</a>07.12 静态变量和成员变量的区别 (掌握)</h2><ul><li>静态变量也叫类变量 成员变量也叫对象变量</li><li>A:所属不同<ul><li>静态变量属于类,所以也称为为类变量</li><li>成员变量属于对象,所以也称为实例变量(对象变量)</li></ul></li><li>B:内存中位置不同<ul><li>静态变量存储于方法区的静态区</li><li>成员变量存储于堆内存</li></ul></li><li>C:内存出现时间不同<ul><li>静态变量随着类的加载而加载,随着类的消失而消失</li><li>成员变量随着对象的创建而存在,随着对象的消失而消失</li></ul></li><li>D:调用不同<ul><li>静态变量可以通过类名调用,也可以通过对象调用</li><li>成员变量只能通过对 象名调用</li></ul></li></ul><h2 id="07-13-main方法的格式详细解释-了解"><a class="header-anchor" href="#07-13-main方法的格式详细解释-了解">☆</a>07.13 main方法的格式详细解释 (了解)</h2><ul><li>A:格式<ul><li>public static void main(String[] args) {}</li></ul></li><li>B:针对格式的解释<ul><li>public 被jvm调用,访问权限足够大。</li><li>static 被jvm调用,不用创建对象,直接类名访问</li><li>void被jvm调用,不需要给jvm返回值</li><li>main 一个通用的名称,虽然不是关键字,但是被jvm识别</li><li>String[] args 以前用于接收键盘录入的</li></ul></li><li>C:演示案例<ul><li>通过args接收键盘例如数据</li></ul></li></ul><h2 id="07-14-工具类中使用静态-了解"><a class="header-anchor" href="#07-14-工具类中使用静态-了解">☆</a>07.14 工具类中使用静态 (了解)</h2><ul><li>A:制作一个工具类<ul><li>ArrayTool</li><li>1,获取最大值</li><li>2,数组的遍历</li><li>3,数组的反转</li></ul></li></ul><h2 id="07-15-说明书的制作过程-了解"><a class="header-anchor" href="#07-15-说明书的制作过程-了解">☆</a>07.15 说明书的制作过程 (了解)</h2><ul><li>A:对工具类加入文档注释</li><li>B:通过javadoc命令生成说明书<ul><li>@author(提取作者内容)</li><li>@version(提取版本内容)</li><li>javadoc -d 指定的文件目录 -author -version ArrayTool.java</li><li>@param 参数名称//形式参数的变量名称@return 函数运行完返回的数据</li></ul></li></ul><h2 id="07-16-如何使用jdk提供的帮助文档-了解"><a class="header-anchor" href="#07-16-如何使用jdk提供的帮助文档-了解">☆</a>07.16 如何使用JDK提供的帮助文档 (了解)</h2><ul><li>A:找到文档,打开文档</li><li>B:点击显示,找到索引,出现输入框</li><li>C:你应该知道你找谁?举例:Scanner</li><li>D:看这个类的结构(需不需要导包)<ul><li>成员变量字段</li><li>构造方法构造方法</li><li>成员方法方法</li></ul></li></ul><h2 id="07-17-学习math类的随机数功能-了解"><a class="header-anchor" href="#07-17-学习math类的随机数功能-了解">☆</a>07.17 学习Math类的随机数功能 (了解)</h2><ul><li>打开JDK提供的帮助文档学习</li><li>A:Math类概述<ul><li>类包含用于执行基本数学运算的方法</li></ul></li><li>B:Math类特点<ul><li>由于Math类在java.lang包下,所以不需要导包。</li><li>因为它的成员全部是静态的,所以私有了构造方法</li></ul></li><li>C:获取随机数的方法<ul><li>public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。</li></ul></li><li>D:我要获取一个1-100之间的随机数,肿么办?<ul><li>int number = (int)(Math.random()*100)+1;</li></ul></li></ul><h2 id="07-18-猜数字小游戏案例-了解"><a class="header-anchor" href="#07-18-猜数字小游戏案例-了解">☆</a>07.18 猜数字小游戏案例 (了解)</h2><ul><li>A:案例演示<ul><li>需求:猜数字小游戏(数据在1-100之间)</li></ul></li></ul><h2 id="07-19-day07总结"><a class="header-anchor" href="#07-19-day07总结">☆</a>07.19_day07总结</h2><p>把今天的知识点总结一遍。</p>]]></content>
<summary type="html">
面向对象
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java学习笔记(day06)</title>
<link href="http://www.singlelovely.cn/post/951fdae4.html"/>
<id>http://www.singlelovely.cn/post/951fdae4.html</id>
<published>2018-10-08T10:00:00.000Z</published>
<updated>2020-09-21T13:41:07.527Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="06-01-面向对象思想概述-了解"><a class="header-anchor" href="#06-01-面向对象思想概述-了解">☆</a>06.01 面向对象思想概述 (了解)</h2><ul><li>A:面向过程思想概述<ul><li>第一步</li><li>第二步</li></ul></li><li>B:面向对象思想概述<ul><li>找对象(第一步,第二步)</li></ul></li><li>C:举例<ul><li>买煎饼果子</li><li>洗衣服</li></ul></li><li>D:面向对象思想特点<ul><li>a:是一种更符合我们思想习惯的思想</li><li>b:可以将复杂的事情简单化</li><li>c:将我们从执行者变成了指挥者<ul><li>角色发生了转换</li></ul></li></ul></li><li>E:面向对象开发<ul><li>就是不断的创建对象,使用对象,指挥对象做事情。</li></ul></li><li>F:面向对象设计<ul><li>其实就是在管理和维护对象之间的关系。</li></ul></li><li>G:面向对象特征<ul><li>封装(encapsulation)</li><li>继承(inheritance)</li><li>多态(polymorphism)</li></ul></li></ul><h2 id="06-02-类与对象概述-掌握"><a class="header-anchor" href="#06-02-类与对象概述-掌握">☆</a>06.02 类与对象概述 (掌握)</h2><ul><li>A:我们学习编程是为了什么<ul><li>为了把我们日常生活中实物用学习语言描述出来</li></ul></li><li>B:我们如何描述现实世界事物<ul><li>属性就是该事物的描述信息(事物身上的名词)</li><li>行为就是该事物能够做什么(事物身上的动词)</li></ul></li><li>C:Java中最基本的单位是类,Java中用class描述事物也是如此<ul><li>成员变量就是事物的属性</li><li>成员方法就是事物的行为</li></ul></li><li>D:定义类其实就是定义类的成员(成员变量和成员方法)<ul><li>a:成员变量和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。</li><li>b:成员方法和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。</li></ul></li><li>E:类和对象的概念<ul><li>a:类:是一组相关的属性和行为的集合</li><li>b:对象:是该类事物的具体体现</li><li>c:举例:<ul><li>类 学生</li><li>对象具体的某个学生就是一个对象</li></ul></li></ul></li></ul><h2 id="06-03-学生类的定义-掌握"><a class="header-anchor" href="#06-03-学生类的定义-掌握">☆</a>06.03 学生类的定义 (掌握)</h2><ul><li>A:学生事物</li><li>B:学生类</li><li>C:案例演示<ul><li>属性:姓名,年龄,性别</li><li>行为:学习,睡觉</li></ul></li></ul><h2 id="06-04-手机类的定义-掌握"><a class="header-anchor" href="#06-04-手机类的定义-掌握">☆</a>06.04 手机类的定义 (掌握)</h2><ul><li>模仿学生类,让学生自己完成<ul><li>属性:品牌(brand)价格(price)</li><li>行为:打电话(call),发信息(sendMessage)玩游戏(playGame)</li></ul></li></ul><h2 id="06-05-学生类的使用-掌握"><a class="header-anchor" href="#06-05-学生类的使用-掌握">☆</a>06.05 学生类的使用 (掌握)</h2><ul><li>A:文件名问题<ul><li>在一个java文件中写两个类:一个基本的类,一个测试类。</li><li>建议:文件名称和测试类名称一致。</li></ul></li><li>B:如何使用对象?<ul><li>创建对象并使用</li><li>格式:类名 对象名 = new 类名();</li></ul></li><li>D:如何使用成员变量呢?<ul><li>对象名.变量名</li></ul></li><li>E:如何使用成员方法呢?<ul><li>对象名.方法名(…)</li></ul></li></ul><h2 id="06-06-手机类的使用-掌握"><a class="header-anchor" href="#06-06-手机类的使用-掌握">☆</a>06.06 手机类的使用 (掌握)</h2><ul><li>A:学生自己完成<ul><li>模仿学生类,让学生自己完成</li></ul></li></ul><h2 id="06-07-一个对象的内存图-掌握"><a class="header-anchor" href="#06-07-一个对象的内存图-掌握">☆</a>06.07 一个对象的内存图 (掌握)</h2><ul><li>A:画图演示<ul><li>一个对象</li></ul></li></ul><h2 id="06-08-二个对象的内存图-了解"><a class="header-anchor" href="#06-08-二个对象的内存图-了解">☆</a>06.08 二个对象的内存图 (了解)</h2><ul><li>A:画图演示<ul><li>二个不同的对象</li></ul></li></ul><h2 id="06-09-三个引用两个对象的内存图-了解"><a class="header-anchor" href="#06-09-三个引用两个对象的内存图-了解">☆</a>06.09 三个引用两个对象的内存图 (了解)</h2><ul><li>A:画图演示<ul><li>三个引用,有两个对象的引用指向同一个地址</li></ul></li></ul><h2 id="06-10-成员变量和局部变量的区别-掌握"><a class="header-anchor" href="#06-10-成员变量和局部变量的区别-掌握">☆</a>06.10 成员变量和局部变量的区别 (掌握)</h2><ul><li><p>A:在类中的位置不同</p><ul><li>成员变量:在类中方法外</li><li>局部变量:在方法定义中或者方法声明上</li></ul></li><li><p>B:在内存中的位置不同</p><ul><li>成员变量:在堆内存(成员变量属于对象,对象进堆内存)</li><li>局部变量:在栈内存(局部变量属于方法,方法进栈内存)</li></ul></li><li><p>C:生命周期不同</p><ul><li>成员变量:随着对象的创建而存在,随着对象的消失而消失</li><li>局部变量:随着方法的调用而存在,随着方法的调用完毕而消失</li></ul></li><li><p>D:初始化值不同</p><ul><li>成员变量:有默认初始化值</li><li>局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。</li></ul></li><li><p>注意事项:</p><ul><li>局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。</li><li>基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char</li><li>引用数据类型变量包括哪些:数组,类,接口,枚举</li></ul></li></ul><h2 id="06-11-方法的形式参数是类名的时候如何调用-掌握"><a class="header-anchor" href="#06-11-方法的形式参数是类名的时候如何调用-掌握">☆</a>06.11 方法的形式参数是类名的时候如何调用 (掌握)</h2><ul><li>A:方法的参数是类名public void print(Student s){}//print(new Student());<ul><li>如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。</li></ul></li></ul><h2 id="06-12-匿名对象的概述和应用-掌握"><a class="header-anchor" href="#06-12-匿名对象的概述和应用-掌握">☆</a>06.12 匿名对象的概述和应用 (掌握)</h2><ul><li>A:什么是匿名对象<ul><li>没有名字的对象</li></ul></li><li>B:匿名对象应用场景<ul><li>a:调用方法,仅仅只调用一次的时候。<ul><li>那么,这种匿名调用有什么好处吗?<ul><li>节省代码</li></ul></li><li>注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。</li></ul></li><li>b:匿名对象可以作为实际参数传递</li></ul></li><li>C:案例演示<ul><li>匿名对象应用场景</li></ul></li></ul><h2 id="06-13-封装的概述-掌握"><a class="header-anchor" href="#06-13-封装的概述-掌握">☆</a>06.13 封装的概述 (掌握)</h2><ul><li><p>A:封装概述</p><ul><li>是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。</li></ul></li><li><p>B:封装好处</p><ul><li>隐藏实现细节,提供公共的访问方式</li><li>提高了代码的复用性</li><li>提高安全性。</li></ul></li><li><p>C:封装原则</p><ul><li>将不需要对外提供的内容都隐藏起来。</li><li>把属性隐藏,提供公共方法对其访问。</li></ul></li></ul><h2 id="06-14-private关键字的概述和特点-掌握"><a class="header-anchor" href="#06-14-private关键字的概述和特点-掌握">☆</a>06.14 private关键字的概述和特点 (掌握)</h2><ul><li>A:人类赋值年龄的问题</li><li>B:private关键字特点<ul><li>a:是一个权限修饰符</li><li>b:可以修饰成员变量和成员方法</li><li>c:被其修饰的成员只能在本类中被访问</li></ul></li><li>C:案例演示<ul><li>封装和private的应用:</li><li>A:把成员变量用private修饰</li><li>B:提供对应的getXxx()和setXxx()方法</li><li>private仅仅是封装的一种体现形式,不能说封装就是私有</li></ul></li></ul><h2 id="06-15-this关键字的概述和应用-掌握"><a class="header-anchor" href="#06-15-this关键字的概述和应用-掌握">☆</a>06.15 this关键字的概述和应用 (掌握)</h2><ul><li>A:this关键字特点<ul><li>代表当前对象的引用</li></ul></li><li>B:案例演示<ul><li>this的应用场景</li><li>用来区分成员变量和局部变量重名</li></ul></li></ul><h2 id="06-16-手机类代码及其测试-掌握"><a class="header-anchor" href="#06-16-手机类代码及其测试-掌握">☆</a>06.16 手机类代码及其测试 (掌握)</h2><ul><li>A:学生练习<ul><li>请把手机类写成一个标准类,然后创建对象测试功能。</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Demo2_Phone</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Phone p1 = <span class="keyword">new</span> Phone();</span><br><span class="line">p1.setBrand(<span class="string">"三星"</span>);</span><br><span class="line">p1.setPrice(<span class="number">5288</span>);</span><br><span class="line"></span><br><span class="line">System.out.println(p1.getBrand() + <span class="string">"..."</span> + p1.getPrice());</span><br><span class="line">p1.call();</span><br><span class="line">p1.sendMessage();</span><br><span class="line">p1.playGame();</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">属性:品牌brand,价格price</span></span><br><span class="line"><span class="comment">行为:打电话call,发短信sendMessage,玩游戏,playGame</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Phone</span> </span>{<span class="comment">//java bean</span></span><br><span class="line"><span class="keyword">private</span> String brand;<span class="comment">//品牌</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> price;<span class="comment">//价格</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setBrand</span><span class="params">(String brand)</span> </span>{<span class="comment">//设置品牌</span></span><br><span class="line"><span class="keyword">this</span>.brand = brand;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getBrand</span><span class="params">()</span> </span>{<span class="comment">//获取品牌</span></span><br><span class="line"><span class="keyword">return</span> <span class="keyword">this</span>.brand;<span class="comment">//this.可以省略,你不加系统会默认给你加</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setPrice</span><span class="params">(<span class="keyword">int</span> price)</span> </span>{<span class="comment">//设置价格</span></span><br><span class="line"><span class="keyword">this</span>.price = price;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getPrice</span><span class="params">()</span> </span>{<span class="comment">//获取价格</span></span><br><span class="line"><span class="keyword">return</span> price;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">call</span><span class="params">()</span> </span>{<span class="comment">//打电话</span></span><br><span class="line">System.out.println(<span class="string">"打电话"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">sendMessage</span><span class="params">()</span> </span>{<span class="comment">//发短信</span></span><br><span class="line">System.out.println(<span class="string">"发短信"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">playGame</span><span class="params">()</span> </span>{<span class="comment">//玩游戏</span></span><br><span class="line">System.out.println(<span class="string">"玩游戏"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="06-17-day06总结"><a class="header-anchor" href="#06-17-day06总结">☆</a>06.17_day06总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
面向对象
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>汇编基础知识</title>
<link href="http://www.singlelovely.cn/post/bfc7c122.html"/>
<id>http://www.singlelovely.cn/post/bfc7c122.html</id>
<published>2018-10-05T13:40:00.000Z</published>
<updated>2020-09-21T13:41:07.552Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="汇编语言的一般概念"><a class="header-anchor" href="#汇编语言的一般概念">☆</a>汇编语言的一般概念</h2><p>计算机程序设计语言可分为<span id="inline-blue">机器语言</span>、<span id="inline-blue">高级语言</span>和<span id="inline-blue">汇编语言</span>三类。</p><h3 id="机器语言"><a class="header-anchor" href="#机器语言">☆</a>机器语言</h3><p>机器语言就是把控制计算机的命令和各种数 据直接用二进制数码表示的一种程序设计语言。</p><p><span id="inline-yellow">优点</span>:机器语言最直接地表示了计算机内部的基 本操作,用它编制的程序在计算机中运行的效率 最高。即运行速度最快,程序长度最短。<br><span id="inline-yellow">缺点</span>:用二进制数表示的内容既不便于记忆又难 于阅读。</p><h3 id="高级语言"><a class="header-anchor" href="#高级语言">☆</a>高级语言</h3><p>高级语言将计算机内部的操作细节屏蔽起 来,用户不需要知道计算机内部数据的传送和 处理的细节,使用类似于自然语言的一些语句 来编制程序,完成指定的任务。</p><p><span id="inline-yellow">特点</span>:程序设计简单,但程序效率较机器语言低。</p><h3 id="汇编语言"><a class="header-anchor" href="#汇编语言">☆</a>汇编语言</h3><h4 id="定义"><a class="header-anchor" href="#定义">☆</a>定义</h4><p>为了便于记忆和阅读,使用字母和符号来 表示机器语言的命令,用十进制数或十六进制 数来表示数据,这样的计算机程序设计语言就 称为汇编语言。</p><h4 id="汇编语言程序与机器语言程序的关系"><a class="header-anchor" href="#汇编语言程序与机器语言程序的关系">☆</a>汇编语言程序与机器语言程序的关系</h4><p>一条汇编语言的语句与一条机器语言指令对应, 汇编语言程序与机器语言程序效率相同。</p><h4 id="不同类型计算机有不同的机器指令系统和汇编语言描述"><a class="header-anchor" href="#不同类型计算机有不同的机器指令系统和汇编语言描述">☆</a>不同类型计算机有不同的机器指令系统和汇编语言描述</h4><p>对一台计算机来说,机器语言的执行主要取 决于该计算机的中央处理器CPU。因此熟悉计算 机内部结构主要是指CPU的功能结构。它包括:</p><p>CPU中有多少个寄存器及其作用? CPU是如何访问存储器? 输入输出操作的方式有哪些?</p><h2 id="学习和使用汇编语言的目的"><a class="header-anchor" href="#学习和使用汇编语言的目的">☆</a>学习和使用汇编语言的目的</h2><p><span id="inline-toc">1.</span> 学习和使用汇编语言可以从根本上认识、理解 计算机的工作过程。<br>通过用汇编语言编制程序可以更清楚地了解计 算机是如何完成各种复杂的工作。在此基础上, 程序设计人员能更充分地利用机器硬件的全部功 能,发挥机器的长处。<br><span id="inline-toc">2.</span> 在计算机系统中,某些功能必须用汇编语言程序 来实现。<br>如:机器自检、系统初始化、实际的输入输出设备的 操作等。<br><span id="inline-toc">3.</span> 汇编语言程序的效率高于高级语言程序<br>“效率”有两个方面的含义:程序的目标代码长 度和运行的速度。<br>在某些要求节省内存空间和提高程序运行速度的 应用场合,如实时过程控制、智能仪器仪表等, 常常用汇编语言来编制程序。</p><h2 id="进位计数制及其相互转换"><a class="header-anchor" href="#进位计数制及其相互转换">☆</a>进位计数制及其相互转换</h2><h3 id="进位计数制"><a class="header-anchor" href="#进位计数制">☆</a>进位计数制</h3><p>使用一定个数的数码的组合来表示数字,这种 表示方法称为进位计数制。根据所使用的数码的 个数,就产生了不同的进位计数制。</p><p>将各个位置上所表示的基本数值称为位权, 简称权。</p><p>每个数位上能使用不同数码的个数称为基数。</p><p><span id="font-green">例:</span>十进制有十个数码0~9,基数为10,二进制基 数为2。</p><p>B(Binary)--二进制数<br>O (Octal)或Q--八进制数<br>D (Decimal)--十进制数<br>H (Hexadecimal)--十六进制数<br>如未使用任何字母,则默认表示是十进制数</p><h3 id="各种数制间的相互转换"><a class="header-anchor" href="#各种数制间的相互转换">☆</a>各种数制间的相互转换</h3><h4 id="十进制整数转换为二进制数"><a class="header-anchor" href="#十进制整数转换为二进制数">☆</a>十进制整数转换为二进制数</h4><p><span id="inline-toc">1.</span> 减权定位法</p><ul><li>从二进制数高位起,依次用待转换的十进制数与各位权值进行比较;</li><li>如够减,则该数位系数Ki=1,同时减去该位权值, 余数作为下一次比较的值;</li><li>如不够减,则Ki=0。</li></ul><p><span id="inline-toc">2.</span> 除基取余法</p><p>将十进制数除以基数2,其余数为二进制数的最低位,再用其商除2,其余数为次低位,反复做下去,直到商0。</p><p>这种转换方法同样适合于其它进制数之间的转换。(红)</p><h4 id="十进制小数转换为二进制数"><a class="header-anchor" href="#十进制小数转换为二进制数">☆</a>十进制小数转换为二进制数</h4><p><span id="inline-toc">1.</span> 减权定位法</p><p><span id="font-green">例:</span>将十进制数0.645转换为二进制数</p><table><thead><tr><th>减权比较</th><th>Ki</th><th>对应二进制数</th></tr></thead><tbody><tr><td>0.645-0.5 =0.145</td><td>k-1</td><td>1</td></tr><tr><td>0.145<0.25</td><td>k-2</td><td>0</td></tr><tr><td>0.145-0.125=0.02</td><td>k-3</td><td>1</td></tr><tr><td>0.02<0.0625</td><td>k-4</td><td>0</td></tr><tr><td>0.02<0.03125</td><td>k-5</td><td>0</td></tr><tr><td>0.02-0.015625</td><td>k-6</td><td>1</td></tr></tbody></table><p>所以 0.645D=0.101001B</p><p>转换时应根据程序要求的精度或计算机的字长来确 定二进制的位数.(黄框)</p><p><span id="inline-toc">2.</span> 乘基取整法</p><p><span id="font-green">例:</span>将0.8125D转换为二进制数</p><table><thead><tr><th>乘以基数</th><th>Ki</th><th>整数部分</th></tr></thead><tbody><tr><td>0.8125×2=1.625</td><td>K-1</td><td>1</td></tr><tr><td>0.625×2=1.25</td><td>K-2</td><td>1</td></tr><tr><td>0.25×2=0.5</td><td>K-3</td><td>0</td></tr><tr><td>0.5×2=1.</td><td>K-4</td><td>1</td></tr></tbody></table><p>所以 0.8125D=0.1101B</p><h4 id="二进制整数转换为十进制数"><a class="header-anchor" href="#二进制整数转换为十进制数">☆</a>二进制整数转换为十进制数</h4><p><span id="inline-toc">1.</span> 按权相加法</p><p>101000101B<br>=1×2<sup>8</sup>+1×2<sup>6</sup>+1×2<sup>2</sup>+1×2<sup>0</sup><br>=256+64+4+1<br>=325</p><p><span id="inline-toc">2.</span> 逐次乘基相加法</p><p><img src="https://data.singlelovely.cn/xsj/2018/10/8/01.png" alt=" "></p><h4 id="二进制小数转换为十进制数"><a class="header-anchor" href="#二进制小数转换为十进制数">☆</a>二进制小数转换为十进制数</h4><p><span id="inline-toc">1.</span> 按权相加法</p><p>0.101001B<br>= 1×2-1+1×2-3+1×2-6<br>= 0.5+0.125+0.0156<br>= 0.640625D</p><p><span id="inline-toc">2.</span> 逐次除基相加法</p><p><img src="https://data.singlelovely.cn/xsj/2018/10/8/02.png" alt=" "></p><h4 id="二进制与八进制和十六进制间的转换"><a class="header-anchor" href="#二进制与八进制和十六进制间的转换">☆</a>二进制与八进制和十六进制间的转换</h4><p>二进制与八进制和十六进制之间的对应关系:<br>三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数。</p><h2 id="带符号数的表示3"><a class="header-anchor" href="#带符号数的表示3">☆</a>带符号数的表示3</h2><p>用“+”或“-”表示正负的数叫真值(黄色块)<br>用“0”或“1”表示正负的数叫机器数</p><h3 id="原码表示"><a class="header-anchor" href="#原码表示">☆</a>原码表示</h3><p>二进制数的最高位表示符号,0表示正,1表示负。数值 部分用二进制数绝对值表示</p><p>8位二进制数原码的最大数为01111111(+127) 最小数为11111111 (-127)<br>8位二进制数表示范围:-127≤X≤+127</p><p>0的原码有两种表示形式:00000000和10000000(+0和-0)</p><h3 id="补码的表示"><a class="header-anchor" href="#补码的表示">☆</a>补码的表示</h3><p><span id="inline-toc">1.</span> 补码的定义</p><p>带符号数X的补码表示[X]<sub>补</sub>定义为:</p><p id="div-border-left-purple">[X]<sub>补</sub>=M+X (Mod M)</p><p>其中模数M根据机器数的位数而定,如位数为8则M=2<sup>8</sup> 用补码表示的机器数,符号位仍然表示数的符号:0为正,1为负。对于正数,补码与原码相同,对于负数需要进行变换。</p><p><span id="inline-toc">2.</span> 由真值、原码变换为补码</p><p>由于正数的原码与补码相同,下面讨论负数的变换方法。</p><p>负数的真值变换为补码的方法:将各位变反(0变1,1变0) 然后在最低位加1.<br>负数的原码变换为补码:保持符号位不变,其余各位变反, 最低位加1。</p><p><span id="font-green">例:</span>将-59变换为补码<br><span id="inline-green">真值</span> -00111011 <span id="inline-blue">变反</span> 11000100 <span id="inline-yellow">加1</span> 11000101<br><span id="inline-green">原码</span> 10111011 <span id="inline-blue">变反</span> 11000100 <span id="inline-yellow">加1</span> 11000101</p><p>所以 [-59]<sub>补</sub>=11000101</p><p><span id="inline-toc">3.</span> 补码数的表示范围</p><p>当位数为8时,最大补码为01111111=[+127]<sub>补</sub> 最小补码为10000000=[-128]<sub>补</sub></p><p>0的补码只有一个,[0]<sub>补</sub>=00000000,而10000000是[-128]<sub>补</sub>11111111=[-1]<sub>补</sub></p><p>对于16位数,则补码表示范围为-32768~+32767</p><p><span id="inline-toc">4.</span> 补码的加减运算</p><p>规则:</p><p id="div-border-left-yellow">[X+Y]<sub>补</sub>=[X]<sub>补</sub>+[Y]<sub>补</sub><br>[X-Y]<sub>补</sub>=[X]<sub>补</sub>-[Y]<sub>补</sub>=[X]<sub>补</sub>+[-Y]<sub>补</sub></p><p><span id="inline-yellow">进位超出</span>:舍去</p><h2 id="字符的表示"><a class="header-anchor" href="#字符的表示">☆</a>字符的表示</h2><p>标准ASCII码为一字节,其中用低七位表示字符编码(见附录 A),用最高位表示奇偶数验位。</p><p>标准ASCII码共有128个,可分为两类:<br>非打印ASCII码,共33个,用于控制操作, 如BEL(响铃07H), DEL(删除7FH),CR(回车,0DH), LF(换行,0AH)。<br>可打印ASCII码共有95个,如数字符0~9,大小写字母等。</p><h2 id="基本逻辑运算"><a class="header-anchor" href="#基本逻辑运算">☆</a>基本逻辑运算</h2><p><span id="inline-toc">1.</span> “与”运算(AND)</p><p>“与”运算也叫逻辑乘,常用 ∧ 或 · 表示。</p><p>F=A ∧ B 或 F=A · B</p><p>“与”运算是指:仅当逻辑变量A与B都是1时, 运算结果F才为1。其它情况F为0,</p><p>即有: 0 ∧ 0 =0 , 0 ∧ 1 = 0 , 1 ∧ 0 = 0 , 1 ∧ 1 =1</p><p><span id="inline-toc">2.</span> “或”运算(OR)</p><p>“或”运算也叫逻辑加,用∨或+表示。</p><p>即有:F=A ∨B F=A +B</p><p>“或”运算是指当逻辑变量A与B中,至少有一 个为1时,结果F为1,其他情况F为0。</p><p>即有: 0 ∨ 0 = 0 , 0 ∨ 1 = 1 , 1 ∨ 0 = 1 , 1 ∨ 1 = 1</p><p><span id="inline-toc">3.</span> “非”运算</p><p>如A为1,则A=0,若A为0,则A=1</p><p>1 = 0 , 0 = 1</p><p><span id="inline-toc">4.</span> “异或”运算(XOR)</p><p>通常用 ⊕表示,即 F = A ⊕ B</p><p>“异或”运算是指:当A和B相同时(同时为1或同时为 0),运算结果F为0,而不同时,F为1。</p><p>运算规则为:1 ⊕ 1 = 0 , 1 ⊕ 0 = 1 , 0 ⊕ 1 = 1 , 0 ⊕ 0 = 0</p>]]></content>
<summary type="html">
进制转换 补码 逻辑运算
</summary>
<category term="汇编" scheme="http://www.singlelovely.cn/categories/%E6%B1%87%E7%BC%96/"/>
<category term="汇编" scheme="http://www.singlelovely.cn/tags/%E6%B1%87%E7%BC%96/"/>
</entry>
<entry>
<title>Java学习笔记(day05)</title>
<link href="http://www.singlelovely.cn/post/87aa750a.html"/>
<id>http://www.singlelovely.cn/post/87aa750a.html</id>
<published>2018-10-05T10:00:00.000Z</published>
<updated>2020-09-21T13:41:07.527Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="05-01-数组概述和定义格式说明-了解"><a class="header-anchor" href="#05-01-数组概述和定义格式说明-了解">☆</a>05.01 数组概述和定义格式说明 (了解)</h2><ul><li><p>A:为什么要有数组(容器)</p><ul><li>为了存储同种数据类型的多个值</li></ul></li><li><p>B:数组概念</p><ul><li>数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。</li><li>数组既可以存储基本数据类型,也可以存储引用数据类型。</li></ul></li><li><p>C:数组定义格式<br>数据类型[] 数组名 = new 数据类型[数组的长度];</p></li></ul><h2 id="05-02-数组的初始化动态初始化-掌握"><a class="header-anchor" href="#05-02-数组的初始化动态初始化-掌握">☆</a>05.02 数组的初始化动态初始化 (掌握)</h2><ul><li>A:什么是数组的初始化<ul><li>就是为数组开辟连续的内存空间,并为每个数组元素赋予值</li></ul></li><li>B:如何对数组进行初始化<ul><li>a:动态初始化 只指定长度,由系统给出初始化值<ul><li>int[] arr = new int[5];</li></ul></li><li>b:静态初始化 给出初始化值,由系统决定长度</li></ul></li><li>C:动态初始化的格式:<ul><li>数据类型[] 数组名 = new 数据类型[数组长度];</li></ul></li><li>D:案例演示<ul><li>输出数组名称和数组元素</li></ul></li></ul><h2 id="05-03-java中的内存分配以及栈和堆的区别"><a class="header-anchor" href="#05-03-java中的内存分配以及栈和堆的区别">☆</a>05.03 Java中的内存分配以及栈和堆的区别</h2><ul><li>A:栈(掌握)<ul><li>存储局部变量</li></ul></li><li>B:堆(掌握)<ul><li>存储new出来的数组或对象</li></ul></li><li>C:方法区<ul><li>面向对象部分讲解</li></ul></li><li>D:本地方法区<ul><li>和系统相关</li></ul></li><li>E:寄存器<ul><li>给CPU使用</li></ul></li></ul><h2 id="05-04-数组的内存图解1一个数组-掌握"><a class="header-anchor" href="#05-04-数组的内存图解1一个数组-掌握">☆</a>05.04 数组的内存图解1一个数组 (掌握)</h2><ul><li>A:画图演示<ul><li>一个数组</li></ul></li></ul><h2 id="05-05-数组的内存图解2二个数组-了解"><a class="header-anchor" href="#05-05-数组的内存图解2二个数组-了解">☆</a>05.05 数组的内存图解2二个数组 (了解)</h2><ul><li>A:画图演示<ul><li>二个不同的数组</li></ul></li></ul><h2 id="05-06-数组的内存图解3三个引用两个数组-了解"><a class="header-anchor" href="#05-06-数组的内存图解3三个引用两个数组-了解">☆</a>05.06 数组的内存图解3三个引用两个数组 (了解)</h2><ul><li>A:画图演示<ul><li>三个引用,有两个数组的引用指向同一个地址</li></ul></li></ul><h2 id="05-07-数组的初始化静态初始化及内存图-掌握"><a class="header-anchor" href="#05-07-数组的初始化静态初始化及内存图-掌握">☆</a>05.07 数组的初始化静态初始化及内存图 (掌握)</h2><ul><li>A:静态初始化的格式:<ul><li>格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};</li><li>简化格式:<ul><li>数据类型[] 数组名 = {元素1,元素2,…};</li></ul></li></ul></li><li>B:案例演示<ul><li>对数组的解释</li><li>输出数组名称和数组元素</li></ul></li><li>C:画图演示<ul><li>一个数组</li></ul></li></ul><h2 id="05-08-数组操作的两个常见小问题越界和空指针-掌握"><a class="header-anchor" href="#05-08-数组操作的两个常见小问题越界和空指针-掌握">☆</a>05.08 数组操作的两个常见小问题越界和空指针 (掌握)</h2><ul><li>A:案例演示<ul><li>a:ArrayIndexOutOfBoundsException:数组索引越界异常<ul><li>原因:你访问了不存在的索引。</li></ul></li><li>b:NullPointerException:空指针异常<ul><li>原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。</li></ul></li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[] arr = {<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>};</span><br><span class="line">arr = <span class="keyword">null</span>;</span><br><span class="line">System.out.println(arr[<span class="number">0</span>]);</span><br></pre></td></tr></table></figure><h2 id="05-09-数组的操作1遍历-掌握"><a class="header-anchor" href="#05-09-数组的操作1遍历-掌握">☆</a>05.09 数组的操作1遍历 (掌握)</h2><ul><li>A:案例演示<ul><li>数组遍历:就是依次输出数组中的每一个元素。</li><li>数组的属性:arr.length数组的长度</li><li>数组的最大索引:arr.length - 1;</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">print</span><span class="params">(<span class="keyword">int</span>[] arr)</span> </span>{</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>;i < arr.length ;i++ ) {</span><br><span class="line">System.out.print(arr[i] + <span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-10-数组的操作2获取最值-掌握"><a class="header-anchor" href="#05-10-数组的操作2获取最值-掌握">☆</a>05.10 数组的操作2获取最值 (掌握)</h2><ul><li>A:案例演示<ul><li>数组获取最值(获取数组中的最大值最小值)</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">int</span> <span class="title">getMax</span><span class="params">(<span class="keyword">int</span>[] arr)</span> </span>{</span><br><span class="line"><span class="keyword">int</span> max = arr[<span class="number">0</span>];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>;i < arr.length ;i++ ) {<span class="comment">//从数组的第二个元素开始遍历</span></span><br><span class="line"><span class="keyword">if</span> (max < arr[i]) {<span class="comment">//如果max记录的值小于的数组中的元素</span></span><br><span class="line">max = arr[i];<span class="comment">//max记录住较大的</span></span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> max;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-11-数组的操作3反转-掌握"><a class="header-anchor" href="#05-11-数组的操作3反转-掌握">☆</a>05.11 数组的操作3反转 (掌握)</h2><ul><li>A:案例演示<ul><li>数组元素反转(就是把元素对调)</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">reverseArray</span><span class="params">(<span class="keyword">int</span>[] arr)</span> </span>{</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>;i < arr.length / <span class="number">2</span> ; i++) {</span><br><span class="line"><span class="comment">//arr[0]和arr[arr.length-1-0]交换</span></span><br><span class="line"><span class="comment">//arr[1]和arr[arr.length-1-1]交换</span></span><br><span class="line"><span class="comment">//arr[2]和arr[arr.lentth-1-2]</span></span><br><span class="line"><span class="comment">//...</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> temp = arr[i];</span><br><span class="line">arr[i] = arr[arr.length-<span class="number">1</span>-i];</span><br><span class="line">arr[arr.length-<span class="number">1</span>-i] = temp;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-12-数组的操作4查表法-掌握"><a class="header-anchor" href="#05-12-数组的操作4查表法-掌握">☆</a>05.12 数组的操作4查表法 (掌握)</h2><ul><li>A:案例演示<ul><li>数组查表法(根据键盘录入索引,查找对应星期)</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">char</span> <span class="title">getWeek</span><span class="params">(<span class="keyword">int</span> week)</span> </span>{</span><br><span class="line"><span class="keyword">char</span>[] arr = {<span class="string">' '</span>,<span class="string">'一'</span>,<span class="string">'二'</span>,<span class="string">'三'</span>,<span class="string">'四'</span>,<span class="string">'五'</span>,<span class="string">'六'</span>,<span class="string">'日'</span>};<span class="comment">//定义了一张星期表</span></span><br><span class="line"><span class="keyword">return</span> arr[week];<span class="comment">//通过索引获取表中的元素</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-13-数组的操作5基本查找-掌握"><a class="header-anchor" href="#05-13-数组的操作5基本查找-掌握">☆</a>05.13 数组的操作5基本查找 (掌握)</h2><ul><li>A:案例演示<ul><li>数组元素查找(查找指定元素第一次在数组中出现的索引)</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">int</span> <span class="title">getIndex</span><span class="params">(<span class="keyword">int</span>[] arr,<span class="keyword">int</span> value)</span> </span>{</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>;i < arr.length ;i++ ) {<span class="comment">//数组的遍历</span></span><br><span class="line"><span class="keyword">if</span> (arr[i] == value) {<span class="comment">//如果数组中的元素与查找的元素匹配</span></span><br><span class="line"><span class="keyword">return</span> i;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> -<span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-14-二维数组概述和格式1的讲解-了解"><a class="header-anchor" href="#05-14-二维数组概述和格式1的讲解-了解">☆</a>05.14 二维数组概述和格式1的讲解 (了解)</h2><ul><li><p>A:二维数组概述</p></li><li><p>B:二维数组格式1</p><ul><li>int[][] arr = new int[3][2];</li></ul></li><li><p>C:二维数组格式1的解释</p></li><li><p>D:注意事项</p><ul><li>a:以下格式也可以表示二维数组<ul><li>1:数据类型 数组名[][] = new 数据类型[m][n];</li><li>2:数据类型[] 数组名[] = new 数据类型[m][n];</li></ul></li><li>B:注意下面定义的区别</li><li><pre><code>int x;int y;int x,y;int[] x;int[] y[];int[] x,y[];x是一维数组,y是二维数组</code></pre></li></ul></li><li><p>E:案例演示</p><ul><li>定义二维数组,输出二维数组名称,一维数组名称,一个元素</li></ul></li></ul><h2 id="05-15-二维数组格式1的内存图解-了解"><a class="header-anchor" href="#05-15-二维数组格式1的内存图解-了解">☆</a>05.15 二维数组格式1的内存图解 (了解)</h2><ul><li>A:画图演示<ul><li>画图讲解上面的二维数组名称,一维数组名称,一个元素的值的问题</li></ul></li></ul><h2 id="05-16-二维数组格式2的讲解及其内存图解-了解"><a class="header-anchor" href="#05-16-二维数组格式2的讲解及其内存图解-了解">☆</a>05.16 二维数组格式2的讲解及其内存图解 (了解)</h2><ul><li>A:二维数组格式2<ul><li>int[][] arr = new int[3][];</li></ul></li><li>B:二维数组格式2的解释</li><li>C:案例演示<ul><li>讲解格式,输出数据,并画内存图</li></ul></li></ul><h2 id="05-17-二维数组格式3的讲解及其内存图解-了解"><a class="header-anchor" href="#05-17-二维数组格式3的讲解及其内存图解-了解">☆</a>05.17 二维数组格式3的讲解及其内存图解 (了解)</h2><ul><li>A:二维数组格式3<ul><li>int[][] arr = /{/{1,2,3},{4,5},{6,7,8,9/}/};</li></ul></li><li>B:二维数组格式3的解释</li><li>C:案例演示<ul><li>讲解格式,输出数据,并画内存图</li></ul></li></ul><h2 id="05-18-二维数组练习1遍历-掌握"><a class="header-anchor" href="#05-18-二维数组练习1遍历-掌握">☆</a>05.18 二维数组练习1遍历 (掌握)</h2><ul><li>A:案例演示<ul><li><p>需求:二维数组遍历</p></li><li><p>外循环控制的是二维数组的长度,其实就是一维数组的个数。</p></li><li><p>内循环控制的是一维数组的长度。</p></li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[][] arr = {{<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>},{<span class="number">4</span>,<span class="number">5</span>},{<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>}};</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>;i < arr.length ;i++ ) { <span class="comment">//获取到每个二维数组中的一维数组</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>;j < arr[i].length ;j++ ) {<span class="comment">//获取每个一维数组中的元素</span></span><br><span class="line">System.out.print(arr[i][j] + <span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">System.out.println();</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-19-二维数组练习2求和-掌握"><a class="header-anchor" href="#05-19-二维数组练习2求和-掌握">☆</a>05.19 二维数组练习2求和 (掌握)</h2><ul><li>A:案例演示</li><li><pre><code>需求:公司年销售额求和某公司按照季度和月份统计的数据如下:单位(万元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99</code></pre></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[][] arr = {{<span class="number">22</span>,<span class="number">66</span>,<span class="number">44</span>},{<span class="number">77</span>,<span class="number">33</span>,<span class="number">88</span>},{<span class="number">25</span>,<span class="number">45</span>,<span class="number">65</span>},{<span class="number">11</span>,<span class="number">66</span>,<span class="number">99</span>}};</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> sum = <span class="number">0</span>;<span class="comment">//定义变量,记录每次相加的结果</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>;i < arr.length ;i++ ) {<span class="comment">//获取每一个一维数组</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>;j < arr[i].length ;j++ ) {<span class="comment">//获取每一个一维数组中的元素</span></span><br><span class="line">sum = sum + arr[i][j];<span class="comment">//累加</span></span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">System.out.println(sum);</span><br></pre></td></tr></table></figure><h2 id="05-20-思考题java中的参数传递问题及图解-掌握"><a class="header-anchor" href="#05-20-思考题java中的参数传递问题及图解-掌握">☆</a>05.20 思考题Java中的参数传递问题及图解 (掌握)</h2><ul><li>A:案例演示</li><li></li></ul><p>看程序写结果,并画内存图解释</p><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="keyword">int</span> a = <span class="number">10</span>;</span><br><span class="line"><span class="keyword">int</span> b = <span class="number">20</span>;</span><br><span class="line">System.out.println(<span class="string">"a:"</span>+a+<span class="string">",b:"</span>+b);</span><br><span class="line">change(a,b);</span><br><span class="line">System.out.println(<span class="string">"a:"</span>+a+<span class="string">",b:"</span>+b);</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span>[] arr = {<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>};</span><br><span class="line">change(arr);</span><br><span class="line">System.out.println(arr[<span class="number">1</span>]);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">change</span><span class="params">(<span class="keyword">int</span> a,<span class="keyword">int</span> b)</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"a:"</span>+a+<span class="string">",b:"</span>+b);</span><br><span class="line">a = b;</span><br><span class="line">b = a + b;</span><br><span class="line">System.out.println(<span class="string">"a:"</span>+a+<span class="string">",b:"</span>+b);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">change</span><span class="params">(<span class="keyword">int</span>[] arr)</span> </span>{</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> x=<span class="number">0</span>; x<arr.length; x++) {</span><br><span class="line"><span class="keyword">if</span>(arr[x]%<span class="number">2</span>==<span class="number">0</span>) {</span><br><span class="line">arr[x]*=<span class="number">2</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="05-21-day05总结"><a class="header-anchor" href="#05-21-day05总结">☆</a>05.21_day05总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
Java基础
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java学习笔记(day04)</title>
<link href="http://www.singlelovely.cn/post/3f16126f.html"/>
<id>http://www.singlelovely.cn/post/3f16126f.html</id>
<published>2018-09-25T10:11:00.000Z</published>
<updated>2020-09-21T13:41:07.526Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="04-01-循环结构概述和for语句的格式及其使用"><a class="header-anchor" href="#04-01-循环结构概述和for语句的格式及其使用">☆</a>04.01 循环结构概述和for语句的格式及其使用</h2><ul><li>A:循环结构的分类<ul><li>for,while,do…while</li></ul></li><li>B:循环结构for语句的格式:</li><li><pre><code>for(初始化表达式;条件表达式;循环后的操作表达式) {循环体;}</code></pre></li><li>C执行流程:<ul><li>a:执行初始化语句</li><li>b:执行判断条件语句,看其返回值是true还是false<ul><li>如果是true,就继续执行</li><li>如果是false,就结束循环</li></ul></li><li>c:执行循环体语句;</li><li>d:执行循环后的操作表达式</li><li>e:回到B继续。</li></ul></li><li>D:案例演示<ul><li>在控制台输出10次"helloworld"</li></ul></li></ul><h2 id="04-02-循环结构for语句的练习之获取数据"><a class="header-anchor" href="#04-02-循环结构for语句的练习之获取数据">☆</a>04.02 循环结构for语句的练习之获取数据</h2><ul><li>A:案例演示<ul><li>需求:请在控制台输出数据1-10</li><li>需求:请在控制台输出数据10-1</li></ul></li><li>B:注意事项<ul><li>a:判断条件语句无论简单还是复杂结果是boolean类型。</li><li>b:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。</li><li>c:一般来说:有左大括号就没有分号,有分号就没有左大括号</li></ul></li></ul><h2 id="04-03-循环结构for语句的练习之求和思想"><a class="header-anchor" href="#04-03-循环结构for语句的练习之求和思想">☆</a>04.03 循环结构for语句的练习之求和思想</h2><ul><li>A:案例演示<ul><li>需求:求出1-10之间数据之和</li></ul></li><li>B:学生练习<ul><li>需求:求出1-100之间偶数和</li><li>需求:求出1-100之间奇数和</li></ul></li></ul><h2 id="04-04-循环结构for语句的练习之水仙花"><a class="header-anchor" href="#04-04-循环结构for语句的练习之水仙花">☆</a>04.04 循环结构for语句的练习之水仙花</h2><ul><li>A:案例演示<ul><li><p>需求:在控制台输出所有的”水仙花数”</p></li><li><p>所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。</p></li><li><p>举例:153就是一个水仙花数。</p></li><li><p>153 = 1<em>1</em>1 + 5<em>5</em>5 + 3<em>3</em>3 = 1 + 125 + 27 = 153</p></li></ul></li></ul><h2 id="04-05-循环结构for语句的练习之统计思想"><a class="header-anchor" href="#04-05-循环结构for语句的练习之统计思想">☆</a>04.05 循环结构for语句的练习之统计思想</h2><ul><li>A:案例演示<ul><li>需求:统计”水仙花数”共有多少个</li></ul></li></ul><h2 id="04-06-循环结构while语句的格式和基本使用"><a class="header-anchor" href="#04-06-循环结构while语句的格式和基本使用">☆</a>04.06 循环结构while语句的格式和基本使用</h2><ul><li>A:循环结构while语句的格式:</li><li><pre><code>while循环的基本格式:while(判断条件语句) {循环体语句;}完整格式:初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句;}</code></pre></li><li>B:执行流程:<ul><li>a:执行初始化语句</li><li>b:执行判断条件语句,看其返回值是true还是false<ul><li>如果是true,就继续执行</li><li>如果是false,就结束循环</li></ul></li><li>c:执行循环体语句;</li><li>d:执行控制条件语句</li><li>e:回到B继续。</li></ul></li><li>C:案例演示<ul><li>需求:请在控制台输出数据1-10</li></ul></li></ul><h2 id="04-07-循环结构while语句的练习"><a class="header-anchor" href="#04-07-循环结构while语句的练习">☆</a>04.07 循环结构while语句的练习</h2><ul><li>A:求和思想<ul><li>求1-100之和</li></ul></li><li>B:统计思想<ul><li>统计”水仙花数”共有多少个</li></ul></li></ul><h2 id="04-08-循环结构do-while语句的格式和基本使用"><a class="header-anchor" href="#04-08-循环结构do-while语句的格式和基本使用">☆</a>04.08 循环结构do…while语句的格式和基本使用</h2><ul><li>A:循环结构do…while语句的格式:</li><li><pre><code>do {循环体语句;}while(判断条件语句);完整格式;初始化语句;do {循环体语句;控制条件语句;}while(判断条件语句);</code></pre></li><li>B:执行流程:<ul><li>a:执行初始化语句</li><li>b:执行循环体语句;</li><li>c:执行控制条件语句</li><li>d:执行判断条件语句,看其返回值是true还是false<ul><li>如果是true,就继续执行</li><li>如果是false,就结束循环</li></ul></li><li>e:回到b继续。</li></ul></li><li>C:案例演示<ul><li>需求:请在控制台输出数据1-10</li></ul></li></ul><h2 id="04-09-循环结构三种循环语句的区别"><a class="header-anchor" href="#04-09-循环结构三种循环语句的区别">☆</a>04.09 循环结构三种循环语句的区别</h2><ul><li>A:案例演示<ul><li>三种循环语句的区别:</li><li>do…while循环至少执行一次循环体。</li><li>而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。</li></ul></li><li>B:案例演示<ul><li>for循环和while循环的区别:<ul><li>A:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用谁就用for循环。因为变量及早的从内存中消失,可以提高内存的使用效率。</li></ul></li></ul></li></ul><h2 id="04-10-循环结构注意事项之死循环"><a class="header-anchor" href="#04-10-循环结构注意事项之死循环">☆</a>04.10 循环结构注意事项之死循环</h2><ul><li>A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。</li><li>B:两种最简单的死循环格式<ul><li>while(true){…}</li><li>for(;😉{…}</li></ul></li></ul><h2 id="04-11-循环结构循环嵌套输出4行5列的星星"><a class="header-anchor" href="#04-11-循环结构循环嵌套输出4行5列的星星">☆</a>04.11 循环结构循环嵌套输出4行5列的星星</h2><ul><li>A:案例演示<ul><li>需求:请输出一个4行5列的星星(*)图案。</li><li><pre><code>如图:********************注意:System.out.println("*");和System.out.print("*");的区别</code></pre></li></ul></li><li>B:结论:<ul><li>外循环控制行数,内循环控制列数</li></ul></li></ul><h2 id="04-12-循环结构循环嵌套输出正三角形"><a class="header-anchor" href="#04-12-循环结构循环嵌套输出正三角形">☆</a>04.12 循环结构循环嵌套输出正三角形</h2><ul><li>A:案例演示</li><li><pre><code>需求:请输出下列的形状***************</code></pre></li></ul><h2 id="04-13-循环结构九九乘法表"><a class="header-anchor" href="#04-13-循环结构九九乘法表">☆</a>04.13 循环结构九九乘法表</h2><ul><li>A:案例演示<ul><li>需求:在控制台输出九九乘法表。</li></ul></li><li>B:代码优化</li><li><pre><code>注意:'\x' x表示任意,\是转义符号,这种做法叫转移字符。'\t'tab键的位置'\r'回车'\n'换行'\"''\''</code></pre></li></ul><h2 id="04-14-控制跳转语句break语句"><a class="header-anchor" href="#04-14-控制跳转语句break语句">☆</a>04.14 控制跳转语句break语句</h2><ul><li>A:break的使用场景<ul><li>只能在switch和循环中</li></ul></li></ul><h2 id="04-15-控制跳转语句continue语句"><a class="header-anchor" href="#04-15-控制跳转语句continue语句">☆</a>04.15 控制跳转语句continue语句</h2><ul><li>A:continue的使用场景<ul><li>只能在循环中</li></ul></li></ul><h2 id="04-16-控制跳转语句标号"><a class="header-anchor" href="#04-16-控制跳转语句标号">☆</a>04.16 控制跳转语句标号</h2><ul><li>标号:标记某个循环对其控制</li><li>标号组成规则:其实就是合法的标识符</li></ul><h2 id="04-17-控制调整语句练习"><a class="header-anchor" href="#04-17-控制调整语句练习">☆</a>04.17 控制调整语句练习</h2><ul><li>A:练习题</li><li><pre><code>for(int x=1; x<=10; x++) {if(x%3==0) {//在此处填写代码}System.out.println(“Java基础班”);}我想在控制台输出2次:“Java基础班“我想在控制台输出7次:“Java基础班“我想在控制台输出13次:“Java基础班“</code></pre></li></ul><h2 id="04-18-控制跳转语句return语句"><a class="header-anchor" href="#04-18-控制跳转语句return语句">☆</a>04.18 控制跳转语句return语句</h2><ul><li>A:return的作用<ul><li>返回</li><li>其实它的作用不是结束循环的,而是结束方法的。</li></ul></li><li>B:案例演示<ul><li>return和break以及continue的区别?</li><li>return是结束方法</li><li>break是跳出循环</li><li>continue是终止本次循环继续下次循环</li></ul></li></ul><h2 id="04-19-方法概述和格式说明"><a class="header-anchor" href="#04-19-方法概述和格式说明">☆</a>04.19 方法概述和格式说明</h2><ul><li>A:为什么要有方法<ul><li>提高代码的复用性</li></ul></li><li>B:什么是方法<ul><li>完成特定功能的代码块。</li></ul></li><li>C:方法的格式</li><li><pre><code>修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {方法体语句;return 返回值; } </code></pre></li><li>D:方法的格式说明<ul><li>修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。</li><li>返回值类型:就是功能结果的数据类型。</li><li>方法名:符合命名规则即可。方便我们的调用。</li><li>参数:<ul><li>实际参数:就是实际参与运算的。</li><li>形式参数;就是方法定义上的,用于接收实际参数的。</li></ul></li><li>参数类型:就是参数的数据类型</li><li>参数名:就是变量名</li><li>方法体语句:就是完成功能的代码。</li><li>return:结束方法的。</li><li>返回值:就是功能的结果,由return带给调用者。</li></ul></li></ul><h2 id="04-20-方法之求和案例及其调用"><a class="header-anchor" href="#04-20-方法之求和案例及其调用">☆</a>04.20 方法之求和案例及其调用</h2><ul><li>A:如何写一个方法<ul><li>1,明确返回值类型</li><li>2,明确参数列表</li></ul></li><li>B:案例演示<ul><li>需求:求两个数据之和的案例</li></ul></li><li>C:方法调用图解</li></ul><h2 id="04-21-方法的注意事项"><a class="header-anchor" href="#04-21-方法的注意事项">☆</a>04.21 方法的注意事项</h2><ul><li>A:方法调用(有具体返回值)<ul><li>a:单独调用,一般来说没有意义,所以不推荐。</li><li>b:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。</li><li>c:赋值调用,推荐方案。</li></ul></li><li>B:案例演示<ul><li>a:方法不调用不执行</li><li>b:方法与方法是平级关系,不能嵌套定义</li><li>c:方法定义的时候参数之间用逗号隔开</li><li>d:方法调用的时候不用在传递数据类型</li><li>e:如果方法有明确的返回值,一定要有return带回一个值</li></ul></li></ul><h2 id="04-22-方法的练习"><a class="header-anchor" href="#04-22-方法的练习">☆</a>04.22 方法的练习</h2><ul><li>A:案例演示<ul><li>需求:键盘录入两个数据,返回两个数中的较大值</li></ul></li><li>B:案例演示<ul><li>需求:键盘录入两个数据,比较两个数是否相等</li></ul></li></ul><h2 id="04-23-方法之输出星形及其调用"><a class="header-anchor" href="#04-23-方法之输出星形及其调用">☆</a>04.23 方法之输出星形及其调用</h2><ul><li>A:案例演示<ul><li>需求:根据键盘录入的行数和列数,在控制台输出星形</li></ul></li><li>B:方法调用:(无返回值,void)<ul><li>单独调用</li><li>输出调用(错误)</li><li>赋值调用(错误)</li></ul></li></ul><h2 id="04-24-方法的练习"><a class="header-anchor" href="#04-24-方法的练习">☆</a>04.24 方法的练习</h2><ul><li>A:案例演示<ul><li>需求:根据键盘录入的数据输出对应的乘法表</li></ul></li></ul><h2 id="04-25-方法重载概述和基本使用"><a class="header-anchor" href="#04-25-方法重载概述和基本使用">☆</a>04.25 方法重载概述和基本使用</h2><ul><li>A:方法重载概述<ul><li>求和案例<ul><li>2个整数</li><li>3个整数</li><li>4个整数</li></ul></li></ul></li><li>B:方法重载:<ul><li><p>在同一个类中,方法名相同,参数列表不同。与返回值类型无关。</p></li><li><p>参数列表不同:</p><ul><li>A:参数个数不同</li><li>B:参数类型不同</li><li>C:参数的顺序不同(算重载,但是在开发中不用)</li></ul></li></ul></li></ul><h2 id="04-26-方法重载练习比较数据是否相等"><a class="header-anchor" href="#04-26-方法重载练习比较数据是否相等">☆</a>04.26 方法重载练习比较数据是否相等</h2><ul><li>A:案例演示<ul><li>需求:比较两个数据是否相等。</li><li>参数类型分别为两个int类型,两个double类型,并在main方法中进行测试</li></ul></li></ul><h2 id="04-27-day04总结"><a class="header-anchor" href="#04-27-day04总结">☆</a>04.27_day04总结</h2><p>把今天的知识点总结一遍。</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java学习笔记(day03)</title>
<link href="http://www.singlelovely.cn/post/a2c12ad6.html"/>
<id>http://www.singlelovely.cn/post/a2c12ad6.html</id>
<published>2018-09-15T10:11:00.000Z</published>
<updated>2020-09-21T13:41:07.526Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="03-01-逻辑运算符的基本用法-掌握"><a class="header-anchor" href="#03-01-逻辑运算符的基本用法-掌握">☆</a>03.01 逻辑运算符的基本用法(掌握)</h2><ul><li><p>A:逻辑运算符有哪些</p><ul><li>&,|,^,!</li><li>&&,||</li></ul></li><li><p>B:案例演示</p></li><li><p>逻辑运算符的基本用法</p></li><li><p>注意事项:</p><ul><li>a:逻辑运算符一般用于连接boolean类型的表达式或者值。</li><li>b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。<ul><li>算术表达式:a + b</li><li>比较表达式:a == b(条件表达式)</li></ul></li></ul></li><li><p>C:结论:</p></li><li><p>&逻辑与:有false则false。</p></li><li><p>|逻辑或:有true则true。</p></li><li><p>^逻辑异或:相同为false,不同为true。</p></li><li><p>!逻辑非:非false则true,非true则false。</p><ul><li>特点:偶数个不改变本身。</li></ul></li></ul><h2 id="03-02-逻辑运算符-和-的区别-掌握"><a class="header-anchor" href="#03-02-逻辑运算符-和-的区别-掌握">☆</a>03.02 逻辑运算符&&和&的区别(掌握)</h2><ul><li>A:案例演示<ul><li>&&和&的区别?<ul><li>a:最终结果一样。</li><li>b:&&具有短路效果。左边是false,右边不执行。</li><li>&是无论左边是false还是true,右边都会执行</li></ul></li></ul></li><li>B:同理||和|的区别?(学生自学)</li><li>C:开发中常用谁?<ul><li>&&,||,!</li></ul></li></ul><h2 id="03-03-位运算符的基本用法1-了解"><a class="header-anchor" href="#03-03-位运算符的基本用法1-了解">☆</a>03.03 位运算符的基本用法1(了解)</h2><ul><li>A:位运算符有哪些<ul><li>&,|,^,~ ,>>,>>>,<<</li></ul></li><li>B:案例演示<ul><li><p>位运算符的基本用法1</p></li><li><p>&,|,^,~ 的用法</p></li><li><p>&:有0则0</p></li><li><p>|:有1则1</p></li><li><p>^:相同则0,不同则1</p></li><li><p>~:按位取反</p></li></ul></li></ul><h2 id="03-04-位异或运算符的特点及面试题-掌握"><a class="header-anchor" href="#03-04-位异或运算符的特点及面试题-掌握">☆</a>03.04 位异或运算符的特点及面试题 (掌握)</h2><ul><li><p>A:案例演示</p><ul><li><p>位异或运算符的特点</p></li><li><p>^的特点:一个数据对另一个数据位异或两次,该数本身不变。</p></li></ul></li><li><p>B:面试题:</p><ul><li>请自己实现两个整数变量的交换</li><li>注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。</li></ul></li></ul><h2 id="03-05-位运算符的基本用法2及面试题-了解"><a class="header-anchor" href="#03-05-位运算符的基本用法2及面试题-了解">☆</a>03.05 位运算符的基本用法2及面试题 (了解)</h2><ul><li>A:案例演示 >>,>>>,<<的用法:<ul><li><<:左移左边最高位丢弃,右边补齐0</li><li><blockquote><blockquote><p>:右移最高位是0,左边补齐0;最高为是1,左边补齐1<br>* >>>:无符号右移 无论最高位是0还是1,左边补齐0<br>* 最有效率的算出2 * 8的结果</p></blockquote></blockquote></li></ul></li></ul><h2 id="03-06-三元运算符的基本用法-掌握"><a class="header-anchor" href="#03-06-三元运算符的基本用法-掌握">☆</a>03.06 三元运算符的基本用法 (掌握)</h2><ul><li>A:三元运算符的格式</li><li><pre><code>(关系表达式) ? 表达式1 : 表达式2;</code></pre></li><li>B:三元运算符的执行流程</li><li>C:案例演示<ul><li>获取两个数中的最大值</li></ul></li></ul><h2 id="03-07-三元运算符的练习-掌握"><a class="header-anchor" href="#03-07-三元运算符的练习-掌握">☆</a>03.07 三元运算符的练习 (掌握)</h2><ul><li>A:案例演示<ul><li>比较两个整数是否相同</li></ul></li><li>B:案例演示<ul><li>获取三个整数中的最大值</li></ul></li></ul><h2 id="03-08-键盘录入的基本格式讲解-掌握"><a class="header-anchor" href="#03-08-键盘录入的基本格式讲解-掌握">☆</a>03.08 键盘录入的基本格式讲解 (掌握)</h2><ul><li>A:为什么要使用键盘录入数据<ul><li>a:为了让程序的数据更符合开发的数据</li><li>b:让程序更灵活一下</li></ul></li><li>B:如何实现键盘录入呢?<ul><li>先照格式来。</li><li>a:导包<ul><li>格式:<ul><li>import java.util.Scanner;</li></ul></li><li>位置:<ul><li>在class上面。</li></ul></li></ul></li><li>b:创建键盘录入对象<ul><li>格式:<ul><li>Scanner sc = new Scanner(<a href="http://System.in" target="_blank" rel="noopener">System.in</a>);</li></ul></li></ul></li><li>c:通过对象获取数据<ul><li>格式:<ul><li>int x = sc.nextInt();</li></ul></li></ul></li></ul></li><li>C:案例演示<ul><li>键盘录入1个整数,并输出到控制台。</li><li>键盘录入2个整数,并输出到控制台。</li></ul></li></ul><h2 id="03-09-键盘录入的练习1-掌握"><a class="header-anchor" href="#03-09-键盘录入的练习1-掌握">☆</a>03.09 键盘录入的练习1 (掌握)</h2><ul><li>A:案例演示<ul><li>键盘录入练习:键盘录入两个数据,并对这两个数据求和,输出其结果</li></ul></li><li>B:案例演示<ul><li>键盘录入练习:键盘录入两个数据,获取这两个数据中的最大值</li></ul></li></ul><h2 id="03-10-键盘录入的练习2-掌握"><a class="header-anchor" href="#03-10-键盘录入的练习2-掌握">☆</a>03.10 键盘录入的练习2 (掌握)</h2><ul><li>A:案例演示<ul><li>键盘录入练习:键盘录入两个数据,比较这两个数据是否相等</li></ul></li><li>B:案例演示<ul><li>键盘录入练习:键盘录入三个数据,获取这三个数据中的最大值</li></ul></li></ul><h2 id="03-11-顺序结构语句-了解"><a class="header-anchor" href="#03-11-顺序结构语句-了解">☆</a>03.11 顺序结构语句 (了解)</h2><ul><li>A:什么是流程控制语句<ul><li>流程控制语句:可以控制程序的执行流程。</li></ul></li><li>B:流程控制语句的分类<ul><li>顺序结构</li><li>选择结构</li><li>循环结构</li></ul></li><li>C:执行流程:<ul><li>从上往下,依次执行。</li></ul></li><li>D:案例演示<ul><li>输出几句话看效果即可</li></ul></li></ul><h2 id="03-12-选择结构if语句格式1及其使用-掌握"><a class="header-anchor" href="#03-12-选择结构if语句格式1及其使用-掌握">☆</a>03.12 选择结构if语句格式1及其使用 (掌握)</h2><ul><li>A:选择结构的分类<ul><li>if语句</li><li>switch语句</li></ul></li><li>B:if语句有几种格式<ul><li>格式1</li><li>格式2</li><li>格式3</li></ul></li><li>C:if语句的格式1</li><li><pre><code>if(比较表达式) {语句体;}</code></pre></li><li>D:执行流程:<ul><li>先计算比较表达式的值,看其返回值是true还是false。</li><li>如果是true,就执行语句体;</li><li>如果是false,就不执行语句体;</li></ul></li></ul><h2 id="03-13-选择结构if语句注意事项-掌握"><a class="header-anchor" href="#03-13-选择结构if语句注意事项-掌握">☆</a>03.13 选择结构if语句注意事项 (掌握)</h2><ul><li>A:案例演示<ul><li>a:比较表达式无论简单还是复杂,结果必须是boolean类型</li><li>b:if语句控制的语句体如果是一条语句,大括号可以省略;<ul><li>如果是多条语句,就不能省略。建议永远不要省略。</li></ul></li><li>c:一般来说:有左大括号就没有分号,有分号就没有左大括号</li></ul></li></ul><h2 id="03-14-选择结构if语句格式2及其使用-掌握"><a class="header-anchor" href="#03-14-选择结构if语句格式2及其使用-掌握">☆</a>03.14 选择结构if语句格式2及其使用 (掌握)</h2><ul><li>A:if语句的格式2</li><li><pre><code>if(比较表达式) {语句体1;}else {语句体2;}</code></pre></li><li>B:执行流程:<ul><li>首先计算比较表达式的值,看其返回值是true还是false。</li><li>如果是true,就执行语句体1;</li><li>如果是false,就执行语句体2;</li></ul></li><li>C:案例演示<ul><li><p>a:获取两个数据中较大的值</p></li><li><p>b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数</p></li><li><p>注意事项:else后面是没有比较表达式的,只有if后面有。</p></li></ul></li></ul><h2 id="03-15if语句的格式2和三元的相互转换问题-掌握"><a class="header-anchor" href="#03-15if语句的格式2和三元的相互转换问题-掌握">☆</a>03.15if语句的格式2和三元的相互转换问题 (掌握)</h2><ul><li>A:案例演示<ul><li>if语句和三元运算符完成同一个效果</li></ul></li><li>B:案例演示<ul><li><p>if语句和三元运算符的区别</p></li><li><p>三元运算符实现的,都可以采用if语句实现。反之不成立。</p></li><li><p>什么时候if语句实现不能用三元改进呢?</p><ul><li>当if语句控制的操作是一个输出语句的时候就不能。</li><li>为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。</li></ul></li></ul></li></ul><h2 id="03-16-选择结构if语句格式3及其使用-掌握"><a class="header-anchor" href="#03-16-选择结构if语句格式3及其使用-掌握">☆</a>03.16 选择结构if语句格式3及其使用 (掌握)</h2><ul><li>A:if语句的格式3:</li><li><pre><code>if(比较表达式1) {语句体1;}else if(比较表达式2) {语句体2;}else if(比较表达式3) {语句体3;}...else {语句体n+1;}</code></pre></li><li>B:执行流程:<ul><li><p>首先计算比较表达式1看其返回值是true还是false,</p></li><li><p>如果是true,就执行语句体1,if语句结束。</p></li><li><p>如果是false,接着计算比较表达式2看其返回值是true还是false,</p></li><li><p>如果是true,就执行语句体2,if语句结束。</p></li><li><p>如果是false,接着计算比较表达式3看其返回值是true还是false,</p></li><li><p>如果都是false,就执行语句体n+1。</p></li></ul></li><li>C:注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示</li></ul><h2 id="03-17-选择结构if语句格式3练习-掌握"><a class="header-anchor" href="#03-17-选择结构if语句格式3练习-掌握">☆</a>03.17 选择结构if语句格式3练习 (掌握)</h2><ul><li><p>A:练习1</p></li><li><pre><code>需求:键盘录入一个成绩,判断并输出成绩的等级。90-100 优80-89 良70-79 中60-69 及0-59 差</code></pre></li><li><p>B:练习2</p><ul><li>需求:<ul><li><p>键盘录入x的值,计算出y的并输出。</p></li><li><p>x>=3y = 2 * x + 1;</p></li><li><p>-1<x<3y = 2 * x;</p></li><li><p>x<=-1y = 2 * x - 1;</p></li></ul></li></ul></li></ul><h2 id="03-18-选择结构if语句的嵌套使用-掌握"><a class="header-anchor" href="#03-18-选择结构if语句的嵌套使用-掌握">☆</a>03.18 选择结构if语句的嵌套使用 (掌握)</h2><ul><li>A:案例演示<ul><li>需求:获取三个数据中的最大值</li><li>if语句的嵌套使用。</li></ul></li></ul><h2 id="03-19-选择结构switch语句的格式及其解释-掌握"><a class="header-anchor" href="#03-19-选择结构switch语句的格式及其解释-掌握">☆</a>03.19 选择结构switch语句的格式及其解释 (掌握)</h2><ul><li><p>A:switch语句的格式</p></li><li><pre><code>switch(表达式) { case 值1:语句体1;break; case 值2:语句体2;break; … default:语句体n+1;break; }</code></pre></li><li><p>B:switch语句的格式解释</p></li><li><p>C:面试题</p><ul><li>byte可以作为switch的表达式吗?</li><li>long可以作为switch的表达式吗?</li><li>String可以作为switch的表达式吗?</li></ul><blockquote><p>char,byte,short,int以及它们的包装类都可以。JAVA SE 7以后,String 类型也可以。</p></blockquote></li><li><p>C:执行流程</p><ul><li>先计算表达式的值</li><li>然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句</li></ul></li></ul><h2 id="03-20-选择结构switch语句的练习-掌握"><a class="header-anchor" href="#03-20-选择结构switch语句的练习-掌握">☆</a>03.20 选择结构switch语句的练习 (掌握)</h2><ul><li>A:整数(给定一个值,输出对应星期几)</li></ul><h2 id="03-21-选择结构switch语句的注意事项-掌握"><a class="header-anchor" href="#03-21-选择结构switch语句的注意事项-掌握">☆</a>03.21 选择结构switch语句的注意事项 (掌握)</h2><ul><li>A:案例演示<ul><li>a:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的</li><li>b:default可以省略吗?<ul><li>可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。</li><li>特殊情况:<ul><li>case就可以把值固定。</li><li>A,B,C,D</li></ul></li></ul></li><li>c:break可以省略吗?<ul><li>最后一个可以省略,其他最好不要省略</li><li>会出现一个现象:case穿透。</li><li>最终我们建议不要省略</li></ul></li><li>d:default一定要在最后吗?<ul><li>不是,可以在任意位置。但是建议在最后。</li></ul></li><li>e:switch语句的结束条件<ul><li>a:遇到break就结束了</li><li>b:执行到switch的右大括号就结束了</li></ul></li></ul></li></ul><h2 id="03-22-选择结构switch语句练习-掌握"><a class="header-anchor" href="#03-22-选择结构switch语句练习-掌握">☆</a>03.22 选择结构switch语句练习 (掌握)</h2><ul><li>A:看程序写结果:</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> x = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">int</span> y = <span class="number">3</span>;</span><br><span class="line"><span class="keyword">switch</span>(x){</span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">y++;</span><br><span class="line"><span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">y++;</span><br><span class="line"><span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line">y++;</span><br><span class="line">}</span><br><span class="line">System.out.println(<span class="string">"y="</span>+y); <span class="comment">// y=4</span></span><br></pre></td></tr></table></figure><ul><li>B:看程序写结果:</li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> x = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">int</span> y = <span class="number">3</span>;</span><br><span class="line"><span class="keyword">switch</span>(x){</span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">y++;</span><br><span class="line"><span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">y++;</span><br><span class="line"><span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line">y++;</span><br><span class="line">}</span><br><span class="line">System.out.println(<span class="string">"y="</span>+y); <span class="comment">//y=6</span></span><br></pre></td></tr></table></figure><h2 id="03-23-选择结构if语句和switch语句的区别-掌握"><a class="header-anchor" href="#03-23-选择结构if语句和switch语句的区别-掌握">☆</a>03.23 选择结构if语句和switch语句的区别 (掌握)</h2><ul><li><p>A:总结switch语句和if语句的各自使用场景</p></li><li><p>switch建议判断固定值的时候用</p></li><li><p>if建议判断区间或范围的时候用</p></li><li><p>B:案例演示</p><ul><li>分别用switch语句和if语句实现下列需求:<ul><li>键盘录入月份,输出对应的季节</li></ul></li></ul></li></ul><h2 id="03-24-day03总结"><a class="header-anchor" href="#03-24-day03总结">☆</a>03.24_day03总结</h2><p>把今天的知识点总结一遍。</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>汇编语言课后习题-单元测试1</title>
<link href="http://www.singlelovely.cn/post/4546ca94.html"/>
<id>http://www.singlelovely.cn/post/4546ca94.html</id>
<published>2018-09-10T13:36:00.000Z</published>
<updated>2020-09-21T13:41:07.552Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-aeVpxEsH" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="108134" data-server="netease" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="auto" data-theme="#ad7a86"></div><blockquote><blockquote class="blockquote-center"><p>拼命着想的事 未必带来感动</p></blockquote></blockquote><h3 id="微型计算机由哪几部分组成?"><a class="header-anchor" href="#微型计算机由哪几部分组成?">☆</a>微型计算机由哪几部分组成?</h3><p>五部分:控制器,运算器,存储器,输入设备,输出设备</p><h3 id="系统总线根据传送的信号种类分为哪几种?"><a class="header-anchor" href="#系统总线根据传送的信号种类分为哪几种?">☆</a>系统总线根据传送的信号种类分为哪几种?</h3><p>地址总线、数据总线、控制总线。</p><h3 id="简述微型计算机系统有那些主要的性能指标?"><a class="header-anchor" href="#简述微型计算机系统有那些主要的性能指标?">☆</a>简述微型计算机系统有那些主要的性能指标?</h3><p>字长,存储容量,指令系统,运算速度,系统配置</p><p>微型计算机的五大性能指标分别是:存储容量、字长、软件配置情况、外设扩展能力、主频。</p><p>存储容量:包括内存容量和外存容量,是衡量微型计算机中存储能力的一个指标。内存容量以字节为单位,分最大容量和装机容量。</p><p>字长:</p><p>字长是计算机内部一次可以处理的二进制数的位数,有4位、8位、16位,高档微型计算机字长为32位或64位。</p><p>软件配置情况:</p><p>软件配置情况直接影响微型计算机系统的使用和性能的发挥。通常应配置的软件有:操作系统、计算机语言以及工具软件等,另外还可配置数据库管理系统和各种应用软件。</p><p>外设扩展能力:</p><p>一台微型计算机可配置外部设备的数量以及配置外部设备的类型,对整个系统的性能有重大影响。如显示器的分辨率、多媒体接口功能和打印机型号等,都是外部设备选择中要考虑的问题。</p><p>主频:</p><p>主频是指微型计算机中CPU的时钟频率,也就是CPU运算时的工作频率。主频越高,一个时钟周期里完成的指令数越多,CPU的速度越快。</p><h3 id="简述eu和biu的功能及二者间的关系"><a class="header-anchor" href="#简述eu和biu的功能及二者间的关系">☆</a>简述EU和BIU的功能及二者间的关系</h3><p>EU:只负责执行指令。执行的指令从BIU的指令缓冲器中取得,执行指令的结果或执行指令所需的数据,都由EU向BIU发出请求,再由BIU在存储器或外存中进行存取。<br>BIU:负责完成CPU与存储器或I/O设备之间的数据传送。</p><p>BIU指总线接口单元,EU指执行单元。</p><p>BIU与EU合称为8086、8088两大独立工作单元。其中BIU负责从内存指定区域取出指令传送到指令队列中排队;执行指令时所需要的操作数也由BIU从相应的内存区域取出,传送给执行部件EU。指令执行的结果如果需要存入内存的话,也由BIU写入相应的内存区域。总之,BIU同外部总线连接为EU完成所有的总线操作,并形成20位的内存物理地址。</p><h3 id="8086-8088-cpu中有那些寄存器?功能是什么?"><a class="header-anchor" href="#8086-8088-cpu中有那些寄存器?功能是什么?">☆</a>8086/8088 CPU中有那些寄存器?功能是什么?</h3><p>1.寄存器按照功能的不同可分为通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI。其中的前四个寄存器可分别分成AH,AL ;BH,BL;CH,CL;DH,DL的八位寄存器)、指令指针寄存器(IP)、标志寄存器(FLAGS)、段寄存器(CS,DS,ES,SS)。它们的区别和联系体现在它们的功能上,对它们的深入了解和正确运用需要通过编写程序来实现。<br>2.大致功能如下:<br>AX,可存放一般数据,而且可作为累加器使用;<br>BX,可存放一般数据,而且可用来存放数据的指针(偏移地址),常常和DS寄存器连用;<br>CX,可存放一般数据,而且可用来做计数器,常常将循环次数用它来存放;<br>DX,可存放一般数据,而且可用来存放乘法运算产生的部分积,或用来存放输入输出的端口地址(指针);<br>SP,用于寻址一个称为堆栈的存储区,通过它来访问堆栈数据;<br>BP,可存放一般数据,用来存放访问堆栈段的一个数据区,作为基地址;<br>SI,可存放一般数据,还可用于串操作中,存放源地址,对一串数据访问;<br>DI,可存放一般数据,还可用于串操作中,存放目的地址,对一串数据访问;<br>IP,用于寻址当前需要取出的指令字节,程序员不能对它直接操作;<br>FLAGS,用于指示微处理器的状态并控制它的操作;<br>CS,代码段寄存器,代码段是一个存储区域,存放的是CPU要使用的代码,CS存放代码段的段基地址;<br>DS,数据段寄存器,数据段是包含程序使用的大部分数据的存储区,DS中存放数据段的段基地址;<br>ES,附加段寄存器,附加段是为某些串操作指令存放目的操作数而附近的一个数据段,ES中存放该数据段的段基地址;<br>SS,堆栈段寄存器,堆栈段是内存中一个特殊的存储区,用于暂时存放程序运行时所需的数据或地址信息。SS中存放该存储区的段基地址。<br>基本功能就是这些,要想透彻掌握深层的寄存器功能,必须要编写汇编源程序,可用微软的masm汇编程序进行编译,用dos系统自带的debug命令调试,直到程序正确运行,才能体会其中的奥妙。</p><h3 id="8086-8088-cpu标志寄存器中有那些标志位?功能是什么?"><a class="header-anchor" href="#8086-8088-cpu标志寄存器中有那些标志位?功能是什么?">☆</a>8086/8088 CPU标志寄存器中有那些标志位?功能是什么?</h3><p>8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(标志位),简称flag。flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。</p><h4 id="运算结果标志位:"><a class="header-anchor" href="#运算结果标志位:">☆</a>运算结果标志位:</h4><p>ZF标志(ZeroFlag):<br>零位标志位,它记录相关指令执行后的结果是否为0,如果是0,那么ZF=1,如果结果不为0,那么ZF=0。</p><p>PF标志(ParityFlag):<br>奇偶标志位,它记录相关指令执行后,其结果的所有二进制位中1个个数是否为偶数,如果是偶数,PF=1,反之为0。</p><p>SF标志(SignFlag):<br>符号标志位,它记录相关指令执行后,其结果是否为负,如果结果为负,SF=1,如果非负,SF=0。</p><p>CF标志(Carry进位,Flag标志):<br>进位标志位,一般情况,进行无符号运算时,它记录运算结果的最高位向更高位的进位值,或从更高位的借位值,如果运算结果的最高位产生了一个进位或借位,那么其值为1,否则其值为0。</p><p>OF标志(Overflow溢出,Flag标志):<br>溢出标志位,在进行有符号数运算的时候,如果结果超出了机器所能表示的范围称为溢出,OF的值被置为1,否则OF的值为0。<br>注意:这里所说的溢出,只是对有符号运算而言。</p><h4 id="状态控制标志位:"><a class="header-anchor" href="#状态控制标志位:">☆</a>状态控制标志位:</h4><p>TF标志(TrapFlag):<br>追踪标志位,当追踪标志被置为1时,CPU进入单步执行方式,即每执行一条指令产生一个单步中断请求,这中方式主要用于程序的调试。</p><p>IF标志(Interrupt-enable Flag):<br>中断允许标志位,用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求,但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。</p><pre><code>+ 当IF=1时,CPU可以相应CPU外部的可屏蔽中断发出的中断请求。+ 当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。</code></pre><h3 id="80386-cpu中有那些寄存器?功能是什么?"><a class="header-anchor" href="#80386-cpu中有那些寄存器?功能是什么?">☆</a>80386 CPU中有那些寄存器?功能是什么?</h3><p><a href="https://blog.csdn.net/u014774781/article/details/47707385" target="_blank" rel="noopener">80386</a>共提供7种类型的32位寄存器,如下:</p><pre><code>通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)段寄存器(CS、SS、DS、ES、FS、GS)指令指针寄存器和标志寄存器(EIP、EFLAGS)系统表寄存器(GDTR、IDTR、LDTR、TR)控制寄存器(CR0、CR1、CR2、CR3、CR4)调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)测试寄存器(TR6、TR7) 其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。</code></pre><h3 id="说明计算机硬件系统和软件系统的关系"><a class="header-anchor" href="#说明计算机硬件系统和软件系统的关系">☆</a>说明计算机硬件系统和软件系统的关系</h3><p>一个完整的计算机系统由硬件系统和软件系统组成。没有软件的计算机称为“裸机”,什么事情也做不了。硬件是基础,是软件的载体,软件则使硬件具有了使用价值。两者相辅相成,缺一不可。</p>]]></content>
<summary type="html">
汇编语言课后习题-单元测试1
</summary>
<category term="汇编" scheme="http://www.singlelovely.cn/categories/%E6%B1%87%E7%BC%96/"/>
<category term="汇编" scheme="http://www.singlelovely.cn/tags/%E6%B1%87%E7%BC%96/"/>
</entry>
<entry>
<title>Java学习笔记(day02)</title>
<link href="http://www.singlelovely.cn/post/1a7d4db3.html"/>
<id>http://www.singlelovely.cn/post/1a7d4db3.html</id>
<published>2018-09-08T10:11:00.000Z</published>
<updated>2020-09-21T13:41:07.526Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h2 id="02-01-java语言基础-常量的概述和使用-掌握"><a class="header-anchor" href="#02-01-java语言基础-常量的概述和使用-掌握">☆</a>02.01_Java语言基础(常量的概述和使用)(掌握)</h2><ul><li><p>A:什么是常量</p><ul><li>在程序执行的过程中其值不可以发生改变</li></ul></li><li><p>B:Java中常量的分类</p><ul><li>字面值常量</li><li>自定义常量(面向对象部分讲)</li></ul></li><li><p>C:字面值常量的分类</p><ul><li>字符串常量用双引号括起来的内容</li><li>整数常量所有整数</li><li>小数常量所有小数</li><li>字符常量用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号</li><li>布尔常量较为特殊,只有true和false</li><li>空常量 null(数组部分讲解)</li></ul></li><li><p>D:案例演示</p><ul><li>用输出语句输出各种常量。null不演示</li></ul></li></ul><h2 id="02-02-java语言基础-进制概述和二-八-十六进制图解-了解"><a class="header-anchor" href="#02-02-java语言基础-进制概述和二-八-十六进制图解-了解">☆</a>02.02_Java语言基础(进制概述和二,八,十六进制图解)(了解)</h2><ul><li>A:什么是进制<ul><li>进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制–X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。</li><li>例如一周有七天,七进制,一年有十二个月,十二进制</li></ul></li><li>B:十进制的由来<ul><li>十进制的由来是因为人类有十个手指</li></ul></li><li>C:二进制的由来<ul><li>其实二进制来源与中国,请看史料记载</li><li>18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻yao- -和__阳爻,其进位制就是二进制,并认为这是世界上数学进制中最先进的。20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制。它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。</li></ul></li><li>D:八进制的由来<ul><li>任何数据在计算机中都是以二进制的形式存在的。二进制早期由电信号开关演变而来。一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦。</li><li>所以就想把一大串缩短点,将二进制中的三位用一位表示。这三位可以取到的最大值就是7.超过7就进位了,这就是八进制。</li></ul></li><li>E:十六进制的由来<ul><li>但是对于过长的二进制变成八进制还是较长,所以出现的用4个二进制位表示一位的情况,四个二进制位最大是15,这就是十六进制。</li></ul></li><li>F:不同进制表现同一个数据的形式特点<ul><li>进制越大,表现形式越短</li></ul></li></ul><h2 id="02-03-java语言基础-不同进制数据的表现形式-掌握"><a class="header-anchor" href="#02-03-java语言基础-不同进制数据的表现形式-掌握">☆</a>02.03_Java语言基础(不同进制数据的表现形式)(掌握)</h2><ul><li>A:二进制的数据表现形式<ul><li>由0,1组成。以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)</li></ul></li><li>B:八进制的数据表现形式<ul><li>由0,1,…7组成。以0开头</li></ul></li><li>C:十进制的数据表现形式<ul><li>由0,1,…9组成。整数默认是十进制的</li></ul></li><li>D:十六进制的数据表现形式<ul><li>由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头</li></ul></li><li>E:案例演示<ul><li>输出不同进制表现100的数据。</li><li>0b100</li><li>0100</li><li>100</li><li>0x100</li></ul></li></ul><h2 id="02-04-java语言基础-任意进制到十进制的转换图解-了解"><a class="header-anchor" href="#02-04-java语言基础-任意进制到十进制的转换图解-了解">☆</a>02.04_Java语言基础(任意进制到十进制的转换图解)(了解)</h2><ul><li>A:任意进制到十进制的转换原理<ul><li>系数:就是每一位上的数据。</li><li>基数:X进制,基数就是X。</li><li>权:在右边,从0开始编号,对应位上的编号即为该位的权。</li><li>结果:把系数*基数的权次幂相加即可。</li></ul></li><li>B:画图练习<ul><li>二进制–十进制</li><li>八进制–十进制</li><li>十六进制–十进制</li></ul></li></ul><h2 id="02-05-java语言基础-十进制到任意进制的转换图解-了解"><a class="header-anchor" href="#02-05-java语言基础-十进制到任意进制的转换图解-了解">☆</a>02.05_Java语言基础(十进制到任意进制的转换图解)(了解)</h2><ul><li>A:十进制到任意进制的转换原理<ul><li>除积倒取余</li></ul></li><li>B:画图练习<ul><li>十进制–二进制</li><li>十进制–八进制</li><li>十进制–十六进制</li></ul></li></ul><h2 id="02-06-java语言基础-快速的进制转换法-了解"><a class="header-anchor" href="#02-06-java语言基础-快速的进制转换法-了解">☆</a>02.06_Java语言基础(快速的进制转换法)(了解)</h2><ul><li>A:8421码及特点<ul><li>8421码是中国大陆的叫法,8421码是BCD代码中最常用的一种。在这种编码方式中每一位二值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。</li></ul></li><li>B:通过8421码的方式进行二进制和十进制的相互转换</li><li>C:二进制到八进制的简易方式</li><li>D:二进制到十六进制的简易方式</li></ul><h2 id="02-07-java语言基础-原码反码补码-了解"><a class="header-anchor" href="#02-07-java语言基础-原码反码补码-了解">☆</a>02.07_Java语言基础(原码反码补码)(了解)</h2><ul><li>A:为什么要学习原码反码补码?<ul><li>后面要学习强制类型转换,如果不知道有原反补会看不懂结果</li></ul></li><li>B:有符号数据表示法的几种方式<ul><li>原码<ul><li>就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。</li><li>通过一个字节,也就是8个二进制位表示+7和-7</li><li>0(符号位)0000111</li><li>1(符号位)0000111</li></ul></li><li>反码<ul><li>正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。</li></ul></li><li>补码<ul><li>正数的补码与其原码相同;负数的补码是在其反码的末位加1。</li></ul></li></ul></li></ul><h2 id="02-08-java语言基础-原码反码补码的练习-了解"><a class="header-anchor" href="#02-08-java语言基础-原码反码补码的练习-了解">☆</a>02.08_Java语言基础(原码反码补码的练习)(了解)</h2><ul><li>A:已知原码求补码<ul><li>0b10110100</li></ul></li><li>B:已知补码求原码<ul><li>0b11101110</li></ul></li></ul><h2 id="02-09-java语言基础-变量的概述及格式-掌握"><a class="header-anchor" href="#02-09-java语言基础-变量的概述及格式-掌握">☆</a>02.09_Java语言基础(变量的概述及格式)(掌握)</h2><ul><li>A:什么是变量<ul><li>在程序执行的过程中,在某个范围内其值可以发生改变的量</li></ul></li><li>B:变量的定义格式<ul><li>数据类型 变量名 = 变量值;</li></ul></li><li>C:为什么要定义变量<ul><li>用来不断的存放同一类型的常量,并可以重复使用</li></ul></li></ul><h2 id="02-10-java语言基础-数据类型的概述和分类-掌握"><a class="header-anchor" href="#02-10-java语言基础-数据类型的概述和分类-掌握">☆</a>02.10_Java语言基础(数据类型的概述和分类)(掌握)</h2><ul><li>A:为什么有数据类型<ul><li>Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间</li></ul></li><li>B:Java中数据类型的分类<ul><li>基本数据类型</li><li>引用数据类型<ul><li>面向对象部分讲解</li></ul></li></ul></li><li>C:基本数据类型分类(4类8种)<ul><li>整数型<ul><li>byte 占一个字节 -128到127</li><li>short 占两个字 -2<sup>15~2</sup>15-1</li><li>int 占四个字节 -2<sup>31~2</sup>31-1</li><li>long 占八个字节 -2<sup>63~2</sup>63-1</li></ul></li><li>浮点型<ul><li>float 占四个字节 -3.403E38~3.403E38 单精度</li><li>double 占八个字节-1.798E308~1.798E308 双精度</li></ul></li><li>字符型<ul><li>char 占两个字节 0~65535</li></ul></li><li>布尔型<ul><li>boolean<ul><li>boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小</li></ul></li></ul></li></ul></li></ul><h2 id="02-11-java语言基础-定义不同数据类型的变量-掌握"><a class="header-anchor" href="#02-11-java语言基础-定义不同数据类型的变量-掌握">☆</a>02.11_Java语言基础(定义不同数据类型的变量)(掌握)</h2><ul><li>A:案例演示<ul><li>定义不同基本数据类型的变量,并输出</li><li>赋值时候注意float类型,long类型</li></ul></li></ul><h2 id="02-12-java语言基础-使用变量的注意事项-掌握"><a class="header-anchor" href="#02-12-java语言基础-使用变量的注意事项-掌握">☆</a>02.12_Java语言基础(使用变量的注意事项)(掌握)</h2><ul><li>A:案例演示<ul><li>a:作用域问题<ul><li>同一个区域不能使用相同的变量名</li></ul></li><li>b:初始化值问题<ul><li>局部变量在使用之前必须赋值</li></ul></li><li>c:一条语句可以定义几个变量<ul><li>int a,b,c…;</li></ul></li></ul></li></ul><h2 id="02-13-java语言基础-数据类型转换之隐式转换-掌握"><a class="header-anchor" href="#02-13-java语言基础-数据类型转换之隐式转换-掌握">☆</a>02.13_Java语言基础(数据类型转换之隐式转换)(掌握)</h2><ul><li>A:案例演示<ul><li>a:int + int</li><li>b:byte + int</li></ul></li><li>B:Java中的默认转换规则<ul><li>取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算</li></ul></li><li>C:画图解释byte+int类型的问题</li></ul><h2 id="02-14-java语言基础-数据类型转换之强制转换-掌握"><a class="header-anchor" href="#02-14-java语言基础-数据类型转换之强制转换-掌握">☆</a>02.14_Java语言基础(数据类型转换之强制转换)(掌握)</h2><ul><li>A:强制转换问题<ul><li>int a = 10;</li><li>byte b = 20;</li><li>b = a + b;</li></ul></li><li>B:强制转换的格式<ul><li>b = (byte)(a + b);</li></ul></li><li>C:强制转换的注意事项<ul><li>如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同</li></ul></li></ul><h2 id="02-15-java语言基础-面试题之变量相加和常量相加的区别-掌握"><a class="header-anchor" href="#02-15-java语言基础-面试题之变量相加和常量相加的区别-掌握">☆</a>02.15_Java语言基础(面试题之变量相加和常量相加的区别)(掌握)</h2><ul><li>A:案例演示<ul><li>面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。</li><li>byte b1 = 3;</li><li>byte b2 = 4;</li><li>byte b3 = b1 + b2;<ul><li>从两方面去回答这个题</li><li>b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值</li><li>byte类型的变量在进行运算的时候,会自动类型提升为int类型</li></ul></li><li>byte b4 = 3 + 4;<ul><li>3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了</li></ul></li></ul></li></ul><h2 id="02-16-java语言基础-long与float的取值范围谁大谁小-了解"><a class="header-anchor" href="#02-16-java语言基础-long与float的取值范围谁大谁小-了解">☆</a>02.16_Java语言基础(long与float的取值范围谁大谁小)(了解)</h2><ul><li>进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的<ul><li><p>byte,short,char – int – long – float – double</p></li><li><p>long: 8个字节</p></li><li><p>float:4个字节</p></li><li><p>IEEE754</p></li><li><p>4个字节是32个二进制位</p></li><li><p>1位是符号位</p></li><li><p>8位是指数位</p></li><li><p>00000000 11111111</p></li><li><p>0到255</p></li><li><p>1到254</p></li><li><p>-126到127</p></li><li><p>23位是尾数位</p></li><li><p>每个指数位减去127</p></li><li><p>A:它们底层的存储结构不同。</p></li><li><p>B:float表示的数据范围比long的范围要大</p><ul><li>long:2^63-1</li><li>float:3.4<em>10^38 > 2</em>10^38 > 2<em>8^38 = 2</em>2<sup>3</sup>38 = 2*2^114 > 2^63-1</li></ul></li></ul></li></ul><h2 id="02-17-java语言基础-字符和字符串参与运算-掌握"><a class="header-anchor" href="#02-17-java语言基础-字符和字符串参与运算-掌握">☆</a>02.17_Java语言基础(字符和字符串参与运算)(掌握)</h2><ul><li>A:案例演示<ul><li><p>System.out.println(‘a’);</p></li><li><p>System.out.println(‘a’+1);</p></li><li><p>通过看结果知道’a’的值是多少,由此引出ASCII码表</p></li></ul></li><li>B:ASCII码表的概述<ul><li>记住三个值:<ul><li>‘0’ 48</li><li>‘A’ 65</li><li>‘a’ 97</li></ul></li></ul></li><li>C:案例演示<ul><li>System.out.println(“hello”+‘a’+1);</li><li>System.out.println(‘a’+1+“hello”);</li></ul></li><li>D:+在有字符串参与中被称为字符串连接符<ul><li>System.out.println(“5+5=”+5+5);</li><li>System.out.println(5+5+"=5+5");</li></ul></li></ul><h2 id="02-18-java语言基础-char数据类型-掌握"><a class="header-anchor" href="#02-18-java语言基础-char数据类型-掌握">☆</a>02.18_Java语言基础(char数据类型)(掌握)</h2><ul><li>A:char c = 97;0到65535</li><li>B:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?<ul><li>可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节</li><li>所以,Java中的字符可以存储一个中文汉字</li></ul></li></ul><h2 id="02-19-java语言基础-算术运算符的基本用法-掌握"><a class="header-anchor" href="#02-19-java语言基础-算术运算符的基本用法-掌握">☆</a>02.19_Java语言基础(算术运算符的基本用法)(掌握)</h2><ul><li>A:什么是运算符<ul><li>就是对常量和变量进行操作的符号。</li></ul></li><li>B:运算符的分类<ul><li>算术运算符,赋值运算符,比较(关系或条件)运算符,逻辑运算符,位运算符,三目(元)运算符</li></ul></li><li>C:算数运算符有哪些<ul><li>+,-,*,/,%,++,–</li></ul></li><li>D:注意事项:<ul><li>a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符</li><li>b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型</li><li>c:/获取的是除法操作的商,%获取的是除法操作的余数</li><li>%运算符<ul><li>当左边的绝对值小于右边绝对值时,结果是左边</li><li>当左边的绝对值等于右边或是右边的倍数时,结果是0</li><li>当左边的绝对值大于右边绝对值时,结果是余数</li><li>%运算符结果的符号只和左边有关系,与右边无关</li><li>任何一个正整数%2结果不是0就是1可以用来当作切换条件</li></ul></li></ul></li></ul><h2 id="02-20-java语言基础-算术运算符-和-的用法-掌握"><a class="header-anchor" href="#02-20-java语言基础-算术运算符-和-的用法-掌握">☆</a>02.20_Java语言基础(算术运算符++和–的用法)(掌握)</h2><ul><li>A:++,–运算符的作用<ul><li>自加(++)自减(–)运算</li><li>++:自加。对原有的数据进行+1</li><li>–:自减。对原有的数据进行-1</li></ul></li><li>B:案例演示<ul><li>a:单独使用:<ul><li>放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)</li></ul></li><li>b:参与运算使用:<ul><li>放在操作数的前面,先自增或者自减,然后再参与运算。</li><li>放在操作数的后面,先参与运算,再自增或者自减。</li></ul></li></ul></li></ul><h2 id="02-21-java语言基础-算术运算符-和-的练习-掌握"><a class="header-anchor" href="#02-21-java语言基础-算术运算符-和-的练习-掌握">☆</a>02.21_Java语言基础(算术运算符++和–的练习)(掌握)</h2><ul><li><p>A:案例演示</p><ul><li>请分别计算出a,b,c的值?</li><li><pre><code>int a = 10;int b = 10;int c = 10;a = b++;//10c = --a;//9b = ++a;//10a = c--;//9</code></pre></li></ul></li><li><p>B:案例演示</p><ul><li><p>请分别计算出x,y的值?</p><pre><code>int x = 4;int y = (x++)+(++x)+(x*10);</code></pre></li></ul></li><li><p>C:面试题</p><ul><li>byte b = 10;</li><li>b++;</li><li>b = b + 1;</li><li>问哪句会报错,为什么<br>最后一句报错,前后b的类型不匹配,需要强制转换</li></ul></li></ul><h2 id="02-22-java语言基础-赋值运算符的基本用法-掌握"><a class="header-anchor" href="#02-22-java语言基础-赋值运算符的基本用法-掌握">☆</a>02.22_Java语言基础(赋值运算符的基本用法)(掌握)</h2><ul><li>A:赋值运算符有哪些<ul><li><p>a:基本的赋值运算符:=</p><ul><li>把=右边的数据赋值给左边。</li></ul></li><li><p>b:扩展的赋值运算符:+=,-=,*=,/=,%=</p><ul><li>+= 把左边和右边做加法,然后赋值给左边。</li></ul></li></ul></li></ul><h2 id="02-23-java语言基础-赋值运算符的面试题-掌握"><a class="header-anchor" href="#02-23-java语言基础-赋值运算符的面试题-掌握">☆</a>02.23_Java语言基础(赋值运算符的面试题)(掌握)</h2><ul><li>A:案例演示<ul><li>面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。</li><li>short s=1;s = s+1;</li><li>short s=1;s+=1;</li></ul></li></ul><h2 id="02-24-java语言基础-关系运算符的基本用法及其注意事项-掌握"><a class="header-anchor" href="#02-24-java语言基础-关系运算符的基本用法及其注意事项-掌握">☆</a>02.24_Java语言基础(关系运算符的基本用法及其注意事项)(掌握)</h2><ul><li>A:关系运算符有哪些(比较运算符,条件运算符)<ul><li>==,!=,>,>=,<,<=</li></ul></li><li>注意事项:<ul><li><p>无论你的操作是简单还是复杂,结果是boolean类型。</p></li><li><p>“==“不能写成”=”。</p></li></ul></li></ul><h2 id="02-25-day02总结"><a class="header-anchor" href="#02-25-day02总结">☆</a>02.25_day02总结</h2><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>Java集成开发环境安装</title>
<link href="http://www.singlelovely.cn/post/38df1aba.html"/>
<id>http://www.singlelovely.cn/post/38df1aba.html</id>
<published>2018-09-04T07:17:00.000Z</published>
<updated>2020-09-21T13:41:07.529Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-NCkJhVBc" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1300423074" data-server="netease" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="auto" data-theme="#ad7a86"></div><p> <br> <br> </p><blockquote><p><a href="https://blog.csdn.net/XuNeely/article/details/78943085" target="_blank" rel="noopener">IntelliJ IDEA相比于Eclipse的优势</a></p></blockquote><h3 id="安装"><a class="header-anchor" href="#安装">☆</a>安装</h3><p><span id="font-blue">下载地址: </span><a href="https://www.jetbrains.com/idea/download/?fromIDE=#section=windows" target="_blank" rel="noopener">https://www.jetbrains.com/idea/download/?fromIDE=#section=windows</a></p><p>Community 版本为开源免费版<br>Ultimate 为企业版,试用期一个月</p><div class="note success"><p>版本请自行选择,建议使用<span id="inline-yellow">Community</span> </p></div><p>然后打开安装,选择安装目录后,会出现如下界面,选择适合自己系统的版本,Java必选,后面的按需选择</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/idea%E5%AE%89%E8%A3%85.png" alt="idea安装"></p><p>完成安装后,进行配置,第三项为不采用旧设置</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/idea%E8%AE%BE%E7%BD%AE.png" alt="idea设置"></p><p>然后选择jdk安装路径后,进入主界面</p><p>jdk选择界面忘了截图了·······</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/idea%E7%95%8C%E9%9D%A2.png" alt="主界面"></p><h3 id="主题颜色美化"><a class="header-anchor" href="#主题颜色美化">☆</a>主题颜色美化</h3><h4 id="使用color-themes主题模板"><a class="header-anchor" href="#使用color-themes主题模板">☆</a>使用Color Themes主题模板</h4><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/colorThemes%E4%B8%BB%E9%A2%98%E5%B1%95%E7%A4%BA.png" alt="colorThemes主题展示"></p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/colorThemes%E4%B8%BB%E9%A2%98%E5%B1%95%E7%A4%BA2.png" alt="colorThemes主题展示2"></p><p>上面这是少部分截图,有太多的主题,有兴趣的自己去看一下,总有一款适合你。<br>使用方式如下:<br>(1) 找到你喜欢的主题模版,点击右下角的下载按钮,进入如下图:</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/colorThemes%E4%B8%BB%E9%A2%98%E4%B8%8B%E8%BD%BD.png" alt="colorThemes主题下载"></p><p>点击上图中的绿色的按钮下载。<br>(2)下载下来是一个很小的 Jar包,我们直接包jar包导入Android Studio 。在Android Studio 上 点击 File -> Import Settings ,选择中下载的jar 包,来到如下界面:</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/%E5%AE%89%E8%A3%85%E4%B8%BB%E9%A2%98.png" alt="enter description here"></p><p>(3)如上图,点击确认,会提示重启 IntelliJ IDEA ,点击OK 重启 IntelliJ IDEA 就好。<br>(4)重启之后,主题就已经应用上了,如下图:</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/colorThemes%E4%B8%BB%E9%A2%98%E6%95%88%E6%9E%9C.png" alt="colorThemes主题效果"></p><p>Color Themes 上面有很多主题模版,你自己去挑选就好了。</p><h4 id="material-theme-ui"><a class="header-anchor" href="#material-theme-ui">☆</a>Material Theme UI</h4><p>使用 Material Theme UI 插件主题:<br>通过上面的方法,就能为 IntelliJ IDEA 应用一个自己喜欢的个性化主题,但是有一个缺点:这些主题只更改了代码编辑区域,左边的包结构区域和菜单栏还是和原来是一样的,看起来和整体风格好像不是很搭,那么有没有可以使整个AS的风格都改变的主题呢?通过Google ,找到了Material Theme UI,原文地址<a href="https://meedamian.com/post/deuglifying-android-studio/" target="_blank" rel="noopener">Making Android Studio pretty</a>,Material Theme UI 是一个 IntelliJ IDEA 插件,它提供了三种主题供选择,效果非常不错,更赞的是,它连除了代码区域之外的风格也改变了,应用了Material Theme UI 主题的效果图如下:</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/MaterialThemeUI.png" alt="MaterialThemeUI"></p><p>为避免重复造轮子,使用方法请直接查看 Material Theme <span id="font-green"><a href="https://meedamian.com/post/deuglifying-android-studio/" target="_blank" rel="noopener">原文</a>。</span></p><h3 id="花式logcat"><a class="header-anchor" href="#花式logcat">☆</a>花式LogCat</h3><p>前面介绍了几种打造炫酷主题的方式,效果已经非常赞了,但是我们看一下我们的Logcat ,只有白色和红色两种Log,看起来有点Low ,与我们炫酷的主题不搭啊,因此我们还得改造一下控制台的Log输出。更改之前的效果如下:</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/LogCat%E6%97%A7.png" alt="LogCat旧"></p><p id="div-border-left-purple">打造花式Log的方法:</p>(1) 在Android Studio 菜单栏 打开** Preferences -> Editer -> Colors & Fonts -> Android Logcat**<p>(2) 在Scheme选项后面点击Save As… 保存一个拷贝,在拷贝上面更改,总共有六项,如下图所示,选中每一项依次更改。</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/%E8%8A%B1%E5%BC%8Flogcat.png" alt="花式logcat"></p><p>最终效果如下图所示</p><p><img src="https://data.singlelovely.cn/xsj/2018/9/4/LogCat%E6%96%B0.png" alt="LogCat新"></p><p>如上图所示,效果是不是好了很多!!!也与我们的整体主题风格搭配。贴一下我使用的各项颜色值:</p><p><font color="#AA66CC">Assert: #AA66CC</font><br><font color="#33B5E5">Debug: #33B5E5</font><br><font color="#FF4444">Error: #FF4444</font><br><font color="#99CC00">Info: #99CC00</font><br><font color="#FFFFFF">Verbose: #FFFFFF</font><br><font color="#FFBB33">Warning: #FFBB33</font></p>]]></content>
<summary type="html">
IntelliJ IDEA 的安装与配置
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
<category term="教程" scheme="http://www.singlelovely.cn/tags/%E6%95%99%E7%A8%8B/"/>
</entry>
<entry>
<title>Speed Of Sound</title>
<link href="http://www.singlelovely.cn/post/1bb05bfb.html"/>
<id>http://www.singlelovely.cn/post/1bb05bfb.html</id>
<published>2018-08-16T08:52:00.000Z</published>
<updated>2021-07-12T05:58:14.855Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><br> <div id="aplayer-ByJhTyDn" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="3986344" data-server="netease" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="auto" data-theme="#ad7a86"></div><br><br><p><strong>未知之神,何时我才能在我的高处俯视,说:你们想升高时,就向上仰望。我向下俯视,因为我已升高?<sup>[1]</sup></strong></p><br><p id="div-border-left-purple">How long before I get in<br>在我抵达之前已过了多久<br>Before it starts before I begin<br>在开启旅途之前 在我启程之前<br>How long before you decide or<br>在你做决定之前已过了多久<br>Before I know what it feels like<br>在我体会到这种远行的滋味之前<br>Where to, where do I go?<br>朝着何方 我要去何方<br>If you never try then you'll never know<br>如果你从不去尝试 你将永远无法知晓<br>How long do I have to climb<br>我还得往上攀爬多久呢<br>Up on the side of this mountain of mine<br>一直沿着这座山向上爬</p><br><a id="more"></a><p><strong>当我抬头仰望时,其它所有的一切都以声速在脑后消散,如飞鸟般,你也能看到吗?</strong></p><br><p id="div-border-left-purple">Look up, I look up at night<br>抬头仰望 我在夜里仰望<br>Planets are moving at the speed of light<br>行星正以光速急速移动<br>Climb up, up in the trees<br>往上爬呀 爬过这片树林<br>Every chance that you get is a chance you seize<br>你赢得的每一次机会你都必须抓牢<br>How long am I gonna stand<br>我还得伫立多久呢<br>With my head stuck under the sand<br>头颅深埋进沙堆里<br>I start before I can stop or<br>我会再度启程直到我想要停下<br>Before I see things the right way up<br>直到前方事物闯入我的视野<br>All that noise and all that sound<br>所有的噪声与喧哗<br>All those places I got found<br>我途径找到的所有那些地方<br>And birds go flying at the speed of sound<br>飞鸟声速般一哄而散<br>To show you how it all began<br>为了向你预示这一切是如何开始<br>Birds came flying from the underground<br>群鸟从地底下飞掠上来<br>If you could see it then you'd understand<br>如果你见过它们你就会憬悟<br><br></p><p><strong>我一直相信有些神奇的事物在等待着我来创造,有些神秘的谜团在等待着我来解答,群鸟正从地底飞上来,你也能看到吗?</strong></p><br><p id="div-border-left-purple">Ideas that you'll never find<br>你脑子里从未闪现过的新奇想法<br>All the inventors could never design<br>所有的发明家从没有设计过<br>The buildings that you put up<br>你精心一手建造的建筑物<br>But you've been in China all lit up<br>但你到过辉煌灿烂的中国<br>A sign that I couldn't read<br>一个我辨认不出的古老符号<br>or a light, that I couldn't see<br>抑或一束我无法直视的光芒<br>Some things you have to believe<br>你不得不相信一些事情<br>When others are puzzles, puzzling me<br>当其他人就像谜团一样令我困惑不解<br>All that noise and all that sound<br>所有的噪声与喧哗<br>All those places I got found<br>我途径找到的所有那些地方<br>And birds go flying at the speed of sound<br>群鸟从地底下飞掠上来<br>To show you how it all began<br>为了向你预示这一切是如何开始<br>Birds came flying from the underground<br>群鸟从地底下飞掠上来<br>If you could see it then you'd understand<br>如果你见过它们你就会憬悟<br>Oh, when you see it then you'll understand<br>噢 当你见过你就会憬悟</p><br><p><strong>一直相信,一直攀爬,再次抬头仰望时,其它所有的一切又都以声速在脑后消散,那么现在:</strong></p><br><p id="div-border-left-purple">夫子说:“现在你应该从怠惰中<br>摆脱出来,因为坐在绒毛上面,<br>或者睡在被窝里的人是不会成名的;<br>没有名声而磋砣一生,<br>人们在人世留下的痕迹,<br>就像空中的烟云,水上的泡沫;<br>因此起来吧!用那战胜一切战役的<br>灵魂来战胜你的气喘,<br>假使灵魂不和沉重的躯壳一起下沉。<br>一架更长的梯子还需要爬登:<br>走过了这些地方还不够;你若懂得我,<br>那么起来吧,这对你有好处。”^[2]^</p><br><br><center> <font color="black"> better die than look back. </font></center> <br><p><span id="inline-toc">1</span>.尼采:《查拉图斯特拉如是说》(钱春绮译),p39,《读和写》。 ↩<br><span id="inline-toc">2</span>.但丁:《神曲》,地狱篇,第二十四歌。 ↩</p>]]></content>
<summary type="html">
How long do I have climb up on the side of this mountain of mine?
</summary>
<category term="音乐" scheme="http://www.singlelovely.cn/categories/%E9%9F%B3%E4%B9%90/"/>
</entry>
<entry>
<title>hexo优化基于NexT6.4</title>
<link href="http://www.singlelovely.cn/post/13c8d3a0.html"/>
<id>http://www.singlelovely.cn/post/13c8d3a0.html</id>
<published>2018-08-02T13:07:40.000Z</published>
<updated>2020-09-21T13:41:07.531Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>安装的插件:</p><h4 id="rss"><a class="header-anchor" href="#rss">☆</a>RSS</h4><p>npm install hexo-generator-feed --save</p><h4 id="字数统计"><a class="header-anchor" href="#字数统计">☆</a>字数统计</h4><h5 id="next主题为5-x版本"><a class="header-anchor" href="#next主题为5-x版本">☆</a>next主题为5.x版本</h5><p>安装 :npm install hexo-wordcount --save</p><p>然后在主题配置文件中启用</p><h5 id="next主题为6-03-版本"><a class="header-anchor" href="#next主题为6-03-版本">☆</a>next主题为6.03+版本</h5><p>安装:npm install hexo-symbols-count-time --save</p><p>打开 :~\blog_config.yml</p><p>添加</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line"><span class="attr"> symbols:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> time:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> total_symbols:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> total_time:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><p>然后在主题配置文件中启用</p><h4 id="自定义站点内容搜索"><a class="header-anchor" href="#自定义站点内容搜索">☆</a>自定义站点内容搜索</h4><p>安装 hexo-generator-searchdb,在站点的根目录下执行以下命令:</p><p>npm install hexo-generator-searchdb --save<br>编辑 站点配置文件,新增以下内容到任意位置:</p><p>search:<br>path: search.xml<br>field: post<br>format: html<br>limit: 10000<br>编辑 主题配置文件,启用本地搜索功能:</p><p># Local search<br>local_search:<br>enable: true</p><h4 id="链接持久化"><a class="header-anchor" href="#链接持久化">☆</a>链接持久化</h4><p>npm install hexo-abbrlink --save</p><p>permalink: post/:abbrlink.html<br>permalink_defaults:<br>abbrlink:<br>alg: crc32 # 算法:crc16(default) and crc32<br>rep: hex # 进制:dec(default) and hex</p><h4 id="修改标签云"><a class="header-anchor" href="#修改标签云">☆</a>修改标签云</h4><figure class="highlight plain"><figcaption><span>位置:\blog\themes\next\layout\page.swig</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">{{ tagcloud({min_font: 13, max_font: 31, amount: 1000, color: true, start_color: '#9733EE', end_color: '#FF512F'}) }}</span><br></pre></td></tr></table></figure><p>修改对应参数值即可,参数说明见 <a href="https://hexo.io/zh-cn/docs/helpers.html#tagcloud" target="_blank" rel="noopener">Hexo 官方文档</a>,颜色可以参考<a href="https://uigradients.com" target="_blank" rel="noopener">这个网站</a>,自己去纠结……</p><h4 id="末尾版权信息"><a class="header-anchor" href="#末尾版权信息">☆</a>末尾版权信息</h4><p>hexo next自带版权开启</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#Declare license on posts</span></span><br><span class="line"><span class="comment">#版权信息</span></span><br><span class="line"><span class="attr">post_copyright:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> license:</span> <span class="string">CC</span> <span class="string">BY-NC-SA</span> <span class="number">4.0</span></span><br><span class="line"><span class="attr"> license_url:</span> <span class="attr">https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh</span></span><br></pre></td></tr></table></figure><p>配置文件路径:\hexo\themes\next\layout_macro\post-copyright.swig</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="addition">+{% if page.copyright %}</span></span><br><span class="line"><ul class="post-copyright"></span><br><span class="line"> <li class="post-copyright-author"></span><br><span class="line"> <strong>{{ __('post.copyright.author') + __('symbol.colon') }}</strong></span><br><span class="line"> {{ post.author | default(config.author) }}</span><br><span class="line"> </li></span><br><span class="line"> <li class="post-copyright-link"></span><br><span class="line"> <strong>{{ __('post.copyright.link') + __('symbol.colon') }}</strong></span><br><span class="line"> <a href="{{ post.url | default(post.permalink) }}" title="{{ post.title }}">{{ post.url | default(post.permalink) }}</a></span><br><span class="line"> </li></span><br><span class="line"> <li class="post-copyright-license"></span><br><span class="line"> <strong>{{ __('post.copyright.license_title') + __('symbol.colon') }} </strong></span><br><span class="line"> {{ __('post.copyright.license_content', theme.post_copyright.license_url, theme.post_copyright.license) }}</span><br><span class="line"> </li></span><br><span class="line"></ul></span><br><span class="line"><span class="addition">+{% endif %}</span></span><br></pre></td></tr></table></figure><p>布局文件路径:\hexo\themes\next\layout_macro\post.swig</p><h4 id="侧栏加入已运行的时间"><a class="header-anchor" href="#侧栏加入已运行的时间">☆</a>侧栏加入已运行的时间</h4><p>我们都有自己的生日,都知道自己的岁数,那为什么不给博客加上,让读者知道博客的年纪呢?操作很简单,而且不是精确到年而是精确到秒,233333~</p><p>首先要加入下面代码:</p><figure class="highlight html"><figcaption><span>文件位置:~/blog/themes/next/layout/_custom/sidebar.swig</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">id</span>=<span class="string">"days"</span>></span><span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"><<span class="name">script</span>></span><span class="undefined"></span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">show_date_time</span>(<span class="params"></span>)</span>{</span></span><br><span class="line"><span class="javascript"><span class="built_in">window</span>.setTimeout(<span class="string">"show_date_time()"</span>, <span class="number">1000</span>);</span></span><br><span class="line"><span class="javascript">BirthDay=<span class="keyword">new</span> <span class="built_in">Date</span>(<span class="string">"05/27/2017 15:13:14"</span>);</span></span><br><span class="line"><span class="javascript">today=<span class="keyword">new</span> <span class="built_in">Date</span>();</span></span><br><span class="line"><span class="undefined">timeold=(today.getTime()-BirthDay.getTime());</span></span><br><span class="line"><span class="undefined">sectimeold=timeold/1000</span></span><br><span class="line"><span class="javascript">secondsold=<span class="built_in">Math</span>.floor(sectimeold);</span></span><br><span class="line"><span class="undefined">msPerDay=24*60*60*1000</span></span><br><span class="line"><span class="undefined">e_daysold=timeold/msPerDay</span></span><br><span class="line"><span class="javascript">daysold=<span class="built_in">Math</span>.floor(e_daysold);</span></span><br><span class="line"><span class="undefined">e_hrsold=(e_daysold-daysold)*24;</span></span><br><span class="line"><span class="javascript">hrsold=setzero(<span class="built_in">Math</span>.floor(e_hrsold));</span></span><br><span class="line"><span class="undefined">e_minsold=(e_hrsold-hrsold)*60;</span></span><br><span class="line"><span class="javascript">minsold=setzero(<span class="built_in">Math</span>.floor((e_hrsold-hrsold)*<span class="number">60</span>));</span></span><br><span class="line"><span class="javascript">seconds=setzero(<span class="built_in">Math</span>.floor((e_minsold-minsold)*<span class="number">60</span>));</span></span><br><span class="line"><span class="javascript"><span class="built_in">document</span>.getElementById(<span class="string">'days'</span>).innerHTML=<span class="string">"已运行"</span>+daysold+<span class="string">"天"</span>+hrsold+<span class="string">"小时"</span>+minsold+<span class="string">"分"</span>+seconds+<span class="string">"秒"</span>;</span></span><br><span class="line"><span class="undefined">}</span></span><br><span class="line"><span class="javascript"><span class="function"><span class="keyword">function</span> <span class="title">setzero</span>(<span class="params">i</span>)</span>{</span></span><br><span class="line"><span class="javascript"><span class="keyword">if</span> (i<<span class="number">10</span>)</span></span><br><span class="line"><span class="javascript">{i=<span class="string">"0"</span> + i};</span></span><br><span class="line"><span class="javascript"><span class="keyword">return</span> i;</span></span><br><span class="line"><span class="undefined">}</span></span><br><span class="line"><span class="undefined">show_date_time();</span></span><br><span class="line"><span class="undefined"></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure><p>上面Date的值记得改为你自己的,且按上面格式,然后修改:</p><figure class="highlight diff"><figcaption><span>文件位置:~/blog/themes/next/layout/_macro/sidebar.swig</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"> {# Blogroll #}</span><br><span class="line"> {% if theme.links %}</span><br><span class="line"> <div class="links-of-blogroll motion-element {{ "links-of-blogroll-" + theme.links_layout | default('inline') }}"></span><br><span class="line"> <div class="links-of-blogroll-title"></span><br><span class="line"> <i class="fa fa-fw fa-{{ theme.links_icon | default('globe') | lower }}"></i></span><br><span class="line"> {{ theme.links_title }}&nbsp;</span><br><span class="line"> <i class="fa fa-fw fa-{{ theme.links_icon | default('globe') | lower }}"></i></span><br><span class="line"> </div></span><br><span class="line"> <ul class="links-of-blogroll-list"></span><br><span class="line"> {% for name, link in theme.links %}</span><br><span class="line"> <li class="links-of-blogroll-item"></span><br><span class="line"> <a href="{{ link }}" title="{{ name }}" target="_blank">{{ name }}</a></span><br><span class="line"> </li></span><br><span class="line"> {% endfor %}</span><br><span class="line"> </ul></span><br><span class="line"><span class="addition">+ {% include '../_custom/sidebar.swig' %}</span></span><br><span class="line"> </div></span><br><span class="line"> {% endif %}</span><br><span class="line"></span><br><span class="line"><span class="deletion">- {% include '../_custom/sidebar.swig' %}</span></span><br></pre></td></tr></table></figure><p>这样就可以了!当然,要是不喜欢颜色,感觉不好看,就可以在上文所提的<code>custom.styl</code>加入:</p><figure class="highlight styl"><figcaption><span>文件位置:~/blog/themes/next/source/css/_custom/custom.styl</span></figcaption><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 自定义的侧栏时间样式</span></span><br><span class="line"><span class="selector-id">#days</span> {</span><br><span class="line"> <span class="attribute">display</span>: block;</span><br><span class="line"> <span class="attribute">color</span>: rgb(<span class="number">7</span>, <span class="number">179</span>, <span class="number">155</span>);</span><br><span class="line"> <span class="attribute">font-size</span>: <span class="number">13px</span>;</span><br><span class="line"> <span class="attribute">margin-top</span>: <span class="number">15px</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="修改页面宽度"><a class="header-anchor" href="#修改页面宽度">☆</a>修改页面宽度</h4><p>打开 \themes\next\source\css_variables\custom.styl<br>添加</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$main-desktop = 1200px</span><br><span class="line">$content-desktop = 900px</span><br></pre></td></tr></table></figure><p>以上适用于(NexT5.x版本),6.0+应该写</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$content-desktop-large = 830px</span><br></pre></td></tr></table></figure><h4 id="修改模板文件-增加div-布局调整-避免互相影响"><a class="header-anchor" href="#修改模板文件-增加div-布局调整-避免互相影响">☆</a>修改模板文件(增加div,布局调整,避免互相影响)</h4><p><strong>~\blog\themes\next\layout_macro\post.swig</strong></p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="deletion">- <div class="post-block"></span></span><br><span class="line"><span class="addition">+ <div class="post-block index"></span></span><br></pre></td></tr></table></figure><p><strong>~\blog\themes\next\layout_macro\post-collapse.swig</strong></p><figure class="highlight diff"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">{% macro render(post) %}</span><br><span class="line"><span class="addition">+ <div class="post-block archives_title"></span></span><br><span class="line"> <article class="post post-type-{{ post.type | default('normal') }}" itemscope itemtype="http://schema.org/Article"></span><br><span class="line"> <header class="post-header"></span><br><span class="line">`</span><br><span class="line">`</span><br><span class="line">`</span><br><span class="line"> </header></span><br><span class="line"> </article></span><br><span class="line"><span class="addition">+ </div></span></span><br><span class="line">{% endmacro %}</span><br></pre></td></tr></table></figure><h4 id="评分上面加文字"><a class="header-anchor" href="#评分上面加文字">☆</a>评分上面加文字</h4><p><strong>~/blog/themes/next/layout/_macro/post.swig</strong></p><figure class="highlight diff"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"> {% if theme.rating.enable %}</span><br><span class="line"> <div class="wp_rating"></span><br><span class="line"><span class="addition">+ <div style="color: rgba(0, 0, 0, 0.75); font-size:13px; letter-spacing:3px">(&gt;来评分吧&lt;)</div></span></span><br><span class="line"> <div id="wpac-rating"></div></span><br><span class="line"> </div></span><br><span class="line"> {% endif %}</span><br></pre></td></tr></table></figure><p>然后 Ctrl + F 搜索rating,找到这段,对比我给出的,在绿色这行所示的位置,加上自己想要的说明和样式即可。</p><h4 id="压缩文件"><a class="header-anchor" href="#压缩文件">☆</a>压缩文件</h4><p>gulp.js 是基于流的自动化构建工具,我们可以使用 Gulp 为 Hexo 压缩文件<br>首先任意目录全局安装:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install gulp -g</span><br></pre></td></tr></table></figure><p>然后到站点文件夹根目录:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line">npm install gulp-minify-css --save</span><br><span class="line">npm install gulp-uglify --save</span><br><span class="line">npm install gulp-htmlmin --save</span><br><span class="line">npm install gulp-htmlclean --save</span><br><span class="line">npm install gulp-imagemin --save</span><br></pre></td></tr></table></figure><p>打开 \blog\</p><p>新建 gulpfile.js</p><p>写入</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> gulp = <span class="built_in">require</span>(<span class="string">'gulp'</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//Plugins模块获取</span></span><br><span class="line"><span class="keyword">var</span> minifycss = <span class="built_in">require</span>(<span class="string">'gulp-minify-css'</span>);</span><br><span class="line"><span class="keyword">var</span> uglify = <span class="built_in">require</span>(<span class="string">'gulp-uglify'</span>);</span><br><span class="line"><span class="keyword">var</span> htmlmin = <span class="built_in">require</span>(<span class="string">'gulp-htmlmin'</span>);</span><br><span class="line"><span class="keyword">var</span> htmlclean = <span class="built_in">require</span>(<span class="string">'gulp-htmlclean'</span>);</span><br><span class="line"><span class="keyword">var</span> imagemin = <span class="built_in">require</span>(<span class="string">'gulp-imagemin'</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 压缩css文件</span></span><br><span class="line">gulp.task(<span class="string">'minify-css'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src(<span class="string">'./public/**/*.css'</span>)</span><br><span class="line"> .pipe(minifycss())</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩html文件</span></span><br><span class="line">gulp.task(<span class="string">'minify-html'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src([<span class="string">'./public/**/*.html'</span>,<span class="string">'!./public/**/politics/*'</span>])</span><br><span class="line"> .pipe(htmlclean())</span><br><span class="line"> .pipe(htmlmin({</span><br><span class="line"> removeComments: <span class="literal">true</span>,</span><br><span class="line"> minifyJS: <span class="literal">true</span>,</span><br><span class="line"> minifyCSS: <span class="literal">true</span>,</span><br><span class="line"> minifyURLs: <span class="literal">true</span>,</span><br><span class="line"> }))</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>))</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩js文件</span></span><br><span class="line">gulp.task(<span class="string">'minify-js'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">return</span> gulp.src([<span class="string">'./public/**/.js'</span>,<span class="string">'!./public/js/**/*min.js'</span>])</span><br><span class="line"> .pipe(uglify())</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 压缩 public/images 目录内图片</span></span><br><span class="line">gulp.task(<span class="string">'minify-images'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>{</span><br><span class="line"> gulp.src(<span class="string">'./public/images/**/*.*'</span>)</span><br><span class="line"> .pipe(imagemin({</span><br><span class="line"> optimizationLevel: <span class="number">5</span>, <span class="comment">//类型:Number 默认:3 取值范围:0-7(优化等级)</span></span><br><span class="line"> progressive: <span class="literal">true</span>, <span class="comment">//类型:Boolean 默认:false 无损压缩jpg图片</span></span><br><span class="line"> interlaced: <span class="literal">false</span>, <span class="comment">//类型:Boolean 默认:false 隔行扫描gif进行渲染</span></span><br><span class="line"> multipass: <span class="literal">false</span>, <span class="comment">//类型:Boolean 默认:false 多次优化svg直到完全优化</span></span><br><span class="line"> }))</span><br><span class="line"> .pipe(gulp.dest(<span class="string">'./public/uploads'</span>));</span><br><span class="line">});</span><br><span class="line"><span class="comment">// 默认任务</span></span><br><span class="line">gulp.task(<span class="string">'default'</span>, [</span><br><span class="line"> <span class="string">'minify-html'</span>,<span class="string">'minify-css'</span>,<span class="string">'minify-js'</span>,<span class="string">'minify-images'</span></span><br><span class="line">]);</span><br></pre></td></tr></table></figure><h4 id="文末结束标记"><a class="header-anchor" href="#文末结束标记">☆</a>文末结束标记</h4><p>打开 \themes\next\layout_macro\</p><p>新建 passage-end-tag.swig</p><p>写入</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">{% if theme.passage_end_tag.enabled %}</span><br><span class="line"><div style="text-align:center;color: #ccc;font-size:15px;"><br/><br/><br/></span><br><span class="line">-------------文章结束啦 ~\(≧▽≦)/~ 感谢您的阅读-------------</div></span><br><span class="line"><br/></span><br></pre></td></tr></table></figure><p>打开 \themes\next\layout_macro\post.swig</p><p>查找 wechat</p><p>添加,如下内容</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"> {#####################}</span><br><span class="line"></span><br><span class="line"><span class="addition">+ <div></span></span><br><span class="line"><span class="addition">+ {% if not is_index %}</span></span><br><span class="line"><span class="addition">+ {% include 'passage-end-tag.swig' %}</span></span><br><span class="line"><span class="addition">+ {% endif %}</span></span><br><span class="line"><span class="addition">+ </div></span></span><br><span class="line"></span><br><span class="line"> {% if theme.wechat_subscriber.enabled and not is_index %}</span><br></pre></td></tr></table></figure><p>打开 \themes\next_config.yml</p><p>添加</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment"># 文章末尾添加“本文结束”标记</span></span><br><span class="line"><span class="attr">passage_end_tag:</span></span><br><span class="line"><span class="attr"> enabled:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h4 id="live2d看板娘"><a class="header-anchor" href="#live2d看板娘">☆</a>Live2d看板娘</h4><div class="note primary"><p>live2d官方<a href="https://github.com/EYHN/hexo-helper-live2d/blob/master/README.zh-CN.md" target="_blank" rel="noopener">文档</a></p></div><p>安装 npm install --save hexo-helper-live2d</p><p>下载模型包:<a href="https://github.com/xiazeyu/live2d-widget-models" target="_blank" rel="noopener">live2d-widget-models</a></p><p>解压</p><p>将<code>packages</code>中的文件放到<code>node_modules</code>中</p><p>打开 ~\blog_config.yml</p><p>添加</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">live2d:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> scriptFrom:</span> <span class="string">local</span></span><br><span class="line"><span class="attr"> pluginRootPath:</span> <span class="string">live2dw/</span></span><br><span class="line"><span class="attr"> pluginJsPath:</span> <span class="string">lib/</span></span><br><span class="line"><span class="attr"> pluginModelPath:</span> <span class="string">assets/</span></span><br><span class="line"><span class="attr"> tagMode:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr"> debug:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr"> model:</span></span><br><span class="line"><span class="attr"> use:</span> <span class="string">live2d-widget-model-miku</span> <span class="comment">#模板目录,在node_modules里</span></span><br><span class="line"><span class="attr"> display:</span></span><br><span class="line"><span class="attr"> position:</span> <span class="string">left</span></span><br><span class="line"><span class="attr"> width:</span> <span class="number">150</span></span><br><span class="line"><span class="attr"> height:</span> <span class="number">300</span></span><br><span class="line"><span class="attr"> mobile:</span></span><br><span class="line"><span class="attr"> show:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><h4 id="引入自定义文件-用于样式定制"><a class="header-anchor" href="#引入自定义文件-用于样式定制">☆</a>引入自定义文件(用于样式定制)</h4><p>打开 \themes\next\layout_custom\</p><p>新建 custom.swig</p><p>打开 \themes\next\layout_layout.swig</p><p>在 </body> 前添加</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">{% include '_custom/custom.swig' %}</span><br></pre></td></tr></table></figure><h4 id="评论输入打字礼花及震动特效"><a class="header-anchor" href="#评论输入打字礼花及震动特效">☆</a>评论输入打字礼花及震动特效</h4><p>下载 activate-power-mode.js</p><p>放置 activate-power-mode.js 至 CDN</p><p>打开 \themes\next\layout_custom\custom.swig</p><p>添加</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><!-- 打字礼花及震动特效 --></span><br><span class="line"><script type=<span class="string">"text/javascript"</span> src=<span class="string">"https://qianling-1254036047.cos.ap-chengdu.myqcloud.com/js/activate-power-mode.js"</span>><span class="xml"><span class="tag"></<span class="name">script</span>></span></span></span><br><span class="line"><script></span><br><span class="line"> POWERMODE.colorful = <span class="literal">true</span>; <span class="comment">// ture 为启用礼花特效</span></span><br><span class="line"> POWERMODE.shake = <span class="literal">false</span>; <span class="comment">// false 为禁用震动特效</span></span><br><span class="line"> <span class="built_in">document</span>.body.addEventListener(<span class="string">'input'</span>, POWERMODE);</span><br><span class="line"><<span class="regexp">/script></span></span><br></pre></td></tr></table></figure><h4 id="添加emoji"><a class="header-anchor" href="#添加emoji">☆</a>添加emoji</h4><div class="note success"><p>参考自 :<a href="https://www.jianshu.com/p/57e22584b277#emoji%E6%8F%92%E4%BB%B6" target="_blank" rel="noopener">emoji插件</a></p></div><h4 id="站点地图生成"><a class="header-anchor" href="#站点地图生成">☆</a>站点地图生成</h4><p>安装</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-generator-sitemap --save</span><br><span class="line">npm install hexo-generator-baidu-sitemap --save</span><br></pre></td></tr></table></figure><p>在<span id="inline-blue">站点配置文件</span>中启用</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><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">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 自动生成sitemap</span></span><br><span class="line"><span class="attr">sitemap:</span></span><br><span class="line"><span class="attr">path:</span> <span class="string">sitemap.xml</span></span><br><span class="line"><span class="attr">baidusitemap:</span></span><br><span class="line"><span class="attr">path:</span> <span class="string">baidusitemap.xml</span></span><br></pre></td></tr></table></figure><h4 id="文章加密码"><a class="header-anchor" href="#文章加密码">☆</a>文章加密码</h4><h5 id="方式一:修改模板配置文件-不推荐"><a class="header-anchor" href="#方式一:修改模板配置文件-不推荐">☆</a>方式一:修改模板配置文件(不推荐)</h5><p><span id="font-blue">打开</span> ~\blog\themes\next6.4\layout_partials\head\</p><p><span id="font-blue">新建</span> password.swig</p><p><span id="font-blue">写入</span></p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><script></span><br><span class="line"> (<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>{</span><br><span class="line"> <span class="keyword">if</span> (<span class="string">'{{ page.password }}'</span>) {</span><br><span class="line"> <span class="keyword">if</span> (prompt(<span class="string">'请输入文章密码'</span>) !== <span class="string">'{{ page.password }}'</span>) {</span><br><span class="line"> alert(<span class="string">'密码错误!'</span>);</span><br><span class="line"> <span class="keyword">if</span> (history.length === <span class="number">1</span>) {</span><br><span class="line"> location.replace(<span class="string">"https://www.singlelovely.cn"</span>); <span class="comment">// 这里替换成你的首页</span></span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> history.back();</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="regexp">/script></span></span><br></pre></td></tr></table></figure><p><span id="font-blue">然后打开</span>~\blog\themes\next6.4\layout_partials\head\head.swig</p><p><span id="font-blue">写入</span></p><figure class="highlight diff"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"/></span><br><span class="line"><meta name="theme-color" content="{{ theme.android_chrome_color }}"></span><br><span class="line"></span><br><span class="line"><span class="addition">+ {% if not is_index %}</span></span><br><span class="line"><span class="addition">+ {% include 'password.swig' %}</span></span><br><span class="line"><span class="addition">+ {% endif %}</span></span><br><span class="line"></span><br><span class="line">{% if theme.needmoreshare2.enable %}</span><br></pre></td></tr></table></figure><p><span id="font-red">最后</span> 在需要加密的文章前面增加属性<span id="inline-yellow"> password </span></p><h5 id="方式二-:使用插件进行加密"><a class="header-anchor" href="#方式二-:使用插件进行加密">☆</a>方式二 :使用插件进行加密</h5><p><span id="font-blue">插件地址:</span> <a href="https://github.com/MikeCoder/hexo-blog-encrypt" target="_blank" rel="noopener">https://github.com/MikeCoder/hexo-blog-encrypt</a></p><h4 id="首页文章摘要图"><a class="header-anchor" href="#首页文章摘要图">☆</a>首页文章摘要图</h4><h5 id="方式一:只在首页显示-文章中不显示"><a class="header-anchor" href="#方式一:只在首页显示-文章中不显示">☆</a>方式一:只在首页显示,文章中不显示</h5><p><span id="font-blue">打开</span> ~\blog\themes\next6.4\layout_macro\post.swig</p><p><span id="font-blue">搜索:</span> <span id="inline-green"> post.description</span></p><p><span id="font-blue">下面添加:</span></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">{% if post.image %}</span><br><span class="line"> <div class="out-img-topic"></span><br><span class="line"> <img src={{ post.image }} class="img-topic" /></span><br><span class="line"> </div></span><br><span class="line"> {% endif %}</span><br></pre></td></tr></table></figure><p>然后在<span id="font-blue">文章</span> 中写:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">image: </span><br><span class="line">- "http://oz2tkq0zj.bkt.clouddn.com/17-11-9/52323298.jpg"</span><br></pre></td></tr></table></figure><h5 id="方式二:首页和文章中都显示"><a class="header-anchor" href="#方式二:首页和文章中都显示">☆</a>方式二:首页和文章中都显示</h5><p><span id="font-blue">直接</span>在<span id="font-blue">文章</span> 中写(默认支持):</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">photos: </span><br><span class="line">- "http://oz2tkq0zj.bkt.clouddn.com/17-11-9/52323298.jpg"</span><br></pre></td></tr></table></figure><h4 id="文章置顶"><a class="header-anchor" href="#文章置顶">☆</a>文章置顶</h4><p><span id="font-blue">打开</span> \blog\node_modules\hexo-generator-index\lib\generator.js</p><p><span id="font-blue">将内容修改为 </span></p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">'use strict'</span>;</span><br><span class="line"><span class="keyword">var</span> pagination = <span class="built_in">require</span>(<span class="string">'hexo-pagination'</span>);</span><br><span class="line"><span class="built_in">module</span>.exports = <span class="function"><span class="keyword">function</span>(<span class="params">locals</span>)</span>{</span><br><span class="line"> <span class="keyword">var</span> config = <span class="keyword">this</span>.config;</span><br><span class="line"> <span class="keyword">var</span> posts = locals.posts;</span><br><span class="line"> posts.data = posts.data.sort(<span class="function"><span class="keyword">function</span>(<span class="params">a, b</span>) </span>{</span><br><span class="line"> <span class="keyword">if</span>(a.sticky && b.sticky) { <span class="comment">// 两篇文章sticky都有定义</span></span><br><span class="line"> <span class="keyword">if</span>(a.sticky == b.sticky) <span class="keyword">return</span> b.date - a.date; <span class="comment">// 若sticky值一样则按照文章日期降序排</span></span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> b.sticky - a.sticky; <span class="comment">// 否则按照sticky值降序排</span></span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(a.sticky && !b.sticky) { <span class="comment">// 以下是只有一篇文章sticky有定义,那么将有sticky的排在前面(这里用异或操作居然不行233)</span></span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(!a.sticky && b.sticky) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> b.date - a.date; <span class="comment">// 都没定义按照文章日期降序排</span></span><br><span class="line"> });</span><br><span class="line"> <span class="keyword">var</span> paginationDir = config.pagination_dir || <span class="string">'page'</span>;</span><br><span class="line"> <span class="keyword">return</span> pagination(<span class="string">''</span>, posts, {</span><br><span class="line"> perPage: config.index_generator.per_page,</span><br><span class="line"> layout: [<span class="string">'index'</span>, <span class="string">'archive'</span>],</span><br><span class="line"> format: paginationDir + <span class="string">'/%d/'</span>,</span><br><span class="line"> data: {</span><br><span class="line"> __index: <span class="literal">true</span></span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line">};</span><br></pre></td></tr></table></figure><p><span id="font-blue">使用方法</span></p><p>在文章中添加 sticky 值,数值越大文章越靠前,如</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">title: hexo优化基于NexT6.4</span><br><span class="line">copyright: false</span><br><span class="line">abbrlink: 13c8d3a0</span><br><span class="line">notshow: false</span><br><span class="line">tags: </span><br><span class="line">- hexo </span><br><span class="line">categories: hexo</span><br><span class="line">date: 2018-08-02 21:07:40</span><br><span class="line">password: </span><br><span class="line">description: 增加6.0+的新特性,去掉部分过时的功能</span><br><span class="line">image: </span><br><span class="line">- "https://data.singlelovely.cn/xsj/2018/8/9/hexo-next-optimization-title.jpg"</span><br><span class="line">sticky: 10</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
增加6.0+的新特性,去掉部分过时的功能
</summary>
<category term="hexo" scheme="http://www.singlelovely.cn/categories/hexo/"/>
<category term="hexo" scheme="http://www.singlelovely.cn/tags/hexo/"/>
</entry>
<entry>
<title>Java学习笔记(day01)</title>
<link href="http://www.singlelovely.cn/post/8c8e25d.html"/>
<id>http://www.singlelovely.cn/post/8c8e25d.html</id>
<published>2018-07-24T10:11:23.000Z</published>
<updated>2020-09-21T13:41:07.526Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h3 id="01-01-计算机概述-了解"><a class="header-anchor" href="#01-01-计算机概述-了解">☆</a>01.01_ 计算机概述(了解)</h3><ul><li>A:什么是计算机?计算机在生活中的应用举例<ul><li>计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。</li><li>应用举例<ul><li>1:科学计算</li><li>2、数据处理</li><li>3、自动控制</li><li>4、计算机辅助设计</li><li>5、人工智能</li><li>6、多媒体应用</li><li>7、计算机网络</li><li>…</li></ul></li></ul></li><li>B:什么是硬件?硬件举例<ul><li><p>计算机硬件(Computer Hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。</p></li><li><p>冯.诺依曼体系结构</p></li><li><p>计算机的硬件分成5大组成部件:运算器、控制器、存储器、输入设备和输出设备。</p><ul><li>运算器和控制器是计算机的核心,合称中央处理单元(Central Processing Unit,CPU)或处理器。CPU的内部还有一些高速存储单元,被称为寄存器。其中运算器执行所有的算术和逻辑运算;控制器负责把指令逐条从存储器中取出,经译码后向计算机发出各种控制命令;而寄存器为处理单元提供操作所需要的数据。</li><li>存储器是计算机的记忆部分,用来存放程序以及程序中涉及的数据。它分为内部存储器和外部存储器。内部存储器用于存放正在执行的程序和使用的数据,其成本高、容量小,但速度快。外部存储器可用于长期保存大量程序和数据,其成本低、容量大,但速度较慢。</li><li>输入设备和输出设备统称为外部设备,简称外设或I/O设备,用来实现人机交互和机间通信。微型机中常用的输入设备有键盘、鼠标等,输出设备有显示器、打印机等。</li></ul></li></ul></li><li>C:什么是软件?软件分类及举例<ul><li>计算机软件(Computer Software)是使用计算机过程中必不可少的东西,计算机软件可以使计算机按照事先预定好的顺序完成特定的功能</li><li>计算机软件按照其功能划分为系统软件与应用软件<ul><li>系统软件: DOS(Disk Operating System), Windows, Linux, Unix, Mac, Android, iOS</li><li>应用软件:office QQ聊天 YY语言 扫雷</li></ul></li></ul></li></ul><h3 id="01-02-软件开发和计算机语言概述-了解"><a class="header-anchor" href="#01-02-软件开发和计算机语言概述-了解">☆</a>01.02_ 软件开发和计算机语言概述 (了解)</h3><ul><li>A:什么是软件<ul><li>按照特定顺序组织的计算机数据和指令的集合</li></ul></li><li>B:什么是开发<ul><li>软件的制作过程</li></ul></li><li>C:什么是软件开发<ul><li>借助开发工具与计算机语言制作软件</li></ul></li><li>D:什么是计算机语言<ul><li>人与计算机之间进行信息交流沟通的一种特殊语言</li></ul></li><li>E:计算机语言的分类<ul><li>机器语言:<ul><li>机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。</li></ul></li><li>汇编语言:<ul><li>汇编语言是使用一些特殊的符号来代替机器语言的二进制码,计算机不能直接识别,需要用一种软件将汇编语言翻译成机器语言。</li></ul></li><li>高级语言:<ul><li>使用普通英语进行编写源代码,通过编译器将源代码翻译成计算机直接识别的机器语言,之后再由计算机执行。</li><li>高级语言包括C,C++,C#,JAVA</li></ul></li></ul></li></ul><h3 id="01-03-人机交互-了解"><a class="header-anchor" href="#01-03-人机交互-了解">☆</a>01.03_ 人机交互 (了解)</h3><ul><li>A:人机交互的两种方式<ul><li>a:命令行方式<ul><li>需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令。</li></ul></li><li>b:图形化界面方式<ul><li>这种方式简单直观,使用者易于接受,容易上手操作。</li></ul></li></ul></li></ul><h3 id="01-04-键盘功能键和快捷键-掌握"><a class="header-anchor" href="#01-04-键盘功能键和快捷键-掌握">☆</a>01.04_ 键盘功能键和快捷键 (掌握)</h3><ul><li>A:键盘功能键<ul><li>a:Tab</li><li>b:Shift</li><li>c:Ctrl</li><li>d:Alt</li><li>e:空格</li><li>f:Enter</li><li>g:Window</li><li>h:上下左右键</li><li>i:PrtSc(PrintScreen)屏幕截图</li></ul></li><li>B:键盘快捷键<ul><li>a:Ctrl+A全选</li><li>b:Ctrl+C复制</li><li>c:Ctrl+V粘贴</li><li>d:Ctrl+X剪切</li><li>e:Ctrl+Z撤销</li><li>f:Ctrl+S保存</li></ul></li></ul><h3 id="01-05-如何打开dos控制台-掌握"><a class="header-anchor" href="#01-05-如何打开dos控制台-掌握">☆</a>01.05_ 如何打开DOS控制台 (掌握)</h3><ul><li>A:xp下如何打开DOS控制台?<ul><li>a:开始–程序–附件–命令提示符</li><li>b:开始–运行–cmd–回车</li><li>c:win+r–cmd–回车</li></ul></li><li>B:win7下如何打开DOS控制台?<ul><li>a:开始–所有程序–附件–命令提示符</li><li>b:开始–搜索程序和文件–cmd–回车</li><li>c:win+r–cmd–回车</li></ul></li><li>C:win8下如何打开DOS控制台<ul><li>a:鼠标左击开始–下箭头–命令提示符</li><li>b:鼠标右击开始–搜索–cmd–回车</li><li>c:鼠标右击开始–运行–cmd–回车</li><li>d:win+r–cmd–回车</li></ul></li></ul><h3 id="01-06-常见的dos命令讲解"><a class="header-anchor" href="#01-06-常见的dos命令讲解">☆</a>01.06_ 常见的DOS命令讲解</h3><ul><li>A:d: 回车盘符切换</li><li>B:dir(directory):列出当前目录下的文件以及文件夹</li><li>C:cd (change directory)改变指定目录(进入指定目录)</li><li>D:cd… : 退回到上一级目录</li><li>E💿 退回到根目录</li><li>F:cls : (clear screen)清屏</li><li>G:exit : 退出dos命令行(分割线上的需要掌握,下的了解)</li><li>/=========================================================</li><li>md (make directory) : 创建目录</li><li>rd (remove directory): 删除目录</li><li>del (delete): 删除文件,删除一堆后缀名一样的文件*.txt</li><li>notepad 创建文件</li><li>删除带内容的文件夹<ul><li>rd + /s文件夹名称(询问是否删除)</li><li>rd + /q + /s 文件夹名称(直接删除)</li></ul></li></ul><h3 id="01-07-java语言概述-了解"><a class="header-anchor" href="#01-07-java语言概述-了解">☆</a>01.07_ Java语言概述 (了解)</h3><ul><li>A:Java语言发展史<ul><li>詹姆斯·高斯林(James Gosling)1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视。后来转至Sun公司,1990年,与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”,后来发展一套语言叫做“Oak”,后改名为Java。</li><li>SUN(Stanford University Network,斯坦福大学网络公司)</li></ul></li><li>B:Java语言版本<ul><li>JDK 1.1.4Sparkler宝石1997-09-12</li><li>JDK 1.1.5Pumpkin南瓜1997-12-13</li><li>JDK 1.1.6Abigail阿比盖尔–女子名1998-04-24</li><li>JDK 1.1.7Brutus布鲁图–古罗马政治家和将军1998-09-28</li><li>JDK 1.1.8Chelsea切尔西–城市名1999-04-08</li><li>J2SE 1.2Playground运动场1998-12-04</li><li>J2SE 1.2.1none无1999-03-30</li><li>J2SE 1.2.2Cricket蟋蟀1999-07-08</li><li>J2SE 1.3Kestrel美洲红隼(sǔn)2000-05-08</li><li>J2SE 1.3.1Ladybird瓢虫2001-05-17</li><li>J2SE 1.4.0Merlin灰背隼2002-02-13</li><li>J2SE 1.4.1grasshopper蚱蜢2002-09-16</li><li>J2SE 1.4.2Mantis螳螂2003-06-26</li><li>JAVASE 5.0 (1.5.0)Tiger老虎</li><li>JAVASE 5.1 (1.5.1)Dragonfly蜻蜓</li><li>JAVASE 6.0 (1.6.0)Mustang野马</li><li>JAVASE 7.0 (1.7.0)Dolphin海豚</li></ul></li><li>C:Java语言平台<ul><li>J2SE(Java 2 Platform Standard Edition)标准版<ul><li>是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发</li></ul></li><li>J2ME(Java 2 Platform Micro Edition)小型版<ul><li>是为开发电子消费产品和嵌入式设备提供的解决方案</li></ul></li><li>J2EE(Java 2 Platform Enterprise Edition)企业版<ul><li>是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发</li></ul></li></ul></li><li>C:Java语言特点<ul><li>简单性</li><li>解释性</li><li>面向对象</li><li>高性能</li><li>分布式处理</li><li>多线程</li><li>健壮性</li><li>动态</li><li>结构中立</li><li>安全性</li><li>开源</li><li>跨平台</li></ul></li></ul><h3 id="01-08-java语言跨平台原理-掌握"><a class="header-anchor" href="#01-08-java语言跨平台原理-掌握">☆</a>01.08_ Java语言跨平台原理 (掌握)</h3><ul><li>A:什么是跨平台性</li><li>B:Java语言跨平台原理<ul><li>只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。</li></ul></li><li>C:Java语言跨平台图解<ul><li>write once ,run anywhere!(一处编译,到处运行)</li></ul></li></ul><h3 id="01-09-jre和jdk的概述-掌握"><a class="header-anchor" href="#01-09-jre和jdk的概述-掌握">☆</a>01.09_ JRE和JDK的概述 (掌握)</h3><ul><li>A:什么是JRE<ul><li>包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。</li><li>JRE:JVM+类库。</li></ul></li><li>B:什么是JDK<ul><li>JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。</li><li>其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等</li><li>JDK:JRE+JAVA的开发工具。</li></ul></li><li>C:为什么JDK中包含一个JRE<ul><li>为什么JDK中包含一个JRE呢?<ul><li>开发完的程序,需要运行一下看看效果。</li></ul></li></ul></li><li>D:JDK,JRE,JVM的作用和关系</li></ul><h3 id="01-10-jdk的下载和安装过程图解-了解"><a class="header-anchor" href="#01-10-jdk的下载和安装过程图解-了解">☆</a>01.10_ JDK的下载和安装过程图解 (了解)</h3><ul><li>A:JDK的下载<ul><li>a:官网 <a href="http://www.oracle.com" target="_blank" rel="noopener">http://www.oracle.com</a></li><li>b:演示下载流程</li></ul></li><li>B:JDK的安装<ul><li>a:傻瓜式安装<ul><li>双击安装程序,然后一路next即可(但是不建议)</li></ul></li><li>b:安装的推荐方式<ul><li>安装路径不要有中文或者特殊符号如空格等。</li><li>所有和开发相关的软件最好安装目录统一。<ul><li>举例:我的JDK安装路径<ul><li>D:\develop\Java\jdk1.7.0_72</li></ul></li></ul></li><li>当提示安装JRE时,可以选择不安装。建议还是安装上。</li></ul></li><li>c:演示安装流程<ul><li>可以先在d盘建立一个文件夹develop</li><li>然后演示安装过程</li></ul></li></ul></li><li>C:验证安装是否成功<ul><li>a:通过DOS命令,切换到JDK安装的bin目录下。<ul><li>D:\develop\Java\jdk1.7.0_72\bin</li></ul></li><li>b:然后分别输入javac和java,如果正常显示一些内容,说明安装成功</li></ul></li></ul><h3 id="01-11-jdk安装路径下的目录解释-了解"><a class="header-anchor" href="#01-11-jdk安装路径下的目录解释-了解">☆</a>01.11_ JDK安装路径下的目录解释 (了解)</h3><ul><li>a:bin目录:该目录用于存放一些可执行程序。<ul><li>如javac.exe(java编译器)、java.exe(java运行工具),jar.exe(打包工具)和* javadoc.exe(文档生成工具)等。</li></ul></li><li>b:db目录:db目录是一个小型的数据库。<ul><li>从JDK 6.0开始,Java中引用了一个新的成员JavaDB,这是一个纯Java实现、开源的数据库管理系统。这个数据库不仅轻便,而且支持JDBC 4.0所有的规范,在学习JDBC 时,不再需要额外地安装一个数据库软件,选择直接使用JavaDB即可。</li></ul></li><li>c:jre目录:"jre"是 Java Runtime Environment 的缩写,意为Java程序运行时环境。此目录是Java运行时环境的根目录,它包括Java虚拟机,运行时的类包,Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具。</li><li>d:include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。</li><li>e:lib目录:lib是library的缩写,意为 Java 类库或库文件,是开发工具使用的归档包文件。</li><li>f:src.zip文件:src.zip为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。</li></ul><h3 id="01-12-java开发工具介绍-了解"><a class="header-anchor" href="#01-12-java开发工具介绍-了解">☆</a>01.12_ Java开发工具介绍 (了解)</h3><ul><li>A:notepad(微软操作系统自带)</li><li>B:Editplus/Notepad++</li><li>C:Eclipse</li><li>D:MyEclipse<ul><li>给大家简单的介绍一下这些工具,然后说说我们使用这些工具的顺序。</li><li>基础班:先notepad,然后Editplus,再Eclipse。</li><li>就业班:MyEclipse和Eclipse都用。</li></ul></li></ul><h3 id="01-13-helloworld案例的编写和运行-掌握"><a class="header-anchor" href="#01-13-helloworld案例的编写和运行-掌握">☆</a>01.13_ HelloWorld案例的编写和运行 (掌握)</h3><ul><li><p>A:定义类</p></li><li><p>B:写main方法</p></li><li><p>C:写输出语句</p></li><li><p>D:Java程序开发运行与工作原理</p></li><li><p>E:编译和运行程序</p><pre><code>class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}}</code></pre></li></ul><h3 id="01-14-helloworld案例常见问题-掌握"><a class="header-anchor" href="#01-14-helloworld案例常见问题-掌握">☆</a>01.14_ HelloWorld案例常见问题 (掌握)</h3><ul><li>A:找不到文件(都演示一下,让学生看看出现的都是什么问题)<ul><li>a:文件扩展名隐藏导致编译失败</li><li>b:文件名写错了</li></ul></li><li>B:单词拼写问题(都演示一下,让学生看看出现的都是什么问题)<ul><li>a:class写成Class</li><li>b:String写成string</li><li>c:System写成system</li><li>d:main写成mian</li></ul></li><li>C:括号匹配问题(都演示一下,让学生看看出现的都是什么问题)<ul><li>a:把类体的那对大括号弄掉一个</li><li>b:把方法体的那对大括号弄掉一个</li><li>c:把输出语句的那对小括号弄掉一个</li></ul></li><li>D:中英文问题(都演示一下,让学生看看出现的都是什么问题)<ul><li>a:提示信息:错误: 非法字符: ???的格式</li><li>注意:java编程中需要的基本上都是英文字符</li></ul></li></ul><h3 id="01-15-java语言的书写格式-约定俗成-掌握"><a class="header-anchor" href="#01-15-java语言的书写格式-约定俗成-掌握">☆</a>01.15_ Java语言的书写格式(约定俗成)(掌握)</h3><ul><li>1,大括号要对齐,并且成对写</li><li>2,左大括号前面有空格</li><li>3,遇到左大括号要缩进,Tab</li><li>4,方法和程序块之间加空行让程序看起来清晰</li><li>5,并排语句之间加空格,例如for语句</li><li>6,运算符两侧加空格</li></ul><h3 id="01-16-path环境变量的作用及配置方式1-掌握"><a class="header-anchor" href="#01-16-path环境变量的作用及配置方式1-掌握">☆</a>01.16_ path环境变量的作用及配置方式1 (掌握)</h3><ul><li>A:在JDK的bin目录下开发程序容易产生的问题<ul><li>a:如果文件过多,不方便管理</li><li>b:删除自己写过的不需要的文件,可能不小心把JDK自带的工具给删除了</li></ul></li><li>B:如何解决问题呢<ul><li>notepad这样的命令为什么在任何路径下都能够执行,配置path环境变量</li></ul></li><li>C:配置方式<ul><li>a:xp系统<ul><li>右键点击桌面计算机→选择属性→选择高级选项卡→点击环境变量→下方系统变量中查找path→双击path→将jdk安装目录下的bin目录添加到最左边并添加分号。</li></ul></li><li>b:win7/win8系统<ul><li>右键点击桌面计算机→选择属性→选择高级系统设置→选择高级选项卡→点击环境变量→下方系统变量中查找path→双击path→将jdk安装目录下的bin目录添加到最左边并添加分号。</li></ul></li></ul></li><li>path配置的是可执行的文件.exe,配置后可以在不同的盘符下访问path路径下的可执行文件</li></ul><h3 id="01-17-path环境变量的配置方式2-掌握"><a class="header-anchor" href="#01-17-path环境变量的配置方式2-掌握">☆</a>01.17_ Path环境变量的配置方式2 (掌握)</h3><ul><li>A:先配置JAVA_HOME</li><li>B:再修改path</li><li>C:最后说一下path是有先后顺序关系的</li></ul><h3 id="01-18-classpath环境变量的作用及其配置-了解"><a class="header-anchor" href="#01-18-classpath环境变量的作用及其配置-了解">☆</a>01.18_ classpath环境变量的作用及其配置 (了解)</h3><ul><li><p>A:为什么要配置classpath</p></li><li><p>B:classpath配置的原理</p></li><li><p>C:如何配置classpath</p></li><li><p>path和classpath的区别</p><ul><li>path配置的是可执行的文件.exe,配置后可以在不同的盘符下访问path路径下的可执行文件</li><li>classpath配置的java的类文件,就是.class文件</li></ul></li></ul><h3 id="01-19-editplus开发程序并编译运行-了解"><a class="header-anchor" href="#01-19-editplus开发程序并编译运行-了解">☆</a>01.19_ Editplus开发程序并编译运行 (了解)</h3><ul><li>A:配置快捷键编译运行</li><li>B:去除备份文件</li></ul><h3 id="01-20-注释概述及其分类-掌握"><a class="header-anchor" href="#01-20-注释概述及其分类-掌握">☆</a>01.20_ 注释概述及其分类 (掌握)</h3><ul><li><p>A:什么是注释</p></li><li><p>B:注释的分类及讲解</p><ul><li>文档注释目前不讲,说后面讲解</li></ul></li><li><p>注释的作用</p><ul><li>A:解释说明程序</li><li>B:帮助我们调试错误</li></ul></li></ul><h3 id="01-21-关键字的概述和使用-掌握"><a class="header-anchor" href="#01-21-关键字的概述和使用-掌握">☆</a>01.21_ 关键字的概述和使用 (掌握)</h3><ul><li>A:什么是关键字<ul><li>被Java语言赋予特定含义的单词</li></ul></li><li>B:关键字的特点<ul><li>组成关键字的字母全部小写</li></ul></li><li>C:常见关键字<ul><li>public static void class等</li></ul></li><li>D:关键字的注意事项<ul><li>goto和const作为保留字存在,目前并不使用,类似Editplus这样的高级记事本,针对关键字有特殊的颜色标记,非常直观</li></ul></li></ul><h3 id="01-22-标识符的概述和组成规则-掌握"><a class="header-anchor" href="#01-22-标识符的概述和组成规则-掌握">☆</a>01.22_ 标识符的概述和组成规则 (掌握)</h3><ul><li>A:什么是标识符<ul><li>就是给类,接口,方法,变量等起名字时使用的字符序列</li></ul></li><li>B:标识符的组成规则<ul><li>英文大小写字母</li><li>数字字符</li><li>$和_</li></ul></li><li>C:标识符注意事项<ul><li>1,不能使用关键字</li><li>2,不能数字开头</li></ul></li></ul><h3 id="01-23-标识符中常见的命名规则-了解"><a class="header-anchor" href="#01-23-标识符中常见的命名规则-了解">☆</a>01.23_ 标识符中常见的命名规则 (了解)</h3><ul><li>见名知意</li><li>A:包<ul><li>最好是域名倒过来,要求所有的字母小写</li></ul></li><li>B:类或者接口<ul><li>如果是一个单词首字母大写</li><li>如果是多个单词每个单词首字母大写(驼峰标识)</li></ul></li><li>C:方法或者变量<ul><li>如果是一个单词全部小写</li><li>如果是多个单词,从第二个单词首字母大写</li></ul></li><li>D:常量<ul><li>如果是一个单词,所有字母大写</li><li>如果是多个单词,所有的单词大写,用下划线区分每个单词</li></ul></li></ul><h3 id="01-24-day01总结"><a class="header-anchor" href="#01-24-day01总结">☆</a>01.24_day01总结</h3><ul><li>把今天的知识点总结一遍。</li></ul>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="Java" scheme="http://www.singlelovely.cn/categories/Java/"/>
<category term="Java" scheme="http://www.singlelovely.cn/tags/Java/"/>
</entry>
<entry>
<title>毁掉一个中国年轻人有多容易</title>
<link href="http://www.singlelovely.cn/post/23e28675.html"/>
<id>http://www.singlelovely.cn/post/23e28675.html</id>
<published>2018-07-06T16:10:40.000Z</published>
<updated>2020-09-21T13:41:07.551Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p><strong>不知道你有没有这样的感受?</strong></p><p>走在街上,感觉自己的耳膜被短视频神曲轮番轰炸:从C哩C哩到123我爱你,从Despacito到确认过眼神;</p><p>排队等餐厅叫号,公交车站等公交,90%的人都在低头刷手机,嘴角不时地浮现出蜜汁微笑;</p><p>朋友圈和微博上,无数人发出这样的感慨:“抖音有毒,不知不觉我竟然刷了一整天。”</p><p>有数据统计,玩短视频85%的用户在24岁以下,基本上都是95后,甚至是00后。</p><p>越来越多的年轻人将时间花在刷短视频上,通过手机窥见别人的生活和人生。</p><p>然后放下手机,突然觉得周边的一切都索然无味。</p><p>《双城记》中,狄更斯说:“这是一个最好的时代,这是一个最坏的时代。”</p><p>在这个时代里,摧毁一个中国年轻人,真的很容易。</p><p>看过这样一项调查:<br>95后最向往的新兴职业中,主播、网红占据了54%。</p><p>然而,这些主播、网红们,向年轻人们传递的都是什么样的价值观呢?</p><p>有美女网红直播撕书,高调地宣称:她们不读书照样开跑车,大学生也得给她们打工;</p><p>有17岁的女生整容、泡夜店、炫富、私生活混乱,却凭借着一段摇头晃脑的短视频走红,获得千万点赞;</p><p>有00后网红互相攀比早恋早孕,直播晒肚子、晒孩子,还分享一些“相关经验”,抱着孩子就能顺带把钱赚了。</p><p>……</p><p>这些人的走红让年轻人看到一种成功的捷径,只要红了,就有钱了。</p><p>一些人生观、价值观还未成熟的未成年人,通过网红的世界仿佛看到了另一种活法:</p><p>既然那么简单就可以赚到快钱和关注,谁还愿意头悬梁、锥刺股地寒窗苦读呢?</p><p>既然拍一条短视频就可以抵上普通白领几个月的工资,谁还愿意勤勤恳恳地工作呢?</p><p>读书太苦了,工作太累了,不如整成网红脸,发几条短视频赚取关注和流量。</p><p>最好再傍上一位有钱的金主,从此就能享受纸醉金迷,过上最光鲜亮丽的生活</p><p>……</p><p>不知道有多少人被这样的价值观荼毒,荒废了学业、堕落了青春。</p><p>细思极恐。</p><p>这个时代,毁掉一个中国年轻人,只需要一种脱轨的价值观就够了。</p><p>有人说:现代的中国年轻人,习惯于在微信运动里刷存在感,在网络小说中找爱情,在游戏里成就“王者荣耀”。</p><p>微博上的娱乐圈八卦新闻,让你沉浸在明星的绯闻琐事之中无法自拔;</p><p>短小的公众号、头条文章,控制在2000字左右,保证让你5分钟能读完;</p><p>抖音短视频15秒就给你一个刺激,你永远也不知道下一个15秒会刷到什么。</p><p>……</p><p>这些利用流量、算法机制推荐的软件,都在利用大数据慢慢掏空你的时间。</p><p>这些软件,为什么能如此让人上瘾?</p><p>因为你的每一次点击、每一次滑动,都会有实时的反馈。</p><p>这些及时的反馈刺激大脑多次产生多巴胺,并形成依赖,渴望下一个刺激到来,陷入死循环。</p><p>这些能提供短期快感的软件,就像不折不扣的精神鸦片。</p><p>你麻木地盯着手机屏幕,玩到忘情所以、看到眼睛发酸,却不知自己的深度思考能力正在逐渐被腐蚀。</p><p>到最后,除了大量的时间白白被浪费,你一无所得,留下的只会是满满的空虚。</p><p>网络段子张口就来,抖音上的梗知道得比谁都多,网红的名字如数家珍,却忘了自己有多久没有好好看过一部经典电影、一本纸质书。</p><p>……</p><p><img src="https://data.singlelovely.cn/xsj/2018/7/7/01.jpg" alt=" "></p><p>你慢慢变成了自己曾经最鄙视的那种人,离记忆里那个朝气蓬勃的少年越来越远。</p><p>你的生活变成了简单的两点一线,自己在虚假的满足感中丧失了任何向上的动力。</p><p>这个时代,毁掉一个中国年轻人,只需要一个能获得短期快感的app就够了。</p><p>这个快节奏的时代,那些选择慢下来的“异类”,反而让人觉得可爱。</p><p>就像歌手李健,在拍《我是歌手》的时候,被曝出一直用的是老旧的诺基亚键盘手机。</p><p>他说:“没有智能手机,受干扰的机会就少了许多。”</p><p>他就像生活的旁观者,安静地听音乐、阅读、思考、观察这个世界。</p><p>他会强迫自己读一些比较难啃的经典书籍:<br>“童话读起来毫不费力,但人的一生不可能只是读童话,还是要强迫自己读一些看不懂、不好读的书。强迫自己读下来,一定会有收获。”</p><p>他心目中的理想生活是让自己置身于另一个空间,去旅行,带着书和一把小琴。</p><p><img src="https://data.singlelovely.cn/xsj/2018/7/7/02.jpg" alt=" "></p><p>又像作家皮克·耶尔,逃离曼哈顿的摩天大楼,关掉电脑、抛开手机、逃离都市的喧嚣。</p><p>他喜欢上了独处和思考,让精神和身体得到彻底的放松,给自己一个留白的空间。</p><p>林语堂先生曾经说过:“一个人只拥有此生此世是不够的,他还应该拥有诗意的世界。”<br>你的精力分配,反映了你是什么层次的人。</p><p>从他们身上,我看到的不是浮躁的价值观、空虚的短期快感,而是一种安静的力量。</p><p>多少人嘴里说着:“垃圾游戏,毁我青春。”“短视频有毒,浪费时间。”</p><p>然而,毁掉你的,不是短视频,不是游戏,而是不够自律的你自己。</p><p>当你从脱轨的价值观、虚拟的快感中抽离,重新审视自己,审视周围。</p><p>你会发现:真正能让你获得充实感和满足感的,是那些需要长期投入的事物。</p><p>柴静在《看见》里写道:“从不假思索的愚昧里挣脱,这才是活着。”</p><p>不要让自己变成一个被浮躁的价值观、短期的快感废掉的年轻人。</p><p>你现在每一天短暂的享乐,都在透支着未来。</p><p><strong>共勉。</strong></p>]]></content>
<summary type="html">
这是一个最好的时代,这是一个最坏的时代
</summary>
<category term="闲读" scheme="http://www.singlelovely.cn/categories/%E9%97%B2%E8%AF%BB/"/>
</entry>
<entry>
<title>计算机网络-名词解释</title>
<link href="http://www.singlelovely.cn/post/a11ee691.html"/>
<id>http://www.singlelovely.cn/post/a11ee691.html</id>
<published>2018-07-04T17:01:01.000Z</published>
<updated>2020-09-21T13:41:07.554Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-GxQETFoK" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1803360770" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="false" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><p>ADSL (Asymmetric Digital SubscriberLine) 非对称数字用户线</p><p>ARQ (Automatic Repeat reQU t)自动重传请求</p><p>CDMA (Code Division MultiplexAccess)码分多址</p><p>DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议</p><p>DNS (Domain Name System) 域名系统</p><p>FDM (Frequency Division Multiplexing) 频分复用</p><p>FTP(FileTransferProtocol)文件传送协议</p><p>HTML (HyperText Markup Language) 超文本标记语言</p><p>ICMP (Internet Control Message Protocol) 网际控制报文协议</p><p>lP (Internet Protocol) 网际协议</p><p>NAT (NetworkAddress Translation) 网络地址转换</p><p>OSPF (Open Shortest Path First) 开放最短通路优先</p><p>POP(Post Office Protocol) 邮局协议</p><p>PPP (Point-to-Point Protocol) 点对点协议</p><p>RFC (Request For Comments) 请求评论</p><p>SMTP (Simple MailTransferProtocol) 简单邮件传送协议</p><p>STDM (Statistic TDM) 统计时分复用</p><p>STM (Synchronous Transfer Module) 同步传递模块</p><p>TCP (Transmission Control Protocol) 传输控制协议</p><p>TFTP (Trivial File Transfer Protocol) 简单文件传送协议</p><p>UDP (UserDatagram Protocol) 用户数据报协议</p><p>URL (Uniform Resource Locator) 统一资源定位符</p><p>WLAN (Wireless Local AreaNetwork) 无线局域网</p><p>WPAN (Wireless Personal Area Network) 无线个人区域网</p><p>WWW (World WideWeb) 万维网</p><p>ICMP (Internet Control Message Protocol)Internet控制报文协议</p><ul><li>检测网络是否通畅、主机是否可达、路由是否可用等网络运行状态。</li><li>ping、tracert命令基于ICMP</li></ul><p>MTU (Maximum Transmission Unit)最大传输单元</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="网络" scheme="http://www.singlelovely.cn/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="网络" scheme="http://www.singlelovely.cn/tags/%E7%BD%91%E7%BB%9C/"/>
</entry>
<entry>
<title>VS code 显示中文异常解决办法</title>
<link href="http://www.singlelovely.cn/post/fdf0e152.html"/>
<id>http://www.singlelovely.cn/post/fdf0e152.html</id>
<published>2018-06-28T15:28:36.000Z</published>
<updated>2020-09-21T13:41:07.543Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-ZqwzBDYS" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1803360770" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="false" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><p>从https://www.zhihu.com/question/34415763得到问题解决办法,现做如下总结。</p><p>异常原因:VSCODE默认是UTF-8编码打开文件的。如果遇到了像GB18030 GBK等等的编码,就显示乱码了。</p><p>解决办法如下:</p><p>1,一劳永逸法:</p><p>在设置文件中加入: <font color="#1a237e">“files.autoGuessEncoding”:true</font><br>,自动识别字符编码。</p><p>ps:a:此设置可能需要最新版本的VScode,因为我当前用的就是最新版,所以修改后显示马上正常了。<br> b:设置文件打开位置:文件–.>首选项–>设置–>用户设置。</p><p>2,单个文件解决办法:</p><p>vs code界面右下角位置有显示解析当前文件所用的字符源码(默认是UTF-8),单击该处,手动更改编码</p><p>3,vscode默认文件字符编码为utf-8,可以在用户设置修改该属性,如:files.encoding":“gbk”</p>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
</entry>
<entry>
<title>计算机网络复习</title>
<link href="http://www.singlelovely.cn/post/9a8cdc59.html"/>
<id>http://www.singlelovely.cn/post/9a8cdc59.html</id>
<published>2018-06-13T00:37:27.000Z</published>
<updated>2020-09-21T13:41:07.554Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-EQxADPBV" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1795310580" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第一章-概述"><a class="header-anchor" href="#第一章-概述">☆</a>第一章 概述</h3><h4 id="概念复习"><a class="header-anchor" href="#概念复习">☆</a>概念复习</h4><ol><li>什么是网络协议?<br>为进行网络中的数据交换而建立的规则、标准或约定。</li><li>网络协议的三要素是?<ul><li>语法 数据与控制信息的结构或格式 。</li><li>语义 需要发出何种控制信息,完成何种动作以及做出何种响应。</li><li>同步 事件实现顺序的详细说明。</li></ul></li></ol><h3 id="第二章-物理层"><a class="header-anchor" href="#第二章-物理层">☆</a>第二章 物理层</h3><h4 id="概念复习-v2"><a class="header-anchor" href="#概念复习-v2">☆</a>概念复习</h4><ol><li><p>OSI/RM包括哪些层次?<br>应用层、表示层、会话层、运输层、网络层、数据链路层、物理层</p></li><li><p>TCP/IP包括哪些层次?<br>应用层、运输层、网际层IP、网络接口层</p></li><li><p>五层协议?<br>应用层、运输层、网络层、数据链路层、物理层</p></li><li><p>物理层的主要任务是?</p><ul><li>实现位操作</li><li>数据信号的传输</li><li>接口设计</li><li>信号传输规程</li><li>屏蔽掉传输媒体和通信手段的差异</li><li>完成传输方式的转换</li></ul></li></ol><ol start="5"><li>数据通信的方式有哪些?<ul><li>单向通信(单工)</li><li>双向交替通信(半双工)</li><li>双向同时通信(全双工)</li></ul></li></ol><ol start="6"><li>基带信号调制方法包括哪些?<ul><li>调幅</li><li>调频</li><li>调相</li></ul></li></ol><ol start="7"><li>常用编码方式?P44<ul><li>不归零制:正电平代表1,负电平代表0</li><li>归零制:正脉冲代表1,负脉冲代表0</li><li>曼彻斯特编码:位于周期中心的向上跳变代表0,位于周期中心的向下跳变代表1</li><li>差分曼彻斯特编码:在每一位的中心处始终都有跳变。位开始边界有跳变代表1,位开始边界没有跳变代表0。</li></ul></li></ol><ol start="8"><li>信道的复用技术有哪些?<ul><li><p>频分复用<br>频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。</p></li><li><p>时分复用</p><ul><li>时分复用的所有用户是在不同的时间点占用同样的频带宽度。</li><li>将时间划分为一段段等长的时分复用帧(TDM 帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。</li><li>每一个用户所占用的时隙是周期性地出现(其周期就是 TDM 帧的长度)。</li><li>TDM 信号也称为等时(isochronous)信号。</li></ul></li><li><p>统计时分复用<br>又称异步时分复用,常用于:集中器</p><p><img src="https://data.singlelovely.cn/xsj/2018/6/14/%E7%BB%9F%E8%AE%A1%E6%97%B6%E5%88%86%E5%A4%8D%E7%94%A8.png" alt="统计时分复用"></p></li><li><p>波分复用:光的频分复用</p><p><img src="https://data.singlelovely.cn/xsj/2018/6/14/%E6%B3%A2%E5%88%86%E5%A4%8D%E7%94%A8.png" alt="波分复用"></p></li><li><p>码分复用:</p><ul><li>码分复用常用的名词时码分多址CDMA。</li><li>各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。</li><li>这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。</li></ul></li></ul></li></ol><ol start="9"><li>PCM的过程包括?<ul><li>PCM:脉冲编码调制</li><li>采样 、量化 、编码</li></ul></li></ol><ol start="10"><li>传输媒体包括哪些类型?各有哪些传输介质?<ul><li>引导型传输媒体<ul><li>双绞线</li><li>同轴电缆</li><li>光缆</li></ul></li><li>非引导型传输媒体<ul><li>地面微波接力</li><li>卫星通信</li></ul></li></ul></li></ol><h4 id="练习题"><a class="header-anchor" href="#练习题">☆</a>练习题</h4><ol><li><p>一个码元传输速率为300Baud的信道,如果采用4元制,其信道的传输速率为( B )<br>A.300bit/s B.600bit/s<br>C.1200bit/s D.2400bit/s</p></li><li><p>采用8个相位的调相传输码元,传输速率为200Baud,则数据传输率为( B )<br>A.400bit/s B.600bit/s<br>C.800bit/s D.1600bit/s</p></li><li><p>对于带宽为50khz的信道,若用16种不同的物理状态来表示数据,信噪比为20dB,问该信道的最大数据传输率是多少?若不考虑噪声,则信道的极限传输速率是多少?<br><strong>解:</strong><br>根据奈奎斯特定理:<br>C=2Wlog<sub>2</sub> 𝑽=2*50*log<sub>2</sub>16=400kbit/s<br>香浓定理:<br>因为:10log<sub>10</sub> (S/N)=20dB,所以S/N=100<br>C = W log<sub>2</sub>(1+S/N)<br>=50*log2(1+100)kbit/s<br>=333kbit/s</p></li></ol><p>课后习题<br>5、7、8、13(2)、14(1)、16</p> <div id="aplayer-rKRWsuLY" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1795858870" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第三章-数据链路层"><a class="header-anchor" href="#第三章-数据链路层">☆</a>第三章 数据链路层</h3><h4 id="概念复习-v3"><a class="header-anchor" href="#概念复习-v3">☆</a>概念复习</h4><ol><li><p>宽带接入技术有哪些?<br>2.6.1 ADSL 技术</p><ul><li>DSL 就是数字用户线</li><li>非对称数字用户线 ADSL</li><li>标准模拟电话信号的频带被限制在 300~3400 Hz 的范围内,但用户线本身实际可通过的信号频率仍然超过 1 MHz。ADSL 技术就把 0~4 kHz 低端频谱留给传统电话使用,而把原来没有被利用的高端频谱留给用户上网使用。</li><li>ADSL 的传输距离取决于数据率和用户线的线径(用户线越细,信号传输时的衰减就越大)。</li><li>ADSL 所能得到的最高数据传输速率与实际的用户线上的信噪比密切相关。</li><li>需要ADSL调制解调器<br> </li></ul><p>2.6.2 光纤同轴混合网(HFC网)<br> 主干部分改换为光纤,并使用模拟光纤技术</p><p>2.6.3 FTTx 技术<br> 多种宽带光纤接入</p></li><li><p>数据链路层的信道有哪些?.<br>点对点信道<br>广播信道</p></li><li><p>帧定界的方法有哪些?<br>带位填充的首尾标记定界法<br>违法编码定界法<br>用控制字符进行帧定界法(SOH和EOT)</p></li></ol><h4 id="练习"><a class="header-anchor" href="#练习">☆</a>练习</h4><p>1. 要发送的数据是1101 0110 11,采用CRC校验,生成多项式是10011,那么最终发送的数据应该是( 1101 0110 1111 10 )</p><p>2. 采用生成多项式x6+x4+x+1发送的报文到达接收方为101011000110,所接收的报文是否正确?试说明理由。<br> 多项式x6+x4+x+1对应的位串是1010011,用它来除接收到的报文,若能整除则所接收报文正确。<br> 能够整除,所以收到的报文是正确的。</p><p>3. 一个准备发送的PPP帧的数据部分是<br>7E AB 15 7D 78 09 7E。试问进行字符填充后的数据是什么(用十六进制写出)</p><p><strong>解</strong>:7D 5E AB 7D 35 7D 5D 78 7D 29 7D 5E</p><p>4. 一个PPP帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 23 44 7D 5E。试问真正的数据是什么(用十六进制写出)</p><p><strong>解</strong>:7E FE 27 7D 03 44 7E</p><p>5. PPP协议使用同步传输技术传送比特串01110 11111 11111 010,试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是00011 10111 11011 11100 1010,问删除发送端加入的零比特后变成怎么样的比特串?</p><p><strong>解</strong>:<br> 01110 11111 011111 0010<br> 00011 10111 11111 11010 10</p><h4 id="概念复习-v4"><a class="header-anchor" href="#概念复习-v4">☆</a>概念复习</h4><ol><li><p>PPP帧如何解决透明传输问题</p><ul><li>当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)。</li><li>当 PPP 用在异步传输时,就使用一种特殊的字符填充法。<ul><li>将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)。</li><li>若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)。</li><li>若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,后面部分与0x20异或。<br> </li></ul></li></ul></li><li><p>CSMA/CD协议的要点有哪些?P88<br>多点接入:总线型网络,许多计算机以多点接入的方式连接在一根总线上<br>载波监听:发送前检测信道是否空闲,空闲则发送,若忙则继续检测,直到空闲发送。<br>碰撞检测:边发送变检测;在发送过程中继续检测信道,若一直未检测到碰撞,就顺利把这个帧成功发送完毕。若检测到碰撞,则终止数据的发送,并发送人为的阻塞信号</p></li><li><p>判对错:<br>CSMA/CD以太网是全双工通信。(错)<br>曼彻斯特编码是一种自同步编码。(对)<br>以太网中,小于64字节的帧是无效帧。(对)<br>循环冗余校验码的缩写为CRC。(对)</p></li></ol><h4 id="练习-v2"><a class="header-anchor" href="#练习-v2">☆</a>练习</h4><p>1.CSMA/CD定义的冲突检测时间是( A )<br>A.信号在最远两个端点之间往返传输的时间<br>B.信号从线路一端传输到另一端的时间<br>C.从发送开始到收到应答的时间<br>D.从发送完毕到收到应答的时间<br>2.CSMA/CD方法用来解决多结点如何共享共用总线传输介质的问题,在采用CSMA/CD的网络中( A )<br>A.不存在集中控制的结点<br>B.存在一个集中控制的结点<br>C.存在多个集中控制的结点<br>D.可以有也可以没有集中控制的结点</p><p>3.若10Mbps的CSMA/CD局域网的结点的最大距离为2.5km,信号在介质中的传播速度为2*108m/s。求该网的最短帧长。</p><p>解:最短帧 =2*[(2.5*103m)/(2*108m/s)]*10*106bps=250bit</p><p>4.在一个采用CSMA/CD协议的网络中,传输介质是一个完整的电缆,传输速率为1Gbps,电缆中的信号传播速度是200000km/s。若最小数据帧长度减少800比特,则最远的两个站点之间的距离至少需要( D )<br>A.增加160m B.增加80m C.减少160m D.减少80m<br>本题为2009年全国考研题</p><h4 id="概念复习-v5"><a class="header-anchor" href="#概念复习-v5">☆</a>概念复习</h4><ol><li><p>MAC帧的格式是?</p><p><img src="https://data.singlelovely.cn/xsj/2018/6/15/V2mac%E5%B8%A7%E6%A0%BC%E5%BC%8F.png" alt=" "></p></li><li><p>哪些属于无效的MAC帧?<br>帧的长度不是整数个字节;<br>用收到的帧检验序列 FCS 查出有差错;<br>数据字段的长度不在 46 ~ 1500 字节之间。</p></li><li><p>网桥自学习和转发帧的步骤是?</p><ul><li>交换机收到一帧后先进行自学习。查找交换表中与收到帧的源地址有无相匹配的项目。<ul><li>如没有,就在交换表中增加一个项目(源地址、进入的接口和有效时间)。</li><li>如有,则把原有的项目进行更新(进入的接口或有效时间)。</li></ul></li><li>转发帧。查找交换表中与收到帧的目的地址有无相匹配的项目。<ul><li>如没有,则向所有其他接口(进入的接口除外)转发。</li><li>如有,则按交换表中给出的接口进行转发。</li><li>若交换表中给出的接口就是该帧进入交换机的接口,则应丢弃这个帧(因为这时不需要经过交换机进行转发)<br> </li></ul></li></ul></li></ol><ol start="4"><li>数据链路层解决的三个问题<br>封装成帧、透明传输、差错检测</li></ol><h4 id="概念复习-v6"><a class="header-anchor" href="#概念复习-v6">☆</a>概念复习</h4><p>1.点对点协议PPP<br>满足的需求:</p><ul><li>简单</li><li>封装成帧</li><li>透明性</li><li>多种网络层协议</li><li>多种类型链路</li><li>差错检测</li><li>检测连接状态</li><li>最大传送单元</li><li>网络层地址协商</li><li>数据压缩协商</li></ul><p>组成部分:</p><ul><li>一个将 IP 数据报封装到串行链路的方法。异步和同步</li><li>链路控制协议LCP(Link Control Protocol)。一个用来建立、配置和测试数据链路连接的链路控制协议。</li><li>网络控制协议 NCP (Network Control Protocol)。一套网络控制协议,其中的每一个协议支持不同的网络层协议。</li></ul><p>PPP帧格式:</p><ul><li><p>标志字段 F = 0x7E 7E 的二进制表示是 01111110</p></li><li><p>地址字段 A 只置为 0xFF(广播)。</p></li><li><p>控制字段 C 通常置为 0x03(无序号的帧)。</p></li><li><p>这两个字段实际上并不起作用。</p></li><li><p>帧检验序列(FCS):用CRC计算得到</p></li><li><p>PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。</p></li><li><p>PPP 有一个 2 个字节的协议字段。其值</p><ul><li>若为 0x0021,则信息字段就是 IP 数据报。</li><li>若为 0x8021,则信息字段是网络控制数据。</li><li>若为 0xC021,则信息字段是 PPP 链路控制数据。</li><li>若为 0xC023,则信息字段是鉴别数据。</li></ul></li></ul><p>2.CSMA/CD协议(略)<br>3.MAC帧 <strong>P96</strong><br>4.扩展以太网(物理层、数据链路层、VLAN) <strong>P97</strong><br>三个基本概念:广播 广播域 冲突域<br>5.高速以太网 <strong>P103</strong></p><p>课后复习题<br>3、7、8、9、10、14(1、2)</p><h4 id="练习-v3"><a class="header-anchor" href="#练习-v3">☆</a>练习</h4><p>1.要发送的数据比特序列为10100 01101,CRC校验生成多项式为G(x)=x5+x4+x2+1,试计算CRC校验码<br>2、若构造一个CSMA/CD总线网,速率为100Mbit/s,信号在电缆中传播速度为2*105km/s,数据帧的最小长度为125B。试求总线电缆的最大长度(假设总线电缆中无中继器)</p><p>答案:<br>1、01110<br>2、125*8 = 10<sup>8</sup>*t --> t = 10<sup>3</sup>/10<sup>8</sup>=10<sup>-5</sup><br>T=2s/v -> s=t*v/2=10<sup>-5</sup>*2*10<sup>8</sup>/2=10<sup>3</sup></p><p>3、通过IEEE802.3局域网传送ASCII码信息”Good morning!”,若封装成一个MAC帧,请问:<br>(1)、该帧的数据字段有效字节为多少?<br>(2)、需要填充多少个字节?<br>4、一个准备发送的PPP帧的数据部分是<br>EB 7E 5D 12 7D 21 5E 7E。试问进行字符填充后的数据是什么(用十六进制写出)</p><p>答案:<br>3、13B、46-13=33B<br>4、EB 7D 5E 5D 7D 32 7D 5D 21 5E 7D 5E</p> <div id="aplayer-YfSjptHT" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1769883494" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第四章-网络层"><a class="header-anchor" href="#第四章-网络层">☆</a>第四章 网络层</h3><p>4.1 网络层提供的两种服务 <br>4.2 网际协议 IP <br>4.3 划分子网和构造超网 <br>4.4 网际控制报文协议 ICMP <br>4.5 互联网的路由选择协议 <br>4.6 IPv6 <br>4.7 IP 多播 <br>4.8 虚拟专用网 VPN 和网络地址转换 NAT <br>4.9 多协议标记交换 MPLS</p><h4 id="概念复习-v7"><a class="header-anchor" href="#概念复习-v7">☆</a>概念复习</h4><ol><li>网络适配器的作用是什么?网络适配器工作在 哪一层?<ul><li>进行数据串行传输和并行传输的转换包的装配和拆装网络存取控制数据缓存和网络信号。</li><li>网络适配器工作在物理层。</li></ul></li><li>循环冗余校验中某位变为0是否能检测出来?<br>·················</li></ol><p><strong>网际协议 IP</strong><br>与 IP 协议配套使用的还有三个协议:</p><p>地址解析协议 ARP (Address Resolution Protocol)<br>网际控制报文协议 ICMP (Internet Control Message Protocol)<br>网际组管理协议 IGMP (Internet Group Management Protocol)</p><p><strong>局域网与局域网的互连</strong></p><ul><li>同种局域网互连<ul><li>使用相同协议</li><li>互连比较简单</li><li>可使用中继器、集线器进行互连</li></ul></li><li>异种局域网互连<ul><li>使用不同协议</li><li>可用网桥、交换机互连</li><li>多个局域网可以用路由器进行互连</li></ul></li></ul><p><strong>IPv4地址分为A,B,C,D,E类:</strong></p><pre><code>- A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途);- B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0;- C类:192.0.0.0~223.255.255.255,默认子网掩码/24,即255.255.255.0;- D类:224.0.0.0~239.255.255.255,一般于用组播- E类:240.0.0.0~255.255.255.255(其中255.255.255.255为全网广播地址),E类地址一般用于研究用途..</code></pre><ul><li><p>IPv4中还有一种私有地址,即比如内部局域网所用的地址,分别为:</p><pre><code>10.0.0.0~10.255.255.255;172.16.0.0~172.31.0.0;192.168.0.0~192.168.255.255</code></pre></li></ul><p>一般不指派的特殊IP地址 :</p><pre><code>- 主机号全0、全1不指派- 网络号:- A类(0…) ——全0和127(01111111)不指派 - B类(10…) ——128.0不指派 - C类(110…)——192.0.0不指派- 主机号全0——本主机所连接的单个网络地址 - 主机号全1——指定网络内的所有主机 - 网络号全0——本网络 - 网络号127——保留作为本地软件环回测试,即本主机进程之间通信时使用 </code></pre><h4 id="练习-v4"><a class="header-anchor" href="#练习-v4">☆</a>练习</h4><ol><li><p>网络层的主要目的是( C )</p><pre><code> A、在邻接结点间进行数据报传输 B、在邻接结点间进行数据报的可靠传输 C、在任意结点间进行数据报传输 D、在任意结点间进行数据报可靠传输 </code></pre></li><li><p>以下协议都为网络层协议的是( C ) …</p><pre><code>A、IP、ICMP、ARP、UDP B、 TCP、ICMP、UDP、ARP C、 IP、ICMP、ARP、RARP D、UDP、 IP、ICMP、RARP </code></pre></li><li><p>下列地址中,属于本地回路地址的是( D )</p><pre><code>A、10.10.10.1 B、 255.255.255.0 C、 192.168.24.59 D、127.0.0.1 </code></pre></li><li><p>以下IP地址中可以作为互联网上的IP地址的是 ( C )</p><pre><code>A、192.46.10.0 B、127.0.0.1 C、110.47.10.0 D、211.60.256.21 </code></pre></li></ol><h4 id="虚电路服务与数据报服务"><a class="header-anchor" href="#虚电路服务与数据报服务">☆</a>虚电路服务与数据报服务</h4><p><img src="https://data.singlelovely.cn/xsj/2018/6/20/%E8%99%9A%E7%94%B5%E8%B7%AF%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%8A%A5%E6%9C%8D%E5%8A%A1.png" alt title="虚电路与数据报服务"></p><h4 id="复习题"><a class="header-anchor" href="#复习题">☆</a>复习题</h4><ol><li>网络层提供了哪两种服务,分别是?<br>虚电路服务和数据报服务</li><li>分类的IP地址将IP地址分为几类?如何进行划分?</li><li>下列IP地址分别是哪类IP地址。<br>193.52.3.6、 C<br>129.45.26.3、 B<br>10.2.3.5、 A<br>118.45.62.3、A<br>224.34.124.56 D</li></ol><h4 id="ip协议的特点"><a class="header-anchor" href="#ip协议的特点">☆</a>IP协议的特点</h4><ul><li>不可靠的投递服务 : IP协议无法保证数据报投递的结果</li><li>无连接的投递服务 : 每个数据报都是独立处理和传输的,IP协议无法保证它们 能够按序到达接收方</li><li>尽力的投递服务 : IP协议不简单地丢弃数据报,有一线希望,就尽力向前投 递</li></ul><h4 id="练习-v5"><a class="header-anchor" href="#练习-v5">☆</a>练习</h4><ul><li> 假设有一个IP数据报,头部长度为20B,数据部分长度为2000B。现该分组从源主机到目的主机需要经过两个网络,这两个网络所允许的最大传输单元MTU为1500B和576B。请问该数据报如何进行分片?</li></ul><p><strong>解:</strong></p><pre><code>经过第一个网络时进行分片,分为2个分片 分片1携带1480B的数据,大小为1500B; 分片2携带520B的数据,大小为540B; 经过第2个网络时,分片1需要进一步分片 分片3携带556B数据,大小为576B 分片4携带556B数据,大小为576B 分片5携带368B数据,大小为388B 分片2大小为540B,因此无需分片 目的主机将收到4个分片,即分片2、3、4、5 </code></pre><ul><li> 一个IPv4分组到达一个结点时,其头部信息(十六进制 表示)如下: 0x45 00 00 54 00 03 18 50 20 06 FF F0 7C 4E 03 02 B4 0E 0F 02 试问:</li></ul><ol><li>分组在传输过程中是否已经被破坏</li><li>该分组是否有选项</li><li>该分组是否已经被分割(即原始分片中的一片)</li><li>该分组数据域的大小如何</li><li>根据分组头中的生成时间域判断,该分组还可以经过多 少个路由器</li><li>分组的标识符是什么</li><li>分组的服务类型是什么</li><li>用点分十进制表示,分组的源地址和目的地址各是什么</li></ol><p><strong>解:</strong></p><pre><code>1. 是,校验和为3F F1,与分组头中的检验和值不同 2. 没有,分组头长5,不包含选项部分 3. 已经被分割,偏移值不等于04. 总长度84个字节(0x54),头长20,因此数据域的长 度是64个字节 5. 32(0x20) 6. 00 03(十六进制) 7. 0x00 8. 源地址:124.78.3.2 目的地址:180.14.15.2 </code></pre><ul><li><p> 在某个子网中给一共四台主机分配IP地址(子网 掩码均为255.255.255.224),其中一台因IP地 址分配不当存在通信故障,这一台主机IP地址是 ( A )</p><pre><code> 四个IP地址的最后一个字节为224---11100000A. 200.10.1.60 00111100B. 200.10.1.65 01000001C. 200.10.1.70 01000110 D. 200.10.1.75 01001011 </code></pre></li><li><p> 例:将一个C类网络分成4个子网,若所用网络号为 192.9.200.0 ,则写出网络的子网掩码,并写出每个子网的IP地址范围</p><pre><code> (1)求子网掩码 要划分4个子网,m=3 将11100000转换为十进制:224 子网掩码:255.255.255.224 (2)4个子网的IP地址范围(原网络号192.9.200.0) 1)当子网号=001时,二进制范围为 11000000 00001001 11001000 00100001~11000000 00001001 11001000 00111110 相应十进制范围为:192.9.200.33~192.9.200.62 2)当子网号=010时,二进制范围为 11000000 00001001 11001000 01000001 ~ 11000000 00001001 11001000 01011110 相应十进制范围为:192.9.200.65~192.9.200.94 3)当子网号=011时,二进制范围为 11000000 00001001 11001000 01100001 ~ 11000000 00001001 11001000 01111110 相应十进制范围为:192.9.200.97~192.9.200.126 4)当子网号=100时,二进制范围为 11000000 00001001 11001000 10000001 ~ 11000000 00001001 11001000 10011110 相应十进制范围为:192.9.200.129~192.9.200.158</code></pre></li></ul><p><strong>作业:</strong></p><ul><li><p> 现有一个公司需要创建内部的网络,该公司包括工 程技术部、市场部、财务部和办公室4个部门,每个部门约 有20~30台计算机。试问:</p><ul><li>(1)若要将几个部门从网络上进行分开。如果分配该公 司使用的地址为一个C类地址,网络地址为192.168. 161.0,如何划分网络可以将几个部门分开?</li><li>(2)确定各个部门的网络地址和子网掩码,并写出分配 给每个部门网络中的主机IP地址范围。</li></ul></li><li><p> 设某路由器建立了如下路由表:</p></li></ul><p><img src="https://data.singlelovely.cn/xsj/2018/6/29/420%E9%A2%98%E7%9B%AE%E8%B7%AF%E7%94%B1%E8%A1%A8.png" alt=" "><br>现共收到5个分组,其目的地址分别为:<br>1. 128.96.39.10<br>2. 128.96.40.12<br>3. 128.96.40.151<br>4. 192.4.153.17<br>5. 192.4.153.90<br>试分别计算其下一跳</p><pre><code>1. 128.96.39.10 m0 2. 128.96.40.12 R2 3. 128.96.40.151 R4 4. 192.4.153.17 R3 5. 192.4.153.90 R4 </code></pre><ul><li><p> 某单位分配到一个B类的IP地址,其Net-id为 129.250.0.0.该单位有4000台机器,分布在18个不同的网点,以后可能继续增大各网点的主机 数,试给出此网络的子网掩码。</p><ul><li>255.255.248.0</li></ul></li><li><p> 假如正在构建一个有22个子网的B类网络,但是 几个月后该网络将增加至80个子网。每个子网 要求支持至少300个主机,应该选择下面哪个子 网掩码( B )</p><pre><code>A 255.255.0.0 B 255.255.254.0 C 255.255.255.0 D 255.255.248.0 </code></pre></li><li><p> 152.112.150.82/20所在地址块的最小最大地址 分别是?</p><pre><code> 152.112.144.0 152.112.159.255 </code></pre></li><li><p> 有如下的4个/24地址块,试进行最大可能的聚合</p><pre><code>212.56.132.0/24 212.56.133.0/24 212.56.134.0/24 212.56.135.0/24 </code></pre></li><li><p> 已知地址块中的一个地址是140.120.84.24/20。试求这个地址块中最小地址和最大地址,地址掩码是什么?地址块中共有多少个地址?相当于多少 个C类地址</p></li></ul><h4 id="练习-4-29"><a class="header-anchor" href="#练习-4-29">☆</a>练习(4.29)</h4><ul><li> 一个自治系统有5个局域网,LAN2至LAN5上的 主机数分别为:91,150,3和15.该自治系统分 配到的IP地址块为30.138.118/23。试给出每一 个局域网的地址块(包括前缀)。</li></ul><p><img src="https://data.singlelovely.cn/xsj/2018/6/29/%E7%BB%83%E4%B9%A0%E9%A2%984291.png" alt=" "></p><p>1.位于不同子网中的主机之间相互通信,下面说法中正确的 是( C )</p><pre><code>A.路由器在转发IP数据报时,重新封装源IP地址和目的IP地址 B.路由器在转发IP数据报时,重新封装目的IP地址和目的硬件地址 C.路由器在转发IP数据报时,重新封装源硬件地址和目的硬件地址 D.路由器在转发IP数据报时,重新封装源IP地址和源硬件地址 </code></pre><p>2.关于IP提供的服务,下列说法中正确的是(A )</p><pre><code>A.IP提供不可靠的数据报传送服务,因此数据报传送不能受到保障B.IP提供不可靠的数据报传送服务,因此它可以随意丢弃数据报 C.IP提供可靠的数据报传送服务,因此数据报传送可以受到保障 D.IP提供可靠的数据报传送服务,因此它不能随意丢弃数据报 </code></pre><p>3.一个主机有两个IP地址,一个地址是192.168.11.25,另一 个地址可能是(C )</p><pre><code>A.192.168.11.0 B.192.168.11.26 C.192.168.13.25 D.192.168.11.24</code></pre><p>4.下列地址中,属于子网86.32.0.0/12的地址是(A )</p><pre><code> A.86.33.224.123 B.86.79.65.126 C.86.79.65.216 D.86.68.206.154 </code></pre><p>5.某单位分配了一个B类地址,计划将内部网络分成35个子网, 将来要增加16个子网,每个子网的主机数目接近800台,可 行的掩码方案是( B )</p><pre><code>A.255.255.248.0 B.255.255.252.0 C.255.255.254.0 D.255.255.255.0 </code></pre><p>6.如果子网掩码是255.255.192.0,那么下列主机必须通过路 由器才能与主机129.23.144.16通信的是(B)</p><pre><code>A.129.23.191.21 B.129.23.127.222 C.129.23.130.33 D.129.23.148.127 </code></pre><p>7.在子网192.168.4.0/30中,能接收目的地址为192.168.4.3 的IP分组的最大主机数是( C )</p><pre><code>A.0 B.1 C.2 D.4 本题为2011年全国考研题 </code></pre><p>8.某一个网络地址块192.168.75.0中有5台主机A、B、 C、D和E,A主机的IP地址为192.168.75.18,B主机的 IP地址为192.168.75.146,C主机的IP地址为 192.168.75.158,D主机的IP地址为192.168.75.161, E主机的IP地址为192.168.75.173,共同的子网掩码是 255.255.255.240。 请回答以下问题,并写出解答过程。<br> (1)5台主机A、B、C、D、E分属几个网段?哪些主机位于 同一网段?主机D的网络地址为多少?<br> (2)若要加入第6台主机F,使它能与主机A属于同一网 段,其IP地址范围是多少?<br> (3)若在网络中另加入一台主机,其IP地址设为 192.168.75.164,它的广播地址是多少?哪些主机能 够收到?<br><strong>解:</strong></p><pre><code>(1)A主机网络地址:192.168.75.16 B主机网络地址:192.168.75.144 C主机网络地址:192.168.75.144 D主机网络地址:192.168.75.160 E主机网络地址:192.168.75.160 5台主机A、B、C、D、E分属3个网段,B和C主机在一个网段,D和E主机在一个网段,A主机在一个网段。 D主机网络地址:192.168.75.160 (2)其IP地址范围是192.168.75.17~192.168.75.30之间,并且不能为192.168.75.18 (3)广播地址是:192.168.75.175 D和E可以收到</code></pre><p>9.设路由器R的不完整路由表如下表所示(其中下一跳给出的 是路由器的端口)。</p><p><img src="https://data.singlelovely.cn/xsj/2018/6/29/R%E7%9A%84%E4%B8%8D%E5%AE%8C%E6%95%B4%E8%B7%AF%E7%94%B1%E8%A1%A8.png" alt=" "><br>请回答下列问题:<br>(1) 表中序号1~4的目的网络属于哪类网络?它们是由什么网络划分出来的?<br>(2) 假如R1端口1和R2端口2的IP地址的host-id均为5(十进制),请给出它们的IP地址。<br>(3) 到目的主机H1~H6的下一跳是什么(如果是直接交付,则请写出转发端口)?</p><p>**解: **</p><p>(1) 表中序号1~4的目的网络属于B类网络,它们是由166.111.0.0划分的子网<br>(2)R1端口1和R2端口2的IP地址分别连接在网络166.111.32.0和166.111.16.0上,它们的IP地址分别为:166.111.32.5和166.111.16.5<br>(3)到目的主机H1~H6的下一跳分别是:</p><pre><code>H1:166.111.16.5 H2:166.111.32.5 H3:直接交付,R的端口2 H4:直接交付,R的端口1 H5:直接交付,R的端口3 H6:166.111.16.5 </code></pre> <div id="aplayer-eVgCpbGK" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1769367394" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第五章-传输层"><a class="header-anchor" href="#第五章-传输层">☆</a>第五章 传输层</h3><h4 id="概念复习-v8"><a class="header-anchor" href="#概念复习-v8">☆</a>概念复习</h4><ol><li>传输层的作用是什么?<br>运输层的作用:屏蔽网络层在可靠性等性能上的差异,向应用层提供可靠、无误(差错检测)的数据传输,提供应用进程间的逻辑通信</li></ol><ol start="2"><li><p>传输层的主要协议有?<br>(1) 用户数据报协议 UDP (User Datagram Protocol)<br>(2) 传输控制协议 TCP (Transmission Control</p><pre><code>UDP:一种无连接协议提供无连接服务。在传送数据之前不需要先建立连接。传送的数据单位协议是 UDP 报文或用户数据报。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。TCP:一种面向连接的协议提供面向连接的服务。传送的数据单位协议是 TCP 报文段 (segment)。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。</code></pre></li><li><p>端口号分为哪几类?<br>(1)熟知端口:数值一般为 0~1023<br>(2)登记端口号:数值为 1024~49151<br>(3)客户端口或短暂端口号,数值为 49152~65535</p></li><li><p>套接字的表示方法?<br>套接字 = 主机IP地址:端口号<br>套接字实际是一个通信端点</p></li></ol><h4 id="练习-v6"><a class="header-anchor" href="#练习-v6">☆</a>练习</h4><p>一个TCP首部的数据信息为:0x 0D 28 00 15 50 5F A9 06 00 00 00 00 70 02 40 00 C0 29 00 00.<br>请回答:<br>(1)源端口号和目的端口号是多少?<br>(2)发送的序列号是多少?确认号是多少?<br>(3)TCP首部的长度是多少?<br>(4)这是一个使用什么协议的TCP连接?该TCP连接的状态是什么?<br><strong>解:</strong></p><pre><code>(1)源端口号:3368,目的端口号:21(2)发送的序列号是50 5F A9 06,确认号:0(3)TCP首部的长度:28(4)这是一个使用FTP协议的TCP连接,该TCP连接的状态是建立连接状态</code></pre><p>1.UDP数据报头部不包括( )</p><pre><code>A.UDP源端口号B.UDP检验和C.UDP目的端口号D.UDP数据报头部长度</code></pre><p>2.在TCP/IP网络上,用来标识主机和在主机上的应用程序的是( )</p><pre><code>A.端口号 主机地址 B.主机地址 IP地址C.IP地址 主机地址D.IP 地址 端口号</code></pre><p>3.TCP报文中,确认号为1000表示________</p><h4 id="练习2"><a class="header-anchor" href="#练习2">☆</a>练习2</h4><ul><li> 主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问:<ul><li>第一个报文段携带了多少个字节的数据?</li><li>主机B收到第一个报文段后发回的确认中的确认号应当是多少?</li><li>如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?</li><li>如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?</li></ul></li></ul><p><strong>解:</strong></p><pre><code>(1)第一个报文段的数据序号是70到99,共30字节的数据。 (2)确认号应为100. (3)80字节。 (4)70 </code></pre><p>课本练习题:<br>5-39</p><h4 id="概念复习-v9"><a class="header-anchor" href="#概念复习-v9">☆</a>概念复习</h4><p>TCP如何解决对方发送零窗口通知而死锁的情况?</p><pre><code>TCP 为每一个连接设有一个持续计时器 (persistence timer) 。只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。 </code></pre><p>拥塞控制方法有哪些?</p><pre><code>四种( RFC 5681) :慢开始 (slow-start)拥塞避免 (congestion avoidance)快重传 (fast retransmit)快恢复 (fast recovery)</code></pre><p>UDP(特点、首部、校验)<br>TCP(特点、首部、连接管理、可靠传输机制、流量控制、拥塞方法)</p><h4 id="练习题-v2"><a class="header-anchor" href="#练习题-v2">☆</a>练习题</h4><p>1.主机甲和乙建立了TCP连接,甲始终以MSS=1kb大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发送一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是( A ) 。</p><pre><code> A. 10KB B. 12KB C. 14KB D. 15KB</code></pre><p>2.以下关于TCP报头格式的描述中,错误的是( D ) 。</p><pre><code> A.报头长度为20~60字节,其中固定部分为20字节 B.端口号字段依次表示源端口号和目的端口号 C.报头长度总是4的倍数个字节 D. TCP校验和伪首部中IP分组头的协议字段为17</code></pre><p>3.滑动窗口的作用是 ( A ) 。</p><pre><code>A.流量控制 B.拥塞控制 C.路由控制 D.差错控制</code></pre><p>4.A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ACK=201,数据部分有2个字节,那么 在B对该报文段的确认报文段中( C ) 。</p><pre><code> A.seq=202,ack=200 B.seq=201,ack=201 C.seq=201,ack=202 D.seq=202,ack=201</code></pre><p>5.TCP的通信双方,有一方发送了带有FIN标志的数据段后表示 ( B ) 。</p><pre><code> A.将断开通信双方的TCP连接 B.单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据 C.终止数据发送,双方都不能发送数据 D.连接被重新建立</code></pre><p>6.主机甲和乙之间建立了一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300字节和500字节的有效载荷,第一个段的序号为200,主机乙正确收到这两个段后,发送给主机甲的确认序号是 ( D ) 。</p><pre><code> A.500 B.700 C.800 D.1000</code></pre><p>7.主机甲和乙之间建立了一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300字节400字节和500字节的有效载荷,第3个段的序号为900,若主机乙仅正确收到第1和第3个段,则主机乙发送给主机甲的确认序号是 ( B ) 。</p><pre><code> A. 300 B. 500 C. 1200 D. 1400</code></pre><p>8.主机甲向主机乙发送一个(SYN=1,seq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是( C )</p><pre><code> A.(SYN=0,ACK=0,seq=11221,ack=11221) B.(SYN=1,ACK=1,seq=11220,ack=11220) C.(SYN=1,ACK=1,seq=11221,ack=11221) D.(SYN=0,ACK=0,seq=11220,ack=11220) 注:本题为2011年全国考研题</code></pre><ol start="9"><li><p>TCP报文段的长度必须适应于其下层IP数据报的长度,这样TCP报文段的数据部分最多为( C )个字节。</p><pre><code>A.65535 B.65515 C. 65495 D.不确定</code></pre></li><li><p>设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时网络发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口大小为( C )</p><pre><code>A.4 B.6 C.7 D.8提示:拥塞窗口变化为:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9……</code></pre></li><li><p>假设某应用程序每秒产生一个60B的数据块,每个数据块被封装在一个TCP报文中,然后在封装在一个IP数据报中,那么最后每个数据报所包含的应用数据所占的百分比是(注意:TCP和IP报文的首部没有附加字段)( C )</p><pre><code>A.20% B.40% C. 60% D.80%</code></pre></li><li><p>TCP协议中,发送方的窗口大小取决于( C )</p><pre><code>A.仅接收方允许的窗口 B.接收方允许的窗口和发送方允许的窗口 C.接收方允许的窗口和拥塞窗口 D.发送方允许的窗口和拥塞窗口</code></pre></li><li><p>TCP“三次握手”过程中,第二次握手时,发送的报文段中( D )标志位被置为1</p><pre><code>A.SYN B.ACK C. ACK和RST D.SYN和ACK</code></pre></li><li><p>在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了三个冗余ACK报文,如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文均得到确认后,拥塞窗口的大小是( D )KB</p><pre><code>A. 8 B. 16 C. 20 D.21</code></pre></li><li><p>主机A基于TCP向主机B连续发送3个TCP报文段,第1个报文段的序号是90,第2个报文段的序号是120,第3个报文段的序号是150.</p></li></ol><ul><li><p>(1)第1、2个报文段中有多少数据</p></li><li><p>(2)假设第2个报文段丢失而其他两个报文段到达B,那么在主机B发往主机A的确认报文中,确认号是多少?</p><pre><code>- (1)30、30- (2)120</code></pre></li></ul><p>16.主机H通过快速以太网连接Internet,IP地址为192.168.0.8,服务器S的IP地址为211.68.71.80。H与S使用TCP通信时,在H上捕获的其中5个IP分组如下表所示。</p><p><img src="https://data.singlelovely.cn/xsj/2018/7/1/%E7%BB%83%E4%B9%A016.png" alt=" "></p><p>(1)表1中的IP分组中,哪几个是由H发送的?哪几个完成了TCP连接建立过程?哪几个在通过快速以太网传输时进行了填充?<br>(2)根据表1中的IP分组,分析S已经收到的应用层数据字节数是多少?<br>(3)若表1中的某个IP分组在S发出时的前40个字节如表2所示,则该IP分组到达H时经过了多少个路由器?</p><p><img src="https://data.singlelovely.cn/xsj/2018/7/1/%E7%BB%83%E4%B9%A0162.png" alt=" "></p><p><strong>解:</strong></p><pre><code>(1)1、3、4由H发送的;1、2、3完成了TCP连接建立过程;3、5通过快速以太网传输时进行了填充.(2) 846b41d6H-846b41c5H=11H=17字节(3)S发出的IP分组的标识=6811H,所以对应5号分组,S发出时TTL=40H=64,5号分组的TTL=31H=49,64-49=15,所以该IP分组到达H时经过了15个路由器</code></pre> <div id="aplayer-KcYBhBEc" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1770780609" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第六章"><a class="header-anchor" href="#第六章">☆</a>第六章</h3><p>6.1 域名系统 DNS<br>6.2 文件传送协议<br>6.3 远程终端协议 TELNET<br>6.4 万维网 WWW<br>6.5 电子邮件<br>6.6 动态主机配置协议 DHCP<br>6.7 简单网络管理协议 SNMP<br>6.8 应用进程跨越网络的通信<br>6.9 P2P 应用</p><h4 id="概念复习-v10"><a class="header-anchor" href="#概念复习-v10">☆</a>概念复习</h4><ul><li>DNS的作用?<ul><li>为域名的命名定义一组规则</li><li>完成域名到IP地址的转换</li></ul></li></ul><ul><li><p>在服务器端不考虑负责均衡的情况下:</p><ul><li>一个域名一个IP地址</li><li>一个IP地址多个域名<br>原因:一台计算机提供多个服务,既作www服务器又作邮件服务器</li></ul></li><li><p>域名服务器的类型?</p><ul><li>根域名服务器</li><li>顶级域名服务器</li><li>权限域名服务器</li><li>本地域名服务器</li></ul></li><li><p>域名的解析过程有哪些?</p><ul><li>主机向本地域名服务器的查询一般都是采用递归查询。</li><li>本地域名服务器向根域名服务器的查询通常是采用迭代查询。</li></ul></li><li><p>FTP协议的两个连接分别是?</p><ul><li><p>FTP使用的两种TCP连接:控制连接、数据连接</p><pre><code>控制连接和数据连接的区别:控制连接连接的是客户端和服务器端的两个控制进程数据连接连接的是客户端和服务器端的两个数据传输进程控制连接传输的是FTP命令 端口号21数据连接传输的是文件 端口号22控制连接在整个会话期间一直打开——持久连接数据连接可能为每次传输文件重新打开一次,传输完该文件后关闭——非持久连接</code></pre></li></ul></li><li><p>HTTP 的主要特点</p><ul><li>HTTP 是面向事务的客户服务器协议。</li><li>HTTP 1.0 协议是无状态的 (stateless)。</li><li>HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务</li></ul></li><li><p>HTTP协议的两种连接方式是指?</p><ul><li>请求报文——从客户向服务器发送请求报文。</li><li>响应报文——从服务器到客户的回答。</li></ul></li></ul><ul><li><p>DHCP 协议的工作过程</p><pre><code>首先,DHCP客户端发送DHCP发现报文来发现DHCP服务器。DHCP服务器会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文。此报文中包含分配给客户端的IP地址和其他配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP请求报文,报文中包含请求的IP地址。收到DHCP请求报文后,提供该IP地址的DHCP服务器会向DHCP客户端发送一个DHCP确认报文,包含提供的IP地址和其他配置信息。DHCP客户端收到DHCP确认报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。</code></pre></li><li><p>DHCP 协议需要配置的项目<br>(1) IP 地址<br>(2) 子网掩码<br>(3) 默认路由器的 IP 地址<br>(4) 域名服务器的 IP 地址</p></li></ul><h4 id="练习-v7"><a class="header-anchor" href="#练习-v7">☆</a>练习</h4><ol><li><p>域名与( D )具有一一对应的关系</p><pre><code>A. IP地址B. MAC地址C. 主机D. 以上都不是</code></pre></li><li><p>下列说法错误的是( A ) 。</p><pre><code>A. Internet上提供客户访问的主机一定要有域名B. 同一域名在不同时间可能解析出不同的IP地址C. 多个域名可以指向同一个主机IP地址D. IP子网中主机可以由不同的域名服务器来维护其映射</code></pre></li></ol><p>3.FTP客户和服务器之间传递FTP命令时,使用的连接是 ( A ) 。</p><pre><code> A. 建立在TCP之上的控制连接 B. 建立在TCP之上的数据连接 C. 建立在UDP之上的控制连接 D. 建立在UDP之上的数据连接</code></pre><p>4.从协议分析的角度,WWW服务的第一步操作是浏览器对服务器的 ( C ) 。</p><pre><code> A. 请求地址解析 B. 传输连接建立 C. 请求域名解析 D. 会话连接建立</code></pre><p>5.万维网上每个页面都有一个唯一的地址,这些地址统称为 ( C ) 。</p><pre><code> A. IP地址 B. 域名地址 C. 统一资源定位符 D. WWW地址</code></pre><p>6.使用浏览器访问某大学 Web网站主页时,不可能使用到的协议是( D ) 。</p><pre><code> A. PPP B. ARP C. UDP D. SMTP</code></pre><p>7.HTTP是一个无状态协议,然而Web站点经常希望能够识别用户,这时需要用到( B ) 。</p><pre><code> A. Web缓存 B. Cookie C. 条件GET D. 持久链接</code></pre><p>8.WWW网页文件的编写语言及相应的支持协议分别为( C )</p><pre><code>A、HTML,HTPT B、HTTL,HTTP C、HTML,HTTP D、以上均不对</code></pre><p>9.在因特网域名中,com通常表示( A )</p><pre><code>A、商业组织 B、教育机构 C、政府部门 D、军事部门</code></pre> <div id="aplayer-nEmcZRAh" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="1770780619" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="true" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="第-9-章-无线网络和移动网络"><a class="header-anchor" href="#第-9-章-无线网络和移动网络">☆</a>第 9 章 无线网络和移动网络</h3><p>9.1 无线局域网 WLAN<br>9.2 无线个人区域网 WPAN<br>9.3 无线城域网 WMAN<br>9.4 蜂窝移动通信网<br>9.5 两种不同无线上网</p><h4 id="无线局域网的组成"><a class="header-anchor" href="#无线局域网的组成">☆</a>无线局域网的组成</h4><ul><li><p>无线局域网 WLAN (Wireless Local Area Network) 可分为两大类:</p><ul><li>有固定基础设施的 WLAN</li><li>无固定基础设施的 WLAN</li></ul></li><li><p>所谓“固定基础设施”是指预先建立起来的、能够覆盖一定地理范围的一批固定基站。</p></li><li><p>固定接入 (fixed access)——在作为网络用户期间,用户设置的地理位置保持不变。</p></li><li><p>移动接入 (mobility access)——用户设置能够以车辆速度移动时进行网络通信。当发生切换时,通信仍然是连续的。</p></li><li><p>便携接入 (portable access)——在受限的网络覆盖面积中,用户设备能够在以步行速度移动时进行网络通信,提供有限的切换能力。</p></li><li><p>游牧接入 (nomadic access)——用户设备的地理位置至少在进行网络通信时保持不变。如用户设备移动了位置,则再次进行通信时可能还要寻找最佳的基站。</p></li></ul><h4 id="csma-ca-算法归纳"><a class="header-anchor" href="#csma-ca-算法归纳">☆</a>CSMA/CA 算法归纳</h4><p>(1) 若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间 DIFS 后,就发送整个数据帧。<br>(2) 否则,站点执行 CSMA/CA 协议的退避算法。一旦检测到信道忙,就冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。<br>(3) 当退避计时器时间减少到零时(这时信道只可能是空闲的),站点就发送整个的帧并等待确认。<br>(4) 发送站若收到确认,就知道已发送的帧被目的站正确收到了。这时如果要发送第二帧,就要从上面的步骤 (2) 开始,执行 CSMA/CA 协议的退避算法,随机选定一段退避时间。若源站在规定时间内没有收到确认帧 ACK(由重传计时器控制这段时间),就必须重传此帧(再次使用 CSMA/CA 协议争用接入信道),直到收到确认为止,或者经过若干次的重传失败后放弃发送。</p><h4 id="zigbee技术的技术特点"><a class="header-anchor" href="#zigbee技术的技术特点">☆</a>ZigBee技术的技术特点</h4><p>数据传输速率低:10KB/秒~250KB /秒,专注于低传输<br>成本低:模块成本低,ZifBee协议免专利费<br>功耗低:低功耗待机模式下,两节5号电池可用6~24个月<br>时延短:通常时延都在15ms~30ms<br>安全: ZigBee采用AES-128加密算法<br>有效范围小:传输距离在1-100m的范围内,但可以继续增加<br>工作频段灵活:使用频段为2.4GHz、868MHz(欧洲)和915MHz(美国),均为免执照(免费)的频段<br>网络容量大:65535个节点</p><h4 id="无线个人区域网-wpan"><a class="header-anchor" href="#无线个人区域网-wpan">☆</a>无线个人区域网 WPAN</h4><p>无线个人区域网 WPAN (Wireless Personal Area Network) 就是在个人工作地方把属于个人使用的电子设备用无线技术连接起来自组网络,不需要使用接入点 AP。<br>整个网络的范围大约在 10 m左右。<br>WPAN可以是一个人使用,也可以是若干人共同使用。<br>无线个人区域网 WPAN 和个人区域网 PAN (Personal Area Network) 并不完全等同,因为 PAN 不一定都是使用无线连接的。</p><ol><li><p>蓝牙系统 (Bluetooth)</p><pre><code>最早使用的 WPAN 是 1994 年爱立信公司推出的蓝牙系统,其标准是 IEEE 802.15.1 。蓝牙的数据率为 720 kbit/s,通信范围在 10 米左右。蓝牙使用 TDM 方式和扩频跳频 FHSS 技术组成不用基站的皮可网 (piconet)。</code></pre></li><li><p>低速 WPAN</p><pre><code>低速 WPAN 主要用于工业监控组网、办公自动化与控制等领域,其速率是 2 ~ 250 kbit/s。低速 WPAN 的标准是 IEEE 802.15.4。最近新修订的标准是 IEEE 802.15.4-2006。低速 WPAN 中最重要的就是 ZigBee。ZigBee 技术主要用于各种电子设备(固定的、便携的或移动的)之间的无线通信,其主要特点是通信距离短(10 ~ 80 m),传输数据速率低,并且成本低廉</code></pre></li><li><p>高速 WPAN</p><pre><code>高速 WPAN 用于在便携式多媒体装置之间传送数据,支持11 ~ 55 Mbit/s 的数据率,标准是 802.15.3。IEEE 802.15.3a 工作组还提出了更高数据率的物理层标准的超高速 WPAN,它使用超宽带 UWB 技术。UWB 技术工作在 3.1 ~ 10.6 GHz 微波频段,有非常高的信道带宽。超宽带信号的带宽应超过信号中心频率的 25% 以上,或信号的绝对带宽超过 500 MHz。超宽带技术使用了瞬间高速脉冲,可支持 100 ~ 400 Mbit/s 的数据率,可用于小范围内高速传送图像或 DVD 质量的多媒体视频文件。 </code></pre></li></ol><h4 id="蜂窝无线通信技术简介"><a class="header-anchor" href="#蜂窝无线通信技术简介">☆</a>蜂窝无线通信技术简介</h4><pre><code>蜂窝移动网络的发展非常迅速,到目前为止,世界上先后已有超过了 30 种不同的标准。第一代(1G)蜂窝无线通信是为话音通信设计的模拟 FDM 系统。第二代(2G)蜂窝无线通信提供低速数字通信(短信服务),其代表性体制就是最流行的 GSM 系统。2.5G 技术是从 2G 向第三代(3G)过渡的衔接性技术,如 GPRS 和 EDGE 等。第三代(3G) 移动通信和计算机网络的关系非常密切,它使用 IP 的体系结构和混合的交换机制(电路交换和分组交换),能够提供移动宽带多媒体业务(话音、数据、视频等,可收发电子邮件,浏览网页,进行视频会议等),如 CDMA2000,WCDMA 和 TD-SCDMA。从 3G 开始以后的各代蜂窝移动通信都是以传输数据业务为主的通信系统,而且必须兼容 2G 的功能(即能够通电话和发送短信),这就是所谓的向后兼容。 第四代(4G)正式名称是 IMT-Advanced (International Mobile Telecommunications-Advanced),意思是高级国际移动通信。4G的一个重要技术指标就是要实现更高的数据率。目标峰值数据率是:固定的和低速移动通信时应达到1 Gbit/s,在高速移动通信时(如在火车、汽车上)应达到100 Mbit/s。</code></pre><ul><li><p>4G 现有两个国际标准:</p><pre><code>LTE (Long-Term Evolution): 又分为时分双工 TD-LTE 和 频分双工 FDD-LTE 两种。把带宽增加到 20 MHz,采用了高阶调制 64QAM 和 MIMO 技术。LTE-A (LTE-Advanced):LTE 的升级版,俗称为 3.9G。带宽高达 100 MHz。</code></pre></li></ul><h4 id="练习-v8"><a class="header-anchor" href="#练习-v8">☆</a>练习</h4><p>1.IEEE802.11帧分为3种类型:控制帧、管理帧 和 数据帧<br>2.IEEE 802.11标准采用. CSMA/CA 机制,可在所有站支持竞争型异步业务,从而是信号冲突概率减少到最小。<br>3.无线局域网有两种类型的扫描:主动扫描 和 被动扫描</p><p>4、以下不属于WPAN的是( D )</p><pre><code>A、Bluetooth B、ZigBee C、UWB D、WiMAX</code></pre><p>5、以下不属于第三代移动通信采用的标准体系的是( D )</p><pre><code>A、CDMA2000B、WCDMA C、 TD-SCDMAD、GPRS</code></pre><center> <font color="yellowgreen" size="20">—— 全文完 ——</font> </center> ]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="网络" scheme="http://www.singlelovely.cn/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="学习" scheme="http://www.singlelovely.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="网络" scheme="http://www.singlelovely.cn/tags/%E7%BD%91%E7%BB%9C/"/>
</entry>
<entry>
<title>Python基本数据类型</title>
<link href="http://www.singlelovely.cn/post/cd12463.html"/>
<id>http://www.singlelovely.cn/post/cd12463.html</id>
<published>2018-06-11T09:24:10.000Z</published>
<updated>2021-06-01T06:09:14.259Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-MpfpFmVp" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="376049" data-server="xiami" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="false" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h3 id="数字类型及操作"><a class="header-anchor" href="#数字类型及操作">☆</a>数字类型及操作</h3><h4 id="整数类型"><a class="header-anchor" href="#整数类型">☆</a>整数类型</h4><ul><li>可正可负,无范围限制<br>pow(x,y) 函数:计算x的y次方</li><li>四种进制表示<ul><li>十进制:直接写数字</li><li>二进制:以0b或0B开头</li><li>八进制:以0o或0O开头</li><li>十六进制:以0x或0X开头</li></ul></li></ul><h4 id="浮点数类型"><a class="header-anchor" href="#浮点数类型">☆</a>浮点数类型</h4><p><strong>与数学中的实数一致</strong></p><ul><li><p>带有小数点的数字</p></li><li><p>精度存在限制,常规可以忽略</p></li><li><p>取值范围数量级约-10<sup>308</sup> 至 10<sup>308</sup>,精度数量级10<sup>-16</sup></p></li><li><p>浮点数运算存在不确定尾数,不是bug</p><ul><li>二进制表示问题,可以无限接近,但不完全相同<br>round(x,d):对x四舍五入,d是小数截取位数</li></ul></li><li><p>浮点数间运算及比较用round()函数辅助</p></li><li><p>采用科学计数法表示</p><ul><li>使用字母E或者e作为幂的符号,以10为基数,格式为:<a>e<b> 表示a<em>10</em>b</li></ul></li></ul><h4 id="复数类型"><a class="header-anchor" href="#复数类型">☆</a>复数类型</h4><p><strong>与数学中的复数一致</strong><br>z = 1.23e - 4 + 5.6e + 89j<br>实部:z.real<br>虚部:z.imag</p><p>空间变换时常用</p><h4 id="数字运算操作符"><a class="header-anchor" href="#数字运算操作符">☆</a>数字运算操作符</h4><p><img src="https://data.singlelovely.cn/xsj/2018/6/13/python%E6%93%8D%E4%BD%9C%E7%AC%A6.png" alt="01"></p><p><img src="https://data.singlelovely.cn/xsj/2018/6/13/python%E6%93%8D%E4%BD%9C%E7%AC%A62.png" alt="02"></p><p><img src="https://data.singlelovely.cn/xsj/2018/6/13/python%E6%93%8D%E4%BD%9C%E7%AC%A63.png" alt="03"></p><ul><li>数字类型的关系<br><strong>类型间可以进行混合运算,生成的结果为‘最宽’类型</strong></li><li>三种类型存在一种逐渐扩展变宽的关系<ul><li>整数 -> 浮点数 -> 复数</li></ul></li></ul><h4 id="数值运算函数"><a class="header-anchor" href="#数值运算函数">☆</a>数值运算函数</h4><table><thead><tr><th>函数及使用</th><th>描述</th></tr></thead><tbody><tr><td>abs(x)</td><td>绝对值,x的绝对值 abs(-10.01) 结果为 10.01</td></tr><tr><td>divmod(x,y)</td><td>商余,(x//y, x%y),同时输出商和余数 divmod(10, 3) 结果为 (3, 1)</td></tr><tr><td>pow(x, y[, z])</td><td>幂余,(x**y)%z,[…]表示参数z可省略 pow(3, pow(3, 99), 10000) 结果为 4587</td></tr><tr><td>round(x[, d])</td><td>四舍五入,d是保留小数位数,默认值为0 round(-10.123, 2) 结果为 -10.12</td></tr><tr><td>max(x1,x2, … ,xn)</td><td>最大值,返回x1,x2, … ,xn中的最大值,n不限 max(1, 9, 5, 4 3) 结果为 9</td></tr><tr><td>min(x1,x2, … ,xn)</td><td>最小值,返回x1,x2, … ,xn中的最小值,n不限 min(1, 9, 5, 4 3) 结果为 1</td></tr><tr><td>int(x)</td><td>将x变成整数,舍弃小数部分 int(123.45) 结果为123; int(“123”) 结果为123</td></tr><tr><td>float(x)</td><td>将x变成浮点数,增加小数部分 float(12) 结果为12.0; float(“1.23”) 结果为1.23</td></tr><tr><td>complex(x)</td><td>将x变成复数,增加虚数部分 complex(4) 结果为 4 + 0j</td></tr></tbody></table>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="python" scheme="http://www.singlelovely.cn/categories/python/"/>
<category term="python" scheme="http://www.singlelovely.cn/tags/python/"/>
</entry>
<entry>
<title>深入理解python语言(绘制蟒蛇)</title>
<link href="http://www.singlelovely.cn/post/fa0e7c88.html"/>
<id>http://www.singlelovely.cn/post/fa0e7c88.html</id>
<published>2018-06-10T03:53:22.000Z</published>
<updated>2020-09-21T13:41:07.552Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script> <div id="aplayer-panklfOZ" class="aplayer aplayer-tag-marker meting-tag-marker" data-id="108428" data-server="netease" data-type="song" data-mode="circulation" data-autoplay="false" data-mutex="false" data-listmaxheight="340px" data-preload="none" data-theme="#ad7a86"></div><h2 id="turtle库的使用"><a class="header-anchor" href="#turtle库的使用">☆</a>turtle库的使用</h2><ul><li><p>turtle绘图体系的python实现</p><ul><li>标准库</li><li>入门图形绘制函数</li></ul></li><li><p>绘制窗体</p><ul><li>单位:像素</li><li>启动窗体的位置大小: turtle.setup(weight,height,startx,starty)</li></ul></li><li><p>空间坐标体系</p><ul><li>坐标位置:中心为(0,0)左x轴,右y轴</li><li>直线:turtle.goto(x,y)</li><li>海龟坐标:<ul><li>无论朝向哪个角度都为前进方向,左侧为左侧方向,右侧为右侧方向</li><li>turtle.fd(d) #向海龟的正前方向运行</li><li>turtle.bk(d) #向海龟的正后方向运行</li><li>turtle.circle(r,angle) #以海龟当前位置左侧的一个点为圆心曲线运行<ul><li>turtle.circle(40,80) #以40像素为半径绘制80°的弧线</li></ul></li></ul></li></ul></li><li><p>角度坐标体系</p><ul><li>x轴正方向为0°,y轴正方向为90°</li><li>turtle.seth(angle) 改变当前海龟的行进角度,不绘制信息</li><li>当前海龟向左或向右变向<ul><li>turtle.left(angle)</li><li>turtle.right(angle)<ul><li>angel 旋转角度</li></ul></li></ul></li></ul></li><li><p>RGB色彩体系</p><ul><li>turtle.colormode(mode)<ul><li>1.0:RGB小数值模式</li><li>255:RGB整数值模式</li></ul></li></ul></li><li><p>方向控制函数</p><ul><li>turtle.seth(45)</li><li>turtle.left(angle)</li><li>turtle.right(angle)</li></ul></li><li><p>画笔控制函数</p><ul><li>画笔操作后一直有效,一般成对出现<ul><li>turtle.penup() 简写 turtle.pu()<ul><li>画笔抬起,海龟飞行</li></ul></li><li>turtle.pendown() 简写 turtle.pd()<ul><li>落下画笔,海龟爬行</li></ul></li></ul></li><li>turtle.pencolor(color)<ul><li>颜色字符串:turtle.pencolor(“purple”)</li><li>RGB小数值:turtle.pencolor(0.63,0.13,0.94)</li><li>RGB元组值:turtle.pencolor((0.63,0.13,0.94))</li></ul></li><li>turtle.pensize()<ul><li>画笔宽度</li></ul></li></ul></li><li><p>运动控制函数</p><ul><li><p>turtle.forward(0) 简写 turtle.fd(d)</p><ul><li>向前行进,海龟走直线</li><li>d 行进距离,可以为负数</li></ul></li><li><p>turtle.circle(r,extent=None)</p><ul><li>根据半径r绘制extent角度的弧形</li><li>r默认圆心在海龟左侧r距离的位置</li><li>extent绘制弧度,默认为360°</li></ul></li></ul></li><li><p>import 用法</p><ul><li><p>import<库名></p><ul><li><库名>.<函数名>(<函数参数>)</li></ul></li><li><p>from<库名>import<函数名></p></li><li><p>from<库名>import *</p></li><li><p><函数名>(<函数参数>)</p></li><li><p>import<库名>as<库别名></p></li><li><p><库别名>.<函数名></p></li></ul></li><li><p>循环语句</p><ul><li>for <变量> in range(<函数名>)<ul><li><被执行的循环语句></li></ul></li></ul><ul><li><变量>表示每次循环的计数,0到<次数>-1</li></ul><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">5</span>)</span><br><span class="line">print(<span class="string">"hello:"</span>,i)</span><br></pre></td></tr></table></figure><ul><li>range()函数<ul><li>产生循环计数序列</li></ul><ul><li>range(N)<ul><li>产生0到N-1的整数序列,共N个</li></ul></li><li>range(M,N)<ul><li>产生 M 到 N-1 的整数序列,共 N-M个</li></ul></li></ul></li></ul></li></ul><h2 id="附"><a class="header-anchor" href="#附">☆</a>附</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><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">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> turtle</span><br><span class="line">turtle.setup(<span class="number">650</span>,<span class="number">350</span>,<span class="number">200</span>,<span class="number">200</span>)</span><br><span class="line">turtle.penup()</span><br><span class="line">turtle.fd(<span class="number">-250</span>)</span><br><span class="line">turtle.pendown()</span><br><span class="line">turtle.pensize(<span class="number">25</span>)</span><br><span class="line">turtle.pencolor(<span class="string">"green"</span>)</span><br><span class="line">turtle.seth(<span class="number">-40</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">4</span>):</span><br><span class="line"> turtle.circle(<span class="number">40</span>,<span class="number">80</span>)</span><br><span class="line"> turtle.circle(<span class="number">-40</span>,<span class="number">80</span>)</span><br><span class="line">turtle.circle(<span class="number">40</span>,<span class="number">80</span>/<span class="number">2</span>)</span><br><span class="line">turtle.fd(<span class="number">40</span>)</span><br><span class="line">turtle.circle(<span class="number">16</span>,<span class="number">180</span>)</span><br><span class="line">turtle.fd(<span class="number">40</span> * <span class="number">2</span>/<span class="number">3</span>)</span><br><span class="line">turtle.done()</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
<category term="python" scheme="http://www.singlelovely.cn/categories/python/"/>