某司面试题

来源:互联网 发布:java打印乘法表 编辑:程序博客网 时间:2024/06/05 20:59

下午匆忙电话面试了一下某司,有几个问题没有回答上来,总结一下:

1、zookeeper数据同步原理

读取的时候不需要数据同步,写操作时,follower的FollowerRequestProcessor会将该操作作为LEADER.REQEST发给leader。leader发起投票,由followers进行投票,leader对投票结果进行计算决定是否通过该决议,如果通过执行该决议(事务),否则什么也不做。

2、ThreadLocal原理

ThreadLocal作用是保存线程的局部变量,例如保存每个线程自身状态等,它之所以能够与线程绑定,是因为其为每一个使用该变量的线程都提供一个变量值的副本,这样每个线程都操作的是自己的副本,其源码如下:

    public T get() {        Thread t = Thread.currentThread();//从当前线程中获取该线程保存副本的Map        ThreadLocalMap map = getMap(t);        if (map != null) {//根据当前线程,获取保存在副本中的value值            ThreadLocalMap.Entry e = map.getEntry(this);            if (e != null)                return (T)e.value;        }//返回null        return setInitialValue();    }    private T setInitialValue() {        T value = initialValue();//获取当前线程        Thread t = Thread.currentThread();//获取线程副本        ThreadLocalMap map = getMap(t);//将值保存在副本中        if (map != null)            map.set(this, value);        else            createMap(t, value);        return value;    }

3、ConcurrentHashMap原理

ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。

4、HTTP请求结构

0 0