JAVA进阶知识大全(终)

简介: 教程来源 https://app-abdss1rim1oh.appmiaoda.com 系统讲解Java进阶核心:JDBC高级特性(连接池、批处理、事务、存储过程)、Spring IoC/AOP原理(依赖注入、条件化Bean、切面编程),以及JVM调优与代码级性能优化技巧,助力开发者深入理解底层机制并提升系统性能。

四、数据库访问与ORM
4.1 JDBC深入

import java.sql.*;
import javax.sql.*;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

/**
 * JDBC高级特性
 * - 连接池
 * - 批处理
 * - 事务管理
 * - 存储过程调用
 */
public class JDBCAdvanced {

    // 使用HikariCP连接池
    public static class ConnectionPool {
        private static HikariDataSource dataSource;

        static {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
            config.setUsername("root");
            config.setPassword("password");
            config.setMaximumPoolSize(10);
            config.setMinimumIdle(5);
            config.setConnectionTimeout(30000);
            config.setIdleTimeout(600000);
            config.setMaxLifetime(1800000);

            dataSource = new HikariDataSource(config);
        }

        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();
        }

        public static void close() {
            if (dataSource != null) {
                dataSource.close();
            }
        }
    }

    // 批处理示例
    public static void batchProcessing() throws SQLException {
        String sql = "INSERT INTO users (name, age) VALUES (?, ?)";

        try (Connection conn = ConnectionPool.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            // 关闭自动提交
            conn.setAutoCommit(false);

            for (int i = 0; i < 1000; i++) {
                pstmt.setString(1, "User" + i);
                pstmt.setInt(2, 20 + (i % 50));
                pstmt.addBatch();

                // 每100条执行一次
                if (i % 100 == 0) {
                    pstmt.executeBatch();
                }
            }

            pstmt.executeBatch();  // 执行剩余
            conn.commit();  // 提交事务

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 事务传播与隔离级别
    public static void transactionManagement() throws SQLException {
        Connection conn = ConnectionPool.getConnection();

        try {
            // 设置隔离级别
            conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
            conn.setAutoCommit(false);

            // 业务操作1
            updateAccount(conn, "A", -100);

            // 业务操作2
            updateAccount(conn, "B", 100);

            conn.commit();  // 提交事务

        } catch (SQLException e) {
            conn.rollback();  // 回滚事务
            throw e;
        } finally {
            conn.close();
        }
    }

    private static void updateAccount(Connection conn, String account, int amount) 
            throws SQLException {
        String sql = "UPDATE accounts SET balance = balance + ? WHERE account = ?";
        try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setInt(1, amount);
            pstmt.setString(2, account);
            pstmt.executeUpdate();
        }
    }

    // 调用存储过程
    public static void callStoredProcedure() throws SQLException {
        try (Connection conn = ConnectionPool.getConnection();
             CallableStatement cstmt = conn.prepareCall("{CALL getUserInfo(?, ?)}")) {

            cstmt.setInt(1, 1001);           // 输入参数
            cstmt.registerOutParameter(2, Types.VARCHAR);  // 输出参数

            cstmt.execute();

            String userName = cstmt.getString(2);
            System.out.println("用户名:" + userName);
        }
    }

    // 元数据查询
    public static void metadataQuery() throws SQLException {
        try (Connection conn = ConnectionPool.getConnection()) {
            DatabaseMetaData metaData = conn.getMetaData();

            System.out.println("数据库产品:" + metaData.getDatabaseProductName());
            System.out.println("数据库版本:" + metaData.getDatabaseProductVersion());
            System.out.println("JDBC驱动版本:" + metaData.getDriverVersion());

            // 获取所有表
            ResultSet tables = metaData.getTables(null, null, "%", new String[]{"TABLE"});
            while (tables.next()) {
                System.out.println("表名:" + tables.getString("TABLE_NAME"));
            }

            // 获取主键信息
            ResultSet primaryKeys = metaData.getPrimaryKeys(null, null, "users");
            while (primaryKeys.next()) {
                System.out.println("主键:" + primaryKeys.getString("COLUMN_NAME"));
            }
        }
    }
}

五、Spring框架核心原理
5.1 IoC容器与依赖注入

import org.springframework.beans.factory.annotation.*;
import org.springframework.context.*;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.*;

/**
 * Spring IoC核心原理
 * - 控制反转:对象的创建和管理交给容器
 * - 依赖注入:容器自动注入依赖关系
 */
@Configuration
@ComponentScan
public class SpringCoreDemo {

    // 1. Bean定义
    @Component
    public static class UserService {
        @Autowired
        private UserRepository userRepository;

        public User findUser(Long id) {
            return userRepository.findById(id);
        }
    }

    @Repository
    public static class UserRepository {
        public User findById(Long id) {
            return new User(id, "张三");
        }
    }

    // 2. 配置类中的Bean定义
    @Configuration
    public static class AppConfig {

        @Bean
        public DataSource dataSource() {
            // 配置数据源
            return new HikariDataSource();
        }

        @Bean
        @Primary
        public UserService userService() {
            return new UserService();
        }

        @Bean
        @Scope("prototype")  // 原型作用域
        public PrototypeBean prototypeBean() {
            return new PrototypeBean();
        }
    }

    // 3. 条件化Bean注册
    @Configuration
    public static class ConditionalConfig {

        @Bean
        @Conditional(OnWindowsCondition.class)
        public WindowsService windowsService() {
            return new WindowsService();
        }

        @Bean
        @Conditional(OnMacCondition.class)
        public MacService macService() {
            return new MacService();
        }
    }

    // 自定义条件
    public static class OnWindowsCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            return System.getProperty("os.name").toLowerCase().contains("windows");
        }
    }

    public static class OnMacCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            return System.getProperty("os.name").toLowerCase().contains("mac");
        }
    }

    // 4. Bean生命周期回调
    @Component
    public static class LifecycleBean implements InitializingBean, DisposableBean {

        @PostConstruct
        public void init() {
            System.out.println("Bean初始化后执行");
        }

        @PreDestroy
        public void destroy() {
            System.out.println("Bean销毁前执行");
        }

        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("属性设置后执行");
        }

        @Override
        public void destroy() throws Exception {
            System.out.println("销毁");
        }
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = 
            new AnnotationConfigApplicationContext(SpringCoreDemo.class);

        UserService userService = context.getBean(UserService.class);
        User user = userService.findUser(1L);
        System.out.println("用户:" + user);

        context.close();
    }

    static class User {
        private Long id;
        private String name;

        public User(Long id, String name) {
            this.id = id;
            this.name = name;
        }

        @Override
        public String toString() {
            return "User{id=" + id + ", name='" + name + "'}";
        }
    }

    static class WindowsService {}
    static class MacService {}
    static class PrototypeBean {}
}

5.2 AOP面向切面编程

import org.aspectj.lang.*;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.*;
import org.springframework.context.annotation.*;

/**
 * AOP核心概念
 * - 切面(Aspect):横切关注点的模块化
 * - 连接点(JoinPoint):程序执行过程中的点
 * - 通知(Advice):切面在连接点执行的动作
 * - 切入点(Pointcut):匹配连接点的表达式
 */
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class AOPDemo {

    // 业务服务
    @Service
    public static class OrderService {

        public void createOrder(String orderId, double amount) {
            System.out.println("创建订单:" + orderId + ",金额:" + amount);

            if (amount <= 0) {
                throw new IllegalArgumentException("订单金额必须大于0");
            }
        }

        public String getOrderStatus(String orderId) {
            System.out.println("查询订单状态:" + orderId);
            return "PAID";
        }
    }

    // 日志切面
    @Aspect
    @Component
    public static class LoggingAspect {

        // 定义切入点
        @Pointcut("execution(* com.example.OrderService.*(..))")
        public void serviceMethods() {}

        // 前置通知
        @Before("serviceMethods()")
        public void logBefore(JoinPoint joinPoint) {
            System.out.println("【前置通知】开始执行:" + joinPoint.getSignature().getName());
            Object[] args = joinPoint.getArgs();
            for (int i = 0; i < args.length; i++) {
                System.out.println("  参数" + (i + 1) + ":" + args[i]);
            }
        }

        // 后置通知(无论是否异常)
        @After("serviceMethods()")
        public void logAfter(JoinPoint joinPoint) {
            System.out.println("【后置通知】执行完成:" + joinPoint.getSignature().getName());
        }

        // 返回通知
        @AfterReturning(pointcut = "serviceMethods()", returning = "result")
        public void logAfterReturning(JoinPoint joinPoint, Object result) {
            System.out.println("【返回通知】返回值:" + result);
        }

        // 异常通知
        @AfterThrowing(pointcut = "serviceMethods()", throwing = "ex")
        public void logAfterThrowing(JoinPoint joinPoint, Exception ex) {
            System.out.println("【异常通知】异常信息:" + ex.getMessage());
        }

        // 环绕通知(最强大)
        @Around("serviceMethods()")
        public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
            long start = System.currentTimeMillis();
            System.out.println("【环绕通知】开始执行:" + joinPoint.getSignature().getName());

            try {
                Object result = joinPoint.proceed();  // 执行目标方法
                long elapsed = System.currentTimeMillis() - start;
                System.out.println("【环绕通知】执行耗时:" + elapsed + "ms");
                return result;
            } catch (Exception e) {
                System.out.println("【环绕通知】执行异常:" + e.getMessage());
                throw e;
            } finally {
                System.out.println("【环绕通知】执行结束");
            }
        }
    }

    // 性能监控切面
    @Aspect
    @Component
    public static class PerformanceAspect {

        @Around("@annotation(com.example.Monitor)")
        public Object monitor(ProceedingJoinPoint joinPoint) throws Throwable {
            long start = System.currentTimeMillis();
            Object result = joinPoint.proceed();
            long elapsed = System.currentTimeMillis() - start;

            System.out.println("性能监控 - " + joinPoint.getSignature().getName() + 
                               " 耗时: " + elapsed + "ms");
            return result;
        }
    }

    // 自定义注解
    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Monitor {}

    @Service
    public static class MonitoredService {
        @Monitor
        public void criticalOperation() {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("关键操作执行");
        }
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = 
            new AnnotationConfigApplicationContext(AOPDemo.class);

        OrderService orderService = context.getBean(OrderService.class);

        try {
            orderService.createOrder("ORD-001", 100.0);
            orderService.getOrderStatus("ORD-001");
            orderService.createOrder("ORD-002", -10.0);
        } catch (Exception e) {
            System.out.println("捕获异常:" + e.getMessage());
        }

        MonitoredService monitoredService = context.getBean(MonitoredService.class);
        monitoredService.criticalOperation();

        context.close();
    }
}

六、性能优化与JVM调优
6.1 JVM参数调优

/**
 * JVM调优参数
 * 
 * 堆内存设置
 * -Xms2g     初始堆大小
 * -Xmx2g     最大堆大小
 * -Xmn512m   新生代大小
 * -XX:NewRatio=2    老年代/新生代比例
 * -XX:SurvivorRatio=8  Eden/Survivor比例
 * 
 * GC选择
 * -XX:+UseG1GC              使用G1垃圾收集器
 * -XX:+UseConcMarkSweepGC   使用CMS收集器
 * -XX:+UseParallelGC        使用并行收集器
 * 
 * GC日志
 * -XX:+PrintGCDetails       打印GC详细信息
 * -XX:+PrintGCDateStamps    打印GC时间戳
 * -Xloggc:gc.log            输出GC日志文件
 */
public class JVMTuning {

    // 打印JVM参数
    public static void printJVMParams() {
        Runtime runtime = Runtime.getRuntime();

        System.out.println("处理器核心数:" + runtime.availableProcessors());
        System.out.println("最大内存:" + runtime.maxMemory() / 1024 / 1024 + "MB");
        System.out.println("总内存:" + runtime.totalMemory() / 1024 / 1024 + "MB");
        System.out.println("空闲内存:" + runtime.freeMemory() / 1024 / 1024 + "MB");

        // 查看JVM参数
        System.out.println("Java版本:" + System.getProperty("java.version"));
        System.out.println("Java home:" + System.getProperty("java.home"));
    }
}

6.2 代码级性能优化

import java.util.*;
import java.util.stream.*;

/**
 * 代码级性能优化技巧
 */
public class CodeOptimization {

    // 1. 字符串拼接优化
    public static void stringConcatenation() {
        // 慢:每次循环创建新StringBuilder
        String result = "";
        for (int i = 0; i < 10000; i++) {
            result += i;  // 不推荐
        }

        // 快:使用StringBuilder
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }
        String result2 = sb.toString();
    }

    // 2. 集合初始化容量优化
    public static void collectionCapacity() {
        // 慢:需要多次扩容
        List<String> list1 = new ArrayList<>();

        // 快:指定初始容量,避免扩容
        List<String> list2 = new ArrayList<>(1000);

        // Map同理
        Map<String, String> map = new HashMap<>(16);
    }

    // 3. 避免自动装箱
    public static void autoBoxing() {
        // 慢:自动装箱
        Integer sum = 0;
        for (int i = 0; i < 1000000; i++) {
            sum += i;  // 每次都会创建Integer对象
        }

        // 快:使用基本类型
        int sum2 = 0;
        for (int i = 0; i < 1000000; i++) {
            sum2 += i;
        }
    }

    // 4. 使用懒加载
    public static class LazyLoading {
        private volatile HeavyObject heavyObject;

        public HeavyObject getHeavyObject() {
            // 双重检查锁定
            if (heavyObject == null) {
                synchronized (this) {
                    if (heavyObject == null) {
                        heavyObject = new HeavyObject();
                    }
                }
            }
            return heavyObject;
        }
    }

    // 5. 使用Stream并行流(注意线程安全)
    public static void parallelStream() {
        List<Integer> numbers = IntStream.rangeClosed(1, 10000000)
            .boxed()
            .collect(Collectors.toList());

        // 串行流
        long start = System.currentTimeMillis();
        long sum1 = numbers.stream()
            .mapToLong(i -> i * i)
            .sum();
        long time1 = System.currentTimeMillis() - start;

        // 并行流(适合大量数据且无共享状态)
        start = System.currentTimeMillis();
        long sum2 = numbers.parallelStream()
            .mapToLong(i -> i * i)
            .sum();
        long time2 = System.currentTimeMillis() - start;

        System.out.println("串行流耗时:" + time1 + "ms");
        System.out.println("并行流耗时:" + time2 + "ms");
    }

    // 6. 使用位运算优化
    public static void bitwiseOptimization() {
        // 模运算优化
        int n = 100;
        // 慢
        if (n % 2 == 0) { }
        // 快
        if ((n & 1) == 0) { }

        // 乘以/除以2的幂
        int x = 10;
        // 慢
        int y1 = x * 8;
        // 快
        int y2 = x << 3;
    }

    static class HeavyObject {
        private byte[] data = new byte[1024 * 1024];  // 1MB
    }
}

6.3、知识体系图谱
image.png
Java进阶之路是一条持续探索的旅程。从JVM内存模型到垃圾回收机制,从并发编程到网络通信,从框架原理到性能优化,每一步深入都让你对这门语言的理解更加透彻。
来源:
https://app-abdss1rim1oh.appmiaoda.com

相关文章
|
4月前
|
人工智能 Linux iOS开发
OpenClaw+QMT‑MCP量化交易实战:AI交易员全流程部署、模型配置与自动交易实现(附阿里云/Windows/macOS/Linux部署OpenClaw教程)
在量化交易领域,自动化执行与策略智能化已成为主流方向。OpenClaw(Clawdbot)作为开源AI Agent框架,可充当交易系统的“大脑”,负责理解指令、分析行情、拆解逻辑、规划执行;QMT‑MCP则遵循MCP(Model Context Protocol)协议,将本地QMT交易客户端封装为标准接口,成为AI交易员的“执行双手”,完成下单、撤单、查询持仓、查询资产等真实交易操作。
3060 7
|
4月前
|
缓存 架构师 Java
JAVA高阶知识概览(一)
教程来源 https://app-a6nw7st4g741.appmiaoda.com/ 本文系统梳理Java高阶开发核心体系:深入JVM内存模型、GC机制与类加载;剖析JMM、无锁编程与并发容器;详解分布式理论、微服务架构及高并发设计(限流、缓存、秒杀等),助力开发者跃升为技术专家。
|
4月前
|
消息中间件 算法 Java
JAVA高阶知识概览(终)
教程来源 https://app-a7illrp9pngh.appmiaoda.com/ Java高阶性能调优与架构设计:涵盖JVM参数优化、GC分析与OOM排查;数据库SQL索引优化、连接池与分库分表;DDD领域建模与六边形架构;事件驱动(Kafka/RocketMQ)、事件溯源与事务消息;并梳理JVM、并发、分布式、高并发及架构模式的完整知识图谱。
|
SQL 监控 Java
Java Spring Boot 2.0实战MyBatis连接池阿里Druid与SQL性能监控
阿里开源数据库连接池组件Druid非常强大,,本次课程一起学习如何在最新的Java Spring Boot 2.0和MyBatis系统中集成阿里开源的连接池Druid,以及SQL性能监控,生产环境必备利器。
73890 0
|
数据采集 人工智能 Java
阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
AI Agent技术架构的演进正在重塑软件工程实践方式。开发者可通过智能编程助手提升效率,也可依托专业框架构建智能体系统。技术生态呈现多维度发展,涵盖高代码与低代码方案,并支持Java和Python等多语言。新型开发范式如AutoGen和LangChain降低了开发门槛。LoongSuite作为可观测采集套件,助力企业高效构建AI时代可观测体系,推动标准化数据规范,提升系统稳定性与运维效率。
|
4月前
|
人工智能 API 项目管理
从平台来源到生态布局:对 GitCode 的背景与能力做一次中立介绍
GitCode是由CSDN与华为云CodeArts联合打造的新一代开源开发者平台,融合社区生态与研发基建,支持代码托管、协同开发、CI/CD及开源运营,深度对接开放原子等本土生态,致力于构建“代码+社区+AI”一体化开源基础设施。(239字)
572 0
|
4月前
|
JavaScript Linux API
OpenClaw(Clawdbot)从零到一实操手册:云端本地双部署+技能扩展+问题一站式解决
OpenClaw(曾用名Clawdbot/Moltbot)是2026年主流开源AI智能体框架,支持本地与云端双模式部署,可通过自然语言完成文件管理、信息检索、内容处理、流程自动化等任务,并依托Skills扩展更多实用能力。本文基于2026年3月最新环境,完整提供阿里云轻量应用服务器极速部署、本地Windows11/macOS/Linux手动部署、阿里云百炼Coding Plan免费大模型API配置、常用技能集成方法,以及全流程高频问题排查方案,所有命令均可直接复制执行,零基础用户也可快速完成搭建与稳定运行。
808 0
|
6月前
|
人工智能 测试技术 开发者
AI Coding后端开发实战:解锁AI辅助编程新范式
本文系统阐述了AI时代开发者如何高效协作AI Coding工具,强调破除认知误区、构建个人上下文管理体系,并精准判断AI输出质量。通过实战流程与案例,助力开发者实现从编码到架构思维的跃迁,成为人机协同的“超级开发者”。
3715 106
|
4月前
|
人工智能 Linux API
OpenClaw 阿里云秒级部署保姆级教程:从0到1搭建7×24小时AI助手
2026年3月,OpenClaw(原Clawdbot)凭借其轻量化架构、丰富技能生态与大模型适配能力,成为个人与小型团队搭建AI助手的首选方案。阿里云提供专属应用镜像与一键部署能力,可实现“秒级上线”,搭配百炼Coding Plan免费大模型API,无需本地算力即可拥有7×24小时在线的AI智能体。本文提供从服务器选购、端口放行、一键部署、模型配置到本地MacOS/Linux/Windows11联动的全流程保姆级教程,所有命令可直接复制执行,无冗余步骤,零基础也能一次成功。
601 11