15道核心Java口试题及详细剖析(2)【高频口试考点】

打印 上一主题 下一主题

主题 1821|帖子 1821|积分 5463

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
涵盖基础概念、计划模式、多线程、JVM原理等关键范畴。

1. HashMap的工作原理及哈希辩论解决

剖析


  • 数据结构:数组+链表/红黑树(Java 8+,链表长度>8转红黑树)。
  • 哈希计算:(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)。
  • 辩论解决:拉链法(同一桶位链表存储),Java 8优化为链表和红黑树结合。
  • 扩容机制:默认容量16,负载因子0.75,扩容时容量翻倍,重新计算索引(index = (n-1) & hash)。

2. synchronized与ReentrantLock的区别

剖析


  • synchronized:JVM内置锁,主动释放,支持锁重入,不可中断,非公平锁。
  • ReentrantLock:API级别锁,需手动lock()/unlock(),支持公平锁、可中断、超时等候、条件变量。
  • 性能:高竞争场景下,ReentrantLock更优;低竞争时synchronized有JVM优化。

3. JVM内存结构及GC过程

剖析


  • 内存区域

    • :对象实例(分年轻代、老年代)。
    • 方法区​(元空间):类信息、常量池(Java 8+利用本地内存)。
    • :线程私有,存储方法调用栈帧。
    • 程序计数器:当火线程执行指令地点。

  • GC过程

    • 年轻代:Minor GC(复制算法,Survivor区)。
    • 老年代:Major GC/Full GC(标志-打扫/标志-整理)。


4. Java中的强引用、软引用、弱引用、虚引用

剖析


  • 强引用:Object obj = new Object(),不会被GC回收。
  • 软引用​(SoftReference):内存不足时回收,适合缓存。
  • 弱引用​(WeakReference):GC时立即回收,如WeakHashMap。
  • 虚引用​(PhantomReference):无法通过虚引用获取对象,用于跟踪对象被回收的状态。

5. volatile关键字的作用

剖析


  • 可见性:写操作立即革新到主内存,读操作从主内存读取。
  • 禁止指令重排序:通过内存屏障(Memory Barrier)实现。
  • 不包管原子性:如volatile int i=0; i++仍需synchronized或AtomicInteger。

6. 线程池的核心参数及工作流程

剖析


  • 参数:核心线程数、最大线程数、任务队列、拒绝计谋。
  • 流程

    • 任务数 < 核心线程数 → 新建线程执行。
    • 任务数 > 核心线程数 → 加入队列。
    • 队列满且线程数 < 最大线程数 → 新建线程。
    • 队列满且线程数 >= 最大线程数 → 触发拒绝计谋(如丢弃、抛非常等)。


7. 单例模式的线程安全实现

剖析


  • 双重查抄锁(DCL)​
    1. [/code] java
    2. [code]public class Singleton {
    3.     private volatile static Singleton instance;
    4.     public static Singleton getInstance() {
    5.         if (instance == null) {
    6.             synchronized (Singleton.class) {
    7.                 if (instance == null) {
    8.                     instance = new Singleton();
    9.                 }
    10.             }
    11.         }
    12.         return instance;
    13.     }
    14. }
    复制代码
  • 静态内部类:利用类加载机制包管线程安全。
  • 枚举单例:最简便且防反射攻击的方式。

8. Java中的非常体系

剖析


  • Throwable:全部错误和非常的父类。

    • Error:系统错误(如OutOfMemoryError),程序无法处理。
    • Exception:可处理非常。

      • RuntimeException:未查抄非常(如NullPointerException)。
      • Checked Exception:编译时查抄(如IOException),必须捕获或声明。



9. 动态署理的实现方式及应用场景

剖析


  • JDK动态署理:基于接口,利用InvocationHandler:
    1. [/code] java
    2. [code]Proxy.newProxyInstance(ClassLoader, interfaces, handler);
    复制代码
  • CGLIB署理:基于类继续,生成子类覆盖方法。
  • 应用场景:AOP(日记、事务)、RPC调用、权限控制。

10. ConcurrentHashMap的线程安全实现

剖析


  • 分段锁(Java 7)​:将数据分段,每段独立加锁。
  • CAS + synchronized(Java 8+)​

    • 插入时利用CAS包管线程安全。
    • 链表头节点用synchronized锁住,避免并发修改。


11. Java中的深拷贝与浅拷贝

剖析


  • 浅拷贝:Object.clone()默认实现,复制对象引用(原对象和拷贝对象共享引用类型字段)。
  • 深拷贝:需手动实现,通过序列化或递归复制引用对象。
    1. [/code] java
    2. [code]public class DeepCopy implements Serializable {
    3.     public DeepCopy copy() throws IOException, ClassNotFoundException {
    4.         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    5.         ObjectOutputStream oos = new ObjectOutputStream(bos);
    6.         oos.writeObject(this);
    7.         ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    8.         ObjectInputStream ois = new ObjectInputStream(bis);
    9.         return (DeepCopy) ois.readObject();
    10.     }
    11. }
    复制代码

12. Java 8的Stream API利用场景

剖析


  • 实用场景:集合数据处理(过滤、映射、排序、聚合)。
  • 示例
    1. [/code] java
    2. [code]List<String> names = users.stream()
    3.                          .filter(u -> u.getAge() > 18)
    4.                          .map(User::getName)
    5.                          .sorted()
    6.                          .collect(Collectors.toList());
    复制代码
  • 特点:链式调用、延迟执行、并行处理(parallelStream())。

13. 类加载机制及双亲委派模型

剖析


  • 类加载器

    • Bootstrap ClassLoader:加载JRE/lib核心类。
    • Extension ClassLoader:加载JRE/lib/ext扩展类。
    • Application ClassLoader:加载用户类路径(ClassPath)的类。

  • 双亲委派:类加载哀求先委派父类加载器,避免重复加载,包管核心类安全。

14. 如何避免死锁?

剖析


  • 死锁条件:互斥、哀求与保持、不可抢占、循环等候。
  • 解决方案

    • 按固定顺序获取锁(如先锁A再锁B)。
    • 利用tryLock()设置超时时间。
    • 通过JVM检测工具(如jstack)分析线程转储。


15. Spring框架中Bean的作用域

剖析


  • Singleton​(默认):单例,容器中唯一实例。
  • Prototype:每次哀求创建新实例。
  • Request:HTTP哀求生命周期内有效。
  • Session:HTTP会话生命周期内有效。
  • Global Session:Portlet应用中的全局会话作用域。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表