Java基础面试提问

1. String篇

  1. 说说String、StringBuffer和StringBuilder的区别
  2. 为什么String 不可变?
    1. final修饰的变量特点
  3. StringBuffer为什么是线程安全的?(引出多线程话题)

2. 线程安全篇

  1. 什么是线程安全?
  2. 为什么会有线程安全问题?(说说java内存模型?)
  3. 说说java 是如何保证线程安全的?
  4. 谈谈Synchronized和ReentrantLock的区别?
  5. Synchronized和ReentrantLock都是悲观锁,那什么是乐观锁,如何实现的呢
  6. 你有使用过volatile 关键字吗?他能保证线程安全吗?

3. 多线程篇

  1. 为什么要使用多线程?
  2. 你在使用多线程中有没有遇到什么问题?
  3. 多线程导致的内存泄漏你是怎么解决的?
  4. 什么是上下文切换?为什么需要上下文切换?
  5. 什么是死锁?如何解除死锁?
  6. 线程之间是如何进行线程通信的?
  7. 我们为什么不能直接调用run()方法?

4. 线程池篇

  1. 你是如何管理这些线程的?为什么要使用线程池呢?
  2. 线程池的execute() 和submit() 的区别是什么?
  3. 你是怎么创建这些线程池的?
  4. 为什么不建议使用Executors?
  5. 线程池从启动到工作的流程?
  6. 如何合理的配置一个线程池的大小?

5. 异常处理篇

  1. 说说java异常处理类的整体架构
  2. try语句和finally语句都有return的情况如何返回?
  3. finally一定都会执行吗?有没有特例?

6. 容器篇

  1. 说说ArrayList 的底层数据结构?
  2. ArrayList的扩容机制
  3. HashMap的底层实现
  4. 假如我们需要存500个数需要多大的HashMap?
  5. HashMap的哈希表长度为什么是2的幂次方
  6. HashSet是如何检查重复的?

results matching ""

    No results matching ""