部分面试题答案:
1、
ArrayList和LinkedList都间接的实现了List接口,都不是线程安全的(Vector是线程安全的)。
ArrayList和Vector底层是基于数组结构,而LinkedList底层是基于链表(双链表)结构。
ArrayList的查询修改快,LinkedList的增删速度快。
ArrayList扩容是增长原来的一半(Vector是增长原来的2倍),LinkedList是基于节点来扩容的。
ArrayList初始化容量大小是10,vector初始化容量也是10。
2、
public class ManyThreads {
private int j;
public static void main(String[] args) {
// TODO Auto-generated method stub
ManyThreads many = new ManyThreads();
Inc inc = many.new Inc();
Dec dec = many.new Dec();
for (int i = 0; i < 2; i++) {
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
private synchronized void inc() {
j++;
System.out.println(Thread.currentThread().getName() + "inc" + j);
}
private synchronized void dec() {
j--;
System.out.println(Thread.currentThread().getName() + "dec" + j);
}
class Inc implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
inc();
}
}
}
class Dec implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
dec();
}
}
}
4. 服务端:
public class Server {
public static void main(String[] args) {
BufferedReader bReader=null;
PrintWriter pWriter=null;
try {
ServerSocket server = new ServerSocket(2000);
Socket socket = server.accept();
//获取输入流
bReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出流
pWriter = new PrintWriter(socket.getOutputStream(),true);
//获取接收的数据
String string= bReader.readLine();
//发送相同的数据给客户端
pWriter.println(string);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
try {
bReader.close();
pWriter.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
客户端:public class Client {
public static void main(String[] args) {
BufferedReader brc = null;
PrintWriter pwc = null;
try {
Socket socket = new Socket("127.0.0.1",2000);
brc = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pwc = new PrintWriter(socket.getOutputStream(),true);
pwc.println("Hello");
String sc = null;
while (true) {
sc = brc.readLine();
if (sc!=null) {
break;
}
}
System.out.println(sc);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
try {
brc.close();
pwc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5、
servlet的生命周期分为三个阶段:初始化阶段,调用init()方法,响应客户请求阶段 调用service()方法,销毁阶段 调用destroy()方法
6、
有状态会话session Bean实例有三种状态,不存在,就绪,和钝化。Entitybean有三种状态,不存在,在pool中,就绪