1.运行时异常和一般异常的区别
异常表示程序运行过程中出现的与我们假设的状态不相符的状态。运行时异常表示虚拟机运行的操作中出现的错误。java编辑器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求捕获未被声明的运行时异常。Error表示严重性的问题,比如内存泄露,通常这种问题极难修复,而Exception则是通过改善设计通常可以避免的问题。
2.Java的异常处理机制
java 异常指的是java程序运行时(非编译时)出现的非正常的情况或错误。java使用面向对象的方式来处理异常,把程序中发生的异常按照类别封装到一个类,类里面包含了异常的相关信息。所有的异常的根类是java.lang.Throwable,下面派生了两个子类,Error和Exception。如果Error发生(内存泄漏,线程死锁等等)程序就会挂掉,而Exception也分为系统异常和普通异常。普通异常如网络掉线,硬盘不够等等,普通异常是系统设计方面的问题,可以通过改善设计解决问题,如空指针异常(NullPointerException),数组越界异常(ArrayIndexOutofBoundsException),类型转换异常(ClassCastException),读写异常(IOException),数据库异常(SQLException)
3.同步和异步有什么异同
如果数据需要在线程之间共享,比如正在写的数据今后会被另一个线程读,或者正在读的数据已经被另一个线程写过了,这些数据是共享数据,需要使用同步,否则数据发生脏读。当应用程序的某个对象调用了一个需要耗时很长的方法,但不希望程序等待方法返回时,这时候就使用异步编程,将更有效率。
4.线程的run和start方法
启动一个线程使用的是start方法,run方法里面是线程所关联的执行代码。start方法使线程处于就绪状态,以后可以被调度为运行状态。
5.下面题目的结果
public static void main(String[] args) {
Byte b = new Byte("127");
System.out.println(b.toString()==b.toString());
System.out.println(b.toString().equals(b.toString()));
}
答案是:
false
true
false
true
6.java常见的包
java.lang,java.io,java.sql,javax.servlet,org.apache.structs.action
7. Java AOP
AOP是Aspect Oriented Programming的缩写,意思是面向方面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种编程思想。
从OOP角度分析,我们关注业务的处理逻辑,是属于纵向的行为,从AOP角度分析,我们关注对象行为发生时的问题,是属于横向的行为。
AOP 作用:
1 监控函数的调用
2 捕获异常发生
实际应用在:事务、安全、日志等横切关注。
//接口
public interface UserBean
{
void getUser();
void addUser();
void updateUser();
void deleteUser();
}
//原始实现类
public class UserBeanImpl implements UserBean
{
private String user = null;
public UserBeanImpl()
{
}
public UserBeanImpl(String user)
{
this.user = user;
}
public String getUserName()
{
return user;
}
public void getUser()
{
System.out.println("this is getUser() method!");
}
public void setUser(String user)
{
this.user = user;
System.out.println("this is setUser() method!");
}
public void addUser()
{
System.out.println("this is addUser() method!");
}
public void updateUser()
{
System.out.println("this is updateUser() method!");
}
public void deleteUser()
{
System.out.println("this is deleteUser() method!");
}
}
//代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.cignacmc.finance.bean.UserBeanImpl;
public class UserBeanProxy implements InvocationHandler
{
private Object targetObject;
public UserBeanProxy(Object targetObject)
{
this.targetObject = targetObject;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
UserBeanImpl userBean = (UserBeanImpl) targetObject;
String userName = userBean.getUserName();
Object result = null;
//权限判断
if(userName != null && !"".equals(userName))
{
result = method.invoke(targetObject, args);
}
return result;
}
}
//测试类
import java.lang.reflect.Proxy;
import com.cignacmc.finance.bean.UserBean;
import com.cignacmc.finance.bean.UserBeanImpl;
import com.cignacmc.finance.proxy.UserBeanProxy;
public class ProxyExe
{
public static void main(String[] args)
{
System.out.println("Proved.............");
UserBeanImpl targetObject = new UserBeanImpl("Bob Liang");
UserBeanProxy proxy = new UserBeanProxy(targetObject);
//生成代理对象
UserBean object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), proxy);
object.addUser();
System.out.println("NO Proved.............");
targetObject = new UserBeanImpl();
proxy = new UserBeanProxy(targetObject);
//生成代理对象
object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), proxy);
object.addUser();
}
}
输出:
Proved.............
this is addUser() method!
NO Proved.............
8.Union 和 Union All
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All
两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
9.doGet和doPost
10.servlet的生命周期