JAVA中最常见面试题

  • 1.javac java命令
  • 2.int i=20000000000000;报错吗?为什么?
  • 3.B(browser)/S(server) 跟C(client)/S(server)架构区别是什么?
  • 4.整数有哪几种类型?
  • 5.float f=3.14 ; 报错吗?为什么?
  • 6.3.14是什么类型?
  • 7.java中有哪些基本数据类型?
  • 8.int a = 5 ;b = a++ + ++a +3 + a++ ;a和b是多少?
  • 9.①short s = 1 ;s = s + 1 ;有错吗?为什么?②short s = 1 ;s += 1 ;有错吗?为什么?
  • 10.System.out.println(5>3?9:3.1);结果会打印出什么?
  • 11.final的用法?
  • 12.long a=1L,switch(a) 结果打印什么?
  • 13.给数组排序
  • 14.堆跟栈的区别
  • 15.java中可以多继承吗?
  • 16.重写跟重载的区别?
  • 17.常量属性的赋值方式?
  • 18.java的三大特性?
  • 19.说几个访问修饰符的区别?
  • 20.请说出5个运行时异常? 请说出5个常见的类?说出5个常见的包?
  • 21.父类代码块、父类静态代码块、父类构造方法、子类代码块、子类静态代码块、子类构造方法,执行顺序如何?
  • 22.final、finally、finalize区别?
  • 23.“==”跟equals的区别?
  • 24.ArrayList元素用循环全部删除。
  • 25.浅谈一下String, StringBuffer,StringBuilder的区别?
  • 26.下面的代码将创建几个字符串对象?
  • 27.在java中,String s=new String("xyz");创建了几个对象?( B)
  • 28.下面的代码输出什么?
  • 29.下面的代码输入什么?
  • 30.下面的代码输出什么?
  • 31.下面的代码输出什么?
  • 32.下面的代码输出什么?
  • 33.下面的代码输出什么?
  • 34.下面的代码输入什么?
  • 35.下面的代码输入什么?
  • 36.下面选项结果为true的是
  • 37.Math.round(5.5)、Math.round(-5.5)分别输出多少?
  • 38.下面的代码输入什么?
  • 39.ArrayList跟Vector的对比?
  • 40.List Set Map的区别?
  • 41.说下HashTable HashMap的区别?
  • 42.HashMap(HashSet)用来装学生,人数在37-43人左右,请问如何初始化HashMap数量达到性能最优?
  • 43.重写equals是否需要重写hashcode? 重写hashcode是否需要重写equals?
  • 44.说下数组跟链表的区别?
  • 45.throw跟throws区别?
  • 46.你知道哪些JDK8新特性?
  • 47.where跟having的区别?
  • 48.JS中"= ="跟"= = ="有什么区别?
  • 49.请说下xml跟json的区别?
  • 50.请说下3次握手跟4次挥手?
  • 51.断开连接的时候客户端为什么需要的等待2MSL时间?
  • 52.servlet是单线程还是多线程?是单例的吗?
  • 53.请说下servlet的生命周期?
  • 54.get请求与post的请求的区别是什么?
  • 55.请求转发跟请求重定向的区别是什么?
  • 56.JSP是服务器端页面还是客户端页面?
  • 57.jsp的本质是一个servlet?
  • 58.静态包含(指令)跟动态包含(动作)有什么区别
  • 59.JSP的9大内置对象?
  • 60.会话跟踪的几种技术?


1.javac java命令

javac编译命令: javac Test.java, 将.java文件编译成.class字节码文件。
java运行命令:java Test, 运行.class文件。

2.int i=20000000000000;报错吗?为什么?

会,因为超过了int取值范围, java中int的取值范围为-2147483648到+2147483648。21亿左右

3.B(browser)/S(server) 跟C(client)/S(server)架构区别是什么?

B/S结构即浏览器和服务器架构, 特点是体验要求一般,加载资源少;升级方便、无需安装、维护便利、跨平台。

C/S结构即客户端和服务器架构 ,特点是体验要求极高,加载资源多;升级不方便、安装不方便、维护不方便、不跨平台。

4.整数有哪几种类型?

byte(1字节), short(2字节), int(4字节), long(8字节)

5.float f=3.14 ; 报错吗?为什么?

会,3.14是double型的。 要加f 或加float强转

6.3.14是什么类型?

小数默认double型

7.java中有哪些基本数据类型?

四类八种 整型:byte short int long 浮点型:float double 字符型:char 布尔:boolean

8.int a = 5 ;b = a++ + ++a +3 + a++ ;a和b是多少?

int a = 5 ;
	int b = a++ + ++a +3 + a++ ;
	System.out.println(a);
	System.out.println(b); 

	b = a++ + ++a +3 + a++ 
		5(6)+7(7)+3+7(8)
		a=8
		b=22

9.①short s = 1 ;s = s + 1 ;有错吗?为什么?②short s = 1 ;s += 1 ;有错吗?为什么?

①会报错,因为整数的数据类型默认是int类型,等号右边的s+1操作,s+1后变为int类型,等号左边是short类型,所以会报错。
②不会报错,因为s+=1相当于 s = (short)(s + 1); 其中有隐含的强制类型转换

10.System.out.println(5>3?9:3.1);结果会打印出什么?

9.0
因为它总体返回值是double,所以9被转型了

11.final的用法?

1、当修饰属性的时候表示常量
2、当修饰方法的时候表示这个方法不能被重写,子类可以调用
3、当修饰类的时候表示不能被继承

12.long a=1L,switch(a) 结果打印什么?

会报错,因为switch的()中不能是long 类型,会报错。

13.给数组排序

快速排序法、冒泡法、选择排序法、插入排序法、数组的sort方法
Arrays.sort(arr);

14.堆跟栈的区别

1.存储
栈存储:变量、对象的引用,堆存储实例对象
2、速度
栈:存取速度快
堆:存取速度慢
3、线程访问
栈:每个线程都有一个栈区
堆:所有线程共享一个堆区
4、垃圾回收
栈:比较频繁
堆:不频繁

15.java中可以多继承吗?

不可以。只能单继承,但是可以多实现

16.重写跟重载的区别?

重载:同一个类中,方法名相同,参数不同(无关返回值)。典型应用:无参构造和有参构造
重写:不同的类当中,方法名相同,参数相同,返回值相同,并且两者要有继承关系。

17.常量属性的赋值方式?

第一种:使用一个static静态代码块来指定,然后在静态代码块中,我们去动态读取外部的一个Properties文件的值。
第二种:我们可以配置Java的运行时配置,来指定一个-Dname=value的参数,这样也可以在类内部动态的接受到运行时指定的一个参数。
第三种:我们还可以读的到系统配置的PATH或者CLASSPATH里面的值,同理,我们也可以配置自己的环境变量,然后在程序中一样也能读到这些配置的环境变量

18.java的三大特性?

封装:隐藏类的属性和实现细节,仅对外提供公共访问方式。
继承:子类继承父类的属性和方法,并能扩展新的能力。
多态:父类接受子类的对象,可以调用子类重写父类的方法。

19.说几个访问修饰符的区别?

修饰符\作用域

同一个类中

同一个包中

子类中

任何地方

private

可以

不可以

不可以

不可以

默认修饰符

可以

可以

不可以

不可以

protected

可以

可以

可以

不可以

public

可以

可以

可以

可以

Public:对外公开
Protected:受保护的,同一个包的子类可以访问。
默认修饰符:同一个包中可以访问
Private:只在当前类有效

20.请说出5个运行时异常? 请说出5个常见的类?说出5个常见的包?

序号

异常名称

异常描述

1

java.lang.NullPointerException

空指针异常:对象(引用)为空,并且调用相应方法。

2

java.lang.ClassNotFoundException

找不到指定类

3

java.lang.ArrayIndexOutOfBoundsException

数组下标越界

4

java.lang.NumberFormatException

数字格式化异常

5

java.lang.ArithmeticException

数学运算异常

6

java.lang.ClassCastException

类型转换异常,向下转型中经常发生

7

java.text.ParseException

时间格式化异常,SimpleDateFormart中经常发生

8

java.util.InputMismatchException

输入类型不匹配异常

类:Object、String、System、File、HashMap、Date、Class
包:java.lang ,java.io, java.util, java.sql,javax.servlet

21.父类代码块、父类静态代码块、父类构造方法、子类代码块、子类静态代码块、子类构造方法,执行顺序如何?

静态代码在加载时就运行
执行顺序:父类静态代码块–>子类静态代码块–>父类代码块–>子类代码块–>父类构造方法->子类构造方法

22.final、finally、finalize区别?

final是修饰符,可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
finalize是一个属于Object类的一个方法,在对象被回收前调用的方法,用于回收资源。Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize()来回收垃圾,是一个对象是否可回收的最后判断。
finally在try/catch语句中用来处理异常处理的一部分,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,这段代码块最终一定会被执行,一般用来存放一些关闭资源的代码。

23.“==”跟equals的区别?

“==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值
equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值

24.ArrayList元素用循环全部删除。

//迭代器
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
        iterator.remove();
}

25.浅谈一下String, StringBuffer,StringBuilder的区别?

java面试宝典上机提 java面试上机测试题_System

26.下面的代码将创建几个字符串对象?

String s1 = new String("Hello");  
String s2 = new String("Hello");
2个或3个
>首先s1和s2会在堆空间中创建2个对象,然后指向常量池中的"Hello"。但是如果常量池中没有"Hello",那么就会现在常量池中创建一个“Hello”。

27.在java中,String s=new String(“xyz”);创建了几个对象?( B)

A   1个    B 1个或2个      C  2个     D 以上都不对

如果"xyz"在常量池中存在,只会在堆中创建一个new String(“xyz”) ;一个对象
如果"xyz"在常量池中不存在,会现在常量池中创建一个“xyz”,然后在堆中创建一个new String(“xyz”);两个对象

28.下面的代码输出什么?

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));  //true

29.下面的代码输入什么?

String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 ==s2);//false

30.下面的代码输出什么?

String s1= "abc";
	String s2= "abc";
	String s3 = new String("abc");  
	String s4 = new String("abc"); 
	System.out.println("s3 == s4 : "+(s3==s4)); //false
	System.out.println("s3.equals(s4) : "+(s3.equals(s4)));  //true
	System.out.println("s1 == s3 : "+(s1==s3));  //false
	System.out.println("s1.equals(s3) : "+(s1.equals(s3)));//true 
	System.out.println(s1==s2); //true

31.下面的代码输出什么?

String str1 = "ab" + "cd"; 
String str11 = "abcd";   
System.out.println("str1 = str11 : "+ (str1 == str11)); //true

32.下面的代码输出什么?

String str2 = "ab"; 
String str3 = "cd";
String str4 = str2+str3;  
String str5 = "abcd"; 
System.out.println("str4 = str5 : " + (str4==str5));//false

33.下面的代码输出什么?

final String str2 = "ab"; 
final String str3 = "cd";
String str4 = str2+str3;  
String str5 = "abcd"; 
System.out.println("str4 = str5 : " + (str4==str5));//true

34.下面的代码输入什么?

String str6 = "b";  
String str7 = "a" + str6;  
String str67 = "ab";  
System.out.println("str7 = str67 : "+ (str7 == str67));  //false

35.下面的代码输入什么?

final String str8 = "b";  
String str9 = "a" + str8;  
String str89 = "ab";  
System.out.println("str9 = str89 : "+ (str9 == str89));  //true

36.下面选项结果为true的是

String s1=”Hello”;
 String s2=”hello”;
 String s3=s1.toLowerCase();
 String s4=s2.toLowerCase();
	下面选项结果为true的是:C
	A.S1==s3	
	B.S2==s3
	C.S2==s4	
	D.S3==s4

37.Math.round(5.5)、Math.round(-5.5)分别输出多少?

6,-5
Math.round()方法可以这样理解:将括号内的数+0.5之后,向下取整。
比如:round(3.4)就是3.4+0.5=3.9,向下取值是3,所以round(3.4)=3;
round(-10.5)就是-10.5+0.5=-10,向下取值就是-10,所以round(-10.5)=-10。
所以,Math.round(11.5)=12;Math.round(-11.5)=-11;Math.round(5.5)=6、Math.round(-5.5)=-5.

38.下面的代码输入什么?

Integer i1 = 1 ;
	Integer i2 = 1 ;
	Integer i3 = 128 ;
	Integer i4 = 128 ;		
	System.out.println(i1 == i2); //true  
	System.out.println(i3 == i4);  //false

Integer类型在-128~127之外会new新对象

39.ArrayList跟Vector的对比?

相同点:
(1)两者都是基于索引的,内部由一个数组支持。
(2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。
(3)ArrayList和Vector的迭代器实现都是fail-fast的。
(4)ArrayList和Vector两者允许null值,也可以使用索引值对元素进行随机访问。
不同点:
(1)Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。
(2)ArrayList比Vector快,它因为有同步,不会过载。
(3)ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

40.List Set Map的区别?

java面试宝典上机提 java面试上机测试题_java面试宝典上机提_02

List和Set都是Collection的子接口,而Map不是。
List存的元素都是有序、可重复的,而Set是无序的、不可重复的,而Map是key和value的键值对,key不可重复,value随意。

41.说下HashTable HashMap的区别?

1、HashMap是非线程安全的,HashTable是线程安全的。
2、HashMap的键和值都允许有null值存在,而HashTable则不行。
3、因为线程安全的问题,HashMap效率比HashTable的要高。
4、Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
5.HashMap初始容量是16,每次扩容只能是2的幂次方;HashTable每次扩容至2倍。

42.HashMap(HashSet)用来装学生,人数在37-43人左右,请问如何初始化HashMap数量达到性能最优?

64

43.重写equals是否需要重写hashcode? 重写hashcode是否需要重写equals?

不一定
需要

44.说下数组跟链表的区别?

1.数组静态分配内存(长度固定),链表动态分配内存(长度不固定);
2.数组在内存中存储的元素是连续的,链表不连续;
3.数组元素在栈区,链表元素在堆区;
4.与数组的区别 从增删改查操作的效率上来谈
增删: 链表的效率更高
改查: 数组的效率更高

45.throw跟throws区别?

throw:写在java语句中,用来在程序中明确的抛出异常
throws:写在定义的方法后面,用来表明方法不能处理的异常。

46.你知道哪些JDK8新特性?

接口 lambda表达式 函数引用

47.where跟having的区别?

where子句: 是在分组之前使用,表示从所有数据中筛选出部分数据,以完成分组的要求, 在where子句中不允许使用统计函数,没有group by子句也可以使用。
having子句: 是在分组之后使用的,表示对分组统计后的数据执行再次过滤,可以使用统计函数,有group by子句之后才可以出现having子句。

48.JS中"= =“跟”= = ="有什么区别?

== 表示相等 (值相等)
===表示恒等(类型和值都要相等)

49.请说下xml跟json的区别?

区别:
1、传输同样格式的数据,xml需要使用更多的字符进行描述,
2、 流行的是基于json的数据传输。
3、xml的层次结构比json更清晰。

50.请说下3次握手跟4次挥手?

三次握手:
第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。
第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。
第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。

四次挥手:
第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。

51.断开连接的时候客户端为什么需要的等待2MSL时间?

为了保证客户端发送的最后一个ACK报文能够到达服务器。因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着再次给出回应报文,并且会重启2MSL计时器。

52.servlet是单线程还是多线程?是单例的吗?

servlet单实例多线程

53.请说下servlet的生命周期?

Servlet 生命周期可以分成四个阶段:出生(加载和实例化)、初始化、服务、死亡(销毁)。
①出生
当客户第一次请求时,首先判断是否存在 Servlet 对象,若不存在,则由服务器调用无参构造方法创建对象。
②初始化
创建完对象之后就会调用init()方法对其进行初始化。此初始化方法在整个 Servlet 生命周期中只调用一次。
③服务
完成 Servlet 对象的创建和初始化之后,服务器会调用 Servlet 对象的 service()方法来处理客户端的请求。
④死亡
当 服务器关闭或者Servlet 对象要从容器中被删除时,会自动调用 destory()方法。


54.get请求与post的请求的区别是什么?

get:
1,参数拼接在url,不安全
2,只能是字符串类型
3,大小有限制2kb,速度快
post:
1,参数封装到请求体,安全
2,还可以是非字符串类型比如文件
3,理论上大小没限制,速度慢

55.请求转发跟请求重定向的区别是什么?

①请求转发地址栏不会变化,重定向会发生变化。
②请求转发是一次请求、一次响应,速度快,重定向是两次请求、两次响应,速度慢。
③请求转发是请求request的API,重定向是响应response的API。
④请求转发只能在本网站内部,重定向可以定向到任何网站。
⑤请求转发可以进行值传递,重定向不可以。


56.JSP是服务器端页面还是客户端页面?

服务器端页面

57.jsp的本质是一个servlet?

是,在Tomcat运行中,会自动把jsp文件编译为java文件,j继承了HttpServlet。

58.静态包含(指令)跟动态包含(动作)有什么区别

原理不同:
静态包含:先合并再翻译
动态包含:先翻译在包含
最终编译成java文件的数目不同。
静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
静态包含在两个文件中不能有相同的变量,动态包含允许
语法不同:
静态包含语法: <%@inclue file=“被包含的页面”%>
动态包含语法: <jsp:include page=“被包含的页面”>
参数传递不同 :
静态包含不能向被包含页面传递参数
动态包含可以使用jsp:param标签向被包含页面传递参数

59.JSP的9大内置对象?

1.request:HttpServletRequest对象,代表请求
2.response:HttpServletResponse对象,代表响应
3.out:JspWriter对象,代表输出
4.session:HttpSession对象,代表每个会话
5.application:ServletContext应用对象,代表整个应用程序
6.config:ServletConfig配置对象,代表配置文件中的信息
7.pageContext:PageContext对象页面上下文对象,包含页面信息
8.page:当前页面对象(this)(基本不使用)
9.exception:Throwable异常对象,包含jsp异常信息

60.会话跟踪的几种技术?

使用Cookie、URL 重写、隐藏的表单域、HttpSession