小米一面

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为之服务。

猜你喜欢

转载自blog.csdn.net/wuyifan1115/article/details/83055738