Java面试随着时间的改变而改变。在过去的日子里,当你知道String和StringBuilder的区别(String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象。因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,影响性能,可以考虑使用可变字符序列StringBuilder)就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。在我初入职场的时候,类似于Vector与Array的区别、HashMap与Hashtable的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多Java程序员都没有看过的领域,如NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。
这几天经常有人找小编要面试题,因此小编将压箱底的宝贝面试问题分享给大家,这里包括许多许多不同的主题。小编已经为这众多的问题准备一段时间了,现在我将它们分享给你们。这里面不但包含经典的面试问题,如线程、集合、equals和hashcode、socket,而且还包含了NIO、数组、字符串、Java8等主题。
该列表包含了入门级Java程序员和多年经验的高级开发者的问题。无论你是1、2、3、4、5、6、7、8、9还是10年经验的开发者,你都能在其中找到一些有趣的问题。这里包含了一些超级容易回答的问题,同时包含经验丰富的Java程序员也会棘手的问题。
当然你们也是非常幸运的,当今有许多好的书来帮助你准备Java面试,其中有一本我觉得特别有用和有趣的是Markham的Java程序面试揭秘(JavaProgrammingInterviewExposed)。这本书会告诉你一些Java和JEE面试中最重要的主题,即使你不是准备Java面试,也值得一读。
开始之前先来一波福利,除去文字中的面试题,这里小编还给大家总结了完整的面试问题以及面试题视频
Java面试中的重要话题
除了你看到的惊人的问题数量,我也尽量保证质量。我不止一次分享各个重要主题中的问题,也确保包含所谓的高级话题,这些话题很多程序员不喜欢准备或者直接放弃,因为他们的工作不会涉及到这些。JavaNIO和JVM底层就是最好的例子。你也可以将设计模式划分到这一类中,但是越来越多有经验的程序员了解GOF设计模式并应用这些模式。我也尽量在这个列表中包含2015年最新的面试问题,这些问题可能是来年关注的核心。为了给你一个大致的了解,下面列出这份Java面试问题列表包含的主题:
多线程,并发及线程基础数据类型转换的基本原则垃圾回收(GC)Java集合框架数组字符串GOF设计模式SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)设计原则抽象类与接口Java基础,如equals和hashcode泛型与枚举JavaIO与NIO常用网络协议Java中的数据结构和算法正则表达式JVM底层Java最佳实践JDBCDate,Time与CalendarJava处理XMLJUnit编程
Java面试中其他各式各样的问题
这部分包含Java中关于XML的面试题,JDBC面试题,正则表达式面试题,Java错误和异常及序列化面试题
125)嵌套静态类与顶级类有什么区别?(答案)
一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求。一个嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如HashMap.Entry是一个嵌套静态类,HashMap是一个顶级类,Entry是一个嵌套静态类。
126)你能写出一个正则表达式来判断一个字符串是否是一个数字吗?(解决方案)
一个数字字符串,只能包含数字,如0到9以及+、-开头,通过这个信息,你可以下一个如下的正则表达式来判断给定的字符串是不是数字。
127)Java中,受检查异常和不受检查异常的区别?(答案)
受检查异常编译器在编译期间检查。对于这种异常,方法强制处理或者通过throws子句声明。其中一种情况是Exception的子类但不是RuntimeException的子类。非受检查是RuntimeException的子类,在编译阶段不受编译器的检查。 128)Java中,throw和throws有什么区别?(答案)
throw用于抛出java.lang.Throwable类的一个实例化对象,意思是说你可以通过关键字throw抛出一个Error或者一个Exception,如:thrownewIllegalArgumentException(“sizemustbemultipleof2″)而throws的作用是作为方法声明和签名的一部分,方法被抛出相应的异常以便调用者能处理。Java中,任何未处理的受检查异常强制在throws子句中声明。
129)Java中,Serializable与Externalizable的区别?(答案)
Serializable接口是一个序列化Java类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是JVM内嵌的默认序列化方式,成本高、脆弱而且不安全。Externalizable允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。
130)Java中,DOM和SAX解析器有什么不同?(答案)
DOM解析器将整个XML文档加载到内存来创建一棵DOM模型树,这样可以更快的查找节点和修改XML结构,而SAX解析器是一个基于事件的解析器,不会将整个XML文档加载到内存。由于这个原因,DOM比SAX更快,也要求更多的内存,不适合于解析大XML文件。
131)说出JDK1.7中的三个新特性?(答案)
虽然JDK1.7不像JDK5和8一样的大版本,但是,还是有很多新的特性,如try-with-resource语句,这样你在使用流或者资源的时候,就不需要手动关闭,Java会自动关闭。Fork-Join池某种程度上实现Java版的Map-reduce。允许Switch中有String变量和文本。菱形操作符(<>)用于类型推断,不再需要在变量声明的右边申明泛型,因此可以写出可读写更强、更简洁的代码。另一个值得一提的特性是改善异常处理,如允许在同一个catch块中捕获多个异常。
132)说出5个JDK1.8引入的新特性?(答案)
Java8在Java历史上是一个开创新的版本,下面JDK8中5个主要的特性:Lambda表达式,允许像对象一样传递匿名函数StreamAPI,充分利用现代多核CPU,可以写出很简洁的代码Date与TimeAPI,最终,有一个稳定、简单的日期和时间库可供你使用扩展方法,现在,接口中可以有静态、默认方法。重复注解,现在你可以将相同的注解在同一类型上使用多次。
133)Java中,Maven和ANT有什么区别?(答案)
虽然两者都是构建工具,都用于创建Java应用,但是Maven做的事情更多,在基于“约定优于配置”的概念下,提供标准的Java项目结构,同时能为应用自动管理依赖(应用中所依赖的JAR文件),Maven与ANT工具更多的不同之处请参见答案。
这就是所有的面试题,如此之多,是不是?我可以保证,如果你能回答列表中的所有问题,你就可以很轻松的应付任何核心Java或者高级Java面试。虽然,这里没有涵盖Servlet、JSP、JSF、JPA,JMS,EJB及其它JavaEE技术,也没有包含主流的框架如SpringMVC,Struts2.0,Hibernate,也没有包含SOAP和RESTfulwebservice,但是这份列表对做Java开发的、准备应聘Javaweb开发职位的人还是同样有用的,因为所有的Java面试,开始的问题都是Java基础和JDKAPI相关的。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习