本文內(nèi)容很簡單,只是對面試中遇到的一個記不清楚的問題的復(fù)習(xí),鑒于是俺第一次在cnblog上發(fā)文,所以裝了防護盾,請勿以任何方式扔板磚、菜刀之類物品….
今天去國內(nèi)某知名公司面試了一把,投的職位是 前端開發(fā),第一次去大公司面試,受到的感觸當(dāng)然是十分多多,感觸稍后補齊,整個過程沒啥有難度的技術(shù)問題,可能和該公司的產(chǎn)品方向有關(guān)吧(補充下,該公司主打不是做web的)。
二輪面試的時候,產(chǎn)品經(jīng)理和我提到了他們產(chǎn)品中遇到的一個問題,大概意思是:他們某個功能,在頁面做無限循環(huán)顯示數(shù)據(jù)的時候,會造成CPU,100%。 當(dāng)時產(chǎn)品經(jīng)理也只是稍微給我演示了下,因為當(dāng)時我腦子一直在想,這個問題為啥在自己以前用JS模擬多線程的時候沒有出現(xiàn),所以對他說的相關(guān)的信息也沒注意聽,界面也只是看了個大概,當(dāng)時我也只提出使用 setTimeout 或 setInterval 來做的話,會避免這個問題,不過距我上次做多線程Demo的日子過的太長,有點模糊了,我也沒有百分百把握,所以回家后趕緊翻出以前的代碼出來整理出答案,如下:
代碼簡單,我也就懶得寫注釋了,以下是循環(huán)次數(shù) 和 設(shè)置DIV innerHTML的2個函數(shù)。
以下為引用的內(nèi)容: function $(id) { return document.getElementById(id); } var setter = function() { var ele = $("containder"); return function(count) { ele.innerHTML = count; } }(); var counter = function() { var count = 0; return function() { count++; setter(count); }; } (); |
估計沒人會像 測試1 這樣用,瀏覽器直接卡死。
Test1:
以下為引用的內(nèi)容: <script type="text/javascript"> (function() { while (1) { counter(); } }) (); </script> |
測試二使用 setInterval 方法,CPU使用量 和 IE所占內(nèi)存都很少,一般CPU就是在0-2%之間,和while 的循環(huán)基本能達(dá)到同樣的效果。至于為啥出現(xiàn)這樣的原因,小弟不敢妄自猜測,避免誤導(dǎo)新人。希望有了解JS引擎的出來講解講解…
Test2:
以下為引用的內(nèi)容: <script type="text/javascript"> (function() { window.setInterval("counter();", 1); })(); </script> |
按照產(chǎn)品經(jīng)理那樣的界面去大概顯示數(shù)據(jù),大概是有接口會自動提供數(shù)據(jù),前端調(diào)用處理字符串就好了…
Test3完整代碼:
<div id="containder" style="overflow:scroll;"></div>
以下為引用的內(nèi)容: <script type="text/javascript"> function $(id) { return document.getElementById(id); } var data = []; var createdata = function() { data.push(+new Date() + "|" + (+new Date())); }; var setter = function() { var ele = $("containder"); var list = []; return function(text) { if (!text) return; list.push(text); if (list.length > 10) list.shift(); ele.innerHTML = list.join("<br/>"); } } (); var counter = function() { var count = 0; return function() { count++; setter(data.shift()); }; } (); (function() { window.setInterval("createdata();", 1); window.setInterval("counter();", 1); }) (); </script> |
本文的第二個目的也是給大家提個醒,其實面試很多時候都是問些基礎(chǔ)的操作.
第一次使這東西,感覺挺麻煩.先測試下都...
作者:低調(diào)的