前端工程師 - 面試題 (最新,最全)

 

一:什麼是閉包?閉包的用處?javascript

(1)閉包就是可以讀取其餘函數內部變量的函數。在本質上,閉包就css

是將函數內部和函數外部鏈接起來的一座橋樑。html

(2)閉包能夠用在許多地方。它的最大用處有兩個,一個是能夠讀取函數內部的變量,另外一個就是讓這些變量的值始終保持在內存中前端

閉包的特性:vue

①.封閉性:外界沒法訪問閉包內部的數據,若是在閉包內聲明變量,外界是沒法訪問的,除非閉包主動向外界提供訪問接口;html5

②.持久性:通常的函數,調用完畢以後,系統自動註銷函數,而對於閉包來講,在外部函數被調用以後,閉包結構依然保存在系統中,閉包中的數據依然存在,從而實現對數據的持久使用。java

閉包的缺點就是常駐內存,會增大內存使用量,使用不當很容易形成內存泄露。node

 

 

vue面試題

一:簡述vue的理解jquery

Vue是一個漸進式的輕量級框架,核心是關注視圖層,是一個構建數據驅動的頁面,將數據綁定視圖上,vue提供數據和視圖雙向綁定原理使咱們開發頁面更簡單,修改數據,視圖自動更新。 vue是模塊化和組塊化,若是頁面要更改數據之類的,就只在組件來修改就能夠,vue有幾大特色:(1) 簡潔 (2) 輕量 (3)快速 (4) 數據驅動 (5) 模塊化(6) 組件化Vuewebpack

經過添加組件系統、客戶端路由、大規模狀態管理來構建一個完整的框架,能夠經過豐富的指令擴展模板,能夠經過各類各樣的插件來加強功能

過濾器是針對一些數據 進行篩選、過濾、格式化等相關的處理,變成咱們想要的數據。

過濾器的本質 就是一個帶有參數帶有返回值的方法。

Vue組件的過程:組件能夠提高整個項目的開發效率,可以把頁面拆分爲多個獨立的模塊,解決了效率低,難維護,複用性,等問題。

Vue是一個數據驅動頁面的一個框架,基於MVVM模式,M指的是數據,V值得是視圖,VM是視圖模型,將數據綁定視圖上(雙向綁定)

Vue.js是一套構建用戶界面的漸進式(沒有強主張,沒有多作職責以外的事。)框架。

Vue的生命週期

生命週期就是鉤子函數,主要是在何時來調用這些函數,好比是在建立,掛載,更新,銷燬完成以後仍是以前,初始化數據完成以前仍是以後等

   從開始建立、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,咱們稱這是 Vue 的生命週期beforeCreate : 數據聲明還沒被調用時使用created : vue渲染完畢後,全部數據和方法初始化後調用mounted : 掛載元素以後

updated : 若是對數據統一處理,在這裏寫上相應函數beforeDestroy : 能夠作一個確認中止事件的確認框nextTick : 更新數據後當即操做dom

BeforeMount 掛載開始以前被調用

1. vue生命週期的做用是什麼?答:它的生命週期中有多個事件鉤子,讓咱們在控制整個Vue實例的過程時更容易造成好的邏輯。

2. 第一次頁面加載會觸發哪幾個鉤子?答:第一次頁面加載時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子

3.vue的優勢是什麼?

低耦合。視圖(View)能夠獨立於Model變化和修改,一個ViewModel能夠綁定到不一樣的"View"上,當View變化的時候Model能夠不變,當Model變化的時候View也能夠不變。

可重用性。你能夠把一些視圖邏輯放在一個ViewModel裏面,讓不少view重用這段視圖邏輯。

獨立開發。開發人員能夠專一於業務邏輯和數據的開發(ViewModel),設計人員能夠專一於頁面設計,使用Expression Blend能夠很容易設計界面並生成xml代碼。

可測試。界面素來是比較難於測試的,而如今測試能夠針對ViewModel來寫。

5.vue組件之間的傳值  

1.父組件給子組件傳值 (props) 

2.子組件給父組件傳值 (emit)

3.兄弟組件間的傳值(on和emit)

6.框架的好處

提升代碼的質量,開發速度

提升代碼的複用率

下降模塊之間的耦合度(高內聚低耦合)

 

二。Vue.js開發環境

1.安裝node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html)

2.基於node.js,利用淘寶npm鏡像安裝相關依賴

 在cmd裏直接輸入:npm install -g cnpm --registry=https://registry.npm.taobao.org,回車,等待安裝...

3.安裝全局vue-cli腳手架,用於幫助搭建所需的模板框架

在cmd裏 1)輸入:cnpm install -g vue-cli,回車,等待安裝...

            2).輸入:vue,回車,若出現vue信息說明表示成功

4.建立項目

在cmd裏輸入:vue init webpack vue_test(項目文件夾名),回車,等待一小會兒

5.安裝依賴

在cmd裏  1).輸入:cd vue_test(項目名),回車,進入到具體項目文件夾

       2).輸入:cnpm install,回車,等待一小會兒

回到項目文件夾,會發現項目結構裏,多了一個node_modules文件夾(該文件裏的內容就是以前安裝的依賴)

6.測試環境是否搭建成功

方法1:在cmd裏輸入:cnpm run dev

方法2:在瀏覽裏輸入:localhost:8080(默認端口爲8080)

 

3、vue中常見的指令有哪些?

v-for/v-if/v-else-if/v-else/v-on/v-bind/v-show/v-html/v-model

 

4、雙向數據綁定是如何實現的?好處有哪些

v-model

好處?

組件是一個具備特定功能的 可被反覆使用的視圖,

各個指令實現數據和視圖的綁定,解耦(下降耦合度的過程)

組件有什麼好處?

封裝好了組件,提升了代碼複用率

提升了代碼的可讀性

下降了測試難度

 

5、Vue實例中常見的屬性有哪些?

data 存儲數據

methods 方法

directives 指令

filters 過濾器/管道

router 路由

props 接收調用該組件時傳來的數據

watch 監聽雙向數據綁定的數據的變化

computed 用在邏輯複雜的地方,計算屬性是基於它們的依賴進行緩存的,提升性能

 

6、過濾器

本質是一個帶有參數 有返回值的方法;支持多重過濾

{{表達式 | myFilter(arg1,arg2) | myFilter2}}

 

7、refs

一、給子組件要指定一個屬性 

二、經過引用名字mySon怎麼獲得子組件的實例? this.$refs.mySon

1Vue組件化的理解

首先組件的基本構成分別是:樣式結構,行爲邏輯,數據。web中的組件其實就是頁面組成的一部分,每一個組件都會提供一些對外接口,容許使用者設置和調整參數屬性,能夠將不一樣功能的組件結合在一塊兒,快速的構成一個符合實際需求的應用。

 

2Vue路由的理解

首先Vue的單頁面應用是基於路由和組件的,路由用於設定訪問路徑,並將路徑和組件映射起來。傳統的頁面應用,是經過超連接來實現頁面的切換和跳轉。在Vue-router中是路徑之間的切換,也就是組件的切換。

 

3你對Vue鉤子函數的理解

vue-router的導航鉤子主要用來攔截導航,讓他完成跳轉或取消。

 

4如何讓css只在當前組件中起做用

在每個vue組件中均可以定義各自的css,js,若是但願組件內寫的css只對當前組件起做用,只須要在style中寫入scoped:

 

5created和mounted區別

created實例建立完成以後的鉤子函數;$el屬性不可見爲undefined

mounted將編譯好的HTML掛載到頁面完成後執行的鉤子函數,在整個實例生命週期中只執行一次;$el已建立,同時DOM結構已生成

 

6mounted和created分別何時用

只有ajax數據請求放在created裏面就能夠了,這樣能夠及早發請求獲取數據;若是有依賴DOM的狀況下,就放到mounted裏面

 

7Vue和angular分別採用什麼技術實現雙向數據綁定?

AngularJS 採用「髒值檢測」的方式,數據發生變動後,對於全部的數據和視圖的綁定關係進行一次檢測,識別是否有數據發生了改變,有變化進行處理,可能進一步引起其餘數據的改變,因此這個過程可能會循環幾回,一直到再也不有數據變化發生後,將變動的數據發送到視圖,更新頁面展示。若是是手動對 ViewModel 的數據進行變動,爲確保變動同步到視圖,須要手動觸發一次「髒值檢測」。

VueJS 則使用 ES5 提供的 Object.defineProperty() 方法,監控對數據的操做,從而能夠自動觸發數據同步。而且,因爲是在不一樣的數據上觸發同步,能夠精確的將變動發送給綁定的視圖,而不是對全部的數據都執行一次檢測。

 

8v-show和v-if區別

v-show指令是經過修改元素的displayCSS屬性讓其顯示或者隱藏

v-if指令是直接銷燬和重建DOM達到讓元素顯示和隱藏的效果

通常來講, v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。所以,若是須要很是頻繁地切換,則使用 v-show 較好;若是在運行時條件不太可能改變,則使用 v-if 較好

 

9的做用是什麼

 包裹動態組件時,會緩存不活動的組件實例,主要用於保留組件狀態或避免從新渲染。

大白話: 好比有一個列表和一個詳情,那麼用戶就會常常執行打開詳情=>返回列表=>打開詳情…這樣的話列表和詳情都是一個頻率很高的頁面,那麼就能夠對列表組件使用進行緩存,這樣用戶每次返回列表的時候,都能從緩存中快速渲染,而不是從新渲染

 

10Vue中引入組件的步驟

  1.採用ES6的import ... from ...語法或CommonJS的require()方法引入組件

  2.對組件進行註冊,代碼以下

 // 註冊Vue.component('my-component', {  template: '

      A custom component!
  '})

  3.使用組件

 

11請列舉出3個Vue中經常使用的生命週期鉤子函數

created: 實例已經建立完成以後調用,在這一步,實例已經完成數據觀測, 屬性和方法的運算, watch/event事件回調. 然而, 掛載階段尚未開始, $el屬性目前還不可見

mounted: el被新建立的 vm.$el 替換,並掛載到實例上去以後調用該鉤子。若是 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。

activated::keep-alive組件激活時調用

 

12請簡述下Vuex的原理和使用方法

一個應用能夠看做是由上面三部分組成: View, Actions,State,數據的流動也是從View => Actions => State =>View 以此達到數據的單向流動.可是項目較大的, 組件嵌套過多的時候, 多組件共享同一個State會在數據傳遞時出現不少問題.Vuex就是爲了解決這些問題而產生的.

Vuex能夠被看做項目中全部組件的數據中心,咱們將全部組件中共享的State抽離出來,任何組件均可以訪問和操做咱們的數據中心.

 

上圖能夠很好的說明Vuex的組成,一個實例化的Vuex.Store由state, mutations和actions三個屬性組成:

state中保存着共有數據

改變state中的數據有且只有經過mutations中的方法,且mutations中的方法必須是同步的

若是要寫異步的方法,須要些在actions中, 並經過commit到mutations中進行state中數據的更改.

 

13vue與angular的區別

vue的雙向邦定是基於ES5 中的 3.getter/setter來實現的,而angular而是由本身實現一套模版編譯規則,須要進行所謂的「髒」檢查,vue則不須要。所以,vue在性能上更高效,可是代價是對於ie9如下的瀏覽器沒法支持。

 

14active-class是哪一個組件的屬性?

vue-router模塊的router-link組件

 

15怎麼定義vue-router的動態路由?怎麼獲取傳過來的動態參數

一、路由配置文件找到對應的路由,在path屬性上添加/:id

二、在須要出發跳轉的頁面router-link配置實際要傳遞的參數數據

三、在目標組件經過路由對象下的$route.params進行接收

 

16vue-router有哪幾種導航鉤子

鉤子函數種類:

router全局:beforeEach、afterEach

單個路由:beforeEnter

組件內的鉤子:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

鉤子函數接收的參數:

to:要進入的目標,路有對象 到哪裏去

from:正要離開導航的路由對象 從哪裏來

next:用來決定跳轉或取消導航

 

17在vue.cli中的安裝使用步驟是?有哪幾大特性?

第一步:用npm 下三個loader(sass-loader、css-loader、node-sass)

第二步:而後在組件的style標籤加上lang屬性 ,例如:lang=」scss」

 

18vue-router是什麼?它有哪些組件

vue的路由插件。router-link、router-view

 

19請說出vue.cli項目中src目錄每一個文件夾和文件的用法

assets文件夾是放靜態資源;components是放組件;router是定義路由相關的配置;view視圖;app.vue是一個應用主組件;main.js是入口文件

 

20什麼是vue生命週期

Vue 實例從建立到銷燬的過程,就是生命週期。也就是從開始建立、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,咱們稱這是 Vue 的生命週期。

vue生命週期的做用是什麼?它的生命週期中有多個事件鉤子,讓咱們在控制整個Vue實例的過程時更容易造成好的邏輯。

 

21vue生命週期總共有幾個階段

它能夠總共分爲8個階段:建立前/後, 載入前/後,更新前/後,銷燬前/銷燬後

 

22第一次頁面加載會觸發哪幾個鉤子

第一次頁面加載時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子

 

23DOM 渲染在 哪一個週期中就已經完成

DOM 渲染在 mounted 中就已經完成了

 

24簡單描述每一個週期具體適合哪些場景

生命週期鉤子的一些使用方法: beforecreate : 能夠在這加個loading事件,在加載實例時觸發 created : 初始化完成時的事件寫在這裏,如在這結束loading事件,異步請求也適宜在這裏調用 mounted : 掛載元素,獲取到DOM節點 updated : 若是對數據統一處理,在這裏寫上相應函數 beforeDestroy : 能夠作一個確認中止事件的確認框 nextTick : 更新數據後當即操做dom

arguments是一個僞數組,沒有遍歷接口,不能遍歷

 

25computed VS methods

你可能已經注意到咱們能夠經過在表達式中調用方法來達到一樣的效果:

 

Reversed message: "{{ reversedMessage() }}"

 

 

// 在組件中

methods: {

 reversedMessage: function () {

   return this.message.split('').reverse().join('')

 }

}

 

咱們能夠將同一函數定義爲一個方法而不是一個計算屬性。兩種方式的最終結果確實是徹底相同的。然而,不一樣的是計算屬性是基於它們的依賴進行緩存的。計算屬性只有在它的相關依賴發生改變時纔會從新求值。這就意味着只要message尚未發生改變,屢次訪問 reversedMessage計算屬性會當即返回以前的計算結果,而沒必要再次執行函數。

這也一樣意味着下面的計算屬性將再也不更新,由於Date.now()不是響應式依賴:

computed: {

 now: function () {

   return Date.now()

 }

}

 

相比之下,每當觸發從新渲染時,調用方法將總會再次執行函數。

咱們爲何須要緩存?假設咱們有一個性能開銷比較大的的計算屬性A,它須要遍歷一個巨大的數組並作大量的計算。而後咱們可能有其餘的計算屬性依賴於A。若是沒有緩存,咱們將不可避免的屢次執行 A的 getter!若是你不但願有緩存,請用方法來替代。

 

26computed VS watch

Vue 提供了一種更通用的方式來觀察和響應 Vue 實例上的數據變更:偵聽屬性。當你有一些數據須要隨着其它數據變更而變更時,你很容易濫用watch——特別是若是你以前使用過 AngularJS。然而,一般更好的作法是使用計算屬性而不是命令式的 watch回調。細想一下這個例子:

 

{{ fullName }}
 

 

var vm = new Vue({

 el: '#demo',

 data: {

   firstName: 'Foo',

   lastName: 'Bar',

   fullName: 'Foo Bar'

 },

 watch: {

   firstName: function (val) {

     this.fullName = val + ' ' + this.lastName

   },

   lastName: function (val) {

     this.fullName = this.firstName + ' ' + val

   }

 }

})

 

 

 

jquery總結

一.對jquery的瞭解

jQuery是一個輕量級的javascript框架,極大的簡化了js的編程。

1.首先jQuery提供了強大的元素選擇器。用於獲取html頁面中封裝了html元素的jQuery對象。像常見的選擇器有:基本選擇器,層次選擇器,過濾選擇器,表單選擇器。

2.第二點就是jQuery提供了對css樣式操做的支持,像對class屬性的增長刪除切換操做。還有對單個樣式操做的支持的css方法,提供了一種簡潔統一的操做樣式的方法。

3.第三點就是jQuery出色的DOM操做的封裝,極大的簡化了javascript的對dom節點的增刪改查操做,讓咱們能夠使用一種更加簡潔的方法來操做節點。

4.第四點就是jQuery仍是一個爲事件處理特色設計的框架,提供了靜態綁定事件和動態綁定事件,完善了事件的處理機制。

5.jQuery解決了大量瀏覽器之間的兼容性的問題。

6.jQuery極大的簡化ajax編程,提供了一種更加簡潔,統一的編程方式。

7.jQuery內置了一些簡單有用的內置動畫,像常見的slideDown/slideUp,hide/show,fadeIn/fadeOut等,還支持基於定位機制使用animate來自定義動畫效果。

 

二.jQuery和Zepto的區別和用途

jQuery主要用於pc端,Zepto主要用於移動端,Zepto更加小巧

 

三.jquery裏的ready與window.onload的區別的區別?

  ready:

1.具備簡寫寫法

2.一個HTML頁面中容許編寫多個

  3.(效率高)須要在DOM加載後就能夠執行

  window.onload

1.沒有任何簡寫

2.一個HTML頁面中只能編寫一個

  3.(效率低)必須在頁面中全部內容都加載完畢後,才能執行

 

四.請簡要說明jQuery框架的顯著特色。

答:jQuery強調的理念是寫的少,作的多。其主要特色有:輕量級、強大的選擇器、漂亮的DOM操做封裝、可靠的事件處理機制、完善的Ajax處理、出色的瀏覽器兼容性、鏈式操做方式、豐富的插件支持、開源產品。

 

五.jQuery如何解決跨域問題?

答:藉助JSONP這個非官方的協議,其容許在服務器端集成script tags返回至客戶端,經過callback的形式實現跨域訪問JSONP即JSON with Padding。若是要進行跨域請求,咱們能夠經過使用html的script標記來進行跨域請求,並在響應中返回要執行的script代碼,其中能夠直接使用JSON傳遞javascript對象。

 

六.如何編寫高性能的jQuery代碼?

答:定義jQuery變量的時候添加var關鍵字;DOM操做請務必記住緩存(cache);儘可能使用鏈式操做;儘可能把一些代碼都整合到一塊兒;避免使用全局類型的選擇器;儘可能使用.on方法,由於其它任何方法都是最終使用.on方法來實現的;儘可能使用最新版本的jQuery框架類庫。 

 

七.jQuery與jQuery UI有啥區別?

答:

(1)jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。

(2)jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。提供了一些經常使用的界面元素,諸如對話框、拖動行爲、改變大小行爲等等。

 

八.jQuery鏈式調用的最大優勢是什麼?

答:避免頻繁操做的DOM,鏈式調用能夠實現先緩存再操做。

 

九.jQuery框架的源碼看過嗎?能不能簡單說一下它的實現原理?

首先是採用閉包技術,而後用window做爲形參傳入

答:jQuery框架經過改變javascript編碼方式來建立了全新的編程理念。譬如關於jQuery聲明的流程:先查找(建立)jQuery對象,而後調用jQuery對象的方法完成咱們須要完成的工做。jQuery就是以這種能夠說是最簡單的編碼邏輯來改變javascript編碼方式的,這個流程就是jQuery的編碼邏輯核心。 

 

十.jQuery中如何將對象轉化爲json字符串,而後再轉化回來?

答:能夠經過JSON.stringify方法把一個對象轉換成json字符串,再經過JSON.parse方法把一個json字符串解析成對象。 

 

十一.jQuery中的load方法通常怎麼用的?

答:load方法通常在載入遠程HTML代碼並插入到DOM中的時候用,一般用來從Web服務器上獲取靜態的數據文件。若是要傳遞參數的話,能夠使用$.get()或$.post()方法。

 

十二.描述一下.get()、[]和.eq()方法的區別。

答:eq返回原生jQuery對象,截取某些el元素生成jQuery新對象;get和[]返回的都是原生的DOM對象,原理一致;get和[]區別是get是經過jQuery對象的方法獲取,[]是根據jQuery是一個數組對象獲取。

 

十三。jQuery的理解:

jQuery是一個輕量級的javascript框架,極大的簡化了js的編程。

1.首先jQuery提供了強大的元素選擇器。用於獲取html頁面中封裝了html元素的jQuery對象。像常見的選擇器有:基本選擇器,層次選擇器,過濾選擇器,表單選擇器。

2.第二點就是jQuery提供了對css樣式操做的支持,像對class屬性的增長刪除切換操做。還有對單個樣式操做的支持的css方法,提供了一種簡潔統一的操做樣式的方法。

3.第三點就是jQuery出色的DOM操做的封裝,極大的簡化了javascript的對dom節點的增刪改查操做,讓咱們能夠使用一種更加簡潔的方法來操做節點。

 4.第四點就是jQuery仍是一個爲事件處理特色設計的框架,提供了靜態綁定事件和動態綁定事件,完善了事件的處理機制。

5.jQuery解決了大量瀏覽器之間的兼容性的問題。

6.jQuery極大的簡化ajax編程,提供了一種更加簡潔,統一的編程方式。

7.jQuery內置了一些簡單有用的內置動畫,像常見的slideDown/slideUp,hide/show,fadeIn/fadeOut等,還支持基於定位機制使用animate來自定義動畫效果。

 

十4、 bind()、live()、one()和on()的區別?

      * bind() - 綁定事件

       * live() - 老版本具備,新版本移除

       * one() - 只綁定一次事件

       * on() - 是jQuery底層提供的機制

 

十五:jquery裏的ready與window.onload的區別的區別?

  ready

具備簡寫寫法

一個HTML頁面中容許編寫多個

  (效率高)須要在DOM加載後就能夠執行

      window.onload

沒有任何簡寫

一個HTML頁面中只能編寫一個

  (效率低)必須在頁面中全部內容都加載完畢後,才能執行

十六:jQuery中如何將對象轉化爲json字符串,而後再轉化回來?

答:能夠經過JSON.stringify方法把一個對象轉換成json字符串,再經過JSON.parse方法把一個json字符串解析成對象。

 

 

ajax方面

一.Ajax是什麼?

答:是指一種建立交互式網頁應用的網頁開發技術。經過在後臺與服務器進行少許數據交換,AJAX能夠使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。

什麼是ajax,爲何要使用Ajax(請談一下你對Ajax的認識)?

答案:Ajax是客戶端請求服務器數據的一種技術。是一種向服務器發送異步請求的一種技術,從服務器得到數據,Ajax技術沒必要刷新整個頁面,只需對頁面的局部進行更新,能夠節省網絡帶寬,提升頁面的加載速度,從而縮短用戶等待時間,改善用戶體驗。

爲何要用ajax:Ajax應用程序的優點在於:

• 經過異步模式,提高了用戶體驗

• 優化了瀏覽器和服務器之間的傳輸,減小沒必要要的數據往返,減小了帶寬佔用

ajax引擎在客戶端運行,承擔了一部分原本由服務器承擔的工做,從而減小了大用戶量下的服務器負載。

 

二.同步請求和異步請求的區別?

答:

• 同步:提交請求→等待服務器處理→處理完畢返回,這個期間客戶端瀏覽器不能幹任何事。

• 異步:請求經過事件觸發→服務器處理(這是瀏覽器仍然能夠做其餘事情)→處理完畢。

 

三.異步加載的方式有哪些?

答:

(1)defer,只支持IE;

(2)async;

(3)建立script,插入到DOM;

 

4、 JSON 的瞭解

輕量級數據交互格式,能夠造成複雜的嵌套格式,解析很是方便

 

5、請解釋 ajax 的工做原理

Ajax 的工做原理至關於在用戶和服務器之間加了—箇中間層,使用戶操做與服務器響應異步化。這樣把之前的一些服務器負擔的工做轉嫁到客戶端,利於客戶端閒置的處理能力來處理,減輕服務器和帶寬的負擔,從而達到節約 ISP 的空間及帶寬租用成本的目的。簡單來講經過 XmlHttpRequest 對象來向服務器發異步請求,從服務器得到數據,而後用javascript 來操做 DOM而更新頁面。

 

6、ajax優勢:

1.無刷新更新數據,減小用戶等到時間,更好的用戶體驗

2.異步與服務器通訊,無需打斷用戶,響應更加迅速

3.能夠把服務器的一些負擔轉到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。而且減輕服務器的負擔,AJAX的原則是「按需取數據」,能夠最大程度的減小冗餘請求和響應對服務器形成的負擔,提高站點性能。

4.基於標準化,普遍被支持

二:AJAX最大的特色是什麼。Ajax能夠實現動態刷新(局部刷新)頁面。就是能在不更新整個頁面的前提下維護數據。這使得Web應用程序更爲迅捷地迴應用戶動做,並避免了在網絡上發送那些沒有改變過的信息。

 

7、ajax缺點

1.破壞了前進後退功能,用戶每每經過後退按鈕來取消上一步操做,可是使用ajax沒法實現。能夠使用Gmail來解決這個問題,它只是採用的一個比較笨可是有效的辦法,即用戶單擊後退按鈕訪問歷史記錄時,經過建立或使用一個隱藏的IFRAME來重現頁面上的變動。

2.安全問題。ajax技術就如同對企業數據創建了一個直接通道。這使得開發者在不經意間會暴露比之前更多的數據和服務器邏輯。ajax的邏輯能夠對客戶端的安全掃描技術隱藏起來,容許黑客從遠端服務器上創建新的攻擊。還有自身受到如跨站腳本攻擊,SQL注入等攻擊。

3.對搜索引擎支持較弱

4.一些手持設備不能很好的支持等

 

8、json與jsonp的區別?

  Json:是一種輕量級的數據交換格式。它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小

Jsonp實現數據跨域傳輸的一種手段

 

9、解釋jsonp的原理,以及爲何不是ajax

動態建立一個script標籤,利用script標籤src屬性訪問沒有限制,實現跨域。

 

9、實現原生ajax的四個步驟?

  (1)建立XHR對象

   var xhr = new XMLHttpRequest();

  (2)監聽XHR的狀態改變

   xhr.onreadystatechange = function(){}

  (3)鏈接到Web服務器

   xhr.open(請求方法, URL, 是否爲異步請求);

  (4)發送請求消息

 xhr.send( 請求主體 );

 

10、GET和POST的區別,什麼時候使用POST?

GET:通常用於信息獲取

 POST:通常用於修改服務器上的資源

 (1) 傳遞給服務器端的參數的處理不一樣

    GET請求,參數跟在URL後面

    POST請求,參數放在請求體中提交

 (2) 參數的限制

    GET請求,對參數的大小和長度有限制

    POST請求,沒有限制

 (3) 安全性

    GET請求:安全性不好

    POST請求:相對安全

使用 POST 請求:

沒法使用緩存文件(更新服務器上的文件或數據庫)

向服務器發送大量數據(POST 沒有數據量限制)

發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

 

11、http請求由三部分組成,分別是:請求行、消息報頭、請求正文

HTTP(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式,HTTP1.1版本中給出一種持續鏈接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

 

 

 

簡歷面試題:

一.HTML5和CSS3新特性:

CSS3新特性:圓角border-radius,陰影 box-shadow,旋轉transform,動畫animation,過渡模塊transition,

HTML5新特性:視頻video ,音頻audio,畫布canvas,表單控件屬性data,url,email、file、time。新標籤footer,nav,header,section

 

二.對W3C的理解

1. 對於結構要求:標籤閉合,標籤字母要小寫,標籤不要亂嵌套

2.對於css和js來講:使用外鏈css和js,結構,表現,行爲分離三塊,結構清晰,提升頁面加載速度,用戶體驗提升

 

三.對Less理解

 Less語言是css的預處理器,動態性語言,能夠聲明變量,存儲的值能夠隨時調用,還能夠值運算,函數等方式。

 

四.WebStorage和cookie的區別

 webStorage是html5的屬性,分別是sessionStorage和localStorage

相同點:都是保存在服務器端

1.存儲的大小不同,cookie存儲小,數量限制在20個,數據最多不能超過4k,webStorage存儲比較大,能達到5M或者更大。

2.共享方式,cookie在同源下只要沒過時就會一直共享,localStorage在同源中沒被刪除也會共享,sessionStorage在窗口關閉以前在同一個窗口同源下才會共享

3.cookie始終在同源的http請求中攜帶,而sessionStorage和localStorage不會自動把數據發送給服務器,僅在本地保存

4.數據的有效期不同, sessionStorage:僅在當前的瀏覽器窗口關閉有效

localStorage:始終有效,窗口或瀏覽器關閉也一直保存,所以用做持久數據

 Cookie:只在設置的cookie過時時間以前一直有效,即時窗口和瀏覽器關閉

 

五.你對ajax的理解

 Ajax是客戶端向服務器發送異步請求數據的一種技術,從服務器獲取數據,ajax沒必要刷新整個頁面,只需對局部頁面進行更新,提升頁面的加載速度,從而縮短用戶等待時間,改善用戶體驗。

Ajax優勢:

1. 無需刷新就能夠更新數據,減小用戶等待時間,更好的用戶體驗

2. 異步與服務器通訊,無需打斷用戶,響應更加迅速

3. 能夠把服務器端的一些負擔轉到客戶端,利用客戶端閒置的時間來處理。減去服務器的壓力

 

六.講一下MVVM和MVC模式

MVVM模式:

Model(數據模型)負責對數據的存和取,View(視圖負責頁面展現),ViewModel(視圖數據模型,負責業務邏輯處理),MVVM模式是經過視圖模型viewModel來實現鏈接,view和Model是經過viewModel實現數據雙向綁定,分離視圖和數據模型

優勢:1主要目的是分離視圖和模型

      2下降代碼耦合度,提升視圖或者邏輯的複用性

      3提升了模塊的可測試性

MVC模式:Model(模型)處理數據,view(視圖)展現數據的界面,controller(控制器)連接模型和視圖的橋樑

MVC是一種業務邏輯,數據,界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進界面及用戶交互的同時不須要從新編寫業務邏輯。實現分離數據模型和視圖的代碼。

優勢:低耦合,複用性高,可維護性高,分離視圖和模型

MVC和MVVM的區別:

 MVC的控制器變成MVVM的視圖模型,MVVM解決了MVC大量的DOM操做使頁面渲染性能下降,加載速度變慢,影響用戶體驗,當模型Model頻繁發生變化,開發者須要主動更新視圖,MVC的控制器不能直接改變視圖,視圖還要依賴於模型,全部MVVM解決了這些問題

 

七.SQL的理解

 SQL是結構化查詢語言,是一種數據庫查詢語言,和數據庫通訊的語言

 

八.MySQL的理解

 MySQL是關係型數據庫,特色:開源,免費,輕量,跨平臺

優勢:1.免費開源,節約成本

       2.性能優越,執行速度很是快

       3.操做簡單,學習成本低

       4.應用普遍

 

九.git的理解

 Git是構建代碼管理工具,

優勢:1.適合分佈式開發,強調個體

      2.公共服務器壓力和數據量都不會太大

      3.速度快,靈活

      4.任意兩個開發者之間能夠很容易的解決衝突

      5.離線工做

 

十.Git和svn的區別

 1.git是分佈式的,svn不是

 2.git和svn的分支不一樣

 3.git的內容完整性要高於svn

git和svn的區別是什麼?

http://blog.csdn.net/saint1126/article/details/5953339

1.GIT是分佈式的,SVN不是:

2.GIT把內容按元數據方式存儲,而SVN是按文件:

3.GIT分支和SVN的分支不一樣:

4.GIT沒有一個全局的版本號,而SVN有:

5.GIT的內容完整性要優於SVN:

1.SVN優缺點優勢: 一、管理方便,邏輯明確,符合通常人思惟習慣。  二、易於管理,集中式服務器更能保證安全性。  三、代碼一致性很是高。  四、適合開發人數很少的項目開發。 缺點: 一、服務器壓力太大,數據庫容量暴增。  二、若是不能鏈接到服務器上,基本上不能夠工做,看上面第二步,若是服務器不能鏈接   上,就不能提交,還原,對比等等。 三、不適合開源開發但 是通常集中式管理的有很是明確的權限管理機制(例如分支訪問限制),能夠實現分層管理,從而很好的解決開發人數衆多的問題。

2.Git優缺點優勢:一、適合分佈式開發,強調個體。 二、公共服務器壓力和數據量都不會太大。 三、速度快、靈活。 四、任意兩個開發者之間能夠很容易的解決衝突。 五、離線工做。 缺點:一、學習週期相對而言比較長。 二、不符合常規思惟。 三、代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。

 

十一.Vue的理解

  Vue是一套用於構建用戶界面的漸進式框架,能夠爲複雜的單頁面應用提供驅動,支持組件化,能夠將頁面封裝成不少個組件,數據驅動加組件化的前端開發,經過簡單的API實現響應式的數據綁定和組合的視圖組件,核心是關注視圖層,是一個構建數據驅動頁面的一個框架,將數據綁定視圖上,vue提供數據和視圖雙向綁定原理使咱們開發頁面更簡單,修改了數據,視圖會自動更新。Vue是模塊化和組件化,若是頁面要更新數據,在組件來修改就能夠。

Vue有幾個特色:1簡潔2輕量3快速4模塊化5組件化6數據驅動

Vue組件的過程:組件能夠提高整個項目的開發效率,可以把頁面拆分爲多個獨立的模塊,解決了效率低,難維護,複用性,等問題。

Vue的生命週期

生命週期就是鉤子函數,主要是在何時來調用這些函數,好比是在建立,掛載,更新,銷燬完成以後仍是以前,初始化數據完成以前仍是以後等

從開始建立、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列

過程,咱們稱這是 Vue 的生命週期

beforeCreate : 數據聲明還沒被調用時使用

created : vue渲染完畢後,全部數據和方法初始化後調用

mounted : 掛載元素以後

updated : 若是對數據統一處理,在這裏寫上相應函數

beforeDestroy : 能夠作一個確認中止事件的確認框

nextTick : 更新數據後當即操做dom

BeforeMount 掛載開始以前被調用

vue生命週期的做用是什麼?

答:它的生命週期中有多個事件鉤子,讓咱們在控制整個Vue實例的過程時更容易造成好的邏輯。

第一次頁面加載會觸發哪幾個鉤子?

答:第一次頁面加載時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子

 

十二.jQuery的理解

 jQuery是一個輕量級的javascript框架,極大的簡化了js的編程。

1.首先jQuery提供了強大的元素選擇器。用於獲取html頁面中封裝了html元素的jQuery對象。像常見的選擇器有:基本選擇器,層次選擇器,過濾選擇器,表單選擇器。

2.第二點就是jQuery提供了對css樣式操做的支持,像對class屬性的增長刪除切換操做。還有對單個樣式操做的支持的css方法,提供了一種簡潔統一的操做樣式的方法。

3.第三點就是jQuery出色的DOM操做的封裝,極大的簡化了javascript的對dom節點的增刪改查操做,讓咱們能夠使用一種更加簡潔的方法來操做節點。

4.第四點就是jQuery仍是一個爲事件處理特色設計的框架,提供了靜態綁定事件和動態綁定事件,完善了事件的處理機制。

5.jQuery解決了大量瀏覽器之間的兼容性的問題。

6.jQuery極大的簡化ajax編程,提供了一種更加簡潔,統一的編程方式。

7.jQuery內置了一些簡單有用的內置動畫,像常見的slideDown/slideUp,hide/show,fadeIn/fadeOut等,還支持基於定位機制使用animate來自定義動畫效果。

 

十三:webpack和gulp的理解

Gulp 是一個任務管理工具,讓簡單的任務更清晰,讓複雜的任務易於掌控,對代碼進行構建的工具

webpack是一個前端模塊化方案,更側重模塊打包,webpack是一款模塊加載兼打包工具,它能夠將js、jsx、coffee、樣式sass、less,圖片等做爲模塊來使用和處理。

 

十四:爲何離開上一家公司

 1.與本身的規劃不符合了,須要從新調整本身

 2.本身嘗試新的挑戰

 

十5、什麼是 MVVM , mvp和 MVC 是什麼區別, 原理是什麼?

mvc的界面和邏輯關聯緊密,數據直接從數據庫讀取,必須經過Controller來承上啓下,通訊都是單向的。mvvm的View 和 ViewModel能夠互相通訊,界面數據從viewmodel中獲取。

區別:mvc和mvvm都是一種設計思想。主要就是mvc中Controller演變成mvvm中的viewModel。mvvm主要解決了mvc中大量的DOM 操做使頁面渲染性能下降,加載速度變慢,影響用戶體驗。和當 Model 頻繁發生變化,開發者須要主動更新到View 。

Mvc的實現視圖和模型的分離,避免了視圖和模型糅合在一塊兒,當視圖改變的時候只要業務邏輯沒變就不須要改變模型,缺點控制器不能直接更新視圖,視圖依然依賴模型的數據來顯示

Mvp是針對mvc缺點進行改進,mvp分爲模型,視圖,展現器。Mvp用展現器代替了控制器,展現器直接更新視圖,因此mvp的展現器能夠處理視圖的請求並傳送到模型又能夠根據模型的變化更新視圖,實現了視圖和模型的徹底分離

Mvvm是mvp的進一步發展,徹底實現視圖和模型的分離。Mvvm的視圖模型代替了mvp的展現器,視圖模型和視圖實現雙向綁定,當視圖發生變化的時候視圖模型也會改變,視圖模型變化的時候視圖也發生改變

 

十6、MVC的理解

用一種業務邏輯,數據,界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面.在改進和個性化定製界面及用戶交互的同時不須要從新編寫業務邏輯,這種開發模式爲合理組織代碼提供了方便、下降了代碼間的耦合度、功能結構清晰可見

M模型(Model)通常用來處理數據(讀取/設置),通常指操做數據庫。

V視圖(View)通常用來展現數據,好比經過HTML展現。

C控制器(Controller)通常用作鏈接模型和視圖的橋樑。

 

 

css面試題

一.描述基於class的選擇器與基於id選擇器在性能上的區別。

答:基於class的選擇性的性能相對於基於id選擇器開銷很大,由於其須要遍歷全部DOM元素。 

 

2、如何優化網頁加載速度

1.  減小css,js文件數量及大小,壓縮css和js代碼

2. 圖片預加載

3. 把css放置頂部。把js放置在底部

4. 減小http請求

5. 使用外部文件js和css

6. 少用全局變量,緩存dom節點查找的結果

 

3、display:none和visibility:hidden的區別?

display:none  隱藏對應的元素,在文檔佈局不佔據空間

visibility:hidden  隱藏對應的元素,可是在文檔佈局中仍保留原來的空間。

 

4、CSS中 link 和@import 的區別是?

(1) link屬於HTML標籤,而@import是CSS提供的;

(2) 頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;

(3) import只在IE5以上才能識別,而link是HTML標籤,無兼容問題;

(4) link方式的樣式的權重 高於@import的權重.

 

5、介紹一下CSS的盒子模型?

(1)有兩種,IE 盒子模型、標準 W3C 盒子模型;IE的content部分包含了border和padding;

(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border).

 

六.解釋下浮動和它的工做原理

浮動元素不會佔據文檔流

當浮動元素碰到包含它的元素的邊框或者其餘浮動元素的邊框時會停留下來。

 

7、. 前端頁面有哪三層構成,分別是什麼?做用是什麼?

 結構層Html 表示層CSS 行爲層 js

結構層:對網頁內容的語義含義作出了描述,

表示層:如何顯示有關內容」的問題作出了回答。

 行爲層:內容應該如何對事件作出反應

 

8、標籤上title與alt屬性的區別是什麼?

Alt 當圖片不顯示是 用文字表明。Title 爲該屬性提供信息

 

九:簡述一下src與href的區別

href 是指向網絡資源所在位置,創建和當前元素(錨點)或當前文檔(連接)之間的連接,用於超連接。

src是指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文檔內,例如js腳本,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其餘資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,相似於將所指向資源嵌入當前標籤內。這也是爲何將js腳本放在底部而不是頭部。

 

十:對WEB標準以及W3C的理解與認識     

標籤閉合、標籤小寫、不亂嵌套、提升搜索機器人搜索概率、使用外 鏈css和js腳本、結構行爲表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更普遍的設備所訪問、更少的代碼和組件,容易維 護、改版方便,不須要變更頁面內容、提供打印版本而不須要複製內容、提升網站易用性;

 

十一:語義化的理解?

• HTML語義化就是讓頁面的內容結構化,便於對瀏覽器、搜索引擎解析;

• 在沒有樣式CSS狀況下也以一種文檔格式顯示,而且是容易閱讀的;

• 搜索引擎的爬蟲依賴於標記來肯定上下文和各個關鍵字的權重,利於SEO。

• 使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解。

 

十二:前端頁面有哪三層構成,分別是什麼?做用是什麼?

結構層、表示層、行爲層。

網頁的結構層(structural layer)由HTML或XHTML之類的標記語言負責建立。

網頁的表示層(presentation layer)由CSS負責建立。 CSS對「如何顯示有關內容」的問題作出了回答。

網頁的行爲層(behavior layer)負責回答「內容應該如何對事件作出反應

 

 

angular面試題

一。angular理解:

·使用AngularJS構建應用時是以模塊化(Module)的方式組織的,即將整個應用劃分紅若干模塊.每個模塊完成一個特定的子功能,全部的模塊按某種方式組織起來,成爲一個總體,完成整個系統所要求的功能.採用模塊化的組織方式,能夠最大程度的實現代碼的複用

 

2、jQuery、vue、angular的區別

·(1)angular是一個mvc框架,  採用model, controller以及view的方式去組織代碼, 會將一個html頁面分紅若干個模塊, 每一個模塊都有本身的scope, service, directive, 各個模塊之間也能夠進行通訊, 可是總體結構上是比較清晰的, 就是說其代碼組織是模塊化的, angular的view可能僅僅是一個框架, , 對view的dom操做或者時間監聽都是在directive中實現的, 並且通常狀況下不多直接去寫dom操做代碼, 只要你監聽model, model發生變化後view也會發生變化, 就是雙向綁定機制, angularjs適用於單頁面開發

(2)jQuery是使用選擇器($)選取DOM對象,對其進行賦值、取值、事件綁定等操做,

 (3)vue是一個漸進式的輕量級框架, 他核心只關注視圖層, 是一個構建數據驅動的web界面,易於上手, 還便於與第三方庫或與既有項目整合,也可以爲複雜的單頁應用程序提供驅動,  vue的話是模塊化和組塊化,若是頁面要更改數據之類的,就只在組件來修改就能夠了,

 

三。Angular和jQuery的區別

jQuery只是一個類庫以DOM作爲驅動(核心),jquery是基於操做DOM, 適用於操做DOM比較多的項目, jquery是一個庫, 比較大,兼容大部分瀏覽器, 有豐富的插件, 可拓展性強, jquery不能向後兼容, 使用插件時,可能會有衝突, 而AngularJS則一個框架(諸多類庫的集合)以數據和邏輯作爲驅動(核心),包含模板和雙向數據綁定, 路由, 模塊化, 服務, 過濾器, 依賴注入等全部功能

 

四。jQuery和vue的區別

    1.jQuery首先要獲取到dom對象,而後對dom對象進行進行值的修改等操做2.Vue是首先把值和js對象進行綁定,而後修改js對象的值,Vue框架就會自動把dom的值就行更新。3.能夠簡單的理解爲Vue幫咱們作了dom操做,咱們之後用Vue就須要修改對象的值和作好元素和對象的綁定,Vue這個框架就會自動幫咱們作好dom的相關操做

4.這種dom元素跟隨JS對象值的變化而變化叫作單向數據綁定,若是JS對象的值也跟隨着dom元素的值的變化而變化就叫作雙向數據綁定

 

五。angularJS和vue.js的區別

一angular是mvvm框架, 而vue是一個漸進式的框架, 至關於view層, 都有雙向數據綁定,  可是angular中的雙向數據綁定是基於髒檢查機制, vue的雙向數據綁定是基於  ES5的getter和setter來實現, 而angular是有本身實現一套模板編譯規則,vue比angular更輕量, 性能上更高效, 比angular更容易上手, 學習成本低, vue須要一個el對象進行實例化, 而angular是整個html頁面下的,單頁面應用, 而vue能夠有過個vue實例

 

六。angularJS雙向數據綁定的原理?

監視函數 $watch隊列

當咱們去作數據綁定時,ng框架會自動的給數據添加一個監聽watcher,對應有一個回調當數據變化時,更新視圖

若是知道數據發生了變化?

ng會週期性的執行一個函數來檢查模型數據是否發生了變化->$digest

何時會執行$digest?

ngClick ngSrc經常使用的ng指令都會觸發$digest,也能夠手工觸發$scope.$digest()

$scope.$apply();-->$rootScope.$digest()

 

7、Setinterval和$interval的區別?

 Setintercal 是js 提供的 不帶有自動輪訓功能,沒法進行時刻改變dom數據

 只能手動添加$apply()或者$digest();

$interval是angularJS提供的一中服務,自帶dom數據也循環

 

八, 談談你對webpack的見解

一。WebPack 是一個模塊打包工具,你能夠使用WebPack管理你的模塊依賴,並編繹輸出模塊們所需的靜態文件。它可以很好地管理、打包Web開發中所用到的HTML、JavaScript、CSS以及各類靜態文件(圖片、字體等),讓開發過程更加高效。對於不一樣類型的資源,webpack有對應的模塊加載器。webpack模塊打包器會分析模塊間的依賴關係,最後 生成了優化且合併後的靜態資源。

二。Gulp 和webpack的區別

gulp強調的是前端開發的工做流程,咱們能夠經過配置一系列的task,定義task處理的事務(例如文件壓縮合並、雪碧圖、啓動server、版本控制等),而後定義執行順序,來讓gulp執行這些task,從而構建項目的整個前端開發流程。webpack是一個前端模塊化方案,更側重模塊打包,咱們能夠把開發中的全部資源(圖片、js文件、css文件等)都當作模塊,經過loader(加載器)和plugins(插件)對資源進行處理,打包成符合生產環境部署的前端資源。

 

 

 

 

js面試題

一.描述垃圾回收器的功能。

答:垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲0(沒有其餘對象引用過該對象),或對該對象的唯一引用是循環的,那麼該對象的內存便可回收。

 

二.documen.write和innerHTML的區別?

答:document.write只能重繪整個頁面,innerHTML能夠重繪頁面的一部分

 

三.那些操做會形成內存泄漏?

答:

• 給DOM對象添加的屬性是一個對象的引用。

• DOM對象與JS對象相互引用。

• 給DOM對象用attachEvent綁定事件。

• 從外到內執行appendChild,這時即便調用removeChild也沒法釋放。

• 反覆重寫同一個屬性會形成內存大量佔用。

 

四.一句話說明內存泄漏的定義。

答:內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。

 

五.eval是作什麼的?

答:eval功能是把對應的字符串解析成JS代碼並運行;但不安全,很是耗性能。

 

六.null與undefined的區別?

答:Undefined類型只有一個值,即undefined,當聲明的變量還未被初始化時,變量的默認值爲undefined。Null類型也只有一個值,即null,null用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象。 

 

七.談談對this對象的理解。

答:this是js的一個關鍵字,隨着函數使用場合不一樣,this的值會發生變化。可是有一個總原則,那就是this指的是調用函數的那個對象。

 

八.use strict是什麼意思?

答:表示代碼標誌爲「嚴格模式」,則其中運行的全部代碼都必然是嚴格模式下的。若是在語法檢測時發現語法問題,則整個代碼塊失效,並致使一個語法異常。若是在運行期出現了違反嚴格模式的代碼,則拋出執行異常。

 

九.簡述new操做符的功能。

答:

(1)建立一個空對象,使用this變量引用該對象,同時還繼承了該函數的原型

(2)屬性和方法被加入到this引用的對象中。

(3)新建立的對象由this所引用,而且最後隱式的返回this。 

 

十.描述typeof關鍵字的功能。

答:typeof可用來判斷一個變量是否爲空或是什麼類型的變量。typeof通常只能返回以下幾個結果:number、boolean、string、function、object、undefined。 

 

十一.描述instanceof關鍵字的功能。

答:instanceof可用來判斷一個變量是否爲空或是什麼類型的變量。若是想判斷一個變量是否某個對象的實例建議使用instanceof關鍵字。

 

十二.簡述hasOwnProperty函數的功能。

答:hasOwnProperty函數是用來判斷一個對象是否有你給出名稱的屬性或對象。不過須要注意的是,此方法沒法檢查該對象的原型鏈中是否具備該屬性,該屬性必須是對象自己的一個成員。 

 

十三.簡述一下isPrototypeOf函數的功能。

答:isPrototypeOf函數是用來判斷要檢查其原型鏈的對象是否存在於指定對象實例中,是則返回true,不然返回false。

 

十四.談談對JSON的瞭解。

答:JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。其是基於JavaScript的一個子集,具備數據格式簡單,易於讀寫,佔用空間小的特色。

 

十五.描述一下context的概念。

答:context就是限定查找的範圍,context必須是一個DOM元素,context底層仍是用了.find()方法來實現的。

 

十六.描述一下.delegate()和.live()方法的區別。

答:delegate方法指定了委託對象,live方法委託給了jQuery的context,1.9版本之後用on方法代替了。

 

十七.描述一下.attr()和.prop()方法的區別。

答:.attr()方法是操做屬性節點,.prop()方法是操做獲取到的對應js對象的屬性。在遇到要獲取或設置checked、selected、readonly和disabled等屬性時,用prop方法顯然更好。.prop()方法更高效,由於.attr()方法要訪問DOM。

 

十八。apply()與call()的區別?

功能同樣, 都是將當前函數做爲指定對象的方法執行, 即函數中的this是指定對象

參數不同,apply傳遞的參數是this和一個數組,call傳入的參數是this和一串參數列表

 

十九.JavaScript 中 this 是如何工做的。

•做爲函數調用,this指向window

•外層函數對應的對象上,這是JavaScript的缺陷,用that替換。

•做爲構造函數使用,this 綁定到新建立的對象。

•做爲對象方法使用,this 綁定到該對象。

•使用apply或call調用 this 將會被顯式設置爲函數調用的第一個參數。

 

二10、十次完整的HTTP事務是怎樣一個過程

域名解析 --> 發起TCP的3次握手 --> 創建TCP鏈接後發起http請求 --> 服務器響應http請求,瀏覽器獲得html代碼 --> 瀏覽器解析html代碼,並請求html代碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現給用戶

 

二11、HTML5的離線儲存?

• localStorage    長期存儲數據,瀏覽器關閉後數據不丟失;

• sessionStorage  數據在瀏覽器關閉後自動刪除。

 

二12、如何實現瀏覽器內多個標籤頁之間的通訊?

調用localstorge、cookies等本地存儲方式

 

二十3、線程與進程的區別?

一個程序至少有一個進程,一個進程至少有一個線程.

線程的劃分尺度小於進程,使得多線程程序的併發性高。 

另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。 

線程在執行過程當中與進程仍是有區別的。每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。 

從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

 

二十4、js的全局函數有哪些,js的內置對象有那些?分別各列舉5個

decodeURI() 解碼某個編碼的 URI。

decodeURIComponent() 解碼一個編碼的 URI 組件。

encodeURI() 把字符串編碼爲 URI。

encodeURIComponent() 把字符串編碼爲 URI 組件。

escape() 對字符串進行編碼。

eval() 計算 JavaScript 字符串,並把它做爲腳本代碼來執行。

getClass() 返回一個 JavaObject 的 JavaClass。

isFinite() 檢查某個值是否爲有窮大的數。

isNaN() 檢查某個值是不是數字。

Number() 把對象的值轉換爲數字。

parseFloat() 解析一個字符串並返回一個浮點數。

parseInt() 解析一個字符串並返回一個整數。

String() 把對象的值轉換爲字符串。

unescape() 對由 escape() 編碼的字符串進行解碼。

 

二十5、哪些操做會形成內存泄漏?

內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。

垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲 0(沒有其餘對象引用過該對象),或對該對象的唯一引用是循環的,那麼該對象的內存便可回收。

1. setTimeout 的第一個參數使用字符串而非函數的話,會引起內存泄漏。

2. 閉包

3. 控制檯日誌

4. 循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)

 

二十6、DOM操做——怎樣添加、移除、移動、複製、建立和查找節點。

(1)建立新節點

        createDocumentFragment()  //建立一個DOM片斷

       createElement()   //建立一個具體的元素

        createTextNode()   //建立一個文本節點

(2)添加、移除、替換、插入

       appendChild()

        removeChild()

        replaceChild()

           insertBefore() //在已有的子節點前插入一個新的子節點

(3)查找

       getElementsByTagName() //經過標籤名稱

  getElementsByName() //經過元素的Name屬性的值(IE容錯能力較強,會獲得一個數組,其中包括id等於name值的)

  getElementById() //經過元素Id,惟一性

 

二十七:js的類型轉換,強制轉換和隱式轉換

顯示:toString()轉換爲字符串

  parseInt()轉換爲整數

parseFloat()轉換爲浮點型數據

Number()若是轉換的內容中包含非法字符,結果爲 NaN

強制:Boolean(value) - 把給定的值轉換成 Boolean 型;

Number(value) - 把給定的值轉換成數字(能夠是整數或浮點數);

String(value) - 把給定的值轉換成字符串;

隱式:null,undefined,boolean,string,number,object。object是引用類型

 

二十八:簡述同步和異步的區別

同步是阻塞模式,異步是非阻塞模式。

同步就是指一個進程在執行某個請求的時候,若該請求須要一段時間才能返回信息,那麼這個進程將會一直等待下去,直到收到返回信息才繼續執行下去;

異步是指進程不須要一直等下去,而是繼續執行下面的操做,無論其餘進程的狀態。當有消息返回時系統會通知進程進行處理,這樣能夠提升執行的效率。

做者:xuguibin 連接:https://www.jianshu.com/p/ff4fdea3f2fa
相關文章
相關標籤/搜索