-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
1447 lines (1246 loc) · 199 KB
/
atom.xml
File metadata and controls
1447 lines (1246 loc) · 199 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>彳亍</title>
<subtitle>多一些禅意,多一些开通。</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://wecall.github.io/"/>
<updated>2017-10-09T14:20:25.000Z</updated>
<id>http://wecall.github.io/</id>
<author>
<name>Ron Chen</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Docker 日记</title>
<link href="http://wecall.github.io/2016/10/14/docker%E6%97%A5%E8%AE%B0/"/>
<id>http://wecall.github.io/2016/10/14/docker日记/</id>
<published>2016-10-14T11:03:08.000Z</published>
<updated>2017-10-09T14:20:25.000Z</updated>
<content type="html"><h1 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h1><p>它提供了一个可以运行你的应用程序的容器。它原本是<code>dotCloud</code>启动的一个开源的业余项目。吸引了大量的关注和讨论,导致<code>dotCloud</code>把它重命名到<code>Docker Inc</code>。它最初是用<code>Go</code>语言编写的,它就相当于是加在 LXC[LinuX Containers(linux容器)]上的管道,允许开发者在更高层次的概念上工作。</p>
<p>它扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的API为进程单独提供了一个轻量级的虚拟环境。它利用了<code>LXC</code>, <code>cgroups</code>和<code>Linux</code>自己的内核。和传统的虚拟机不同的是,一个<code>Docker</code>容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。</p>
<h1 id="Docker-虚拟化技术"><a href="#Docker-虚拟化技术" class="headerlink" title="Docker | 虚拟化技术"></a>Docker | 虚拟化技术</h1><p>1、虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行;<br>2、虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统“;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis;<br>3、虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低;<br>4、虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。</p>
<h1 id="Docker-原理"><a href="#Docker-原理" class="headerlink" title="Docker 原理"></a>Docker 原理</h1><p><code>Docker</code>会像一个可移植的容器引擎那样工作,它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种Linux服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。<br><code>Docker</code>也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。</p>
<h1 id="docker-特性"><a href="#docker-特性" class="headerlink" title="docker 特性"></a>docker 特性</h1><ul>
<li><code>文件系统隔离</code> 每个进程容器运行在完全独立的根文件系统里</li>
<li><code>资源隔离</code> 可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存</li>
<li><code>网络隔离</code> 每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址</li>
<li><code>写时复制</code> 采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间</li>
<li><code>日志记录</code> Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索</li>
<li><code>变更管理</code> 容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置</li>
<li><code>交互式Shell</code> Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell</li>
</ul>
</content>
<summary type="html">
<h1 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h1><p>它提供了一个可以运行你的应用程序的容器。它原本是<code>dotCloud</code>启动的一个开源的业
</summary>
</entry>
<entry>
<title>Docker 日记</title>
<link href="http://wecall.github.io/2016/10/14/Docker-%E6%97%A5%E8%AE%B0/"/>
<id>http://wecall.github.io/2016/10/14/Docker-日记/</id>
<published>2016-10-14T11:03:08.000Z</published>
<updated>2016-10-14T11:04:02.000Z</updated>
<content type="html"><h1 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h1><p>它提供了一个可以运行你的应用程序的容器。它原本是<code>dotCloud</code>启动的一个开源的业余项目。吸引了大量的关注和讨论,导致<code>dotCloud</code>把它重命名到<code>Docker Inc</code>。它最初是用<code>Go</code>语言编写的,它就相当于是加在 LXC[LinuX Containers(linux容器)]上的管道,允许开发者在更高层次的概念上工作。</p>
<p>它扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的API为进程单独提供了一个轻量级的虚拟环境。它利用了<code>LXC</code>, <code>cgroups</code>和<code>Linux</code>自己的内核。和传统的虚拟机不同的是,一个<code>Docker</code>容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。</p>
<h1 id="Docker-虚拟化技术"><a href="#Docker-虚拟化技术" class="headerlink" title="Docker | 虚拟化技术"></a>Docker | 虚拟化技术</h1><p>1、虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行;<br>2、虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统“;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis;<br>3、虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低;<br>4、虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。</p>
<h1 id="Docker-原理"><a href="#Docker-原理" class="headerlink" title="Docker 原理"></a>Docker 原理</h1><p><code>Docker</code>会像一个可移植的容器引擎那样工作,它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种Linux服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。<br><code>Docker</code>也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。</p>
<h1 id="docker-特性"><a href="#docker-特性" class="headerlink" title="docker 特性"></a>docker 特性</h1><ul>
<li><code>文件系统隔离</code> 每个进程容器运行在完全独立的根文件系统里</li>
<li><code>资源隔离</code> 可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存</li>
<li><code>网络隔离</code> 每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址</li>
<li><code>写时复制</code> 采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间</li>
<li><code>日志记录</code> Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索</li>
<li><code>变更管理</code> 容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置</li>
<li><code>交互式Shell</code> Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell</li>
</ul>
</content>
<summary type="html">
<h1 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h1><p>它提供了一个可以运行你的应用程序的容器。它原本是<code>dotCloud</code>启动的一个开源的业
</summary>
</entry>
<entry>
<title>面向对象到底需要知道什么?</title>
<link href="http://wecall.github.io/2016/04/19/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%88%B0%E5%BA%95%E9%9C%80%E8%A6%81%E7%9F%A5%E9%81%93%E4%BB%80%E4%B9%88%EF%BC%9F/"/>
<id>http://wecall.github.io/2016/04/19/面向对象到底需要知道什么?/</id>
<published>2016-04-19T09:38:33.000Z</published>
<updated>2016-04-19T10:29:44.000Z</updated>
<content type="html"><h2 id="技术名词-关键字"><a href="#技术名词-关键字" class="headerlink" title="技术名词 关键字"></a>技术名词 <code>关键字</code></h2><p>###类(class)</p>
<ol>
<li>概念<br>类是一种抽象的数据类型</li>
</ol>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">class 类名&#123;</span><br><span class="line"> </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<ol>
<li>声明和定义<br>声明只是告诉编译器有这么一个变量,但是没有为它分配空间;定义则是为该变量分配空间。所以变量可以重复声明,但是不能重复定义。</li>
</ol>
<p>###对象(object)</p>
<p>###方法(function)</p>
<p>###属性(attribute)</p>
<p>###事件(event)</p>
<p>###构造函数(constructor)</p>
<p>###析构函数(destructor)</p>
<p>###继承(extends)</p>
<p>###重写</p>
<p>###接口</p>
<p>###封装</p>
<p>###重载(overloaded)</p>
<p>###多态</p>
<p>###实体</p>
<p>###UML</p>
</content>
<summary type="html">
<h2 id="技术名词-关键字"><a href="#技术名词-关键字" class="headerlink" title="技术名词 关键字"></a>技术名词 <code>关键字</code></h2><p>###类(class)</p>
<ol>
<li>概念<br>类是
</summary>
</entry>
<entry>
<title>面向对象到底需要知道什么?</title>
<link href="http://wecall.github.io/2016/04/19/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%88%B0%E5%BA%95%E8%A6%81%E7%9F%A5%E9%81%93%E4%BB%80%E4%B9%88/"/>
<id>http://wecall.github.io/2016/04/19/面向对象到底要知道什么/</id>
<published>2016-04-19T09:38:33.000Z</published>
<updated>2017-10-09T14:01:15.000Z</updated>
<content type="html"><h2 id="技术名词-关键字"><a href="#技术名词-关键字" class="headerlink" title="技术名词 关键字"></a>技术名词 <code>关键字</code></h2><p>###类(class)</p>
<ol>
<li>概念<br>类是一种抽象的数据类型</li>
</ol>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">class 类名&#123;</span><br><span class="line"> </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<ol>
<li>声明和定义<br>声明只是告诉编译器有这么一个变量,但是没有为它分配空间;定义则是为该变量分配空间。所以变量可以重复声明,但是不能重复定义。</li>
</ol>
<p>###对象(object)</p>
<p>###方法(function)</p>
<p>###属性(attribute)</p>
<p>###事件(event)</p>
<p>###构造函数(constructor)</p>
<p>###析构函数(destructor)</p>
<p>###继承(extends)</p>
<p>###重写</p>
<p>###接口</p>
<p>###封装</p>
<p>###重载(overloaded)</p>
<p>###多态</p>
<p>###实体</p>
<p>###UML</p>
</content>
<summary type="html">
<h2 id="技术名词-关键字"><a href="#技术名词-关键字" class="headerlink" title="技术名词 关键字"></a>技术名词 <code>关键字</code></h2><p>###类(class)</p>
<ol>
<li>概念<br>类是
</summary>
</entry>
<entry>
<title>Hello World</title>
<link href="http://wecall.github.io/2016/03/04/hello-world/"/>
<id>http://wecall.github.io/2016/03/04/hello-world/</id>
<published>2016-03-04T09:05:24.000Z</published>
<updated>2016-03-04T09:05:24.000Z</updated>
<content type="html"><p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="external">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="external">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="external">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="external">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="external">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="external">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/deployment.html" target="_blank" rel="external">Deployment</a></p>
</content>
<summary type="html">
<p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.
</summary>
</entry>
<entry>
<title>决定写点什么</title>
<link href="http://wecall.github.io/2016/01/21/%E8%9A%82%E8%9A%81%E5%AF%B9%E8%AF%9D-%E5%86%B3%E5%AE%9A%E5%86%99%E7%82%B9%E4%BB%80%E4%B9%88/"/>
<id>http://wecall.github.io/2016/01/21/蚂蚁对话-决定写点什么/</id>
<published>2016-01-21T01:25:37.000Z</published>
<updated>2016-01-25T12:56:55.000Z</updated>
<content type="html"><p>##蚂蚁对话</p>
<pre><code>&gt; 在知乎上搜索到一个话题,[#大家写博客的目的是什么](http://www.zhihu.com/question/19914819?sort=created),各种情绪抒发,触动了我想写点什么的冲动。一切都不晚,从现在开始,坚持写点什么。模拟一个虚拟的对象进行实时对话。以这个思路制作这个系列的话题,侧重一些不成熟的想法对撞,希望能摩擦出绚丽火花。
</code></pre><h3 id="和你只差点击的距离"><a href="#和你只差点击的距离" class="headerlink" title="和你只差点击的距离"></a>和你只差点击的距离</h3><p>你的圈子决定了你的收入。一句话赤裸裸的揭露生活的档次,觉得被扒的一丝不挂。细细计算经常有联系的十个人,再粗略计算一下他们的平均收入水平≈现在你自己的收入。怎么办,第一个想法就是拓宽朋友圈?通过自己的兴趣去拓展关系圈,篮球?跑步?看书?技术?这些都是学生时代结束所能想到的属于自己的兴趣点。独自运动或者学习,毫无发展空间,无法对外寻求更宽广的合作。分享一些新奇的观点,寻找一些技术解决方案,分享一些运动技巧,才能让自己看的更远,学的更广,追求更高。这种对话是一种寻找志同道合朋友的形式,比原始的交流方式针对沟通的内容方面能深入到一个层次。</p>
</content>
<summary type="html">
<p>##蚂蚁对话</p>
<pre><code>&gt; 在知乎上搜索到一个话题,[#大家写博客的目的是什么](http://www.zhihu.com/question/19914819?sort=created),各种情绪抒发,触动了我想写点什么的冲动。一切都不晚,从现在开
</summary>
<category term="文字感官" scheme="http://wecall.github.io/categories/%E6%96%87%E5%AD%97%E6%84%9F%E5%AE%98/"/>
</entry>
<entry>
<title>逆向工程</title>
<link href="http://wecall.github.io/2015/09/11/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
<id>http://wecall.github.io/2015/09/11/逆向工程/</id>
<published>2015-09-11T09:04:05.000Z</published>
<updated>2016-01-21T04:43:21.000Z</updated>
<content type="html"><blockquote>
<p>初步整理: 第二次因为项目接触逆向工程</p>
</blockquote>
<p> 回想第一次反编译App的项目,针对一个技术功能点进行分析,整合到我们自己的App中,距今已经1年多了,临时接了这么个任务完全是因为领导的一时兴起(他说,懂Java是吧,手机App了解吗,现在有这么个功能需要实现,你去了解这个App实现方式)</p>
</content>
<summary type="html">
<blockquote>
<p>初步整理: 第二次因为项目接触逆向工程</p>
</blockquote>
<p> 回想第一次反编译App的项目,针对一个技术功能点进行分析,整合到我们自己的App中,距今已经1年多了,临时接了这么个任务完全是因为领导的一时兴起(他说,懂Java
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="反编译" scheme="http://wecall.github.io/tags/%E5%8F%8D%E7%BC%96%E8%AF%91/"/>
<category term="逆向工程" scheme="http://wecall.github.io/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
</entry>
<entry>
<title>不知道拒绝</title>
<link href="http://wecall.github.io/2015/05/29/%E4%B8%8D%E7%9F%A5%E9%81%93%E6%8B%92%E7%BB%9D/"/>
<id>http://wecall.github.io/2015/05/29/不知道拒绝/</id>
<published>2015-05-29T04:52:50.000Z</published>
<updated>2016-10-17T08:42:13.000Z</updated>
<content type="html"><p>最近,回想起来总觉得自己很忙,各种事情不断的围绕在身边,这事那事感觉一直很忙碌的感觉,但是找不到一件成功的事情,是不是有点不对劲?答案是肯定的。稍微找到了一个能安慰自己的方法,就是感觉自己不会拒绝,因为年轻,感觉自己精力充沛,什么事情都能干,什么事情都能干成的说法。对待软件开发的状态一直是错的,找个人做的项目,要么需求人根本不了解这个行业,一心只想着赚钱,哪里考虑自己的产品是不是真的有效,这些人提出的项目需求,一般都是根据现有的网站拼凑起来的,给你一句话,我想要一个类似于XX的网站,功能多么的简单,页面稍微改改什么什么的;</p>
<p>针对产品这些人不会用心去对待,仅仅是一个工具,对数人对其成本觉得很低,几千到几万之间不等。还有一种就是赶着上线,在哪里买的源码或者从哪个公司带出来的源码等。又不知道里面到底是什么,什么功能到底实现成什么样子了,找一个半懂的人继续维护,帮我改成这样那样,一个月之后我们上线。</p>
<p>….<br>蹦蹦蹦,生活就是这样,兼职的工作比较难以权衡。</p>
</content>
<summary type="html">
<p>最近,回想起来总觉得自己很忙,各种事情不断的围绕在身边,这事那事感觉一直很忙碌的感觉,但是找不到一件成功的事情,是不是有点不对劲?答案是肯定的。稍微找到了一个能安慰自己的方法,就是感觉自己不会拒绝,因为年轻,感觉自己精力充沛,什么事情都能干,什么事情都能干成的说法。对待软件
</summary>
<category term="管理经验" scheme="http://wecall.github.io/categories/%E7%AE%A1%E7%90%86%E7%BB%8F%E9%AA%8C/"/>
<category term="技术" scheme="http://wecall.github.io/tags/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>互联网式策划</title>
<link href="http://wecall.github.io/2015/03/06/%E4%BA%92%E8%81%94%E7%BD%91%E5%BC%8F%E7%AD%96%E5%88%92/"/>
<id>http://wecall.github.io/2015/03/06/互联网式策划/</id>
<published>2015-03-06T09:01:18.000Z</published>
<updated>2016-01-21T04:40:22.000Z</updated>
<content type="html"><blockquote>
<p>我没有打算去收集各大土豪们的发红包活动,心里一直在蠢蠢欲动策划一些互联网活动,可惜自己才能有限,往往没有好的计划,空空的羡慕大公司的活动。</p>
</blockquote>
<hr>
<p><strong>[关注]</strong> 互联网策划公众平台<br><strong>[目的]</strong> 人人都是策划师</p>
<p><strong>[咬文爵字]</strong> 到底什么是策划</p>
<blockquote>
<p>是指某件事情的逻辑顺序,也称创意策划。说的简单点就是想点子去办事。[大师解读]就是通过实践活动获取最佳效果的智慧。</p>
</blockquote>
<p>[吐槽]:果然是大师,一句话说了让人浮想联翩,一字一句解析,能够挖掘深层次的意义。提升了策划名词的高度。</p>
<p><strong>[现状]</strong> <em>个人见解</em><br>针对中小型企业,进行一个活动策划的成本很高,一般都是模仿大型公司的活动或者发送代金券等等传统的活动,大型商场活动也局限于满就减,打几折等等屡见不鲜的名词。每一个策划活动的的成本是很高的,人力成本上需要打破传统的工作模式,活动期间需要适应新的工作流程,往往会产生很多错误。如果能将活动完全托管于第三方,公司有活动直接发起一个需求,推荐一个在预算之中,效果最好的活动策划,完成从宣传,实施,部署,到结束之后的运营总结,账目流转等多个流程都需要规范化的运作。</p>
<p>互联网思维是在信息公开的前提下,会引领人们对事情的规范化越来越重视。相对规范性的市场会受到深度的欢迎。各大互联网公司的成功都在实现了相对的规范,让各自的用户群获得更明确的服务。</p>
<p>流程化的公开将商户反馈用户的行为越来越明了,技术的先进使得能够吸引人们的策划方案越来越难,大公司直接以现金为吸引要素,铺设活动策划的线路,越来越多得活动案将难以实施。</p>
<p>面对难题往往也是机会的端倪,正在筹备一项互联网工作平台,有兴趣一起加入…</p>
<p><a href="http://www.yixieshi.com/ucd/15746.html" target="_blank" rel="external">参考博文</a></p>
</content>
<summary type="html">
<blockquote>
<p>我没有打算去收集各大土豪们的发红包活动,心里一直在蠢蠢欲动策划一些互联网活动,可惜自己才能有限,往往没有好的计划,空空的羡慕大公司的活动。</p>
</blockquote>
<hr>
<p><strong>[关注]</strong> 互联网策划公
</summary>
<category term="管理经验" scheme="http://wecall.github.io/categories/%E7%AE%A1%E7%90%86%E7%BB%8F%E9%AA%8C/"/>
<category term="互联网" scheme="http://wecall.github.io/tags/%E4%BA%92%E8%81%94%E7%BD%91/"/>
<category term="公众策划" scheme="http://wecall.github.io/tags/%E5%85%AC%E4%BC%97%E7%AD%96%E5%88%92/"/>
</entry>
<entry>
<title>MongoDB</title>
<link href="http://wecall.github.io/2015/01/29/MongoDB/"/>
<id>http://wecall.github.io/2015/01/29/MongoDB/</id>
<published>2015-01-29T02:20:48.000Z</published>
<updated>2016-01-21T04:35:26.000Z</updated>
<content type="html"><p>##安装<br><a href="http://www.mongodb.org/" target="_blank" rel="external">MongoDB官网</a><br><a href="http://www.mongodb.org/display/DOCS/Tutorial" target="_blank" rel="external">官方文档</a></p>
<p>##初体验 db shell<br><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mongo</span><br></pre></td></tr></table></figure></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">MongoDB shell version: 2</span><br><span class="line">connecting to: test</span><br></pre></td></tr></table></figure>
<p>##基本命令<br><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">show dbs; `显示数据库列表`</span><br><span class="line">use dbname; `切换/创建数据库` </span><br><span class="line">show collections; `显示当前数据库中的集合`</span><br><span class="line">show user; `显示用户`</span><br><span class="line">db.version() `当前db版本`</span><br><span class="line">db.getMongo() `查看当前链接机器地址`</span><br></pre></td></tr></table></figure></p>
<p>##HELP 操作<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">help</span><br></pre></td></tr></table></figure></p>
<figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">db.<span class="built_in">help</span>() 数据库帮助</span><br><span class="line">db.mycoll.<span class="built_in">help</span>() 集合帮助</span><br><span class="line">sh.<span class="built_in">help</span>() 分布式帮手</span><br><span class="line">rs.<span class="built_in">help</span>() 复制集帮手</span><br><span class="line"><span class="built_in">help</span> admin 管理帮助</span><br><span class="line"><span class="built_in">help</span> connect 连接到数据库的帮助</span><br><span class="line"><span class="built_in">help</span> keys 快捷键</span><br><span class="line"><span class="built_in">help</span> misc 其他需要知道的信息</span><br><span class="line"><span class="built_in">help</span> mr 映射</span><br><span class="line">`...`</span><br><span class="line"><span class="keyword">exit</span> 退出</span><br></pre></td></tr></table></figure>
<p>##数据库操作<br><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">//`切换/创建数据库`</span><br><span class="line">use test</span><br><span class="line">//`查看所有数据库`</span><br><span class="line">show dbs</span><br><span class="line">//`删除当前使用的数据库`</span><br><span class="line">db.dropDatabase()</span><br><span class="line">//`从指定主机上克隆当前数据库`</span><br><span class="line">db.cloneDatabase()</span><br><span class="line">//`将本机的mydb的数据复制到temp中`</span><br><span class="line">db.copyDatabase('mydb','temp','localhost') </span><br><span class="line">//`修复当前数据库`</span><br><span class="line">db.repairDatabase() </span><br><span class="line">//`查看当前使用的数据库`</span><br><span class="line">db.getName() || db </span><br><span class="line">// `当前数据库状态`</span><br><span class="line">db.stats()</span><br><span class="line">//`当前数据库版本`</span><br><span class="line">db.version()</span><br><span class="line">//`查看当前数据库链接地址`</span><br><span class="line">db.getMongo()</span><br></pre></td></tr></table></figure></p>
<p>##聚集集合操作</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line">//`创建集合` </span><br><span class="line">db.createCollection(&quot;collName&quot;,&#123;size:20,capped:5,max:100&#125;)</span><br><span class="line">`获取指定名称集合` </span><br><span class="line">db.getCollection(&quot;account&quot;)</span><br><span class="line">`获取当前数据库所有聚集集合` </span><br><span class="line">db.getCollectionNames()</span><br><span class="line">`显示当前数据库的聚集索引状态` </span><br><span class="line">db.printCollectionStats()</span><br><span class="line"></span><br><span class="line">`获取集合的条数` </span><br><span class="line">db.collName.count()</span><br><span class="line">`查看数据空间大小` </span><br><span class="line">db.collName.dataSize()</span><br><span class="line">`当前聚集集合所在的数据库` </span><br><span class="line">db.collName.getDB()</span><br><span class="line">`当前聚集集合的状态` </span><br><span class="line">db.collName.stats()</span><br><span class="line">`得到聚集集合总大小` </span><br><span class="line">db.collName.totalSize()</span><br><span class="line">`聚集集合储存空间大小` </span><br><span class="line">db.collName.storageSize()</span><br><span class="line">`Shard版本信息` </span><br><span class="line">db.collName.getShardVersion()</span><br><span class="line">`聚集集合重命名` </span><br><span class="line">db.collName.renameCollection(&quot;users&quot;) &quot;collName&quot;=&gt;&quot;users&quot;</span><br><span class="line">`删除当前聚集集合` </span><br><span class="line">db.collName.drop()</span><br></pre></td></tr></table></figure>
<p>##聚集集合查询操作</p>
<figure class="highlight cmd"><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></pre></td><td class="code"><pre><span class="line">`查询所有记录`: 默认显示<span class="number">20</span>条信息 使用 `it` 查询下一页</span><br><span class="line">db.collName.<span class="built_in">find</span>()</span><br><span class="line"></span><br><span class="line">`查询去掉某列的重复数据`</span><br><span class="line">db.collName.distinct("name")</span><br><span class="line"></span><br><span class="line">`查询数字范围的记录`: </span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;"age":<span class="number">22</span>&#125;)</span><br><span class="line"></span><br><span class="line"> * &#123;"age":<span class="number">22</span>&#125; "="</span><br><span class="line"> * &#123;"age":&#123;$gt:<span class="number">22</span>&#125;&#125; "&gt;"</span><br><span class="line"> * &#123;"age":&#123;$lt:<span class="number">22</span>&#125;&#125; "&lt;"</span><br><span class="line"> * &#123;"age":&#123;$gte:<span class="number">22</span>&#125;&#125; "&gt;="</span><br><span class="line"> * &#123;"age":&#123;$lte:<span class="number">22</span>&#125;&#125; "&lt;="</span><br><span class="line"> * &#123;"age":&#123;$gte: <span class="number">23</span>, $lte: <span class="number">26</span>&#125;&#125; "&gt;=<span class="number">23</span> &amp;&amp; &lt;=<span class="number">26</span>"</span><br><span class="line"></span><br><span class="line">`查看字符范围的记录`:</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;"name":/ron/&#125;)</span><br><span class="line"> * &#123;name:/ron/&#125; 类似于 "<span class="variable">%ron%</span>"</span><br><span class="line"> * &#123;name:/^ron/&#125; `^` 是<span class="built_in">shift</span>+<span class="number">6</span> 类似于 "ron%" </span><br><span class="line"></span><br><span class="line">`显示指定列数据`: </span><br><span class="line">// 类似于 **select name,age from collName** `<span class="number">1</span>: 是显示; <span class="number">0</span>是排除`</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;&#125;,&#123;name:<span class="number">1</span>,age:<span class="number">1</span>&#125;);</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;age: &#123;$gt: <span class="number">25</span>&#125;&#125;, &#123;name: <span class="number">1</span>, age: <span class="number">1</span>&#125;);</span><br><span class="line"></span><br><span class="line">`排序`:</span><br><span class="line">+ `升序` db.collName.<span class="built_in">find</span>().sort&#123;age:<span class="number">1</span>&#125;;</span><br><span class="line">+ `降序` db.collName.<span class="built_in">find</span>().sort&#123;age:-<span class="number">1</span>&#125;;</span><br><span class="line"></span><br><span class="line">`查询前<span class="number">5</span>条信息`:</span><br><span class="line">db.collName.<span class="built_in">find</span>().limit(<span class="number">5</span>);</span><br><span class="line"></span><br><span class="line">`查询<span class="number">10</span>条以后的数据`:</span><br><span class="line">db.collName.<span class="built_in">find</span>().skip(<span class="number">10</span>);</span><br><span class="line"></span><br><span class="line">`查询<span class="number">5</span>-<span class="number">10</span>之间的数据`</span><br><span class="line">db.collName.<span class="built_in">find</span>().limit(<span class="number">10</span>).skip(<span class="number">5</span>);</span><br><span class="line"></span><br><span class="line">`或(与)查询`</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;$or:[&#123;age:<span class="number">22</span>&#125;,&#123;age:<span class="number">25</span>&#125;]&#125;);</span><br><span class="line"></span><br><span class="line">`查询一条数据`</span><br><span class="line">db.collName.findOne();</span><br><span class="line"></span><br><span class="line">`查询结果集的记录数`</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;age:&#123;$gt:<span class="number">25</span>&#125;&#125;&#125;).count()</span><br><span class="line"></span><br><span class="line">`按照某列进行排序`</span><br><span class="line">// 类似于 **SELECT COUNT(age) FROM COLLNAME**</span><br><span class="line">db.collName.<span class="built_in">find</span>(&#123;age:&#123;$exists:true&#125;&#125;).count()</span><br></pre></td></tr></table></figure>
<p>##索引操作</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">`创建索引`</span><br><span class="line">db.collName.ensureIndex(&#123;name:1&#125;)</span><br><span class="line">db.collName.ensureIndex(&#123;name:1,ts:-1&#125;)</span><br><span class="line"></span><br><span class="line">`查看当前数据库集合索引`</span><br><span class="line">db.databaseName.getIndexes();</span><br><span class="line"></span><br><span class="line">`查看当前数据库总索引大小`</span><br><span class="line">db.databaseName.totalIndexSize();</span><br><span class="line"></span><br><span class="line">`读取当前集合的所有索引信息`</span><br><span class="line">db.collName.reIndex()</span><br><span class="line"></span><br><span class="line">`删除指定索引`</span><br><span class="line">db.collName.dropIndex(&quot;indexName&quot;);</span><br><span class="line">//删除所用索引</span><br><span class="line">db.collName.dropIndexes();</span><br></pre></td></tr></table></figure>
<p>##数据操作</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><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><br><span class="line">db.collName.save(&#123;name:&apos;ron&apos;,age:&apos;25&apos;,sex:true&#125;)</span><br><span class="line"></span><br><span class="line">`修改`</span><br><span class="line">// 类似于: update collName set age=24 where name=&apos;ron&apos;</span><br><span class="line">db.collName.update(&#123;name:&apos;ron&apos;&#125;,&#123;$set:&#123;age:24&#125;&#125;,false,true);</span><br><span class="line"></span><br><span class="line">// 类似于: update collName set age= age + 1 where name=&apos;ron&apos;</span><br><span class="line">db.collName.update(&#123;name:&apos;ron&apos;&#125;,&#123;$inc:&#123;age:1&#125;&#125;,false,true);</span><br><span class="line"></span><br><span class="line">// 类似于: update collName set age = age+1 ,sex=false where name=&apos;ron&apos; </span><br><span class="line">db.collName.update(&#123;name:&apos;ron&apos;&#125;,&#123;$inc:&#123;age:1&#125;&#125;,&#123;$set:&#123;sex:false&#125;&#125;,false,true);</span><br><span class="line"></span><br><span class="line">`删除`</span><br><span class="line">db.collName.remove(&#123;age:132&#125;)</span><br><span class="line"></span><br><span class="line">`查询修改删除` </span><br><span class="line">//update 或 remove 其中一个必选</span><br><span class="line">db.collName.findAndModify(&#123;</span><br><span class="line"> query:&#123;age:&#123;$gte:24&#125;&#125;,</span><br><span class="line"> sort:&#123;age:-1&#125;,</span><br><span class="line"> update:&#123;$set:&#123;name:&apos;ron&apos;&#125;,$inc:&#123;age:2&#125;&#125;,</span><br><span class="line"> remove:true</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">db.runCommand(&#123; findandmodify:&quot;user&quot;,</span><br><span class="line"> query:&#123;age:&#123;$gte:25&#125;&#125;,</span><br><span class="line"> sort:&#123;age:-1&#125;,</span><br><span class="line"> update:&#123;$set:&#123;name:&apos;a2&apos;&#125;,$inc:&#123;age:1&#125;&#125;,</span><br><span class="line"> remove:true</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<table>
<thead>
<tr>
<th>参数</th>
<th>详解</th>
<th>默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td>query</td>
<td>查询过滤条件</td>
<td>{}</td>
</tr>
<tr>
<td>sort</td>
<td>如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作</td>
<td>{}</td>
</tr>
<tr>
<td>remove</td>
<td>若为true,被选中对象将在返回前被删除</td>
<td>N/A</td>
</tr>
<tr>
<td>update</td>
<td>一个修改器对象</td>
<td>N/A</td>
</tr>
<tr>
<td>new</td>
<td>若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。</td>
<td>false</td>
</tr>
<tr>
<td>fields</td>
<td><a href="http://docs.mongodb.org/manual/core/read-operations/#projection" target="_blank" rel="external">官方文档</a></td>
<td>All fields</td>
</tr>
<tr>
<td>upsert</td>
<td>创建新对象若查询结果为空。<a href="https://github.com/mongodb/mongo/blob/master/jstests/find_and_modify4.js" target="_blank" rel="external">示例</a></td>
<td>false</td>
</tr>
</tbody>
</table>
<p>##语句操作</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 输入函数</span></span><br><span class="line">print(<span class="string">"Hello world!"</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">// 将一个对象转换成JSON</span></span><br><span class="line">tojson(<span class="keyword">new</span> <span class="built_in">Object</span>());</span><br><span class="line">tojson(<span class="keyword">new</span> <span class="built_in">Object</span>(<span class="string">'a'</span>));</span><br><span class="line"></span><br><span class="line"><span class="comment">// 循环添加数据 </span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>;i&lt;<span class="number">30</span>;i++)&#123;</span><br><span class="line"> db.collName.save(&#123;name:<span class="string">'u_name_'</span>+i,age:<span class="number">22</span>+i,sex: i % <span class="number">2</span>&#125;);</span><br><span class="line">&#125; </span><br><span class="line"></span><br><span class="line"><span class="comment">// 游标查询</span></span><br><span class="line"><span class="keyword">var</span> cursor = db.collName.find();</span><br><span class="line"><span class="keyword">while</span>(cursor.hasNext())&#123;</span><br><span class="line"> printjson(cursor.next());</span><br><span class="line">&#125;</span><br><span class="line"><span class="string">`将游标当做数组处理`</span></span><br><span class="line"><span class="keyword">var</span> cursor = db.collName.find();</span><br><span class="line">cursor[<span class="number">4</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">// forEach 迭代循环</span></span><br><span class="line"><span class="string">`forEach中必须传递一个函数来处理每条迭代的数据信息`</span></span><br><span class="line">db.collName.find().forEach(printjson);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 将游标转换成数组</span></span><br><span class="line"><span class="string">`toArray() : 转换成为数组`</span></span><br><span class="line"><span class="keyword">var</span> arr = db.collName.find().toArray();</span><br><span class="line">printjson(arr[<span class="number">2</span>]); </span><br><span class="line"></span><br><span class="line"><span class="comment">// 定制自己的查询</span></span><br><span class="line">db.collName.find(&#123;age:&#123;$lt:<span class="number">20</span>&#125;&#125;,&#123;age:<span class="number">1</span>&#125;).forEach(printjson);</span><br><span class="line"> <span class="string">`只显示age列`</span></span><br><span class="line">db.collName.find(&#123;age:&#123;$lt:<span class="number">20</span>&#125;&#125;,&#123;age:<span class="literal">true</span>&#125;).forEach(printjson);</span><br><span class="line"> <span class="string">`排除age列`</span></span><br><span class="line">db.collName.find(&#123;age:&#123;$lt:<span class="number">20</span>&#125;&#125;,&#123;age:<span class="literal">false</span>&#125;).forEach(printjson);</span><br><span class="line"></span><br><span class="line"><span class="comment">// forEach 传递函数显示信息</span></span><br><span class="line">db.things.find(&#123;x:<span class="number">4</span>&#125;).forEach(<span class="function"><span class="keyword">function</span>(<span class="params">x</span>)</span>&#123;</span><br><span class="line"> print(tojson(x));</span><br><span class="line"> &#125;);</span><br></pre></td></tr></table></figure>
<p>##用户操作</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">db.createUser() `添加用户`</span><br><span class="line">db.updateUser() `更新用户`</span><br><span class="line">db.getUser() `根据用户名获取用户`</span><br><span class="line">db.removeUser() `删除用户`</span><br></pre></td></tr></table></figure>
</content>
<summary type="html">
<p>##安装<br><a href="http://www.mongodb.org/" target="_blank" rel="external">MongoDB官网</a><br><a href="http://www.mongodb.org/display/DOCS/Tu
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="语法" scheme="http://wecall.github.io/tags/%E8%AF%AD%E6%B3%95/"/>
<category term="mongoDB" scheme="http://wecall.github.io/tags/mongoDB/"/>
<category term="db" scheme="http://wecall.github.io/tags/db/"/>
</entry>
<entry>
<title>Makedown</title>
<link href="http://wecall.github.io/2015/01/27/Makedown/"/>
<id>http://wecall.github.io/2015/01/27/Makedown/</id>
<published>2015-01-27T09:39:55.000Z</published>
<updated>2016-01-21T04:32:27.000Z</updated>
<content type="html"><blockquote>
<p>Makedown是一种轻量级的标记语言,有没有让你想起HTML。那就对了,他们都是标记语言。相对于HTML,makedown的十分简单,常用的标记符号简单易记忆。</p>
</blockquote>
<ul>
<li><a href="http://daringfireball.net/projects/markdown/syntax" target="_blank" rel="external">创始人的官方文档</a></li>
<li><a href="http://wowubuntu.com/markdown/#list" target="_blank" rel="external">中文版语法说明</a></li>
</ul>
<p>##常用语法说明</p>
<p>###标题</p>
<blockquote>
<p>每篇文章的常用格式,在标题文字前加<code>#</code>,文章会根据标题级数生成目录</p>
</blockquote>
<ul>
<li><code># 一级标题</code></li>
<li><code>## 二级标题</code></li>
<li><code>### 三级标题</code></li>
</ul>
<p>###列表</p>
<blockquote>
<p>列表分为有序列表和无序列表,在文字添加特定符号和<strong>空格</strong>即编程无序列表,在文字前添加数字和<code>.</code>即编程有序列表</p>
</blockquote>
<ul>
<li><code>*</code> <code>+</code> <code>-</code> 无序列表</li>
<li><code>1.</code> <code>2.</code> <code>3.</code> 有序列表</li>
</ul>
<p>###引用</p>
<blockquote>
<p>如果你需要引用其他内容,就需要引用格式,只需要在文本前加<code>&gt;</code>即可。不过我一般将他展现成标题的特殊说明</p>
<p>引用的效果展示</p>
</blockquote>
<p>###图片</p>
<blockquote>
<p>插入一张图片也是非常简单的事情,<code>![]()</code> 这样的符号轻松解决</p>
</blockquote>
<ul>
<li><code>!</code> 标记该处是一张图片</li>
<li><code>[]</code> 该图片的标题,类似于HTML的<code>&lt;img&gt;</code>标签的title</li>
<li><code>()</code> 该图片的链接地址</li>
</ul>
<p>###链接</p>
<blockquote>
<p>和图片值相差一个符号,<code>[]()</code></p>
</blockquote>
<ul>
<li><code>[]</code> 链接的文本</li>
<li><code>()</code> 链接地址</li>
</ul>
<p>###粗体与斜体</p>
<blockquote>
<p>粗体使用两个<code>**</code>包含一段文本,斜体使用<code>*</code>包含一段文本</p>
</blockquote>
<ul>
<li><code>**加粗**</code> <strong>加粗</strong></li>
<li><code>*斜体*</code> <em>斜体</em></li>
</ul>
<p>###表格</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">|Table | 标题| 标题 |</span><br><span class="line">|------|-----|------|</span><br><span class="line">| col | col | col |</span><br><span class="line">| col | col | col |</span><br><span class="line">| col | col | col |</span><br></pre></td></tr></table></figure>
<table>
<thead>
<tr>
<th>Table</th>
<th>标题</th>
<th>标题</th>
</tr>
</thead>
<tbody>
<tr>
<td>col</td>
<td>col</td>
<td>col</td>
</tr>
<tr>
<td>col</td>
<td>col</td>
<td>col</td>
</tr>
<tr>
<td>col</td>
<td>col</td>
<td>col</td>
</tr>
</tbody>
</table>
<p>###代码</p>
<blockquote>
<p>我们可以优雅的使用个性化的代码框,只需要用两个<em>`</em> 包含代码行或者使用三个<em>`</em> 包含代码段即可</p>
</blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">div</span>&gt;</span>代码效果<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br></pre></td></tr></table></figure>
<p>###分割线</p>
<blockquote>
<p>使用<code>***</code> 或者 <code>---</code> 即可在该行生成一条分割线</p>
</blockquote>
<hr>
<p>###删除线</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~~删除效果~~</span><br></pre></td></tr></table></figure>
<p><del>删除效果</del></p>
</content>
<summary type="html">
<blockquote>
<p>Makedown是一种轻量级的标记语言,有没有让你想起HTML。那就对了,他们都是标记语言。相对于HTML,makedown的十分简单,常用的标记符号简单易记忆。</p>
</blockquote>
<ul>
<li><a href="http:/
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="Makedown" scheme="http://wecall.github.io/tags/Makedown/"/>
<category term="编程" scheme="http://wecall.github.io/tags/%E7%BC%96%E7%A8%8B/"/>
<category term="语法" scheme="http://wecall.github.io/tags/%E8%AF%AD%E6%B3%95/"/>
</entry>
<entry>
<title>php常用函数</title>
<link href="http://wecall.github.io/2015/01/12/php%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0/"/>
<id>http://wecall.github.io/2015/01/12/php常用函数/</id>
<published>2015-01-12T07:14:25.000Z</published>
<updated>2016-01-21T04:30:16.000Z</updated>
<content type="html"><p>##开发常用函数</p>
<blockquote>
<ul>
<li>传递任意数量的参数</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$args = func_get_args();</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>glob() 查找文件</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$files = glob(<span class="string">'*.php'</span>); </span><br><span class="line">`输出`</span><br><span class="line"><span class="keyword">Array</span></span><br><span class="line"> (</span><br><span class="line"> [<span class="number">0</span>] =&gt; test1.php</span><br><span class="line"> [<span class="number">1</span>] =&gt; test2.php</span><br><span class="line"> )</span><br><span class="line"></span><br><span class="line"> $files =glob(<span class="string">'*.&#123;php,txt&#125;'</span>,GLOB_BRACE);</span><br><span class="line"> $files =glob(<span class="string">'../images/a*.&#123;php,txt,&#125;'</span>,GLOB_BRACE);</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>内存使用情况</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">memory_get_usage();</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>获取CPU使用情况</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">getrusage();</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>获取系统常量</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">`魔法常量`</span><br><span class="line"><span class="comment">// 当前行号 // 返回文件的完成路径 // 文件目录 </span></span><br><span class="line"><span class="keyword">__LINE__</span> || <span class="keyword">__FILE__</span> <span class="comment">// __DIR__</span></span><br><span class="line"></span><br><span class="line">|| 函数名称 || 返回类名 || 返回类的方法名|| </span><br><span class="line"><span class="keyword">__FUNCTION__</span> || <span class="keyword">__CLASS__</span> || __MEDTHOD__</span><br><span class="line"></span><br><span class="line">`魔方函数`</span><br><span class="line"><span class="comment">//实例化对象 // __删除对象 // 对象调用方法</span></span><br><span class="line">__construct() || __destruct() || __call()</span><br><span class="line"></span><br><span class="line"><span class="comment">// 读取对象属性 // 设置对象属性 </span></span><br><span class="line">__get() || __set()</span><br><span class="line"></span><br><span class="line"><span class="comment">//打印对象 //克隆对象 </span></span><br><span class="line">__toString() || __clone() </span><br><span class="line"></span><br><span class="line"><span class="comment">//对象删除部分 //对象初始化 </span></span><br><span class="line">__sleep() || __wakeup()</span><br><span class="line"></span><br><span class="line"><span class="comment">// 监测对象 // 对象属性</span></span><br><span class="line">__isset() || __unset()</span><br><span class="line"></span><br><span class="line"><span class="comment">//实例化对象时,对应类不存在,则该方法被调用</span></span><br><span class="line">__autoload()</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>生成唯一的ID</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">uniqid(); </span><br><span class="line">uniqid(<span class="string">'ron_'</span>);</span><br><span class="line">uniqid(<span class="string">'ron_'</span>,<span class="keyword">true</span>);</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>序列化</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//序列化</span></span><br><span class="line">serialize(); json_encode();</span><br><span class="line"><span class="comment">//反序列化</span></span><br><span class="line">unserialize(); json_decode();</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>字符串压缩</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$str = <span class="string">"ssss"</span>;</span><br><span class="line"><span class="comment">//压缩</span></span><br><span class="line">gzcompress($str);</span><br><span class="line"><span class="comment">//解压缩</span></span><br><span class="line">gzuncompress($str);</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>数组相关</li>
</ul>
</blockquote>
<figure class="highlight php"><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">$arr = <span class="keyword">array</span>(<span class="string">'k0'</span>=&gt;<span class="string">'a1'</span>,<span class="string">'k1'</span>=&gt;<span class="string">'a2'</span>,<span class="string">'k2'</span>=&gt;<span class="string">'a3'</span>);</span><br><span class="line"><span class="comment">// $arr是否有'b'元素 true or false</span></span><br><span class="line">in_array(<span class="string">'b'</span>,$arr); </span><br><span class="line"><span class="comment">// $arr是否有'k0'键值 true or false</span></span><br><span class="line">array_key_exists(<span class="string">'k1'</span>,$arr);</span><br><span class="line"><span class="comment">// 将数组键值组成一个新数组</span></span><br><span class="line">array_keys($arr);</span><br><span class="line"><span class="comment">// 将数组元素值组成一个数组</span></span><br><span class="line">array_values($arr);</span><br><span class="line"><span class="comment">//返回当前数组指针指向的值</span></span><br><span class="line">key($arr);</span><br><span class="line"><span class="comment">//返回当前数组指针指向的元素值</span></span><br><span class="line">current($arr);</span><br><span class="line"><span class="comment">//返回当前数组指针指向元素的键,值组成的数组,并将指针指向下一位</span></span><br><span class="line">each($arr);</span><br><span class="line"><span class="comment">//将数组指向下一位,再返回移动后的元素值</span></span><br><span class="line">next($arr);</span><br><span class="line"><span class="comment">//将数组指向下一位,再返回移动后的元素值</span></span><br><span class="line">prev($arr);</span><br><span class="line"><span class="comment">//将数组重置指向第一个元素并返回该元素</span></span><br><span class="line">reset($arr);</span><br><span class="line"><span class="comment">//讲数组指针重置指向最后以为元素,并返回最后一个元素值</span></span><br><span class="line">end($arr);</span><br><span class="line"><span class="comment">//按照数组元素值的Ascii码从小到大排序,索引从0计</span></span><br><span class="line">sort($arr);</span><br><span class="line"><span class="comment">//按照数组元素值的Ascii码从大到小排序,索引从0计</span></span><br><span class="line">rsort($arr);</span><br><span class="line"><span class="comment">//将第一个参数以后的参数追加到数组之后,返回数组长度</span></span><br><span class="line">array_push($arr,<span class="string">"dd"</span>,<span class="string">"aa"</span>);</span><br><span class="line"><span class="comment">//将第一个参数以后的参数追加到数组开头处,返回数组长度</span></span><br><span class="line">array_unshift($arr,<span class="string">"t1"</span>,<span class="string">"t2"</span>);</span><br><span class="line"><span class="comment">//提取最后一个元素值,并将其从数组中剔除</span></span><br><span class="line">array_pop($arr);</span><br><span class="line"><span class="comment">//提取数组头一个元素值,并把头一个元素从原数组中剔除</span></span><br><span class="line">array_shift($arr);</span><br><span class="line"><span class="comment">//让第一个参数数组达到第二个参数数值长度,将第三个参数作为元素添加到第一个参数数组的末尾,索引从最小的没用过的数值开始计</span></span><br><span class="line">array_pad($arr,<span class="number">10</span>,<span class="string">"t1"</span>);</span><br><span class="line"><span class="comment">//去除数组中多余重复的元素</span></span><br><span class="line">array_unique($arr);</span><br><span class="line"><span class="comment">//计算数组中所有数值型元素值的和</span></span><br><span class="line">$int=array_sum($arr);</span><br></pre></td></tr></table></figure>
<blockquote>
<ul>
<li>字符串相关</li>
</ul>
</blockquote>
<figure class="highlight php"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">//将数组字符用"-"连接成字符串</span></span><br><span class="line">$str = implode(<span class="string">"-"</span>,<span class="keyword">array</span>(<span class="string">"a"</span>,<span class="string">"b"</span>,<span class="string">"c"</span>));</span><br><span class="line"><span class="comment">//字符串分割,用第一个参数里的字符分割第二个参数的字符串,最后一个参数限制返回数组长度,可不限制,则一直分割下去</span></span><br><span class="line">$str = explode(<span class="string">"a"</span>,<span class="string">"aaadedeadfa asdefeadeafr"</span>,<span class="number">7</span>);</span><br><span class="line"><span class="comment">//返回括号里字符串的字符全部大写的字符串</span></span><br><span class="line">$str = strtoupper(<span class="string">"sdaf"</span>);</span><br><span class="line"><span class="comment">//将括号里第一个字符串变成大写后返回</span></span><br><span class="line">$str=ucfirst(<span class="string">"asdf"</span>);</span><br><span class="line"><span class="comment">//用echo等将括号里字符串打印在网页上时原汁原味打印出括号里的字符串,包括标签字符</span></span><br><span class="line">$str=htmlentities(<span class="string">"&lt;br/&gt;"</span>);</span><br><span class="line"><span class="comment">//返回第二个参数字符串在第一个字符串里出现的次数</span></span><br><span class="line">$int=substr_count(<span class="string">"abcdeabcdeablkabd"</span>,<span class="string">"ab"</span>);</span><br><span class="line"><span class="comment">//返回第二个字符串在第一个字符串第一次出现的位置,第一个字符位置算0</span></span><br><span class="line">$int=strpos(<span class="string">"asagaab"</span>,<span class="string">"ab"</span>);</span><br><span class="line"><span class="comment">//返回第二个字符串在第一个字符串最后一次出现的位置,第一个字符位置算0</span></span><br><span class="line">$int=strrpos(<span class="string">"asagaabadfab"</span>,<span class="string">"ab"</span>);</span><br><span class="line"><span class="comment">//将参数二中每一个字符匹配参数一中的字符,匹配成功之后参数一字符前加"\"</span></span><br><span class="line">$str=addcslashes(<span class="string">"abcdefghijklmn"</span>,<span class="string">"akd"</span>);</span><br><span class="line"><span class="comment">//依次比较两字符串对应字符阿斯克码值,第一对不一样的,如果参数一里大于参数二里的返回1,反之返回-1,两字符串完全一样返回0</span></span><br><span class="line">$int=strcmp(<span class="string">"b"</span>,<span class="string">"a"</span>);</span><br><span class="line"><span class="comment">//将参数一的字符串填充到参数二指定的长度(单字符个数),参数三为指定填充的字符串,不写默认空格参数四填充位置,0在参数一左侧开头填充,1右侧开头,2两边开头同时。不写默认在右侧开头填充</span></span><br><span class="line">$str=str_pad(<span class="string">"abcdefgh"</span>,<span class="number">10</span>,<span class="string">"at"</span>,<span class="number">0</span>);</span><br><span class="line"><span class="comment">//返回第一个参数格式化后的数字格式,第二个参数为保留几个小数,参数三为将小数点换成参数三,参数四为整数部分每三位用什么字符分割后面三个参数都不写,则默认去掉小数部分,整数每隔三位用逗号,分割。参数三,参数四必须同时存在</span></span><br><span class="line">$str=number_format(<span class="number">1231233.1415</span>,<span class="number">2</span>,<span class="string">"d"</span>,<span class="string">"a"</span>);</span><br></pre></td></tr></table></figure>
</content>
<summary type="html">
<p>##开发常用函数</p>
<blockquote>
<ul>
<li>传递任意数量的参数</li>
</ul>
</blockquote>
<figure class="highlight php"><table><tr><td class="gutter"><pre><s
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="开发" scheme="http://wecall.github.io/tags/%E5%BC%80%E5%8F%91/"/>
<category term="php" scheme="http://wecall.github.io/tags/php/"/>
<category term="函数" scheme="http://wecall.github.io/tags/%E5%87%BD%E6%95%B0/"/>
</entry>
<entry>
<title>PHP编码规范</title>
<link href="http://wecall.github.io/2015/01/09/PHP%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83/"/>
<id>http://wecall.github.io/2015/01/09/PHP编码规范/</id>
<published>2015-01-09T09:19:50.000Z</published>
<updated>2016-01-21T04:30:14.000Z</updated>
<content type="html"><blockquote>
<p>规范的代码在团队合作中尤其重要,很多开发人员不愿意看别人的代码,是因为种种管理规范的人员工作没有做好,最后都施加到了程序员身上去解决面对这些窘境。</p>
</blockquote>
<p>目前毕竟浏览的软件项目质量管理的软件【sonar】,里面规范了各种语言代码应该遵循的规范,个人感觉身为团队的一员,有必要在这方面提升一下自己的编程素质。</p>
<hr>
<ul>
<li>类的大括号在后面不是另起一行; eg: class user{</li>
<li>变量名首字母小写,采用驼峰模式(小驼峰法); eg: userAge [a-z][a-zA-Z0-9]*</li>
<li>类文件名只允许字母,首字母大写(大驼峰法); </li>
<li>注释要另起一行,不要跟在代码后面;</li>
<li>移除已经注释的代码片段;</li>
<li>switch至少包含3个case,否则使用if;</li>
<li>switch要加 default;</li>
<li>if等嵌套不能超过3次;</li>
<li>类中的方法不能超过20个,否则考虑拆分;</li>
<li>移除没用的参数;</li>
<li>移除没用的变量;</li>
<li>if必须要跟else;</li>
<li>if总是跟着大括号;</li>
<li>代码中不要有太多的return;</li>
<li>每行结尾不允许有多余的空格;</li>
<li>每行代码长度控制在80个字符以内,最长不要超过120个字符;</li>
<li>使用4个空格作为缩进,而不使用tab缩进,编辑器最好事先设定;</li>
<li>函数中用逗号来分隔参数,所有的参数与前面的逗号之间要空格(第一个参数除外);</li>
<li>除了参数之间要使用空格外,所有操作符之间都要使用空格,包括字符连接符(.);</li>
</ul>
<hr>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (condition) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//或者</span></span><br><span class="line"><span class="keyword">if</span>(a==b)&#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//`应该写成`</span></span><br><span class="line"><span class="keyword">return</span> condition;</span><br><span class="line"><span class="keyword">return</span> a==b;</span><br></pre></td></tr></table></figure>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//`直接返回`</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">compute_duration_in_milliseconds</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> $duration = ((($hours * <span class="number">60</span>) + $minutes) * <span class="number">60</span> + $seconds ) * <span class="number">1000</span> ;</span><br><span class="line"> <span class="keyword">return</span> $duration;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//Compliant Solution</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">compute_duration_in_milliseconds</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> <span class="keyword">return</span> ((($hours * <span class="number">60</span>) + $minutes) * <span class="number">60</span> + $seconds ) * <span class="number">1000</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//`出现重复参数`</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">run</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> <span class="comment">// Non-Compliant - 'action1' is duplicated 3 times</span></span><br><span class="line"> prepare(<span class="string">'action1'</span>); </span><br><span class="line"> execute(<span class="string">'action1'</span>);</span><br><span class="line"> release(<span class="string">'action1'</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//`正确的做法`</span></span><br><span class="line">ACTION_1 = <span class="string">'action1'</span>;</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">run</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> prepare(ACTION_1);</span><br><span class="line"> execute(ACTION_1);</span><br><span class="line"> release(ACTION_1);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//布尔值直接判断</span></span><br><span class="line"><span class="keyword">if</span> ($booleanVariable == <span class="keyword">true</span>) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line"><span class="keyword">if</span> ($booleanVariable != <span class="keyword">true</span>) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line"><span class="keyword">if</span> ($booleanVariable || <span class="keyword">false</span>) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line">doSomething(!<span class="keyword">false</span>);</span><br><span class="line">Compliant Solution</span><br><span class="line"><span class="keyword">if</span> ($booleanVariable) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line"><span class="keyword">if</span> (!$booleanVariable) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line"><span class="keyword">if</span> ($booleanVariable) &#123; <span class="comment">/* ... */</span> &#125;</span><br><span class="line">doSomething(<span class="keyword">true</span>);</span><br></pre></td></tr></table></figure>
<blockquote>
<p>千万别认为我是处女座的,在此公开一下自己的星座 <code>摩羯座</code></p>
</blockquote>
</content>
<summary type="html">
<blockquote>
<p>规范的代码在团队合作中尤其重要,很多开发人员不愿意看别人的代码,是因为种种管理规范的人员工作没有做好,最后都施加到了程序员身上去解决面对这些窘境。</p>
</blockquote>
<p>目前毕竟浏览的软件项目质量管理的软件【sonar】,里面规
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="规范" scheme="http://wecall.github.io/tags/%E8%A7%84%E8%8C%83/"/>
<category term="php" scheme="http://wecall.github.io/tags/php/"/>
<category term="代码" scheme="http://wecall.github.io/tags/%E4%BB%A3%E7%A0%81/"/>
<category term="摩羯座" scheme="http://wecall.github.io/tags/%E6%91%A9%E7%BE%AF%E5%BA%A7/"/>
</entry>
<entry>
<title>zencode</title>
<link href="http://wecall.github.io/2015/01/07/zencode/"/>
<id>http://wecall.github.io/2015/01/07/zencode/</id>
<published>2015-01-07T02:57:45.000Z</published>
<updated>2016-01-21T04:30:12.000Z</updated>
<content type="html"><p>#常用语法<br>程序员高效的工作少不了工具的帮助,特此为大家整理一个系列的工具篇</p>
<blockquote>
<ul>
<li>说明用途:使用元素的名称生成Html标签; eg: div -&gt; <div></div></li>
<li>准备工作,搜索一下自己的浏览器是否支持Emmet插件; eg: sublime text Emmet</li>
<li>查看文档,熟悉zencode的语法; eg: <a href="http://docs.emmet.io/abbreviations/syntax/" target="_blank" rel="external">emmet官方文档</a></li>
<li>操作方式,输入语句,按一下生成的快捷键,各个编辑器略有不同; eg: ! [Ctrl+E]</li>
</ul>
</blockquote>
<p><code>让我们一起来感受一下它的神奇之处</code></p>
<hr>
<h4 id="结构篇"><a href="#结构篇" class="headerlink" title="结构篇"></a>结构篇</h4><p><code>(html:5 html:xml )</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">!</span><br></pre></td></tr></table></figure></p>
<blockquote>
<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></pre></td><td class="code"><pre><span class="line">&gt; <span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">title</span>&gt;</span>Document<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">body</span>&gt;</span> </span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<h4 id="属性篇"><a href="#属性篇" class="headerlink" title="属性篇"></a>属性篇</h4><p><code>(. class ; # id ; {} text ; [] 其他属性)</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">div.col#row</span><br></pre></td></tr></table></figure></p>
<blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"col"</span> <span class="attr">id</span>=<span class="string">"row"</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">p&#123;记住这种用法,编码神器&#125;</span><br></pre></td></tr></table></figure>
<blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">p</span>&gt;</span>记住这种用法,编码神器<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">a.col[title="快"]&#123;Html tag&#125;</span><br></pre></td></tr></table></figure>
<blockquote>
<p><code>a 的href属性会自动生成;</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">""</span> <span class="attr">class</span>=<span class="string">"col"</span> <span class="attr">title</span>=<span class="string">"快"</span>&gt;</span>Html tag<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure></p>
</blockquote>
<hr>
<h4 id="符号篇"><a href="#符号篇" class="headerlink" title="符号篇"></a>符号篇</h4><p><code>(&gt; + ^ *)</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">div+div&gt;ul&gt;li&gt;span+a.col</span><br></pre></td></tr></table></figure></p>
<blockquote>
<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></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">div</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">""</span> <span class="attr">class</span>=<span class="string">"col"</span>&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<p><code>^^ 当前元素的父元素的父元素</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">div&gt;ul&gt;li&gt;span^^ul&gt;li&gt;a</span><br></pre></td></tr></table></figure></p>
<blockquote>
<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></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">""</span>&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<p><code>*5 5个类似的元素 $ 默认重1开始,自增参数</code><br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">div&gt;ul&gt;li.item$*5</span><br></pre></td></tr></table></figure></p>
<blockquote>
<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></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">""</span>&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ul&gt;li.item$$$*5</span><br></pre></td></tr></table></figure>
<blockquote>
<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></pre></td><td class="code"><pre><span class="line">&gt; <span class="tag">&lt;<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">"item001"</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">"item002"</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">"item003"</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">"item004"</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">"item005"</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line">&gt; <span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br><span class="line">&gt;</span><br></pre></td></tr></table></figure>
</blockquote>
</content>
<summary type="html">
<p>#常用语法<br>程序员高效的工作少不了工具的帮助,特此为大家整理一个系列的工具篇</p>
<blockquote>
<ul>
<li>说明用途:使用元素的名称生成Html标签; eg: div -&gt; <div></div></li>
<li>准备工作,搜索一下自己的
</summary>
<category term="技术文档" scheme="http://wecall.github.io/categories/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
<category term="编程" scheme="http://wecall.github.io/tags/%E7%BC%96%E7%A8%8B/"/>
<category term="语法" scheme="http://wecall.github.io/tags/%E8%AF%AD%E6%B3%95/"/>
<category term="zencode" scheme="http://wecall.github.io/tags/zencode/"/>
</entry>
<entry>
<title>Node.js开发指南</title>
<link href="http://wecall.github.io/2014/12/31/Node-js%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/"/>
<id>http://wecall.github.io/2014/12/31/Node-js开发指南/</id>
<published>2014-12-31T06:52:02.000Z</published>
<updated>2016-01-21T04:30:18.000Z</updated>
<content type="html"><p>##了解Node.js</p>
<ul>
<li>具有复杂逻辑的网站</li>
<li>社交网络的大规模Web应用</li>
<li>Web Socket服务器</li>
<li>命令行工具</li>
<li>交互式终端程序</li>
<li>单元测试工具</li>
<li>客户端Javascript编译器</li>
<li>带有图形用户界面的本地应用程序</li>
</ul>
<p>##Node.js初体验</p>
<ul>
<li>I/O密集型项目</li>
<li><a href="http://nodejs.org/" target="_blank" rel="external">nodejs官网</a></li>
<li>程序实例:</li>
</ul>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> http = <span class="built_in">require</span>(<span class="string">"http"</span>);</span><br><span class="line">http.createServer(<span class="function"><span class="keyword">function</span>(<span class="params">req,res</span>)</span>&#123;</span><br><span class="line"> res.writeHead(<span class="number">200</span>,&#123;<span class="string">'Content-Type'</span>:<span class="string">'text/html'</span>&#125;);</span><br><span class="line"> res.write(<span class="string">"&lt;h1&gt;Ron Chen&lt;/h1&gt;"</span>);</span><br><span class="line"> res.write(<span class="string">"&lt;p&gt;tech only&lt;/p&gt;"</span>);</span><br><span class="line">&#125;).listen(<span class="number">3000</span>);</span><br><span class="line"><span class="built_in">console</span>.log(<span class="string">"HTTP Server is listening at port 3000 ."</span>);</span><br></pre></td></tr></table></figure>
<p>##学习日记</p>
<p>###异步式I/O与事件式编程</p>
<p><code>阻塞</code> 线程无法及时调度,一般发生于同步式的I/O操作,例如磁盘读写,网络通信</p>
<table>
<thead>
<tr>
<th>同步式I/O(阻塞式)</th>
<th>异步式I/O(非阻塞式)</th>
</tr>
</thead>
<tbody>
<tr>
<td>利用多线程提升吞吐量</td>
<td>单线程即可实现高吞吐量</td>
</tr>
<tr>
<td>通过事件分割和线程调度利用多核CPU</td>
<td>通过功能划分利用多核CPU</td>
</tr>
<tr>
<td>需要由操作系统调度多线程使用多核CPU</td>
<td>可以将单进程绑定到单核CPU</td>
</tr>
<tr>
<td>难以充分利用CPU资源</td>
<td>可以充分利用CPU资源</td>
</tr>
<tr>
<td>内存轨迹大,数据局部性弱</td>
<td>内存轨迹小,数据局部性强</td>
</tr>
<tr>
<td>符合线性编程思维</td>
<td>不符合传统的编程思想</td>
</tr>
</tbody>
</table>
<hr>
<p>###事件循环</p>
<blockquote>
<p>Node.js程序由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数。它没有显式的事件循环,事件循环通过Libev库实现,对开发者不可见,均被EventEmitter封装。<br>libev事件循环的每一次迭代,在Node.js中就是一次Tick,libev不断检查是否有活动的、可供检测的事件监听器,直到检测不到时才退出循环,进程结束。</p>
</blockquote>
<p><img src="http://ronchen.qiniudn.com/ronchenQQ截图20150113094124.png" alt="事件循环" title="事件循环"></p>
<p>###模块和包<br>包:实现某个功能模块的集合,用户发布和维护。<br>模块:node.js应用程序的组成部分,文件和模块是一一对应的。</p>
<p>####模块<br>exports: 模块公开的接口<br>require: 外部获取一个模块的接口,所获取模块的exports对象<br><code>注意:</code></p>
<blockquote>
<p>require 类似于创建对象,但是实际上和对象又有本质的区别,因为require不会重复加载模块,也就是说,无论调用多少次require,获得的模块都是同一个;<br>exports 本身仅仅是一个普通的空对象,专门用来声明接口,本质上是通过它为模块闭包的内部建立一个有限的访问接口;</p>
</blockquote>
<p>####包</p>
<ul>
<li>package.json必须在包的顶层目录下;</li>
<li>二进制文件应该在bin目录下;</li>
<li>Javascript代码应该在lib目录下;</li>
<li>文档应该在doc目录下;</li>
<li>单元测试应该在test目录下;</li>
</ul>
<p>package.json说明:</p>
<ul>
<li>name: 包的名称,必须是唯一的,小写英文字母+下划线+数字,不允许有空格</li>
<li>description: 简要说明</li>
<li>version: 版本字符串,符合语义化规范</li>
<li>keywords:关键字数组,便于搜索</li>
<li>maintainers:维护者数组,{name,email<code>可选</code>,web<code>可选</code>}</li>
<li>contributors:贡献者数组,同上</li>
<li>bugs:提交Bug的地址</li>
<li>licenses:许可证数组,{type[许可证名称],url[链接地址]}</li>
<li>repositories:仓库托管地址数组,{type[仓库类型],url[仓库地址],path[仓库路径]}</li>
<li>dependencies:包的依赖数组{[包的名称],[包的版本号]}</li>
</ul>
<blockquote>
<p>Node.js官方提供的包管理器,标准发布平台</p>
</blockquote>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//本地模式</span></span><br><span class="line">npm [install/i] package_name </span><br><span class="line"><span class="comment">//全局模式</span></span><br><span class="line">npm [install/i] -g package_name</span><br></pre></td></tr></table></figure>
<p>####包的发布<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//生成规范的package.json</span></span><br><span class="line">npm init</span><br><span class="line"><span class="comment">//发布 [包管理]https://www.npmjs.com/</span></span><br><span class="line">npm publish</span><br><span class="line"><span class="comment">//取消发布</span></span><br><span class="line">npm unpublish</span><br></pre></td></tr></table></figure></p>
<p>###node.js调试</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//打开调试终端</span></span><br><span class="line">node debug debug.js</span><br></pre></td></tr></table></figure>
<hr>
<ul>
<li>run <code>执行脚本,在第一行暂停</code></li>
<li>restart <code>重新执行脚本</code></li>
<li>cont,c <code>继续执行,直到遇到下一个断点</code></li>
<li>next,n <code>单步执行</code></li>
<li>step,s <code>单步执行并进入函数</code></li>
<li>out,o <code>从函数中步出</code></li>
<li>setBreakpoint(),sb() <code>当前行设置断点</code></li>
<li>setBreakpoint(‘f{}’),sb(…) <code>在函数f第一行设置断点</code></li>
<li>setBreakpoint(‘script.js’,20),sb(…) <code>在script.js的第一行设置断点</code></li>
<li>clearBreakpoint(),cb(…) <code>清除所有断点</code></li>
<li>backtrace,bt <code>显示当前调用栈</code></li>
<li>list(5) <code>显示当前执行到的前后5行代码</code></li>
<li>watch(expr) <code>把表达式expr加入监视列表</code></li>
<li>unwatch(expr) <code>把表达式expr从监视列表移除</code></li>
<li>watchers <code>显示监视列表中所有的表达式和值</code></li>
<li>repl <code>在当前上下文打开即时求值环境</code></li>
<li>kill <code>终止当前执行的脚本</code></li>
<li>scripts <code>显示当前已加载的所有脚本</code></li>
<li>version <code>显示V8的版本</code></li>
</ul>
<p>###核心模块</p>
<p>####全局变量<br>global 是全局变量的宿主,定义变量使用var 区别于全局变量.</p>
<p>process是一个全局变量,即Global对象属性.最常用的成员方法:</p>
<ul>
<li>process.argv 命令行参数数组</li>
<li>process.stdout 标准输出流,通常使用<code>console.log</code></li>
<li>process.stdin 标准输入流</li>
<li>process.nextTick 为事件循环设置一项任务,在下次事件循环调响应时调用callback.不用使用setTimeout(fn,0)代替process.nextTick(callback)<br>console 控制台标准输出<ul>
<li>console.log() 类似于C语言printf(),多个参数输出,以换行结束</li>
<li>console.error() 错误流输出,类似于console.log()</li>
<li>console.trace() 输出当前调用栈</li>
</ul>
</li>
</ul>
<p>####常用工具util</p>
<ul>
<li>util.inherits(constructor,superConstructor)对象间原型继承函数</li>
<li>util.inspect(object,[showHidden],[depth],[colors]) 将任意对象转换成为字符串</li>
<li>util.isArray() , util.isRegExp() , util.isDate()</li>
<li>util.isError() , util.format() , util.debug()</li>
</ul>
<p>####事件驱动<br>events是Node.js最重要的模块,Node.js本身架构就是事件式的,而他提供了唯一的接口,堪称Node.js的基石</p>
<hr>
<ul>
<li>events.EventEmitter 事件发射与事件监听器功能的封装;</li>
<li>EventEmitter.on(event,listener) 为指定事件注册一个监听器;<ul>
<li>event:一个字符串;listener:回调函数;</li>
</ul>
</li>
<li>EventEmitter.emit(event,[arg1],[arg2]…) 发射event事件;<ul>
<li>传递可选参数到事件监听器的参数表</li>
</ul>
</li>
<li>EventEmitter.once(event,listener) 为指定事件注册一个单次监听器;</li>
<li>EventEmitter.removeListener(event,listener) 移除指定事件的某个监听器;<ul>
<li>listener:必须是该事件已经注册过的监听器</li>
</ul>
</li>
<li>EventEmitter.removeAllListener([event]) 移除所有事件的所有监听器;<ul>
<li>如果event,则移除指定事件的所有监听器</li>
</ul>
</li>
<li>更多API参考:<a href="http://nodejs.org/api/events.html" target="_blank" rel="external">API文档</a></li>
</ul>
<hr>
<p><code>error事件</code>当我们遇到异常的时候通常会发射error事件,当error被发射时,EventEmitter规定如果没有响应的监听器,Node.js会把它当作异常,退出并打印调用栈.</p>
<p>####继承EventEmitter</p>
<blockquote>
<p>只要是支持事件响应的核心模块都是EventEmitter的子类:fs,net,http</p>
</blockquote>
<p>#####文件系统 fs</p>
<blockquote>
<p>fs模块是文件操作的封装,提供了文件的读取,写入,更名,删除,遍历目录,链接等POSIX文件系统操作.<br>fs模块中的所有操作都提供了异步的和同步的两个版本.</p>
</blockquote>
<p><code>列出常用的函数:</code></p>
<ul>
<li>fs.readFile:<ul>
<li>调用方法:fs.readFile(filename,[encoding],[callback(err,data)])</li>
<li>参数说明:<ul>
<li>filename:[必选] 读取的文件名</li>
<li>encoding:[可选] 文件的字符编码</li>
<li>callback:[可选] 回调函数,接收文件内容<ul>
<li>err : 有没有错误发生</li>
<li>data:文件内容[如果指明encoding,data是一个字符串]</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<table>
<thead>
<tr>
<th>功能</th>
<th>异步函数</th>
<th>同步函数</th>
</tr>
</thead>
<tbody>
<tr>
<td>打开文件</td>
<td>fs.open(path,flags,[mode],[callback(err,fd)])</td>
<td>fs.openSync(path,flags,[mode])</td>
</tr>
<tr>
<td>关闭文件</td>
<td>fs.close(fd,[callback(err)])</td>
<td>fs.closeSync(fd)</td>
</tr>
<tr>
<td>读取文件(文件扫描符)</td>
<td>fs.read(fd,buffer,offset,length,position,[callback(err,bytesRead,buffer)])</td>
<td>fs.readSync(fd,buffer,offset,length,position)</td>
</tr>
<tr>
<td>写入文件(文件扫描符)</td>
<td>fs.write(fd,buffer,offset,length,position,[callback(err,bytesWritten,buffer)])</td>
<td>fs.writeSync(fd,buffer,offset,lenght,position)</td>
</tr>
<tr>
<td>读取文件内容</td>
<td>fs.readfile(filename,[encoding],[callback(err,data)])</td>
<td>fs.readFileSync(filename,[encoding])</td>
</tr>
<tr>
<td>写入文件内容</td>
<td>fs.writeFile(filename,data,[encoding],[callback(err)])</td>
<td>fs.writeFileSync(filename,data,[encoding])</td>
</tr>
<tr>
<td>删除文件</td>
<td>fs.unlink(path,[callback(err)])</td>
<td>fs.unlinkSync(path)</td>