-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
2083 lines (1114 loc) · 110 KB
/
index.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
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html class="theme-next muse use-motion">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />
<link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="/vendors/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />
<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />
<meta name="keywords" content="Hexo, NexT" />
<link rel="alternate" href="/atom.xml" title="meijing0114的博客" type="application/atom+xml" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />
<meta name="description" content="记录科技与生活">
<meta property="og:type" content="website">
<meta property="og:title" content="meijing0114的博客">
<meta property="og:url" content="http://meijing0114.me/index.html">
<meta property="og:site_name" content="meijing0114的博客">
<meta property="og:description" content="记录科技与生活">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="meijing0114的博客">
<meta name="twitter:description" content="记录科技与生活">
<script type="text/javascript" id="hexo.configuration">
var NexT = window.NexT || {};
var CONFIG = {
scheme: 'Muse',
sidebar: {"position":"left","display":"always"},
fancybox: true,
motion: true,
duoshuo: {
userId: 0,
author: '博主'
}
};
</script>
<link rel="canonical" href="http://meijing0114.me/"/>
<title> meijing0114的博客 </title>
</head>
<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
<script type="text/javascript">
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?a5a4534386a17bda81a3d4f5669e4b7b";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<div class="container one-collumn sidebar-position-left
page-home
">
<div class="headband"></div>
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-meta ">
<div class="custom-logo-site-title">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">meijing0114的博客</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<p class="site-subtitle"></p>
</div>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
<nav class="site-nav">
<ul id="menu" class="menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section">
<i class="menu-item-icon fa fa-fw fa-home"></i> <br />
首页
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives" rel="section">
<i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
归档
</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags" rel="section">
<i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
标签
</a>
</li>
</ul>
</nav>
</div>
</header>
<main id="main" class="main">
<div class="main-inner">
<div class="content-wrap">
<div id="content" class="content">
<section id="posts" class="posts-expand">
<article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2020/06/04/book2020-06-04/" itemprop="url">
IT小说可以有多好看 - 读 《凤凰项目 - 一个IT运维的传奇故事》
</a>
</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time itemprop="dateCreated" datetime="2020-06-04T22:07:17+08:00" content="Jun 4 2020">
Jun 4 2020
</time>
</span>
<span class="post-category" >
|
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="https://schema.org/Thing">
<a href="/categories/书评影评/" itemprop="url" rel="index">
<span itemprop="name">书评影评</span>
</a>
</span>
</span>
<span class="post-comments-count">
|
<a href="/2020/06/04/book2020-06-04/#comments" itemprop="discussionUrl">
<span class="post-comments-count ds-thread-count" data-thread-key="2020/06/04/book2020-06-04/" itemprop="commentsCount"></span>
</a>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>程序员喜欢黑别人,也喜欢自黑。对网络工具的熟练使用让他们在互联网上充分的表达。各类刻画程序员的段子、漫画深入人心。以至于程序员与搬砖,与996,与植发产生了一些一言难尽的联系。这些联系抓住了那些程序员工作性质中较为博人眼球的部分,有好有坏。但我从来没读过一本,以程序员为第一主角的书。这本《凤凰项目 - 一个IT运维的传奇故事》就是这么一本神奇的书。书中情节可谓是跌宕起伏,但这种跌宕起伏,如果你没有PK过需求,没有发生过紧急上线,没有发生过强行发布,没有被需求催的动弹不得,或许有点难体会。但是没关系,这仍然不妨碍你以这本书为蓝本,从一个侧面,了解一家公司的运作与IT之间千丝万缕的联系。</p>
<p>// - 网文的角度,换个名字;<br>如果要以网文命名的套路,给这本书重新取一个名字。我觉得应该是《霸气运维变身霸道总裁 - 我真的只是普通天分》。虽然这么起名字有点夸张,但不夸张的说,书中主角的确是有“光环的”。</p>
<p>图1 光环</p>
<p>// - 描述梗概;</p>
<p>一个原本只是负责自己部门的技术总监,却在自己领导被开掉后,担任了“无极限”汽车零部件公司的IT运维部副总裁。彼时这家公司面临竞争对手咄咄逼人的竞争,而寄托了公司业务前进希望的“凤凰”项目却在投入了2000万美元研发资金,耗时两年后却还迟迟不能上线。公司运营事故频出,合规方面还面临无穷无尽的审查。项目缺乏管理和规划,所有人都在疲于奔命,但却没看到胜利的希望。跨部门之间沟通如铜墙铁壁,私人关系代替流程成为事情推进的动力。<br>就在这么被动的情况下,我们的主角,作为新任的IT运维部副总裁,挑起了大梁。书中前半部分可以说是先抑后扬到了极致。新官上任第一天,工资系统一级运营事故,涉及N年老系统与关键人力缺失。上任第一周,面临审计部门压力,要花费半数人力满足合规问题。更要命的是,没有人知道IT运维部的人力现在在处理哪些需求以及将来会过来哪些需求,没有人知道整个公司每天有多少次发布,每个发布对哪些系统有什么样的影响。更要命的是,市场部的副总裁莎拉是个帅锅大王,得时时刻刻防着明枪暗箭。CEO史蒂夫又是刚愎自用,对现有问题视而不见,只要结果。<br>尽管主角殚精竭力,但仓促之间第一个月的“凤凰”项目上线,还是成了一场空前绝后的失败,我们不妨来看看发布中遇到的问题,看有多少读者会会心一笑:</p>
<ul>
<li>运维准备发布,遇到问题,结果相关开发已经回家;</li>
<li>发布涉及团队没有并行,测试报告发出才真正准备线上环境;</li>
<li>待发布文件频繁修改,手动拷贝更新线上文件;</li>
<li>上线清单含糊不清,配置依赖根本没列出来;</li>
<li>遇到重大风险不及时提出,及时评估,及时处理,多方压力导致一意孤行导致更大范围故障;</li>
<li>版本不可控,版本变更范围不可控,每次发布质量不可控;</li>
<li>性能测试不过关,资源预估不过关,临时调资源;</li>
<li>发布无统一协调人,无单一入口,导致群龙无首,盲目发布;</li>
<li>遭遇甩锅侠:你现在发布遇到问题了怎么不早说,技术解释完全无用;</li>
<li>关键数据脚本发布失败,导致不可逆变更,回滚方案设计不完善或完全没有回滚;</li>
<li>线上版本不稳定,需要强制定时重启;</li>
<li>容量预估不到位,实体机、机架、机房、带宽等物理资源成为瓶颈;</li>
<li>发布工具不完善,设计大量手动操作和不规范脚本操作,只能堆人;</li>
<li>发布失败后善后方案不完善,没有容灾方案;</li>
<li>安全测试不过关,用户数据有泄露风险;</li>
</ul>
<p>不知道各位看到怎么想,我从其中看到了不少之前工作的影子。而且对这个“凤凰”项目的整体发布过程,可以说是看得心惊肉跳了。这么一场发布大失败可以说是空前绝后了。公司股价大跌,董事会震怒,CEO只有三个月时间重振旗鼓,否则IT外包,公司拆分,大家各回各家。</p>
<p>故事到这儿,主角光环就开始爆发了,爽文节奏就一波波带起来了。在高人指点之下,主角把IT运维部的工作分为四类工作:</p>
<ol>
<li>支撑关键外部项目研发和运维,如凤凰项目;</li>
<li>支撑内部IT项目的运维;</li>
<li>提供稳定可靠高效的变更发布能力,确保项目保质保量上线;</li>
<li>救火,也就是计划外工作;</li>
</ol>
<p>那么要非常好的完成这四项工作,就得借助于高人的秘籍:“三步工作法”:</p>
<ol>
<li>第一步建立工作从研发部到IT运维部的快速工作流,这样就能衔接业务部门与客户;</li>
<li>第二步缩短和放大反馈回路,从而在源头上解决质量问题,避免返工;</li>
<li>第三步建立一种文化,既能鼓励探索、从失败中吸取教训,又能理解反复实践是精通工作的先决条件;</li>
</ol>
<p>这三步说起来简单,做起来着实不易。比如要实现第一点,首先要做到的就是控制到IT运维部的工作,针对外部、内部、发布这三类主要工作,都建立工作流转的流程,确保关键人力可控,确保任务可管理,确保流转过程顺畅。同时找到项目的约束点,如果要发力,就一定对准约束点。否则:</p>
<p>< 所有对非系统瓶颈的提升,都是在做无用功。</p>
<p>而第二步中,源头上解决问题听起来简单,应用起来变化无穷:</p>
<ul>
<li>在项目开始就做好发布、容量规划工作;</li>
<li>提升变更发布能力,一天十次发布,成熟的运维部应该就要有这种自信;</li>
</ul>
<p>这样第四类工作救火,也就是计划外工作,就会大大减少。</p>
<p>就这样,在主角的带领下,这家公司起死回生。关键项目进入敏捷发布节奏,同时因为和业务部门合作紧密,所以项目调整尤其灵活。而反过来IT也具有这种支撑的能力。所有部门通力合作,为同一个目标,以更主动的方式发挥自己的市场、研发、运维、安全方面的优势。主角本人,自然也顺利的成为公司的下一任接班人。。</p>
<p>平心而论,爽文看过不少,但是以IT从业人员作为主角的爽文,这本书确是第一本。书中尽管剧情略显浮夸,但不乏真知灼见。如今IT已经不仅仅是一个部门,它是一种技能,就像能读会算一样。如果一个公司所有人,在现在这个时代,能够多少掌握这些技能。理解技术能够做什么,不能做什么,那怎会不先人一步呢?</p>
<p>PS: 期待作者下一本,以研发人员为主角的爽文。毕竟书中以运维口吻对研发的吐槽太多了 T T</p>
</div>
<div>
</div>
<div>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2020/05/07/CCP001/" itemprop="url">
Cloud Concept
</a>
</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time itemprop="dateCreated" datetime="2020-05-07T08:54:20+08:00" content="May 7 2020">
May 7 2020
</time>
</span>
<span class="post-comments-count">
|
<a href="/2020/05/07/CCP001/#comments" itemprop="discussionUrl">
<span class="post-comments-count ds-thread-count" data-thread-key="2020/05/07/CCP001/" itemprop="commentsCount"></span>
</a>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h2 id="什么是云计算"><a href="#什么是云计算" class="headerlink" title="什么是云计算"></a>什么是云计算</h2><p>使用网络上的远程服务器来管理处理数据, 而非使用本地服务器或个人电脑.<br>On-Premise:</p>
<ul>
<li>个人拥有服务器</li>
<li>个人雇佣IT</li>
<li>个人支付或租赁资产</li>
<li>个人承担风险</li>
<li>政府部门、数据特别敏感的组织、合规方面非常严格的大型企业</li>
</ul>
<p>Cloud Providers:</p>
<ul>
<li>云厂商拥有服务器</li>
<li>云厂商雇佣IT</li>
<li>云厂商支付或租赁资产</li>
<li>个人负责配置云服务和代码</li>
<li>适合初创公司, 新项目</li>
</ul>
<p>Hybrid:</p>
<ul>
<li>两者都有</li>
<li>银行, 投资机构, 大型的专业服务提供商;</li>
<li>原因是为了保持遗留的on-premise</li>
</ul>
<h2 id="云厂商相对于On-Premise的优势"><a href="#云厂商相对于On-Premise的优势" class="headerlink" title="云厂商相对于On-Premise的优势"></a>云厂商相对于On-Premise的优势</h2><ol>
<li>把固定成本换成了可变成本: 云服务按需付费</li>
<li>大规模经济的优势: 你在和其他客户共同分享支出</li>
<li>容量管理更容易: 动态伸缩, 容量管理更灵活;</li>
<li>增加速度和敏捷性: 分钟级或秒级就可部署资源;</li>
<li>不用在花钱运维和维护数据中心: 关注在你自己的客户身上, 而非底层基础设施;</li>
<li>迅速全球化: 全球内跨区域部署只需几个点击</li>
</ol>
<h2 id="Types-of-Cloud-Computing"><a href="#Types-of-Cloud-Computing" class="headerlink" title="Types of Cloud Computing"></a>Types of Cloud Computing</h2><p>SaaS:</p>
<ul>
<li>Software as a Service</li>
<li>针对客户</li>
<li>一个完整的由服务提供者运行和管理的产品, 客户无需关注服务如何运行和维护.</li>
<li>例子: salesforce,gmail, Microsoft365</li>
</ul>
<p>PaaS:</p>
<ul>
<li>Platform as a Service</li>
<li>针对开发者</li>
<li>你的组织不需要关注底层基础设施, 关注应用的部署和管理即可;</li>
<li>不需要关心 开通, 配置, 或硬件或操作系统;</li>
<li>例子: Heroku, Elastic Beanstalk, Azure App Engine</li>
</ul>
<p>IaaS:</p>
<ul>
<li>Infrastructure as a Service</li>
<li>针对企业管理员</li>
<li>云IT的基本组成单元. 提供对网络特性、计算资源和存储资源的访问;</li>
<li>无需关心数据中心和硬件;</li>
<li>例子: AWS, Azure, Google Cloud Platform</li>
</ul>
<h2 id="AWS-Global-infrastructure-instroduction-and-map-overview"><a href="#AWS-Global-infrastructure-instroduction-and-map-overview" class="headerlink" title="AWS Global infrastructure : instroduction and map overview"></a>AWS Global infrastructure : instroduction and map overview</h2><p>图:亚马逊全球架构</p>
<ol>
<li>Geographic Regions</li>
</ol>
<ul>
<li>包含多个Availability Zones的物理位置</li>
<li>至少有两个Availability Zone;</li>
<li>Region之间 位置、供电、供水必须独立;</li>
<li>US-EAST是AWS最大的数据中心,新feature也先上这里;</li>
<li>US-EAST-1是查看账单的区域;</li>
</ul>
<ol>
<li>Availability Zones<br>截图: AZs</li>
</ol>
<p>一个或多个数据中心. 比如US-East-1. 这块Azure的架构也差不多. 同一区域AWS至少俩AZ, 多个AZ主要是为了支持一个数据中<br>心挂掉的情况下,可以故障切换到另一个AZ.<br>同一区域的AZ之间的延迟应该在10ms以内.</p>
<ol>
<li>Edge Locations</li>
</ol>
<p>截图: Edge location</p>
<p>AWS合作伙伴的数据中心, 和AWS网络之间是直连的, 速度会快.如果你使用AWS的CloudFront或者Route 53,请求会自动路由到最近的Edge Location. AWS的S3 Transfer Acceleration和API Gateway同样使用AWS Edge Network。<br>主要还是为了解决用户请求低延迟的问题。</p>
<h2 id="GovCloud"><a href="#GovCloud" class="headerlink" title="GovCloud"></a>GovCloud</h2><p>AWS的GovCloud主要是针对美国官方或企业的一些敏感项目。操作人只能是美国公民,访问人也有权限要求。这个好处在于一些针对美国官方的解决方案提供商,可以在GovCloud构建解决方案,而不需要关心很多合规相关的问题。前段时间,Azure从AWS手里拿走的那个大单,如果要实施,肯定是在Azure里类似GovCloud的环境中进行。</p>
</div>
<div>
</div>
<div>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2020/04/28/book2020-04-27/" itemprop="url">
IT从业人员必读 - 大师访谈录,成就非凡软件人生
</a>
</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time itemprop="dateCreated" datetime="2020-04-28T08:33:36+08:00" content="Apr 28 2020">
Apr 28 2020
</time>
</span>
<span class="post-category" >
|
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="https://schema.org/Thing">
<a href="/categories/书评影评/" itemprop="url" rel="index">
<span itemprop="name">书评影评</span>
</a>
</span>
</span>
<span class="post-comments-count">
|
<a href="/2020/04/28/book2020-04-27/#comments" itemprop="discussionUrl">
<span class="post-comments-count ds-thread-count" data-thread-key="2020/04/28/book2020-04-27/" itemprop="commentsCount"></span>
</a>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>书评写过不少, 涉及各个不同主题的都有. 或长或短, 主要目的当然是希望看过的人, 雁过留痕, 也能读读同一本书, 产生一些思想火花的碰撞. 但说真的, 这本书我的推荐程度, 可以达到“吐血推荐”的标准.</p>
<p>如今, IT是个热门行业. 热门体现在两方面, 一方面是毕业生持续供应, 不管是不是计算机专业的, 毕业后很多人选择从事这一职业. 另一方面是行业影响力, 它不光影响软件行业, 也通过各式各样的软件, 对其他行业产生影响. 遥想2018年, 互联网风投让猪在天上飞之时, 不说个”互联网+“ 都不好意思路演吧. 那么这么多IT毕业生+IT从业者, 如果让我说有本书必看, 《大师访谈录 - 成就非凡软件人生》, 我觉得非看不可!~</p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-7c9a9193c1bf9cdd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="s29783446.jpg"></p>
<p>为啥呢, 因为第一它涉及面广,不管你是刚毕业的,还是有一定经验,或是走上IT领导岗位的, 都一定能从中学到点. 为啥呢? 因为里面很多经验都是来自于Marissa Mayer, James Gosling, Steve Wozniak这种级别的大佬. 第二它说的很细,细到什么程度呢, 至少我觉得是工科男特别喜欢的程度. 做开发的, 不懂项目管理,没关系, 第15章手把手告诉你软件项目管理的秘籍. 想找工作? 可以, 第4章都给你安排了. 甚至不知道IT公司怎么给薪酬? 21章, 讲的特别清楚, 让你一文看懂.</p>
<p>全书围绕三个点展开:</p>
<ul>
<li>入行前必知的基础知识</li>
<li>领导力</li>
<li>如何成就非凡</li>
</ul>
<p>全书行文可以说是由浅入深, 层层深入. 首先是针对职场新人, 第二章先让你建立起一个概念: 什么是优秀的软件. 作者以软件的价值为出发点, 同时区分不同的体现价值的场景, 比如做云计算的和做终端用户软件的, 价值的判断可能完全不同, 但不妨碍它们面向各自的价值点前进. 为什么这件事很重要呢, 因为根据一项针对美国软件研发的分析, 2006年全美软件研发成功率, 只有35%. 所以对个人来说, 在职业生涯的初期, 选择为优秀的软件工作, 非常重要. 而第3-6章可以说是毕业生必读. 从比较学校与职场的差异, 到教你如何找到一份软件行业的工作, 再到职场新人如何成长, 以及软件从业者所应该具备的基本技能. 基本上覆盖了一个初出茅庐的学生, 到慢慢进入工作状态的整个转变过程. 这几章可以说是干货满满, 比如, 毕业生应该如何选择加入的公司呢? 书中推荐了10问:</p>
<ul>
<li>是否开发过专业且高品质的系统?</li>
<li>是否有真正值得你向其学习的能人?</li>
<li>提供给你的职位是否有趣? 在你认同的领域是否有长远发展的潜力?</li>
<li>他们的业务主管是否有实际经验, 真正了解业务需求, 并且有相关的业绩记录?</li>
<li>对其产品是否有清晰的愿景?</li>
<li>是否有独立的研究机构?</li>
<li>公司如何进行创新? 已有的创新有何深远意义?</li>
<li>工作环境是否舒适, 管理是否灵活? 是否符合你的生活方式?</li>
<li>这家公司的运营是否稳定? 你相不相信它在十年内仍然存在?</li>
<li>薪酬是否符合行业标准?</li>
</ul>
<p>如果答案都是yes, 那恭喜你, 这个offer可以签了. 大多数情况下或许做不到面面俱到, 但对你要押注职业生涯加入的公司, 提前回答这些问题能让你更有方向.</p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-0eb0685c3db4e144.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="jules-bss-VW-pFREtl0k-unsplash.jpg"></p>
<p>在第一部分, 还有一章, 十分出彩: “软件研发组织的江湖”. 大家总有一种观点, 程序员的世界很单纯, 但早在李连杰版的笑傲江湖中, 任我行老前辈早已一针见血的指出: “有人的地方就有江湖”. 软件行业当然也毫不列外. 要在江湖中生存、发展, 作者认为沟通非常重要. 而他也绝不空谈, 提出进行商务沟通的四种模式: 私人会面、小组讨论、小组报告、大型报告或演讲. 并针对性的提出了每一种应对策略, 比如私人会面, 就有三个关键词: 魅力、直言不讳、情商, 尽量体会对方的需求和感受, 以达到最佳沟通效果. 除此之外, 在软件江湖中保持一个良好的“印象”非常重要. 如果你来自武当, 大家对你自然刮目相看, 如果你同时还是八卦游龙掌的开发者, 那恭喜你, 你已经有了光环效应. 因此, 通过业绩建立良好声誉, 树立积极形象, 对你的未来发展, 百益而无害.</p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-0bf836d58e127179.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="1_fKbs73PkmAUdbBVI-nVlZQ.png"></p>
<p>第二部分, 作者着力讲述领导力, 对你成长的重要性. 普遍的观点是, 领导力, 让领导有就行了. 我一个大头兵, 要什么领导力呢? 其实不然, 首先领导力不一定非得是经理才能有, 其次很多经理虽然能管理人, 但却缺乏技术领导力. 作者心中的技术领导力, 囊括了协作、时间管理、项目管理、平衡工作生活、管理人等多个方面. 而对于如何具备领导力, 作者绝非空谈. 比如为了协作, 就可以使用作者推荐的“建立情感银行”一招. 将欲取之, 必先予之. 要无私助人、将心比心、激发人们正视自我价值、分享荣耀、多面对面接触. 每一条深入进去都可以是学问, 综合起来, 就能帮助你更好的协作. 再比如, 如果你又一个外部依赖, 想推又推不动, 那么怎么跟对方谈判呢? 作者也提出了多个指导方法: </p>
<ol>
<li>学会理解他人;</li>
<li>预测结果, 这能让你知道自己的底线;</li>
<li>准备好让步, 但这不意味着退让, 而是要在一开始给出比自己预期略高的价码. 让自己有回环的空间. 但如果对方死不松口, 就得不断找到寻求共识的点;</li>
<li>努力实现共赢, 如果对方在某个方面不愿让步, 那么你可以尝试让对方从另一方面补偿. 最终达到你的心理价位. </li>
<li>见好就收, 要心平气和, 我们不总是能得到自己最想要的结果;</li>
</ol>
<p>看完这段, 实在是拍案叫绝. 这些指导方法不但对工作有用, 对去菜市场砍价, 也是受益匪浅啊! </p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-dada3be2874a7a28.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="austin-kehmeier-lyiKExA4zQA-unsplash.jpg"></p>
<p>在领导力部分, 还有一章非常有意思, 那就是禅与平衡之道. 去年996.icu着实火了一把, 究其原因, 也是因为很多时候, 很难做到工作与生活的平衡. 作者自己也认为, 实现工作与生活的平衡, 非常的难. 但他将平衡的进一步细化, 值得思考. 第一种平衡, 是平衡工作和享受生活. 20-40岁,既是事业的稳步上升期,也是最希望能陪家人享受生活的时期, 既然一天24小时是一个零和游戏, 就要学会分配时间. 第二种平衡, 则是平衡工作中的有趣和无趣, 如果你的工作都是重复性的工作, 那么你自然会感到烦躁甚至焦虑. 但如果你的工作充满了挑战并能带来乐趣, 那反过来会提高你的生活质量. 当然, 作者也提供了很多小技巧, 不一一列举了, 不过其中有一条直戳我心: 不要妄想能更高效利用时间或减少睡眠, 因为你过去没做到, 将来也很难. </p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-7dcae7c9bc334aa4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="jared-rice-NTyBbu66_SI-unsplash.jpg"></p>
<p>书本的第三个部分, 讨论了如何成就非凡软件人生. 或许每个人对非凡的定义不尽相同, 但作者努力从世界顶级的IT从业者中, 寻找一些答案. 几乎每一条非凡之路, 都要求你成为某一领域的权威. 大家对1w小时定律耳熟能详, 如果你足够努力, 足够专注, 运气足够好, 那么2-3年你可以成为某个新领域的顶尖人才. 另外, 非凡的程序员们大多知识面广, 并且相信自己有无限可能. 部分大师们喜欢商业实践, 部分喜欢著书立说, 部分喜欢公开演讲. 这都是他们产生影响力的方式. 总之作者总结了一句话: 既要有梦想,又要脚踏实地.</p>
<p>图7 梦想和咸鱼</p>
<p>很多人认为, 在IT行业收入高是成功, 不过除此之外, 工作有趣, 在公司和行业内有影响力, 推动社会进步, 工作自由, 有名望, 四处旅行 也同样可以是衡量成功的标准.</p>
<p>IBM院士 Grady Booch曾说过, “我想不出还有哪个行业能像软件业一样影响其他所有的行业, 我们就像是连接人类和文明的纽带.这个行业太酷了.”</p>
<p>与君共勉.</p>
<p><img src="https://upload-images.jianshu.io/upload_images/96723-6180f960acd7237a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="sydney-rae-geM5lzDj4Iw-unsplash.jpg"></p>
</div>
<div>
</div>
<div>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2017/10/07/redis005/" itemprop="url">
使用redis构建分布式的锁
</a>
</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time itemprop="dateCreated" datetime="2017-10-07T15:13:50+08:00" content="Oct 7 2017">
Oct 7 2017
</time>
</span>
<span class="post-category" >
|
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="https://schema.org/Thing">
<a href="/categories/redis/" itemprop="url" rel="index">
<span itemprop="name">redis</span>
</a>
</span>
</span>
<span class="post-comments-count">
|
<a href="/2017/10/07/redis005/#comments" itemprop="discussionUrl">
<span class="post-comments-count ds-thread-count" data-thread-key="2017/10/07/redis005/" itemprop="commentsCount"></span>
</a>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h2 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h2><p>redis除了在存储方面能够发挥很多作用之外,还可以帮助我们很好的搭建应用组件,通过这些组件进而帮助我们更好的实现业务需求。一个分布式的锁,在很是业务场景中都必不可少。</p>
<p>在用户访问并发大的情况下,多个进程或线程经常同时竞争一个资源。如果都是在本机的资源,那么通过操作系统的一些锁接口,就可以实现。但是很多系统往往是分布式的部署,这时候,使用一个简洁、高效的分布式锁实现方案,就显得迫在眉睫了。</p>
<h2 id="redis本身的锁"><a href="#redis本身的锁" class="headerlink" title="redis本身的锁"></a>redis本身的锁</h2><p>redis本身就常常被用作资源的存储,一个很常见的场景就是电商网站的秒杀。一次促销当中,低价或者特价的商品往往是很少的,而参与的用户确实相当之多。如何在这种情况下,能够尽量公平的实现先到先得,并且保证程序不出错,是一个比较大的考验。</p>
<p>redis本身也是有锁的,这个之前也介绍过,它有几个方面的特性可以保证这一点。第一种就是诸如<code>setnx</code>这样的命令,可以保证对资源的单次读取不受到其他client的干扰,但是由于只能使用一次,一旦占用,就需要重新置空,这会引入额外的并发问题,所以应用的局限性比较大。</p>
<p>第二种则是redis的乐观锁与事务的结合。也就是<code>watch</code>命令和<code>multi</code>命令的结合。通过监控必须的资源key,比如仓储数目<code>storage</code>是否变化,再使用<code>multi</code>将可能造成资源竞争的操作包起来,来避免资源竞争。方案很好,但是问题在于这类乐观锁的设计,需要client侧自己实现重试。而重试次数一旦过多,就会很影响client侧的性能。</p>
<p>第三种则是使用lua脚本,将涉及到竞争操作的命令全部包起来,不过这个实现成本有点高,一般都是在特别大的性能瓶颈,以及比较固定很久不变的业务逻辑的情况下,再使用lua脚本的方式。</p>
<h2 id="使用redis构建分布式锁"><a href="#使用redis构建分布式锁" class="headerlink" title="使用redis构建分布式锁"></a>使用redis构建分布式锁</h2><p>那么既然没有原生支持的合适方案,就非常有必要在redis的协助之下,实现我们自己的分布式锁的方案。这种方案一定要:</p>
<ul>
<li>性能足够高,否则没意义;</li>
<li>使用足够简单,否则影响client侧的接入;</li>
</ul>
<p>而想要正确的实现加锁的功能,必须避免以下的情况:</p>
<ul>
<li>持有锁的进程必须知晓它当前持有锁的状态,避免错误的释放其他进程的锁;</li>
<li>持有锁的进程崩溃的情况下,必须有兜底方案,防止其他进程无谓的等待;</li>
<li>一个进程的锁过期后,多个进程同时尝试获取,必须有且只有一个获取成功;</li>
</ul>
<p>要实现第一点呢,就必须对锁加锁,让进程。</p>
<h2 id="应用场景"><a href="#应用场景" class="headerlink" title="应用场景"></a>应用场景</h2><h2 id="性能对比"><a href="#性能对比" class="headerlink" title="性能对比"></a>性能对比</h2><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2>
</div>
<div>
</div>
<div>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2017/08/05/book016/" itemprop="url">
时刻反照,照亮前路 - 读《我的应许之地:以色列的荣耀与悲情》
</a>
</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time itemprop="dateCreated" datetime="2017-08-05T23:02:11+08:00" content="Aug 5 2017">
Aug 5 2017
</time>
</span>
<span class="post-category" >
|
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="https://schema.org/Thing">
<a href="/categories/书评影评/" itemprop="url" rel="index">
<span itemprop="name">书评影评</span>
</a>
</span>
</span>
<span class="post-comments-count">
|
<a href="/2017/08/05/book016/#comments" itemprop="discussionUrl">
<span class="post-comments-count ds-thread-count" data-thread-key="2017/08/05/book016/" itemprop="commentsCount"></span>
</a>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>就我个人而言,我对犹太人和以色列的态度一直伴有好感和同情的态度。从媒体的影响下认为犹太人都很聪明,因为他们有斯皮尔伯格,爱因斯坦这样的杰出代表。而二战时候犹太人遭受的苦难又让我对他们倍加同情。同时以色列作为一个屹立中东不倒,科技及其发达的国家,是很令人钦佩的。但我似乎从来没有仔细的想过,以色列究竟是如何被建立的,甚至什么时候被建立的,以及它在这些年都经历了什么。我脑中搜寻半天,所得到的只是巴以冲突、犹太人定居点、加沙地带、skype公司,沙龙和阿拉法特这些很零散的新闻点,一次偶然的机会,读到了这本《我的应许之地:以色列的荣耀与悲情》,我想,阅读它绝对值得你付出的时间。</p>
<p>在我合上这本书的时候,不对,准确的说是用手指划过微信读书app的最后一页的时候,不禁问自己一个问题?以色列国家的建立是正义的么?</p>
<p>一个19世纪末的犹太复国主义者会告诉你,一个犹太人组成的以色列国家,是绝对公平正义的,而且,它必须就在死海与约旦河畔的巴勒斯坦。自从耶路撒冷圣城被罗马人攻破,犹太人的圣殿被毁的千百年来,犹太人流离失所。无论他们是分布在欧洲、亚洲、美洲和非洲,心心所向的就是那片位于死海和约旦河的应许之地。十九世纪末,英国殖民下的巴勒斯坦,正是犹太复国主义的最好时机。有什么能比流离失所了千年的犹太民族在此地重聚更加具有争议性呢?</p>
<p>一个从二战时期欧洲犹太人种族灭绝中幸存下来的犹太人会告诉你,这绝对是正义的。二战中的有计划的针对犹太人的种族灭绝令人发指,人类从未如此丑陋。而当他们九死一生,终于来到以色列,终于来到耶路撒冷,可以想见他们的心情。那是一种绝望中的点点星光,毕竟这是历史上第一次犹太人建立的主权国家。这个国家的正义性在他们看来完全不可质疑。从另一个角度来说,正是犹太人所经受的这些苦难,使得他们在二战之后,以色列获取大量的资源与支持,加速了这个位于中东腹地的国家的成长。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/96723-ab6331044f031dd2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="奥斯维辛"></p>
<p>还有更多,从世界各地,各个时期汇聚到以色列的犹太人们。他们心心所向,来到这片属于犹太人的土地。心中怀有的就是用自己的双手为犹太国家的建立而奋斗的念头。犹太民族千百年漂泊的愁绪、归属的期待与种族灭绝后的恐惧,汇聚成了一股惊人的力量,这股力量决定了犹太民族不仅要建立自己的国家,而且要有所成就。</p>
<p>但同一时期在此地生活的阿拉伯人,显然会给你一个相反的答案。毕竟,他们的村庄也在这片土地上面伫立了数百年的时间。面对着犹太人的聚集,曾经的村庄,一个个变身为犹太人的“基布兹”公社。原本的生活方式被打破,原本的家园不复存在,从人民变成难民,在他们的内心深处一定是刻骨铭心的怨恨。这也就注定了巴勒斯坦民族觉醒之后,巴以之间那解不开的结。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/96723-54c08023a929f88b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="柑橘收获"></p>
<p>就是在这一片混乱中,在这纠葛与矛盾中,以色列借助了二战后的世界大势,借助了犹太人遭受苦难的事实,在中东的腹地,1948年,建立了以色列。如今回望,这种纠结与矛盾伴随着它直到今天。尽管表现形式各不相同,但是矛盾的内核就是一个。</p>
<p>在六十年代,这个矛盾集中体现在以色列的核工程方面。建国不久,周边的阿拉伯国家们伺机而动。谋求地区霸权的埃及尤其如此,亡国的威胁时时存在。而一个只有250万人口的小国,在通过外交手段与技术攻关的双管齐下,竟成为了世界第六个拥有核能力的国家。进而转化成了对周边国家的核威慑,帮以色列的发展赢得了宝贵的十年时间。在这里你不禁感慨,只有真正经历过死亡与危机的民族,才能迸发出这么强大的力量。</p>
<p>在七十年代,经过了以色列的建国二十年。所有人在刚开始进入以色列社会的时候,必须大步快跑,没有时间去缅怀逝者,也没有时间照顾从不同地区移民而来的犹太人的情绪,甚至经历了二战种族灭绝的犹太人们也只能独自舔舐伤口。经济快速发展,强人政治保证国家机器高速运转,让以色列成为中东最富足的国家之一。但七十年代,社会稳定,但强人们陨落,而此时的社会分裂也逐渐开始。以色列的极端宗教主义抬头,产生了堪称巴以之间最大伤疤的“定居点”。拿回了属于自己一千年前土地的犹太人们更进一步,想进一步清理这个国家的“毒瘤”清真寺,“净化”耶路撒冷。但是这更将以色列的建立推入道德悖论的漩涡,定居点的建立在失去了犹太人被迫害的大背景的情况下,显得更无正义性,也让以色列背负的原罪更重。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/96723-447d528d8cccdcc1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="战争从头顶掠过"></p>
<p>八九十年代,巴勒斯坦民族的进一步觉醒,起义接踵而至,牢狱也遍布了加沙海滩。作为一个国家,一个犹太人建立的国家,以色列似乎别无选择,只能暴力镇压。但如果这个国家更谦逊一些呢?如果他们愿意承认一个完整的巴勒斯坦呢?是否真正的和平就会到来了呢?历史给了理想主义者一个大大的耳光。尽管以色列总理拉宾与阿拉法特在白宫的草坪上签署了象征和平的奥斯陆协议,但以色列长期的生存压力带来的社会分裂,已经滋生了足够的极端主义来毁掉这一切。拉宾被刺,和平依旧遥遥无期,黎巴嫩战争,真主党,巴解组织,似乎总有无穷无尽的矛盾,总有无穷无尽的威胁。短短几十年的时间,建国踌躇满志,核能力独霸中东,被埃及偷袭到几乎灭国,每一次都堪称重大历史事件,每一次以色列的国内政治生态、民族倾向都随之震动。而其产生的光怪陆离,体现在定居点、恐怖袭击与冲突。真的令人感慨,令人同情,令人钦佩。</p>
<p>但现实残酷的出口只有两种,一种是面对,一种是逃避。面对残酷意味着你也要变得残酷,所以犹太社会已不像当年那么铁板一块。犹太复国者们、阿拉伯世界的犹太人、俄罗斯移民的犹太人,他们都在用自己的方式去面对这种残酷。但国家的完整性和向心力已经不必当年。而逃避的年轻人们,曾经的犹太复国使命已经完成,军事实力也遥遥领先,不同的宗教与政治领袖如走马观灯一般要年轻人相信这个,坚守那个,但却没有人真正关心他们。所以作者观察到了特拉维夫的疯狂:性、毒品和其他的一切。或许对他们而言,忘记比面对更容易,至少在当下是这样。</p>
<p>当作者带我们看过了宏大的历史,再仔细看看其中的人们:一个受过创伤的德裔犹太人在以色列创立奶酪帝国,很励志,就像是受到屠杀创伤的犹太人找到自我。一个基布兹长大的孩子,经历了空军最好的时代,又经历高新科技最好的时代,赶上了以色列发展的每一个脚步并天资卓绝。第三个则是中产出身,却选择代表学生运动发声。这三个都是成功的,但已经显示出了其社会的复杂性。德裔犹太人、俄罗斯犹太人、阿拉伯犹太人、巴勒斯坦人,社会的割裂显而易见。这样的社会或许需要强有力的国家机器,就像它刚建国的那样,或许需要高瞻远瞩,就像它当年的核计划一样。就我个人而言,我对以色列人带有好感,我对犹太人好奇而钦佩不已。我同情巴勒斯坦人,憎恨极端主义者。一个理想的社会,其组成部分应该为了共同的利益而前进,而非独自用力,各怀鬼胎。我真心希望巴以和解,世界和平,就像我的同事许下的生日愿望那样。看以色列的几十年,能看到个人如海中翩翩一舟,风雨中前行,上下翻腾。有的时候,海如此之大,海浪变化如此之快,以至于有些人一辈子都在冲浪,而有些人一辈子都被浪冲,还有些人抵达彼岸,有些人仅余粉碎的舢板。有机会应该去以色列看看,学学他们的生活态度。而正如作者所说:</p>
<blockquote>
<p>在以色列生活是一种绝望的尝试,在经历了不正常的历史之后,在不正常的环境下尝试过着一种假装正常的生活,眼看不正常的未来近在咫尺</p>
</blockquote>
<p>我们真该以之为鉴,以之为镜。时刻反照,照亮前路。</p>
</div>
<div>
</div>
<div>
</div>
<footer class="post-footer">