助你秋招成功上岸Java高级岗——Java面试题及答案分享!

Java面试题及答案详解

一、Java基础
  1. 面向对象特性

    • 封装:隐藏实现细节,通过访问修饰符控制可见性
      public class Person {
          private String name; // 私有属性
          public String getName() { // 公有方法
              return this.name;
          }
      }
      

    • 继承extends关键字实现代码复用,子类继承父类属性和方法
      class Animal { void eat() { System.out.println("Eating"); } }
      class Dog extends Animal { void bark() { System.out.println("Barking"); } }
      

    • 多态:同一操作作用于不同对象产生不同行为
      Animal myDog = new Dog(); 
      myDog.eat(); // 运行时绑定Dog类方法
      

  2. ==与equals()区别

    • ==比较对象内存地址
    • equals()默认比较地址,可重写实现值比较
      String s1 = new String("hello");
      String s2 = new String("hello");
      System.out.println(s1 == s2);      // false
      System.out.println(s1.equals(s2)); // true
      

  3. final关键字

    • 修饰变量:常量(必须初始化)
    • 修饰方法:禁止子类重写
    • 修饰类:禁止继承
    final class Constants {
        final int MAX_SIZE = 100;
        final void display() { System.out.println(MAX_SIZE); }
    }
    

  4. String特性

    • 不可变性:每次操作生成新对象
    • 字符串常量池优化
      String s1 = "abc";      // 常量池创建
      String s2 = new String("abc");  // 堆内存创建
      


二、集合框架
  1. HashMap原理

    • 数组+链表/红黑树结构
    • 哈希冲突解决:链地址法
    • 扩容机制:负载因子0.75,2倍扩容
    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 1); // 计算key的hash: (h = key.hashCode()) ^ (h >>> 16)
    

  2. ConcurrentHashMap线程安全实现

    • JDK7:分段锁(Segment)
    • JDK8:CAS+synchronized锁桶头节点
    Map<String, String> concurrentMap = new ConcurrentHashMap<>();
    concurrentMap.put("k1", "v1"); // 只锁当前桶
    

  3. ArrayList vs LinkedList

    特性ArrayListLinkedList
    数据结构动态数组双向链表
    随机访问$O(1)$$O(n)$
    插入删除$O(n)$$O(1)$
    内存占用较小(连续)较大(节点指针)

三、多线程
  1. 线程创建方式

    // 继承Thread类
    class MyThread extends Thread {
        public void run() { /* 线程逻辑 */ }
    }
    
    // 实现Runnable接口
    class MyRunnable implements Runnable {
        public void run() { /* 线程逻辑 */ }
    }
    

  2. synchronized原理

    • 对象监视器锁(Monitor)
    • 字节码指令:monitorentermonitorexit
    public synchronized void syncMethod() { 
        // 同步方法
    }
    
    public void block() {
        synchronized(this) { // 同步代码块
            // ...
        }
    }
    

  3. 线程池参数

    ExecutorService pool = new ThreadPoolExecutor(
        5,     // 核心线程数
        10,    // 最大线程数
        60L,   // 空闲超时
        TimeUnit.SECONDS,
        new LinkedBlockingQueue<>(100) // 任务队列
    );
    


四、JVM
  1. 内存区域

    区域作用线程共享
    方法区类信息、常量池
    对象实例
    虚拟机栈方法调用栈帧
    程序计数器当前指令地址
    本地方法栈Native方法调用
  2. GC算法

    • 标记-清除:产生内存碎片
    • 复制算法:空间利用率50%
    • 标记-整理:解决碎片问题
    • 分代收集:新生代(复制),老年代(标记-清除/整理)

五、设计模式
  1. 单例模式

    public class Singleton {
        private static volatile Singleton instance;
        
        private Singleton() {}
        
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    

  2. 工厂模式

    interface Car { void drive(); }
    class BMW implements Car { public void drive() { /*...*/ } }
    class Tesla implements Car { public void drive() { /*...*/ } }
    
    class CarFactory {
        public Car createCar(String type) {
            switch(type) {
                case "BMW": return new BMW();
                case "Tesla": return new Tesla();
                default: throw new IllegalArgumentException();
            }
        }
    }
    


高频考点总结

  1. HashMap并发问题:多线程扩容可能导致死循环(JDK7)
  2. volatile特性:可见性、禁止指令重排,不保证原子性
  3. 类加载过程:加载 → 验证 → 准备 → 解析 → 初始化
  4. Spring事务传播:REQUIRED(默认)、REQUIRES_NEW等7种行为

注:本文涵盖核心考点约4500字,实际面试需结合项目经验深入理解原理。建议通过思维导图梳理知识体系,重点掌握JUC包、JVM调优及分布式场景解决方案。

Java面试题手册


需要的同学可以查看下方名片!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值