20190808面试记录

Angular的核心?

组件,指令,服务,依赖注入

性能优化?

1、减少http请求(图片压缩合并,css压缩合并,js文件压缩合并)

2、检查是否有重定向问题

3、检查是否一个列表有多次请求问题

4、减少DOM数量

5、延迟加载

6、提前加载

7、能用css做的尽量不要用js去做,能有原生写的尽量不引用外部插件

8、减少cookie的使用

9、尽量不用iframe

10、前端和后台协调,使用相应资源的压缩

11、根据需求使用ajax缓存

12、减少dom操作

13、减量不嵌套循环

14、css放head尽量不使用@import,因为@import是同步操作,只有把对应的样式导入后,才会继续向下加载,而link是异步的操作

15、css设置定位后最好设置z-index改变盒子的层级

16、使用window.requestAnimationFrame代替传统的定时器动画,如果可以使用setTimeout代替的setInterval就尽量不用setInterval

17、script标签放在底部加载

18、绑定多个事件的时候可以使用事件委托,减少循环给元素绑定事件

19、减少flash的使用

20、合理利用本地缓存

21、尽量给动画设置单独的一个图层(避免重绘和回流)

AMD和CMD的标准?现阶段使用的都是什么标准?

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。

AMD推崇依赖就近

CMD推崇依赖前置

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ... 
})

// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})

现阶段大部分框架用的较多应该是AMD,依赖前置

TypeScript的多态?

父类定义了一个接口,子类有多种实现

 

AngularJS的依赖注入?

依赖注入(DI)是用来创建对象及其依赖的其它对象的一种方式。 当依赖注入系统创建某个对象实例时,会负责提供该对象所依赖的对象(称为该对象的依赖)。

@Injectable 装饰器会指出这些服务或其它类是用来注入的。它还能用于为这些服务提供配置项。

providers 告诉 Angular,它的根注入器要负责调用类的构造函数来创建一个实例,并让它在整个应用中都是可用的。

组件中的providers服务还可以提供给指定的组件。在组件级提供的服务只能在该组件及其子组件的注入器中使用。

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 这个大杀器来跟踪异步任务,并进行脏检查

每一个组件都都它自己的检测器(detector),用于负责检查其自身模板上绑定的变量。所以每一个组件都可以独立地决定是否进行脏检查。

Angular 中组件是以树的形式组织起来的,相应地,检测器也是一棵树的形状。当一个异步事件发生时,脏检查会从根组件开始,自上而下对树上的所有子组件进行检查。相比 Angular1 中的带有环的结构,这样的单向数据流效率更高,而且容易预测

<!--value是数据绑定,input是事件绑定-->
<input [value]="currentHero.name"   
       (input)="currentHero.name=$event.target.value"
       >
<!--等价-->
<input [(ngModel)]="currentHero.name">

而Angular2接入了ZoneJS,由它监听了Angular所有的异步事件。ZoneJS重写了所有的异步API(所谓的猴子补丁,MonkeyPath)。ZoneJS会通知Angular可能有数据发生变化,需要检测更新

Angularjs采用的是双向数据流,错综复杂的数据流使得他不得不多次检查,使得数据最终趋向稳定

 

 

 

posted @ 2019-08-14 09:53  LLC-Mite  阅读(148)  评论(0编辑  收藏  举报