最近面试一家有直播业务的公司,明显感觉到对多线程的理解有一些要求。第一轮面试大概就面了 70 分钟左右,一轮下来口干舌燥。
下面对面试题做了下简单分类,分享给大家。
多线程
- 有什么方法可以监控线程的状态
- synchronized 的作用
- synchronized 底层是怎么实现的
- synchronized 有哪几个使用方式
- 修饰方法和修饰代码块有什么不同
- synchronized 为什么要添加对象锁,即 synchronized () 中,为什么要有这个括号里面的内容
- 说下并发包和 synchronized 的区别
- 说下 Java 内存模型是什么
- volatile 作用是什么
- volatile 底层是怎么实现的,从指令层面分析
- 为什么不用 volatile 修饰每个变量呢
- ThreadLocal 了解吗
- CountDownLatch 了解吗
- 列举有哪些线程池
- 只有一个线程的线程池有什么作用,是来搞笑的吗
- ThreadPoolExecutor 类的构造参数有哪些
- 如果程序一直在添加任务,线程池的处理过程是怎样的,结合构造参数来解释
jvm
- 有哪些 gc 算法
- 什么对象刚创建的时候直接进入老年代,非字符串对象
- 什么对象可以进入老年代
- 新生代的 s2 区有什么作用
- 什么情况下会 OOM
- 说下一个对象从创建到销毁的整个过程
redis
- 排行榜怎么设计
- 有序集合增加元素的时间复杂度是多少
- AOF 和 RDB 的区别
-
redis 有大量任务需要消费,现在有两种消费方案,有什么不同?
- 由一个开了 30 个线程的线程池不断消费
- 3 个线程不断获取 redis 任务,并将任务传给一个开了 30 个线程的线程池处理
其他
- hashtable 和 ConcurrentHashMap 有什么不同
- ConcurrentHashMap 如何保证线程安全,1.7 和 1.8 都说下
- NIO 和 BIO 的区别
- NIO 的经典实现是怎样的(这个问题我不太确定,当时有点懵)
mysql
- explain 作用
- 一般看 explain 输出信息的哪些内容
- 表有 a、b、c 字段,其他a、b独立建个索引,则下面的 sql 经过 explain 后会输出什么信息,哪些字段会走索引,哪些不会
select * from table where a = xx and b = yy order by c;
场景题
- 秒杀场景如何设计
欢迎关注微信公众号「不只Java」,后台回复「电子书」,送说不定有你想要的呢
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。