zoukankan      html  css  js  c++  java
  • Java面经

    1、String,StringBuffer,StringBuilder的区别?为什么String要设计成不可变?

    (1)速度比较:String < StringBuffer < StringBuilder

      (2) String处理速度比StringBuffer、StringBuilder慢得多

    为什么?

    答:

    1、String不可变对象

    2、StringBuffer可变对象

    3、StringBuilder可变对象

    String本身就是一个对象,因为String不可变对象,所以,每次遍历对字符串做拼接操作,都会重新创建一个对象,非常消耗内存空间,而且创建对象本身就是一个耗时操作。

    StringBuffer和StringBuilder只需要创建一个StringBuffer或StringBuilder对象,然后用append拼接字符串,无论多少次,都是只对一个对象进行操作。

    是否可以抛弃String只用StringBuffer和StringBuilder呢?

    不能。

    针对数据量少的情况,String遍历:一开始定义一个String常量,再开始遍历。

    StringBuffer:一开始定义一个String常量和创建一个StringBuffer对象,再开始遍历。

    StringBuilder:一开始定义一个String常量和创建一个StringBuilder对象,再开始遍历。

    数据量小的情况,更建议使用String。

    安全性:

    StringBuffer是线程安全的。(基本都用的synchronized)

    StringBuffer是非线程安全的,速度更快。

    使用场景:

    操作少量数据用String

    单线程操作字符串 下操作大量数据StringBuilder。

    多线程操作字符串 下操作大量数据StringBuffer。

    HashMap和HashTable的区别

    hashmap是hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于Hashmap允许空键值对,由于非线程安全,在只有一个线程访问的情况下,效率高于HashTable。

    hashmap允许将null作为一个entry的key或者value,而hashtable不允许。

    主要区别:

    1、hashmap不是线程安全的,hashtable是线程安全的。

    2、继承不同,hashmap继承的是AbstractMap,而HashTable继承的是Dictionary类;

    3、hashmap可以存空键值对,table不行

    4、哈希值使用不同,hashtable值是直接使用对象的hashcode方法,而hashmap需要重新计算对象的hashcode

    5、hashtable和hashmap都使用了iterator,但历史原因hashtable还使用了Enumeration的方式。

    效率map高于table。安全性table更高。

    解决哈希冲突方法:

    开放地址法、再哈希法、拉链法、

    抽象类与接口的区别

    1、抽象类含有抽象方法,则这个类是抽象类,抽象类必须用abstract关键字修饰。因为抽象类中含无具体实现的方法,所以不能用抽象类创建对象。

    抽象类方法是一种特殊的方法,只有声明,没有具体的实现。如果一个类继续抽象类,那么就必须为基类中的抽象方法提供定义。

    抽象类与普通类的区别:

    1、抽象方法必须为public和protected,否则子类无法继承,子类无法实现抽象方法。

    2、抽象类不能用来创建对象

    3、如果一个类继承与一个抽象类,则子类必须实现父类的所有方法,如果子类没有实现父类的方法则必须将子类也定义abstract类。

    接口:

    可以含有变量和方法。但接口中的变量会被隐式的指定为public static final变量,用private修饰会报错),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字private、protected、static、final等修饰会报错),并且接口中所有方法不能有具体的实现,也就是说接口中的方法都全是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加抽象,并且一般情况下不在接口内定义变量。

    区别:

    1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。
    2. 一个类可以实现多个接口,但最多只能实现一个抽象类。
    3. 接口中的实例变量默认是 final 类型,而抽象类中则不一定。
    4. 一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
    5. 接口不能用 new 实例化,但可以声明,必须引用一个实现该接口的对象。从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

    Cookie与Session区别

    Cookie保存在客户端,Session保存在服务器端

    Session表示会话,打开浏览器,在浏览器上发送多次请求,直到关闭浏览器,表示一次完整的会话。

    cookie保存在缓存中。

    OSI七层模型

    物理层、数据链路层、传输层、网络层、会话层、表示层、应用层

                                      TCP/UDP    IP                                      HTTP

    TCP如何保证可靠连接?

    校验和、确认应答+序列号、超时重传、流量控制、拥塞控制、超时重传。

    三次握手目的:为了防止已失效的连接请求报文段突然又传送到了服务端,因为产生错误。

    SQL注入

    #在数据库中相当于注释 

    username #

    password #

    在username后 用#就回把用户名后的语句注释掉。

    -- 注释等,将恶意代码注入进输入信息

  • 相关阅读:
    20165334 实验一 Java开发环境的熟悉
    20165334 《java程序设计》第5周学习总结
    20165334《java程序设计》第4周学习总结
    20165334《java程序设计》第三周学习总结
    20165334 预备作业3 Linux及学习
    20165334 学习基础与c语言学习心得
    20165228 实验一 Java开发环境的熟悉
    20165228 2017-2018-2 《Java程序设计》第5周学习总结
    20165228 2017-2018-2 《Java程序设计》第4周学习总结
    20165228 2017-2018-2 《Java程序设计》第3周学习总结
  • 原文地址:https://www.cnblogs.com/Alei777/p/15739505.html
Copyright © 2011-2022 走看看