面试题总结

  1. java八大基本数据类型?
    四个整数型( byte,short int,long)
    两个浮点型(float double)
    一个布尔型(boolean)
    一个char
  2. switch支持的数据类型?
    byte,short,int,char,枚举(JDK1.5),String(JDK1.8)
  3. 数组有没有length方法?
    数组没有length方法,直有length属性,字符串有length()方法,集合有size()方法
  4. 重写和重载的区别
    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
    (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
    (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
    (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
  5. 面向对象的核心?
    (1)继承:子类继承,子类拥有父类的所有特征,并且子类还可以扩展
    (2)封装:将程序的具体实现细节隐藏起来,对外只提供一个接口
    (3)多态:同一种事物的多种形态
    (4)抽象:抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象。
  6. equals和==的区别?
    ==是数值上的比较,适用于基本数据类型;equals是两个对象地址的比较,时常通过重写equals方法比较对象的某一属性相等时就说明对象相等。
    重写equals方法的时候也必须重写hashcode方法。
  7. string,stringBuffer,stringBuilder的区别?
    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间;
    StringBuffer是长度可变的,和线程安全的字符串操作类,多用于多线程操作字符串;
    StringBuilder是长度可变的,速度快,是线程不安全的字符串操作类,多用于单线程操作字符串;
  8. static修饰的方法,属性,代码有什么特点?
    静态方法不需要实例化,可以直接通过类名打点访问
    静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
    静态方法中不能使用this 、super关键字
    静态方法不能被非静态方法覆盖,静态方法不能修饰构造器;
    静态属性对所有对象共享(全局变量)在类被载入时创建,只要类存在,static变量就存在;
    静态代码块当类被加载的时候就执行,且只被执行一次,常用于类属性的初始化;
  9. 抽象类和接口的区别?
    (1).抽象类可以有构造方法,接口中不能有构造方法。
    (2).抽象类中可以有普通成员变量,接口中没有普通成员变量
    (3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
    (4). 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
    (5). 抽象类中可以包含静态方法,接口中不能包含静态方法(JDK1.8允许存在静态方法和默认被实现的方法)
    (6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型(常量),并且默认即为public static final类型。
    (7). 一个类可以实现多个接口,但只能继承一个抽象类。接口可以继承多个接口。
  10. 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中改变后的该属性的值。
  11. final,finally,finalize的区别?
    final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
    finally是异常处理语句结构的一部分,fiannly中的代码块表示无论是否出现异常都会执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
  12. Collection,Collections,Connection的区别?
    Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
    Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
    Connection是一个接口,是高度抽象的集合。它包含了集合的基本操作:对集合元素的增、删、改、查、判断是否为空,获取大小、遍历等操作;
  13. Hashset,Treeset,LinkedHashset的区别?
    Hashset是无序的,不允许重复,允许有一个null值的集合;
    Treeset排序是按照自然顺序排序,不允许重复,只能存储同一数据类型的对象,实现原理基于二叉树的红黑树;
    LinkedHashset 是按照添加顺序进行排序的,可添加多种数据类型,不允许重复;
  14. 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());
    }    
  15. 三种线程创建方式的区别?
    (1).继承Thread:简单方便,但影响扩展性(一旦继承了Thread类,则无法在继续继承其他类,使用比较局限)
    (2).实现runnable接口:扩展性较强(类可以实现当前接口,还可以实现其他的接口),使用相对于Thread类稍显复杂
    (创建完Runnable接口的对象之后,最终还是要依赖Thread类去创建和启动线程)
    (3)实现callable接口:方法允许有任意类型的返回值,方法可以抛出异常,适合做一些分布式运算,使用比较复杂(需要依赖FutureTask类完成Runnable对象的创建,然后还需要Thread类来启动线程)
  16. TCP和UDP协议的区别?
    TCP就像打电话,需要传输双方构成连接才能传输数据,数据传输较为稳定,并且有序,先发送的一定先接收,效率不如UDP协议,对网络的要求高于UDP;
    UDP协议就像发快递,传输双方无需建立连接,传送方只需要知道接收方的某些信息即可传输数据,效率高,但稳定性较低,并且数据是无序的。
  17. 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.重定向和请求转发的区别?

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 20:03
已编辑
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务