牛客腾讯云几个问题


ArrayList是线程安全的吗?

不是。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    // transient是防止序列化,因为它自己实现了writeObject序列化方法,这个数组里有空元素。
    transient Object[] elementData; 

    /**
     * 列表大小,elementData中存储的元素个数
     */
    private int size;
}

怎么搞成线程安全的?

  • 直接会修改元素的方法加synchronized
  • 或者使用Vector,stack线程安全的类。

Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。

多态

同一个行为具有多个不同的表现形式。

一个接口,使用不同的实例而执行不同的操作。

接口和抽象类

  • JDK8之后,都可以有静态方法、默认方法。
  • 接口的成员变量,public static final
  • 继承只能有一个

操作系统是怎么调用进程

线程,进程,协程之间什么区别

进程:资源分配的基本单位,每个进程有自己独立的内存空间。

线程:它是进程里面的一个实体,是CPU调度的基本单位,一个进程可以有多个线程,并且同一个进程里面的多个线程共享一个内存空间,也就是它在切换的时候,CPU TLB(地址转换旁路缓冲器)里面的缓存不会失效。拿到一个虚拟页之后,会查找TLB找对应的物理地址,这个是通过硬件查找映射的,速度很快,如果查找不到就需要根据页目录来查找了,这个就需要经过内存,而CPU缓存和内存之间的差距是成好几个数量级的。

image-20220227210836890

协程:它是用户态的轻量级线程,协程调度由用户控制,一个线程可以有多个协程。它没有内核切换的开销。

内存16g,假设qq号长度为2的32次方,怎么设计返回在线状态的接口。

qq号都是数字,可以通过位图读取。

位图、计算大小,输入文件,结合位图。