Stable-Diffusion的WebUI部署

1、环境准备及安装 1.1、linux环境 # 首先,已经预先安装好了anaconda,在这里新建一个环境 conda create -n sdwebui python=3.10 # 安装完毕后,激活该环境 conda activate sdwebui # 安装 # 下载stable-diffusion-webui代码 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui bash webui.sh -f 执行完之后,脚本会自动创建python环境、安装各种包、模型等。 2、使用 2.1、运行 安装完成前期的环境准备之后,之后每次运行只需要: conda activate sdwebui cd stable-diffusion-webui bash webui.sh -f # 或者按照如下方式,将sd放在后台执行 nohup bash webui.sh -f >> nohup.log 2>&1 & 该种方式会将进程运行在本地,可以通过ip+port的方式直接在网页上访问。 也可以通过如下方式进行简单的改造: # 编辑webui-user.sh脚本 vim webui-user.sh # 在终端中输入“i”进入编辑模式,移动到 COMMANDLINE_ARGS,并将其修改为: export COMMANDLINE_ARGS="--listen --share --enable-insecure-extension-access" 上述命令含义如下: --listen:将本地连接从127.0.0.1修改为0.0.0.0,即可通过服务器 IP:7861进行访问 --share:生成可供外网访问 Gradio 网址。 --enable-insecure-extension-access:使用–listen时,webui出于安全考虑会禁止用户在UI页面添加插件,添加该参数可允许用户添加插件。 --mdevram或 --lowvarm:降低显存消耗

【Linux】—— 线程控制的基本介绍

目录 (一)POSIX线程库 (二)创建线程 2.1 线程ID及进程地址空间布局 (三)线程终止 (四)分离线程 (一)POSIX线程库 POSIX线程库(POSIX Threads Library),通常简称为Pthreads,是一个为POSIX操作系统(包括UNIX和类UNIX系统如Linux)提供线程支持的库。Pthreads定义了一组API,允许程序员创建、管理、同步和销毁线程。 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的 要使用这些函数库,要通过引入头文<pthread.h> 链接这些线程函数库时要使用编译器命令的“-lpthread”选项 (二)创建线程 【函数介绍】 功能:创建一个新的线程 原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void*), void *arg); 参数 thread:返回线程ID attr:设置线程的属性,attr为NULL表示使用默认属性 start_routine:是个函数地址,线程启动后要执行的函数 arg:传给线程启动函数的参数 返回值:成功返回0;失败返回错误码 错误检查: 对于Pthreads函数,如果调用失败,通常会返回一个非零的错误代码,你可以使用这个错误代码来查询具体是什么错误发生了。为了将错误代码映射到人类可读的错误消息,你可以使用strerror或pthread_strerror函数(如果可用)。 另外,Pthreads库确实为每个线程提供了一个私有的errno变量,这允许线程安全地访问errno。然而,对于Pthreads函数本身来说,直接检查返回值通常是更好的做法,因为这样可以避免任何可能的线程间干扰,并且通常更加高效。 【代码示例】 #include <iostream> #include <unistd.h> #include <pthread.h> using namespace std; int g_val = 0; void *threadRun1(void *args) { while (true) { sleep(1); cout << "t1 thread..." << getpid() << " &g_val: "

【C++进阶】深入STL之list:高效双向链表的使用技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:探索迭代器失效 🌹🌹期待您的关注 🌹🌹 ❀STL之list 📒1. list的基本概念📕2. list的常用操作🌈list的构造函数🌞list iterator的使用🌙list的常用函数⭐list的增删查改 📜3. list迭代器失效📖4. 总结拓展💧拓展:迭代器的性质类型🔥总结 在C++编程的广阔天地中,STL(Standard Template Library)以其高效、灵活和可重用的特性,成为开发者们不可或缺的工具之一。作为STL中重要的一员,list容器为我们提供了双向链表的功能,让我们在编程过程中能够更方便地处理需要频繁插入和删除元素的场景 前言:双向链表是链表数据结构的一种重要变体,它允许我们在链表的任何位置进行高效的插入和删除操作,而无需像数组那样进行大量的数据移动。list容器正是基于这种数据结构实现的,它提供了丰富的成员函数和迭代器接口,让我们能够轻松地管理和操作链表元素 让我们一起走进STL中list容器的世界,探索其背后的奥秘吧! 因为前面我们学习string和vector,为list做足了铺垫,所以我们直接来看它的使用! 📒1. list的基本概念 list 是 C++ 标准模板库 (STL) 中的一个容器,它基于双向链表实现。双向链表是一种动态数据结构,由一系列节点组成,每个节点包含数据元素和两个指向其他节点的指针 在介绍list的使用之前,我们先来看看它的结构: 实际上:list就是一个带头双向链表 📕2. list的常用操作 🌈list的构造函数 构造函数( (constructor))接口说明list (size_type n, const value_type& val = value_type())构造的list中包含n个值为val的元素list()构造空的listlist (const list& x)拷贝构造函数list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list int main() { list<int> lt1(10, 5); //构造的list中包含n个值为val的元素 list<int> lt2; // 构造空的list list<int> lt3(lt1); // 拷贝构造函数 list<int> lt4(lt1.begin(), lt1.

基于python和django产品商品销售收入数据分析系统可视化系统(源码+LW+部署讲解)

前言 💗博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 💗主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最值得选的微信小程序毕业设计大全:100个热门选题推荐✅ 2025-2026年最值得选的Java毕业设计选题大全:500个热门选题推荐✅ Java毕业设计项目精品实战案例《3000套》 微信小程序毕业设计项目精品案例《3000套》 2025-2026Python项目实战《100套》 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 详细视频演示 请联系我获取更详细的演示视频 具体实现截图 技术栈 Python语言 Python 是一个高层次的脚本语言结合了解释性、编译性、互动性和面向对象的。Python 的设计,相比其他语言经常使用英文关键字和其他语言的一些标点符号,它具有比其他语言更有特色语法结构,具有很强的可读性。 解释型语言:类似于PHP和Perl语言,这意味着开发过程中没有了编译这个环节。 交互式语言:可以在一个 Python 提示符 >>> 后直接执行代码。 面向对象语言:Python支持面向对象的风格或代码封装在对象的编程技术。 Django框架 Django用Python编写,属于开源Web应用程序框架。采用(模型M、视图V和模板t)的框架模式。该框架以比利时吉普赛爵士吉他手詹戈·莱因哈特命名。该架构的主要组件如下: 1.用于创建模型的对象关系映射。 2.最终目标是为用户设计一个完美的管理界面。 3.是目前最流行的URL设计解决方案。 4.模板语言对设计师来说是最友好的。 5.缓存系统。 前端框架Vue Vue.js 是一种流行的开源 JavaScript 框架,用于构建用户界面。Vue.js 被迅速广泛采纳,成为现代 Web 开发的热门选择。Vue.js 的设计目标是通过提供简洁、灵活的工具,让开发者更容易构建交互性的 Web 界面。Vue.js 的核心是可复用的组件。借助于组件化的开发和可扩展性特性,Vue.js 能够轻松地构建复杂的单页应用(SPA)和前端应用。Vue.js 拥有简单易学的API,使得初学者可以迅速上手,同时也提供了高度灵活性和实用性,能够满足复杂应用程序的需求。Vue.js 支持响应式数据绑定,这意味着当数据发生变化时,页面上的内容会自动更新,使得应用程序的状态管理更加简单。同时,Vue.js 也提供了虚拟DOM(Virtual DOM)技术,通过精巧地处理 DOM 更新,提高了程序的性能和效率。Vue.js 融合了现代化的前端工具和开发流程,例如单文件组件(Single File Components),允许开发者在一个文件中编写HTML、CSS和JavaScript代码,以更好地组织和管理应用程序的文件。此外,Vue.js 还提供了丰富的生态系统,包括Vue Router用于构建SPA路由、Vuex用于状态管理、Vue CLI用于快速搭建项目和工程等等,这些工具和插件为开发者提供了多种可能性。总而言之,Vue.js 是一款灵活、高效、易用的JavaScript框架,使得构建交互式的前端应用变得更为简便。其优秀的设计理念、丰富的功能特性和活跃的社区支持,使得Vue.js 成为众多开发者心目中最佳的前端框架选择。 MySQL数据库 MySQL作为数据库拥有很多优点,其中由于是开放源码,所以使用成本特别低,而它体积小的特点决定了速度快的特性。因此,MySQL具有开放性,多线程支持多种API,可跨数据库连接,国际化,数据库体积巨大等特点。简单的来说,MySQL是一个开放的、快速的、多线程的、多用户的数据库服务器。 选用MySQL作为数据库的其中一个原因就是支持多线程,支持多线程的特点为利用系统资源提供了便捷并因此大大提高了系统运行速度和效率,而且连接数据库的方式多样包括但不局限于TCP/IP、ODBC和JDBC等途径;但是没有东西是完美无缺的,即便MySQL也如此,虽说它有着众多优点但其功能不够强大,规模也相对较小,无法应对大型数据哭的处理。但是对于本系统来说,选用MySQL作为数据库,其功能性能已绰绰有余,如果要进行二次开发的数据库表结构空间的扩展也是完全可行的。综上所述,MySQL是作为本系统数据库的最优选择。 核心代码 # coding:utf-8 __author__ = "

transformers 阅读:Llama 模型

正文 学习一下 transformers 库中,Llama 模型的代码,学习过程中写下这篇笔记,一来加深印象,二来可以多次回顾。 笔者小白,里面错误之处请不吝指出。 层归一化 LlamaRMSNorm transformers 中对于 LlamaRMSNorm 类的定义如下: class LlamaRMSNorm(nn.Module): def __init__(self, hidden_size, eps=1e-6): """ LlamaRMSNorm is equivalent to T5LayerNorm """ super().__init__() self.weight = nn.Parameter(torch.ones(hidden_size)) self.variance_epsilon = eps def forward(self, hidden_states): input_dtype = hidden_states.dtype hidden_states = hidden_states.to(torch.float32) variance = hidden_states.pow(2).mean(-1, keepdim=True) hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) return self.weight * hidden_states.to(input_dtype) 这里采用了 RMS(Root Mean Square) 归一化,其中 RMS 计算公式为: RMS(x)=1n∑xi2RMS(x)=\sqrt{\frac{1}{n}\sum{x_i^2}}RMS(x)=n1​∑xi2​​ 则 RMSNorm 归一化的计算公式为: RMS(x)=xRMS(x)+ϵ∗WRMS(x)=\frac{x}{\sqrt{RMS(x)+\epsilon}} * WRMS(x)=RMS(x)+ϵ​x​∗W

数智融通 创新发展|亚信科技携AntDB、Data OS与隐私计算产品,赋能企业高质量发展

5月21日,亚信科技在云端举办了一场别开生面的研讨会——“数智融通 创新发展”,聚焦企业数智化升级的前沿话题。资深产品经理和技术架构师们面对面深入交流,分享创新成果与实战案例,共同探索企业数智化转型的新路径。 图1:活动海报 AntDB:CRM全域数据库的革新者 亚信科技AntDB数据库总架构师发表了题为《基于AntDB的CRM全域数据库替换实践》的演讲。其以通信运营商CRM数据库替换为例,深入剖析了企业核心数据库替换中的技术挑战与创新实践。数据库产品AntDB在SQL解析引擎优化、读写分离架构、子事务性能处理等方面展现了其技术创新,实现了数据的平滑迁移和性能的显著提升。 在分享过程中,展现了亚信科技在国内数据库迁移、数据同步、性能优化等方面的国产化解决方案与系列配套工具。 Data OS:智能数据中台的构建者 亚信科技数据中台产品经理发表了题为《基于Data Ops的智能数据中台》的演讲,深度解析了数据产业发展趋势,以及企业对智能化数据中台的迫切需求。数据中台操作系统Data OS集成了数据采集、分析和存储等关键功能,提供了一站式数据治理解决方案,助力企业释放数据资产价值,降低管理成本。 此外,还分享了数据中台操作系统Data OS在通信、政务等行业的成功应用案例,展示了其如何助力企业释放数据资产价值、降低管理成本,并利用动态传输方案、任务调度和主动元数据管理等核心功能,有效规避数据风险,提升数据管理质量。 隐私计算产品:数据安全的守护者 亚信科技隐私计算产品经理通过《探索“数据秘境”:隐私计算一体机,开启安全数据新时代》主题演讲,介绍了隐私计算产品。这一创新产品集成了多方安全计算、联邦学习等前沿隐私保护技术,确保数据在流转和处理过程中的安全性和隐私性,同时通过硬件加速技术,提供了强大的隐私计算能力。 同时,还分享了隐私计算产品在政务、汽车等多个领域展现出广泛的应用潜力,通过隐私求交、隐匿查询等功能,在保障数据安全的同时促进了数据的流通和共享,为各行业数据应用提供了坚实的技术支持,赋能千行百业。 图2:现场直播 通过本次活动,亚信科技展示了其在数据治理、探索分析、安全保障等方面的深厚技术功底和丰富实践经验。 亚信科技的AntDB数据库、Data OS数据中台操作系统、隐私计算产品等产品,不仅是技术层面的突破,更是企业数智化转型的加速器。这三款产品及其解决方案,有效提升了数据处理的效率和安全性,能够为企业提供更为深入的数据洞察和决策支持,唤醒数据价值,推动企业在数字化浪潮中稳步前行。 关于亚信安慧AntDB数据库 AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

【算法】深入浅出爬山算法:原理、实现与应用

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 爬山算法的基本原理 实现步骤 优点 缺点 改进方法 实际应用 示例代码 总结 作者其他作品: 爬山算法是一种简单且常用的优化算法,它通过不断地选择局部最优解来逼近全局最优解。尽管其简单易实现,但在处理某些复杂问题时,爬山算法也存在一些局限性。本文将介绍爬山算法的基本原理、实现步骤以及其优缺点,并讨论如何在实际应用中提高其性能。 爬山算法的基本原理 爬山算法的核心思想是从一个初始解出发,反复移动到邻域中的更优解,直到达到某个终止条件。其过程类似于登山,目标是尽可能地往高处攀登(即寻找最大值),或者在某些情况下往低处走(即寻找最小值)。 实现步骤 初始化:选择一个初始解。邻域搜索:在当前解的邻域内寻找一个比当前解更优的解。移动:如果找到了更优的解,则移动到该解。终止条件:如果在邻域内找不到更优的解,或达到预设的终止条件,则算法停止,当前解即为最终结果。 以下是一个简单的爬山算法的伪代码: function hill_climbing(initial_state): current_state = initial_state while True: neighbor = best_neighbor(current_state) if neighbor is better than current_state: current_state = neighbor else: break return current_state 优点 简单易实现:爬山算法逻辑简单,不需要复杂的数据结构和算法支持。快速收敛:对于一些简单的问题,爬山算法可以快速找到一个满意的解。 缺点 局部最优解:爬山算法容易陷入局部最优解,无法保证找到全局最优解。依赖初始解:算法的结果高度依赖于初始解的选择,初始解不同可能导致结果不同。无法处理复杂地形:对于具有多个局部最优解的复杂问题,爬山算法可能表现不佳。 改进方法 为了解决爬山算法的局限性,可以采用以下几种改进方法: 随机重启爬山算法:多次随机选择初始解,并独立运行爬山算法,从中选择最好的解。模拟退火算法:通过引入随机性和“退火”过程,有助于跳出局部最优解。遗传算法:使用进化策略,通过选择、交叉和变异等操作不断优化解。 实际应用 爬山算法在许多实际问题中都有应用,包括但不限于: 函数优化:寻找使目标函数值最大的输入。路径规划:在地图上找到从起点到终点的最短路径。机器学习:用于参数调优和模型优化。 示例代码 以下是一个简单的Python实现,旨在优化一个一维函数: import random def hill_climbing(func, initial_state, step_size, max_iterations): current_state = initial_state current_value = func(current_state) for _ in range(max_iterations): next_state = current_state + random.

MySQL 8.0 安装、配置、启动、登录、连接、卸载教程

目录 前言1. 安装 MySQL 8.01.1 下载 MySQL 8.01.2 安装 MySQL 8.0 2. 配置 MySQL 8.02.1打开环境变量2.2新建变量 `MYSQL_HOME`2.3编辑 Path 变量 3. 启动MySQL 8.03.1验证安装与配置是否成功3.2初始化并注册MYSQL3.3 启动MYSQL服务 4.登录MySQL4.1修改账户默认密码4.2登录MYSQL 5.连接MYSQL(工具:navicat)5.1新建连接5.2测试连接 6.卸载MYSQL8.06.1在控制面板中卸载所有关于的mysql软件6.2删除mysql 文件夹6.3删除相关注册表6.4删除MySQL环境变量 总结 前言 MySQL是一个广泛使用的开源关系数据库管理系统,以其高性能、可靠性和易用性而闻名。本教程将指导您完成在不同操作系统上安装、配置、启动MySQL 8.0,以及如何安全地登录和在需要时卸载它。 1. 安装 MySQL 8.0 1.1 下载 MySQL 8.0 访问 MySQL 官方网站(https://www.mysql.com/downloads/)下载 MySQL 8.0 的安装包。选择适合你操作系统的版本,如 Windows、macOS 或 Linux。 我这里是以mysql8.0.28rar为例进行设置 1.2 安装 MySQL 8.0 1.下载完成后将其解压到你想安装的位置(任意) 。 我的位置是:C:\Program Files\MYSQL 解压后一般是没有my.ini的文件的需要自己新建一个 [mysql] # 设置 mysql 客户端默认字符集 default-character-set=utf8 [mysqld] # 设置 3306 端口 port = 3306 # 设置 mysql 的安装目录 basedir= 【写安装mysql目录的位置】 # 设置 mysql 数据库的数据的存放目录 datadir= 【写安装mysql目录的位置】/data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为 8 比特编码的 latin1 字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB 2.

【MySQL】表的增删查改

表的增删查改 1.插入1.1单行数据 全列插入+指定列插入1.2多行数据 全列插入+指定例插入1.2插入否则更新1.4替换 2.查找2.1select 列2.2where 条件2.3结果排序2.4筛选分页结果 3.更新4.删除5.插入查询结果6.聚合函数7.分组查询 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.插入 语法: INSERT [INTO] table_name [(column [, column] ...)] #列字段 VALUES (value_list) [, (value_list)] ... #列字段的内容 value_list: value, [, value] ... 案例: -- 创建一张学生表 CREATE TABLE students ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, sn INT NOT NULL UNIQUE COMMENT '学号', name VARCHAR(20) NOT NULL, qq VARCHAR(20) ); 1.1单行数据 全列插入+指定列插入 指定列插入 列字段和列字段的内容一定要一一匹配 insert into student (sn,name,qq) values (123,'张飞','12345'); 全列插入

实战教学!JAVA根据PDF表单模板生成PDF文件(附带模板设计)

前言 前一阵子接到需求,需要把数据填充到pdf的表单中,生成pdf文件并发起CA签章。今天有空(划水)记录下生产模板文件过程。 注意:生成pdf表单文件需要Adobe Acrobat X Pro 软件 一、设计PDF模板 1、先在word中设计一个表格: 2、使用Acrobat软件大家刚才设计的表单word 3、编辑表单域 4、 修改表单域的属性 文本框 选择框 注意这边导出值为ON,且复选框默认为已选中(项目中所用依赖版本比较低,生产的pdf会出现√显示为×的情况所以逆向思维改为选择否的情况) 至此模板文件就准备好了。 二、后端代码 1、pom依赖 注意itext-asian依赖是为了解决生产pdf字体问题, hutool是为了file转换字节数组 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.3</version> </dependency> 2、详细代码 选择框 表单域选择时默认为选择状态 如果为on则是对钩 所以只需把不需要的表单字段设置为不为on的值即可 package com.hua.utils; import cn.hutool.core.io.FileUtil; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.*; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64Decoder; import java.io.*; import java.util.*; /** * @Author 云梦轻掩楼 * @Date 2024-05-10 08:39 * @Description **/ public class PDFUtil { public static Boolean base64StringToPdf(String base64Content, String filePath) throws IOException { BASE64Decoder decoder = new BASE64Decoder(); BufferedInputStream bis = null; FileOutputStream fos = null; BufferedOutputStream bos = null; try { byte[] bytes = decoder.

全网最全vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法)

补充日志:(我最开始是使用非流式接口实现的,后续业务改造使用流式接口,重点的代码讲解都在下边哈~~) 关于打印机效果后端同样可以实现的逻辑说明:(2024/4/11) 打印机效果使用前端的框架实现时,其实颇有局限,而且逻辑有点复杂,可以百度的也不是很多,最好是交给后端通同学来做,方案是后端控制接口请求的请求头content-type为text/event-stream;这是SSE热更新方案,相当于建立了一个长连接,前端再对该event事件流返回的数据进行判断和监听处理;简单理解就是可以实现后端一直给前端同学返回数据,我们再进行拼接即可,这样可以直接实现打印机效果啦, 2. 补丁上述使用流式接口实现打印机效果讲解:(2024/5/10) 详见下方代码以及讲解!(2-1) 3. 补充实退出时对会话进行保存(下次进入可以看到之前的对话):(2024/6/7) 详见下方代码以及讲解!(3-1) 1.与AI问答机器人对话模型效果展示 1-1:(含)提示词问答对话效果 1-2:停止生成对话效果展示 1-3:打字机延迟效果展示 1-4:整体布局样式效果预览 2-1.重点代码描述与解析(以下为前端对于流式接口的功能实现) 打印机效果使用了流式接口,其中我遇到的比较糟心的问题是 1.什么是流式?怎么使用,我该选择哪一种?如何实现获取流? 答: (1)流式就是一次链接 服务器可以一直给你发请求,可以主动中断请求也可等待请求完毕 ,其实就是一个长连接 相当于你打开门后 有人一直在给你递苹果(数量不一定多少) (2)一般来说 ,使用流式,用的都是厂商的api,开放给我们使用,一般都是post请求,由于原生的eventSource 构造函数 只支持get请求 且不可有请求体,一般对于ai问答需要传参的情况,我们不会使用 eventSource构造函数,那么剩下的就是模拟信息流,有fetch,ajax 等 (3)这里我使用的是fetch ,重要的是获取流数据。并将他二进制解码(对于文本数据),然后进行一些js方法操作后,与项目需要的数据类型匹配后进行自己的业务操作 2-1-1 通用业务情况下的fetch //注意 最好使用 async await 语法糖 包括后续在拿到请求结果后的异步逻辑也最好做同步处理! const resp = await fetch(baseUrl,{ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(你的请求体对象数据) } const reader = resp.body.getReader() //读取返回结果的流数据方法,内置 .read()方法 const decoder = new TextDecoder() //解码器 //循环拿到所有数据 done读取完毕 while(true){ //解构读取返回数据,在流式接口中,done 为请求结束,value 是未解码前的二进制数据 const {done ,value} = await reader.

前端三大主流框架:React、Vue、Angular

文章目录 一、React、Vue、Angular简介二、React初始化案例三、Vue初始化案例四、Angular初始化案例五、相关链接 一、React、Vue、Angular简介 前端三大主流框架分别是Angular、React和Vue。以下是这三个框架的详细概述: Angular: Angular原名AngularJS,诞生于2009年,由Google开发并维护。它是一个完整的框架,提供了数据绑定、组件化、路由、依赖注入等功能。Angular采用了TypeScript作为开发语言,它是JavaScript的一个超集,提供了静态类型检查和更强大的面向对象编程能力。Angular的特点包括功能强大、完整且稳定,适用于开发大型和复杂的Web应用。它提供了很多内置的功能和工具,如模板语法、表单验证、HTTP模块等,帮助开发者更快速地构建高质量的Web应用。Angular支持移动端开发,可以使用Ionic等工具将Web应用打包成原生应用。 React: React是由Facebook开发并开源的一个JavaScript库,正式版推出于2013年。它专注于构建用户界面,并以其虚拟文档对象模型(Virtual DOM)和高效的diff算法而闻名。React的组件化开发模式允许开发者将UI和业务逻辑分离,提高代码的复用性和可维护性。React对新开发人员来说较为友好,并提供了JSX语法,这是一种混合HTML和JavaScript的语言,使编写React组件更加容易和直观。React的社区支持庞大,可以找到大量的文档、教程和工具来帮助开发者解决问题。 Vue: Vue是一个由华人开发者尤雨溪创造的前端框架,正式推出于2014年。Vue借鉴了Angular和React的特点,如Virtual DOM、双向数据绑定、diff算法、响应式属性、组件化开发等,并进行了相关优化,使其使用更加方便和容易上手。Vue以其简洁易用和高效的特点而受到开发者的喜爱,尤其适合初学者。Vue也支持组件化开发,允许开发者将UI和业务逻辑分离,提高代码的可复用性和可维护性。 二、React初始化案例 React详细介绍 React是一个用于构建用户界面的JavaScript库,它起源于Facebook的内部项目。React的出现是因为Facebook对市场上所有JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站,并于2013年5月开源。React主要用于构建UI,可以在React里传递多种类型的参数,如声明代码,帮助开发者渲染出UI,也可以是静态的HTML DOM元素,也可以传递动态变量,甚至是可交互的应用组件。 React的特点包括: 声明式设计:React使创建交互式UI变得轻而易举。为应用的每一个状态设计简洁的视图,当数据变动时,React能高效更新并渲染合适的组件。组件化:构建管理自身状态的封装组件,然后对其组合以构成复杂的UI。高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。灵活:无论使用什么技术栈,React都可以方便地引入开发新功能,而无需重写现有代码。 React案例代码 Hello World示例代码 这是一个简单的React组件示例,用于显示“Hello, World!”文本。 import React from 'react'; import ReactDOM from 'react-dom'; class HelloWorld extends React.Component { render() { return <h1>Hello, World!</h1>; } } ReactDOM.render(<HelloWorld />, document.getElementById('root')); 这段代码通过React的ReactDOM.render方法将<HelloWorld />组件渲染到<div id="root"></div>元素中。组件的render方法返回一个包含<h1>标签的JSX表达式。 State和Props示例代码 这个示例展示了如何在React组件中使用状态和属性(state and props)。 import React from 'react'; import ReactDOM from 'react-dom'; class Counter extends React.Component { constructor(props) { super(props); this.

告别冗长代码:Java Lambda 表达式如何简化你的编程

在现代软件开发中,高效和简洁的代码变得越来越重要。Java作为一门成熟而广泛使用的编程语言,一直在不断进化,以满足开发者的需求。Java 8的推出标志着一次重要的飞跃,其中最引人注目的特性之一便是Lambda表达式。 Lambda表达式为Java带来了函数式编程的灵活性,使得代码不仅更加简洁,还大大提升了可读性和维护性。不再需要冗长的匿名类,开发者可以用更少的代码完成更多的功能。对于那些致力于编写高效、简洁代码的开发者来说,掌握Lambda表达式是不可或缺的技能。 在本篇文章中,我们将深入探讨Java的Lambda表达式,揭示它的强大功能和应用场景。无论你是Java的初学者,还是有多年经验的老手,这篇文章都将带你领略Lambda表达式的魅力,帮助你在编程之旅中迈上新的台阶。 文章目录 1、Lambda表达式概述1.1、Lambda表达式的简介1.2、Lambda 表达式的基本语法1.3、Lambda 表达式的基础示例1.4、Lambda表达式的要求 2、函数式接口2.1、什么是函数式接口2.2、函数式接口的定义2.3、主要的函数式接口2.3.1、接口 `Predicate<T>`2.3.2、接口 `Consumer<T>`2.3.3、接口 `Function<T, R>`2.3.4、接口 `Supplier<T>`2.3.5、接口 `BiConsumer<T, U>`2.3.6、接口 `BiFunction<T, U, R>`2.3.7、接口 `UnaryOperator<T>`:2.3.8、接口 `BinaryOperator<T>`: 3、Lambda 方法引用3.1、Lambda 方法引用的介绍3.2、静态方法引用3.3、实例方法引用3.4、特定类型的任意对象的实例方法引用3.5、构造器引用 4、Lambda 变量捕获4.1、变量捕获的类型4.2、什么是 Effectively Final?4.3、示例:捕获局部变量4.4、不可以捕获的情况4.5、捕获实例变量 5、Lambda 在集合当中的使用5.1、`Collection` 新增接口5.2、`List` 新增接口5.3、`Set` 新增接口5.4、`Map` 新增接口 1、Lambda表达式概述 1.1、Lambda表达式的简介 Java(SE)8 于 2014 年 3 月发布,引入了多个改进特性,其中 Lambda 表达式(Lambda expression,也可称为闭包(Closure))是最受欢迎的新特性之一。 Lambda 表达式允允许把函数作为一个方法的参数,允许在方法中传递代码块,从而实现更加灵活的编程方式。Lambda 表达式可以简化代码,减少样板代码的出现,并且使代码更加易读和易于维护。 Lambda 表达式允许我们通过表达式来代替功能接口。Lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式为 Java 添加了函数式编程的能力,简化了代码,使得编写简洁的代码成为可能。这一特性特别适用于对集合进行操作的场景。 1.2、Lambda 表达式的基本语法 Lambda 表达式基本上是一个简洁的表示匿名函数的方法,它不需要像匿名类那样繁琐。Lambda 表达式的语法如下: code(parameters) -> expression 或 (parameters) -> { statements; } 其中 Lambda 表达式的三个组成部分:

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么? 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI,拉去太慢可以使用手动安装 4. 配置本地大模型LLaMA2-7B 5. 验证配置 四、使用Ollama + AnythingLLM构建类ChatGPT本地问答机器人系 学习目标 1. 下载AnythingLLM 2. 安装AnythingLLM 3. 配置AnythingLLM 3.1 选择LLM、嵌入模型和向量数据库 3.2 设置环境变量(如果需要) 3.3 权限管理(如果需要) 4. 构建知识库 5. 开始使用 6. 自定义集成(如果需要) 7. 监控和反馈 8. 注意事项 9. 额外信息 参考文章 一、Ollama是什么? Ollama是一个功能强大的开源框架,旨在简化在Docker容器中部署和管理大型语言模型(LLM)的过程。以下是关于Ollama的详细介绍: 定义与功能: Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程,使得用户能够快速地在本地运行大型语言模型。特点与优势: 功能齐全:Ollama将模型权重、配置和数据捆绑到一个包中,定义成Modelfile。优化设置与配置:它优化了设置和配置细节,包括GPU使用情况。易用性:用户无需深入了解复杂的部署和管理流程,只需简单的安装和配置即可使用。支持热加载:用户无需重新启动即可切换不同的模型。支持的平台与模型: Ollama支持在Mac和Linux平台上运行。它支持运行多种开源大型语言模型,如Llama 2。API与界面: Ollama提供了类似OpenAI的API接口和聊天界面,方便用户部署和使用最新版本的GPT模型。安装与部署: Ollama的安装过程被极大地简化,并提供了多种选择,包括Docker镜像。 综上所述,Ollama是一个为在本地运行大型语言模型而设计的强大、易用、功能齐全的开源框架。它通过优化设置和配置,简化了在Docker容器中部署和管理LLM的过程,使得用户能够快速、方便地在本地运行大型语言模型。 二、如何在Mac上安装Ollama 在Mac上安装Ollama的步骤如下,结合了参考文章中的信息,并进行了适当的总结和归纳: 1. 准备工作 确认系统兼容性:Ollama支持在Mac上运行,但请确保您的Mac满足运行大型语言模型所需的最低系统要求。检查存储空间:安装和运行Ollama以及大型语言模型可能需要较大的磁盘空间。请确保您的Mac有足够的存储空间。 2.

Flink Sql:四种Join方式详解(基于flink1.15官方文档)

JOINs flink sql主要有四种连接方式,分别是Regular Joins、Interval Joins、Temporal Joins、lookup join 1、Regular Joins(常规连接 ) 这种连接方式和hive sql中的join是一样的,包括inner join,left join,right join,full join 1、指定数据源建立students表 CREATE TABLE students ( id STRING, name STRING, age INT, sex STRING, clazz STRING ) WITH ( 'connector' = 'kafka', 'topic' = 'students', -- 指定topic 'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092', -- 指定kafka集群列表 'properties.group.id' = 'testGroup', -- 指定消费者组 'scan.startup.mode' = 'latest-offset', -- 指定读取数据的位置为最新生成的数据 'format' = 'csv' -- 指定数据的格式 ); 2、kafka生产students表数据 kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic students 1500100001,施笑槐,22,女,文科六班 1500100002,吕金鹏,24,男,文科六班 1500100003,单乐蕊,22,女,理科六班 3、创建关联表scores CREATE TABLE scores ( sid STRING, cid STRING, --学科id score INT ) WITH ( 'connector' = 'kafka', 'topic' = 'scores', -- 指定topic 'properties.

Kafka源码分析(九)——Producer:Sender线程——Selector轮询

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析 阶段4、深入jdk其余源码解析 阶段5、深入jvm源码解析 码哥源码部分 码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】 码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】 码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】 ​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】 码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】 码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】 码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】 终结B站没人能讲清楚红黑树的历史,不服等你来踢馆! 打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】 上一章讲到,Sender线程将请求封装成ClientRequest,然后缓存到 InFlightRequests 和 KafkaChannel 中,最后关注KafkaChannel上的OP_WRITE事件。 本章,我们就看看Sender线程Loop执行的最后一步: // Sender.java this.client.poll(pollTimeout, now); 在之前的章节,我其实已经讲解过NetworkClient.poll()方法的底层原理,当时主要关注的是连接建立(OP_CONNECT)。本章,我重点讲解Slector是如何对Channel上的读写事件(OP_READ/OP_WRITE)进行处理的。 一、监听事件 Kafka客户端的底层对Java NIO进行了封装,但是万变不离其宗。Java NIO的Selector通过一个线程来管理多个Socket,我们可以将多个Channel注册到一个Selector上(一个Channel代表了一个Socket,在Java NIO中就是SocketChannel),并设置其感兴趣的事件。 这样一来,在Selector.select()操作时,若发现Channel中有我们感兴趣的事件发生,Selector就会将其记录下来(即SelectedKey),然后我们就可以对事件进行相应的处理了。 一个SelectionKey是与一个KafkaChannel关联的,Kafka Selector会监听以下事件的发生: OP_CONNECT: 连接就绪事件;OP_WRITE: 写操作就绪事件,即客户端可以将数据写到缓冲区;OP_READ: 读操作就绪事件,即客户端可以从缓冲区读取数据。 // NetworkClient.java public List<ClientResponse> poll(long timeout, long now) { //... try { // 调用org.apache.kafka.common.network.Selector的poll方法轮询Channel this.selector.poll(Utils.min(timeout, metadataTimeout, requestTimeoutMs)); } catch (IOException e) { log.error("Unexpected error during I/O", e); } //.

#04 Stable Diffusion与其他AI图像生成技术的比较

文章目录 前言1. Stable Diffusion2. DALL-E3. GAN(生成对抗网络)4. VQ-VAE比较总结 前言 随着人工智能技术的飞速发展,AI图像生成技术已成为创意产业和科研领域的热点。Stable Diffusion作为其中的佼佼者,其性能和应用广受关注。本文将对比Stable Diffusion与其他主流AI图像生成技术,帮助读者更好地理解各种技术的优势和局限。 1. Stable Diffusion 特点: 基于变分自编码器(VAE)和Transformer模型。能够生成高分辨率、高质量的图像。支持文本到图像的转换。模型训练需要大量数据和计算资源。 优势: 生成的图像细节丰富,色彩逼真。文本描述与图像内容高度相关。支持多种风格和主题的图像生成。 局限: 训练成本高,对硬件要求严格。对于复杂场景的生成可能需要更精细的文本描述。 2. DALL-E 特点: 由OpenAI开发,基于GPT-3架构。同样支持文本到图像的转换。生成的图像具有一定的创意性和抽象性。 优势: 能够生成极具创意的图像。文本理解能力强,能够处理复杂的文本描述。 局限: 图像分辨率和质量可能不如Stable Diffusion。模型训练和使用可能受到更多限制。 3. GAN(生成对抗网络) 特点: 包括生成器和判别器两个部分。通过对抗过程提高生成图像的质量。广泛应用于各种图像生成任务。 优势: 生成图像的质量通常很高。可以定制化训练,适应特定需求。 局限: 训练过程可能不稳定,需要精细调整。对于文本到图像的转换支持不如Stable Diffusion和DALL-E。 4. VQ-VAE 特点: 一种变分自编码器的变体。通过量化潜在空间来生成图像。适用于生成连续和离散的图像数据。 优势: 生成的图像具有良好的结构和细节。训练过程相对稳定。 局限: 在文本到图像的转换方面可能不如Stable Diffusion和DALL-E。生成的图像可能缺乏一些创意性。 比较总结 每种AI图像生成技术都有其独特的优势和局限。Stable Diffusion在文本到图像的转换方面表现出色,生成的图像质量高,细节丰富。DALL-E则在创意性和文本理解方面有其独到之处。GAN和VQ-VAE虽然也各有优势,但在文本到图像的转换方面可能不如前两者。 选择哪种技术取决于具体的应用需求和资源条件。对于追求高质量图像生成的用户,Stable Diffusion是一个不错的选择。而对于需要高度创意性和复杂文本理解能力的场景,DALL-E可能更为合适。

mysql之字符串函数

假设我们有一个字符串 'Hello, World!' 作为示例,我们会展示对这个字符串应用每个函数后的结果。 CONCAT(str1, str2, ...) 将多个字符串值连接成一个字符串。 SELECT CONCAT('Hello, ', 'World!'); -- 结果: 'Hello, World!' LENGTH(str) 返回字符串的长度(字节数)。 SELECT LENGTH('Hello, World!'); -- 结果: 13 CHAR_LENGTH(str) 返回字符串的字符数。 SELECT CHAR_LENGTH('Hello, World!'); -- 结果: 13 SUBSTRING(str, pos, len) 从字符串 str 中提取从位置 pos 开始的 len 长度的子字符串。如果不指定 len,则提取到字符串的末尾。 SELECT SUBSTRING('Hello, World!', 8, 5); -- 结果: 'World' LOWER(str) 将字符串中的所有字符转换为小写。 SELECT LOWER('Hello, World!'); -- 结果: 'hello, world!' UPPER(str) 将字符串中的所有字符转换为大写。 SELECT UPPER('Hello, World!'); -- 结果: 'HELLO, WORLD!' TRIM(str) 去除字符串两端的空白字符。

【数据结构】——线性表(顺序表)——内有代码详解

目录 一、引言 二、线性表 2.1 定义 2.2 特点 三、顺序表 3.1 顺序表的概念 3.2 顺序表的特点 3.3 顺序表的定义 3.3.1 静态定义 3.3.2 动态定义 3.4 顺序表的初始化 3.4.1 静态初始化 3.4.2 动态初始化 3.5 顺序表的销毁 3.6 顺序表元素的打印 3.7 顺序表的插入 3.7.1 检查空间,如果满了,进行增容 3.7.2 尾插 3.7.3 头插 3.7.4 中间插入 3.8 顺序表的删除 3.8.1 尾删 检查 1 温柔判断 2 暴力判断 代码: 3.8.2 头删 3.8.3 中间删除 3.9 顺序表的查询 四、总结 一、引言 我们学完了算法和算法效率的度量,接下来我们将进入线性表的学习了,也是数据结构较为重要的一部分, 二、线性表 2.1 定义 线性表(linear list):是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。 2.2 特点 表中元素的个数有限。表中元素具有逻辑上的顺序性,表中元素有其先后次序。表中元素都是数据元素,每个元素都是单个元素。表中元素的数据类型都相同,这意味着每个元素占有的相同大小的存储空间。表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。 *线性表是一种逻辑结构 ,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层次的概念,因此不可以混淆哦。

【C++】─篇文章带你熟练掌握 map 与 set 的使用

目录 一、关联式容器二、键值对三、pair3.1 pair的常用接口说明3.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.2 [有参构造函数 / 拷贝构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.3 [有参构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.4 [make_pair()函数](https://legacy.cplusplus.com/reference/utility/make_pair/) 四、树形结构的关联式容器4.1 标准库中的set4.1.1 set的介绍4.1.2 set的常用接口说明4.1.2.1 set对象的常见构造4.1.2.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/set/set/set/)4.1.2.1.2 [有参构造函数(使用迭代器进行初始化构造)](https://legacy.cplusplus.com/reference/set/set/set/)4.1.2.1.3 [拷贝构造函数](https://legacy.cplusplus.com/reference/set/set/set/) 4.1.2.2 set iterator 的使用4.1.2.2.1 [begin()函数](https://legacy.cplusplus.com/reference/set/set/begin/) + [end()函数](https://legacy.cplusplus.com/reference/set/set/end/)4.1.2.2.2 [rbegin()函数](https://legacy.cplusplus.com/reference/set/set/rbegin/) + [rend()函数](https://legacy.cplusplus.com/reference/set/set/rend/) 4.1.2.3 set对象的容量操作4.1.2.3.1 [size()函数](https://legacy.cplusplus.com/reference/set/set/size/)4.1.2.3.2 [empty()函数](https://legacy.cplusplus.com/reference/set/set/empty/) 4.1.2.4 set对象的增删查改及访问4.1.2.4.1 [insert()函数](https://legacy.cplusplus.com/reference/set/set/insert/)4.1.2.4.2 [erase()函数](https://legacy.cplusplus.com/reference/set/set/erase/)4.1.2.4.3 [swap()函数](https://legacy.cplusplus.com/reference/set/set/swap/)4.1.2.4.4 [clear()函数](https://legacy.cplusplus.com/reference/set/set/clear/)4.1.2.4.5 [find()函数](https://legacy.cplusplus.com/reference/set/set/find/)4.1.2.4.6 [count()函数](https://legacy.cplusplus.com/reference/set/set/count/)4.1.2.4.7 [lower_bound()函数](https://legacy.cplusplus.com/reference/set/set/lower_bound/)4.1.2.4.8 [upper_bound()函数](https://legacy.cplusplus.com/reference/set/set/upper_bound/)4.1.2.4.9 [equal_range()函数](https://legacy.cplusplus.com/reference/set/set/equal_range/) 4.2 标准库中的multiset4.2.1 multiset的介绍4.2.2 multiset的常用接口说明4.2.2.1 multiset对象的常用构造4.2.2.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/set/multiset/multiset/)4.2.2.1.2 [有参构造函数(使用迭代器进行初始化构造)](https://legacy.cplusplus.com/reference/set/multiset/multiset/)4.2.2.1.3 [拷贝构造函数](https://legacy.cplusplus.com/reference/set/multiset/multiset/) 4.2.2.2 multiset iterator 的使用4.2.2.2.1 [begin()函数](https://legacy.cplusplus.com/reference/set/multiset/begin/) + [end()函数](https://legacy.cplusplus.com/reference/set/multiset/end/)4.2.2.2.2 [rbegin()函数](https://legacy.cplusplus.com/reference/set/multiset/rbegin/) + [rend()函数](https://legacy.cplusplus.com/reference/set/multiset/rend/) 4.2.2.3 multiset 对象的容量操作4.2.2.3.1 [size()函数](https://legacy.cplusplus.com/reference/set/multiset/size/)4.2.2.3.2 [empty()函数](https://legacy.cplusplus.com/reference/set/multiset/empty/) 4.2.2.4 multiset 对象的增删查改及访问4.2.2.4.1 [insert()函数](https://legacy.cplusplus.com/reference/set/multiset/insert/)4.2.2.4.2 [erase()函数](https://legacy.