面试八股文

 

计算机基础

线程和进程的关系?

一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。

java并发多线程

为什么要用多线程

  • 充分利用cpu多核优势,可以并发运行多个线程,减少了线程上下文切换的开销。
  • 多线程机制可以大大提高系统整体的并发能力以及性能。

    线程的生命周期和状态

线程死锁?如何避免?

synchronized原理?

volatile原理

ThreadLocal原理?可能出现的问题?

线程池?

Redis

redis的几种数据结构。

  1. hash。数据结构ziplist和hash表结合
  2. string。SDS。解决C的char*字符串的缺陷(获取长度,缓冲区溢出,节省内存,二进制安全);
  3. sets。hash表、ziplist
  4. list。ziplist,双向链表
  5. zset。ziplist,skiplist
  6. bitmap。ziplist
  7. bloomfilter。多个hash函数
  8. hyperloglog。

RDB

  1. bgsave命令。
  2. COW(copy on write) fork子进程进行快照,共享内存,父进程修改数据时复制一份内存数据段修改。

AOF

Redis 主从、哨兵、集群

ElasticSearch

es mapping优化方案

es number与keyword区别?适用场景。

设计题

设计短链服务

设计用户关注与被关注系统

设计秒杀系统

设计用户点赞系统