• 枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~

枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~

2025-04-26 01:00:28 1 阅读

目录

认识枚举

全文重点:枚举在单例模式中为什么是安全的?

Lambda 表达式

概念:

函数式接口

lambda表达式的基本使用:

lambda表达式的语法精简:

lambda表达式的变量捕获

Lambda在集合当中的使用

在 Collection接口中的使用:

在List中的使用

lambda表达式的总结:


认识枚举

枚举(Enumeration)是一种数据类型,它由一组预定义的常量组成,这些常量通常被称为枚举的成员或枚举值。

枚举的作用,把我们想要描述的东西举例出来,例如颜色。因为在Java中并没有一个特殊的数据类型是表示颜色的。

下列直接列出枚举的简单使用的方法:

enum TestEnum {
    RED,BLACK,GREEN,WHITE;
    public static void main(String[] args) {
        TestEnum testEnum2 = TestEnum.BLACK;



        switch (testEnum2) {
            case RED:
                System.out.println("red");
                break;
            case BLACK:
                System.out.println("black");
                break;
            case WHITE:
                System.out.println("WHITE");
                break;
            case GREEN:
                System.out.println("black");
                break;
            default:
                break;
        }
    }
}

上述场景就是:一个简单使用枚举类型的场景。

从上面代码可以看出枚举:enum 其实有点像类,里面也可以有属性和方法。不同的是enum的第一行必须是你要枚举的常量。否则编译器会直接报错。

带参数的使用案例:

这是带有构造方法的枚举,所以在第一行的枚举常量中我们就必须传参。

注意:枚举的构造方法默认是私有的(重要)

enum TestEnum1 {
    RED("red",1),BLACK("black",2),WHITE("white",3),GREEN("green",4);
    private String name;
    private int key;
    /**
     * 1、当枚举对象有参数后,需要提供相应的构造函数
     * 2、枚举的构造函数默认是私有的 这个一定要记住
     * @param name
     * @param key
     */
    private TestEnum1 (String name,int key) {
        this.name = name;
        this.key = key;
    }
    public static TestEnum1 getEnumKey (int key) {

        for (TestEnum1 t: TestEnum1.values()) {
            if(t.key== key) {
                return t;
            }
        }
        return null;
    }
    public static void main(String[] args) {
        System.out.println(getEnumKey(2));
    }
}

枚举还有属于自己的的方法:

values() 以数组形式返回枚举类型的所有成员

ordinal() 获取枚举成员的索引位置

valueOf() 将普通字符串转换为枚举实例

compareTo() 比较两个枚举成员在定义时的顺序


enum TestEnum2 {
    RED,BLACK,GREEN,WHITE;
    public static void main(String[] args) {
        TestEnum2[] testEnum2 = TestEnum2.values();
        for (int i = 0; i < testEnum2.length; i++) {
            System.out.println(testEnum2[i] + " " + testEnum2[i].ordinal());
        }
        System.out.println("=========================");
        System.out.println(TestEnum2.valueOf("GREEN"));
    }

}

compareTo方法使用案例:

enum TestEnum {
    RED,BLACK,GREEN,WHITE;
    public static void main(String[] args) {
//拿到枚举实例BLACK
        TestEnum testEnum = TestEnum.BLACK;
//拿到枚举实例RED
        TestEnum testEnum21 = TestEnum.RED;
        System.out.println(testEnum.compareTo(testEnum21));
        System.out.println(BLACK.compareTo(RED));
        System.out.println(RED.compareTo(BLACK));
    }
}

枚举的优缺点:

优点:

简单安全,枚举具有内置方法

缺点:无法继承,不可扩展


全文重点:枚举在单例模式中为什么是安全的?

枚举实现单例的安全性基于以下几个原因:

  1. JVM保证的唯一性:枚举类型的每个元素都是静态的,JVM在类加载时会保证每个枚举值只被实例化一次。
  2. 防止反射攻击:尽管理论上可以通过反射创建枚举的额外实例,但是Java语言规范特别指出,尝试通过反射来创建枚举实例的行为是非法的,并且会抛出IllegalArgumentException异常。这意味着即使有人尝试使用反射来破坏单例模式,JVM也会阻止这种行为,从而保持枚举实现的单例模式的线程安全性。
  3. 序列化安全:枚举类型是不可变的,并且JVM在反序列化时会保证枚举实例的唯一性,这使得枚举实现的单例在序列化和反序列化过程中也是安全的。

那么接下来我们就重点解析一下第二点:枚举是怎么防止反射攻击?

下面我们尝试一下反射获取构造方法,并尝试实例化出一个对象。

enum TestEnum1 {
    RED("red",1),BLACK("black",2),WHITE("white",3),GREEN("green",4);
    private String name;
    private int key;
    /**
     * 1、当枚举对象有参数后,需要提供相应的构造函数
     * 2、枚举的构造函数默认是私有的 这个一定要记住
     * @param name
     * @param key
     */
    private TestEnum1 (String name,int key) {
        this.name = name;
        this.key = key;
    }
    public static TestEnum1 getEnumKey (int key) {

        for (TestEnum1 t: TestEnum1.values()) {
            if(t.key== key) {
                return t;
            }
        }
        return null;
    }



    public static void reflectPrivateConstructor() {
        try {
            Class classStudent = Class.forName("TestEnum");
//注意传入对应的参数,获得对应的构造方法来构造对象,当前枚举类是提供了两个参数分别是String和int。
            Constructor declaredConstructorStudent= classStudent.getDeclaredConstructor(String.class, int.class);
//设置为true后可修改访问权限
            declaredConstructorStudent.setAccessible(true);
            Object objectStudent = declaredConstructorStudent.newInstance("绿色",666);
            TestEnum testEnum = (TestEnum) objectStudent;
            System.out.println("获得枚举的私有构造函数:"+testEnum);
        } catch (Exception ex) {
            ex.printStackTrace();
        }



    }

显然编译器已经报错,并直接给出提示,不能通过反射,创建出一个枚举实例。

那么我们就看一下源码,来看看代码是怎样抛出异常,阻止反射枚举获取实例。

跳转到源码当中就发现了,(clazz.getModifiers() & Modifier.ENUM) != 0,的第二个条件直接忽略了枚举,当Constructor中发现反射对象为枚举时,就直接抛出异常了。这就是枚举实现单例模式时安全的原因之一。

Lambda 表达式

概念:

Lambda表达式在Java中是一种重要的高级特性,它允许开发者以更简洁的方式定义和使用函数,特别是在处理集合和多线程编程时提供了更为简洁和高效的解决方案。

  1. 历史背景:Lambda表达式作为一种函数式编程的概念,最早由Alonzo Church在其λ演算中提出。Java在2014年发布的Java 8中正式引入了Lambda表达式,标志着Java向函数式编程迈出了重要一步。
  2. 引入原因:在Java 8之前,Java主要是一种面向对象的编程语言。在处理特定场景,如事件监听器或集合的排序时,需要创建大量的匿名内部类,这增加了代码的复杂性,降。
  3. 语法格式:Lambda表达式的语法格式非常简洁,通常由参数列表、箭头符号(->)和表达式体三部分组成。参数列表定义了传递给Lambda函数的参数,箭头符号表示参数列表的结束,表达式体则是Lambda函数执行的代码。例如:

(parameters) -> expression(表达式)

(parameters) ->{ statements; } (代码块)

这里把expression和statements统称为方法体

方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反 回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

lambda表达式代码示例:

// 1. 不需要参数,返回值为 2
() -> 2
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的和
(x, y) -> x + y
// 4. 接收2个int型整数,返回他们的乘积
(int x, int y) -> x * y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
@FunctionalInterface
interface NoParameterNoReturn {
    //注意:只能有一个方法
    void test();
}

那么lambda表达式在哪使用,怎么使用呢?那么我们就需要先认识函数式接口!!!

函数式接口

  1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  2. 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

定义方式(两种):

interface NoParameterNoReturn {
    //注意:只能有一个方法
    void test();
}

或:

@FunctionalInterface
interface NoParameterNoReturn {
    void test();
    default void test2() {
        System.out.println("JDK1.8新特性,default默认方法可以有具体的实现");
    }
}

可以简单理解为:lambda就是用来简化函数式接口的使用。

lambda表达式的基本使用:

不使用lambda表达式的形式:

@FunctionalInterface
interface NoParameterNoReturn {
    void test();
}


public  class T{
    public static void main(String[] args) {

        NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn(){
            @Override
            public void test() {
                System.out.println("hello");
            }
        };
        noParameterNoReturn.test();
    }
}

向上面的代码,就略显麻烦。下面就展示各种接口的lambda表达式的使用方法:

以下还不是最精简的lambda表达式:


//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {
    void test();
}
//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
    void test(int a);
}
//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
    void test(int a,int b);
}
//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {
    int test();
}
//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {
    int test(int a);
}
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
    int test(int a,int b);
}



public  class T{

    public class TestDemo {
        public static void main(String[] args) {
            NoParameterNoReturn noParameterNoReturn = ()->{
                System.out.println("无参数无返回值");
            };
            noParameterNoReturn.test();
            OneParameterNoReturn oneParameterNoReturn = (int a)->{
                System.out.println("一个参数无返回值:"+ a);
            };
            oneParameterNoReturn.test(10);
            MoreParameterNoReturn moreParameterNoReturn = (int a,int b)->{
                System.out.println("多个参数无返回值:"+a+" "+b);
            };
            moreParameterNoReturn.test(20,30);
            NoParameterReturn noParameterReturn = ()->{
                System.out.println("有返回值无参数!");
                return 40;
            };
//接收函数的返回值
            int ret = noParameterReturn.test();
            System.out.println(ret);
            OneParameterReturn oneParameterReturn = (int a)->{
                System.out.println("有返回值有一个参数!");
                return a;
            };
            ret = oneParameterReturn.test(50);
            System.out.println(ret);
            MoreParameterReturn moreParameterReturn = (int a,int b)->{
                System.out.println("有返回值多个参数!");
                return a+b;
            };
            ret = moreParameterReturn.test(60,70);
            System.out.println(ret);
        }
    }
}

lambda表达式的语法精简:

  1. 参数类型可以省略,如果需要省略,每个参数的类型都要省略。
  2. 参数的小括号里面只有一个参数,那么小括号可以省略
  3. 如果方法体当中只有一句代码,那么大括号可以省略
  4. 如果方法体中只有一条语句,且是return语句,那么大括号可以省略,且去掉return关键字。

public static void main(String[] args) {
    MoreParameterNoReturn moreParameterNoReturn = ( a, b)->{
        System.out.println("无返回值多个参数,省略参数类型:"+a+" "+b);
    };
    moreParameterNoReturn.test(20,30);
    
    OneParameterNoReturn oneParameterNoReturn = a ->{
        System.out.println("一个参数无返回值,小括号可以胜率:"+ a);
    };
    oneParameterNoReturn.test(10);
    
    NoParameterNoReturn noParameterNoReturn = ()->System.out.println("无参数无返回值,方法体中只有一行代码");
    noParameterNoReturn.test();
    
//方法体中只有一条语句,且是return语句
    NoParameterReturn noParameterReturn = ()-> 40;
    int ret = noParameterReturn.test();
    System.out.println(ret);
}

以上就是精简过后的lambda表达式。

lambda表达式的变量捕获

在下面代码当中的变量a就是,捕获的变量。这个变量要么是被final修饰,如果不是被final修饰的 你要保证在使用 之前,没有修改。如下代码就是错误的代码 :

Lambda在集合当中的使用

在 Collection接口中的使用:

正常用法:

public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    list.add("Hello");
    list.add("bit");
    list.add("hello");
    list.add("lambda");
    list.forEach(new Consumer(){
        @Override
        public void accept(String str){
//简单遍历集合中的元素。
            System.out.print(str+" ");
        }
    });
}

使用lambda表达式:

相当于实现了Consumer中的 void accept(String str)方法。

public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    list.add("Hello");
    list.add("bit");
    list.add("hello");
    list.add("lambda");
//表示调用一个,不带有参数的方法,其执行花括号内的语句,为原来的函数体内容。
    list.forEach(s -> {
        System.out.println(s);
    });
}

在List中的使用

正常使用方法:

public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    list.add("Hello");
    list.add("bit");
    list.add("hello");
    list.add("lambda");
    list.sort(new Comparator() {
        @Override
        public int compare(String str1, String str2) {
//注意这里比较长度
            return str1.length() - str2.length();
        }
    });
    System.out.println(list);
}

lambda表示式用法:

相当于实现了Comparator中的int compare(String str1, String str2)方法

public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    list.add("Hello");
    list.add("bit");
    list.add("hello");
    list.add("lambda");
//调用带有2个参数的方法,且返回长度的差值
    list.sort((str1, str2) -> str1.length() - str2.length());
    System.out.println(list);
}

lambda表达式的总结:

Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。
优点:

  1. 代码简洁,开发迅速
  2. 方便函数式编程
  3. 非常容易进行并行计算
  4. Java 引入 Lambda,改善了集合操作
    缺点:
  5. 代码可读性变差
  6. 在非并行计算中,很多计算未必有传统的 for 性能要高
  7. 不容易进行调试

本文地址:https://www.vps345.com/1300.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge 进程 操作系统 进程控制 Ubuntu llama 算法 opencv 自然语言处理 神经网络 语言模型 阿里云 网络 网络安全 网络协议 ssh ubuntu deepseek Ollama 模型联网 API CherryStudio python MCP harmonyos 华为 开发语言 typescript 计算机网络 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn RTSP xop RTP RTSPServer 推流 视频 数据库 centos oracle 关系型 安全 分布式 科技 ai java 人工智能 个人开发 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse pycharm ide pytorch filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 ssl 前端框架 面试 性能优化 jdk intellij-idea 架构 golang 后端 numpy HCIE 数通 node.js json html5 firefox Windsurf vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 macos 编辑器 鸿蒙 鸿蒙系统 kubernetes 容器 学习方法 经验分享 程序人生 asm c# GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 cpu 内存 实时 使用 cuda cudnn anaconda flutter Hyper-V WinRM TrustedHosts ESP32 camera Arduino 电子信息 adb tcp/ip vim php android 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 Dell R750XS vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 华为云 物联网 嵌入式硬件 单片机 c++ 温湿度数据上传到服务器 Arduino HTTP udp unity YOLO efficientVIT YOLOv8替换主干网络 TOLOv8 rust http 机器学习 学习 WSL2 uni-app flask spring boot AI编程 AIGC 深度学习 目标检测 计算机视觉 docker 实时音视频 ESXi vscode IIS服务器 IIS性能 日志监控 腾讯云 自动化 笔记 tomcat maven intellij idea 交换机 telnet 远程登录 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 MQTT mosquitto 消息队列 r语言 数据挖掘 数据可视化 数据分析 .netcore word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 github git ansible nginx dubbo gpu算力 Qwen2.5-coder 离线部署 ollama 大模型 mac threejs 3D 运维开发 课程设计 mysql kamailio sip VoIP sqlserver Dify rust腐蚀 框架搭建 websocket .net pip conda 豆瓣 追剧助手 迅雷 nas 微信 windows 远程工作 unity3d list 数据结构 apache 孤岛惊魂4 低代码 aws googlecloud jupyter gitlab express okhttp CORS 跨域 系统架构 kafka jmeter 软件测试 大模型微调 智能路由器 外网访问 内网穿透 端口映射 计算机外设 多线程服务器 Linux网络编程 监控 自动化运维 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 大数据 爬虫 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 大数据平台 debian 测试工具 web安全 pillow live555 rtsp rtp https WSL win11 无法解析服务器的名称或地址 小程序 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 Kali Linux 黑客 渗透测试 信息收集 django web3.py fpga开发 云原生 redis 缓存 电脑 软件需求 代码调试 ipdb 微服务 jenkins gitee k8s 持续部署 ecmascript KVM 创意 社区 AI Agent DeepSeek-R1 API接口 源码剖析 rtsp实现步骤 流媒体开发 wireshark NPS 雨云服务器 雨云 springsecurity6 oauth2 授权服务器 token sas Cookie 远程控制 远程看看 远程协助 rsyslog ue4 着色器 ue5 虚幻 mcu iot 信息与通信 C语言 微信分享 Image wxopensdk ipython springcloud DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 bootstrap html YOLOv8 NPU Atlas800 A300I pro asi_bench webrtc Linux 进程信号 统信UOS 麒麟 bonding 链路聚合 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 svn c语言 qt stm32项目 stm32 firewalld HarmonyOS Next RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 prometheus PVE YOLOv12 rabbitmq 命名管道 客户端与服务端通信 产品经理 agi microsoft n8n 工作流 workflow 嵌入式 linux驱动开发 arm开发 react.js 前端面试题 mybatis oceanbase rc.local 开机自启 systemd 深度优先 图论 并集查找 换根法 树上倍增 C 环境变量 进程地址空间 chatgpt DeepSeek ddos llm spring llama3 Chatglm 开源大模型 mongodb tcpdump transformer ping++ zotero WebDAV 同步失败 代理模式 ffmpeg 音视频 nvidia asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 部署 服务器配置 VMware安装Ubuntu Ubuntu安装k8s 银河麒麟服务器操作系统 系统激活 僵尸进程 博客 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 工业4.0 向日葵 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 并查集 leetcode sql KingBase ollama下载加速 漏洞 负载均衡 安全威胁分析 开源 智能手机 NAS Termux Samba 飞牛NAS 飞牛OS MacBook Pro postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 蓝耘科技 元生代平台工作流 ComfyUI Ubuntu Server Ubuntu 22.04.5 LDAP micropython esp32 mqtt 企业微信 Linux24.04 deepin rpc nuxt3 postgresql Reactor 设计模式 C++ selenium 边缘计算 智能硬件 远程桌面 ip命令 新增网卡 新增IP 启动网卡 显示过滤器 安装 ICMP Wireshark安装 虚拟化 半虚拟化 硬件虚拟化 Hypervisor pygame 能力提升 面试宝典 技术 IT信息化 code-server minio 算力 计算机 程序员 rime 华为od DevEco Studio sqlite hive hadoop DBeaver 数据仓库 kerberos pgpool openssl 密码学 业界资讯 ci/cd devops NFS 模拟退火算法 deepseek r1 田俊楠 iftop 网络流量监控 AI大模型 LLM make命令 makefile文件 visual studio code outlook 数据库系统 bash spring cloud hibernate 直流充电桩 充电桩 英语 MQTT协议 消息服务器 代码 国产操作系统 ukui 麒麟kylinos openeuler dba W5500 OLED u8g2 TCP服务器 chfs ubuntu 16.04 统信 虚拟机安装 安卓 elasticsearch kind 监控k8s集群 集群内prometheus jar 宝塔面板 同步 备份 建站 大模型入门 Deepseek 大模型教程 remote-ssh SSH Xterminal bug java-ee zabbix 其他 dify 技能大赛 微信小程序 openEuler 文件系统 路径解析 网络穿透 云服务器 ruoyi springboot 火绒安全 VPS Nuxt.js 数据集 mamba Vmamba 实时互动 uniapp vue 恒源云 selete 高级IO vSphere vCenter 软件定义数据中心 sddc RTMP 应用层 致远OA OA服务器 服务器磁盘扩容 OD机试真题 华为OD机试真题 服务器能耗统计 政务 分布式系统 监控运维 Prometheus Grafana MacOS录屏软件 RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 gpt-3 文心一言 软件工程 echarts matlab eureka 传统数据库升级 银行 大语言模型 LLMs 中间件 可信计算技术 安全架构 网络攻击模型 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 显卡驱动 IPMITOOL BMC 硬件管理 kylin arm opcua opcda KEPServer安装 大模型应用 oneapi open webui yum 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? Google pay Apple pay etcd 数据安全 RBAC 医疗APP开发 app开发 XCC Lenovo 华为认证 网络工程师 繁忙 服务器繁忙 解决办法 替代网站 汇总推荐 AI推理 金融 移动云 MS Materials android studio 鲲鹏 FTP 服务器 visualstudio Java 信息可视化 网页设计 docker run 数据卷挂载 交互模式 SSL 域名 skynet 硬件架构 AISphereButler shell embedding Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 EMUI 回退 降级 升级 Trae IDE AI 原生集成开发环境 Trae AI 驱动开发 硬件工程 嵌入式实习 线程 redhat docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos ios kali 共享文件夹 虚拟机 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 机器人 LORA NLP RAID RAID技术 磁盘 存储 Kylin-Server 服务器安装 EasyConnect eNSP 网络规划 VLAN 企业网络 Cline RustDesk自建服务器 rustdesk服务器 docker rustdesk linux环境变量 黑客技术 流式接口 URL 本地部署 api web pyqt excel ssrf 失效的访问控制 单元测试 集成测试 功能测试 交互 WebRTC gpt 多进程 openwrt 远程 命令 执行 sshpass 操作 yolov8 ux 多线程 open Euler dde 灵办AI kvm unix k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm opensearch helm 服务器主板 AI芯片 xrdp 远程连接 gradle SRS 流媒体 直播 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 游戏服务器 TrinityCore 魔兽世界 C# MQTTS 双向认证 emqx linux安装配置 adobe elk Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket Docker Compose docker compose docker-compose 图形化界面 环境迁移 崖山数据库 YashanDB tensorflow trae VMware创建虚拟机 Ubuntu 24.04.1 轻量级服务器 GCC crosstool-ng dash 正则表达式 TRAE tidb GLIBC Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 pdf 群晖 文件分享 iis VSCode nac 802.1 portal wsl2 wsl 游戏程序 pyautogui 目标跟踪 OpenVINO 推理应用 iBMC UltraISO 银河麒麟操作系统 国产化 远程过程调用 Windows环境 职场和发展 直播推流 服务器部署ai模型 开机自启动 sqlite3 多层架构 解耦 Anolis nginx安装 环境安装 linux插件下载 毕设 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 raid5数据恢复 磁盘阵列数据恢复 无桌面 命令行 串口服务器 分析解读 媒体 微信公众平台 risc-v 3d QQ bot Docker protobuf 序列化和反序列化 virtualenv 三级等保 服务器审计日志备份 webstorm ceph 联想开天P90Z装win10 强制清理 强制删除 mac废纸篓 glibc rocketmq nextjs react reactjs 软考 深度求索 私域 知识库 css DNS 搜索引擎 MacMini Mac 迷你主机 mini Apple 宠物 毕业设计 免费学习 宠物领养 宠物平台 Ark-TS语言 宕机切换 服务器宕机 CLion frp 小艺 Pura X 腾讯云大模型知识引擎 压力测试 图像处理 网工 xml 开发环境 压测 ECS AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 curl wget DOIT 四博智联 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 mariadb idm cmos 硬件 报错 thingsboard VR手套 数据手套 动捕手套 动捕数据手套 设置代理 实用教程 VMware安装mocOS VMware macOS系统安装 iDRAC R720xd JAVA 昇腾 npu linux 命令 sed 命令 集成学习 输入法 dell服务器 go av1 电视盒子 机顶盒ROM 魔百盒刷机 c IIS .net core Hosting Bundle .NET Framework vs2022 XFS xfs文件系统损坏 I_O error 数学建模 es jvm 磁盘监控 相差8小时 UTC 时间 netty gcc ragflow gitea 系统开发 binder 车载系统 framework 源码环境 file server http server web server 状态管理的 UDP 服务器 Arduino RTOS minicom 串口调试工具 生物信息学 Invalid Host allowedHosts rdp 实验 ArcTS 登录 ArcUI GridItem arkUI 王者荣耀 Wi-Fi Linux PID chrome devtools chromedriver LInux mq Cursor 云电竞 云电脑 todesk 设备 GPU PCI-Express docker命令大全 服务器管理 配置教程 网站管理 5G 3GPP 卫星通信 UOS 统信操作系统 SysBench 基准测试 指令 ecm bpm Minecraft Erlang OTP gen_server 热代码交换 事务语义 MNN Qwen ip ui 音乐服务器 Navidrome 音流 系统安全 监控k8s 监控kubernetes gaussdb playbook 系统 黑苹果 小游戏 五子棋 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 sdkman Dell HPE 联想 浪潮 蓝桥杯 freebsd Docker Hub docker pull 镜像源 daemon.json 思科模拟器 思科 Cisco 大模型面经 大模型学习 测试用例 AI写作 AI作画 next.js 部署next.js 聊天室 WebUI DeepSeek V3 ocr mysql离线安装 ubuntu22.04 mysql8.0 源码 log4j 混合开发 JDK CPU 主板 电源 网卡 剧本 muduo X11 Xming Redis Desktop Hive环境搭建 hive3环境 Hive远程模式 centos-root /dev/mapper yum clean all df -h / du -sh 京东云 弹性计算 计算虚拟化 弹性裸金属 基础入门 编程 linux上传下载 IPMI matplotlib USB网络共享 Playwright 自动化测试 vscode 1.86 网站搭建 serv00 jetty undertow Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 flash-attention grafana 微信开放平台 微信公众号配置 safari k8s集群资源管理 云原生开发 裸金属服务器 弹性裸金属服务器 p2p vmware 卡死 银河麒麟 kylin v10 麒麟 v10 SSH 服务 SSH Server OpenSSH Server 自动化编程 AI代码编辑器 SWAT 配置文件 服务管理 网络共享 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 银河麒麟桌面操作系统 Kylin OS DeepSeek行业应用 Heroku 网站部署 cnn 邮件APP 免费软件 ros2 moveit 机器人运动 游戏机 hugo Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 Netty 即时通信 NIO 软件构建 超融合 vasp安装 dity make 查询数据库服务IP地址 SQL Server 分布式训练 语音识别 AutoDL c/c++ 串口 反向代理 用户缓冲区 searxng 模拟实现 网络药理学 生信 PPI String Cytoscape CytoHubba Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 perf 支付 微信支付 开放平台 Radius npm 链表 qt项目 qt项目实战 qt教程 fd 文件描述符 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP composer 银河麒麟高级服务器 外接硬盘 Kylin 产测工具框架 IMX6ULL 管理框架 根服务器 clickhouse cocoapods xcode firewall openstack Xen cfssl SenseVoice iphone Typore junit Kali 渗透 镜像 Logstash 日志采集 无人机 影刀 #影刀RPA# 做raid 装系统 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 laravel 版本 内网服务器 内网代理 内网通信 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 saltstack 需求分析 规格说明书 rustdesk ROS 自动驾驶 聚类 程序 性能分析 IM即时通讯 剪切板对通 HTML FORMAT CVE-2024-7347 飞书 trea idea dns 阿里云ECS figma 虚拟局域网 tcp autodl AD域 强化学习 信号处理 prompt Ubuntu22.04 开发人员主页 OpenSSH 交叉编译 DIFY powerpoint 单一职责原则 CH340 串口驱动 CH341 uart 485 GoogLeNet 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 spark HistoryServer Spark YARN jobhistory 实战案例 Headless Linux 序列化反序列化 IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 主从复制 键盘 epoll asp.net大文件上传下载 人工智能生成内容 less CDN bcompare Beyond Compare 模拟器 教程 代理服务器 zookeeper flink nfs 华为机试 ruby 游戏引擎 匿名管道 自定义客户端 SAS seleium ShenTong nlp P2P HDLC GIS 遥感 WebGIS QT 5.12.12 QT开发环境 Ubuntu18.04 双系统 GRUB引导 Linux技巧 大大通 第三代半导体 碳化硅 回显服务器 UDP的API使用 嵌入式Linux IPC Windows ai工具 RAGFlow 本地知识库部署 DeepSeek R1 模型 ldap armbian u-boot apt uv 中兴光猫 换光猫 网络桥接 自己换光猫 h.264 远程服务 项目部署到linux服务器 项目部署过程 ftp MI300x wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 软负载 AI-native Docker Desktop web3 x64 SIGSEGV SSE xmm0 vscode1.86 1.86版本 ssh远程连接 稳定性 看门狗 wps LLM Web APP Streamlit big data cpp-httplib edge浏览器 SSL证书 sysctl.conf vm.nr_hugepages 读写锁 办公自动化 自动化生成 pdf教程 rnn 换源 国内源 Debian 视频编解码 arcgis 云服务 seatunnel odoo 服务器动作 Server action g++ g++13 视觉检测 Linux环境 僵尸世界大战 游戏服务器搭建 rag ragflow 源码启动 WSL2 上安装 Ubuntu Ubuntu共享文件夹 共享目录 Linux共享文件夹 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 运维监控 k8s二次开发 集群管理 vpn deekseek 音乐库 飞牛 ArkTs ArkUI 网络结构图 yaml Ultralytics 可视化 推荐算法 swoole FTP服务器 v10 软件 代理 lio-sam SLAM 多个客户端访问 IO多路复用 TCP相关API DeepSeek r1 Open WebUI cd 目录切换 OpenManus 宝塔 信号 架构与原理 Mac内存不够用怎么办 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 HiCar CarLife+ CarPlay QT RK3588 单例模式 Node-Red 编程工具 流编程 IDEA eclipse tailscale derp derper 中转 triton 模型分析 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors NLP模型 自学笔记 小米 澎湃OS Android bat Unity Dedicated Server Host Client 无头主机 aarch64 编译安装 HPC Deepseek-R1 私有化部署 推理模型 Linux的基础指令 虚拟显示器 cursor lua MCP server C/S windows日志 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 常用命令 文本命令 目录命令 程序员创富 python3.11 重启 排查 系统重启 日志 原因 域名服务 DHCP 符号链接 配置 langchain deep learning 性能测试 ros 相机 权限 sentinel 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 自动化任务管理 easyui midjourney banner 前后端分离 7z 实习 飞牛nas fnos keepalived sonoma 自动更新 迁移指南 yum源切换 更换国内yum源 xshell termius iterm2 FunASR ASR ubuntu24.04.1 佛山戴尔服务器维修 佛山三水服务器维修 neo4j 数据库开发 database IO模型 vr 我的世界服务器搭建 服务网格 istio 干货分享 黑客工具 密码爆破 金仓数据库 2025 征文 数据库平替用金仓 Spring Security 技术共享 我的世界 我的世界联机 数码 本地部署AI大模型 ISO镜像作为本地源 免费域名 域名解析 执法记录仪 智能安全帽 smarteye 矩阵 线性代数 电商平台 服务器时间 DocFlow C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 李心怡 UOS1070e 代码托管服务 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 IMX317 MIPI H265 VCU 语法 Linux的权限 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 图形渲染 dns是什么 如何设置电脑dns dns应该如何设置 xss H3C 捆绑 链接 谷歌浏览器 youtube google gmail 小智AI服务端 xiaozhi TTS pppoe radius alias unalias 别名 AI agent Claude HarmonyOS AnythingLLM AnythingLLM安装 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 DenseNet CrewAI regedit 开机启动 qemu libvirt WebVM 互信 基础环境 策略模式 个人博客 流水线 脚本式流水线 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 can 线程池 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR rclone AList webdav fnOS VS Code webgl 社交电子 考研 EMQX 通信协议 游戏开发 安防软件 gromacs 分子动力学模拟 MD 动力学模拟 端口测试 私有化 显示管理器 lightdm gdm 玩机技巧 软件分享 软件图标 阻塞队列 生产者消费者模型 服务器崩坏原因 AD 域管理 浏览器开发 AI浏览器 ssh漏洞 ssh9.9p2 CVE-2025-23419 历史版本 下载 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 etl Jellyfin HTTP 服务器控制 ESP32 DeepSeek 移动魔百盒 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 备选 网站 调用 示例 USB转串口 云桌面 微软 AD域控 证书服务器 TrueLicense 毕昇JDK minecraft 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 ip协议 沙盒 SVN Server tortoise svn PX4 抗锯齿 物联网开发 知识图谱 粘包问题 计算生物学 生物信息 基因组 vu大文件秒传跨域报错cors HAProxy TCP协议 ABAP milvus 存储维护 NetApp存储 EMC存储 top Linux top top命令详解 top命令重点 top常用参数 MVS 海康威视相机 ubuntu20.04 ros1 Noetic 20.04 apt 安装 navicat kernel Attention proxy模式 onlyoffice 在线office 磁盘清理 云耀服务器 智能音箱 智能家居 fast 容器技术 wpf 拓扑图 wsgiref Web 服务器网关接口 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 iperf3 带宽测试 嵌入式系统开发 ardunio BLE 对比 工具 meld DiffMerge gnu db java-rocketmq 虚拟现实 环境配置 信创 信创终端 中科方德 项目部署 多端开发 智慧分发 应用生态 鸿蒙OS 网卡的名称修改 eth0 ens33 大模型部署 IMM 查看显卡进程 fuser ArtTS deployment daemonset statefulset cronjob 元服务 应用上架 AI Agent 字节智能运维 Linux权限 权限命令 特殊权限 健康医疗 互联网医院 MDK 嵌入式开发工具 论文笔记 sublime text KylinV10 麒麟操作系统 Vmware CentOS 端口聚合 windows11 AI员工 MacOS Linux find grep 钉钉 软链接 硬链接 内网环境 进程优先级 调度队列 进程切换 System V共享内存 进程通信 jina hosts docker desktop image xpath定位元素 端口 查看 ss 防火墙 NAT转发 NAT Server Qwen2.5-VL vllm 欧标 OCPP 开发 树莓派 VNC nosql su sudo docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 word css3 HarmonyOS NEXT 原生鸿蒙 rpa win服务器架设 windows server fstab 加解密 Yakit yaklang 抓包工具 UDP react native 安装MySQL 合成模型 扩散模型 图像生成 带外管理 状态模式 openvpn server openvpn配置教程 centos安装openvpn 极限编程 流量运营 CentOS Stream 区块链 perl OpenHarmony 鸿蒙开发 移动开发 docker部署Python llama.cpp Python基础 Python教程 Python技巧 sequoiaDB iventoy VmWare OpenEuler prometheus数据采集 prometheus数据模型 prometheus特点 zip unzip Unity插件 visual studio nvm whistle 网络爬虫 ranger MySQL8.0 多路转接 Xinference 本地化部署 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 问题解决 ubuntu24 vivado24 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 SEO hexo 软件卸载 系统清理 kotlin ssh远程登录 虚幻引擎 virtualbox grub 版本升级 扩容 MySql Sealos 大模型推理 论文阅读 centos 7 企业网络规划 华为eNSP 烟花代码 烟花 元旦 性能调优 安全代理 harmonyOS面试题 WLAN rancher 浏览器自动化 copilot 西门子PLC 通讯 搜狗输入法 中文输入法 ubuntu 18.04 dock 加速 React Next.js 开源框架 yolov5 conda配置 conda镜像源 数字证书 签署证书 智能电视 MAC SecureCRT 搭建个人相关服务器 UEFI Legacy MBR GPT U盘安装操作系统 国产数据库 瀚高数据库 数据迁移 下载安装 服务器正确解析请求体 达梦 DM8 IO mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 风扇控制软件 视频平台 录像 视频转发 视频流 接口优化 MAVROS 四旋翼无人机 热榜 MobaXterm js 解决方案 通信工程 毕业 Reactor反应堆 vnc yum换源 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 开机黑屏 电视剧收视率分析与可视化平台 mcp服务器 client close 离线部署dify macOS