如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤:
1. 创建项目
    1.1 打开 IntelliJ IDEA。
    1.2 在启动界面,点击 Create New Project(创建新项目)。
    1.3 选择 Java,然后点击 Next。
    1.4 确保 Project SDK 选择了正确的 JDK 版本(例如 JDK 1.8 或更高版本)。
    1.5 点击 Next,然后为项目命名(例如 TextSeekServer)。
    1.6 点击 Finish 完成项目创建。
2. 创建包和类
   2.1 在 src 目录下,右键点击 New > Package,创建包 com.myth。
   2.2 在 com.myth 包中,右键点击 New > Java Class,分别创建以下类:
        AESUtil.java
        DBUtil.java
        TextSeekServer.java(包含 main 函数)
3. 创建配置文件
   3.1 在 项目视图 中,找到项目的根目录(例如 TextSeekServer),右键点击 New > Directory,创建目录 resources。
   3.2 在 resources 目录中,右键点击 New > File,分别创建以下文件:
        config.properties
        dbconfig.properties
        maintenance.properties
        log4j2.xml
   3.3 将 resources 目录标记为资源目录
    右键点击 resources 目录 > 选择 Mark Directory as > Resources Root
4. 添加 MariaDB JDBC 驱动
   4.1 下载 mariadb-java-client-3.1.4.jar:
        从 MariaDB JDBC Driver 官方下载页面 下载。
        https://mariadb.com/kb/en/about-mariadb-connector-j/
   4.2 将下载的 JAR 文件放到项目的 lib 目录中:
        在项目根目录下,右键点击 New > Directory,创建目录 lib。
        将 mariadb-java-client-3.1.4.jar 复制到 lib 目录中。
   4.3 将 JAR 文件添加到项目的类路径:
        右键点击 mariadb-java-client-3.1.4.jar,选择 Add as Library。
        在弹出的对话框中:
        Level:选择 Module Library(推荐)或 Global Library
        Add to Module:选择当前模块(例如 TextSeekServer)
        点击 OK
  4.4 验证 lib 目录的状态
      4.4.1 打开 Project Structure(项目结构):
            进入 File > Project Structure。
    4.4.2 在 Modules 选项卡中:
            选择当前模块(例如 TextSeekServer)。
            切换到 Dependencies 选项卡。
            确认 mariadb-java-client-3.1.4.jar 已添加到模块的依赖列表中。
    4.4.3 在 Libraries 选项卡中:
            确认 mariadb-java-client-3.1.4.jar 已作为库添加到项目中
      4.4.4 备注 lib 目录本身不需要被标记为 Sources Root 或
        Resources Root,因为它只是存放 JAR 文件的目录。
        它的作用是通过 Add as Library 将 JAR 文件添加到项目的类路径中

5. 配置项目结构
   5.1 进入 File > Project Structure(项目结构)。
   5.2 在 Modules 选项卡中,确保 src 目录被标记为 Sources,resources 目录被标记为 Resources。
   5.3 在 Libraries 选项卡中,确认 mariadb-java-client-3.1.4.jar 已添加。
6. 配置文件内容
config.properties
# 示例配置
app.name=TextSeekServer
app.version=1.0

dbconfig.properties
# 数据库配置
db.url=jdbc:mariadb://localhost:3306/testdb
db.user=root
db.password=123456

maintenance.properties
# 维护配置
maintenance.mode=false
maintenance.message=System is under maintenance.

log4j2.xml
<Configuration status="WARN">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <!-- 文件输出 -->
        <RollingFile name="File" fileName="logs/textseek-server.log"
                     filePattern="logs/textseek-server-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <!-- 每天生成一个新文件 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小超过10MB时生成新文件 -->
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <!-- 最多保留7个日志文件 -->
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 根日志记录器 -->
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>

        <!-- 针对TextSeekServer的日志记录器 -->
        <Logger name="com.myth.TextSeekServer" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Logger>
    </Loggers>
</Configuration>
根据log4j2.xml 配置文件,日志文件将输出到 logs/textseek-server.log,并且会根据日期和文件大小进行滚动归档。为了确保日志能够正确输出,你需要创建 logs 目录,并确保程序有权限写入该目录
a. 创建 logs 目录
    在项目根目录下,右键点击 New > Directory,创建 logs 目录。
        目录路径:TextSeekServer/logs/。
    确保 logs 目录位于项目的根目录下,而不是 src 或 resources 目录中。
b. 确保 logs 目录的权限
    如果你在 Windows 系统上运行程序,确保程序有权限写入 logs 目录。
    如果你在Linux或macOS系统上运行程序,确保logs目录的权限允许程序写入:
    chmod 755 logs
c. 日志配置文件的路径
在 log4j2.xml 中,日志文件的路径是相对路径:
<RollingFile name="File" fileName="logs/textseek-server.log"
             filePattern="logs/textseek-server-%d{yyyy-MM-dd}-%i.log">
这意味着日志文件将输出到项目根目录下的 logs 目录中。
d. 运行程序并验证日志输出
    运行程序后,检查 logs 目录是否生成了日志文件:
        主日志文件:textseek-server.log。
        滚动归档文件:textseek-server-{日期}-{序号}.log。
    如果日志文件未生成,检查以下内容:
        确保 logs 目录存在且路径正确。
        确保程序有权限写入 logs 目录。
        检查 log4j2.xml 配置文件是否正确加载
 e. 日志配置文件的内容
你提供的 log4j2.xml 配置文件内容是正确的,以下是关键点说明:
    控制台输出:日志会输出到控制台。
    文件输出:日志会输出到 logs/textseek-server.log,并且每天或文件大小超过 10MB 时会滚动归档。
    日志级别:
        根日志记录器的级别是 info。
        com.myth.TextSeekServer 的日志级别是 debug
如果在Linux或macOS系统上你希望日志文件输出到其他目录,可以修改 fileName 和 filePattern 的路径。例如:
fileName="/var/logs/textseek-server.log"
filePattern="/var/logs/textseek-server-%d{yyyy-MM-dd}-%i.log"

7. 命令行程序转换为 Swing 项目
如果要将此命令行程序转换为 Swing 项目,只需在 TextSeekServer.java 中创建一个 Swing 窗口,并将逻辑移到 Swing 事件监听器中。例如
TextSeekServer.java(Swing 版本)
package com.myth;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        JFrame frame = new JFrame("TextSeekServer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);

        JButton button = new JButton("Test");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    // 测试 AESUtil
                    String encrypted = AESUtil.encrypt("Hello, World!");
                    String decrypted = AESUtil.decrypt(encrypted);
                    logger.info("Encrypted: " + encrypted);
                    logger.info("Decrypted: " + decrypted);

                    // 测试 DBUtil
                    Connection conn = DBUtil.getConnection();
                    logger.info("Database connection established: " + conn);
                    DBUtil.closeConnection();
                } catch (Exception ex) {
                    logger.error("Error occurred: ", ex);
                }
            }
        });

        frame.getContentPane().add(button);
        frame.setVisible(true);
    }
}

8. 项目结构示例
完成上述步骤后,项目结构应如下所示:
TextSeekServer/
├── src/
│   └── com/
│       └── myth/
│           ├── AESUtil.java
│           ├── DBUtil.java
│           └── TextSeekServer.java
├── resources/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
└── logs/

9. 验证目录结构
   9.1 打开 Project Structure(项目结构):
        进入 File > Project Structure。
   9.2 在 Modules 选项卡中,确保:
        src 目录被标记为 Sources (非常重要)。
        resources 目录被标记为 Resources(非常重要)。
   9.3 在 Libraries 选项卡中,确认 mariadb-java-client-3.1.4.jar 已添加。
10. 运行程序
    在 TextSeekServer.java 中编写 main 方法。
    右键点击 TextSeekServer.java,选择 Run 'TextSeekServer.main()'。
11. 将 Java 项目编译成可执行的 JAR 包,可以通过以下步骤完成。我们将使用
    IntelliJ IDEA 的内置功能来打包项目,并确保所有依赖项(如
    mariadb-java-client-3.1.4.jar)和配置文件(如 log4j2.xml 和
    *.properties)都包含在 JAR 包中。
   步骤 1:配置项目结构
    a)确保项目结构正确:
        src 目录包含源代码。
        resources 目录包含配置文件(如 log4j2.xml 和 *.properties)。
        lib 目录包含第三方 JAR 文件(如 mariadb-java-client-3.1.4.jar)。
    b)在 Project Structure 中,确保 resources 目录被标记为 Resources Root:
        进入 File > Project Structure > Modules。
        选择 src 目录,确保它被标记为 Sources。
        选择 resources 目录,确保它被标记为 Resources。
  步骤 2:创建 JAR 包的 Artifact
    a)进入 File > Project Structure > Artifacts。
    b)点击 + 按钮,选择 JAR > From modules with dependencies。
    c)在弹出的对话框中:
        Module:选择你的模块(例如 TextSeekServer)。
        Main Class:选择包含 main 方法的类(例如 com.myth.TextSeekServer)。
        点击 OK。
    d)在 Artifacts 选项卡中,确保以下内容:
        Output Layout 中包含了 src 目录的编译输出(.class 文件)。
        resources 目录的内容被包含在 JAR 包的根目录中。
        lib 目录中的 JAR 文件被包含在 JAR 包的 lib 目录中。
    e)点击 Apply 和 OK 保存配置。
步骤 3:构建 JAR 包
    a)进入 Build > Build Artifacts。(如果菜单 Build Artifacts 为灰色 表示缺少步骤 2)
    b)选择你刚刚创建的 Artifact(例如 TextSeekServer:jar),然后点击 Build。
    c)IntelliJ IDEA 会生成 JAR 包,并将其输出到 out/artifacts/TextSeekServer_jar/ 目录中。
步骤 4:验证 JAR 包
    a)打开生成的 JAR 包(例如 TextSeekServer.jar),检查以下内容:
        确保 com/myth/ 目录中包含编译后的 .class 文件。
        确保 log4j2.xml 和 *.properties 文件位于 JAR 包的根目录中。
        确保 lib/mariadb-java-client-3.1.4.jar 文件位于 JAR 包的 lib 目录中。
    b)如果发现缺少文件,可以手动编辑 Artifacts 配置,确保所有需要的文件和依赖项都被包含。
步骤 5:运行 JAR 包
    打开终端或命令提示符。
    导航到 JAR 包所在的目录:cd out/artifacts/TextSeekServer_jar
    运行 JAR 包:java -jar TextSeekServer.jar
步骤 6:处理依赖项
如果你的 JAR 包依赖外部 JAR 文件(如 mariadb-java-client-3.1.4.jar),可以通过以下方式处理:
方式 1:将依赖项打包到 JAR 包中
    在 Artifacts 配置中,确保所有依赖项都被包含在 JAR 包的 lib 目录中。
    在 MANIFEST.MF 中指定类路径:
        打开 Artifacts 配置,点击 Create Manifest 按钮,生成 MANIFEST.MF 文件。
        在 MANIFEST.MF 中添加 Class-Path 条目,例如:
Class-Path: lib/mariadb-java-client-3.1.4.jar
方式 2:使用外部依赖项
    将依赖项 JAR 文件放在一个单独的目录中(例如 lib)。
    运行 JAR 包时,通过 -cp 参数指定类路径:
java -cp TextSeekServer.jar:lib/* com.myth.TextSeekServer
步骤 7:打包为可执行 JAR(包含所有依赖项)
如果你希望将所有依赖项打包到一个可执行的 JAR 文件中,可以使用 Fat JAR 或 Uber JAR 的方式:
    a)在 Artifacts 配置中,选择 Extract to the target JAR,将所有依赖项解压并合并到主 JAR 文件中。
    b)重新构建 JAR 包。
项目结构示例
打包后的 JAR 包结构如下:
TextSeekServer.jar
├── com/
│   └── myth/
│       ├── AESUtil.class
│       ├── DBUtil.class
│       └── TextSeekServer.class
├── log4j2.xml
├── config.properties
├── dbconfig.properties
├── maintenance.properties
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
└── logs/


如果程序在运行时无法找到 *.properties 文件,例如
[main] ERROR com.myth.TextSeekServer - Error loading conf
ig file: config.properties (系统找不到指定的文件。)
java.io.FileNotFoundException: config.properties (系统找不到指定的文件。)
以下是解决这个问题的详细步骤:
1. 确保配置文件被打包到 JAR 文件中
    1.1 打开生成的 JAR 文件(例如 TextSeekServer.jar),检查以下内容:
        确保 config.properties、dbconfig.properties、maintenance.properties 和 log4j2.xml 文件位于 JAR 包的根目录中。
        如果这些文件缺失,说明它们在打包时没有被正确包含。
    1.2 在 IntelliJ IDEA 中,确保 resources 目录被标记为 Resources Root:
        进入 File > Project Structure > Modules。
        选择 resources 目录,确保它被标记为 Resources。
    1.3 在 Artifacts 配置中,确保 resources 目录的内容被包含在 JAR 包的根目录中:
        进入 File > Project Structure > Artifacts。
        选择你的 Artifact(例如 TextSeekServer:jar)。
        在 Output Layout 中,确保 resources 目录的内容被包含。
    1.4 重新构建 JAR 包:
        进入 Build > Build Artifacts。
        选择你的 Artifact,然后点击 Rebuild。
2. 确保程序正确加载配置文件
在 Java 程序中,加载资源文件(如 config.properties)时,应该使用 ClassLoader 来从类路径中加载文件,而不是直接使用文件路径。
修改代码以从类路径加载配置文件
例如,在 DBUtil.java 中,修改加载配置文件的代码:
import java.io.InputStream;
import java.util.Properties;

public class DBUtil {
    private static Connection connection;

    public static Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            Properties props = new Properties();
            try (InputStream input = DBUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties")) {
                if (input == null) {
                    throw new FileNotFoundException("dbconfig.properties not found in classpath");
                }
                props.load(input);
            } catch (IOException e) {
                throw new RuntimeException("Error loading dbconfig.properties", e);
            }
            String url = props.getProperty("db.url");
            String user = props.getProperty("db.user");
            String password = props.getProperty("db.password");
            connection = DriverManager.getConnection(url, user, password);
        }
        return connection;
    }

    public static void closeConnection() throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
    }
}
修改 TextSeekServer.java 中的日志配置加载方式
如果 log4j2.xml 也需要从类路径加载,确保 Log4j2 配置文件的加载方式正确:
import org.apache.logging.log4j.core.config.Configurator;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        // 从类路径加载 log4j2.xml
        Configurator.initialize(null, "classpath:log4j2.xml");

        logger.info("Starting TextSeekServer...");

        try {
            // 测试 AESUtil
            String encrypted = AESUtil.encrypt("Hello, World!");
            String decrypted = AESUtil.decrypt(encrypted);
            logger.info("Encrypted: " + encrypted);
            logger.info("Decrypted: " + decrypted);

            // 测试 DBUtil
            Connection conn = DBUtil.getConnection();
            logger.info("Database connection established: " + conn);
            DBUtil.closeConnection();
        } catch (Exception e) {
            logger.error("Error occurred: ", e);
        }
    }
}
3. 验证配置文件是否在 JAR 包中
    3.1 打开生成的 JAR 文件(例如 TextSeekServer.jar),检查以下文件是否存在于根目录:
        config.properties
        dbconfig.properties
        maintenance.properties
        log4j2.xml

    3.2 如果文件缺失,重新检查 Artifacts 配置,确保 resources 目录的内容被包含。
问题 1:配置文件仍然找不到
    确保 resources 目录被标记为 Resources Root。
    确保 resources 目录的内容被包含在 JAR 包的根目录中。
    确保程序使用 ClassLoader 从类路径加载文件。
问题 2:日志配置文件未生效
    确保 log4j2.xml 文件位于 JAR 包的根目录中。
    确保程序使用 Configurator.initialize(null, "classpath:log4j2.xml"); 加载日志配置文件。
=====================================================================
如果你希望 resources 目录下的配置文件(如 config.properties、dbconfig.properties 等)可以在运行 JAR 包之前由用户修改,而不是将这些文件打包到 JAR 包中,可以通过以下方式实现:
1. 将配置文件放在 JAR 包外部
将配置文件放在 JAR 包外部的某个目录中(例如与 JAR 包同一目录下的 config 目录),并在程序中动态加载这些文件。
2. 修改项目结构
    2.1 在项目根目录下创建一个 config 目录,用于存放配置文件:
TextSeekServer/
├── config/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── src/
│   └── com/
│       └── myth/
│           ├── AESUtil.java
│           ├── DBUtil.java
│           └── TextSeekServer.java
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
├── logs/

└── out/
    └── artifacts/
        └── TextSeekServer_jar/
            └── TextSeekServer.jar
    2.2 将 resources 目录中的配置文件移动到 config 目录中。
3. 修改代码以加载外部配置文件
在程序中,使用文件的绝对路径或相对路径来加载外部的配置文件。
示例代码:加载外部配置文件
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class DBUtil {
    private static Connection connection;

    public static Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            Properties props = new Properties();
            try (InputStream input = new FileInputStream("config/dbconfig.properties")) {
                props.load(input);
            } catch (IOException e) {
                throw new RuntimeException("Error loading dbconfig.properties", e);
            }
            String url = props.getProperty("db.url");
            String user = props.getProperty("db.user");
            String password = props.getProperty("db.password");
            connection = DriverManager.getConnection(url, user, password);
        }
        return connection;
    }

    public static void closeConnection() throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
    }
}
加载外部日志配置文件
如果 log4j2.xml 也需要从外部加载,可以在程序启动时指定配置文件路径:
import org.apache.logging.log4j.core.config.Configurator;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        // 从外部加载 log4j2.xml
        Configurator.initialize(null, "config/log4j2.xml");

        logger.info("Starting TextSeekServer...");

        try {
            // 测试 AESUtil
            String encrypted = AESUtil.encrypt("Hello, World!");
            String decrypted = AESUtil.decrypt(encrypted);
            logger.info("Encrypted: " + encrypted);
            logger.info("Decrypted: " + decrypted);

            // 测试 DBUtil
            Connection conn = DBUtil.getConnection();
            logger.info("Database connection established: " + conn);
            DBUtil.closeConnection();
        } catch (Exception e) {
            logger.error("Error occurred: ", e);
        }
    }
}
4. 打包 JAR 文件
    4.1 在 IntelliJ IDEA 中,确保 resources 目录不再包含配置文件。
    4.2 进入 File > Project Structure > Artifacts,确保配置文件中没有包含 config 目录。
    4.3 重新构建 JAR 包:
        进入 Build > Build Artifacts。
        选择你的 Artifact,然后点击 Rebuild。
5. 运行 JAR 包
    5.1 将生成的 JAR 文件和 config 目录放在同一目录下:
your-deployment-folder/
├── config/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
├── logs/

└── TextSeekServer.jar
     5.2 打开终端或命令提示符,导航到 JAR 包所在的目录:
cd your-deployment-folder
     5.3 运行 JAR 包:
java -jar TextSeekServer.jar
6. 允许用户修改配置文件
用户可以在运行 JAR 包之前,直接编辑 config 目录中的配置文件(如 config.properties、dbconfig.properties 等),程序会动态加载这些文件。
7. 注意事项
    确保 config 目录中的配置文件路径与代码中的路径一致。
    如果配置文件路径需要灵活配置,可以通过命令行参数或环境变量指定配置文件路径。例如:
java -Dconfig.path=/path/to/config -jar TextSeekServer.jar
然后在代码中读取 config.path 系统属性:
String configPath = System.getProperty("config.path", "config");
String dbConfigPath = configPath + "/dbconfig.properties";

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI-Cache2: 高效Python缓存库

FastAPI-Cache2是一个强大而灵活的Python缓存库&#xff0c;专为提升应用性能而设计。虽然其名称暗示与FastAPI框架的紧密集成&#xff0c;但实际上它可以在任何Python项目中使用&#xff0c;为开发者提供简单而高效的缓存解决方案。 在现代应用开发中&#xff0c;性能优化至关…

android开发:zxing-android-embedded竖屏扫描功能

Android 点击按钮调用竖屏二维码扫描 提示&#xff1a;zxing-android-embedded插件已过时&#xff0c;建议更换别的。 场景&#xff1a;Home页面上有个扫描按钮&#xff0c;点击后打开摄像头完成扫描功能&#xff0c;扫描时要求竖屏。 方案&#xff1a;使用zxing-android-embe…

指令补充+样式绑定+计算属性+监听器

一、指令补充 1. 指令修饰符 1. 作用: 借助指令修饰符, 可以让指令更加强大 2. 分类: 1> 按键修饰符: 用来检测用户的按键, 配合键盘事件使用. keydown 和 keyup 语法: keydown.enter/v-on:keydown.enter 表示当enter按下的时候触发 keyup.enter/v-on:keyup.enter 表示当…

Python基于时间序列分析的降雨量预测系统的设计与实现【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

【2022】【论文笔记】基于相变材料的光学激活的、用于THz光束操作的编码超表面——

前言 类型 太赫兹 + 超表面 太赫兹 + 超表面 太赫兹+超表面 期刊 A D V A N C E D    O P T I C A L    M A T E R I A L S ADVANCED \; OPTICAL \; MATERIALS

[VolgaCTF 2025] Baby-Welcome,BrokeBroke,Field Rules

这个就做了俩题&#xff0c;其实再努力点就是3个。不过最近也算是好成绩了&#xff0c;45名。国外的比赛对我来说还算是比较难的。 Baby-Welcome 这个流程还挺麻烦&#xff0c;先是注册用户&#xff0c;登录的用户可以给其它用户发消息。收到消息的用户可以显示消息&#xff…

再见VS Code!Google IDE 正颠覆传统开发体验

云端开发的革命&#xff1a;Google Project IDX 如何颠覆传统开发体验 在软件开发领域&#xff0c;Google 最新推出的 Project IDX 绝非仅仅是另一个“基于浏览器的 VS Code”——它是一次真正的范式转变。与 VS Code、Cursor 等传统工具不同&#xff0c;IDX 是一个完全云原生的…

NLP高频面试题(三十六)——深入理解思维链(Chain-of-Thought)提示方法

一、什么是思维链提示&#xff08;CoT&#xff09;&#xff1f; 思维链提示是一种新颖的提示方法&#xff0c;通过向模型提供少量的推理步骤示范&#xff0c;让语言模型在给出最终答案之前展示出自己的推理过程。其核心思想在于鼓励模型模仿人类逐步推理的方式&#xff0c;从而…

探索新一代大模型代理(LLM agent)及其架构

在人工智能大模型(AI)的浪潮中&#xff0c;2023年我们见证了检索增强生成(Retrieval Augmented Generation, RAG)的兴起&#xff0c;而2024年则无疑成为了“代理”agent的元年。各大AI企业纷纷投身于聊天机器人代理的研发中&#xff0c;工具如MultiOn通过与外部网站的连接实现了…

26考研——线性表_ 线性表的链式表示_双循环链表(2)

408答疑 文章目录 三、 线性表的链式表示双循环链表单链表与双链表的比较单链表的特点双链表的特点 双链表上基本操作的实现双链表的插入操作双链表的删除操作 双链表的代码实操定义结点创建一个结点带头结点的双链表初始化创建双链表打印双链表查找结点插入结点在指定节点后插…

【备忘】在Docker中安装宝塔面板,实现环境隔离,又能快速迁移服务器环境

我的环境是阿里云服务器&#xff08;新环境&#xff09; 【待继续】 【新方法】 我已经安装了docker&#xff0c;所以这里我先卸载。 卸载命令&#xff1a; sudo yum remove docker* containerd.io -y Docker默认保存位置是/var/lib/docker/&#xff0c;卸载Docker时&#x…

池化技术的深度解析与实践指南【大模型总结】

池化技术的深度解析与实践指南 池化技术作为计算机系统中的核心优化手段&#xff0c;通过资源复用和预分配机制显著提升系统性能。本文将从原理、实现到最佳实践&#xff0c;全方位剖析池化技术的核心要点&#xff0c;并结合实际案例说明其应用场景与调优策略。 一、池化技术的…

HCIP【BGP协议(详解)】

目录 1 BGP协议产生背景 2 BGP协议特性 2.1 自治系统间路由传播 2.2 路由矢量协议 2.3 防环机制 2.4 基于TCP传输 2.5 路由更新机制 2.6 丰富的路由属性 2.7 支持CIDR和路由聚合 2.8 路由过滤和策略控制 2.9 动态对等体功能 3 BGP基本术语 4 BGP规划问题 4.1 路…

VirtualBox 配置双网卡(NAT + 桥接)详细步骤

在 VirtualBox 中为 CentOS 虚拟机配置双网卡&#xff08;NAT 桥接&#xff09;&#xff0c;使其既能访问外网&#xff08;NAT&#xff09;&#xff0c;又能与宿主机&#xff08;Windows 10&#xff09;或局域网通信&#xff08;桥接&#xff09;。 步骤 1&#xff1a;关闭虚…

Upload-labs靶场通关

之前搭好了靶场&#xff0c;Upload-labs 靶场搭建 及一句话木马的原理与运用-CSDN博客 今天开始通关并写详细流程 Pass-1 来到靶场的第一关 先随便上传php 代码 点击上传 发现文件类型被限制了 方法1&#xff1a; 改文件后缀为合法文件&#xff08;.jpg .png .gif&#xf…

[GN] Python3基本数据类型 -- 与C的差异

Python3 面向对象 文章目录 Python3的基本数据类型6个标准的数据类型NumbersStringListtupleSetsDictionaries Python运算符逻辑 运算符成员运算符身份运算符 Python3 数字Python3 序列序列切片序列相加序列相乘序列相关内置函数 Python3 列表访问列表的值更新列表删除列表元素…

MCP over MQTT:EMQX 开启物联网 Agentic 时代

前言 随着 DeepSeek 等大语言模型&#xff08;LLM&#xff09;的广泛应用&#xff0c;如何找到合适的场景&#xff0c;并基于这些大模型构建服务于各行各业的智能体成为关键课题。在社区中&#xff0c;支持智能体开发的基础设施和工具层出不穷&#xff0c;其中&#xff0c;Ant…

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…

学透Spring Boot — 009. Spring Boot的四种 Http 客户端

目录 常见的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板类 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的问题 RestClient RestClinet的基本使用 RestClient的自动配置 RestClient 序列化对象 异常处理 onStatus …

leetcode117 填充每个节点的下一个右侧节点指针2

LeetCode 116 和 117 都是关于填充二叉树节点的 next 指针的问题&#xff0c;但它们的区别在于 树的类型 不同&#xff0c;117与 116 题类似&#xff0c;但给定的树是 普通二叉树&#xff08;不一定完全填充&#xff09;&#xff0c;即某些节点可能缺少左或右子节点。 树的结构…