某咨询公司笔试题目
1.(单选题)如果你被要求写一段代码读取一个序列化的对象,一般使用哪种Stream?(考点:Java I/O)
A:FileInputStream
B:FileReader
C:DataInputStream
D:ObjectInputStream
解析:FileInputStream可以从文件系统中的某个文件中获得输入字节,获取的文件可用性取决于主机环境。
FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。
DataInputStream用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
ObjectInputStream是一个装饰流,装饰流不能直接处理数据源,它必须和其他的装饰流或实体流一起使用,ObjectInputStrea
是用来实现反序列化的。
答案:D
2.(单选题)下列哪种方法可以获得HTTP请求所传递的参数(考点:HttpServletRequest)
A:ServletRequest接口的getAttribute()方法
B:ServletRequest接口的getParameter()方法
C:HttpServletRequest接口的getAttribute()方法
D:HttpServletRequest接口的getParameter()方法
解析:
HttpServletRequest和ServletRequest都是接口
HttpServletRequest继承自ServletRequest,
HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。
ServletRequest类:
getAttribute( String name )可以得到由setAttribute()设置的参数值,就相当于是使用getAttribute()得到一
个自己定义的参数,而不是从客户端得到的参数。
String getParameter( String name )它用来获取客户端通过get或post方法等传递过来的值,是从客户端传递过来的,一般指的
客户端提交的表单组件的值。
HttpServletRequest类:
有setAttribute()方法,而 没有setParameter()方法 。
get/setParameter是在对你的页面中的表单元素进行操作,获取的是这个表单元素中的值,是某个表单提交过去的数据。
get/setAttribute是对你页面中自己定义的对象进行操作。
getParameter 返回的是String, 用于读取提交的表单中的值,
getAttribute 返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用。
答案:D
3.(单选题)String s = new String("xyz")创建了几个对象?(考点:JVM原理)
A:一个
B:两个
C:三个
D:四个
解析:在jvm的工作过程中,会创建一片的内存空间专门存入string对象。我们把这片内存空间叫做string池。
String s= "Hello ";当jvm看到 "Hello ",在string池创建string对象存储它,并将他的引用返回给s。
s= "Java ",当jvm看到 "Java ",在string池创建新的string对象存储它,再把新建的string对象的引用返回给s。
而原先的 "Hello"仍然在string池内。没有消失,他是不能被修改的。
所以我们仅仅是改变了s的引用,而没有改变他所引用的对象,因为string对象的值是不能被修改的。
首先在string池内找,找到?不创建string对象,否则创建, 这样就一个string对象遇到new运算符号了,
在内存上创建string对象,并将其返回给s,又一个对象 。
答案:B
4.(单选题)下面哪个语句不能定义一个字符变量?(考点:Java基本数据类型)
A:char c1='a'
B:char c2="s"
C:char c3='\u0041'
D:char c4=65
解析:‘a’表示的是字符,对应char型。“s”表示的是字符串,对应的是String型,B已经错误。
'\u0041'是十六进制,表示的是字符A,对应ASC编码是65,所以C、D正确。
答案:B
5.(单选题)以下哪些不是javascript的全局函数(考点:JavaScript)
A:eval
B:escape
C:setTimeout
D:parseFloat
解析:
JS全局函数:参考链接:http://www.w3school.com.cn/jsref/jsref_obj_global.asp
eval():计算 JavaScript 字符串,并把它作为脚本代码来执行。
escape():对字符串进行编码。
parseFloat():解析一个字符串并返回一个浮点数。
DOM函数:
setTimeout():方法用于在指定的毫秒数后调用函数或计算表达式。
答案:C
6.(单选题)定义一个类域或者类方法应该使用哪种修饰符(考点:Java修饰符static)
A:static
B:package
C:private
D:public
解析:类方法即静态方法,类域即静态成员。
答案:A
7.(多选题)abstract class 和 interface有什么区别(考点:抽象类和接口的区别)
A:抽象类可以有构造方法,接口中不能有构造方法
B:抽象类中可以有普通成员变量,接口中没有普通成员变量
C:抽象类中不可以包含静态方法,接口中可以包含静态方法
D:一个类可以实现多个接口,但只能继承一个抽象类
解析:相同点:
都不能被实例化
不同点:
类型 | abstract class | Interface |
---|---|---|
定义 | abstract class关键字 | Interface关键字 |
继承 | 抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类 | 接口只可以继承接口(一个或多个);子类可以实现多个接口 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符 |
方法实现 | 可定义构造方法,可以有抽象方法和具体方法 | 接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现 |
实现方式 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
作用 | 为了把相同的东西提取出来,即重用 | 为了把程序模块进行固化的契约,是为了降低偶合 |
答案:A、B、D
8.(多选题)下面哪些基本数据类型是8个字节(考点:基础数据类型)
A:double
B:int
C:long
D:float
解析:byte:8位,1字节
short:16位,2字节
int:32位,4字节
long:64位,8字节
float:32位,4字节
double:64位,8字节
答案:A、C
9.(多选题)下面哪些修饰符可以在不同包中子类中访问(考点:Java访问修饰符)
A:public
B:private
C:protected
D:friendly
解析:
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (对任何人都是可用的)
protect ∨ ∨ ∨ × (继承的类可以访问以及和private一样的权限)
default ∨ ∨ × × (包访问权限,即在整个包内均可被访问)(friendly即default)
private ∨ × × × (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)
答案:A、C
10.(多选题)下列说法正确的是(考点:java编译(javac))
A:环境变量可以在编译sourcecode时指定
B:在编译程序时,所能指定的环境变量不包括class path
C:javac一次可同时编译数个java源文件
D:javac.exe能指定编译结果要置于哪个目录
解析:环境变量:Java环境变量没有指定的话,java无法使用,javac也无法运行,所以需要在编译前指定环境变量。
classpath是类路径,需要单独定义,与环境变量是不同的。
javac一次可以编译多个源文件和指定编译结果的存放目录。
如:javac *.java和javac -d(-d 指定放置生成的类文件的位置)
答案:B、C、D