面试前准备

  1. 介绍做过的相关系统,特别是分布式的系统

  2. redis缓存,过期时间设置,缓存如何更新,

  3. 数据库如何分库分表?原则是什么?如何联合查询?

  4. mysql中binlog如何使用?

  5. kafka中break和topic介绍,消费者和partition的关系,消费者组与topic的关系,partition的作用

  6. kafka的流程,为什么使用消息中间件?

  7. 为什么使用es?优点是什么

  8. 序列化和反序列化的工具,原理及比较

  9. dubbo的流程说明,服务提供与消费者的整套流程

  10. 多数据库如何处理?

  11. 多源数据库如何取topN的数据?

二面

  1. 面向对象三大特性

  2. 线程池-corepoolsize到达后如何增大到maxpoolsize

核心方法:addWorker

  • 首先ctl是一个原子量,同时它里面包含了两个field,一个是workerCount,另一个是runState
    • workerCount表示当前有效的线程数,也就是Worker的数量
    • runState表示当前线程池的状态
      首先workerCount是占据着一个atomic integer的后29位的,而状态占据了前3位
    • 所以,workerCount上限是(2^29)-1。
    • runState是整个线程池的运行生命周期,有如下取值:
      1. RUNNING:可以新加线程,同时可以处理queue中的线程。
      1. SHUTDOWN:不增加新线程,但是处理queue中的线程。
    • 3.STOP 不增加新线程,同时不处理queue中的线程。
    • 4.TIDYING 所有的线程都终止了(queue中),同时workerCount为0,那么此时进入TIDYING
    • 5.terminated()方法结束,变为TERMINATED
  1. 并发编程

  2. volatile && synchronized

  3. hashMap & ConcurrentHashMap

  4. JMM&垃圾回收

  5. 设计模式-单列

  6. 类加载过程

Class的加载、验证、准备、解析、初始化

  1. 编程实现队列

  2. 青蛙过河

-------------本文结束感谢您的阅读-------------
Dean Wang wechat