App下載

騰訊前端程序員第一輪面試問(wèn)題答案

猿友 2017-09-12 18:48:53 瀏覽數(shù) (4546)
反饋

  此前,w3cschool app開(kāi)發(fā)者頭條上分享了“騰訊C++初面面經(jīng)”,不少的程序員小伙伴想問(wèn)有沒(méi)有前端開(kāi)發(fā)員面經(jīng)之類(lèi)的。


  那么,今天w3cschool這里給小伙伴們挑選騰訊前端第一輪面試的兩個(gè)問(wèn)題,并解答。

  1、Angular的特性:

  #1 良好的應(yīng)用程序結(jié)構(gòu)

  通常情況下,我們編寫(xiě) JavaScript 沒(méi)有明確的結(jié)構(gòu)。雖然在編寫(xiě)小應(yīng)用程序的時(shí)候沒(méi)有問(wèn)題,但這顯然是不適合于大規(guī)模的應(yīng)用程序。使用 AngularJS,您可以通過(guò)MVC(模型 - 視圖 - 控制器)或MVVM (模型 - 視圖 - 視圖模型)模式來(lái)組織源代碼。 AngularJS 是一個(gè) MVW 框架,其中W代表可以用于任何項(xiàng)目。你可以組織你的代碼模塊,它可顯著提高應(yīng)用程序的可測(cè)試性和可維護(hù)性。

  #2 雙向數(shù)據(jù)綁定

  數(shù)據(jù)綁定肯定是 AngularJS 最佳功能之一。你可以聲明綁定的模型到 HTML 元素。當(dāng)模型發(fā)生變化時(shí),視圖會(huì)自動(dòng)更新,反之亦然。這可以減少大量的傳統(tǒng)樣板代碼,保持模型和視圖同步。

  #3 指令

  AngularJS 指令讓你使用 HTML 新語(yǔ)法快速的構(gòu)建應(yīng)用程序。您可以創(chuàng)建可重用的自定義組件與指令的API。例如,如果你想自定義日期選擇器小部件,你可以創(chuàng)建一個(gè)組件。如果你想要一個(gè)奇特的文件上傳與進(jìn)度指示器可以繼續(xù)創(chuàng)建一個(gè)組件。很酷,不是嗎?

  #4 HTML 模板

  AngularJS 使用 HTML 模板,這使事情變得簡(jiǎn)單,并允許設(shè)計(jì)人員和開(kāi)發(fā)人員同時(shí)工作。設(shè)計(jì)人員可以按照通常的方式創(chuàng)建用戶(hù)界面,而開(kāi)發(fā)人員可以使用聲明性綁定語(yǔ)法很容易配合不同的UI組件的數(shù)據(jù)模型。

  #5 可嵌入、注入和測(cè)試

  關(guān)于 AngularJS 的最好的事情是,它是一個(gè)很好的團(tuán)隊(duì)成員。它從來(lái)沒(méi)有要求全面承諾。AngularJS 官方網(wǎng)站說(shuō),你可以根據(jù)你需要使用盡可能多或盡可能少的在項(xiàng)目中使用 AngularJS。如果你只需要雙向數(shù)據(jù)綁定,您可以引入 Angular,只是使用此功能。

  AngularJS 支持依賴(lài)注入的開(kāi)箱即用。如果你需要的東西,你只要調(diào)用 Angular 來(lái)注入。就這么簡(jiǎn)單。這巨大的提高可測(cè)試性,因?yàn)槟憧梢院苋菀椎卦跍y(cè)試的模擬組件。

  AngularJS 在創(chuàng)建時(shí)候始終考慮著可測(cè)試性。這些模塊和依賴(lài)注入系統(tǒng),使得單元測(cè)試更容易。此外, AngularJS 提供了一個(gè)稱(chēng)為量角器工具,這使得終端到終端的測(cè)試變得輕而易舉。所以,你開(kāi)發(fā)的代碼始終是可測(cè)試性和可維護(hù)性。

  這還不是全部! AngularJS 還提供了更多的實(shí)用功能,如路由,過(guò)濾器,和動(dòng)畫(huà)等等。

  2、slice,substr和substring的區(qū)別

  首先,他們都接收兩個(gè)參數(shù),slice和substring接收的是起始位置和結(jié)束位置(不包括結(jié)束位置),而substr接收的則是起始位置和所要返回的字符串長(zhǎng)度。直接看下面例子:

  1 var test = 'hello world';

  2

  3 alert(test.slice(4,7)); //o w

  4 alert(test.substring(4,7)); //o w

  5 alert(test.substr(4,7)); //o world

  這里有個(gè)需要注意的地方就是:substring是以?xún)蓚€(gè)參數(shù)中較小一個(gè)作為起始位置,較大的參數(shù)作為結(jié)束位置。

  如:

alert(test.substring(7,4));         //o w

  接著,當(dāng)接收的參數(shù)是負(fù)數(shù)時(shí),slice會(huì)將它字符串的長(zhǎng)度與對(duì)應(yīng)的負(fù)數(shù)相加,結(jié)果作為參數(shù);substr則僅僅是將第一個(gè)參數(shù)與字符串長(zhǎng)度相加后的結(jié)果作為第一個(gè)參數(shù);substring則干脆將負(fù)參數(shù)都直接轉(zhuǎn)換為0。測(cè)試代碼如下:

  1 var test = 'hello world';

  2

  3 alert(test.slice(-3)); //rld

  4 alert(test.substring(-3)); //hello world

  5 alert(test.substr(-3)); //rld

  6 alert(test.slice(3,-4)); //lo w

  7 alert(test.substring(3,-4)); //hel

  8 alert(test.substr(3,-4)); //空字符串

  1 注意:IE對(duì)substr接收負(fù)值的處理有錯(cuò),它會(huì)返回原始字符串。


0 人點(diǎn)贊