-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheight_part_essays.html
553 lines (465 loc) · 30.4 KB
/
eight_part_essays.html
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
<!DOCTYPE html><html><head>
<title>eight_part_essays</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css">
<style>
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;
-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}
.token.comment,
.token.blockquote {
color: #969896;
}
.token.cdata {
color: #183691;
}
.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}
.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}
.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}
.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}
.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}
.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}
.token.entity {
cursor: help;
}
.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}
.token.list {
color: #ed6a43;
}
.token.inserted {
background-color: #eaffea;
color: #55a532;
}
.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
/* JSON */
.language-json .token.property {
color: #183691;
}
.language-markup .token.tag .token.punctuation {
color: #333;
}
/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}
/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}
code.language-yaml {
color: #183691;
}
/* Ruby */
.language-ruby .token.function {
color: #333;
}
/* Markdown */
.language-markdown .token.url {
color: #795da3;
}
/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}
.language-makefile .token.variable {
color: #183691;
}
.language-makefile .token.builtin {
color: #0086b3;
}
/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}
/* highlight */
pre[data-line] {
position: relative;
padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
position: absolute;
top: 0;
left: 0;
background-color: transparent;
display: block;
width: 100%;
}
pre[data-line] .line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: hsla(24, 20%, 50%,.08);
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
pointer-events: none;
line-height: inherit;
white-space: pre;
}
pre[data-line] .line-highlight:before,
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-start);
position: absolute;
top: .4em;
left: .6em;
min-width: 1em;
padding: 0 .5em;
background-color: hsla(24, 20%, 50%,.4);
color: hsl(24, 20%, 95%);
font: bold 65%/1.5 sans-serif;
text-align: center;
vertical-align: .3em;
border-radius: 999px;
text-shadow: none;
box-shadow: 0 1px white;
}
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-end);
top: auto;
bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
</style>
</head>
<body for="html-export">
<div class="mume markdown-preview ">
<h1 class="mume-header" id="%E9%9D%A2%E7%BB%8F%E5%85%AB%E8%82%A1">面经八股</h1>
<ul>
<li><a href="#%E9%9D%A2%E7%BB%8F%E5%85%AB%E8%82%A1">面经八股</a>
<ul>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8A%80%E6%9C%AF">计算机技术</a>
<ul>
<li><a href="#%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F">操作系统</a>
<ul>
<li><a href="#%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E6%A8%A1%E5%9E%8B">线程的状态模型</a></li>
<li><a href="#%E7%BA%BF%E7%A8%8B%E4%B8%8E%E8%BF%9B%E7%A8%8B">线程与进程</a></li>
<li><a href="#%E6%AD%BB%E9%94%81">死锁</a>
<ul>
<li><a href="#%E5%9B%9B%E4%B8%AA%E5%BF%85%E8%A6%81%E6%9D%A1%E4%BB%B6">四个必要条件</a></li>
<li><a href="#%E8%A7%A3%E5%86%B3%E6%AD%BB%E9%94%81">解决死锁</a></li>
</ul>
</li>
<li><a href="#%E9%80%9A%E4%BF%A1">通信</a>
<ul>
<li><a href="#%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1">线程间通信</a></li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1">进程间通信</a></li>
</ul>
</li>
<li><a href="#%E8%BF%9B%E7%A8%8B%E5%90%8C%E6%AD%A5">进程同步</a></li>
</ul>
</li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C">计算机网络</a>
<ul>
<li><a href="#tcp">TCP</a>
<ul>
<li><a href="#%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B">三次握手</a></li>
<li><a href="#%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B">四次挥手</a></li>
</ul>
</li>
<li><a href="#http">HTTP</a>
<ul>
<li><a href="#%E6%96%B9%E6%B3%95">方法</a></li>
<li><a href="#get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB">GET和POST的区别</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#%E6%95%B0%E6%8D%AE%E5%BA%93">数据库</a>
<ul>
<li><a href="#acid">ACID</a></li>
</ul>
</li>
<li><a href="#%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F">设计模式</a>
<ul>
<li><a href="#%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F">单例模式</a></li>
<li><a href="#%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F">策略模式</a></li>
<li><a href="#%E8%A3%85%E9%A5%B0%E6%A8%A1%E5%BC%8F">装饰模式</a></li>
<li><a href="#%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F">命令模式</a></li>
<li><a href="#%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F%E5%8F%91%E5%B8%83%E8%AE%A2%E9%98%85%E8%80%85%E6%A8%A1%E5%BC%8F">观察者模式/发布订阅者模式</a></li>
<li><a href="#%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F">工厂模式</a></li>
</ul>
</li>
<li><a href="#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95">软件测试</a>
<ul>
<li><a href="#%E9%BB%91%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95">黑白盒测试</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 class="mume-header" id="%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8A%80%E6%9C%AF">计算机技术</h2>
<h3 class="mume-header" id="%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F">操作系统</h3>
<h4 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E6%A8%A1%E5%9E%8B">线程的状态模型</h4>
<p><img src="eight_part_essays/thread_states.png" alt></p>
<h4 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E4%B8%8E%E8%BF%9B%E7%A8%8B">线程与进程</h4>
<ul>
<li>线程:任务调度的最小单位</li>
<li>进程:资源调度的最小单位</li>
</ul>
<h4 class="mume-header" id="%E6%AD%BB%E9%94%81">死锁</h4>
<h5 class="mume-header" id="%E5%9B%9B%E4%B8%AA%E5%BF%85%E8%A6%81%E6%9D%A1%E4%BB%B6">四个必要条件</h5>
<ul>
<li>
<p>互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。</p>
</li>
<li>
<p>请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。</p>
</li>
<li>
<p>非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。</p>
</li>
<li>
<p>循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。</p>
</li>
</ul>
<h5 class="mume-header" id="%E8%A7%A3%E5%86%B3%E6%AD%BB%E9%94%81">解决死锁</h5>
<h4 class="mume-header" id="%E9%80%9A%E4%BF%A1">通信</h4>
<h5 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1">线程间通信</h5>
<ul>
<li>global variables</li>
<li>message queue</li>
<li>event</li>
</ul>
<h5 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1">进程间通信</h5>
<ul>
<li>pipe</li>
<li>message queue</li>
<li>signal</li>
<li>shared memory</li>
<li>socket</li>
</ul>
<h4 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E5%90%8C%E6%AD%A5">进程同步</h4>
<ul>
<li>
<p>临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问</p>
</li>
<li>
<p>互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的</p>
</li>
<li>
<p>信号量(Semaphore):为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了</p>
</li>
<li>
<p>事件(Event): 用来通知线程有一些事件已发生,从而启动后继任务的开始</p>
</li>
</ul>
<h3 class="mume-header" id="%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C">计算机网络</h3>
<h4 class="mume-header" id="tcp">TCP</h4>
<h5 class="mume-header" id="%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B">三次握手</h5>
<p><img src="eight_part_essays/tcp_connect.png" alt></p>
<p>建立端对端<strong>可靠</strong>通信所需的最低通信次数是三次。双方均需要确知对方能够正确接收自身发送的数据,需要:</p>
<ol>
<li>A向B发送数据</li>
<li>B回复ACK</li>
<li>B向A发送数据</li>
<li>A回复ACK</li>
</ol>
<p>其中2、3步可以合成一步,因此最少需要三次。</p>
<h5 class="mume-header" id="%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B">四次挥手</h5>
<p><img src="eight_part_essays/tcp_disconnect.png" alt></p>
<p>客户端主动发送FIN关闭连接,停止发送报文,服务器端需要发送完剩余的报文。</p>
<ul>
<li>
<p>TIME_WAIT的意义:</p>
<ol>
<li>
<p>如果client的最后一个ACK丢失,而client又不使用TIME_WAIT保存自己的连接状态,那么当server重传FIN的时候双方会异常响应。</p>
</li>
<li>
<p>由于IP是不具备保序性的,所以可能有数据包比server的FIN报文到达的晚,如果不具备TIME_WAIT状态而又重新建立了连接,这个数据包会被认为是新建立的连接传来的。</p>
</li>
<li>
<p>通常等待时间是2MSL(Maximum Segment Lifetime),指一个TCP分段能在网络中存在的最大时间。取决于实现,30秒-2分钟。</p>
</li>
</ol>
</li>
</ul>
<h4 class="mume-header" id="http">HTTP</h4>
<h5 class="mume-header" id="%E6%96%B9%E6%B3%95">方法</h5>
<ul>
<li>
<p>GET:请求获取Request——URL所标识的资源</p>
</li>
<li>
<p>POST:在Request——URL所标识的资源后附加资源</p>
</li>
<li>
<p>HEAD:请求获取由Request——URL所标识的资源的响应消息报头</p>
</li>
<li>
<p>PUT:请求服务器存储一个资源,由Request——URL作为其标识</p>
</li>
<li>
<p>DELETE:请求服务器删除由Request——URL所标识的资源</p>
</li>
<li>
<p>TRACE:请求服务器回送收到的请求信息(用于测试和诊断)</p>
</li>
<li>
<p>CONNECT:保留</p>
</li>
<li>
<p>OPTIONS:请求查询服务器性能</p>
</li>
</ul>
<h5 class="mume-header" id="get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB">GET和POST的区别</h5>
<h3 class="mume-header" id="%E6%95%B0%E6%8D%AE%E5%BA%93">数据库</h3>
<h4 class="mume-header" id="acid">ACID</h4>
<ul>
<li>
<p>原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。</p>
</li>
<li>
<p>一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。</p>
</li>
<li>
<p>隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。</p>
</li>
<li>
<p>持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。</p>
</li>
</ul>
<h3 class="mume-header" id="%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F">设计模式</h3>
<h4 class="mume-header" id="%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F">单例模式</h4>
<p>保证一个类仅有一个实例,并提供一个访问它的全局访问点,避免一个全局使用的类频繁的创建和销毁,节省系统资源,提高程序效率。</p>
<h4 class="mume-header" id="%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F">策略模式</h4>
<p>策略模式是把一个类中经常改变或者将来可能改变的部分提取出来作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。</p>
<p>在first-class function的语言中直接传入函数</p>
<h4 class="mume-header" id="%E8%A3%85%E9%A5%B0%E6%A8%A1%E5%BC%8F">装饰模式</h4>
<p>装饰模式:允许向一个现有的对象添加新的功能,同时又不改变其结构,以在不使用创造更多子类的情况下,将对象的功能加以扩展。</p>
<p>装饰器</p>
<h4 class="mume-header" id="%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F">命令模式</h4>
<p>定义<code>__call__()</code>方法</p>
<h4 class="mume-header" id="%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F%E5%8F%91%E5%B8%83%E8%AE%A2%E9%98%85%E8%80%85%E6%A8%A1%E5%BC%8F">观察者模式/发布订阅者模式</h4>
<h4 class="mume-header" id="%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F">工厂模式</h4>
<p>简单工厂模式:定义一个用于创建对象的接口或抽象类,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。</p>
<h3 class="mume-header" id="%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95">软件测试</h3>
<h4 class="mume-header" id="%E9%BB%91%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95">黑白盒测试</h4>
<ul>
<li>
<p>黑盒测试:</p>
<p>功能测试、数据驱动测试;从用户出发出发;</p>
<ul>
<li>
<p>等价类</p>
</li>
<li>
<p>边界值</p>
</li>
<li>
<p>状态迁移</p>
</li>
<li>
<p>系统测试</p>
</li>
</ul>
</li>
<li>
<p>白盒测试:</p>
<p>结构测试、逻辑驱动测试;从开发者视角出发;</p>
<ul>
<li>
<p>静态测试:不运行程序的测试,利用人或者工具进行代码检查</p>
</li>
<li>
<p>单元测试</p>
</li>
</ul>
</li>
</ul>
</div>
</body></html>