当前位置: 首页 > news >正文

【React+TypeScript+DeepSeek】穿越时空对话机

引言

在这个数字化的时代,历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里,我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来?如何让历史学习变得生动有趣?带着这些思考,我们开发了一个简单的"穿越时空对话机"。

源码已经放在最后啦!


人物选择界面:
人物选择界面
聊天界面:
在这里插入图片描述


1. 项目背景

1.1 创意起源

在传统的历史学习中,学生们往往需要通过记忆大量的史实和年代来了解历史。这种学习方式不仅枯燥,而且难以激发学习兴趣。我们注意到:

  • 学生对历史人物的故事最感兴趣
  • 互动式学习效果最好
  • AI技术为教育带来新可能

基于这些观察,我萌生了开发一个能让用户直接与历史人物"对话"的应用的想法。

1.2 项目目标

  1. 教育价值

    • 让历史学习变得生动有趣
    • 深入理解历史人物的思想
    • 培养历史思维能力
  2. 技术创新

    • 运用先进的AI对话技术
    • 打造流畅的用户体验
    • 实现智能的角色扮演
  3. 文化传承

    • 弘扬优秀传统文化
    • 促进文化交流
    • 连接古今智慧

2. 核心功能概述

2.1 人物库设计

我们精心挑选了来自不同时期、不同领域的历史名人:

  1. 中国古代名人

    • 孔子:儒家思想的代表,强调仁义礼智信
    • 诸葛亮:军事谋略家,智慧与忠诚的化身
    • 李白:浪漫主义诗人,豪放不羁的文学天才
    • 苏轼:文学艺术全才,豁达乐观的人生导师
    • 李时珍:医学大师,严谨求实的科学精神
  2. 世界名人

    • 达芬奇:文艺复兴全才,艺术与科学的完美结合
    • 爱因斯坦:现代物理学家,创新思维的代表
    • 莎士比亚:戏剧大师,人性洞察的大师
    • 莫扎特:音乐天才,艺术激情的化身

每个人物都经过精心设计,包括:

  • 详细的背景故事
  • 独特的性格特征
  • 专业领域知识
  • 语言表达风格
  • 典型的思维方式

2.2 对话系统

基于DeepSeek API构建的智能对话系统具有以下特点:

  1. 角色准确性

    • 准确还原历史人物性格
    • 保持语言风格一致性
    • 符合历史背景
  2. 对话智能性

    • 上下文理解能力
    • 灵活的问题处理
    • 深度的知识储备
  3. 交互自然性

    • 流畅的对话节奏
    • 自然的语言表达
    • 适当的情感表现

3. 技术架构

3.1 技术栈选择

我们采用了现代化的技术栈:

  1. 前端技术

    - React 18
    - TypeScript 4.x
    - Vite
    - CSS Modules
    
  2. AI对话引擎

    - DeepSeek API
    - WebSocket
    - Axios
    
  3. 数据存储

    - LocalStorage
    

3.2 系统架构

采用清晰的分层架构:

  1. 表现层

    • 角色选择界面
    • 对话交互界面
    • 用户反馈组件
  2. 业务层

    • 对话管理
    • 角色控制
    • 会话处理
  3. 数据层

    • API通信
    • 本地存储
    • 状态管理

3.3 数据流设计

实现了清晰的单向数据流:

用户输入
状态更新
API请求
响应处理
界面更新

4. DeepSeek API集成

4.1 API配置

const api = axios.create({baseURL: 'https://api.deepseek.com/v1',headers: {'Authorization': `Bearer ${API_KEY}`,'Content-Type': 'application/json',},
});

4.2 对话生成

export const generateResponse = async (messages: ChatMessage[]) => {const response = await api.post('/chat/completions', {model: 'deepseek-chat',messages,temperature: 0.7,max_tokens: 1000,});return response.data.choices[0].message.content;
};

4.3 提示词系统

为每个历史人物设计了专门的提示词模板:

interface HistoricalFigurePrompt {id: string;name: string;period: string;description: string;avatar: string;systemPrompt: string;sampleQuestions: string[];personality: string;background: string;
}

5. 开发规范

5.1 代码规范

  • 使用ESLint进行代码检查
  • 使用Prettier进行代码格式化
  • 遵循TypeScript严格模式
  • 采用函数式编程范式

5.2 命名规范

  • 组件采用大驼峰命名
  • 函数采用小驼峰命名
  • 常量使用大写下划线
  • CSS类名采用kebab-case

5.3 文件组织

src/
├── components/     # 通用组件
├── pages/         # 页面组件
├── services/      # 服务层
├── styles/        # 样式文件

6. 用户界面设计理念

6.1 设计原则

在设计用户界面时,我们遵循以下核心原则:

  1. 简约而不简单

    • 清晰的视觉层次
    • 重点内容突出
    • 减少视觉干扰
  2. 沉浸式体验

    • 符合历史氛围
    • 富有时代特色
    • 细节打造意境
  3. 交互友好

    • 操作直观
    • 反馈及时
    • 引导清晰

6.2 视觉风格

我们采用了现代简约与古典元素相结合的设计风格:

  1. 配色方案

    :root {--primary-color: #4A90E2;--secondary-color: #F5A623;--text-color: #2C3E50;--background-color: #F8F9FA;--border-color: #E2E8F0;
    }
    
  2. 字体选择

    • 中文:思源宋体
    • 英文:Roboto
    • 代码:JetBrains Mono
  3. 布局网格

    • 基础单位:8px
    • 内容区域最大宽度:1200px
    • 响应式断点:576px、768px、992px、1200px

7. 角色选择页面

7.1 布局设计

角色选择页面采用卡片式布局:

const CharacterSelect: React.FC = () => {return (<div className="character-select"><header className="header"><h1>穿越时空</h1><p>与历史对话</p></header><div className="character-grid">{historicalFigures.map(figure => (<CharacterCardkey={figure.id}figure={figure}onClick={() => handleSelect(figure)}/>))}</div></div>);
};

7.2 角色卡片设计

每个角色卡片包含:

  1. 视觉元素

    • 头像/形象
    • 姓名/时代
    • 特色标签
    • 简介文字
  2. 交互效果

    .character-card {transition: transform 0.3s ease;&:hover {transform: translateY(-5px);box-shadow: 0 10px 20px rgba(0,0,0,0.1);}
    }
    
  3. 信息展示

    const CharacterCard: React.FC<Props> = ({ figure }) => (<div className="character-card"><div className="avatar">{figure.avatar}</div><h3>{figure.name}</h3><p className="period">{figure.period}</p><p className="description">{figure.description}</p><div className="personality-tags">{figure.personality.split(',').map(tag => (<span className="tag">{tag}</span>))}</div></div>
    );
    

8. 对话界面实现

8.1 整体布局

对话界面分为三个主要部分:

  1. 顶部导航

    • 返回按钮
    • 当前角色信息
    • 功能按钮
  2. 对话区域

    • 消息气泡
    • 打字机效果
    • 滚动加载
  3. 输入区域

    • 消息输入框
    • 发送按钮
    • 快捷操作

8.2 消息展示

实现了富有特色的消息气泡:

const MessageBubble: React.FC<Props> = ({ message, isUser }) => (<div className={`message ${isUser ? 'user' : 'assistant'}`}><div className="avatar">{isUser ? '👤' : selectedFigure.avatar}</div><div className="content"><div className="bubble">{message.content}</div><div className="time">{formatTime(message.timestamp)}</div></div></div>
);

8.3 打字机效果

实现了自然的打字机效果:

const simulateTyping = async (content: string) => {await new Promise(resolve => setTimeout(resolve, 500 + Math.random() * 1000));return content;
};

8.4 历史记录功能

实现了完整的对话历史管理:

interface ChatHistory {characterId: string;messages: ChatMessage[];lastUpdated: string;
}export const saveChatHistory = (characterId: string, messages: ChatMessage[]) => {try {const existingHistory = localStorage.getItem(CHAT_HISTORY_KEY);const history = existingHistory ? JSON.parse(existingHistory) : {};history[characterId] = {characterId,messages,lastUpdated: new Date().toISOString()};localStorage.setItem(CHAT_HISTORY_KEY, JSON.stringify(history));} catch (error) {console.error('Failed to save chat history:', error);}
};

9. 动画效果

9.1 过渡动画

使用CSS transitions实现平滑过渡:

.fade-enter {opacity: 0;transform: translateY(20px);
}.fade-enter-active {opacity: 1;transform: translateY(0);transition: opacity 300ms, transform 300ms;
}.fade-exit {opacity: 1;
}.fade-exit-active {opacity: 0;transition: opacity 300ms;
}

9.2 加载动画

实现了优雅的加载效果:

.typing-indicator {display: flex;gap: 4px;padding: 8px 12px;.dot {width: 8px;height: 8px;background: var(--primary-color);border-radius: 50%;animation: bounce 1.4s infinite ease-in-out;&:nth-child(1) { animation-delay: -0.32s; }&:nth-child(2) { animation-delay: -0.16s; }}
}@keyframes bounce {0%, 80%, 100% { transform: scale(0); }40% { transform: scale(1); }
}

10. 响应式设计

10.1 媒体查询

实现了完整的响应式布局:

/* 移动端 */
@media (max-width: 576px) {.character-grid {grid-template-columns: 1fr;}
}/* 平板 */
@media (min-width: 577px) and (max-width: 992px) {.character-grid {grid-template-columns: repeat(2, 1fr);}
}/* 桌面端 */
@media (min-width: 993px) {.character-grid {grid-template-columns: repeat(3, 1fr);}
}

10.2 弹性布局

使用Flexbox实现灵活的布局:

.chat-container {display: flex;flex-direction: column;height: 100vh;.chat-messages {flex: 1;overflow-y: auto;}.chat-input {padding: 1rem;border-top: 1px solid var(--border-color);}
}

11. 性能优化

11.1 虚拟滚动

实现了消息列表的虚拟滚动:

import { FixedSizeList } from 'react-window';const MessageList: React.FC<Props> = ({ messages }) => (<FixedSizeListheight={600}itemCount={messages.length}itemSize={80}width="100%">{({ index, style }) => (<MessageItemmessage={messages[index]}style={style}/>)}</FixedSizeList>
);

11.2 防抖处理

对输入和滚动事件进行防抖处理:

const debouncedScroll = debounce(() => {const { scrollTop, scrollHeight, clientHeight } = messagesRef.current;if (scrollHeight - scrollTop === clientHeight) {loadMoreMessages();}
}, 200);

11.3 懒加载

实现了图片和组件的懒加载:

const LazyCharacterCard = React.lazy(() => import('./CharacterCard'));const CharacterGrid = () => (<Suspense fallback={<Skeleton />}>{figures.map(figure => (<LazyCharacterCardkey={figure.id}figure={figure}/>))}</Suspense>
);

12. 性能优化策略

12.1 代码层面优化

12.1.1 React优化
  1. 组件优化
// 使用React.memo避免不必要的重渲染
const MessageBubble = React.memo<Props>(({ message, isUser }) => {return (<div className={`message ${isUser ? 'user' : 'assistant'}`}>{/* 消息内容 */}</div>);
});// 使用useCallback优化事件处理函数
const handleSendMessage = useCallback(() => {// 处理发送消息
}, [dependencies]);
  1. 状态管理优化
// 使用useReducer处理复杂状态
const [state, dispatch] = useReducer(chatReducer, initialState);// 分离状态逻辑
const chatReducer = (state, action) => {switch (action.type) {case 'ADD_MESSAGE':return {...state,messages: [...state.messages, action.payload]};case 'CLEAR_HISTORY':return {...state,messages: []};default:return state;}
};
12.1.2 资源加载优化
  1. 代码分割
// 路由级别的代码分割
const ChatInterface = lazy(() => import('./pages/ChatInterface'));
const CharacterSelect = lazy(() => import('./pages/CharacterSelect'));// 组件级别的代码分割
const MarkdownRenderer = lazy(() => import('./components/MarkdownRenderer'));
  1. 资源预加载
// 预加载关键资源
const prefetchResources = () => {const links = [{ rel: 'prefetch', href: '/assets/fonts/main.woff2' },{ rel: 'preload', href: '/assets/images/sprites.png', as: 'image' }];links.forEach(link => {const linkElement = document.createElement('link');Object.assign(linkElement, link);document.head.appendChild(linkElement);});
};

12.2 网络优化

12.2.1 API请求优化
  1. 请求缓存
const cache = new Map();const cachedFetch = async (url: string) => {if (cache.has(url)) {return cache.get(url);}const response = await fetch(url);const data = await response.json();cache.set(url, data);return data;
};
  1. 请求合并
const batchRequest = async (requests: Request[]) => {const batchId = generateBatchId();return await api.post('/batch', {batchId,requests});
};
12.2.2 WebSocket优化
class WebSocketManager {private ws: WebSocket;private reconnectAttempts = 0;private maxReconnectAttempts = 5;constructor(url: string) {this.ws = new WebSocket(url);this.setupEventHandlers();}private setupEventHandlers() {this.ws.onclose = () => {if (this.reconnectAttempts < this.maxReconnectAttempts) {setTimeout(() => this.reconnect(), 1000 * Math.pow(2, this.reconnectAttempts));}};}private reconnect() {this.reconnectAttempts++;// 重新连接逻辑}
}

12.3 存储优化

12.3.1 本地存储优化
  1. 数据压缩
import { compress, decompress } from 'lz-string';const saveCompressedData = (key: string, data: any) => {const compressed = compress(JSON.stringify(data));localStorage.setItem(key, compressed);
};const loadCompressedData = (key: string) => {const compressed = localStorage.getItem(key);if (!compressed) return null;return JSON.parse(decompress(compressed));
};
  1. 存储管理
class StorageManager {private maxSize = 5 * 1024 * 1024; // 5MBasync cleanup() {const items = { ...localStorage };const totalSize = Object.values(items).reduce((size, item) => size + item.length, 0);if (totalSize > this.maxSize) {// 清理最旧的数据const oldestKey = this.findOldestKey();localStorage.removeItem(oldestKey);}}
}

13. 用户体验优化

13.1 交互优化

13.1.1 输入优化
  1. 智能提示
const AutoComplete: React.FC<Props> = ({ suggestions, onSelect }) => {return (<div className="autocomplete">{suggestions.map(suggestion => (<divkey={suggestion.id}className="suggestion"onClick={() => onSelect(suggestion)}>{suggestion.text}</div>))}</div>);
};
  1. 输入防抖
const useDebounce = (value: string, delay: number) => {const [debouncedValue, setDebouncedValue] = useState(value);useEffect(() => {const handler = setTimeout(() => {setDebouncedValue(value);}, delay);return () => {clearTimeout(handler);};}, [value, delay]);return debouncedValue;
};

13.2 动画优化

13.2.1 性能优化的动画
.optimized-animation {will-change: transform;transform: translateZ(0);backface-visibility: hidden;
}@keyframes smooth-entrance {from {opacity: 0;transform: translateY(20px);}to {opacity: 1;transform: translateY(0);}
}
13.2.2 动画管理
class AnimationManager {private animations: Map<string, Animation> = new Map();register(id: string, animation: Animation) {this.animations.set(id, animation);}play(id: string) {const animation = this.animations.get(id);if (animation) {animation.play();}}pause(id: string) {const animation = this.animations.get(id);if (animation) {animation.pause();}}
}

结语

"穿越时空对话机"探索了如何将先进的AI技术与教育需求相结合的可能性。通过这个项目,我们不仅实现了有趣的历史对话功能,也积累了宝贵的技术经验。

未来,我们将继续优化和扩展这个项目,让更多人能够通过这种创新的方式学习历史、感受文化。我们相信,技术的进步将为教育带来更多可能性。


Gitee源码

相关文章:

【React+TypeScript+DeepSeek】穿越时空对话机

引言 在这个数字化的时代&#xff0c;历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里&#xff0c;我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来&#xff1f;如何让历史学习变得生动有趣&#xff1f;带着这些思考&…...

公共数据授权运营系统建设手册(附下载)

在全球范围内&#xff0c;许多国家和地区已经开始探索公共数据授权运营的路径和模式。通过建立公共数据平台&#xff0c;推动数据的开放共享&#xff0c;促进数据的创新应用&#xff0c;不仅能够提高政府决策的科学性和公共服务的效率&#xff0c;还能够激发市场活力&#xff0…...

基于HTML和CSS的旅游小程序

一、技术基础 HTML&#xff08;HyperText Markup Language&#xff09;&#xff1a;超文本标记语言&#xff0c;用于定义网页的内容和结构。在旅游小程序中&#xff0c;HTML用于搭建页面的基本框架&#xff0c;包括标题、段落、图片、链接等元素&#xff0c;以及用于交互的表单…...

maven之插件调试

当使用maven进行项目管理的时候&#xff0c;可能会碰到一些疑难问题。网上资料很少&#xff0c;可能会想着直接调试定位问题。这里以maven-compiler-plugin为例&#xff1a; &#xff08;1&#xff09;准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…...

SQL Sever 数据库损坏,只有.mdf文件,如何恢复?

SQL Sever 数据库损坏&#xff0c;只有.mdf文件&#xff0c;如何恢复 在SQL Server 2008中&#xff0c;如果只有MDF文件而没有LDF文件&#xff0c;附加数据库的过程会稍微复杂一些。以下是几种可能的方法 一、使用紧急模式重建日志文件 1、新建一个同名的数据库。 2、停止SQ…...

【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理

使用AWS SDK碰到的错误&#xff0c;其实很简单&#xff0c;要装个扩展库 保持如下 Fatal error: Uncaught Aws\Auth\Exception\UnresolvedAuthSchemeException: This operation requests sigv4a auth schemes, but the client currently supports sigv4, none, bearer, sigv4-…...

primevue的<Menu>组件

1.使用场景 2.代码 1.给你的menu组件起个引用名 2.<Menu>组件需要一个MenuItem[] 3.你要知道MenuItem[ ]的特殊的数据格式&#xff0c;就像TreeNode[ ]一样&#xff0c;数据格式不对是不渲染的。。。。 常用的属性就这几种&#xff0c;js语言和java不一样&#xff0c;J…...

利用Deeplearning4j进行 图像识别

目录 图像识别简介 神经网络 感知器 前馈神经网络 自动编码器 受限玻尔兹曼机 深度卷积网络 理解图像内容以及图像含义方面&#xff0c;计算机遇到了很大困难。本章先介绍计算机理解图像教育方面 遇到的难题&#xff0c;接着重点讲解一个基于深度学习的解决方法。我们会…...

练习题:37

目录 Python题目 题目 题目分析 套接字概念剖析 通信原理分析 服务器 - 客户端连接建立过程&#xff1a; 基于套接字通信的底层机制&#xff1a; 代码实现 基于 TCP 的简单服务器 - 客户端通信示例 服务器端代码&#xff08;tcp_server.py&#xff09; 客户端代码&a…...

Unity热更文件比较工具类

打包出来的热更文件&#xff0c;如果每次都要全部上传到CDN文件服务器&#xff0c;不进耗费时间长&#xff0c;还浪费流量。 所以让AI写了个简单的文件比较工具类&#xff0c;然后修改了一下可用。记录一下。 路径可自行更改。校验算法这里使用的是MD5&#xff0c;如果使用SH…...

【hustoj注意事项】函数返回值问题

原文 https://lg.h-fmc.cn/index.php/BC/27.html 问题回顾 此题目选自HFMC_OJ&#xff1a;4312: 简单递归操作 hustoj测试 此问题错误的代码是 #include<bits/stdc.h> using namespace std; int a[10000];int n; int b[10000]{0}; int pailie(int deep) {int i; for(…...

实现一个通用的树形结构构建工具

文章目录 1. 前言2. 树结构3. 具体实现逻辑3.1 TreeNode3.2 TreeUtils3.3 例子 4. 小结 1. 前言 树结构的生成在项目中应该都比较常见&#xff0c;比如部门结构树的生成&#xff0c;目录结构树的生成&#xff0c;但是大家有没有想过&#xff0c;如果在一个项目中有多个树结构&…...

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中&#xff0c;数据已然成为企业的核心资产&#xff0c;而数据分析则是挖掘这一资产价值的关键钥匙。数势科技&#xff0c;作为数据智能领域的领军者&#xff0c;以其前沿的技术与创新的产品&#xff0c;为企业开启了高效数据分析…...

机器学习之过采样和下采样调整不均衡样本的逻辑回归模型

过采样和下采样调整不均衡样本的逻辑回归模型 目录 过采样和下采样调整不均衡样本的逻辑回归模型1 过采样1.1 样本不均衡1.2 概念1.3 图片理解1.4 SMOTE算法1.5 算法导入1.6 函数及格式1.7 样本类别可视化理解 2 下采样2.1 概念2.2 图片理解2.3 数据处理理解2.4 样本类别可视化…...

解决 ssh connect to host github.com port 22 Connection timed out

一、问题描述 本地 pull/push 推送代码到 github 项目报 22 端口连接超时&#xff0c;测试连接也是 22 端口连接超时 ssh 密钥没问题、也开了 Watt Toolkit 网络是通的&#xff0c;因此可以强制将端口切换为 443 二、解决方案 1、测试连接 ssh -T gitgithub.com意味着无法通…...

mybatis/mybatis-plus中mysql报错

文章目录 一、sql执行正常,mybatis报错二、sql执行正常,mybatis-plus报错直接改变字段利用mybatis-plus特性处理 总结 一、sql执行正常,mybatis报错 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "ur" <K_ISOLATION>a…...

在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)

我的github分支&#xff01;&#xff01;&#xff01; 你可以在这里找到相对应的源码。 DWDROME的MOGI分支 来源于&#xff01;&#xff01; MOGI-ROS/Week-3-4-Gazebo-basics 学习分支整理日志 分支概述 这是一个用于个人学习的新分支&#xff0c;目的是扩展基本模型并添加…...

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中&#xff0c;unsafe是一种允许绕过Rust的安全性保证的机制&#xff0c;用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是&#xff1a;unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作&#xff0c;从而可以进行性能优化&#xff0c;如手…...

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…...

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能&#xff0c;通过 Slider 组件实现滑动操作&#xff0c;学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能&#xff1a; 滑动解锁区域&#xff1a;用…...

SMMU软件指南之系统架构考虑

安全之安全(security)博客目录导读 目录 5.1 I/O 一致性 5.2 客户端设备 5.2.1 地址大小 5.2.2 缓存 5.3 PCIe 注意事项 5.3.1 点对点通信 5.3.2 No_snoop 5.3.3 ATS 5.4 StreamID 分配 5.5 MSI 本博客介绍与 SMMU 相关的一些系统架构注意事项。 5.1 I/O 一致性 如…...

使用高云小蜜蜂GW1N-2实现MIPI到LVDS(DVP)转换案例分享

作者&#xff1a;Hello&#xff0c;Panda 大家晚上好&#xff0c;熊猫君又来了。 今天要分享的是一个简单的MIPI到LVDS&#xff08;DVP&#xff09;接口转换的案例。目的就是要把低成本FPGA的应用潜力充分利用起来。 一、应用背景 这个案例的应用背景是&#xff1a;现在还在…...

「C++笔记」unordered_map:哈希化的无序映射函数(键值对)

unordered_map 是 C 中一个经过哈希函数&#xff08;Hash&#xff09;处理的映射&#xff08;map&#xff09;容器。 本文中的map和set是差不多的&#xff0c;unordered_map与unordered_set也是对应的。所以不再单独写一篇了。 这里的内容建议看完本文之后再回过头来看 二者虽然…...

Linux 安装jdk

1、官网下载jdk https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html2、以tar包为例&#xff0c;在window或者Linux解压都可以&#xff0c;这里直接在win解压了&#xff0c;上传到服务器 3、在/usr/local/ 创建jdk目录&#xff0c;将jdk上传到…...

asp.net core 发布到iis后,一直500.19,IIS设置没问题,安装了sdk,文件夹权限都有,还是报错

原因就是没有安装ASP.NET Core 9.0 Runtime (v9.0.0) - Windows Hosting Bundle&#xff0c;我是只安装了.net core的sdk&#xff0c;下面介绍下sdk和hosting bundle的关系 在 .NET Core 和 ASP.NET Core 的开发中&#xff0c;SDK&#xff08;Software Development Kit&#x…...

【Go】运行自己的第一个Go程序

运行自己的第一个Go程序 一、Go语言的安装Go环境安装查看是否安装成功配置GOPROXY(代理) 二、Goland安装三、Goland破解四、新建项目 开一篇专栏记录学习Go的过程&#xff0c;一门新语言从hello world开始&#xff0c;这篇文章详细讲解Go语言环境搭建及hello world实现 一、Go语…...

qt qss文件的使用

qt样式的修改方式 一 通过ui界面的改变样式表来直接修改显示效果。 不推荐&#xff0c;其他人不好修改&#xff0c;不够直观&#xff0c;不易维护。 二 通过setStyleSheet接口修改。 一般&#xff0c;界面很少的时候可以使用。一旦界面多起来&#xff0c;代码部分就显得杂乱…...

【管道——二分+区间合并】

题目 思路 区间合并 1、按照左端点排序2、遍历窗口&#xff0c;若窗口非法&#xff0c;继续遍历&#xff1b;否则执行33、若是第一个窗口&#xff0c;设定合并结果初值&#xff0c;判断结果左端点是否造成“起点过大”&#xff0c;是&#xff0c;FALSE退出&#xff1b;否则执行…...

宽带、光猫、路由器、WiFi、光纤之间的关系

1、宽带&#xff08;Broadband&#xff09; 1.1 宽带的定义宽带指的是一种高速互联网接入技术&#xff0c;通常包括ADSL、光纤、4G/5G等不同类型的接入方式。宽带的关键特点是能够提供较高的数据传输速率&#xff0c;使得用户可以享受到稳定的上网体验。 1.2 宽带的作用宽带是…...

如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?

今天来聊聊 Doris 数据导入那些事儿。你是不是在数据导入的时候遇到各种状况&#xff0c;让人头疼不已&#xff1f;别担心&#xff0c;这篇文章给你答案&#xff01; 在 Doris 的版本里&#xff0c;< 2.0.3 的时候&#xff0c;数据迁移存在一些已知的问题&#xff0c;比如可…...