-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
556 lines (324 loc) · 134 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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>之初 Blog</title>
<subtitle>The harder, the more fortunate</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://zhichuwy.cn/"/>
<updated>2019-08-22T17:33:03.478Z</updated>
<id>https://zhichuwy.cn/</id>
<author>
<name>之初</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>休闲一刻</title>
<link href="https://zhichuwy.cn/%E9%9A%8F%E7%AC%94-%E4%BC%91%E9%97%B2%E4%B8%80%E5%88%BB/"/>
<id>https://zhichuwy.cn/随笔-休闲一刻/</id>
<published>2019-08-23T00:45:01.000Z</published>
<updated>2019-08-22T17:33:03.478Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">休闲一刻 给生活,加点乐趣!</font></p></div><a id="more"></a><h3 id="绕口令"><a href="#绕口令" class="headerlink" title="绕口令"></a>绕口令</h3><blockquote><p>发废话会花话费,回发废话话费发,<br>发废话花费话费会后悔,回发废话会费话费,<br>花费话费回发废话会耗费话费。</p></blockquote><hr><h3 id="joke"><a href="#joke" class="headerlink" title="joke"></a>joke</h3><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><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">今天出门坐公交车,车来了,一掏兜,忘带钱了,正一筹莫展的时候,一位要钱的乞丐来了,他把罐子伸到我面前,</span></span><br><span class="line"><span class="comment">晃了晃里面的硬币,我摇了摇头,他还是坚持的晃了晃罐子,那一刻,我的眼睛湿润了,我冲他点点头,</span></span><br><span class="line"><span class="comment">从里面拿了一块钱上了缓缓移动的公交车,上了车,我发现他追着车大声喊些什么,我再也忍不住了,猛的打开窗户,</span></span><br><span class="line"><span class="comment">大声喊到:谢谢你大哥,一块钱够了,这不是空调车,说完我关上车窗,心情久久不能平静。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">作业多的都可以起一打牌了,“一对语文卷子!”“不要!”“我要!四张英语卷子炸了!”“要不起,</span></span><br><span class="line"><span class="comment">继续走”“三张历史卷子带一张政治卷子”“要不上!”“一堆数学卷子,报单了!”“两个综合试卷,王炸!”</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">一年冬天,妹子发烧了,脸红扑扑,她去诊所看,医生一进来用手摸她额头,摸了30秒换另外一只手,</span></span><br><span class="line"><span class="comment">然后医生说:真暖和……</span></span><br><span class="line"><span class="comment">医生:保大人还是孩子。我:(沉默一会儿)保大人吧。医生:哈哈骗你的俩都没了。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">去吃火锅,看见火锅店的墙上提醒,🐑羊是自己养的,🍀菜是自己种的油是自己榨的,提醒顾客放心使用。</span></span><br><span class="line"><span class="comment">买单的时候我,悄悄告诉老板,💰钱是我自己印的,请放心使用🌚, </span></span><br><span class="line"><span class="comment">老板追了我好几条街没追上,真有意思,腿是我自己长的,想往哪里跑就往哪里跑,</span></span><br><span class="line"><span class="comment">🐷陌生人,如果你笑了,那我祝你2019年一切顺利</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">虽然我不会下棋,但我看的出来白棋很被动啊</span></span><br><span class="line"><span class="comment">┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ </span></span><br><span class="line"><span class="comment">├┼┼┼┼●●┼┼┼┼┼┼┼┼┤ </span></span><br><span class="line"><span class="comment">├┼┼┼●┼┼●┼┼┼┼┼┼┼┤ </span></span><br><span class="line"><span class="comment">├┼┼┼●┼┼●┼┼┼┼┼┼┼┤ </span></span><br><span class="line"><span class="comment">├┼┼┼┼●●┼●●┼┼┼┼┼┤</span></span><br><span class="line"><span class="comment">├┼┼┼┼┼┼●┼┼●┼┼┼┼┤ </span></span><br><span class="line"><span class="comment">├┼○○┼┼┼●┼┼┼●┼┼┼┤ </span></span><br><span class="line"><span class="comment">├○┼┼○○●○○○●●●┼┼┤ </span></span><br><span class="line"><span class="comment">├○┼┼○○┼┼┼○┼┼●┼┼┤ </span></span><br><span class="line"><span class="comment">├┼○○┼○┼┼┼○┼┼●┼┼┤ </span></span><br><span class="line"><span class="comment">├┼┼┼┼○┼┼┼○○○●●●┤ </span></span><br><span class="line"><span class="comment">└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">村里有个傻子,大家都喜欢捉弄他。有一天,一个人问他:“我有一张五块的和一张一块的,你要哪个?”</span></span><br><span class="line"><span class="comment">傻子说:“一块的”那个人大笑道:“你真傻啊!”傻子没说话。后来许多人都来问他这个问题,傻子依旧回答“一块的”</span></span><br><span class="line"><span class="comment">渐渐的,每天都有很多人来问他,笑话他后给他钱来在笑。终于有一天,傻子的爸爸问:“你为什么不选大的呢?”</span></span><br><span class="line"><span class="comment">傻子说:“如果我选五块的,以后谁还会给我钱呢?”所有人都沉默了。当你笑别人是傻子的时候,</span></span><br><span class="line"><span class="comment">其实你才是那个最可笑的大傻子</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">语文课上。 鲁迅写下:哈哈。 语文老师:好!实在太好了!第一个“哈”字,表达了作者对当时黑暗社会的苦笑与无奈,</span></span><br><span class="line"><span class="comment">第二个“哈”字,笔锋一转,作者意图传递一种积极乐观的情绪给读者,警惕国民,必须清醒,冲破旧制度的枷锁。</span></span><br><span class="line"><span class="comment">而句末的句号,则运用得出神入化。句号表示结束,作者用简单一个句号,便充分强烈表达出要结束旧制度的想法。 </span></span><br><span class="line"><span class="comment">鲁迅写下:老师,你有问过我是怎么想的么? 语文老师:棒!真的太棒了!作者用“老师”开头,说明其对文化的敬畏,</span></span><br><span class="line"><span class="comment">也符合作者弃医从文的选择。而一句“你有问过我是怎么想的么”,一语双关。一方面是对社会的拷问,对社会压迫底层</span></span><br><span class="line"><span class="comment">人民表达强烈的愤慨;另一方面,则是对麻木的国民的责问,责问人们为何从不敢说这句话。提醒国民要保持思考独立,</span></span><br><span class="line"><span class="comment">保持质疑的精神,切勿人云亦云。也照应了开头,强调文化力量的可贵。这种找不到任何瑕疵的写作手法,值得大家学习。</span></span><br><span class="line"><span class="comment">鲁迅写下:有病! 语文老师:对!说得太对了!作者用铿锵有力的两个字,用近乎呐喊的语气,精辟深刻揭露了当时</span></span><br><span class="line"><span class="comment">社会的问题所在:有病!社会病在腐朽落后,国民腐朽在麻木昏睡。这也为作者后来写《药》埋下了伏笔。前后呼应,</span></span><br><span class="line"><span class="comment">滴水不漏,天衣无缝。鲁迅写下:呵呵。语文老师:绝!真是太绝了!作者用尖锐冰冷的笔调,精简又准确地表达了</span></span><br><span class="line"><span class="comment">对当时那个吃人的社会以及阿q们的控诉。所谓谈话止于呵呵,因此这二字也表明作者在必须改变社会现状和人们</span></span><br><span class="line"><span class="comment">麻木思想的问题上,没有任何商量的余地,坚决而果断。好文! 鲁迅写下:...... 语文老师:高!相当的高啊!</span></span><br><span class="line"><span class="comment">面对这个病态的社会。千言万语,汇成一串省略号。看似什么都没讲,但又可以看作讲了无数话。并且,作者在表达</span></span><br><span class="line"><span class="comment">自己态度的同时,又给与读者想象的空间。一千个人心中,有一千种对社会的看法。这也正是作者想表达的意思:</span></span><br><span class="line"><span class="comment">人人独立思考,才能不麻木,才能救社会于危难.....</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">一天, 老师走进课堂,学生们一齐起立喊:“老师早上好!”</span></span><br><span class="line"><span class="comment">老师愤愤地说:“只叫早上好?那我下午呢?难道就不好了吗?”</span></span><br><span class="line"><span class="comment">于是学生们又一齐喊:“老师下午好!”</span></span><br><span class="line"><span class="comment">老师又愤愤地说:“那我晚上呢?”</span></span><br><span class="line"><span class="comment">学生们又一齐喊:“老师晚上也好!”</span></span><br><span class="line"><span class="comment">老师点点头说道:“这样才行,现在重新喊一遍!”</span></span><br><span class="line"><span class="comment">学生们一齐喊:“老师早上好,下午好,晚上也好!”</span></span><br><span class="line"><span class="comment">老师说道:“坐下!今天我们要复习反义词,我们这样练习,我说一句,你们大声说出反义词。现在开始。”</span></span><br><span class="line"><span class="comment">老师:“今天天气很好。”</span></span><br><span class="line"><span class="comment">学生:“今天天气很坏。”</span></span><br><span class="line"><span class="comment">老师:“到处阳光明媚。”</span></span><br><span class="line"><span class="comment">学生:“到处阴云密布。”</span></span><br><span class="line"><span class="comment">老师:“马路上人山人海。”</span></span><br><span class="line"><span class="comment">学生:“马路上空无一人。”</span></span><br><span class="line"><span class="comment">老师:“年轻。”</span></span><br><span class="line"><span class="comment">学生:“年老。”</span></span><br><span class="line"><span class="comment">老师:“站立。”</span></span><br><span class="line"><span class="comment">学生:“躺倒”</span></span><br><span class="line"><span class="comment">老师:“有个年轻人站立在路上。”</span></span><br><span class="line"><span class="comment">学生:“有个年老人躺倒在路上。”</span></span><br><span class="line"><span class="comment">老师:“我捡到一元钱。”</span></span><br><span class="line"><span class="comment">学生:“我丢了一元钱。”</span></span><br><span class="line"><span class="comment">老师:“我捡到一元钱,交给老师。”</span></span><br><span class="line"><span class="comment">学生:“我丢了一元钱,去偷老师。”</span></span><br><span class="line"><span class="comment">老师:“错误,不能这样说!”</span></span><br><span class="line"><span class="comment">学生:“正确,应该这样说!”</span></span><br><span class="line"><span class="comment">老师:“错误。”</span></span><br><span class="line"><span class="comment">学生:“正确。”</span></span><br><span class="line"><span class="comment">老师:“这不行,这是违法行为!”</span></span><br><span class="line"><span class="comment">学生:“这可以,这是合法行为!”</span></span><br><span class="line"><span class="comment">老师:“我说错误。”</span></span><br><span class="line"><span class="comment">学生:“我们说正确。”</span></span><br><span class="line"><span class="comment">老师:“听老师的,老师说的才是正确!”</span></span><br><span class="line"><span class="comment">学生:“听我们的,老师说的都是错误!”</span></span><br><span class="line"><span class="comment">老师:“你们愚蠢。”</span></span><br><span class="line"><span class="comment">学生:“我们聪明。”</span></span><br><span class="line"><span class="comment">老师:“停止!”</span></span><br><span class="line"><span class="comment">学生:“继续!”</span></span><br><span class="line"><span class="comment">老师:“你们现在停止!别说了!”</span></span><br><span class="line"><span class="comment">学生:“我们现在继续!还要说!”</span></span><br><span class="line"><span class="comment">老师:“你们这些蠢猪,我说停止!”</span></span><br><span class="line"><span class="comment">学生:“我们都是天才,我们说继续!”</span></span><br><span class="line"><span class="comment">老师:“你们听老师的!”</span></span><br><span class="line"><span class="comment">学生:“老师听我们的!”</span></span><br><span class="line"><span class="comment">老师:“学生都得听老师的!”</span></span><br><span class="line"><span class="comment">学生:“老师都得听学生的!”</span></span><br><span class="line"><span class="comment">老师:“现在你们停止练习!”</span></span><br><span class="line"><span class="comment">学生:“现在我们继续练习!”</span></span><br><span class="line"><span class="comment">老师:“你们没完没了了吗?”</span></span><br><span class="line"><span class="comment">学生:“我们有始有终的呀!”</span></span><br><span class="line"><span class="comment">老师:“那你们就停止!蠢猪!”</span></span><br><span class="line"><span class="comment">学生:“那我们该继续!天才!”</span></span><br><span class="line"><span class="comment">老师:“这节课还上不上了?”</span></span><br><span class="line"><span class="comment">学生:“老师再见!”</span></span><br><span class="line"><span class="comment">然后老师就倒在地上吐血</span></span><br><span class="line"><span class="comment">秀</span></span><br><span class="line"><span class="comment">天秀</span></span><br><span class="line"><span class="comment">陈独秀</span></span><br><span class="line"><span class="comment">蒂花之秀</span></span><br><span class="line"><span class="comment">造化钟神秀</span></span><br><span class="line"><span class="comment">你怎么这么秀</span></span><br><span class="line"><span class="comment">维多利亚展示秀</span></span><br><span class="line"><span class="comment">吾何时能及入之秀</span></span><br><span class="line"><span class="comment">有果汁而无不及之秀</span></span><br><span class="line"><span class="comment">我滴乖乖你怎么这么秀</span></span><br><span class="line"><span class="comment">比陈独秀还秀的蒂花之秀</span></span><br><span class="line"><span class="comment">汝何以的此之过风卷残云秀</span></span><br><span class="line"><span class="comment">哔哩哔哩是我的秀才是真正秀</span></span><br><span class="line"><span class="comment">我怎么样才可以变得和你一样秀</span></span><br><span class="line"><span class="comment">世界那么大你怎么不出去走走之秀</span></span><br><span class="line"><span class="comment">木吉鬼布成绝向一生功名全给秀</span></span><br><span class="line"><span class="comment">天之蕉子的勾股定理的尻之秀</span></span><br><span class="line"><span class="comment">看那菊花爆满山的菊花之秀</span></span><br><span class="line"><span class="comment">吔屎啦梁非凡的刘醒之秀</span></span><br><span class="line"><span class="comment">李云龙的老婆秀芹的秀</span></span><br><span class="line"><span class="comment">求求你了啊不要再秀</span></span><br><span class="line"><span class="comment">真的不知道该咋秀</span></span><br><span class="line"><span class="comment">米兰国际时装秀</span></span><br><span class="line"><span class="comment">湖南台真人秀</span></span><br><span class="line"><span class="comment">中国梦想秀</span></span><br><span class="line"><span class="comment">山清水秀</span></span><br><span class="line"><span class="comment">年代秀</span></span><br><span class="line"><span class="comment">地秀</span></span><br><span class="line"><span class="comment">秀</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">休闲一刻 给生活,加点乐趣!</font></p></div>
</summary>
<category term="之初-随笔" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E9%9A%8F%E7%AC%94/"/>
<category term="休闲一刻" scheme="https://zhichuwy.cn/tags/%E4%BC%91%E9%97%B2%E4%B8%80%E5%88%BB/"/>
<category term="给生活加点乐趣" scheme="https://zhichuwy.cn/tags/%E7%BB%99%E7%94%9F%E6%B4%BB%E5%8A%A0%E7%82%B9%E4%B9%90%E8%B6%A3/"/>
</entry>
<entry>
<title>Fiddler</title>
<link href="https://zhichuwy.cn/%E7%BD%91%E7%BB%9C-Fiddler/"/>
<id>https://zhichuwy.cn/网络-Fiddler/</id>
<published>2019-08-22T23:16:44.000Z</published>
<updated>2019-08-24T14:52:28.463Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">兴趣是最好的老师,有待深入学习网络知识!</font></p></div><a id="more"></a><h3 id="手机锁屏杂志图片失败-可能与服务端认证有关"><a href="#手机锁屏杂志图片失败-可能与服务端认证有关" class="headerlink" title="手机锁屏杂志图片失败(可能与服务端认证有关)"></a>手机锁屏杂志图片失败(可能与服务端认证有关)</h3><p>获取的URL无内容<br><a href="https://opponews.oppomobile.com/" target="_blank" rel="noopener">https://opponews.oppomobile.com/</a><br><a href="http://data.ads.oppomobile.com/proxy/strategy/" target="_blank" rel="noopener">http://data.ads.oppomobile.com/proxy/strategy/</a></p><hr><h3 id="音乐软件部分成功"><a href="#音乐软件部分成功" class="headerlink" title="音乐软件部分成功"></a>音乐软件部分成功</h3><p>网易云音乐免费下载<br>非VIP的听不了抓不到包</p><hr><h3 id="视频软件失败"><a href="#视频软件失败" class="headerlink" title="视频软件失败"></a>视频软件失败</h3><p>软件设置代理后,大部分视频软件无法使用<br>爱奇艺视频封面都不显示,但是广告可以抓到,<br>正片好像没法下载,可能与被分片+加密有关</p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">兴趣是最好的老师,有待深入学习网络知识!</font></p></div>
</summary>
<category term="之初-工具" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E5%B7%A5%E5%85%B7/"/>
<category term="Fiddler" scheme="https://zhichuwy.cn/tags/Fiddler/"/>
<category term="抓手机API" scheme="https://zhichuwy.cn/tags/%E6%8A%93%E6%89%8B%E6%9C%BAAPI/"/>
</entry>
<entry>
<title>Windows10重装之旅</title>
<link href="https://zhichuwy.cn/%E9%9A%8F%E7%AC%94-%E5%85%B3%E4%BA%8EWindows10/"/>
<id>https://zhichuwy.cn/随笔-关于Windows10/</id>
<published>2019-08-21T22:31:57.000Z</published>
<updated>2019-08-22T17:34:02.229Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">没事别瞎搞系统,心累~</font></p></div><a id="more"></a><blockquote><p>养成好的使用习惯:设置还原点+每日云备份文件<br>不可信来源破解软件扔虚拟机里去玩!</p></blockquote><h2 id="Windows10重装之旅"><a href="#Windows10重装之旅" class="headerlink" title="Windows10重装之旅"></a>Windows10重装之旅</h2><h3 id="为什么重装系统?"><a href="#为什么重装系统?" class="headerlink" title="为什么重装系统?"></a>为什么重装系统?</h3><p>有个xx想的笔记本,多个软件开启下休眠,间隔较长时间后再开机:<br>default boot device missing or boot failed…(开机时连续按delete键 or 重新开机)<br>可能原因<br>软件因素:导致OS引导错误(将某些破解软件卸载删除干净,…)<br>硬件因素:天气潮湿等导致主板电路故障,硬盘损坏,…(使用后放入电脑袋,保持硬盘剩余空间充足…)</p><p>重装系统后得出结论:电脑硬件故障(轻度使用2年…) byebye 某想!</p><hr><h3 id="干货在这"><a href="#干货在这" class="headerlink" title="干货在这"></a>干货在这</h3><p>UEFI与Legacy BIOS两种启动模式详解<br><a href="https://www.cnblogs.com/sddai/p/7739567.html" target="_blank" rel="noopener">https://www.cnblogs.com/sddai/p/7739567.html</a><br>启动方式:UEFI与Legacy U启动<br>启动流程:BIOS 硬盘分区记录表 Bootmgr …</p><p>NTFS FAT 4G</p><p>用户组策略 ISO-EFI文件</p><p>Regedit注册表 netplwiz修改用户名</p><hr><h2 id="关于Windows10"><a href="#关于Windows10" class="headerlink" title="关于Windows10"></a>关于Windows10</h2><h3 id="WiFi不可用修复方法"><a href="#WiFi不可用修复方法" class="headerlink" title="WiFi不可用修复方法"></a>WiFi不可用修复方法</h3><p>设备管理器:扫描硬件改动<br>控制面板程序更改:高通a11c 软件修复(修复条件不满足,退出,WiFi已重置)<br>忘记网络:重新输入密钥</p><hr><h3 id="Windows资源管理器占用文件无法删除"><a href="#Windows资源管理器占用文件无法删除" class="headerlink" title="Windows资源管理器占用文件无法删除"></a>Windows资源管理器占用文件无法删除</h3><p>打开任务管理器<br>结束任务”Windows资源管理器”<br>新建任务”cmd”<br>在cmd中进入待删除文件路径,”del file”<br>新建任务”explorer”</p><hr><h3 id="虚拟桌面快捷键"><a href="#虚拟桌面快捷键" class="headerlink" title="虚拟桌面快捷键"></a>虚拟桌面快捷键</h3><blockquote><p>Windows性能设置(虚拟桌面切换时 秒切无延迟卡顿)<br>右击我的电脑->高级系统设置->性能设置-><br>视觉效果自定义->取消最后一项(再最大化最小化时显示窗口动画)</p></blockquote><p>Ctrl + Win + ←<br>Ctrl + Win + →<br>Ctrl + Win + D 新建虚拟桌面<br>Ctrl + Win + F4 删除虚拟桌面 切换到左侧桌面 任务内容左移</p><p>Win + Tab 时间线</p><p>Win + V 剪贴板历史记录</p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">没事别瞎搞系统,心累~</font></p></div>
</summary>
<category term="之初-随笔" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E9%9A%8F%E7%AC%94/"/>
<category term="Windows10 Home" scheme="https://zhichuwy.cn/tags/Windows10-Home/"/>
<category term="系统启动流程" scheme="https://zhichuwy.cn/tags/%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B/"/>
<category term="BIOS启动" scheme="https://zhichuwy.cn/tags/BIOS%E5%90%AF%E5%8A%A8/"/>
<category term="U盘启动" scheme="https://zhichuwy.cn/tags/U%E7%9B%98%E5%90%AF%E5%8A%A8/"/>
<category term="UEFI Legacy" scheme="https://zhichuwy.cn/tags/UEFI-Legacy/"/>
</entry>
<entry>
<title>抢红包</title>
<link href="https://zhichuwy.cn/%E6%8A%A2%E7%BA%A2%E5%8C%85/"/>
<id>https://zhichuwy.cn/抢红包/</id>
<published>2019-08-19T22:14:47.000Z</published>
<updated>2019-08-29T16:43:27.940Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">基于SSM(全注解+Ajax异步模拟高并发)实现抢红包<br>通过数据库事务隔离级别+乐观锁重入机制提高并发<br>采用Redis提高并发</font></p></div><a id="more"></a><blockquote><p>项目源码 Github <a href="https://github.com/zhichuwy/SSM" target="_blank" rel="noopener">https://github.com/zhichuwy/SSM</a></p></blockquote><h3 id="一、前言"><a href="#一、前言" class="headerlink" title="一、前言"></a>一、前言</h3><p>环境搭建问题:<br>ideaIU-2019.2 + MySQL 8.0 均为最新版本 生命不息,折腾不止 哈哈嗝~<br>1.MySQL8.0 数据库链接URL <a href="https://zhichuwy.cn/DB-MySQL8.0+">【详见文章】</a><br>2.项目中读取资源文件路径问题 <a href="https://zhichuwy.cn/Web项目编译后文件路径">【详见文章】</a><br>3.mybatis-generator配置 <a href="https://zhichuwy.cn/MyBatis-Generator">【详见文章】</a><br>3.1 .properties文件连接MySQL8.0 还有坑!<br>3.2 pom配置<code>mybatis-generator-maven-plugin</code><br>3.3 <code>mysql-connector-java</code>jar包放置位置<br>ps:IDEA中有<code>mybatis-generator</code>插件可供下载!<br>4.项目远程推送 <a href="https://zhichuwy.cn/IDEA安装及使用">【详见文章】</a><br>5.浏览器推荐 FireFox > Chrome<br>6.项目中事务配置<br>Spring注解MySQL事务隔离级别:Read Committed<br>Spring事务传播行为:PROPAGATION_REQUIRED<br>7.模拟并发量:2W 红包数量:1K</p><hr><h3 id="二、Version1-DB事务控制"><a href="#二、Version1-DB事务控制" class="headerlink" title="二、Version1(DB事务控制)"></a>二、Version1(DB事务控制)</h3><p>1.异步模拟2w并发请求<br><img src="/images/v1/2w.png" alt="图片走丢啦~"></p><p>2.红包最终库存<br><img src="/images/v1/t1.png" alt="图片走丢啦~"></p><p>3.抢红包记录-start<br><img src="/images/v1/t2-1.png" alt="图片走丢啦~"></p><p>4.抢红包记录-end<br><img src="/images/v1/t2-2.png" alt="图片走丢啦~"></p><p>5.分析<br>总耗时:44s<br>由于笔记本性能有限且Chrome过多请求会丢失,因此模拟并发量取20000<br>快结束的时候(比如剩余1个红包时)多个线程读取库存,全部事务处理完毕导致库存结果为负</p><hr><h3 id="三、Version2-悲观锁机制"><a href="#三、Version2-悲观锁机制" class="headerlink" title="三、Version2(悲观锁机制)"></a>三、Version2(悲观锁机制)</h3><p>1.异步模拟2w并发请求<br><img src="/images/v2/2w.png" alt="图片走丢啦~"></p><p>2.红包最终库存<br><img src="/images/v2/t1.png" alt="图片走丢啦~"></p><p>3.抢红包记录-start<br><img src="/images/v2/t2-1.png" alt="图片走丢啦~"></p><p>4.抢红包记录-end<br><img src="/images/v2/t2-2.png" alt="图片走丢啦~"></p><p>5.分析<br>总耗时:51s<br>悲观锁控制,for update(行更新锁)<br>解决了超发,业务逻辑及结果正确,但性能不佳</p><hr><h3 id="四、Version3-乐观锁机制"><a href="#四、Version3-乐观锁机制" class="headerlink" title="四、Version3(乐观锁机制)"></a>四、Version3(乐观锁机制)</h3><blockquote><p>非重入机制</p></blockquote><p>1.异步模拟2w并发请求<br><img src="/images/v3/v3-noTry/2w.png" alt="图片走丢啦~"></p><p>2.红包最终库存<br><img src="/images/v3/v3-noTry/t1.png" alt="图片走丢啦~"></p><p>3.抢红包记录-start<br><img src="/images/v3/v3-noTry/t2-1.png" alt="图片走丢啦~"></p><p>4.抢红包记录-end<br><img src="/images/v3/v3-noTry/t2-2.png" alt="图片走丢啦~"></p><p>5.分析<br>总耗时:95s 约为悲观锁机制耗时的2倍 (Version判断)<br>悲观锁 能保证1000个红包全部抢完,同时红包抢完后事务很快退出;<br>乐观锁 未重入,红包未抢完 未阻塞其他线程<br>相比悲观锁处理了2000条请求,但失败较多 且每次抢红包sql语句执行数目比悲观锁机制多<br>因此事务并发处理时间大于悲观锁机制</p><hr><blockquote><p>重入机制</p></blockquote><p>1.异步模拟2w并发请求<br><img src="/images/v3/v3-reTry/2w.png" alt="图片走丢啦~"></p><p>2.红包最终库存<br><img src="/images/v3/v3-reTry/t1.png" alt="图片走丢啦~"></p><p>3.抢红包记录-start<br><img src="/images/v3/v3-reTry/t2-1.png" alt="图片走丢啦~"></p><p>4.抢红包记录-end<br><img src="/images/v3/v3-reTry/t2-2.png" alt="图片走丢啦~"></p><p>5.分析<br>总耗时:54s<br>采用限制次数(项目限制3次)的方式实现重入<br>比非重入机制耗时减少近半,且保证并发数据准确一致<br>也可以采用时间戳,效果不佳,未测试</p><hr><h3 id="五、Version4-Redis"><a href="#五、Version4-Redis" class="headerlink" title="五、Version4(Redis)"></a>五、Version4(Redis)</h3><p>1.初始化Redis数据<br><img src="/images/v4/redis-init.png" alt="图片走丢啦~"></p><p>2.异步模拟2w并发请求<br><img src="/images/v4/2w.png" alt="图片走丢啦~"></p><p>3.抢红包记录-start<br><img src="/images/v4/t2-1.png" alt="图片走丢啦~"></p><p>4.抢红包记录-end<br><img src="/images/v4/t2-2.png" alt="图片走丢啦~"></p><p>5.分析<br>总耗时:2.994s<br>优点:应对并发效果好<br>缺点:Redis事务较差,需要通过代码严格控制</p><p>6.Lua脚本</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><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--hset red_packet_5 stock 1000</span></span><br><span class="line"><span class="comment">--hset red_packet_5 unit_amount 10</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--缓存抢红包信息列表的key</span></span><br><span class="line"><span class="comment">local listKey = 'red_packet_list_'..KEYS[1]</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--当前被抢红包key</span></span><br><span class="line"><span class="comment">local redPacket = 'red_packet_'..KEYS[1]</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--获取当前红包库存</span></span><br><span class="line"><span class="comment">local stock = tonumber(redis.call('hget',redPacket,'stock'))</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--没有库存,返回0</span></span><br><span class="line"><span class="comment">if stock <= 0 then return 0 end</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--库存减1</span></span><br><span class="line"><span class="comment">stock = stock - 1</span></span><br><span class="line"><span class="comment">--保存当前库存</span></span><br><span class="line"><span class="comment">redis.call('hset',redPacket,'stock',tostring(stock))</span></span><br><span class="line"><span class="comment">--往链表加入当前红包信息</span></span><br><span class="line"><span class="comment">redis.call('rpush',listKey,ARGV[1])</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--最后一个红包,返回2 抢红包结束 将列表中的数据保存到数据库</span></span><br><span class="line"><span class="comment">if stock == 0 then return 2 end</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">--非最后一个红包 返回1 抢红包成功</span></span><br><span class="line"><span class="comment">return 1</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure><hr><h3 id="六、后记"><a href="#六、后记" class="headerlink" title="六、后记"></a>六、后记</h3><p>论备份的重要性!精准检查可能出错位置!<br>归根结底:经验积累!<br>某次不知怎的了,项目运行数据库方面一直bug,顾此失彼。。。</p><p>-SSL还未了解 (useSSL=false)<br>-serverTimezone=UTC<br>-MySQL 8.0 Public Key Retrieval is not allowed(allowPublicKeyRetrieval=true)<br>-Failed to load resource: the server responded with a status of 500 ()<br>-Access denied for user ‘root‘@’localhost’ (using password: YES)<br> 博客上说是:密码太弱的原因(总有些不负责任得去抄袭…),其实是:账户名/密码/DB不匹配<br>-js异步模拟并发 修改数据库隔离级别 Default<br>还是不行哇,</p><p>心想,有些坑留给DB去踩吧,我只是个小开发呀!<br>(老老实实用MySQL5.7吧…)<br>最后恍然大悟(发现自己真脑残):<br>IDEA中DataBase工具设置的数据源 和 项目中的DataSource设置的properties根本就不是一回事!!!</p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">基于SSM(全注解+Ajax异步模拟高并发)实现抢红包<br>通过数据库事务隔离级别+乐观锁重入机制提高并发<br>采用Redis提高并发</font></p></div>
</summary>
<category term="之初-进阶" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E8%BF%9B%E9%98%B6/"/>
<category term="SSM抢红包" scheme="https://zhichuwy.cn/tags/SSM%E6%8A%A2%E7%BA%A2%E5%8C%85/"/>
<category term="Redis抢红包" scheme="https://zhichuwy.cn/tags/Redis%E6%8A%A2%E7%BA%A2%E5%8C%85/"/>
<category term="全注解" scheme="https://zhichuwy.cn/tags/%E5%85%A8%E6%B3%A8%E8%A7%A3/"/>
<category term="抢红包" scheme="https://zhichuwy.cn/tags/%E6%8A%A2%E7%BA%A2%E5%8C%85/"/>
<category term="锁" scheme="https://zhichuwy.cn/tags/%E9%94%81/"/>
<category term="事务" scheme="https://zhichuwy.cn/tags/%E4%BA%8B%E5%8A%A1/"/>
<category term="高并发" scheme="https://zhichuwy.cn/tags/%E9%AB%98%E5%B9%B6%E5%8F%91/"/>
</entry>
<entry>
<title>Web项目编译后文件路径</title>
<link href="https://zhichuwy.cn/Web%E9%A1%B9%E7%9B%AE%E7%BC%96%E8%AF%91%E5%90%8E%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84/"/>
<id>https://zhichuwy.cn/Web项目编译后文件路径/</id>
<published>2019-08-19T00:31:29.000Z</published>
<updated>2019-08-18T16:38:27.005Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">Web项目 classPath .class resources路径</font></p></div><a id="more"></a><h3 id="IDEA环境以SSM项目名为例"><a href="#IDEA环境以SSM项目名为例" class="headerlink" title="IDEA环境以SSM项目名为例"></a>IDEA环境以SSM项目名为例</h3><p>编译后.class文件以及资源文件路径问题</p><figure class="highlight xml"><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></pre></td><td class="code"><pre><span class="line"><span class="meta"><?xml version="1.0" encoding="UTF-8" ?></span></span><br><span class="line"><span class="meta"><!DOCTYPE configuration</span></span><br><span class="line"><span class="meta"> PUBLIC "-//mybatis.org//DTD Config 3.0//EN"</span></span><br><span class="line"><span class="meta"> "http://mybatis.org/dtd/mybatis-3-config.dtd"></span></span><br><span class="line"><span class="tag"><<span class="name">configuration</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">mappers</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">mapper</span> <span class="attr">resource</span>=<span class="string">"/RedPacket.xml"</span>/></span></span><br><span class="line"> <span class="tag"><<span class="name">mapper</span> <span class="attr">resource</span>=<span class="string">"/UserRedPacket.xml"</span>/></span></span><br><span class="line"> <span class="tag"></<span class="name">mappers</span>></span></span><br><span class="line"><span class="tag"></<span class="name">configuration</span>></span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"><!--</span></span><br><span class="line"><span class="comment">关于编译后资源文件路径问题</span></span><br><span class="line"><span class="comment">编译后.class文件和资源文件位置:</span></span><br><span class="line"><span class="comment">./项目(SSM)/target/classes(即:classPath)</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">com.yang.*; .class文件按包结构组织</span></span><br><span class="line"><span class="comment">resource文件(可能多层目录) 与com文件夹处于同一层次</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">1)Spring方式获取</span></span><br><span class="line"><span class="comment">//配置MyBatis配置文件</span></span><br><span class="line"><span class="comment">Resource resource = new ClassPathResource("/mybatis/mybatis-config.xml");</span></span><br><span class="line"><span class="comment">sqlSessionFactory.setConfigLocation(resource);</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">2)Java方式获取-几种读取配置文件的方式比较</span></span><br><span class="line"><span class="comment">调用 getResourceAsStream 方法 可以直接拿到目标文件的输入流。</span></span><br><span class="line"><span class="comment">(代码在src/main/java目录下,资源文件在src/main/resources/目录下):</span></span><br><span class="line"><span class="comment">假设test.xml直接位于classPath下</span></span><br><span class="line"><span class="comment">InputStream is = this.getClass().getResourceAsStream(test.xml); //拿不到资源</span></span><br><span class="line"><span class="comment">InputStream is = this.getClass().getResourceAsStream("/" +test.xml); // 拿到资源</span></span><br><span class="line"><span class="comment">InputStream is = this.getClass().getClassLoader().getResourceAsStream(test.xml); //拿到资源</span></span><br><span class="line"><span class="comment">第一种方式会从当前类的目录下去找,这个文件如果不和该类在一个目录下,就找不到。</span></span><br><span class="line"><span class="comment">第二种方式会从编译后的整个classes目录下去找,maven也会把资源文件打包进classes文件夹,所以可以找到。</span></span><br><span class="line"><span class="comment">第三种方式中ClassLoader就是从整个classes目录找的,所以前面无需再加/。</span></span><br><span class="line"><span class="comment">--></span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">Web项目 classPath .class resources路径</font></p></div>
</summary>
<category term="之初-配置" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E9%85%8D%E7%BD%AE/"/>
<category term="web项目" scheme="https://zhichuwy.cn/tags/web%E9%A1%B9%E7%9B%AE/"/>
<category term="classPath" scheme="https://zhichuwy.cn/tags/classPath/"/>
<category term="resources路径" scheme="https://zhichuwy.cn/tags/resources%E8%B7%AF%E5%BE%84/"/>
</entry>
<entry>
<title>向优秀大佬学习</title>
<link href="https://zhichuwy.cn/%E5%90%91%E4%BC%98%E7%A7%80%E5%A4%A7%E4%BD%AC%E5%AD%A6%E4%B9%A0/"/>
<id>https://zhichuwy.cn/向优秀大佬学习/</id>
<published>2019-08-17T21:23:19.000Z</published>
<updated>2019-08-17T14:38:09.451Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">乐此不疲!</font></p></div><a id="more"></a><h3 id="乐此不疲!"><a href="#乐此不疲!" class="headerlink" title="乐此不疲!"></a>乐此不疲!</h3><blockquote><p>分布式<br>Jenkins CI 持续集成<br>apollo & Spring cloud Conifg<br>k8s ribbon iptables<br>explain<br>分布式微服务PiggyMetrics 负载均衡 熔断<br>SOA面向服务 TOC瓶颈理论</p></blockquote><blockquote><p>测试:jacoco mock assert</p></blockquote><blockquote><p>工具<br>Navicat Data Designer/Power Designer<br>Mac-SVN-CornerStone Alfred-Workflow<br>又拍云图床</p></blockquote><blockquote><p>Life<br>期权 风控模型 反欺诈模型<br>商标注册</p></blockquote>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">乐此不疲!</font></p></div>
</summary>
<category term="之初-进阶" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E8%BF%9B%E9%98%B6/"/>
<category term="任重而道远" scheme="https://zhichuwy.cn/tags/%E4%BB%BB%E9%87%8D%E8%80%8C%E9%81%93%E8%BF%9C/"/>
</entry>
<entry>
<title>Alg-雪花算法</title>
<link href="https://zhichuwy.cn/Alg-%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/"/>
<id>https://zhichuwy.cn/Alg-雪花算法/</id>
<published>2019-08-14T11:07:25.000Z</published>
<updated>2019-08-14T02:59:08.929Z</updated>
<content type="html"><![CDATA[<blockquote><p>Alg-雪花算法</p></blockquote><a id="more"></a>]]></content>
<summary type="html">
<blockquote>
<p>Alg-雪花算法</p>
</blockquote>
</summary>
<category term="之初-算法" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E7%AE%97%E6%B3%95/"/>
<category term="雪花算法" scheme="https://zhichuwy.cn/tags/%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/"/>
<category term="uuid" scheme="https://zhichuwy.cn/tags/uuid/"/>
</entry>
<entry>
<title>Alg-加密算法</title>
<link href="https://zhichuwy.cn/Alg-%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/"/>
<id>https://zhichuwy.cn/Alg-加密算法/</id>
<published>2019-08-14T10:57:13.000Z</published>
<updated>2019-08-14T02:59:27.034Z</updated>
<content type="html"><![CDATA[<blockquote><p>Alg-加密算法</p></blockquote><a id="more"></a>]]></content>
<summary type="html">
<blockquote>
<p>Alg-加密算法</p>
</blockquote>
</summary>
<category term="之初-算法" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E7%AE%97%E6%B3%95/"/>
<category term="加密算法" scheme="https://zhichuwy.cn/tags/%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/"/>
<category term="MD5" scheme="https://zhichuwy.cn/tags/MD5/"/>
<category term="RSA" scheme="https://zhichuwy.cn/tags/RSA/"/>
</entry>
<entry>
<title>Alg-KMP</title>
<link href="https://zhichuwy.cn/Alg-KMP/"/>
<id>https://zhichuwy.cn/Alg-KMP/</id>
<published>2019-08-14T10:50:47.000Z</published>
<updated>2019-08-14T02:59:38.000Z</updated>
<content type="html"><![CDATA[<blockquote><p>Alg-KMP算法</p></blockquote><a id="more"></a>]]></content>
<summary type="html">
<blockquote>
<p>Alg-KMP算法</p>
</blockquote>
</summary>
<category term="之初-算法" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E7%AE%97%E6%B3%95/"/>
<category term="算法" scheme="https://zhichuwy.cn/tags/%E7%AE%97%E6%B3%95/"/>
<category term="KMP" scheme="https://zhichuwy.cn/tags/KMP/"/>
</entry>
<entry>
<title>模板引擎</title>
<link href="https://zhichuwy.cn/%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E/"/>
<id>https://zhichuwy.cn/模板引擎/</id>
<published>2019-08-10T23:43:15.000Z</published>
<updated>2019-08-14T03:18:27.686Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">模板引擎-FreeMarker、Thymeleaf</font></p></div><a id="more"></a><h3 id="jstl-el"><a href="#jstl-el" class="headerlink" title="jstl el"></a>jstl el</h3><h3 id="FreeMarker"><a href="#FreeMarker" class="headerlink" title="FreeMarker"></a>FreeMarker</h3><p><a href="https://blog.csdn.net/xiangcaoyihan/article/details/80930179" target="_blank" rel="noopener">https://blog.csdn.net/xiangcaoyihan/article/details/80930179</a><br><a href="https://www.jianshu.com/p/20fd71b2e6a0" target="_blank" rel="noopener">https://www.jianshu.com/p/20fd71b2e6a0</a></p><h3 id="Thymeleaf"><a href="#Thymeleaf" class="headerlink" title="Thymeleaf"></a>Thymeleaf</h3><p><a href="https://www.oschina.net/p/thymeleaf" target="_blank" rel="noopener">https://www.oschina.net/p/thymeleaf</a><br><a href="https://www.jianshu.com/p/a842e5b5012e" target="_blank" rel="noopener">https://www.jianshu.com/p/a842e5b5012e</a></p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">模板引擎-FreeMarker、Thymeleaf</font></p></div>
</summary>
<category term="之初-框架" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%A1%86%E6%9E%B6/"/>
<category term="模板引擎" scheme="https://zhichuwy.cn/tags/%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E/"/>
<category term="FreeMarker" scheme="https://zhichuwy.cn/tags/FreeMarker/"/>
<category term="Thymeleaf" scheme="https://zhichuwy.cn/tags/Thymeleaf/"/>
</entry>
<entry>
<title>Netty</title>
<link href="https://zhichuwy.cn/Netty/"/>
<id>https://zhichuwy.cn/Netty/</id>
<published>2019-08-10T23:29:30.000Z</published>
<updated>2019-08-10T16:44:31.418Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">Netty-NIO异步通信框架</font></p></div><a id="more"></a><blockquote><p>参考文章:<br><a href="https://blog.csdn.net/wangmx1993328/article/details/83036285" target="_blank" rel="noopener">https://blog.csdn.net/wangmx1993328/article/details/83036285</a><br><a href="https://blog.csdn.net/qq_27641935/article/details/86543578" target="_blank" rel="noopener">https://blog.csdn.net/qq_27641935/article/details/86543578</a><br><a href="https://blog.csdn.net/zhiguozhu/article/details/50517551" target="_blank" rel="noopener">https://blog.csdn.net/zhiguozhu/article/details/50517551</a></p></blockquote><h3 id="aio-bio-nio"><a href="#aio-bio-nio" class="headerlink" title="aio bio nio"></a>aio bio nio</h3><h3 id="rpc"><a href="#rpc" class="headerlink" title="rpc"></a>rpc</h3>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">Netty-NIO异步通信框架</font></p></div>
</summary>
<category term="之初-框架" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%A1%86%E6%9E%B6/"/>
<category term="Netty" scheme="https://zhichuwy.cn/tags/Netty/"/>
<category term="NIO异步通信框架" scheme="https://zhichuwy.cn/tags/NIO%E5%BC%82%E6%AD%A5%E9%80%9A%E4%BF%A1%E6%A1%86%E6%9E%B6/"/>
<category term="RPC" scheme="https://zhichuwy.cn/tags/RPC/"/>
</entry>
<entry>
<title>前端涉猎</title>
<link href="https://zhichuwy.cn/%E6%B6%89%E7%8C%8E-%E5%89%8D%E7%AB%AF/"/>
<id>https://zhichuwy.cn/涉猎-前端/</id>
<published>2019-08-10T20:13:34.000Z</published>
<updated>2019-08-22T16:58:17.892Z</updated>
<content type="html"><![CDATA[<h3 id="Ajax-ElementUI"><a href="#Ajax-ElementUI" class="headerlink" title="Ajax+ElementUI"></a>Ajax+ElementUI</h3><h3 id="Vue-axios"><a href="#Vue-axios" class="headerlink" title="Vue+axios"></a>Vue+axios</h3><h3 id="html-5-4t-4s"><a href="#html-5-4t-4s" class="headerlink" title="html 5, 4t, 4s"></a>html 5, 4t, 4s</h3><h3 id="before-after"><a href="#before-after" class="headerlink" title="before after"></a>before after</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></pre></td><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE html></span></span><br><span class="line"><span class="tag"><<span class="name">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"><span class="tag"><<span class="name">style</span> <span class="attr">type</span>=<span class="string">"text/css"</span>></span><span class="undefined"></span></span><br><span class="line"><span class="css"><span class="selector-tag">blockquote</span><span class="selector-pseudo">:after</span> {</span></span><br><span class="line"><span class="undefined"> position: relative;</span></span><br><span class="line"><span class="undefined"> content: '\f10e' !important;</span></span><br><span class="line"><span class="undefined"> font-size: 1rem;</span></span><br><span class="line"><span class="undefined"> float: right;</span></span><br><span class="line"><span class="undefined"> top: -1rem;</span></span><br><span class="line"><span class="css"> <span class="selector-tag">margin-right</span><span class="selector-pseudo">:-1em</span>;</span></span><br><span class="line"><span class="css"> <span class="selector-tag">color</span>: <span class="selector-id">#233</span>;</span></span><br><span class="line"><span class="undefined"> font-family: FontAwesome;</span></span><br><span class="line"><span class="undefined">}</span></span><br><span class="line"><span class="css"><span class="selector-tag">blockquote</span><span class="selector-pseudo">:before</span> {</span></span><br><span class="line"><span class="undefined"> position: relative;</span></span><br><span class="line"><span class="undefined"> content: "\f10d" !important;</span></span><br><span class="line"><span class="undefined"> font-size: 1rem;</span></span><br><span class="line"><span class="undefined"> left: 0;</span></span><br><span class="line"><span class="css"> <span class="selector-tag">margin-left</span><span class="selector-pseudo">:-1em</span>;</span></span><br><span class="line"><span class="css"> <span class="selector-tag">color</span>: <span class="selector-id">#233</span>;</span></span><br><span class="line"><span class="undefined"> font-family: FontAwesome;</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><span class="line"></span><br><span class="line"><span class="tag"><<span class="name">blockquote</span>></span>hahlahjfkhalkh<span class="tag"></<span class="name">blockquote</span>></span></span><br><span class="line"></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">div</span> <span class="attr">style</span>=<span class="string">"float: left; width: 4%; "</span> ></span></span><br><span class="line"><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">"https://Dxoca.cn/image/headPortrait.jpg"</span> <span class="attr">width</span>=<span class="string">"64px"</span> <span class="attr">height</span>=<span class="string">"64px"</span> <span class="attr">alt</span>=<span class="string">"fail"</span> /></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">div</span> <span class="attr">style</span>=<span class="string">"float: right; width: 96%; "</span> ></span></span><br><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">style</span>=<span class="string">"padding-left: 5px; "</span> ></span></span><br><span class="line"><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">"https://Dxoca.cn"</span>></span>Dxoca's blog xxxxx<span class="tag"></<span class="name">a</span>></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">p</span>></span>jhlakjkhkjhak<span class="tag"></<span class="name">p</span>></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">div</span>></span></span><br><span class="line"></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="Ajax-ElementUI"><a href="#Ajax-ElementUI" class="headerlink" title="Ajax+ElementUI"></a>Ajax+ElementUI</h3><h3 id="Vue-axios"><a hre
</summary>
<category term="之初-前端" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E5%89%8D%E7%AB%AF/"/>
<category term="前端涉猎" scheme="https://zhichuwy.cn/tags/%E5%89%8D%E7%AB%AF%E6%B6%89%E7%8C%8E/"/>
</entry>
<entry>
<title>Java 日志</title>
<link href="https://zhichuwy.cn/Java%20%E6%97%A5%E5%BF%97/"/>
<id>https://zhichuwy.cn/Java 日志/</id>
<published>2019-08-09T00:06:19.000Z</published>
<updated>2019-08-17T13:16:24.055Z</updated>
<content type="html"><![CDATA[<blockquote><p>log4j</p></blockquote><blockquote><p>slfj</p></blockquote><a id="more"></a><h3 id="slfj"><a href="#slfj" class="headerlink" title="slfj"></a>slfj</h3><hr><h3 id="log4j"><a href="#log4j" class="headerlink" title="log4j"></a>log4j</h3><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">log4j.rootLogger=DEBUG, stdout</span><br><span class="line">log4j.appender.stdout=org.apache.log4j.ConsoleAppender</span><br><span class="line">log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</span><br><span class="line">log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n</span><br></pre></td></tr></table></figure><figure class="highlight java"><figcaption><span>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><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><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="comment"><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --></span></span><br><span class="line"><span class="comment"><!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 --></span></span><br><span class="line"><span class="comment"><!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 --></span></span><br><span class="line"><span class="comment"><configuration status="INFO" monitorInterval="30"></span></span><br><span class="line"><span class="comment"><!--先定义所有的appender --></span></span><br><span class="line"><span class="comment"><appenders></span></span><br><span class="line"><span class="comment"><!--这个输出控制台的配置 --></span></span><br><span class="line"><span class="comment"><console name="Console" target="SYSTEM_OUT"></span></span><br><span class="line"><span class="comment"><!--输出日志的格式 --></span></span><br><span class="line"><span class="comment"><PatternLayout</span></span><br><span class="line"><span class="comment">pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /></span></span><br><span class="line"><span class="comment"></console></span></span><br><span class="line"><span class="comment"><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 --></span></span><br><span class="line"><span class="comment"><File name="log" fileName="log/test.log" append="false"></span></span><br><span class="line"><span class="comment"><PatternLayout</span></span><br><span class="line"><span class="comment">pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /></span></span><br><span class="line"><span class="comment"></File></span></span><br><span class="line"><span class="comment"><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --></span></span><br><span class="line"><span class="comment"><RollingFile name="RollingFileInfo"</span></span><br><span class="line"><span class="comment">fileName="${sys:user.home}/logs/info.log"</span></span><br><span class="line"><span class="comment">filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --></span></span><br><span class="line"><span class="comment"><ThresholdFilter level="info" onMatch="ACCEPT"</span></span><br><span class="line"><span class="comment">onMismatch="DENY" /></span></span><br><span class="line"><span class="comment"><PatternLayout</span></span><br><span class="line"><span class="comment">pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /></span></span><br><span class="line"><span class="comment"><Policies></span></span><br><span class="line"><span class="comment"><TimeBasedTriggeringPolicy /></span></span><br><span class="line"><span class="comment"><SizeBasedTriggeringPolicy size="100 MB" /></span></span><br><span class="line"><span class="comment"></Policies></span></span><br><span class="line"><span class="comment"></RollingFile></span></span><br><span class="line"><span class="comment"><RollingFile name="RollingFileWarn"</span></span><br><span class="line"><span class="comment">fileName="${sys:user.home}/logs/warn.log"</span></span><br><span class="line"><span class="comment">filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"><ThresholdFilter level="warn" onMatch="ACCEPT"</span></span><br><span class="line"><span class="comment">onMismatch="DENY" /></span></span><br><span class="line"><span class="comment"><PatternLayout</span></span><br><span class="line"><span class="comment">pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /></span></span><br><span class="line"><span class="comment"><Policies></span></span><br><span class="line"><span class="comment"><TimeBasedTriggeringPolicy /></span></span><br><span class="line"><span class="comment"><SizeBasedTriggeringPolicy size="100 MB" /></span></span><br><span class="line"><span class="comment"></Policies></span></span><br><span class="line"><span class="comment"><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --></span></span><br><span class="line"><span class="comment"><DefaultRolloverStrategy max="20" /></span></span><br><span class="line"><span class="comment"></RollingFile></span></span><br><span class="line"><span class="comment"><RollingFile name="RollingFileError"</span></span><br><span class="line"><span class="comment">fileName="${sys:user.home}/logs/error.log"</span></span><br><span class="line"><span class="comment">filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"><ThresholdFilter level="error" onMatch="ACCEPT"</span></span><br><span class="line"><span class="comment">onMismatch="DENY" /></span></span><br><span class="line"><span class="comment"><PatternLayout</span></span><br><span class="line"><span class="comment">pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /></span></span><br><span class="line"><span class="comment"><Policies></span></span><br><span class="line"><span class="comment"><TimeBasedTriggeringPolicy /></span></span><br><span class="line"><span class="comment"><SizeBasedTriggeringPolicy size="100 MB" /></span></span><br><span class="line"><span class="comment"></Policies></span></span><br><span class="line"><span class="comment"></RollingFile></span></span><br><span class="line"><span class="comment"></appenders></span></span><br><span class="line"><span class="comment"><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 --></span></span><br><span class="line"><span class="comment"><loggers></span></span><br><span class="line"><span class="comment"><!--过滤掉spring和mybatis的一些无用的DEBUG信息 --></span></span><br><span class="line"><span class="comment"><logger name="org.springframework" level="INFO"></logger></span></span><br><span class="line"><span class="comment"><logger name="org.mybatis" level="INFO"></logger></span></span><br><span class="line"><span class="comment"><root level="all"></span></span><br><span class="line"><span class="comment"><appender-ref ref="Console" /></span></span><br><span class="line"><span class="comment"><appender-ref ref="RollingFileInfo" /></span></span><br><span class="line"><span class="comment"><appender-ref ref="RollingFileWarn" /></span></span><br><span class="line"><span class="comment"><appender-ref ref="RollingFileError" /></span></span><br><span class="line"><span class="comment"></root></span></span><br><span class="line"><span class="comment"></loggers></span></span><br><span class="line"><span class="comment"></configuration></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">==================================================================</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">https://www.cnblogs.com/hlhdidi/p/6749572.html</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">https://www.cnblogs.com/new-life/p/9246143.html</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">http://logging.apache.org/log4j/2.x/manual/usage.html</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"><Configuration status="error"></span></span><br><span class="line"><span class="comment"> <Appenders></span></span><br><span class="line"><span class="comment"> <Console name="Console" target="SYSTEM_OUT"></span></span><br><span class="line"><span class="comment"> <PatternLayout></span></span><br><span class="line"><span class="comment"> <MarkerPatternSelector defaultPattern="%sn. %msg: Logger=%logger%n"></span></span><br><span class="line"><span class="comment"> <PatternMatch key="CLASS" pattern="%sn. %msg: Class=%class%n"/></span></span><br><span class="line"><span class="comment"> </MarkerPatternSelector></span></span><br><span class="line"><span class="comment"> </PatternLayout></span></span><br><span class="line"><span class="comment"> </Console></span></span><br><span class="line"><span class="comment"> </Appenders></span></span><br><span class="line"><span class="comment"> <Loggers></span></span><br><span class="line"><span class="comment"> <Root level="TRACE"></span></span><br><span class="line"><span class="comment"> <AppenderRef ref="Console" /></span></span><br><span class="line"><span class="comment"> </Root></span></span><br><span class="line"><span class="comment"> </Loggers></span></span><br><span class="line"><span class="comment"></Configuration></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">1.关于配置文件的名称以及在项目中的存放位置(log4j)</span></span><br><span class="line"><span class="comment">2.x版本不再支持像1.x中的.properties后缀的文件配置方式,</span></span><br><span class="line"><span class="comment">2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".系统选择配置文件的优先级(从先到后)如下:</span></span><br><span class="line"><span class="comment">1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.</span></span><br><span class="line"><span class="comment">2).classpath下的名为log4j2-test.xml的文件.</span></span><br><span class="line"><span class="comment">3).classpath下名为log4j2.json 或者log4j2.jsn的文件.</span></span><br><span class="line"><span class="comment">4).classpath下名为log4j2.xml的文件.</span></span><br><span class="line"><span class="comment">我们一般默认使用log4j2.xml进行命名。如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">2.缺省默认配置文件</span></span><br><span class="line"><span class="comment"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="comment"> <Configuration status="WARN"></span></span><br><span class="line"><span class="comment"> <Appenders></span></span><br><span class="line"><span class="comment"> <Console name="Console" target="SYSTEM_OUT"></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></span></span><br><span class="line"><span class="comment"> </Console></span></span><br><span class="line"><span class="comment"> </Appenders></span></span><br><span class="line"><span class="comment"> <Loggers></span></span><br><span class="line"><span class="comment"> <Root level="error"></span></span><br><span class="line"><span class="comment"> <AppenderRef ref="Console"/></span></span><br><span class="line"><span class="comment"> </Root></span></span><br><span class="line"><span class="comment"> </Loggers></span></span><br><span class="line"><span class="comment"> </Configuration></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">3.配置文件节点解析 </span></span><br><span class="line"><span class="comment">(1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).</span></span><br><span class="line"><span class="comment">status用来指定log4j本身的打印日志的级别.</span></span><br><span class="line"><span class="comment">monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">(2).Appenders节点,常见的有三种子节点:Console、RollingFile、File.</span></span><br><span class="line"><span class="comment">Console节点用来定义输出到控制台的Appender.</span></span><br><span class="line"><span class="comment">name:指定Appender的名字.</span></span><br><span class="line"><span class="comment">target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.</span></span><br><span class="line"><span class="comment">PatternLayout:输出格式,不设置默认为:%m%n.</span></span><br><span class="line"><span class="comment">File节点用来定义输出到指定位置的文件的Appender.</span></span><br><span class="line"><span class="comment">name:指定Appender的名字.</span></span><br><span class="line"><span class="comment">fileName:指定输出日志的目的文件带全路径的文件名.</span></span><br><span class="line"><span class="comment">PatternLayout:输出格式,不设置默认为:%m%n.</span></span><br><span class="line"><span class="comment">RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.</span></span><br><span class="line"><span class="comment">name:指定Appender的名字.</span></span><br><span class="line"><span class="comment">fileName:指定输出日志的目的文件带全路径的文件名.</span></span><br><span class="line"><span class="comment">PatternLayout:输出格式,不设置默认为:%m%n.</span></span><br><span class="line"><span class="comment">filePattern:指定新建日志文件的名称格式.</span></span><br><span class="line"><span class="comment">Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.</span></span><br><span class="line"><span class="comment">TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.</span></span><br><span class="line"><span class="comment">SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.</span></span><br><span class="line"><span class="comment">DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">(3).Loggers节点,常见的有两种:Root和Logger.</span></span><br><span class="line"><span class="comment">Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出</span></span><br><span class="line"><span class="comment">level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.</span></span><br><span class="line"><span class="comment">AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.</span></span><br><span class="line"><span class="comment">Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。</span></span><br><span class="line"><span class="comment">level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.</span></span><br><span class="line"><span class="comment">name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.</span></span><br><span class="line"><span class="comment">AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">(4).关于日志level.</span></span><br><span class="line"><span class="comment">共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.</span></span><br><span class="line"><span class="comment">All:最低等级的,用于打开所有日志记录.</span></span><br><span class="line"><span class="comment">Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.</span></span><br><span class="line"><span class="comment">Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.</span></span><br><span class="line"><span class="comment">Info:消息在粗粒度级别上突出强调应用程序的运行过程.</span></span><br><span class="line"><span class="comment">Warn:输出警告及warn以下级别的日志.</span></span><br><span class="line"><span class="comment">Error:输出错误信息日志.</span></span><br><span class="line"><span class="comment">Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.</span></span><br><span class="line"><span class="comment">OFF:最高等级的,用于关闭所有日志记录.</span></span><br><span class="line"><span class="comment">程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">4.比较完整的log4j2.xml配置模板</span></span><br><span class="line"><span class="comment"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="comment"> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --></span></span><br><span class="line"><span class="comment"> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--></span></span><br><span class="line"><span class="comment"> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--></span></span><br><span class="line"><span class="comment"> <configuration status="WARN" monitorInterval="30"></span></span><br><span class="line"><span class="comment"> <!--先定义所有的appender--></span></span><br><span class="line"><span class="comment"> <appenders></span></span><br><span class="line"><span class="comment"> <!--这个输出控制台的配置--></span></span><br><span class="line"><span class="comment"> <console name="Console" target="SYSTEM_OUT"></span></span><br><span class="line"><span class="comment"> <!--输出日志的格式--></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></span></span><br><span class="line"><span class="comment"> </console></span></span><br><span class="line"><span class="comment"> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--></span></span><br><span class="line"><span class="comment"> <File name="log" fileName="log/test.log" append="false"></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></span></span><br><span class="line"><span class="comment"> </File></span></span><br><span class="line"><span class="comment"> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--></span></span><br><span class="line"><span class="comment"> <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"</span></span><br><span class="line"><span class="comment"> filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> </span></span><br><span class="line"><span class="comment"> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></span></span><br><span class="line"><span class="comment"> <Policies></span></span><br><span class="line"><span class="comment"> <TimeBasedTriggeringPolicy/></span></span><br><span class="line"><span class="comment"> <SizeBasedTriggeringPolicy size="100 MB"/></span></span><br><span class="line"><span class="comment"> </Policies></span></span><br><span class="line"><span class="comment"> </RollingFile></span></span><br><span class="line"><span class="comment"> <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"</span></span><br><span class="line"><span class="comment"> filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></span></span><br><span class="line"><span class="comment"> <Policies></span></span><br><span class="line"><span class="comment"> <TimeBasedTriggeringPolicy/></span></span><br><span class="line"><span class="comment"> <SizeBasedTriggeringPolicy size="100 MB"/></span></span><br><span class="line"><span class="comment"> </Policies></span></span><br><span class="line"><span class="comment"> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --></span></span><br><span class="line"><span class="comment"> <DefaultRolloverStrategy max="20"/></span></span><br><span class="line"><span class="comment"> </RollingFile></span></span><br><span class="line"><span class="comment"> <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"</span></span><br><span class="line"><span class="comment"> filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"></span></span><br><span class="line"><span class="comment"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/></span></span><br><span class="line"><span class="comment"> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></span></span><br><span class="line"><span class="comment"> <Policies></span></span><br><span class="line"><span class="comment"> <TimeBasedTriggeringPolicy/></span></span><br><span class="line"><span class="comment"> <SizeBasedTriggeringPolicy size="100 MB"/></span></span><br><span class="line"><span class="comment"> </Policies></span></span><br><span class="line"><span class="comment"> </RollingFile></span></span><br><span class="line"><span class="comment"> </appenders></span></span><br><span class="line"><span class="comment"> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--></span></span><br><span class="line"><span class="comment"> <loggers></span></span><br><span class="line"><span class="comment"> <!--过滤掉spring和mybatis的一些无用的DEBUG信息--></span></span><br><span class="line"><span class="comment"> <logger name="org.springframework" level="INFO"></logger></span></span><br><span class="line"><span class="comment"> <logger name="org.mybatis" level="INFO"></logger></span></span><br><span class="line"><span class="comment"> <root level="all"></span></span><br><span class="line"><span class="comment"> <appender-ref ref="Console"/></span></span><br><span class="line"><span class="comment"> <appender-ref ref="RollingFileInfo"/></span></span><br><span class="line"><span class="comment"> <appender-ref ref="RollingFileWarn"/></span></span><br><span class="line"><span class="comment"> <appender-ref ref="RollingFileError"/></span></span><br><span class="line"><span class="comment"> </root></span></span><br><span class="line"><span class="comment"> </loggers></span></span><br><span class="line"><span class="comment"> </configuration></span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<blockquote>
<p>log4j</p>
</blockquote>
<blockquote>
<p>slfj</p>
</blockquote>
</summary>
<category term="之初-框架" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%A1%86%E6%9E%B6/"/>
<category term="日志框架" scheme="https://zhichuwy.cn/tags/%E6%97%A5%E5%BF%97%E6%A1%86%E6%9E%B6/"/>
<category term="log4j" scheme="https://zhichuwy.cn/tags/log4j/"/>
<category term="slfj" scheme="https://zhichuwy.cn/tags/slfj/"/>
</entry>
<entry>
<title>Alg-杨辉三角</title>
<link href="https://zhichuwy.cn/Alg-%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/"/>
<id>https://zhichuwy.cn/Alg-杨辉三角/</id>
<published>2019-08-09T00:06:19.000Z</published>
<updated>2019-08-10T16:46:53.378Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">小Q的歌单(牛客算法-杨辉三角)</font></p></div><a id="more"></a><h3 id="小Q的歌单-牛客算法-杨辉三角"><a href="#小Q的歌单-牛客算法-杨辉三角" class="headerlink" title="小Q的歌单(牛客算法-杨辉三角)"></a>小Q的歌单(牛客算法-杨辉三角)</h3><p>【题目描述】小 Q 有 X 首长度为 A 的不同的歌和 Y 首长度为 B 的不同的歌,现在小 Q 想用这些歌组成一个<br>总长度正好为 K 的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌曲的先后顺序的情况下,<br>请问有多少种组成歌单的方法。</p><p>输入描述:<br>每个输入包含一个测试用例。<br>每个测试用例的第一行包含一个整数,表示歌单的总长度 K(1<=K<=1000)。<br>接下来的一行包含四个正整数,分别表示歌的第一种长度 A(A<=10)和数量 X(X<=100)以及歌的第二种长度<br>B(B<=10)和数量 Y(Y<=100)。保证 A 不等于 B。</p><p>输出描述:<br>输出一个整数,表示组成歌单的方法取模。因为答案可能会很大,输出对 1000000007 取模的结果。<br>输入示例:<br>5<br>2 3 3 3</p><p>输出示例:<br>9</p><p>解决方案:<br><figure class="highlight cpp"><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="comment">//代码</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> c[<span class="number">105</span>][<span class="number">105</span>]; </span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mod = <span class="number">1000000007</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">init</span><span class="params">()</span> </span>{</span><br><span class="line">c[<span class="number">0</span>][<span class="number">0</span>] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i <= <span class="number">100</span>; i++) {</span><br><span class="line">c[i][<span class="number">0</span>] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j = <span class="number">1</span>; j <= <span class="number">100</span>; j++)</span><br><span class="line">c[i][j] = (c[i - <span class="number">1</span>][j - <span class="number">1</span>] + c[i - <span class="number">1</span>][j]) % mod;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">int</span> k, a, b, x, y;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> ans = <span class="number">0</span>;</span><br><span class="line">init();</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%d"</span>, &k);</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%d%d%d%d"</span>, &a, &x, &b, &y);</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i <= x; i++) {</span><br><span class="line"><span class="keyword">if</span> (i * a <= k && (k - a * i) % b == <span class="number">0</span> && (k - a * i) / b <= y)</span><br><span class="line">ans=(ans + (c[x][i] * c[y][(k - a * i) / b]) % mod) % mod;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">"%lld\n"</span>, ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>1.分析数学模型(公式,杨辉三角…)<br>2.使用编程语言实现</p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">小Q的歌单(牛客算法-杨辉三角)</font></p></div>
</summary>
<category term="之初-算法" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E7%AE%97%E6%B3%95/"/>
<category term="算法" scheme="https://zhichuwy.cn/tags/%E7%AE%97%E6%B3%95/"/>
<category term="杨辉三角" scheme="https://zhichuwy.cn/tags/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/"/>
<category term="牛客" scheme="https://zhichuwy.cn/tags/%E7%89%9B%E5%AE%A2/"/>
</entry>
<entry>
<title>Docker</title>
<link href="https://zhichuwy.cn/Docker/"/>
<id>https://zhichuwy.cn/Docker/</id>
<published>2019-08-08T23:49:59.000Z</published>
<updated>2019-08-17T14:25:37.847Z</updated>
<content type="html"><![CDATA[<h3 id="Docker入门"><a href="#Docker入门" class="headerlink" title="Docker入门"></a>Docker入门</h3><blockquote><p>参考文章 <a href="https://mp.weixin.qq.com/s/T-yCJSOu_RMtg8nqMAmJfw" target="_blank" rel="noopener">https://mp.weixin.qq.com/s/T-yCJSOu_RMtg8nqMAmJfw</a></p></blockquote><a id="more"></a><h3 id="CentOS-7-64位-Docker"><a href="#CentOS-7-64位-Docker" class="headerlink" title="CentOS-7-64位 Docker"></a>CentOS-7-64位 Docker</h3><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3>]]></content>
<summary type="html">
<h3 id="Docker入门"><a href="#Docker入门" class="headerlink" title="Docker入门"></a>Docker入门</h3><blockquote>
<p>参考文章 <a href="https://mp.weixin.qq.com/s/T-yCJSOu_RMtg8nqMAmJfw" target="_blank" rel="noopener">https://mp.weixin.qq.com/s/T-yCJSOu_RMtg8nqMAmJfw</a></p>
</blockquote>
</summary>
<category term="之初-工具" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E5%B7%A5%E5%85%B7/"/>
<category term="Docker" scheme="https://zhichuwy.cn/tags/Docker/"/>
<category term="容器" scheme="https://zhichuwy.cn/tags/%E5%AE%B9%E5%99%A8/"/>
</entry>
<entry>
<title>Jetty</title>
<link href="https://zhichuwy.cn/Jetty/"/>
<id>https://zhichuwy.cn/Jetty/</id>
<published>2019-08-08T23:45:17.000Z</published>
<updated>2019-08-10T16:59:39.216Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">Jetty-架构、源码学习</font></p></div><a id="more"></a><blockquote><p>参考文章:<br>Jetty学习 <a href="https://my.oschina.net/tryUcatchUfinallyU/blog/110553" target="_blank" rel="noopener">https://my.oschina.net/tryUcatchUfinallyU/blog/110553</a><br>Jetty服务器架构分析上(中、下) <a href="https://blog.csdn.net/lovingprince/article/details/6202669" target="_blank" rel="noopener">https://blog.csdn.net/lovingprince/article/details/6202669</a></p></blockquote><h3 id="Jetty-Tomcat"><a href="#Jetty-Tomcat" class="headerlink" title="Jetty Tomcat"></a>Jetty Tomcat</h3><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">Jetty-架构、源码学习</font></p></div>
</summary>
<category term="之初-服务器" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
<category term="Jetty" scheme="https://zhichuwy.cn/tags/Jetty/"/>
<category term="架构" scheme="https://zhichuwy.cn/tags/%E6%9E%B6%E6%9E%84/"/>
<category term="源码" scheme="https://zhichuwy.cn/tags/%E6%BA%90%E7%A0%81/"/>
</entry>
<entry>
<title>Volatile</title>
<link href="https://zhichuwy.cn/Volatile/"/>
<id>https://zhichuwy.cn/Volatile/</id>
<published>2019-08-08T23:40:33.000Z</published>
<updated>2019-08-08T15:40:46.375Z</updated>
<content type="html"><![CDATA[<blockquote><p>参考文章:<br><a href="https://mp.weixin.qq.com/s/kQ498ifh4OUEDd829JIhnQ" target="_blank" rel="noopener">https://mp.weixin.qq.com/s/kQ498ifh4OUEDd829JIhnQ</a></p></blockquote><h3 id="Volatile"><a href="#Volatile" class="headerlink" title="Volatile"></a>Volatile</h3>]]></content>
<summary type="html">
<blockquote>
<p>参考文章:<br><a href="https://mp.weixin.qq.com/s/kQ498ifh4OUEDd829JIhnQ" target="_blank" rel="noopener">https://mp.weixin.qq.com
</summary>
<category term="之初-数据库" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
<category term="Volatile" scheme="https://zhichuwy.cn/tags/Volatile/"/>
</entry>
<entry>
<title>数据库事务</title>
<link href="https://zhichuwy.cn/DB-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1/"/>
<id>https://zhichuwy.cn/DB-数据库事务/</id>
<published>2019-08-08T23:40:33.000Z</published>
<updated>2019-08-10T16:22:28.483Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">数据库事务并发控制和事务隔离级别</font></p></div><a id="more"></a><blockquote><p>参考文章:<br><a href="https://blog.csdn.net/qq_33290787/article/details/51924963" target="_blank" rel="noopener">https://blog.csdn.net/qq_33290787/article/details/51924963</a><br><a href="https://blog.csdn.net/baidu_37107022/article/details/75578140" target="_blank" rel="noopener">https://blog.csdn.net/baidu_37107022/article/details/75578140</a><br><a href="https://blog.csdn.net/wei_cheng18/article/details/82955068" target="_blank" rel="noopener">https://blog.csdn.net/wei_cheng18/article/details/82955068</a><br><a href="https://blog.csdn.net/weixin_30531261/article/details/79479895" target="_blank" rel="noopener">https://blog.csdn.net/weixin_30531261/article/details/79479895</a></p></blockquote><hr><h3 id="数据库语言类型"><a href="#数据库语言类型" class="headerlink" title="数据库语言类型"></a>数据库语言类型</h3><ol><li>数据查询语言(DQL)select</li><li>数据操作语言(DML) insert,update,delete主要用来对数据库的数据进行操作</li><li>数据库定义语言(DDL)create,alter,drop用在定义或改变表的结果,数据类型,表之间的链接和约束(操作是隐性提交的,不能rollback)</li><li>数据库控制语言(DCL)grant,deny,revoke设置或更改数据库用户或角色权限的语句</li></ol><h3 id="事务"><a href="#事务" class="headerlink" title="事务"></a>事务</h3><p>概念:满足ACID特性的一组DML操作,可以通过commit提交一个事务,也可以使用rollback进行回滚操作。</p><ol><li>原子性(Atomicity)事务被视为不可分割的最小单元,所有操作要么全部提交成功,要么全部失败回滚。</li><li>一致性(Consistency)事务在执行前后都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结果都是相同的;</li><li>隔离性(Isolation)事务所做的修改在最终提交以前,对其他事务是不可见的;</li><li>持久性(Durability)事务一旦提交则其所做的修改是永久的,即使系统发生崩溃,事务执行的结果也不会丢失。</li></ol><blockquote><p>只有满足一致性,事务的执行结果才是正确的;<br>无并发的情况下,事务串行执行,隔离性一定能满足。此时只要满足原子性,就能满足一致性;<br>在并发情况下,多个事务并行执行,事务不仅要满足原子性,还要满足隔离性,才能满足一致性;<br>事务满足持久性是为了能应对数据库崩溃的情况。事务满足持久性是为了能应对数据库崩溃的情况。</p></blockquote><p>mysql默认采用自动提交模式,也就是说如果不显示的使用start transaction语句来开启一个事务,那么每个查询都会被当做一个事务自动提交。</p><h3 id="并发一致性问题"><a href="#并发一致性问题" class="headerlink" title="并发一致性问题"></a>并发一致性问题</h3><ol><li>丢失修改:事务AB,AB均写入,A写的数据被B覆盖了。</li><li>读脏数据:事务A修改了一个数据,事务B读了数据,事务A撤销了修改,那么B读取的数据是脏数据;一个事务提交之前,人和其他事务不可读取器修改过的值,则可以避免此问题,</li><li>不可重复读:一个事务内,多次读同一数据,结果不一样。(重点在于修改);如果只有在修改事务完全提交后才可以读取数据,则可以宾冕不可重复读。</li><li>幻读:事务A读取某一范围的数据,事务B插入了新的数据,事务A再次读取这个范围的数据,此时读取的结果和第一次结果不同。(重点在于增加或删除);在操作事务完成处理数据之前,任何其他事务都不可以添加新数据,则可以避免。</li></ol><h3 id="封锁"><a href="#封锁" class="headerlink" title="封锁"></a>封锁</h3><h4 id="封锁粒度"><a href="#封锁粒度" class="headerlink" title="封锁粒度"></a>封锁粒度</h4><ul><li>行级锁和表级锁</li><li>应该尽量只锁定需要修改的部分数据,而不是所有资源,锁定的数据量越少,发生锁争用的可能就越小,并发程度越高;</li><li>加锁需要消耗资源,锁的各种操作会增加系统开销,因此封锁的粒度越小,系统开销越大,需要在开销和并发程度之间做一个权衡。</li></ul><h4 id="封锁类型"><a href="#封锁类型" class="headerlink" title="封锁类型"></a>封锁类型</h4><ul><li>共享锁:也叫S锁,是一种读锁,当一个事务获得了一条数据的共享锁,其他事务也可以获得该共享锁,但不能获得排他锁,表示其他事务可读,但不可写。</li><li>排他锁:也叫X锁,是一种写锁,当一个事务对临界区加上排他锁,其他事务不能获得该临界区的任何锁(包括共享过和排他锁)表示只能一个人去处理数据,其他人不能读也不能写。</li><li>意向锁:使用意向锁可以更容易地支持多粒度封锁;存在行级锁和表级锁的情况下,事务T想对表A加排他锁,需要先检测是否有其他事务对表A或者表A的任意一行加了锁,那么需要对表A的每一行都检测一次,非常耗时;意向锁在原来的X/S锁上引入了IX/IS锁,都是表锁,用来表示一个事务想要在表中的某个数据行上加X锁或S锁,有以下两个规定:<br>1.一个事务在获得某个数据行对象的S锁之前,必须先获得表的IS锁或者更强的锁;<br>2.一个事务在获得某个数据行对象的X锁之前,必须先获得表的IX锁</li></ul><blockquote><p>引入意向锁,事务T想要对表A加X锁,只需要先检测是否有其他事务对表A加了X/IX/S/IS锁,如果加了就表示有其他的事务正在使用这个表或者表中某一行的锁,因此T加X锁失败。<br>1.任意IS/IX锁之间是兼容的,因为他们只是表示想要对表加锁,而不是真正加锁;<br>2.S锁子与S锁和IS锁兼容,也就是说事务T想要对数据加S锁,其他事务可以获得对表或者表中的行的S锁。</p></blockquote><ul><li><p>乐观锁:乐观锁假设认为数据一般情况下不会造成冲突,所以只会对数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突了,则返回用户错误的信息,让用户决定如何去做。实现乐观锁的两种方式:<br>1.使用版本号,为数据增加一个版本标识,读数据时,将version一同读出,数据每更新一次对version加一,当提交更新时,判断数据表对应记录的版本信息与第一次读取出来的version值比对,如果相等,则予以更新,否则,认为是过期数据;<br>2.使用时间戳:增加一个字段,使用时间戳,更新提交时检查当前数据库中数据的时间戳和自己更新前取到的时间戳对比,如果一致则OK,否则就是版本冲突。使用时间戳:增加一个字段,使用时间戳,更新提交时检查当前数据库中数据的时间戳和自己更新前取到的时间戳对比,如果一致则OK,否则就是版本冲突。</p></li><li><p>悲观锁:指的是是对数据被外界(本系统的其他事务,来自外部系统的事务处理)修改持保守的态度。在整个数据处理中,将数据处于锁定的状态;悲观锁的实现,要依靠数据库提供的锁机制。<br>select status from t_items where id=1 for update,另一个事务会阻塞,如果没有for update则不会阻塞</p></li><li>MySQL InnoDB默认Row-Level Lock,只有明确的指定主键或者索引,才会执行Row lock,负责将会执行Table Lock</li><li>共享锁和排他锁都属于悲观锁</li></ul><h4 id="封锁协议"><a href="#封锁协议" class="headerlink" title="封锁协议"></a>封锁协议</h4><p>1.三级封锁协议<br>1)一级封锁协议:事务T要修改数据A时,必须加X锁,知道事务T结束才释放锁;<br>可以解决丢失修改,因为不能同时有两个事务对同一个数据进行修改,那么事务的修改不会被覆盖;<br>2)二级封锁协议:在一级的基础上,要求读取数据A时必须加S锁,读完马上释放S锁;<br>可以解决脏读数据,因为如果一个事务在对数据A进行修改,根据一级等所协议,会加X锁,那么就不能再加S锁了,也就是不会读入数据;<br>3)三级封锁协议:在二级的基础上,要求读取数据A时必须加S锁,直到事务结束才能释放S锁;<br>可以解决不可重复读的问题,因为读A时,其他事务不能对A加X锁,从而避免了在读的期间数据发生改变。</p><p>2.两段锁协议:是指所有事务必须分为两个阶段对数据项加锁和解锁;<br>1)对任何数据进行读写之前,要申请并获得对该数据的封锁;<br>2)每个事务中,所有的封锁请求先于所有的解锁请求。</p><ul><li>可串行化调度是指,通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同。事务遵循两段锁协议是保证可串行化调度的充分条件,也就是说:所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的;一个可串行化的并发调度的所有事务并不一定都符合两段锁协议。</li><li>遵循两段锁协议可能发生死锁。</li><li>MySQL的InnoDB存储引擎采用两段锁协议,会根据隔离级别在需要的时候自动加锁,并且所有的锁都是在同一时刻被释放,这被称为隐式锁定。</li><li>select … lock in share mode; select … for update为显示锁定。</li><li>一次封锁法:要求事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两端封锁协议,但两段封锁协议并不要求事务必须一次性将所有要使用的数据全部加锁。这是遵守两端锁协议仍可能发生死锁的原因所在</li></ul><h3 id="事务的隔离级别"><a href="#事务的隔离级别" class="headerlink" title="事务的隔离级别"></a>事务的隔离级别</h3><ol><li>读未提交:没有解决任何问题,在读取时不会加锁,在更新数据时,对其加行级共享锁(其他事务不能更改,但可以读取,导致脏读),事务结束时释放。</li><li>读已提交:读取的数据是已经提交成功的数据,解决了脏读的问题;给写数据加行级排他锁(写的过程是无法读取的,直到事务处理完毕才释放排他锁)读的数据加行级共享锁,读的时候也是无法写的,但是一旦读完该行就释放共享锁;(事务A负责读,B负责写,A读完数据后释放共享锁,B更新数据,事务还未结束,A在读,两次数据不一样。)</li><li>可重复读:可以重复的读取数据,解决了不可重复读的问题。写的数据加行级排他锁,事务结束释放,读的数据加行级共享锁,事务结束后释放。(事务A负责读,B负责写,A读完数据后等事务结束才释放共享锁,B更新数据,直到事务结束,A再读,两次读到的数据均为A第一次读到的数据,解决了不可重复读。)(事务A负责读,只为读取的数据加行级共享锁,B在A读的过程中向表单中插入数据,A由于处理判断到新的数据,产生幻读。)</li><li>可串行化:可以解决问题。事务一个接着一个执行,代价花费最高,性能最低。(事务读数据则加表级共享锁,事务写数据则加表级排他锁。)</li></ol><h3 id="多版本并发控制(MVCC)"><a href="#多版本并发控制(MVCC)" class="headerlink" title="多版本并发控制(MVCC)"></a>多版本并发控制(MVCC)</h3><p>是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式。用于实现提交度和可重复读这两种隔离解别。(未提交读隔离解别总是读最新的数据行,无需使用MVCC,可串行化隔离级别需要对所有读取的行都加锁,单纯使用MVCC无法实现)。</p><p>版本号:</p><ul><li>系统版本号:一个递增的数字,每开始一个事务,系统版本号就会自动递增;</li><li>事务版本号:事务开始时的系统版本号。<br>隐藏的列:MVCC在每行记录后面都保存着两个隐藏的列,用来存储两个版本号</li></ul><ul><li>创建版本号:指示创建一个数据行的快照时的系统版本号;</li><li>删除版本号:如果该快照的删除版本号大于当前事务版本号表示该快照有效,否则表示该快照已经被删除。</li></ul><p>MVCC使用到的快照存储在Undo日志中,该日志通过回滚指针班一个数据行的所有快照连接起来;</p><h4 id="实现过程"><a href="#实现过程" class="headerlink" title="实现过程"></a>实现过程</h4><p>当开始一个新的事务时,该事务的版本号肯定会大于当前所有数据行快照的创建版本号;<br>1.select:多个事务必须读取到同一个数据行的快照,并且这个快照是距离现在最近的一个有效快照。但是也有例外,如果一个事务正在修改该数据行,那么它可以读取该事务本身所做的修改,而不用和其他事务的读取结果一致。<br>一个没有对数据行做修改的事务T,它所读取的数据行快照的创建版本号必须小于T的版本号,因为如果大于等于则表示该数据行快照时其他事务的最新修改,因此不能去读取它;除此之外,T索要读取的数据行快照的删除版本号必须大于等于T的版本号,因为如果小于等于则表示该数据行快照是已经被删除的,不应该去读取它。<br>2.insert:将当前系统版本号作为数据行快照的创建版本号;<br>3.delete:将当前系统版本号作为数据行快照的删除版本号;<br>4.update:将当前系统版本号作为更新前的数据行快照的删除版本号,并将当前系统版本号作为更新后的数据行快照的创建版本号。可以理解为先执行delete 后执行insert。</p><h4 id="快照读与当前读"><a href="#快照读与当前读" class="headerlink" title="快照读与当前读"></a>快照读与当前读</h4><p>1.快照读:使用MVCC读取的是快照中的数据,可以减少加锁带来的开销;select * from table…;<br>1)快照读:一致非锁定读,select的时候会生成一个快照;<br>2)生成快照的时机:事务中第一次调用select语句的时候才会生成快照,在此之前事务中执行的uodate, insert, delete操作都不会生成快照;<br>3)READ COMMITED隔离解别下,每次读取都会重新生成一个快照,每次快照都是最新的,因此事务中每次select也可以看到其他已经提交事务所做的更改;REPEATED READ隔离级别下,快照会在事务中第一次select语句执行时生成,只有本事务中对数据进行更改才会更新快照,因此,只有第一次select之前其他已提交事务所做的更改可以看到,但是如果已经执行了seletc,那么其他事务commit数据,select是看不到的。</p><p>2.当前读:读取的是最新的数据,需要加锁;<br>select <em> from table where ? lock in share mode;<br>select </em> from table where ? for update;<br>insert;<br>update;<br>delete;</p><h3 id="InnoDB如何解决幻读问题?"><a href="#InnoDB如何解决幻读问题?" class="headerlink" title="InnoDB如何解决幻读问题?"></a>InnoDB如何解决幻读问题?</h3><p>MVCC、next-key lock、间隙锁</p><ul><li>Record Locks(记录锁)锁定一个记录上的索引,而不是记录本身,如果没有设置索引,InnoDB会自动在主键上创建隐藏的聚簇索引,因此Record Locks依然可以使用;</li><li>Gap Locks(间隙锁)锁定索引之间的间隙,但是不包含索引本身。例如当一个事务执行以下语句,其他事务就不能再t.c中插入15,select c from t where c between 10 and 20 for update;</li><li>Next-key Locks是记录锁和间隙锁的结合,不仅锁定一个记录上的索引,也锁定索引之间的间隙。例如一个索引包含以下值:10,11,13,20,那么就需要锁定以下区间(负无穷, 10], (10, 11], (11, 13], (13, 20], (20, 正无穷)</li></ul><p>InnoDB默认的隔离级别是RR(可重复读),不能解决幻读;MVCC+next-key lock可以解决幻读的问题。(快照读即一般的select靠MVCC解决幻读)(当前读select … for update, select … lock in share mode; insert …; update …; delete …依赖于间隙锁解决)<br>1)间隙锁的主要作用是为了防止出现幻读,会把锁定的方位扩大。控制间隙锁的参数是innodb_locks_unsafe_for_binlog 这个参数的默认值是off,也就是启用间隙锁。<br>2)行锁(record lock)和间隙锁组合起来叫做next-key lock,锁定一个范围,并且锁定记录本身,主要目的是解决幻读的问题。行锁(record lock)和间隙锁组合起来叫做next-key lock,锁定一个范围,并且锁定记录本身,主要目的是解决幻读的问题。</p><blockquote><p>1.间隙锁防止间隙内有数新数据被插入;防止已存在的数据,更新成间隙内的数据;<br>2.InnoDB自动使用间隙锁的条件:必须在RR级别下,检索条件必须有索引。</p></blockquote><p>举一个例子:<br>id(主键) 1 3 6 8 10 13<br>number(二级索引)2 4 5 5 5 11</p><p>mysql> show create table test\G;<br><strong><strong><strong><strong><strong><strong>***</strong></strong></strong></strong></strong></strong> 1. row <strong><strong><strong><strong><strong><strong>***</strong></strong></strong></strong></strong></strong><br> Table: test<br>Create Table: CREATE TABLE <code>test</code> (<br> <code>id</code> int(11) NOT NULL,<br> <code>number</code> int(11) DEFAULT NULL,<br> PRIMARY KEY (<code>id</code>),<br> KEY <code>number</code> (<code>number</code>)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8</p><p>案例:</p><p>session 1:<br>start transaction ;<br>select * from test where number=4 for update;</p><p>session 2:<br>start transaction;<br>insert into test value(0,2);#(执行成功)<br>insert into test value(2,2);#(阻塞)<br>insert into test value(2,4);#(阻塞)<br>insert into test value(2,2);#(阻塞)<br>insert into test value(4,4);#(阻塞)<br>insert into test value(4,5);#(阻塞)<br>insert into test value(7,5);#(执行成功)<br>insert into test value(9,5);#(执行成功)<br>insert into test value(11,5);#(执行成功)</p>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">数据库事务并发控制和事务隔离级别</font></p></div>
</summary>
<category term="之初-数据库" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
<category term="事务" scheme="https://zhichuwy.cn/tags/%E4%BA%8B%E5%8A%A1/"/>
<category term="并发控制" scheme="https://zhichuwy.cn/tags/%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6/"/>
<category term="隔离级别" scheme="https://zhichuwy.cn/tags/%E9%9A%94%E7%A6%BB%E7%BA%A7%E5%88%AB/"/>
</entry>
<entry>
<title>乐观锁悲观锁</title>
<link href="https://zhichuwy.cn/DB-%E4%B9%90%E8%A7%82%E9%94%81%E6%82%B2%E8%A7%82%E9%94%81/"/>
<id>https://zhichuwy.cn/DB-乐观锁悲观锁/</id>
<published>2019-08-08T23:38:42.000Z</published>
<updated>2019-08-22T14:45:46.823Z</updated>
<content type="html"><![CDATA[<div class="myblockquote"><p style="text-align: center;"><font size="5px">乐观锁 悲观锁</font></p></div><a id="more"></a><blockquote><p>参考文章:<br><a href="https://mp.weixin.qq.com/s/4RKQMA4yF5u7jN9BtS8x_Q" target="_blank" rel="noopener">https://mp.weixin.qq.com/s/4RKQMA4yF5u7jN9BtS8x_Q</a><br><a href="https://blog.csdn.net/qq_34337272/article/details/81072874" target="_blank" rel="noopener">https://blog.csdn.net/qq_34337272/article/details/81072874</a><br><a href="https://bestzuo.cn" target="_blank" rel="noopener">https://bestzuo.cn</a></p></blockquote><h3 id="乐观锁"><a href="#乐观锁" class="headerlink" title="乐观锁"></a>乐观锁</h3><h3 id="悲观锁"><a href="#悲观锁" class="headerlink" title="悲观锁"></a>悲观锁</h3><h3 id="间隙锁-Next-Key锁"><a href="#间隙锁-Next-Key锁" class="headerlink" title="间隙锁 Next-Key锁"></a>间隙锁 Next-Key锁</h3>]]></content>
<summary type="html">
<div class="myblockquote"><p style="text-align: center;"><font size="5px">乐观锁 悲观锁</font></p></div>
</summary>
<category term="之初-数据库" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
<category term="乐观锁" scheme="https://zhichuwy.cn/tags/%E4%B9%90%E8%A7%82%E9%94%81/"/>
<category term="悲观锁" scheme="https://zhichuwy.cn/tags/%E6%82%B2%E8%A7%82%E9%94%81/"/>
</entry>
<entry>
<title>常见设计模式</title>
<link href="https://zhichuwy.cn/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/"/>
<id>https://zhichuwy.cn/设计模式/</id>
<published>2019-08-08T23:33:20.000Z</published>
<updated>2019-08-17T14:07:34.441Z</updated>
<content type="html"><![CDATA[<h3 id="常见设计模式-单例模式,工厂模式,策略模式,…"><a href="#常见设计模式-单例模式,工厂模式,策略模式,…" class="headerlink" title="常见设计模式(单例模式,工厂模式,策略模式,…)"></a>常见设计模式(单例模式,工厂模式,策略模式,…)</h3><ol><li>单例模式(同步!)<blockquote><p>参考文章 <a href="https://mp.weixin.qq.com/s/Yy_KW35Ndlb5v6hQ30_lGQ" target="_blank" rel="noopener">https://mp.weixin.qq.com/s/Yy_KW35Ndlb5v6hQ30_lGQ</a></p></blockquote></li></ol><ol start="2"><li><p>工厂/抽象工厂模式</p></li><li><p>策略模式</p></li><li><p>代理/动态代理模式</p></li><li><p>责任链模式</p></li></ol>]]></content>
<summary type="html">
<h3 id="常见设计模式-单例模式,工厂模式,策略模式,…"><a href="#常见设计模式-单例模式,工厂模式,策略模式,…" class="headerlink" title="常见设计模式(单例模式,工厂模式,策略模式,…)"></a>常见设计模式(单例模式,工厂模式
</summary>
<category term="之初-进阶" scheme="https://zhichuwy.cn/categories/%E4%B9%8B%E5%88%9D-%E8%BF%9B%E9%98%B6/"/>
<category term="常见设计模式" scheme="https://zhichuwy.cn/tags/%E5%B8%B8%E8%A7%81%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/"/>
<category term="单例模式" scheme="https://zhichuwy.cn/tags/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/"/>
<category term="工厂模式" scheme="https://zhichuwy.cn/tags/%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/"/>
<category term="策略模式" scheme="https://zhichuwy.cn/tags/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/"/>
<category term="代理/动态代理模式" scheme="https://zhichuwy.cn/tags/%E4%BB%A3%E7%90%86-%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F/"/>
<category term="责任链模式" scheme="https://zhichuwy.cn/tags/%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F/"/>
</entry>
</feed>