最近打算找新工作,刷一刷面试题,就发现这个面试题系列挺不错的,里面有很多自己不清楚,不懂的地方。
题目地址:<<2018年最全Java面试通关秘籍第一套!>>
一、基础篇
1.1、Java基础
面向对象的特征:继承、封装和多态
封装:将对象所拥有的属性隐藏起来,然后提供对外访问的方法。
继承:子类继承父类,此时子类能够拥有父类所拥有的属性和方法,关键字extends;
多态:首先是多态存在的必要条件:①存在父子关系;②子类重写父类的方法;③父类对象指向子类。
注:多态后的对象不能使用子的方法与属性,必须要向下转型之后才能使用。
final, finally, finalize 的区别
final一般是用来修饰类、变量、方法,用final修饰过后的类不可以被继承,修饰过后的变量一般叫做常量(不可再重新赋值),方法不可以被重写。
finally一般是用在try catch捕捉到异常之后,进入finally,对异常进行处理或者进行其他操作。
finalize没有用过,是java中的一个方法,finalize()方法是在垃圾收集器删除对象之前对这个对象的调用。
Exception、Error、运行时异常与一般异常有何异同
Exception:表示可恢复的例外,这是可捕捉到的。
Error:无法预期的严重错误,导致JVM虚拟机无法继续执行,几乎无法恢复捕捉的.
运行时异常:一般有空指针、数组越界等,是可以在代码中避免的。
还有就是编译时异常,编译器强制要求添加异常捕获。
请写出5种常见到的runtime exception
int 和 Integer 有什么区别,Integer的值缓存范围
int是基本数据类型,而Integer则是一个对象。Integer是int的包装类,从Java5开始引入了自动装箱和自动拆箱,使得二者可以相互转换。
包装类,装箱和拆箱
八种基本数据类型每个都对应一个包装类:int→Inteher,long→Long,short→Short,byte→Byte,
floar→Float,double→Double,char→Char,boolean→Boolean。
装箱是指将基础数据类型转换为包装类,拆箱则是将包装类转换为基础数据类型。
自动装箱、拆箱是在讲java文件编译成class文件时自动完成的操作。
String、StringBuilder、StringBuffer
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象String,而StringBuffer每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用.StringBuilder则用在字符串缓冲区被单个线程使用的时候(这种情况很普遍),它与StringBuffer方法大致相同,但要比StringBuffer速度要快一点。
重载和重写的区别
重写存在于有父子关系的类中,重写方法名一致,参数个数和参数类型及返回值类型必须一致。重写的方法的修饰符要大于原方法修饰符,抛出异常类小于原方法。
重载只需要不同参数列表(类型、个数、顺序不一致)与返回值无关,但是不可以只更改返回值类型,而不改变参数列表。
抽象类和接口有什么区别
一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口。
说说反射的用途及实现
说说自定义注解的场景及实现
传送门→https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html
HTTP请求的GET与POST方式的区别:参考
get请求是以键值对形势传送数据,多个参数用&分割,数据大小也有其限制(64k?)
post请求一般用来提交表单,数据一般放在请求体里面。
Session与Cookie区别
cookie数据放在客户端,session数据放在本地。
cookie的安全性问题,session则session过多时出现服务器性能问题。
列出自己常用的JDK包
MVC设计思想
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层――模型层、视图层、控制层。
视图(View)代表用户交互界面。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。
控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。
equals与==的区别
==实质上是比较两个对象的对峙是否相同,即是否只指向相同对象
equals用来比较两个对象的内容是否相同。
hashCode和equals方法的区别与联系
什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
序列化就是将java对象转换字节序列的过程。
反序列化就是将字节序列转换为java对象的过程。
实现Java序列化:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
Object里边?
简单说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify();所以wait和notify属于Object。
专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。
也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中。Java的平台无关性如何体现出来的
JDK和JRE的区别
JDK是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。
JRE则是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
Java 8有哪些新特性