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

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

原文地址:https://www.cnblogs.com/Alei777/p/15739505.html