美文网首页
记蘑菇街面试

记蘑菇街面试

作者: 夏天吃冰棍 | 来源:发表于2019-05-25 21:27 被阅读0次

问题1.StringBuffer 和StringBuilder的区别
答:线程安全问题,StringBuffer线程安全,StringBuilder线程不安全

问题2.StringBuffer怎么实现线程安全

public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

答:通过synchronized关键字

问题3.HashMap是线程安全的么?怎么实现线程安全
答:hashMap是线程不安全的,可以同Collections工具类的synchronizedCollection

方法实现线程安全

问题4.synchronizedCollection怎么实现HashMap线程安全?
Collections定义了一个内部类SynchronizedCollection

SynchronizedCollection实现了Collection接口,通过装饰者模式

对传入的Collection子类进行包装加锁

static class SynchronizedCollectionimplements Collection, Serializable {

private static final long serialVersionUID =3053995032091335093L;

final Collectionc;// Backing Collection

    final Objectmutex;// Object on which to synchronize

    SynchronizedCollection(Collection c) {

this.c = Objects.requireNonNull(c);

mutex =this;

}

SynchronizedCollection(Collection c, Object mutex) {

this.c = Objects.requireNonNull(c);

this.mutex = Objects.requireNonNull(mutex);

}

public int size() {

synchronized (mutex) {return c.size();}

}

public boolean isEmpty() {

synchronized (mutex) {return c.isEmpty();}

}

public boolean contains(Object o) {

synchronized (mutex) {return c.contains(o);}

}

public Object[] toArray() {

synchronized (mutex) {return c.toArray();}

}

public T[] toArray(T[] a) {

synchronized (mutex) {return c.toArray(a);}

}

public Iterator iterator() {

return c.iterator();// Must be manually synched by user!

    }

public boolean add(E e) {

synchronized (mutex) {return c.add(e);}

}

public boolean remove(Object o) {

synchronized (mutex) {return c.remove(o);}

}

public boolean containsAll(Collection coll) {

synchronized (mutex) {return c.containsAll(coll);}

}

public boolean addAll(Collection coll) {

synchronized (mutex) {return c.addAll(coll);}

}

public boolean removeAll(Collection coll) {

synchronized (mutex) {return c.removeAll(coll);}

}

public boolean retainAll(Collection coll) {

synchronized (mutex) {return c.retainAll(coll);}

}

public void clear() {

synchronized (mutex) {c.clear();}

}

public String toString() {

synchronized (mutex) {return c.toString();}

}

// Override default methods in Collection

    @Override

    public void forEach(Consumer consumer) {

synchronized (mutex) {c.forEach(consumer);}

}

@Override

    public boolean removeIf(Predicate filter) {

synchronized (mutex) {return c.removeIf(filter);}

}

@Override

    public Spliterator spliterator() {

return c.spliterator();// Must be manually synched by user!

    }

@Override

    public Stream stream() {

return c.stream();// Must be manually synched by user!

    }

@Override

    public Stream parallelStream() {

return c.parallelStream();// Must be manually synched by user!

    }

private void writeObject(ObjectOutputStream s)throws IOException {

synchronized (mutex) {s.defaultWriteObject();}

}

}

相关文章

  • 蘑菇街、华为、携程面经

    昨天面试了3场,分别是蘑菇街、华为、携程,今天趁着还有点印象,整理一下面经,回馈牛友们 一.蘑菇街 蘑菇街没有走内...

  • 后台面试——蘑菇街

    时间:2017/4/24 坐标:南京视频面试 1. 简单自我介绍 2. PHP知识点,完全不会,以后再也不说自己会...

  • 蘑菇街/滴滴运营面试

    明天就要报到上班了,搁置了这么久我也能写一下自己的从充满希望到无奈绝望再到斗志满满的实习求职经历了,废话比较...

  • 从蘑菇街、网红到Buy+ 再看导购新趋势

    在上一篇文章《从依附到独立 谈谈美丽说和蘑菇街的变形记》中,小初已经大致谈了美丽说和蘑菇街的转型与发展。那样的导购...

  • 实习_蘑菇街_后端开发

    一面(电话面试) 距离蘑菇街的简历投递大概一个月后,我以为简历被刷了,突然有一天接到蘑菇街的电面,聊了15分钟,总...

  • 记蘑菇街面试

    问题1.StringBuffer 和StringBuilder的区别答:线程安全问题,StringBuffer线程...

  • 无标题文章

    蘑菇街

  • 蘑菇街

    俗话说得好:自己动手,丰衣足食! 继DK的白蚁说引发的蚂蚁城堡待续中⋯⋯ “蘑菇街”又开始了…… ...

  • iOS 组件化学习

    蘑菇街的方案: 蘑菇街组件化的技术方案对应的demo 上面的反驳 Casa提出了不同意见,下半部分是下面蘑菇街修改...

  • 蚂蚁、字节、滴滴面试经历总结

    前言 最近两篇面试以及离职相关的文章不容错过哦。 离开蘑菇街后,我最近的一些想法 拼多多和酷家乐面试总结 今年面试...

网友评论

      本文标题:记蘑菇街面试

      本文链接:https://www.haomeiwen.com/subject/hlxttctx.html