Spring boot 中文文档
Spring Boot 中文文档 | Spring官方文档中文翻译 | Spring Boot 中文翻译 - CADN开发者文档中心
Spring framework 中文文档
Spring Framework 中文文档 | Spring官方文档中文翻译 | Spring Framework 中文翻译 - CADN开发者文档中心
Spring Cloud 中文文档
Spring Cloud 中文文档 | Spring官方文档中文翻译 | Spring Cloud 中文翻译 - CADN开发者文档中心
Spring Cloud Gateway 中文文档
Spring Cloud Gateway 中文文档 | Spring官方文档中文翻译 | Spring Cloud Gateway 中文翻译 - CADN开发者文档中心
Spring Cloud Bus 中文文档
Spring Cloud Bus 中文文档 | Spring官方文档中文翻译 | Spring Cloud Bus 中文翻译 - CADN开发者文档中心
引言 在AI艺术创作领域,MidJourney作为一款强大的绘画生成工具,受到了越来越多艺术家和设计师的青睐。通过提供简洁但富有创意的提示词,可以帮助MidJourney生成令人惊叹的艺术作品。在本文中,我们将分享一些精选的MidJourney绘画提示词,助你在AI艺术创作中取得更好的效果。
1. 基础提示词 1.1 风格提示词 选择合适的艺术风格是创作的第一步。以下是一些常见的风格提示词:
Abstract:抽象Impressionist:印象派Surrealist:超现实主义Cubism:立体派Realism:现实主义 1.2 主题提示词 明确作品的主题可以更好地指导MidJourney的创作方向:
Nature:自然Fantasy:幻想Portrait:肖像Landscape:风景Architecture:建筑 2. 高级提示词 2.1 颜色提示词 颜色对作品的氛围和情感传达至关重要。以下是一些颜色相关的提示词:
Vibrant:鲜艳Monochrome:单色Pastel:柔和色Warm:暖色调Cool:冷色调 2.2 细节提示词 为了增加作品的复杂性和深度,可以加入细节提示词:
Intricate:复杂的Minimalist:极简主义Geometric:几何Textured:有质感的Fluid:流动的 3. 组合提示词 3.1 风格+主题 结合风格和主题,可以更具体地描述你的创作意图:
Surrealist Nature:超现实自然Impressionist Landscape:印象派风景Cubism Portrait:立体派肖像Abstract Architecture:抽象建筑Realism Fantasy:现实主义幻想 3.2 颜色+细节 通过组合颜色和细节提示词,可以创造出更加独特的效果:
Vibrant Intricate:鲜艳复杂Monochrome Minimalist:单色极简Pastel Geometric:柔和色几何Warm Textured:暖色调质感Cool Fluid:冷色调流动 4. 实例解析 4.1 示例一:印象派风景 提示词:Impressionist Landscape
使用这一提示词,MidJourney会生成一种柔和、色彩丰富的风景画,捕捉光影变化和自然之美。
4.2 示例二:超现实自然 提示词:Surrealist Nature
这个提示词会引导MidJourney创作出富有幻想色彩的自然场景,可能包含不寻常的生物和奇异的自然现象。
4.3 示例三:鲜艳复杂 提示词:Vibrant Intricate
通过这一提示词,可以获得一幅色彩鲜艳且细节丰富的作品,适合表现复杂的图案和动态的场景。
5. 提示词优化技巧 5.1 简洁明了 确保提示词简洁明了,以便MidJourney能够准确理解你的创作意图。
5.2 多次尝试 不要害怕多次尝试不同的提示词组合,以找到最适合的创作方向。
5.3 参考优秀作品 浏览其他艺术家的作品,学习他们使用的提示词和创作技巧,从中获得灵感。
目录 一、实验原理二、实验步骤1. 图像读取与预处理2. 边缘检测3. 轮廓检测4. 标记轮廓序号 三、实验结果四、完整代码 Hi,大家好,我是半亩花海。 本实验旨在利用 Python 和 OpenCV 库,通过图像处理和边缘检测算法实现黄豆图像的自动识别和计数,并在图像上标记每个黄豆的轮廓和序号。
一、实验原理 灰度转换:将彩色图像转换为灰度图像,减少计算复杂度。高斯平滑:使用高斯模糊来减少图像噪声。Canny边缘检测:检测图像中的边缘。轮廓查找:使用OpenCV的findContours函数检测图像中的轮廓。绘制轮廓和标记:在原始图像上绘制检测到的轮廓,并标记每个轮廓的序号。 二、实验步骤 1. 图像读取与预处理 import cv2 import matplotlib.pyplot as plt # 读取图像 image = cv2.imread('soybean.jpg') # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 平滑处理 blurred = cv2.GaussianBlur(gray, (11, 11), 0) soybean.jpg 图片如下所示,可自取:
2. 边缘检测 cv2.Canny(blurred, 30, 150):使用Canny算法进行边缘检测,参数30和150分别是低阈值和高阈值。 # 使用Canny边缘检测 edges = cv2.Canny(blurred, 30, 150) 3. 轮廓检测 cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE):查找图像中的轮廓。RETR_EXTERNAL表示只检测外部轮廓,CHAIN_APPROX_SIMPLE表示使用简单的链式近似方法。 # 查找轮廓 contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.
<!--router-view 实现页面缓存--> <router-view v-slot="{Component}"> <keep-alive :max="8"> <component :is="Component"></component> </keep-alive> </router-view>
目录
前言
一、问题描述
示例代码
二、排查步骤
1. 检查数据源配置
2. 检查实体类与数据库表结构
3. 检查 Mapper 接口
4. 检查 MyBatis-Plus 配置
5. 排查查询条件
6. 检查日志输出
7. 检查数据库连接问题
8. 检查全局配置和插件
三、解决方案
前言 在开发过程中,有时会遇到一个奇怪的问题:使用 MyBatis-Plus 查询不到数据,而直接执行 SQL 查询却能够获取到数据。这种情况可能会让人感到困惑,这篇博客将详细介绍如何排查和解决这个问题。
一、问题描述 当我们在使用MyBatis-Plus进行查询时,明明知道数据库中存在满足条件的数据,但查询结果却为空。与此同时,使用相同的查询条件直接在数据库中执行SQL语句,却能成功获取数据。这种情况的出现,让我们对MyBatis-Plus的查询功能产生了疑惑。
示例代码 // 使用MyBatis-Plus的查询方法 List<User> users = userMapper.selectList(null); System.out.println(users); // 输出为空列表 而在数据库客户端执行以下 SQL 语句可以正确返回数据:
SELECT * FROM user; 二、排查步骤 1. 检查数据源配置 首先,确保 MyBatis-Plus 的数据源配置正确。检查 application.yml 或 application.properties 文件中的数据库连接配置是否与实际使用的数据库相符。
spring: datasource: url: jdbc:mysql://localhost:3306/your_database_name username: your_username password: your_password driver-class-name: com.
Vs使用C++调用文心一言api接口 开发环境的选择:visual studio 2022,可以通过visual studio installer进行安装,安装时需要包含组件为“使用C++的桌面开发”(图0-1),需要其它的组件也可以自行下载。
图0-1
Vs installer可以在官网下载:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)
图0-2
如图0-2,直接下载即可。下载完成可能会要求账号登录,不需要,直接免费使用即可,若是有微软账号也可以登录。在创建项目时直接选择控制台程序(图0-3)。
图0-3
获取文心使用资格 百度智能云能提供文心一言api接口,网站:百度智能云-云智一体深入产业 (baidu.com),注册账号并登录后进入控制台:百度智能云控制台 (baidu.com),页面如图1-1。
图1-1
要调用api接口要先创建应用,点击图中创建应用按钮,编写应用名称(按自己喜欢起)和介绍,并选择服务后确定即可(图1-2)。
图1-2
创建完成后页面如图1-1所示,其中apikey和secretkey要记录,在下面编程中需要用到它们进行鉴权确认身份以便于调用接口。各种服务可以免费测试,在后续的编写中若是有大项目可以再额外购买。
代码实现 这里的代码调用的数据模型为ERNIE-Tiny-8K,需要其它模型可以根据api文档更改数据。
引入头文件,编写回调函数 #include <iostream> #include <string> #include <curl/curl.h> #include "json/json.h" #include "json/json-forwards.h" 这里json的引入,我在安装时是直接将源码加入到库中,此外还需要编写一段回调函数供下面保存服务器返回的数据:
size_t loaddata(void* data, size_t size, size_t num, std::string* localstr) {//服务器返回的数据、单个数据块字节大小、数据字节数目、你要存储的地址指针 size_t message_size = size * num; localstr->append((char*)data, message_size);//这里做了简单处理,把data拼接到本地字符串结尾 return message_size;//返回数据总大小 } 其中void* data意思是任意变量的指针,传入的data可以是char*也可以是别的,由于不知道是什么类型的,所以下面需要注明。如果直接声明char* data,则下面append函数中可以直接写data不用再前面注明(char*)。
函数可以根据需要修改,如保存的地点不是string类型变量是文件夹,则为FILE* file,后面的代码也需要按要求更改。
声明变量 将前面获取到的apikey和secretkey粘贴到代码中,并为其声明变量方便使用;声明其它变量。
Markdown 是一种轻量级标记语言, 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。
由于 Markdown 的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。
创建编辑markdown文件的工具有很多,对于习惯使用vscode的人来说,可以使用vscode处理markdown文件。
一、markdown插件安装 可以安装Markdown All in One插件,该插件提供了一系列方便的Markdown编辑功能和快捷键。
此外,还可安装Markdown PDF插件,以方便将Markdown文件导出pdf格式的文档。
二、Markdown文件创建及编辑 创建以.md 为后缀的文件后,即可在vscode中根据Markdown语法编辑文件。
2.1 Markdown文件预览 点击如下按钮,即可启动Markdown的预览,可实时查看编辑效果。
2.2 Markdown插入图片 赋值图片后,可以在Markdown文件中通过Ctrl + V 进行粘贴,默认的图片存放路径和该Markdown同目录,建议设置修改图片存放目录。
打开设置面板
搜索markdown.copy, 点击Add Item按钮进行新增项,key为**/*.md, value 为图片的目标路径assets/ d o c u m e n t B a s e N a m e / {documentBaseName}/ documentBaseName/{fileName}。
需改后,插入图片的存放路径如下:
2.3 导出Markdown文件 在打开的Markdown文件的视图中右键,在弹出的下拉列表中选中需要导出的格式即可
默认会在Markdown文件同目录下生成对应的pdf文档。
一、基础模型下载 本文的背景是微调一个基于Llama3的中文版模型Llama3-8B-Chinese-Chat,用于中文指定领域的问答下游任务 1、HuggingFace官网直接下载 官网地址:https://huggingface.co/models
镜像网址:https://hf-mirror.com/
按照如下图所示搜索需要的基础模型
点击Files and versions
依次点击下载,将模型文件下载至指定的文件夹内
此方法官方网站下载速度可能很慢,建议时间紧的同学采用镜像网站下载
2、使用HuggingFace的transformers库下载 安装transformers工具库 pip install transformers 创建环境变量HF_HOME,配置模型下载地址
验证配置是否生效 huggingface-cli scan-cache 执行如下代码 from transformers import AutoModel model_name = "shenzhi-wang/Llama3-8B-Chinese-Chat" model = AutoModel.from_pretrained(model_name) 3、HuggingFace国内镜像下载(旧版现已经弃用) # 下载所需的工具包 pip install -U huggingface_hub pip install huggingface-cli # 指定国内镜像源 # Linux export HF_ENDPOINT=https://hf-mirror.com # Windows set HUGGINGFACE_HUB_ENDPOINT=https://hf-mirror.com # 执行下载命令 # --resume-download 是下载中断恢复下载后继续从上次下载中断点继续下载 # shenzhi-wang/Llama3-8B-Chinese-Chat 是要下载模型的名称 # E:\LLM 是下载到本地的路径 huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat --local-dir E:\LLM 4、下载成功后最好校验一下下载的模型是否有问题 二、微调工具LLaMA-Factory 框架 1、LLaMA-Factory安装 git clone --depth 1 https://github.
1. 请解释一下Batch Normalization的原理及其在训练深度神经网络中的作用。
Batch Normalization(批归一化)是一种在训练深度神经网络时常用的技术,旨在提高训练速度、稳定性和性能。
2. 在图像预处理过程中,如何选择合适的图像增强技术来提升模型的泛化能力?请举例说明。
在图像预处理和增强过程中,选择合适的技术对于提升模型的泛化能力至关重要。图像增强可以增加数据集的多样性,减少过拟合,并帮助模型学习到更加鲁棒的特征。
3. 在目标检测任务中,常用的损失函数有哪些?你如何选择和设计一个合适的损失函数?
4. 解释Adam优化算法的原理,以及它相比于传统的SGD(随机梯度下降)有哪些优势和劣势。
Adam优化算法(Adaptive Moment Estimation)是一种基于一阶和二阶矩估计的自适应学习率优化算法,广泛用于训练深度神经网络。Adam结合了Momentum和RMSProp的优点,提供了一种稳定且高效的优化方法。
5. 你如何在一个图像分类任务中选择合适的特征提取方法?请比较传统方法(如SIFT、HOG)和深度学习方法。
6. 在图像分割任务中,你会使用哪些指标来评估模型的性能?请解释这些指标的计算方法和意义。
在图像分割任务中,评估模型性能的指标用于衡量模型预测的分割图与真实标注之间的一致性。
7. 你如何在数据增强过程中防止过拟合?请举例说明具体的策略和方法。
8. 在实现一个实时图像处理系统时,你会采取哪些措施来保证系统的低延迟和高效能?
9. 请解释FPN(Feature Pyramid Networks)的工作原理及其在多尺度目标检测中的应用。
FPN(特征金字塔网络)是一种在深度学习中用于图像识别和目标检测任务的网络结构,主要用于解决多尺度目标检测问题,即在图像中同时检测不同尺寸的物体。
学习目标:植物大战僵尸核心玩法实现
游戏画面
项目结构目录
部分核心代码
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random = UnityEngine.Random; public enum ZombieType { Zombie1, ConeHeadZombie, BucketHeadZombie, } [Serializable] public struct Wave { [Serializable] public struct Data { public ZombieType zombieType; public uint count; } public bool isLargeWave; [Range(0f,1f)] public float percentage; public Data[] zombieData; } public class GameController : MonoBehaviour { public GameObject zombie1; public GameObject BucketheadZombie; public GameObject ConeheadZombie; private GameModel model; public GameObject progressBar; public GameObject gameLabel; public GameObject sunPrefab; public GameObject cardDialog; public GameObject sunLabel; public GameObject shovelBG; public GameObject btnSubmitObj; public GameObject btnResetObj; public string nextStage; public float readyTime; public float elapsedTime; public float playTime; public float sunInterval; public AudioClip readySound; public AudioClip zombieComing; public AudioClip hugeWaveSound; public AudioClip finalWaveSound; public AudioClip loseMusic; public AudioClip winMusic; public Wave[] waves; public int initSun; private bool isLostGame = false; void Awake() { model = GameModel.
GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)
1. GWO灰狼优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO)是一种启发式优化算法,模拟了灰狼群体的社会行为,包括追逐、围攻和狩猎等行为。它能有效地应用于解决各种优化问题,包括参数优化和特征选择等。
2. CNN与SVM结合的基本思路 CNN特征提取:使用CNN作为特征提取器,将原始输入数据(如图像、时间序列等)转换为高级特征。
SVM分类:将CNN提取的特征向量输入到SVM中进行分类决策,SVM作为分类器用于将特征映射到类别空间。
结果展示 获取方式 https://mbd.pub/o/bread/mbd-ZpeXmZ5u
本次因为是考前一天极速刷题,所以没有讲解,若有问题可私信。
目录 一、 查找同时空人员二、 老鼠回家-无回路三、函数调⽤关系四、东二食堂模拟五、栈帧 一、 查找同时空人员 【问题描述】
假设一共有6个手机基站,都具有记录手机连接基站状态的能力,当手机进入和离开基站固定范围后,基站将及时记录手机的连接信息:
1、约定基站覆盖范围不存在重合,也就是同一个手机在同一时间内只会处于一个基站覆盖范围内;
2、同一个手机在同一个基站上多次连续登录,属于正常情况,说明该手机不断出入该基站的覆盖范围。
编写程序,读入某一天多个基站的手机登录日志信息(服务商提供的日志信息是按手机进入基站的时间排好序,详见样例输入)和一个要查找的人员手机号,查找与该人员同时空人员的手机号(即与该手机号基站相同且进入与离开时间有重叠的手机号;若一手机号的进入时间与另一手机号的离开时间完全相同,两手机号也算有重叠。)。输出与指定手机号有时空重叠的手机号及所在基站。
基站的手机登录日志信息包括:手机号(11位的数字,按字符串处理)、基站编号(一共为6个基站,分别用大写字母A、B、C、D、E、F表示)、登录时间和登出时间(用长度为6的数字串表示,例如:093756,表示9点37分56秒)。
【输入形式】
先输入手机登录日志信息的条数(小于1000条),然后按上述格式分行输入手机登录日志信息,手机号、基站编号、登录时间和登出时间之间以一个空格分隔。
【输出形式】
按照手机号由小至大进行排序,分行输出与指定手机号有时空重叠的手机号及所在基站编号,手机号与基站编号之间以一个空格分隔。手机号相同时按基站字母序排序输出。
【样例输入】
28
18222336979 F 060201 063539
18222336979 B 063601 063802
18222336979 C 063806 064607
18222336979 D 064615 065816
18222336979 A 065827 160003
18222336979 D 160013 161605
18222336979 C 161617 162633
18222336979 B 162702 172333
13810013509 C 080005 092537
13810013509 A 100356 124732
13810013509 C 125021 161619
13810013509 F 162315 163857
13810013509 B 163901 205602
abc
cd
abc
c为啥
抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版 接口及参数 打开网页版抖音,右键视频进入详情页。F12打开控制台筛选detail,然后刷新网页,找到请求。可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172,都可用。msToken在cookie中可以获得msToken,过期时间为7天。screen_width、screen_height对应cookie中的dy_swidth、dy_sheight。cpu_core_num、device_memory对应cookie中的device_web_cpu_core、device_web_memory_size。verifyFp、fp对应cookie中的s_v_web_id。webid可以从doc中获得user_unique_id。
找到加密代码 找到入口
首先看一下接口的加载器,也就是发送请求的调用栈,挨个查看之后不难发现,加密的入口应该在这两处,由于栈中的调用顺序是从下往上,所以我们先看下面那个入口。
查看参数
首先我们查看入口参数,不难发现arguments[1]是请求的url,那么我们可以根据url包含detail去打一个断点,然后一步一步进行调试,看看发生了什么。
断点调试
单步步入之后,开始了加密参数的流程,我们发现这里的代码明显是混淆过的,上下翻动后,我们发现这是jsvmp文件。单步跳出后,直接到了请求流程,说明在这里面已经完成了a_bogus的加密,所以我们可以断定,加密参数是在调用栈中另一个地方调用的。所以我们再查看一下调用栈中的另一个入口。
可以看到,加密最后运行的函数是s.apply(b,u)并且赋值给了l,那么我们可以大胆猜测一下,这个l就是返回的加密结果,但是我们知道request中有很多加密参数,而且这个代码是jsvmp,所以我们可以认为,这里是调用了jsvmp的指令函数,这个指令函数加密了我们的a_bogus,但是也被其他的一些需求调用,所以说我们要定位到加密a_bogus的时机。
我们可以知道a_bogus的长度为172,所以我们可以在这里打条件断点,当s.apply(b,u).length === 172时断住。然后进行观察。
断住之后,我们发现结果大概率是我们要的a_bogus,后面我们会验证一下,参数为uri以及UserAgent。那么我们之后调用的时候,可以直接调用这个函数,把相应的参数传进去就可以得到我们想要的结果。由于这个s.apply可能调用的函数有很多种,我们不知道它调用的具体函数是哪个,因此,我们需要找到函数调用入口也就是函数导出。至此我们先验证一下结果。
补环境 首先我们把整个bdms.js拿下来,本地运行,进行补环境。
然后运行后发现window is not defined,我们定义一个window=global补个window环境再试试看。
我们发现这里莫名其妙报了个错,由于代码混淆加上各种循环,很难找到这个变量是什么,所以我们猜测,大概率是获取某些环境没有获取到,所以我们加代理看看他获取了什么没获取到导致的。我们添加下列代理来看看检测了哪些环境。
function get_enviroment(proxy_array) { for (var i = 0; i < proxy_array.length; i++) { handler = '{\n' + ' get: function(target, property, receiver) {\n' + ' console.log("方法:", "get ", "对象:", ' + '"' + proxy_array[i] + '" ,' + '" 属性:", property, ' + '" 属性类型:", ' + 'typeof property, ' + // '"
2024最新版Python 3.12.4安装使用指南 2024最新版Python 3.12.4安装使用指南0. Python的受欢迎程度1. 安装最新版Python 3.12.42. 验证Python 3.12.4版本3. 验证Python功能4. 使用IDLE交互式开发模式5. 安装Python扩展库相关阅读: By Jackson 2024最新版Python 3.12.4安装使用指南 0. Python的受欢迎程度 据市场预测,截至2030年Python在全球应用的份额将达到1.6亿美元。快速增长的用户端应用程序,诸如:Web开发,软件开发及其它,加之企业的工业4.0技术发展大大推动了这一进程。到2030年,Python在实时物联网及边缘计算方面的应用将更为广泛。
如果我们谈论适合初学者的易于阅读、易于学习的编码语言,那么没有什么能比 Python 进入最佳编程语言列表,这使其成为初学者的绝佳选择。Python 现在正被引入全球大多数大学作为第一语言。
Django、Flask 和 Pyramid 这些都是在开发人员中流行的 Python 框架。与其他语言相比,Python 语法是用户友好的,这最终提高了开发人员的工作效率。这些都是它成为顶级编程语言之一的原因。
本文将在笔者前文的基础上,将2024年最新版Python 3.12.4安装使用指南奉献给您。希望本文对学习Python编程的广大读者有所帮助。
1. 安装最新版Python 3.12.4 进行Python程序开发,首先要安装Python软件包;访问官网:https://www.python.org
在主页上方导航栏,点击Downloads菜单,选择Download for Windows,点击Python 3.12.4按钮开始下载,如下图所示。
或者,在主页点击Downloads > Windows,找到Windows对应的最新版本,进行下载,如下图所示。
*可以注意到,本年度更新的大版本V3.13计划于2024年10月发布!
随后,Chrome浏览器开始下载安装包,在新版Chrome浏览器中,下载进程如下图:
下载完毕后,可以在Windows 10/11的Downloads(下载)文件夹里,找到该安装程序:python-3.12.4-amd64.exe文件,双击它就可以启动安装向导。如下图所示。
由于之前安装过Python 3.12.2,因此,安装向导显示为Upgrade to Python 3.12.4(64-bit),即升级为Python 3.12.4版本。如果按照默认安装目录D:\Python312\,则点击Upgrade Now(即刻升级),如果修改安装目录,则点击Customize installation(定制安装)。
注意: 如果需要了解全新安装Python 3.12.X版本,请参阅笔者文章:2024最新版Python3.12.2安装使用指南,点击进入该页面。
安装完成后,提示 Setup was successful (安装成功)!
此时,点击Close,关闭安装向导。
注意: 安装过程中未体现的环境变量设置选项等细节,详见之前文章:2024最新版Python3.12.2安装使用指南
2. 验证Python 3.12.4版本 考虑到要运行Python, 安装完毕需要验证Python版本是否为最新版本。随即点击左下角搜索栏Type here to search,输入cmd, 选择命令行窗口,如下图。
更改Kubernetes为ipvs代理模式 文章目录 更改Kubernetes为ipvs代理模式资源列表基础环境一、kube-proxy介绍1.1、userspace模式1.2、iptables代理模式1.3、ipvs代理模式 二、更改代理模式2.1、查看kube-proxy代理模式2.2、更改代理模式2.2.1、所有节点安装IPVS软件2.2.2、所有节点加载IPVS模块2.2.3、master节点修改kube-proxy的配置文件2.2.4、查看kube-system命名空间下的kube-proxy2.2.5、查看旧的kube-proxy,k8s会自动生成新的kube-proxy2.2.6、查看新的kube-proxy2.2.7、查看是否更改2.2.8、查看负载调度策略 资源列表 操作系统配置主机名IP所需软件CentOS 7.92C4Gk8s-master192.168.93.101Docker、K8S使用kubeadm安装CentOS 7.92C4Gk8s-node01192.168.93.102Docker、K8S使用kubeadm安装CentOS 7.92C4Gk8s-node02192.168.93.103Docker、K8S使用kubeadm安装 基础环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭内核安全机制 sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config setenforce 0 一、kube-proxy介绍 kube-proxy负责k8s service的实现,即实现了k8s内部从pod到service和外部从node port到service的访问每个节点都有一个kube-proxy容器进程。kube-proxy管理将寻址到集群Kubernetes Service对象的虚拟IP地址(VIP)的流量转发到适当的后端Pod。kube-proxy有三种代理模式 1.1、userspace模式 最早的代理模式。在userspace模式下,kube-proxy会在每个节点上创建一个监听指定端口的用户空间进程,该进程负责接收外部流量并将其转发到相应的Service和Pod。在k8s v1.2版本以后就已经淘汰了。
缺点:性能较差,因为每个流量都需要经过用户空间进程的处理,导致较高的延迟和资源消耗
1.2、iptables代理模式 在k8s v1.12版本之前的默认模式。该模式完全利用内核iptables规则来实现service的代理和负载均衡。该模式的优点是较userspace模式效率更高,当部署服务多的时候会生成大量的iptables规则。 1.3、ipvs代理模式 k8s v1.12版本之后的默认模式。与iptables类似,在内核实现,基于netfilter,监控service、pod的变化并创建对应的ipvs规则,不需要改变iptables规则链
两则比较的话:ipvs和iptables都是基于netfilter实现的。但ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块;
iptables:规则灵活、功能强大;规则遍历匹配和更新,呈线性时延;
IPVS:工作在内核态,有更好的性能;调度算法丰富:rr,wrr,lc,wlc,ip hash…
二、更改代理模式 2.1、查看kube-proxy代理模式 master节点操作 # 方法1:如果回显是跟下面一样那使用的是默认的代理模式iptables [root@k8s-master ~]# kubectl get cm kube-proxy -n kube-system -o yaml | grep mode mode: "" # 方法2 [root@k8s-master ~]# curl localhost:10249/proxyMode iptables[root@k8s-master ~]# 2.
前言:高可用集群配置是大型网站的一个基础,网站可用性的基础保障之一,这里将对应的概念知识和实操步骤进行整理与收集。
1、基础概念详解 1.1、高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小。
1.2、高可用集群的衡量标准 1.3、自动切换/故障转移(FailOver) 自动切换阶段某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服务。 通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。 通过上面判断节点故障后,将高可用集群资源(如VIP、httpd等)从该不具备法定票数的集群节点转移到故障转移域(Failover Domain,可以接收故障资源转移的节点)。
1.4、自动侦测 自动侦测阶段由主机上的软件通过冗余侦测线,经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。 常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。
1.5、脑裂 在高可用(HA)系统中,当联系两个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为两个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像两个灵魂夺舍一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。
产生原因:
因心跳线坏了(包括断了,老化)。 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。 因心跳线间连接的设备故障(网卡及交换机)。 因仲裁的机器出问题(采用仲裁的方案)。 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
解决方案:
1)添加冗余的心跳线:例如:双心跳线(心跳线也HA),尽量减少“脑裂”发生几率;
2)启用磁盘锁:正在服务一方锁住共享磁盘,“脑裂”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务(会导致昂贵的高可用架构不能发挥作用)。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3)设置仲裁机制:例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
4)脑裂的监控报警:直接对高可用服务的业务进行业务监控,出现问题人为介入
1.6、其他的高可用架构 heartbeat、pacemaker、 piranha(web页面)操作部署都非常相似
1.7、keepalived keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播(以224.0.0.0地址作为通信地址的一种方式),当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master(可以理解为三体里面的摇篮系统,反向触发)
keepalived主要有三个模块:分别是core、check和vrrp。 core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。 check负责健康检查,包括常见的各种检查方式。 vrrp模块是来实现VRRP协议的。
2、web高可用示例 2.1、基础环境 IP用途192.168.189.148server1192.168.189.149server2192.168.189.150vip(虚拟ip) 2.2、server1部署 server1初始网络环境(网卡名和IP记一下)
keepalive配置
[root@localhost ~]# yum install -y keepalived [root@localhost ~]# vim /etc/keepalived/keepalived.conf [root@localhost ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id 1 #设备高可用组内的id,组内唯一 } #vrrp_script chk_nginx { #健康检查 # script "
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
💥💥个人主页:奋斗的小羊
💥💥所属专栏:C语言
🚀本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。
目录 前言1、创建结构体类型2、通讯录的初始化和销毁3、通讯录的增删查改3.1 添加联系人3.2 删除联系人3.3 展示联系人3.4 修改联系人3.5 查找联系人 4、通讯录菜单5、通讯录项目代码总结 前言 本篇文章将介绍一个运用顺序表的例子——通讯录项目。
通讯录我们都知道,细细一想通讯录不就是一个顺序表吗?在通讯录中以一个联系人为单位,存储着若干个联系人的各种信息,我们也可以对通讯录中的联系人信息进行相应的增删查改操作。但是上篇文章的顺序表存的只是整型数据,而在本文联系人的信息可不只是整形数据,如果想把一个联系人的各种信息以一个联系人为单位存储,就需要用到我们之前学到的内置类型——结构体类型。
接下来将详细介绍基于顺序表的通讯录项目搭建的具体过程。
本文将延用上篇文章中实现好的顺序表代码,具体请看—>顺序表
1、创建结构体类型 我们需要存联系人的姓名、性别、年龄、电话、地址等信息,如果把联系人看作一个单位,就需要一个类型能将联系人的这些信息储存,我们很容易的就能想到自定义类型——结构体类型。
所以第一步我们需要创建一个结构体类型来保存联系人的这些信息。
#define NAME_MAX 20 #define GENDER_MAX 10 #define TEL_MAX 20 #define ADDR_MAX 100 typedef struct personinfo { char name[NAME_MAX]; char gender[GENDER_MAX]; int age; char tel[TEL_MAX]; char addr[ADDR_MAX]; }peoinfo; 我们将保存名字等信息的数组大小用宏代替,这样方便后续可能的更改。
创建好用于保存联系人信息的结构体类型后,接着就需要将顺序表头文件中的动态顺序表管理的数据类型替换掉,不要忘了包含相应的头文件。
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include "contact.h" //顺序表管理数据的类型 //typedef int sl_data_type; typedef peoinfo sl_data_type; //动态顺序表 typedef struct seqlist { sl_data_type* arr; int size;//数据个数 int capacity;//空间大小 }SL; 2、通讯录的初始化和销毁 我们操作通讯录,实际上就是操作顺序表
在艺术的长河中,人类一直是创造美的主体。然而,随着人工智能技术的飞速发展,AI绘画工具的出现,正在重新定义艺术创作的边界。这些工具不仅能够模仿传统艺术风格,还能够创造出前所未有的视觉体验,引发人们对于艺术本质和创作过程的深刻思考。
AI绘画工具的工作原理 AI绘画工具的核心是深度学习技术。通过训练大量的艺术作品数据,这些工具能够学习到不同艺术风格的特征,并根据用户输入的指令生成相应的艺术作品。例如,用户可以指定作品的风格、色彩、主题等参数,AI工具则根据这些参数进行创作。
自定义艺术作品的生成 AI绘画工具的一个显著特点是用户可以自定义生成的艺术作品。用户不再是被动的接受者,而是成为了创作过程的参与者。通过与AI工具的交互,用户可以根据自己的审美偏好和创意思维,指导AI生成独特的艺术作品。
艺术创作的新维度 AI绘画工具为艺术创作带来了新的维度。它们不仅能够模拟传统艺术风格,还能够探索新的艺术形式和表达方式。例如,AI工具可以通过算法生成抽象艺术作品,这些作品可能超越了人类艺术家的想象力。
艺术与科技的结合 AI绘画工具的出现,是艺术与科技结合的一个典范。它们不仅展示了科技在艺术领域的应用潜力,也为艺术家提供了新的创作工具和灵感来源。艺术家可以利用AI工具探索新的创作方法,甚至与AI进行合作,共同创作艺术作品。
社会与伦理的挑战 尽管AI绘画工具带来了许多积极的影响,但它们也引发了一些社会和伦理问题。例如,AI生成的艺术作品的版权归属问题,以及AI工具是否能够真正理解艺术的深层含义等问题。这些问题需要艺术家、技术开发者和社会各界共同探讨和解决。
教育与普及 为了让更多的人了解和使用AI绘画工具,教育和普及工作显得尤为重要。学校和教育机构可以开设相关课程,教授学生如何使用AI工具进行艺术创作。同时,通过举办展览和比赛等形式,可以提高公众对AI绘画工具的认识和接受度。
未来展望 随着技术的不断进步,AI绘画工具的功能将越来越强大,它们在艺术创作中的应用也将越来越广泛。未来,我们可能会看到AI工具与人类艺术家更加紧密的合作,共同推动艺术的发展。
结语 AI绘画工具的出现,不仅是技术进步的体现,更是艺术创作方式的一次革命。它们为艺术创作提供了新的可能性,同时也带来了新的挑战和问题。作为艺术创作者和欣赏者,我们需要以开放的心态去接受和利用这些工具,同时也要思考如何在保持艺术本质的同时,利用科技的力量推动艺术的发展。
这篇文章详细探讨了AI绘画工具的工作原理、自定义艺术作品的生成、艺术创作的新维度、艺术与科技的结合、社会与伦理的挑战、教育与普及的重要性以及对未来的展望。希望这篇文章能够为读者提供对AI绘画工具及其在艺术领域应用的全面了解。
一、安装Jenkins
在Jenkins官网下载Jenkins 2.401.3版本!
注:只有2.401.3以上版本的Jenkins才支持gitee插件,2.346长期支持版本不行!
二、JAVA环境
Jenkins 2.401.3对应的JAVA环境是jdk17,请在本地下载jdk17并配置好环境变量,在cmd窗口中使用java -version命令可以看到 java version "17.0.10"即可。
三、Jenkins配置
1.打开Jenkins
在下载好的Jenkins的war包位置,打开cmd,用java -jar jenkins.war --httpPort=8899启动Jenkins
注:命令中的"jenkins.war"改成自己war包的名字,可能会带有版本号。
2.jenkins持续集成的操作以及本地的插件包的下载导入可以参考曹红杏老师的博客
一个springboot项目的jenkins持续集成配置_springboot集成jenkins-CSDN博客
注:老师给的插件导入到Jenkins 2.401版本里面可以使用,没有不兼容问题。
三、重点:安装gitee插件
1.点击Dashboard->Manage Jenkins
2.往下滑!找到System Configuration->Plugins
3.下载gitee插件
四、创建持续集成任务
同样请参考一个springboot项目的jenkins持续集成配置_springboot集成jenkins-CSDN博客
五、jenkins中Gitee webhook 设置
1.创建持续集成任务完成之后或者在创建的过程中,在构建触发器模块,我们可以看到有一个Gitee webhook 触发构建选项,勾选它!
注:请记住上图红框里面的URL地址,后面要考,这个地址和第七步的内网穿透有关系!!!
2.其他设置不用动,往下滑,找到Gitee WebHook 密码
3.点击生成按钮,生成 Gitee WebHook密码
注:这个密码等下也要用到!!
六、配置Gitee WebHook
1.打开你们的gitee仓库地址,这里我以我的学生宿舍管理系统仓库为例,点击管理
2.往下滑,找到WebHooks,点击右上角的添加webHook
3.填写URL和WebHook密码,点击添加,这里的URL和WebHook密码应该和上面第五步1.3.中框出来的一致
4.点击添加,发现添加不了
这是为什么呢?原因是这个地址是localhost也就是电脑本地的地址,gitee无法直接通过这个地址向你的Jenkins发送post请求,让Jenkins自动构建!
解决方法
用一个外网可以访问到的地址来代替这个地址里面的localhost:8899,如何实现呢,这就要引出内网穿透了!
七、内网穿透
市面上主流的内网穿透软件很多都是要收费的,如果需求不大,跟我一样只是为了完成课程作业,可以下载以下这个内网穿透软件,它可以提供免费服务!
Natapp
项目主页:natapp.cn
项目介绍:基于ngrok的国内的内网穿透工具,类似花生壳,有免费版本,比花生壳好。免费版本:提供http,https,tcp全隧道穿透,随机域名/TCP端口,不定时强制更换域名/端口,自定义本地端口。收费版本也就几元每月。
1.打开上面的官网网址,点击右上角的免费注册,注册一个账号
注:后面需要身份证实名!
2.注册登录后,购买一个免费隧道
3.填入端口,然后购买
4.点击右上角的客户端下载,下载natapp
5.根据你自己的电脑下载,我下的是Windows 64位的
6.下载配置文件
①点击右上角的教程/文档
②点击使用本地配置文件config.ini
③点击下载windows版本