accept
listen
connect
close
public class Demo { class Super{ int flag=1; Super(){ test(); } void test(){ System.out.println("Super.test() flag="+flag); } } class Sub extends Super { Sub(int i){ flag=i; System.out.println("Sub.Sub()flag="+flag); } void test(){ System.out.println("Sub.test()flag="+flag); } } public static void main(String[] args) { new Demo().new Sub(5); }
Sub.test() flag=1 Sub.Sub() flag=5
Sub.Sub() flag=5 Sub.test() flag=5
Sub.test() flag=0 Sub.Sub() flag=5
Super.test() flag=1 Sub.Sub() flag=5
在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
使用单向一对多关联,不使用双向一对多
不用一对一,用多对一取代
配置对象缓存,不使用集合缓存
继承类使用显式多态
优化Hibernate所鼓励的7大措施:
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存
关于 访问权限说法正确 的是 ? ( )
类定义前面可以修饰public,protected和private
内部类前面可以修饰public,protected和private
局部内部类前面可以修饰public,protected和private
以上说法都不正确
正确
错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
Two{
Byte x;
}
class
PassO{
public
static
void
main(String[] args){
PassO p=
new
PassO();
p.start();
}
void
start(){
Two t=
new
Two();
System.out.print(t.x+””);
Two t2=fix(t);
System.out.print(t.x+” ” +t2.x);
}
Two fix(Two tt){
tt.x=
42
;
return
tt;
}
}
|
null null 42
null 42 42
0 0 42
0 42 42
An exception is thrown at runtime
Compilation
sleep是线程类(Thread)的方法,wait是Object类的方法;
sleep不释放对象锁,wait放弃对象锁
sleep暂停线程、但监控状态仍然保持,结束后会自动恢复
wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态
-1
0
1
以上都不是
CallableStatement是PreparedStatement的父接口
PreparedStatement是CallableStatement的父接口
CallableStatement是Statement的父接口
PreparedStatement是Statement的父接口
启动一个线程的方法是:thread. run()
结束一个线程的通常做法是:thread. stop()
将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。
让一个线程等待另一个线程的通知的方法是:thread. sleep()
new Socket("localhost",9000);
new ServerSocket(9000);
new Socket(9000);
new ServerSocket("localhost",9000);
每个中文字符占用2个字节,每个英文字符占用1个字节
假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。
Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。
实现国际化应用常用的手段是利用ResourceBundle类
在 Java 中,属于整数类型变量的是()
single
double
byte
char
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
1
2
3
|
int
i =
5
;
int
j =
10
;
System.out.println(i + ~j);
|
Compilation error because”~”doesn’t operate on integers
-5
-6
15
公式-n=~n+1可推出~n=-n-1,所以~10=-11再加5结果为-6
执行如下代码段后,变量s1引用的字符串值是( )。
String s1 = "ABCD"; String s2 = "1234"; System.out.println(s1 + s2); |
ABCD
1234
ABCD1234
1234ABCD
1
2
3
4
5
6
7
|
public
class
f{
public
static
void
main(String[] args){
String foo1 = args[
1
];
String foo2 = args[
2
];
String foo3 = args[
3
];
}
}
|
程序编译错误
a b c
程序运行错误
t11
jre 判断程序是否执行结束的标准是()
所有的前台线程执行完毕
所有的后台线程执行完毕
所有的线程执行完毕
和以上都无关
Semaphore
ReentrantLock
Future
CountDownLatch
1
2
3
4
5
6
7
8
9
10
|
public
class
TestObj{
public
static
void
main(String[] args){
Object o=
new
Object(){
public
boolean
equals(Object obj){
return
true
;
}
};
System.out.println(o.equals(“Fred”));
}
}
|
运行时抛出异常
true
Fred
第三行编译错误
内部类
public
class
TestObj {
public
static
void
main(String[] args){
Object o=
new
Object(){
//重写了equals(),不管参数是什么,都是返回true
public
boolean
equals(Object obj){
return
true
;
}
};
System.out.println(o.equals(
"Fred"
));
}
}
数组是一种对象
数组属于一种原生类
int number = []{31,23,33,43,35,63};
数组的大小可以任意改变
引用数据类型3种:数组,类,接口
关于以下程序代码的说明正确的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
HasStatic{
private
static
int
x =
100
;
public
static
void
main(String args[ ]){
HasStatic hs1 =
new
HasStatic();
hs1.x++;
HasStatic hs2 =
new
HasStatic();
hs2.x++;
hs1=
new
HasStatic();
hs1.x++;
HasStatic.x--;
System.out.println(
"x="
+x);
}
}
|
5行不能通过编译,因为引用了私有静态变量
10行不能通过编译,因为x是私有静态变量
程序通过编译,输出结果为:x=103
程序通过编译,输出结果为:x=102
public class Java_class {
private static int number=100;
public static void main(String[] args){
Java_class jc=new Java_class();
jc.number++;
Java_class.number++;
System.out.print(number);
}
}
垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
垃圾收集允许程序开发者明确指定释放 哪一个对象
垃圾回收机制保证了JAVA程序不会出现 内存溢出
进入”Dead”状态的线程将被垃圾回收器回收
以上都不对
D:进入DEAD的线程,它还可以恢复,GC不会回收
Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素
事件源
事件对象
事件过程
事件监听器
1) 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;
2) 事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
3) 事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;
类只能继承一个父类,但是可以实现多个接口
抽象类自身可以定义成员而接口不可以
抽象类和接口都不能被实例化(忽略匿名内部类)
一个类可以有多个基类和多个基接口
forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
执行redirect时,服务器端告诉浏览器重新去请求地址
forward是内部重定向,redirect是外部重定向
redirect默认将产生301 Permanently moved的HTTP响应
下面赋值语句中正确的是()
double d=5.3e12;
float f=11.1;
int i=0.0;
Double oD=3;
执行语句“int a= ’ 2 ’ ”后,a的值是( )
2
50
49
0
常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
关于匿名内部类叙述正确的是? ( )
匿名内部类可以继承一个基类,不可以实现一个接口
匿名内部类不可以定义构造器
匿名内部类不能用于形参
以上说法都不正确
1
2
3
4
5
6
7
8
9
10
11
|
public
class
EqualsMethod
{
public
static
void
main(String[] args)
{
Integer n1 =
new
Integer(
47
);
Integer n2 =
new
Integer(
47
);
System.out.print(n1 == n2);
System.out.print(
","
);
System.out.println(n1 != n2);
}
}
|
false,false
false,true
true,false
true,true
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
class
Foo {
final
int
i;
int
j;
public
void
doSomething() {
System.out.println(++j + i);
}
}
|
0
1
2
不能执行,因为编译有错
1
2
3
4
5
6
|
public
abstract
class
MyClass {
public
int
constInt = 5;
//add code here
public
void
method() {
}
}
|
public abstract void method(int a);
constInt = constInt + 5;
public int method();
public abstract void anotherMethod() {}
答案是A
关于AWT和Swing说法正确的是?
Swing是AWT的子类
AWT在不同操作系统中显示相同的风格
AWT不支持事件类型,Swing支持事件模型
Swing在不同的操作系统中显示相同的风格
copyonwritearraylist适用于写多读少的并发场景
readwritelock适用于读多写少的并发场景
concurrenthashmap的写操作不需要加锁,读操作需要加锁
只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
1
-(2^62+2^61+2^60+1)
2^62+2^61+2^60+1
2^59+(2^55+2^54+…+2^2+2^1+2^0)
(1)原码是符号位加上真值的绝对值,即用第一位表示符号位,其余位表示值。
(2)正数的反码是其本身。负数的反码是在原码的基础上,符号位不变,其余按位取反。
(3)正数的补码是其本身。负数的补码是在原码的基础上,符号位不变,其余按位取反,最后加1。
(4)计算机进行符号运算时,会以补码表示,符号位和数字位会一起参与运算。
a-b实际转换为[a-b]补=[a]补+[-b]补
a为1111(后面60个0),1开头,所以为一个负数;补码为1001(后面60个0)
b为0111(后面60个1),0开头,所以为一个正数;补码为其本身。
-b为1111(后面60个1),补码为1000(后面59个0,最后有个1)
所以1001(后面60个0) + 1000(后面59个0.最后有个1) = 0001(后面59个0,最后有个1),发生了溢出,比如采用双高位判别法处理溢出,则补码1001(后面59个0,最后有个1)转换为原码为1110(后面60个1),即-(7 *2的60次方+1)=-(2的62次方+2的61次方+2的60次方 + 1)
答案:-(2^62+2^61+2^60+1)
在开发中使用泛型取代非泛型的数据类型(比如用ArrayList
对
错
抽象类可以有构造方法,接口中不能有构造方法
抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
一个类可以实现多个接口,但只能继承一个抽象类
接口中可以有普通成员变量,抽象类中没有普通成员变量
long test=012
float f=-412
int other =(int)true
double d=0x12345678
byte b=128
1
2
3
|
Integer i =
42
;
Long l = 42l;
Double d =
42.0
;
|
(i == l)
(i == d)
(l == d)
i.equals(d)
d.equals(l)
i.equals(l)
l.equals(42L)
ABC3 个选项很明显,不同类型引用的 == 比较,会出现编译错误,不能比较。
DEF 调用 equals 方法,因为此方法先是比较类型,而 i , d , l 是不同的类型,所以返回假。
选项 G ,会自动装箱,将 42L 装箱成 Long 类型,所以调用 equals 方法时,类型相同,且值也相同,因此返回真。
Serializable
Cloneable
Runnable
Throwable
Comparable
总之,java 的
transient
关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字
transient
,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
synchronized
volatile
serialize
static
以下代码运行输出的是
1
2
3
4
5
6
7
8
9
10
11
|
public
class
Person{
private
String name =
"Person"
;
int
age=
0
;
}
public
class
Child
extends
Person{
public
String grade;
public
static
void
main(String[] args){
Person p =
new
Child();
System.out.println(p.name);
}
}
|
输出:Person
没有输出
编译出错
运行出错
Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
public
class
A2{
public
static
void
main(String[] args){
int
[] a={
2
,
4
,
6
,
8
,
3
,
6
,
9
,
12
};
doSomething(a,
0
,a.length-
1
);
for
(
int
i=
0
;i<=a.length-
1
;i++)
System.out.print(a[i]+
" "
);
}
private
static
void
doSomething(
int
[] a,
int
start,
int
end){
if
(start
int
p=core(a,start,end);
doSomething(a,start,p-
1
);
doSomething(a,p+
1
,end);
}
}
private
static
int
core(
int
[] a,
int
start,
int
end)
{
int
x=a[end];
int
i=start;
for
(
int
j=start;j<=end-
1
;j++){
if
(a[j]>=x){
swap(a,i,j);
i++;
//交换了几次
}
}
//把最大的放到最后
swap(a,i,end);
//把最大的放到i的位置
return
i;
}
private
static
void
swap(
int
[] a,
int
i,
int
j)
{
int
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
|
找到最大值
找到最小值
从大到小的排序
从小到大的排序
ActionForm
ValidatorActionForm
ValidatorForm
DynaValidatorActionForm
DynaValidatorActionForm 动态验证表单
11 17 34
22 74 74
6 7 7
22 34 17
1
|
答案就是:
22
,
34
,
17
|
java.servlet
javax.servlet
servlet.http
javax.servlet.http
javax是Sun公司提供的一个扩展包,算是对原 JAVA 包的一些优化处理,现在已经有很多都是基于JAVAX的程序开发而不是java包。
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
An InterruptedException is thrown.
The thread executes a wait() call.
The thread constructs a new Thread.
A thread of higher priority becomes ready.
The thread executes a waitforID()call on a MediaTracker.
D选项有问题啊,优先级高只能是说明,它获得时间片的概率大,但不是一定会执行它