JAVA基础面试题整理
在本篇文章里小编给大家整理的是关于JAVA基础面试题的整理内容,需要的朋友们可以参考下。
1.Java中final、finally、finalize的区别
简单区别:
final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
2.error和exception有什么区别?
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
Exception又分为运行时异常,受检查异常。
运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
受检查异常,是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理), 所以称之为受检查异常。
3.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
1、什么是Set?(what)
Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。
2、如何来区分重复与否呢?(how)
“ 用 iterator() 方法来区分重复与否 ”,这是在网上流传的答案,个人认为这是个错误的答案。JPI中写的很明白:“set 不包含满足
e1.equals(e2) 的元素对 e1 和 e2 ”,由此可见回答使用equals()区分更合适。
3、为什么用equals()而不用==来区分?(why)
应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据Java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。
Static Nested Class (静态嵌套类)是Inner Class(内部类)的一种,
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
Overload和Override的区别?
Override是重写:方法名称、参数个数,类型,顺序,返回值类型都是必须和父类方法一致的。它的关系是父子关系
Overload是重载:方法名称不变,其余的都是可以变更的。它的关系是同一个类,同一个方法名,不同的方法参数或返回值。
备注:它们都是是Java多态性的不同表现
构造器constructor是否可被override
1.Constructor不能被继承,所以Constructor也就不能被override,但是可以overload,所以你可以看到有多个构造函数这种情况。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
2.不可以 ,每一个类必须有自己的构造函数,负责构造自己这部分的构造
子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数
List、Map、Set三个接口,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。即,有序可重复。
Set 无法拥有重复元素,内部排序。即,无序不可重复。
Map 保存 key-value 值,value可多值。一一映射。
Hashtable和HashMap的区别:
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。
jsp中动态include与静态include
动态INCLUDE在使用的时候,会先解析所要包含的页面(你例子中的included.jsp),解析后在和主页面放到一起显示;
静态INCLUDE在使用的时候,不会解析所要包含的页面(你例子中的included.htm),也就是说,不管你的included.htm中有什么,我的任务就是把你包含并显示,其他的一概不管
jsp:include是先编译一下included.jsp文件,然后再包含 先编译,后包含@ include是先把文件包含就来,然后统一编译 先包含,后编译
Java中 forward 和redirect的区别
使用forward的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;
使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。
forward,转发页面和转发到的页面可以共享request里面的数据.
redirect,不能共享数据.
jsp有哪几个内置对象?
1.request -->触发服务调用的请求 -->范围是:request
2.response -->对请求的应答 -->范围是:page
3.session -->为请求的客户创建的session对象 -->范围是:session
4.application -->从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() getContext()的调用中) -->范围是:application
5.out -->向输出流写入内容的对象 -->范围是:page
6.pageContext -->本 JSP 的页面上下文 -->范围是:page
7.page -->实现处理本页当前请求的类的实例 -->page
8.config -->本 JSP 的 ServletConfig -->page
9.exception -->表示JSP页面运行时产生的异常 -->Page
Servlet 生命周期:
Servlet 加载--->实例化--->服务--->销毁。
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
left join inner join right join 区别
left\right join是外部连接,inner join是内连接
外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全
内连接则只显示两表关联条件匹配的数据
注:所谓关联条件即是指on的条件
oracle常用函数
Oracle SQL 提供了用于执行特定操作的专用函数。这些函数大大增强了 SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 Oracle 数据库中主要使用两种类型的函数:
- 单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果,
比如:MOD(x,y)返回 x 除以 y 的余数(x 和 y 可以是两个整数,也可以是表中的整
数列)。常用的单行函数有:
字符函数:对字符串操作。
数字函数:对数字进行计算,返回一个数字。
转换函数:可以将一种数据类型转换为另外一种数据类型。
日期函数:对日期和时间进行处理。
- 聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)
返回结果集中 x 列的总合。
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
在数据库关系图中,可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
数据库索引是为了增加查询速度而对表字段附加的一种标识。
索引的作用:
1.通过创建唯一索引,可以保证数据记录的唯一性。
2.可以大大加快数据检索速度。
3.可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
4.在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
以上就是本次介绍全部知识点内容,感谢大家的学习和对Java进阶营的支持。