每天几个面试小问题

18.使用Flex Bulider3建立一下新的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的方法.

答:修改sdk\frameworks\projects\framework\default.cssApplicationbackgroundColor: #0000FF;

 

19.flex的开发框架有哪些,它们有什么优缺点?

  答: 最常见的当然是CairngormPuremvc了,此外还有MateSwiz等等,据说被广泛应用的已经有10几款了。Cairngorm作为Adobe官方出品,有着贵族血统的它比较全面,是这些框架中已知bug最少的,但是基于他的应用相对臃肿复杂一些,需要对每个可以被触发的事件写一个对应的Command,编码量巨大,并且单元测试很不容易,不适合敏捷开发。Puremvc应该是现在用的最多的as框架了。比较完善、并且与Cairngorm相比,更适合中小型应用的开发,它与Cairngorm一样,也是以MVC模式为中心,并以Façade作为中央存储器的单件类的形式进行开发的。说下Mate,它是一个比较奇怪的框架,是基于标签的事件驱动型的。也就是说你不能再随意的写as类的,在使用Mate的情况下,只能用MXML来做这些事情。SwizMate的孪生兄弟,长的挺像,没具体用过,不大了解。

11.使用Flex Bulider3如何跟踪程序?

答:我知道的三种1.trace() 2.设置断点 3.当不在调试模式时可以调用asAlert.show()jsalert() 如:navigateToURL(new URLRequest("javascript:alert(traceMsg)"), "_self");

 

20.在flex开发中,很多代码都写在mxml文件里,为了做到mvc模式,你是怎么处理的。

  我认为mxml并不影响mvc模式啊。分两种情况来讨论,首先,是自己创建整个应用结构的时候,那我们可以手动将UI所在的mxml归为一类,然后由Mediator去操作或者说控制这些组件既可了,然后Mediator又统一交给Controller去操作。如果采用其他框架来进行开发的话,那就更不用来考虑这个问题了,像CairngormPuremvc之类的框架已经很好的为我们解决了这些问题。只要按照它们的使用规范来进行开发,自然没有问题。

 

21.如果发生内存泄露,你是如何解决的?

  比如说 注意不要循环引用,特别是在使用Timer的时候要格外注意,不要忘记全局对象上的引用的清除,在创建控制器和模型的时候要注意一定要使用单件模式。在addEventListener时候尽量采用弱引用、自引用、或者子对象引用,以避免内存泄漏。

 

22.flex和后台语言是如何交互的?

   无疑就这两种方法:remote object 或者是Http service

 

23你是如何处理前端速度慢的问题?

   flex前端速度慢 其实仔细说应该分2部分,1.flex生成的swf由于SDK庞大的关系,swf体积也跟着庞大了,这我们可以做的就是用Module动态加载,还有就是RSL了。2.处理速度慢,远程方法速度慢,这是AVM的硬伤了,基本没有很好的解决方法,我们能做的只是让这个异步进行的更完美一些,让用户在等待的过程中,做其他的事情,以至于让用户忽略这段等待的时间。

 

25请解释下单例模式

 

单例模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为,简化了在复杂环境下的配置管理。

 

实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。请写个单例。例:

 

package {

 

public class MySubClass {

 

private static var mySubClass:MySubClass;

 

public var num:Number=0;

 

public function MySubClass() {

 

if (MySubClass.mySubClass!=null) {

 

throw new Error("只能产生一个实例");

 

}

 

}

 

public static function getInstance():MySubClass {

 

if (mySubClass==null) {

 

mySubClass = new MySubClass();

 

}

 

return mySubClass;

 

}

 

}

 

}

 

 

 

26.请问enterFrametimerEvent2个事件有什么区别?请说下具体的使用方法和相关的使用场合?

 

enterFrame:播放头进入新帧时调度。如果播放头不移动,或者只有一帧,则会继续以帧速率调度此事件。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件

 

timerEvent:它的启动是通过start()方法,暂停是通过stop()方法来实现。它的调用是运行的时间每次达到delay时调度

 

posted on 2012-10-30 23:07  笔墨丹青  阅读(191)  评论(0)    收藏  举报

导航