一、基础篇 未完待续ing。。。
1.1、Java基础
面向对象的特征:继承、封装和多态
封装:
继承:
多态:
final, finally, finalize 的区别
final:表示常量,修饰属性、方法、类。表示属性不可变、方法不可重写、类不可被继承。
finally:在异常处理语句中,表示总是被执行的。
finalize:Object类的一个方法,在垃圾回收器执行的时候被调用,但是JVM不保证此方法一定被调用。Exception、Error、运行时异常与一般异常有何异同
Error和Exception都继承自Throwable类。
Error:表示系统级别的错误和程序不必处理的异常,是java运行环境中内部错误或者硬件问题。比如:内存资源不足等。这种错误,程序基本无能为力。是由Java虚拟机抛出的。
Exception:分为运行时异常和受检查异常。
运行时异常:表示无法让程序恢复的异常,导致的原因通常是执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
受检查异常:表示程序可以处理的异常,也表示程序可以修复(由程序自己接收异常并且处理),所以称为受检查异常。请写出5种常见到的runtime exception
NullPointerException 空指针异常
ClassCastException 类型强制转换异常
IllegalArgumentException 传递非法参数异常
IndexOutOfBoundsException 下标越界异常
SecurityException 存在安全问题int 和 Integer 有什么区别,Integer的值缓存范围
Integer是包装类,int是基本数据类型;Integer默认值未null,int默认值为0;Integer实际是对象的引用,指向new的Integer对象,int直接存储数据值;Integer变量必须实例化后使用,int变量不需要。
Integer对象的缓存值范围是-128到127之间,两个通过new生成的Integer对象永远是不相等的,因为实际上比较的是两个对象的引用,其内存地址不同;Integer变量与int变量比较时,只要值相等结果就为true,Integer会自动拆箱为int值进行比较;非new生成的Integer对象和new生成的Integer对象比较时结果为false,非new生成的Integer对象指向常量池中的对象,new指向堆中新建的对象,两者内存地址不同;两个非new生成的Integer对象,进行比较,变量值在-128到127之间结果为true,不在这之间为false。包装类,装箱和拆箱
基本数据类型:byte,int,short,long,double,float,char,boolean
包装类型: Byte,Integer,Short,Long,Double,Float,Character,Boolean
装箱指基本数据类型转换为包装类型,反之则为拆箱。String、StringBuilder、StringBuffer
String:字符串常量,一旦改改变就会创建新的对象。一般要经常改变的情况,最好不要使用它,会对系统性能产生影响。
StringBuffer:是线程安全的字符串变量。经常改变的情况下用它速度比String快。
StringBuilder:是非线程安全的字符串变量。比StringBuffer速度更快。重载和重写的区别
重载:方法名相同;参数列表类型不同、个数不同、顺序不同都可以构成重载;不以返回值类型做为区分标准,是一个类中多态性的一种表现。
重写:子类重写父类的方法,参数列表、返回值类型必须与被重写的方法一致;访问修饰符限制一定要大于被重写的方法;抛出的异常只能是父类方法异常或是其子类异常,可以抛出非检查异常。抽象类和接口有什么区别
1、抽象类和接口都不能够实例化。
2、一个类如果继承了某个抽象类或实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
3、抽象类中可以定义构造器,可以有抽象方法和具体方法。而接口中不能定义构造器,且其中的方法全部都是抽象方法。
4、抽象类中的成员可以是private、默认、protected、public的。而接口中的成员全部都是public的。
5、抽象类中可以定义成员变量,而接口中定义的成员变量实际都是常量。
6、有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。说说反射的用途及实现
说说自定义注解的场景及实现
HTTP请求的GET与POST方式的区别
get传参会在地址栏显示,不安全,传输的长度有限。
post不会在地址栏显示(在请求实体内部),安全性比较好,传输的长度理论无限。Session与Cookie区别
列出自己常用的JDK包
java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.io:包含能提供多种输入/输出功能的类。
java.util:包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
java.net:包含执行与网络相关的操作的类。
java.awt:包含用于创建用户界面和绘制图形图像的所有类。MVC设计思想
equals与==的区别
== 经常用于基本类型的比较,比较对象时则是比较的对象的引用地址。
equals方法Object类中也是通过==实现的,但在很多不同的类中会被重写,用于判断对象之间值的相等性。比如:String类重写equals方法,实际上是比较每个字符是否相等,而不是单纯的比较地址。hashCode和equals方法的区别与联系
hashCode和equals都是Object类中的方法。hashCode()返回的是一个int类型,equals()是用来比较两个对象是否相同的。由于equals()在比较对象时比较的比较全面复杂,所以如果数据量大的情况下就会影响效率。而用hashCode()来比较的话只是生成一个int类型的hash码来比较,这样就会节省消耗。
一般在做对象的比较时,会重写类的equals()与hashCode(),比较时,先对比两个对象的hash码是否相同,如果不相同,则两个对象就不同,不用继续比较了。如果hash码相同(两个不同的对象hash码有可能会相同),则继续用equals()比较,如果返回false则不同,如果返回true则相同。什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
Object类中常见的方法,为什么wait notify会放在Object里边?
Java的平台无关性如何体现出来的
JDK和JRE的区别
JDK:Java Development Kit 。java开发工具包,支持java 的程序开发,包括编译器(javac.exe)、开发工具(javadoc.exe\jar.exe\keytool.exe\jconsole.exe)和更多类库(如tools.jar)等。
JRE:Java Runtime Enviroment 。java运行时环境,可以支持java程序的运行,包括JVM虚拟机(java.exe)和基本类库(rt.jar)等。Java 8有哪些新特性
1.2、Java常见集合
List 和 Set 和 Map 的区别
List和Set都实现了单值存储的容器Collection接口,而Map是一个存储键值对的接口;
List允许重复的对象,可以插入多个null元素,是一个有序容器,输出的顺序就是插入顺序;
Set不允许重复对象,无序容器,无法保证每个元素的顺序。只允许一个null元素;
Map存储的内容是键值对,可能会有相同的值,但键对象必须是唯一的。Set和hashCode以及equals方法的联系
Arraylist 与 LinkedList 区别
LinkedList和ArrayList都实现了List接口,并实现了其中的