-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
1035 lines (856 loc) · 127 KB
/
atom.xml
File metadata and controls
1035 lines (856 loc) · 127 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Mi Tang</title>
<subtitle>匠子生活</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://lpbobo.com/"/>
<updated>2016-06-18T14:47:59.000Z</updated>
<id>http://lpbobo.com/</id>
<author>
<name>fish·nut</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>论语(11)</title>
<link href="http://lpbobo.com/2016/06/18/%E8%AE%BA%E8%AF%AD%EF%BC%8811%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/18/论语(11)/</id>
<published>2016-06-18T14:36:00.000Z</published>
<updated>2016-06-18T14:47:59.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”"><a href="#2-21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”" class="headerlink" title="2.21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”"></a><strong>2.21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>义:孔子表达个人是否为官并不重要,重要的在于个人以孝来齐家,流风所及而化育万物,使全国上下形成孝的风气。</li>
</ul>
<blockquote>
<h4 id="2-22子曰:“人而无信,不知其可也。大车无輗,小车无軏,其何以行之哉?”"><a href="#2-22子曰:“人而无信,不知其可也。大车无輗,小车无軏,其何以行之哉?”" class="headerlink" title="2.22子曰:“人而无信,不知其可也。大车无輗,小车无軏,其何以行之哉?”"></a><strong>2.22子曰:“人而无信,不知其可也。大车无輗,小车无軏,其何以行之哉?”</strong></h4></blockquote>
<ul>
<li>音:无輗(ní),无軏(yuè)</li>
<li>义:孔子教育学生要忠信笃敬</li>
</ul>
<blockquote>
<h4 id="2-23子张问:“十世可知也?”子曰:“殷因於夏礼,所损益,可知也;周因於殷礼,所损益,可知也。其或继周者,虽百世,可知也。””"><a href="#2-23子张问:“十世可知也?”子曰:“殷因於夏礼,所损益,可知也;周因於殷礼,所损益,可知也。其或继周者,虽百世,可知也。””" class="headerlink" title="2.23子张问:“十世可知也?”子曰:“殷因於夏礼,所损益,可知也;周因於殷礼,所损益,可知也。其或继周者,虽百世,可知也。””"></a><strong>2.23子张问:“十世可知也?”子曰:“殷因於夏礼,所损益,可知也;周因於殷礼,所损益,可知也。其或继周者,虽百世,可知也。””</strong></h4></blockquote>
<ul>
<li>义:古代30年为一世,孔子历来不反对变革,但是一切变革都是在既有的基础上进行的,是有迹可寻的,孔子在这里还提出了“损益”的概念,即增减。</li>
</ul>
<blockquote>
<h4 id="2-24子曰:“非其鬼而祭之,谄也。见义不为,无勇也。”"><a href="#2-24子曰:“非其鬼而祭之,谄也。见义不为,无勇也。”" class="headerlink" title="2.24子曰:“非其鬼而祭之,谄也。见义不为,无勇也。”"></a><strong>2.24子曰:“非其鬼而祭之,谄也。见义不为,无勇也。”</strong></h4></blockquote>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”"><a href="#2-21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”" class="headerlink" title="2.21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”"></a><strong>2.21或谓孔子曰:“子奚不为政?”子曰:“《书》云:‘孝乎惟孝,友于兄弟,施于有政。’是亦为政,奚其为为政?”</strong>
</summary>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(10)</title>
<link href="http://lpbobo.com/2016/06/16/%E8%AE%BA%E8%AF%AD%EF%BC%8810%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/16/论语(10)/</id>
<published>2016-06-16T14:13:00.000Z</published>
<updated>2016-06-16T14:21:24.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-18-子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”"><a href="#2-18-子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”" class="headerlink" title="2.18 子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”"></a><strong>2.18 子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>义:子张请教求得官职的方法。孔子说:“多听,把不明白的事情放到一边,谨慎的说出那些真正懂得的,就能少犯错误;多观察,不明白的保留在心中,谨慎的实行真正懂得的,就能减少懊悔……”</li>
</ul>
<blockquote>
<h4 id="2-19-哀公问曰:“何为则民服?”孔子对曰:“举直错诸枉,则民服;举枉错诸直,则民不服。”"><a href="#2-19-哀公问曰:“何为则民服?”孔子对曰:“举直错诸枉,则民服;举枉错诸直,则民不服。”" class="headerlink" title="2.19 哀公问曰:“何为则民服?”孔子对曰:“举直错诸枉,则民服;举枉错诸直,则民不服。”"></a><strong>2.19 哀公问曰:“何为则民服?”孔子对曰:“举直错诸枉,则民服;举枉错诸直,则民不服。”</strong></h4></blockquote>
<ul>
<li>义:直,正直的人;枉,邪曲</li>
</ul>
<blockquote>
<h4 id="2-20-季康子问:“使民敬、忠以劝,如之何?”子曰:“临之以庄,则敬;孝慈,则忠;举善而教不能,则劝。”"><a href="#2-20-季康子问:“使民敬、忠以劝,如之何?”子曰:“临之以庄,则敬;孝慈,则忠;举善而教不能,则劝。”" class="headerlink" title="2.20 季康子问:“使民敬、忠以劝,如之何?”子曰:“临之以庄,则敬;孝慈,则忠;举善而教不能,则劝。”"></a><strong>2.20 季康子问:“使民敬、忠以劝,如之何?”子曰:“临之以庄,则敬;孝慈,则忠;举善而教不能,则劝。”</strong></h4></blockquote>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-18-子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”"><a href="#2-18-子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”" class="headerlink" title="2.18 子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”"></a><strong>2.18 子张学干禄。子曰:“多闻阙疑,慎言其余,则寡尤。多见阙殆,慎行其余,则寡悔。言寡尤,行寡悔,禄在其中矣。”</strong>
</summary>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(9)</title>
<link href="http://lpbobo.com/2016/06/15/%E8%AE%BA%E8%AF%AD%EF%BC%889%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/15/论语(9)/</id>
<published>2016-06-15T14:33:00.000Z</published>
<updated>2016-06-15T14:38:30.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-15-子曰:“学而不思则罔,思而不学则殆”"><a href="#2-15-子曰:“学而不思则罔,思而不学则殆”" class="headerlink" title="2.15 子曰:“学而不思则罔,思而不学则殆”"></a><strong>2.15 子曰:“学而不思则罔,思而不学则殆”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>义:学习而不思考就会迷惘无所得,思考而不学习就会疑惑不解</li>
</ul>
<blockquote>
<h4 id="2-16-子曰:“攻乎异端,斯害也已”"><a href="#2-16-子曰:“攻乎异端,斯害也已”" class="headerlink" title="2.16 子曰:“攻乎异端,斯害也已”"></a><strong>2.16 子曰:“攻乎异端,斯害也已”</strong></h4></blockquote>
<ul>
<li>义:过和不及都是祸害</li>
</ul>
<blockquote>
<h4 id="2-17-子曰:“由!诲女,知之乎?知之为知之,不知为不知,是知也”"><a href="#2-17-子曰:“由!诲女,知之乎?知之为知之,不知为不知,是知也”" class="headerlink" title="2.17 子曰:“由!诲女,知之乎?知之为知之,不知为不知,是知也”"></a><strong>2.17 子曰:“由!诲女,知之乎?知之为知之,不知为不知,是知也”</strong></h4></blockquote>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-15-子曰:“学而不思则罔,思而不学则殆”"><a href="#2-15-子曰:“学而不思则罔,思而不学则殆”" class="headerlink" title="2.15 子曰:“学而不思则罔,思而不学则殆”"></a><strong>2.15 子曰:“学而不思则罔,思而不学则殆”</strong>
</summary>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(8)</title>
<link href="http://lpbobo.com/2016/06/14/%E8%AE%BA%E8%AF%AD%EF%BC%888%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/14/论语(8)/</id>
<published>2016-06-14T12:57:09.000Z</published>
<updated>2016-06-14T13:06:49.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="子曰:“君子不器”"><a href="#子曰:“君子不器”" class="headerlink" title="子曰:“君子不器”"></a><strong>子曰:“君子不器”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>义:孔子认为君子应该为通才,博学多能</li>
</ul>
<blockquote>
<h4 id="子贡问君子。子曰:“先行其言而后从之。”"><a href="#子贡问君子。子曰:“先行其言而后从之。”" class="headerlink" title="子贡问君子。子曰:“先行其言而后从之。”"></a><strong>子贡问君子。子曰:“先行其言而后从之。”</strong></h4></blockquote>
<ul>
<li>义:对于要说的话,先做到了,再说出来。</li>
</ul>
<blockquote>
<h4 id="子曰:“君子周而不比,小人比而不周。”"><a href="#子曰:“君子周而不比,小人比而不周。”" class="headerlink" title="子曰:“君子周而不比,小人比而不周。”"></a><strong>子曰:“君子周而不比,小人比而不周。”</strong></h4></blockquote>
<ul>
<li>义:周,普遍也;笔,偏党也</li>
</ul>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="子曰:“君子不器”"><a href="#子曰:“君子不器”" class="headerlink" title="子曰:“君子不器”"></a><strong>子曰:“君子不器”</strong>
</summary>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(7)</title>
<link href="http://lpbobo.com/2016/06/13/%E8%AE%BA%E8%AF%AD%EF%BC%887%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/13/论语(7)/</id>
<published>2016-06-13T14:27:00.000Z</published>
<updated>2016-06-13T14:49:01.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-9-子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”"><a href="#2-9-子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”" class="headerlink" title="2.9 子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”"></a><strong>2.9 子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>音:“廋”,sōu,隐藏</li>
<li>义:看一个人的所作所为,考察他初始的动机,了解他心安于什么事情。那么,这个人的内心怎能掩盖的了呢?</li>
</ul>
<blockquote>
<h4 id="2-10-子曰:“吾与回言终日,不违,如愚。退而省其私,亦足以发,回也不愚。”"><a href="#2-10-子曰:“吾与回言终日,不违,如愚。退而省其私,亦足以发,回也不愚。”" class="headerlink" title="2.10 子曰:“吾与回言终日,不违,如愚。退而省其私,亦足以发,回也不愚。”"></a><strong>2.10 子曰:“吾与回言终日,不违,如愚。退而省其私,亦足以发,回也不愚。”</strong></h4></blockquote>
<ul>
<li>义:“我整天对颜回讲学,他从不提出什么反对意见,像个蠢人。等他退下,我观察他私下里同别人讨论时,却能发挥我所讲的,可见颜回他并不愚笨呀”</li>
<li>颜回,大智若愚</li>
</ul>
<blockquote>
<h4 id="11-子曰:“温故而知新,可以为师矣。”"><a href="#11-子曰:“温故而知新,可以为师矣。”" class="headerlink" title="11.子曰:“温故而知新,可以为师矣。”"></a><strong>11.子曰:“温故而知新,可以为师矣。”</strong></h4></blockquote>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="2-9-子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”"><a href="#2-9-子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”" class="headerlink" title="2.9 子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”"></a><strong>2.9 子曰:“视其所以,观其所由,察其所安。人焉廋哉?人焉廋哉?”</strong>
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(6)</title>
<link href="http://lpbobo.com/2016/06/12/%E8%AE%BA%E8%AF%AD%EF%BC%886%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/12/论语(6)/</id>
<published>2016-06-12T13:01:00.000Z</published>
<updated>2016-06-12T13:30:45.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<p><strong>2.5 孟懿子问孝。子曰:“无违。”樊迟御,子告之曰:“孟孙问孝于我,我对曰:‘无违。’”<a id="more"></a>樊迟曰:“何谓也?”子曰:“生,事之以礼;死,葬之以礼,祭之以礼。”</strong></p>
</blockquote>
<p>*义:无违,不要违背礼节</p>
<blockquote>
<p><strong>2.6 孟武伯问孝。子曰:“父母唯其疾之忧。”</strong></p>
</blockquote>
<p>*义:孟武伯是上文孟懿子的儿子</p>
<blockquote>
<p><strong>2.7 子游问孝。子曰:“今之孝者,是谓能养。至于犬马,皆能有养;不敬,何以别乎?”</strong></p>
</blockquote>
<p>*义:</p>
<blockquote>
<p><strong>2.8 子夏问孝。子曰:“色难。有事,弟子服其劳;有酒食,先生馔,曾是以为孝乎?”</strong></p>
</blockquote>
<p>*《礼记·祭义》:孝子之有深爱着必有和气,有和气者必有悦色,有悦色者必有婉容。</p>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<p><strong>2.5 孟懿子问孝。子曰:“无违。”樊迟御,子告之曰:“孟孙问孝于我,我对曰:‘无违。’”
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(5)</title>
<link href="http://lpbobo.com/2016/06/11/%E8%AE%BA%E8%AF%AD%EF%BC%885%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/11/论语(5)/</id>
<published>2016-06-11T04:35:00.000Z</published>
<updated>2016-06-11T05:10:48.000Z</updated>
<content type="html"><![CDATA[<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="子曰:“为政以德,譬如北辰,居其所而众星共之”"><a href="#子曰:“为政以德,譬如北辰,居其所而众星共之”" class="headerlink" title="子曰:“为政以德,譬如北辰,居其所而众星共之”"></a><strong>子曰:“为政以德,譬如北辰,居其所而众星共之”</strong><a id="more"></a></h4></blockquote>
<ul>
<li>音:“共”通“拱”</li>
</ul>
<blockquote>
<h4 id="子曰:“《诗》三百,一言以蔽之,曰:‘思无邪’。”"><a href="#子曰:“《诗》三百,一言以蔽之,曰:‘思无邪’。”" class="headerlink" title="子曰:“《诗》三百,一言以蔽之,曰:‘思无邪’。”"></a><strong>子曰:“《诗》三百,一言以蔽之,曰:‘思无邪’。”</strong></h4></blockquote>
<ul>
<li>义:敝,概括;思无邪,思想纯正。</li>
</ul>
<blockquote>
<h4 id="子曰:“道之以政,齐之以刑,民勉而无耻;道之以德,齐之以礼,有耻且格。”"><a href="#子曰:“道之以政,齐之以刑,民勉而无耻;道之以德,齐之以礼,有耻且格。”" class="headerlink" title="子曰:“道之以政,齐之以刑,民勉而无耻;道之以德,齐之以礼,有耻且格。”"></a><strong>子曰:“道之以政,齐之以刑,民勉而无耻;道之以德,齐之以礼,有耻且格。”</strong></h4></blockquote>
<ul>
<li>陆陇《松阳讲义》:操术不同,功效各异。路头一差,而风俗由之而殊,气运由之而变,不可不辨也。</li>
<li>义:法制以惩罚性手段使人心存畏忌,免于惩罚;而礼治德政却使人心悦诚服,顺应了人的廉耻之心,可以教会打字纠正自己的错误。</li>
</ul>
<blockquote>
<h4 id="子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。”"><a href="#子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。”" class="headerlink" title="子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。”"></a><strong>子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。”</strong></h4></blockquote>
<ul>
<li>音:“有”通“又”</li>
<li>义:立:立身处世;耳顺:对于外界的一切相反相异、五花八门的言论,能分辨真伪是非,并听之泰然;可以随心所欲的说话,不会超越规矩。</li>
</ul>
]]></content>
<summary type="html">
<h2 id="为政篇第二"><a href="#为政篇第二" class="headerlink" title="为政篇第二"></a>为政篇第二</h2><blockquote>
<h4 id="子曰:“为政以德,譬如北辰,居其所而众星共之”"><a href="#子曰:“为政以德,譬如北辰,居其所而众星共之”" class="headerlink" title="子曰:“为政以德,譬如北辰,居其所而众星共之”"></a><strong>子曰:“为政以德,譬如北辰,居其所而众星共之”</strong>
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(4)</title>
<link href="http://lpbobo.com/2016/06/10/%E8%AE%BA%E8%AF%AD%EF%BC%884%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/10/论语(4)/</id>
<published>2016-06-10T02:01:00.000Z</published>
<updated>2016-08-04T07:20:53.000Z</updated>
<content type="html"><![CDATA[<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<h3 id="1-10-子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与-”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”"><a href="#1-10-子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与-”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”" class="headerlink" title="1.10 子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与?”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”"></a><strong>1.10 子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与?”子贡曰:“夫子温、良、恭、俭、让<a id="more"></a>以得之。夫子之求之也,其诸异乎人之求之与?”</strong></h3></blockquote>
<ul>
<li>音:“抑”:还是,反语词;其诸:大概,不太确定的语气助词</li>
<li>义:温和、善良、恭敬、节俭、谦让</li>
<li>感:与人相处不强求,好好做到这些</li>
</ul>
<blockquote>
<h3 id="1-11-子曰:“父在,观其志。父没,观其行。三年无改于父之道,可谓孝矣。”"><a href="#1-11-子曰:“父在,观其志。父没,观其行。三年无改于父之道,可谓孝矣。”" class="headerlink" title="1.11 子曰:“父在,观其志。父没,观其行。三年无改于父之道,可谓孝矣。”"></a><strong>1.11 子曰:“父在,观其志。父没,观其行。三年无改于父之道,可谓孝矣。”</strong></h3></blockquote>
<ul>
<li>感:对父母的观点,即使不正确,也要尊重。虽然现在做子女的有很多辩证的观点,但父母作为最亲的人,初衷是善意的,观点往往是经验和立场的不同长期总结来的,无需过分辩驳,给予父母尊重是每个子女最基本的孝心。</li>
</ul>
<blockquote>
<h3 id="1-12-有子曰:“礼之用,和为贵。先王之道,斯为美。小大由之,有所不行;知和而和,不以礼节之,亦不可行也。”"><a href="#1-12-有子曰:“礼之用,和为贵。先王之道,斯为美。小大由之,有所不行;知和而和,不以礼节之,亦不可行也。”" class="headerlink" title="1.12 有子曰:“礼之用,和为贵。先王之道,斯为美。小大由之,有所不行;知和而和,不以礼节之,亦不可行也。”"></a><strong>1.12 有子曰:“礼之用,和为贵。先王之道,斯为美。小大由之,有所不行;知和而和,不以礼节之,亦不可行也。”</strong></h3></blockquote>
<ul>
<li>义:礼在于处事和顺,从前圣明君主治理国家,最可贵的地方就在这里。无论大小事,都按照这个观点处理。如果遇到不能解决的问题,仍一味追求和顺,不用礼节管理它,也是不可取的。</li>
<li>感:“礼制”是一种自发性的,需要全民参与的,需要大环境熏染的;如今的“法制”更多的强调了个体,却确实了很多温度。</li>
</ul>
<blockquote>
<h3 id="1-13-有子曰:“信近于义,言可复也;恭近于礼,远耻辱也;因不失其亲,亦可宗也。”"><a href="#1-13-有子曰:“信近于义,言可复也;恭近于礼,远耻辱也;因不失其亲,亦可宗也。”" class="headerlink" title="1.13 有子曰:“信近于义,言可复也;恭近于礼,远耻辱也;因不失其亲,亦可宗也。”"></a><strong>1.13 有子曰:“信近于义,言可复也;恭近于礼,远耻辱也;因不失其亲,亦可宗也。”</strong></h3></blockquote>
<ul>
<li>音:“远”yuàn,远离</li>
<li>义:符合道义的约定,才可以实现;符合礼仪的恭敬,才能远离耻辱,倚靠的都是亲密的人,也就可靠了</li>
<li>感:前半段是交友待人的方式,后半段不是很赞同了,或者说在一定层面上,很多成功的人士,或者说企业家都在遵循这个定律,但是就年轻人而言,我更喜欢趣味相投的朋友,更喜欢与可以互相理解,有共鸣的人相处。</li>
</ul>
<blockquote>
<h3 id="1-14-子曰:“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已。”"><a href="#1-14-子曰:“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已。”" class="headerlink" title="1.14 子曰:“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已。”"></a><strong>1.14 子曰:“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已。”</strong></h3></blockquote>
<ul>
<li>感:孔子定义的<strong>好学</strong></li>
</ul>
<blockquote>
<h3 id="1-15-子贡曰:“贫而无谄,富而无骄,何如?”子曰:“可也。未若贫而乐,富而好礼者也。”子贡曰:《诗》云,‘如切如磋!如琢如磨’,其斯之谓与?”子曰:“赐也!始可与言《诗》已矣,告诸往而知来者。”"><a href="#1-15-子贡曰:“贫而无谄,富而无骄,何如?”子曰:“可也。未若贫而乐,富而好礼者也。”子贡曰:《诗》云,‘如切如磋!如琢如磨’,其斯之谓与?”子曰:“赐也!始可与言《诗》已矣,告诸往而知来者。”" class="headerlink" title="1.15 子贡曰:“贫而无谄,富而无骄,何如?”子曰:“可也。未若贫而乐,富而好礼者也。”子贡曰:《诗》云,‘如切如磋!如琢如磨’,其斯之谓与?”子曰:“赐也!始可与言《诗》已矣,告诸往而知来者。”"></a><strong>1.15 子贡曰:“贫而无谄,富而无骄,何如?”子曰:“可也。未若贫而乐,富而好礼者也。”子贡曰:《诗》云,‘如切如磋!如琢如磨’,其斯之谓与?”子曰:“赐也!始可与言《诗》已矣,告诸往而知来者。”</strong></h3></blockquote>
<ul>
<li>义:贫穷而不谄媚,富贵而不傲慢;不如贫穷却乐于道,富贵却谦虚好礼</li>
<li>感:能做到子贡说的程度已经很厉害了,孔子的标准能做到的寥寥无几</li>
</ul>
<blockquote>
<h3 id="1-16-子曰:“不患人之不已知,患不知人也。”"><a href="#1-16-子曰:“不患人之不已知,患不知人也。”" class="headerlink" title="1.16 子曰:“不患人之不已知,患不知人也。”"></a><strong>1.16 子曰:“不患人之不已知,患不知人也。”</strong></h3></blockquote>
<ul>
<li>义:不要担心别人不了解自己,应该担心的是自己不了解别人</li>
<li>感:期待别人做什么自己是很无力,将主动权掌握在自己手中,或者说自省、自行多一些,天真的期待少一点。</li>
</ul>
]]></content>
<summary type="html">
<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<h3 id="1-10-子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与-”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”"><a href="#1-10-子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与-”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”" class="headerlink" title="1.10 子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与?”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与?”"></a><strong>1.10 子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与?”子贡曰:“夫子温、良、恭、俭、让
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(3)</title>
<link href="http://lpbobo.com/2016/06/07/%E8%AE%BA%E8%AF%AD%EF%BC%883%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/07/论语(3)/</id>
<published>2016-06-07T13:33:00.000Z</published>
<updated>2016-06-10T02:05:35.000Z</updated>
<content type="html"><![CDATA[<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<h3 id="1-7-子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”"><a href="#1-7-子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”" class="headerlink" title="1.7 子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”"></a>1.7 子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”<a id="more"></a></h3></blockquote>
<ul>
<li>义:孔子育人注重人的品质德行修养,其次才是文化知识</li>
<li>感:“世事洞明皆学问,人情练达即文章”——《红楼梦》</li>
</ul>
<blockquote>
<h3 id="1-8-子曰:“君子不重则不威,学则不固。主忠信。无友不如己者。过则无惮改”"><a href="#1-8-子曰:“君子不重则不威,学则不固。主忠信。无友不如己者。过则无惮改”" class="headerlink" title="1.8 子曰:“君子不重则不威,学则不固。主忠信。无友不如己者。过则无惮改”"></a>1.8 子曰:“君子不重则不威,学则不固。主忠信。无友不如己者。过则无惮改”</h3></blockquote>
<ul>
<li>音:“无”通“毋”wú;惮 dàn</li>
<li>义:一个人内心的端正庄严会反映到气质容颜上,神态庄重,使人更加信服;<br>故有人比自重而后人重之,人必自侮而后人侮之</li>
<li>感:精神状态,外貌整洁,能够从环境上、气场上帮助自己</li>
</ul>
<blockquote>
<h3 id="1-9-曾子曰-”慎终追远,民德归厚矣”"><a href="#1-9-曾子曰-”慎终追远,民德归厚矣”" class="headerlink" title="1.9 曾子曰:”慎终追远,民德归厚矣”"></a>1.9 曾子曰:”慎终追远,民德归厚矣”</h3></blockquote>
<ul>
<li>义:孔子思想中,孝是修身基础,忠是孝的延续。孔子不信鬼神,看中的是礼仪来实行教化。</li>
<li>感:有些时候,很多场合,许多文化,形式或者说<strong>仪式</strong>确实可以给人一些不一样的感触。</li>
</ul>
]]></content>
<summary type="html">
<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<h3 id="1-7-子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”"><a href="#1-7-子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”" class="headerlink" title="1.7 子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”"></a>1.7 子夏曰:“贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣”
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(2)</title>
<link href="http://lpbobo.com/2016/06/06/%E8%AE%BA%E8%AF%AD%EF%BC%882%EF%BC%89/"/>
<id>http://lpbobo.com/2016/06/06/论语(2)/</id>
<published>2016-06-06T13:44:00.000Z</published>
<updated>2016-06-06T13:50:57.000Z</updated>
<content type="html"><![CDATA[<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<p><strong>1.4 曾子曰:“吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?”</strong><br><a id="more"></a></p>
</blockquote>
<ul>
<li>音:zēng ; xǐng ; chuán</li>
<li>义:“忠”在于“尽”,“信”在于“不欺”,“习”在于“持”。</li>
</ul>
<blockquote>
<p><strong>1.5 子曰:“道千乘之国,敬事而信,节用而爱人,使民以时”</strong></p>
</blockquote>
<ul>
<li>音:“道”通“导”,dǎo,千乘shèng</li>
<li>义:敬事、信、节、爱、不误农时。</li>
<li>感:敬事而信、节用是对自己的约束,爱人、不误时节是对别人的善用;<strong>严于律己、知人善用</strong>。</li>
</ul>
<blockquote>
<p><strong>1.6 子曰:“弟子入则孝,出则弟,谨而信,泛爱众,而亲仁,行有余力,则以学文。</strong></p>
</blockquote>
<ul>
<li>音:“弟”通“悌”,</li>
<li>义:在家孝顺父母,在外尊敬师长,说话谨慎,言而有信,与众多人有爱相处,躬亲仁行,做到如此仍有经历,再学习古代典籍。</li>
<li>感:行动、环境是影响人性的首要要素,最真切的渲染比书本典籍来的要切身的多,想要完善自己,找些好的朋友相处,找些正能量的环境生活,以书本为辅,让行动先行。</li>
</ul>
]]></content>
<summary type="html">
<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><blockquote>
<p><strong>1.4 曾子曰:“吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?”</strong><br>
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>论语(1)</title>
<link href="http://lpbobo.com/2016/06/05/%E8%AE%BA%E8%AF%AD(1)/"/>
<id>http://lpbobo.com/2016/06/05/论语(1)/</id>
<published>2016-06-05T14:00:00.000Z</published>
<updated>2016-06-07T13:58:17.000Z</updated>
<content type="html"><![CDATA[<h2 id="说在前面"><a href="#说在前面" class="headerlink" title="说在前面"></a>说在前面</h2><p>现在回想起去年决定要学习或者说拜读论语的理由,貌似是去年大胖胖生日问他要什么礼物,人家随口一句“送我本论语吧”。自己想想觉得没什么心意(人家准备礼物还是很用心的^.^),所以决定要不就直接送到脑袋里去吧<a id="more"></a>,想着一天一句论语总记得住吧,所以就是接下来上班下班抽查胖胖同学有没有背会,还曾一度被胖同学戏称“小于先生”,“哈哈,不敢不敢当”。至于有没有必要,不做讨论了,几千年沉淀下来的,尽管有不符合时代要求的部分,还是值得我们用虔诚和敬畏的心去膜拜的。</p>
<p>至于有没有坚持下来,说来惭愧,从每天背一句,转换到每天读两句,后来又变成了每天抄四句。实在是对不住自己,对不住小胖同学的期望。所以啦,要说到做到,决心以此文为证。</p>
<p>我会将每天要背诵下的句子记载在文章里,每个句子通过“音”、“义”、“感”填加注释。顾名思义“音”,既然要背诵它,诵读是第一要务;“义”是抄录比较欣赏的名家注解;“感”就是我个人小小的感受了。接下来的论语文不为别的,只为督促自己,只为给自己这段久违的背诵经历留点痕迹,外加个读书笔记了,还望走过路过的多多包涵!</p>
<p><strong>“当你的才华撑不起你的野心的时候,低下头来学习吧!”</strong>。</p>
<h2 id="学而篇第一"><a href="#学而篇第一" class="headerlink" title="学而篇第一"></a>学而篇第一</h2><p>学而篇是论语的第一篇,相对来说还是可以背诵的很熟练的,这让我想到在喜马拉雅听一个GRE老师说中国学生背诵最熟练的就是abcz开头单词。<strong>动机谁都有,坚持诚可贵呀!</strong></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">1.1 子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?”</div></pre></td></tr></table></figure>
<ul>
<li>音:“说”同“悦”yuè</li>
<li>义:开宗明义,概括了孔子人生理想的三个方面</li>
<li>感:通过学习找寻自身的满足,通过朋友感受外在的交往,通过<strong>控制情绪</strong>修身养性。</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">1.2 有子曰:“其为人也孝弟,而好犯上者,鲜矣;不好犯上,而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与”</div></pre></td></tr></table></figure>
<ul>
<li>音:“弟”同“悌”tì,子女对父母,弟弟对兄长的正确态度;鲜xiǎn,少;“与”同“欤”yú,论语中的与在句尾多是这个用法,表示疑问的助词。</li>
<li>义:仁的根本在于孝悌,由此推己及人。</li>
<li>感:很喜欢论语中“推”这个概念。</li>
</ul>
<p><img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_art_lunyu_first.jpg" alt=""></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">1.3 子曰:“巧言令色,鲜矣仁!”</div></pre></td></tr></table></figure>
<ul>
<li>音:xiǎn yǐ rén</li>
<li>义:巧言令色:满口说着讨人喜欢的话,满脸装出讨人喜欢的脸色;令色:令,好;色,脸色。</li>
<li>朱熹注曰:“好其言,善其色,致饰于外,务以说人。</li>
</ul>
]]></content>
<summary type="html">
<h2 id="说在前面"><a href="#说在前面" class="headerlink" title="说在前面"></a>说在前面</h2><p>现在回想起去年决定要学习或者说拜读论语的理由,貌似是去年大胖胖生日问他要什么礼物,人家随口一句“送我本论语吧”。自己想想觉得没什么心意(人家准备礼物还是很用心的^.^),所以决定要不就直接送到脑袋里去吧
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="literature" scheme="http://lpbobo.com/tags/literature/"/>
</entry>
<entry>
<title>再理解tcp backlog</title>
<link href="http://lpbobo.com/2016/06/03/%E5%86%8D%E7%90%86%E8%A7%A3tcp-backlog/"/>
<id>http://lpbobo.com/2016/06/03/再理解tcp-backlog/</id>
<published>2016-06-03T01:15:40.000Z</published>
<updated>2016-06-03T07:03:47.000Z</updated>
<content type="html"><![CDATA[<p>最近读到一篇分析文章<a href="http://www.cnxct.com/something-about-phpfpm-s-backlog/" target="_blank" rel="external">TCP SOCKET中backlog参数的用途是什么?</a>,其中有这样一段描述:</p>
<blockquote>
<p>在linux 2.2以前,backlog大小包括了半连接状态和全连接状态两种队列大小。linux 2.2以后,分离为两个backlog来分别限制半连接SYN_RCVD状态的未完成连接队列大小跟全连接ESTABLISHED状态的已完成连接队列大小。互联网上常见的TCP SYN FLOOD恶意DOS攻击方式就是用/proc/sys/net/ipv4/tcp_max_syn_backlog来控制的,可参见《TCP洪水攻击(SYN Flood)的诊断和处理》。</p>
<p>在使用listen函数时,内核会根据传入参数的backlog跟系统配置参数/proc/sys/net/core/somaxconn中,二者取最小值,作为“ESTABLISHED状态之后,完成TCP连接,等待服务程序ACCEPT”的队列大小。在kernel 2.4.25之前,是写死在代码常量SOMAXCONN,默认值是128。在kernel 2.4.25之后,在配置文件/proc/sys/net/core/somaxconn (即 /etc/sysctl.conf 之类 )中可以修改。我稍微整理了流程图,如下:</p>
</blockquote>
<p><img src="http://img2.cnxct.com/2015/06/tcp-sync-queue-and-accept-queue-small.jpg" alt=""></p>
<p>回过头来看之前自己的一篇文章<a href="http://lpbobo.com/2016/02/05/%E8%B0%83%E6%9F%A5socketserver%20connection%20refused/">调查SocketServer</a>,发现有一段描述有误:</p>
<blockquote>
<p>也就是说,backlog形容的是server在与客户端建立tcp连接的过程中,SYN队列的大小,在socket的listen接口中,一般第二个参数就是backlog的大小。</p>
</blockquote>
<h3 id="listen-socket-backlog-的两种实现方式"><a href="#listen-socket-backlog-的两种实现方式" class="headerlink" title="listen(socket, backlog)的两种实现方式"></a>listen(socket, backlog)的两种实现方式</h3><p>在<a href="http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html" target="_blank" rel="external">How TCP backlog works in linux</a>一文中,作者给出了比较详细的分析:</p>
<ol>
<li><p>第一种实现方式在底层维护一个由backlog指定大小的队列。服务端收到SYN后,返回一个SYN/ACK,并把连接放入队列中,此时这个连接的状态是SYN_RECEIVED。当客户端返回ACK后,此连接的状态变为ESTABLISHED。队列中只有ESTABLISHED状态的连接能够交由应用处理。第一种实现方式可以简单概括为:一个队列,两种状态。</p>
</li>
<li><p>第二种实现方式在底层维护一个SYN_RECEIVED队列和一个ESTABLISHED队列,当SYN_RECEIVED队列中的连接返回ACK后,将被移动到ESTABLISHED队列中。backlog指的是ESTABLISHED队列的大小。</p>
</li>
</ol>
<p>传统的基于BSD的tcp实现第一种方式,在linux2.2之前,内核也实现第一种方式。当队列满了以后,服务端再收到SYN时,将不会返回SYN/ACK。比较优雅的处理方法就是不处理这条连接,不返回RST,让客户端重试。</p>
<p>在linux2.2后,选择第二种方式实现,SYN_RECEIVED队列的大小由proc/sys/net/ipv4/tcp_max_syn_backlog系统参数指定,ESTABLISHED队列由backlog和/proc/sys/net/core/somaxconn中较小的指定。</p>
<p>但是在windows server中,底层选择winsock API实现,backlog的定义是<code>represents the maximum length of the queue of pending connections for the listener</code>(这是一个比较模糊的定义……来源于BSD),当队列满了后,将会返回RST。</p>
<h3 id="if-ESTABLISHED-is-full-SYN-req-gt-ESTABLISHED"><a href="#if-ESTABLISHED-is-full-SYN-req-gt-ESTABLISHED" class="headerlink" title="if (ESTABLISHED is full) {SYN.req -> ESTABLISHED?}"></a>if (ESTABLISHED is full) {SYN.req -> ESTABLISHED?}</h3><p>考虑这样一种情况,当ESTABLISHED队列满了,此时收到一个连接的ACK,需要将此连接从SYN队列移到ESTABLISHED队列中,会发生什么?</p>
<p>linux底层的关键代码是:</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">listen_overflow:</div><div class="line"> <span class="keyword">if</span> (!sysctl_tcp_abort_on_overflow) {</div><div class="line"> inet_rsk(req)->acked = <span class="number">1</span>;</div><div class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</div><div class="line"> }</div></pre></td></tr></table></figure>
<p>除非系统的tcp_abort_on_overflow指定为1(将返回RST),否则底层将不会做任何事情……这是一种委婉的退让策略,在服务端处理不过来时,让客户端误以为ACK丢失,继续重新发送ACK。这样,当服务端的处理能力恢复时,这条连接又可以重新被移动到ESTABLISHED队列中去。</p>
<h3 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h3><ol>
<li><a href="http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html" target="_blank" rel="external">How TCP backlog works in Linux</a></li>
<li><a href="http://www.cnxct.com/something-about-phpfpm-s-backlog/" target="_blank" rel="external">TCP SOCKET中backlog参数的用途是什么?</a></li>
<li><a href="https://support.microsoft.com/en-us/kb/328476" target="_blank" rel="external">Windows中的backog处理策略</a></li>
</ol>
]]></content>
<summary type="html">
<p>最近读到一篇分析文章<a href="http://www.cnxct.com/something-about-phpfpm-s-backlog/" target="_blank" rel="external">TCP SOCKET中backlog参数的用途是什么?</a>
</summary>
</entry>
<entry>
<title>倒腾hexo</title>
<link href="http://lpbobo.com/2016/05/26/%E5%80%92%E8%85%BEhexo/"/>
<id>http://lpbobo.com/2016/05/26/倒腾hexo/</id>
<published>2016-05-26T14:34:29.000Z</published>
<updated>2016-06-06T14:15:26.000Z</updated>
<content type="html"><![CDATA[<p>MiTang的博客是15年下半年才开始写的,当时中意的主题是<a href="https://github.com/ppoffice/hexo-theme-hueman" target="_blank" rel="external">hueman</a>,一个富展现形式的博客主题,从wordpress的主题改造而来。但在写文章的过程中发现,为了效果,每次都需要去制作一张图片,有时候会浪费写技术内容的精力,如果不细心打点,博客整体的效果就不会最好,对于强迫症的我而言,这是不能容忍的。</p>
<a id="more"></a>
<p>第一次接触node就是在用hexo的时候,当时也倒腾了下hueman的主题,改配置神马的,运行了半年以后,在研究java nio的时候无意中发现了<a href="http://hongweiyi.com/" target="_blank" rel="external">小e的笔记</a>的博客,风格简明,以内容为主,每篇博文的两侧没有任何干扰项,与我自己的想法不谋而合,所以果断将hueman的主题切换为<a href="https://github.com/pinggod/hexo-theme-apollo" target="_blank" rel="external">apollo</a>。</p>
<p>作为一个后端的程序员,搞搞前端模板稍显痛苦,总觉得这是一个螺旋式的过程,想想前端模板引擎的设计初衷,仿佛看到了jsp的影子,各种复杂的语法和糅杂,让我稍觉蛋疼……</p>
<p>搞完一个ejs的模板,又来看jade,虽说搞过python,但是jade还是让我理解起来有些燥热,一个下午好不容易自己添加点内容。不过在这个过程中,<a href="http://www.maintao.com/2014/hexo-theme-from-scratch" target="_blank" rel="external">从零开始定制hexo主题</a>的参考让我体会颇深,进而在深夜看了很多博主的文章,觉得还是蛮有意思的,这也是写博客的一种乐趣吧,其中一段:</p>
<blockquote>
<p>真正想要了解一只青蛙,传统的解剖不是办法,更好的方式是构造一只青蛙(Don’t dissect the blog, build it.)</p>
</blockquote>
<p>与hueman的distraction不同,apollo的博客内容看起来让人非常舒畅,由于太过简明,加上自己目前的主要精力原因,恐怕只有过一段时间再做一些深度自定义了,集中在tags,header定制吧。</p>
<p>今天花了半个小时的时间,自己用PPT做了一个png的图标,暂觉不错:</p>
<p><img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_science_favicon_lp.png" alt=""></p>
<p>不过大宝贝分分钟用procreate做了一个lpbobo的图标,导致我的可爱小图标未正式上线就已夭折,路过的朋友可以来点个赞:</p>
<p><img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_science_favicon_bo.png" alt=""></p>
<h3 id="小于同学对页面的设想,胖胖同学敢接招吗"><a href="#小于同学对页面的设想,胖胖同学敢接招吗" class="headerlink" title="小于同学对页面的设想,胖胖同学敢接招吗"></a>小于同学对页面的设想,胖胖同学敢接招吗</h3><table>
<thead>
<tr>
<th>需求</th>
<th>效果</th>
</tr>
</thead>
<tbody>
<tr>
<td>分栏目</td>
<td>需要增加“文”和“游”模块,之前的“柴米油盐”是个不错的设想;博客首页是四个方块滚动式的,下拉条可以选择该栏目下的预览,炫酷</td>
</tr>
<tr>
<td>正文可以增加颜色吗?</td>
<td></td>
</tr>
<tr>
<td>每篇文章加个小图标?</td>
<td>类似通讯录</td>
</tr>
</tbody>
</table>
]]></content>
<summary type="html">
<p>MiTang的博客是15年下半年才开始写的,当时中意的主题是<a href="https://github.com/ppoffice/hexo-theme-hueman">hueman</a>,一个富展现形式的博客主题,从wordpress的主题改造而来。但在写文章的过程中发现,为了效果,每次都需要去制作一张图片,有时候会浪费写技术内容的精力,如果不细心打点,博客整体的效果就不会最好,对于强迫症的我而言,这是不能容忍的。</p>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="hexo" scheme="http://lpbobo.com/tags/hexo/"/>
</entry>
<entry>
<title>bitcoinj(1) Getting started</title>
<link href="http://lpbobo.com/2016/05/12/bitcoinj/"/>
<id>http://lpbobo.com/2016/05/12/bitcoinj/</id>
<published>2016-05-12T03:00:00.000Z</published>
<updated>2016-05-26T15:19:30.000Z</updated>
<content type="html"><![CDATA[<blockquote>
<p>bitcoinj是一个由java实现的比特币核心功能的开源库[<a href="https://github.com/bitcoinj/bitcoinj" target="_blank" rel="external">Github地址</a>],项目主页为<a href="https://bitcoinj.github.io/" target="_blank" rel="external">https://bitcoinj.github.io/</a>。项目的核心开发者来自于Google,项目的文档十分丰富,非常适合Java开发者入手bitcoin的具体实现。</p>
</blockquote>
<a id="more"></a>
<p>注:本篇文章是笔者对bitcoinj研究过程的总结,内容主要来自项目主页、源代码以及个人理解,如果读者对bitcoin不熟悉的话,请先移步<a href="http://lpbobo.com/2016/04/29/%E8%81%8A%E8%81%8A%E5%8C%BA%E5%9D%97%E9%93%BE/">此处</a>,了解比特币的核心内容。</p>
<h3 id="编译bitcoinj"><a href="#编译bitcoinj" class="headerlink" title="编译bitcoinj"></a>编译bitcoinj</h3><ol>
<li>从<a href="https://github.com/bitcoinj/bitcoinj/branches" target="_blank" rel="external">Github</a>下载release版本的bitcoinj源码,最新(截至2016-05-12)版本为release-0.14;</li>
<li><p>bitcoinj工程是由maven管理的,可以通过maven命令进行编译,bitcoinj根目录下的pom.xml组织起多个子工程,在根目录下输入命令进行编译:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mvn clean package</div></pre></td></tr></table></figure>
<p> 或者可以直接导入至IDE中,官方推荐IDEA,笔者使用eclipse,基本工程结构如下:</p>
<p> <img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_science_bitcoinj_src.png" alt=""></p>
</li>
</ol>
<h3 id="简单示例"><a href="#简单示例" class="headerlink" title="简单示例"></a>简单示例</h3><p>bitcoinj提供的核心对象包括:</p>
<ul>
<li><strong>NetworkParameters</strong> from <em>org.bitcoinj.core</em></li>
<li><strong>Wallet</strong> from <em>org.bitcoinj.wallet</em></li>
<li><strong>PeerGroup</strong> from <em>org.bitcoinj.PeerGroup</em></li>
<li><strong>BlockStore</strong> from <em>org.bitcoinj.store</em></li>
<li><strong>BlockChain</strong> from <em>org.bitcoinj.core</em></li>
<li><strong>WalletEventListener</strong> from <em>org.bitcoinj.wallet.listeners</em></li>
<li><strong>WalletAppKit</strong>s from <em>org.bitcoinj.kits</em></li>
</ul>
<p>examples文件夹下的org/bitcoinj/examples/ForwardingService类展现了一个相对完整的使用示例,每当钱包收到bitcoin时,将会把它们发送到输入参数中的地址。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line">BriefLogFormatter.init();</div><div class="line"><span class="keyword">if</span> (args.length < <span class="number">1</span>) {</div><div class="line"> System.err.println(<span class="string">"Usage: address-to-send-back-to [regtest|testnet]"</span>);</div><div class="line"> <span class="keyword">return</span>;</div><div class="line">}</div><div class="line"></div><div class="line">NetworkParameters params;</div><div class="line">String filePrefix;</div><div class="line"><span class="keyword">if</span> (args.length > <span class="number">1</span> && args[<span class="number">1</span>].equals(<span class="string">"testnet"</span>)) {</div><div class="line"> params = TestNet3Params.get();</div><div class="line"> filePrefix = <span class="string">"forwarding-service-testnet"</span>;</div><div class="line">} <span class="keyword">else</span> <span class="keyword">if</span> (args.length > <span class="number">1</span> && args[<span class="number">1</span>].equals(<span class="string">"regtest"</span>)) {</div><div class="line"> params = RegTestParams.get();</div><div class="line"> filePrefix = <span class="string">"forwarding-service-regtest"</span>;</div><div class="line">} <span class="keyword">else</span> {</div><div class="line"> params = MainNetParams.get();</div><div class="line"> filePrefix = <span class="string">"forwarding-service"</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>至少需要1个输入参数,第2个输入参数为网络连接类型,默认为主链,testnet与regtest分别代表公有的测试链和私有的测试链,其中regtest模式下区块生成速度非常快。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">forwardingAddress = Address.fromBase58(params, args[<span class="number">0</span>]);</div></pre></td></tr></table></figure>
<p>程序第1个参数应为一个接收方的钱包地址,经过Base58编码过的,形如“17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL”。forwardingAddress是一个<code>Address</code>类型的对象,表示目标地址。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">kit = <span class="keyword">new</span> WalletAppKit(params, <span class="keyword">new</span> File(<span class="string">"."</span>), filePrefix);</div></pre></td></tr></table></figure>
<p>kit是一个<code>WalletAppKit</code>对象,相当于一个包装,其中自动引用了一些底层对象的操作,简化客户端的处理,具体可以参考WalletAppKit的实现。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">kit.startAsync();</div><div class="line">kit.awaitRunning();</div></pre></td></tr></table></figure>
<p>等待区块同步完成。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">kit.wallet().addCoinsReceivedEventListener(<span class="keyword">new</span> WalletCoinsReceivedEventListener() {</div><div class="line"> </div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onCoinsReceived</span><span class="params">(Wallet w, Transaction tx, Coin prevBalance, Coin newBalance)</span> </span>{</div><div class="line"> </div><div class="line"> Coin value = tx.getValueSentToMe(w);</div><div class="line"> System.out.println(<span class="string">"Received tx for "</span> + value.toFriendlyString() + <span class="string">": "</span> + tx);</div><div class="line"> System.out.println(<span class="string">"Transaction will be forwarded after it confirms."</span>);</div><div class="line"> </div><div class="line"> Futures.addCallback(tx.getConfidence().getDepthFuture(<span class="number">1</span>), <span class="keyword">new</span> FutureCallback<TransactionConfidence>() {</div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onSuccess</span><span class="params">(TransactionConfidence result)</span> </span>{</div><div class="line"> forwardCoins(tx);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onFailure</span><span class="params">(Throwable t)</span> </span>{</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(t);</div><div class="line"> }</div><div class="line"> });</div><div class="line"> }</div><div class="line">});</div></pre></td></tr></table></figure>
<p>在钱包中新增一个入账的监听器,当钱包收到bitcoin时,将会触发<code>WalletCoinsReceivedEventListener</code>,打印出交易的基本信息。然后首先调用</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">ListenableFuture<Transaction> future = tx.getConfidence().getDepthFuture(<span class="number">1</span>)</div></pre></td></tr></table></figure>
<p>我们知道区块链中一般至少经过6次确认才能确认一笔交易的真实性,目的是防止双花。Confidence对象表示客户对交易的信任程度,满足不同的阈值要求。ListenableFuture对象表示一个未来需要监听的事件,此处就是指getDepthFuture(1),即当确认数为1时被触发,当然也可能被异常触发。在FutureCallback的回调函数中“确认”触发onSuccess,其中调用forwardCoins,异常则触发onFailure。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">forwardCoins</span><span class="params">(Transaction tx)</span> </span>{</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> Coin value = tx.getValueSentToMe(kit.wallet());</div><div class="line"> System.out.println(<span class="string">"Forwarding "</span> + value.toFriendlyString());</div><div class="line"> </div><div class="line"> <span class="keyword">final</span> Coin amountToSend = value.subtract(Transaction.REFERENCE_DEFAULT_MIN_TX_FEE);</div><div class="line"> <span class="keyword">final</span> Wallet.SendResult sendResult = kit.wallet().sendCoins(kit.peerGroup(), forwardingAddress, amountToSend);</div><div class="line"> checkNotNull(sendResult); </div><div class="line"> System.out.println(<span class="string">"Sending ..."</span>);</div><div class="line"> </div><div class="line"> sendResult.broadcastComplete.addListener(<span class="keyword">new</span> Runnable() {</div><div class="line"> <span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">run</span><span class="params">()</span> </span>{</div><div class="line"> System.out.println(<span class="string">"Sent coins onwards! Transaction hash is "</span> + sendResult.tx.getHashAsString());</div><div class="line"> }</div><div class="line"> }, MoreExecutors.sameThreadExecutor());</div><div class="line"> } <span class="keyword">catch</span> (KeyCrypterException | InsufficientMoneyException e) {</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(e);</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>发送bitcoin的过程就比较简单了,首先从交易中拿出我们收到的bitcoin,然后发送到指定的地址,监听发送结果。</p>
<p>总的来说,bitcoinj是由google得工程师写的,其中用到了很多google自己封装的数据类型,而且整体是一种事件编程的风格,用到很多listener,看起来有些复杂,用起来更复杂……搞完了入门,基本就可以开始看核心的API了。</p>
]]></content>
<summary type="html">
<blockquote>
<p>bitcoinj是一个由java实现的比特币核心功能的开源库[<a href="https://github.com/bitcoinj/bitcoinj">Github地址</a>],项目主页为<a href="https://bitcoinj.github.io/">https://bitcoinj.github.io/</a>。项目的核心开发者来自于Google,项目的文档十分丰富,非常适合Java开发者入手bitcoin的具体实现。</p>
</blockquote>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="bitcoin" scheme="http://lpbobo.com/tags/bitcoin/"/>
</entry>
<entry>
<title>别学了,开始做吧</title>
<link href="http://lpbobo.com/2016/05/06/%E5%88%AB%E5%AD%A6%E4%BA%86%EF%BC%8C%E5%BC%80%E5%A7%8B%E5%81%9A%E5%90%A7/"/>
<id>http://lpbobo.com/2016/05/06/别学了,开始做吧/</id>
<published>2016-05-06T11:00:00.000Z</published>
<updated>2016-05-23T09:04:58.000Z</updated>
<content type="html"><![CDATA[<p>不断地积累积累,看到了未来,却没有连接现在。不注重现在,需要的一切都是假的。活在当下,<br>大胆的去做想做的,跳出习惯的枷锁,停止恶性循环。</p>
<a id="more"></a>
<p><a href="http://36kr.com/p/5043836.html?utm_source=tuicool&utm_medium=referral" target="_blank" rel="external">36Kr原文链接</a></p>
]]></content>
<summary type="html">
<p>不断地积累积累,看到了未来,却没有连接现在。不注重现在,需要的一切都是假的。活在当下,<br>大胆的去做想做的,跳出习惯的枷锁,停止恶性循环。</p>
</summary>
<category term="Art" scheme="http://lpbobo.com/categories/Art/"/>
<category term="collection" scheme="http://lpbobo.com/tags/collection/"/>
</entry>
<entry>
<title>解读Java关键字final</title>
<link href="http://lpbobo.com/2016/04/30/%E8%A7%A3%E8%AF%BBJava%E5%85%B3%E9%94%AE%E5%AD%97final/"/>
<id>http://lpbobo.com/2016/04/30/解读Java关键字final/</id>
<published>2016-04-30T01:41:00.000Z</published>
<updated>2016-05-25T08:59:38.000Z</updated>
<content type="html"><![CDATA[<p>在Java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与C++中的const关键字效果类似。</p>
<a id="more"></a>
<blockquote>
<p>immutable指对象在创建之后,状态无法被改变</p>
</blockquote>
<p>可以从三个角度考虑使用final关键字:</p>
<ol>
<li>代码本身:不希望final描述的对象所表现的含义被改变</li>
<li>安全:final对象具有只读属性,是线程安全的</li>
<li>效率:无法修改final对象本身,对其引用的操作更为高效</li>
</ol>
<h3 id="final-变量"><a href="#final-变量" class="headerlink" title="final 变量"></a>final 变量</h3><p>定义<code>final Object a</code>,则a只能被初始化一次,一旦初始化,a的数据无法修改,若a为引用类型,则不能重新绑定其他对象。<br>未被初始化的final变量被称为blank final,若为成员变量,则必须被初始化或在构造器中赋值。</p>
<p>例子:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">Circle</span> </span>{</div><div class="line"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">double</span> PI = <span class="number">3.1415926</span>;</div><div class="line"> <span class="keyword">final</span> <span class="keyword">int</span> radius = <span class="number">5</span>;</div><div class="line"> <span class="keyword">final</span> <span class="keyword">int</span> xPos;</div><div class="line"> <span class="keyword">final</span> <span class="keyword">int</span> yPos;</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Circle</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y)</span> </span>{</div><div class="line"> xPos = x; </div><div class="line"> yPos = y;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h3 id="final-方法"><a href="#final-方法" class="headerlink" title="final 方法"></a>final 方法</h3><p>定义<code>final method</code>,则该方法无法被重载,方法设计者不希望由于对方法的重载导致其他相关功能出现异常。</p>
<p>例子:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">BaseClass</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{}</div><div class="line">}</div><div class="line"></div><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">DerivedClass</span> <span class="keyword">extends</span> <span class="title">BaseClass</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{} <span class="comment">// 编译出错</span></div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>需要注意的是,final方法的定义不一定能够产生inline的效果,因为方法是否inline取决于JVM的策略,而非final关键字,通过final的设计提高方法效率是不准确的。</p>
<h3 id="final-类"><a href="#final-类" class="headerlink" title="final 类"></a>final 类</h3><p><code>final class X</code>定义的类X无法被继承。</p>
<p>在Java中,String类被设计成final,其定义如下</p>
<pre><code>public class final String extends Object implements Serializable, Comparable<String>, CharSequence
</code></pre><p>为什么String被设计成final?</p>
<ol>
<li>一个String类的实例被初始化后,其在堆上的内容无法被改变,String类提供的任何修改String对象的方法都只能够产生一个新的String对象,大大简化了对String的操作,是代码更易于阅读和理解;</li>
<li>String final是实现String interning(在内存中不同的string值只有一份)的必要条件,因为通常代码中存在大量的String对象,不同的引用会指向相同的字符串空间,若String不为final,则当一个字符串空间的内容改变时,所有的引用都需要知道这一情况,这一机制的实现是十分复杂的,无疑会影响效率。String interning能够节省内存空间,同时也节省时间花销;</li>
<li>String只读,则不必担心非常重要的内容被篡改;</li>
</ol>
<h3 id="内部类与final"><a href="#内部类与final" class="headerlink" title="内部类与final"></a>内部类与final</h3><p>在一个方法内定义匿名内部类时,内部类只能访问方法内的final类型变量,使得Java编译器能够提前捕获变量的值,并在内部类保存一份副本,当方法销毁时,内部类的内存空间依然完整。</p>
<p>例子:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Wrapper</span> </span>{</div><div class="line"></div><div 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>{</div><div class="line"> </div><div class="line"> <span class="comment">// Object obj = null; //编译出错</span></div><div class="line"> <span class="keyword">final</span> Object obj = <span class="keyword">null</span>;</div><div class="line"> <span class="keyword">new</span> Thread(<span class="keyword">new</span> Runnable() {</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">run</span><span class="params">()</span> </span>{</div><div class="line"> obj = <span class="string">"hello"</span>;</div><div class="line"> }</div><div class="line"> }).start();</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol>
<li>Wiki: <a href="https://en.wikipedia.org/wiki/Final_(Java)#cite_note-3" target="_blank" rel="external">https://en.wikipedia.org/wiki/Final_(Java)#cite_note-3</a></li>
<li><a href="https://en.wikipedia.org/wiki/Immutable_object#Java" target="_blank" rel="external">Wiki: immutable</a></li>
<li><a href="http://mindprod.com/jgloss/immutable.html" target="_blank" rel="external">Immutable: Java Glossary</a></li>
</ol>
]]></content>
<summary type="html">
<p>在Java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与C++中的const关键字效果类似。</p>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="Java" scheme="http://lpbobo.com/tags/Java/"/>
</entry>
<entry>
<title>深入浅出区块链</title>
<link href="http://lpbobo.com/2016/04/30/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%E5%8C%BA%E5%9D%97%E9%93%BE/"/>
<id>http://lpbobo.com/2016/04/30/深入浅出区块链/</id>
<published>2016-04-30T00:30:21.000Z</published>
<updated>2016-05-26T15:15:29.000Z</updated>
<content type="html"><![CDATA[<p>本篇文章能让新手直观上认识区块链,而不仅仅是纠结于算法与模型,尤其是工作量证明机制;能使有经验的同学在了解的基础上,搞清楚区块链如何解决实际问题,发挥自己的想象力,结合实际应用区块链。</p>
<a id="more"></a>
<h2 id="数字货币的命题"><a href="#数字货币的命题" class="headerlink" title="数字货币的命题"></a>数字货币的命题</h2><p>科技改变世界,每一个科技创新一定是为了解决某个实际的问题或者是表现一种追求完美的态度,想想智能机,物联网,VR…,right?那么在货币领域呢?数字货币就是为了升级流行了几百年的以纸币为核心的货币体系,能够适应未来的人类生活方式。</p>
<p>最近这两年,普通人的生活方式已经被移动互联网改变,刷新闻,刷社交……其中,毫无疑问,支付方式最贴近人的现实生活。一个人可以不拿钱包出门,吃饭刷手机,逛街刷手机,路边买盒饭也可以刷手机……在这个过程中,现金慢慢地向电子化过渡,钱已经不是一捆捆放在桌子上看着开心的纸了,仅仅是手机上显示的一串数字。这与互联网能够带来的快捷密不可分,方便才是王道,貌似也很健康。对于银行而言,减少使用现金也可以大大降低成本,对于国家而言,也是开心的。适应这种节奏,电子现金慢慢成为主流。</p>
<p>电子现金只是数字货币体系的一部分。实际上,数字货币的概念是几十年前提出的,是与现有的纸币系统平行的一套体系。在现有的系统中,现金是有序列标识的,可鉴别真伪的,由国家发行监管的,现金的交换价值与市场相关。同样,数字货币体系要想实施,也需要对数字货币做这样的处理,保证数字货币的可流通,这就是数字货币需要考虑的命题。</p>
<p>在这个题目里有三个方面需要考虑,</p>
<ul>
<li><em>第一,如何确定收款人;</em></li>
<li><em>第二,如何确定汇款人;</em></li>
<li><em>第三,如何保证交易的唯一性;</em></li>
</ul>
<p>前两个难题在几十年前就已经被解决了,通过公钥/私钥非对称加密的方法能够确定交易双方的身份,但是第三个问题却迟迟找不到答案,与现金这种实体资源不同,数字货币无法在网络上实现“给予”的功能,即give。这个命题又被称作“双花问题”,如何解决数字资源的传递问题,是数字货币流行的关键。</p>
<p>直到2008年,区块链的问世,才让人们看到了数字货币的曙光。</p>
<h2 id="为什么要去中心化?"><a href="#为什么要去中心化?" class="headerlink" title="为什么要去中心化?"></a>为什么要去中心化?</h2><p>沉思三分钟,如果换做是你如何去解决双花问题?</p>
<p>1,2,3……</p>
<p>头脑风暴最直接地会告诉你这样一种答案:类似现实中的银行,搞个中央银行,每个人在银行里有个账户,交易记录由银行来完成。</p>
<p>其实这种方案是可行的,银行也很乐意去做,因为银行可以利用每个用户的钱去投资,去创造价值。<br>但实际上存钱的过程就是一个投资的过程,利息算是你的回报率,如果这样一想的话,你就可能觉得自己的回报率太低了,而且投资就是有风险。在国内,这种风险很小,因为银行是国家的,只要天朝不倒,就不用担心自己血本无归,但偶尔也会看到由于各种异常导致的自己账户资金减少的情况。</p>
<p>但在国外,银行就没有这么让人信服了,2008年的金融危机就是鲜活的例子,也算是一个导火索,让那些寻找公平的人想要去创造一个没有银行存在的货币体系,于是乎比特币作为第一个成熟的数字货币体系诞生了。(don’t mess with badass scientists)</p>
<p>在比特币系统中,<strong>去中心化是一种需求,是一个充分条件</strong>。</p>
<h2 id="分布式总账"><a href="#分布式总账" class="headerlink" title="分布式总账"></a>分布式总账</h2><p>去中心化意味着整个网络是分布式架构的,沉思一分钟,比特币如何在分布式的网络中解决双花问题呢?</p>
<p>1……</p>
<p>尽管数字货币没有实体货币的可转移性,但却比实体货币更容易追踪,在数字货币体系中,每一笔“钱”都可以轻易地追踪到流向。如此,只要在总账中记录每一笔交易,便记录每一笔钱的踪迹,便可以解决双花问题。</p>
<p>听起来很简单,但是如何保证记录的每笔交易是真实的却面临一个分布式网络中必须解决的问题:拜占庭将军问题。</p>
<blockquote>
<p>拜占庭将军问题描述的是如何在不可信的消息通道上通过消息传递达成共识,这个问题没有确定的解,而是需要考虑一种容错方案,保证决策正确。</p>
</blockquote>
<p>在分布式总账中,拜占庭将军问题可以这样描述:</p>
<blockquote>
<p>每一个节点都有记账的权利,也有确认交易有效性的权利,可以被称作“记账人”,记账人存在不诚实的可能性。系统中产生的任意一笔交易,每个记账人都会记录,然后全网广播,被其他记账人认可后才能够被添加到总账中。每一个记账人都会希望自己的账本有效(系统有奖励),其余的记账人有可能赞同,也有可能反对,因为这个账本有可能是真实的,有可能是伪造的。最终不同记账人可能出于不同的利益关系怀有这几种心态:赞同真实的账本,赞同伪造的账本,反对真实的账本,反对伪造的账本,那么添加到总账中的账本就有可能是虚假的。</p>
</blockquote>
<p>区块链设计了工作量证明机制确保记账人愿意记录真实的交易信息。</p>
<h3 id="工作量证明-pow-解决拜占庭将军问题"><a href="#工作量证明-pow-解决拜占庭将军问题" class="headerlink" title="工作量证明(pow)解决拜占庭将军问题"></a>工作量证明(pow)解决拜占庭将军问题</h3><p>工作量证明的过程就是计算机通过穷举去匹配一个由SHA-256算法加密的随机数,这个期间产生的CPU消耗被称为工作量证明,也证明了记账人愿意为了记账付出一定的成本(CPU运算消耗的资源)。最终记账权由工作量证明最快的CPU获取。</p>
<p>每个记账人出于成本因素会考虑自己账本内容的真实有效性,因为虚假的账本意味着同样付出的其他记账人很大程度上不会投票赞同这份账本,那么自己的成本将产出空值。</p>
<p>同时,区块链中的“链”则表明了交易的前后存在关系,每一个区块中包含多笔交易,区块就是每个记账人心中的账本,每一个区块对应的随机数将作为下一次工作量证明的输入,从而形成一条链条。</p>
<p>上面的分析简单说明了记账人愿意宣布真实的账本以防止白忙乎,但是没有证明记账人一定不会作假,还存在着拉帮结伙、同谋的可能性,但是“总账链”的方式确保了记账人不会作假。记账人投票的方式是在下一轮的工作量证明中获胜,并把自己的区块加入到赞同区块的后面,由此区块链也是一个工作量证明的链条。</p>
<p>假设在链条的某个区块上产生了分叉,一个虚假,一个真实,那么虚假链条上的记账人则需要保证自己在每一轮的工作量证明中都需要优胜才能够维持自己链条的发展,与诚实的链条产生竞争。可想而知,随着时间的推移,维护虚假链条的记账人最终会放弃,因而确保了总账记录的每一笔交易将以诚实的状态发展。</p>
<p>工作量证明解决拜占庭将军问题的核心在于尽管互不信任,但是出于利益最大化,成本最小化的考虑,记账人愿意展开公平的竞争,这种机制有效控制了整个社区的平衡发展。</p>
<p>本质上来说,工作量证明的本身是没有任何附加价值的,胜出者仅仅是计算能力最强的CPU,但是工作量证明对整个区块链生态的发展的意义却不止CPU计算这么简单。生物学中,不利原理阐述的是在自然选择的条件下,那些不利于物种本身的条件,比如孔雀的大尾巴,鹿的大角……,将最终促进整个种群的发展。<strong>在区块链生态中,CPU就是新的物种,工作量证明作为其不利条件的表现,将促进CPU本身的发展,并扩大整个网络的范围,最终带来整个生态的繁荣</strong>。</p>
<h3 id="工作量证明机制的补充-权益证明-proof-of-stake"><a href="#工作量证明机制的补充-权益证明-proof-of-stake" class="headerlink" title="工作量证明机制的补充 - 权益证明(proof-of-stake)"></a>工作量证明机制的补充 - 权益证明(proof-of-stake)</h3><p>工作量是一个去中心的投票过程,但是在其发展过程中,矿池的算力越来越大,逐渐朝一个中心化的机构发展,当其算力超过51%时(历史上出现过一次),将破坏整个网络的发展。</p>
<p>权益证明机制的设计能够解决工作量证明机制中的网络安全问题,货币的持有者拥有相应的“权益”,当把货币花费时,权益得到证明,因此若想要发动51%攻击,则需要花费全网51%的货币,实现这一目标的成本将要比51%算力还高。</p>
<p>一个单独拥有权益证明的体系无法保证投机行为对货币价值造成的冲击,同时在货币体量较小时,安全性也很低。</p>
<p>一种混合工作量证明与权益证明的体系将两者的优点互相结合,缺点互相补充,构成了一个更加完备的系统。</p>
<h2 id="区块链的价值"><a href="#区块链的价值" class="headerlink" title="区块链的价值"></a>区块链的价值</h2><p>区块链中没有中心化的机构,每个节点都能够拥有相同的总账,总账中的每一笔交易无法被篡改,简而言之,区块链就是一个无法修改的数字账本。</p>
<p>理解到这层含义,那么去中心化也可以看成是一个区块链的必要条件了。</p>
<p>区块链对于数字货币而言,其意义是巨大的,第一次实现了数字资产在网络上的“传递”,使数字货币成为可能。</p>
<p>扩展到互联网上,“”无法修改的账本“”意味着区块链可以改变现实生活中一切信任成本较高的行业,房地产、股票、证券、合约、供应链、银行清算结算……</p>
<h2 id="比特币是区块链唯一成熟应用"><a href="#比特币是区块链唯一成熟应用" class="headerlink" title="比特币是区块链唯一成熟应用"></a>比特币是区块链唯一成熟应用</h2><p>区块链既然潜力如此之大,为何只有比特币是唯一成熟的应用呢?</p>
<p>第一个原因,先有了比特币的想法,才有了区块链的设计,区块链设计之初就是用来服务比特币的。</p>
<p>第二个原因,区块链的生态系统需要足够的壮大。迄今为止,比特币已经发展了9年,但是依然还未成熟,还在不断地进化,一个不成熟的系统若不能够确保“无法修改的数字账本”的稳定性,也就失去了所有的意义。</p>
<p>第三个原因,工作量证明的成本对于数字货币体系是可以接受的,对于其他行业,则需要一种有效的替代,因此也有了其他各种币。</p>
<p>第四个原因,其他应用系统不够开放。一个去中心化的系统如果不够开放,相当于搬起石头砸自己的脚。</p>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p>1.<a href="https://www.cryptocoinsnews.com/bitcoins-future-proof-of-stake-vs-proof-of-work/" target="_blank" rel="external">比特币的未来:POS vs POW</a></p>
]]></content>
<summary type="html">
<p>本篇文章能让新手直观上认识区块链,而不仅仅是纠结于算法与模型,尤其是工作量证明机制;能使有经验的同学在了解的基础上,搞清楚区块链如何解决实际问题,发挥自己的想象力,结合实际应用区块链。</p>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="blockchain" scheme="http://lpbobo.com/tags/blockchain/"/>
</entry>
<entry>
<title>聊聊区块链</title>
<link href="http://lpbobo.com/2016/04/29/%E8%81%8A%E8%81%8A%E5%8C%BA%E5%9D%97%E9%93%BE/"/>
<id>http://lpbobo.com/2016/04/29/聊聊区块链/</id>
<published>2016-04-29T00:40:58.000Z</published>
<updated>2016-05-07T15:25:05.000Z</updated>
<content type="html"><![CDATA[<p>2008年世界范围内的金融危机爆发,2009年比特币横空出世。比特币是一种点对点的电子现金系统,无需第三方信用机构介入就能确保交易的可信性,突破了传统金融体系中需要企业或机构背书的事实。作为底层实现技术,区块链大放异彩。区块链是一种去中心化的协议,是一个安全的分布式账本,交易可信性由计算机cpu的算力及密码学原理确保,无需中心化机构审核,交易不会被伪造或篡改,交易内容既可以是数字货币,也可以是股权等数字资产,能够颠覆现实世界中所有信任成本较高的产业,包括金融、股票、审计、物联网等,具备无限潜能。</p>
<a id="more"></a>
<h3 id="初识比特币"><a href="#初识比特币" class="headerlink" title="初识比特币"></a>初识比特币</h3><p>比特币是一种P2P的数字货币,在交易过程中不需要任何第三方支付系统,打个比方,就是我们在淘宝上购物时,直接把钱付给商家。作为一种数字货币,比特币具备货币的几个基本职能:s</p>
<ol>
<li>价值尺度</li>
<li>流通手段</li>
<li>贮藏手段</li>
<li>支付手段</li>
<li>世界货币</li>
</ol>
<p>数字货币与Q币等虚拟货币具有本质的不同,Q币是腾讯发行的,在腾讯的游戏平台里使用,是以腾讯的信用为担保的,消费者认同Q币在腾讯平台下的价值,但是Q币不能在其他渠道下流通,也不能够反向转换成现金。而数字货币可以用于真实世界的商品和服务交易,不受到网络虚拟空间的局限。</p>
<p>比特币大火的原因,就在于比特币不是由某一家企业或机构的信用背书的,其价值来自于基于数学体系的自证其信,核心意义就是解决了分布式节点之间如何达成共识的问题(拜占庭将军问题),不需要第三方(银行、机构等)。作为一个分布式账本,互联网上每一个账本都记录着所有的交易信息,交易的有效性来自于网络上其他节点的见证,是一个群体投票的过程。这种<strong>去信任</strong>的特性造就了比特币的与众不同。</p>
<blockquote>
<p>背书:原意表示在支票等背后签名表示支付、收到或同意转让等,表示用信用支持。</p>
<p>拜占庭将军问题:分布式节点之间如何达成共识的问题。</p>
</blockquote>
<h3 id="去信任是一种颠覆"><a href="#去信任是一种颠覆" class="headerlink" title="去信任是一种颠覆"></a>去信任是一种颠覆</h3><p>从货币的发展来看,银行就是一个货币发行机构,拥有很高的信誉程度,客户可以放心的把钱存在银行,放心的通过银行做交易,拥有庞大的可辨识客户的基础,拥有处理复杂金融规则方面的经验。我们可以把银行比作数据库,里面记录了个人所有的交易信息,由银行负责对这个数据库进行更新和验证。但是这不代表银行是完全可信的,第三方总存在不可信的可能性。</p>
<blockquote>
<p>互联网上的贸易,几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息。虽然这类系统在绝大多数情况下都运作良好,但是这类系统仍然内生性地受制于“基于信用的模式”(trust based model)的弱点。我们无法实现完全不可逆的交易,因为金融机构总是不可避免地会出面协调争端。而金融中介的存在,也会增加交易的成本,并且限制了实际可行的最小交易规模,也限制了日常的小额支付交易。并且潜在的损失还在于,很多商品和服务本身是无法退货的,如果缺乏不可逆的支付手段,互联网的贸易就大大受限。因为有潜在的退款的可能,就需要交易双方拥有信任。而商家也必须提防自己的客户,因此会向客户索取完全不必要的个人信息。而实际的商业行为中,一定比例的欺诈性客户也被认为是不可避免的,相关损失视作销售费用处理。而在使用物理现金的情况下,这些销售费用和支付问题上的不确定性却是可以避免的,因为此时没有第三方信用中介的存在。</p>
</blockquote>
<p>银行也是中介,没人从根本上喜欢中间商赚差价,去信任就意味着我们可以省去中间环节的一切开销,颠覆中介,约吗?</p>
<h3 id="比特币的诞生"><a href="#比特币的诞生" class="headerlink" title="比特币的诞生"></a>比特币的诞生</h3><blockquote>
<p>所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。杜绝回滚(reverse)支付交易的可能,这就可以保护特定的卖家免于欺诈;而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快。</p>
</blockquote>
<p>于是乎,在2008年的全球金融危机产生后,网名为中本聪的人发表了一篇论文,描述了一种点对点的电子现金系统,称作<a href="http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system" target="_blank" rel="external">比特币白皮书</a>,并在2009年创建了第一个区块Genesis Block,发布了有史以来的50个比特币。</p>
<p>在中本聪的论文中,提出了一种通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和,该系统就是安全的,为比特币的可能性提供了验证条件。</p>
<p>拥有去信任、去中心化的特性,比特币就是粉碎了信用需要第三方背书的事实,从而自证其信,其实现的机制-区块链可以被称作“创造信任的机器”。截至2016年,已经发展了7年,期间发生过许多大事件,比特币的影响力也越来越大,中国是世界上最大的比特币交易市场。</p>
<blockquote>
<p>更形象地说,比特币就是虚拟世界的真金白银,是虚拟世界的实体货币。</p>
</blockquote>
<p>比特币完全具备这种取代现有货币体系的潜力,这不是吹嘘,而是来自于其区块链技术技术的完备性。</p>
<h3 id="区块链"><a href="#区块链" class="headerlink" title="区块链"></a>区块链</h3><blockquote>
<p>区块链是一种新型去中心化的协议,能安全地存储比特币交易或其他数据,信息不可伪造和篡改,可以自动执行智能合约,无需任何中心化机构的审核,交易既可以是比特币这样的数字货币,也可以是期权、股权、版权等数字资产,区块链解决了拜占庭将军问题,大大降低了现实经济的信任成本与会计成本,重新定义了互联网时代的产权制度。</p>
</blockquote>
<h3 id="交易"><a href="#交易" class="headerlink" title="交易"></a>交易</h3><p>首先看看区块链中的基本数据元素:交易。每一个区块中包含了一组交易数据,一笔交易定义了数字货币在两个交易者间传递的情景:</p>
<p><img src="http://7fvhfe.com1.z0.glb.clouddn.com/%40%2F/wp-content/uploads/2013/11/11.png" alt=""></p>
<p>每一笔交易至少包含一个输入、一个输出,每一个输入和输出中都必须包含下图中所示的变量:</p>
<p><img src="http://8btc.com/data/attachment/portal/201412/01/094343prrlfitlmiefr9mz.png" alt=""></p>
<p>同时,每个输入都使用上一笔交易的输出作为输入,每一个输出都在等待着被下一个输入消费。</p>
<p>交易解决了钱从哪来,又到哪去的问题,每一条交易都将被串起来,交易信息都可查。在每笔交易的末尾签署下一位拥有者的公钥,收款人通过自己的私钥使用这个货币。在每笔交易的开始签署拥有者的公钥,收款人通过检查发送者的签名,就能确认交易的拥有者。</p>
<p>这种数字签名的方法,在30年前就已经被发明,而数字货币迟迟没有诞生的原因在于一直没有解决双花问题,如何确定钱没有被同时转给两个人,构成欺骗?也就是说数字货币需要在互联网上进行“传递”(我给你,你就有了,我就没有了),而这个技术难题是一直没有被解决的,区块链则在这个方向是一次技术突破。</p>
<h3 id="时间戳服务器"><a href="#时间戳服务器" class="headerlink" title="时间戳服务器"></a>时间戳服务器</h3><p>若想防止双重支付,则需要确保之前的拥有者没有对更早发生的交易实施签名。为了确保某一笔交易真实存在,唯一的方法就是获取该笔交易之前所有的交易,在去中心化的场景中,需要全网广播,所有的节点都保存相同的交易记录,记录了每一笔交易的先后顺序,对于每一笔交易而言,如果绝大多数的节点都认同该交易,则有效,就解决了双重支付的问题。</p>
<p><em>如何确保交易存在的有序、有效性?</em></p>
<p>中本聪提出的解决方案中设计了时间戳服务器。时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。</p>
<p><img src="http://7fvhfe.com1.z0.glb.clouddn.com/%40%2F/wp-content/uploads/2013/11/21.png" alt=""></p>
<p>但是需要注意的一点是存在一种双重支付的可能:欺诈者利用正常交易等待全网确认的时间实施一次欺诈交易,而被骗商家没有等到本次交易的全网认可就提供了商品交换,等到正常交易被确认后,欺诈交易将被驳回,但此时商品已被交换。这也就意味着,每次的交易成功需要全网确认后才算生效。</p>
<p><em>如何确认交易,由谁记录交易</em></p>
<p>交易广播到全网所有的矿工,矿工通过交易者的公钥简单确认交易,并记录在内存中,与此同时矿工们在不停地挖矿,想要获得记录交易的权利,而挖矿的过程即是一个工作量证明的过程,挖矿成功的人能够将交易打包到区块中,加入区块链,并获得一定数量的比特币奖励,一次挖矿的平均时间被设定为10分钟。</p>
<h3 id="工作量证明(proof-of-work)"><a href="#工作量证明(proof-of-work)" class="headerlink" title="工作量证明(proof-of-work)"></a>工作量证明(proof-of-work)</h3><p>矿工是比特币网络的计算节点,利用自己的计算机计算去竞争记录区块的权利,这个过程被称为挖矿,挖矿的过程也被称为工作量证明。</p>
<blockquote>
<p>工作量证明:对计算机而言,就是一个匹配SHA-256随机数的过程,整个过程CPU产生的工作量消耗为工作量证明。</p>
</blockquote>
<p><em>为什么要有工作量证明</em></p>
<p>工作量证明机制是最好的共识的机制。</p>
<p>在新的区块生成前,网络中会存在大量的交易待确认,这些交易中包含正常交易、欺诈交易、无效交易等,哪些交易该被记录,对于每一个矿工而言,选择不一定相同,这就需要一个合适的随机选择机制,这就是一个群体如何达到共识的问题。生物学中有一个原理叫做不利原理(the Handicap Principle),该原理可以帮助理解工作量证明。</p>
<p>产生区块的能力是计算能力的表现,这正是比特币网络所需要的,同时因为同意对下一区块产生竞争,显示了尊重社区利益而不是为一己私利操作区块,集体维护保证了整个区块链的诚实性。当然,矿工能够获取一定数量的比特币奖励作为激励,让矿工产生记账的动力。</p>
<p>工作量证明维护了区块链的诚实性,防止骗子通过分叉伪造交易;同时确保了交易信息的不可逆性,如果要篡改某个区块的交易信息,则必须完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上诚实节点的工作量,而这是不可能完成的。</p>
<p><img src="http://7fvhfe.com1.z0.glb.clouddn.com/%40%2F/wp-content/uploads/2013/11/31.png" alt=""></p>
<p>所以,工作量证明(挖矿)的过程是一个投票的过程,通过投票来替代“老大”,而具有投票权的“人”则是每一个CPU。工作量证明可以看作是不信任的互联网上达到共识的一种手段。</p>
<h3 id="交易过程描述"><a href="#交易过程描述" class="headerlink" title="交易过程描述"></a>交易过程描述</h3><p>整个过程的运行步骤如下:<br>1) 新的交易向全网进行广播;<br>2) 每一个节点都将收到的交易信息纳入一个区块中;<br>3) 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;<br>4) 当一个节点找到了一个工作量证明,它就向全网进行广播;<br>5) 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;<br>6) 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区块的随机散列值。</p>
<p>节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局(tie)的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。</p>
<p>所谓“新的交易要广播”,实际上不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。</p>
<h3 id="颠覆领域"><a href="#颠覆领域" class="headerlink" title="颠覆领域"></a>颠覆领域</h3><p>区块链是基于密码学与计算机算力的共识网络,由区块链技术支持的电子账本是无差错、不可篡改的可靠系统,大大降低信用评估所带来的高额成本,对支付、清算、交易、确权等有深刻影响,颠覆信任的浪潮即将席卷这些行业:</p>
<blockquote>
<p>银行结算:R3CEV</p>
<p>股票证券:小蚁</p>
<p>物联网:ADEPT</p>
<p>智能合约:hyperledger,ethereum(智能合约编程平台)</p>
<p>审计公证:Factom</p>
<p>供应链:Vechain</p>
<p>……</p>
</blockquote>
<p>一个通用的区块链系统具有如下的组织层次:</p>
<p><img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_science_blockchain.png" alt=""></p>
<p>在一个由区块链实现的系统中,实体E1到E2之间数据的传递是不可逆的,整个网络系统没有中心机构,由分布式的网络节点投票确定交易的真实性。通过区块链的开发平台,可以构建出无数类型的去信任应用。</p>
<p>以ADEPT为例,ADEPT是IBM与三星合作开发的区块链物联网系统,底层是以太坊(Ethereum)平台构建<br>的区块链系统,上一层是telehash构成的通信协议层,顶层是BitTorrent构建的数据传输层。</p>
<p>以区块链为中心,ADEPT能够实现物理设备的自治化,在整个物联网系统中,设备与人之间的关系是平等的,设备能够通过记录数据追踪到不同设备之间的关系,设备与人之间的关系,人与人之间的关系,从而实现授权的安全转移,如门锁可以安全地与手机交互,或者与他人的手机交互。</p>
<p>从物联网的角度出发,区块链能够减少设备与云端的交互,使设备尽可能避免维护,大大降低云控制中心运维带来的成本,同时,设备变得更加灵活,设备资源变得更具有流通性。</p>
<h3 id="区块链助力银行自助渠道"><a href="#区块链助力银行自助渠道" class="headerlink" title="区块链助力银行自助渠道"></a>区块链助力银行自助渠道</h3><p>紫金公司作为金融自助服务领域的领军企业,致力为银行客户提供低成本高质量的解决方案,凭借多年的行业积累,针对用户痛点对症下药。</p>
<p>目前,银行的网络相对封闭,自助设备与客户之间依旧是一种交易型的关系。通常情况下,一个银行的营业网点部署了大量的设备,包括:ATM、VTM、BSM、发卡机、柜员机、排号机、服务机器人、查询终端等等,尽管连接统一的银行后台,但这些设备之间的弱连接性使得它们并未成为一个统一的服务实体。</p>
<p>银行的服务模式在转变,电子渠道与自助渠道是两个关键点,自助渠道的服务模式应该走在转变浪潮的前端。如何让设备更加智能,从交易型向服务型转变是问题的关键,能不能真的创造出一个无人管理的智慧银行呢?</p>
<p>从设备运维的角度分析,一个无人的智慧银行必定是一个分布式网络架构,区块链技术可以为设备自治提供基础。在一个区块链构成的去中心网络中,运维的成本会大大降低,根据业务流量的因素,设备可以改变自身的服务状态,在睡眠、运行、停机等状态间切换,而无需人工干预。如果出现设备异常,整个网络可以应对,保留正常服务或整台设备进入休眠状态。</p>
<p>从设备服务的角度分析,分布式网络中所有资源实现共享,对自助设备而言便是硬件资源共享、交易共享、服务状态共享,这些状态或资源可以在节点间实现安全转移。设想这样一个场景:一台ATM机器无法打印凭条,客户办理交易完成后,机器将打印凭条的任务转交给可用的机器,完成打印凭条服务的转移。</p>
<p>以上的两个角度仅仅是区块链自助行业应用的冰山一角,去中心的可信网络,由于其成本优势,势必会被逐渐的接纳和采用。</p>
<p>当然,要完全实现一个无人的智慧银行还有很多问题要解决,尽管客户体验越来越重要,但交易安全性还是首要考量,因此生物识别等技术是客户体验与安全性完美结合的首要前提。同时,不可忽略的是银行电子化对自助渠道的影响,在中心城市,现金的需求量逐渐减少,那么以现金业务为中心的自助服务如何提供更多优质的金融服务是个重要的问题。银行业转型背负着沉重的包袱,自助渠道需要在变革中一步一步引导消费者,路漫漫其修远兮,吾将上下而求索。</p>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol>
<li><a href="http://www.8btc.com/what-is-blockchain" target="_blank" rel="external">区块链是什么</a></li>
<li><a href="https://www.oreilly.com/ideas/understanding-the-blockchain" target="_blank" rel="external">理解区块链</a></li>
<li><a href="https://www.zhihu.com/question/27687960" target="_blank" rel="external">知乎-区块链</a></li>
<li><a href="https://www.okcoin.cn/t-1010486.html" target="_blank" rel="external">从中本聪的白皮书来重新审视区块链</a></li>
<li><a href="http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system" target="_blank" rel="external">比特币白皮书(中文)</a></li>
<li><a href="https://bitcoin.org/bitcoin.pdf" target="_blank" rel="external">比特币白皮书(英文)</a></li>
<li><a href="http://8btc.com/article-1759-1.html" target="_blank" rel="external">比特币交易概念</a></li>
<li><a href="http://www.8btc.com/the-proof-of-work-concept" target="_blank" rel="external">工作量证明概念</a></li>
<li><a href="http://blog.codinglabs.org/articles/bitcoin-mechanism-make-easy.html" target="_blank" rel="external">一个故事告诉你比特币的原理及运作机制</a></li>
<li><a href="http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter08.html" target="_blank" rel="external">挖矿与共识</a></li>
<li><a href="http://finance.ce.cn/rolling/201603/28/t20160328_9859176.shtml" target="_blank" rel="external">区块链助力上海国际金融中心</a></li>
<li><a href="http://36kr.com/p/5039777.html" target="_blank" rel="external">区块链成为金融领域的tcp/ip</a></li>
<li><a href="http://happypeter.github.io/bitcoin_basics/book/" target="_blank" rel="external">区块链细节讲解</a></li>
<li><a href="http://8btc.com/article-2039-1.html" target="_blank" rel="external">什么是公有链</a></li>
<li><a href="http://8btc.com/thread-31033-1-1.html" target="_blank" rel="external">区块链的私有链、混合链开源项目介绍</a></li>
</ol>
]]></content>
<summary type="html">
<p>2008年世界范围内的金融危机爆发,2009年比特币横空出世。比特币是一种点对点的电子现金系统,无需第三方信用机构介入就能确保交易的可信性,突破了传统金融体系中需要企业或机构背书的事实。作为底层实现技术,区块链大放异彩。区块链是一种去中心化的协议,是一个安全的分布式账本,交易可信性由计算机cpu的算力及密码学原理确保,无需中心化机构审核,交易不会被伪造或篡改,交易内容既可以是数字货币,也可以是股权等数字资产,能够颠覆现实世界中所有信任成本较高的产业,包括金融、股票、审计、物联网等,具备无限潜能。</p>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="blockchain" scheme="http://lpbobo.com/tags/blockchain/"/>
</entry>
<entry>
<title>金融自助领域的创新思路</title>
<link href="http://lpbobo.com/2016/04/26/%E9%87%91%E8%9E%8D%E8%87%AA%E5%8A%A9%E9%A2%86%E5%9F%9F%E7%9A%84%E5%88%9B%E6%96%B0%E6%80%9D%E8%B7%AF/"/>
<id>http://lpbobo.com/2016/04/26/金融自助领域的创新思路/</id>
<published>2016-04-26T02:21:00.000Z</published>
<updated>2016-05-26T15:16:20.000Z</updated>
<content type="html"><![CDATA[<p>金融自助?就是以ATM为代表的啦。</p>
<a id="more"></a>
<p>在当下互联网时代,银行出于成本和效率的考虑,一定会着力于自助化和电子化。</p>
<p>在自助渠道方面,ATM机器承担着重要的角色,通常以群集部署于营业网点,或以单台机器部署于公共场所。自助设备的运营成本和维护成本相对较高,但相比一个重型的柜台式服务网点,对银行而言还是自助设备能够节约成本。但以目前自助设备的水平,仅支持功能型的业务交易,使广大群众对ATM等设备还停留在取现、存款上,即使开发了新的功能,也无法落地实施。</p>
<p>要打造以自助设备为主的轻型无人网点,需要让机器变得更加智能。</p>
<p>ATM的战略定位不仅限于传统的取款、存款、转账等业务,可以提供第三方服务,如代缴费,缴罚款,也可以提供增值业务,如电影票、门票,ATM是一个培养客户的服务中心。</p>
<p>要满足这样一个愿景,有几个方面可以探索:</p>
<ol>
<li>运维角度:统一的机器服务状态后台监控,为运维人员的智能分配提供数据来源;一个网点内部机器的相对自治,提供统一的对外服务。</li>
<li>用户体验:根据客户画像提供个性化的服务界面及服务流程,结合服务地点的环境因素,提供增值业务的推广功能,最后能将数据反馈到银行,进行数据的二次挖掘</li>
<li>与移动设备交互:手机与自助设备均基于LBS,可以提供例如消息推送,特色业务推广等服务,可以设想一个A把钱放到C机器上,只有B能够通过私钥去取,基本就实现了一个异地现金汇款的业务。</li>
</ol>
<p>最后还要提一点,类似magic,FB推的虚拟助理这样的客服机器人,在金融领域应用很广,能够扩大服务范围,提升服务体验,同时还可以结合现有的业务资源,与呼叫中心结合,这个方向公司应该深挖一下。</p>
]]></content>
<summary type="html">
<p>金融自助?就是以ATM为代表的啦。</p>
</summary>
<category term="Science" scheme="http://lpbobo.com/categories/Science/"/>
<category term="finance" scheme="http://lpbobo.com/tags/finance/"/>
</entry>
<entry>
<title>jdk1.8 HashMap源码分析</title>
<link href="http://lpbobo.com/2016/04/25/jdk1.8%20Hashmap%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/"/>
<id>http://lpbobo.com/2016/04/25/jdk1.8 Hashmap源码分析/</id>
<published>2016-04-25T15:42:00.000Z</published>
<updated>2016-05-07T15:19:14.000Z</updated>
<content type="html"><![CDATA[<p>根据jdk1.8的源码,分析HashMap底层实现机制,研究HashMap的数据结构的设计。</p>
<a id="more"></a>
<p><img src="http://7xlu9w.com1.z0.glb.clouddn.com/mitang_science_Hashmap.png" alt=""><br>本篇文章所有源码均来自jdk1.8版本,将在后续博客中与之前版本进行对比。</p>
<h2 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h2><p>Hashmap类的定义如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> **<span class="title">HashMap</span><<span class="title">K</span>,<span class="title">V</span>>** <span class="keyword">extends</span> <span class="title">AbstractMap</span><<span class="title">K</span>,<span class="title">V</span>> <span class="keyword">implements</span> <span class="title">Map</span><<span class="title">K</span>,<span class="title">V</span>>, <span class="title">Serializable</span>, <span class="title">Cloneable</span></span></div></pre></td></tr></table></figure>
<blockquote>
<p>AbstractMap缩减了HashMap需要实现的接口集合,Hashmap是可以序列化的,是可以拷贝复制的</p>
</blockquote>
<h2 id="构造函数"><a href="#构造函数" class="headerlink" title="构造函数"></a>构造函数</h2><p>默认构造器,初始化bucket数目为16,负载因子为0.75:<code>Hashmap()</code></p>
<p>initCapacity表示bucket的数量,在预知key的数量时,能够有效避免扩容,提高性能:<code>Hashmap(int initCapacity)</code></p>
<p>loadFactor表示负载因子,衡量散列表的空间使用程度,用于平衡散列表的空间利用率和查找时间:<code>Hashmap(int initCapacity, float loadFactor)</code></p>
<p>前两种构造函数实际均调用第三种:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="title">HashMap</span><span class="params">(<span class="keyword">int</span> initialCapacity, <span class="keyword">float</span> loadFactor)</span> </span>{</div><div class="line"> <span class="keyword">if</span> (initialCapacity < <span class="number">0</span>)</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Illegal initial capacity: "</span> + initialCapacity);</div><div class="line"> <span class="keyword">if</span> (initialCapacity > MAXIMUM_CAPACITY)</div><div class="line"> initialCapacity = MAXIMUM_CAPACITY;</div><div class="line"> <span class="keyword">if</span> (loadFactor <= <span class="number">0</span> || Float.isNaN(loadFactor))</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Illegal load factor: "</span> + loadFactor);</div><div class="line"> <span class="keyword">this</span>.loadFactor = loadFactor;</div><div class="line"> <span class="keyword">this</span>.threshold = tableSizeFor(initialCapacity);</div><div class="line">}</div></pre></td></tr></table></figure>
<p>其中,<code>threshold</code>表示需要resize数组后的大小,值为大于initCapacity的最小的2^n(比如15对应的临界值为16),当数组的实际大小超过initCapacity时,将会扩容至threshold。</p>
<p>第四种构造函数为拷贝构造:<code>HashMap(Map<? extends K, ? extends V> m)</code></p>
<h2 id="数据结构"><a href="#数据结构" class="headerlink" title="数据结构"></a>数据结构</h2><p>hashmap的底层基本数据结构是Node对象构成的数组,定义如下:<code>transient Node<K,V>[] table</code></p>
<p>其中Node是key-value的存储结构,并包含指向下一个Node节点的指针,从而当碰撞发生时构成一条链,基本定义如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">static</span> <span class="class"><span class="keyword">class</span> <span class="title">Node</span><<span class="title">K</span>, <span class="title">V</span>> <span class="keyword">implements</span> <span class="title">Map</span>.<span class="title">Entry</span><<span class="title">K</span>, <span class="title">V</span>> </span>{</div><div class="line"> ...</div><div class="line"> Node(<span class="keyword">int</span> hash, K key, V value, Node<K, V> next) {}</div><div class="line"> ...</div><div class="line">}</div></pre></td></tr></table></figure>
<p>当链表长度超过8时,链表将转换为红黑树,其定义如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">static</span> <span class="keyword">final</span> <span class="class"><span class="keyword">class</span> <span class="title">TreeNode</span><<span class="title">K</span>,<span class="title">V</span>> <span class="keyword">extends</span> <span class="title">LinkedHashMap</span>.<span class="title">Entry</span><<span class="title">K</span>,<span class="title">V</span>> </span>{</div><div class="line"> ...</div><div class="line"> TreeNode(<span class="keyword">int</span> hash, K key, V val, Node<K,V> next) {}</div><div class="line"> ...</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="关键源码分析"><a href="#关键源码分析" class="headerlink" title="关键源码分析"></a>关键源码分析</h2><ul>
<li>计算key的hash值:</li>
</ul>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> <span class="title">hash</span><span class="params">(Object key)</span> </span>{</div><div class="line"> <span class="keyword">int</span> h;</div><div class="line"> <span class="keyword">return</span> (k == <span class="keyword">null</span>) ? <span class="number">0</span>: (h = key.hashCode()) ^ (h >>> <span class="number">16</span>);</div><div class="line">}</div></pre></td></tr></table></figure>
<blockquote>
<p>java中hashcode为32位,默认的table大小为16。为了能够将hashcode映射到table空间内,java采取了取hashcode的低位值做法<code>(table.length-1) & hashcode</code>,那么就意味着hashcode的高位值在映射过程中不起作用,这很容易发生碰撞。因此,通过<code>>>>16</code>将hashcode的高位与低位进行异或,合并高位与地位信息,使得映射均匀。</p>
</blockquote>
<ul>
<li>计算扩容大小:</li>
</ul>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> <span class="title">tableSizeFor</span><span class="params">(<span class="keyword">int</span> cap)</span> </span>{</div><div class="line"> <span class="keyword">int</span> n = cap - <span class="number">1</span>;</div><div class="line"> n |= n >>> <span class="number">1</span>;</div><div class="line"> n |= n >>> <span class="number">2</span>;</div><div class="line"> n |= n >>> <span class="number">4</span>;</div><div class="line"> n |= n >>> <span class="number">8</span>;</div><div class="line"> n |= n >>> <span class="number">16</span>;</div><div class="line"> <span class="keyword">return</span> (n < <span class="number">0</span>) ? <span class="number">1</span> : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + <span class="number">1</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<blockquote>
<p>tableSizeFor是一个求解大于cap的最小2^n算法,通过填充cap所有低位值为1,然后+1实现。</p>
</blockquote>
<ul>