Java-面试题

赢在面试之Java基础篇(1)

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

答:一个.java类中是可以有多个类。但是,在多个类中,有且只有一个public类,且public类的类名必须与*.java的文件名相一致。

2、Java有没有goto?

答:java中的有goto关键字。但是 ,goto和const关键字没有在java中使用

3、说说&和&&的区别。

答:作为逻辑运算符时&和&&都可以用来表示逻辑与(and),但是&&具有短路功能

        &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位。

4、在JAVA中如何跳出当前的多重嵌套循环?

答:在外层循环上加个flag,作为下次循环的标志位。flag的赋值,在内层循环中改变。

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

答:在swith(exp1)中,exp1只能是一个整数表达式或者枚举常量。

整数表达式可以是int类型或者Integer类型,而byte,short,char都可以隐式转换为int,所以这些类型及这些类型的包装类型是可以的。

long、String类型不符合switch的语法,且不能转换为int类型,所以,不能作用switch语句(jdk1.7以后string可以)。

6、short s1= 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? long l2 = 1;l2+=1;有什么错?

答:有错,因为s1+1结果是int类型,等号左边是short类型,所以要强转

       没错,因为+=在Java中进行了特殊处理,所以不会报错

      没错,+左边是long型,右边是int型,所以进行运算的时候都变为long型

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

答: char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

8、用最有效率的方法算出2乘以8等於几?

 答:因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,

而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

答:使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

public static final StringBuffer a = new StringBuffer("StringBuffer");

public static void main(String[] args) {

   // a = new StringBuffer("hehe"); // 编译报错,引用不能变

  // 引用变量所指向的对象中的内容还是可以改变的

  a.append("xxx");

}

10,静态变量和实例变量的区别?

答:在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
       在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

赢在面试之Java基础篇(2)

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

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

12、Integer与int的区别

答:int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

int的默认值为0;而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer 。

(在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。)

 另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

String string = "12345";

Integer i = Integer.parseInt(string);// 把字符串解析为Integer类型

Integer max = Integer.MAX_VALUE;

Integer min = Integer.MIN_VALUE;

13、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

答:11.5+0.5后是12再向下取整是12;-11.5+0.5后是-11再向下取整-11

  1. // 测试Math类的ceil方法(天花板,向上取整)

  2. // 测试Math类的floor方法(地板,向下取整)

  3. // 测试Math类的round方法(正数:四舍五入法;负数:五舍六入)

14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

答:Overload:重载、Override:重写

重载:同一个类(或父子类)中,方法名相同,参数列表不同。与返回值类型无关。

重写:存在于子父类,或者子父接口中,现了一模一样的方法(注意:返回值类型可以是子父类)。

Overload的方法可以改变返回值的类型,因为它与返回值类型无关。

15、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

答:接口可以继承接口,抽象类不可以继承接口,但可以实现接口。抽象类可以继承具体类(但前提是实体类必须有明确的构造函数)。抽象类中可以有静态的main方法。

16、Java中实现多态的机制是什么?

答: 由于java中的继承,形成类之间的层级关系,通俗来说就是一个类具有多种形态例如:多态分为编译时多态运行时多态。其中编辑时多态是静态的,主要是指方法的重载,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。多态形成的三个条件    1)要有继承(包括接口的实现);     2)要有重写;     3)父类引用指向子类对象。

 基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

17、abstractclass和interface语法上有什么区别?

答:含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽 象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不可以。

首先,abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。static是静态的,是一种属于类而不属于对象的方法或者属性;synchronized 是同步,是一种相对线程的锁。native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是Java与其它语言通讯的一种机制

声明static说明可以直接用类名调用该方法;声明abstract说明需要子类重写该方法;如果同时声明static和abstract,用类名调用一个抽象方法肯定不行。

synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。

native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢!

19、内部类可以引用它的包含类的成员吗?有没有什么限制?

答:如果不是静态内部类,完全可以包括私有的。没有什么限制。 在静态内部类下,不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员

20、String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

答: 没有。因为String是不可变类(immutable class),类的实例是不可被修改的。实例的信息是在创建的时候提供,并且在整个生命周期中都不可改变。在这段代码中,s原来指向一个String对象,内容是“hello”,然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为”helloworld!",原来那个对象还存在内存中,只是s这个引用变量不再指向他了。

赢在面试之Java集合框架篇(3)

21、ArrayList和Vector的区别

22、HashMap和Hashtable的区别

23、List和 Map区别?

24、List,Set, Map是否继承自Collection接口?

25、List、Map、Set三个接口,存取元素时,各有什么特点?

26、说出ArrayList,Vector,LinkedList的存储性能和特性

27、去掉一个Vector集合中重复的元素

28、Collection和Collections的区别。

29、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
30、你所知道的集合类都有哪些?主要方法?

赢在面试之Java基础篇(4)

31、String s = new String("xyz");创建了几个StringObject?是否可以继承String类?

32、String和StringBuffer的区别

33、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

34、try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

35、final, finally, finalize的区别。 

36、运行时异常与一般异常有何异同?

37、error和exception有什么区别?

38、简单说说Java中的异常处理机制的简单原理和应用。

39、Java 中堆和栈有什么区别?

40、能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?

赢在面试之Java基础篇(5)

41、a.hashCode() 有什么用?与 a.equals(b) 有什么关系?

42、字节流与字符流的区别

43、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

44、描述一下JVM加载class文件的原理机制?

45、heap和stack有什么区别。

46、GC是什么?为什么要有GC?

47、垃圾回收的优点和原理。并考虑2种回收机制。

48、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

49、Java 中,throw 和 throws 有什么区别

50,java中会存在内存泄漏吗,请简单描述。

赢在面试之JavaWeb篇(6)

51、说一说Servlet的生命周期?

52、Servlet API中forward()与redirect()的区别?

53、request.getAttribute()和 request.getParameter()有何区别?

54,jsp静态包含和动态包含的区别

55,MVC的各个部分都有那些技术来实现?如何实现?

56,jsp有哪些内置对象?作用分别是什么?

57,Http中,get和post方法的区别

58,什么是cookie?Session和cookie有什么区别?

59,jsp和servlet的区别、共同点、各自应用的范围?

60,tomcat容器是如何创建servlet类实例?用到了什么原理?

赢在面试之JavaWeb篇(7)

61,JDBC访问数据库的基本步骤是什么?

62,说说preparedStatement和Statement的区别

63,说说事务的概念,在JDBC编程中处理事务的步骤。

64,数据库连接池的原理。为什么要使用连接池。

65,JDBC的脏读是什么?哪种数据库隔离级别能防止脏读?

66,什么是幻读,哪种隔离级别可以防止幻读?

67,JDBC的DriverManager是用来做什么的?

68,execute,executeQuery,executeUpdate的区别是什么?

69,SQL查询出来的结果分页展示一般怎么做?

70,JDBC的ResultSet是什么? 

赢在面试之Java框架篇(8)

71,谈谈你对Struts的理解。

72、谈谈你对Hibernate的理解。

73,谈谈你对Spring的理解。

74,谈谈Struts的优缺点

75,iBatis与Hibernate有什么不同?

76,在hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决?

77,介绍一下Hibernate的二级缓存

78,JDO是什么?

79,Hibernate的一对多和多对一双向关联的区别??

80,Hibernate是如何延迟加载? 

赢在面试之Java框架篇(9)

81,使用Spring框架的好处是什么?

82. ApplicationContext通常的实现是什么?

83,什么是Spring的依赖注入?有哪些方法进行依赖注入

84,什么是Spring beans?

85,解释Spring支持的几种bean的作用域。

86,解释Spring框架中bean的生命周期。

87,在 Spring中如何注入一个java集合?

88,解释不同方式的自动装配 。

89,Spring框架的事务管理有哪些优点?

90.什么是基于Java的Spring注解配置? 给一些注解的例子?

赢在面试之Java持久层(10)

91,什么是ORM?

92,Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?

93,Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?

94,阐述Session加载实体对象的过程。

95,MyBatis中使用#和$书写占位符有什么区别?

96,解释一下MyBatis中命名空间(namespace)的作用。

97、MyBatis中的动态SQL是什么意思?

98,JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

99,MyBatis与Hibernate有哪些不同?

100,简单的说一下MyBatis的一级缓存和二级缓存?

赢在面试之数据库篇(11)

101,查询课程1的成绩比课程2的成绩高的所有学生的学号
102,查询平均成绩大于60分的同学的学号和平均成绩
103,查询所有同学的学号、姓名、选课数、总成绩
104,查询姓“张”的老师的个数

105,查询没学过“张三”老师课的同学的学号、姓名
106,查询同时学过课程1和课程2的同学的学号、姓名

107,查询学过“李四”老师所教所有课程的所有同学的学号、姓名

108,查询课程编号1的成绩比课程编号2的成绩高的所有同学的学号、姓名
109,查询所有课程成绩小于60分的同学的学号、姓名

110,查询至少有一门课程与学号为1的同学所学课程相同的同学的学号和姓名

赢在面试之数据库篇(12)

111、把“sc”表中“王五”所教课的成绩都更改为此课程的平均成绩

112、查询和编号为2的同学学习的课程完全相同的其他同学学号和姓名

113、删除学习“王五”老师课的sc表记录
114、向sc表中插入一些记录,这些记录要求符合以下条件:
将没有课程3成绩同学的该成绩补齐, 其成绩取所有学生的课程2的平均成绩

115、按平平均分从高到低显示所有学生的如下统计报表:
-- 学号,企业管理,马克思,UML,数据库,物理,课程数,平均分

116、查询各科成绩最高分和最低分:以如下形式显示:课程号,最高分,最低分

117、按各科平均成绩从低到高和及格率的百分数从高到低顺序

118、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 
企业管理(001),马克思(002),UML (003),数据库(004) 
119、查询不同老师所教不同课程平均分, 从高到低显示

120、查询如下课程成绩均在第3名到第6名之间的学生的成绩:
-- [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

赢在面试之Java多线程(13)

121,什么是线程?

122,线程和进程有什么区别?

123,如何在Java中实现线程?

124,Java 关键字volatile 与 synchronized 作用与区别?

125,有哪些不同的线程生命周期?

126,你对线程优先级的理解是什么?

127,什么是死锁(Deadlock)?如何分析和避免死锁?

128,什么是线程安全?Vector是一个线程安全类吗? 

129,Java中如何停止一个线程?

130,什么是ThreadLocal?

131,Sleep()、suspend()和wait()之间有什么区别?

132,什么是线程饿死,什么是活锁?

133,什么是Java Timer类?如何创建一个有特定时间间隔的任务?

134,Java中的同步集合与并发集合有什么区别?

135,同步方法和同步块,哪个是更好的选择?

136,什么是线程池? 为什么要使用它?

137,Java中invokeAndWait 和 invokeLater有什么区别?

138,多线程中的忙循环是什么?

赢在面试之Java泛型篇(14)

139. Java中的泛型是什么 ? 使用泛型的好处是什么?

140,Java的泛型是如何工作的 ? 什么是类型擦除 ?如何工作?

141,你可以把List<String>传递给一个接受List<Object>参数的方法吗?

142,如何阻止Java中的类型未检查的警告?

143,Java中List<Object>和原始类型List之间的区别?

144,编写一段泛型程序来实现LRU缓存?

145,Array中可以用泛型吗?

146,如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?

147,C++模板和java泛型之间有何不同?

148,数组有没有length()方法? 字符串有没有length()方法? 集合有没有length()方法?

 答:数组求长度用length属性, 字符串求长度用length()方法,集合求长度用size()方法。 所以数组没有length()方法,字符串有length()方法,集合没有length()方法。

赢在面试之JavaWeb篇(15)

148,AJAX有哪些有点和缺点?

149,AJAX应用和传统Web应用有什么不同?

150,Ajax的实现流程是怎样的?

151,简单说一下数据库的三范式?

152,Java集合框架是什么?说出一些集合框架的优点?

153,Java集合框架的基础接口有哪些?

154,集合框架中的泛型有什么优点?

155,Enumeration和Iterator接口的区别?

156,Iterater和ListIterator之间有什么区别?

157,我们如何对一组对象进行排序?

158,与Java集合框架相关的有哪些最好的实践?

159,什么是事务?

160,说说你开发中遇到过什么难题啊?怎么解决的?

猜你喜欢

转载自blog.csdn.net/cs_mycsdn/article/details/81184173
今日推荐