1.简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。(15分)
2.下面程序运行会发生什么结果?如果有错误,如何改正? (15分)
interfaceA{
int x = 0;
}
class B{
int x =1;
}
class C
extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
}
3.简述 Java Server Page 和 Servlet 的联系和区别。(20分)
4.XML文档定义有几种形式?它们之间有何本质区别?
解析XML文档有哪几种方式?(20分)
5.简述synchronized和java.util.concurrent.locks.Lock的异同?(15分)
6.EJB规范规定EJB中禁止的操作有哪些?(15分)
7.最后还有一题考考你的眼力:
public String toString(){
return this + "@" + this.hashCode();
}
这个toString()方法实现有无不当的地方?(toString方法其实可以按你想输出的任何内容输出一些该类的信息)
答案:
1.简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。(15分)
区别主要答两点:
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路.如:
int a = 0;
int b = 0;
if( (a = 3) > 0 || (b = 3) > 0 ) //操后a =3,b=0.
if( (a = 3) > 0 | (b = 3) > 0 ) //操后a =3,b=3.
答对第一点得5分,答对第二点得10分.
本题考察最最基本的知识,但仍然有很多大牛级开发人员下马,任何语言在开始的部分
都会详细介绍这些基本知识,但除了学习第一种语言时,没有人在学习新的语言时愿意
花五分钟来复习一下.
2.下面程序运行会发生什么结果?如果有错误,如何改正? (15分)
interfaceA{
int x = 0;
}
class B{
int x =1;
}
class C
extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
}
本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,
两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)
本题主要考察对接口和类的最最基本的结构的了解.对于父类的变量,可以用super.x来
明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确.
3.简述 Java Server Page 和 Servlet 的联系和区别。(20分)
本题不用多说,在答相同点时应该明确知道jsp编译后是"类servlet"而"不是Servlet",
答区别时应该回答出"侧重于(视图/控制逻辑)".其它可根据情况加减分值.知识很简单,
但从面试的角度看,被试者不仅要能知道它们的区别,而且要能比较准确地表达出来(以
后写文档要能让别人看得懂,不产生歧义),回答"jsp编译后就是servlet"视为错误,回答
"jsp用于视图,servlet用于控制逻辑"视为错误,应该用侧重于,主要(多数)用于等词语
表达.
4.XML文档定义有几种形式?它们之间有何本质区别?
解析XML文档有哪几种方式?(20分)
本题三个答题点:
a: 两种形式 dtd,schema
b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的
根本目的)
c: 两种主要方式:dom,sax.答出两种得全分,如能答出saxt,或其它(在答出dom,sax的基
础上,如果应试者认为其它方式也可以视为对xml的解析应该允许.但没有答出dom,sax把
其它方式说成是对XML的解析不得分)应该加分.
5.简述synchronized和java.util.concurrent.locks.Lock的异同?(15分)
主要相同点:
Lock能完成synchronized所实现的所有功能.(其它不重要)
主要不同点:
Lock有比synchronized更精确的线程语义和更好的性能(在相同点中回答此点也行)
synchronized会自动释放锁.而Lock一定要求程序员手工释放.并且必须在finally从句
中释放,如果没有答出在finally中释放不得分.就如Connection没有在finally中关闭一
样.连最基本的资源释放都做不好,还谈什么多线程编程.
6.EJB规范规定EJB中禁止的操作有哪些?(15分)
共有8点,答出下列3-4点得满分.
· 不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等)
· 不能操作awt
· 不能实现服务器功能
· 不能对静态属生存取.
· 不能使用IO操作直接存取文件系统
· 不能加载本地库.
· 不能将this作为变量和返回.
· 不能循环调用.
7
public String toString(){
return this + "@" + this.hashCode();
}
会变成
public String toString(){
return String.valueOf(this) + "@" + String.valueOf(this.hashCode());
}
而valueOf方法又将去调用toString();
/**
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
*/
这样好像会有问题
原文地址:
Java本身没有这个能力,不过利用操作系统的命令可以做到。
public static String getMACAddress() {
String address = "";
String os = System.getProperty("os.name");
if ( os != null && os.startsWith("Windows")) {
try {
String command = "cmd.exe /c ipconfig /all";
Process p = Runtime.getRuntime().exec(command);
BufferedReader br =
new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
if (line.indexOf("Physical Address") > 0) {
int index = line.indexOf(":");
index += 2;
address = line.substring(index);
break;
}
}
br.close();
return address.trim();
}
catch (IOException e) { }
}
return address;
}
原文地址:
equals方法的重要性毋须多言,只要你想比较的两个对象不愿是同一对象,你就应该实现
equals方法,让对象用你认为相等的条件来进行比较.
下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为
这些规范在事实中并不是真正能保证得到实现.
1.对于任何引用类型, o.equals(o) == true成立.
2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.
3.如果 o.equals(o1) == true 成立且o.equals(o2) == true 成立,那么
o1.equals(o2) == true 也成立.
4.如果第一次调用o.equals(o1) == true成立再o和o1没有改变的情况下以后的任何次调用
都成立.
5.o.equals(null) == true 任何时间都不成立.
以上几条规则并不是最完整的表述,详细的请参见API文档.
对于Object类,它提供了一个最最严密的实现,那就是只有是同一对象是,equals方法才返回true,也就是人们常说的引用比较而不是值比较.这个实现严密得已经没有什么实际的意义,所以在具体子类(相对于Object来说)中,如果我们要进行对象的值比较,就必须实现自己的equals方法.
先来看一下以下这段程序:
public boolean equals(Object obj)
{
if (obj == null) return false;
if (!(obj instanceof FieldPosition))
return false;
FieldPosition other = (FieldPosition) obj;
if (attribute == null) {
if (other.attribute != null) {
return false;
}
}
else if (!attribute.equals(other.attribute)) {
return false;
}
return (beginIndex == other.beginIndex
&& endIndex == other.endIndex
&& field == other.field);
}
这是JDK中java.text.FieldPosition的标准实现,似乎没有什么可说的.
我信相大多数或绝大多数程序员认为,这是正确的合法的equals实现.毕竟它是JDK的API实现啊.
还是让我们以事实来说话吧:
package debug;
import java.text.*;
public class Test {
public static void main(String[] args) {
FieldPosition fp = new FieldPosition(10);
FieldPosition fp1 = new MyTest(10);
System.out.println(fp.equals(fp1));
System.out.println(fp1.equals(fp));
}
}
class MyTest extends FieldPosition{
int x = 10;
public MyTest(int x){
super(x);
this.x = x;
}
public boolean equals(Object o){
if(o==null) return false;
if(!(o instanceof MyTest )) return false;
return ((MyTest)o).x == this.x;
}
}
运行一下看看会打印出什么:
System.out.println(fp.equals(fp1));打印true
System.out.println(fp1.equals(fp));打印flase
两个对象,出现了不对称的equals算法.问题出在哪里(脑筋急转弯:当然出在JDK实现的BUG)?
我相信有太多的程序员(除了那些根本不知道实现equals方法的程序员外)在实现equals方法
时都用过instanceof运行符来进行短路优化的,实事求是地说很长一段时间我也这么用过。
太多的教程,文档都给了我们这样的误导。而有些稍有了解的程序员可能知道这样的优化可能
有些不对但找不出问题的关键。另外一种极端是知道这个技术缺陷的骨灰级专家就提议不要这
样应用。
我们知道,"通常"要对两个对象进行比较,那么它们"应该"是同一类型。所以首先利用instanceof
运行符进行短路优化,如果被比较的对象不和当前对象是同一类型则不用比较返回false,但事实
上,"子类是父类的一个实例",所以如果子类 o instanceof 父类,始终返回true,这时肯定
不会发生短路优化,下面的比较有可能出现多种情况,一种是不能造型父类而抛出异常,另一种
是父类的private 成员没有被子类继承而不能进行比较,还有就是形成上面这种不对称比较。可能
会出现太多的情况。
那么,是不是就不能用 instanceof运行符来进行优化?答案是否定的,JDK中仍然有很多实现是正
确的,如果一个class是final的,明知它不可能有子类,为什么不用 instanceof来优化呢?
为了维护SUN的开发小组的声誉,我不说明哪个类中,但有一个小组成员在用这个方法优化时在后加
mar
分享到:
相关推荐
java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结
Java 基础知识大全 本资源摘要信息是 Java 基础知识大全的总结,涵盖了 Java 语言的基本概念、特点、历史发展等方面的知识点。以下是本资源摘要信息的详细内容: 一、 Java 语言的特点 * 面向对象:Java 语言是...
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...
java基础知识的培训ppt,对于java初学者来说可以有一些作用。
Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...
### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...
java基础知识
"Java基础知识梳理" Java 是一种广泛使用的编程语言,适合初学者对 Java 相关知识的总结。下面是 Java 基础知识的梳理: 一、Java 开发环境 * JDK(Java Development Kit):可以开发编译与运行 JAVA 程序的工具...
自己在网上找的相对好一点的java复习资料,留个纪念 。详细讲述了Java课程的知识点
java基础知识点,面试宝典,最适合你的java面试知识点,所学java知识点总结
java基础知识点总结及面试问题java基础知识点总结及面试问题java基础知识点总结及面试java基础知识点总结及面试问题
Java基础知识.pdf
Java基础知识总结 一些的基础知识 适合初学者和回顾以前的知识
Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...
第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第...