【计题04组01号】Java面试问答题

java

写在前面:博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢投,我就敢肝

写作前面

本书内容摘自《Java程序员面试笔试宝典》

很多同学在面试时其实有个误区,认为准备的东西越详细越好

其实不是,就和批试卷一样,写长篇大论其实并不会必然加分

老师阅卷时间有限只会抓关键词,面试官也是一样的道理

加上面试官每天面试的人有很多,不可能在你身上浪费大量的时间,更不可能有时间听你背书

工作不是要一个背书机器,加上计算机语言晦涩难懂,要想把整本书背下来基本不可能

那么为什么有时候我们听大佬说话句句都是重点

因为他抛弃了所有的赘述,只留下了关键词和框架

但是这本书怎么说呢,回答问题的逻辑稍微有点乱,有时候看着看着就把问题忘了,所以有些拓展内容就删掉了,留到别的页面去单独和大家讨论

面试的时候除非面试官追问,否则一般两三句话可以搞定了

所以这篇博文的回答都会很短,但是不是直接靠这个回答就可以了,大家要根据关键词将语言用自己的话组织起来

Java基础知识

Java语言有哪些优点

纯面向对象,平台无关,有内置类,支持Web应用开发,安全和健壮,规避了C++的弊端

Java和C++有什么区别和相同

Java编译成字节码JVM解释,C++经过编译生成二进制代码

Java纯面向对象,C++兼具面向对象过程

Java没有指针更安全

Java不支持多重继承

Java自带回收功能

Java语言不支持运算符重载,C++支持

Java和平台无关,C++有关

Java提供对注释文档内建支持

Java包含了标准库

为什么需要public static void main (String[] args) 这个方法

main是JVM识别的特殊方法名,是程序的入口方法

如何实现在Main方法执行前输出hello world

main方法不一定是第一个被执行的,在前面利用静态块实现输出语句

Java程序初始化的顺序是怎么样的

静态对象优于非静态对象

父类优于子类

按照成员变量定义顺序

Java中的作用域有哪些

Java的变量有三种:成员变量,静态变量【全局变量】,局部变量

成员变量还有四种:public,private,protected,default

一个Java文件中是否可以定义多个类

可以定义,但只有一个类被public修饰,且必须与文件名相同,没有public类文件名随便一个类的名字

什么是构造函数

用来在对象实例化时初始化对象的成员变量的函数

  • 构造函数必须与类的名字相同
  • 每个类可以有多个构造函数
  • 参数不限制
  • 总是伴随着new操作一起调用,且不能直接调用,必须系统调用
  • 主要作用完成初始化工作
  • 不能被继承
  • 子类可以通过super来调用父类构造函数
  • 父类和子类都没有定义,编译器自动为两个类生成无参数构造函数

为什么Java中有些接口没有任何方法

Java不支持多重继承,Java一个类可以实现多个接口,间接达到多重接口的目的

Java中的clone方法有什么作用

为了解决引用传递中,修改一个值会影响到另一个值的问题

什么是反射机制

允许程序运行时自我检查,增加程序的灵活性

功能主要有

  • 得到一个对象所属的类
  • 获取一个类的所有成员变量和方法
  • 在运行时创建对象
  • 在运行时调用对象的方法

package有什么作用

  • 解决明明冲突
  • 对类按照功能分类,项目组织更加清晰

如何实现类似于C语言中函数指针的功能

定义一个接口,在接口中生命调用的方法,实现这个接口,最后把实现类的一个对象作为参数传递给调用程序

面向对象和面向过程有什么区别

出发点不同:前者用常规思维的方式处理问题,后者强调过程的抽象化与模块化

层次逻辑关系不同:前者用计算机逻辑来模拟客观世界,后者把客观世界的问题抽象成计算机可以处理的过程

数据处理方式与控制程序方式不同:前者将对应的代码封装成一个整体,后者是直接通过程序来处理数据处理完毕即可显示结果

分析设计与编码转换方式不同:前者从分析、设计到编码采用一致性模型,后者从分析、设计到编码之间按规则进行转换

面向对象有哪些特征

抽象、继承、封装、多态

采用面向对象的开发方式有什么特点

较高的开发效率

保证软件的鲁棒性

保证软件的高可维护性

什么是继承

子类适用父类的一些成员变量与方法,提高代码的复用性,提高开发效率

组合和继承有什么区别

组合相当于【Has】

继承相当于【Is】,在这种情况下才使用继承

多态的实现机制是什么

多态是指同一个操作对于不同的对象,会有不同的语义

有两种表现方式

方法的重载【同名方法,不同参数】

方法的覆盖【子类覆盖父类】

重载和覆盖有什么区别

重载是同一个类中的方法之间的关系,覆盖是父类和子类的关系

覆盖只能一个方法或者一对方法产生关系,重载是多个方法之间的关系

覆盖参数列表相同,重载参数列表不同

覆盖调用根据对象的类型,重载调用根据实参和形参的方法体

抽象类和接口有什么异同

相同点

  • 都不能被实例化
  • 只有实现了其中的方法才能被实例化

不同点

  • 接口只有定义,只有实现接口的类才能实现接口中定义的方法,抽象类可以有定义和实现,其方法可以再抽象类中被实现
  • 接口需要实现【implements】,但抽象类只能被继承【entends】,一个类可以实现多个接口,但一个类只能继承一个抽象类
  • 接口理念是has关系,抽象类是is关系
  • 接口中定义的成员变量默认为public static final,抽象类可以有自己的数据成员变量,也可以由非抽象的成员方法
  • 接口被运用与实现比较常用的功能,抽象类更倾向于充当公共类的角色

接口是一种特殊形式的抽象类,但抽象类多用于同类食物中无法具体描述的方法的场景,仅限于子类和父类有逻辑关系才使用

内部类有哪些

静态内部类,成员内部类,局部内部类,匿名内部类

如何获取父类的类名

getClass().getSuperclass().getName()

this与super有什么区别

this用来指向当前实例对象,super用来访问父类

变量命名有哪些规则

只能由字母,数字,下划线和美元符号组成,第一个字符不能是数字,标识符不能包含空白字符

break,continue以及return有什么区别

break直接结束当前循环

continue结束此次循环,进入下一次循环

return是一个跳转语句,是的程序返回到调用该方法的地方

final,finally和finallize有什么区别

final声明属性、方法和类

finally是异常处理一部分

finalize是覆盖此方法来实现对其他资源的回收

assert有什么作用

对bollean表达式进行检查,用来保证程序的正确性,在开发和测试使用

static关键字有哪些作用

为某特定数据类型或对象分类单一的存储空间,预创建对象个数无关

实现某个方法或属性与类而不是对象关联在一起

适用switch时有哪些注意事项

switch表达式只能是int

省略了break,匹配语句后面所有的情况包括default都会被执行

volatile有什么作用

修饰被不同线程访问和修改的变量,系统直接从对应内存提取,不会利用缓存

instanceof有什么作用

判断一个引用类型的变量所指向的对象是否是一个类的实例,即它左边的对象是否是它右边的类的实例【boolean类型】

strictfp有什么作用

全称strict float point,指的是精确浮点,确保浮点数运算

Java提供了哪些基本数据类型

8种,byte,short,int,long,float,double,char,boolean

什么是不可变类

创建类的实例后,不允许修改它的值,类似于const,一般情况下封装类都是不可变类,包括String

创建不可边类的原则

  • 成员变量private修饰
  • 一般没有set方法
  • 确保类中所有方法不会被子类覆盖
  • 如果一个类成员不是不可变量,需要通过clone方法来保证
  • 如果有必要,可以使用equals方法和hashCode方法

值传递与引用传递有哪些区别

值传递形参的改变不会影响实参的值,引用传递形参的修改就会影响实参的值

不同数据类型的转换有哪些规则

类型自动转换,强制类型转换

强制类型转换注意事项有哪些

涉及byte、short和char类型的运算,会强制转换为int

需要得到short类型的结果,需要显示地转换

运算符优先级是什么

Math类中round、ceil和floor方法的功能各是什么

round方法表示四舍五入

ceil方法表示向上取整

floor方法表示向下取整

++i与i++有什么区别

前者程序开始前自增,后者程序执行完毕后自增

如何实现无符号数的右移运算

>>被称为有符号右移运算【为正数高位补0,负数时高位补1】

>>>被称为无符号右移运算【执行运算时,都会在高位补0】

char型变量中是否可以存储一个中文汉字

可以,不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字

字符串创建与存储的机制是什么

①创建对象
String s1 = new String("abc");
String s2 = new String("abc");

②声明对象
String s1 = "abc";
String s2 = "abc";

==、equals和hashCode有什么区别

==用来比较两个变量的值是否相等

equals在没有被覆盖的情况下和==运算符一样,覆盖以后可以比较数据内容而不是引用

hashCode用来鉴定两个对象是否相等,返回对象地址是否相等

equals方法用于比较对象的内容是否相等(覆盖以后)
hashcode方法只有在集合中用到
当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。
将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。

String、StringBuffer、StringBuilder和StringTokenizer有什么区别

1)String、StringBuffer、StringBuilder都用于字符串操作,其中,String是不可变类,即String对象一旦被创建,其值不能被修改,而StringBuffer和StringBuilder都是可变类,对象被创建以后仍然可以对其值进行修改。

2)在字符串需要共享的场合中使用String合适,而当一个字符串经常需要被修改时,最好使用StringBuffer或者StringBuilder,具体看是否多线程

3)String类实例化对象有两种方式:可以利用构造方法的方式(String str = new String("Hello"))来进行初始化,也可以用赋值的方式(String str = “Hello”)进行初始化。而StringBuffer和StringBuilder只能通过构造方法的方式(StringBuffer sb = new StringBuffer(“Hello”))来初始化。

4)StringBuffer是线程安全的,StringBuilder不是线程安全的。

5)在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。一般而言,如果要操作的数据量比较小,应优先使用String;如果在单线程下操作大量数据,应优先选择StringBuilder;如果是在多线程下操作大量数据,应优先考虑StringBuffer

6)StringTokenizer是用来分割字符串的工具类。

Java中数组是不是对象

对象的特点是封装了一些数据,同时提供一些属性和方法,所以数组是对象

有自己的属性【如何length】,也有一些方法被调用【clone】

数组的初始化方式有哪几种

一维数组两种

type arrayName[ ]或者type[ ]arrayName

二维数组三种

type arrayName[ ][ ] ;

type[ ][ ] arrayName;

type[ ] arrayName[ ];

length属性与length()方法有什么区别

前一个是数组长度,后一个是字符串长度

return后的finally块中的代码什么时候被执行

一定会执行,并且在return前执行

异常处理的原理是什么

把异常当做对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的父类

运行时异常和普通异常有什么区别

一般异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误

java编译器要求方法声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未捕获运行时异常。

Java IO流的实现机制是什么

输入和输出都被称为抽象的流,流可以被看做一组有序的字节集合,即数据在两设备之间的传输

流可以分为两大类:字节流和字符流

管理文件和目录的类是什么

File类管理文件和文件夹,通过类不仅能够查看文件或目录的属性,而且还可以实现对文件或目录的创建、删除与重命名等操作。

Java Web

页面请求的工作流程是怎样的

  1. 用户输入网址
  2. 把用户请求发送给服务器
  3. 服务器查找请求的网页
  4. 找到用户请求的页面
  5. 发送相应消息
  6. 浏览器显示返回结果

HTTP中GET语POST方法有什么区别

GET是一种最简单的请求方法,其主要功能是从服务器端获取用户所需资源,并将其作为相应返回给客户端

GET方法的作用主要用来获取服务器端资源信息,不会影响到资源自身的状态

POST方法在这个基础上还可以向服务器上传数据

什么是Servlet

Servlet 是采用Java语言编写的服务器端程序,它运行于Web服务器中的Servlet容器中,其主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容,而这正是HTML所不具备的功能。

与其他生成动态页面技术相比,Servlet有诸多优点

  1. 较好的可移植性
  2. 执行效率高
  3. 功能强大【可以与Web服务器进行交互】
  4. 使用方便【有接口用来读取或者设置HTTP都消息,处理Cookie和跟踪会话状态】
  5. 可扩展性强【具备Java所有优点】

doPost和doGet方法怎么选择

什么是Servlet的生命周期

加载、创建、初始化、处理客户请求、卸载

加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet

创建:通过调用Servlet的构造函数来创建一个Servlet实例。

初始化:通过调用Servlet 的init( )方法来完成初始化工作

处理客户请求:Servlet 一旦被创建后,它就可以为客户端提供服务了。

卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet自己释放其占用的系统资源

JSP有哪些优点

JSP的引入在一定程度上解决了Servlet存在的缺点

改进了Web应用程序代码可读性差,系统可扩展性可维护性差的缺陷

JSP与Servlet有何异同

相同点

JSP可以看做特殊的Servlet,只要是JSP可以完成的工作,Servlet都可以完成

不同点

Servlet是在Java嵌入HTML代码,编写不方便,JSP实现是在HTML中嵌入Java代码

Servlet中没有内置对象

JSP中的内置对象都是通过HttpServletRequest对象、HttpServletResponse 对象以及HttpServlet对象得到。

如何使用JSP与Servlet实现MVC模型

MVC全程Model【模型】,View【视图】、Controller【控制器】首字母组合

MVC强制性地分离Web应用的输入、处理和输出,使得MVC应用程序分成3个核心部件

JSP的内置对象有哪些

在JSP中,内置对象又称为隐含对象,是指在不声明和不创建的情况下就可以被使用的一些成员变量。

JSP一共提供有9个内置对象:

request ( 请求对象)

response (响应对象)

pageContext(页面上下文对象)

session ( 会话对象)

application (应用程序对象)

out (输出对象)

config(配置对象)

page (页面对象)

exception (例外对象)

request对象主要有哪些方法

JSP有哪些动作

jsp: include。用来在页面被请求时引入一个文件。

jsp : useBean。用来寻找或者实例化一个JavaBean。

jsp: setProperty。用来设置已经实例化的Bean对象的属性

jsp : getProperty。用来获取某个JavaBean的属性

jsp:foward。用来把请求转到一个新页面

jsp: plugin。用于在浏览器中播放或显示一个对象

以上是 【计题04组01号】Java面试问答题 的全部内容, 来源链接: utcz.com/z/394331.html

回到顶部