【计题04组01号】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
页面请求的工作流程是怎样的
- 用户输入网址
- 把用户请求发送给服务器
- 服务器查找请求的网页
- 找到用户请求的页面
- 发送相应消息
- 浏览器显示返回结果
HTTP中GET语POST方法有什么区别
GET是一种最简单的请求方法,其主要功能是从服务器端获取用户所需资源,并将其作为相应返回给客户端
GET方法的作用主要用来获取服务器端资源信息,不会影响到资源自身的状态
POST方法在这个基础上还可以向服务器上传数据
什么是Servlet
Servlet 是采用Java语言编写的服务器端程序,它运行于Web服务器中的Servlet容器中,其主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容,而这正是HTML所不具备的功能。
与其他生成动态页面技术相比,Servlet有诸多优点
- 较好的可移植性
- 执行效率高
- 功能强大【可以与Web服务器进行交互】
- 使用方便【有接口用来读取或者设置HTTP都消息,处理Cookie和跟踪会话状态】
- 可扩展性强【具备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