1,写一个一定发生死锁的程序
public class Test011 {
public static void main(String[] args) {
Thread t1=new Thread(new DeadLock(true));
Thread t2=new Thread(new DeadLock(false));
t1.start();
t2.start();
}
}
class DeadLock implements Runnable{
boolean flag;
static Object o1=new Object();
static Object o2=new Object();
public DeadLock(boolean flag){
this.flag=flag;
}
@Override
public void run() {
// TODO Auto-generated method stub
if(this.flag){
synchronized (o1) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o2) {
System.out.println("我没发生死锁啊");
}
}
}else{
synchronized (o2) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("我也是");
}
}
}
}
}
控制台啥都没有显示,所以发生了死锁
2,手写一个循环队列的出入队
public class Test012 {
public static void main(String[] args) {
Queue q=new Queue(4);
q.add(1);
q.add(2);
q.add(3);
q.remove();
q.add(4);
q.remove();
q.add(5);
q.add(6);
}
}
class Queue{
private int size;
private int front;
private int rear;
private int[] base;
public Queue(int size){
this.size=size;
front=0;
rear=0;
base=new int[size];
}
public void add(int x){
if((rear+1)%size==front){
System.out.println(x+"添加失败,队满");
}else{
base[rear]=x;
rear=(rear+1)%size;
System.out.println(x+"添加成功");
}
}
public void remove(){
if(rear==front){
System.out.println("队列为空");
}else{
System.out.println("移除"+base[front]);
front=(front+1)%size;
}
}
}
3,session和cookie的区别
a,session是作用于服务器端,cookie是作用于客户端
b,session安全性高于cookie
c,session因为作用于服务器端,所以它增加了服务器端存储的压力
4,介绍JSP内置对象
request,response,session,application,out,page,pageContext,config,exception
5,forward和redirect的区别
- forward地址栏的url不会发生改变,而redirect作用的话,地址栏的URL会发生改变
- forward能够存储requestScope保存的attribute值,而redirect则不会保存
- forward的性能高于redirect
6,如何实现网站访问的统计
String strNum=(String)application.getAttribute("num2");
int num2=1;
if(strNum!=null){
num2=Integer.parseInt(strNum);
}
if(session.isNew()){
num2++;
application.setAttribute("num2",num2+"");
}