面试题总结
- java八大基本数据类型?
四个整数型( byte,short int,long)
两个浮点型(float double)
一个布尔型(boolean)
一个char - switch支持的数据类型?
byte,short,int,char,枚举(JDK1.5),String(JDK1.8) - 数组有没有length方法?
数组没有length方法,直有length属性,字符串有length()方法,集合有size()方法 - 重写和重载的区别
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。 - 面向对象的核心?
(1)继承:子类继承,子类拥有父类的所有特征,并且子类还可以扩展
(2)封装:将程序的具体实现细节隐藏起来,对外只提供一个接口
(3)多态:同一种事物的多种形态
(4)抽象:抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象。 - equals和==的区别?
==是数值上的比较,适用于基本数据类型;equals是两个对象地址的比较,时常通过重写equals方法比较对象的某一属性相等时就说明对象相等。
重写equals方法的时候也必须重写hashcode方法。 - string,stringBuffer,stringBuilder的区别?
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间;
StringBuffer是长度可变的,和线程安全的字符串操作类,多用于多线程操作字符串;
StringBuilder是长度可变的,速度快,是线程不安全的字符串操作类,多用于单线程操作字符串; - static修饰的方法,属性,代码有什么特点?
静态方法不需要实例化,可以直接通过类名打点访问
静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
静态方法中不能使用this 、super关键字
静态方法不能被非静态方法覆盖,静态方法不能修饰构造器;
静态属性对所有对象共享(全局变量)在类被载入时创建,只要类存在,static变量就存在;
静态代码块当类被加载的时候就执行,且只被执行一次,常用于类属性的初始化; - 抽象类和接口的区别?
(1).抽象类可以有构造方法,接口中不能有构造方法。
(2).抽象类中可以有普通成员变量,接口中没有普通成员变量
(3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
(4). 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
(5). 抽象类中可以包含静态方法,接口中不能包含静态方法(JDK1.8允许存在静态方法和默认被实现的方法)
(6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型(常量),并且默认即为public static final类型。
(7). 一个类可以实现多个接口,但只能继承一个抽象类。接口可以继承多个接口。 - fially和return结合使用问题?
(1):如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
(2):如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
(3):如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
A:如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
B:如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。 - final,finally,finalize的区别?
final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,fiannly中的代码块表示无论是否出现异常都会执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。 - Collection,Collections,Connection的区别?
Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
Connection是一个接口,是高度抽象的集合。它包含了集合的基本操作:对集合元素的增、删、改、查、判断是否为空,获取大小、遍历等操作; - Hashset,Treeset,LinkedHashset的区别?
Hashset是无序的,不允许重复,允许有一个null值的集合;
Treeset排序是按照自然顺序排序,不允许重复,只能存储同一数据类型的对象,实现原理基于二叉树的红黑树;
LinkedHashset 是按照添加顺序进行排序的,可添加多种数据类型,不允许重复; - set和list的相互转换?
//List转化成Set List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); Set<String> set = new HashSet<String>(); set.addAll(tableList); //Set转化成List //方法一 Set<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("c"); List<String> list = new ArrayList<String>(set); //方法二 Set<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("c"); List<String> list = new ArrayList<String>(); Iterator it=set.iterator(); while(it.hasNext()) { list.add(it.next()); }
- 三种线程创建方式的区别?
(1).继承Thread:简单方便,但影响扩展性(一旦继承了Thread类,则无法在继续继承其他类,使用比较局限)
(2).实现runnable接口:扩展性较强(类可以实现当前接口,还可以实现其他的接口),使用相对于Thread类稍显复杂
(创建完Runnable接口的对象之后,最终还是要依赖Thread类去创建和启动线程)
(3)实现callable接口:方法允许有任意类型的返回值,方法可以抛出异常,适合做一些分布式运算,使用比较复杂(需要依赖FutureTask类完成Runnable对象的创建,然后还需要Thread类来启动线程) - TCP和UDP协议的区别?
TCP就像打电话,需要传输双方构成连接才能传输数据,数据传输较为稳定,并且有序,先发送的一定先接收,效率不如UDP协议,对网络的要求高于UDP;
UDP协议就像发快递,传输双方无需建立连接,传送方只需要知道接收方的某些信息即可传输数据,效率高,但稳定性较低,并且数据是无序的。 - CS和BS结构的区别?
维护和升级方式简单。目前,软件系统的改进和升级越来越频繁,C/S系统的各部分模块中有一部分改变,就要关联到其它模块的变动,使系统升级成本比较大。B/S与C/S处理模式相比,则大大简化了客户端,只要客户端机器能上网就可以。对于B/S而言,开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。如果客户端的软件系统升级比较频繁,那么B/S架构的产品优势明显——所有的升级操作只需要针对服务器进行。
在系统的性能方面,B/S占有优势的是任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端。采用C/S结构时,客户端和服务器端都能够处理任务,这虽然对客户机的要求较高,但因此可以减轻服务器的压力
17.get post的区别?
https://zhuanlan.zhihu.com/p/139856232
18.请你介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
19.servlet的生命周期?
20.重定向和请求转发的区别?