设计了一套Java面试题(初级)

109 篇文章 5 订阅

一、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()的区别。

  1. 调用saveOrUpdate方法时,session缓存中存在相同数据库id的对象时会错报,而merge 方法会将两个相同数据库id的对象先合并,不会报错。

  2. 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、事务所具有的特性有哪些?

原子性
一致性
隔离性
持久性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值