-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
2203 lines (917 loc) · 145 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="theme-next mist use-motion" lang="zh-Hans">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta name="theme-color" content="#222">
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />
<link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />
<link href="/css/main.css?v=5.1.2" rel="stylesheet" type="text/css" />
<meta name="keywords" content="Hexo, NexT" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.1.2" />
<meta property="og:type" content="website">
<meta property="og:title" content="Forest">
<meta property="og:url" content="http://yoursite.com/index.html">
<meta property="og:site_name" content="Forest">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Forest">
<script type="text/javascript" id="hexo.configurations">
var NexT = window.NexT || {};
var CONFIG = {
root: '/',
scheme: 'Mist',
sidebar: {"position":"left","display":"post","offset":12,"offset_float":12,"b2t":false,"scrollpercent":false,"onmobile":false},
fancybox: true,
tabs: true,
motion: true,
duoshuo: {
userId: '0',
author: '博主'
},
algolia: {
applicationID: '',
apiKey: '',
indexName: '',
hits: {"per_page":10},
labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
}
};
</script>
<link rel="canonical" href="http://yoursite.com/"/>
<title>Forest</title>
</head>
<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
<div class="container sidebar-position-left
page-home
">
<div class="headband"></div>
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-wrapper">
<div class="site-meta ">
<div class="custom-logo-site-title">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">Forest</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<p class="site-subtitle"></p>
</div>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section">
<i class="menu-item-icon fa fa-fw fa-home"></i> <br />
首页
</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories/" rel="section">
<i class="menu-item-icon fa fa-fw fa-th"></i> <br />
分类
</a>
</li>
<li class="menu-item menu-item-about">
<a href="/about" rel="section">
<i class="menu-item-icon fa fa-fw fa-user"></i> <br />
关于
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section">
<i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
归档
</a>
</li>
</ul>
</nav>
</div>
</header>
<main id="main" class="main">
<div class="main-inner">
<div class="content-wrap">
<div id="content" class="content">
<section id="posts" class="posts-expand">
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://yoursite.com/2019/02/28/php/getMac/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="sir051223">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/avatar.gif">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Forest">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2019/02/28/php/getMac/" itemprop="url">php通过ARP地址解析协议获取用户设备的mac地址</a></h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2019-02-28T14:52:54+08:00">
2019-02-28
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Php/" itemprop="url" rel="index">
<span itemprop="name">Php</span>
</a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h3 id="一、ARP地址解析协议"><a href="#一、ARP地址解析协议" class="headerlink" title="一、ARP地址解析协议"></a>一、ARP地址解析协议</h3><p>ARP的功能是在32bit的ip地址和采用不同网络技术的硬件地址之间提供动态映射。<br>ARP高速运行的关键是由于每个主机上都有一个ARP高速缓存,这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。<br>可以在linux中通过命令arp -a查看,参数-a的意思是显示高速缓存中所有的内容</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"> <span class="comment"># arp -a</span></div><div class="line">? (192.168.31.53) at f4:60:e2:a7:f7:60 [ether] on enp4s0</div><div class="line">? (192.168.31.109) at 94:bf:2d:52:42:34 [ether] on enp4s0</div><div class="line">gateway (192.168.31.1) at 84:5b:12:4b:14:41 [ether] on enp4s0</div><div class="line">? (192.168.31.152) at 3c:52:82:67:8d:b9 [ether] on enp4s0</div><div class="line"> </div><div class="line"> 这里列举了最近20分钟访问的ip及ip对应的mac地址</div></pre></td></tr></table></figure>
<h3 id="二、php代码实现"><a href="#二、php代码实现" class="headerlink" title="二、php代码实现"></a>二、php代码实现</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><?php </div><div class="line"></div><div class="line">/**</div><div class="line"> * 获取客户端IP地址</div><div class="line"> * @param <span class="built_in">integer</span> <span class="variable">$type</span> 返回类型 0 返回IP地址 1 返回IPV4地址数字</div><div class="line"> * @<span class="built_in">return</span> mixed</div><div class="line"> */</div><div class="line"><span class="keyword">function</span> getClientIp(<span class="variable">$type</span> = 0) </div><div class="line">{</div><div class="line"> <span class="variable">$ip</span> = <span class="string">""</span>;</div><div class="line"> <span class="keyword">if</span> (getenv(<span class="string">'HTTP_CLIENT_IP'</span>) && strcasecmp(getenv(<span class="string">'HTTP_CLIENT_IP'</span>), <span class="string">'unknown'</span>)) {</div><div class="line"> <span class="variable">$ip</span> = getenv(<span class="string">'HTTP_CLIENT_IP'</span>);</div><div class="line"> } elseif (getenv(<span class="string">'HTTP_X_FORWARDED_FOR'</span>) && strcasecmp(getenv(<span class="string">'HTTP_X_FORWARDED_FOR'</span>), <span class="string">'unknown'</span>)) {</div><div class="line"> <span class="variable">$ip</span> = getenv(<span class="string">'HTTP_X_FORWARDED_FOR'</span>);</div><div class="line"> } elseif (getenv(<span class="string">'REMOTE_ADDR'</span>) && strcasecmp(getenv(<span class="string">'REMOTE_ADDR'</span>), <span class="string">'unknown'</span>)) {</div><div class="line"> <span class="variable">$ip</span> = getenv(<span class="string">'REMOTE_ADDR'</span>);</div><div class="line"> } elseif (isset(<span class="variable">$_SERVER</span>[<span class="string">'REMOTE_ADDR'</span>]) && <span class="variable">$_SERVER</span>[<span class="string">'REMOTE_ADDR'</span>] && strcasecmp(<span class="variable">$_SERVER</span>[<span class="string">'REMOTE_ADDR'</span>], <span class="string">'unknown'</span>)) {</div><div class="line"> <span class="variable">$ip</span> = <span class="variable">$_SERVER</span>[<span class="string">'REMOTE_ADDR'</span>];</div><div class="line"> }</div><div class="line"> <span class="built_in">return</span> <span class="variable">$ip</span>;</div><div class="line">}</div><div class="line"></div><div class="line">/**</div><div class="line"> * 获得用户设备的mac地址</div><div class="line"> * 通过arp执行控制台程序,得到控制台的返回,然后处理控制台的信息,从ip查询得到mac地址</div><div class="line"> * @<span class="built_in">return</span> unknown</div><div class="line"> */</div><div class="line"><span class="keyword">function</span> <span class="function"><span class="title">getMac</span></span>()</div><div class="line">{</div><div class="line"> <span class="variable">$ip</span> = getClientIp();</div><div class="line"> <span class="variable">$command</span> = <span class="string">"arp"</span>;</div><div class="line"> <span class="variable">$data</span> = <span class="built_in">exec</span>(<span class="variable">$command</span>, <span class="variable">$out</span>);</div><div class="line"> </div><div class="line"> <span class="variable">$ipstr</span> = <span class="string">""</span>;</div><div class="line"> <span class="keyword">for</span> (<span class="variable">$i</span> = 0; <span class="variable">$i</span> < count(<span class="variable">$out</span>); <span class="variable">$i</span>++) {</div><div class="line"> <span class="keyword">if</span> (strpos(<span class="variable">$out</span>[<span class="variable">$i</span>], <span class="variable">$ip</span>) === 0) {</div><div class="line"> <span class="variable">$ipstr</span> = <span class="variable">$out</span>[<span class="variable">$i</span>];</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(<span class="variable">$ipstr</span> != <span class="string">""</span>) {</div><div class="line"> <span class="variable">$strs</span> = my_split(<span class="variable">$ipstr</span>, <span class="string">" "</span>);</div><div class="line"> <span class="built_in">return</span> <span class="variable">$strs</span>[2];</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> <span class="built_in">return</span> <span class="string">'找不到mac'</span>;</div><div class="line"> }</div><div class="line">}</div><div class="line"></div><div class="line"><span class="built_in">echo</span> getMac();</div><div class="line"><span class="built_in">exit</span>;</div><div class="line"> </div><div class="line">?></div></pre></td></tr></table></figure>
<h3 id="三、云服务器使用情况"><a href="#三、云服务器使用情况" class="headerlink" title="三、云服务器使用情况"></a>三、云服务器使用情况</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">在(某里、某度、某腾)云服务器中执行 arp <span class="_">-a</span> 得到的映射记录并无最近的用户的访问ip,云服务器内部做了处理,所以无法获取到。</div></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</div>
</article>
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://yoursite.com/2018/12/14/php/ffmpeg/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="sir051223">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/avatar.gif">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Forest">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2018/12/14/php/ffmpeg/" itemprop="url">linux suse安装ffmpeg及php使用</a></h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-12-14T16:45:34+08:00">
2018-12-14
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Php/" itemprop="url" rel="index">
<span itemprop="name">Php</span>
</a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h3 id="一、获取ffmpeg"><a href="#一、获取ffmpeg" class="headerlink" title="一、获取ffmpeg"></a>一、获取ffmpeg</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">wget https://www.ffmpeg.org/releases/ffmpeg-4..tar.bz2</div></pre></td></tr></table></figure>
<h3 id="二、解压并编译安装"><a href="#二、解压并编译安装" class="headerlink" title="二、解压并编译安装"></a>二、解压并编译安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">tar -xjvf ffmpeg-4.0.tar.bz2</div><div class="line"></div><div class="line"><span class="built_in">cd</span> ffmpeg-4.0</div><div class="line"></div><div class="line">执行配置:./configure,此时或出现如下报错</div><div class="line"></div><div class="line">nasm/yasm not found or too old</div></pre></td></tr></table></figure>
<h3 id="三、参数值传输接收不到的情况"><a href="#三、参数值传输接收不到的情况" class="headerlink" title="三、参数值传输接收不到的情况"></a>三、参数值传输接收不到的情况</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">第一次传递的参数,在服务端接收参数正常,修改参数名后,给参数赋值,在服务端出现接收不到参数值的现象</div><div class="line"></div><div class="line">调试1:安装soapui,发起调用 -> 调用正常 判断:排除服务器端问题</div><div class="line"></div><div class="line">调试2:将参数值修改为固定字符串值,再发起调用 -> 依然接收不到 判断:排除参数赋值失效</div><div class="line"></div><div class="line">调试3:改变参数位置,再发起调用 -> 依然接收不到 判断:排除参数位置影响</div><div class="line"></div><div class="line">调试4:删除runtime缓存文件,再发起调用 -> 依然接收不到 判断:排除程序缓存文件影响</div><div class="line"></div><div class="line">调试5:重启apache或php-fpm,再发起调用 -> 依然接收不到 判断:排除web服务器环境问题</div><div class="line"></div><div class="line">调试6:本地wamp环境,发起调用 -> 接收正常 判断:soap环境差异问题导致,查找到是soap缓存的问题</div><div class="line"></div><div class="line">修改代码</div><div class="line"></div><div class="line"><span class="variable">$soap</span> = new \SoapClient(<span class="string">'http://www.whatever.com/WebService.asmx?wsdl'</span>);</div><div class="line"></div><div class="line">为</div><div class="line"></div><div class="line"><span class="variable">$soap</span> = new \SoapClient(<span class="string">'http://www.whatever.com/WebService.asmx?wsdl'</span>, array(<span class="string">'cache_wsdl'</span> => 0));</div><div class="line"></div><div class="line">发起调用 -> 接收正常</div></pre></td></tr></table></figure>
<h3 id="五、总结"><a href="#五、总结" class="headerlink" title="五、总结"></a>五、总结</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">参数名接收到,但参数值接收不到,这很怪异,一开始没有怀疑缓存原因,归根到底是对soap的基础理解得不够深刻。使用排除法定位问题的</div><div class="line">速度还是比较局限。透过现象去了解程序的本质,设计思想,对于分析、解决问题有很大的帮助</div></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</div>
</article>
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://yoursite.com/2018/12/13/manage/cultrue/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="sir051223">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/avatar.gif">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Forest">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2018/12/13/manage/cultrue/" itemprop="url">良好的研发团队文化是怎样「长」成的</a></h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-12-13T16:14:05+08:00">
2018-12-13
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Manage/" itemprop="url" rel="index">
<span itemprop="name">Manage</span>
</a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h3 id="1、写在前面"><a href="#1、写在前面" class="headerlink" title="1、写在前面"></a>1、写在前面</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">转载来至:http://mp.weixin.qq.com/s/fzBDkwaJPzGUr2<span class="built_in">bg</span>0Th6IQ</div></pre></td></tr></table></figure>
<p>平时经常听到Google公司讲企业文化,阿里、华为讲价值观,总觉得很牛B,高大上的东西。几个字就成为公司的核心竞争力,我们能不能自己也搞一个呢?其实文化只是一种思想观念、行为习惯、处事风格,家有家风,国有国法,一个民族有一个民族的文化。寺庙文化传承千百年,舌尖上的美食流传至今,它应该有一个自己的发展规律。今天,我们一起来探讨一下,研发团队文化是怎么形成的,下面以我个人的经历来抛砖引玉。</p>
<p>我35岁前主要钻研技术,近几年逐步转向管理,带过几十人至一两百人的研发队伍。在最近的管理工作中,总结并归纳了几个可以贴到墙上的大字,即「共治分享自视一起拼,简单有效快」,接下来讲讲这14个字的来源。</p>
<h3 id="2、遇到的问题"><a href="#2、遇到的问题" class="headerlink" title="2、遇到的问题"></a>2、遇到的问题</h3><p>我一年多以前入职了现在的单位,以技术负责人的身份。到岗以后发现了不少的问题:</p>
<ol>
<li><p>技术差:架构臃肿,分层混乱,不利于维护和扩展;机房建设落后,有两个自建机房,故障处理没流程;</p>
</li>
<li><p>氛围差:团队没有活力,没有争论,没有学习和分享的氛围。准时上下班,人员懒散,没有激情,像一潭死水一样。不接受新事物,封闭自己,遇到问题相互推诿;</p>
</li>
<li><p>组织结构不合理:人员没有充分利用起来,造成资源浪费,团队角色职责定义模糊,整个团队没有一个清晰的目标和落地的步骤,成员相互的合作不协调。</p>
</li>
</ol>
<h3 id="3、解决之道"><a href="#3、解决之道" class="headerlink" title="3、解决之道"></a>3、解决之道</h3><p>有问题当然是解决问题,所有的问题本质上都是人的问题,空降的领导必然会导致一部分人员的流失,只要控制在一定的范围内即可。不是因为你不够好,只是因为他对过去领导的依恋,以及对新事物的不正面。改变一个人的成本,比招聘一个人的成本还要大。所以如果有人要离职,同意即可,让他优雅地离开,这是于公司于个人都是有利的事情。</p>
<p>解决了人的问题,接着是解决技术问题,组建架构部,引进一些优秀的人才,自己带几个项目,打两场硬仗,培养兄弟感情的同时,也是让大家认同你的最好方式。做完了这些,然后调整组织架构,实行弹性工作制,接下来就是日常的管理工作了。部门共治,搭建统一工作平台,树立新工作作风,搞氛围,激活团队,只能一步一步地来。</p>
<h4 id="a-部门共治"><a href="#a-部门共治" class="headerlink" title="a.部门共治"></a>a.部门共治</h4><p>部门共治就是部门要共同治理,我一直认为,每个人只要管好自己,部门的管理就简单得多。先在文件服务器上建一个文件夹,取名为部门共治,然后在里面新建如周报、周会纪要、工时统计、故障报告等目录。</p>
<p>1.周报,我个人一直有写周报的习惯,它是自我管理的方式。上一周总结、下一周计划,让自己有一个清晰的工作目标,理清事情的轻重缓急,同时透明化自己的工作,增加彼此的信任。先是自己写,然后分级逐步推广到全员。</p>
<p>2.工时统计,工时统计是每个月对团队工作时长的统计,由人事协助出报表。它统计到每个人、小组、部门的上班时长情况,主要通过疲劳指数、超出率、小组平均超出率、总平均超出率4个指数来体现。</p>
<p>一切以数据说话,增加人员要看小组平均超出率,员工累不累看疲劳指数,总平均超出率体现了整个部门的负荷情况,了解整个部门的工作节奏,也为增员或者裁员提供了参考指标,工时统计还可以与工单统计相结合。在具体操作时,需要注意可能产生的负面影响,如造成团队成员的反感、过度鼓励加班等,其实超出率过高或过低都不是很好的现象。</p>
<p>3.周会,管理小组每周碰一下,汇总一下工作和问题,同时提交会议纪要,全员都可以查看,并邮件方式同步给领导。我们的周会在每周一下午上班的第一时间,并要求开启午休关掉的灯,管理层从自己做起,严格约束自己,给大家立一个榜样,顺带还解决午休延迟开灯的问题。</p>
<p>早期的周会由我主持,后面轮流主持和记录。主持人站在部门负责人的角度,对汇报人员提出质疑或建议,这样就迫使站在整个研发中心的角度去思考,培养了每个人的全局观,减少本位主义和平时工作中不必要的冲突,同时还提高了管理人员的组织协调力。</p>
<p>4.故障分析报告,将故障分级管理,然后尽量透明化,重要故障全员通告,此工作由运维部门负责。故障报告不仅可追溯,也是一个总结分析的过程,可协助查找到根本问题。透明化可以提高大家的警惕,造成的损失也间接地告诉了代码与商业价值的关系。</p>
<p>5.书籍分享和书斋建设,如果要构建一个学习型团队,书籍的分享和书斋的建设是很好的办法。同时它相当于一面文化宣传墙,利于人员的招聘。书籍可以公司出钱购买,也可以鼓励大家捐赠、分享。书籍它本身很便宜,但真的要捐赠时也有不舍,所以鼓励大家离开时可赎回。捐赠和购书、以及分享书籍的过程,也是学习氛围养成的过程。</p>
<h4 id="b-搭平台,立作风"><a href="#b-搭平台,立作风" class="headerlink" title="b.搭平台,立作风"></a>b.搭平台,立作风</h4><p>搭工作平台,立新工作作风。没有度量就没有提升,管理要数据化、工具化。搭建统一的工作平台,提高大家的工作效率,同时还要树立新的工作作风,如站立式会议、周五分享日、项目管理工具和知识管理工具。</p>
<p>1、项目管理工具JIRA,引入JIRA项目管理工具,可以管理需求、工单、缺陷等各种任务。可以实时地监控、跟踪任务的状态,还可以在每月底出工单统计报告,评估开发人员的工作量和测试人员的工作量。</p>
<p>2、知识管理工具WIKI,类似于维基百科,主要用于知识的分享。可以创建部门的空间、自己个人的空间,写自己的工作心得、新的技术知识等。我个人的一些心得和重要邮件,我也会截图分享到自己的个人空间,这有利于新成员的了解和合作,也利于团队文化的形成。以前企业文化搞海报、杂志等方式,现在采用这种方式更容易接受,也更容易推广。</p>
<p>3、站立式会议,研发是一个需要创意,大脑密集性的工作。所以技术讨论是必不可少的部分,而站立式会议则是非常好的形式。小组周会或者几个人讨论一个问题,非常适合站立式短会。20分钟左右,大家站在白板前,不需要做会议记录,直接用手机拍照,会后发邮件或QQ群。简单高效快,大家保持专注,也不会懒洋洋的样子,没人会玩手机。因为站着,所以会议不会太长,高效、方便、随时随地,不一定需要会议室,所以研发中心要多一些白板,多一些小的会议室。</p>
<p>4、周五分享日,技术的分享现在已成为研发团队的标配,我们每周五是技术分享日,时间定在下午17点到19点,这样避免影响正常的工作。同时让大家知晓,成长不仅是团队的事情,也是个人的事情。分享有利于主讲人知识的巩固、总结,成果的展示,也有利于大家快速的学习。架构部的分享是工作的一部分,其它的则是自愿报名,自由组织。我们的分享也要采用简单有效快的方式,鼓励直接show代码,或使用wiki来讲,这样也利于二次传播,不一定要高大上,也不一定要PPT,达到目的和起到效果即好。</p>
<h4 id="c-搞氛围,激活团队"><a href="#c-搞氛围,激活团队" class="headerlink" title="c.搞氛围,激活团队"></a>c.搞氛围,激活团队</h4><p>工作和生活要平衡,认真工作,快乐生活。如果管理是鞭策或大棒,那么领导就是鼓励或葫芦卜。季度会议、乐捐与周四下午茶、户外兴趣小组是搞氛围、激活团队的很好方式。</p>
<p>1、季度会议,周会说事,季度会议谈情怀。每3个月左右开一次季度会,套路是新人介绍,上季度的总结,下季度的计划,其它如新书推荐、特长展示等。新人介绍可以快速地融入整个部门,感受团队的热情。上季度的工作总结和下季度的计划,是每个部门长向下级汇报,我们鼓励上级向下级定期汇报,总理都要每年向全国人民汇报,我们也要这样,让每个人都知道各小组最近在干些什么事,下阶段要做什么,设置一个共同的目标,然后一起拼搏。新书推荐,主持人会向大家介绍近期自己读过的书,以及读书的感悟与心得,一起成长。</p>
<p>季度会议如同年度会议,年会不开会,只是吃吃喝喝,以及节目表演,所以季度会议的形式也要比较轻松,以乐观向上的氛围为主,参与的人数比较多。我们的季度会议采用轮值,每次的风格都不一样,这样挺好的,也非常锻炼主持人的组织协调能力,会议时间一般占用周五分享日的时间。</p>
<p>2、乐捐与周四下午茶,乐捐是一个自罚约定、一个问责制度,让员工敢于担当。对于开会迟到、系统小故障、乐捐10元能够起到很好的作用。惩罚只是手段,改进才是目的,培养承担责任的习惯,每次出现问题,都有人站出来承担责任。可别小瞧10元,10元只是最低额,额度自定,乐捐它是一个很好的追责方式,故障更容易明确主要责任人。明确责任后,个人自愿,如果你不愿意10至50元,则由他的直接领导来承担,这是一种社区式的潜在力量。</p>
<p>乐捐不可强制,如会议迟到了你不愿意承担,那便需要由会议主持人承担。乐捐的钱会汇入到部门基金,用于部门的下午茶。我们每周举办一次下午茶,周四进行,因为周一是例会日、周二是发布日、周三无会议日、周五又是分享会。下午茶给大家一个轻松的时间,促进交流,营造气氛,费用由个人乐捐、项目经费共同组成。</p>
<p>3、户外活动兴趣小组,工作生活Balance,兴趣小组能够促进大家的交流,非正式的沟通能改善大家的关系,增强团队的凝聚力。我们组建了羽毛球兴趣小组、户外徒步兴趣小组,以及参与公司的年会表演,组织形式是开放的,是弱化了公司和部门信息的QQ群。兴趣小组有利于业务与技术的融合、跨部门沟通,大家劳逸结合,一起爬山一起拼。</p>
<h4 id="d-更多管理工具"><a href="#d-更多管理工具" class="headerlink" title="d.更多管理工具"></a>d.更多管理工具</h4><p>当然不仅仅是以上,我们每一个管理工具都是针对当前的问题,推行2至4周,一个阶段仅推广一个管理工具。我们尝试并留下来的管理工具总共有20多个,具体有:“周会周报、弹性工作制、技术分享会、季度会议、下午茶、10元自罚约定、白板前站立式会议、技术评审制度、会议轮流主持制度、书斋建设、项目管理制度的推行、项目奖金申报制度、招聘比自己更优秀人的约定、末尾淘汰约定、鼓励争论、跨部门沟通约定、源代码统一管理、Y盘文档管理、JIRA和WIKI研发管理工具推广、羽毛球兴趣小组、户外爬山兴趣小组、个体绽放,周一例会日、周二发布日、周三无会议日、周四下午茶、周五分享日”。</p>
<h3 id="4、总结与提升"><a href="#4、总结与提升" class="headerlink" title="4、总结与提升"></a>4、总结与提升</h3><p>太阳底下没有新鲜事,这些工具或措施,或多或少都知道些,我们只是把它落地贯彻,形成了一定的体系。我们的团队一步一步往前走,确实越来越好。这时不断有新人加入,如何将这过去一年多的想法和做法都留下来,并传达出去呢?我们需要把它浓缩成几个字才好,这就是前面提到的“共治分享自视一起拼,简单有效快”,具体内容如下:</p>
<p>共治:共治就是部门要共同治理,自我管理和部门管理一起进行,每个人要管好自己,部门的共治我们希望能转化为个人的自治。具体形式有部门共治文件夹、轮值会议等;</p>
<p>分享:因为专业所以自信,因为自信所以开放,因为开放所以分享。具体形式有周五分享日、书斋建设;</p>
<p>自视:自视就是自我察觉,双眼反向注视着自己。对公司和他人的要求转化为对自己的要求,少一些抱怨,多找一些方法,如乐捐;</p>
<p>一起拼:一起拼就是团队要一起拼搏,一起奋斗,一起喝酒、一起爬山,如户外、项目管理;</p>
<p>简单有效快:把复杂的事情变简单,追求事物的本质,这就是简单有效。“快”是指快速地交付,快速响应业务的需求,如站立式会议等。</p>
<p>以上是我们近一年的总结和实践,也许它并不完美,但它还是能表达团队之前及现阶段的一些行为。当我们确定了这个阶段的部门文化后,团队氛围有了较大的改善,从死气沉沉到激情活力,从固步自封到好学分享,从互相推诿到勇于担当。在后期的几个大项目中,项目的成功显得自然得多,特别在新员工的融合上,成本也低得多。</p>
<h3 id="5、「长」出来的团队文化"><a href="#5、「长」出来的团队文化" class="headerlink" title="5、「长」出来的团队文化"></a>5、「长」出来的团队文化</h3><p>可能现在你已发现,原来文化的构建并没有想象地那么难,也没有多少高大上。它也需要脚踏实地、土里吧唧,一步一步埋头干。先有管理工具、制度和行为措施,然后予以贯彻,形成一种习惯,最后才是总结提升。</p>
<p>我们不能简单的参考大公司的做法,或者管理书籍上挑选几个词语,然后领导喊两声或挂在墙上。这个过程就如同花朵或生物一般,需要播种、栽培,然后才能收获。这样「长」出来的文化,才能管人做事,深入骨髓、改变思想,才能成为公司或团队的核心竞争力。以上浅见,希望能给你一些参考,当然,你也可以尝试一把,just do it!</p>
<h3 id="6、作者介绍"><a href="#6、作者介绍" class="headerlink" title="6、作者介绍"></a>6、作者介绍</h3><p>张辉清,中青易游CTO,曾就职于携程架构、古大集团,在古大集团任首席架构师和高级技术总监。现阶段关注技术与业务的融合、工程效率和团队管理。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</div>
</article>
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://yoursite.com/2018/10/24/essay/recruit/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="sir051223">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/avatar.gif">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Forest">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2018/10/24/essay/recruit/" itemprop="url">阿里技术面试的思路(转载)</a></h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-10-24T16:31:12+08:00">
2018-10-24
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/随笔/" itemprop="url" rel="index">
<span itemprop="name">随笔</span>
</a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h3 id="阿里技术面试的思路"><a href="#阿里技术面试的思路" class="headerlink" title="阿里技术面试的思路"></a>阿里技术面试的思路</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">转载说明:阿里技术面试思路,转载来至阿里技术公众号,原创宗心,以借鉴面试筛选人才想法,如有冒犯之处,</div><div class="line"></div><div class="line">请告知,我会第一时间删除,谢谢。</div></pre></td></tr></table></figure>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">阿里妹导读:知己知彼、百战不殆,面试也是如此。只有充分了解面试官的思路,才能更好地在面试中充分展现自己。</div><div class="line"></div><div class="line">今天,阿里高级技术专家将分享自己作为面试官的心得与体会。如果你是面试者,可以借此为镜,对照发现自己的长处与不足,</div><div class="line"></div><div class="line">有针对性学习成长;如果你是面试官,相信也能通过他的讲述,有所启发。</div></pre></td></tr></table></figure>
<p>招聘是团队管理者工作中的重要一环。本文会结合自己亲身经历以及接受的招聘培训,综合分析怎么找到我们要的人,也希望可以通过招聘这面镜子照亮自己,怎样成为一个更好的工程师。</p>
<h3 id="1-招聘的目的"><a href="#1-招聘的目的" class="headerlink" title="1.招聘的目的"></a>1.招聘的目的</h3><p>当今社会,技术已经成为影响商业成功的关键因素,工程师成为了这些公司最宝贵的财富,没有优秀的人组成团队来完成商业目标,公司根本不可能有今天的成就。所以招聘,就是选择最优秀的人。</p>
<h3 id="2-招什么样的人?"><a href="#2-招什么样的人?" class="headerlink" title="2.招什么样的人?"></a>2.招什么样的人?</h3><p>招优秀的人显然是一个很模糊的概念,我们来度量的时候,我个人认为三个因素是最关键的:</p>
<h4 id="a-技能"><a href="#a-技能" class="headerlink" title="a.技能"></a>a.技能</h4><p>工作项目经验,以及解决疑难问题的能力,毕竟招来的人首先必须很好的完成工作,这是最基本的要求,注意,是很好的完成,不是仅仅完成。</p>
<h4 id="b-潜力"><a href="#b-潜力" class="headerlink" title="b.潜力"></a>b.潜力</h4><p>这个概念看起来比较模糊,其实还是比较容易评价的,对计算机相关的专业的知识体系是不是完整,基础是不是扎实,平常是不是喜欢钻研,对这个世界充满好奇心,这几年走下来,沉淀的速度如何,都是判断一个人的潜力的方式,注意我们看潜力主要是基于候选人的之前的成长经历实事求是来看,过去的优秀经历才能给未来背书。潜力和技能的重要性一样重要,我们不能只看眼前,团队是需要不断发展和前进的,所以我们招人应该面向未来。</p>
<h4 id="c-软实力"><a href="#c-软实力" class="headerlink" title="c.软实力"></a>c.软实力</h4><p>软实力这里其实包含了性格,执行力,领导力等方方面面,它代表了候选人是否能快速融入团队,拿到结果,带领团队攻城拔寨,激励和影响身边的人变得更加优秀等等,软实力一般HR肯定会考察,虽然技术面不会特别去关注,但是从面试的过程中可以看出候选人的沟通能力,以及性格相关的特点,也值得我们注意。</p>
<p>说了这么多,其实在招人上有一个对比的标杆,就是你招的人是不是比团队中同一等级中50%的同学优秀,如果你觉得没有他们优秀,那不用纠结,这个候选人不要了,团队必须不停加入更好的同学,才能变得更加强大。</p>
<h3 id="3-面试的方法"><a href="#3-面试的方法" class="headerlink" title="3.面试的方法"></a>3.面试的方法</h3><p>这里结合之前的培训以及自己的真实经历,讲解面试的一些方法。</p>
<h4 id="a-面试不要做的事"><a href="#a-面试不要做的事" class="headerlink" title="a.面试不要做的事"></a>a.面试不要做的事</h4><h6 id="问一些知道性的问题比如问知不知道这个API干什么的,怎么调用,这个命令怎么用的,知道性的知识,google一下或者认真看下文档就应该知道。"><a href="#问一些知道性的问题比如问知不知道这个API干什么的,怎么调用,这个命令怎么用的,知道性的知识,google一下或者认真看下文档就应该知道。" class="headerlink" title="问一些知道性的问题比如问知不知道这个API干什么的,怎么调用,这个命令怎么用的,知道性的知识,google一下或者认真看下文档就应该知道。"></a>问一些知道性的问题比如问知不知道这个API干什么的,怎么调用,这个命令怎么用的,知道性的知识,google一下或者认真看下文档就应该知道。</h6><h6 id="问一些特别复杂的问题比如问一个特别复杂的算法,问一个很抽象的大问题,短时间内很难给予回答。"><a href="#问一些特别复杂的问题比如问一个特别复杂的算法,问一个很抽象的大问题,短时间内很难给予回答。" class="headerlink" title="问一些特别复杂的问题比如问一个特别复杂的算法,问一个很抽象的大问题,短时间内很难给予回答。"></a>问一些特别复杂的问题比如问一个特别复杂的算法,问一个很抽象的大问题,短时间内很难给予回答。</h6><h6 id="问一些假设性的问题假设你参与了这个项目,你觉得哪几个地方需要优化。"><a href="#问一些假设性的问题假设你参与了这个项目,你觉得哪几个地方需要优化。" class="headerlink" title="问一些假设性的问题假设你参与了这个项目,你觉得哪几个地方需要优化。"></a>问一些假设性的问题假设你参与了这个项目,你觉得哪几个地方需要优化。</h6><p>之所以说这些问题不应该问,我认为主要是因为这些很难考察到面试者的真实能力,45分钟的时间本来就很短,有些问题有可能比较偏,有些问题又过于庞大没法一下子描述特别清楚,还有一些问题缺乏上下文,让人摸不到头脑,所以尽量避免这么问问题,另外把握一个重要原则,不要在面试中试图证明别人不如自己,毫无意义,人无完人,总有覆盖不到的地方,按照这个规则招聘,会错过很多优秀的人才。</p>
<h4 id="b-面试应该做的事"><a href="#b-面试应该做的事" class="headerlink" title="b.面试应该做的事"></a>b.面试应该做的事</h4><h6 id="问已经发生的事情"><a href="#问已经发生的事情" class="headerlink" title="问已经发生的事情"></a>问已经发生的事情</h6><p>比如面试移动开发者,面试官应该认真看下其做过的App,具体的工作是什么,准备一些相关的问题,这里就可以看出来之前工作中的积累是什么,有多深。</p>
<h6 id="问题解决思路"><a href="#问题解决思路" class="headerlink" title="问题解决思路"></a>问题解决思路</h6><p>针对项目经验和一些学习的经验上面,应该问拿到问题以后解决思路是什么,在什么场景下为什么这么做,这里根据面试者的方案,分析的方法论,就可以大致了解面试者是否聪明,知识面是不是够广,遇到问题时会不会举一反三。</p>
<p>具体可以举个简单的例子,很多同学说自己做过架构,然后都会讲自己做了一个解耦和分层的框架,其实这类框架iOS很多,外部github上就有各种方案。在阿里内部手淘早先做的bundle拆分时沉淀的容器规则,天猫开源出去的beeHive,闲鱼内部的Xframework,抑或是服务端的spring mvc,其实都实现了IoC,但实现和思路上都有一些差异,到底为什么这么做,其实是有区别的,这里面就可以看出知识广度,总结和思辩能力,在关键路径上的技术判断。</p>
<p>又比如说,我们总在强调性能稳定性怎么做,业界也有很多方案,到底哪个方案更好呢?答案没有绝对的对错,取决于某个时间点和场景下哪个问题是最核心的突破点,而你的选择标准和落地的技术方案是不是合理(考虑成本,收益,以及后续的风险是什么)。一般来讲,我们更倾向于用系统化的思维看待一个问题,也就是说,相比根据人的经验去识别性能瓶颈,我们更希望能通过自动化,智能化,数据化的方式去解决问题。</p>
<h4 id="c-少问多听"><a href="#c-少问多听" class="headerlink" title="c.少问多听"></a>c.少问多听</h4><p>一般刚开始做面试官的同学很喜欢以问为主,但因为大家的知识体系不太一样,成长环境也不同,直接这么问起来很难就找到面试者的优点,所以尽量让应试者自己陈述,然后以学习和交流的心态针对陈述中存疑的地方再进行发问,会更容易让应试者放松,也更容易让应试者更全面的表达自己。另外,问的差不多的时候,结尾的时候可以补充一句:您觉得刚才的面试中还有哪些我没问到的,您想再补充一下的内容?末了,再问下:我的问题问完了,您有什么想要问我的吗?</p>
<p>知道了应该怎么做,那具体的提问方法有没有什么技巧呢?在招聘中有一个重要的STAR原则,可以跟大家分享。</p>
<h3 id="4-STAR原则"><a href="#4-STAR原则" class="headerlink" title="4.STAR原则"></a>4.STAR原则</h3><h6 id="处境-situation"><a href="#处境-situation" class="headerlink" title="处境(situation)"></a>处境(situation)</h6><p>在什么样的环境下</p>
<h6 id="任务-task"><a href="#任务-task" class="headerlink" title="任务(task)"></a>任务(task)</h6><p>接到了什么样的任务</p>
<h6 id="行动-action"><a href="#行动-action" class="headerlink" title="行动(action)"></a>行动(action)</h6><p>然后具体怎么落地的</p>
<h6 id="结果-result"><a href="#结果-result" class="headerlink" title="结果(result)"></a>结果(result)</h6><p>拿到了什么结果</p>
<p>我们尽量问清楚对方在什么样的环境下接到这个任务,接到以后是做了什么事情,最后的结果是什么样子的。乍一听,感觉,这不是套路嘛,是不是知道这个原则的人,只要按照这四点编故事,就能通过面试了?当然不是,在叙述过程中,我们应该分辨出STAR中的真假,那下面就举一些例子。</p>
<h3 id="5-假的STAR"><a href="#5-假的STAR" class="headerlink" title="5.假的STAR"></a>5.假的STAR</h3><h6 id="描述含糊不清"><a href="#描述含糊不清" class="headerlink" title="描述含糊不清"></a>描述含糊不清</h6><p>比如,我用这个方案解决了这个问题,效果很好,得到了大家的一致好评。注意,效果好是哪里好,有什么度量的标准?一致好评的体现是在具体KPI还是比如团队有个什么奖励之类的。</p>
<h6 id="只表达态度和看法"><a href="#只表达态度和看法" class="headerlink" title="只表达态度和看法"></a>只表达态度和看法</h6><p>我觉得线上稳定性非常重要,应该重点解决和持续跟进。如果只有这一句话,没有后面具体认为重要的解决方案的话,这部分的经验难以令人信服。</p>
<h6 id="假设式描述"><a href="#假设式描述" class="headerlink" title="假设式描述"></a>假设式描述</h6><p>如果我来做这件事情,我会1234怎么怎么样。前面其实面试应该问的问题里面有提到,我们本身就不应该问假设性的问题,那作为面试者,假设没做过的事情,如果只是看思路还好,但是如果说的天花乱坠,这个时候要警惕了,毕竟说和做之前的差异是很大的。对于假设的事情,面试官是没法评估具体效果的,因为它不像过去已有的项目和工作内容,是有明显结果的,如果对过去结果存疑,后续也可以背调了解具体的情况。</p>
<p>针对假的STAR,我们要甄别分辨出来,引导其表达出真正的情况。</p>
<h3 id="6-鉴别方式"><a href="#6-鉴别方式" class="headerlink" title="6.鉴别方式"></a>6.鉴别方式</h3><h6 id="更多的关心What-How-Why"><a href="#更多的关心What-How-Why" class="headerlink" title="更多的关心What/How/Why"></a>更多的关心What/How/Why</h6><p>做了什么事情,具体做的方案1234几步,为什么要这么做,比如图片的优化,最早肯定什么都没有,后续加cache,cache策略又可以升级,包括cache本身的算法以及多级cache的实现,图片尺寸上面后来有做了什么裁切之类的,图片格式上面后续又做了优化等等。</p>
<p>每个阶段不太一样,关注的重点也不一样,刨根问题问一问,会了解是不是真的做过这件事情,另外有一些可能项目做得很久说很多东西忘了,这里我分享一个观点,之前看过一句话,招聘的人中有一种人是比较好的,他总能比较清楚的记住过往项目当中的重点,这样的人在经验沉淀的过程中肯定更快一些,当然这样的同学肯定得归结在聪明一类的人了,当然能记住也说明他可能喜欢总结和回顾,平常的学习习惯应该也比较好。</p>
<h6 id="细节!细节!细节!"><a href="#细节!细节!细节!" class="headerlink" title="细节!细节!细节!"></a>细节!细节!细节!</h6><p>很多关键节点的细节很重要,比如网络库的优化。如果你是一个iOS开发,一般都会知道iOS的网络协议优化常采用拦截NSURLProtocol的方式进行,然后针对传统的https协议我们会将其替换成为spdy协议或者http2协议,过程中还有一些httpdns等的优化。但如果你今天希望招聘一个有这部分网络优化经验的同学,怎么判断这个同学有实操的经验呢?你可以让他说细节上面的很多事情,比如说URLProtocol拦截request以后,针对不同的case的降级策略是什么,选择依据是什么?当时遇到了什么其他的坑没有?你自己的做法有什么缺陷?</p>
<p>又比如Weex的实现上面,整个渲染的流程到底是怎样的,渲染部分还有什么优化空间吗?或者说这个方案本身做了哪方面的优化?它的配套工程体系上的问题是什么,你遇到以后是怎么解决掉的,这些在了解大概思路后,都可以往深入再问一下细节的部分,认真研读以及修改过代码的同学,肯定是答得出来的。</p>
<h3 id="7-其他Tips"><a href="#7-其他Tips" class="headerlink" title="7.其他Tips"></a>7.其他Tips</h3><h6 id="你在面试别人,别人也在选择你"><a href="#你在面试别人,别人也在选择你" class="headerlink" title="你在面试别人,别人也在选择你"></a>你在面试别人,别人也在选择你</h6><p>面试是双向的,面试官是一个团队对外的门面,不要迟到,提问和交流要尊重面试者,让面试者感受到我们的真诚。</p>
<h6 id="为未来招聘而不是现在"><a href="#为未来招聘而不是现在" class="headerlink" title="为未来招聘而不是现在"></a>为未来招聘而不是现在</h6><p>我们永远应该为未来招聘,因为招聘的人入职也是发生在未来,不能立刻就解决你眼前的问题,所以我们招聘的时候也放长远一点,招为团队未来更有好处的人。</p>
<h6 id="面试是一面镜子"><a href="#面试是一面镜子" class="headerlink" title="面试是一面镜子"></a>面试是一面镜子</h6><p>以人为镜,优秀的面试者给我们能带来新的思路和新的方法,而差强人意的面试者则提高我们看人的能力,为后续的提升招聘效率找到更正确的人打下基础。</p>
<h3 id="8-技术人如何不断成长?"><a href="#8-技术人如何不断成长?" class="headerlink" title="8.技术人如何不断成长?"></a>8.技术人如何不断成长?</h3><p>招聘,培训,人才选拔晋升,我认为评价标准和方法都应该有比较多的重合的部分,我们从刚才的面试经验中,反思下,如果现在是我们去找工作,这个市场或者团队更需要什么样的人?</p>
<h6 id="经验丰富,知识体系完整"><a href="#经验丰富,知识体系完整" class="headerlink" title="经验丰富,知识体系完整"></a>经验丰富,知识体系完整</h6><p>经验能解决实际的问题,另外知识体系可以让你在遇到新的问题时举一反三,当然大公司和小公司要求的知识体系又不太一样,大公司更偏向一专多能的T型人才,小公司更喜欢全栈,所以到底要成为什么样的人,跟你的职业规划很有关系,是想在大公司成就一番事业,还是出去闯荡,那你点的技能树肯定是不一样的。到底应该怎么做,我自己的经验是,找到身边的标杆,向更优秀的同学学习,在阿里当然非常优秀的专业人才也好,架构师也好,都非常多,所以标杆应该也好找,业界当然也有很多成功的人,有了标杆,就努力向上吧。</p>
<h6 id="保持良好的习惯,不忘总结和提升"><a href="#保持良好的习惯,不忘总结和提升" class="headerlink" title="保持良好的习惯,不忘总结和提升"></a>保持良好的习惯,不忘总结和提升</h6><p>当我还是一个菜鸟的时候,当时的老板问了我一个问题,每周写周报的时候,想想自己这一周到底收获了什么,这给我留下了很深的印象。我在想,既然我每次面试别人都问你最近有研究什么新的技术或者看到什么有趣的文章没有的,那我自己是不是能这样要求自己呢?不积跬步无以至千里,贵在坚持积累。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</div>
</article>
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://yoursite.com/2018/10/24/sql/optimization/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="sir051223">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/avatar.gif">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Forest">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
<a class="post-title-link" href="/2018/10/24/sql/optimization/" itemprop="url">MySQL性能优化之参数配置</a></h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-10-24T15:19:49+08:00">
2018-10-24
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Sql/" itemprop="url" rel="index">
<span itemprop="name">Sql</span>
</a>
</span>
</span>
</div>
</header>