java面试题09
A卷
1.选择题
public class Test01 {
public static void changeStr(String str) {
str = "welcome";
}
public static void main(String[] args) {
String str = "1234";
changeStr(str);
System.out.println(str);
}
}
答案:输出1234.
解析:八种基本数据类型,外加String,在作为参数传值的时候,传的是值,意思就是另外copy了一份,操作的是copy的那一份。所有在原方法中值不会改变。引用数据类型在作为参数传值的时候,传的是内存地址。在其他方法中修改的话,会改变参数的值。
2.选择题
public class Test01 {
static boolean foo(char c) {
System.out.print(c);
return true;
}
public static void main(String[] argv) {
int i = 0;
// for(65;88&&(i<2);67)
for (foo('A'); foo('B') && (i < 2); foo('C')) {
i++;
foo('D');
}
}
}
答案:输出ABDCBDCB
解析:考察for循环的执行流程。
第一次循环:执行foo('A');
然后执行foo('B') && (i < 2);
进入循环执行i++;foo('D');
第一次循环结束,执行:foo('C')
第二次循环:执行:foo('B') && (i < 2);
进入循环执行i++;foo('D');
第二次循环结束,执行:foo('C')
第三次循环:执行:foo('B') && (i < 2);此时,i=2,不满足条件i<2.结束循环。输出ABDCBDCB
3.选择题
class A {
protected int method1(int a, int b) { return 0; }
}
Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }
答案:AC
解析:考察方法的重写,重写存在于父子类关系中。
01.方法的重写表示子类中的方法可以与父类中的某个方法的名称和参数类型完全相同。通过子类创建出来的对象,在调用这个方法时,调用的是子类中的方法。
这相当于子类中的方法把父类中的方法给覆盖了。这是面向对象多态性的一种体现。
02.在抛出异常方面:子类重写父类方法时,抛出的异常类型只能是父类异常类型的子类,或者和父类异常类型一样。
03.在访问权限方面:子类重写父类方法时,子类方法的访问权限不能严于父类。只能和父类相同,或者高于父类。
04.如果父类的方法时private类型的,那么子类不能重写该方法。相当于在子类中新增了一个全新的方法。
05.在返回值类型方面:如果方法的返回值类型是基本数据类型和String,那么返回值类型不能改变。
如果返回值类型是引用数据类型,例如:父类a方法的返回值类型为User,那么在子类中重写了a方法,那么子类中的a方法的返回值类型,必须是User或者是User的子类。
方法重载:重载存在于同一个方法中。
01.方法名必须相同。
02.与方法返回值类型无关。
03.参数类型必须不同,包括参数的类型,顺序,参数的个数。
04.可以有不同的访问修饰符。
05.可以抛出不同的异常。
4.选择题
public class Outer{
public void someOuterMethod() {
//01
}
public class Inner{}
public static void main( String[]argv ) {
Outer o = new Outer();
//02
}
}
Which instantiates an instance of Inner?
A. new Inner(); //方在01
B. new Inner();//放在02
C. new o.Inner(); //放在01
D. new Outer.Inner(); //放在02
答案:A
解析:在本类中直接创建,在01位置,可以直接new Inner();
在外部类中,在02位置要通过
Outer.Inner inner = new Outer().new Inner();
创建对象。
5.选择题
Which method is used by a servlet to place its session ID in a URL that is written to the servlet’s response output stream?
(译:那个方法是servlet用于将其session ID入在一个URL中,该URL写入servlet的响应输出流)
A. The encodeURL method of the HttpServletRequest interface.
B. The encodeURL method of the HttpServletResponse interface.
C. The rewriteURL method of the HttpServletRequest interface.
D. The rewriteURL method of the HttpServletResponse interface.
答案:B
解析:
不存在rewriteURL这个方法。
/*
* session默认,也是要把sessionID写到客户端的内存当中(内存cookie)
* 重写地址,防止禁用cookie的时候,仍然可以使用session
*/
resp.encodeURL(req.getRequestURL().toString());
6. XML包括哪些解释技术,区别是什么?
答案:xml解析技术主要包括:DOM,SAX,JDOM,DOM4j
区别:
1.DOM(Document Object Modal):文档对象模型。
01.为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个主流内存的树结构,然后代码就可以使用DOM接口来操作这个树结构。
02.优点:整个文档树在内存中,便于操作。支持删除修改,重新排列等多种功能。
03.缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
04.使用场合:一旦解析了文档还需要多次访问这些数据;硬件资源充足。
2.SAX(Simple API for):事件驱动
01.为了解决DOM的问题,出现了SAX。当解析器发现元素开始,元素结束,文本,文档的开始或结束等时,发送事件,我们可以编写响应事件的代码,保存数据。
02.优点:不用事先调入整个文档,占用资源少,SAX解析器代码比DOM解析代码少,适用于Applet,下载。
03.缺点:不是持久的,事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素。
04.使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少。
3.DOM4J
01.DOM4J是一个非常优秀的Java XML API ,具有性能优异,功能强大和极端易使用的特点。同时它也是一个开源代码的软件。
4.JDOM:
01.为减少DOM,SAX的编码量,出现了JDOM,
02.优点:20-80原则,极大减少了代码量。
03.使用场合:要实现的功能简单,如解析,创建等。但是在底层,JDOM还是使用SAX(最常用),DOM.
7. JSP有哪些内置对象和动作?它们的作用分别是什么
答案:
01.request:用户端请求,此请求会包含来自GET/POST请求的参数
02.response:网页传回用户端的回应
03.pageContext:网页的属性是在这里管理
04.session:与请求有关的会话期
05.application servlet正在执行的内容
06.out:用来传送回应的输出
07.config servlet的构架部件
08.page JSP:网页本身
09.exception:针对错误网页,未捕捉的例外
8. JAVA程序的种类有
A: 类(Class)B:Applet C:application D:Servlet
答案:BCD
解析:B:内嵌于Web文件中,由浏览器来观看的_Applet
C:可独立运行的Application
D:服务器端的servlet
9.选择题
01.在编译程序时,所能指定的环境变量不包括class path
02.javac一次可编译数个Java源文件。
03.javac.exe能指定编译结果要置于哪个目录。
10. 谈谈你对MVC框架的理解
01.MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同的任务。
02.视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
03.模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性
04.控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。
然后根据处理的结果调用相应的视图来显示处理的结果。
05.MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。
06.例如SpringMVC的执行流程:
11. set的哪个实现类有排序的功能
答案:treeSet.
12. vector和arraylist的异同?treemap和hashmap的异同?
答案:
相同点:
一:都实现了List接口。
二:都是通过数组实现的。
三:数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
不同点:
一:arraylist 属于线程不安全(线程不同步)即当多线程进行对arraylist集合的操作时,有可能对数据进行不正确的操作。
vector是线程安全的(线程同步) 即当在同一时刻只能有一个线程进行对vector集合的操作,但是vector要做到线程同步,需要大量的花费,可能是消耗大量的内存或者cpu。
HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。而HashMap的函数则是非同步的,它不是线程安全的。若要在多线程中使用HashMap,需要我们额外的进行同步处理。 对HashMap的同步处理可以使用Collections类提供的synchronizedMap静态方法,或者直接使用JDK 5.0之后提供的java.util.concurrent包里的ConcurrentHashMap类。
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。
TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
TreeMap 实现了Cloneable接口,意味着它能被克隆。
TreeMap 实现了java.io.Serializable接口,意味着它支持序列化。
HashMap:底层是哈希表数据结构。线程不同步。
TreeMap:底层是二叉树数据结构,线程不同步,可用于给Map集合中的键进行排序。
13.如何将字串 String 转换成整数 int?
有两个方法:
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
14. 如何将整数 int 转换成字串 String ?
有3种方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;