随笔分类 - 面试
摘要:ThreadLocal理解及使用 多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步。 同步的措施一般是加锁,这就需要使用者对锁有一定的了解,因此可以使用ThreadLocal,当创建一
阅读全文
摘要:一直都对IO多路复用搞不清楚,写篇文章将所看到的内容记录一下,防止遗忘。 IO多路复用 IO多路复用就是使用内核机制来轮询一组文件描述符,监视这写fd是否有IO事件发生,如果有IO发生程序会被告之。 IO 多路复用的方式主要有 select、poll、epoll,这三个函数都会进行阻塞,所以可以放在
阅读全文
摘要:题目表述 把符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在下标 i(0 < i < arr.length - 1),满足 arr[0] < arr[1] < ... < arr[i - 1] < arr[i] arr[i] > arr[i + 1] > ...
阅读全文
摘要:什么是单例模式? 单例模式就是保证一个类只有一个对象的实例,实现这种功能的方式就叫单例模式。 如何实现单例模式 因为保证一个类只能有一个实例,不能多次实例化,不能允许用户new对象,所以需要将构造方法私有化,通过提供类的方法来让外部获取对象实例 单例模式主要存在两种方式实现:饿汉式和懒汉式 饿汉式
阅读全文
摘要:什么是JMM? 在了解JMM之前,先了解下为什么提出了JMM。 CPU缓存,在多核CPU的情况下,带来了可见性问题 操作系统对当前执行线程的切换,带来了原子性问题 编译器指令重排优化,带来了有序性问题。 JMM 即Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象
阅读全文
摘要:Volatile关键字 使用锁的方式可以解决共享变量内存可见性问题,但是使用锁太笨重,因为它会带来线程上下文的切换开销。对于解决内存可见性问题,Java还提供了一种弱形式的同步,就是Volatile关键字。该关键字可以确保对一个变量的更新对其他线程马上可见。当一个变量被声明为volatile时,线程
阅读全文
摘要:import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class boo
阅读全文