J2ME -->常见笔试题(收集共享)
2011年06月02日
这些题用于巩固一下基础知识还是有必要的!
1、 求下列代码执行以后expr的值
a) int a = 8,b = 4; int expr = a++%++b*2 =6
b) int expr = 20 / 8 * 8; =16
c) int expr = 4 >>30; =3
e) int expr = 123 ^ 321 ^ 123; =321
f) int a = 255;
int expr = (byte)a + (((byte)a) & 0xff); =254
g) int expr = "123454321".charAt(4) + 2; =55即为'5'+2
h) Integer a = new Integer(1234);
Integer b = new Integer(1234);
boolean expr = a == b; =false
i) String func(String s){
return s.length() > 0 ? func(s.substring(1)) + s.charAt(0) : "";
}
Striing expr = func("Gameloft"); =tfolemaG;
2、 知识题
a) 什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频率?它能保证程序有足够的可用内存吗?
垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。
垃圾收集发生的不可预知性:由于实现了不同的垃圾收集算法和采用了不同的收集机制,所以它有可能是定时发生,有可能是当出现系统空闲CPU资源时发生
c)什么是混淆(obfuscate)?有什么好处?有哪些工具可以混淆jar文件?
答案:混淆是指通过对class文件中的变量名和部分方法名进行处理,来提高代码反编译的难度。
好处主要有2个:1、提高反编译以后代码阅读的难度 2、降低class文件的大小。
常见的混淆器有Proguard和RetroGuard两种。
d)什么是状态机?游戏开发中有那些地方能用到状态机?
答案:状态机(State Machine)是根据对应状态进行处理的一种机制,在游戏开发中最典型的应用是游戏人工智能(AI)等地方。
e)请根据你的知识,对以下计算机名次进行尽量简单的描述:
J2ME
J2ME是一种使用Java语言进行嵌入式设备开发的技术。
Python
Python是一种语法简单的面对对象的程序设计语言
Ant
Ant是一种简化和统一项目编译的工具软件。
Javac
Javac是Java语言的编译程序
Subversion
Subversion是新一代的版本工具
OpenGL
OpenGL是一套开发的图形界面开发库标准
3.final、finally和finalize有什么不同?
答: final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 .
finally再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
4.求2的3次方最快的方法是?
答:2显示的同时程序又在改变它,于是画面闪烁。在内存中开辟一片区域作为后台画面,程序对它更新、修改,完成后再显示它。先把屏幕重画在缓冲之中,然后再绘制在显示屏幕上,而不是直接绘制在显示屏幕上。可以使用Canvas类的isDoubleBuffer方法判断设备是否具有双缓冲。
4.ServiceRepaints()方法的作用是什么?与repaint()方法在使用上有什么区别?ServiceRepaints()方法与repaint()方法同时存在的意义是什么?
答:SerivceRepaints()方法的作用是强制执行repaint()方法。
区别是repaint()可以单独使用,而SerivceRepaints()必须和repaint()同时使用,并且必须在repaint()之后调用。
意义:避免repaint方法被累积执行。
5.J2ME中的音乐播放有怎样的缺陷?如何在使用中规避这些缺陷?使用伪码或者文字描述一下,如何在游戏中切换背景音乐。举出切换过程中可能存在的问题,并写明解决方法。
答:J2ME中的音乐播放不支持混音。使用各大厂商的API。
6.你认为J2ME的哪种技术缺陷增加了游戏开发的难度?
答:内存的使用,尤其是图片加载的问题。
7.阅读以下代码。
Image [ ] img = new Image [ 10 ];
for ( int i = 0 ; i 字符,java使用的是16位Unicode字符集,因此java字符是一个16位无符号整数,取
值范围0~65535,如:char a='z',char b='王',char c=0xf0abc1
在java中,字符类型数据不能作为整数使用,因为java中没有无符号整数类型,但是字符数据可以
转换为整数来计算。
\uddd: 3位八进制数所表示的字符(ddd)
\uxxxx:4位十六进制数所表示的字符(xxxx),例如 \u0061表示ISO拉丁字符集中的a
\n:表示换行
二:进制数
十进制数: 默认表示形式,是最长用的。
十六进制数:经常用到,其每一位数相当于4个二进制0和1的组合。范围0~F,十六进制整数必须以0x作为
开头,0xff:对应十进制为255,0xffL:对应十进制为255L
八进制:每一位数值相当于3个二进制数0和1的组合,开头必须为O,如:O11 十进制为9,二进制为1001
三:浮点数
也被称为 实型,用来表示一个带小数的十进制数,它分为float和double两种.
单精度 float型数据范围为 32位,双精度 double类型数据范围为 64位
float类型: 3.14F
double类型:3.14或3.14D
在手机开发中,LCDC1.0规范中不支持float和double类型,只有CLDC1.0规范中才开始支持float和double类型
四:基本数据类型和对应类间的关系
基本类型 对应类 基本类型 对应类
short Short Float Float
Byte Byte double Double
long Long char Char
int Ingeger boolean Boolean
五:
1:J2ME一般又称为Kjava,有两个虚拟机,KVM(K Virtual Machine K虚拟机)和CVM(C Virtual Machine,C虚拟
机),都是JVM(Java Virtual Machine)的子集,KVM的功能比CVM的功能稍差,其上可以使用CLDC配置和MIDP
简表。
2:J2ME中有两个可选配置-CDC(Connected Device Configuration,连接设备配置)和CLDC(Connected Limited Device
Configuration,有限连接设备配置)
3:MIDlet(Mobile Information Devices let,移动信息设备小程序),就是可以在KVM上运行的应用程序.
4:J2ME程序需要MANIFEST.MF和JAD文件,很多开发工具,如NetBeans等都提供了自动完成的功能,能自动的
创建并更新这些文件.
5:JCP(Java Community Process,Java标准化组织)
JSR37: 属于MIDP1.0(Mobile Information Device Profile 1.0,移动信息设备简表)规范
JSR118:属于MIDP2.0(Mobile Information Device Profile 2.0,移动信息设备简表)规范
JSR120:属于WMA(Wireless Messaging API,无线信息规范)规范
JSR30: 属于CLDC1.0规范
JSR139: 属于CLDC1.1规范
JSR135: 属于移动媒体开发的Mobile Media API规范
JSR184: 属于移动3D图形开发的Mobile 3D Graphics API规范
JSR75: 属于手机文件系统API规范
六:多线程
1: 对多线程技术的支持是Java语言的一个特色,在手机开发中的很多地方都要使用多线程进行开发。
2: 线程同步方法:线程的同步,必须使用synchronized语句可以对共享数据的访问语句进行保护,synchronized语句
会在访问数据时为共享数据加一个锁,加锁后其它线程就不能访问该共享数据了。
3: 当在一个类中有三个方法,p1(),synchronized p2(),synchronized p3(),则当某个线程访问了p2()后,在p2()没
有执行完成的情况下,其它线程不可以访问p2(),也不可以访问p3(),但是可以访问p1(),因为p1()没有加s
ynchronized。
4: 当一个客户用synchronized块或synchronized方法操作一个共享变量时,其他线程就必须等待,直到该线程执行完
该方法或同步块。
七:简单的程序
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
public class Midlet extends MIDlet implements CommandListener{
Command commandTest;
public void startApp(){
Display display=Display.getDisplay(this);
Form form=new Form("最简单的例子");
commandTest=new Command("测试",Command.OK,1);
form.addCommand(commandTest);
form.setCommandListener(this);
display.setCurrent(form);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command command, Displayable displayable) {
if(command==commandTest){
System.out.println("使用对象相等的比较,还是第一次见到!");
}
}
}
八:JCP(Java Community Process,Java标准化组织)