2019-03-28

一、請選擇下面結(jié)果為true的表達(dá)式

  1. null instanceof Object
  2. null == undefined
  3. NaN == NaN
  4. parseInt("8",8) == 8
  5. 100 == "100"

二、實現(xiàn)一個通用的事件綁定函數(shù),addEvent(dom,type,handler)

三、不使用全局變量,使用閉包寫一個函數(shù),實現(xiàn)返回從1逐漸增加的數(shù)值,比如第一次調(diào)用返回1,第二次返回2,第三次返回3...

四、實現(xiàn)一個對象拷貝函數(shù)extend(target,source,isDeep)

五、下面一段代碼:

     var name = "Bill ";

     var aFamousPerson = {

              name:"Steve ",

               fiend:{

                        name:"Mark",

                        showMyName:function(){ alert(this.name)}

               }       

     }

     1) 調(diào)用aFamousPerson.friend.showMyName(),顯示結(jié)果是哪個?

     2) 如果加一段代碼,show = aFamousPerson.friend.showMyName,然后再執(zhí)行show(),顯    示的結(jié)果是哪個?

     3) 如果希望依次顯示,Bill、Steve、Mark,代碼該如何寫?

六、實現(xiàn)一個trim函數(shù),用于去除字符串左右的空格,可以如下調(diào)用:

     "  ab cd e  ".trim; //結(jié)果為"ab cd e"

七、有一段html結(jié)構(gòu)如下:

     <ul id="item">

               <li>內(nèi)容 1</li>

               ....

               <li>內(nèi)容 1</li>

     </ul>

     其中l(wèi)i節(jié)點數(shù)量很大且可能動態(tài)變化。

     實現(xiàn)一個功能,當(dāng)點擊這些節(jié)點的時候,彈出li節(jié)點的坐標(biāo)信息及節(jié)點內(nèi)容。

八、談?wù)勀闼赖目缬蚪鉀Q方案(至少3種)。

九、http協(xié)議有哪些請求類型?有哪些常見的狀態(tài)碼?什么是長連接?如果要將頁面緩存一天,服務(wù)器該如何設(shè)置?

十、有一個url為 htttp://www.example.com/getUserInfo?userId=123&valideCode=abcd的頁面,

會展示用戶的一些私密信息(比如薪資),請考慮如何解決以下安全問題:

     1)防止SQL注入攻擊。

     2)防止XSS攻擊。

     3)防止CSRF攻擊。

十一、一個頁面從輸入url到頁面加載完成,整個過程中發(fā)生了什么?請談?wù)勀愕睦斫猓ㄟ^ 程盡可能詳細(xì))。

十二、如果一個頁面被投訴說加載很慢,需要你來給出方案,你有哪些措施?(至少10條)

十三、HTML5規(guī)范已于2014年10日定稿,列出你所知道的HTML5新技術(shù)(10條)

十四、有10萬cdkey號碼(數(shù)字、字母組成的序列號,每個序列號可以在網(wǎng)站上兌換一定 的物品, 比如購物券等)。給出發(fā)放cdkey的一個方案。

     1)用戶在網(wǎng)站上登錄后領(lǐng)取,每人限領(lǐng)一張。

     2)在用戶量并發(fā)比較大的時候,不允許出現(xiàn)一個cdkey發(fā)放給多人的情況。

     3)給出價格設(shè)計并解釋主要步驟流程。

參考答案

  1. 一、2,5

  2. 二、
    function addEvent(dom,type,handler){
    if (dom.addEventListener) {
    dom.addEventListener(type,handler,false);
    }else if (dom.attachEvent) {
    //如果為IE瀏覽器,添加事件采用 attachEvent
    dom.attachEvent(‘on’+type,handler);
    }else{
    dom[‘on’+type] = handler;
    }
    }

  3. 三、
    function Foo() {
    let i = 1;
    return function() {
    console.log(i++);
    }
    }

    var f1 = Foo();
    f1();
    f1();

    首先,這是一個js中的閉包,一個函數(shù)有權(quán)操作另一個函數(shù)的變量和作用域,這里,匿名函數(shù)有權(quán)訪問foo函數(shù)的i變量,其次,需要知道foo與foo()的區(qū)別,foo指的是整個foo函數(shù)的js代碼,foo()指的是return的語句。var f1=foo(),那么f1實際上的值為匿名函數(shù)代碼段,然后f1()。

  4. 五:
    1.Mark, 2.Bill, 3.
    show = function(){
    console.log(name);
    console.log(aFamousPerson.name);
    aFamousPerson.friend.showMyName()
    }
    show();

  5. 六:
    Object.prototype.trim = function(){
    return this.replace(/(^\s)|(\s$)/g,”);//去除兩端空格

    // return this.replace(/\s+/g,””); //去除所有空格
    // return this.replace( /^\s/, ”);//去除左空格
    // return this.replace(/(\s
    $)/g, “”);//去除右空格

    }

  6. 七:
    var ul = document.getElementById(‘item’);
    ul.onclick = function (e) {
    var e = e || window.event;
    var target = e.target || e.srcElement;
    alert(e.clientX+’,’+e.clientY);
    alert(target.textContent);
    }

  7. 四、此道題答案來自網(wǎng)絡(luò):
    /*

    • @param {Object} target 目標(biāo)對象。
    • @param {Object} source 源對象。
    • @param {boolean} deep 是否復(fù)制(繼承)對象中的對象。
    • @returns {Object} 返回繼承了source對象屬性的新對象。
      /
      function extend(target, /
      optional/ source, /optional*/ deep) {
      target = target || {};
      var sType = typeof source,
      i = 1,
      options;
      if (sType === ‘undefined’ || sType === ‘boolean’) {
      deep = sType === ‘boolean’ ? source : false;
      source = target;
      target = this;
      }
      if (typeof source !== ‘object’ && Object.prototype.toString.call(source) !== ‘[object Function]’)
      source = {};
      while (i <= 2) {
      options = i === 1 ? target : source;
      if (options != null) {
      for (var name in options) {
      var src = target[name],
      copy = options[name];
      if (target === copy)
      continue;
      if (deep && copy && typeof copy === 'object' && !copy.nodeType)
      target[name] = this.extend(src ||
      (copy.length != null ? [] : {}), copy, deep);
      else if (copy !== undefined)
      target[name] = copy;
      }
      }
      i++;
      }
      return target;
      };
  8. 八:跨域解決方案
    1、 通過jsonp跨域
    2、 document.domain + iframe跨域
    3、 location.hash + iframe
    4、 window.name + iframe跨域
    5、 postMessage跨域
    6、 跨域資源共享(CORS)
    7、 nginx代理跨域
    8、 nodejs中間件代理跨域
    9、 WebSocket協(xié)議跨域
    參考:http://www.coolivan.com/463

  9. 九、
    1.http協(xié)議有哪些請求類型:
    ①OPTIONS:返回服務(wù)器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務(wù)器發(fā)送’*’的請求來測試服務(wù)器的功能性。
    ②HEAD:向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。
    ③GET:向特定的資源發(fā)出請求。
    ④POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的創(chuàng)建和/或已有資源的修改。
    ⑤PUT:向指定資源位置上傳其最新內(nèi)容。
    ⑥D(zhuǎn)ELETE:請求服務(wù)器刪除Request-URI所標(biāo)識的資源。
    ⑦TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷。
    ⑧CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。

    2.有哪些常見的狀態(tài)碼:
    ① 客戶方錯誤 1xx;
    ② 成功 2xx;
    ③ 重定向 3xx;
    ④ 客戶方錯誤 4xx;
    ⑤ 服務(wù)器錯誤 5xx

    3.長連接:
    HTTP協(xié)議采用“請求-應(yīng)答”模式,當(dāng)使用普通模式,每個請求/應(yīng)答客戶和服務(wù)器都要新建一個連接,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議);
    當(dāng)使用長連接(Keep-Alive)又稱持久連接時,使客戶端到服務(wù)器的連接持續(xù)有效,當(dāng)出現(xiàn)對服務(wù)器后繼請求時,長連接功能避免了建立或者重新建立連接。

    4. 頁面緩存一天,服務(wù)器的設(shè)置:
    ①Http Header,Expires: 設(shè)置為后一天
    ②把請求的html緩存入redis,ttl設(shè)置為86400s

  10. 十:
    1)防止SQL注入攻擊。
    ①檢查變量數(shù)據(jù)類型和格式
    ②過濾特殊符號
    ③綁定變量,使用預(yù)編譯語句

    2)防止XSS攻擊。
    ①token驗證
    ②referer來源
    ③隱藏令牌

    3)防止CSRF攻擊。
    ①cookie 設(shè)置http only
    ②代碼轉(zhuǎn)義
    ③過濾html

  11. 十一、完整的HTTP過程
    a. 域名解析

    b. 發(fā)起TCP的3次握手

    c. 建立TCP連接后發(fā)起http請求

    d. 服務(wù)器端響應(yīng)http請求,瀏覽器得到html代碼

    e. 瀏覽器解析html代碼,并請求html代碼中的資源
    以下為頁面解析渲染
    F.構(gòu)建DOM樹
    G.DOM樹與CSS樣式進(jìn)行附著構(gòu)造呈現(xiàn)樹
    H.布局
    I.繪制

  12. 十二、

    1. 資源合并壓縮,減少HTTP請求
    2. 使用內(nèi)容發(fā)布網(wǎng)絡(luò),CDN加速
    3. DNS預(yù)解析,減少DNS查找
    4. 合理利用緩存,添加Max-Age、expires頭、配置ETag
    5. 將CSS樣式表放在頂部,將javascript腳本放在底部
    6. 避免使用CSS表達(dá)式,避免使用@import
    7. 優(yōu)化精簡javascript(DocumentFragments,防抖與節(jié)流,事件委托,Web Storage緩存, Web Workers)
    8. 非核心代碼異步加載, 延遲加載依賴
    9. 使用外部javascript和CSS緩存
    10. 避免重定向
    11. 服務(wù)器開啟Gzip壓縮
    12. nginx反向代理
  13. 十三、
    語義: 能夠讓你更恰當(dāng)?shù)孛枋瞿愕膬?nèi)容是什么。
    連通性: 能夠讓你和服務(wù)器之間通過創(chuàng)新的新技術(shù)方法進(jìn)行通信(web sockets等)。
    離線 & 存儲:能夠讓網(wǎng)頁在客戶端本地存儲數(shù)據(jù)以及更高效地離線運行(離線資源、在線和離線事件、DOM存儲、IndexDB、自web應(yīng)用程序中使用文件[FileReader])。
    多媒體:使 video 和 audio 成為了在所有 Web 中的一等公民。
    2D/3D 繪圖 & 效果:提供了一個更加分化范圍的呈現(xiàn)選擇(canvas、webGL)。
    性能 & 集成:提供了非常顯著的性能優(yōu)化和更有效的計算機硬件使用(WebWorkers、XMLHttpRequest2、HistoryAPI、拖放、requestAnimationFrame、全屏API、指針鎖定API、在線和離線事件)。
    設(shè)備訪問 Device Access:能夠處理各種輸入和輸出設(shè)備(觸控事件touch、使用地理位置定位、檢測設(shè)備方向)。

    classList
    autofocus
    email Inputs
    Local Storage
    fullScreen
    visibilitychange
    prefetch
    IndexDB
    video/audio
    canvas/webGL
    WebWorkers
    HistoryAPI
    File API
    WebSockets
    insertAdjacentHTML()
    outerHTML
    dataset

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,650評論 1 32
  • 負(fù)載均衡,英文名稱為LoadBalance,其意思就是將負(fù)載(工作任務(wù))進(jìn)行平衡,分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行(例...
    name_cc2f閱讀 169評論 0 0
  • 1、對于Vue是一套漸進(jìn)式框架的理解 ----簡單地說就是可以只使用一部分功能而不需要懂其他的模塊,也可以vue全...
    Heily99閱讀 364評論 0 1
  • Nginx優(yōu)化詳解-------超詳細(xì) 一、一般來說nginx 配置文件中對優(yōu)化比較有作用的為以下幾項: 1. w...
    name_cc2f閱讀 648評論 0 1
  • 一、/*約數(shù)個數(shù) 輸入一個正整數(shù)N (1 樣例輸入 12 樣例輸出 6 樣例說明 12的約數(shù)包括:1,2,3,4,...
    逍遙_9353閱讀 255評論 0 0

友情鏈接更多精彩內(nèi)容