成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Angular面試從喜劇到悲劇的十個問題

Scholer / 667人閱讀

摘要:雖然只有個問題,但是覆蓋了開發(fā)中的各個方面,有基本的知識點,也有在開發(fā)過程中遇見的問題,同時也有較為開放性的問題去辨別面試者的基礎水準和項目經(jīng)驗如果自己一年前面試肯定是喜劇到悲劇的轉(zhuǎn)變。

雖然只有10個問題,但是覆蓋了angular開發(fā)中的各個方面,有基本的知識點,也有在開發(fā)過程中遇見的問題,同時也有較為開放性的問題去辨別面試者的基礎水準和項目經(jīng)驗如果自己一年前面試肯定是喜劇到悲劇的轉(zhuǎn)變?。(PS:答案僅供參考~)。

1. ng-show/ng-hideng-if的區(qū)別?

我們都知道ng-show/ng-hide實際上是通過display來進行隱藏和顯示的。而ng-if實際上控制dom節(jié)點的增刪除來實現(xiàn)的。因此如果我們是根據(jù)不同的條件來進行dom節(jié)點的加載的話,那么ng-if的性能好過ng-show.

2.解釋下什么是$rootScrope以及和$scope的區(qū)別?

通俗的說$rootScrope 頁面所有$scope父親。

我們來看下如何產(chǎn)生$rootScope$scope吧。

step1:Angular解析ng-app然后在內(nèi)存中創(chuàng)建$rootScope。

step2:angular回繼續(xù)解析,找到{{}}表達式,并解析成變量。

step3:接著會解析帶有ng-controller的div然后指向到某個controller函數(shù)。這個時候在這個controller函數(shù)變成一個$scope對象實例。

3. 表達式 {{yourModel}}是如何工作的?

它依賴于 $interpolation服務,在初始化頁面html后,它會找到這些表達式,并且進行標記,于是每遇見一個{{}},則會設置一個$watch。而$interpolation會返回一個帶有上下文參數(shù)的函數(shù),最后該函數(shù)執(zhí)行,則算是表達式$parse到那個作用域上。

4. Angular中的digest周期是什么?

每個digest周期中,angular總會對比scope上model的值,一般digest周期都是自動觸發(fā)的,我們也可以使用$apply進行手動觸發(fā)。更深層次的研究,可以移步The Digest Loop and apply。

5. 如何取消 $timeout, 以及停止一個$watch()?

停止 $timeout我們可以用cancel:

var customTimeout = $timeout(function () {
  // your code
}, 1000);

$timeout.cancel(customTimeout);

停掉一個$watch

// .$watch() 會返回一個停止注冊的函數(shù)
function that we store to a variable
var deregisterWatchFn = $rootScope.$watch(‘someGloballyAvailableProperty’, function (newVal) {
  if (newVal) {
    // we invoke that deregistration function, to disable the watch
    deregisterWatchFn();
    ...
  }
});
6. Angular Directive中restrict 中分別可以怎樣設置?scope中@,=,&有什么區(qū)別?

restrict中可以分別設置:

A匹配屬性

E匹配標簽

C匹配class

M 匹配注釋

當然你可以設置多個值比如AEC,進行多個匹配。

在scope中,@,=,&在進行值綁定時分別表示

@獲取一個設置的字符串,它可以自己設置的也可以使用{{yourModel}}進行綁定的;

= 雙向綁定,綁定scope上的一些屬性;

& 用于執(zhí)行父級scope上的一些表達式,常見我們設置一些需要執(zhí)行的函數(shù)

angular.module("docsIsolationExample", [])
.controller("Controller", ["$scope", function($scope) {
  $scope.alertName = function() {
      alert("directive scope &");
  }
}])
.directive("myCustomer", function() {
  return {
    restrict: "E",
    scope: {
      clickHandle: "&"
    },
    template: "",
    controller: function($scope) {
      
      $scope.testClick = function() {
        $scope.clickHandle();
        
      }  
    }
  };
});

Codepen Demo

< 進行單向綁定。

7. 列出至少三種實現(xiàn)不同模塊之間通信方式?

Service

events,指定綁定的事件

使用 $rootScope

controller之間直接使用$parent, $$childHead

directive 指定屬性進行數(shù)據(jù)綁定

8. 有哪些措施可以改善Angular 性能

官方提倡的,關(guān)閉debug,$compileProvider

myApp.config(function ($compileProvider) {
  $compileProvider.debugInfoEnabled(false);
});

使用一次綁定表達式即{{::yourModel}}

減少watcher數(shù)量

在無限滾動加載中避免使用ng-repeat,關(guān)于解決方法可以參考這篇文章

使用性能測試的小工具去挖掘你的angular性能問題,我們可以使用簡單的console.time()也可以借助開發(fā)者工具以及Batarang

console.time("TimerName");
//your code
console.timeEnd("TimerName");
9. 你認為在Angular中使用jQuery好么?

這是一個開放性的問題,盡管網(wǎng)上會有很多這樣的爭論,但是普遍還是認為這并不是一個特別好的嘗試。其實當我們學習Angular的時候,我們應該做到從0去接受angular的思想,數(shù)據(jù)綁定,使用angular自帶的一些api,合理的路由組織和,寫相關(guān)指令和服務等等。angular自帶了很多api可以完全替代掉jquery中常用的api,我們可以使用angular.element,$http,$timeout,ng-init等。

我們不妨再換個角度,如果業(yè)務需求,而對于一個新人(比較熟悉jQuery)的話,或許你引入jQuery可以讓它在解決問題,比如使用插件上有更多的選擇,當然這是通過影響代碼組織來提高工作效率,隨著對于angular理解的深入,在重構(gòu)時會逐漸摒棄掉當初引入jquery時的一些代碼。(?Po主就是這樣的人,希望不要被嘲笑,業(yè)務卻是趕著走)

所以我覺得兩種框架說完全不能一起用肯定是錯的,但是我們還是應該盡力去遵循angular的設計

10. 如何進行angular的單元測試

我們可以使用karam+jasmine 進行單元測試,我們通過ngMock引入angular app然后自行添加我們的測試用例。
一段簡單的測試代碼:

describe("calculator", function () {

  beforeEach(module("calculatorApp"));

  var $controller;

  beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
  }));

  describe("sum", function () {
        it("1 + 1 should equal 2", function () {
            var $scope = {};
            var controller = $controller("CalculatorController", { $scope: $scope });
            $scope.x = 1;
            $scope.y = 2;
            $scope.sum();
            expect($scope.z).toBe(3);
        });    
    });

});

關(guān)于測試,大家可以看下使用karma進行angular測試

除了Karam , Angular.js團隊推出了一款e2e(end-to-end)的測試框架protractor

參考

11 Essential AngularJS Interview Questions

11 Tips to Improve AngularJS Performance

AngularJS: My solution to the ng-repeat performance problem

29 AngularJS Interview Questions – Can You Answer Them All?

The Digest Loop and $apply

What is the difference between "@" and "=" in directive scope

Angular compile

本文同步博客:http://www.jackpu.com/shi-ge-jing-chang-yu-jian-de-angular-jsmian-shi-wen-ti/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79786.html

相關(guān)文章

  • 貓頭鷹的深夜翻譯:在JAVA中記錄日志十個小建議

    摘要:是指可能導致程序終止的非常嚴重的時間。具有最高的級別,旨在關(guān)閉中的日志功能。因此為每一個消息選擇一個合適的日志級別是非常重要的。日志的個小建議將日志訪日代碼塊它能顯著的減少因為字符串拼接而帶來的性能的影響。 前言 首先,這篇文章沒有進行任何的日志功能的詳細介紹,而是對日志提出了幾種最佳實踐。適合對日志記錄有所了解的同學閱讀。下面是正文: JAVA日志管理既是一門科學,又是一門藝術(shù)??茖W...

    venmos 評論0 收藏0
  • 記錄一下自己的春招,唯品會、360、京東offer已收、騰訊offer_call已達?。?!

    摘要:春招結(jié)果五月份了,春招已經(jīng)接近尾聲,因為到了周五晚上剛好有空,所以簡單地記錄一下自己的春招過程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品會電商前端研發(fā)部大數(shù)據(jù)與威脅分析事業(yè)部京東精銳暑假實習生的騰訊的是早上打過來的。 春招結(jié)果 五月份了,春招已經(jīng)接近尾聲,因為到了周五晚上剛好有空,所以簡單地記錄一下自己的春招過程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品...

    freewolf 評論0 收藏1
  • 新手程序員常犯十個錯誤

    摘要:對于程序員來說,更意味著代碼的組織,工作成員之間的協(xié)作方式。我常犯的一個錯誤是直接在或分支上直接,而團隊是不允許這樣做的。 先介紹下背景,博主由運營轉(zhuǎn)行前端,入職一個月,完成了一個相對較大的模塊。由于基礎相對薄弱,犯下了不少錯誤,故想記錄下來警醒自己和分享各位。 前端技術(shù)棧是 ES6 + backbone + react + antdUI,后端使用的 Ruby on Rails。 1....

    blankyao 評論0 收藏0
  • 新手程序員常犯十個錯誤

    摘要:對于程序員來說,更意味著代碼的組織,工作成員之間的協(xié)作方式。我常犯的一個錯誤是直接在或分支上直接,而團隊是不允許這樣做的。 先介紹下背景,博主由運營轉(zhuǎn)行前端,入職一個月,完成了一個相對較大的模塊。由于基礎相對薄弱,犯下了不少錯誤,故想記錄下來警醒自己和分享各位。 前端技術(shù)棧是 ES6 + backbone + react + antdUI,后端使用的 Ruby on Rails。 1....

    Andrman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<