计算机基础
线程和进程的关系?
一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。
java并发多线程
为什么要用多线程
- 充分利用cpu多核优势,可以并发运行多个线程,减少了线程上下文切换的开销。
- 多线程机制可以大大提高系统整体的并发能力以及性能。
线程的生命周期和状态
线程死锁?如何避免?
synchronized原理?
volatile原理
ThreadLocal原理?可能出现的问题?
线程池?
Redis
redis的几种数据结构。
- hash。数据结构ziplist和hash表结合
- string。SDS。解决C的char*字符串的缺陷(获取长度,缓冲区溢出,节省内存,二进制安全);
- sets。hash表、ziplist
- list。ziplist,双向链表
- zset。ziplist,skiplist
- bitmap。ziplist
- bloomfilter。多个hash函数
- hyperloglog。
RDB
- bgsave命令。
- COW(copy on write) fork子进程进行快照,共享内存,父进程修改数据时复制一份内存数据段修改。
AOF
Redis 主从、哨兵、集群
ElasticSearch
es mapping优化方案
es number与keyword区别?适用场景。
设计题
设计短链服务
设计用户关注与被关注系统
设计秒杀系统
设计用户点赞系统
PREVIOUS面经