知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

3W+字长文深度总结|Java程序员面试题精华版集合(内附思维导图)!

发表时间:2022-03-25来源:网络

1、在JAVA中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。例如,

ok: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("i=" + i + ",j=" + j); if (j == 5) break ok; } }

另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } }; boolean found = false; for (int i = 0; i < arr.length && !found; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.println("i=" + i + ",j=" + j); if (arr[i][j] == 5) { found = true; break; } } }

2、请说出作用域public,private,protected,以及不写时的区别。

private修饰的成员变量和函数只能在类本身和内部类中被访问。protected 修饰的成员变量和函数能被类本身、子类及同一个包中的类访问。public修饰的成员变量和函数可以被类、子类、同一个包中的类以及任意其他类访问。

默认情况(不写)下,属于一种包访问,即能被类本身以及同一个包中的类访问。
下面这个表能清楚的说明java中作用域操作符的作用:


3、说说对javaee中的session的理解,你是怎么用session的?
在servlet 的api中,session表示的是浏览器和web服务器的一次会话。在web服务器中是通过session来区别不同的浏览器的,因为web 服务器采用的是http协议进行通讯,web 服务器根本不知道正在请求的浏览器是谁,它不会记录浏览器的访问信息,所以需要session来记录发出请求的浏览器是谁,session 和浏览器之间是怎么保持通信的呢? 当浏览器第一次对一个web站点发出请求后,web服务器按照请求路径查找资源,并生成一个session,web服务器将查找到的资源作为响应返回给浏览器,在这个响应中会附带上一个特殊名称的cookie信息,这个cookie 就是session的id。之后浏览器再次发出请求时,会在请求信息中带上这个cookie信息,这个cookie 的作用就是用来告诉web服务器,我这个浏览器已经访问过你了,你不需要再生成session了。

Session 的应用有很多

1.过滤未登录用户
可以用于存放用户信息,当用户登录后,就将用户信息放入session,如果没有登录,在session中就不会有用户信息,这样就可以防止未登录用户查看一些信息。2.防止表单重复提交3.网上商城中的购物车

4、分层设计的好处?
把各个功能按调用流程进行了模块化,模块化带来的好处就是可以随意组合。分层的好处:

1.实现了软件之间的解耦2.便于进行分工3.便于维护4.提高软件组件的重用5.便于替换某种产品,比如持久层用的是hibernate,需要更换产品为mybatis,就不用改其他业务的代码,直接把配置一改即可6.便于产品功能的扩展7.便于适用用户需求的不断变化

5、java中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

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

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

1.抽象类可以有构造方法,接口中不能有构造方法。2.抽象类中可以有普通成员变量,接口中没有普通成员变量3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。4.抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。5.抽象类中可以包含静态方法,接口中不能包含静态方法6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。7.一个类可以实现多个接口,但只能继承一个抽象类。

7、构造方法Constructor是否可被override(重写)?
构造方法Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

8、面向对象的特征有哪些方面?
面向对象的三大特征:

封装:保证对象自身数据的完整性和安全性。继承:建立类之间的关系,实现代码复用,方便系统的扩展。多态:相同的方法调用,可以实现不同的实现方式。

9、String是最基本的数据类型吗,是否可以继承String类?
java的基本数据类型有以下8种:

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

java.lang.String类是final类型的,因此不可以继承这个类、也不能修改这个类 。为了提高效率节省空间,对于要经常修改的字符串,建议使用StringBuffer类。

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

11、String s = new String("abc");创建了几个String Object? 二者之间有什么区别?
答案:一个或者两个
解析:

1.如果String缓冲区中,已经创建"abc",则不会继续创建,此时只创建了一个对象new String("abc");2.如果String缓冲区中,没有创建"abc",则会创建两个对象,一个对象的值是"abc",一个对象new String("abc")。

12、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"
只创建了一个String对象,因为这行代码被编译器编译时进行了优化,相当于直接定义了一个”abcd”的字符串,所以只创建了一个String对象。

13、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
finally中的代码肯定会执行,但是会先执行try中的代码,如果try中有return,那么return的东西会先放到函数栈中,然后再执行finally中的代码。

①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成;②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序;

14、final, finally, finalize的区别

Final:是全局变量声明的时候使用,意思是这个变量不可被修改,不可被override,一般用于声明常量,或者系统设置的值。finally:是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。finalize:是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

15、运行时异常与一般异常有何异同?
Java提供了两类主要的异常:运行时异常runtime exception和一般异常checked exception

运行时异常runtime exception,我们可以不处理。这样的异常由虚拟机接管。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。一般异常checked exception,JAVA要求程序员对其进行try catch处理。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

16、error和exception有什么区别?

Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。Exception又细分为运行时异常runtime exception,受检查异常checked exception(一般异常)。

17、请写出你最常见到的5个运行时异常 runtime exception

ClassCastException 类型强制转换异常ClassNotFoundException 类没找到时,抛出该异常FileNotFoundException 文件未找到异常NullPointerException 空指针异常S 操作数据库异常ArithmeticException 算术异常IllegalArgumentException 传递非法参数异常IndexOutOfBoundsException 下标越界异常NoSuchElementException 方法未找到异常

18、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

try{}语句块 中放的是要检测的java代码,可能有会抛出异常,也可能会正常执行;catch(异常类型){}块 是当Java运行时系统接收到try块中所抛出的异常对象时,会寻找能处理这一异常的catch块来进行处理(可以有多个catch块);finally{}块 不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了System.exit(0);throw 用于手动抛出异常。作为程序员可以在任意位置手动抛出异常;throws 用于在方法上标识要抛出的异常,抛出的异常交由调用者处理;

19、ArrayList和Vector、LinkedList的区别?

(1)Vector是线程安全的,而ArrayList不是。(2)当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍。(3)Vector可以设置容量增加的参数,而ArrayList不可以。(4)LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

20、List 和 Map 区别?

(1)、List是存储单列数据的集合,List中存储的数据是有顺序,并且允许重复;(2)、Map是存储键和值这样的双列数据的集合,Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

21、List、Map、Set三个接口,存取元素时,各有什么特点?
List与Set都是单列元素的集合,它们有一个共同的父接口Collection。

(1)List表示有先后顺序的集合
存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中的存放位置。
取元素:方法1:Iterator接口取得所有,逐一遍历各个元素
方法2:调用get(index i)来明确说明取第几个。(2)Set里面不允许有重复的元素
存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。
取元素:没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。(3)Map是双列的集合,存放用put方法:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。
取元素:用get(Object key)方法根据key获得相应的value。

22、说出一些常用的类,包,接口,请各举例5个

常用的类:
Object
Date
File
Exception
Random
String
integer常用的包:
http://java.io
java.lang
java.util
java.sql
http://java.net常用的接口:
Set
List
Map
Collection
Runnable
Session
Servlet

23、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

基于流方向:
InputStream
OutputStream基于字符:
Reader
Writer流和字符之间的配接:
InputStreamReader
OutputStreamWriter

24、字节流与字符流的区别?

(1)字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。(2)字节流中,中文可能会乱码,字符流不会。

25、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流;

Serializable.只有实现了 serializable和Externalizable接口的类的对象才能被序列化

Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的序列化机制是RMI、EJB等技术的技术基础。用途:利用对象的序列化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。

26、GC是什么? 为什么要有GC?
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

27、排序都有哪几种方法?请用JAVA实现一个冒泡排序。
排序的方法有:

插入排序(直接插入排序、希尔排序)交换排序(冒泡排序、快速排序)选择排序(直接选择排序、堆排序)归并排序分配排序(箱排序、基数排序)冒泡排序:for(int i=0;i


Java编程所需的工具及知识

==============



JVM的基本结构

========



SSH框架

=====



设计模式之间的关系

=========



JAVA知识结构体系图



JAVA知识学习计划图



学习需要知道:

1、是什么
2、解决了什么问题
3、怎么实现的

来源:3W+字长文深度总结|程序员面试题精华版集合(内附思维导图)!

如有错误或其它问题,欢迎小伙伴留言评论、指正。如有帮助,欢迎点赞+转发分享。

更多相关开源技术文章,请持续关注民工哥知乎技术专栏。

我是民工哥,一个爱折腾的IT技术老司机,欢迎关注我,我们一起学习,共同成长!!

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜