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
等修饰会报错),并且接口中所有方法不能有具体的实现,也就是说接口中的方法都全是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加抽象,并且一般情况下不在接口内定义变量。
区别:
- 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。
- 一个类可以实现多个接口,但最多只能实现一个抽象类。
- 接口中的实例变量默认是 final 类型,而抽象类中则不一定。
- 一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
- 接口不能用 new 实例化,但可以声明,必须引用一个实现该接口的对象。从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
Cookie与Session区别
Cookie保存在客户端,Session保存在服务器端
Session表示会话,打开浏览器,在浏览器上发送多次请求,直到关闭浏览器,表示一次完整的会话。
cookie保存在缓存中。
OSI七层模型
物理层、数据链路层、传输层、网络层、会话层、表示层、应用层
TCP/UDP IP HTTP
TCP如何保证可靠连接?
校验和、确认应答+序列号、超时重传、流量控制、拥塞控制、超时重传。
三次握手目的:为了防止已失效的连接请求报文段突然又传送到了服务端,因为产生错误。
SQL注入
#在数据库中相当于注释
username #
password #
在username后 用#就回把用户名后的语句注释掉。
-- 注释等,将恶意代码注入进输入信息