中科院電面細節總結


      第一:首先基本上是,基於你的簡歷進行初步的了解

     1:詢問我的github上的項目,是不是自己做的,怎么做的,問了一下那個九宮格游戲,那個是fork別人的,然后他問我自己有沒有研究?,那個項目有bug,我就實話實說,然后他問我哪里有bug,如何解決bug,問題出在哪里,,霹靂啪啦,霹靂啪啦。。。。。。。

    2:看到我上面寫考了會計證,問我是不是有從事金融的打算,學習成績怎么樣?排名如何?這個金融的問題,真是沒想到,還以為他們要我去搞金融,原來擔心我方向不明確,我說,自己只是想擴展一下各方面的知識,多學點東西對自己總是好的,主要還是從事web前端開發,熱愛前端。。。。。。啥啥啥的。。。。

    3:針對我的網頁簡歷,提出了一個非常好的問題,網頁簡歷用到了3d模型,從正面看的,問我如果從背面看會產生什么問題?因為我那個是用圖片渲染的,圖片上面加了文字,問我如果,不要圖片,只用文字,實現怎么搞?這個我知道,就霹靂啪啦,霹靂啪啦。。。。。。。的說了一堆。

   4:問我對最新前沿的技術有沒有什么了解?比如說node.js,我只了解一點點,就說,對於現在的自己,目前太高深的問題不太適合,還是以基礎為主。。。。。啥啥啥的。

   5:問到考研的問題?問我大三怎么不去考研?

   6:問我,自己對學習前端有沒有什么規划,主要學習那些?前沿的技術是否了解?。。。。。啥啥啥的。。。。。。。。

   7:問我阿里雲ECS是怎么弄的,備案怎么搞得,配置環境啊,,是不是都是自己搞得還是一起弄得?我都是自己一個人琢磨出來的。。霹靂啪啦,噼里啪啦。。我說了一堆,跟他講了一堆,。。,啥啥啥的。。。。。。

   8:問我對於WEB UI有什么看法?扯到曾經實習軟件公司的經歷,在實習公司做了什么,用什么做的?

  好吧!上面那些看似不夠高大上,其實還是很考驗一個人的反應能力的,說錯了話,結果就可想而知。。。。。感覺每個問題都在考驗我的反應能力。

   第二:專業問題

   1:如何檢測一個變量是字符串?如何檢測為對象類型呢?

1:使用typeOF檢測字符串
var str; alert(typeOf str) 2:給測試變量加上一個空白字符,然后與測試變量做全等判斷,就可以得出這個變量是否是字符串。
<script type="text/javascript">
  var str='ss';
  var stt=str+'';
  alert(str==stt); //輸出為真
</script

我只知道上面兩種,還有其它方法,麻煩給我留言哈!

1:typeof 可以判斷function的類型;在判斷除Object類型的對象時比較方便。
2:判斷已知對象類型的方法: instanceof
alert(c instanceof Array) ---------------> true
alert(d instanceof Date) 
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false
注意:instanceof 后面一定要是對象類型,並且大小寫不能錯,該方法適合一些條件選擇或分支。
3:根據對象的constructor判斷: constructor
alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true
注意: constructor 在類繼承時會出錯
eg:
      function A(){};
      function B(){};
      A.prototype = new B(); //A繼承自B
      var aObj = new A();
      alert(aobj.constructor === B) -----------> true;
      alert(aobj.constructor === A) -----------> false;
而instanceof方法不會出現該問題,對象直接繼承和間接繼承的都會報true:
      alert(aobj instanceof B) ----------------> true;
      alert(aobj instanceof B) ----------------> true;
言歸正傳,解決construtor的問題通常是讓對象的constructor手動指向自己:
      aobj.constructor = A; //將自己的類賦值給對象的constructor屬性
      alert(aobj.constructor === A) -----------> true;
      alert(aobj.constructor === B) -----------> false; //基類不會報true了;

 

4:通用但很繁瑣的方法: prototype:
alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
大小寫不能寫錯,比較麻煩,但勝在通用。
比如:
<script type="text/javascript">
  var  str='123';
  alert(Object.prototype.toString.call(str) === '[object String]');  //輸出為真
</script>
 
        

    2:對於頁面加載緩慢,如何進行優化,解決途徑是什么?--這個我答的不好

    我是先講頁面加載緩慢是那些原因造成的,比如:

    A:后端的問題。

        一般網頁第一個請求是動態請求的概率比較大,如果這個請求特別耗時,那肯定不是前端的責任。

   B:請求過多

       數一下瀑布圖總共有多少行,onload之前如果有幾百行,那么請求就太多了。一下子加載那么多資源造成擁擠。css,

   js該合並的合並,圖標該精靈的精靈,使用字體圖標也很好。還有,有些不重要的東西不用放到onload之前加載,

   放到后面也一樣。  網頁發請求數越少越好。

      比如:HTML的話可以從script標簽這里說,比如動態加載script標簽,異步加載script標簽(IE:defer、標准:async)

   還有就是css阻塞和js阻塞問題,將script標簽放置於</body>之前就可以,行為層與變現層進行分開。

  C:某一個部分請求的時間花費過長。

     請求比其他請求的時間大出一個數量級,這種情況一般是因為某一個資源太慢了,導致網頁整體變慢,資源慢的原因可能是:

     a)資源在第三方站點上,他們很慢;

     b)這個資源太大了;

     c)這個 資源使用的域名有問題。

  D:網絡問題

當網頁加載很慢的時候,應如何分析其原因並解決問題?

  

  仔細看一下一個單獨的http請求,他們會分為好幾段,分別是域名解析、建立連接、發送請求、等待響應和接收數據幾個階段。
理論上域名解析和建立連接應該占用的時間很小才對,主要的時間應該用在后面幾個階段上。上圖中,淺灰色和灰色分別代表域名解析和建立連接。
可以看出這兩個請求中花費在網絡層上的時間太長了,超過總時間的一半還要多。網絡層時間過長除了可能和底層網絡有關之外,還可能和站點的服務端性能有關(后端RD的事情哦)。
當然,如果這種情況發生在向第三方站點發送的請求上(實際上也經常發生),建議取消或者更換某些站點功能從而避免這樣的請求了。

 E:接收數據時間過長

     上面說了,http請求的大部分時間應該花在后面幾個階段,比如等待響應和接收數據。但是,如果接收數據的時間太長了

 長到數百毫秒甚至以秒計算的時候。那也是有問題的。這種情況一般是因為下載的內容太重了,例如大圖片、大腳本等。 

 這類問題可以使用GZIP壓縮、圖片壓縮或者JS/CSS的minify等 手段來解決。

  還有像CSS Sprites,合並CSS文件等方案。

 F: js阻塞請求
     當網頁加載很慢的時候,應如何分析其原因並解決問題?
     
      圖中兩個連續的請求之間出現了一個很大的空隙,為啥會出現這個空隙呢?是因為寫的js性能有問題,解析執行js花了很
長時間,導致這段時間的資源加載都被阻塞住了。
 
G: 如果以上都沒有
   當網頁加載很慢的時候,應如何分析其原因並解決問題?
    翻看每個http請求,仔細研究每個請求頭響應頭,看看是不是沒有設置緩存啦,圖片優化的不夠好之類的。可以先找個工具
分析一下,比如: http://speed.mmtrix.com/,問題一目了然。
 
   
 
H:采用CDN托管
    CDN的全稱是Content Delivery Network,即內容分發網絡。CDN的通俗理解就是網站加速,CPU均衡負載,可以解決
跨運營商, 跨地區,服務器負載能力過低,帶寬過少等帶來的網站打開速度慢等問題。
    CDN的基本思路是盡可能避開互聯網上有可能影響 數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更
快、更穩定通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡。
    CDN 系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合
信息將用戶請求重新導向離用戶最近的服務節點上 其目的是使用戶 可就近取得所需內容,解決
 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。
 
M:利用緩存方案
   服務端緩存是通過將相同數據保存下來,當訪問用戶請求相同內容時,不再重新去數據庫查詢數據,而是將之前保存在
服務器的數據響應給用戶這樣就加快了網站頁面加載速度,但是臨時保存會占用部分服務器資源。其本質是通過空間換取
時間,提高網頁加載速度。頁面緩存指的是將用戶請求過的頁面完整保存下來,有相同請求時直接響應給用戶,此方式數
量是最大的;頁面部分緩存是指輸出緩存頁面的某些部分,而不是緩存整個頁面內容。

  實現頁面部分緩存有 兩種機制:

  第一種:對用戶控件進行緩存配置

     此種是將頁面中需要緩存的部分置於用戶控件(.ascx文件)中,並且為用戶控件設置緩存功能

(包含用戶控件的ASP.NET頁面可設置也可不 設置緩存)。

     這就是通常所說的“控件緩存”。

     主要包括以下3種方法:

     一:使用@ OutputCache指令以聲明方式為用戶控件設置緩存功能,

     二:在代碼隱藏文件中使用PartialCachingAttribute類設置用戶控件 緩存;

     三:使用ControlCachePolicy類以編程方式指定用戶控件緩存設置。

  第二種:“緩存后替換”的方法。

 該方法與控件緩存正好 相反,將頁面中的某一部分設置為不緩存,因此,盡管緩存了整個頁面,

但是當再次請求該頁時,將重新處理那些沒有設置為緩存的內容。

 
   基本上就問了這么多,還有的記不清了。關於以上問題,大家如果又覺得好的解決方案,麻煩給我留言哈!

 
 
 
 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM