我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java常见面试题整理

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java常见面试题整理

面向对象的特征有哪些方面?

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 (推荐学习:java常见面试题)

继承是指子类获得父类的属性和方法。如狗是动物的一种,也可以说够继承了动物的特性,或者说狗是动物的子类。

多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用

五大原则:单一职责原则SRP 开放封闭原则OCP 替换原则LSP 依赖原则DIP 接口分离原则ISP

成员变量和局部变量的区别

* A:在类中的位置不同

* 成员变量:在类中方法外

* 局部变量:在方法定义中或者方法声明上

* B:在内存中的位置不同

* 成员变量:在堆内存(成员变量属于对象,对象进堆内存)

* 局部变量:在栈内存(局部变量属于方法,方法进栈内存)

* C:生命周期不同

* 成员变量:随着对象的创建而存在,随着对象的消失而消失

* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

* D:初始化值不同

* 成员变量:有默认初始化值

* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

静态变量和成员变量的区别

* 静态变量也叫类变量 成员变量也叫对象变量

* A:所属不同

* 静态变量属于类,所以也称为为类变量

* 成员变量属于对象,所以也称为实例变量(对象变量)

* B:内存中位置不同

* 静态变量存储于方法区的静态区

* 成员变量存储于堆内存

* C:内存出现时间不同

* 静态变量随着类的加载而加载,随着类的消失而消失

* 成员变量随着对象的创建而存在,随着对象的消失而消失

* D:调用不同

* 静态变量可以通过类名调用,也可以通过对象调用

* 成员变量只能通过对象名调用

this和super的区别和应用

* A:this和super都代表什么

* this:代表当前对象的引用,谁来调用我,我就代表谁

* super:代表当前对象父类的引用

* B:this和super的使用区别

* a:调用成员变量

* this.成员变量 调用本类的成员变量,也可以调用父类的成员变量

* super.成员变量 调用父类的成员变量

* b:调用构造方法

* this(...) 调用本类的构造方法

* super(...) 调用父类的构造方法

* c:调用成员方法

* this.成员方法 调用本类的成员方法,也可以调用父类的方法

* super.成员方法 调用父类的成员方法

排序都有哪几种方法?请列举

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。

String, StringBuffer StringBuilder的区别。

String的长度是不可变的;

StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer, 如果最后需要String,那么使用StringBuffer的toString()方法;线程安全;

StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

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

答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。

重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。

子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。

final, finally的区别?

答:final:修饰符(关键字);如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为 abstract的,又被声明为 final 的;将变量或方法声明为 final,可以保证它们在使用中不被改变;被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为 final 的方法也同样只能使用,不能重载。

finally:再异常处理时提供 finally 块来执行任何清除操作;如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

常见的几个运行异常。

java.lang.nullpointerexception(空指针异常)

java.lang.classnotfoundexception(指定的类不存在)

java.lang.arithmeticexception(数学运算异常)

java.lang.arrayindexoutofboundsexception(数组下标越界异常)

IOException(输入输出异常)

数组操作的两个常见小问题越界和空指针

* A:案例演示

* a:ArrayIndexOutOfBoundsException:数组索引越界异常

* 原因:你访问了不存在的索引。

* b:NullPointerException:空指针异常

* 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

  * int[] arr = {1,2,3};
  * arr = null;
  * System.out.println(arr[0]);

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

答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。

在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。

throw语句用来明确地抛出一个"异常"。

throws用来标明一个成员函数可能抛出的各种"异常"。

Finally为确保一段代码不管发生什么"异常"都被执行一段代码。

可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。

如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?

答:HTML的

元素有一个method属性,用来指定提交表单的方式,其值可以是get或post。

我们自定义的Servlet一般情况下会重写doGet()或doPost()两个方法之一或全部,如果是GET请求就调用doGet()方法,如果是POST请求就调用doPost()方法,那为什么为什么这样呢?

我们自定义的Servlet通常继承自HttpServlet,HttpServlet继承自GenericServlet并重写了其中的service()方法,这个方法是Servlet接口中定义的。

HttpServlet重写的service()方法会先获取用户请求的方法,然后根据请求方法调用doGet()、doPost()、doPut()、doDelete()等方法,如果在自定义Servlet中重写了这些方法,那么显然会调用重写过的(自定义的)方法,这显然是对模板方法模式的应用(如果不理解,请参考《Java与模式》一书的第37章)。

当然,自定义Servlet中也可以直接重写service()方法,那么不管是哪种方式的请求,都可以通过自己的代码进行处理,这对于不区分请求方法的场景比较合适。

抽象类和接口的区别?

接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。

接口可以多继承,抽象类不行

接口定义方法,不能实现,而抽象类可以实现部分方法。

接口中基本数据类型为static 而抽类象不是的。

内存泄露和内存溢出?

内存泄露:是指应用程序在申请内存后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但如果任其发展会导致内存溢出。

如:读取文件后,流要进行及时关闭以及对数据库连接的释放。

内存溢出:是指应用程序在申请内存时,没有最后的内存空间,供其使用。

如:我们在项目中对于大批量数据导入,采用分段批量提交的方式。

什么是线程同步?

线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。

线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。

对于静态同步方法,锁是针对这个类的,锁对象是该类的Class对象。静态和非静态方法的锁互不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁。

对于同步,要时刻清醒在哪个对象上同步,这是关键。

编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对“原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。

当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。

死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。

对多线程的理解?

同一件事,不同的人在做就是多线程。

食堂打饭,一个人一个人打就是单线程,开N个窗口N个人同时打就是多线程

线程的基本概念、线程的基本状态以及状态之间的关系:

线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

有那些集合?

List特点:元素有放入顺序,元素可重复

Map特点:元素按键值对存储,无放入顺序

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

List接口有三个实现类:LinkedList,ArrayList,Vector

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢

ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低

Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet

SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)

Query接口有一个实现类:LinkList

Map接口有三个实现类:HashMap,HashTable,LinkeHashMap

HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null

SortedMap有一个实现类:TreeMap

其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是存储的是键值对

文件读写的基本类:

File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java常见面试题整理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java常见面试题整理

面向对象的特征有哪些方面? 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 (推荐学习:java常见面试题)继承是指子类获得父类的
java常见面试题整理
2016-08-28

Java常见的面试题

  1)Java 中能创建 volatile 数组吗?  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个
2023-06-03

Java常见面试题:java面试笔记

1、基本数据类型有哪些?基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节
2023-06-02

Java Web常见面试题

jsp 和 servlet 有什么区别? (推荐学习:java常见面试题)jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,We
Java Web常见面试题
2019-08-30

常见的Java面试问题

JVMJava虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。什么是字节码?采用字节码的好处是什么?在 Java 中
2023-06-03

JavaScript数据结构常见面试问题整理

在JavaScript中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是带有结构特性的数据元素的集合。常用的数据结构有:数组、列表、栈、队列、链表、字典、集合等等
2022-11-13

java反射常见面试题

什么是反射?反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:
java反射常见面试题
2015-05-12

常见的java string面试题

常见的java string面试题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、
2023-06-14

java容器的常见面试题

java 容器都有哪些? (推荐学习:java常见面试题)Collection 和 Collections 有什么区别?java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提
java容器的常见面试题
2016-04-09

Java常见的基础面试题

JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提
Java常见的基础面试题
2017-11-11

Java IO常见面试题有哪些

这篇文章主要为大家展示了“Java IO常见面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java IO常见面试题有哪些”这篇文章吧。1. 什么是IO流?它是一种数据的流从源头流到目
2023-06-19

java的多线程常见面试题

并行和并发有什么区别? (推荐学习:java常见面试题)并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时
java的多线程常见面试题
2018-11-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录