2019前端框架面試題 —— Round one
1.說說MVC和MVVM分別是什麼?
MVC全名是Model View 。是Controller模型(model)-視圖(view)-控制器(controller)的縮寫。MVC是比較直觀的架構模式,用戶操作->View(負責接收用戶的輸入操作)->Controller(業務邏輯處理)->Model(數據持久化)->View(將結果反饋給View)。
MVVM是Model-View-ViewModel的簡寫,MVVM是將「數據模型數據雙向綁定」的思想作為核心,因此在View和Model之間沒有聯繫,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數據的變化會同時修改數據源,而數據源數據的變化也會立即反應view。
2.請描述你所熟悉的Web伺服器框架(如Django)作為一個成熟的Web框架,需要提供哪些重要的功能模塊?
提供了網站開發的常用模塊:處理用戶請求、操作資料庫、模板渲染、配置文件管理等
image.png
Node
3.Node.js的適用場景?
- 高並發、聊天、實時消息推送
- 實時應用:如在線聊天,實時通知推送等等(如socket.io)
- 分散式應用:通過高效的並行I/O使用已有的數據
- 工具類應用:海量的工具,小到前端壓縮部署(如grunt),大到桌面圖形界面應用程序
- 遊戲類應用:遊戲領域對實時和並發有很高的要求(如網易的pomelo框架)
- 利用穩定介面提升Web渲染能力
- 前後端編程語言環境統一:前端開發人員可以非常快速地切入到伺服器端的開發(如著名的純Javascript全棧式MEAN架構)
?g是什麼?
在Node.js中-g表示全局安裝模塊
4.了解npm,spm,nodejs嗎,請簡要描述?
NPM便於JavaScript開發者共享和重用代碼,它可以很容易地更新你的代碼;再分享。是全球最大的開源庫生態系統。
SPM是淘寶社區電商業務(xTao)為外部合作夥伴(外站)提供的一套跟蹤引導成交效果數據的解決方案。
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。它使我們能夠在本地運行javascript。
(如果會用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?
伺服器Node.js和瀏覽器js的區別是什麼?Node.js把js從客戶端遷移了到服務端、主要做了哪些工作?為什麼說Node.js適合做高並發的互聯網應用?
Node採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是為文件系統、資料庫之類的資源提供介面。Node.js 使用事件驅動,非阻塞I/O 模型而得以輕量和高效,非常適合在分散式設備上運行數據密集型的實時應用。
對Node的優點和缺點提出了自己的看法?
*(優點)因為Node是基於事件驅動和無阻塞的,所以非常適合處理並發請求,
因此構建在Node上的代理伺服器相比其他技術實現(如Ruby)的伺服器表現要好得多。
此外,與Node代理伺服器交互的客戶端代碼是由javascript語言編寫的,
因此客戶端和伺服器端都用同一種語言編寫,這是非常美妙的事情。
*(缺點)Node是一個相對新的開源項目,所以不太穩定,它總是一直在變,
而且缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。
image.png
React
react虛擬DOM運行機制是什麼?
在React中,render執行的結果得到的並不是真正的DOM節點,結果僅僅是輕量級的JavaScript對象,我們稱之為virtual DOM(虛擬dom)
react中prop和state的區別?
需要理解的是,props是一個父組件傳遞給子組件的數據流,這個數據流可以一直傳遞到子孫組件。而state代表的是一個組件內部自身的狀態(可以是父組件、子孫組件)。
redux的原理?
Redux 把一個應用程序中,所有應用模塊之間需要共享訪問的數據,都應該放在 State 對象中。這個應用模塊可能是指 React Components,也可能是你自己訪問 AJAX API 的代理模塊,具體是什麼並沒有一定的限制。State 以 「樹形」 的方式保存應用程序的不同部分的數據。這些數據可能來自於網路調用、本地資料庫查詢、甚至包括當前某個 UI 組件的臨時執行狀態(只要是需要被不同模塊訪問)
react和vue有哪些不同,說說你對這兩個框架的看法
相同點
- 都支持伺服器端渲染
- 都有Virtual DOM,組件化開發,通過props參數進行父子組件數據的傳遞,都實現webComponent規範
- 數據驅動視圖
- 都有支持native的方案,React的React native,Vue的weex
不同點
- React嚴格上只針對MVC的view層,Vue則是MVVM模式
- virtual DOM不一樣,vue會跟蹤每一個組件的依賴關係,不需要重新渲染整個組件樹.而對於React而言,每當應用的狀態被改變時,全部組件都會重新渲染,所以react中會需要shouldComponentUpdate這個生命周期函數方法來進行控制
- 組件寫法不一樣, React推薦的做法是 JSX + inline style, 也就是把HTML和CSS全都寫進JavaScript了,即』all in js』; Vue推薦的做法是webpack+vue-loader的單文件組件格式,即html,css,js寫在同一個文件;
- 數據綁定: vue實現了數據的雙向綁定,react數據流動是單向的
- state對象在react應用中不可變的,需要使用setState方法更新狀態;在vue中,state對象不是必須的,數據由data屬性在vue對象中管理
image.png
Vue
怎麼定義vue-router的動態路由?怎麼獲取傳過來的動態參數?
在router目錄下的index.js文件中,對path屬性加上/:id。 使用router對象的params.id
vue-router有哪幾種導航鉤子?
三種,一種是全局導航鉤子:router.beforeEach(to,from,next),作用:跳轉前進行判斷攔截。第二種:組件內的鉤子;第三種:單獨路由獨享組件
vuex是什麼?怎麼使用?哪種功能場景使用它?
vue框架中狀態管理。在main.js引入store,注入。新建了一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登錄狀態、加入購物車
Vue的雙向數據綁定原理是什麼?
vue.js 是採用數據劫持結合發布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變動時發布消息給訂閱者,觸發相應的監聽回調。
請詳細說下你對vue生命周期的理解?
總共分為8個階段創建前/後,載入前/後,更新前/後,銷毀前/後。
- 創建前/後: 在beforeCreated階段,vue實例的掛載元素
$el和數據對象data都為undefined,還未初始化。在created階段,vue實例的數據對象data有了,$el還沒有。
- 載入前/後:在beforeMount階段,vue實例的$el和data都初始化了,但還是掛載之前為虛擬的dom節點,data.message還未替換。在mounted階段,vue實例掛載完成,data.message成功渲染。
- 更新前/後:當data變化時,會觸發beforeUpdate和updated方法。
- 銷毀前/後:在執行destroy方法後,對data的改變不會再觸發周期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,但是dom結構依然存在
說下vue組件之間的通信?
非父子組件間通信,Vue 有提供 Vuex,以狀態共享方式來實現同信,對於這一點,應該注意考慮平衡,從整體設計角度去考量,確保引入她的必要。
父傳子: this.$refs.xxx 子傳父: this.$parent.xxx
還可以通過$emit方法出發一個消息,然後$on接收這個消息
什麼是RESTful API?怎麼使用?
是一個api的標準,無狀態請求。請求的路由地址是固定的,如果是tp5則先路由配置中把資源路由配置好。標準有:.post .put .delete
image.png
Webpack
談談你對webpack的看法
WebPack 是一個模塊打包工具,你可以使用WebPack管理你的模塊依賴,並編繹輸出模塊們所需的靜態文件。它能夠很好地管理、打包Web開發中所用到的HTML、JavaScript、CSS以及各種靜態文件(圖片、字體等),讓開發過程更加高效。對於不同類型的資源,webpack有對應的模塊載入器。webpack模塊打包器會分析模塊間的依賴關係,最後 生成了優化且合併後的靜態資源。
webpack的兩大特色:
- code splitting(可以自動完成)
- loader 可以處理各種類型的靜態文件,並且支持串聯操作
- webpack 是以commonJS的形式來書寫腳本滴,但對 AMD/CMD 的支持也很全面,方便舊項目進行代碼遷移。
webpack具有requireJs和browserify的功能,但仍有很多自己的新特性:
- 對 CommonJS 、 AMD 、ES6的語法做了兼容
- 對js、css、圖片等資源文件都支持打包
- 串聯式模塊載入器以及插件機制,讓其具有更好的靈活性和擴展性,例如提供對CoffeeScript、ES6的支持
- 有獨立的配置文件webpack.config.js
- 可以將代碼切割成不同的chunk,實現按需載入,降低了初始化時間
- 支持 SourceUrls 和 SourceMaps,易於調試
- 具有強大的Plugin介面,大多是內部插件,使用起來比較靈活
- webpack 使用非同步 IO 並具有多級緩存。這使得 webpack 很快且在增量編譯上更加快
美圖分享
TAG:極客教程 |