每日学习Java之一万个为什么?

RK3588设备树节点实战:从零配置音频与显示模块(ES8388+DSI0) 本文详细介绍了在RK3588平台上配置音频编解码器ES8388和显示接口DSI0的设备树节点实战。通过具体案例拆解设备树节点的编写逻辑与调试技巧,包括音频路由与声卡配置、DSI控制器基础配置、视频通路路由配置以及电源管理与时钟树设计。文章还提供了调试工具与实战技巧,帮助开发者快速解决常见问题。 阅读详情

RunnableFuture接口实现类

在这里插入图片描述

线程池相关

自定义CPU密集线程池Demo

package com.qxy.practice.concurrent;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author : 戚欣扬
 * @Description :
 */
public class AutoIntegerDemo {

    public static void main(String[] args) {
        AtomicInteger autoInteger = new AtomicInteger(666);
        //定义一个标准CPU密集型设计线程池
        ExecutorService threadPoolExecutor = new ThreadPoolExecutor(
                Runtime.getRuntime().availableProcessors(),
                Runtime.getRuntime().availableProcessors()+1,
                1L,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(6),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        System.out.println("I have "+Runtime.getRuntime().availableProcessors()+" processors");
        try {
            for (int i = 0; i < 5; i++) {
                threadPoolExecutor.execute(()->{
                    for (int j = 0; j < 20; j++) {
                        System.out.println(Thread.currentThread().getName()+" AInteger : "+autoInteger.incrementAndGet());
                    }
                });
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            threadPoolExecutor.shutdown();
        }

    }
}



AI定义拒绝策略 Demo

import java.util.concurrent.*;

public class AlibabaCustomRejectionHandler implements RejectedExecutionHandler {

    private static final Logger logger = LoggerFactory.getLogger(AlibabaCustomRejectionHandler.class);

    // 备用队列(可选,用于暂存被拒绝的任务)
    private final BlockingQueue<Runnable> backupQueue;

    public AlibabaCustomRejectionHandler(BlockingQueue<Runnable> backupQueue) {
        this.backupQueue = backupQueue;
    }

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        // 1. 记录日志
        logRejection(r, executor);

        // 2. 尝试将任务存入备用队列
        if (backupQueue != null && !executor.isShutdown()) {
            try {
                backupQueue.put(r);
                logger.info("Task {} backed up to secondary queue", r);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                logger.error("Failed to backup task", e);
            }
        }

        // 3. 发送告警(可选,集成阿里云SLS或RocketMQ)
        sendAlert(r, executor);

        // 4. 降级策略:丢弃低优先级任务(示例)
        if (isLowPriorityTask(r)) {
            logger.warn("Discarded low-priority task: {}", r);
            return;
        }

        // 5. 如果以上均失败,抛出异常(可选)
        throw new RejectedExecutionException("Custom rejection policy failed for task: " + r);
    }

    private void logRejection(Runnable r, ThreadPoolExecutor executor) {
        logger.error(
            "Rejected task: {} | Pool Status: [Active={}, Core={}, Max={}, " +
            "QueueSize={}, CompletedTasks={}]", 
            r,
            executor.getActiveCount(),
            executor.getCorePoolSize(),
            executor.getMaximumPoolSize(),
            executor.getQueue().size(),
            executor.getCompletedTaskCount()
        );
    }

    private void sendAlert(Runnable r, ThreadPoolExecutor executor) {
        // 集成阿里云SLS或RocketMQ发送告警(此处为伪代码)
        // Example:
        // AlibabaCloudSLSClient.log("ThreadPoolRejection", 
        //     "Task=" + r + " | Pool=" + executor.toString());
    }

    private boolean isLowPriorityTask(Runnable r) {
        // 自定义逻辑判断任务优先级(例如:任务类名包含"LowPriority")
        return r.getClass().getName().contains("LowPriority");
    }
}

线程池技术文档

美团线程池技术概要

参考多线程网站

Disruptor框架

美团技术团队

JVM相关

JVM 内存结构

在这里插入图片描述

双亲委派 / 沙盒安全

在这里插入图片描述

OOM demo

package com.qxy.practice.jvm;

/**
 * @author : 戚欣扬
 * @Description :
 */
public class OOMdemo1 {
    byte[] bytes = new byte[1*1024*1024];
    public static void main(String[] args) {
    //设置虚拟机参数:-Xlog:gc* -Xms10m -Xmx10m
        OOMdemo1 [] arr = new OOMdemo1[1000];
        System.out.println("start memory :"+Runtime.getRuntime().totalMemory()/(1024*1024));
        System.out.println("max memory :"+Runtime.getRuntime().maxMemory()/(1024*1024));
        int i = 0;
        while (true){
            arr[i++]=new OOMdemo1();
        }
    }
}



SOF demo

package com.qxy.practice.jvm;

/**
 * @author : 戚欣扬
 * @Description :
 */
public class SOFdemo {

    public void sof(){
        sof();
    }

    public static void main(String[] args) {
        SOFdemo soFdemo = new SOFdemo();
        System.out.println(soFdemo.getClass().getClassLoader());
        System.out.println(soFdemo.getClass().getClassLoader().getParent());
        System.out.println(soFdemo.getClass().getClassLoader().getParent().getParent());
            soFdemo.sof();

    }
}



GC流程

Java HotSpot JVM的GC流程:分代收集,Young代触发Minor GC标记清理,Old代触发Major/Full GC整理内存,优化空间分配,减少碎片。

GC roots

分类具体类型描述
虚拟机栈(Java Stack)栈帧中的局部变量表引用的对象包括方法的局部变量、参数等,只要在当前活跃的栈帧中,即被视为 GC Root。
方法区(Method Area)类的静态字段(Static Fields)类的静态变量引用的对象,生命周期与类加载器绑定。
常量池(Runtime Constant Pool)中的引用对象包括字符串常量池、类符号引用等,可能引用堆中的对象。
本地方法栈(Native Stack)JNI(Java Native Interface)引用的对象通过本地方法调用(如 C/C++)中引用的 Java 对象。
活跃线程(Active Threads)正在运行的线程对象本身线程对象及其栈中的局部变量均属于 GC Root。
线程栈中的局部变量和参数线程执行过程中创建的临时对象或参数。
同步监控对象(Monitor)被 synchronized 锁持有的对象同步块或方法中使用的监视器对象,可能引用其他对象。
系统类加载器(Class Loaders)系统类加载器(Bootstrap、Extension、Application)加载的类及其静态字段这些类及其静态变量通常不会被回收,引用的对象也是 GC Root。
JVM 内部对象JVM 内部管理的对象(如 Class、Method、Field 等)JVM 自身维护的元数据对象,例如类对象、方法句柄等。
异常类(如 NullPointerException、OutOfMemoryError)JVM 内部常驻的异常类对象。
系统类加载器(如 ClassLoader 实例)负责加载类的加载器对象本身。
反射与工具接口通过反射 API(如 java.lang.reflect 包)创建的引用反射机制可能持有的对象引用(如 Method、Field 实例)。
JMXBean、JVMTI 回调、本地代码缓存用于监控或调试的 JVM 内部对象。
其他特殊场景临时性 GC Roots(如分代回收中的跨代引用)根据垃圾收集器策略,某些临时对象可能被临时标记为 GC Root(如局部回收时的关联对象)。
用户手动设置的引用(如 WeakReference、SoftReference)通过显式引用保留的对象(需注意:弱引用不会阻止对象被回收,但某些引用可能被特殊处理)。

备注

  1. 核心原则:所有 可达对象 必须能通过 GC Roots 的引用链追溯到,否则会被回收。
  2. 实现差异:不同 JVM 实现(如 HotSpot、OpenJDK)或垃圾收集器(如 G1、CMS)可能对 GC Roots 的具体处理略有差异。
  3. 动态性:某些 GC Roots(如活跃线程或本地方法引用)是动态变化的,随程序执行而改变。

Transformer模型详解(图解最完整版) Transformer由论文提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。Transformer 与 RNN 不同,可以比较好地并行训练。 阅读详情

相关推荐

Springboot项目中使用邮箱验证码注册登录的代码实现

本文介绍了在Spring Boot应用中实现邮箱验证码注册和登录功能的完整方案。文章首先概述了三种用户认证方式(邮箱验证码注册/登录和传统密码登录),然后详细说明了实现所需的技术栈(Spring Boot、Spring Security、JWT等)。重点阐述了邮件服务配置、验证码生成与存储的核心实现,包括QQ邮箱授权码获取、Thymeleaf邮件模板处理以及验证码缓存管理。最后展示了发送验证码和用户注册的API实现,为开发者提供了完整的参考方案。该方案兼顾安全性和用户体验,适合现代Web应用的用户认证需求。

BXCQ_xuan的技术专栏 | 实战干货·实践教程·学习笔记 1340

每日学习Java之一万个为什么

可以手动指定。不过@SpringBootApplication 中的@Component 是默认值,仅扫描所在包及其子包。不过其实按照约定放置Main方法位置就可以。

Fqxiny的博客 1293

别再只用跳层连接了!手把手教你用DASI和MDCR模块提升红外小目标检测精度

本文详细介绍了如何利用DASI和MDCR模块提升红外小目标检测精度。通过分析传统跳层连接的缺陷,提出维度感知的特征选择性融合(DASI)和多尺度感受野精炼器(MDCR)的创新方案,显著提升小目标检测性能。实验证明,该方法在多个场景下AP@0.5提升达15.4%,特别适用于安防监控和遥感图像分析。

weixin_28715081的博客 224

每日学习Java之一万个为什么(JUC)

Java中的Synchornized用于实现线程同步,确保同一时间只有一个线程访问被其修饰的代码块或方法,避免线程安全问题(如竞态条件、脏读等)。实现机制:基于Java内存模型(JMM)的监视器锁(Monitor),通过对象头中的Mark Word记录锁状态,支持偏向锁、轻量级锁、重量级锁的升级机制。适用场景:简单同步需求,代码简洁,但性能可能受限于锁升级后的重量级锁。

Fqxiny的博客 1166

UM982模组在无人机精准农业中的实战应用:如何配置双天线RTK实现厘米级定位

本文深入解析了UM982双天线RTK模组在农业无人机中的实战应用。通过详细阐述其硬件集成、软件配置及抗干扰调试全流程,重点说明了如何利用双天线设计直接获取高精度航向,并结合BDS等多系统GNSS信号,实现农田复杂环境下的厘米级稳定定位,从而提升变量施肥、自动巡田等精准农业作业的效率与质量。

weixin_29304021的博客 505

保姆级避坑指南:在Ubuntu 22.04上从零编译Autoware.universe(含ROS2 Humble和CUDA配置)

本文提供了一份详细的Autoware.universe编译指南,涵盖Ubuntu 22.04系统优化、ROS2 Humble安装避坑、CUDA配置及Demo运行技巧。通过分步操作和实战经验,帮助开发者高效完成环境搭建,避免常见错误,提升自动驾驶开发效率。

weixin_30642561的博客 347

每日学习Java之一万个为什么?[MySQL面试篇]

面试想要过关斩将,你就必须扪心自问,问得越多问的越细,才能披荆斩棘。盔甲若是漏洞百出,不被戳死才怪。下列问题为作者提出,回答搜集而来。由于作者并没有系统化从零开始学习MySQL,所以可能某些非常基础的问题并不了解。欢迎读者留言比较重要的基础,wink👍。

Fqxiny的博客 1845

医用超声图像模拟系统算法:空间分辨率详解

医用超声图像模拟系统中的空间分辨率,是连接物理原理、信号处理算法和最终图像质量的桥梁。通过精确模拟从声场发射、组织相互作用到信号接收和图像重建的全链条过程,并运用先进的波束形成、解卷积和超分辨率算法,我们可以不断逼近并突破物理极限,为开发下一代高分辨率超声成像系统提供强大的算法验证平台和数据集来源。未来的趋势将是更高保真度的物理模拟、更智能的自适应算法与数据驱动方法的深度融合。

alxraves的博客 702
上一篇: 每日学习Java之一万个为什么(JUC)
下一篇: 每日学习Java之一万个为什么?
~Yogi
博客等级 码龄5年 414粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Yogi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值