Flex4常见面试题
1.as2与as3.的最主要区别是什么?答:首先,as2 和as3是完全不同的语言,几乎没有兼容性可言。as2编译用的AVM1虚拟机,as3用的AVM2,速度快,提供了一些基础异常处理。 as3是纯的OOP,强类型语言。as2不是。具体的差别有太多太多。2.flex的开发框架有哪些,它 们有什么优缺点?答:最常见的当然是Cairngorm、Puremvc了,此外还有Mate,Swiz等等,据说被广
1.as2与as3.的最主要区别是什么?
答:首先,as2 和as3是完全不同的语言,几乎没有兼容性可言。as2编译用的AVM1虚拟机,as3用的AVM2,速度 快,提供了一些基础异常处理。 as3是纯的OOP,强类型语言。as2不是。具体的差别有太多太多。
2.flex的开发框架有哪些,它 们有什么优缺点?
答: 最常见的当然是Cairngorm、Puremvc了,此外还有Mate,Swiz等等,据说被广泛应用的已经有10几款了。Cairngorm作为 Adobe官方出品,有着贵族血统的它比较全面,是这些框架中已知bug最少的,但是基于他的应用相对臃肿复杂一些,需要对每个可以被触发的事件写一个对 应的Command,编码量巨大,并且单元测试很不容易,不适合敏捷开发。Puremvc应该是现在用的最多的as框架了。比较完善、并且与 Cairngorm相比,更适合中小型应用的开发,它与Cairngorm一样,也是以MVC模式为中心,并以Façade作为中央存储器的单件类的形式 进行开发的。说下Mate,它是一个比较奇怪的框架,是基于标签的事件驱动型的。也就是说你不能再随意的写as类的,在使用Mate的情况下,只能用 MXML来做这些事情。Swiz是Mate的孪生兄弟,长的挺像,没具体用过,不大了解。
3.在flex开发中,很多代码都 写在mxml文件里,为了做到mvc模式,你是怎么处理的。
我认为mxml并不影响mvc模式啊。分两种情况来讨论,首先,是自己创建整个应用结构的时候,那我们可以手动将UI所在的 mxml归为一类,然后由Mediator去操作或者说控制这些组件既可了,然后Mediator又统一交给Controller去操作。如果采用其他框 架来进行开发的话,那就更不用来考虑这个问题了,像Cairngorm、Puremvc之类的框架已经很好的为我们解决了这些问题。只要按照它们的使用规 范来进行开发,自然没有问题。
4.如果发生内存泄露,你是如何解决的?
在profile观察中已经内存泄漏是没有很好的解决办法的,至少我不知道,我能做的只是尽量去避免这种情况的发生,比如说 注意不要循环引用,特别是在使用Timer的时候要格外注意,不要忘记全局对象上的引用的清除,在创建控制器和模型的时候要注意一定要使用单件模式。在 addEventListener时候尽量采用弱引用、自引用、或者子对象引用,以避免内存泄漏。
5。as3.0垃圾回收器是如何工 作的?
flash player 8之前采用的是引用计数法,在flash player 8 之后用的是标记法,简单的说就是:从应用的根节点开始,遍历所有其上的引用,标记每个它所发现的对象。然后迭代遍历每个被标记的对象,标记它们的子对象。 这个过程第归进行,直到Player遍历了应用的整个对象树并标记了它所发现的每个东西。在这个过程技术的时候,可以安全地认为,内存中那些没有被打标记 的对象没有任何活动引用,因此可以被安全地释放内存。一般来说,flash player采用的是一种低频的垃圾回收机制,Flash Player的垃圾回收发生在Flash Player需要另外请求内存之前。但并不是每次应用申请内存时都会导致垃圾回收的执行,只有当Flash占用的内存紧张到一定程度时才会执行真正的垃圾 回收,一定程度上取决于客户端计算机的物理内存的大小。
6 flex和后台语言是如何交互 的?
无疑就这两种方法:remote object 或者是Http service
7。你是如何处理前端速度慢的问 题?
flex前端速度慢 其实仔细说应该分2部分,1.是flex生成的swf由于SDK庞大的关系,swf体积也跟着庞大了,这我们可以做的就是用Module动态加载,还有就 是RSL了。2.处理速度慢,远程方法速度慢,这是AVM的硬伤了,基本没有很好的解决方法,我们能做的只是让这个异步进行的更完美一些,让用户在等待的 过程中,做其他的事情,以至于让用户忽略这段等待的时间。
8、请说下你理解AS3的事件 机制是什么机制?你认为正确的就可以说出来.
AS3事件流分三个阶段:
1.捕获阶段 (即由根节点流向子节点,检测每个节点是否注册了监听器)
2.目标阶段 (激发在目标对象本身注册的监听程序)
3.冒泡阶段 (从目标节点到根节点,检测每个节点是否注册了监听器)
当中涉及了两个属性target和currentTarget,target是事件的派发者,currentTarget是正 在检测的对象,当开始了事件流,事件的currentTarget属性处于不断变化中.
PS:注册事件时捕获阶段默认是关 闭的,无论事件是否开启了捕获,事件流只会两选一去执行注册的监听程序
关于 EventDispatcher三个函数的参数:
1.addEventlistener(事件类型,监听函数,是否打开捕获阶段,监听器优先级别,是否打开弱监听)
2.removeEventListener(事件类型,监听函数,是否打开捕获阶段) (前两个参数是必须的,如果注册监 听器时打开了捕获阶段,那么第三个参数也是必须的,否则会出现错误)
3.dispatchEvent(new Event(事件类型,是否冒泡,是否可以取消事件))
关于Event扩展有 两点要注意:
1.可以定义字符串常量代表事件类型.
2.构造函数必须调用父类的构造函 数,super(type,bubbles,cancelable)
3.扩展Event可以使 Event带自定义变量,从而可以传递数据.
9.请问 undefined 和 null 是否一样,如果不一样能否说出其中的区别呢?
不一样,null 是没有值的意思。undefined是申明未完成,或者类型未定等情况。
10. 创建常量知道怎么创建嘛? 说下你是怎么创建的.
比 如说:public static const STARTUP:String = "startup";
const PI:Number = 3.1415926;
11、请问用什么方法自定义一个 事件呢?说下具体的方式.
自 定义事件,要么就直接调用Event的构造函数,或者继承于Event,写一个子类。
12. 请问一个数组里可以放不同的 类型嘛?
答:可以 var x:Array = ['a',1,new Button()];
13. 我想创建的视图居中怎么办?
答:布局策略里面限定 为居中。即 horizontalAlign="center" verticalAlign="middle"
或者在每个控件都以舞台 的中心作为相对坐标来计算各自的xy值。
更多推荐
所有评论(0)