java常见面试题



java常见面试题有哪些?

1、二进制是一个考点,移位运算也偶尔会遇到。个人感觉,考这些题的公司都有点变态!java程序员,犹其是做WEB开发的,实际工作中,会用到这些吗?

2、线程是一个主要考点,主要考线程的各种状态。比如,启用线程的两种方式,sleep和wait方法的区别,线程同步有哪些方式。建议系统看一下线程的这几个方面。
同步的实现方面有两种,分别是synchronized,wait与notify 。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

3、static块、static成员、构造器、非静态初始化块、非静态成员初始化的顺序。当有多层继承关系时,这些又是如何执行的?最好是自己能写个例子证明。

4、IO流。主要有哪两种流,字节流和字符流相互转换。建议反复写这几个例子,直到记熟为止。

5、反射,什么是反射,举例说明。有什么好处?
反射就是把Java类中的各种成分映射成相应的java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示Java类的Class类显示要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Contructor、Package等等。

一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以的得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反射的要点。

构造方法的反射应用

Consturctor(构造器)类代表某个类中的一个构造方法

得到某个类所有的构造方法:例如:Constructor [] constructors = Class.forName(“java.lang.String”).getConstructors();

得到某一个构造方法:例如:Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

创建实例对象:通常方式:String str=new String(new StringBuffer(“abc”));
反射方式:String str=(String) constructor.newInstance(new StringBuffer(“abc”));

 

6、java的内存,分为堆和栈,栈内存储程序中定义的变量(基本类型和引用类型),堆中存储引用变量所引用的对象。能不能再把它分细一点?
7、arraylist的长度。假如,我声明时的长度为10,当我加入第11个时,它会怎么操作?

8、arraylist,victor,linkedlist,set有什么区别?他们底层,其实都是数组。

9、hashmap,hashtable,treemap有什么区别?

10、collection,collections有什么别区?他们和list有什么关系?

11、说说TCP协议的工作原理,它与UDP有什么区别?

12、
string a=”abc”;string b=”abc”;内存中,产生了几个对象?
string a=new string(“abc”);string b=new string(“abc”);内存中,产生了几个对象?
string a=”abc”;string b=new string(“abc”);内存中,产生了几个对象?
当用”==”比较两个对象时,得到的结果是什么?
13、抽象类、接口有什么区别?

14、什么是方法重写(方法覆盖),什么是方法重载,应该注意一些什么问题?什么是多态?

15、类的继承问题,主要是什么时候调用父类的变量和方法,什么时候调用子类的变量和方法。

16、final修饰的变量,方法,类有什么特点。

17、public,protect,private的区别。

 

18、try-catch-finally的执行顺序与规则。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
try{}finally{}
try{}catch(Exception x){}finally{}
try{}catch(Throwable t){}finally{}
这几种写法都是合法的!

19、请说出你常见的几种异常。

20、throw与throws有什么区别?

21、请列举几种声明异常,即编译时就必须预先抛出的异常。

 

22、说说你用过的初始化类的方式(主要看你知不知道newinstance)。
Class.forName(“java.lang.String”).newInstance();
(String)String.class.newInstance()

23、instanceof用法。

24、举例说明class类:
Class类(在java.lang包中,Instances of the class Classrepresent classes and interfaces in a running Javaapplication):
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息
获取Class实例的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例(staticClass forName(String className)
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。
在newInstance()调用类中缺省的构造方法 ObjectnewInstance()(可在不知该类的名字的时候,常见这个类的实例)
以下示例使用 Class 对象显示一个对象的 Class 名:
void printClassName(Object obj) {
System.out.println(“The class of ” + obj +
” is ” + obj.getClass().getName());
}

在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象。
public class ClassTest {
public static void main(String [] args)throws Exception{
String str1=”abc”;
Class cls1=str1.getClass();
Class cls2=String.class;
Class cls3=Class.forName(“java.lang.String”);
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
}
}
25、String是最基本的数据类型吗? int 和 Integer 有什么区别?


26、string和stringbuffer。
27、&和&&的区别。

28、final, finally, finalize的区别。

29、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
30、List, Set, Map是否继承自Collection接口?
List,Set是,Map不是

31、简单介绍一下连接池。
J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
32、length和length()

33、equals()和==区别?
34、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

35、switch的参数问题。
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
36、变量的声明问题。
经常会考你double a=5.0;double b=5;double c=5.0d; float d=4.0f等等,这些,自己去试试吧!
37、编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance;   }
}

其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些

38、你所知道的集合类都有哪些?主要方法?
最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作”键”和”值”),其中每个键映射到一个值。
39、char型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。

40、举例说明什么是工厂模式。

41、什么是java序列化,如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
42、跳出循环的几种方式:
countinue
break
return
还有一种:
for(…){
A:for(…){
for(){
break A;
}
}
}

 

 
1、说个SQL优化的例子。

2、oracle是关系型数据库。它的保留字有哪些?事务提交与回滚。oracle的建表语句、建约束语句怎样写?函数、视图、索引、存储过程如何写?

3、常见查询:以group by为首的统计查询,left join与right join ,union和union all,分析函数row_number() over()\rank() over()\dense_rank() over()

4、oracle的游标用法。

5、oracle伪列rownum。

6、oracle序列。

7、在oracle的查询条件中,and和or的执行优先顺序?

8、oracle异常。

1、请写一个json字符串。

2、xml有哪四种解析方式。dom,jdom,dom4j,sax,希望每一种,都写个例子亲自试试。

3、javascript中,从上到下的对象分别是:window.document.html

4、javascript的函数中,如何返回结果?跟java的方法返回值一样,只不过在函数声明时不用写返回类型。

5、jquery中的选择器有哪些?假如,我要取10个相同ID的元素,如何取?如何取某个元素中的所有元素?个人感觉,jquery常见的那几种获取元素的方式,一定要掌握好。

6、什么是spring mvc,什么是spring ioc?spring是如何控制事务的?用注解的方式,spring如何声明一个service?

7、hibernate实体类是怎样写的?生成主键的方式有哪些?如何一对多,多对一,多对多?如何配置懒加载?什么是一级缓存,二级缓存?

8、servlet的生命周期

9、servlet和jsp有什么关系?

10、重定向、转发有什么区别?

11、servlet中,dopost和doget方法有什么区别,何时调用?

12、JSP的常用指令 。
<%@page language=”java” contenType=”text/html;charset=gb2312″ session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312″ import=”java.sql.*”%>
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)
<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>
13、如何现实servlet的单线程模式
<%@ page isThreadSafe=”false”%>
14、MVC的各个部分都有那些技术来实现?如何实现?
MVC 是Model-View-Controller的简写。”Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), “View” 是应用的表示面(由JSP页面产生),”Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
15、web.xml的配置,如何配置一个servlet,如何去加载一个类,如何去加载一个xml,如何在里面写一些参数(比如数据库),如何加载默认页面,启动优先级。

16、filter的用法。

17、spring栏截器的用法。