1 hashmap和hashtable区别
hashmap继承于abstractmap,默认容量16,扩容2n,位置用位运算,键和值都可以为null,线程不安全,计算hash值多了异或。
hashtable继承于dictionary,默认容量11,扩容2n+1,位置用除法,键和值都不能为null,用containsKey方法判断键是否存在,线程安全,hash值直接使用hashcode。
2 acid和四种隔离级别
原子性:一个事务必须被视为一个不可分割的最小工作单元。
一致性:数据库总从一个一致性状态转换到另一个一致性状态。
隔离性:通常来说,一个事务所作的修改在最终提交之前,对其他事务是不可见的。
持久性:一旦事务提交,则其所做的修改就会永久的保存到数据库中。
未提交读:事务中的修改,即使没有提交,对其他事务也是可见的。会产生脏读。
提交读:一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。
可重复读:同一个事务中多次读取同样记录的结果是一致的。幻读:当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再读取该范围内的记录时,会产生幻行。
可串行化:强制事务串行执行。
3 创建对象的方法
new、Class的newInstance方法、Constructor的newInstance方法、clone、反序列化。
4 tcp三次握手
TCP服务器创建传输控制块TCB,服务器进入listen状态
TCP客户端创建传输控制块TCB,向服务器发送请求,报文首部中SYN=1,同时选择一个初始序列号seq=x,此时客户端进入SYN-SENT状态,SYN报文段不携带数据,但会消耗一个序号。
TCP服务器收到请求报文后,发出确认报文,报文中ACK=1、SYN=1、ack=x+1、seq=y,服务器进入SYN-RCVD状态。报文不携带数据,消耗一个序号。
TCP客户端受到报文后,给服务器发送确认报文。报文ACK=1、seq=x+1、ack=y+1,客户端进入ESTABLISHED状态。报文可以携带数据,如果不携带数据不消耗序号。
服务器受到报文后,进入ESTABLISHED状态。
5 http
请求报文由请求方法、请求uri、协议版本、可选的请求首部字段和内容实体构成。
响应报文由协议版本、状态码、原因短语、可选的响应首部字段以及实体主体构成。
http是无状态协议,不对请求和响应之间的通信状态进行保存。
状态码 200 ok 正常处理成功 204 no content 无资源返回 206 范围请求返回
301 moved permanently 永久性重定向 302 found 临时性重定向 303 表示应该用get方法获取请求的资源
304 not modified 请求中包含if-match,if-modified-since,if-none-match,if-range,if-unmodified-since,返回时不包含任何响应的主体部分
307 不会从post变成get,和302功能一样
400 bad request 请求报文中存在语法错误
401 unauthorized 请求需要http认证
403 forbidden 请求被拒绝 404 not found
500 internal server error web应用存在bug 503 service unavailable 服务器超负载和停机维护
通用首部
请求首部
响应首部
实体首部
6 https
用ssl(安全套接层)组合使用的HTTP被称为HTTPS。加密、证书、完整性保护。
服务器向证书机构发送自己公开密钥,证书机构用自己的私有密钥给服务器公开密钥数字签名并颁发证书,证书中包括服务器公开密钥和数字签名,服务器将证书发给客户端,客户端的浏览器中存放有证书机构的公开密钥,客户端用证书机构的公开密钥验证证书,以确认服务器的公开密钥的真实性。客户端用服务器的公开密钥与服务器通讯,然后用对称密钥进行通讯。
7 tcp和udp区别
tcp是面向连接的,udp是无连接的。
通过tcp传送的数据无差错、不丢失、不重复、且按序到达,确认重传窗口拥塞控制。udp尽最大努力交付。
tcp面向字节流,udp是面向报文的。
udp没有拥塞控制,因此网络出现拥塞不会使源主机发送速率降低。
tcp连接只能是点到点的,udp支持多对多的交互通信。
tcp首部开销20字节,udp8字节。
tcp逻辑通信信道是全双工的可信信道,udp是不可信信道。
8 innodb和myisam区别
innodb支持事务和行级锁,崩溃后的安全恢复。聚簇索引。热备份。支持外键。数据和索引存储在表空间。
myisam提供了全文索引、压缩、空间函数。支持表级锁,保存了行数。支持修复操作。延迟更新索引键。减少io。非聚簇索引。不支持外键。frm文件存储表定义,数据文件myd,索引文件myi。
9 查找算法
二分查找
public static int rank(int a[],int key,int lo,int hi){
if(hi<lo) return lo;
int mid=lo+(hi-lo)/2;
int cmp=key<a[mid]?-1:(key==a[mid]?0:1);
if(cmp<0){
return rank(a,key,0,mid-1);
}else if(cmp>0){
return rank(a,key,mid+1,hi);
}else{
return mid;
}
}
public static int rank(int a[],int key){
int lo=0,hi=a.length-1;
while(lo<=hi){
int mid=lo+(hi-lo)/2;
int cmp=key<a[mid]?-1:(key==a[mid]?0:1);
if(cmp<0){
hi=mid-1;
}else if(cmp>0){
lo=mid+1;
}else{
return mid;
}
}
return lo;
}
二叉查找树:
class BTS<Key extends Comparable<Key>,Value>{
private Node root;
private class Node{
private Key key;
private Value value;
private Node left,right;
private int N;
public Node(Key key, Value value, int n) {
this.key = key;
this.value = value;
N = n;
}
}
public int size(){
return size(root);
}
private int size(Node node){
if(node==null) return 0;
else return node.N;
}
public Value get(Key key){
return get(root,key);
}
private Value get(Node x,Key key){
if(x==null) return null;
int cmp=key.compareTo(x.key);
if(cmp<0)return get(x.left,key);
else if(cmp>0) return get(x.right,key);
else return x.value;
}
public void put(Key key,Value value){
root= put(root,key,value);
}
public Node put(Node x,Key key,Value value){
if(x==null) return new Node(key,value,1);
int cmp=key.compareTo(x.key);
if(cmp<0) x.left=put(root.left,key,value);
else if(cmp>0) x.right= put(root.right,key,value);
else x.value=value;
x.N=size(x.left)+size(x.right)+1;
return x;
}
}
hash查找:hashmap
10 session原理
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。