数据库系统概念学习1

第一章 引言 数据库管理系统是由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库 特定时刻存储在数据库中的信息的集合称为数据库的一个实例,而数据库的总体设计称为数据库模式 数据库结构的基础是数据模型,数据模型是一个描述数据,数据联系,数据语义以及一致性约束概念工具的集合。数据模型提供了一种物理层,逻辑层以及视图层数据库设计的方式 存储在数据库中的数据值必须满足某些一致性约束 数据库中实体通过属性集合来描述,例如name,salary可以描述instructor实体 联系是几个实体之间的关联,例如,member联系将一位教师和她所在的系关联在一起。同一类型的所有实体的集合称为实体集,同一类型的所有联系的集合称为联系集 第一部分--关系数据库 第二章--关系模型介绍 元组只是一组值的序列(或列表),在n个值之间的一种联系可以在数学上用关于这些值的一个n元组来表示,换言之,n元组就是一个有n个值的元组,它对应于表中的一行 在关系模型的术语中,关系用来指代表,元组用来代指行,属性指代表中的列 对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域 域是原子的,不可再分的 空值是一个特殊的值,表示值未知或不存在 数据库模式 数据库模式是数据库的逻辑设计,数据库实例是给定时刻数据库中数据的一个快照 码 一个元组的属性值必须是能够唯一区分元组的,换句话说,一个关系中没有两个元组在所有属性上的取值都相同 超码是一个或多个属性的集合,这些属性的组合可以是我们在一个关系中唯一的标识一个元组 主码主要用来在一个关系中区分不同元组的候选码 外码: 模式图 一个含有主码和外码依赖的数据库模式可以用模式图 关系查询语言 查询语言是用户用来从数据库中请求获取信息的语言 在过程化语言中,用户执导系统对数据库执行一系列操作以计算出所需结果 在非过程化语言中,用户只需要描述所需信息,而不用给出获取该信息的具体过程 关系运算 第三章--SQL SQL数据定义 基本属性 基本模式定义 create table create table r ( A1,D1, A2,D2, ...., An,Dn, <完整性约束1>, ..., <完整性约束k> ); 完整性约束: not null:一个属性上的not null 约束表明在该属性上不允许空值,此约束把空值排除在该属性域之外 SQl 禁止破坏完整性约束的任何数据库更新 insert insert into instructor values (10211,'Smith' , 'Biology' , 66000); delete 删除元组 delete from student;

Java语法基础案例(一)

目录 案例一:买飞机票 案例二:开发验证码 案例三:评委打分 案例四:数字加密 案例五:数组拷贝 快捷键使用 //alt+回车快速由上而下生成方法 案例一:买飞机票 需求: 用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下: 5-10月为旺季,头等舱9折,经济舱8.5折; 11月到来年4月为淡季, 头等舱7折,经济舱6.5折,请开发程序计算出用户当前机票的优惠价。 方法:先使用if判断月份是旺季还是淡季,然后使用switch分支判断是头等舱还是经济舱 代码: package com.itheima; public class Test1 { public static void main(String[] args) { double a=calculate(1000,8,"经济舱"); System.out.println("优惠价是:"+a); } public static double calculate(double price, int month, String type) { if (month >= 5 && month <= 10) { switch (type) { case "头等舱": price *= 0.9; break; case "经济舱": price *= 0.85; break; } } else { switch (type) { case "

分布式锁1:5种方案解决商品超卖的方案的优缺点

一 分布式锁 1.1 分布式锁的作用 在多线程高并发场景下,为了保证资源的线程安全问题,jdk为我们提供了synchronized关键字和ReentrantLock可重入锁,但是它们只能保证一个工程内的线程安全。在分布式集群、微服务、云原生横行的当下,如何保证不同进程、不同服务、不同机器的线程安全问题。jdk并没有给我们提供既有的解决方案。需要自己通过编写方案来解决,目前主流的实现有以下方式: 基于mysql关系型实现 基于redis非关系型数据实现 基于zookeeper/etcd实现 1.2 四种方案的比较 性能:一个sql > 悲观锁 > jvm锁 > 乐观锁 如果追求极致性能、业务场景简单并且不需要记录数据前后变化的情况下。 优先选择:一个sql 如果写并发量较低(多读),争抢不是很激烈的情况下优先选择:乐观锁 如果写并发量较高,一般会经常冲突,此时选择乐观锁的话,会导致业务代码不间断的重试。​ 优先选择:mysql悲观锁 不推荐jvm本地锁。 二 模拟单体超卖 2.1 工程结构 2.2 编写工程代码 1.pom文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <version>2.3.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> 2.

玩转Linux GDB & pdb

一、GDB调试🐯 watch -n指令的使用: # 每隔1s在终端打印一次当前系统内存使用情况 watch -n 1 "cat /proc/meminfo" # 每隔1s查看当前系统中所有正在运行的进程 # ps:查看系统进程; -e:显示所有进程;-f:全格式 # ps -aux指令也用于查看进程。两者的输出风格不同,内容几乎无差别,一般推荐使用-elf watch -n 1 "ps -elf" nm指令的使用: # 查看可执行文件或者动态链接库的符号表(函数、变量等) nm ***.exe # 加上grep可以精确定位 nm ***.exe | grep 待查名称 gdb指令: # 打开一个可视化的gdb调试终端,开始调试程序文件 gdb -tui **.exe # 此外,也可以对正在运行中的进程,切入gdb调试 gdb -p 进程PID # or gdb attach 进程PID 进入调试: (gdb)l 数字n # (小写L)显示出代码从第n行开始的内容,默认显示10行;之后再次输入l,会再往后输出10行 (gdb)set args model/yolo4_tf.xmodel 0 -t 8 # set args:设置程序启动参数 (gdb)run # run指令:进入主程序,立即开始执行,直到遇到断点或者程序结束 (gdb)start # start指令:进入主程序,停在main()主函数入口处;等待下一步指示(手动打断点等) (gdb)break n (简写b n) # 在第n行处设置断点(可以带上代码路径和代码名称: b /usr/codeprj/OAGUPDATE.

langchain-模型

langchain模型 一、langchain 封装的模型分为两类1,LLM2,聊天模型 二、 langchain 与 OpenAi 模型三、langchain 事例1,LLM 交互2,聊天模型交互 一、langchain 封装的模型分为两类 大语言模型(LLM)聊天模型(Chat Models) Langchain 支持众多模型供应商,包括OpenAI、ChatGLM、HungingFace 1,LLM LLM 是一种基于统计的机器学习模型,用于对文本数据进行建模和生成。LLM学习和捕抓文本数据中的语言模式、语法规则和语义关系,以生成连贯并合乎语言规则文本。langchain 环境中,LLM特指文本补全模型(text completion model) 输入输出一条文本内容一条文本内容 2,聊天模型 聊天模型是语言模型的一种变体。聊天模型使用语言模型,并提供“聊天消息”的接口。 输入输出一条聊天消息一条聊天消息 二、 langchain 与 OpenAi 模型 GPT 模型归位聊天模型 davinci、curie、babbage、ada 模型归位文本补全模型 langchain 提供接口继承不同的模型,为了便于切换模型,langchain 将不同的抽象模型为相同的接口 BaseLanguageModel , 并提供 predict 和 predict_message 函数来调用模型。 当使用LLM 时推荐使用 predict 函数,当使用聊天模型时推荐使用 predict_message函数 三、langchain 事例 1,LLM 交互 from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "openi_key" llm = OpenAI(model_name="text-davinci-003") response = llm.predict("用 node.

通过正则表达式获取字符串中的省市区

通过正则表达式获取字符串中的省市区 //[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市) 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 //^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 //[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 上代码 package com.example.helloworld.controller; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AddressUtil { private AddressUtil() { } /** * 从地址串中解析提取出省市区等信息 * * @param address 地址信息 * @return 解析后的地址Map */ private static Map<String, String> addressResolution(String address) { //1.地址的正则表达式 //[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市) 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 //^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 //[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取 String regex = "(?<province>[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市)?(?<city>[^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县)(?<county>[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛)?(?<address>.*)"; //2、创建匹配规则 Matcher m = Pattern.compile(regex).matcher(address); String province; String city; String county; String detailAddress; Map<String, String> map = new HashMap<>(16); while (m.

玩转工具系列之Markdown

零、学习网站🍓 官方链接野生网站链接野生资料链接 一、设置字体🍍 1. 字体 <font face="黑体">我是黑体字</font> <font face="宋体">我是宋体字</font> <font face="微软雅黑">我是微软雅黑字</font> <font face="fantasy">我是fantasy字</font> <font face="Helvetica">我是Helvetica字</font> <font face="Times New Roman">我是Times New Roman字</font> 2. 字体颜色 # 方式1 浅红色文字:<font color="#dd0000">浅红色文字:</font> # 方式2 <font color="color: blue">蓝色</font> <font color="rgb(200, 100, 100)">使用 rgb 颜色值</font> # 方式3 <font style="color: rgb(200,100,100)">使用 rgb 颜色值</font> RGB颜色对照表:实色效果-RGB值-16色同一颜色值在不同显示器上会有色差,选取颜色时尽量使用安全色但注意:以上方法在GitHub中无效! 3. 背景色 <font style="background: blue">蓝色</font> # 同时设置字体颜色和背景色 <font style="background: rgb(200,100,100), color: rgb(200,100,100)">使用 rgb 颜色值</font> # 使用图片作背景 <font style="background: url('http://www.wenliku.com/d/file/patterns/2019-06-26/d8fac26c38c9b2a7e2393fc9af766e8f.jpg') ">I wish you a Merry Christmas</font> # 七彩渐变背景色 <font style="

echarts图 横向滚动条

dataZoom: [ { borderColor: "transparent", showDataShadow: false, start: 0, end: 70, labelFormatter: function(value) { return ""; }, zoomLock: true, height: 2, bottom: "1%", id: "dataZoomX", type: "slider", show: true, //true 或 false 是否显示滚动条 xAxisIndex: [0], filterMode: "filter" } ], getQueryDepart(xdata, ydata) { let dataZoomShow = false; if (xdata.length > 1) { dataZoomShow = true; } const option = { dataZoom: [ { borderColor: "transparent", showDataShadow: false, start: 0, end: 70, labelFormatter: function(value) { return "

VUE系统内嵌其他页面的三种方法

(在导航守卫和拦截器中确保能给到相应的token即可跳转到指定页面) 方法一 : Iframe打开 在A项目中使用标签打开 在B项目中 (本人的项目是指定跳转页面, 所以在当导航守卫的js文件中接收传过来的参数) 方法二 : object打开 A 项目 B项目 同上接收 方法三 : Vue-iframe 方式 (专门为 Vue 开发的插件,可自定义的内容 CSS、自动调整 iframe 高度等) 1 .安装 Vue-iframe : 1 | npm install vue-iframe 2. 引入 : 1 import VueIframe from "vue-iframe" ; 2 3 Vue.use(VueIframe) ; 3. 嵌入网页 : 1 <template> 2 <div class='container'> 3 <vue-iframe url="http://192.168.21.116:8080?xxxxx" :style="{height :'100%'}" /> 4 </div> 5 </template>

Vue路由配置

大家有没有这样的操作,就是在创建vue项目时明明需要路由,但忘记把它添上了。 今儿,就教大家添加 1.安装vue-router 方法一:命令行安装,这个是适合Vue2,如果你安装4.x的话会报错的。新建终端,在你的项目目录路径下输入命令 npm install vue-router@3.5.2 方法二:图形化界面安装,注意版本,新建终端,在你的项目目录路径下输入命令vue ui 4.x版本不适合vue2,建议命令行安装 2.文件配置 a.在src目录下新建router目录,再建index.js;目录名一定是router,其它的报错如图: b.在main.js中引入路由,并挂载 import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app') c.在router下的index.js添加如下代码,记得将路由暴露出去,否则报错 import Vue from 'vue' import VueRouter from 'vue-router' import HelloWorld from '@/components/HelloWorld' Vue.use(VueRouter) const router=new VueRouter({ routes:[ { path:'/', component:HelloWorld } ] }) export default router d.最后在App.vue中加上路由出口<router-view/>标签 <template> <div id="app"> <router-view/> </div> </template> 总结,安装后配置后出现问题可能是路由目录名,或是路由版本问题。vue2用3.

【Python基础-Pandas】解决Pandas会自动把None转成NaN的问题

1. 背景 目前dataframe中的数据如下,power字段表示功率值,第一个值为20.0,第二个值为None。需要计算电量值,电量 = 功率 * 0.25,并保存到energy字段中,如果功率值为None,则电量值也为None。 power 0 20.0 1 None df = pd.DataFrame(data={ 'power': [20, None] }) df['energy'] = df.apply( lambda col: Decimal(col['power']) * Decimal(0.25) if col['power'] is not None else None, axis=1) print(df) 结果如下: power energy 0 20.0 5.00 1 NaN NaN 发现原本的None值被自动转成了NaN 2. 解决 Pandas会自动将Python中的None值转换为NaN("Not a Number"的缩写)值。NaN是Pandas中表示缺失数据的一种特殊值。这种自动转换是因为None通常用于表示缺失或空数据,而NaN是Pandas用于处理缺失数据的标准方式。 如果不希望Pandas自动将None转换为NaN,您可以在创建Series或DataFrame对象时明确指定dtype(数据类型),将其设置为适当的数据类型,以便None可以保持原样。 如下: df = pd.DataFrame(data={ 'power': [20, None] }, dtype=object) df['energy'] = df.apply( lambda col: Decimal(col['power']) * Decimal(0.25) if col['power'] is not None else None, axis=1) print(df) 结果如下:

Jenkins 执行远程shell脚本部署jar文件问题起不来

如图:最开始的时候没有加: source /etc/profile 这一行, run.sh里面的java -jar xxxx.jar 一直执行不来。 一开始以为是Jenkins执行退出后会kill一切它启动的进程,所以加了在run.sh里面加了export BUILD_ID=dontKillMe,还是不行。后来考虑是环境变量问题,加上source /etc/profile就好了,同时最好在“java -jar xxxx.jar &” 前加上nohup:“nohup java -jar xxxx.jar &”

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

前言 吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 目录 前言 一、YOLOv5的网络结构 二、输入端 (1)Mosaic数据增强 (2)自适应锚框计算 (3)自适应图片缩放 三、Backbone (1)Focus结构 (2)CSP结构 四、Neck 五、Head (1)Bounding box损失函数 (2)NMS非极大值抑制 六、训练策略 【写论文必看】深度学习纯小白如何从零开始写第一篇论文?看完这篇豁然开朗!-CSDN博客 前期回顾: 【YOLO系列】YOLOv4论文超详细解读2(网络详解) 【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记) ​​​​​​【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记) 【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记) 【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记) 🍀本人YOLOv5源码详解系列: YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析 YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py YOLOv5源码逐行超详细注释与解读(7)——网络结构(2)common.py 🌟本人YOLOv5入门实践系列: YOLOv5入门实践(1)——手把手带你环境配置搭建 YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集 YOLOv5入门实践(3)——手把手教你划分自己的数据集 YOLOv5入门实践(4)——手把手教你训练自己的数据集 YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面) 🌟本人YOLOv5改进系列: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制 YOLOv5改进系列(3)——添加CA注意力机制 YOLOv5改进系列(4)——添加ECA注意力机制 YOLOv5改进系列(5)——替换主干网络之 MobileNetV3 YOLOv5改进系列(6)——替换主干网络之 ShuffleNetV2 YOLOv5改进系列(7)——添加SimAM注意力机制 YOLOv5改进系列(8)——添加SOCA注意力机制 YOLOv5改进系列(9)——替换主干网络之EfficientNetv2 ​​​​​​YOLOv5改进系列(10)——替换主干网络之GhostNet YOLOv5改进系列(11)——添加损失函数之EIoU、AlphaIoU、SIoU、WIoU YOLOv5改进系列(12)——更换Neck之BiFPN YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等 YOLOv5改进系列(14)——更换NMS(非极大抑制)之 DIoU-NMS、CIoU-NMS、EIoU-NMS、GIoU-NMS 、SIoU-NMS、Soft-NMS YOLOv5改进系列(15)——增加小目标检测层 YOLOv5改进系列(16)——添加EMA注意力机制(ICASSP2023|实测涨点) YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)

YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法

前言 最近我在研究YOLOv5的改进,一个模型的好坏、改进后效果如何都是需要一系列指标来判断的。这篇就是我将这几天学到的内容做一下总结。 友情提醒:本篇干货较多,建议先再慢慢看噢! ​ 🍀本人YOLOv5源码详解系列: YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析 ​​​​​​YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py YOLOv5源码逐行超详细注释与解读(7)——网络结构(2)common.py ​ 🍀本人YOLOv5入门实践系列: YOLOv5入门实践(1)——手把手带你环境配置搭建 YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集 YOLOv5入门实践(3)——手把手教你划分自己的数据集 YOLOv5入门实践(4)——手把手教你训练自己的数据集 YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面) 🌟本人YOLOv5改进系列: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制 YOLOv5改进系列(3)——添加CA注意力机制 YOLOv5改进系列(4)——添加ECA注意力机制 YOLOv5改进系列(5)——替换主干网络之 MobileNetV3 YOLOv5改进系列(6)——替换主干网络之 ShuffleNetV2 YOLOv5改进系列(7)——添加SimAM注意力机制 YOLOv5改进系列(8)——添加SOCA注意力机制 YOLOv5改进系列(9)——替换主干网络之EfficientNetv2 ​​​​​​YOLOv5改进系列(10)——替换主干网络之GhostNet YOLOv5改进系列(11)——添加损失函数之EIoU、AlphaIoU、SIoU、WIoU YOLOv5改进系列(12)——更换Neck之BiFPN YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等 YOLOv5改进系列(14)——更换NMS(非极大抑制)之 DIoU-NMS、CIoU-NMS、EIoU-NMS、GIoU-NMS 、SIoU-NMS、Soft-NMS YOLOv5改进系列(15)——增加小目标检测层 YOLOv5改进系列(16)——添加EMA注意力机制(ICASSP2023|实测涨点) YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点) YOLOv5改进系列(18)——更换Neck之AFPN(全新渐进特征金字塔|超越PAFPN|实测涨点) YOLOv5改进系列(19)——替换主干网络之Swin TransformerV1(参数量更小的ViT模型) YOLOv5改进系列(20)——添加BiFormer注意力机制(CVPR2023|小目标涨点神器) YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT) YOLOv5改进系列(22)——替换主干网络之MobileViTv1(一种轻量级的、通用的移动设备 ViT) YOLOv5改进系列(23)——替换主干网络之MobileViTv2(移动视觉 Transformer 的高效可分离自注意力机制) YOLOv5改进系列(24)——替换主干网络之MobileViTv3(移动端轻量化网络的进一步升级) 持续更新中。。。 目录 前言 🌟一、性能指标 1.1 混淆矩阵 1.2 Accuracy :准确率(正确率) 1.3 Precision :精确率(查准率) 1.4 Recall :召回率(查全率)

uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)

文章目录 📋前言⏬关于专栏 🎯需求描述🎯前置知识点🧩uni.showLoading()🧩uni.authorize()🧩uni.downloadFile()🧩uni.saveImageToPhotosAlbum() 🎯演示代码🧩关于图片接口🧩代码解析简述 📝最后 📋前言 这篇文章是本专栏 uni-app 的项目实战篇,主要内容的是模拟前端通过调用接口,然后获取到数据图片的路径数据,然后授权相册,最后把图片保存到本地(相册)。 ⏬关于专栏 本专栏主要是分享和介绍从零到一学习和使用的 uni-app 的笔记和个人经验。通过个人的学习经验和工作经验来给大家分享关于 uni-app 开发的技巧,以及快速入门的诀窍等等。 专栏主页:uni-app_黛琳ghz的博客-CSDN博客 🎯需求描述 案例场景:用户通过点击某个按钮可以把图片保存到相册,比如说含有二维码的名片图片、海报图片等等。 需求分析:这里以分享海报的需求为例子,用户点击分享海报,然后后台生成含二维码、海报内容的图片,前端通过调用此接口获取到图片的路径信息(路径后端拼接好返回),然后用户点击按钮,然后先授权相册,最后再保存图片到相册。(可以参考下图的原型图,仅供参考) 🎯前置知识点 在编写代码之前,我们先熟悉一下本次实战所需用到的一些知识点和 uni-app 的内置 API。 🧩uni.showLoading() uni.showLoading() 是 uni-app 框架提供的一个 API ,用于显示加载提示框。它的作用是在页面上展示一个加载中的提示框,告知用户当前正在进行一些耗时的操作,比如加载数据或进行网络请求。 uni.showLoading() 方法接受一个对象参数,可以包含以下属性: title(可选):加载提示框的标题文本,默认为"加载中"。mask(可选):是否显示透明蒙层,防止用户在加载过程中进行其他操作,默认值为true,表示显示蒙层。 调用 uni.showLoading() 方法后,加载提示框会显示在页面上,直到调用uni.hideLoading() 方法或者一段时间后自动消失。示例代码: uni.showLoading({ title: '加载中', mask: true }); 在上述示例中,uni.showLoading() 方法被调用,显示一个标题为"加载中"的加载提示框,并且显示透明蒙层。当加载完成后,应该调用 uni.hideLoading() 来隐藏加载提示框。 🧩uni.authorize() uni.authorize() 是 uni-app 框架提供的一个 API ,用于请求用户授权。它的作用是向用户申请获得指定的授权权限,比如获取用户的地理位置、相机、相册等权限。 uni.authorize() 方法接受一个对象参数,可以包含以下属性: scope:要申请的授权权限的标识符。不同的授权权限有不同的标识符,例如获取用户信息的标识符为 scope.userInfo,获取用户相册的标识符为 scope.writePhotosAlbum。success(可选):授权成功时执行的回调函数。fail(可选):授权失败时执行的回调函数。 在调用 uni.authorize() 方法时,会向用户展示一个授权对话框,询问用户是否允许获取指定的权限。如果用户同意授权,则执行 success 回调函数;如果用户拒绝授权或授权失败,则执行 fail 回调函数。示例代码: uni.authorize({ scope: 'scope.

前端js八股文大全

一、js的数据类型 值类型(基本类型):数字(Number)、字符串(String)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol,大数值类型(BigInt) 引用数据类型:对象(Object)、数组(Array)、函数(Function)、日期(Date)。 注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值(标识符)。 二、什么是函数 JS函数的概念 函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体。 函数的作用 正如函数的概念, 我们可以根据需要, 将特定的功能用函数来包裹(封装) 使用函数的好处 1, 函数可以在同一个程序或其他程序中多次重复使用(通过函数名调用) 2, 使程序变得更简短而清晰 , 提高可读性 3, 有利于程序维护 三、本地对象、内置对象和宿主对象 1.内置对象 js中的内部对象包括Array、Boolean、Date、Function、Global、Math、Number、Object、>RegExp、String以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、>SyntaxError和TypeError。 其中Global和Math这两个对象又被称为“内置对象”,这两个对象在脚本程序初始化时被创建,不必实例化这两个对象。 2.宿主对象 宿主对象就是执行JS脚本的环境提供的对象。对于嵌入到网页中的JS来说,其宿主对象就是浏览器 提供的对象,所以又称为浏览器对象,如IE、Firefox等浏览器提供的对象。不同的浏览器提供的 宿主对象可能不同,即使提供的对象相同,其实现方式也大相径庭!这会带来浏览器兼容问题, 增加开发难度。浏览器对象有很多,如Window和Document等等。 3.自定义对象 顾名思义,就是开发人员自己定义的对象。JS允许使用自定义对象,使JS应用及功能得到扩充 四、数组(Array) 1.基本方法 push() 从后面添加元素,返回值为添加完后的数组的长度 pop() 从后面删除元素,只能是一个,返回值是删除的元素 shift() 从前面删除元素,只能删除一个 返回值是删除的元素 unshift() 从前面添加元素, 返回值是添加完后的数组的长度 splice(i,n) 删除从i(索引值)开始之后的那个元素。返回值是删除的元素 concat() 连接两个数组 返回值为连接后的新数组 sort() 将数组进行排序,默认根据ASCII码比较,返回值是排好的数组 reverse() 将数组反转,返回值是反转后的数组 slice(start,end) 切去索引值start到索引值end的数组,不包含end索引的值,返回值是切出来的数组 indexOf() 查找某个元素的索引值,若有重复的,则返回第一个查到的索引值若不存在,则返回 -1 Array.isArray() 检测是否是一个数组 join() 默认是以 "," 隔开,返回的是字符串 2.高阶函数(1) forEach(callback) 遍历数组,无return 即使有return,也不会返回任何值,并且会影响原来的数组 map(callback) 映射数组(遍历数组),有return 返回一个新数组 。 注意:forEach()和map()的区别

No matching distribution found for numpy 安装numpy报错怎么办,看这里

今天开发小程序,软件包未安装,输入pip install numpy 后出现这个报错,一开始我以为是版本不匹配 在这里自选适合3.9python的版本后依旧是报错,后面通过其他博主的方法找到了解决方法 env) PS D:\python> pip install numpy ERROR: Could not find a version that satisfies the requirement numpy (from versions: none) ERROR: No matching distribution found for numpy 出现这两行英文是因为原先输入pip install numpy的方式不安全,不被信任所以无法下载。 那么我们应该将代码改成 pip install numpy -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com 1.提前注意:每个版本的python都有对应版本的包,要选择合适版本的包安装,否则就算安装了也是不匹配,

MyBatis SQL语句构建器

SQL语句构建器 问题 Java程序员面对的最痛苦的事情之一就是在 Java 代码中嵌入 SQL 语句。这么来做通常是由于 SQL 语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中。正如你已经看到的那样,MyBatis 在它的 XML 映射特性中有一个强大的动态 SQL 生成方案。但有时在 Java 代码内部创建SQL语句也是必要的。此时, MyBatis 有另外一个特性可以帮到你,在减少典型的加号,引号,新行,格式化问题和嵌入条件来处理多余的逗号或 AND 连接词之前。事实上,在 Java 代码中来动态生成 SQL 代码就是一场噩梦。例如: String sql = "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, " "P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON " + "FROM PERSON P, ACCOUNT A " + "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID " + "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID " + "WHERE (P.ID = A.ID AND P.

Windows11系统鼠标右键菜单中“新建”功能按钮消失的问题解决方法

在Windows11系统中,有些用户可能遇到了鼠标右键菜单中“新建”功能按钮消失的问题。这可能是由于当前注册表信息被篡改所导致的。 不用担心,您可以尝试以下简单的方案来进行操作,看看是否能够修复该问题。 1. 使用快捷键“Win+R”打开运行对话框,然后键入“regedit”,并按回车键打开本地注册表编辑器。 2. 在注册表编辑器中,定位到以下路径: HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 3. 点击下面的“New”项目(如果已存在“New”项目,请直接跳到步骤4),然后找到右侧该项目的值,查看是否为{D969A300-E7FF-11d0-A93B-00A0C90F2719}。 4. 如果该项目的值不是{D969A300-E7FF-11d0-A93B-00A0C90F2719},请进行编辑并修改为该值。(双击默认值,打开编辑窗口进行修改。) 5. 如果在步骤3中没有找到“New”项目,请手动新建一个,并将值设置为{D969A300-E7FF-11d0-A93B-00A0C90F2719}。 6. 完成上述操作后,请重启您的计算机,并检查右键菜单是否已经恢复了“新建”功能按钮。 在进行上述操作之前,强烈建议您先导出注册表信息进行备份,以防万一。注册表编辑是一个敏感的操作,请确保按照指导进行操作,避免误操作引起其他问题。 希望以上方案能够帮助您修复Windows 11右键菜单中“新建”功能按钮缺失的问题,让您的操作更加顺畅和便捷。如果问题仍然存在,请及时向技术支持寻求帮助。祝您使用Windows 11愉快! 本文来源于:Windows11右键“新建”功能按钮缺失?尝试修复注册表信息-下载集 (xzji.com)https://www.xzji.com/news/13402.html

js导出table至excel

//第一种方法 function method1(tableid) { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var oSheet = oWB.ActiveSheet; var sel = document.body.createTextRange(); sel.moveToElementText(curTbl); sel.select(); sel.execCommand("Copy"); oSheet.Paste(); oXL.Visible = true; } //第二种方法 function method2(tableid) { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var oSheet = oWB.ActiveSheet; var Lenr = curTbl.rows.length; for (i = 0; i < Lenr; i++) { var Lenc = curTbl.

动态SVG图标的网站(及其优点)

以下是几个有动态SVG图标的网站,并且列出了它们的优点: 1. Iconfinder 优点:Iconfinder是一个非常大的图标库,拥有数百万个图标供选择。它提供了许多动态SVG图标,可以直接下载和使用。用户可以根据自己的需求进行搜索和筛选,并可以根据自己的喜好进行自定义。 2. Flaticon 优点:Flaticon是另一个非常受欢迎的图标库,提供了大量的动态SVG图标,可以根据不同的主题和风格进行筛选。此外,Flaticon还提供了一些有用的工具,如图标编辑器和生成图标字体的功能。 3. Icons8 优点:Icons8是一个全面的图标平台,提供了各种类型的图标,包括动态SVG图标。它的优点是图标的质量很高,并且有一个易于使用的界面,可以使用户轻松地筛选图标。 4. Noun Project 优点:Noun Project是一个社区驱动的图标库,拥有大量的图标供选择。它的优点是图标的多样性和创意性很高,并且可以根据不同的主题和风格进行筛选。此外,Noun Project还允许用户上传和共享自己的图标,以及与其他用户进行交流和合作。 5. Animated SVG Icons 优点:Animated SVG Icons是一个专门提供动态SVG图标的网站。它的优点是所有图标都是动态的,可以为网站和应用程序添加一些生动和互动的效果。此外,Animated SVG Icons还提供了一些有用的工具和教程,帮助用户使用和定制动态SVG图标。 这些网站的共同优点是它们提供了大量的动态SVG图标供选择,并且图标的质量很高。用户可以根据自己的需求进行搜索、筛选和自定义,并且可以直接下载和使用这些图标。此外,一些网站还提供了一些有用的工具和功能,帮助用户更好地使用和定制动态SVG图标。

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 Ctrl+S ;需要设置快捷键,这里原来是save all操作时上传文件到服务器; ** 设置好快捷键后按 Ctrl+S就会同步文件(添加删除文件后保存,服务器也会同步) ** 搜索出save all 后,双击它,弹出设置面板,然后按 Ctrl+S获取按键,最后点击OK

seismic unix 制作数据 合成数据

这一部分是su的基础,在装配完su后,建议先熟悉环境,把linux基础操作,vim基础操作熟悉后,首先进行su脚本,语法规则等的基础学习。 ls是列出当前文件夹下文件,不包括隐藏文件/夹 ls -a 是列出当前文件夹下所有文件,包括隐藏文件/夹 cd .. 注意是两个点,返回上一级目录 绿色的文件名,可执行文件,在命令行下./+名字可以直接运行。 蓝色的文件名,文件夹,在命令行下cd+名字可以进到该文件夹内。 黑色的文件名,文件,在命令行下,more/vim+文件名可以查看内容。 下面是0偏移距,正演效果:

seismic unix安装教程 linux红帽

SU是科罗拉多州矿业学院开发的一个免费地震处理软件。国内外很多科研人员及学生都借助于他来进行创作,和其他天价的处理软件相比,SU对学生就显得尤为珍贵了,更何况他开放源代码,可以方便地在其基础上进行再创作。 但是对于不是很熟悉LINUX的人来说,能把它安装上也需要花不少功夫,下面就把我的体会写出来,以供大家参考。 在Redhat9.0,Ubantu,Fedaro5,Fedaro7,和SUN工作站上多次安装,要领如下(默认 bsh ): 1、确保不是在root用户下安装,root权限太大,稍有不慎,可能会把系统搞崩溃。去CWP主页http://www.cwp.mines.edu/cwpcodes/index.html下载好安装包,目前版本是:cwp_su_all_40.gz,用tar -xvzf cwp_su_all_40.gz 解压出src文件夹,可以先在家目录下创建su文件夹,把src放在su内。 2、修改环境变量,先在家目录下(终端打开就是,如果不在用cd命令后面不加参数就可以进去,用pwd就可以看路径,比如我的路径是 /home/user ,)用ls -a 查看文件。找到 .bashrc隐藏文件,用vi 编辑器打开(vi .bashrc),在末尾出添加: export CWPROOT=/home/user/su export PATH=$PATH::/home/user/su/bin 然后保存(“先按ESC键,然后按两次大写Z”或者“先按ESC键,然后输入:wq”)退出,同样执行 vi .bash_profile 进行修改: export CWPROOT=/home/user/su export PATH=$PATH::/home/user/su/bin 保存退出后,然后执行以下命令: source .bashrc source .bash_profile 然后检查设置是否正确: echo $CWPROOT 显示为:/home/user/su 则说明无误 echo $PATH 末尾处有 /home/user/su/bin 就万事大吉了,关掉终端,重新打开一个,确保万无一失,如果不正确,则重新设置。 3)(这项不需要再改) 进入这个目录,可以看到makefile.config 这个文件,要修改里面的三项,输入命令:gedit makefile.config , 然后修改所打开的文件: a,将 ENDIANFLAG = -DCWP_LITTLE_ENDIAN 句激活(即去掉#)。 b,将 include $(CWPROOT)/src/Rules/gnumake.rules 句激活 c,蔽掉 include$(CWPROOT)/src/Rules/oldmake.rules 句,修改后保存。 d,将FC=g77, FC=f77,FC=ifort 屏蔽掉,激活FC=gfortran 4)打开MakeFile文件,将“#CWPROOT =”前的“#”去掉,在等号后面添加/home/yourname/su (这步很关键,之前我一直报错,结果就是忽略了这步的原因) 4、修改完Makefile.config,就可以安装了。

软件工程 第6章 软件编码和测试 习题答案

一.单选题(共4题,20.0分) 1 黑盒测试是从( )观点出发的测试,白盒测试是从( )观点出发的测试。 (5.0分) A、 开发人员、管理人员 B、 用户、管理人员 C、 用户、开发人员 D、 开发人员 正确答案: C 我的答案:C 2 软件测试方法中,黑盒测试方法和白盒测试方法是常用的方法,其中黑盒测试方法主要用于测试( ) (5.0分) A、 结构合理性 B、 软件外部功能 C、 程序正确性 D、 程序内部逻辑 正确答案: B 我的答案:B 3 使用白盒测试方法时,确定测试数据应根据( )和指定的覆盖标准。 (5.0分) A、 程序的内部逻辑 B、 程序的复杂结构 C、 使用说明书 D、 程序的功能 正确答案: A 我的答案:A 4 测试的关键问题是( ) (5.0分) A、 如何组织软件评审 B、 如何选择测试用例 C、 如何验证程序的正确性 D、 如何采用综合策略 正确答案: B 我的答案:B 二.判断题(共3题,15.0分) 1 好的测试是用少量的测试用例运行程序,发现被测程序尽可能多的错误 (5.0分) 我的答案:√ 正确答案:√ 2

软件工程 第5章 详细设计 习题答案

一.简答题(共3题,15.0分) 1 请用判定表画出以下问题的行为逻辑。 人们往往根据天气情况决定出门时的行装;天气可能下雨,也可能不下雨;天气可能变冷,也可能不变冷。如果天气要下雨,出门时带上雨伞;如果天气变冷,出门时要穿上大衣。(5.0分) 正确答案: 天气情况 下雨 不下雨 变冷 不变冷 变冷 不变冷 带雨伞 Yes Yes No No 穿大衣 Yes No Yes No 2 现有程序流程图表示:输入十个数据,输出其中的最小数和最大数。试根据流程图画出N_S图。 (5.0分) 正确答案: 3 将下面给出的伪码转换为PAD图。 void root ( float root1, float root2 ) { i = 1; j = 0; while ( i <= 10 ) { 输入一元二次方程的系数a, b, c; p = b*b – 4*a*c; if ( p < 0 ) 输出“方程i无实数根”; else if ( p > 0 ) 求出根并输出;

k8s 常用命令

资源类型资源简称nodenonamespacesnsdeploymentdeployReplicaSetrspodposervicesvcingressingDaemonSetsdsStatefulSetsstsConfigMapcmPersistentVolumepvPersistentVolumeClaimpvcHorizontalPodAutoscalerhpaComponentStatuscs 创建资源 # 创建一个deployment cat >> nginx-deploy-test.yaml < EOF apiVersion: apps/v1 #版本信息 kind: Deployment #资源信息 metadata: #元数据 name: nginx-deploy #资源名称 namespace: default #属于哪个命名空间下 spec: replicas: 2 #一共有两个副本资源 selector: matchLabels: app: nginx template: #pod创建模板 metadata: labels: app: nginx spec: containers: #容器名称下边的容器可以有多个 - image: nginx #镜像名称 imagePullPolicy: IfNotPresent #镜像拉取策略 name: nginx-test #容器名称 restartPolicy: Always #重启策略 EOF 部署上边的yaml资源信息 kubectl apply -f nginx-deploy-test.yaml 也可以这样使用命令行方式,直接创建 #创建pod kubectl create deploy nginx --image=nginx 查看资源信息 1.1 查看k8s版本信息

GraphViz‘s executables not found解决方法(安装Graphviz)

当用anaconda运行决策树代码遇到GraphViz's executables not found时,我尝试了以下以下方法进行,效率最快,不用进行任何配置。 第一步 进入GraphViz官网,进行下载安装 网址链接:https://graphviz.org/download/ 接着选择要下载的包 选择第二个或者第三个,根据自己的电脑配置来选择。下载时会遇到系统地安全阻拦,你选择信任这个安装包,跳过阻拦就可以了。 跳过方法: 点击省略号位置 点击保留 点击详细信息,然后选择仍然保留,就可以进行安装了。 第二步 进行安装 选择下一步。 选择接受 到这你可以选择第二个或者第三个选项,但我一般选择第二个。再继续勾选第四个选项,然后进行下一步。 然后选择安装路径,根据自己喜欢的安装路径进行选择。 然后选择安装,这样安装过程就结束了。 第三步 安装完成后,还需要你进行最后一步,就可以运行出决策树画图的代码了。 最后一步只需要你重新启动anaconda,因为anaconda需要重新读取你电脑的环境变量,重启之后,你再运行代码就能出结果了。 如果这种方法不行,你还可以参照另外一个博主的方法,链接:GraphViz's executables not found解决方法(安装Graphviz)_graphviz not found-CSDN博客

Uncaught SyntaxError: The requested module ‘/node_modules/.vite/deps/vue-router.js?v=9eef87ba‘

错误代码 import {createRouter, createWebHistory, RouteRecordRaw} from 'vue-router' // 自定义属性类型检测 type RouterConfig = RouteRecordRaw & { hidden?: boolean // hidden属性非必填 name?: string //string属性非必填 } const routes: Array<RouterConfig> = [ { path: '/about', name: 'about', hidden: true, component: () => import('../views/AboutView.vue') } ] const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes }) export default router 错误提示 浏览器中路由无法显示,提示错误 Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/vue-router.js?v=9eef87ba' does not provide an export named 'RouteRecordRaw' 问题描述 Volar: 'RouteRecordRaw' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.

常见排序算法Java版(待续)

冒泡排序O(n^2) public class Main { public static void main(String[] args) { Random random = new Random(); int[] nums = new int[]{random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100)}; for (int i = nums.length - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } for (int num : nums) { System.

动态规划:弗洛伊德(Floyd)算法总结与实现

弗洛伊德算法常用来来计算图中任意两点间的距离。 首先,我们把一个图初始化成一个各个顶点到其他顶点的距离的表格。弗洛伊德算法可以简单理解为更新这个初始化的表 成为 一个每个顶点到其他顶点都是最短距离的表格。 其中,最关键的点就是:当这个图的一个顶点到其它顶点的距离有两个不同的过程, 1,经过一个中间节点距离最短 2,直接到达目的顶点距离最短 所以需要遍历每一个顶点 ,当这个顶点作为出发节点,中间节点,目的节点的情况时哪一个距离最短。 例如: 我们初始化这张表: (N表示不可以直接到达) jABCDEi000000A00NN35B010018NNC05N0NND0NN00NE0NN220 举个例子来表示使用弗洛伊德算法来更新这张表的过程: 以A为出发节点 当从A->C时,原距离表中的距离是N,而存在D作为中间节点时,A->C的距离更新为A->D->C=3+2=5,5比N小,所以表更新为 jABCDEi000000A00N535B010018NNC05N0NND0NN00NE0NN220 以此类推更新每一个节点。 算法的实现就是来比较这个表原有的距离与新找到的距离哪一个更短,如果找到了更短的,则更新表。 下面为代码实现,把不可到达定义成一个比较大的数: package e.d7; import java.util.Scanner; /** * autor:张鑫 */ //任意两点之间距离最短 public class Floyd { //定义不可到达 static int UNLIMIT = 900; //取最小值 static int minimum(int a, int b) { if (a <= b) return a; else return b; } //更新距离表和顶点前驱表 static void floyd(int D[][]) { int k, i, j; int n = D.

网络编程中套接字(socket)介绍(Python示例)

网络编程中套接字(socket)介绍(Python示例) 网络编程就是同一计算机的进程间或者不同的联网计算机之间的通信(交换数据)。 那么,这两台计算机之间用什么传输数据呢?首先你肯定先需要物理连接嘛。 在此基础上,只需要考虑如何编写数据传输程序。 套接字是一种抽象的概念,它表示一个端点,用于在网络中传输数据。套接字可以用于实现各种网络协议,如 TCP/IP、UDP 等。 在套接字中,有两个主要的概念: 服务器套接字(server socket):用于接收来自客户端的连接请求,并建立与客户端的连接。服务器套接字通常在一个特定的端口上等待客户端的连接。 客户端套接字(client socket):用于向服务器发送连接请求,并与服务器建立连接。客户端套接字通常在随机选择的端口上发起连接。 套接字通过使用 IP 地址和端口号来唯一标识其所在的计算机和端点。在网络编程中,程序员通常使用套接字来编写服务器和客户端程序,以实现数据的传输和通信。套接字在计算机网络、Internet 编程等领域中有着广泛的应用。 看似很麻烦,但实际上这点不用愁,因为和开发语言与操作系统已经提供了socket。即使对网络数据传输的原理不太熟悉,我们也能通过 socket 来编程。 【Python之socket 官方文档 https://docs.python.org/zh-cn/3/library/socket.html 】 服务器端Python源码文件: import socket # 创建套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址和端口 server_address = ('localhost', 8888) server_socket.bind(server_address) # 监听连接 server_socket.listen(5) print('等待客户端连接...') while True: # 接受连接 client_socket, client_address = server_socket.accept() print('接受来自 {} 的连接'.format(client_address)) try: # 发送数据 message = '欢迎访问服务器!' client_socket.sendall(message.encode("utf8")) # 接收数据 data = client_socket.recv(1024).decode('utf-8') print('收到来自客户端的数据:', data) finally: # 关闭连接 client_socket.

Pyhton编程小游戏“逢7拍手”

用while循环嵌套if来解决这个问题 从1开始顺序数数,数到有7或者包含7倍数的数字时拍手,在100以内的数字里面实现程序。 输出结果显示:

gojs阻止click冒泡事件

在需要阻止冒泡的事件处理程序中设置e.handled=true, 即可阻止单击事件从可视化树上上升到面板,一直到节点。

快速生成前端代码的工具,iVX值得你去了解

人生有涯而知无涯,对于变幻莫测的前端而言。层出不穷的各种框架榨取了我们的所有精力,而当我们指望着手中的技术能够为我们养老送终的时候,我们所熟悉的技术被淘汰,一个新的前端框架又打碎了我们的所有梦。也之所以因为此,我开始变得麻木,在这个越来越妖娆的前端名利场,能够快速的出活,能够快速的完成我想要的,才是最关键的事情。 抱着这个心态,我找了一些能够快速生成前端代码的工具,正好iVX可以满足我的这个需求。直接进入iVX CN这个主页,点击开始开发,我们就可以进行前端页面开发。想要什么控件,直接在右侧进行选择,比如按钮、视频组件、编辑框等等,甚至连地图都有。感觉就像在使用visual studio开发winform 和 wpf 一样,直接拖拖控件就能够完成一个界面。非常方便有没有! 而且由这个iVX CN 云IDE 生成的前端页面我们是可以导出来源码的!这是最关键的部分,因为对于程序员来说,拿到源码我们才能更加方便的修改。这个在iVX是完全免费的。我们只需要点击右上角的文件,然后选择最后一个菜单项导出前端源码(见下图)。即可将源码导出通过浏览器下载到本地,图中的 html-新建应用1(2) 这个压缩包就是我下载到本地的前端源码。可以进行二次开发! 我们再来看一下由iVX生成的vue前端源码,需要做什么调整我们直接在该文件中进行增删即可。可能会有人疑惑id为什么都像那么长,我个人估计iVX那边在生成的时候,使用的是类似MD5或者随机生成的字符串。不过想要改也容易,现在的IDE功能都很强大,支持多个相同的字符串同时删改。vscode的快捷键好像是ctrl+d,IDEA的快捷键是shift+f6,改起来也非常方便。最主要的是用iVX生成的代码省心,不需要一个个敲代码了,妥妥的提升效率的神器。 最重要的是对于我这种小厂出身的程序员,要既当爹又当妈的,除了后台还要写前端的人而言,更是个不可缺少的辅助工具。人啊,还是那句话,世界上的知识是学不完的,但人的生命是有限的。只要能够完成我们手头的工作,完成老板布置的任务,其余时间用来健健身不香吗?程序员本就是一个经常面对电脑不怎么活动的。能有时间多运动运动就多活动活动,对自己是有益的。 还有要告诉大家的是,iVX的官方后续会对这个平台的非核心部分进行开源,目前还没有放出来,后续大家会搜索到iVX的仓库。到时候,那可真的是让我们用着放心,用着称心,有什么不爽的,我们程序员自己就可以改!最后回到主题,在编程这个领域逝去的技术太多了,而能够真正的四两拨千斤的工具才是我们真正需要的。iVX,值得你拥有。

如何制作网页 ico

1. 制作 icon 可以通过 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.1998910419.de12df413&cid=13720 或者自己在 PPT 制作,然后截图导出png 文件。 2. 转换为 ico 文件 使用:https://www.bitbug.net/ 上传并且转换成自己要的规格的 ico 文件即可。

【C语言进阶】 菱形图案打印、水仙花数、买汽水

目录 菱形图案打印 上三角 下三角 拓展:带空格直角三角形图案 代码一 代码二 水仙花数 拓展:变种水仙花数 买汽水 代码一 代码二 妙用汽水瓶 菱形图案打印 题目要求 其实呢这道题很多人想到直接用printf()进行输出,我想说的是,这样写不但麻烦、代码难看,而且实用性极低,所以当我们遇到这种类似循环输出题目是,不建议printf()输出; 接下来我就为大家简单介绍一下此题的做法,对于这类型的题其实我们只需要找到规律,就非常简单,仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。我们这里将这个图案分为两个部分从上往下,按照2*(line-1-i)-1的方式减少,其中:line表示总共有多少行 按照上述方式,将上三角和下三角中的空格和*分别输出即可。 上三角 上三角:先输出空格,后输出*,每行中 空格:从上往下,一行减少一个 *:2*i+1的方式递增 代码实现如下 int main() { int line = 0; int i = 0; scanf("%d", &line);//可自己选择打印图案的大小 //打印上半部分 for(i=0; i<line; i++) { //打印一行 //打印空格 int j = 0; for(j=0; j<line-1-i; j++) { printf(" "); } //打印* for(j=0; j<2*i+1; j++) { printf("*"); } printf("\n"); } 下三角 下三角:先输出空格,后输出*,每行中 空格:从上往下,每行多一个空格 代码实现如下 //打印下半部分 for(i=0; i<line-1; i++) { //打印一行 int j = 0; for(j=0; j<=i; j++) { printf("

低电压穿越仿真分析LVRT-Simulink

1.低电压穿越的意义 低电压穿越(LVRT)是指当电力系统事故或扰动引起光伏电站并网点的电压跌落时,在一定电压跌落范围和时间间隔内,光伏电站能够保证不脱网连续运行,避免电网故障的扩大化,同时光伏并网逆变器需要能够发出一定的有功和无功功率,以支撑电网恢复; 低电压穿越主要的理论依据是电网遭受雷击等事故时,只是瞬时跌落,这个时候要求发电机不能够马上脱网,而要支撑一段时间,等事故结束后,迅速恢复并网。这能够有效防止电网由于偶发事故(如雷击)崩溃; 低电压穿越(LVRT)标准最早见于是德国的中压并网(BDEW)标准,各国标准都是参考德国标准而制定; 电网电压跌落到0,称为零电压穿越,中国和德国的标准当前都要求达到零电压穿越; 发无功的意义: 电网实际上可以认为是由无数的同步电机并联得到,发电机的激磁电流方向与逆变器的容性无功方向相同, 逆变器在低压穿越时发容性无功,能够增加发电机的激磁电流,因而能够帮助电网上其他的同步电机快速的恢复。 参考自 逆变器名词—低电压穿越 (huawei.com) 2.低电压穿越的要求 GB/T 34120-2017《电化学储能系统储能变流器技术规范》规定: 电力系统发生故障时,若并网点考核电压全部在储能变流器低电压穿越要求的电压轮廓线及以上的区域内时,如图3所示,储能变流器应保证不脱网连续运行;否则,允许储能变流器切出。储能变流器低电压穿越具体要求如下: 储能变流器并网点电压跌至0 时,储能变流器能够保证不脱网连续运行 0.15 s; 储能变流器并网点电压跌至曲线 1以下时,储能变流器可以从电网切出; 对电力系统故障期间没有切出的储能变流器,其有功功率在故障清除后应能快速恢复,自故障清除时刻开始,以至少 30%额定功率/秒的功率变化率恢复至故障前的值。 动态无功支撑能力 当电力系统发生短路故障引起电压路落时,电化学储能系统储能变流器注入电网的动态无功电流应满足以下要求: 自并网点电压跌落的时刻起,动态无功电流的响应时间应不大于 30 ms。 自动态无功电流响应起直到电压恢复至 0.85(p.u.)期间,储能变流器注入电力系统的动态无自动态无功电流应实时跟踪并网点电压变化,并应满足: 式中: UT——储能变流器并网点电压标幺值;IN——储能变流器额定电流。 3.低电压穿越的仿真 4.低电压穿越的结果 5%对称跌落 40%对称跌落

dbeaver批量导出数据到另一个数据库

一、背景 在实际生产环境中我们通常往往需要进行数据迁移或者数据备份,接下来我将模拟生产环境进行数据迁移 二、问题现状 1、现在我有两个数据库一个数据库名为ceshi1 另一个数据库名为ceshi2 2、现在我的ceshi1里面有两张表三条数据,我想把这两张表迁移到ceshi2中 迁移后数据结构和大小不变 ceshi1表如下: ceshi2表如下: 我们可以清楚的看到ceshi2数据库一张表和一条数据都没有,而我们现在要做的就是把这ceshi1中的表和数据迁移到ceshi2中 三、问题解决 1、我们先选中第一张表然后按住ctrl在选中其他的表(按住ctrl可以选中多表) 2、右键选择导出数据然后下一步 3、选择导出数据的目标数据库继续下一步 4、这里一定要注意你的源地址和目标数据库是否正确,如果源和目标弄反了会出生产事故(重点) 5、点击继续之后我们再来看ceshi2数据库数据是否导入成功 最后我们可以清楚的看到数据已经导入到ceshi2数据库并且表和数据条数都能对上 值得注意的是一定要注意源目和目标这两个概率 源:是指你要从那台数据库拿数据 目标:是指你要把数据放到那台数据库去 此方法建议在数据迁移过程中目标表为空且数据表不大的情况下进行

禁用Chrome自动更新

chrome浏览器会强制用户自动更新,每次点击关于google时,会自动检测更新并下载,非常不好 1. 进入%userprofile%\AppData\Local\Google文件夹 2. 找到其中的Update文件夹,右键属性-安全,将所有组/用户的权限设置为拒绝即可 无法更新

前端面试“八股文”

"前端八股文"通常指的是前端面试中被频繁提及的一些核心知识点。这些知识点覆盖了前端开发中的基础技能、常见算法、框架使用等方面。以下是一个简要的前端八股文概述: 1. HTML/CSS 基础 HTML标签语义化CSS盒模型CSS布局(Flexbox 和 Grid)响应式设计和媒体查询 2. JavaScript 基础 原型和原型链闭包和作用域面向对象编程异步编程(Callback、Promise、Async/Await) 3. ES6+ 新特性 箭头函数解构赋值let 和 const模板字符串 4. 浏览器和网络 浏览器渲染过程HTTP协议跨域问题及解决方案状态码的含义 5. 前端框架 React/Vue/Angular 的基本使用和区别组件化思想路由管理状态管理(Redux/Vuex) 6. 前端工程化 模块化开发(CommonJS/ES6 Module)打包工具(Webpack)包管理工具(npm/yarn)版本控制(Git) 7. 算法和数据结构 排序算法(快速排序、归并排序)链表和树的基本操作哈希表的原理和应用动态规划和贪心算法 8. 性能优化 页面加载优化(懒加载、预加载)前端缓存策略减少 HTTP 请求次数使用 Web Workers 进行多线程处理 以上八股文中的知识点并非一成不变,随着前端技术的发展,可能会有一些变化。然而,这些基础知识点是前端开发者在面试和实际工作中需要熟练掌握的基础,也是构建更高级、更复杂应用的基石。在学习的过程中,实践和项目经验同样重要,能够更好地巩固和运用所学知识。

【记录一次服务器被黑的经历】

记录一次服务器被黑的经历 一.事情背景 事情背景是这样的:早上云服务器疯狂给我发消息,告诉我服务器有恶意文件。之后登录上去一看,发现服务器被人挖矿了。 使用top命令进行查看:发现cpu占满了(我的是4核的,这里发现4个核几乎都沾满了)。 二.先看结果 1. 发现这个文件是ll这个用户(的,之后就去查看服务器的根目录,发现多了一个目录tmp. 2.发现这个目录中有一些文件,其中就包括ll这个用户和它破解掉的密码。 3. 查询最近这个账号登录的ip地址,发现一个异常的ip地址。来自于新加坡,确定被黑无疑。 三.解决办法 解决思路:先干掉这个程序,之后删除这个脚本,删除定时任务。 1.第一步先kill掉这个任务。删除tmp这个目录以及源程序。 2.删除定时任务及文件 杀掉之后发现服务器过一段时间之后会进行重新启动这个挖矿软件。我们进行使用crontab-l查看当前用户的定时任务。(一般情况使用crontab -l是看不到的挖矿的程序,需要查看/etc/crontab) 这里使用crontab -l发现了定时任务和程序脚本的位置,先把定时任务进行删除,之后分别把这个脚本进行删除。 四。后续 之后没有发现cpu资源占用过高,问题是初步解决了。 注意事项:不要使用弱密码,很容易被攻破!

Python 的字符串

文章目录 字符串内部包含引号的方法使用方法改变字符串中字母的大小写在字符串中使用变量在字符串中添加空白删除字符串中的空白 字符串内部包含引号的方法 Python 的字符串可以用单引号或者双引号括起来,这种灵活性方便你在字符串中包含引号或者撇号。 'I told my friend, "Python is good."' "The language 'Python' is good." "One of Python's strengths is its diverse and supportive community." 使用方法改变字符串中字母的大小写 方法 title() 以首字母大写的方式显示每一个单词,即每个单词的首字母都改为大写。程序示例: name = "tom ken" print(name) print(name.title()) 结果: tom ken Tom Ken 方法 upper() 将每个字母都改为大写。程序示例: name = "tom ken" print(name) print(name.upper()) 结果: tom ken TOM KEN 方法 lower() 将每个字母都改为大写。程序示例: name = "Tom Ken" print(name) print(name.lower()) 结果: Tom Ken tom ken 在字符串中使用变量 要在字符串中插入变量的值, 可以使用 f字符串, 即在引号前面加上字母 f, 再将需要插入的变量放在花括号内.

【Docker】简易版harbor部署

文章目录 依赖于docker-compose下载添加执行权限测试 安装harbor下载解压修改配置文件部署配置开机自启动登录验证 使用harbor登录打标签上传下载 常见问题 依赖于docker-compose 下载 curl -L “https://github.com/docker/compose/releases/download/2.22.0/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o/usr/local/bin/docker-compose 添加执行权限 chmod +x /usr/local/bin/docker-compose 测试 docker-compose --version 安装harbor 下载 wget https://github.com/goharbor/harbor/releases/download/v2.8.4/harbor-offline-installer-v2.8.4.tgz 解压 tar -zxvf harbor-offline-installer-v2.8.4.tgz 修改配置文件 cd harbor & cp harbor.yml.tmpl harbor.yml & vi harbor.yml 部署 ./install.sh 配置开机自启动 docker-compose -f docker-compose.yml up -d 登录验证 使用harbor 登录 docker login 192.168.19.102:8000 打标签 docker tag {image name}:{tag} {harbor ip}:{port}/{harbor project}/{image name}:{tag} # eg docker tag apache-doris:1.

电商项目之如何扣减库存

文章目录 1 问题背景2 前言3 扣减库存的三种方案3.1 下单减库存3.2 付款减库存3.3 预扣库存 4 如何解决恶意买家下单的问题4.1 限制用户下单的数量4.2 标识恶意买家 5 实战:具体实现思路 1 问题背景 今天研究一下亿级流量的电商网站是怎么扣减库存 参考自:浅析「扣减库存」的方案设计 2 前言 本文旨在阐述生产环境如何在高并发的场景下可靠地扣减库存,有其他解决方案的伙伴可以在评论中分享出来。 3 扣减库存的三种方案 常规的支付链路是下单->创建订单->支付 3.1 下单减库存 用户下单时减库存 优点:实时扣减库存,避免支付时因库存不足减库存的问题 缺点:恶意买家大量下单,但不付款,导致真正想买的人买不到 3.2 付款减库存 下单时不会立即减库存,而是等到支付时才会减库存 优点:防止恶意买家大量下用光库存,避免下单扣库存的缺点 缺点:下单页面不是最新的库存,假如支付的订单数超过库存数,则支付失败 3.3 预扣库存 下单后预扣库存,超过一定时间后,库存释放。若超过时间后再支付,如果没有库存,则支付失败 优点:实时减库存,缓解恶意买家大量下单的问题,超过一定时间未支付则释放库存 缺点:在一定时间内,恶意买家大量下单仍可以将库存用完。 4 如何解决恶意买家下单的问题 在库存方面有恶意买家下单占用库存的问题,也会有恶意买家下单后拒付的问题,这种拒付会提高卖家收款账号被风控的概率。因此无论是在库存方面还是在支付方面,都需要解决恶意买家下单的问题 4.1 限制用户下单的数量 优点:限制恶意买家下单 缺点:非恶意买家会被限制下单,销量会降低 4.2 标识恶意买家 通过历史订单的情况、买家设备指纹(user_agent等),来标识恶意买家。缺点是可能存在误标。 5 实战:具体实现思路 商品的库存用Redis的hash结构存起来,通过incrby指令加减库存;扣减库存时,采用预扣库存的思路,先扣减Redis中的库存,剩余库存的数量大于0,表明预扣成功,否则回滚库存(Redis要回滚库存,然后抛异常,不持久化数据库库存);如果Redis预扣库存成功,则持久化库存到数据库,否则抛异常。更新数据库的库存时,直接使用update语句update t_sku_inventory set inventory = inventory + quantity where id = xxx; 流程图如下图所示:

Java笔记八(instanceof,类型转换,static详解,抽象类,接口,内部类以及异常)

instanceof 引用类型,判断一个对象是什么类型 使用方法: System.out.println(X instanceof Y); 代码理解: public class Application { public static void main(String[] args) { //Obiect>String //Obiect>Person>Teacher //Obiect>Person>Student Object object=new Student(); System.out.println(object instanceof Student); System.out.println(object instanceof Person); System.out.println(object instanceof Object); System.out.println(object instanceof Teacher); System.out.println(object instanceof String); System.out.println("=========================="); Person person=new Student(); System.out.println(person instanceof Student); System.out.println(person instanceof Person); System.out.println(person instanceof Object); System.out.println(person instanceof Teacher); //System.out.println(person instanceof String);编译报错 System.out.println("========================="); Student student=new Student(); System.out.println(student instanceof Student); System.out.println(student instanceof Person); System.out.println(student instanceof Object); /*System.

python爬虫实战——小说爬取

python爬虫实战——小说爬取 基于requests库和lxml库编写的爬虫,目标小说网站域名http://www.365kk.cc/,类似的小说网站殊途同归,均可采用本文方法爬取。 目标网站:传送门 本文的目标书籍:《我的师兄实在太稳健了》 “渡劫只有九成八的把握,和送死有什么区别?” 基本思路 网络爬虫的工作实际上主要分为三个部分: 获取网页内容,通过requests库实现;解析网页内容,得到其中我们想要的部分,通过lxml库实现;将解析出的内容储存到文本文档中; 接下来看看我们的需求是什么: 获取目标书籍的基本信息,包括书籍的书名、作者、最近更新时间和简介——这些信息应该都在同一个页面中获取,即目标书籍的主页; 获取目标书籍每一章节的标题和内容——不同章节在不同的页面,不同页面之间可以通过下一页按序跳转; 正文部分的存储格式应便于阅读,不能把所有文字都堆积在一起,也不能包括除了正文之外的其他无关内容; 因此,我们首先尝试请求书籍的主页,获取基本信息,借此学习请求和解析网页内容的基本方法;紧接着再从书籍的第一章开始,不断地请求“下一页”,直到爬取所有内容,并将它们以合适的格式储存在文本文档中。 首页爬取与解析 首页链接:http://www.365kk.cc/255/255036/ 目标内容在网页中的位置 首先,我们观察一下该网站不同的书籍主页: 可以看出:不同书籍的主页具有非常相似的结构——标题、作者、最近更新时间、最新章节和正文都在相同的位置上。 如何表征这一位置?这就需要借助python爬虫中常用的网页解析方法——XPath语法。 以书名为例,在你的浏览器(以Google Chrome为例)中选中书名,点击右键 -> 检查: 可以看出,浏览器下方弹出了一个窗口,这里显示的就是该页面的源代码,我们选中的内容位于一个<h1>标签中。我们点击右键 -> 复制 -> 复制 XPath,即可得到书名的XPath路径,也就是书名在网页中的位置。 从书籍的首页中,我们需要获取的信息主要包括: 书名作者最后更新时间简介 按照上述方法,分别获取它们的XPath路径,依次如下: /html/body/div[4]/div[1]/div/div/div[2]/div[1]/h1/text() /html/body/div[4]/div[1]/div/div/div[2]/div[1]/div/p[1]/text() /html/body/div[4]/div[1]/div/div/div[2]/div[1]/div/p[5]/text() /html/body/div[4]/div[1]/div/div/div[2]/div[2]/text() /text() 表示获取文本 现在,我们得到了想要的内容在网页中的位置,只要请求到网页内容,就可以获取指定位置的内容了。 请求网页内容 我们使用比较基础的python爬虫网页请求方法:使用 requests 库直接请求。 这里涉及到了简单的反爬虫知识:在请求网页时,我们需要将我们的爬虫伪装成浏览器,具体通过添加请求头 headers 实现。 请求头以字典的形式创建,可以包括很多内容,这里只设置四个字段:User-Agent, Cookie, Host 和 Conection。 headers= { 'User-Agent': '...', # 你的浏览器User-Agent 'Cookie': '...', # 你的浏览器Cookie 'Host': 'www.365kk.cc', 'Connection': 'keep-alive' } 既然是为了伪装成浏览器,相关字段的内容当然要从浏览器中获取。 在刚才打开的页面中,我们点击 网络(英文版是Network),刷新页面,找到其中的第一个文件 255036/ ,打开 标头 -> 请求标头 ,即可得到我们想要的字段数据,如下图所示。

SqlServer删除作业报错

标题: Microsoft SQL Server Management Studio ------------------------------ 删除 对于 Job“完整备份.Subplan_1”失败。 (Microsoft.SqlServer.Smo) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.6000.34+((KJ_SP3).140819-1214+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=删除+Job&LinkId=20476 ------------------------------ 其他信息: 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo) ------------------------------ DELETE 语句与 REFERENCE 约束"FK_subplan_job_id"冲突。该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans", column 'job_id'。 语句已终止。 (Microsoft SQL Server,错误: 547) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.6000&EvtSrc=MSSQLServer&EvtID=547&LinkId=20476 解决方案: use [msdb] declare @job_name varchar(100) set @job_name = N'jobName' --注:jobName为维护计划对应的jobName --删除在计划里面的日志 delete sysmaintplan_log from sysmaintplan_subplans as subplans inner join sysjobs_view as syjobs on subplans.job_id = syjobs.job_id inner join sysmaintplan_log on subplans.subplan_id =sysmaintplan_log.subplan_id where (syjobs.name = @job_name)

VS Code中格式化插件Prettier-Code Formatter配置安装

第一步:点击扩展,搜索Prettier,Prettier块右下角会显示安装字样,点击安装。 第二步:点击左下角的设置图标,然后点击设置字样。 第三步:在弹出的界面上方输入settings,然后点击蓝色字体【在settings.json中编辑】这里会显示多个,点击哪个都行。 第四步:在界面输入以下代码 /* prettier的配置 */ "prettier.printWidth": 100, // 超过最大值换行 "prettier.tabWidth": 4, // 缩进字节数 "prettier.useTabs": false, // 缩进不使用tab,使用空格 "prettier.semi": true, // 句尾添加分号 "prettier.singleQuote": true, // 使用单引号代替双引号 "prettier.proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 "prettier.arrowParens": "avoid", // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 "prettier.bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }" "prettier.disableLanguages": ["vue"], // 不格式化vue文件,vue文件的格式化单独设置 "prettier.endOfLine": "auto", // 结尾是 \n \r \n\r auto "prettier.eslintIntegration": false, //不让prettier使用eslint的代码格式进行校验 "prettier.htmlWhitespaceSensitivity": "ignore", "prettier.ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中 "prettier.jsxBracketSameLine": false, // 在jsx中把'>' 是否单独放一行 "

APP 备案公钥、签名 MD5获取方法。

一、IOS 系统获取 Bundle ID、平台公钥、签名 MD5 值的指引 获取 Bundle ID:使用 APP 对应的 IOS 开发者账号登录 Developer 控制台,找到下图标识符(英文),单击进入 Certificates,Identifiers&Profiles 页面。 在 Certificates,Identifiers&Profiles 页面,单击 Identifiers,其中 IDENTIFIER 列对应的就是 Bundle ID。如下图所示: 获取公钥与签名 SHA1 值:在计划资源中,单击证书(英文),进入 Certificates 页面。 在 Certificates 页面,可查看证书详情,并下载 APP 对应的证书。 window系统双击打开.cer证书文件在详细信息页面即可查看公共密钥以及sha1指纹