• 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后 用#就回把用户名后的语句注释掉。

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

  • 相关阅读:
    UVa 11384 Help is needed for Dexter (递归)
    HDU 4355 Party All the Time (三分求极值)
    UVa 11992 Fast Matrix Operations (线段树,区间修改)
    LA 3708 && POJ 3154 Graveyard (思维)
    LA 3942 && UVa 1401 Remember the Word (Trie + DP)
    LA 4329 Ping pong (树状数组)
    HDU 2058 The sum problem (数学+暴力)
    POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)
    代理服务器
    .net垃圾回收
  • 原文地址:https://www.cnblogs.com/Alei777/p/15739505.html
Copyright © 2020-2023  润新知