java面试题大合集(开发者必看)

本文整理了Java面试中常见的核心知识点,包括操作系统中的堆栈区别、注解实现的AOP、对象/关系映射、反射机制、ACID特性、BS与CS的区别、Cookie与Session、并发控制、HTTP方法的区别、接口与抽象类的对比、IoC优点、AOP概念、Servlet生命周期、Ajax原理、Struts功能、N层架构、CORBA介绍、Java虚拟机与平台无关性、正则表达式、懒加载、尾递归、控制反转与依赖注入、 finalize方法、数据结构与操作符、基础类型、数据结构与类型转换、集合类如HashMap和HashSet的工作原理、哈希算法等,涵盖了Java基础知识、Web开发、并发编程等多个方面。
摘要由CSDN通过智能技术生成

前言
本文来自百度网络的一篇文章,由于没有答案,现在整理了一些比较好的回答和好的博客,可以自己扩展思路,如果大家有一下面试题的更好的答案,欢迎在评论区留言。以上全部来自网络!
基本概念
1、操作系统中 heap 和 stack 的区别

堆:堆空间一般由程序员来分配,可以由垃圾回收机制来回收。一般用来存放new创建的对象和数组。
栈:栈是“后进先出”的存储空间,一般用来存储基本类型的数据和对象的引用。

2、什么是基于注解的切面实现

用注解的方式实现的面向切面编程(AOP),可以在某个方法的执行前或者执行后插入一些代码(例如日志功能的代码)。

3、什么是 对象/关系 映射集成模块

对象/关系映射(ORM):是指将程序中的对象自动持久化到关系型数据库中

4、什么是 Java 的反射机制

反射机制:是指程序可以在运行时 访问 或 修改 它本身状态和方法的这种能力。

5、什么是 ACID

A:atom 原子性
C:consistency 一致性
I:isolation 隔离性
D:durability 持久性

6、BS与CS的联系与区别

C/S(Client/Server):是指需要安装的客户端应用程序。
B/S(Brower/Server):是指可以用浏览器直接访问的应用程序。

7、Cookie 和 Session 的区别

Cookie:是把数据保存在浏览器本地,并随着每一次请求发送到服务器。
Session:是把用户数据保存在服务器端。

8、fail-fast 与 fail-safe 机制有什么区别

fail-fast(快速失败):快速失败机制在遍历一个集合时,如果集合内容被修改,会抛出ConcurrentModificationException异常。
fail-safe(安全失败):安全失败机制对集合的任何修改都会在一个复制的集合上进行,因此不会抛出异常。

9、get 和 post请求的区别

get:
1、请求的参数会附加在URL之后,多个参数用 & 连接。
2、因为URL的长度限制,get 方式传输的数据大小有所限制。
3、安全性低,因为传输的数据会显示在请求的URL中。
post:
1、将请求参数放置在 HTTP 数据包,发送给服务器。
2、传送的数据量比较大
3、安全性较高

10、Interface 与 abstract 类的区别

1、接口(Interface)需要被实现,抽象类(abstract类)需要被继承。
2、一个类可以实现多个接口,但一个类只能继承一个抽象类。
3、接口里面的方法全部是抽象的,抽象类里面可以有非抽象的方法。

11、IoC的优点是什么

IoC(控制反转)的优点是:我们需要使用一个对象的时候无需自己创建,可以从IoC容器中直接获取一个对象,然后直接使用。

12、IO 和 NIO 的区别,NIO的优点

1、IO是面向流的,NIO是面向缓冲区的。
2、IO是阻塞的,NIO是非阻塞的。
3、NIO有选择器机制,可以让一个线程来监视多个IO通道。
NIO的优点:
1、不需要使用 read() 或者 write() 就可以处理文件内容。
2、NIO的处理效率很快。

13、Java 8 / Java 7 为我们提供了什么新功能

Java7 新特性:

1、switch里面的case条件可以使用字符串了
2、运用 List\ tempList = new ArrayList<>(); 即泛型实例化类型自动推断
Java8 新特性:
1、Java8 允许我们给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可
2、lambda 表达式

14、什么是竞态条件?举个例子说明。

当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。

15、JRE、JDK、JVM 及 JIT 之间有什么不同

JVM(java 虚拟机):JVM 处理字节码文件,让 java 语言实现跨平台。
JRE(java运行时环境):JRE 是 JVM 的一个超集。
JDK(java开发工具箱):JDK 包含了 JRE 和 Java的开发环境。
JIT(即时编译器):即时编译器是种特殊的编译器,它通过把字节码变成机器码来提高JVM的效率。

16、MVC 的各个部分都用哪些技术来实现?如何实现?

Model层:可以用普通的 JavaBean 来实现。
View层:可以用 JSP 或者 JS 来实现。
Controller层:可以用 Struts2 或者 Spring MVC 来实现。

17、RPC 通信 和 RMI 区别

RPC(remote procedure call),即远程过程调用。
RMI(remote method invocation),即远程方法调用。
两者的实质都是调用远程的服务,只不过RPC是用面向过程的语言如C语言实现,而RMI是用面向对象的语言如Java实现。

18、什么是 Web Service(Web服务)

Web Service 就是通过网络调用其他网站的资源。

19、JSWDL 开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI、WSDL解释。

JAXP:(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。
JAXM:(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。
SOAP:即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。
UDDI:UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
WSDL:是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。

20、WEB容器主要有哪些功能?并请列出一些常见的WEB容器名字。

WEB容器的功能:通信支持、管理servlet的生命周期、多线程支持、jsp支持(将jsp翻译成java)
常见的WEB容器:Tomcat、WebLogic、WebSphere

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

可以,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致。

22、简单说说你了解的类加载器。是否实现过类加载器

类加载器负责加载Java类的字节码到Java虚拟机中。
自己实现类加载器一般需要继承 java.lang.ClassLoader ,覆写 findClass(String name)方法。

23、解释一下什么叫AOP(面向切面编程)

AOP(Aspect Oriented Programming),即面向切面编程,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

24、请简述 Servlet 的生命周期及其相关的方法

①实例化阶段:服务器对Servlet进行实例化,调用Servlet的构造方法
②初始化阶段:服务器调用Servlet的init方法进行初始化(只在第一次请求时调用)。
③请求处理阶段:服务器调用Servlet的service方法,然后根据请求方式调用相应的doXXX方法。
④服务终止阶段:服务器调用Servlet的destroy方法销毁Servlet实例

25、请简述一下 Ajax 的原理及实现步骤

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
原理:HTTP协议的异步通信
实现步骤:
1、创建一个XMLHttpRequest对象
2、调用该对象的open方法
3、设置回调函数

26、简单描述 Struts 的主要功能

1、获取表单内容,并组织生成参数对象
2、根据请求的参数转发请求给适当的控制器
3、在控制器中调用业务接口
4、将业务接口返回的结果包装起来发送给指定的视图,并由视图完成处理结果的展现
5、做一些简单的校验或是国际化工作

27、什么是 N 层架构

N层架构是一种软件抽象的层次结构,是对复杂软件的一种纵向切分,每一层次中完成同一类型的操作,以便将各种代码根据其完成的使命来进行分割,以降低软件的复杂度,提高其可维护性。一般来说,层次之间是向下依赖的,下层代码未确定其接口前,上层代码是无法开发的,下层代码接口的变化将使上层的代码一起变化。

28、什么是 CORBA?用途是什么

CORBA(Common Object Request Broker Architecture 公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范。
用途:
1、存取来自现行桌面应用程序的分布信息和资源;
2、使现有业务数据和系统成为可供利用的网络资源;
3、为某一特定业务用的定制的功能和能力来增强现行桌面工具和应用程序;
4、改变和发展基于网络的系统以反映新的拓扑结构或新资源;

29、什么是 Java虚拟机?为什么Java被称作是“平台无关的编程语言”

Java虚拟机是执行字节码文件(.class)的虚拟机进程。
因为不同的平台装有不同的Java虚拟机,它们能够将相同的.class文件,解释成不同平台所需要的机器码。所以Java被称为平台无关的编程语言。

30、什么是正则表达式?用途是什么?哪个包使用正则表达式来实现模式匹配

正则表达式:是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,用这个“规则字符串”来表达对字符串的过滤逻辑。
用途包括:
1、字符串匹配
2、指定字符串替换
3、指定字符串查找
4、字符串分割
正则表达式的包:java.util.regex包

31、什么是懒加载(Lazy Loading)

懒加载:即为延迟加载,顾名思义就是在需要的时候才加载,这样做效率会比较低,但是占用内存低。

32、什么是尾递归,为什么需要尾递归

如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。
为什么需要尾递归:尾递归和普通递归的不同点在对内存的占用,普通递归创建stack后内存减少,而尾递归只会占用恒量的内存。

33、什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)

控制反转:是指将创建对象的功能交给Spring容器,在我们需要使用对象的时候不需要自己创建,可以直接从容器中获取。
依赖注入:动态的向某个对象提供它所依赖的其他对象。

关键字finalize
1、什么是finalize() 方法

Java 可以使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做一些必要的清理工作。

2、finalize()方法什么时候被调用

这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

3、析构函数(finalization) 的目的是什么

析构函数的目的是:在清除对象前,完成一些清理工作,比如:释放内存等。

4、final 和 finalize 的区别

final关键字可以用于类、方法、变量前,用来表示该类、方法、变量具有不可变的特性。

finalize方法用于回收资源,可以为任何一个类添加finalize方法。该方法将在垃圾回收器清除对象之前调用。

注意:
关于以下java基础、io、集合、多线程、虚拟机、设计模式等的文章和源码解析,可以到我的微信公众号获取,每日分享!

final
1、final关键字有哪些用法

2、final 与 static 关键字可以用于哪里?它们的作用是什么

3、final, finally, finalize的区别

4、final、finalize 和 finally 的不同之处?

5、能否在运行时向 static final 类型的赋值

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

7、一个类被声明为final类型,表示了什么意思

8、throws, throw, try, catch, finally分别代表什么意义

9、Java 有几种修饰符?分别用来修饰什么

volatile
1、volatile 修饰符有过什么实践

2、volatile 变量是什么?volatile 变量和 atomic 变量有什么不同

3、volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗

4、能创建 volatile 数组吗?

5、transient变量有什么特点

6、super什么时候使用

7、public static void 写成 static public void会怎样

8、说明一下public static void main(String args[])这段声明里每个关键字的作用

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

10、sizeof 是Java 的关键字吗

static
1、static class 与 non static class的区别

2、static 关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法

3、静态类型有什么特点

4、main() 方法为什么必须是静态的?能不能声明 main() 方法为非静态

5、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用

6、静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢

7、成员方法是否可以访问静态变量?为什么静态方法不能访问成员变量

switch
1、switch 语句中的表达式可以是什么类型数据

2、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上

3、while 循环和 do 循环有什么不同

操作符
1、&操作符和&&操作符有什么区别?

2、a = a + b 与 a += b 的区别?

3、逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别

4、3*0.1 == 0.3 将会返回什么?true 还是 false?

5、loat f=3.4; 是否正确?

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

数据结构
基础类型(Primitives)
1、基础类型(Primitives)与封装类型(Wrappers)的区别在哪里

2、简述九种基本数据类型的大小,以及他们的封装类

3、int 和 Integer 哪个会占用更多的内存? int 和 Integer 有什么区别?parseInt()函数在什么时候使用到

4、float和double的默认值是多少

5、如何去小数四舍五入保留小数点后两位

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

类型转换
1、怎样将 bytes 转换为 long 类型

2、怎么将 byte 转换为 String

3、如何将数值型字符转换为数字

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

5、能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗

6、类型向下转换是什么

数组
1、如何权衡是使用无序的数组还是有序的数组

2、怎么判断数组是 null 还是为空

3、怎么打印数组? 怎样打印数组中的重复元素

4、Array 和 ArrayList有什么区别?什么时候应该使用Array而不是ArrayList

5、数组和链表数据结构描述,各自的时间复杂度

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

队列
1、队列和栈是什么,列出它们的区别

2、BlockingQueue是什么

3、简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处。

4、ArrayList、Vector、LinkedList 的存储性能和特性?

5、String 和 StringBuffer 的区别?

6、ByteBuffer 与 StringBuffer 有什么区别?

HashMap
1、HashMap的工作原理是什么

2、内部的数据结构是什么

3、HashMap 的 table的容量如何确定?loadFactor 是什么? 该容量如何变化?这种变化会带来什么问题?

4、HashMap 实现的数据结构是什么?如何实现

5、HashMap 和 HashTable、ConcurrentHashMap 的区别

6、HashMap的遍历方式及效率

7、HashMap、LinkedMap、TreeMap的区别

8、如何决定选用HashMap还是TreeMap

9、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办

10、HashMap 是线程安全的吗?并发下使用的 Map 是什么,它们内部原理分别是什么,比如存储方式、 hashcode、扩容、 默认容量等

HashSet
1、HashSet和TreeSet有什么区别

2、HashSet 内部是如何工作的

3、WeakHashMap 是怎么工作的?

Set
1、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别?

2、TreeMap:TreeMap 是采用什么树实现的?TreeMap、HashMap、LindedHashMap的区别。TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

3、TreeSet:一个已经构建好的 TreeSet,怎么完成倒排序。

4、EnumSet 是什么

Hash算法
1、Hashcode 的作用

2、简述一致性 Hash 算法

3、有没有可能 两个不相等的对象有相同的 hashcode?当两个对象 hashcode 相同怎么办?如何获取值对象

4、为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals与 hashCode 的异同点在哪里

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

6、hashCode() 和 equals() 方法的重要性体现在什么地方

7、Object:Object有哪些公用方法?Object类hashcode,equals 设计原则? sun为什么这么设计?Object类的概述

8、如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。

9、可以在 hashcode() 中使用随机数字吗?

LinkedHashMap
1、LinkedHashMap 和 PriorityQueue 的区别是什么
List

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

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

3、遍历一个 List 有哪些不同的方式

LinkedList
1、LinkedList 是单向链表还是双向链表

2、LinkedList 与 ArrayList 有什么区别

3、描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么?

4、插入数据时,ArrayList, LinkedList, Vector谁速度较快?

ArrayList
1、ArrayList 和 HashMap 的默认大小是多数

2、ArrayList 和 LinkedList 的区别,什么时候用 ArrayList?

3、ArrayList 和 Set 的区别?

4、ArrayList, LinkedList, Vector的区别

5、ArrayList是如何实现的,ArrayList 和 LinkedList 的区别

6、ArrayList如何实现扩容

7、Array 和 ArrayList 有何区别?什么时候更适合用Array

8、说出ArraList,Vector, LinkedList的存储性能和特性

Map
1、Map, Set, List, Queue, Stack

2、Map 接口提供了哪些不同的集合视图

3、为什么 Map 接口不继承 Collection 接口

Collections
1、介绍Java中的Collection FrameWork。集合类框架的基本接口有哪些

2、Collections类是什么?Collection 和 Collections的区别?Collection、Map的实现

3、集合类框架的最佳实践有哪些

4、为什么 Collection 不从 Cloneable 和 Serializable 接口继承

5、说出几点 Java 中使用 Collections 的最佳实践?

6、Collections 中 遗留类 (HashTable、Vector) 和 现有类的区别

7、什么是 B+树,B-树,列出实际的使用场景

接口
1、Comparator 与 Comparable 接口是干什么的?列出它们的区别

对象拷贝(clone)
1、如何实现对象克隆

2、深拷贝和浅拷贝区别

3、深拷贝和浅拷贝如何实现激活机制

4、写clone()方法时,通常都有一行代码,是什么

比较
1、在比较对象时,”==” 运算符和 equals 运算有何区别

2、如果要重写一个对象的equals方法,还要考虑什么

3、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

构造器
1、构造器链是什么

2、创建对象时构造器的调用顺序

不可变对象
1、什么是不可变象(immutable object)

2、为什么 Java 中的 String 是不可变的(Immutable)

3、如何构建不可变的类结构?关键点在哪里

4、能创建一个包含可变对象的不可变对象吗

5、如何对一组对象进行排序

方法
1、构造器(constructor)是否可被重写(override)

2、方法可以同时即是 static 又是 synchronized 的吗

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

4、Java支持哪种参数传递类型

5、一个对象被当作参数传递到一个方法,是值传递还是引用传递

6、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

7、我们能否重载main()方法

8、如果main方法被声明为private会怎样
GC

概念
1、GC是什么?为什么要有GC

2、什么时候会导致垃圾回收

3、GC是怎么样运行的

4、新老以及永久区是什么

5、GC 有几种方式?怎么配置

6、什么时候一个对象会被GC? 如何判断一个对象是否存活

7、System.gc() Runtime.gc()会做什么事情? 能保证 GC 执行吗

8、垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

9、Minor GC 、Major GC、Young GC 与 Full GC分别在什么时候发生

10、垃圾回收算法的实现原理

11、如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

12、垃圾回收的最佳做法是什么

GC收集器有哪些
1、垃圾回收器的基本原理是什么?

2、串行(serial)收集器和吞吐量(throughput)收集器的区别是什么

3、Serial 与 Parallel GC之间的不同之处

4、CMS 收集器 与 G1 收集器的特点与区别

5、CMS垃圾回收器的工作过程

6、JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代

7、吞吐量优先和响应优先的垃圾收集器选择

GC策略
1、举个实际的场景,选择一个GC策略

2、JVM的永久代中会发生垃圾回收吗

收集方法
1、标记清除、标记整理、复制算法的原理与特点?分别用在什么地方

2、如果让你优化收集方法,有什么思路

JVM参数
1、说说你知道的几种主要的jvm 参数

2、-XX:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值