我们先看一下出图时模糊的图片效果。
我相信很多初学者在开始绘图的时候经常会碰到这种情况。当然我自己也曾经碰到过,我总结了一下,一般有以下几种情况。
第一种情况:大模型使用的是SDXL大模型,VAE模型选择了vae-ft-mse-840000-ema-pruned.safetensors。(必现场景)
这种情况是必现的。也是当时网友私聊时使用SD出图模糊的主要原因。
为什么这种情况会出现呢?
我们首先要了解一下什么是VAE模型,可以把VAE模型理解为颜色滤镜,它主要用于调节和美化生成图片的色彩。
对于VAE模型,可以参照我之前的文章【Stable Diffusion【模型篇】:VAE模型】,写的时间有些早,但是可以参照看一下。
VAE模型为什么会造成这个问题呢,主要是VAE模型也区分SD1.5和SDXL的模型的。我们的大模型使用的是基于SDXL的大模型,但是VAE模型选择的ae-ft-mse-840000-ema-pruned.safetensors是基于SD1.5的大模型,二者并不匹配。
下面是C站上面关于SD1.5的模型。
从上面的图片我们可以看到很多常见的VAE模型都是基于SD1.5的。这里就包括我们上面提到的vae-ft-mse-840000-ema-pruned。
关于SD1.5的VAE模型这里罗列了一些常见的,感兴趣的朋友可以了解一下。
vae-ft-mse-840000-ema-pruned
vae-ft-ema-560000-ema
kl-f8-anime系列(主要用于动漫大模型)
ClearVAE(主要用于动漫大模型)
Color101(生成更鲜艳色彩,更接近HDR效果和更自然图像的VAE)
下面是C站上面关于SDXL的模型。
基于SDXL的VAE模型相当比较少,最常用的是sdxl vae模型。为什么基于SDXL的VAE模型比较少呢,因为VAE模型本身就比较小,很多SDXL的大模型都已经融入了VAE模型,所以基于SDXL的大模型一般不选择VAE模型出图效果也不错的。例如在LiblibAI网站,当我们选择SDXL大模型的时候,VAE模型选项是禁止选择的。
一般来说,对于基于SDXL的大模型,我们VAE模型可以不用选择,要选择的话最好选择sdxl_vae。
我们来对比看一下效果。
正向提示词:1 super beautiful chinese girl, solo
反向提示词:nsfw,easynegative,ng_deepnegative_v1_75t,(worst quality:2),(low quality:2),(normal quality:2),lowres,bad anatomy,bad hands,normal quality,((monochrome)),((grayscale)),((watermark)),
下面是相关参数配置:
大模型:SDXL 1.0的基础大模型
采样器:Euler a
采样迭代步数:30
图片宽高:1024*1024。
提示词引导系数(CFG):7
不使用VAE模型生成的图片
使用sdxl_vae模型生成的图片
基于SDXL的大模型使用VAE模型和不使用VAE模型差别大吗,大家可以自己甄别哈。
总结:使用SDXL的大模型+SD 1.5的VAE模型生成的图片大概率都是糊的。
第二种情况:大模型使用的是基于SDXL大模型,选择了Refiner(精炼器)
这种情况不是必现的。
今天尝试了很多次,都没有模拟出来,不过之前在使用SDXL基础模型出图的时候碰到的概率还是蛮大的,后面我选择SDXL基础模型的时候关于Refiner选项我一般是不选中的。
关于SDXL的Refiner(精炼器)主要属于细化模型。对图像进一步优化细节。目前有些大模型并不兼容Refiner(精炼器)。
第三种情况:由于各种原因图片未生成完毕SD系统工具出问题了,例如报OOM的显存异常等
另外:如果我们采样迭代步数设置的比较小,例如上面的示例中将采样迭代步数设置为5,出来的图片也是模糊的,但是和上面图片的模糊不是一个类型哈。
还有其他的情况吗,欢迎各位小伙伴们积极补充哦。
这里就简单说几种应用:
1. 人物和背景分别控制
2. 三维重建
3. 更精准的图片风格化
4. 更精准的图片局部重绘
以上就是本教程的全部内容了,重点介绍了controlnet模型功能实用,当然还有一些小众的模型在本次教程中没有出现,目前controlnet模型确实还挺多的,所以重点放在了官方发布的几个模型上。
同时大家可能都想学习AI绘画技术,也想通过这项技能真正赚到钱,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学,因为自身做副业需要,我这边整理了全套的Stable Diffusion入门知识点资料,大家有需要可以直接点击下边卡片获取,希望能够真正帮助到大家。
【spark sedona k8s】spark(sedona) on kubernetes(k8s) 搭建,使用spark-operator提交任务 引言 成功搭建 spark on yarn 后,总是觉得它与我们的服务之间不好联动。之前我们的服务都运行在 docker 之中,spark 又运行在 hadoop 中,我们要想通过服务控制集群执行任务,结合现在的情况,已有的解决方案十分麻烦,要么就是部署一个服务在 hadoop 的 master 节点上,通过系统命令来控制,要么就是安装第三方工具。总之不管哪种办法我都觉得不够好,于是便想到在 k8s 上跑 spark。
一、架构介绍 相较于之前的 spark 由 yarn 调度,使用 k8s 调度最大的好处是可以弹性伸缩,整个 k8s 集群中除了跑其他服务以外还能跑 spark 任务,其他服务不忙的时候,可以给 spark 的任务多一点资源。又因为 k8s 是自带 REST Api 的,所以我们在 k8s 上跑的服务可以通过访问 ApiServer 接口的方式直接向 k8s 提交 spark 任务。它的流程看起来像这样:
这样看起来就很优雅了,将 spark 的调度交给 k8s,k8s 能动态管理我们的任务所需资源,我们与 spark 的交互也可以挪到 java 服务上,k8s 的健壮性、容错性我就不多提了,集群搭建起来也挺简单的。接下来我们就开始搭建 spark on k8s 并且开启 spark operator 管理任务。
二、搭建 在正式开始之前,你得有一个能正常运行的 k8s 集群,接下来的操作默认你有了一个能正常运行的 k8s 集群。如果你的集群还没搭建起来,参考我的 另外一篇帖子,先搭建集群。
Midjourney是一款强大的AI画图工具,允许用户在Discord上使用文本提示创建令人惊叹的图像。凭借其广泛的命令范围,你可以微调图像生成过程、调整设置并查看用户信息。
在这个完整指南中,我们将深入探讨Midjourney命令的终极列表,为您提供掌握这个强大工具所需的知识。
Midjourney命令简介 Midjourney命令使用户能够与Discord上的Midjourney AI机器人进行交互,以生成图像、修改默认设置、监视用户配置文件和执行其他几个有用的任务。
这些命令可以在任何机器人频道上使用,在允许Midjourney AI机器人操作的私人Discord服务器中或通过与机器人本身的直接消息。
基本Midjourney命令
这些是您在Discord上经常使用的基本Midjourney命令。熟悉这些基本命令可以增强您与Midjourney机器人的体验:
/imagine(例如, /imagine waffles and pancakes):使用文本提示生成图像的主要命令。
/help:显示有关Midjourney机器人的有用信息和提示。
/info:显示有关您个人资料的信息。
/subscribe:订阅Midjourney服务。
/fast:切换到快速模式,可以更快地生成图像,但可能会导致一致性较差且成本较低。
/relax:切换到放松模式,可以更慢地生成图像,并且不需要费用。
/show <jobid> :通过其作业ID恢复先前生成的任何图像。
/private: 将您的图片生成任务设置为私密状态.
/public: 使所有任务重新公开可见.
/prefer: 让你访问诸如自定义 Midjourney 选项之类的设置。
虽然您将使用最多次数最多次数是 /imagine 命令, 理解其他基础命令可以帮助您浏览和优化与 Midjourney 的体验。
“/imagine”命令的高级参数
参数是在 /imagine命令末尾添加的必要输入,它们出现在提示词后面,并且必须以 -- 开头,用于修改图像生成过程。
以下是最常用的参数:
--aspect/-ar:以指定宽高比生成图像。
--seed:为图像生成设置种子值。
--sameseed:将相同的种子值应用于所有生成的图片中。
--no(例如-no plants): 从图片中排除特定元素。
--iw: 1-2,设置图片提示/参考的权重.
--stylize <number>: 确定图片风格强度.
--q <number>: 调整图片质量.
--chaos <number>: 控制图片随机性.
--stop: 停止影象产生进程
--v <1到5>: 指定Midourmey的版本
--style: 指定风格
--tile: 这个参数生成可用作重复平铺的图像,以创建无缝图案。
风格命令
文章目录 一、Stable Diffusion的工作原理二、从提示词到模型出图的过程三、Stable Diffusion在艺术创作中的应用《Stable Diffusion AI绘画从提示词到模型出图》内容简介作者简介楚天 目录前言/序言本书特色特别提示 获取方式 在科技的飞速发展中,Stable Diffusion AI绘画技术的出现,为艺术创作带来了革命性的变化。这项由CompVis、Stability AI和LAION联合研发的技术,通过深度学习模型,将文字描述转化为生动的艺术作品,让创意与想象的边界得以无限拓展。
一、Stable Diffusion的工作原理 Stable Diffusion基于扩散模型的思想,通过大量数据的学习与训练,能够准确捕捉图像中的细节和特征。用户只需输入一段描述性的文字,Stable Diffusion便能根据这些文字生成相应的图像。这一过程中,用户还可以通过调整参数、选择不同的模型等方式,来优化生成的图像效果。
二、从提示词到模型出图的过程 在使用Stable Diffusion进行绘画时,首先需要根据自己的创意和需求,编写一段描述性的文字作为提示词。这些提示词可以涵盖图像的主题、风格、细节等各个方面。然后,将提示词输入到Stable Diffusion系统中,选择合适的模型和参数进行生成。在生成过程中,系统会根据提示词和所选模型的特点,逐步将文字描述转化为图像。最后,经过一系列的后处理和优化,便可以得到一幅满意的艺术作品。
三、Stable Diffusion在艺术创作中的应用 Stable Diffusion在艺术创作中的应用十分广泛。无论是动漫人物、水墨画、AI摄影还是商业海报等领域,Stable Diffusion都能发挥出其独特的优势。通过Stable Diffusion生成的艺术作品,不仅具有高度的创意性和个性化特点,还能快速满足各种创作需求。此外,Stable Diffusion还可以与其他AI技术相结合,为艺术创作提供更多可能性和灵感。
Stable Diffusion AI绘画技术的出现,为艺术创作带来了前所未有的机遇和挑战。让我们拭目以待这项技术未来的发展和创新成果吧!
《Stable Diffusion AI绘画从提示词到模型出图》 内容简介 《Stable Diffusion AI 绘画从提示词到模型出图》介绍了 Stable Diffusion AI 绘画工具及其使用技巧。书中内容分为两部分:“基础操作篇”,讲解了 SD 文生图、图生图、提示词、模型、ControlNet 插件等核心技术的应用,帮助读者快速从新手成长为 SD 制图高手;“案例实战篇”,精选了动漫人物、水墨画、AI 摄影、商业海报、电商模特、产品包装、电影角色等大量 AI 绘画案例,并带有详细的同步教学视频,读者可以边学边做,提高学习效率。
《Stable Diffusion AI 绘画从提示词到模型出图》可作为高等院校平面设计、艺术设计等专业的教材,也适合设计师、游戏师、摄影师,以及美术、绘画、设计等行业的从业人员阅读。
作者简介 楚天 Al绘画的先行者、探索者,使用过Midjoumey、Stable Diffusion、Novel、文心一格等Al绘画软件的多个版本,实战经验丰富
Cha t GPT资深用户,历经ChatGPT-1到ChatGPT-5版本的变化,熟练掌握使用规则,特别是与Stable Diffusion、Midjourney的联合运用,颇有心得
中国摄影家协会会员、湖南省摄影家协会会员、长沙市摄影家协会会员、中国人像摄影家协会会员、湖南省青年摄影家协会会员
摄影粉丝博主,“手机摄影构图大全”公众号创始人,拥有粉丝30万+,分享了300多种构图方法
抖音短视频创作者,代表作《━镜看长沙·大河西》,阅读量40万+,作品入选CCTV-1、CCTV-3国庆晚会《中国梦·祖国颂》
目录 基础操作篇 第1章SD文生图的技巧 002 1.
‘’ LLama Factory,这个工具能够高效且低成本地支持对 100 多个模型进行微调。LLama Factory 简化了模型微调的过程,并且易于访问,使用体验友好。此外,它还提供了由 Hiyouga 提供的 Hugging Face 空间,可用于对模型进行微调。
下载LLaMA-Factory #下载LLaMA-Factory git clone https://github.com/hiyouga/LLaMA-Factory.git #创建一个环境 conda create -n llama_factory python=3.10 #切换到llama_factory环境 conda activate llama_factory #进入到LLaMA-Factory目录下 cd LLaMA-Factory #下载LLaMA-Factory所需要的包 pip install -r requirements.txt 开始 启动页面: python src\train_web.py 进入可视化页面: 支持 Lora 和 GaLore 配置,以减少 GPU 的使用。用户可以通过简单的滑块轻松更改参数,如 dropout、epochs、批次大小等。同时,也有多个数据集选项可供选择以微调你的模型。正如本文所述,LLama Factory支持许多模型,包括不同版本的 LLama、mistral 和 Falcon。它还支持像 galore、badm 和 Lora 这样的高级算法,提供诸如flash attention、位置编码和缩放等各种功能。
此外,你还可以集成像 TensorBoard、VanDB 和 MLflow 这样的监控工具。为了更快地进行推理,你还可以使用Gradio 和 CLI。本质上,LLama Factory 提供了一系列多样化的选项,以增强模型性能并简化微调过程。
LLaMA-Factory有自带的数据集也可以自己生成数据集然后导入:
几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关工具如拼接类的使用,对写出高质量代码是非常有帮助的。关于这个问题,我前面的回答是一个通常的概要性回答,至少你要知道 String 是 Immutable 的,字符串操作不当可能会产生大量临时字符串,以及线程安全方面的区别。
文章目录 1、面试问题2、问题分析3、典型回答4、问题深入5、问题拓展5.1、拓展问题:请解释 StringBuffer 是如何实现线程安全的?5.2、拓展问题:在什么情况下你会选择使用 StringBuilder 而不是 StringBuffer?5.3、拓展问题:描述一下字符串常量池(String Pool)的工作原理。它是如何影响字符串实例的?5.3.1、工作原理5.3.2、如何影响字符串实例5.3.3、示例 5.4、拓展问题:String 的 intern() 方法在性能优化中起什么作用?它是如何工作的?5.4.1、`intern()` 方法的作用5.4.2、`intern()` 方法的工作原理5.4.3、示例代码5.4.4、性能优化场景5.4.5、注意事项 5.5、拓展问题:你能解释 Java 在处理字符串拼接时如何优化性能吗?尤其是在 Java 9 以后的版本。5.5.1、Java 9 之前的优化5.5.2、Java 9 及以后的优化5.5.3、具体性能优化的优势 1、面试问题 今天的面试问题:String、StringBuffer、StringBuilder 有什么区别?
2、问题分析 这个面试题主要考察了以下几个关键点:
对 Java 字符串管理的理解:面试题首先测试你是否了解 Java 中字符串的基本概念,包括 String、StringBuffer 和 StringBuilder 的用途和基本工作原理;
不可变性和可变性的理解:通过这个问题,面试官希望看到你是否理解不可变(Immutable)和可变(Mutable)对象的区别,以及这些特性如何影响性能和线程安全;
线程安全的知识:问题中提到的 StringBuffer 和 StringBuilder 的区别,特别是在线程安全方面,考察你是否理解多线程环境下的数据安全和性能问题;
性能考虑:通过对比 String、StringBuffer 和 StringBuilder,面试官想测试你是否能够根据不同的使用场景选择最合适的工具,以优化性能。这涉及到你是否能够在实际编程中做出合理的性能权衡;
Java API 的熟悉程度:知道这三个类的具体方法和使用场景可以显示出你对 Java 标准库的熟悉程度,这对于 Java 开发者是非常基础的要求。
总体来说,这个问题不仅考察了技术细节,还考察了面试者在面对具体编程问题时的决策能力,特别是在性能优化和线程安全之间做出权衡的能力。这些都是任何希望在 Java 开发领域内成长的开发者必须掌握的关键技能。
3、典型回答 首先,String 是 Java 语言中非常基础和重要的类,它提供了构造和管理字符串的各种基本逻辑。String 对象一旦创建,其值就不能被改变,这种特性称为不可变性(Immutable)。由于它是 final 类,无法被继承,所有的属性也是 final 的。这种不可变性使得 String 对象在多线程环境中可以安全地使用,但是它也意味着像字符串拼接这样的操作会生成许多临时的中间对象,从而可能影响性能。
目录
完整流程
1:安装sqoop(直接官网下就行了)详细教程点这里
2.测试连接sqoop连接mysql
2-1代码与解释
2-2结果
3.导入mysql数据到hive中
4.导入成功截图
遇到的问题
问题一:
完整流程 1:安装sqoop(直接官网下就行了)详细教程点这里 在sqoop中配置环境(例如在/opt/sqoop-1.4.7.bin__hadoop-2.6.0/conf)
这里的地址要找出你对应的zookeeper,hadoop,hive地址
2.测试连接sqoop连接mysql 2-1代码与解释 sqoop list-databases --connect jdbc:mysql://192.168.10.102:3306/ --username root --password 1111 上面的地址是虚拟机地址,端口号默认为3306(也可以查一下此端口是否有mysqld,如下面),后面的是用户名(root)和密码(1111),都是根据自己的填
[root@hadoop102 ~]# sudo lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 2428 mysql 53u IPv6 93577 0t0 TCP *:mysql (LISTEN) 2-2结果 正常情况下,可以显示所有数据库
3.导入mysql数据到hive中 sqoop import --connect jdbc:mysql://192.168.10.102:3306/kk --username root --password 1111 --table student --fields-terminated-by ',' --delete-target-dir --num-mappers 1 --hive-import --hive-database db_msg --hive-table student 这个命令是,将mysql中kk数据库中的表student导入到hive的db_msg数据库的student表(hive中的表可不存在,会自动创建)
文章目录 问题描述问题原因解决办法方法一:在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息方法二:重载OnOK函数方法三:将所有按钮类型设为普通按钮,并设置其中一个按钮为默认按钮 问题描述 一般情况下编写的MFC对话框程序在运行的时候,如果不注意按下了ENTER 或者Esc 键,程序窗口就会默认退出。 问题原因 之所以会这样,是因为按下 Enter 键时,Windows 就会自动去找输入焦点落在了哪一个按钮上,但获得焦点的按钮的四周将被点线矩形包围。如果所有按钮都没有获得输入焦点,Windows 就会自动去寻找程序或资源所指定的默认按钮(默认按钮边框较粗)。 如果对话框没有默认按钮,那么即使对话框中没有OK 按钮,OnOK 函数也会自动被调用,对于一个普通的对话框程序来说,OnOK 函数的调用, 以为着程序会立刻退出。
为了使Enter 键/Enter 键无效,可将CExDlg 的OnOK 函数写成空函数, 然后针对OK 按钮写一个新的函数来响应。Esc 键的原理也类似,它是默认和OnCancel 函数映射在一 起的。对于 ESC 键/Enter 键,也可重载 CDialog 类的PreTranslateMessage 函数,当发现是 ESC 键/Enter 键的时 候,过滤掉这个消息或者是替换掉这个消息。
解决办法 方法一:在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息 BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg) { //屏蔽ESC键按下 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) { return TRUE; } //屏蔽Enter键按下 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN && pMsg->wParam) { return TRUE; } //操作其他msg return CDialog::PreTranslateMessage(pMsg); } 方法二:重载OnOK函数 void CxxxDlg::OnOK() { // TODO: Add extra validation here return; } void CxxxDlg::OnClickedOk() { // TODO: Add your control notification handler code here CDialog::OnOK(); } 方法三:将所有按钮类型设为普通按钮,并设置其中一个按钮为默认按钮 这样下次按Enter 键就默认执行默认按钮的功能(比如刷新)。
整理 | 王启隆
出品 | AI 科技大本营(ID:rgznai100)
一分钟速览新闻点!
2024 Q1 全球 AI 融资降温
马斯克的 xAI 获 60 亿美元融资,Meta 主管 LeCun 愤然开炮
中国 AI 辅导应用席卷美国市场
苹果将为 Safari 浏览器增加 AI 功能
Stability AI 推出文生图聊天机器人 Stable Assistant
清华大学革新 YOLOv10 登 GitHub 热榜
清华大学携手华为诺亚方舟实验室打造 iVideoGPT
全球 AI 要闻
2024 Q1 全球 AI 融资降温:投资总额 1564 亿,Lambda、Mistral AI 引领风潮,Databricks 推新模型逐鹿
近日,摩根士丹利发布报告,2024 年第一季度全球 AI 与机器学习领域在投资市场稍显降温,共录得 179 笔融资交易,总金额达 216 亿美元(约 1564.27 亿人民币),较去年同期下降 31.2%。值得注意的是,本季大额融资事件中,Anthropic、Mistral AI 和 xAl 三家公司贡献了 53 亿美元(约 383.
spring boot版本:2.3.12.RELEASE
MySQL版本:8.0
Kafka版本:kafka_2.13-2.5.0
本次示例流程:MySQL中有数据表一张student,两个字段(id、name),随机插入100条数据,然后从MySQL查询数据,发送数据到Kafka,并消费Kafka.
pom依赖 <!--spring-boot-starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--spring-boot-starter-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- spring-kafka --> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </dependency> <!--fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.32</version> </dependency> <!--HuTool-all--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.26</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>33.2.0-jre</version> <scope>compile</scope> </dependency> <!-- gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> <!--Mybatis-Plus 注意版本--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.16</version> </dependency> <!
初识触发器 专栏内容:
postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
文章目录 初识触发器概述 触发器的介绍 触发器事件 行级触发器 语句级触发器 触发器作用对象 表对象触发器 视图对象触发器 触发器行为 数据的可见性 总结 结尾 概述 在以前,每次入职新员工,HR就特别忙,要验收入职资料,还要找各负责人开通帐号,还要发好些通知,同时还要在各种类型的表格中填加一行新的内容,丝毫不敢马虎大意。
现在使用了数据库系统之后,这些事情就变得简单多了,只需要验收资料,录入新员工信息,其它就会自动触发,这就用到了触发器这一功能。
和其它商业数据库一样,在postgresql 中也支持触发器这一功能,那么什么是触发器呢,又有什么作用呢?
本节内容就是带大家认识一下触发器,以及触发器的作用。
触发器的介绍 触发器 (trigger) 顾名思义就是自动会触发的一种行为,类似于地雷,碰到了就会炸。
在postgresql 中,触发器以下内容组成:
触发器定义的触发事件,在等谁来触发它;触发器作用对象,或者是应用的对象,也就是触发器安装到什么地方了;触发器的行为,也就是事件发生后,触发器如何炸,内部填充的内容又是什么; 下面就这两部分展开来聊一聊。
触发器事件 根据触发器事件类型的不同,分为两大类型,一种是行级事件;另一种是语句级的触发器。
下面来看它们有什么不同。
行级触发器 行级触发器(row-level triggers 或 per-row triggers), 对于每个数据行来说,它的变化行为有insert新增一行数据,update修改行数据的值,delete减少一行数据。
针对行数据的变化事件,都可以使触发器工作,每条变动的数据行都会触发,假如一条SQL语句删除了100行,那么就会触发100次。
当然触发器更加精准,还区分了事件发生前 Before,与事件发生后 after触发。
从图中可以看到,触发器是在执行修改的节点前后进行触发,每一行数据都会经过扫描节点,modify节点。
语句级触发器 语句级触发器(statement-level triggers 或 per-statement triggers), 是基于SQL语句事件来触发,也就是说无论每条SQL语句影响的数据行有多少,只触发一次。
当然语句级触发器也分事件发生前 Before,与事件发生后 after触发。
从图中可以看到,触发器是在整个SQL计划执行的节点前后进行触发,只经过一次,所以也就会只触发一次。
触发器作用对象 上面介绍了触发器的分类,那么触发器可以定义于那些数据库对象上面呢?
触发器可以作用于数据表(table),视图(view)以及外部表(foreign table), 这里特别提一下,postgresql 的触发器可以作用于视图上,这是非常实用的一点。
表对象触发器 可以附加到表(无论是否分区)和外部表上。
它们可以在INSERT、UPDATE、DELETE操作的before或after触发器,并且可以是针对每一行或每个SQL语句触发一次。
对于UPDATE触发器,还可以设置为仅当UPDATE语句的SET子句中提到某些列时才触发。
题目 【实验主题】
影视网站后台影视记录管理页设计
【实验任务】
1、浏览并分析多个网站后台的列表页面、编辑页面(详见参考资源,建议自行搜索更多后台页面)的主要元素构成和版面设计,借鉴并构思预期效果。
2、新建 index.html文件,合理运用HTML标记编写2个单元:[影视记录列表]、[记录编辑表单]。
1)[影视记录列表]建议用表格<table>系列标记组织,字段至少包含海报(显示缩略图)、影视名称、影视类别等,其余字段自行设计;同时包含 [操作]列,此列需有 [编辑]、[删除]2个超链接或者按钮。
2)[记录编辑表单]除了包含列表中的字段,还可添加剧情介绍等字段,同时包含 [保存]按钮。
3)在页面的恰当位置添加1个 [添加]超链接或者按钮。
4)页面初始打开时,列表应已经有至少 3条记录。
5)合理编写CSS样式,对列表、表单美化排版。
3、新建 .js文件,实现影视记录的增删改功能。
1)单击 [影视记录列表]某记录的 [删除],将显示确认对话框,得到确认后删除表中对应记录。
2)单击 [影视记录列表]某记录的 [编辑],表中对应记录的各字段值将填写到 [记录编辑表单]相应表单域;单击 [保存]按钮后将首先做字段非空等数据合规性校验,校验不通过则提示更正,通过则更新表中对应记录。
3)单击 [添加],清空 [记录编辑表单]各表单域;单击 [保存]按钮后将首先做字段非空等数据合规性校验,校验不通过则提示更正,通过则添加至列表。
4、(选做)与后端服务器数据同步。
1)在页面的恰当位置添加 [同步]和 [刷新]超链接或者按钮。
2)单击 [同步],以Ajax方式将列表全部记录同步至后端服务器。
提示1:Ajax工具集见下面的【实验提示】说明。
提示2:除了appKey参数,其余自定义参数建议尝试 post方式提交。
3)单击 [刷新],将刷新(重新加载)页面;编写页面初始化事件处理函数,以Ajax方式从后端获取数据,并呈现至 [影视记录列表]。
window.οnlοad=function(){
//todo: 以Ajax方式从后端获取数据,初始化 [影视记录列表]
};
效果图展示 文件内容 index.html文件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>后台影视记录管理</title> <link rel="stylesheet" href="style.css" /> <script src="script.js"></script> </head> <body> <div class="recordlist"> <h1>影视记录列表</h1> <table id="
2024年5月22日,Go 1.23版本[1]功能特性正式冻结,后续将只改bug,不增加新feature。
对Go团队来说,这意味着开始了Go 1.23rc1的冲刺,对我们普通Gopher而言,这意味着是时候对Go 1.23新增的功能做一些前瞻了!
在Go没有发布Go 1.23rc1之前,我们至少可以通过以下两种渠道体验Go 1.23的最新特性:
通过go install安装tip版本;
使用Go playground[2]在线体验。
注:关于Go tip的安装方法以及Go playground在线体验的详细说明,这里就不赘述了,《Go语言第一课》[3]专栏的“03|配好环境:选择一种最适合你的Go安装方法[4]”有系统全面的讲解,欢迎订阅阅读。
按照Go Release cycle[5],Go 1.23将于2024年8月发布!因此目前为时尚早,下面列出的有些变化最终不一定能进入到Go 1.23的最终版本中,有小概率被revert的可能或者推迟到下一个版本(Go 1.24),所以切记一切变更点要以最终Go 1.23版本发布时为准。
1. 语言变化 Go 1.23语言变化较少,除了range over func试验特性转正,再有就是几个悬而未决的spec变更。
1.1 range over func试验特性转正(61405[6]) Go 1.22版本[7]引入了range over func[8]试验特性,通过GOEXPERIMENT=rangefunc,可以实现函数迭代器。这一特性在Go 1.23版本正式转正,下面代码可以直接使用Go 1.23编译运行:
// go1.23-foresight/lang/range-over-function-iterator/main.go package main import "fmt" func Backward[E any](s []E "E any") func(func(int, E) bool) { return func(yield func(int, E) bool) { for i := len(s) - 1; i >= 0; i-- { if !
📝个人主页🌹:Eternity._
⏩收录专栏⏪:C++ “ 登神长阶 ”
🤡往期回顾🤡:C++内存管理
🌹🌹期待您的关注 🌹🌹
❀C++模板初阶 📒1. 为什么需要模板?📒2. 函数模板🌈函数模板概念🌈函数模板的原理🌈函数模板的实例化🌙隐式实例化🌞显式实例化 🌈模板参数的匹配原则 📒3. 类模板🎈类模板的定义格式🎩类模板的实例化 🔥4. 总结拓展拓展:🐫驼峰命名法 前言:在C++编程世界中,模板是一个强大的工具,它使得程序员能够编写更加通用、灵活和可重用的代码。通过模板,我们可以编写与类型无关的代码,这些代码可以在编译时根据所需的具体类型进行实例化。本文将带你走进C++模板的初阶世界,探索泛型编程的基石
泛型编程: 编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
📒1. 为什么需要模板? 我们来看看之前如何实现一个交换函数
// 函数重载 void Swap(int& left, int& right) { int temp = left; left = right; right = temp; } void Swap(double& left, double& right) { double temp = left; left = right; right = temp; } void Swap(char& left, char& right) { char temp = left; left = right; right = temp; } int main() { int a = 1, b = 9; double c = 1.
如何让大模型更聪明? 引言 微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制(如HTTP或消息队列)与其他服务进行交互。
微服务架构的关键特点包括:
独立部署:每个微服务可以独立部署,不需要影响其他服务。这使得开发和运维更加灵活,能够更快地响应业务需求的变化。独立开发:不同的微服务可以由不同的团队开发,每个团队可以选择最适合其服务的技术栈和开发工具。单一职责:每个微服务专注于完成特定的业务功能,遵循单一职责原则(SRP),这使得代码更加简洁、维护更加容易。去中心化的数据管理:每个微服务可以有自己的数据库,这样可以减少服务之间的数据耦合。弹性扩展:微服务架构可以按需扩展某个特定的服务,而不是整体应用。这样更能有效利用资源,提高应用的可用性和性能。容错性:微服务的独立性使得某个服务的故障不会直接导致整个系统的崩溃,提高了系统的容错性。 微服务的优势 灵活性:能够快速适应业务需求的变化,通过独立部署来实现快速迭代。技术多样性:允许使用不同的技术栈来实现不同的微服务,充分利用各种技术的优势。故障隔离:一个微服务的失败不会影响整个系统,增强了系统的稳定性。 微服务的挑战 复杂性增加:系统由许多微服务组成,需要有效的服务管理和协调,增加了系统的复杂性。分布式系统管理:微服务架构需要处理分布式系统的一些常见问题,如网络延迟、数据一致性、服务发现等。部署和运维:需要一套完善的持续集成和持续部署(CI/CD)流程以及监控、日志系统,以确保微服务的高效运作。 微服务架构特别适用于大型、复杂且需要频繁迭代和部署的大型应用,但对中小型应用可能过于复杂。因此,选择微服务架构需要根据具体业务需求和团队能力来做出决定。
国内的微服务框架 1. Spring Boot 和 Spring Cloud 介绍:
Spring Boot 和 Spring Cloud 是最常用的微服务框架组合。Spring Boot 提供了一种快速创建独立的、生产级别的基于Spring的应用程序的方法,而 Spring Cloud 则提供了用于分布式系统开发的各种工具。
特点:
自动配置和内嵌服务器,简化开发和部署
丰富的生态系统和强大的社区支持
提供全面的微服务支持(服务发现、配置管理、断路器等)
2. Dubbo 介绍:
Dubbo 是阿里巴巴开源的高性能Java RPC框架,非常适合构建大规模的分布式服务系统。它是国内很多企业(尤其是电商、金融领域)选择的微服务框架。
特点:
高性能、低延迟
提供强大的服务治理能力(服务注册与发现、负载均衡、容错等)
支持多种传输协议和序列化方式
3. Apache ServiceComb 介绍:
ServiceComb 是华为开源的微服务框架,专注于微服务的高效开发和运维,支持多种开发语言和运行环境。
特点:
支持多语言开发(Java、Go等)
提供全面的微服务开发、部署、运维支持
强大的社区和企业支持
4. Sentinel 介绍:
Sentinel 是阿里巴巴开源的流量防护组件,主要用于保障分布式服务的稳定性和高可用性,尤其是在高并发场景下。
特点:
流量控制、熔断降级、系统负载保护
实时监控和运行时规则调整
与 Spring Cloud、Dubbo 等框架的良好集成
5. Nacos 介绍:
Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,旨在帮助构建基于云原生架构的应用。
在Oracle数据库中,要查看正在运行的SQL语句,可以通过几种不同的方法。以下是几种常用的方法,以及它们各自的操作步骤和所需查询:
使用V$SQL视图:
描述:V$SQL是一个动态性能视图,它包含了数据库中SQL语句的信息,包括正在执行和已完成的SQL语句。
查询:
sql
SELECT sql_id, sql_text, status, username
FROM v$sql
WHERE status='ACTIVE';
解释:这个查询将返回正在执行(ACTIVE状态)的SQL语句的sql_id、sql_text、status和username等信息。
使用V$SESSION视图:
描述:V$SESSION视图是一个动态性能视图,它包含了数据库中当前会话的信息。
查询:
sql
SELECT sid, serial#, username, status, sql_id, sql_child_number
FROM v$session
WHERE sql_id IS NOT NULL;
解释:这个查询将返回正在执行的会话的sid、serial#、username、status、sql_id和sql_child_number等信息。其中,sid是会话的标识符,serial#是会话的序列号,username是会话的用户名,status是会话的状态,sql_id是会话正在执行的SQL语句的sql_id,sql_child_number是会话正在执行的SQL语句的子语句序号。
使用SQL Developer工具:
描述:SQL Developer是Oracle提供的免费的可视化数据库开发工具。
操作:
打开SQL Developer并连接到相应的数据库。
在左侧导航窗格中展开“监视”选项,然后选择“会话”。
在顶部的工具栏上选择“SQL监视器”。
在弹出窗口中,选择要监视的会话,并点击“监视”按钮。
在SQL监视器窗口可以看到当前执行的SQL语句以及执行计划等相关信息。
使用Enterprise Manager工具:
描述:Enterprise Manager是一个基于Web的数据库管理工具,可以通过浏览器访问。
操作:
打开Enterprise Manager并登录到相应的数据库。
在左侧导航窗格中选择“性能”。
在顶部的工具栏上选择“监视”。
在“监视”选项卡中,选择要查看的会话,并点击“监视”按钮。
在“SQL监视器”中可以看到正在执行的SQL语句以及执行计划等相关信息。
请注意,执行这些查询或操作可能需要具有相应的权限。如果您遇到权限问题,请联系您的数据库管理员。
系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研
AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研
AI大模型探索之路-实战篇6:掌握Function Calling的详细流程
AI大模型探索之路-实战篇7:Function Calling技术实战自动生成函数
AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用
AI大模型探索之路-实战篇9:探究Agent智能数据分析平台的架构与功能
AI大模型探索之路-实战篇10:数据预处理的艺术:构建Agent智能数据分析平台的基础
目录 系列篇章💥一、前言二、Function Calling技术整合1、安装mysql依赖2、创建mysql连接3、数据查询测试4、获取查询结果的列信息5、数据格式转换6、数据查询函数封装7、funcation函数生成器8、funcation函数生成测试9、大模型API调用10、大模型调用封装11、调用测试 三、结语 一、前言 在数据驱动的时代,拥有一个高效且智能的数据分析平台对企业至关重要。继本系列前文全面解析Agent智能数据分析平台的基础与核心功能后,本文深入讨论平台的实际操作,特别是如何应用Function Calling技术整合数据、提升分析的效率与准确性。实战经验的分享,将助读者构建完善的数据处理流程,利用Function Calling增强数据质量与分析精度,同时探索结合大模型API以提供传统及智能化分析服务,从而大幅提升决策支持能力。
二、Function Calling技术整合 随着数据成功存储入库,下一步关键是实施一个高效的函数调用机制,此机制将使不同的数据分析工具和服务能够无缝地访问和操作这些数据。
1、安装mysql依赖 确保Python环境安装了所有必要的MySQL驱动程序和连接库,以便我们可以从Python脚本中直接访问MySQL数据库。
! pip install pymysql 2、创建mysql连接 通过编写函数建立到MySQL数据库的稳定连接,这是后续所有数据操作的基础
import pymysql mysql_pw = "iquery_agent" # 建立连接 connection = pymysql.connect( host='localhost', # 数据库地址 user='iquery_agent', # 数据库用户名 passwd=mysql_pw, # 数据库密码 db='iquery', # 数据库名 charset='utf8' # 字符集选择utf8 ) 连接查看:
connection 3、数据查询测试 我们编写并执行SQL查询,尝试从数据库中检索数据,以测试连接的实际工作情况
# 定义SQL查询语句,从iquery.user_demographics表中获取前10条数据 sql_query = "SELECT * FROM iquery.user_demographics LIMIT 10"
目录
1.栈
1.1栈的概念及结构
1.2栈的实现
1.2.2实现结构的选择
a.数组
b.链表
c.更优的选择
1.2.3实现结构
a.栈的结构体
b.栈的初始化
c.栈的销毁
d.入栈
e.出栈 f.获取栈顶元素
g.获取栈中有效元素个数 h.检测队列是否为空,如果为空返回非零结果,如果非空返回0 2.队列
2.1队列的概念及结构
2.2队列的实现
2.2.1.实现结构的选择
2.2.2.实现结构的选择
a.单个队列节点的结构体
b.维护队列的结构体
c.队列的初始化
d.销毁队列 e.队尾入队列 f.队头出队列 g.获取队列头部元素 h.获取队列队尾元素
i.获取队列中有效元素个数
j.检测队列是否为空,如果为空返回非零结果,如果非空返回0 3.栈和队列面试题
1. 括号匹配问题。OJ链接
2. 用队列实现栈。OJ链接
3. 用栈实现队列。OJ链接
4. 设计循环队列。OJ链接
4.概念选择题
4.1题目
4.2答案
5.附录源码:
5.1栈:
Stack.h
Stack.c
5.2队列
Queue.h
Queue.c
1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
栈在逻辑上仍然是线性的,但是与顺序表、链表不同,栈只能在栈顶入数据,在栈底出数据,不能在任意位置进行操作,栈顶与栈底是根据功能命名的,没有严格规定首部是栈顶,尾部是栈底。
1.2栈的实现 1.2.2实现结构的选择 在数据结构之前的学习中,我们已经学习了链式与数组这两种存储的结构,栈的实现一般都可以使用数组或者链表实现。相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。
a.数组 对于数组而言,如果我们将头部作为栈底,那么压栈出栈就需要挪动许多数据,算法复杂度为较大,因此我们一般将数组头部作为栈顶,尾部作为栈底.
b.链表 与数组不同,对于单链表而言,如果我们将链表的尾部作为栈底,我们是无法直接访问链表尾部的,同时进行压栈、出栈时,我们还需要找到尾节点的前一个节点,这样使用链表构建栈就会相当麻烦,读者读到这里,可能会认为找前一个节点麻烦,这是由于单链表结构的固有缺陷导致的,那我们直接使用双向链表,不就好了吗?确实,找前一个节点不麻烦了,但是为了解决这个问题,使用了双向链表,那么我们每个节点就多出一个需要维护的节点,空间损耗就大了,而且找尾节点还是需要遍历的,总得来说,我们花费的代价就太大了。因此将链表的尾部作为栈底并不是一个明智的选择。因此我们还是使用单链表(不带头),只不过将单链表第一个有效节点处,作为栈顶。这样我们进行压栈、出栈就方便了。
c.更优的选择 数组与链表两种结构看上去各有千秋,不过,实际上有数组去实现栈会更优一些。有的读者可能会认为如果是动态开辟数组的话,不是会有扩容上的消耗吗?同时不是还有将数据迁移到新的空间上的消耗吗?确实,如果仅看这些,按需申请的链表似乎更优一些,但是扩容调用的是系统上的资源,运行很快,并且一次扩容都是按倍扩,扩容的次数并不会很多,更重要的是数组的CPU的高速缓存更好(涉及知识点较多,这里便不展开了),因此,这里笔者主要使用数组来实现栈。
引入 spark和flink的区别:在上一个spark专栏中我们了解了spark对数据的处理方式,在 Spark 生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由 Spark-core,SparkSQL 实现,流处理由 Spark Streaming 实现,但是Flink 可以用同一套代码同时实现批处理和流处理。
虽然spark和flink都可以进行批处理和流处理,但是侧重点不同,spark侧重于批处理,flink侧重于流处理。而且Spark Streaming准确来说并不是严格意义上的实时,它本质上还是一种微批处理的结构,用近实时描述更准确,所以使用Spark Streaming来做实时计算会发现延时很高。这也是会出现flink去代替Spark Streaming完成实时计算的原因之一。
一、离线和实时的区别 首先要明确一个概念,离线计算也叫做批量处理,实时计算也叫做流式处理,都是同一种东西,只是叫法不同。
1、离线(批处理)和实时(流处理)的区别: 批处理的特点是有界、大量,批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计。流处理的特点是无界、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。
二、主流实时计算框架对比 声明式:描述所需的数据转换和输出,而框架负责如何实现这些转换。它更加关注于“做什么”,而不是“如何做”。
组合式:开通过编写具体的指令来控制数据的流动和处理。
三、Spark Streaming微批处理 与Flink流式处理对比 从上图我们就可以看出Spark Streaming处理的方式是每隔一段时间,将该段时间产生的所有数据集中起来一起处理,而Flink流式处理是将数据产生一条就处理一条,这也是flink实时处理延迟低的原因。
四、Apache Flink简介 1、概述 Apache Flink 是一个实时计算框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
2、Flink特性 十大特性:
3、Apache Flink组件栈 4、Flink API 层级具体划分 ---------------------------------------------------------------------------------------------------------------------------------简要的介绍到这里结束,下一篇文章开始正式的学习。下面写一个简单的入门案例配上图解,便于对flink的理解。
五、入门案例(WordCount) 1、单词统计案例1(流处理/实时) import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.KeyedStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class Demo1StreamWordCount { public static void main(String[] args) throws Exception { //1、获取flink执行环境 StreamExecutionEnvironment environment = StreamExecutionEnvironment.
题目:
题解:
func getRow(rowIndex int) []int { row := make([]int, rowIndex+1) row[0] = 1 for i := 1; i <= rowIndex; i++ { row[i] = row[i-1] * (rowIndex - i + 1) / i } return row }