Java面试题之基础(一)
程序员文章站
2024-03-23 19:57:22
...
!!!更多面试题,关注公众号【风清邬】!!!
- 面向对象的特征:继承、封装和多态
* 继承:A extends B,A则继承了B所有的属性(非private)和方法,A可重写方法,也可扩展自己的属性和方法
* 封装:将数据和基于数据的操作封装在一起,使其构成一个不可分割的对象,数据的操作隐藏在对象内部,只保留一些接口使其与外部发生联系。
封装的优点:良好的封装减少耦合;类内部的结构可以*修改;隐藏内部信息,实现细节。
* 多态:分为编译时多态和运行时多态。
编译时多态:主要指方法的重载,它根据参数列表的不同来区分不同的函数;
运行时多态:当实现多态的三个条件(继承、重写、向上转型)都具备时,指向子类的父类类型引用在真正执行时会执行子类的方法,这样对外表现为使用相同的类当时表现出不同的结果
- final, finally, finalize 的区别
* final用来作为类、方法、成员变量的修饰符,表明类是不可继承的、方法和成员变量是不可修改的
* finally用在try...catch..finally里,作为异常捕获里最后执行的代码块,一般用于释放资源、关闭连接
* finalize是定义在Object中的方法,子类可以重写这个方法以整理系统资源或者清理工作,方法在垃圾回收器回收这个对象之前调用
- Exception、Error、运行时异常与一般异常有何异同
* Exception和Error都继承自Throwable
* Exception是所有异常的父类,运行时异常和一般异常都继承自Exception
* 运行时异常:编译期间不会强制要求捕获,通常是可以通过编码避免的异常
* 可检查异常:在源代码中必须进行显示的捕获处理,这是编译器检查的一部分
* Error表现了java运行时系统的内部错误和资源耗尽错误。大部分错误与编写者执行的操作无关,而表示JVM运行时出现的问题。应用程序不应该抛出这种错误
- 请写出5种常见到的runtime exception
ArrayIndexOutOfBoundsException
NullPointException
ClassNotFoundException
ClassCastException
NoSuchMethodException
- int 和 Integer 有什么区别,Integer的值缓存范围
* int是基本数据类型
* Integer是对象类型,有一系列的对象方法
int和Integer可互相转换,称为拆箱封箱操作
* Integer缓存值范围为-128~127
- 包装类,装箱和拆箱
* 包装类是相对于基本类型而言的,八中基本类型都有相对应的包装类
* 装箱和拆箱操作是在基本类型和其对象类型之间发生的,是一种自动的行为
Integer i = 10; //装箱操作,自动调用 Integer.valueOf(int val) 方法
i = 10; //装箱操作,自动调用 Integer.valueOf(int val) 方法
int n = i; // 拆箱操作,自动调用Integer.intValue()方法
n = i; // 拆箱操作,自动调用Integer.intValue()方法
- String、StringBuilder、StringBuffer
* String作为一个final类型的对象,可用来表示字符串值,字符串的拼接实际是一个不断产生新的String对象的过程
* StringBuilder在String的拼接过程中,只产生一个对象
* StringBuffer的方法都是synchronized的,相对于StringBuilder而言是线程安全的
在执行速度方面:StringBuilder > StringBuffer > String
在线程安全方面:StringBuilder非线程安全;StringBuffer线程安全
- 重载和重写的区别
* 重载:一个类的多个方法,方法名相同,而参数不同(参数类型、参数个数不同,返回类型可相同也可不同,参数类型不可作为重载函数的判断标准)
* 重写:发生在父子类之间,子类定义的方法与父类拥有相同的名称和参数,这说明该方法被重写
- 抽象类和接口有什么区别
* 抽象类:以abstract描述的类,一般存在未实现的抽象方法,子类继承抽象类之后,需要实现该抽象方法,如果没有实现,则可以设置子类也为abstract类
* 接口:接口是一种特殊的抽象类,接口里的方法全部为抽象方法,子类实现接口后,需要实现这些方法
应用场景:
* 抽象类不能被实例化,只能用作子类的父类,模板模式一般就使用抽象类来实现
* 如果想实现多重继承,这需要使用接口来实现
- 说说反射的用途及实现
反射作为JDK的一个优秀特性,可作为一种特殊的实现方式来实现对类的操作。
在运行态中,针对于任何一个类,我们能获取这个类的属性和方法,并且能调用对象的方法。
我们常用的Spring框架就使用了反射,通过使用反射来获取类的实例;
实现:获取类的Class对象,可通过Class来获取类的属性、方法,并可通过Class对象来创建实例
- 说说自定义注解的场景及实现
我们在使用框架如Spring、Mybatis时都会用到很多注解,注解可以在类上、方法上、成员变量上。
一般来说,使用注解可以为类添加许多附加功能。
Spring的Controller、Service注解,主要就是让Spring在扫描包下的类的时候,针对于添加了这些注解的类这注册到Spring容器中
- HTTP请求的GET与POST方式的区别
HTTP的请求类型有很多种方式,常用的就是GET和POST,其他还有PUT/DELETE/HEAD等
GET:一般用于查询操作,参数拼接在URL上
POST:一般用于添加或更新操作,参数可作为http请求的body来放入,
可以从安全性、参数传输长度等方面来分析其区别
- Session与Cookie区别
在常规的Web开发中,经常会使用到Session和Cookie
* Session可被看做是一次会话,当session过期或session关闭的时候会话结束,我们在开发中可以使用session传递一些参数
* Cookie是使用在客户端的,相对而言,session是使用在服务器端的。最经典的Cookie使用方式是:在Cookie中存放session_id,将Cookie和Session的联合使用,实现http请求的连续性交易
- 列出自己常用的JDK包
java.lang
java.io
java.nio
java.util
java.util.concurrent
- MVC设计思想
在Web开发中的一个经典开发思想
model-view-controller
将web项目分成不同的层次,每个层次之间对外提供接口访问,实现一种高内聚低耦合。
主要要体会到MVC的分层思想,在实际的代码开发中需要注意到
- equals与==的区别
* equals比较的是两个对象的值是否相同
* == 比较的是两个对象的对象内存地址是否相同
- hashCode和equals方法的区别与联系
hashCode和equals是Object的两个方法,hashCode主要是为了获取对象的哈希值;equals这比较两个对象是否相等(内存地址意义上的相同)
equals方法相等这hashCode一定相等;但是hashCode相等equals方法不一定相等
注意:hashCode和equals方法都是为了比较对象是否相等的,那么为什么需要两个方法了?
equals的比较相对复杂点,而hashCode的比较相对简单,但是equals的比较更严谨,hashCode就不那么严谨了。所以,针对大量的对象比较,如果都用equals比较的话,显然效率比较低,所以,一般先用hashCode进行比较,如果hashCode不同则两个对象肯定不同;如果hashCode相同,则再进行equals比较。
用户一般不需要重写hashCode和equals方法,如果要重写的话,这两个都要重写
- 什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
java序列化:将对象转换为字节流的过程
反序列化:将字节流转换为对象的过程
序列化的用途:将对象的字节序列保存到硬盘上;在网络上传输对象的字节序列。
java实现序列化:对象实现Serializable接口,然后使用流处理操作ObjectInputSteam和ObjectOutputStream来进行序列化操作
- Object类中常见的方法,为什么wait notify会放在Object里边?
toString()/hashCode()/equals()/clone()
wait方法暂停的是持有对象的锁,所以要调用wait方法必须为object.wait()
同理:notify方法唤醒的是等待锁的对象
- Java的平台无关性如何体现出来的
最主要的是JDK的部署,JDK扮演了java程序与所在硬件平台和操作系统之间的缓冲角色。这样java程序只需要与JDK打交道而不用管具体的操作系统
体现在:我们只需要编写java程序,如果需要在不同的平台运行,那么首先在对应平台安装JDK,然后将打包后的应用运行在JDK上即可,与操作系统无关
- JDK和JRE的区别
JDK包含JRE,JRE是java运行时环境,包含了JVM
JDK不仅仅有JRE,同时还有java源码、编译器javac、java程序调试工具jconsole等,可以进行开发调试工作
- Java 8有哪些新特性
* lambda
* java.util.Stream提供对元素流进行函数式操作
!!!更多面试题,关注公众号【风清邬】!!!