Angular 1.x 基础知识点(翻译)
Angular 1.x 基础知识点(翻译)
原文题目:Modern Angular 1.x essential interview questions 出处:https://toddmotto.com/modern-angular-interview-questions?utm_source=javascriptweekly&utm_medium=email 翻译时长:2 hours 30 mins 审阅时长:10 min
翻译正文内容: Angular 1.x 在 1.5 引入 .component()后改变了很多,并随之给面试带来了一片新的天地。在许多 之前职位中,我面试了关于Angular、通用JavaScript或者两种兼有的开发者。这是我关于当前Angular 1.x的面试题清单,主要关注组件架构和最佳实践。有些简单,有些困难,由你选择。
有些问题的用意在于让面试者基于他们的经验或者观点来回答。比如,“你什么时候使用X而不是Y”是一个比 “为什么X比Y要好”好的问题。这让你可以挖掘得更深,并可以在面试过程中有更好的对话,也让你能快速判断 哪个开发者更适合你。
答案并没包含,也不会包含。有部分问题是主题性,有部分鼓励你自学。如果你不知道答案,那么你可以去探索并学习。背诵将不会让你通过面试。
组件(Components)
- 什么是组件?
- 什么时候使用组件而不是指令?
- 什么是组件架构?
- 有状态组件和无状态组件的区别是什么?
- 什么是生命周期钩子,为什么他们很重要?
- 什么时候会考虑使用单向数据流而不是双向数据流?
- 为什么隔离scope是一个重要概念?
- 你是怎么描述”MVC/MVVM”?
- MVC/MVVM和组件架构之间的区别是什么?
- 一个组件可以接收到什么类型的绑定?
- 你能描述不可变的数据结构吗?(immutable datastructures)
- 给一个JavaScript中不可变的操作的例子?(an immutable operation)
状态管理和数据流(State management and dataflow)
- 你是怎么获取数据到组件中?
- 你是怎么从组件中获取数据?
- 单向数据流带来的好处是什么?
- 双向数据流带来的共通问题是什么?
- 你是否使用过$ngRedux或者相似的实现?
- Redux在Angular 1.x的实现带来了什么好处?
性能和调试(Performance and debugging)
- 你能指出加快$digest周期的关键吗?
- 使用一次绑定表达式的好处?
- 在Angular 1.x中导致内存泄漏的原因?
- 你是怎么加速一个ng-repeat指令?
- track是怎么工作的?
- $evalAsync和$applyAsync是什么?
- $watch和$watchCollection之间有什么区别?
- 解释一下你是怎么尝试调试一个Angular 1.x 的性能问题?
- 你熟悉哪些调试工具?
- 什么是strict-di模式,它是怎么影响运行时性能的?
- 你使用什么工具让Angular运行更快?
- 什么是$templateCache?
模块和内部(Modules and internals)
- 一个Angular应用的关键组成部分有哪些?
- 你是怎么描述一个模块的?
- 子模块的应用场景有哪些?
- 你从学习Angular源码中学到什么?
- 你是怎么异步启动Angular?
- 你是怎么一次启动多个应用?
- 什么是依赖注入(DI)?
- 为什么依赖注入在Angular很有用?
- $digest周期是怎么工作的?
- 什么是$rootScope,它和$scope有什么不同?
- 你什么使用$scope.$apply,为什么?
指令(Directives)
- 什么是指令?
- 什么指令真正实现双向数据绑定?
- 为什么使用ng-click而不是addEventListener?
- 你什么问题使用addEventListener?
- 什么是link函数,你什么使用应该使用它?
- 你是怎么使用link函数来和控制器通信?
- 什么样的逻辑应该在link函数中,什么逻辑应该在控制器中?
- 什么是编译函数,它会返回什么?
- 什么是pre和post链接周期函数?
- 为什么compile函数比link函数更有效率?
- 什么时候使用指令而不是组件?
- 什么是事件指令,什么是结构指令?
- 你在使用指令的过程中遇到过什么困难?
- 在使用指令的时候,需要避免什么实践?
- 指令可以收到什么类型的绑定?
- 什么时候可以使用require,并且它能在link上带来什么效果?
- 什么是transclusion?
- 哪些指令特性你会建议避免?
- 哪些指令你会趋向于避免使用,为什么?
- 有哪些不同类型的scope?
- 什么是JQLite,它有什么限制?
表单(Forms)
- 你是怎么使用表达控制器来实现表单验证的?
- dirty,pristine,touched和untouched的含义?
- Angular 1.x 的表达有哪些局限?
- 內建的验证工具有哪些?
- $parsers和$formatters是什么,在什么时候该使用?
- 什么是$validators管道,什么是该使用?
- 什么是ngModelOptions,它是一个好的指令实现吗?
路由(Routing - ui-router 1.0.0)
- 什么是路由?
- 什么是组件路由?
- 你一般在什么时候使用模板路由,如果有的话?
- 什么是动态路由,你是怎么实现的?
- 什么是“HTML5模式”?
- 你是怎么实现只有在数据有效的情况才渲染一个视图?
- 什么是过渡钩子(transition hooks),它在路由中扮演什么角色?
- 你是怎么创建兄弟视图?
控制器(Controllers)
- 控制器扮演的角色是什么?
- 你是怎么将数据导入到控制器中的?
- 什么时候使用$scope.$watch?应该吗?怎么unwatch?
- 解释什么时候使用controllerAs,它带来的效果是什么?
- 什么时候应该在控制器内使用$scope?
- 什么时候应该考虑使用嵌套控制器?这是最佳实践吗?
过滤器(Filters)
- 什么是过滤器?
- 过滤器是怎么工作的?
- 什么方式是性能最好的过滤数据方式,为什么?
- 你是怎么在模板中同时使用多个过滤器?
- 你是怎么在控制器中同时使用多个过滤器?
- 怎么传递参数给一个自定义的过滤器?
服务和HTTP(Services and HTTP)
- 什么是service?
- 什么是factory?
- 什么是provider?
- services和factory都提倡什么设计模式?
- 在Angular应用中,service的角色是什么?
- $http和$resource的区别?
- 什么时候使用$resource比$http有意义?
- 什么是Promise?指出几个Angular使用它们的例子?
- 什么是$q,什么时候使用?
- 什么是http拦截器,什么是好的使用案例?
- 你实现过哪些不同类型的认证?
事件(Events)
- 在Angular 1.x中什么时候该使用事件?
- $emit和$broadcast的区别?
- $scope.$emit和$rootScope.$emit的区别?
- 在$scope和$rootScope中对事件解绑的区别?
测试和工具(Testing and tooling)
- 单元测试和端到端测试的不同?
- 单元测试的工具?
- 端到端测试的工具?
- 你熟悉的工具?
- 描述一下懒加载的工作原理?
- 什么编译流程对加快Angular应用有效?
- 你在使用ES6编译器或者TypeScript吗?