面试题整理(二)

Java基础

  1. 创建线程的方式有哪些?
    (1) 继承Thread类创建线程类
    (2) 通过Runnable接口创建线程类
    (3) 通过Callable和Future创建线程
    (4) 使用线程池例如用Executor框架

  2. Callable和Runnable有什么区别?
    runnable和callable都可以用来编写多线程程序,两者的区别在于:
    (1)实现了runnable接口后无法返回结果信息,实现了callable接口后有返回值。
    (2)实现了runnable接口异常无法通过throws抛出异常,实现了callable接口后可以直接抛出Exception异常

  3. 简要描述线程池的基本原理,并介绍常见的阻塞队列
    Java 线程池的实现原理其实就是一个线程集合 workerSet 和一个阻塞队列 workQueue。
    当用户向线程池提交一个任务(也就是线程)时, 线程池会先将任务放入 workQueue 中。
    workerSet 中的线程会不断的从 workQueue 中获取线程然后执行。 当 workQueue 中没有任务的时候, worker 就会阻塞, 直到队列中有任务了就取出来继续执行。

  4. 简要描述线程池实现原理
    Java 线程池的实现原理其实就是一个线程集合 workerSet 和一个阻塞队列 workQueue。
    当用户向线程池提交一个任务(也就是线程)时, 线程池会先将任务放入 workQueue 中。
    workerSet 中的线程会不断的从 workQueue 中获取线程然后执行。 当 workQueue 中没有
    任务的时候, worker 就会阻塞, 直到队列中有任务了就取出来继续执行。

  5. volatile关键字有什么用处?
    被其修饰的变量所具有的特性
    (1) 保证该变量对所有线程的可见性;
    (2) 禁止指令重排序优化。

  6. Java内存中的哪些区域会发生OOM?
    除了程序计数器,其他区域都有可能发生 OOM, 简单总结如下:
    堆内存不足是最常见的 OOM 原因之一,抛出错误信息 java.lang.OutOfMemoryError:Java heap space,原因也不尽相同,可能是内存泄漏,也有可能是堆的大小设置不合理。
    对于虚拟机栈和本地方法栈,导致 OOM 一般为对方法自身不断的递归调用,且没有结束点,导致不断的压栈操作。类似这种情况,JVM 实际会抛出 StackOverFlowError , 但是如果 JVM 试图去拓展栈空间的时候,就会抛出 OOM.
    对于老版的 JDK, 因为永久代大小是有限的,并且 JVM 对老年代的内存回收非常不积极,所以当我们添加新的对象,老年代发生 OOM 的情况也非常常见。
    随着元数据区的引入,方法区内存已经不再那么窘迫,所以相应的 OOM 有所改观,出现 OOM,异常信息则变成了:“java.lang.OutOfMemoryError: Metaspace”。

  7. 常见垃圾回收算法有哪些?
    (1) 标记-清除算法
    (2) 复制算法
    (3) 标记-整理算法
    (4) 分代收集算法

  8. 哪些对象可以作为GC Root?

  9. 常见垃圾回收器有哪些?

  10. 如何避免ThreadLocal产生内存泄漏?

Java 集合

  1. 简要描述HashMap存入K:V的过程

  2. LinkedHashMap是如何实现有序性的?

  3. 简要描述ArrayList扩容机制与过程

常用框架

  1. 简要描述Spring Bean生命周期

  2. Spring中用到了哪些设计模式?

  3. 简要描述AOP实现原理

MySQL数据库

  1. 简要描述SQL语句执行过程

  2. 简要描述WAL机制及其实现原理

  3. 简要描述MySQL事务实现原理

  4. 如果一条查询SQL优化到了极限,还有哪些方法可以提升查询速度?

Redis

  1. 简要介绍Redis的5种基础数据类型及其对应数据结构

  2. Redis为什么快?

  3. Redis在什么情况下会删除Key?是怎么删除的?

RabbitMQ

  1. RabbitMQ是如何做到消息不丢失的

  2. 简要描述RabbitMQ延迟队列实现原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值