一、Java基础题
1、在Java中,如何跳出当前的多重嵌套循环?
1.使用continue+标签或break+标签。
2.使用continue+条件控制或break+条件控制。
3.使用return。
2、short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错?
1.short s1 = 1;这句代码是不会报错的,因为1是属于字面常量,编译器能判断1是小于short的最大值的,所以不会报错。
2. s1 = s1 + 1;会报错,因为不能用short类型变量存放int类型的值,范围小的short和范围大的int运算时,short会被自动转成int。
3. short s1 = 1; s1 += 1;不会报错,因为编译器对自增运算中的自增量转换成它对应的类型,所以s1 += 1中的1是short类型的,所以不会报错。
3、"=="和equals有什么区别?
= =是java操作符,比较的是内存地址,一般用与判断两个引用变量是否为同一个对象,或者判断原生类型的值是否相同。
equals用于比较两个对象是否相同,是Object类的方法,equals在Object类中默认实现是使用==对比两个对象的引用地址
4、重载和重写的区别有哪些?
1.重载是指在一个类中,多个方法的方法名相同,参数类型或顺序不同,那么这些方法之间构成重载。
2.重写是指在父子类之间,子类的方法签名和父类的方法签名完全一样,那么这两个方法构成重写。
3.重载可以改变返回值类型,重写不能改变返回值类型(因为调用方法时,返回值可以接收也可以不接收,所以编译器无法根据返回值来判断是否重载)。
5、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法。
6、请用代码创建一个静态内部类和匿名内部类(伪代码即可)。
class Test{
static class SC{};//一个静态内部类
Object obj=new Object(){};//一个匿名内部类
}
7、如下代码会打印什么?
public class Test {
public static void main(String[] args) {
System.out.println( m1(2) );
System.out.println( m2(2) );
}
static int m1(int i){
try { return i/=0; }
catch(Exception e){return i*=i;}
finally{ return i+=1; }
}
static int m2(int i){
try { return i/=i; }
catch(Exception e){return i*=i;}
finally{ return i++; }
}
}
会打印5和1。
8、throws,throw,try,catch,finally分别代表什么意义?
throws 用来表名方法可能抛出异常。
throw 用来明确的抛一个异常。
try 用来监控一段可能出现异常的代码。当出现异常后进入catch块,进行异常类型匹配。
catch用来处理已经发生的异常。
finally表示无论是否出现异常都要执行的代码。
9、有几种方法可以实现一个线程? stop()和suspend()方法为何不推荐使用?
1.四种,继承Thread,实现Runnable,实现Callnable,使用线程池。
2.易造成死锁。
10、sleep() 和 wait() 有什么区别?
1.sleep是线程类的静态方法,wait 是Object类的实例方法。
2.sleep必须捕获异常,而wait不需要捕获异常。
3.sleep是让出执行权但不会释放锁,wait是释放锁后失去执行权。
4.wait只能在同步方法或同步代码块里使用,而sleep没有限制。
11、ArrayList和LinkedList的异同点,HashMap和Hashtable的异同点。
1.ArrayList和LinkedList都实现了Map接口。
ArrayList用数组实现,LinkedList用链表实现。
ArrayList查找效率高,LinkedList插入删除效率高。
2. Hashtable和HashMap都实现了Map接口。
Hashtable是线程安全的,HashMap是线程不安全的。
Hashtable不允许键值为null,HashMap允许。
12、Java对象如何序列化
class S implements Serializable{}//要序列化的类必须实现Serializable接口
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(“obj.db”));//创建对象输出流
out.writeObject(new S());//写出对象
ObjectInputStream in=new ObjectInputStream(new FileInputStream(“obj.db”));//创建对象输入流
S s=(S) in.readObject();//读取对象
13、如何实现动态代理
1,将目标类要代理的方法提构出一个接口,
2,实现InvocationHandler,实现invoke方法,在invoke方法中调用method.invoke调用目标方法,根据需要在调用前后加额外的处理。
3,调用Proxy.newProxyInstance,并强转返回值为提构出的那个接口,得到代理对象。
4,调用代理对象的方法。
如果不想目标类实现任何接口,可以使用java字节码编辑技术,在java程序运行中生成目标类的子类从而实现动态代理效果,开源的字节码编辑框架cglib非常流行。
二、JavaWeb题
15、HTTP请求的GET与POST方式的区别。
1、get的请求参数在url,post的请求参数在formBody。
2、get不能处理复杂类型的参数,post对请求参数的类型没有限制。
16、forward() 与redirect()的区别?
1、forward是请求对象的方法,redirect是响应对象的方法。
2、forward是转发,地址栏不会显示转发后的路径,redirect是重定向,地址栏会显示重定向后的路径。
3、forward比redirect效率更高。
4、forward是1次请求,redirect是2次请求。
5、forward只能在本工程内转向,redirect可以跳转到其他工程。
17、get和post分别在什么情况下使用比较合适?
在简单的查询请求时,可以使用get。
在复杂的查询请求以及新增删除修改请求时,更加适合使用post。
在提交复杂类型的参数时,必须使用post,因为get没法传递复杂参数。
在存在隐私等敏感数据参数时,必须使用post,因为get会显示在浏览器地址栏被别人看见。
18、JSP中动态include与静态include的区别?
1、静态只产生一个文件,动态产生两个。
2、静态不可以带参数,动态可以带参数。
3、静态不会动态更新,动态可以。
19、如何获取Cookie?
1.Java:Cookie[] cookies = request.getCookies();
2.JS:var cookies = document.cookie;
20、JSP和Servlet有哪些相同点和不同点?
1.相同点:JSP是特殊的Servlet。
2.不同点:JSP 侧重于显示Servlet侧重于逻辑,JSP可以直接部署源码在服务器,而Servlet必须编译成class文件才可以部署到服务器。
21、hibernate中的merge()和saveOrUpdate()的区别,load()和get()的区别。
-
调用saveOrUpdate方法时,session缓存中存在相同数据库id的对象时会错报,而merge 方法会将两个相同数据库id的对象先合并,不会报错。
-
load()和get(),当数据库中的记录不存在时load()方法抛出ObjectNotFoundException()而get()返回null,load()默认采用的是延迟加载策略,返回的是代理对象,get()方法总是采用立即检索策略,返回的是实际对象。
22、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
1.两种形式DTD和Schema。
2.区别,Schema本身是xml的,比DTD有更精确的规则定义。
3.DOM,SAX,Pull。
23、什么是Spring的IOC、AOP?为什么要使用IOC、AOP?IOC、AOP的底层是用什么技术实现的?
1.IOC是控制反转,AOP是面向切面编程。
2.IOC,为了将调用者与实现者解耦(即对象的声明和对象的创建分离),AOP,为了将程序中不同类不同方法的通用代码进行封装复用,亦可实现将核心代码与其他代码分离解耦的功能。
3.IOC使用反射实现,AOP使用java动态代理或cglib实现。
24、Struts2的工作流程。
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法, 使用反射,将请求参数值注入给Aciton的属性。
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单(请求参数)验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
25、为什么要用 ORM?
简化JDBC繁琐的操作,使用OOP的思想操作数据库,方便使用和维护。
将实体类与数据库表的关系分离出来,可以降低实体类和数据库的耦合,减少程序中的硬代码,便于扩展。
26、怎么处理服务器并发问题?
1.提升服务器硬件配置。
2.增加服务器数量,使用集群。
3.长时间的任务使用多线程异步处理。
4.限制过多的请求访问。
27、请给出一个分页器框架的设计思路,包括查询条件展现及查询验证、后台数据生成,列表数据展示等。并详细描述实现方法。
28、解释Oracle中Function,Procedure和Package区别。
function 和procedure都是PLSQL代码的集合。function有返回值,procedure没有返回值,用输出参数代替返回值,function可以直接调用,procedure必须要使用exec关键字才能调用。package是一组function和proceudre的集合,可以理解成命名空间。
29、数据库设计中有哪几种范式?
第一范式:每列数据的不可分割。
第二范式:每列都依赖主键。
第三范式:表中不包含其他表已存在的非主键数据(不允许冗余)。
30、事务所具有的特性有哪些?
原子性
一致性
隔离性
持久性