某D的面試準備知識點

js基礎&es6

  1. 原生方法

    Array.prototype

    join() 方法將數(shù)組(或一個類數(shù)組對象)的所有元素連接到一個字符串中顷啼。
    concat() 方法用于合并兩個或多個數(shù)組当犯。此方法不會更改現(xiàn)有數(shù)組读串,而是返回一個新數(shù)組。
    forEach() 方法對數(shù)組的每個元素執(zhí)行一次提供的函數(shù)育拨。
    indexOf()方法返回在數(shù)組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1
    map() 方法創(chuàng)建一個新數(shù)組茁彭,其結果是該數(shù)組中的每個元素都調用一個提供的函數(shù)后返回的結果。
    pop()方法從數(shù)組中刪除最后一個元素扶歪,并返回該元素的值理肺。此方法更改數(shù)組的長度摄闸。
    push() 方法將一個或多個元素添加到數(shù)組的末尾,并返回數(shù)組的新長度妹萨。
    shift() 方法從數(shù)組中刪除第一個元素年枕,并返回該元素的值。此方法更改數(shù)組的長度乎完。
    unshift() 方法將一個或多個元素添加到數(shù)組的開頭熏兄,并返回新數(shù)組的長度。
    slice() 方法返回一個從開始到結束(不包括結束)選擇的數(shù)組的一部分淺拷貝到一個新數(shù)組對象树姨,元素組不修改
    splice() 方法通過刪除現(xiàn)有元素和/或添加新元素來更改一個數(shù)組的內容摩桶。

    String.prototype

    charAt() 方法從一個字符串中返回指定的字符。
    concat() 方法將一個或多個字符串與原字符串連接合并帽揪,形成一個新的字符串并返回硝清。
    indexOf() 方法返回調用 String 對象中第一次出現(xiàn)的指定值的索引,開始在fromIndex進行搜索转晰。如果未找到該值芦拿,則返回-1。
    lastIndexOf() 方法返回指定值在調用該方法的字符串中最后出現(xiàn)的位置挽霉,如果沒找到則返回 -1防嗡。從該字符串的后面向前查找惹苗,從 fromIndex 處開始虑凛。
    match() 當一個字符串與一個正則表達式匹配時固惯, match()方法檢索匹配項证膨。
    replace() 方法返回一個由替換值替換一些或所有匹配的模式后的新字符串士葫。模式可以是一個字符串或者一個正則表達式, 替換值可以是一個字符串或者一個每次匹配都要調用的函數(shù)择诈。
    slice() 方法提取一個字符串的一部分颖医,并返回一新的字符串备籽。新字符串包括beginSlice但不包括 endSlice庐完。
    substr() 方法返回一個字符串中從指定位置開始到指定字符數(shù)的字符钢属。
    substring() 方法返回一個字符串在開始索引到結束索引之間的一個子集, 或從開始索引直到字符串的末尾的一個子集。
    split() 方法使用指定的分隔符字符串將一個String對象分割成字符串數(shù)組门躯,以將字符串分隔為子字符串,以確定每個拆分的位置淆党。
    trim() 方法會從一個字符串的兩端刪除空白字符。在這個上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行終止符字符(如 LF讶凉,CR)染乌。

  2. bind方法的實現(xiàn)

    可以通過(call, apply)封裝函數(shù)實現(xiàn)

    call,apply唯一區(qū)別在于call的參數(shù) 要平鋪,apply的參數(shù)放到一個數(shù)組里放到第二次參數(shù)的位置
    bind方法與call,apply的區(qū)別在于懂讯,生成一個新的函數(shù) 不執(zhí)行荷憋。

  3. 閉包 和 原型鏈

    (閉包)是使用被作用域封閉的變量,函數(shù)褐望,閉包等執(zhí)行的一個函數(shù)的作用域

    • 性能考量
      如果不是因為某些特殊任務而需要閉包勒庄,在沒有必要的情況下串前,在其它函數(shù)中創(chuàng)建函數(shù)是不明智的,因為閉包對腳本性能具有負面影響实蔽,包括處理速度和內存消耗.

    原型鏈: 每個對象都有一個私有屬性(稱之為 [[Prototype]])荡碾,它持有一個連接到另一個稱為其 prototype 對象(原型對象)的鏈接。該 prototype 對象又具有一個自己的原型局装,層層向上直到一個對象的原型為 null玩荠。

  4. 快速排序算法

     function quickSort(arr) {
         if(arr.length<=1) {
             return arr;
         }
    
         let leftArr = [];
         let rightArr = [];
         let q = arr[0];
         for(let i = 1,l=arr.length; i<l; i++) {
             if(arr[i]>q) {
                 rightArr.push(arr[i]);
             }else{
                 leftArr.push(arr[i]);
             }
         }
    
         return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
     }
    
  5. 瀏覽器回退

    history.pushState && window.onpopstate && window.hashchange

  6. 箭頭函數(shù)的特點

    this指向的固定化,并不是因為箭頭函數(shù)內部有綁定this的機制贼邓,實際原因是箭頭函數(shù)根本沒有自己的this,導致內部的this就是外層代碼塊的this闷尿。正是因為它沒有this塑径,所以也就不能用作構造函數(shù)。

  7. 跨域與同源

具體的思路:由于瀏覽器有同源策略限制 填具,所以想要跨域訪問其他域下的資源统舀,需要繞開瀏覽器的這個限制,可以在服務器端設置一個代理劳景,由服務器端向跨域下的網(wǎng)站發(fā)出請求誉简,再將請求結果返回給前端,成功避免同源策略的限制盟广。

  1. 事件機制

他們是描述事件觸發(fā)時序問題的術語闷串。事件捕獲指的是從document到觸發(fā)事件的那個節(jié)點,即自上而下的去觸發(fā)事件筋量。相反的烹吵,事件冒泡是自下而上的去觸發(fā)事件。事件代理就是利用事件冒泡原理.

html5新增的屬性

  • 根據(jù)其功能分為幾個組:

    語義:能夠讓你更恰當?shù)孛枋瞿愕膬热菔鞘裁础?br> 連通性:能夠讓你和服務器之間通過創(chuàng)新的新技術方法進行通信桨武。
    離線 & 存儲:能夠讓網(wǎng)頁在客戶端本地存儲數(shù)據(jù)以及更高效地離線運行肋拔。
    多媒體:使 video 和 audio 成為了在所有 Web 中的一等公民。
    2D/3D 繪圖 & 效果:提供了一個更加分化范圍的呈現(xiàn)選擇呀酸。
    性能 & 集成:提供了非常顯著的性能優(yōu)化和更有效的計算機硬件使用凉蜂。
    設備訪問 Device Access:能夠處理各種輸入和輸出設備。
    樣式設計: 讓作者們來創(chuàng)作更加復雜的主題吧性誉!

  • 關于 Cookie窿吩、localStoragee和sessionStorage

特性 Cookie localStorage sessionStorage
數(shù)據(jù)的生命期 一般由服務器生成,可設置失效時間艾栋。如果在瀏覽器端生成Cookie爆存,默認是關閉瀏覽器后失效 除非被清除,否則永久保存 僅在當前會話下有效蝗砾,關閉頁面或瀏覽器后被清除
存放數(shù)據(jù)大小 4K左右 一般為5MB 一般為5MB
與服務器端通信 每次都會攜帶在HTTP頭中先较,如果使用cookie保存過多數(shù)據(jù)會帶來性能問題 僅在客戶端(即瀏覽器)中保存携冤,不參與和服務器的通信 僅在客戶端(即瀏覽器)中保存,不參與和服務器的通信
易用性 需要程序員自己封裝闲勺,源生的Cookie接口不友好 源生接口可以接受曾棕,亦可再次封裝來對Object和Array有更好的支持 源生接口可以接受,亦可再次封裝來對Object和Array有更好的支持

項目構建webpack, gulp, grunt

  • Gulp與Grunt
  1. 任務運行器(task runner)菜循,例如 Gulp翘地,可以處理許多不同的預處理器(preprocesser)和轉換器(transpiler),但是在所有的情景下癌幕,它都需要一個輸入源并將其壓縮到一個編譯好的輸出文件中衙耕。然而,它是在每個部分的基礎上這樣做的勺远,而沒有考慮到整個系統(tǒng)橙喘。這就造成了開發(fā)者的負擔:找到任務運行器所不能處理的地方,并找到適當?shù)姆绞綄⑺羞@些模塊在生產(chǎn)環(huán)境中聯(lián)合在一起胶逢。
  2. Gulp/Grunt是一種能夠優(yōu)化前端的開發(fā)流程的工具厅瞎,而WebPack是一種模塊化的解決方案,不過Webpack的優(yōu)點使得Webpack在很多場景下可以替代Gulp/Grunt類的工具初坠。
  3. Grunt和Gulp的工作方式是:在一個配置文件中和簸,指明對某些文件進行類似編譯,組合碟刺,壓縮等任務的具體步驟锁保,工具之后可以自動替你完成這些任務。
  • Gulp相比Grunt
  • 易用 Gulp相比Grunt更簡潔南誊,而且遵循代碼優(yōu)于配置策略身诺,維護Gulp更像是寫代碼。
  • 高效 Gulp相比Grunt更有設計感抄囚,核心設計基于Unix流的概念霉赡,通過管道連接,不需要寫中間文件幔托。
  • 高質量 Gulp的每個插件只完成一個功能穴亏,這也是Unix的設計原則之一,各個功能通過流進行整合并完成復雜的任務重挑。例如:Grunt的imagemin插件不僅壓縮圖片嗓化,同時還包括緩存功能。他表示谬哀,在Gulp中刺覆,緩存是另一個插件,可以被別的插件使用史煎,這樣就促進了插件的可重用性谦屑。目前官方列出的有673個插件驳糯。
  • 易學 Gulp的核心API只有5個,掌握了5個API就學會了Gulp氢橙,之后便可以通過管道流組合自己想要的任務酝枢。gulp.task
    gulp.run
    gulp.watch
    gulp.src
    gulp.dest
  • Webpack
  • Webpack的工作方式是:把你的項目當做一個整體,通過一個給定的主文件(如:index.js)悍手,Webpack將從這個文件開始找到你的項目的所有依賴文件帘睦,使用loaders處理它們,最后打包為一個(或多個)瀏覽器可識別的JavaScript文件坦康。
  • Webpack 試圖通過提出一個大膽的想法來減輕開發(fā)者的負擔:如果有一部分開發(fā)過程可以自動處理依賴關系會怎樣竣付?如果我們可以簡單地寫代碼,讓構建過程最終只根據(jù)需求管理自己會怎樣滞欠?
  • WebPack可以看做是模塊打包機:它做的事情是卑笨,分析你的項目結構,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss仑撞,TypeScript等),并將其轉換和打包為合適的格式供瀏覽器使用妖滔。

框架React,Vue,Angular

  • Vue 的一些語法和 AngularJS 的很相似 (例如 v-if vs ng-if)隧哮。因為 AngularJS 是 Vue 早期開發(fā)的靈感來源。然而座舍,AngularJS 中存在的許多問題沮翔,在 Vue 中已經(jīng)得到解決。

  • Angular2 它具有優(yōu)秀的組件系統(tǒng)曲秉,并且許多實現(xiàn)已經(jīng)完全重寫采蚀,API 也完全改變了。Angular 事實上必須用 TypeScript 來開發(fā)承二,因為它的文檔和學習資源幾乎全部是面向 TS 的

    TypeScript: function (person : Person) {}

react相比Vue

  • 在 React 應用中榆鼠,當某個組件的狀態(tài)發(fā)生變化時,它會以該組件為根亥鸠,重新渲染整個組件子樹妆够。PureComponent 和 shouldComponentUpdate需要保證該組件的整個子樹的渲染輸出都是由該組件的 props 所決定的。

  • 在 Vue 應用中负蚊,組件的依賴是在渲染過程中自動追蹤的神妹,所以系統(tǒng)能精確知曉哪個組件確實需要被重渲染。你可以理解為每一個組件都已經(jīng)自動獲得了 shouldComponentUpdate家妆,并且沒有上述的子樹問題限制鸵荠。

react生命周期函數(shù)

  • 初始化階段:

constructor(props, context) 構造函數(shù),在創(chuàng)建組件的時候調用一次伤极。
getDefaultProps: 獲取實例的默認屬性(即使沒有生成實例蛹找,組件的第一個實例被初始化CreateClass的時候調用姨伤,只調用一次,)
getInitialState:獲取每個實例的初始化狀態(tài)(每個實例自己維護)
componentWillMount:組件即將被裝載、渲染到頁面上(render之前最好一次修改狀態(tài)的機會)
render:組件在這里生成虛擬的DOM節(jié)點(只能訪問this.props和this.state熄赡;只有一個頂層組件姜挺,也就是 說render返回值值職能是一個組件;不允許修改狀態(tài)和DOM輸出)
componentDidMount:組件真正在被裝載之后彼硫,可以修改DOM

  • 運行中狀態(tài):

componentWillReceiveProps:組件將要接收到屬性的時候調用(趕在父組件修改真正發(fā)生之前,可以修改屬性和狀態(tài))
shouldComponentUpdate:組件接受到新屬性或者新狀態(tài)的時候(可以返回false炊豪,接收數(shù)據(jù)后不更新,阻止re nder調用拧篮,后面的函數(shù)不會被繼續(xù)執(zhí)行了)
componentWillUpdate: 不能修改屬性和狀態(tài)
render: 只能訪問this.props和this.state词渤;只有一個頂層組件,也就是說render返回值只能是一個組件串绩;不 允許修改狀態(tài)和DOM輸出
componentDidUpdate:可以修改DOM

  • 銷毀階段:

componentWillUnmount:開發(fā)者需要來銷毀(組件真正刪除之前調用缺虐,比如計時器和事件監(jiān)聽器)

為什么要用Redux

props意味著父級分發(fā)下來的屬性,state意味著組件內部可以自行管理的狀態(tài)礁凡,并且整個React沒有數(shù)據(jù)向上回溯的能力高氮,也就是說數(shù)據(jù)只能單向向下分發(fā),或者自行內部消化顷牌。
為了有更好的state管理剪芍,就需要一個庫來作為更專業(yè)的頂層state分發(fā)給所有React應用,這就是Redux

前端模塊化規(guī)范(ES6模塊化以及CommonJs,AMD和CMD)(RequireJS 和 SeaJS)

CommonJS規(guī)范主要用于服務端編程窟蓝,加載模塊是同步的罪裹,這并不適合在瀏覽器環(huán)境,因為同步意味著阻塞加載运挫,瀏覽器資源是異步加載的状共,因此有了AMD CMD解決方案。
AMD規(guī)范在瀏覽器環(huán)境中異步加載模塊谁帕,而且可以并行加載多個模塊峡继。不過,AMD規(guī)范開發(fā)成本高匈挖,代碼的閱讀和書寫比較困難鬓椭,模塊定義方式的語義不順暢。
CMD規(guī)范與AMD規(guī)范很相似关划,都用于瀏覽器編程小染,依賴就近,延遲執(zhí)行贮折,可以很容易在Node.js中運行裤翩。不過,依賴SPM 打包,模塊的加載邏輯偏重
ES6 在語言標準的層面上踊赠,實現(xiàn)了模塊功能呵扛,而且實現(xiàn)得相當簡單,完全可以取代 CommonJS 和 AMD 規(guī)范筐带,成為瀏覽器和服務器通用的模塊解決方案今穿。

ES6 模塊的設計思想,是盡量的靜態(tài)化伦籍,使得編譯時就能確定模塊的依賴關系蓝晒,以及輸入和輸出的變量。CommonJS 和 AMD 模塊帖鸦,都只能在運行時確定這些東西芝薇。比如,CommonJS 模塊就是對象作儿,輸入時必須查找對象屬性洛二。

CommonJS定義的模塊分為:{模塊引用(require)} {模塊定義(exports)} {模塊標識(module)}
CommonJS是主要為了JS在后端的表現(xiàn)制定的,他是不適合前端的

AMD(異步模塊定義)出現(xiàn)攻锰,它就主要為前端JS的表現(xiàn)制定規(guī)范晾嘶。

RequireJS 遵循 AMD(異步模塊定義)規(guī)范,Sea.js 遵循 CMD (通用模塊定義)規(guī)范娶吞。規(guī)范的不同变擒,導致了兩者 API 不同。Sea.js 更貼近 CommonJS Modules/1.1 和 Node Modules 規(guī)范寝志。

SeaJS對模塊的態(tài)度是懶執(zhí)行, 而RequireJS對模塊的態(tài)度是預執(zhí)行

庫jquery,Bootstrap,Lodash,swiper

nodejs

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市策添,隨后出現(xiàn)的幾起案子材部,更是在濱河造成了極大的恐慌,老刑警劉巖唯竹,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乐导,死亡現(xiàn)場離奇詭異,居然都是意外死亡浸颓,警方通過查閱死者的電腦和手機物臂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产上,“玉大人棵磷,你說我怎么就攤上這事〗粒” “怎么了仪媒?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谢鹊。 經(jīng)常有香客問我算吩,道長留凭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任偎巢,我火速辦了婚禮蔼夜,結果婚禮上,老公的妹妹穿的比我還像新娘压昼。我一直安慰自己求冷,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布巢音。 她就那樣靜靜地躺著遵倦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪官撼。 梳的紋絲不亂的頭發(fā)上梧躺,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音傲绣,去河邊找鬼掠哥。 笑死,一個胖子當著我的面吹牛秃诵,可吹牛的內容都是我干的续搀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菠净,長吁一口氣:“原來是場噩夢啊……” “哼禁舷!你這毒婦竟也來了?” 一聲冷哼從身側響起毅往,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牵咙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攀唯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洁桌,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年侯嘀,在試婚紗的時候發(fā)現(xiàn)自己被綠了另凌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡戒幔,死狀恐怖吠谢,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情诗茎,我是刑警寧澤囊卜,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響栅组,放射性物質發(fā)生泄漏雀瓢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一玉掸、第九天 我趴在偏房一處隱蔽的房頂上張望刃麸。 院中可真熱鬧,春花似錦司浪、人聲如沸泊业。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吁伺。三九已至,卻和暖如春租谈,著一層夾襖步出監(jiān)牢的瞬間篮奄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工割去, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窟却,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓呻逆,卻偏偏與公主長得像夸赫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咖城,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,233評論 0 4
  • 對網(wǎng)站資源進行優(yōu)化茬腿,并使用不同瀏覽器測試并不是網(wǎng)站設計過程中最有意思的部分,但是這個過程中的很多重復的任務能夠使用...
    懵逼js閱讀 1,067評論 0 8
  • 編輯于2015年 轉載自某作者的譯文 作者要是看到請聯(lián)系我注明出處 對網(wǎng)站資源進行優(yōu)化宜雀,并使用不同瀏覽器測試并不是...
    krock01閱讀 448評論 0 2
  • gulpjs是一個前端構建工具切平,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)州袒,API也非常簡單,學...
    井皮皮閱讀 1,296評論 0 10
  • 自廣西區(qū)高考分數(shù)出來后弓候,我的電話暴增郎哭,工作量大量涌來,單槍匹馬的全套服務確實讓我有點吃不消啦菇存。 我不希望降低我的服...
    hegolas閱讀 675評論 0 3