文章目录 1 二分查找2 冒泡排序3 堆排序4 插入排序5 快速排序6 选择排序7 希尔排序 1 二分查找 定义两个变量left和right,分别表示数组的左边界和右边界,初始值分别为0和len - 1,其中len是数组的长度。计算数组的中间位置mid,公式为(left + right) / 2,并判断数组中该位置的元素num[mid]是否等于目标值target。如果相等,说明找到了目标值,返回mid作为结果。如果不相等,比较num[mid]和target的大小,如果num[mid] < target,说明目标值在数组的右半部分,因此将左边界更新为mid + 1;如果num[mid] > target,说明目标值在数组的左半部分,因此将右边界更新为mid - 1。重复步骤2到4,直到左边界大于右边界,这时说明数组中不存在目标值,返回-1作为结果。 二分查找算法的优点是查找速度快,时间复杂度为 O ( l o g n ) O(logn) O(logn),其中n是数组的长度。缺点是要求数组必须是有序的,并且对于动态变化的数组不适用。
int BinarySearch(int num[],int target,int len) { int left = 0, right = len - 1; while(left <= right) { int mid = (left + right) / 2; if(num[mid]==target) { return mid; } else if(num[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } 2 冒泡排序 定义一个变量i,表示数组中未排序的部分的最后一个元素的位置,初始值为length - 1,其中length是数组的长度。从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素num[j]大于后一个元素num[j+1],则交换它们的位置,这样可以将较大的元素向后移动。重复步骤2,直到遍历到数组中未排序部分的最后一个元素,这时可以确定该元素是数组中最大的元素,并将其排在正确的位置。将变量i减一,表示数组中未排序部分的长度减少了一个元素,然后回到步骤2,继续进行比较和交换。重复步骤2到4,直到变量i小于等于1,这时说明数组中所有的元素都已经排好序,算法结束。 冒泡排序算法的优点是简单易懂,不需要额外的空间。缺点是效率低,时间复杂度为 O ( n 2 ) O(n^2) O(n2),其中n是数组的长度。
示例源码
lishuoboy-markdown
CSDN
目录
介绍
0.目录[toc]
1.标题(#)
2.段落(空行)
3.换行(2个空格或\)
4.文字格式(*)
5.引用(>)
6.列表(1. + - * -[x])
7.代码(` 或 4个空格)
8.分割线
9.链接
编辑
10.图片
11. 转义字符
12.内嵌html
13.表格
14.围栏代码块
15.脚注
16.Emoji表情
17.自动网址链接
18.注释
介绍 对于程序员,经常用github、码云等,对于md很常见了。
Markdown 是一种轻量级标记语言,。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的HTML文档。
由于 Markdown 的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。 如 GitHub、Reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、简书等,甚至还能被使用来撰写电子书。
0.目录[toc] 会自动根据内容的标题生成目录
1.标题(#) 2.段落(空行) 3.换行(2个空格或\) 4.文字格式(*) 5.引用(>) 6.列表(1. + - * -[x]) 7.代码(` 或 4个空格) 8.分割线 9.链接 10.图片 11. 转义字符 12.内嵌html 13.表格 14.围栏代码块 15.
描述 使用时 安装 npm install xe-utils vxe-table
引入 import Vue from 'vue'
import 'xe-utils'
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
vxe-table是一个基于 vue 的 PC 端表格组件,
支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
报错 因为备份项目之前习惯先把依赖删掉,再备份。
今天按照往常一样安装依赖、运行后报了如下错误
解决 百度了一下,无奈没找着(希望写完之后,百度能出现答案吧),只好上 Github 上碰碰运气,刚好在一个小时之前(后面截的图),有大佬提交了答案。
运气真的好。。。
按需加载,运行一直报错 · Issue #2130 · x-extends/vxe-table · GitHub
按照提示,我把版本前的 ^ 符号删掉了,又像往常一样,删除依赖、安装依赖、运行项目。
浪费了两个小时,终于把项目跑起来了。
计算机主机包括:中央处理器+主存储器。
实时操作系统具有:快速响应能力。
数据库设计过程包括需求分析、概念设计、逻辑设计、物理设计。
转义字符:'\a'表示响铃, '\b'表示退格, '\r'表示回车不换行。
判断字符串是否相等,使用字符串比较函数strcmp()。
sizeof()函数可以返回一个数据类型或变量所占用的字节数。一个指针变量占用4个字节长度,任何基类型的指针变量指针占用4个字节。
把一个指针变量的值赋给另一个指针变量,但一定要确保这两个指针变量的基类是相同的。
字符数组只能进行初始化,不能直接对字符数组赋值。
C语言中,系统将未经赋初值的全局变量默认为0。
^是进行异或运算,例如:10^3表示先把10和3换算成二进制在进行异或。(相同为0,不同为1)
使用结构体指针对结构体成员进行访问时,形式为结构指针名->结构成员名,或者(*结构指针名).结构成员名。
函数rewind(fp)作用是使文件读写指针指向文件开始位置。
计算机完成一条指令所花费的时间成为一个:指令周期。
顺序程序具有顺序性,封闭性,和可在现性的特点。
对数据进行压缩存储会降低算法的空间复杂度。
结构化程序设计强调:程序的易读性
杀毒软件不属于系统软件。 操作系统、编译程序、数据库管理系统属于系统软件。
在数据库管理技术发展的三个阶段中,没有专门的对数据进行管理的是:人工管理阶段。
VC平台上规定int占4个字节,double占8个字节,sizeof()是用来计算某个类型或对象所占字节的操作数。
C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式。
不能将一个整数直接复制给指针变量作为地址。 函数的返回值可以是地址,即指针。 函数调用中形参值的变化不会传递给实参。 当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
scanf("%s",s)表示输入一个字符串,遇到空格会结束输入。所以当字符串内带有空格时,不能使用此语句。
s[i]!=0等价于s[i]!='\0'------有时候要考虑这种情况,而不是单独的零0
static声明静态局部变量:函数调用结束后,其占用的存储单元不释放,在下一次函数调用时,该变量保留上一次函数调用结束时的值。
auto和register在C语言中,只有在使用时才占用内存单元的变量。
注意结构体的传值调用与地址调用。
操作数的地址隐含在指令的操作码或者某个寄存器的寻址方式是:隐含寻址。
向量是顺序存储的线性结构
循环队列是队列的存储机构;具有两个指针域的链表不一定是线性结构;具有两个指针域的链表不一定是非线性结构。
集成测试是为了发现概要设计的错误。
软件设计准则:提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;降低模块之间接口的复杂程度;设计但入口和但出口的模块,不要使模块间出现内容耦合;模块功能应该可以预测。
数据库的数据独立性是通过数据库系统的二级映射实现的。数据独立性包括数据的物理独立性和数据的逻辑独立性两级。
当文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失。
宏替换没有数据类型限制。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。宏一般用大写,但不是必须用大写。宏定义写在函数花括号外边,作用域为其后的程序,通常在文件的最开头。
(^)异或:相同为0,不同为1
树的结点问题,
二叉树的前序、中序(左中右)、后序遍历(左右中)
如果有错,还请大佬斧正!!!
为何要安装PHPStudy(小皮)?
很多计算机相关专业的小伙伴们,大学四年学完了,竟然连环境都搭建不来。其中Mysql数据库就成了其中一只庞大的拦路虎。而PHPStudy就恰好解决了这个问题。
PHPStudy它里面内置了多种mysql数据库的版本,我们可以随意切换,用户不需要去配置运行环境。
安装PHPStudy(小皮)V8.1最详细安装教程
1. 进入PhPstudy官网,下载地址Windows版phpstudy下载 - 小皮面板(phpstudy)点击立即下载
2. 选择系统选择下载,这里选择64位下载。注:目前大部分电脑都是64位的。
3. 下载的是压缩包文件,加压后打开文件夹右键管理员运行phpstudy_x64_8.1.1.3.exe
4. 点击自定义是默认选择D盘安装,直接点击立即安装,等待安装即可。
5. 点击安装完成后打开小皮软件,如图
6. 点击软件管理安装MySQL8.0.12,如图
7. 点击安装完成后打开小皮软件,需要那个数据库就启动那个数据库
如此便完美解决该问题。
如果也想与我沟通探讨,关注下面并发送消息即可。
前两天倒腾redis的有序集合时,自己发现了一个问题,redis的有序集合在score相同的情况 下是如何排序的?
通过谷歌搜索,发现了一些线索,在score相同的情况下,redis使用字典排序,不过不是太明白什么是字典排序,于是自己测试了一下,相信下面的截图就能回答这个问题了:
在score相同的情况下,redis使用字典排序,而所谓的字典排序其实就是“ABCDEFG”这样的排序,在首字母相同的情况下,redis会再比较后面的字母,还是按照字典排序(如截图所示,beigai和baijing的排列顺序)。
根据上图我们可以将价格格式化后设置为score,将时间戳和订单额格式化后合并为一个字段,保持所有订单的此字段格式相同,redis会通过字典自动排序用户交易。
《十四五数字经济发展规划》提出建立健全政务数据共享协调机制,加快数字身份统一认证和电子证照、电子签章、电子公文等互信互任,推进发票电子化改革,促进政务数据共享、流程优化和业务协同。在数字经济逐渐成形的背景下,推进数字政务进行数字化转型,数字身份承担着重要的任务。
1 身份与数字身份
1.1 身份
身份是一个人属于某一国家成员的法定身份的延伸,传统社会中的物理身份通常采用一系列的纸质材料来证明“我是我”。这些身份证明可以是证明法定身份的身份证,也可以是基于法定身份的延伸,如证明学历的毕业证等。
1.2 数字身份
随着互联网的出现和普及,身份有了另外一种表现形式,即数字身份。一般认为,数字身份的演进经历了三个阶段,分别是:中心化数字身份、联盟式数字身份、分布式数字身份。
(1)中心化数字身份:由单一的权威机构进行管理和控制的数字身份;
(2)联盟式数字身份:由多个权威机构或者联盟进行管理和控制的数字身份,用户的身份数据具备了一定程度的可移植性;
(3)分布式数字身份:由分布式基础设施改变应用厂商控制数字身份的模式,让用户控制和管理的数字身份,通过将数据所有权归还用户从根本上解决隐私问题。
从身份发展的全生命周期看,身份从诞生到使用包含四个阶段:注册、签发、认证和管理,以及三个参与方:身份所有方(用户)、身份提供方(签发机构)、身份依赖方(有身份验证需求)。
图1 身份全生命周期流程图
(1)注册:用户向身份所有方发起身份认证请求;
(2)签发:身份提供方接收到用户发起的身份认证请求,成功记录并承认用户身份,给用户签发可识别的身份标识;
(3)验证:身份所有方在信赖身份提供机构的依赖方使用身份时,通过技术手段,验证身份的真实性、有效性;
(4)管理:对数字身份的管理,包括但不限于:身份的存储、更新、撤销、授权等。
2传统数字身份
2.1 概述
传统数字身份的实现方式多以中心化和联盟式为主,从互联网业务看,用户的身份和数据已实现了数字化和网络化,互联网公司具备一整套成熟的身份管理系统,从加密信任验证角度看,每个中心化管理机构充当信任根,并可能联合多机构实现身份信任背书。
2.2 痛点
伴随着传统数字身份多年的发展,其暴露了诸多问题。
(1) 身份数据分散、重复认证、多地认证问题
传统数字身份通常由一个或多个权威机构或联盟管理和控制,导致身份认证系统各不相同,需要重复认证。例如,在金融场景下,同一公民去不同的银行开户需要分别进行KYC(Know Your Customer, KYC),用户体验繁琐,身份数据相互重叠,数据可能存在差异甚至冲突。身份体系重复建设,在浪费资源的同时,也存在诸多数据共享和使用上的障碍,不同身份系统形成“身份孤岛”,阻碍了数字身份的发展。
(2) 身份数据隐私与安全问题
传统数字身份中心化控制、中心化管理的模式,导致用户身份信息散落在权威机构或联盟的身份认证者手中,不排除某些机构在未经用户授权的情况下使用用户身份数据。其次,用户身份信息在各家企业的服务器上存储,不同的企业对数据安全的重视程度和措施强度不同,使得用户的数据泄漏。
(3) 中心化认证效率和容错问题
传统的公钥基础设施(Public Key Infrastructure, PKI)系统,数字证书是认证的核心,它由相对权威的证书颁发机构(Certificate Authority, CA)签发的,容易引发性能问题和安全问题。性能问题:中心化签发过程涉及证书的所有操作,任务繁重,可能成为性能短板拖累效率,如庞大的已撤销证书列表的有效分发。安全问题:单中心的结构容易使其成为攻击的目标,一旦上级CA被攻破,则与之相关联的下级CA也会受到牵连,容易引发连锁反应。同时,由于CA也有民间团体,因此无法完全保证每个CA的信用。
3 分布式数字身份
分布式数字身份(Decentralized Identifiers, DID),在万维网联盟(World Wide Web Consortium, W3C)发布的分布式数字身份规范中,将DID定义为一种新的全球唯一标识符。这种标识符不仅可以用于人,也可以用于万事万物,包括一辆车、一只动物,甚至是一台机器。下面我们从技术实现和场景描述两个方面介绍DID技术。
3.1 技术实现
3.1.1 概述
DID技术的核心构成要素包括三个:DID、DID文档、可验证凭证和可验证表达。
图2 分布式数字身份架构图
3.1.2 DID
DID标识是一个特定格式的字符串,用来代表一个实体的数字身份,这里的实体可以是人、机、物,DID标识的格式为:
图3 DID示例图
(1) Scheme:固定的表述方式,表示这个字符串是一个DID标识字符串。类似URL中的http,https,ftp等协议;
(2) DID Method:DID方法,标识整套DID标识采用的方法,该方法自定义完成后,注册到W3C,供同样采用W3C DID规范的分布式数字身份识别;
目录
编辑
前言
一、ElementUI简介
1. 什么是ElementUI
2. 使用ElementUI的优势
3. ElementUI的应用场景
二、登陆注册前端界面开发
1. 修改端口号
2. 下载ElementUI所需的js依赖
2.1 添加Element-UI模块
2.2 导入Element-UI模块
2.3 测试Element-UI是否能用
3.编写登陆与注册界面
3.1 创建组件
3.2 将创建好的组件配置到路由中
3.3 将App.vue的style覆盖
3.5页面展示效果
三、编写实现功能
1. IDEA中导入项目
2. 安装axio依赖及导入
3.UserController控制器
4.action.js配置
5. 设置点击事件实现前后端交互
Login.vue
Register.vue
页码效果演示
四、跨域问题
解决方案:
前言 在上一期的博客中我给各位老铁带来了有关Vue之vue-cli搭建SPA项目,上期的博客就是为本期博客做铺垫。今天我给老铁们带来有关ElementUI实现登陆及注册的案例实现模拟。
一、ElementUI简介 1. 什么是ElementUI ElementUI 是一个基于 Vue.js 的前端 UI 框架。它提供了丰富的可复用组件,使开发者可以快速构建现代化的 Web 应用程序界面。ElementUI 的组件库包括按钮、输入框、表格、弹窗、导航菜单等常用组件,同时还提供了一些高级组件如日期选择器、时间选择器、下拉框等。ElementUI 具有高度的定制性和扩展性,开发者可以根据自己的需求进行定制和拓展。它的简洁美观的设计风格得到了广大开发者的喜爱,广泛应用于各种 Web 项目中。
2. 使用ElementUI的优势 运用ElementUI的优势 优势说明丰富的组件库ElementUI 提供了大量常用的组件,例如按钮、表单、表格、弹窗等,这些组件可以快速构建出现代化的用户界面。响应式布局ElementUI 的组件都支持响应式布局,能够适应不同设备的屏幕尺寸。这使得开发者可以轻松地实现移动端和桌面端的适配。简洁美观的设计ElementUI 遵循现代化的设计原则,采用扁平化风格和细致的交互细节,使得用户界面看起来美观、舒适。定制性和扩展性ElementUI 提供了丰富的定制选项和插槽机制,开发者可以根据自己的需求对组件进行个性化定制,也可以扩展组件功能。良好的文档和社区支持ElementUI 提供了详细的文档和示例代码,开发者可以轻松上手并解决问题。此外,ElementUI 拥有活跃的社区,开发者可以在社区中获得帮助、分享经验。 3.
文章目录 前言二叉树定义类型二叉查找树(Binary Search Tree,BST)平衡二叉树红黑树(Red-Black Tree) 二叉树的遍历深度优先遍历(DFS)前序遍历(Preorder Traversal)中序遍历(Inorder Traversal)后序遍历(Postorder Traversal) 广度优先遍历(BFS,层次遍历) 二叉树遍历实现 Java 版二叉树的应用场景数据搜索和排序文件系统编译器 其它 前言 hello,大家好,我是 Lorin,这将是数据结构系列文章的开始,大家可以根据自己的实际情况选择合适章节食用。 二叉树 二叉树是计算机科学中最基本且重要的数据结构之一。它在许多算法和数据处理中都有广泛的应用,包括操作系统、编译器、数据库系统、图形学,甚至是人工智能。在本文中,我们将深入探讨二叉树的基本概念、特性以及在编程和算法中的应用。 定义 二叉树是由节点组成的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树具有以下特点: 每个节点最多有两个子节点,分别为左子节点和右子节点。 每个节点都有一个父节点,除了根节点。 二叉树的每个节点可以包含一些数据或值。 类型 二叉树有多种不同的类型,其中一些常见的类型包括(后面的文章我们会具体介绍): 二叉查找树(Binary Search Tree,BST) 在BST中,左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。这个性质使得BST非常适合进行快速的搜索和排序操作。 平衡二叉树 平衡二叉树是一种特殊的BST,它的左右子树高度差不超过1。这保证了树的高度相对较低,从而提高了搜索和插入操作的性能。 红黑树(Red-Black Tree) 红黑树是一种自平衡的BST,它通过一系列规则来保持树的平衡。它是一种高效的数据结构,用于实现诸如集合、映射等数据结构。 二叉树的遍历 深度优先遍历(DFS) 前序遍历(Preorder Traversal) 从根节点开始,按照根、左、右的顺序遍历树的节点。 中序遍历(Inorder Traversal) 从根节点开始,按照左、根、右的顺序遍历树的节点。在BST中,中序遍历会按升序访问所有节点。 后序遍历(Postorder Traversal) 从根节点开始,按照左、右、根的顺序遍历树的节点。 广度优先遍历(BFS,层次遍历) 从根节点开始,逐层遍历树的节点,先左后右。通常使用队列来实现。 二叉树遍历实现 Java 版 import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; class TreeNode { Integer val; TreeNode left, right; public TreeNode(Integer val) { this.val = val; } } public class Test2 { public static void main(String[] args) { // 构建二叉树 TreeNode root = new TreeNode(11); root.
文章目录 前言前期准备InnoDBMyISAM 结果集的差异InnoDB vs MyISAMcount(field)count(*)、count(1)、count(2)...count(n) 性能上的差异InnoDBcount(field)count(*)、count(1)、count(2)...count(n)无可用二级索引存在可用二级索引 MyISAMcount(field)count(*)、count(1)、count(2)...count(n)MyISAM 中的特殊优化 总结一些实践建议尽量不要使用 COUNT 函数不要使用 COUNT(field)和COUNT(n) 代替 count(*) 参考 前言 hello,大家好,我是 Lorin,不知道大家面试或者日常使用中是不是经常遇到这个问题,count(*)、count(1)、count(field) 执行结果集有什么区别?性能上有差异,今天我将从官网文档、实践、原理三个方面来分享三者的区别,废话不多说,开始发车: 前期准备 MySQL 版本:5.7.36-log SELECT VERSION(); 我们先建一个测试用的 student 表,并插入 10 条测试数据我们实际开发中使用主要是 InnoDB,偶尔使用 MyISAM 因此下面重点分析一下两种存储引擎的表现。 InnoDB CREATE TABLE `student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `age` int(2) DEFAULT NULL, `class_no` varchar(50) DEFAULT NULL COMMENT '班级号', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; INSERT INTO `test`.`student` (`name`, `age`, `class_no`) VALUES ('小米', 18, 2); INSERT INTO `test`.
一 概述 OpenCV将识别到的图片先行保存到本地将本地图片上传时,转化为Base64字符串,效果更好图片上传,服务器先要接收,然后再进行处理,耗时更多 二 将图片转换为Base64工具类 2.1 依赖Base64 Android\SDK\sources\android-28\android\util\Base64.java 在java项目上测试时,直接copy出来使用
2.2 图片 2.3 工具类(Base64Img2String) import java.io.File; import java.io.FileInputStream; public class Base64Img2String { public static String encodeFile(String filePath) { String imgStr = ""; try { File imageFile = new File(filePath); if (!imageFile.exists()) return imgStr; byte[] bytes = new byte[(int) imageFile.length()]; FileInputStream fileInputStream = new FileInputStream(imageFile); fileInputStream.read(bytes); imgStr = Base64.encodeToString(bytes, Base64.DEFAULT); //imgStr = "data:image/*;charset=utf-8;base64," + imgStr; } catch (Exception e) { return imgStr; } return imgStr; } } 2.
(记录学习第9天)
SpinBox是一个整数数字选择控件。
默认情况下,SpinBox控件的取值范围为0到99,步长值为1
任务目标:
当单击数字选择控件的上下箭头时,在label控件中实时显示数字并选择控件中的值,效果如图所示:
步骤:分别拖入三个控件
完整代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.spinBox = QtWidgets.QSpinBox(self.centralwidget) self.spinBox.setGeometry(QtCore.QRect(330, 190, 131, 41)) self.spinBox.setObjectName("spinBox") self.spinBox.setMinimum(0)#设置最小值 self.spinBox.setMaximum(10)#设置最大值 self.spinBox.setSingleStep(1)3设置步长 self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(290, 250, 171, 21)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(460, 250, 72, 15)) self.label_2.setObjectName("label_2") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 29)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.spinBox.valueChanged.connect(self.getvalue)#需要手动加入的语句 QtCore.
一、问题原因 报这个错是因为 当前浏览器的版本与 chromedriver.exe的版本不一致。
这个时候你需要先知道自己当前浏览器的版本
二、 找到对应的chromedriver 正常的话,应该去这个里面去找:https://chromedriver.storage.googleapis.com/index.html,可是现在这里面列出来最新版本的Chromedriver只对应到了 Chrome 114,虽然能用到115上,但是会有警告
这个是115.0.5790.102版本的chromedriver
https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/115.0.5790.102/win32/chromedriver-win32.zip
这个网址里面对应了最新版本的Chrome 116及以后,有需要的可以去看下https://googlechromelabs.github.io/chrome-for-testing/#stable
三. 安装ChromeDriver 其实不叫安装,就把刚刚下载的压缩包chromedriver-win32.zip解压存放在任意一个文件夹,
我是放在python文件夹
解压把 chromedriver.exe 放到python37 文件夹下
然后把这个文件夹地址添加到环境变量Path里即可,注意,直接复制路径后,要在最后面再加一个\,不然还是找不到这个chromedriver
然后win+r,输入cmd,再输入chromedriver验证成功。
在pycharm运行一下下面的代码
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('https://www.baidu.com') sleep(2) # driver. Quit() 部分文章内容参考安装chromedriver 115,对应chrome版本115(经检验,116也可以使用)_孟孟单单的博客-CSDN博客
1.查询自己服务器系统版本 查看CentOS操作系统版本
cat /etc/redhat-release
系统位数查看:
getconf LONG_BIT
或者:uname -m
2.下载JDK安装包 下载地址:JDK官网下载
3.创建jdk目录,将下载安装包上传至此目录 新建一个名为jdk的目录用来存放安装包:mkdir /jdk
4.解压安装包 切换到安装包所在目录,使用tar -zxvf+包名解压即可
[root@ecs-lyzhcs-0071 ~]# cd /jdk [root@ecs-lyzhcs-0071 jdk]# ls jdk-8u212-linux-x64.tar.gz [root@ecs-lyzhcs-0071 jdk]# tar -zxvf jdk-8u212-linux-x64.tar.gz [root@ecs-lyzhcs-0071 jdk]# ls jdk1.8.0_212 jdk-8u212-linux-x64.tar.gz 5.安装JDK 我们新建一个文件用来存放jkd的安装路径,不建议安装在当前目录,我们可以放在:/usr/java中
[root@ecs-lyzhcs-0071 jdk]# mkdir /usr/java 将上一步解压的jdk1.8.0_212里的数据拷贝至/usr/java目录下 [root@ecs-lyzhcs-0071 jdk]# mv jdk1.8.0_212/ /usr/java/ [root@ecs-lyzhcs-0071 jdk]# cd /usr/java/ [root@ecs-lyzhcs-0071 java]# ls jdk1.8.0_212 6.配置环境变量 vi /etc/profile 在末尾添加以下内容
【注:下面5条内容建议逐条复制,根据实际情况进行内容的调整,尤其jdk的版本】
#jdk环境变量配置 export JAVA_HOME=/usr/java/jdk1.8.0_212 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin export PATH=$PATH:${JAVA_PATH} 保存完成之后,使用命令source /etc/profile让profile文件立即生效
1、接口请求封装http.js /** * GET请求封装 */ function get(url, data = {}) { var contentType = 'application/x-www-form-urlencoded'; return request(url, data, 'GET', contentType) } /** * POST请求封装 */ function post(url, data = {}) { var contentType = 'application/json'; return request(url, data, 'POST', contentType) } /** * PUT请求封装 */ function put(url, data = {}) { var contentType = 'application/json'; return request(url, data, 'PUT', contentType) } /** * DELETE请求封装 */ function del(url, data = {}) { var contentType = 'application/json'; return request(url, data, 'DELETE', contentType) } /** * 微信的request */ function request(url, data = {}, method, contentType) { return new Promise(function(resolve, reject) { wx.
需求:页面指定区域内的内容循环滚动,但是内容形式、高度都不固定,是接口从编辑器提取出来的内容。
代码:
<div id="container5"> <div class="content" id="f12red1"> 自2023年9月20日24时起,国内汽、<br>柴油价格(标准品,下同)每吨分别提高70元。<br> 自2023年9月21日凌晨起,<br>全国加油站统一上调零售价格,<br>调价金额为:汽柴油、分别提高385元和370元,<br>从全国平均来看。<br> 92#汽油 上调 0.30元/升<br> 95号汽油 上调 0.32元/升<br> 0#柴油 上调 0.31元/升<br> 按照此上调幅度计算,<br>加满一箱容量在50L的92号汽油,<br>车主可以要多花15元左右。<br> 国家通知:<br>根据近期国际市场油价变化情况,<br>按照现行成品油价格形成机制,<br>自2023年9月20日24时起,<br>国内汽、柴油价格(标准品,下同)每吨分别提高385元、370元。<br>调整后,<br>各省(区、市a)和中心城市汽、柴油最高零售价格见附表。<br>相关价格联动及补贴政策按现行规定执行。<br> 中石油、中石化、中海油三大公司要组织好成品油生产和调运,<br>确保市场稳定供应,严格执行国家价格政策。<br>各地相关部门要加大市场监督检查力度,<br>严厉查处不执行国家价格政策的行为,<br>维护正常市场秩序。<br>消费者可通过12315平台举报价格违法行为。<br> <img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0921%2F0a2dd1c2j00s1b9y400e4d200u0016gg00it00ql.jpg&thumbnail=660x2147483647&quality=80&type=jpg"> </div> </div> css:
#container5{ border: 1px yellow solid; width: 1000px; height: 800px; font-size: 32px; line-height:50px; overflow: hidden; padding:20px; } js:
$(document).ready(function() { // 获取页面高度 var pageHeight = $("#f12red1").height(); // 设置滚动的初始位置 var scrollPosition = 0; // 设置滚动的速度 var scrollSpeed = 1; // 每50毫秒滚动一次 // 定义滚动函数 function autoScroll() { // 计算下一次滚动的位置 scrollPosition += 1; // 如果滚动到页面底部,将滚动位置重置为0,重新开始滚动 if (scrollPosition >= pageHeight) { scrollPosition = 0; } // 使用animate函数实现滚动效果 // $("
文章目录 视图的移动右侧小键摄像机跟随调整摄像机的窗口比例当前角度变成拍摄视角视图(正视图,顶视图,侧视图)物体的对焦物体的移动,旋转,放大与缩小加选框选全选添加物体物体删除 视图的移动 shift + 鼠标中键 = 平移
鼠标中键 = 旋转
中键滚轮 =缩放
右侧小键 搜索键(放大与缩小),手掌(平移),摄像机(0键进入),正交与透视视图切换(5键)
注意,要是你没有数字键盘的话,你可以在编辑->偏好设置->输入->模拟数字键盘
摄像机跟随 按键盘N键->视图-> 锁定摄像机到视图方位
调整摄像机的窗口比例 通过调整X,Y 的一个分辨率就可以啦
当前角度变成拍摄视角 先选中Camera ,再按Ctrl+alt + 0键,就可以啦,然后你可以加上摄像机跟随来进一步调整
视图(正视图,顶视图,侧视图) 用ctrl + alt + q进行切换,不过也可以在小键盘的7键(顶视图),1键(前视图),3键(右视图)进行逐一切换
ctrl + 7键 底视图 ,ctrl + 1 后视图 ,ctrl + 3 左视图
9键 就是进行视图的切换
想要在四个视图中同步,就按 ctrl + .
物体的对焦 选中物体,按键盘的 . 键
选中物体,按键盘 / 键,也是聚焦,但是会只显示你选中的物体
物体的移动,旋转,放大与缩小 通过开启这个功能,点击物体后,可以自动显示
当然,也有快捷键 G 键 移动 ,按完G 键之后,按x,y,z 就分别在x,y,z 轴移动(也可以按完x,y,z 之后输入数值,精确移动物体) ,最后按 alt + G 键就回到原来位置
目的是在前端增加一个自定义控件里的button后,按下动作可以调用使用该控件的页面的事件
首先在前端增加自定义控件里加入一个button,在其cs页面里注册点击事件
var btnAdd = GetTemplateChild("btnAdd") as FlatButton; if (btnAdd != null) { btnAdd.Click -= BtnAdd_Click; btnAdd.Click += BtnAdd_Click; } 然后定义路由以及事件
/// <summary> /// 注册控件路由 /// </summary> public static readonly RoutedEvent BtnAdd = EventManager.RegisterRoutedEvent("BtnAddClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Button)); /// <summary> /// 声明外部调用事件 /// </summary> public event RoutedEventHandler BtnAddClick { add { AddHandler(BtnAdd, value); } remove { RemoveHandler(BtnAdd, value); } } public void BtnAdd_Click(object sender, RoutedEventArgs e) { RoutedEventArgs args = new RoutedEventArgs(BtnAdd, this); RaiseEvent(args); } 最后,在使用该自定义控件的前端里加入该事件
要向MySQL数据库中添加数据,您可以使用INSERT INTO语句。以下是一些基本步骤和示例代码来添加数据:
连接到数据库: 首先,您需要使用MySQL客户端或编程语言中的MySQL连接库连接到您的数据库。
编写INSERT语句: 创建一个INSERT INTO语句,指定要插入数据的表名和要插入的数据列以及其值。语法如下:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
例如,如果您有一个名为"users"的表,具有"id"、"username"和"email"列,可以使用以下语句将数据插入:
INSERT INTO users (id, username, email)
VALUES (1, 'john_doe', 'john.doe@example.com');
请注意,如果您省略列名,将需要提供所有列的值,或者按照表定义的顺序提供值。
执行INSERT语句: 使用MySQL客户端或编程语言的数据库连接执行INSERT INTO语句。这将向数据库添加新的数据行。
以下是使用Python和MySQL连接库(例如,mysql-connector-python)的示例代码来插入数据:
import mysql.connector
# 连接到MySQL数据库
conn = mysql.connector.connect(
host="your_host",
user="your_username",
password="your_password",
database="your_database"
)
# 创建一个光标对象
cursor = conn.cursor()
# 插入数据的SQL语句
insert_query = "INSERT INTO users (id, username, email) VALUES (%s, %s, %s)"
data_to_insert = (1, 'john_doe', 'john.
1.需要创建应用,勾选线上账号,配置回调地址,勾选对应的按钮,才不会出错
PayPalPaypal开发者中心获取“ClientId”和“ClientSecret”参数_每天都进步一点点的博客-CSDN博客