Java面试宝典版

学人智库 时间:2018-01-13 我要投稿
【www.unjs.com - 学人智库】

项目介绍

在进行技术面试前,提醒大家,必须要准备好项目介绍,即需要准备好你的简历中列的所有项目的项目介绍!

面试时关于项目,面试官常见的问题及回答(以银行柜台系统为例):

你给我简要介绍一下银行柜台系统?

1、简易银行柜台系统是模拟银行柜台的基本功能而做的一个系统。

2、系统分前台和后台部分,前台部分是银行柜台人员操作的,包括:注册登录模块、开销户模块、帐号管理模块、存取钱转账模块、柜台人员信息管理;后台部分是银行管理者操作的,包括查看日志模块、管理柜台人员信息模块;

3、我主要负责的是前台的全部功能;

你详细介绍一下你负责的模块的功能?

1、我负责的注册登录模块和柜台人员信息模块实际上是管理柜台人员信息的,内容比较简单;

2、开销户模块、帐号管理模块、存取钱转账模块是为银行储户服务的模块。其中开销户就是为储户开户、销户的功能,账户管理模块就是帮储户冻结帐号、修改密码等功能,存取钱转账模块就是为储户存钱、取钱,帮储户转账的功能;

这个项目几个人做的?用了多长时间?

1、 这个项目比较小,由2个人合作完成的,我负责的是前台部分;

2、 项目大概用了4天左右的时间;

这个项目使用了什么技术?

1、 这个项目使用Struts2、Hibernate3和MySQL

你在做这个项目的时候,遇到了什么困难,怎么解决的?

1、 比如在Hiberante的使用,关于表之间关联关系的配置,我开始操作的时候不太熟悉,后来通过查文档、和其他同学沟通的方式,这个问题也得到了解决;

备注:如果你在这里提到了表之间关联关系的配置,那么这个问题面试官非常有可能接下去就问这个技术问题,所以务必认真准备这个技术问题。

前言

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果。由于这套试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要半个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。

答题时,先答是什么,再答有什么作用,要注意什么(这条可以没有)

比如说面试官问:给我介绍一下ORM?

较好回答:

1、 ORM就是Object Relational Mapping,就是对象关系映射;

2、 作用:我们在写程序的时候,用的是面向对象的方法,但是在关系型数据库里,存的是一条条的记录;为了用纯面向对象的思想解决问题,所以需要将程序中的对象和数据库中的记录建立起映射关系,ORM就是将对象和数据库中的记录建立起映射的技术;

答案要层次分明,条理清晰,从这些表面的东西也可以看出一个人的习惯、办事风格、条理等。

答题不局限于什么格式和形式,就是要将自己的掌握的技术内容展现出来,比如可以采用举例的说法:

需要特别注意的是,因为面试官本身水平层次不齐,不要因为人家题目问的模棱两可(或者题目问的不准确),你就心里胆怯和没底气了,不敢回答了。你要大胆地提出对方题目中你不清楚的地方,希望对方能重新明确的提出问题?

例如,你可以问:您提的问题,我刚才没有完全听明白,能不能再说一遍。

一. Java基础部分

1、 请说一下break和continue的区别?

1、这两个语句都可以用于跳出循环的;

2、break是中止循环,执行循环体以后的语句,而continue是跳出本次循环,执行下一次循环;

2、 switch 中用于判断的表达式,可以用哪些数据类型?

1、可以是char、byte、short、int,不可以是long、String等其他类型;

2、从JDK1.7开始,支持String类型;

3、 char型变量中能不能存贮一个中文汉字?为什么?

Java里采用了Unicode编码格式,Unicode编码中一个char型占用2个字节,而一个汉字也是占用2个字节,所以可以存储中文汉字。

备注:C语言里,char占用1个字节,不用存汉字。

4、 静态变量和实例变量的区别?

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

5、 是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

6、 Integer与int的区别

1、int是基本数据类型,Integer是包装类;

2、int的默认值是0,Interger的默认值是null;

7、 Overload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法?

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载是指在一个类里,方法名相同,参数不同;

重写是指子类继承父类,子类里重新编写了父类中的同名(同参数)方法,也就是覆盖了父类的方法;

不是!因为重载必须要求参数列表不同!

8、 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。

备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答。

只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

9、 面向对象有哪三大特性?

1、面向对象有三大特性,分别是:封装、继承和多态。

2、封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private修饰该属性,使其隐藏起来;类中提供了方法(用public修饰),常用的是get、set方法,可以操作这些被隐藏的属性,其他类可以通过调用这些方法,改变隐藏属性的值!

下面的回答是更高要求,不需要学生必须掌握:

封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。

3、继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,使用extends关键字实现继承;子类中可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

4、多态:多态就是在声明时使用父类,在实现或调用时使用具体的子类;即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性,多态增强了软件的灵活性和扩展性。这里可以举个例子,比如声明时使用的是动物类,调用时传递的是一个猫类(动物类的子类)的对象,具体执行父类里动物——吃的方法时,实际执行的是猫——吃的方法。

10、 abstract class和interface有什么区别?

1、抽象类里面可以用普通方法,而接口中的方法全部都是抽象的;

2、在应用范围上来说,接口往往在程序设计的时候,用来定义程序模块的功能,方便各模块协同工作;抽象类是对相似类进行抽象,形成一个抽象的父类可供重用!

11、 String是最基本的数据类型吗?

1、String是个类,不是基本数据类型;

2、基本数据类型包括byte、int、char、long、float、double、boolean和short。

12、 String 和StringBuffer的区别

1、String是个不可变长度的字符串,而StringBuffer是个可变长度的字符串;

2、在对String类进行操作的时候(例如增加字符),实际上是在内存中产生了一个新的String对象; 而StringBuffer是给原对象增加字符,不是新创建一个对象;

13、 数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有length()这个方法。

14、 final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

15、 请说一下你常用的几种异常?

比如:

1、 空指针异常;

2、 数组下标越界;

3、 类型转换异常;

4、 算数异常,例如除数为零;

5、 IO异常,比如说找不到文件;

6、 找不到类异常;

7、 sql异常,例如sql语句不能正常运行;

8、 …

16、 线程的基本概念?线程的基本状

[Java面试宝典2013版]