文章目录 前言源码解析1. 接收schema变更事件2. 发起schema变更请求3. schema变更请求具体处理4. 广播刷新事件并阻塞5. 处理FlushEvent6. 修改sink端schema 结尾 前言 上一篇Flink cdc3.0同步实例 介绍了最新的一些功能和问题,本篇来看下新功能之一的动态变更表结构的具体实现。
在 Flink 中,应用程序由流数据流组成,这些数据流是由用户定义的Operators进行转换。
Flink CDC 3.0 框架中流动的数据类型被称为Event,代表外部系统产生的变更事件。每个事件都标有发生更改的表 ID 。事件分为SchemaChangeEvent和DataChangeEvent,分别代表表结构和数据的变化。处理schema变更的Operators对应图中的SchemaOperator。
(以下代码使用Flink Release 3.0.0)
源码解析 1. 接收schema变更事件 我们以添加字段触发的AddColumnEvent为例,它实现了SchemaChangeEvent。 SchemaOperator 当接收到有AddColumnEvent 事件时,会在processElement 中调用handleSchemaChangeEvent处理。
2. 发起schema变更请求 说明下这里的response实际是直接返回的new SchemaChangeResponse(true), 由于构造的shouldSendFlushEvent 直接传入true, 所以后续也会进入if条件。我们接着requestSchemaChange 方法看
由于知道response是直接创建的已知结果,因此responseFuture.get() 也不会阻塞。我们接着来看toCoordinator.sendRequestToCoordinator(getOperatorID(), new SerializedValue<>(request));的实现
3. schema变更请求具体处理 通过几层的调用,上述变更请求会走到 SchemaRegistry 的handleCoordinationRequest(CoordinationRequest request),我们的请求是SchemaChangeRequest,所以会调用requestHandler.handleSchemaChangeRequest(schemaChangeRequest);
这里可以看到response 是直接创建的SchemaChangeResponse(true)。 接着schemaManager.applySchemaChange(request.getSchemaChangeEvent());注册新的schema。
另外还有个重点,在startToWaitForReleaseRequest方法中会重置responseFuture, 原本的response通过return返回了。而PendingSchemaChange中的response重置,主要就是为了等schema变更完成设计。(主线程会再次发起请求调用responseFuture.get() ,忽略这里会不理解后面为什么会阻塞)
4. 广播刷新事件并阻塞 回到第二部分,因为response是一个明确对象没有阻塞,返回后会直接广播FlushEvent 和 schemaChangeEvent(再次发起schemaChangeEvent不是很理解)。之后requestReleaseUpstream 请求调用responseFuture.get()会阻塞,因为response在第三步已经重置为new CompletableFuture<>(), 利用的1.8的特性。这也是收到变更事件后要保证sink端变更才能发放数据。
5. 处理FlushEvent FlushEvent 由什么Operator处理,在官方架构图中其实没有指出,但是图标可以看出是通过sink端完成,我们可以找到DataSinkWriterOperator类,有对FlushEvent的处理。
一、compression-webpack-plugin介绍 参考地址:https://v4.webpack.js.org/plugins/compression-webpack-plugin/
一、compression-webpack-plugin的使用,安装插件 npm install compression-webpack-plugin --save-dev 二、在 webpack 配置中,require 或 import 引入 const CompressionPlugin = require('compression-webpack-plugin'); 三、配置 /* * filename: '[path][base].gz', // 输出压缩文件的名称 * algorithm: 'gzip', // 使用的压缩算法,默认为 'gzip' * test: /\.(js|css|html)$/, // 匹配需要压缩的文件类型 * threshold: 10240, // 只压缩大于该大小的文件,默认为 0 * minRatio: 0.8 // 只有压缩率大于该值的文件才会被压缩,默认为 0.8 * deleteOriginalAssets //删除源文件 */ // module.exports = { plugins: [ new CompressionPlugin( { algorithm: "gzip", test: /\.(js|css)$/, // 匹配文件名 threshold: 10240, // 对超过10k的数据压缩 deleteOriginalAssets: false, // 不删除源文件 minRatio: 0.
在跨域请求中,浏览器默认情况下不会自动携带跨域请求的 cookie。这是由于浏览器的同源策略(Same-Origin Policy)所导致的安全性限制。然而,可以通过设置一些选项来允许浏览器发送跨域请求时携带 cookie。
在 Axios 中,你可以通过在请求配置中设置 withCredentials 选项为 true 来实现自动携带 cookie。
const axios = require('axios'); axios.get('https://example.com/api/*', { withCredentials: true }) .then(response => { // 处理响应 console.log(response.data); }) .catch(error => { console.error('请求失败', error); }); withCredentials: true 将告诉浏览器在跨域请求中携带 cookie。但请注意,服务器也需要配置以允许跨域请求携带 cookie。
Access-Control-Allow-Credentials: true
AIGC讨论威:qigeai7777
所有的提示词x球:七哥的AI日常
gzh:七哥的AI日常
对于设计师而言,寻找灵感、尝试新的配色和布局是一项持续的挑战。而Midjourney的室内设计作品,凭借其独特的AI生成技术,为设计师们提供了一个全新的灵感源泉。从现代到复古,从简约到奢华,这30幅精选作品涵盖了各种风格和元素,助力设计师打破思维局限,探索更多可能。
同时,对于正在考虑装修的朋友们来说,这些案例也是一本实用的指南。装修不仅仅是一项工程,更是一次对美好生活的追求和憧憬。然而,面对繁多的设计选择和复杂的装修流程,很多人会感到迷茫和无助。这时,Midjourney的室内设计作品就像一盏明灯,为您照亮前行的路。
您可以从中挑选出自己喜欢的风格和元素,作为自己装修的参考。无论是色彩搭配、家具选择还是空间布局,这些案例都提供了丰富的思路和灵感。更重要的是,它们帮助您将自己的想法和需求更加清晰地传达给设计师或装修团队,确保最终的装修效果符合您的期望。
因此,无论您是设计师还是正在考虑装修的朋友,都请不要错过这30幅Midjourney室内设计精选作品。让我们一起探索设计的魅力,共同打造美好家居生活。
01 Art Deco Art Deco是20世纪初至中期的一种艺术风格,它涵盖了建筑、室内设计、家具、时尚、珠宝等多个领域。Art Deco的室内设计风格强调对称性、几何形状、装饰性元素和豪华材料的使用。以下是一些Art Deco室内设计的特点:
几何形状: Art Deco强调使用明显的几何形状,如矩形、三角形和梯形。这些形状常常被用于家具、地板图案和装饰元素。对称性: 对称性是Art Deco设计的一个显著特点。室内布局通常呈对称排列,家具和装饰也常以对称方式摆放。装饰性元素: Art Deco注重装饰性,常使用镶嵌、浮雕、花纹和金属装饰来增添豪华感。装饰元素通常是华丽而富有现代感的。豪华材料: 在Art Deco设计中,常使用高贵的材料,如大理石、黄铜、镀铬、石英玻璃和动物皮革。这些材料为设计增添了奢华感。流线型设计: 一些Art Deco设计中体现了流线型或现代化的感觉,尤其是在一些摩天大楼和交通工具的设计中。明亮的颜色: Art Deco室内设计通常使用明亮而饱和的颜色,如红色、蓝色、绿色和金色,以突显豪华感和现代感。 总体而言,Art Deco室内设计是一种独特而独具特色的风格,强调现代性、对称性和豪华感,通过几何形状和装饰元素展现出独特的艺术魅力。
prompt: 02 Bauhaus Bauhaus是一种强调功能性、简约主义和现代性的设计风格。Bauhaus室内设计是该学派在室内环境中的应用,强调将艺术与实用性相结合,追求简洁、功能性和工业化的美感。
以下是一些Bauhaus室内设计的特点:
功能性: Bauhaus注重在室内设计中实现功能性,强调在设计中考虑使用者的需求。家具和空间布局通常被设计为实现最大的实用性和舒适性。简约主义: Bauhaus室内设计以简洁、干净的线条和几何形状为特征。避免过度的装饰和繁琐的元素,追求简单、现代的外观。开放式空间: Bauhaus室内设计常常采用开放式的布局,强调空间的流动性。墙壁常常简化,以促进空间的统一感和开放感。工业化材料: Bauhaus设计倡导使用工业化生产的材料,如钢、铝、玻璃和混凝土。这些材料通常呈现简单的表面处理,强调实用性和持久性。原始材料的展示: Bauhaus室内设计通常展示原始材料的质感,例如裸露的砖墙、木质结构和其他材料的天然面貌。现代色彩: 鲜艳而均匀的色彩经常出现在Bauhaus室内设计中。通常使用红、黄、蓝等原色,以及中性色如黑、白和灰。 总体而言,Bauhaus室内设计强调实用性、简约和现代感,试图通过工业化的手段为人们创造舒适、实用而现代的居住环境。这一设计风格对当代设计产生了深远的影响。
prompt:
003 Nordic Nordic(北欧)室内设计是一种以北欧国家(如瑞典、挪威、丹麦、芬兰和冰岛)的设计理念为基础的风格。这一设计风格强调简约、舒适、实用和自然元素,反映了北欧地区的文化、气候和生活方式。以下是一些Nordic室内设计的特点:
自然光和通风: 由于北欧地区冬季较长,Nordic室内设计注重最大限度地利用自然光线。窗户设计通常较大,窗帘轻便,以确保室内明亮。同时,通风也是考虑的重要因素。淡雅的色彩: Nordic设计偏向淡雅、中性的色彩,如白色、灰色、米色和淡蓝色。这些色彩有助于营造清新、明亮的氛围,并使空间看起来更加宽敞。自然材料: 木材是Nordic设计中常见的材料,用于地板、家具和装饰。其他自然材料如石材、毛织品和皮革也经常被使用,以突显材料的原始质感。简约而实用的家具: Nordic室内设计强调简约主义,家具通常采用简单而功能性的设计。木质家具、现代设计的沙发和椅子常见于这种风格。舒适的布局: 设计强调在家中创造一个温馨、舒适的环境。柔软、舒适的沙发、毛织品和地毯等元素有助于实现这一目标。清晰的线条和几何形状: Nordic室内设计通常以清晰的线条和几何形状为特征,强调简约而有序的外观。植物和自然元素: 室内植物在Nordic设计中很常见,为空间增添自然元素,同时提供清新的空气。 总体而言,Nordic室内设计注重舒适性、实用性和自然元素,通过简约的设计和淡雅的色彩,创造出清新、明亮、宜人的居住环境。这一风格在全球范围内受到欢迎,也对当代室内设计产生了深远的影响。
prompt: 004 Loft prompt:
005 Bohemian Bohemian(波西米亚)室内设计风格是一种独特、自由、富有创意的风格,灵感来自于波西米亚文化和艺术氛围。这一设计风格强调对个性的表达,自由思考和大胆创意,以及对文化多样性的尊重。以下是一些Bohemian室内设计的特点:
混搭和多样性: Bohemian风格鼓励不同元素和风格的混搭,包括颜色、图案、纹理和家具。这种多样性创造了独特而个性化的室内环境。明亮而丰富的颜色: Bohemian室内通常采用明亮而鲜艳的颜色,如红色、紫色、绿色和橙色。这些颜色为空间带来活力和热情。纹理和图案: Bohemian设计强调使用各种纹理和图案,包括印花、民族风格的图案、地毯、抱枕和挂毯等。这为空间增添了层次感和温暖感。自然元素: Bohemian室内设计通常包括大量的自然元素,如植物、手工艺品和木质家具。这些元素营造了一种自然、放松的氛围。艺术品和手工艺品: 艺术品和手工艺品在Bohemian风格中占有重要地位,可以是手工绘画、摄影作品、雕塑或其他艺术创作。这些元素突显了个性和独特性。低调而舒适的家具: 家具通常是低调的,以创造轻松的氛围。沙发和床可能使用丰富的纺织品,如绒布或深色的布料。非正式而自由的布局: Bohemian风格的布局通常是非正式和自由的,强调个人品味和生活方式。家具不一定要完全匹配,反而强调个人的品味和历史。 总体而言,Bohemian室内设计强调个性、自由和创意,通过混搭各种元素、使用明亮的颜色和引入艺术品,营造出独特而温馨的居住环境。这种风格适合那些寻求自由表达和独特个性的人。
想要使用文心一言,首先要登录百度智能云千帆控制台 https://cloud.baidu.com/product/wenxinworkshop?track=developer_qianfan_tanchuang
1.在控制台找到应用接入 - 然后点击创建应用 2.填写应用信息 3.创建之后,记下API Key 和 Secret Key,等会会用到 4.打开Unity,建一个简单的聊天场景 5.加入测试代码 public class ChatAI: MonoBehaviour { public string token; //这里填写百度千帆大模型里的应用api key public string api_key = "xxxxxx"; //这里填写百度千帆大模型里的应用secret key public string secret_key = "xxxxxxxxx"; //发送按钮 public Button sendBtn; //输入框 public TMP_InputField info; //AI回应 public TextMeshProUGUI responseText; // 历史对话 private List<message> historyList = new List<message>(); public void Awake() { //初始化文心一言,获取token StartCoroutine(GetToken()); sendBtn.onClick.AddListener(OnSend); } public void OnSend() { OnSpeak(info.text); } //开始对话 public void OnSpeak(string talk ) { StartCoroutine(Request(talk)); } private IEnumerator GetToken() { //获取token的api地址 string _token_url = string.
1.安装下载Hadoop文件 1)hadoop-3.3.5 将下载的文件保存到英文路径下,名称一定要短。否则容易出问题;
2)解压下载下来的文件,配置环境变量
3)我的电脑-属性-高级设置-环境变量
4.详细配置文件如下:
HADOOP_HOME: D:\ProgramFiles\hadoop-3.3.5系统 path: %HADOOP_HOME%\bin 和 %HADOOP_HOME%\sbin 2.安装windows环境依赖 需要有windows客户端依赖资料路径下的依赖文件(已上传到平台),拷贝 winutils.exe 到hadoop的bin文件夹: ~\hadoop-3.3.5\bin;再把 hadoop.dll 拷贝到 C:\Windows\System32。
6)验证Hadoop环境变量是否正常。
鼠标双击运行:winutils.exe,若没有报错,一闪而过,就可以了。(如果报如下错误:找不到MSVCR120.dll。说明缺少微软运行库(正版系统往往有这个问题)。再资料包里面有对应的微软运行库安装包双击安装即可。)
3.安装JDK-1.8.371和IDEA 2023 1)注册oracle账号后,下载地址: https://www.oracle.com/java/technologies/downloads/#java8-windows
2)安装的时候,可以只安装 jdk1.8,不安装独立的jre。若电脑上有多个JDK版本,需要在配置环境变量的时候小心。
3)验证java 是否安装成功:cmd - 中输入名: java -version
4) 下载好IDEA2023,可从官网下载安装。(IntelliJ IDEA – 领先的 Java 和 Kotlin IDE)
插件需要下载下,另外激活可参见-IDEA PyCharm WebStorm PhpStorm Jetbrains全家桶最新破解激活码 - 爱激活网
4.打开工程目录-创建项目工程 按照上述的内容填写后,建立Maven 工程。
5.修改配置文件中的依赖 1)添加junit插件 - test 插件 2)添加org.slf4j --日志
pom.xml文件中的依赖项如下:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
mac苹果电脑上运行软件会意外退出,怎么办,可以试试下面的方法,亲测可行!
第一种方法:
1、打开访达,进入应用程序目录,找到闪退的软件图标,在软件图标上右键选择“显示简介”,也可以选择图标然后按快捷键“command+i”键打开简介;
2、勾选“使用Rosetta打开”,然后再打开软件运行即可。
第二种方法:打开终端工具输入并执行如下命令对应用签名:
sudo codesign –force –deep –sign – (应用路径)
应用路径:打开访达(Finder),点击左侧导航栏的 应用程序,找到相关应用,将它拖进终端命令- 的后面,然后按下回车即可,注意最后一个 – 后面有一个空格。然后回车,输入电脑登录密码。
第三种方法:如果还不行就关闭SIP!
玩了那么就cam都玩坏不知道多少个了(还好用的老师的不然得心疼死),但好像没有沉下心来好好看过它的例程源码。正好最近想搞一下linux下的监控项目,所以想先来看看这段代码多学习学习。
首先我们先来看看主函数
#include "esp_camera.h" #include <WiFi.h> // // WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality // Ensure ESP32 Wrover Module or other board with PSRAM is selected // Partial images will be transmitted if image exceeds buffer size // // You must select partition scheme from the board menu that has at least 3MB APP space. // Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15 // seconds to process single frame.
AI Starter 1.0.2 LTS官方下载
【更新:2024-1-31】AIStarter启动器官方下载:AI Starter 1.0.2 LTS GPT-SoVITS 一键整合包下载地址:夸克网盘分享
更多分流下载地址
国内:
百度网盘链接:百度网盘 请输入提取码
提取码:d7xz
123云盘:GPT-SoVITS.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘
提取码:fZUr
国际:
Google云端硬盘:https://drive.google.com/file/d/187kQo-kkKBqYkCHlkqKagZXCdq0KiWQw/view?usp=sharing
在WebSocket通信中加入Token主要是为了实现身份验证和授权,确保只有经过验证的用户可以建立WebSocket连接。由于WebSocket API本身不支持直接在连接时设置HTTP头部,因此需要采用一些变通的方法来传递Token。以下是几种常见的方法:
1、通过URL参数传递Token:
在WebSocket的URL中直接携带Token参数。这种方法简单直接,但安全性较低,因为Token会暴露在URL中,容易被截获。
const socket = new WebSocket('wss://example.com/socket?authorization=' + YOUR_TOKEN);
2、在连接建立后发送Token:
在WebSocket连接建立后,通过onopen事件监听器发送Token。这种方法相对安全,因为Token不会在握手阶段暴露。
const socket = new WebSocket('wss://example.com/socket');
socket.addEventListener('open', (event) => {
socket.send('Authorization: Bearer ' + YOUR_TOKEN);
});
3、使用WebSocket子协议(Sec-WebSocket-Protocol):
利用WebSocket的子协议特性传递Token。这种方法需要服务器端支持并正确处理子协议。
const token = localStorage.getItem('token');
const socket = new WebSocket('wss://example.com/socket', [token]);
4、使用JWT(JSON Web Token):
JWT是一种无状态的、可自验证的令牌,可以安全地在客户端和服务器之间传递。客户端在登录后获取JWT,然后在WebSocket连接时将其作为Token传递。
const jwtToken = jwt.sign(payload, secretKey, { expiresIn: '1h' });
// 生成JWT Token
const socket = new WebSocket('wss://example.com/socket');
socket.addEventListener('open', (event) => {
socket.send(jwtToken);
});
5、使用服务器端的认证中间件:
在服务器端,可以使用认证中间件(如Express.js的passport.js)来处理WebSocket连接。这样,服务器可以在握手阶段验证Token的有效性。
以下为uniapp代码!!!
第一步: 微信小程序webview组件路径写花生壳映射的https://***域名。
webView页面 <template> <view> <web-view :src="wvUrl"></web-view> </view> </template> <script> export default { data() { return { wvUrl: `https://******/h5/index/#/pages/login/login?platformToken=123456`, } }, methods: {} } </script> <style> </style> 第二步: 花生壳配置映射,获取域名。
花生壳动态域名解析服务-贝锐官网|花生壳官网|DNS内网穿透|域名注册|向日葵远程控制|远程桌面|蒲公英路由器-贝锐官网https://www.oray.com/
第三步: uniapp获取定位。(过程全前端实现无后端)
3.1 下载所需文件(npm install crypto-js为了SHA1加密,npm install weixin-js-sdk为了使用微信的api) 3.2 manifest.json配置 重要:uniapp H5端口不能使用默认80(自己踩的坑)
manifest.json /* 小程序特有相关 */ "mp-weixin": { "appid": "", "setting": { "urlCheck": false }, "usingComponents": true, "permission": { "scope.userLocation": { "desc": "您的位置信息将用于小程序位置接口的效果展示" } }, // 微信小程序使用位置相关api需要在此处注册 "requiredPrivateInfos": ["
文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介绍如何在Linux Ubuntu系统中使用MCSManager面板搭建Minecraft服务器,并结合cpolar内网穿透工具,实现在外远程联机我的世界游戏,无需公网IP,无需公网服务器,使用本地部署的服务器即可。
Linux使用MCSM面板搭建我的世界私服相对比windwos简单,也是目前比较流行的设置方式,在Linux中安装MCSManger也是非常容易,一键指令脚本即可安装,本篇教程演示在Ubuntu。
如何使用MCSM搭建我的世界Java版服务器并实现MC远程联机游戏
1. 安装JAVA 运行Minecraft需要java17的版本,检查Linux java版本
java -version 如果没有安装java,可以一键安装
sudo apt install openjdk-17-jre-headless 2. MCSManager安装 使用官网的下载命令脚本,直接下载安装,安装脚本只支持 Ubuntu/Centos/Debian/Arch 等主流 x86_64 位操作系统。
wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup.sh | sudo bash 安装完成后,我们可以看到访问的地址,和相关的端口号,下面命令是操作命令.
3.局域网访问MCSM 通过上面的ip地址我们可以看到端口号是23333,我们可以通过在外部电脑使用局域网ip地址在浏览器访问23333端口,查看Linux 局域网ip地址:
ip address 输入命令后我们可以看到相关的局域网ip地址
然后使用外部浏览器,通过局域网ip地址加23333端口访问,即可看到MCSM的web界面,首次登陆,需要创建一个账号
4.创建我的世界服务器 在面板中,我们点击快速开始,创建一个Minecraft服务器
选择一键开服,简单,迅速
这里选择1.19.2 版本,点击安装
给服务器取个名字,然后点击OK,等待安装即可
安装成功后,我们点击按钮前往实例控制台
然后出现联机方式,我们点击下面跳过设置联机方式的选择
然后点击一下开启实例,开启实例后会生成一个server.properties文件,不开启实例不会生成
然后停止实例,修改配置文件,取消正版服务器的验证,点击文件管理
找到server.properties文件,点击编辑,第一页找不到,点击底部第二页
把online-mode的值改为false,然后保存,关闭
然后开启实例,这里的实例表示服务的意思
启动成功,我们可以看到端口信息,端口号为:25565
5.局域网联机测试 启动器和最新版JAVA地址:
https://pan.baidu.com/s/1VuiGrX_hH_gzYzcKAjwEVA?pwd=6666
提取码:6666
本教程使用的是windows启动器和JAVA
安装好最新版JAVA后在启动器中创建一个账号,正版或是离线账号都可以
打开我的世界启动器,选择和服务器一样的版本1.19.2,启动
然后点击多人游戏
点击添加服务器,然后输入局域网ip地址加25565端口192.168.50.105:25565,点击加入服务器
现在我们成功搭建了我的世界私服,并且可以看到成功进入了游戏。
本篇重点讲解一维数组、字符数组、二维数组的sizeof和strlen的应用,首先要先回顾以下知识(在博主指针专题的深入理解指针(1)、(2)和(3)中有详细学习)
一、做题前的重点知识回顾 1.sizeof和strlen的对比 sizeof:
1.sizeof是操作符
2.sizeof计算操作数所占内存空间的大小,单位是字节
3.sizeof并不关心存放了什么数据。
strlen:
1.strlen是一个库函数,头文件是string.h
2.strlen统计的是\0前面的元素个数,所以一般只适用于字符串,因为字符串的结尾隐藏着一个\0
3.strlen的使用过程中一定要关注是否有\0,如果没有,就很可能出现越界访问,此时会得到一个随机值。
2.数组名的理解 · sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节。
· &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)
其他情况遇到的数组名都是首元素地址!!
3.指针变量类型的意义 既然指针的大小和类型无关,同一个操作平台下指针大小是一样的,那么指针的数据类型有什么用呢?
1.指针的类型决定了对指针解引用的权限有多大
2.指针的类型决定了指针向前或者向后走一步(+1或-1)有多大
3.void*叫做无类型指针,这类指针可以用来接受任意类型的地址,但是也有局限性,就是void*不能直接进行指针的+-整数和解引用运算。
4.字符指针变量 字符指针变量接收字符串的本质是将字符串的首字符地址存放到字符指针变量中,所以如果字符串出现在表达式中,他的值就是第一个字符的地址。
其实我们可以把字符串理解成一个字符数组,他具有数组的特点,可以通过首元素地址找到后面的全部元素,并且也可以像数组一样通过下标去访问每个元素
5.二维数组传参的本质 二维数组的首元素就是第一行,是个一维数组。
二维数组的数组名就是就是第一行(一维数组)的地址,二维数组传参本质是传递第一行这个一维数组的地址。
二维数组第一行的一维数组的数据类型是int[n],所以第一行的地址类型就是数组指针类型int(*)[n],所以我们可以将形参类型写成指针形式。 二、数组和指针 声明:x64环境下地址的大小是8个字节
解析都在注释里!!
1.一维数组 2.字符数组 2.1.字符数组中放入字符 2.2.字符数组中放入字符串 2.3.字符指针变量中放入字符串 3.二维数组 三、指针的运算
创作不易,友友们给个三连吧!!
一、旋转数组(力扣) 经典算法OJ题:旋转数组
思路1:每次挪动1位,右旋k次
时间复杂度:o(N^2) 右旋最好情况:k是n的倍数,相当于不右旋,此时为o(1)
右旋最坏情况:k%n==n-1,此时为o(N^2)
空间复杂度:o(1)
void rotate(int* nums, int numsSize, int k) { k%=numsSize; while(k) { int temp=nums[numsSize-1]; //从后往前挪 for(int i=numsSize-1;i>0;i--) { nums[i]=nums[i-1];//最后一个是nums[1]=num[0] } nums[0]=temp; k--;//旋转一次就减一次 } } 注:这是常规思路,但是由于空间复杂度太高,数组个数特别多的时候,在力扣运行的时候超出了时间限制!
思路2:创建一个和nums一样长度的新数组,将nums数组的后k个元素,先按顺序放进新数组里,然后剩下前面的n-k个元素,再按顺序放进新数组,最后再将新数组的数据拷贝到nums中
时间复杂度:o(N)
空间复杂度:o(N)
void rotate(int* nums, int numsSize, int k) { k%=numsSize; int arr[numsSize];//vs不支持变长数组,但是牛客支持,如果是vs只能使用动态数组。 memcpy(arr,nums+numsSize-k,sizeof(int)*k);//nums的后k个按顺序拷贝到新数组的前面 memcpy(arr+k,nums,sizeof(int)*(numsSize-k));//nums的前n-k个按顺序拷贝到新数组的后面 memcpy(nums,arr,sizeof(int)*numsSize);//新数组完全拷贝到nums数组中 } 思路3:前n-k个元素逆置,后k个元素逆置,再整体逆置
时间复杂度:o(N)
空间复杂度:o(1)
void reverse (int *arr,int left,int right)//实现逆序函数 { int temp=0; while(left<right) { temp=arr[left]; arr[left]=arr[right]; arr[right]=temp; left++; right--; } } void rotate(int* nums, int numsSize, int k) { k%=numsSize; reverse(nums,0,numsSize-k-1);//前n-k个元素逆序 reverse(nums,numsSize-k,numsSize-1);//后k个逆序 reverse(nums,0,numsSize-1);//完全逆序 } 二、消失的数字(力扣) 经典算法OJ题:消失的数字
我在使用VMware虚拟机软件安装苹果macOS系统时,由于每个物理机硬件的不同,会遇到各种各样的安装问题,今天总结了一下最常遇到的安装问题与相关问题的解决办法,此文纯纯的干货,切记收藏好,备用,只要你有安装macOS的想法,此文对你绝对会有帮助。
好了,干货开始。
常见问题1:VMware虚拟机安装时,未出现macOS的选项?
解答:出现这种情况,主要是因为默认的VMware虚拟机是隐藏关闭了对macOS系统的支持,我们需要在安装macOS系统前,先处理下VMware虚拟机软件,使用VMware Unlocker处理工具进行处理,具体的办法可以百度,很容易就能搜到,不过流程可能会有点小复杂。如果你怕麻烦的也可以直接使用处理过并优化的VMware软件。在诗林工作室的公众号中就有,想要的也可以去获取下载。此问题很简单,网上解决方法也多,固在此就不过多的讲解了。
问题2:macOS在VMware中无法引导,启动出现蓝屏引导界面?
解答:出现这种情况,一般是由于macOS的镜像包引导损坏而引起的。此时需要重新找一个macOS的镜像安装文件,替换下即可。出现此种问题主要是镜像包在下载时不完整或镜像文件在压缩时损坏所致。
问题3:macOS系统在VMware软件中启动时,一直卡在苹果Logo启动界面且VMware软件中提示:客户机操作系统已禁用CPU,请关闭或重置虚拟机?
解答:一般这种情况多数出现在AMD处理器的机子中,出现这种情况可以尝试修改虚拟机中macOS的配置文件,具体方法如下:
先关闭你的虚拟机,然后到macOS的安装目录,找到 macOS xxxx(你选择安装的版本号).vmx文件,打开在末尾添加:
smc.version = "0" cpuid.0.eax = "0000:0000:0000:0000:0000:0000:0000:1011" cpuid.0.ebx = "0111:0101:0110:1110:0110:0101:0100:0111" cpuid.0.ecx = "0110:1100:0110:0101:0111:0100:0110:1110" cpuid.0.edx = "0100:1001:0110:0101:0110:1110:0110:1001" cpuid.1.eax = "0000:0000:0000:0001:0000:0110:0111:0001" cpuid.1.ebx = "0000:0010:0000:0001:0000:1000:0000:0000" cpuid.1.ecx = "1000:0010:1001:1000:0010:0010:0000:0011" cpuid.1.edx = "0000:0111:1000:1011:1111:1011:1111:1111" featureCompat.enable = "TRUE" smbios.reflectHost = "TRUE" hw.model = "MacBookPro16,1" board-id = "Mac-E1008331FDC96864" 如果你是Inter的CPU,处理方法同上,修改虚拟机中macOS的配置文件,添加以下代码:
smc.version = "0" cpuid.0.eax = "0000:0000:0000:0000:0000:0000:0000:1011" cpuid.0.ebx = "0111:0101:0110:1110:0110:0101:0100:0111" cpuid.0.ecx = "0110:1100:0110:0101:0111:0100:0110:1110" cpuid.0.edx = "0100:1001:0110:0101:0110:1110:0110:1001" cpuid.1.eax = "
大学生考勤系统目录
目录
基于Springboot的大学生考勤系统设计与实现
一、前言
二、系统功能设计
三、系统实现
1、系统登录注册
2、管理员功能模块
3、教师功能模块
4、学生功能模块
四、数据库设计
1、实体ER图
2、具体的表设计如下所示:
五、核心代码 六、论文参考
七、最新计算机毕设选题推荐
八、源码获取:
博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️
主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。
🍅文末获取源码联系🍅
👉 毕设答疑 👈
基于Springboot的大学生考勤系统设计与实现 一、前言 学生考勤管理系统就是信息时代变革中的产物之一。
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场进行调研,论文需求进行分析,概要设计,系统详细设计,测试和编码等步骤,设计并实现了学生考勤管理系统。系统选用B/S模式,应用java技术,MySQL为后台数据库。系统主要包括首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能模块。
本文首先介绍了学生考勤管理的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E/R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,对功能、单元和性能进行测试。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。
关键词:学生考勤管理系统;java技术;MySQL数据库
二、系统功能设计 通过市场调研及咨询研究,了解了学生考勤管理系统及管理者的使用需求,于是制定了管理员,教师和学生等模块。功能结构图如下所示:
三、系统实现 1、系统登录注册 系统登录,用户在登录页面通过填写用户名,密码,选择相对应的角色等信息进行登录操作;如图5-1所示。
图5-1登录界面图
学生注册,在学生注册页面通过填写学号,密码,确认密码,姓名,年级,专业,班级,手机等信息进行注册操作;如图5-2所示。
图5-2学生注册界面图
2、管理员功能模块 管理员登录进入系统可以查看首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能,并进行详细操作,如图5-3所示。
图5-3管理员功能界面图
学生管理;在学生管理页面中可以查看索引,学号,姓名,性别,年级,专业,班级,手机,照片等内容,并进行详情,统计考勤,修改和删除操作;如图5-4所示。
图5-4学生管理界面图
教师管理;在教师管理页面中可以查看索引,教师工号,教师姓名,性别,职称,手机,邮箱,照片等内容,并进行详情,修改和删除操作;如图5-5所示。
图5-5教师管理界面图
班级信息管理;在班级信息管理页面中可以查看索引,班级号,班级名称,班级图片,所属院系,所属专业,班主任,班级人数等内容,并进行排课程表,修改和删除操作;如图5-6所示。
图5-6班级信息管理界面图
考勤信息管理;在考勤信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,周次,上课日,节次,教师工号,教师姓名,签到状态,截止时间,学号,姓名,签到时间等内容,并进行修改和删除操作;如图5-7所示。
图5-7考勤信息管理界面图
3、教师功能模块 教师登录进入系统可以查看首页,个人中心,学生管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能,并根据需要进行详细操作,如图5-8所示。
图5-8教师功能界面图
学生管理;在学生管理页面中可以查看索引,学号,姓名,性别,年级,专业,班级,手机,照片等内容,并进行详情,统计考勤操作;如图5-9所示。
图5-9学生管理界面图
课程信息管理;在课程信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,图片,周次,上课日,节次等内容,并进行发起签到操作;如图5-10所示。
图5-10课程信息管理界面图
请假信息管理;在请假信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,周次,上课日,节次,教师工号,教师姓名,请假原因,学号,姓名,请假时间,审核回复,审核状态,审核等内容;如图5-11所示。
图5-11请假信息管理界面图
4、学生功能模块 学生登录进入系统可以查看首页,个人中心,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能,并根据需要进行详细操作,如图5-12所示。
图5-12学生功能界面图
签到信息管理;在签到信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,周次,上课日,节次,教师工号,教师姓名,截止时间等内容,并进行签到或请假操作;如图5-13所示。
图5-13签到信息管理界面图
请假信息管理;在请假信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,周次,上课日,节次,教师工号,教师姓名,请假原因,学号,姓名,请假时间,审核回复,审核状态等内容;如图5-14所示。
图5-14请假信息管理界面图
四、数据库设计 1、实体ER图 大学生考勤管理系统的E-R图如下图所示:
考勤信息管理E/R图,如下所示:
图4-2考勤信息管理E/R图
概述 文心一言是百度打造出来的人工智能大语言模型,具备跨模态、跨语言的深度语义理解与生成能力,文心一言有五大能力,文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成,其在搜索问答、内容创作生成、智能办公等众多领域都有更广阔的想象空间。文心一言企业服务由千帆大模型平台提供,包括推理服务及大模型微调等一系列开发和应用工具链。文心一言大模型现已升级至4.0,企业客户可通过百度智能云千帆大模型平台申请接入。
API调用流程 步骤一. 创建千帆应用 (1)登录百度智能云千帆控制台。
注册并登录百度智能云千帆控制台 (2)创建千帆应用
进入控制台创建应用 。如果已有应用,此步骤可跳过。
(3)创建应用后,获取AppID、API Key、Secret Key。
步骤二. 开通文心一言 (1)进入 模型广场,筛选所需模型。
(2)选择体验模型,并开通付费(文心一言4.0没有免费额度,需开通付费后使用)
代码调用示例 import json import requests API_KEY = '*******' SECRET_KEY = '*******' def get_access_token(self): """ 使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key """ url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={self.api_key}&client_secret={self.secret_key}" payload = json.dumps("") headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) return response.json().get("access_token") def do_chat(): url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + self.get_access_token() payload = json.
文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制,主要分为SASL和SSL两大类。
SASL: 是一种身份验证机制,用于在客户端和服务器之间进行身份验证的过程,其中SASL/PLAIN是基于账号密码的认证方式。SSL: 是一种加密协议,用于在网络通信中提供数据的保密性和完整性。它使用公钥和私钥来建立安全的连接,并对传输的数据进行加密和解密,以防止未经授权的访问和篡改。 在 Kafka 中启用 SASL_SSL 安全协议时,SASL 用于客户端和服务器之间的身份验证,SSL 则用于加密和保护数据的传输。不仅提供身份验证,还提供加密和数据保护的功能。
因工作需要,需要在测试环境搭建一套基于SASL_SSL协议的kafka环境。坑比较多,经过两天的研究终于搞定了,特在此记录下。
2. 环境 操作系统:linuxkafka版本:kafka_2.13-2.7.1zookeeper版本:apache-zookeeper-3.7.0应用程序版本:spring-boot-2.6.7、JDK1.8 3. 操作步骤 生成SSL证书配置zookeeper配置kafka前三步配置完成后kafka就开启了SASL_SSL双重认证,可以使用kafka自带的客户端进行测试(3.4),在业务代码中使用请查看(3.5) 3.1 生成SSL证书 按照步骤一步一步操作,生成服务器/客户端的SSL证书。也就是公钥与私钥
参考:【SSL协议】生成SSL证书 - lihewei - 博客园 (cnblogs.com)
3.2 配置zookeeper认证 第一步: 在apache-zookeeper-3.7.0/conf 目录下创建 kafka_zk_jaas.conf 配置文件(名称任意),定义了两个用户,可提供给生产者和消费者使用,格式为:user_用户名=“用户密码”,内容如下:
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_admin="1qaz@WSX" user_kafka="1qaz@WSX"; }; 第二步: zookeeper配置文件zoo.cfg中新增SASL认证配置,如下:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000 第三步: 在apache-zookeeper-3.7.0/bin/zkServer.sh脚本中新增jvm参数,让其启动时加载jaas配置文件
export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS -Djava.security.auth.login.config=/home/crbt/local/apache-zookeeper-3.7.0/conf/kafka_zk_jaas.conf" 3.3 配置kafka安全认证 第一步: /home/crbt/local/kafka_2.13-2.7.1/config目录下创建kafka-server-jaas.conf和kafka-client-jaas.conf配置文件,内容如下:
kafka-server-jaas.conf
服务部署启动时,我们经常需要指定配置文件启动.
一般有四种,优先级如下
spring.config.location > spring.profiles.active > spring.config.additional-location > 默认的 application.yml
1.spring.config.location 外部配置文件优先级最高
一般配置文件在服务器上面,而不是读取jar包里面的配置文件,
比如
nohup java --spring.config.location=/data/application-test.yml -jar logaudit-api-provider.jar > /dev/null 2>&1 & 这个时候就会去优先读取/data/目录下的application-test.yml文件,而不是项目jar包里面的application-test.yml
2.spring.profiles.active 指定读取jar包里面的哪个配置文件
nohup java --spring.profiles.active=test -jar logaudit-api-provider.jar > /dev/null 2>&1 & 这个时候会去读取jar包里面的application-test.yml
3.spring.config.additional-location 指定配置文件夹路径
这个我没有用过,一般是用的上面两个或者下面第四个默认
nohup java --spring.config.additional-location=/data/ -jar logaudit-api-provider.jar > /dev/null 2>&1 & 这个时候会去扫描服务器/data/目录下面的文件作为配置文件,如果有data下面有多个配置文件呢,比如同时有application-test.yml和application-pro.yml.那么会读取哪个?
如果data目录下只有application-test.yml.那应该和第一种是一样的作用
比较懒,就没有去尝试了
4.默认的application.yml 读取代码指定的配置文件
nohup java -jar logaudit-api-provider.jar > /dev/null 2>&1 & 没有指定的时候,那么就会去读取jar包里面的application.yml,它自己指定了哪个就读取哪个,以代码配置为准
一、连接本地MySQL 1、新建连接 打开DBeaver,点击左上角的文件或者点击箭头所指的连接按钮。 新建 数据库连接-选择数据库(mysql),点击“下一步” 输入服务器地址、端口、用户名、密码(数据库自己选填,不填则连接所有数据库),点击“完成”。注:如果首次连接mysql会提示下载对应的JDBC驱动,点击下载即可(这里就不展示了) 连接成功如下图 二、新建数据库 右键数据库,新建数据库 输入数据库名,选择字符集、排序规则,点击“确定”即可创建成功 三、创建数据表 1、视图操作建表 右键新建表 输入表名,设置引擎、字符集等 在表格区域右键新建列 依次设定列名和列属性 如下图,新建列成功【其他列同理】 新建约束【自增的列要为其建好约束,不然执行SQL时会报错!】 保存表【添加好所有列别忘了保存表和执行SQL哦!】 视图输入列值【点击数据,(右键“编辑”,点击“添加行”)或(点击界面下方箭头处添加)】 输入列值【别忘了保存哦!】,这样一个完整的表就建好啦 2、SQL语句建表 右键SQL编辑器 编辑SQL语句建表,点击方框中小三角形去执行SQL语句(即创建表成功) 刷新即可在导航栏看到用SQL语句创建的表 打开SQL编辑器,编写SQL语句,插入值【一定要记得运行!!!】 插入列值成功【SQL语句建表就成功啦!】 此篇已完善!