「LangChain4j入门 — JavaAI程序」

█ 什么是大模型?

大模型,英文名叫 Large Model,大型模型。早期的时候,也叫 Foundation Model,基础模型。

大模型是一个简称。完整的叫法,应该是 “人工智能预训练大模型”。预训练,是一项技术,我们后面再解释。

我们现在口头上常说的大模型,实际上特指大模型的其中一类,也是用得最多的一类——语言大模型(Large Language Model,也叫大语言模型,简称 LLM)。

除了语言大模型之外,还有视觉大模型、多模态大模型等。现在,包括所有类别在内的大模型合集,被称为广义的大模型。而语言大模型,被称为狭义的大模型。

从本质来说,大模型,是包含超大规模参数(通常在十亿个以上)的神经网络模型。

最简单的 JavaAI 程序

  1. 引入依赖
<dependencies>
  <!--langchain4j-->
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
  </dependency>
  <!--springMVC-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
</dependencies>
  1. 编写配置文件
langchain4j:
  open-ai:
    # 一下配置均从具体的大模型开放平台获取
    chat-model:
      api-key: sk-xxxx# 密钥
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 # 模型访问链接
      model-name: qwen-max # 模型名称

国内流行的几个大模型开放平台:

  1. 百度千帆大模型:千帆大模型平台-百度智能云千帆
  2. 智谱 AI:智谱AI开放平台
  3. 阿里百炼大模型:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
  4. 腾讯混元大模型:腾讯混元大模型_大语言模型_自然语言大模型- 腾讯云
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/5
 * @apiNote chat控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private ChatLanguageModel chatLanguageModel;

    @GetMapping("/qwen")
    public String chatAi(String message) {
        String generate = chatLanguageModel.generate(message);
        return generate;
    }
}
  1. 访问控制器

LangChain4j 高级

包含 Java 代码配置模型,日志配置

  1. 引入依赖
<dependencies>
  <!--日志配置-->
  <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.5.8</version>
  </dependency>
  <!--SpringMVC-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
  <!--LangChain4j-->
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
  </dependency>
  <!--LangChain4j-->
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
  </dependency>
</dependencies>
  1. 编写日志配置文件
logging:
  level:
    dev:
      langchain4j: DEBUG
      ai4j:
        openai4j: DEBUG
  1. 自定义模型
/**
 * @version v1.0
 * @apiNote 接口
 * @author OldGj 2024/12/6
 */
public interface IServiceAssistant {
    String chat(String message);
}
  1. 编写配置类
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {

    /**
     * 提供模型源信息
     * @return
     */
    @Bean
    public ChatLanguageModel getChatLanguageModel() {
        return OpenAiChatModel.builder()
                .apiKey("sk-xxxx") // API密钥
                .logRequests(true) // 开启请求日志
                .logResponses(true) // 开启响应日志
                .modelName("qwen-max")  // 模型名称
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    /**
     * 不同AI服务与模型的解耦
     * @return AI服务
     */
    @Bean
    public IServiceAssistant getIServiceAssistant() {
        // 解读:IServiceAssistant这个AI服务类使用的大模型是 >> getChatLanguageModel()这个方法返回的大模型
        return AiServices.builder(IServiceAssistant.class)
                .chatLanguageModel(getChatLanguageModel())
                .build();
    }
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private ChatLanguageModel chatLanguageModel;
    @Autowired
    private IServiceAssistant iServiceAssistant;

    @GetMapping("/qwen")
    public String chat(String message) {
        return chatLanguageModel.generate(message);
    }

    // 自定义的AI服务,本质上使用的模型还是千问,和上面的接口一样
    @GetMapping("/assistant")
    public String chat2(String message) {
        return iServiceAssistant.chat(message);
    }
}

LangChain4j 流式输出

  1. 引入依赖
<dependencies>
  <!--日志-->
  <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.5.8</version>
  </dependency>
  <!--SpringMVC-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
  </dependency>
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
  </dependency>
  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-reactor</artifactId>
    <version>0.36.2</version>
  </dependency>
</dependencies>
  1. 日志配置文件
logging:
  level:
    dev:
      langchain4j: DEBUG
      ai4j:
        openai4j: DEBUG
  1. 编写 AI 服务接口「注意返回值为 Flux<String>类型」
/**
 * @version v1.0
 * @apiNote AI服务接口
 * @author OldGj 2024/12/6
 */
public interface IServiceAssistant {
    Flux<String> chat(String message);
}
  1. 编写配置类

支持流式输出需要StreamingChatLanguageModel这个 Bean

/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {

    /**
     * 提供模型源信息 >> 流式输出
     * @return
     */
    @Bean
    public StreamingChatLanguageModel streamingChatLanguageModel() {
        return OpenAiStreamingChatModel.builder()
                .apiKey("sk-xxxx") // 密钥
                .logRequests(true) // 开启日志
                .logResponses(true)
                .modelName("qwen-max")  // 模型名称
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    /**
     * 提供流式输出功能的AI服务
     * @return
     */
    @Bean
    public IServiceAssistant getIServiceAssistant() {
        return AiServices.builder(IServiceAssistant.class)
                .streamingChatLanguageModel(streamingChatLanguageModel())
                .build();
    }
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private IServiceAssistant iServiceAssistant;

    @GetMapping("/assistant")
    public Flux<String> chat(String message) {
        return iServiceAssistant.chat(message);
    }
}
  1. 结果展示

LangChain4j 视觉理解

  1. 引入依赖
<dependencies>
    <!--日志-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.8</version>
    </dependency>
    <!--SpringMVC-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-reactor</artifactId>
        <version>0.36.2</version>
    </dependency>
</dependencies>
  1. 编写配置文件
logging:
  level:
    dev:
      langchain4j: DEBUG
      ai4j:
        openai4j: DEBUG
spring:
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 5MB
  1. 编写模型配置类
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {
    
    /**
     * 提供模型源信息
     * @return
     */
    @Bean
    public ChatLanguageModel getChatLanguageModel() {
        return OpenAiChatModel.builder()
                .apiKey("sk-xxxx") // 密钥
                .logRequests(true) // 开启日志
                .logResponses(true)
                .modelName("qwen-vl-max")  // 模型名称
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private ChatLanguageModel chatLanguageModel;

    /**
     * AI视觉理解
     * @param file 上传的图片
     * @param message 理解的方向
     */
    @PostMapping("/image")
    public String image(MultipartFile file, String message) throws IOException {
        // 获得图片的base64编码
        InputStream inputStream = file.getInputStream();
        byte[] bytes = inputStream.readAllBytes();
        String base64 = Base64.getEncoder().encodeToString(bytes);
        // 构造用户数据
        UserMessage userMessage =
                UserMessage.from(
                        TextContent.from(message),
                        ImageContent.from(base64, "image/jpg")
                );
        return chatLanguageModel.generate(userMessage).content().text();
    }
}
  1. 结果展示

LangChain4j 文生图

  1. 配置依赖
<dependencies>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-zhipu-ai</artifactId>
        <version>0.36.2</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
       <dependencies>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-zhipu-ai</artifactId>
        <version>0.36.2</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-reactor</artifactId>
        <version>0.36.2</version>
    </dependency>
</dependencies> <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-reactor</artifactId>
        <version>0.36.2</version>
    </dependency>
</dependencies>
  1. 编写配置类
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {

    @Bean
    public ImageModel imageModel() {
        return ZhipuAiImageModel.builder()
        .apiKey("xxxx")
        .connectTimeout(Duration.ofSeconds(10000))
        .callTimeout(Duration.ofSeconds(10000))
        .readTimeout(Duration.ofSeconds(10000))
        .writeTimeout(Duration.ofSeconds(10000))
        .logRequests(true)
        .logResponses(true)
        .build();
    }
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/generate")
public class ChatController {

    @Autowired
    private ImageModel imageModel;


    @GetMapping("/image")
    public String generateImage(String msg) {
        Response<Image> imageResponse = imageModel.generate(msg);
        return imageResponse.content().url().toString();
    }
}

LangChain4j 文本记忆

  1. 配置依赖
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mapdb</groupId>
            <artifactId>mapdb</artifactId>
            <version>3.0.10</version>
        </dependency>
    </dependencies>
  1. 编写配置类
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {

    /**
     * 提供模型源信息
     * @return
     */
    @Bean
    public ChatLanguageModel getChatLanguageModel() {
        return OpenAiChatModel.builder()
                .apiKey("sk-xxxx") // 密钥
                .logRequests(true) // 开启日志
                .logResponses(true)
                .modelName("qwen-max")  // 模型名称
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    @Bean
    public IServiceAssistant getIServiceAssistant() {
        return AiServices.builder(IServiceAssistant.class)
                .chatLanguageModel(getChatLanguageModel())
                .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10)) // 聊天会话的最大条数
                .build();
    }
}
  1. 编写 AI 接口
/**
 * @version v1.0
 * @apiNote 接口
 * @author OldGj 2024/12/6
 */
public interface IServiceAssistant {
    String chat(@MemoryId Long userId, @UserMessage String message);
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private ChatLanguageModel chatLanguageModel;
    @Autowired
    private IServiceAssistant iServiceAssistant;

    @GetMapping("/qwen")
    public String chat(String message) {
        return chatLanguageModel.generate(message);
    }

    @GetMapping("/memory")
    public String chat2(Long userId, String message) {
        return iServiceAssistant.chat(userId, message);
    }
}

LangChain4j 本地文本记忆

mapdb 入门

public class AppTest extends TestCase {

    /**
     * mapdb写入
     */
    public void test() {
        // 创建或打开一个DB文件
        File dbFile = new File("mydb");
        DB db = DBMaker.fileDB(dbFile).make();
        // 创建一个HashMap并设置名称
        HTreeMap<String, String> map = db.hashMap("myMap")
                .keySerializer(Serializer.STRING)
                .valueSerializer(Serializer.STRING).createOrOpen();
        // 在Map中存储数据
        map.put("key1", "value1");
        map.put("key2", "value2");
        // 提交事务以确保数据被持久化到磁盘
        db.commit();
        // 关闭数据库连接
        db.close();
    }

    /**
     * mapdb读取
     */
    public void test2() {
        File dbFile = new File("mydb");
        // 重新打开数据库以检索数据
        DB db = DBMaker.fileDB(dbFile).make();
        // 从Map中检索数据
        HTreeMap<String, String> map = db.hashMap("myMap")
                .keySerializer(Serializer.STRING)
                .valueSerializer(Serializer.STRING).createOrOpen();
        String value1 = map.get("key1");
        String value2 = map.get("key2");
        System.out.println("Value for key1: " + value1);
        System.out.println("Value for key2: " + value2);
        // 关闭数据库连接
        db.close();
    }
}
  1. 配置依赖
<dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mapdb</groupId>
            <artifactId>mapdb</artifactId>
            <version>3.0.10</version>
        </dependency>
    </dependencies>
  1. 编写 AI 接口
/**
 * @version v1.0
 * @apiNote 接口
 * @author OldGj 2024/12/6
 */
public interface IServiceAssistant {


    String chat(@MemoryId Integer userId, @UserMessage String message);
}
  1. 自定义的持久化聊天存储器
/**
 * @version v1.0
 * @author OldGj 2024/12/7
 * @apiNote 自定义的持久化聊天存储器 - 使用MapDB进行本地缓存
 */
public class ChatMemoryStoreByMapDB implements ChatMemoryStore {

    // 创建 MapDB
    private final DB db = DBMaker.fileDB("./chat-memory.db")
            .transactionEnable()
            .make();
    // 创建map对象
    private final Map<Integer, String> map = db.hashMap("messages")
            .keySerializer(Serializer.INTEGER)
            .valueSerializer(Serializer.STRING)
            .createOrOpen();

    /**
     * 获取消息
     * @param
     * @return
     */
    @Override
    public List<ChatMessage> getMessages(Object memoryId) {
        String json = map.get((Integer) memoryId);
        return ChatMessageDeserializer.messagesFromJson(json);
    }

    /**
     * 更新消息
     * @param
     * @param list
     */
    @Override
    public void updateMessages(Object memoryId, List<ChatMessage> list) {
        String json = ChatMessageSerializer.messagesToJson(list);
        map.put((Integer) memoryId, json);
        db.commit();
    }

    /**
     * 删除消息
     * @param
     */
    @Override
    public void deleteMessages(Object memoryId) {
        map.remove((Integer) memoryId);
        db.commit();
    }
}
  1. 编写配置类
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 配置类
 */
@Configuration
public class LLMConfig {

    /**
     * 提供模型源信息
     * @return
     */
    @Bean
    public ChatLanguageModel getChatLanguageModel() {
        return OpenAiChatModel.builder()
                .apiKey("sk-xxxx") // 密钥
                .logRequests(true) // 开启日志
                .logResponses(true)
                .modelName("qwen-max")  // 模型名称
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    @Bean
    public IServiceAssistant getIServiceAssistant() {
        return AiServices.builder(IServiceAssistant.class)
                .chatLanguageModel(getChatLanguageModel())
                .chatMemoryProvider(chatMemoryProvider()) // 聊天存储器生产者
                .build();
    }

    @Bean
    public ChatMemoryStore chatMemoryStore() {
        return new ChatMemoryStoreByMapDB();
    }

    @Bean
    public ChatMemoryProvider chatMemoryProvider() {
        return memoryId -> MessageWindowChatMemory.builder()
                // 设置消息窗口 ID
                .id(memoryId)
                // 设置消息最大条数,默认为 10
                .maxMessages(20)
                // 设置聊天存储器,使用自定义的
                .chatMemoryStore(chatMemoryStore())
                .build();
    }
}
  1. 编写控制器
/**
 * @version v1.0
 * @author OldGj 2024/12/6
 * @apiNote 控制器
 */
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private IServiceAssistant iServiceAssistant;


    @GetMapping("/memory")
    public String chat2(Integer userId, String message) {
        return iServiceAssistant.chat(userId, message);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SQL】语句练习

1. 更新 1.1单表更新 例1: 所有薪水低于30000的员工薪水增加10% SQL命令&#xff1a; update employee set salarysalary*1.1 where salary < 30000; 1.2多表更新 例1: 将下图两表张三的语文成绩从95修改为80 SQL命令&#xff1a; update exam set score80 where subjec…

蓝桥杯刷题——day6

蓝桥杯刷题——day6 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 小明发现49很有趣&#xff0c;首先&#xff0c;它是个平方数。它可以拆分为4和9&#xff0c;拆分出来的部分也是平方数。169 也有这个性质&#xff0c;我们权且称它们为&#xff1a;拼接平方数…

SQL中的联结表

本文介绍什么是联结&#xff0c;为什么使用联结&#xff0c;以及如何编写使用联结的SELECT语句。 1. 联结 SQL最强大的功能之一就是能在数据查询的执行中联结&#xff08;join&#xff09;表。联结是SQL的SELECT能执行的最重要的操作&#xff0c;理解联结及其语法是学习SQL的…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…

SQL在线格式化 - 加菲工具

SQL在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果

vs 调试

常用&#xff1a; 调试->窗口-> 断点 监视 自动窗口 局部变量 调用堆栈 内存 反汇编&#xff08;也可以右键&#xff0c;转到反汇编&#xff09; 寄存器 快捷键&#xff1a; F5:启用调试&#xff0c;经常用来跳到下一个断点处 F9创建断点和取消断点。断点的重要作用&…

25. 深浅拷贝

一、什么是浅拷贝 只对对象的最顶层进行的拷贝称为 浅拷贝。我们可以用 copy 模块中的 copy() 方法实现浅拷贝。 import copya [11, 22, 33] b [44, 55, 66] c [a, b] d copy.copy(c)print(f"c: {c}") print(f"d: {d}") print(f"c d: {c d}&q…

docker简单命令

docker images 查看镜像文件 docker ps -a 查看容器文件 docker rm 0b2 删除容器文件&#xff0c;id取前三位即可 docker rmi e64 删除镜像文件&#xff08;先删容器才能删镜像&#xff09;&#xff0c;id取前三位即可 在包含Dockerfile文件的目录…

【Java】4、虚拟机 JVM

目录 Java内存区域详解(重点) JVM垃圾回收详解(重点) 类文件结构详解 类加载过程详解 类加载器详解(重点) 最重要的JVM参数总结 JDK监控和故障处理工具总结 JVM线上问题排查和性能调优案例 参考&#xff1a; JVM 核心技术 32 讲 深入浅出 Java 虚拟机

谷歌浏览器的无障碍功能介绍

在数字化时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。然而&#xff0c;并不是所有人都能平等地享受网络带来的便利。为了帮助有特殊需求的人士更好地访问和使用网络内容&#xff0c;谷歌浏览器推出了一系列无障碍功能。这些功能旨在提升视力障碍、听力障碍及其…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

从斯柯达和大众汽车安全漏洞事件剖析谈软件安全设计

一、事件概述 2022年&#xff0c;斯柯达和大众汽车被曝出存在一系列安全漏洞&#xff0c;这一事件引起了广泛关注。据估算&#xff0c;这些漏洞可能涉及超过 140 万辆汽车&#xff0c;涵盖斯柯达速派 III&#xff08;Skoda Superb III&#xff09;、斯柯达柯珞克&#xff08;S…

Hyperledger Fabric 2.x 环境搭建

Hyperledger Fabric 是一个开源的企业级许可分布式账本技术&#xff08;Distributed Ledger Technology&#xff0c;DLT&#xff09;平台&#xff0c;专为在企业环境中使用而设计&#xff0c;与其他流行的分布式账本或区块链平台相比&#xff0c;它有一些主要的区别。 环境准备…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…

metinfo的csrf漏洞复现

http://localhost/metinfo/install/index.php 管理员admin登录 抓修改信息包 进入点击受害链接 localhost/333.html 管理员被修改密码原来root错误被强制退出 输入密码123456登录正常

jclasslib Bytecode Viewer 安装

IDEA 2023.1.3 Settings->Plugins->Marketplace&#xff0c;搜索jclasslib Bytecode Viewer, install,apply 选中你所要分析的类&#xff0c;view->show bytecode with jclasslib gaoding

智能高效的IDE GoLand v2024.3全新发布——支持最新Go语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议&#xff0c;通过一步撤消快速安全重构&#xff0c;智能代码完成&#xff0c;死代码检测和文档提示帮助所有 Go 开发人员&#xff0c;从新手到经验丰富的专业人士&#xff0c;创建快速、高效、和可靠的…

Android学习路线图

‌Android系统的开发始于2003年&#xff0c;最初由安迪鲁宾在危险公司&#xff08;Danger, Inc.&#xff09;开发。2005年&#xff0c;Google收购了危险公司&#xff0c;并将其移动开发团队纳入旗下。2007年&#xff0c;Google正式发布了Android的第一个版本&#xff0c;并随后…

【含开题报告+文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

开题报告 近年来&#xff0c;随着互联网技术的迅猛发展&#xff0c;人们的生活方式、消费习惯以及信息交流方式都发生了深刻的变化。旅游业作为国民经济的重要组成部分&#xff0c;其信息化、网络化的发展趋势也日益明显。旅游论坛作为旅游信息交流和分享的重要平台&#xff0…

CTFshow-php特性(Web89-115)

CTFshow-php特性(Web89-115) Web89&#xff08;intval&#xff09; <?php include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num))…