/
index.html
462 lines (327 loc) · 24.2 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
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>你会翻转二叉树吗?--谈程序员的招聘 | 唐巧的博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta name="author" content="唐巧">
<meta name="description" content="事件回放2015 年 6 月 10 日,Homebrew 的作者 @Max Howell 在 twitter 上发表了如下一内容: Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.">
<meta property="og:type" content="article">
<meta property="og:title" content="你会翻转二叉树吗?--谈程序员的招聘">
<meta property="og:url" content="https://blog.devtang.com/2015/06/16/talk-about-tech-interview/index.html">
<meta property="og:site_name" content="唐巧的博客">
<meta property="og:description" content="事件回放2015 年 6 月 10 日,Homebrew 的作者 @Max Howell 在 twitter 上发表了如下一内容: Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://blog.devtang.com/images/invert-a-binary-tree.jpg">
<meta property="og:image" content="https://blog.devtang.com/images/invert-result.jpg">
<meta property="og:image" content="http://blog.devtang.com/images/weixin-qr.jpg">
<meta property="article:published_time" content="2015-06-16T05:55:41.000Z">
<meta property="article:modified_time" content="2020-02-08T18:08:22.165Z">
<meta property="article:author" content="唐巧">
<meta property="article:tag" content="iOS">
<meta property="article:tag" content="唐巧">
<meta property="article:tag" content="猿辅导">
<meta property="article:tag" content="开发">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://blog.devtang.com/images/invert-a-binary-tree.jpg">
<link rel="alternative" href="/atom.xml" title="唐巧的博客" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/%02.css">
<link rel="stylesheet" href="/.css">
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header>
<div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="唐巧的博客">唐巧的博客</a></h1>
<h2 class="blog-motto">记录下自己学习的点滴</h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/archives">归档</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
<input type="hidden" name="q" value="site:blog.devtang.com">
</form>
</li>
</ul>
</nav>
</div>
</header>
<div id="container">
<div id="main" class="post" itemscope itemprop="blogPost">
<article itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2015/06/16/talk-about-tech-interview/" title="你会翻转二叉树吗?--谈程序员的招聘" itemprop="url">你会翻转二叉树吗?--谈程序员的招聘</a>
</h1>
<p class="article-time">
<time datetime="2015-06-16T05:55:41.000Z" itemprop="datePublished"> 发表于 2015-06-16 05:55</time>
</p>
</header>
<div class="article-content">
<div id="toc" class="toc-article">
<strong class="toc-title">文章目录</strong>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#事件回放"><span class="toc-number">1.</span> <span class="toc-text">事件回放</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#如何做这道题"><span class="toc-number">2.</span> <span class="toc-text">如何做这道题</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#这是一道好的面试题吗?"><span class="toc-number">3.</span> <span class="toc-text">这是一道好的面试题吗?</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#当我们面算法题的时候,我们在考查什么?"><span class="toc-number">4.</span> <span class="toc-text">当我们面算法题的时候,我们在考查什么?</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#考查算法题会不会太片面?"><span class="toc-number">5.</span> <span class="toc-text">考查算法题会不会太片面?</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#我们应该怎么办?"><span class="toc-number">6.</span> <span class="toc-text">我们应该怎么办?</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#猿题库是如何招聘的?"><span class="toc-number">7.</span> <span class="toc-text">猿题库是如何招聘的?</span></a></li></ol>
</div>
<img src="/images/invert-a-binary-tree.jpg" class="">
<h2 id="事件回放"><a href="#事件回放" class="headerlink" title="事件回放"></a>事件回放</h2><p>2015 年 6 月 10 日,Homebrew 的作者 <a href="https://twitter.com/mxcl/status/608682016205344768" target="_blank" rel="noopener">@Max Howell</a> 在 twitter 上发表了如下一内容:</p>
<blockquote>
<p>Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.</p>
</blockquote>
<p>事情大概是说,Max Howell 去 Google 面试,面试官说:虽然在 Google 有 90% 的工程师用你写的 Homebrew,但是你居然不能在白板上写出翻转二叉树的代码,所以滚蛋吧。</p>
<p>这件事情如果发生在任何一个应届生身上,那是再正常不过的了,但是偏偏面试者是有名的 Max Howell。于是乎,关于应该如何面试程序员,再一次被大家热烈的讨论。</p>
<p>我看了一下 <a href="http://www.quora.com/Is-invert-a-binary-tree-a-good-question-for-Google-to-ask-in-a-technical-interview" target="_blank" rel="noopener">Quora</a> 和 <a href="https://news.ycombinator.com/item?id=9695102" target="_blank" rel="noopener">Hacker News</a> 上的讨论,就此话题说说我的看法。</p>
<h2 id="如何做这道题"><a href="#如何做这道题" class="headerlink" title="如何做这道题"></a>如何做这道题</h2><p>在说招聘之前,我们先谈谈这道题应该怎么做吧。LeetCode 非常与时俱进地收录了 <a href="https://leetcode.com/problems/invert-binary-tree/" target="_blank" rel="noopener">这道题</a>,我尝试做了一下。由于 LeetCode 不支持用 Objective-C 或 Swift 写,我只好用 Java 来写,但是电脑里面没有装 Eclipse,所以我直接就在 LeetCode 编辑框里面提交了。</p>
<p>编译错了两次,之后运行错了一次,出现了 NullPointerException,于是想到没有检查指针为空,加上检查之后,就通过了。下图是提交记录。</p>
<img src="/images/invert-result.jpg" class="">
<p>除去 LeetCode 自动生成的注释和方法定义,我所写的整个代码行数为 9 行,大概花了 5 分钟时间。代码如下所示:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">/**</span><br><span class="line"> * Definition for a binary tree node.</span><br><span class="line"> * public class TreeNode {</span><br><span class="line"> * int val;</span><br><span class="line"> * TreeNode left;</span><br><span class="line"> * TreeNode right;</span><br><span class="line"> * TreeNode(int x) { val = x; }</span><br><span class="line"> * }</span><br><span class="line"> */</span><br><span class="line">public class Solution {</span><br><span class="line"> public TreeNode invertTree(TreeNode root) {</span><br><span class="line"> if (root == null) {</span><br><span class="line"> return null;</span><br><span class="line"> }</span><br><span class="line"> root.left = invertTree(root.left);</span><br><span class="line"> root.right = invertTree(root.right);</span><br><span class="line"></span><br><span class="line"> TreeNode tmp = root.left;</span><br><span class="line"> root.left = root.right;</span><br><span class="line"> root.right = tmp;</span><br><span class="line"> return root;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>那么这道题考查了什么呢?我觉得主要是考查了递归的思想。递归是程序设计的精髓,掌握了他可以将一个大问题分解成小问题,继而求解。比如对于此题来说,反转一个二叉树其实就是:</p>
<ol>
<li>反转二叉树的左右子树</li>
<li>将左右子树交换</li>
</ol>
<p>而第 1 步又是一个反转二叉树的问题,所以就可以用递归来处理了。然后再考虑好递归的结束条件,这道题就可以解决了。</p>
<h2 id="这是一道好的面试题吗?"><a href="#这是一道好的面试题吗?" class="headerlink" title="这是一道好的面试题吗?"></a>这是一道好的面试题吗?</h2><p>如果面试者是一个应届生,我认为这是一道非常好的题目。因为应届生刚刚学完学校的数据结构和算法知识,二叉树和递归都是基本的知识,应该被掌握的。</p>
<p>如果面试者是一个有多年工作经验的人,我认为这道题的难度其实不大,一个人即使多年不使用二叉树,多年不使用递归,但是这种思考还是很容易想到的。当然,所花的时间可能会大一些。所以我并不认为这是一道难题。</p>
<p>但是,对于一个有工作经验的人,考查他的工作内容,或许更有价值。因为相比代码的逻辑思维能力来说,工作方式和解决问题态度,架构设计,设计模式都是更重要的考查点。</p>
<h2 id="当我们面算法题的时候,我们在考查什么?"><a href="#当我们面算法题的时候,我们在考查什么?" class="headerlink" title="当我们面算法题的时候,我们在考查什么?"></a>当我们面算法题的时候,我们在考查什么?</h2><p>就像 <a href="http://www.quora.com/Is-invert-a-binary-tree-a-good-question-for-Google-to-ask-in-a-technical-interview" target="_blank" rel="noopener">Quora</a> 上提到的那样,算法题面试被广泛应用在各大顶级互联网公司,包括 Google, Facebook, Microsoft, Amazon, Airbnb, Dropbox。在中国,这样的情况同样存在,BAT 的面试也充斥着算法题目。我当年在网易有道面试的时候,每一轮也都问了很多道算法题目。</p>
<p>但是,很多求职者都会问:“工作中用得到这些吗?”,说实话,用得非常少。那么当我们面算法题的时候,我们到底在考查什么?就我的经验来看,我们会从算法面试中考查到以下三点:</p>
<ol>
<li>计算机的基础知识。一个人基础知识扎实,说明他在学校就很用功。</li>
<li>聪明程度。编程还是一个重智力的工作,智商高的人会在不停地知识更新中快速跟进学习。算法题其实就是计算机专业的智力测试题。这里面,动态规划的算法题目由于变化多,体现得就特别明显,考动态规划其实就是测智力。</li>
<li>沟通能力和思维。面试算法题的时候,一般不会直接让候选人写代码,而是会先一起讨论。通过讨论的过程,了解面试者沟通的能力和考虑问题的方式,也是考查的重点。</li>
</ol>
<h2 id="考查算法题会不会太片面?"><a href="#考查算法题会不会太片面?" class="headerlink" title="考查算法题会不会太片面?"></a>考查算法题会不会太片面?</h2><p>是的,算法在工作中运用得比较少,一般人也不会在工作中专门积累解算法题的能力。所以通常做算法题最强的是应届生,因为他们有时间去刷题。而在实际工作中,很多能力,都比算法能力重要。比如对代码的洁癖,对设计模式的理解,对计算机底层(操作系统、网络)的理解,对待工作的态度等。</p>
<p>那么,为什么那么多公司不考查,或者不重点考查这些,而只是问算法题呢?</p>
<p>答案很简单,因为要在几个小时内了解一个人太难了。通常一场面试只有一个小时,如果要在一个小时内把上面说到的知识点都面面俱到的考查,是做不到的。但是如果花几天来考查,对于公司和求职者都是不可接受的。所以,很多大公司就用面算法题的方式来偷懒,因为这种方式虽然可能会误伤很多优秀的人才,但是不合格的人,要混进去还是相当困难的。</p>
<p>讲一句不好听的,很多公司在招聘的时候,首先根据学校,把非 985 的学校简历都过滤掉,也是一种不太合理,但是有效的方法。清华北大的人一定就牛逼吗?不一定,但是从概率上讲,比南翔技校的人通过面试的机会要高一些。所以,为了提高面试效率和成本,就直接把一般学校的简历过滤掉,这是一个不人道,但是从经济上合理的行为。</p>
<p>我自己也因为这个选拔方式深受打击,我自认为还是非常优秀的,在学校时拿到过 ACM 国际大学生程序设计竞赛的区域赛金牌,也在 IBM 实习过,学校专业课成绩也很好,但是毕业那年我连 Google 的笔试资格都没拿到。因为我不是清华北大的,Google 就在清华北大选人才,就足够了。</p>
<h2 id="我们应该怎么办?"><a href="#我们应该怎么办?" class="headerlink" title="我们应该怎么办?"></a>我们应该怎么办?</h2><p>现有的面试方式,其实让公司和候选者都不是太爽,主要的原因就是考查的时间太短,能够参考的信息量太小。但是,随着互联网的发展,作为程序员,我们慢慢有了更多的方式来让公司在面试前就了解自己。</p>
<p>我们可以搭建自己的博客,将自己的学习心得总结下来。我们可以将自己写得好的代码开源在 Github 上。我们可以在 stackoverflow 上回答问题,用 reputation 来证明自己的能力。我们还可以给著名的开源项目提 PR,成为重要的 Contributor。我们可以给 InfoQ 网站投稿。我们可以去 QCon 上分享技术。</p>
<p>如果你能在网络上构建起自己的技术能力图,那么对于很多公司来说,或许面试中偏技术性的考查就不那么重要了,面试的过程就可以更轻松愉快了。</p>
<p>但是,不要高兴得太早,要做到上面提到的这些只会比做算法题更难。但是,至少我们可以让自己的实习得到充分展示,能够让面试不那么片面,能够让公司更加全面的了解自己。</p>
<p>所以说最后,机会还是给那些努力的人。如果一个人学校不好,没有做过什么大项目,在网上没有任何可以考查的信息,那么面试的时候,估计等待他的还是各种算法题。</p>
<h2 id="猿题库是如何招聘的?"><a href="#猿题库是如何招聘的?" class="headerlink" title="猿题库是如何招聘的?"></a>猿题库是如何招聘的?</h2><p>或许你会失望,我们其实就是和 Google 一样,会问大量的算法题。即使你来自名校名企,但是不会翻转二叉树,我们肯定会把你拒掉。</p>
<p>对于有经验的开发者,我们会适当降低算法题的难度,同时考查一些工作经历,但是翻转二叉树这种难度的题目,是必须做出来的。</p>
<p>所以,如果你没有各种社交网络的资料证明自己的实力,那还是老老实实把基础知识准备扎实吧。算法知识虽然用得少,但是在关键时候还是有用的,以后我会另外撰文举例。</p>
<p>愿大家都能找到自己的伯乐~</p>
<hr>
<p>PS: 我所负责的小猿搜题项目,在半年时间内做到了市场第一的位置,现在想招更多 Java 服务器端和 Android 端开发,待遇和期权高于 BAT,面试要求也会高于 BAT。欢迎大家将简历发到 tangqiao(AT)fenbi.com 。这里有<a href="http://www.lagou.com/jobs/781132.html" target="_blank" rel="noopener">职位说明</a>。</p>
<hr>
<p>扫码关注我的「iOS 开发」微信公共帐号,及时获得我精选的各种 iOS 文章:</p>
<p><img src="http://blog.devtang.com/images/weixin-qr.jpg" alt=""></p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
</div>
<div class="article-share" id="share">
<div data-url="https://blog.devtang.com/2015/06/16/talk-about-tech-interview/" data-title="你会翻转二叉树吗?--谈程序员的招聘 | 唐巧的博客" data-tsina="" class="share clearfix">
</div>
</div>
</footer>
</article>
<nav class="article-nav clearfix">
<div class="prev" >
<a href="/2015/06/26/using-coretext-1/" title="基于 CoreText 的排版引擎:基础">
<strong>上一篇:</strong><br/>
<span>
基于 CoreText 的排版引擎:基础</span>
</a>
</div>
<div class="next">
<a href="/2015/06/16/talk-about-swift-open-source/" title="谈谈苹果开源 Swift">
<strong>下一篇:</strong><br/>
<span>谈谈苹果开源 Swift
</span>
</a>
</div>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="sponsor">
</div>
<div class="categorieslist">
<p class="asidetitle">分类</p>
<ul>
<li><a href="/categories/books-summary/" title="books summary">books summary</a></li>
<li><a href="/categories/iOS/" title="iOS">iOS</a></li>
<li><a href="/categories/iOS-weekly/" title="iOS weekly">iOS weekly</a></li>
<li><a href="/categories/mac/" title="mac">mac</a></li>
<li><a href="/categories/shell/" title="shell">shell</a></li>
<li><a href="/categories/summary/" title="summary">summary</a></li>
</ul>
</div>
<div class="weixin">
<br />
<p class="asidetitle">微信公众号</p>
<p>关注我的微信公众号,和我一起成长:</p>
<img src="/images/weixin-qr.jpg" width="230px" />
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
</aside>
</div>
</div>
<footer><div id="footer" >
<div class="social-font" class="clearfix">
</div>
<p class="copyright" style="margin-top: 10px;">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2020
<a href="/about" target="_blank" title="唐巧">唐巧</a>
</p>
</div>
</footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var ai = $('.article-content>iframe'),
ae = $('.article-content>embed'),
t = $('#toc'),
ta = $('#toc.toc-aside'),
o = $('.openaside'),
c = $('.closeaside');
if(ai.length>0){
ai.wrap('<div class="video-container" />');
};
if(ae.length>0){
ae.wrap('<div class="video-container" />');
};
c.click(function(){
ta.css('display', 'block').addClass('fadeIn');
});
o.click(function(){
ta.css('display', 'none');
});
$(window).scroll(function(){
ta.css("top",Math.max(140,320-$(this).scrollTop()));
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var $this = $('.share'),
url = $this.attr('data-url'),
encodedUrl = encodeURIComponent(url),
title = $this.attr('data-title'),
tsina = $this.attr('data-tsina'),
description = $this.attr('description');
var html = [
'<div class="hoverqrcode clearfix"></div>',
'<a class="overlay" id="qrcode"></a>',
'<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
'<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
'<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
'<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
'<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
'<span title="Share to"></span>'
].join('');
$this.append(html);
$('.hoverqrcode').hide();
var myWidth = 0;
function updatehoverqrcode(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
var qrsize = myWidth > 1024 ? 200:100;
var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
var p = $('.article-share-qrcode').position();
$('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
.css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
.qrcode(options);
};
$(window).resize(function(){
$('.hoverqrcode').hide();
});
$('.article-share-qrcode').click(function(){
updatehoverqrcode();
$('.hoverqrcode').toggle();
});
$('.article-share-qrcode').hover(function(){}, function(){
$('.hoverqrcode').hide();
});
});
</script>
<!-- Analytics Begin -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28029597-1', '');
ga('send', 'pageview');
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"/></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>
</html>