说一说final和static
final表示常量,一旦创建不可改变
final修饰的类不可继承
final修饰的方法不能重写
final修饰的成员变量必须初始化,赋值后不能再重新赋值。(基本数据类型其值不可变,引用数据类型其引用不可变)
static表示静态或全局,可以用类名.静态属性/方法名 直接调用
static修饰的属性只会在类加载时被初始化,只会创建一次,可以重新赋值
static方法中不能用this,super,不能被重写,不能是抽象方法
static代码块只有在类加载时会执行一次
StringBuffer和StringBuilder区别
StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,锁的获取和释放会带来开销,所以性能:StringBuffer<StringBuilder
String线程安全吗
安全。String是final类不可继承,其变量char[]及相关信息都是final的,所以在内存中的值始终是固定的,可以被多个线程共享,不用担心被修改
比较对象用equals
一般会重写equals方法,比较对象中变量的值。数据库中获取到的对象和程序中的对象,他们的变量值相等,但是地址不相等,所以用集合时需要重写
equals方法和hashCode方法结果不一定相同,因为都可以被重写。常规规定:equals相等hashCode必须相等,所以重写equals也要重写hashCode。equals不相等,hashCode尽量也不相等(防止hash冲突,可以提高哈希表性能)
HashMap为什么要用数据+链表结构?
数组可以实现快速查找,链表可以实现快速插入删除(元素个数到8时转为红黑树提高查找性能)
内存泄漏是什么?写一个例子
内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放(无法垃圾回收)
静态集合引用的对象不会被释放
单例模式
数据连接、IO、Socket等连接
改变哈希值
...
死锁条件
死锁是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
http和https的区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
三次握手四次挥手,为什么?
答案参考百度安全验证