解决IDEA无法创建JDK1.8版本的Springboot项目问题 描述方案一:替换创建项目的源方案二:使用spring3.0创建后,修改JDK版本 描述 springboot3.0之后,已经不再支持jdk1.8版本,官网.
方案一:替换创建项目的源 将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/
方案二:使用spring3.0创建后,修改JDK版本 采用JDK17或者21版本,创建项目后,springboot的版本要改为3.0以下,在pom.xml中把java改为1.8,如下图
参考文档:
IDEA2023版本创建Sping项目创建JDK1.8版本的Springboot项目
前言 在MySQL数据库管理中,TRUNCATE TABLE命令是一个用于快速删除表中所有数据的重要工具。相比常规的DELETE命令,TRUNCATE TABLE具有显著的性能优势和独特的操作特点。本文旨在深入探讨TRUNCATE TABLE命令的用法、工作原理以及实际应用中的注意事项。
一、TRUNCATE TABLE命令基础用法 语法结构:
TRUNCATE TABLE table_name; 使用TRUNCATE TABLE命令时,只需要指定要清空数据的表名即可。该命令会立即删除表中的所有数据,使表回到初始状态,就像新建一张没有任何记录的空表一样。
二、TRUNCATE TABLE与DELETE的区别 性能差异:
TRUNCATE TABLE执行速度明显快于DELETE FROM table_name,因为它不记录每一条被删除的行信息,而是直接丢弃数据文件,然后重置表的计数器(AUTO_INCREMENT列)。DELETE语句则会逐行删除记录,并且如果启用了事务和binlog,还会记录这些删除操作,因此在处理大量数据时,DELETE的效率和资源消耗都会更高。 事务与回滚:
TRUNCATE TABLE是DDL操作(数据定义语言),执行后不能回滚,且会自动提交,即使是在事务中执行也是如此。DELETE是DML操作(数据操纵语言),可以在事务中执行,并支持回滚。 日志记录:
TRUNCATE TABLE操作通常不会记录到二进制日志(binlog)中,这意味着这个操作不能用于基于日志的复制和恢复机制。DELETE操作会记录到binlog,适合于主从复制环境下的数据同步。 碎片整理与空间回收:
TRUNCATE TABLE执行后会释放磁盘空间,并且可能会触发表空间的重新组织,减少碎片。DELETE虽也能删除数据,但可能不会立即回收磁盘空间,且不会整理表碎片。 三、TRUNCATE TABLE的局限性 TRUNCATE TABLE不能带WHERE子句,也就是说你不能有条件地删除部分数据,它只能清除整个表的内容。对于带有外键约束的表,若其他表引用了此表的数据,那么在未解除外键约束前,TRUNCATE TABLE可能无法执行。 四、应用场景举例 当你需要在开发测试环境中快速清理大量数据,或是定期维护时想要高效地重置某个表至初始状态,TRUNCATE TABLE无疑是最佳选择。
五、安全提示 在生产环境中使用TRUNCATE TABLE命令需格外谨慎,因为它不可撤销并且会影响数据完整性。在执行之前,请确保备份重要数据,并确认该操作符合业务需求和数据安全策略。
结语 MySQL中的TRUNCATE TABLE命令是一个功能强大且高效的工具,理解其特性和使用场景有助于我们在日常数据库管理和维护工作中做出正确的决策。务必根据实际情况权衡其优势与风险,确保数据安全和系统稳定。
1.介绍 我们这次要在vs中安装的ai叫Fitten Code 文章结尾会付上官网链接
Fitten Code有着强大的功能:
基于注释的代码生成功能让你的注释变得“活”起来,自动生成符合注释要求的代码,减少手动编写的时间和精力。
以注释为指导,代码生成插件能快速生成项目结构、函数骨架、接口调用等代码片段,帮助你快速搭建项目等等。
2.如何在vs中安装这个强大的ai工具 2.1打开vs2022,点击上方栏中的扩展选项,再点击管理扩展 2.2在管理拓展中搜索fitten code,找到如图所示的拓展,并点击下载 2.3安装完成之后会要求重启vs,,建议把未保存的代码保存再重启vs。 2.4关闭vs后等待一会,会跳出一个fitten code安装的弹出,点击确定按钮等待fitten code自动下载完。 3.相关功能如何使用 3.1登录账号 如果还没有账号可以去官网注册一下,注册完之后就可以登陆该账号。
3.2 ai补全 安装并登录好之后就可以使用fitten code的自动补全代码,在打代码的过程中会出现灰色的补全代码,如图所示,只需按下TAB键就可以使用ai补充的代码。
3.3ai搜索/聊天 在fitten code中最吸引人的还是内置ai
想要完成如图所示的功能只需要 点击扩展,找到fitten code 再点击open chat window就可以使用ai聊天/搜索。
4.官网 免费好用的AI编程助手 Fitten Code - 支持VS Code、PyCharm、Intellj、Visual Studio (fittentech.com)
一、SQLAlchemy ORM使用教程 SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。在本篇博客中,我们将深入探讨SQLAlchemy ORM的核心知识,并通过具体的代码示例来帮助您快速上手。
二、SQLAlchemy简介 SQLAlchemy由Mike Bayer创建,它提供了两种主要的组件:SQLAlchemy Core和SQLAlchemy ORM。
SQLAlchemy Core:是一个SQL表达式语言和数据库抽象层,它允许您使用Python类来表示数据库表,并且可以使用Python表达式来编写SQL查询。SQLAlchemy ORM:是一个建立在SQLAlchemy Core之上的对象关系映射器,它允许您使用Python类来表示数据库表,并且可以通过操作这些类实例来执行数据库操作。
在本篇博客中,我们将重点介绍SQLAlchemy ORM的使用。 三、安装SQLAlchemy 在开始使用SQLAlchemy之前,需要确保已经安装了Python。SQLAlchemy可以通过pip命令进行安装:
pip install SQLAlchemy 四、连接到数据库 要使用SQLAlchemy ORM,首先需要创建一个数据库连接。SQLAlchemy支持多种数据库后端,包括SQLite、MySQL、PostgreSQL等。
以下是一个使用SQLite数据库的示例:
from sqlalchemy import create_engine engine = create_engine('sqlite:///example.db') 在这个示例中,我们使用create_engine()函数创建了一个SQLite数据库引擎,它将连接到名为example.db的SQLite数据库文件。
五、定义模型 在SQLAlchemy ORM中,模型通常是通过定义Python类来实现的,这些类继承自sqlalchemy.ext.declarative.api.DeclarativeMeta。每个类对应于数据库中的一个表,类的属性对应于表中的列。
以下是一个简单的用户模型示例:
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) 在这个示例中,我们首先创建了一个Base类,它将作为所有模型类的基类。然后,我们定义了一个User类,它继承自Base类。__tablename__属性指定了数据库中对应的表名。id、name和age属性定义了表中的列,Column函数用于指定列的数据类型和约束。
六、创建表 在定义了模型之后,我们可以使用Base.metadata.create_all()方法来创建数据库表。
from sqlalchemy.
微信公众号:数据库杂记 个人微信: iiihero 我是iihero. 也可以叫我Sean. iihero@CSDN(https://blog.csdn.net/iihero) Sean@墨天轮 (https://www.modb.pro/u/16258) 数据库领域的资深爱好者一枚。 水木早期数据库论坛发起人 db2@smth,早期多年水木论坛数据库版版主。 国内最早一批DB2 DBA。前后对Sybase ASE及SQLAnywhere, PostgreSQL, HANA, Oracle, DB2, SQLite均有涉猎。曾长期担任CSDN相关数据库版版主。 SAP数据库技术专家与开发架构师,PostgreSQL ACE. 代表作有:<<Java2网络协议内幕>> <<Oracle Spatial及OCI高级编程>> <<Sybase ASE 15.X全程实践>> 兴趣领域:数据库技术及云计算、GenAI 业余专长爱好:中国武术六段 陈式太极拳第13代传人(北京陈式太极拳第5代传人) 职业太极拳教练,兼任北京陈式太极拳研究会副秘书长。 如果想通过习练陈式太极拳强身健体,也可以与我联系。 前言 记得前边为了使用windows上的命令行客户端去连接Cloud上边的 hyperscale Redis, 很是费了半天劲,才折腾出一个可以连接的支持TlS的版本。里边要用到msys + mingw,而且接连几个坑。详见:Redis 7.0.X 在Windows下编译支持TLS连接,遇坑埋坑
那么有没有单独的GUI式的客户端工具可以连接呢?如果有可能,将两者结合起来用,看着也是蛮不错的。
实作与分析 1、直接编译后的redis-cli命令行 这个不多说, 直接:
redis-cli -c -p <port> -a <password> --tls --no-auth-warning 其中:
-c Enable cluster mode (follow -ASK and -MOVED redirections).-a 指定密码-tls 暗示要使用SSL--no-auth-warning 相关警告信息不输出 这个自行编译出来的目录内容大概如下:
c:\tools\redis\bin>dir 2023-07-15 12:50 AM 2,982,622 msys-2.
Jupyter Notebook的安装(Windows和Mac)
大家好,这里是文能敲锣,武能打鼓的小W。Jupyter Notebook是一款常见的代码编辑器。由于其的简便和代码块式的运行调试方式,小白(像偶这样的)和需要跑机器学习的同学都会选择Jupyter Notebook。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录 前言一、Windows命令行安装1.新建Jupyter Notebook的安装文件夹,并打开命令行弹窗2.命令行下安装Jupyter Notebook 二、Mac命令行安装1.Mac命令行的打开a.键盘打开命令行b.菜单栏打开命令行 2.Mac命令行的打开Attation!好的,到这jupyter的安装结束,赶快进入编程之旅! 前言 Jupyer Notebook常见有三种方法进行安装:命令行安装,vscode安装和Anacoda安装。本文主要介绍使用命令行的方法分别在Windows和Mac系统上进行安装。
一、Windows命令行安装 1.新建Jupyter Notebook的安装文件夹,并打开命令行弹窗 偶选择在自己平时常放工作文件的位置下新建“jupyter”文件夹
然后就会弹出命令行弹窗,而且已经转到对应的文件夹下
2.命令行下安装Jupyter Notebook 在命令行下输入:pip install jupyter
即可开始自动安装(pip是一般在安装python时都会一起安装好的。如果没有这个工具,可以重装python或者先去看看如何安装pip)
安装好后,直接在命令行里面输入:jupyter notebook
即可用网页打开jupyter,我这里是可以在对应夹位置打开或者复制网址到浏览器里
后续的使用也是在想要存储代码的文件夹下,打开命令行输入:jupyter notebook 即可
二、Mac命令行安装 其实步骤和上面差不多,但有些区别。 Mac没有win键,不能像Windows直接win+R打开命令行。
1.Mac命令行的打开 a.键盘打开命令行 在Mac键盘上按住commond+space
然后再弹出的窗口中输入“终端程序”即可
b.菜单栏打开命令行 在弹出的菜单中选择“实用”工具,并在弹出窗口选择“终端”即可
2.Mac命令行的打开 打开命令行后就可以输入:pip install jupyter
然后即可安装成功,然后输入:jupyter notebook打开
下面直接跳转到在jupyter里面选择python版本
Attation! 这时候如果是用苹果专门的Safari浏览器,它很可能会说阻止窗口弹出,这时候只要设置里允许jupyter网站的弹出窗口即可。
这里直接参考别人博主的做法,传送阵直接给你传过去!
参考:梦想也能许愿-如何在Mac上的 Safari浏览器中阻止弹出式窗口?
好的,到这jupyter的安装结束,赶快进入编程之旅!
目录 一、实验目的二、实验平台三、实验内容1.spark-shell 交互式编程2.编写独立应用程序实现数据去重3.编写独立应用程序实现求平均值问题 一、实验目的 1、熟悉 Spark 的 RDD 基本操作及键值对操作;
2、熟悉使用 RDD 编程解决实际具体问题的方法
二、实验平台 1、Scala 版本为 2.11.8。
2、操作系统:linux(推荐使用Ubuntu16.04)。
3、Jdk版本:1.7或以上版本。
三、实验内容 1.spark-shell 交互式编程 请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在 spark-shell 中通过编程来计算以下内容:
(1)该系总共有多少学生;
val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt") val par = lines.map(row=>row.split(",")(0)) val distinct_par = par.distinct() distinct_par.count (2)该系共开设来多少门课程;
代码如下:
val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt") val par = lines.map(row=>row.split(",")(1)) val distinct_par = par.distinct() distinct_par.count (3)Tom 同学的总成绩平均分是多少;
代码如下:
val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt") val pare = lines.
RabbitMQ安装文档 RabbitMQ官网下载地址:https://www.rabbitmq.com/download.html 1.安装依赖 在线安装依赖环境:
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz 2.安装环境 上传安装包到linux 环境
2.1安装erlang环境 rpm -ivh erlang-23.3.4.5-1.el7.x86_64.rpm 如果出现如下错误
使用yum升级gblic 版本
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 2.2安装rabbitMQ 安装socat
yum install socat -y 安装rabbitMQ
rpm -ivh rabbitmq-server-3.8.34-1.suse.noarch.rpm 开启管理界面
rabbitmq-plugins enable rabbitmq_management 启动rabbitmq
/bin/systemctl start rabbitmq-server.service 2.3rabbitMQ操作 开放端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --reload 查看服务状态
科研最重要的是阅读文献资料,但是枯燥的文献有点一篇篇太浪费时间。需要个总结提取一下。所以推荐几款比较实用,也可以总结文章、分析文件文件的工具。
当然这些工具,个人感觉对于写论文和读论文也是很强大的!
有新的好用的,我这边随时会进行更新,欢迎大家补充喔!再次小伙伴建议添加进收藏夹!
1、包阅 一款国内文档分析工具,可以上传文档实时分析。支持各种文件类型,如PDF、doc、docx等文件。总之选择文档上传,分分钟搞定论文、图书、文档、网页阅读,且能对文件进行快速分析。
除此之外,还有一点特别牛,你可以发送链接给他,它会自动总结网页的内容并对其分析。这点已经暴打很多市面上的软件。而且它具备了直接生成论文分析、大纲、文档对话、笔记、翻译功能,能解决绝大部分阅读难题。
使用地址:包阅AI-你的智能AI阅读助手
2、Claude Anthropic 在今年发布了全新的Claude大语言模型,这款 AI 工具可以实现更长文本的响应,并且能够支持上传文件。用户意味其可以一次读取几百页的文件内容。也可以上传多个文件进行分析。
Claude系列模型的文件上传功能实现对文本的分析,并且Claude3的超长token也能支持上传更长的文档。
使用地址:Claude.ai (点击即可跳转)
如果出现App unavailable,点此获取教程解决这个问题
3、Kimi 国内一款AI模型,支持图片、word、PDF等格式的上传。目前可以实现同时上传50个文件,且并对多文件进行同时分析结果,页面也比较简洁,对于读论文来说是个不错的选择。
使用地址:Kimi.ai - 帮你看更大的世界
4、GPT学术版 GPT学术优化 (GPT Academic):支持一键润色、一键中英互译、一键代码解释、chat分析报告生成、PDF论文全文翻译功能、互联网信息聚合+GPT等等
支持上传文件并对文件进行分析,总结全文,提供图形交互界面,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持清华chatglm等本地模型。且兼容复旦MOSS、llama、rwkv、盘古、newbing, claude等
学术版需要自行配置:天空蓝:图文详解:在windows中部署ChatGPT学术版
如果懒得布置可以订阅别人或使用GPT4:爱发电 · GPT学术版订阅更新
5、Webpilot 本来是GPT4的联网插件之一,后面又出了单独的浏览器插件。主要作用就是总结分析整理网页信息,如果你要阅读的文章是某个网页,那刚好可以利用这个插件来辅助你进行阅读。
除了可以总结全文,如果你对某段内容有疑问,还可以直接对某段内容进行单独阅读,或者根据内容写出一篇新的内容。当然,我个人觉得最方便的还是可以直接配备自己的API Key,四舍五入相当于免费使用了。
缺点就是没办法阅读本地文档,也不支持上传文档处理,只能在网页端进行阅读。不过总体使用下来我觉得体验感还是相当不错的。
使用地址:Webpilot - Copilot for All, Free & Open - Microsoft Edge Addons
6、Poe 国外一个AI模型聚合平台,目前支持联网和对文件上传分析,可以免费使用。
使用地址:poe.com
7、Zotero GPT Zotero是一款文献管理软件(Windows&iOS),可以了利用GPT和Zotero结合,达到本地阅读文献并实现对全文总结和分析的目的。
功能展示:Zotero GPT - 一个游走于文献间的精灵
配置教程:Zotero + GPT ,让GPT和你一起高效读文档
8、Humata Humata是由GPT驱动的一个AI文档文件分析、阅读、问答工具,该工具可以帮助用户:
总结长篇问答,让你学习更快,把复杂的技术论文变成简单解释的摘要。即时问答,回答与你的文档相关的难题,立即获得易于理解的答案。提高写论文速度,可根据您的文件自动创建新的paper,快速为报告、论文和各种任务生成详细的见解。 使用地址:ChatGPT for Your Data Files (需特殊网络)
一、项目介绍 全国天气可视化分析系统主要功能模块包括系统首页、轮播图、公告消息、资源管理(天气资讯、资讯分类)系统用户(管理员、普通用户)模块管理(天气信息、降水数据),采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,系统采用java语言、Hadoop框架、MVC模式、MySQL数据库,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对全国天气可视化分析系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现全国天气可视化分析系统和部署运行使用它。
关键词:天气信息;Hadoop技术;Mysql数据库
二、开发环境 Hadoop后端+HTML前端+大数据屏——>Hadoop、HTML、大数据屏
————————————————
三、功能介绍 3.2功能需求分析 全国天气可视化分析系统的功能主要分为前台用户根据自己的需求进行注册登录,浏览天气信息并对选中的天气进行搜索操作。后台系统管理员因职责的不同,管理员主要对注册用户,天气信息、降水数据进行管理。
系统用例图如下所示。
图3-1 系统用例图
3.2.1前台用户功能 前台用户可分为未注册用户需求和以注册用户需求。
未注册用户的功能如下:
注册账号:用户填写个人信息,并验证手机号码。
浏览天气资讯:用户可以浏览天气资讯信息详情。
已注册用户的功能如下:
登录:根据账号密码进行登录操作。
维护个人信息:用户因个人信息的变更可以随时修改自己注册信息。
浏览天气资讯:查看天气资讯信息以及可以进行点赞评论等。
天气信息:选中某个城市、日期可查看其天气信息。
降水数据:可以查看某个城市、平均气温、累积降水信息。
3.2.2后台管理员功能 管理员功能如下:
修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。
天气数据管理:对天气数据信息进行维护,添加、删除、修改信息。
降水数据管理:对降水数据信息进行维护,添加、删除、修改信息。
用户管理:可以查看注册用户的信息,并对其进行管理。
资讯管理:可以发布系统最新资讯。
综上所述,系统功能结构图如下图所示。
图4-2 系统功能结构图
四、核心代码 部分代码:
# -*- coding: utf-8 -*- import os import importlib services_abspath_arr = [] services_arr = [] services_dir_ = os.getcwd() + "\\hadoop" # 遍历模块文件(绝对路径)加到services_abspath_arr数组 # 选择服务函数 def service_hadoop_select(str): for service_item in services_arr: if str.capitalize() == service_item.__class__.__name__: return service_item def foreach_file(path_name): for root, dirs, files in os.
欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是《Python》系列文章,每篇文章将以博主角度的理解展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录 前言编辑器编码输出文本知识点编码输出函数 文章推荐 前言 基于上篇文章内容,在使用python代码时,如果是初学者,很容易出现编码问题报错,以及输出文本的报错。
Python编辑器默认读取的是Unicode编码,对于Python而言,print输出方法,所有内容都应该是字符串,否则报错。
编辑器编码 python文件由于不是utf-8编码,导致运行起来时直接报错提示
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xb5 in position 0: invalid start byte
SyntaxError:(unicode错误)“utf-8”编解码器无法解码位置0中的字节0xb5:无效的起始字节
可以通过下面方式把文件转为UTF-8编码,然后运行就可以显示了
需要确保Python脚本文件以UTF-8编码保存,并且终端或编辑器也能够正确地处理Unicode字符。
使用的是Python交互式解释器,通常情况下是支持Unicode字符的,只需确保你的终端也支持UTF-8编码。
如果使用的是脚本文件,可以在文件开头添加一行指定编码方式的注释:
# -*- coding: utf-8 -*- 这样做会告诉Python解释器使用UTF-8编码读取该文件。使用的是编辑器,确保你的编辑器也以UTF-8编码打开文件。
输出文本 报错提示如下
can only concatenate str (not “int”) to str
尝试将一个字符串和一个整数进行拼接,但Python不允许直接将字符串和整数进行加法操作
正确写法,直接将整型转为字符串即可
# -*- coding: utf-8 -*- # 获取字符串的哈希值 print("第一个:"+str(hash("hello"))) # 获取整数的哈希值 print("第二个:"+str(hash(42))) # 获取列表的哈希值(列表是不可哈希的,会抛出异常) try: print("第三个:"+str(hash([1, 2, 3]))) except TypeError as e: print("
承接Qt/C++软件开发项目,高质量交付,灵活沟通,长期维护支持。需求所寻,技术正适,共创完美,欢迎私信联系! 一、ODBC 数据源配置 打开ODBC数据源管理器:
在Windows搜索栏中键入“ODBC数据源”并选择“ODBC数据源(64位)”(如果你的系统是64位的)。如果你的系统是32位的,你可以选择“ODBC数据源(32位)”。或者,你可以在控制面板中找到ODBC数据源管理器。 添加数据源:
在ODBC数据源管理器中,选择“用户DSN/系统DSN”选项卡。点击“添加”按钮,在弹出的对话框中选择要配置的数据库类型(如SQLite、MySQL等)。根据数据库类型和具体的配置要求填写相应的信息,例如数据库文件路径、服务器名称、用户名、密码等。完成配置后,点击“确定”按钮。 二、使用ODBC的优点和缺点 优点:
平台独立性:ODBC提供了一种标准的API,使得应用程序可以在不同的操作系统上连接和操作数据库,从而实现了一定程度的平台独立性。
数据库透明性:通过ODBC,应用程序可以通过相同的API连接到不同类型的数据库,无论是关系型数据库还是非关系型数据库,这增加了灵活性和可扩展性。
易于维护:ODBC提供了一种标准的接口,使得数据库连接和操作可以在不修改应用程序代码的情况下进行配置和更改。这使得维护和管理数据库连接变得更加简单。
大量的驱动支持:由于ODBC已经成为了一种行业标准,几乎所有的主流数据库供应商都提供了ODBC驱动程序,因此你可以很容易地连接到各种不同类型的数据库。
缺点:
性能损失:与直接使用特定数据库的本地API相比,通过ODBC连接数据库可能会带来一定的性能损失,因为它涉及到额外的数据转换和通信开销。
功能限制:由于ODBC只提供了一种标准的API,因此某些特定于数据库引擎的功能可能无法直接通过ODBC访问,你可能需要使用特定数据库的本地API来实现这些功能。
连接和配置复杂性:配置和管理ODBC数据源可能需要一些额外的工作,特别是对于一些复杂的数据库配置,可能需要更多的时间和精力。
平台依赖性:虽然ODBC提供了一定程度的平台独立性,但在不同的操作系统上可能会有一些细微的差异,这可能需要在跨平台应用程序中进行一些额外的处理。
三、实现操作代码 创建了一个名为DatabaseManager的类,其中分为通过ODBC数据源模式和直接ODBC访问数据库模式,注意代码注释内容。
#ifndef DATABASEMANAGER_H #define DATABASEMANAGER_H #include <QObject> #include <QSqlDatabase> #include <QSqlQuery> typedef struct{ QString username; QString password; QString databaseName; QString serverName; QString driverName; }T_Database; /* * 数据库操作管理类 */ class DatabaseManager : public QObject { Q_OBJECT public: DatabaseManager(QObject *parent = nullptr); ~DatabaseManager(); // 打开数据库 bool openDB(const T_Database &data); // 关闭数据库 void closeDB(); // 数据库是否有效 bool isDatabaseValid(); // 判断字段值是否存在 bool isExistsValue(const QString& tableName, const QString& condition); // 创建表 bool createTable(const QString& createSql); // 插入数据 bool insertData(const QString& tableName, const QMap<QString, QVariant>& data); // 删除数据 bool deleteData(const QString& tableName, const QString& condition); // 更新数据 bool updateData(const QString& tableName, const QString& condition, const QMap<QString, QVariant>& data); // 查询数据 bool queryData(const QString& tableName, const QString& condition, QList<QMap<QString, QVariant>>& data); private: QSqlDatabase m_db; }; #endif // DATABASEMANAGER_H #include "
1首先先创建一个空的activity项目,接着设置自己的项目名称,勾选上lacuncher
创建成功后点开manifests把刚刚创建的文件名下面的<intent-filter>这一行全部删除
然后点开res,复制一张图片,右键drawable点击粘贴,这里放的是图片资源,用于放置登录头像
然后点开layout文件,开始编写我们的项目,右上角有三个选项分别为,展示代码,代码加效果,效果,这里我们选择代码加图片方便查看,当前为代码加效果,再点击一次还可以切换成上下。
然后我们将原来的androidx这一串更改为RelativeLayout
设置距离边界的大小以及颜色
然后我们设置用户头像,并居中,编写如下代码,id是随便取的,但是需要记住,等下调节页面布局的时候需要用到
设计用户名和密码表格,这里重叠了效果不太好
最后加入一个登录按钮,然后根据id调节一下位置
最后运行一下
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingVertical="15dp" android:background="#e3e3e3" tools:context=".SecondActivity"> <ImageButton android:layout_width="70dp" android:layout_height="70dp" android:layout_centerHorizontal="true" android:src="@drawable/img" android:id="@+id/ivimg" android:layout_marginTop="45dp"/> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_below="@+id/ivimg" android:id="@+id/table" android:background="#fff" android:layout_centerHorizontal="true" android:stretchColumns="1" > <TableRow android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/row1" > <TextView android:id="@+id/tvUser" android:layout_width="60dp" android:layout_height="wrap_content" android:textSize="18sp" android:text="用户"/> <EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/edUser"/> </TableRow> <TableRow android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/row2" > <TextView android:id="@+id/tvPassword" android:layout_width="60dp" android:layout_height="wrap_content" android:textSize="18sp" android:text="密码"/> <EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="
最近升级到最新版本Chrome后发现页面居然显示错乱,是在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家.
Google Chrome Windows version 32-bit VersionSizeDate104.0.5112.10279.68 MB2022-05-30103.0.5060.5379.68 MB2022-05-30102.0.5005.6379.68 MB2022-05-3090.0.4430.7279.68 MB2022-05-3086.0.4240.7579.68 MB2022-05-3084.0.4147.13579.68 MB2022-05-3083.0.4103.11679.68 MB2022-05-3081.0.4044.9279.68 MB2022-05-3080.0.3987.14979.68 MB2022-05-3079.0.3945.8879.68 MB2022-05-3078.0.3904.9779.68 MB2022-05-3076.0.3809.10079.68 MB2022-05-3075.0.3770.8079.68 MB2022-05-3071.0.3578.8079.68 MB2022-05-3070.0.3538.7779.68 MB2022-05-3069.0.3497.9279.68 MB2022-05-3068.0.3440.8449.36 MB2020-04-2967.0.3396.7948.57 MB2020-04-2966.0.3359.18148.15 MB2020-04-2965.0.3325.18147.92 MB2020-04-2964.0.3282.14047.5 MB2020-04-2963.0.3239.10846.14 MB2020-04-2962.0.3202.751.08 MB2020-04-2961.0.3163.7944.35 MB2020-04-2960.0.3112.7842.8 MB2020-04-2959.0.3071.8643.67 MB2020-04-2958.0.3029.9641.59 MB2020-04-2957.0.2987.13341.03 MB2020-04-2956.0.2924.8742.15 MB2020-04-2955.0.2883.7542.53 MB2020-04-2954.0.2840.7142.06 MB2020-04-2953.0.2785.11644.7 MB2020-04-2952.0.2743.11642 MB2020-04-2951.0.2704.8441.86 MB2020-04-2950.0.2661.7541.52 MB2020-04-2949.0.2623.7541.1 MB2020-04-2948.0.2564.9740.76 MB2020-04-29 64-bit VersionSizeDate104.0.5112.10282.76 MB2022-05-30103.0.5060.5382.76 MB2022-05-30102.0.5005.6382.76 MB2022-05-3090.0.4430.7282.76 MB2022-05-3086.0.4240.7582.76 MB2022-05-3084.0.4147.13582.76 MB2022-05-3083.0.4103.11682.76 MB2022-05-3081.0.4044.9282.76 MB2022-05-3080.0.3987.14982.76 MB2022-05-3079.0.3945.8882.76 MB2022-05-3078.0.3904.9782.76 MB2022-05-3076.0.3809.10082.76 MB2022-05-3075.0.3770.8082.76 MB2022-05-3071.0.3578.8082.76 MB2022-05-3070.0.3538.7782.76 MB2022-05-3069.0.3497.9282.76 MB2022-05-3068.0.3440.8449.84 MB2020-04-2967.0.3396.7949.03 MB2020-04-2965.0.3325.18148.27 MB2020-04-2964.0.3282.14047.95 MB2020-04-2963.0.3239.10850.09 MB2020-04-2962.
欢迎来到我的博客,代码的世界里,每一行都是一个故事 深入解析Kafka中的Lag现象 前言Lag的定义与影响因素影响 Lag 的因素: 生产者与消费者之间的时差影响因素: 优化降低 Lag 的风险 前言 在分布式系统的交响曲中,Lag如同一场时光追逐的舞蹈,影响着消息的流转速度。本文将带您踏上这场时光追溯之旅,揭秘Kafka中Lag现象的前世今生。让我们一同探索Lag的起源,了解它在分布式系统中的舞台表演。
Lag的定义与影响因素 在 Kafka 中,“Lag” 表示消费者相对于生产者的偏移量(位移)之差。它表示了消费者组在某一时刻消费到的消息在整个分区中的相对位置。Lag 的准确定义取决于消费者组的不同状态:
消费者组 Lag(Consumer Group Lag): 衡量了一个消费者组中所有消费者的偏移量之差。它是所有分区 Lag 的总和。
分区 Lag(Partition Lag): 衡量了某个特定分区中最慢的消费者相对于最快的消费者的偏移量之差。一个分区可能被多个消费者订阅,每个消费者独立地维护自己的偏移量。
影响 Lag 的因素: 消费者组的消费速度: 如果消费者组的消费速度跟不上生产者的生产速度,会导致消费者组的 Lag 增大。这可能是由于消费者数量不足、消费者处理消息的速度慢等原因引起的。
分区再分配(Rebalancing): 当消费者加入或离开消费者组,或者分区的分配发生变化时,可能会触发分区再分配。在这个过程中,某些消费者可能需要重新开始消费,导致 Lag 的增加。
消费者的启停: 如果消费者在处理消息的过程中停止或重新启动,它可能会丢失一些消息,导致 Lag 增加。
消费者处理消息的速度: 消费者处理消息的速度是影响 Lag 的关键因素。如果消费者处理消息的速度较慢,那么 Lag 就会增加。
生产者的生产速度: 如果生产者的生产速度大于消费者的消费速度,那么 Lag 就会增加。这通常表示生产者生产消息的速度超过了消费者的处理能力。
分区数量: 如果一个主题有很多分区,而消费者组的消费者数量较少,可能会导致某些消费者需要处理多个分区,从而影响消费速度,增加 Lag。
Lag 的监控和管理对于保持系统的稳定性和实时性至关重要。通过监控 Lag,可以及时发现潜在的问题,并根据具体的情况采取相应的调整和优化策略。
生产者与消费者之间的时差 生产者产生消息到消费者消费的时间延迟通常被称为“端到端延迟”或“生产者到消费者延迟”。这个延迟包括了多个环节的时间,主要有以下几个方面的影响和表现:
生产者发送延迟: 生产者发送消息到 Kafka 集群的时间。这包括消息在生产者内部的序列化、网络传输等时间。如果生产者发送速度很慢,会导致生产者端的延迟增加。
Kafka 集群处理延迟: Kafka 集群接收消息并将其写入到分区中的时间。这包括消息在分区中的持久化、日志索引等处理时间。如果 Kafka 集群的处理速度较慢,会导致消息在 Kafka 中的延迟增加。
1. 下载 scrcpy 建议 windows10 用户 点击链接下载 不然可能会提示缺少部分 dll https://github.com/Genymobile/scrcpy/releases/download/v2.3.1/scrcpy-win32-v2.3.1.ziphttps://github.com/Genymobile/scrcpy/releases/download/v2.3.1/scrcpy-win32-v2.3.1.zip
windows 用户可以用 winget install scrcpy 下载 macos 可以用 brew install scrcpy 下载 2. 以windows为例 根据链接下载的可以直接 把 这个目录配置到环境变量里 方便adb链接 adb 的安装 和环境变量可以参考我之前的这篇文章
记得手机要打开开发者调试和无线调试
adb 无线连接 操作Android设备-CSDN博客
3. adb 链接好以后 下图就是成功的意思 4. 双击 scrcpy.exe 如果配置环境变量的话 可以在cmd里运行 scrcpy 然后就可以看到手机桌面了 可以实时操作 声音也会传递到电脑上
标题执行以下查询来查看所有正在进行的锁定事务和持有的锁定对象: SELECT pid, relname, transactionid, mode, granted FROM pg_locks JOIN pg_stat_user_tables ON pg_locks.relation = pg_stat_user_tables.relid 返回一个结果集,其中包含了正在进行的锁定事务的进程 ID(pid)、锁定的表名(relname)、事务 ID(transactionid)、锁定模式(mode)和是否已授予(granted)。
标题解锁的语句: select pg_terminate_backend(pid)
近日在k8s上部署了一个ES8.12.0的集群,在部署过程中,发现无论是官方、还是网上的文章,都没有一站式能搞定的(官网文档非常碎片化,出了问题只能去官网的问题反馈去查,网上的其他文章可能是版本的问题与最新版ES不太适配),因此把我的部署过程整理分享出来,希望能帮到需要的同学。
--------------------- 原创不易,如果大家看完觉得有帮助,希望能多多点赞关注,感谢各位的支持 ----------------------
镜像 官网的镜像可以直接使用,docker.elastic.co/elasticsearch/elasticsearch:8.12.0
部署坑点 最新版ES默认启用了SSL安全性,镜像默认的启动命令会自动生成证书,不过只能让服务单点启动成起来,想做个集群或者配置kibana都不行,纯粹就是个摆设。需要重新生成整套的证书,官网还没有一套完整的文档都是东一块,西一块;
ES代码中针对部署状态做了强安全性的校验导致k8s部署时要处理更多细节如:
配置文件不允许做软链(部署k8s一般都把配置文件外挂成comfigmap便于维护,挂载configmap后,在通过软连方式替换掉原有的配置文件可以实现配置文件实时更新),启动会报异常‘
$ES_HOME目录(默认是/usr/share/elasticsearch)极其子目录的owner必须是elasticsearch:elasticsearch,证书的目录可以例外,否则也会启动报异常
安全证书需要适配节点IP,因此需要K8S容器绑定固定IP,使用Calico网络组件最新版3.27.0,支持在pod的annotations中添加声明 “cni.projectcalico.org/ipAddrs”: “[“xx.xx.xx.xx”]” 来绑定固定ip(一般不建议绑定,因为绑定后,容器更新重启需要等原容器销毁后新容器才能启动,平滑重启,滚动更新相当于废了)
原始镜像没有优化系统内核参数,需要在容器初始化时通过root权限处理,而这就导致镜像默认启动命令不会执行自动初始化,也不会再生成默认证书,启动一定失败!!因为ES代码里面有校验如果启动脚本的进程pid不是1,就不会自动做初始化,必须手动处理(写到这里我想骂人。。。)
综上所述,想要通过官网镜像部署ES集群,就不能使用默认自动初始化,而这就导致启动必然失败,首次启动只能通过在command中使用 sleep 3600; 把容器挂住,然后在到容器中通过elasticsearch-certuti生成全套证书后,再配置好证书挂载目录后,才能正常启动。
配置文件可以通过cat 命令在启动命令执行前将挂载的自定义配置文件内容替换到默认配置文件中
部署过程 部署2个实例的集群,1主1从
准备主节点 k8s部署yml文件
PVC声明,这里我是用的是local-path-provisioner本地存储,可以根据自己的环境替换
--- #声明存储使用 #local存储 storage_class:local-path-provisioner(rancher) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: es-010-pvc namespace: es spec: accessModes: - ReadWriteOnce #本地存储只支持ReadWriteOnce storageClassName: local-path #local-path: 容器删除,存储local-path动态删除,local-path-retain: 容器删除,存储local-path保留,local-path|local-path-retain为手动安装的storageclass resources: requests: storage: 50Gi #声明最少要使用存储空间,不足则无法创建 Gi=G Mi=M #persistentVolumeReclaimPolicy: Delete # PVC 回收策略 Retain 保留| Delete 清除 | PV: local-path-provisioner(rancher) 不支持设置该属性 暴露ES集群service, service 我一般是采用固定ip,方便给nginx做upsream
1. 风格参考(Style References)功能 什么是风格参考? 风格参考功能允许用户引用其他图片的风格,或在多张图片中保持一致的风格。它类似于图片提示,但专注于风格的模仿。
如何使用风格参考? 在提示语之后输入--sref URL,其中URL是图片的链接地址。若要增强风格的影响力,可以通过设置风格权重(--sw)接近1000来实现。若要减弱风格的影响,可将权重设定接近于--sw 0(默认值为100)。可以添加多个风格参考。 2. 角色参考(Character Reference)功能 什么是角色参考? 角色参考功能类似于风格参考,不过是用来匹配特定角色图片的特征而非风格。
如何使用角色参考? 在提示语之后输入--cref URL,其中URL是角色图片的链接地址。可以使用--cw来修改参考强度,范围从100到0。默认强度为100(--cw 100),此时会使用人物的脸部、发型和服装。在强度0(--cw 0)时,仅关注脸部(适合变换服装或发型)。 角色参考功能最适合用于Midjourney生成的角色图片。它不适用于真实人物/照片,并可能导致形变。
进阶功能 可以使用多个URL来混合多个图像/角色的信息,如:--cref URL1 URL2。可以使用多个URL来混合多个图像/角色的信息,如:--sref URL1 URL2。在网页alpha版上,可以将图片拖动或粘贴到想象栏中,它现在有三个图标。选择这些选项之一将设置图片作为图片提示、风格参考或角色参考。按住Shift并选择一个选项可将图片用于多个类别。 请注意,由于MJ V6目前处于alpha测试阶段,这些功能可能会突然变更。但是,官方beta测试即将推出。
进阶设置 风格参考的高级用法 使用多个URL:可以同时引用多个图片作为风格参考,方法是在命令中输入多个URL,例如:--sref urlA urlB urlC。设置风格相对权重:通过在URL后加::和数字来设定每个风格的相对权重。例如,--sref urlA::2 urlB::3 urlC::5,这表示urlA的权重为2,urlB的权重为3,urlC的权重为5。设定整体风格强度:通过--sw命令来设定风格化的总体强度。例如,--sw 100(其中100是默认值,0代表关闭风格化,1000是最大限度)。 使用注意 当你使用普通的图片提示时,它们必须放在--sref之前。例如:/imagine cat ninja ImagePrompt1 ImagePrompt2 --sref stylePrompt1 stylePrompt2。--cref 同上
/etc/my.cnf 是MySQL数据库的主配置文件,用于定义服务器行为的各种参数。下面是一个配置文件的示例及其详解:
[mysqld]
# 服务器的唯一编号,默认是1。
server-id = 1
# 服务器的地址和端口,默认是127.0.0.1:3306。
bind-address = 127.0.0.1
port = 3306
# 数据目录,存储数据库表文件的位置。
datadir = /var/lib/mysql
# 临时文件目录,用于存储排序数据等。
tmpdir = /tmp
# 启用/禁用MySQL的查询缓存。
query_cache_size = 0
query_cache_type = 0
# 设置最大连接数,默认是151。
max_connections = 151
# 设置每个连接的默认字符集。
character-set-server = utf8
# 创建新表时将使用的默认存储引擎。
default-storage-engine = INNODB
# 设置InnoDB的数据文件和日志文件的大小。
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_file_size = 5M
innodb_log_files_in_group = 2
# 启用/禁用InnoDB的redo日志检查。
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
[mysqld_safe]