20190808面试记录
Angular的核心?
組件,指令,服務(wù),依賴注入
性能優(yōu)化?
1、減少http請(qǐng)求(圖片壓縮合并,css壓縮合并,js文件壓縮合并)
2、檢查是否有重定向問題
3、檢查是否一個(gè)列表有多次請(qǐng)求問題
4、減少DOM數(shù)量
5、延遲加載
6、提前加載
7、能用css做的盡量不要用js去做,能有原生寫的盡量不引用外部插件
8、減少cookie的使用
9、盡量不用iframe
10、前端和后臺(tái)協(xié)調(diào),使用相應(yīng)資源的壓縮
11、根據(jù)需求使用ajax緩存
12、減少dom操作
13、減量不嵌套循環(huán)
14、css放head盡量不使用@import,因?yàn)?#64;import是同步操作,只有把對(duì)應(yīng)的樣式導(dǎo)入后,才會(huì)繼續(xù)向下加載,而link是異步的操作
15、css設(shè)置定位后最好設(shè)置z-index改變盒子的層級(jí)
16、使用window.requestAnimationFrame代替?zhèn)鹘y(tǒng)的定時(shí)器動(dòng)畫,如果可以使用setTimeout代替的setInterval就盡量不用setInterval
17、script標(biāo)簽放在底部加載
18、綁定多個(gè)事件的時(shí)候可以使用事件委托,減少循環(huán)給元素綁定事件
19、減少flash的使用
20、合理利用本地緩存
21、盡量給動(dòng)畫設(shè)置單獨(dú)的一個(gè)圖層(避免重繪和回流)
AMD和CMD的標(biāo)準(zhǔn)?現(xiàn)階段使用的都是什么標(biāo)準(zhǔn)?
AMD 是 RequireJS 在推廣過程中對(duì)模塊定義的規(guī)范化產(chǎn)出。
CMD 是 SeaJS 在推廣過程中對(duì)模塊定義的規(guī)范化產(chǎn)出。
AMD推崇依賴就近
CMD推崇依賴前置
// CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此處略去 100 行 var b = require('./b') // 依賴可以就近書寫 b.doSomething() // ... })// AMD 默認(rèn)推薦的是 define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好 a.doSomething() // 此處略去 100 行 b.doSomething() ... })現(xiàn)階段大部分框架用的較多應(yīng)該是AMD,依賴前置
TypeScript的多態(tài)?
父類定義了一個(gè)接口,子類有多種實(shí)現(xiàn)
?
AngularJS的依賴注入?
依賴注入(DI)是用來創(chuàng)建對(duì)象及其依賴的其它對(duì)象的一種方式。 當(dāng)依賴注入系統(tǒng)創(chuàng)建某個(gè)對(duì)象實(shí)例時(shí),會(huì)負(fù)責(zé)提供該對(duì)象所依賴的對(duì)象(稱為該對(duì)象的依賴)。
@Injectable 裝飾器會(huì)指出這些服務(wù)或其它類是用來注入的。它還能用于為這些服務(wù)提供配置項(xiàng)。
providers 告訴 Angular,它的根注入器要負(fù)責(zé)調(diào)用類的構(gòu)造函數(shù)來創(chuàng)建一個(gè)實(shí)例,并讓它在整個(gè)應(yīng)用中都是可用的。
組件中的providers服務(wù)還可以提供給指定的組件。在組件級(jí)提供的服務(wù)只能在該組件及其子組件的注入器中使用。
import { Component } from '@angular/core'; import { HeroService } from './hero.service';@Component({selector: 'app-heroes',providers: [ HeroService ],template: `<h2>Heroes</h2><app-hero-list></app-hero-list> ` }) export class HeroesComponent { }?
Angular的臟值檢查不再被吐槽呢?
Angular 使用了 zone.js 這個(gè)大殺器來跟蹤異步任務(wù),并進(jìn)行臟檢查
每一個(gè)組件都都它自己的檢測(cè)器(detector),用于負(fù)責(zé)檢查其自身模板上綁定的變量。所以每一個(gè)組件都可以獨(dú)立地決定是否進(jìn)行臟檢查。
Angular 中組件是以樹的形式組織起來的,相應(yīng)地,檢測(cè)器也是一棵樹的形狀。當(dāng)一個(gè)異步事件發(fā)生時(shí),臟檢查會(huì)從根組件開始,自上而下對(duì)樹上的所有子組件進(jìn)行檢查。相比 Angular1 中的帶有環(huán)的結(jié)構(gòu),這樣的單向數(shù)據(jù)流效率更高,而且容易預(yù)測(cè)
<!--value是數(shù)據(jù)綁定,input是事件綁定--> <input [value]="currentHero.name" (input)="currentHero.name=$event.target.value"> <!--等價(jià)--> <input [(ngModel)]="currentHero.name">而Angular2接入了ZoneJS,由它監(jiān)聽了Angular所有的異步事件。ZoneJS重寫了所有的異步API(所謂的猴子補(bǔ)丁,MonkeyPath)。ZoneJS會(huì)通知Angular可能有數(shù)據(jù)發(fā)生變化,需要檢測(cè)更新
Angularjs采用的是雙向數(shù)據(jù)流,錯(cuò)綜復(fù)雜的數(shù)據(jù)流使得他不得不多次檢查,使得數(shù)據(jù)最終趨向穩(wěn)定
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/llcMite/p/11325659.html
總結(jié)
以上是生活随笔為你收集整理的20190808面试记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习的重新思考:人工智能如何学习“失
- 下一篇: 弄懂goroutine调度原理