百度智能云+SpringBoot=AI对话【人工智能】
百度智能云+SpringBoot=AI对话【人工智能】
- 前言
- 版权
- 推荐
- 百度智能云+SpringBoot=AI对话【人工智能】
- 效果演示
- 登录
- AI对话
- 项目结构
- 后端开发
- pom和properties
- sql_table和entity
- dao和mapper
- service和impl
- config和util
- LoginController和ChatController
- 前端开发
- css和js
- login.html和chat.html
- 后言
- 最后
前言
2024-3-20 19:41:47
使用百度千帆平台的大模型,完成一个简单的AI对话聊天
以下内容源自《【人工智能】》
仅供学习交流使用
版权
禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话
推荐
Gitee项目地址: 日星月云 / AI对话
GitHub项目地址:jsss-1/qianfan
百度千帆模型初次体验【人工智能】
百度智能云+SpringBoot=AI对话【人工智能】
通过上篇,我们成功地完成了初次对大模型的使用
本篇,我将带大家开发一个AI对话聊天框
效果演示
登录
输入用户名,点击登录
返回“登录成功”

查询状态

AI对话
页面

输入内容,点击回车即可提问



项目结构

后端开发
pom和properties
pom.xml
SpringBoot2.4.2+JDK8
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>qianfan</artifactId><version>0.0.1-SNAPSHOT</version><name>qianfan</name><description>qianfan</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 千帆大模型平台--><dependency><groupId>com.baidubce</groupId><artifactId>qianfan</artifactId><version>0.0.1</version></dependency><!-- thymeleaf 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- lombok 依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- mysql 依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mybatis 依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
application.properties
spring.application.name=qianfan# Qianfan
QIANFAN_ACCESS_KEY=你的AK
QIANFAN_SECRET_KEY=你的SK# ServerProperties
server.port=8080
server.servlet.context-path=# ThymeleafProperties
spring.thymeleaf.cache=false# mysql
spring.datasource.url=jdbc:mysql://localhost:3306/ai?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.jsss.entity
# 生成主键
mybatis.configuration.useGeneratedKeys=true
# 驼峰命名
mybatis.configuration.mapUnderscoreToCamelCase=true
sql_table和entity
ai.sql
create table conversation
(id int auto_incrementprimary key,username varchar(16) null,user_message text null,bot_message text null,create_time varchar(32) null
);
**enntity.Conversation **
package com.jsss.qianfan.entity;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Conversation {private Integer id;private String username;private String userMessage;private String botMessage;private String createTime;}
dao和mapper
**dao.ChatMapper **
package com.jsss.qianfan.dao;import com.jsss.qianfan.entity.Conversation;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface ChatMapper {List<Conversation> getByUsername(String username);void insert(Conversation conversation);}
**mapper/ChatMapper.xml **
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.jsss.qianfan.dao.ChatMapper"><!-- 定义SQL映射关系 --><!-- 根据username查询conversation记录 --><select id="getByUsername" resultType="com.jsss.qianfan.entity.Conversation" parameterType="string">SELECT * FROM conversation WHERE username = #{username}</select><!-- 插入新的conversation记录 --><insert id="insert" parameterType="com.jsss.qianfan.entity.Conversation">INSERT INTO conversation (username, user_message, bot_message, create_time) VALUES (#{username},#{userMessage},#{botMessage},#{createTime})</insert></mapper>
service和impl
service.ChatService
package com.jsss.qianfan.service;import com.jsss.qianfan.entity.Conversation;import java.util.List;public interface ChatService {void addChat(Conversation conversation);List<Conversation> searchByUsername(String username);}
impl.ChatServiceImpl
package com.jsss.qianfan.service.impl;import com.jsss.qianfan.dao.ChatMapper;
import com.jsss.qianfan.entity.Conversation;
import com.jsss.qianfan.service.ChatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class ChatServiceImpl implements ChatService {@AutowiredChatMapper chatMapper;@Overridepublic void addChat(Conversation conversation) {chatMapper.insert(conversation);}@Overridepublic List<Conversation> searchByUsername(String username) {return chatMapper.getByUsername(username);}
}
config和util
configuration.QianfanConfig
package com.jsss.qianfan.configuration;import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.core.auth.Auth;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class QianfanConfig {@Value("${QIANFAN_ACCESS_KEY}")String ak;@Value("${QIANFAN_SECRET_KEY}")String sk;@Beanpublic Qianfan qianFan() {return new Qianfan(Auth.TYPE_OAUTH, ak, sk);}
}
util.QianfanUtil
package com.jsss.qianfan.util;import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class QianfanUtil {@AutowiredQianfan qianfan;public String addMessage(String content) {ChatResponse response = qianfan.chatCompletion()//.model("ERNIE-Bot-4") //使用model指定预置模型 默认模型是ERNIE-Bot-turbo.addMessage("user", content) // 添加用户消息 (此方法可以调用多次,以实现多轮对话的消息传递).temperature(0.7) // 自定义超参数.execute(); // 发起请求return response.getResult();}public void executeStream(String content) {qianfan.chatCompletion().addMessage("user", content).executeStream() // 发起流式请求.forEachRemaining(chunk -> System.out.print(chunk.getResult())); // 流式迭代,并打印消息}}
LoginController和ChatController
controller.LoginController
package com.jsss.qianfan.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@Controller
public class LoginController {@GetMapping("/login")public String login(){return "login";}@PostMapping("/login")@ResponseBodypublic String login(HttpServletRequest request,String username){HttpSession session = request.getSession();session.setAttribute("username",username);return "登录成功";}@GetMapping("/logout")@ResponseBodypublic String logout(HttpServletRequest request,String username){HttpSession session = request.getSession();session.removeAttribute("username");return "登出成功";}@GetMapping("/status")@ResponseBodypublic String status(HttpServletRequest request){HttpSession session = request.getSession();String username =(String)session.getAttribute("username");if (username!=null&&!username.isEmpty()){return username;}else {return "没有登录";}}
}
controller.ChatController
package com.jsss.qianfan.controller;import com.jsss.qianfan.entity.Conversation;
import com.jsss.qianfan.service.ChatService;
import com.jsss.qianfan.util.QianfanUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;@Controller
@RequestMapping("chat")
public class ChatController {// List<Conversation> conversations=new ArrayList<>();
//
// static int id=1;
//
// {
// conversations.add(new Conversation(id++,"1","你好","抱歉,网络出现异常,请你重试或联系客服!TooManyRequests", format(new Date())));
// conversations.add(new Conversation(id++,"1","你好","抱歉,网络出现异常,请你重试或联系客服!TooManyRequests", format(new Date())));
// }@AutowiredQianfanUtil qianfanUtil;@AutowiredChatService chatService;private String format(Date date){return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}@GetMapping("/list")public String getChat(HttpServletRequest request,Model model){String username= (String) request.getSession().getAttribute("username");List<Conversation> conversations=chatService.searchByUsername(username);model.addAttribute("conversations",conversations);return "chat";}@PostMapping("/chat")public String chat(HttpServletRequest httpServletRequest,@RequestBody Map<String, String> request){String username= (String) httpServletRequest.getSession().getAttribute("username");String content = request.get("content");System.out.println(content);// String res="回复";
// Conversation conversation = new Conversation(id++,username, content, res, format(new Date());
// conversations.add(conversation);String res = qianfanUtil.addMessage(content);Conversation conversation = new Conversation(null, username, content, res, format(new Date()));chatService.addChat(conversation);return "redirect:list";}}
前端开发
css和js
css/style.css
/* 设置用户发送消息的样式 */
.user-message {background-color: #4CAF50; /* 绿色背景 */color: white;padding: 10px;margin: 10px;border-radius: 10px;white-space: pre;
}/* 设置ChatGPT发送消息的样式 */
.bot-message {background-color: #f2f2f2; /* 灰色背景 */padding: 10px;margin: 10px;border-radius: 10px;white-space: pre;
}.question-container {display: flex;justify-content: flex-end;
}.question {display: flex;flex-direction: row;align-items: center;
}.question td:first-child {margin-left: auto;
}.answer-container {display: flex;justify-content: flex-start;
}.answer {display: flex;flex-direction: row;align-items: center;
}.answer td:last-child {margin-left: auto;
}/* 设置提问和回复消息的表格样式 */
.question, .answer {display: flex;align-items: center;padding: 10px;border-radius: 10px;
}/* 设置输入框和发送按钮的样式 */
.form-container {display: flex;justify-content: center;align-items: center;position: fixed;bottom: 0;width: 100%;padding: 10px;background-color: #f9f9f9;border-top: 1px solid #ccc;
}.form-row {display: flex;flex: 1;
}.form-group {flex: 1;margin-right: 10px;
}.form-group input {width: 100%;padding: 10px;border: 1px solid #ccc;border-radius: 5px;outline: none;
}.message-container {max-height: 700px; /* 设置最大高度,超出部分可滚动 */overflow-y: auto; /* 竖直方向溢出部分可滚动 */
}.send-message-container {flex: 1; /* 占据剩余空间 */display: flex;align-items: center;background-color: #f5f5f5;
}textarea {width: 1800px; /* 设置输入框的宽度为300像素,您可以根据需要调整这个值 */height: 100px; /* 设置输入框的高度为200像素,您可以根据需要调整这个值 */font-size: 16px; /* 设置输入框中文字的字体大小为16像素,您可以根据需要调整这个值 */resize: none; /* 禁止用户调整输入框的尺寸 */
}
js/onload.js
window.onload = function() {// 找到消息容器var messageContainer = document.querySelector(".message-container");// 找到消息容器中最后一个子元素var lastMessage = messageContainer.lastElementChild;// 将最后一个子元素滚动到可见区域lastMessage.scrollIntoView();
};
js/textarea.js
var textarea = document.getElementById("messageInput");textarea.addEventListener("keydown", function(event) {if (event.key === "Enter" && !event.shiftKey) {event.preventDefault();var message = textarea.value.trim();textarea.value = "";// 发送 POST 请求fetch('/chat/chat', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ content: message })}).then(function(response) {// 刷新页面location.reload();});}
});textarea.addEventListener("keydown", function(event) {if (event.key === "Enter" && event.shiftKey) {// 在 Shift+Enter 情况下允许换行textarea.value += "\n";event.preventDefault();}
});
login.html和chat.html
html/login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"><head><title>AI对话</title></head><body><div class="chat-container"><h1 class="title">登录</h1><div class="login-container"><form th:action="@{/login}" method="post"><div class="form-container"><div class="form-row"><span class="form-group no-border"><input id="username" name="username" placeholder="输入用户名"></span><button>登录</button></div></div></form></div></div></body></html>
html/chat.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"><head><link rel="stylesheet" th:href="@{/css/style.css}"><title>AI对话</title></head><body><div class="chat-container"><h1 class="title">AI 对话</h1><div class="message-container"><!-- 用户消息和ChatGPT消息显示部分 --><div th:each="conversation:${conversations}"><div class="question-container"><table class="question"><td><span th:utext="${conversation.createTime}"></span><div class="user-message" th:utext="${conversation.userMessage}"></div></td><td type="text" th:text="${conversation.username}">提问</td></table></div><div class="answer-container"><table class="answer"><td type="text">AI</td><td><span th:utext="${conversation.createTime}"></span><div class="bot-message" th:utext="${conversation.botMessage}"></div></td></table></div></div></div><div class="send-message-container"><!-- 发送消息部分 --><form th:action="@{/chat/chat}" method="post"><div class="form-container"><div class="form-row"><span class="form-group no-border"><textarea id="messageInput" placeholder="问我任何问题...(Shift + Enter 换行,按下Enter 发送)"></textarea></span></div></div></form></div></div></body><script th:src="@{/js/onload.js}"></script><script th:src="@{/js/textarea.js}"></script></html>
后言
待完善的功能:
-
用户对话之后,需要等待回复,才能弹出对话内容
-
等待期间,还能输入聊天框
-
并且,没有终止生成
-
没有左边框-新建对话
-
没有md格式的复制
最后
2024-3-20 21:06:39
迎着日光月光星光,直面风霜雨霜雪霜。
相关文章:
百度智能云+SpringBoot=AI对话【人工智能】
百度智能云SpringBootAI对话【人工智能】 前言版权推荐百度智能云SpringBootAI对话【人工智能】效果演示登录AI对话 项目结构后端开发pom和propertiessql_table和entitydao和mapperservice和implconfig和utilLoginController和ChatController 前端开发css和jslogin.html和chat.…...
第二十七节 Java 多态
本章主要为大家介绍java多态的概念,以及便于理解的多态简单例子。 Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性是对象多种表现形式的体现。 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比…...
基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…...
[论文精读]Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection
论文网址:[2304.08876] 用于定向微小目标检测的动态粗到细学习 (arxiv.org) 论文代码:https://github.com/ChaselTsui/mmrotate-dcfl 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&…...
Selenium WebDriver 中用于查找网页元素的两个方法
这里提供了 Selenium WebDriver 中用于查找元素的两个方法:find_element() 和 find_elements()。 find_element(byid, value: Optional[str] None) → selenium.webdriver.remote.webelement.WebElement 这个方法用于查找满足指定定位策略(By strategy&…...
python 常用装饰器
文章目录 property的介绍与使用作用使用场景装饰方法防止属性被修改 实现setter和getter的行为 staticmethod 与 classmethod作用代码示例 两者区别使用区别代码演示 abstractmethod参考资料 property的介绍与使用 python的property是python的一种装饰器,是用来修饰…...
深入解析MySQL日志系统:Binlog、Undo Log和Redo Log
在数据库系统中,日志文件扮演着至关重要的角色,它们不仅保证了数据的完整性和一致性,还支持了数据的恢复、复制和审计等功能。MySQL数据库中最核心的日志系统包括二进制日志(Binlog)、回滚日志(Undo Log&am…...
强森算法求两点最短路径的基本流程及代码实现
对于强森算法,给定的一个图中,算法首先会构造一个新的节点s,然后从新构造的这个节点引出多条边分别连通图中的每一个节点,这些边的长度一开始是被设置为0的,然后使用贝尔曼-福德算法进行计算,算出从s到图中每一个节点的最短路径。 而在运行贝尔曼-福德算法的过程中如果发…...
数据结构入门篇 之 【双链表】的实现讲解(附完整实现代码及顺序表与线性表的优缺点对比)
一日读书一日功,一日不读十日空 书中自有颜如玉,书中自有黄金屋 一、双链表 1、双链表的结构 2、双链表的实现 1)、双向链表中节点的结构定义 2)、初始化函数 LTInit 3)、尾插函数 LTPushBack 4)、头…...
什么是零日攻击?
一、零日攻击的概念 零日攻击是指利用零日漏洞对系统或软件应用发动的网络攻击。 零日漏洞也称零时差漏洞,通常是指还没有补丁的安全漏洞。由于零日漏洞的严重级别通常较高,所以零日攻击往往也具有很大的破坏性。 目前,任何安全产品或解决方案…...
阿里云2025届春招实习生招聘
投递时间:2024年2月1日-2026年3月1日 岗位职责 负责大型客户“上云”,"用云"技术平台开发。 开发云迁移运维技术工具,帮助阿里云服务团队&&企业客户和服务商自主、高效的完成云迁移。 开发云运维技术工具,帮助…...
简单了解多线程
并发和并行 并发: 在同一时刻,多个指令在单一CPU上交替指向 并行:在同一时刻,多个指令在多个CPU上同时执行 2核4线程,4核8线程,8核16线程,16核32线程 基础实现线程的方式 Thread :继承类 &…...
GEE对上传并读取CSV文件
首先在Assets中上传csv csv格式如下所示: 上传好了之后,来看看这个表能否显示 var table ee.FeatureCollection("projects/a-flyllf0313/assets/dachang_2022"); var sortedTable table.sort(id); // 替换 propertyName 为你想要排序的属性…...
vulnhub-----SickOS靶机
文章目录 1.信息收集2.curl命令反弹shell提权利用POC 1.信息收集 ┌──(root㉿kali)-[~/kali/vulnhub/sockos] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, IPv4: 10.10.10.10 Starting arp-scan 1.9.8 with 256…...
slab分配器
什么是slab分配器? 用户态程序可以使用malloc及其在C标准库中的相关函数申请内存;内核也需要经常分配内存,但无法使用标准库函数;linux内核中,伙伴分配器是一种页分配器,是以页为单位的,但这个…...
MySQL面试题之基础夯实
一、mysql当中的基本数据类型有哪些 MySQL中的基本数据类型包括但不限于以下几大类: 数值类型: 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT浮点数类型:FLOAT、DOUBLE、DECIMAL…...
feign请求添加拦截器
FeignClient 的 configuration 属性: Feign 注解 FeignClient 的 configuration 属性,可以对 feign 的请求进行配置。 包括配置Feign的Encoder、Decoder、 Interceptor 等。 feign 请求添加拦截器,也可以通过这个 configuration 属性 来指…...
蓝桥杯之简单数论冲刺
文章目录 取模快速幂 取模 这道题目有两个注意点: 1.当你的取模之后刚好等于0的话,后面就不用进行后面的计算 2.if sum detail[i] > q: 这个语句的等号也很重要 import os import sys# 请在此输入您的代码a,b,n map(int,input().split())week a*5 …...
Http的缓存有哪些
HTTP 缓存可以通过多种 HTTP 头部字段来控制,主要包括以下几种: 1.Expires:这个字段定义了响应的过期时间。如果当前时间小于 Expires 的时间,那么就可以直接使用缓存。 2.Cache-Control:这个字段是一个指令ÿ…...
Linux 网络虚拟化 Macvlan(基于物理网络接口虚拟网络接口) 认知
写在前面 博文内容涉及 Macvlan 的简单认知,以及一个Demo博文内容根据《 Kubernetes 网络权威指南:基础、原理与实践》 整理理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
