实习

根据搜索结果中的高频考点和面试经验,以下是针对Java后端技术岗的一周速通八股文复习计划,涵盖核心知识点和复习重点,按优先级排序并整合多篇资料内容:


✅⚠️❌

一、复习策略

  1. 优先级原则:聚焦高频核心知识点(85%以上的面试题集中在此),忽略冷门细节。
  2. 理解为主,背诵为辅:重点理解底层原理(如JVM、并发机制),适当记忆固定答案(如集合类区别)。
  3. 结合项目:每个知识点准备1-2个实际项目中的应用案例(如Redis缓存优化、线程池配置)。

二、核心八股文与复习重点

1. Java基础(必考,占30%)

  • 面向对象
  • String
  • 集合类
  • 异常处理
  • 反射与代理

2. 并发编程(必考,占25%)

  • 线程基础
  • 锁机制
  • 线程池
  • JUC工具类

可重入锁ReentrantLock, 严格串行化执行

import java.util.concurrent.locks.ReentrantLock;

public class LockInventory {
    private int stock = 1000;
    private final ReentrantLock lock = new ReentrantLock();

    public void deduct() {
        lock.lock(); // 加锁
        try {
            if (stock > 0) {
                Thread.sleep(10); // 模拟业务逻辑耗时
                stock--;
                System.out.println(Thread.currentThread().getName() + " 扣减成功,剩余库存: " + stock);
            } else {
                System.out.println("库存不足!");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock(); // 释放锁
        }
    }

    public static void main(String[] args) throws InterruptedException {
        LockInventory inventory = new LockInventory();
        for (int i = 0; i < 1200; i++) {
            new Thread(inventory::deduct).start();
        }
        Thread.sleep(2000);
        System.out.println("最终库存: " + inventory.stock); // 正确结果为 0 或 无负数
    }
}

并发容器 AtomicInteger, CAS 原子

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicInventory {
    private final AtomicInteger stock = new AtomicInteger(1000);

    public void deduct() {
        while (true) {
            int current = stock.get();
            if (current <= 0) {
                System.out.println("库存不足!");
                return;
            }
            int next = current - 1;
            // CAS 原子更新:只有当前值与内存值一致时才更新
            if (stock.compareAndSet(current, next)) {
                try {
                    Thread.sleep(10); // 模拟业务逻辑耗时
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + " 扣减成功,剩余库存: " + next);
                return;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        AtomicInventory inventory = new AtomicInventory();
        for (int i = 0; i < 1200; i++) {
            new Thread(inventory::deduct).start();
        }
        Thread.sleep(2000);
        System.out.println("最终库存: " + inventory.stock.get()); // 正确结果为 0
    }
}

信号量机制


3. JVM(必考,占20%)

  • 内存模型
  • 垃圾回收
  • 类加载机制

    SPl(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySOL和PostareSOL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦,

SPI 场景中的矛盾

  • 以 JDBC 的 DriverManager 加载 MySQL 驱动为例:

  • 核心接口:java.sql.Driver 由 Bootstrap ClassLoader 加载 (属于核心库)

  • 实现类:com.mysql.cj.jdbc.Driver 位于应用 ClassPath,应由 AppClassLoader 加载。

问题:Bootstrap ClassLoader(父)无法直接访问 AppClassLoader(子)加载的类。

按照双亲委派规则,Bootstrap 无法加载 AppClassLoader 的类,导致核心库无法发现第三方实现。

           Bootstrap ClassLoader(加载核心库)
                 ↑ 委托?
                 │
         ExtClassLoader(加载扩展库)
                 ↑ 委托?
                 │
         AppClassLoader(加载 ClassPath)
                 ↑
线程上下文类加载器TCCL 直接使用 ← DriverManager(由 Bootstrap 加载)

4. 数据库与缓存(必考,占15%)

  • MySQL
  • Redis

5. 框架与中间件(高频,占10%)

  • Spring
  • Spring Boot
      • @ComponentScan
        作用:启用组件扫描,自动发现并注册 Spring 组件(如 @Component, @Service, @Controller 等)。
      • @EnableAutoConfiguration
        通过 @Import(AutoConfigurationImportSelector.class) 导入自动配置逻辑。关键代码:AutoConfigurationImportSelector 会读取 META-INF/spring.factories 文件,找到所有配置的 EnableAutoConfiguration 类。
  • 消息队列
  • 分布式

三、复习计划

  1. Day 1-2:Java基础 + 集合类 + 异常处理(重点:HashMap、多态、String)。
  2. Day 3:并发编程(线程池、锁机制、JUC工具类)。
  3. Day 4:JVM(内存模型、GC算法、类加载)。
  4. Day 5:MySQL索引与事务 + Redis核心机制。
  5. Day 6:Spring框架原理 + 分布式基础。
  6. Day 7:模拟面试 + 查漏补缺(重点刷高频题,如中的题目)。

四、注意事项

  • 模拟面试:使用牛客网或面经题库自测,重点关注回答的逻辑性。

以上内容整合自多个高价值面经和八股文资料,完整版可参考CSDN博客牛客网面经。建议结合个人项目经验调整复习重点,优先攻克高频考点!

posted @ 2025-02-24 13:53  9k  阅读(90)  评论(0)    收藏  举报