什么是单页应用(SPA)?单页应用(SPA)是指用户在浏览器中加载单个HTML页面,后续请求不需要离开该页面目标:旨在为用户提供更接近原生移动应用或桌面应用的体验.流程:第一次请求时,将导航页面传给客户端,其余请求通过RESTAPI获取JSON数据。实现:数据通过WebSocketAPI或RPC(RemoteProcedureCall)传输。优点:用户体验流畅,服务器压力小,前后端职责分离缺点:关键词排版难度较大,不利于SEO什么是“前端路由”?“前端路由”什么时候适用?有什么优点和缺点?URL和History实现页面切换应用:前端路由主要适用于“前后端分离”的单页面应用(SPA)项目。不能合理利用缓存模块化开发怎么办?将对象封装为命名空间——内部状态可以被外部立即执行函数(IIFE)改写——需要依赖多个JS文件,并严格顺序加载使用模块加载器——require.js、sea.js、EC6模块传递Javascript模块的规范是什么?CommonJS--主要用在服务端node.jsvarmath=require('./math');math.add(2,3);AMD(异步模块定义)--require.jsrequire(['./math'],函数(数学){math.add(2,3);});CMD(CommonModuleDefinition)--sea.jsvarmath=require('./math');math.add(2,3);ES6Moduleimport{math}from'./math';math.add(2,3);AMD和CMD规范之间的区别?标准化输出:AMD被RequireJS推动产生CMD,SeaJS被推动产生模块依赖:AMD提前执行,推荐依赖pre-CMD延迟执行,推荐依赖最近的APIFunction:AMD的API是multi-functionalbydefault(分为globalrequire和localrequire)CMD的API提倡单一职责和纯(无全局require)模块定义规则:AMD默认从头加载所有依赖模块define(['./a','./b'],function(a,b){a.doSomething();b.doSomething();});CMD依赖的模块只有在使用的时候才会加载define(function(require,exports,module){vara=require('./a');a.doSomething();varb=require('./b');b.doSomething();})requireJS的核心原理是什么?每个模块依赖的模块都会比这个模块预加载对Node.js的优缺点提出自己的看法?Node.js有哪些特点和适用场景?Node.js的特点:单线程、非阻塞I/O、事件驱动Node.js的优点:善于处理高并发;适用于I/O密集型应用Node.js的缺点:不适合CPU密集型操作;不能充分利用多核CPU;可靠性低,某个环节出错会导致整个系统崩溃Node.js适用场景:RESTfulAPI实时应用:在线聊天、图文直播工具应用:前端部署(npm、gulp)表单采集:问卷系统如何判断当前脚本是运行在浏览器环境还是node环境?判断全局对象是否为window。如果不是,则当前脚本未在浏览器中运行。什么是npm?npm是Node.js的模块管理和发布工具什么是函数式编程?函数式编程是一种“编程范式”。主要思想是将操作过程写成一系列嵌套的函数调用。例如:varresult=subtract(multiply(add(1,2),3),4);functional编程的特点:函数核心化:一个函数可以作为一个变量的赋值,另一个函数的参数,另一个函数的返回值。只用“表达式”,不用“语句”:要求每一步都是简单的操作,必须有返回值,没有“副作用”:所有的函数都只是为了返回一个新的值,并且做不修改外部变量引用透明:运行不依赖于外部变量,只依赖于输入参数结合“并发编程”,不用担心一个线程的数据,被另一个线程修改了就可以“热升级”代码,直接升级运行状态的代码,不需要重启,有无需停机。什么是函数柯里化(Currying)?Currying:通常也叫partialevaluation,就是一步一步的给函数传递参数,每次参数被partiallyapply,返回一个更具体的函数,具体的函数会不断返回,同时继续接受剩下的参数,直到返回最终结果所以,函数柯里化就是逐渐传递参数,逐渐缩小函数的适用范围,逐步解决柯里化的过程。柯里化的作用:延迟计算;参数重用;动态创建函数currying缺点:函数currying会产生Overhead(函数嵌套,内存比普通函数多),但性能瓶颈首先来自其他原因(DOM操作等)什么是依赖注入?当一个类的实例依赖于另一个类的实例时,该实例不是自己创建的,而是由IOC容器创建并注入到自身中,所以称为依赖注入。依赖注入解决了如何有效组织代码依赖模块的问题。设计模式:什么是单例模式、工厂模式、策略模式和装饰器模式?Singleton(单例)一个类只有一个实例,这个实例在整个程序中有一个全局的访问点。工厂(factory)解决了实现对象的重复问题。可以相互替换,使算法独立使用观察者(observer)多个观察者同时监听一个主题,当主题对象发生变化时,将通知所有观察者原型(prototype)一个完全初始化的实例复制或克隆Adapter(适配器)来匹配和调整不同类的接口。尽管内部接口不兼容,但不同的类仍然可以协同工作。代理(proxymode)一个充当过滤器转发器的对象,用来表示一个真实的对象Iterator)在不知道集合内部工作原理的情况下,顺序访问一个集合中的元素责任链(responsibilitychain)过程链由请求组成的对象,在请求链中传递,直到有可以处理的对象什么是前端工程?前端工程就是利用工具将一整套前端工作流程自动化,完成前端开发的基本流程:项目初始化:yeoman、FIS导入依赖包:bower、npm模块化管理:npm、browserify、Webpackcode编译:babel、sass、lesscode优化(压缩/组合):Gulp、Grunt代码检查:JSHint、ESLint代码测试:Mocha目前最知名的构建工具:Gulp、Grunt、npm+Webpack简介什么是Yeoman?Yeoman---前端开发的脚手架工具,自动集成构建项目骨架代理的最佳实践和工具,将Yeoman工具粘合在一起)Grunt,gulp---自动化构建工具(最初只有grunt,后来增加了gulp)Bower,npm---包管理工具(原来是bower,后来加了npm)介绍WebPack是什么有什么优点?WebPack是一个【模块加载器】和【打包工具】,用于组合各种静态资源(js/css/image等)使用WebPack作为模块的优点:WebPack同时支持commonJS和AMD/CMD,方便代码迁移。不仅可以模块化JS,CSS,Image等可以代替一些grunt/gulp的工作,比如打包,压缩混淆,imagebase64扩展性强,插件机制完善,特别是功能支持React热插拔。简介类库和框架有什么区别?类库是帮助开发人员编写WEB应用程序的函数集合。主导作用是开发者的代码框架是一个已经实现的特殊WEB应用。开发者只需要填充具体的业务逻辑即可。主角是框架什么是MVC/MVP/MVVM/Flux?MVC(Model-View-Controller)V->C,C->M,M->V通信是单向的;C只充当路由,业务逻辑部署在VBackboneMVP(Model-View-Presenter)V<->P,P<->M通信双向;V和M不联系(通过P);V很瘦,逻辑部署在PRiot.jsMVVM(Model-View-ViewModel)V->VM,VM<->M采用双向数据绑定:View和ViewModel的变化会映射到对象上AngularFlux(Dispatcher-Store-View)Action->Dispatcher->Store->View,View->ActionFacebook为了解决MVC中遇到的工程问题,提出了一种架构思想,基于一个简单的原则:dataflowsinone应用中的方向(单向数据流)React(在Flux中查看,只关注表现层)什么是Backbone?Backbone是一个基于jquery和underscore的前端(MVC)框架什么是AngularJS?AngularJS是一个完整的前端MVVM框架,包括模板、数据双向绑定、路由、模块化、服务、依赖注入等。AngularJS由谷歌维护,协助开发大型单页应用什么是反应?React不是MV*框架。它是一个用于构建用户界面的JavaScript库,专注于视图层。React的主要原理是:虚拟DOM+diff算法->不直接操作DOM对象组件->VirtualDOM的节点状态触发视图的渲染->单向数据绑定React解决方案:React+Redux+react-router+Fetch+webpackreact-router路由系统的实现原理是什么?实现原理:location与组件同步路由的职责是保证UI和URL的同步。在react-router中,URL对应Location对象,UI由react组件决定。因此在react-router中路由转化为location和components之前经典的前端面试CSS和之前经典的React学习书同步持续更新中~喜欢就留个赞吧!
