Linux进行模型微调前的环境准备

在Linux机器上对模型进行微调前,首先需要准备环境,即安装相关的软件。因为linux是一个无界面操作系统,软件安装完成后,还需要有便捷的交互方式编写脚本,调试脚本。此篇博客将专门介绍如何快速安装所需依赖软件,以及如何用jupyter notebook进行便捷的交互式编程。 申请设备 此篇博客申请的设备是AWS上的g5系列,如果你使用的是其他云厂商服务,选择带GPU的instance即可。博客里面选用的操作系统是Ubuntu22版本,属于Debian系列,架构是x86-64的架构。在申请设备的时候,为了方便从外面通过ssh连接instance,enable了public IP的分配。对模型微调需要很多磁盘空间存储下载的模型参数文件,所以,在申请instance的时候尽量将磁盘空间设置大一些,我自己设置的是256G。如果不清楚使用的instance的架构,可通过下面的命令查看,另外,还可以通过命令查看ubuntu的版本信息。 #查看架构 dpkg --print-architecture #查看ubuntu版本信息 lsb_release -a aws上申请好instance后,需要提前安装好gcc,安装命令: sudo apt-get update && apt-get install gcc 检查gcc是否安装成功的命令: gcc -version 安装NVIDIA驱动 安装cuda driver的命令如下所示,非常简单。 #安装包管理,即生成相应的key,以后在安装Nvidia的相关包时,会进行安全相关的检查,保证安装的包是受到官网认证的包 distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g') wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb #安装cuda-driver sudo apt-get update sudo apt-get -y install cuda-drivers 执行命令后,用 nvidia-smi 命令进行检查,通过命令可以看到GPU相关信息,包括版本,显存大小等,具体如下图所示: 安装conda 在进行模型微调或者微调评估时,除了用到常用的pytorch包外,还可能用到NumPy,Pandas等包,所以,这里选择安装Anaconda,而不是Miniconda。安装脚本如下所示: #安装其他的一些依赖包 apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 #下载安装脚本 curl -O https://repo.

【C语言】浮点数的存储和精度丢失

目录 前言整数存储浮点数的存储浮点数存储的过程浮点数取的过程 题目解析 前言 本章节我们来讲讲在C语言当中浮点数是如何存储的,为什么有的浮点数我们通过打印,会存在打印不完整,丢失精度的现象。我们来看一段关于浮点数存储和整数存储的代码: #include<stdio.h> int main() { int n = 9; float* pFloat = (float*)&n; printf("n的值为:%d\n", n); printf("*pFloat的值为:%f\n", *pFloat); *pFloat = 9.0; printf("num的值为:%d\n", n); printf("*pFloat的值为:%f\n", *pFloat); return 0; } 这段代码运行之后输出结果是什么呢? 为什么 *pFlaot = 0.000000 为什么num = 1091567616 这就需要我们通过底层的浮点数存储和整数存储来解释。 整数存储 整数的存储就是用简单的二进制来存储,存储的是二进制的补码,但是打印的是二进制的原码,正数的原反补码都相同,但是负数的补码为原码取反加1,因为前些章节讲过,不过多解释整数的存储。 浮点数的存储 浮点数的存储是根据国际标准IEEE(电器和电子工程协会)754的规定来存储的,规定如下: 举例来说: 十进制的5.5,写成二进制是101.1,相当于1.011x2^2. 那么,按照上面V的格式,可以得出S=0,M=1.011,E=2。 十进制的-5.5,写成二进制是-101.1,相当于-1.011x2^2。那么,S=1,M=1.011,E=2。 IEEE 754规定: 对于32为的浮点数(flaot),最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。 对于64位的浮点数(double),最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。 浮点数存储的过程 IEEE 754 对有效数字M和E,还有一些特别的规定 前面说过,1≤M<2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。IEEE 754 规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01时候,只保存01,等到读取的时候,再把第一位的1加上去,这样就能节省一个有效数字。以32位浮点数存储为例,留给M只有23位,将第一位的1舍去之后,等于可以保存24位有效数字。 为什么M位数越多,精度越高呢? 这里要讲到浮点数的小数位到底是怎么计算的,他不是简单整数位的二进制运算,就拿5.5和5.75为例:他们的二进制分别为101.1和101.11 所以小数点后面数字,是前一位数字除以2的结果,这就有可能存在,某一些小数通过二进制无法准确表示,总会相差一点点,就是无法用准确的二进制表达出来 所以当我们M的位数越多,那么小数越精确,所以我们省下第一位的1这样在float浮点数存储下就能保存24位有效数字。 对于指数E,情况比较复杂,首先E是一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0-255;如果E为11位,他的取值范围为0-2047.但是我们知道,科学计数法中的E时可以出现负数的,例如:0.11的二进制科学计数法为:1.1*2^-1,这里E是-1,就是负数,所以IEEE 754 规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。我们还用5.5来举个例子: 那么到底是不是这样存储的呢?我们用VS2022来求证一下

ElementUI的Table组件行合并上手指南

ElementUI的Table组件行合并 ,示例用官网vue3版的文档 <el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px"> <el-table-column prop="id" label="ID" width="180" /> <el-table-column prop="name" label="姓名" /> <el-table-column prop="amount1" label="数值 1(元)" /> <el-table-column prop="amount2" label="数值 2(元)" /> <el-table-column prop="amount3" label="数值 3(元)" /> </el-table> export default { data() { return { tableData: [ { id: '12987122', name: '王小虎', amount1: '234', amount2: '3.2', amount3: 10, }, { id: '12987123', name: '王小虎', amount1: '165', amount2: '4.43', amount3: 12, }, { id: '12987124', name: '王小虎', amount1: '324', amount2: '1.

GitOps实践指南:GitOps能为我们带来什么?

Git,作为开发过程中的核心工具,提供了强大的版本控制功能。即便在写代码的时候稍微手抖一下,我们也能通过 Git 的差异对比(diff)轻松追踪到庞大工程中的问题,确保代码的准确与可靠。这种无与伦比的自省能力,不仅提高了工作效率,也带来了极大的安全感,让一切都有迹可循。 如果上面的这些能力在运维上也能实现,是不是稳定性会特别好,变更时候想出故障都难?任何非预期的变化都能通过diff对比出来?是的。GitOps就是基于这些触发点而产生的。2017年Weaveworks的CEO Alexis Richardson 提出了这个概念:通过一个模型抽象使得整个系统的操作变得自动化,使用Git来承载这个模型。 不过这么多年过去了,GitOps相关的产品和平台层出不穷,除了WeaveWorks,似乎大家对GitOps各有各的理解和实践:似乎解决了一些问题,但似乎又没完全解决。那么,问题到底出在哪里?GitOps到底能为我们带来些什么?本文尝试展开讲讲这个问题。 首先,我们先从日常的工作开始思考,我们到底希望GitOps帮我们实现哪些目标?我先列了三个目标,大家看看是不是也有类似的想法: 变更自动化:只要把代码提交到git中,就进行自动构建、自动测试、自动部署,不要让我到处点按钮。变更代码化:变更到底会变哪些东西,影响哪些基础设施,能否直接在代码中就能看出?不要在一句“风险可控”背后藏着一个没人能理得清的操作流程。变更透明化:变更信息中包含所有的源码变化,不要包含一些无法展开的引用关系:比如容器镜像tag变化需要有对应的构建源码的变化。 带着这三个目标,我们先去找找业界对于GitOps的定义,看看是否能找到一些线索: 一、GitOps是什么 云原生基金会(CNCF)在2021年成立了一个OpenGitOps工作组,旨在推广GitOps的最佳实践。在这个工作组的官网首页放着四条GitOps的原则: Declarative:声明式Versioned and Immutable:版本化且不可变Pulled Automatically:自动拉取Continuously Reconciled:持续调和 这四条原则基本是WeaveWorks的GitOps定义的一个深化,而且较多地推荐使用Flux进行GitOps实践,有关这块介绍,我们会在第三章展开。鉴于这个工作组中能得到的有效信息实在太少,我们继续寻找业界有关GitOps的介绍。 GitLab出版过一本电子书叫《A beginners guide to GitOps》(下载地址在参考材料中),在书中提出了一个概念公式:GitOps = IaC + MRs + CI/CD。这个概念就比前面的GitOps四原则更具体一些了: IaC (Infrastructure as Code): 指出GitOps管理模型就应该是IaC,这比原则中的Declarative更进了一步:这不仅仅是关于声明性配置,而是关于将整个基础设施的管理嵌入到代码之中,从而实现更精确和可重复的部署过程。MRs (Merge Requests):明确指出,在 GitOps 中,管理动作不是通过直接提交代码来完成,而是通过一系列的合并请求(Merge Request)。这种方法允许进行更深入的风险评估和审计,在代码合并到生产环境之前确保质量和安全。CI/CD (Continuous Integration/Continuous Delivery):GitOps 的最终目标是实现代码的自动化集成和持续交付:既确保严格的测试验证,又能加速开发周期,保持高质量和稳定性。 在第四章,我们会展开说说如何基于这个公式去进行GitOps实践。 本来我的觉得GitOps差不多概念也就这样了,基本上几大厂商的观点都看过了。没想到又在亚马逊上看到了一本书《Repeatability, Reliability, and Scalability through GitOps》(购买链接在参考材料中),阅读之后对于GitOps的认知又拓宽了不少,作者在书中提出了三种类型的GitOps: The Original GitOps: 原始GitOps,即k8s做IaC,然后落地GitOps的方案。The Purist GitOps: 纯粹GitOps,不一定基于k8s,但是基于某种IaC+GitOps进行落地的方案,使用终态的方式来进行管理。The Verified GitOps: 验证型GitOps,也不一定有终态管理,只要确保整个过程中有git diff能验证即可。 说实话,第三种类型的GitOps让我豁然开朗,这种GitOps确实更贴近实际落地:IaC的改造推广常常会有较大的成本,而在没有改造完之前,就不能享受GitOps带来的好处了吗?作者告诉我们一种选择,这种以验证为目的GitOps就行。 作者为了让我们更能深入地理解这个验证型GitOps,还画了一张流程示意图:红色部分为人工,绿色部分为自动。从图中可以看到,自动的流程在右侧自动流转,左侧分别是development、devops、sre三种角色在根据git diff进行验证审计。 二、Infrastructure as Code要怎么做 通过前面一些概念,我们能看到声明式&IaC在gitops中占据非常重要的部分。可以这样说,如果IaC无法承载所有的运维编排能力,运维编排需求可以会外溢到其他系统或平台上,那么这部分外溢的逻辑就无法使用Git来追踪了:所以这个IaC的声明式的编排能力会变得尤为重要。

WPF简要制作浏览器 WPF中使用WebView2控件 WPF 应用中的 WebView2 WPF集成WebView2 完整例子及Demo c#使用WebView2例子 WPF Chromium

下一篇 WPF与WebView2双向通信 WPF与javascript相互通信 在WPF中使用WebView2控件作为浏览器有以下优势: 现代浏览器引擎: WebView2基于Microsoft Edge(Chromium内核)浏览器,因此它可以利用最新的Web标准和功能。 跨平台支持: WebView2支持多种操作系统和框架,包括Windows 7、8、10以及.NET Framework、.NET Core、Win32 C/C++、.NET 5、.NET 6和WinUI 2.0/3.0。 无缝集成: WebView2可以轻松地嵌入到WPF应用程序中,提供一种混合本地应用和Web技术的开发方式,使得界面设计更加灵活。 代码复用: 已有的Web前端代码可以被重用在WebView2中,减少了开发时间和工作量。 本地API访问: WebView2允许调用完整的本地应用程序编程接口(API),使得Web内容能够与宿主操作系统进行深度交互。 更新和安全: WebView2依赖于定期更新和修复漏洞的Chromium内核,保证了浏览器组件的安全性和稳定性。 部署选项: 开发者可以选择使用带内核更新的部署或者固定版本内核部署,以适应不同的应用需求和更新策略。 丰富的API支持: WebView2提供了数百个API,涵盖了从增强本机平台功能到修改浏览器体验的各种功能。 微软官方支持: WebView2由微软持续更新和维护,具有正式的GA(General Availability)版本,为开发者提供了可靠的技术支持。 增强的用户体验: 使用WebView2可以在桌面应用程序中提供类似Web的用户体验,同时还能根据需要定制和扩展浏览器功能。 通过这些优势,WPF中的WebView2控件使得开发者能够利用成熟的Web技术构建和维护桌面应用程序,同时享受本地应用的性能和功能。这不仅简化了开发过程,还为用户提供了一种更加一致和现代化的交互体验。 例子完整下载 https://download.csdn.net/download/weijia3624/88669533 <Window x:Class="WPF_WebView2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPF_WebView2" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" mc:Ignorable="d" WindowStartupLocation="CenterScreen" Title="WPF_WebView2" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid Grid.Row="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="70"/> </Grid.ColumnDefinitions> <Grid Grid.Column="0"> <TextBox x:Name="inputUrl" VerticalContentAlignment="

常用css

布局 display: flex 让div排一横排,内部元素指定宽度 外边框 margin :2px 四周 2px 3px 上下2左右3 2px 3px 4px 上右下左。顺时针 margin-left: -10px;让元素叠加 内边框 padding 同上 元素对齐 vertical-align: top;垂直向上齐 按钮美化 border: 1px solid transparent 透明 显示边框 border:1px solid red; 红色边框 相对位置 position:absolute 圆角div border-radius:4px; border-top-left-radius:4px

SpringBoot入门

目录 1.SpringBoot简介 (1)什么是SpringBoot (2)特点 2.SpringBoot快速入门 (1) 创建SpringBoot项目 (2)选择所需要的依赖 (3)项目目录介绍 (4)配置修改 (5)启动SpringBoot 3.SpringBoot与其他项目整合 (1)整合JDBC (2)整合Druid数据库连接池 (3)整合MyBatis (4)整合Log日志 1.SpringBoot简介 众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是Spring Boot。 只是为了提升Spring开发者的工具,特点:敏捷式、快速开发。 (1)什么是SpringBoot Spring Boot 是由 Pivotal 团队提供的全新框架,2014 年 4 月发布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0发布。它是对spring的进一步封装,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。怎么简化的呢?就是通过封装、抽象、提供默认配置等方式让我们更容易使用。 SpringBoot 基于 Spring 开发。SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。 关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,所有你想集成的常用框架,它都有对应的组件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 应用中这些第三方库几乎可以零配置地开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

echarts柱状图点击事件

常规事件 但是此方法在没有数据时点击事件不生效。 myChart.on('click',params => { console.log(params.value); }); ``` ## 百度出的事件 ```javascript async function initEchart() { var chartDom = document.getElementById('mychart'); var myChart = echarts.init(chartDom); let data = []; let valueData=[]; let nameData = []; await proxy.api.apiInfogetDustRelatedProcess().then((res) => { if (res.success) { for (let i of res.data) { valueData.push(i.dustRelatedProcessType); nameData.push(proxy.funEcho(i.dustRelatedProcessType, state.dust_technology)); i.industryType = proxy.funEcho(i.dustRelatedProcessType, state.dust_technology); data.push(i.dustRelatedProcessNum); } } }) const option = { tooltip: { trigger: 'axis', }, xAxis: { //valueData 我自己存数据需要用的单独加的 valueData:valueData, type: 'category', data: nameData, axisLabel: { show: true, color: "

SAP ABAP 编程规范

转自: ABAP 编程规范 1. 针对名称 1.使用描述性名称 2.首选解决方案域和问题域术语 3.使用复数形式 4.使用能读出来的名称 5.避免缩写 6.在各处使用相同的缩写 7.用名词表示类而用动词表示方法 8.避免干扰词,例如,data,info ,object 9.每个概念选取一个词 针对变量 1.REF TO 优先于 FIELD-SUMBOL 表 1.insert into table 优于 append to 2. line existe 优于 read table 3. read table 优于 loop at 4. LOOP AT where 优于嵌套式if 5. 避免不必要的表读取 布尔值 1.用ABAP_BOOL 表示布尔值 2.使用 ABAP_TRUE 和 ABAP_FALSE进行比较 条件 1.尽量使条件为正 2.IS NOT 优于NOT IS 3.考虑分解复杂条件 4.考虑提炼复杂条件 if 语句 1.无空的IF分支 2.对于多个备选条件,CASE 优于 ELSE IF 正则表达式 1.

分布式数据库 GaiaDB-X 通过 GB18030-2022《信息技术 中文编码字符集》最高级别认证

近日,百度智能云分布式数据库GaiaDB-X通过 GB18030-2022《信息技术 中文编码字符集》强制性国家标准测试,达到最高实现级别(3级)。 据了解,GB18030-2022《信息技术 中文编码字符集》是中文信息技术领域最重要的基础性标准,对汉字和我国多种少数民族文字进行了统一编码。新版《信息技术 中文编码字符集》强制性国家标准于 2023 年 8 月 1 日正式实施,共收录汉字 87887 个,比上一版增加录入了 1.7 万余个生僻汉字,可覆盖我国绝大部分人名、地名用生僻字以及文献、科技等专业领域的用字,能够满足各类使用需求,为传承中华文化、增强中文信息处理能力、满足姓名生僻字人群用字需求提供强有力的标准保障。 标准要求,GB/T 4754《国民经济行业分类》中所有行业领域用于政务服务和公共服务的信息技术产品和信息化系统强制执行最高实现级别(3 级),包含全部 87887 个汉字。百度智能云 GaiaDB-X 经过严苛测试已达到该级别,有力支撑政府、金融、运营商等行业客户的标准适配和业务发展,助力语言文字信息技术标准化,推动我国信息技术和数字经济高质量发展。 百度智能云分布式关系型数据库(GaiaDB-X) 分布式关系型数据库(GaiaDB-X)V3.0 产品是国产自主可控的交易型数据库,通过普通的服务器集群构建大规模、高性能的分布式业务系统,其兼容 MySQL/Oracle,具备金融级高可用、两地三中心容灾、弹性扩展等能力,满足金融、政府、能源、制造、物流等行业核心场景需求。 产品特性 高可用:GaiaDB-X 采用分组强同步架构和自动故障切换机制,保障在”同城多机房”、”两地三中心”场景的服务高可用,当主库(主机房)出现故障时,能够快速(RTO < 30s)进行故障切换,整个故障切换过程自动且业务透明。可扩展:GaiaDB-X 支持平滑的水平扩展和垂直扩展,水平扩展可线性提升集群整体容量和吞吐性能,垂直扩展可以提升指定节点的服务器配置,从而提升容量和性能。同时,在扩容过程中对业务几乎无感,可在业务高峰期弹性扩展,轻松应对业务浪涌。强兼容:GaiaDB-X 支持 SQL92/03 语法,支持分布式事务、分布式 JOIN、全局唯一 ID 等分布式特性,业务应用可以通过 JDBC/ODBC 等接口协议访问 GaiaDB-X,使用过程与单机数据库高度统一。易运维:GaiaDB-X 提供可视化的运维管理平台、智能诊断平台,运维平台主要提供集群的生命周期管理、库表创建、账号权限管理等能力,便于业务研发人员快速的管理数据库实例;智能诊断平台帮助用户对数据库可用性、容量、性能、一致性、安全等方面进行全面的智能分析评估优化,重点解决数据库运维、问题排查、性能诊断和数据库安全等方面问题。 本次百度智能云 GaiaDB-X 产品以最高实现级别通过新国标认证,充分印证了百度智能云数据库高度满足各类系统的文字处理需求,能够为用户提供良好的中文使用体验。未来,百度智能云数据库将深入推进相关标准的贯彻与实施,提升数据库产品中文信息处理水平,为我国语言文字信息技术产业高质量发展提供助力。

云原生数据库性能对比(阿里云、百度智能云、腾讯云)

本文作者 LYZ 近些年,云原生数据库成为云厂商的重要发展方向,阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库。笔者认为云原生数据库具有更高的性价比、更极致的弹性,可以满足业务发展的不同阶段和负载场景的需求,也是云数据库从托管开源数据库到原生化自研的必然发展。 笔者一直非常深度关注、调研和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。所以,近期对各个云数据库厂商做了一个较为系统的性能对比,供开发者和企业在云数据库选型时的参考。 笔者在进行大量测试之后,对主要的云厂商分别选择了“主流规格”(适合生产环境配置的)进行了对比,综合性能结果是阿里云 PolarDB > 百度智能云 GaiaDB > 腾讯云 TDSQL-C,详细测试数据对比见下图: (蓝色:百度智能云 GaiaDB 红色:腾讯云 TDSQL-C 绿色:阿里云 PolarDB) 测试方案 测试环境 厂商 虚机客户端 云原生数据库信息 阿里-PolarDB 地域/可用区:华北2(北京) 客户端:32核64GB 实例镜像:CentOS 8.2 64位 网络:云服务器 ECS 和云原生数据库集群在同一私有网络(VPC) 内核版本:mysql8.0.2 实例类型:独享型 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G 节点个数:一主一只读 腾讯-TDSQL-C 地域/可用区:北京 客户端:32核64GB 客户端操作系统:CentOS 8.2 64位 网络:云服务器 CVM 和云原生数据库集群在同一私有网络(VPC) 内核版本:mysql8.0 实例类型:独享型 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G 节点个数:一主一只读 百度-GaiaDB 地域/可用区:华北-北京 客户端:32核64GB 客户端操作系统:CentOS 8.2 64位 网络:云服务器BCC和云原生数据库集群在同一私有网络(VPC) 内核版本:mysq8.0.18 实例类型:独享型 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G 节点个数:一主一只读 测试工具 sysbench工具介绍:SysBench 是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。sysbench官方文档 sysbench版本: 1.0.20版本 sysbench测试模型: sysbench 标准 OLTP 读写混合场景中一个事务包含18个读写 SQL。

推荐 13 款炫酷的 IDEA 主题插件

One Dark Theme 推荐指数:⭐⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/11938-one-dark-theme 效果展示 Dracula Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12275-dracula-theme 效果图展示 The Doki Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/10804-the-doki-theme 效果图展示 Solarized Themes 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12784-solarized-themes 效果图展示 Atom OneDark Theme 推荐指数:⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12178-atom-onedark-theme 效果图展示 Cyan Light Theme 推荐指数:⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12102-cyan-light-theme 效果图展示 Darcula Darker Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12692-darcula-darker-theme 效果图展示 Monocai Color Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12163-monocai-color-theme 效果图展示 Atom One Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/14799-atom-one-theme 效果图展示 Xcode-Dark Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/13106-xcode-dark-theme/versions 效果展示 Vuesion Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12226-vuesion-theme 效果图展示 Dark Purple Theme 推荐指数:⭐⭐⭐⭐ 下载地址:https://plugins.jetbrains.com/plugin/12100-dark-purple-theme/versions 效果图展示 Gradianto 推荐指数:⭐⭐⭐⭐

JavaScript 工具库 | PrefixFree给CSS自动添加浏览器前缀

新版的CSS拥有多个新属性,而标准有没有统一,有的浏览器厂商为了吸引更多的开发者和用户,已经加入了最新的CSS属性支持,这其中包含了很多炫酷的功能,但是我们在使用的时候,不得不在属性前面添加这些浏览器的私有前缀,这样的代码量一下就大了不少。 为了解决这个问题,国外的牛人开发了了一个 -Prefix-free 的插件,能够自动给我们添加这些前缀,我们仅仅需要编写一次代码,无需在考虑是否兼容其他浏览器,而且如果后面浏览器支持这个属性了,我们只需要移除 -Prefix-free 即可,都不需要修改CSS代码。 简介 -prefix-free 是一个 JavaScript 工具库,你只要在网页引入这个插件即可,无需任何配置和函数调用,-prefix-free在幕后工作,将当前浏览器的前缀添加到任何CSS代码中。 特征 在网页解析的过程中,自动给样式表<link>和<style>内的元素添加一个浏览器厂商CSS3前缀。过程元素的一个风格属性和增加供应商前缀在需要的地方。兼顾新的<link>或<style>元素,style属性的变化而变化(requires plugin)让jQuery的css(),方法获取和设置属性(requires plugin) 局限性 前缀代码在 @import-ed 文件中不支持前缀跨来源链接的样式表是不支持的无前缀的链接样式表不工作局部在Chrome和Opera。没有前缀价值观在内联样式,不支持IE 和 Firefox 3.6 版本以下的浏览器。 如何使用 在页面中引入 prefixfree.js 建议把它放在样式表的后面。 <script src="http://leaverou.github.com/prefixfree/prefixfree.min.js"></script> 然后你就可以在你的网页中、Style文件里面尽情的编写你的CSS代码,无需担心浏览器兼容问题,另外jQuery的 .css() 方法也会自动补上浏览器前缀,让响应的浏览器支持该CSS3属性,使用非常之轻松惬意。prefixfree.min.js 的用途 相关链接 Github地址:https://github.com/LeaVerou/prefixfree 有一些API函数可供使用项目地址:https://www.wenjiangs.com/wp-content/uploads/2017/06/prefixfree/

Awesome-Robotics-Foundation-Models

大模型的出色能力有目共睹,而如果将它们整合进机器人,则有望让机器人拥有一个更加智能的大脑,为机器人领域带来新的可能性,比如自动驾驶、家用机器人、工业机器人、辅助机器人、医疗机器人、现场机器人和多机器人系统。大模型+机器人,详尽的综述报告来了,多位华人学者参与 预训练的大型语言模型(LLM)、大型视觉 - 语言模型(VLM)、大型音频 - 语言模型(ALM)和大型视觉导航模型(VNM)可以被用于更好地处理机器人领域的各种任务。将基础模型整合进机器人是一个快速发展的领域,机器人社区最近已经开始探索将这些大模型用于感知、预测、规划和控制等机器人领域。 近日,斯坦福大学和普林斯顿大学等多所大学以及英伟达和 Google DeepMind 等多家企业的一个联合研究团队发布了一篇综述报告,总结了基础模型在机器人研究领域的发展情况和未来挑战。 论文地址:https://arxiv.org/pdf/2312.07843.pdf 论文库:https://github.com/robotics-survey/Awesome-Robotics-Foundation-Models 团队成员中有很多我们熟悉的华人学者,包括朱玉可、宋舒然、吴佳俊、卢策吾等。 在范围广泛的大规模数据上预训练的基础模型在微调之后可以适用于多种多样的下游任务。基础模型已经在视觉和语言处理方面取得了重大突破,相关模型包括 BERT、GPT-3、GPT-4、CLIP、DALL-E 和 PaLM-E。 在基础模型出现之前,用于机器人的传统深度学习模型的训练使用的都是为不同任务收集的有限数据集。相反,基础模型则是会使用大范围多样化数据进行预训练,在其他领域(比如自然语言处理、计算机视觉和医疗保健)的应用证明了其适应能力、泛化能力和总体性能表现。最终,基础模型也有望在机器人领域展现出自己的潜力。图 1 展示了基础模型在机器人领域的概况。 相比于针对特定任务的模型,从基础模型迁移知识有可能减少训练时间和计算资源。尤其是在机器人相关领域,多模态基础模型可以将从不同传感器收集的多模态异构数据融合和对齐成紧凑的紧凑同质表征,而这正是机器人理解和推理所需的。其学习到的表征可望用于自动化技术栈的任何部分,包括感知、决策和控制。 不仅如此,基础模型还能提供零样本学习能力,也就是让 AI 系统有能力在没有任何示例或针对性训练的前提下执行任务。这能让机器人将所学知识泛化到全新的用例,增强机器人在非结构化环境中的适应能力和灵活性。 将基础模型整合进机器人系统能提升机器人感知环境以及与环境交互的能力,有可能实现上下文感知型机器人系统。 举个例子,在感知领域,大型视觉 - 语言模型(VLM)能够学习视觉和文本数据之间的关联,从而具备跨模态理解能力,从而辅助零样本图像分类、零样本目标检测和 3D 分类等任务。再举个例子,3D 世界中的语言定基(language grounding,即将 VLM 的上下文理解与 3D 现实世界对齐)可以通过将话语与 3D 环境中的具体对象、位置或动作关联起来,从而增强机器人的空间感知能力。 在决策或规划领域,研究发现 LLM 和 VLM 可以辅助机器人规范涉及高层规划的任务。 通过利用与操作、导航和交互有关的语言线索,机器人可以执行更加复杂的任务。比如对于模仿学习和强化学习等机器人策略学习技术,基础模型似乎有能力提升数据效率和上下文理解能力。特别是语言驱动的奖励可通过提供经过塑造的奖励来引导强化学习智能体。 另外,研究者也已经在利用语言模型来为策略学习技术提供反馈。一些研究表明,VLM 模型的视觉问答(VQA)能力可以用于机器人用例。举个例子,已有研究者使用 VLM 来回答与视觉内容有关的问题,从而帮助机器人完成任务。另外,也有研究者使用 VLM 来帮助数据标注,为视觉内容生成描述标签。 尽管基础模型在视觉和语言处理方面具备变革性的能力,但对于现实世界的机器人任务来说,基础模型的泛化和微调依然颇具挑战性。 这些挑战包括: 1) 缺少数据:如何为机器人操作、定位、导航等机器人任务获取互联网规模级的数据,以及如何使用这些数据执行自监督训练; 2) 巨大的差异性:如何应对物理环境、实体机器人平台和潜在的机器人任务的巨大多样性,同时保持基础模型所需的通用性; 3) 不确定性的量化问题:如何解决实例层面的不确定性(比如语言歧义或 LLM 幻觉)、分布层面的不确定性和分布移位问题,尤其是闭环的机器人部署引起的分布移位问题。 4) 安全评估:如何在部署之前、更新过程中、工作过程中对基于基础模型的机器人系统进行严格测试。 5) 实时性能:如何应对某些基础模型推理时间长的问题 —— 这会有碍基础模型在机器人上的部署,以及如何加速基础模型的推理 —— 这是在线决策所需的。 这篇综述论文总结了当前基础模型在机器人领域的使用情况。他们调查了当前的方法、应用、挑战,并建议了解决这些挑战的未来研究方向,他们也给出了将基础模型用于实现机器人自主能力的潜在风险。

接口安全检查

目录 1. 概述2. 方案2.1. 身份校验(认证)2.2. 权限控制(鉴权)2.3. 脱敏2.4. 加密2.5. 请求频率限制 3. 补充说明3.1. 个人信息 1. 概述 接口安全检查: 是发现和消除事故隐患、落实安全措施、预防事故发生的重要手段。 保障数据安全:通过检查接口,可以验证数据的完整性和安全性,确保数据在传输和存储过程中不被篡改或窃取。防止非法访问:通过接口安全检查,可以验证请求的合法性,防止未经授权的访问和操作,保护系统的安全和稳定。提高系统可靠性:接口安全检查可以发现并解决潜在的安全漏洞和问题,从而提高系统的可靠性和稳定性。增强用户体验:通过接口安全检查,可以减少系统被攻击的风险,避免因安全问题导致的服务中断或数据泄露,从而增强用户体验。满足合规要求:随着对数据安全和隐私保护的要求越来越严格,接口安全检查可以帮助Java项目满足相关法规和标准的要求,避免因安全问题导致的法律风险和罚款。提升开发效率:通过自动化接口安全检查工具,可以提高测试效率和准确性,减少人工测试的工作量和时间成本。 重要检查对象: 自己开发维护的接口提供给第三方使用的接口第三方提供的接口的调用 2. 方案 2.1. 身份校验(认证) 身份校验: 接口是否登录才可访问。 案例: 有一个可通过手机号查询用户个人信息的接口,并且没有设置任何身份验证措施。 张三就可以根据手机号去获取到用户信息,再去倒卖盈利。 检查方法: 接口是否做了身份校验(账号密码、token令牌、手机验证码、人脸识别等)调用后台接口的时候身份校验项是否非必传参数 解决方案: JAASSpring Security自定义的身份验证:如加一个签名拦截器(Intercepter),没有带签名参数的访问直接拦截使用第三方身份验证提供商 2.2. 权限控制(鉴权) 角色鉴权: 当前用户是否具有调用某个接口的权限,如果没有那就不能调用接口。比如root用户拥有系统的所有权限,可以对系统进行任何操作,但普通用户只有部分权限。 案例: 张三注册了一个网站用户,发现有个接口,只要传入用户账号,就能查询到此用户实名信息,张三就可以通过此接口倒卖信息获利。这就是没做权限限制,理应是管理员的权限才能调用的接口,普通用户也可以使用。 检查方法: 是否存在水平越权:同一级别的用户A和B,A能否将接口的关键信息换成B的从而直接调用B才能调用的接口是否存在垂直越权:C是A下面的子用户,A能否将接口的关键信息换成C的从而直接调用C才能调用的接口检查代码是否仅通过传入的参数来判断查询的数据,而没有校验用户是否有该数据的查询权限 解决方案: 权限控制: Spring Security等框架来实施细粒度的权限控制自定义鉴权逻辑 数据加密: 对敏感数据进行加密存储,确保即使数据被窃取,也不能直接访问 最小权限原则: 为每个应用或服务提供所需的最小权限,避免不必要的权限提升 2.3. 脱敏 数据脱敏: 对敏感数据的隐藏、加密或替换,以确保数据在传输、存储和使用过程中的安全性。 案例: 张三发现某网站有个中奖榜单,会展示中奖用户的手机号和身份证号等信息,但这些信息都做了脱敏处理,无法获取到确切的信息。但他通过访问这个榜单的后台接口,发现Response中的数据没有脱敏,他就可以以此获取所有中奖人的信息,从而获利。 检查方法: 不需要展示敏感信息的接口的出参就别传敏感信息;需要展示敏感信息的接口要对敏感数据进行加密、替换或隐藏后再返回Response重点检查Response中有没有未脱敏的敏感数据非必要情况,不得提供批量导出敏感信息的模块,检查系统是否有相关模块设计 解决方案: 用户需要知道完整敏感数据: 对敏感数据进行二次验证 用户不需要知道完整敏感信息: 仅返回业务必须的最少信息,不能将所有信息全部返回到 前台 2.4. 加密 数据加密: 通过加密算法对接口传输的数据进行加密处理,以防止数据在传输过程中被窃取或篡改。 案例: 张三通过互联网系统漏洞,获取到某服务器 A 的权限,通过 ARP 欺骗,模拟网关,抓取整个网段的网络流量,发现某些系统未使用 https 加密传输,分析 http 流量收集到大量用户账号信息等,整理收集到的信息生成定制化字典,对其他服务器进行爆破攻击,最终获取到核心服务器权限,造成严重安全事故

Vue2(十二):Vuex

一、Vuex 1.Vuex的环境搭建 1.1安装vuex 安装:npm i vuex@3 注意Vue2一定要安装vuex3,如果是vue3可以直接npm i vuex安装的是vuex4,可以去package.json文件里看下vue的版本是啥,千万别输错了,不然会陷入痛苦的报错…… 1.2.创建store文件 创建文件:src/store/index.js 在此文件中引入插件并使用vuex插件,使用vuex插件必须在引入store之前,如果在main.js中引入和使用vuex的话,由于js文件里所有的import语句都会提升到最开始执行,所以会报错滴。总结:引入store必须在Vue.use(Vuex)之后 //该文件用于创建Vuex中最为核心的store //引入Vue import Vue from 'vue'; //引入Vuex import Vuex from 'vuex';//引入插件并使用插件 Vue.use(Vuex); //使用插件后就可以在vm,vc里使用store配置项 //准备actions,用于响应组件中的动作 const actions = {}; //准备mutations,用于操作数据(state) const mutations = {}; //准备state,用于存储数据 const state = {}; //创建store const store = new Vuex.Store({ actions: actions, mutations, //简写 state //简写 }); //导出store export default store; 1.3.main.js引入store JS执行的时候会把import提升到顶部,与摆放顺序无关,如果放在main.js里 import store from './store' 无论放到哪里都会比Vue.use(Vuex)先执行,要想把 Vue.use(Vuex) 要放到实例化之前只有放进index.js //js文件里所有的import语句都会提升到最开始执行 // 引入Vue import Vue from 'vue'; // 引入App import App from '.

HIVE笔记

Impala VS Hive https://www.cnblogs.com/Denghejing/p/15797905.html Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。 与Hive的关系 Impala 与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数 据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Impala与Hive在Hadoop中的关系如下图所示。Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数 据分析工具。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。 Impala相对于Hive所使用的优化技术 1、没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比:Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使用拉式获取 数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免 每次执行查询都需要启动的开销,即相比Hive没了MapReduce启动时间。 2、使用LLVM产生运行代码,针对特定查询生成特定代码,同时使用Inline的方式减少函数调用的开销,加快执行效率。 3、充分利用可用的硬件指令(SSE4.2)。 4、更好的IO调度,Impala知道数据块所在的磁盘位置能够更好的利用多磁盘的优势,同时Impala支持直接数据块读取和本地代码计算checksum。 5、通过选择合适的数据存储格式可以得到最好的性能(Impala支持多种存储格式)。 6、最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。 Impala与Hive的异同 数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。 元数据:两者使用相同的元数据。 SQL解释处理:比较相似都是通过词法分析生成执行计划。 执行计划: Hive: 依赖于MapReduce执行框架,执行计划分成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会 被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。 Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的 map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。 数据流: Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。 Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。 内存使用: Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。 Impala: 在遇到内存放不下数据时,当前版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一 定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。 调度: Hive: 任务调度依赖于Hadoop的调度策略。 Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。调度器 目前还比较简单,在SimpleScheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前 Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。 容错: Hive: 依赖于Hadoop的容错能力。 Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败, 再查一次就好了,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个 Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不 会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。 适用面: Hive: 复杂的批处理查询任务,数据转换任务。 Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

Flink

FLUME VS KAFKA flume和kafka区别(4大区别详解) – mikechen

TypeScript 安装步骤以及报错处理

TypeScript 安装步骤以及报错处理 全局安装 # npm 安装 npm i -g typescript # yarn 安装 yarn global add typescript # 部分mac电脑安装需要sudo权限 # sudo npm i -g typescript # sudo yarn global add typescript 安装报错处理: 报错:npm WARN notsup Unsupported engine for typescript@5.3.3: wanted: {“node”:“>=14.17”} (current: {“node”:“12.22.2”,“npm”:“6.14.13”}) npm WARN notsup Not compatible with your version of node/npm: typescript@5.3 解决:这种情况是说当前node版本比较低,不支持当前typescript的版本,此时切换node 版本即可解决问题(装了nvm的使用命令nvm use node版本号 切换版本号) 报错:Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules 解决:这是文件没有root权限的问题,在运行语句前面加上sudo就行了 sudo npm install -g typescript

HSDALFTDTYTRLRKQMAMKKYLNSVLN-NH2,96886-24-7,血管活性肠肽VIP, guinea pig

VIP Guinea pig TFA (Vasoactive intestinal peptide) 是一种营养和有丝分裂因子,可刺激胚胎生长。VIP Guinea pig 是一种简单的胃肠激素,具有神经递质的功能。 编号: 192401 中文名称: 血管活性肠肽VIP, guinea pig 英文名: VIP, guinea pig 英文同义词: Vasoactive Intestinal Peptide, guinea pig TFA CAS号: 96886-24-7 单字母: H2N-HSDALFTDTYTRLRKQMAMKKYLNSVLN-NH2 三字母: H2N-His-Ser-Asp-Ala-Leu-Phe-Thr-Asp-Thr-Tyr-Thr-Arg-Leu-Arg-Lys-Gln-Met-Ala-Met-Lys-Lys-Tyr-Leu-Asn-Ser-Val-Leu-Asn-NH2 氨基酸个数: 28 分子式: C147H239N43O42S2 平均分子量: 3344.86 精确分子量: 3342.73 等电点(PI): 11.79 pH=7.0时的净电荷数: 6.21 酸性基团个数: 4.1 碱性基团个数: 亲水 平均亲水性: -0.039285714285714 疏水性值: -0.62 外观与性状: 白色粉末状固体 消光系数: 2980 来源: 人工化学合成,仅限科学研究使用,不得用于人体。 纯度: 95%、98% 盐体系: 可选TFA、HAc、HCl或其它 储存条件: 负80℃至负20℃

EasyExcel详解(结合官方文档)

EasyExcel 零、前言 文章是根据官方文档,加上自己的测试运行总结出来的,目前只总结的EasyExcel读的部分,写的部分还未完结,后续会更新 1、官方文档 https://easyexcel.opensource.alibaba.com/ 2、EasyExcel的maven依赖 <!--Easy Excel--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version> </dependency> 一、具体使用演示&说明 1、读Excel 1.1 简单的读 创建一个读取对象,存储读取的内容 /** * 读对象 * @author banana * @create 2023-12-26 11:39 */ @Data //生成getter、setter、toString、equals、hashCode等方法 public class ReadDemoData { private String string; private Date date; private Double doubleData; } 创建一个读的监听器 package com.example.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.metadata.CellExtra; import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; import com.alibaba.fastjson2.JSON; import com.example.model.pojo.ReadDemoData; import lombok.extern.slf4j.Slf4j; import java.util.List; import java.util.Map; /** * * @author banana * @create 2023-12-26 11:50 */ @Slf4j //Lombok 注解之一,它可以帮助我们在 Java 类中自动添加日志记录功能 public class ReadDemoDataListener implements ReadListener<ReadDemoData> { //每隔100条存储数据库,然后清理list,方便内存的回收 private static final int BATCH_COUNT = 100; //缓存数据 private List<ReadDemoData> cachedDataList = ListUtils.

ubuntu开放root远程登录

修改 ssh_config 文件 编辑sshd_config文件,我们输入: $ sudo vim /etc/ssh/sshd_config 添加允许 #PermitRootLogin without-password PermitRootLogin yes 重启 ssh 服务 接着我们需要重启ssh服务,输入: /etc/init.d/ssh restart $ sudo /etc/init.d/ssh restart

yolov5的安装与使用(图文结合版)

相比于Yolov4 ,v5的模型更多,适用配置的设备更广泛。 window环境下,首先安装anaconda,便于创建pytorch环境。安装直接百度。 第一步:从github下载压缩包 https://github.com/ultralytics/yolov5 如果英语看着费劲,可以参考这个博主的汉化版 :https://github.com/wudashuo/yolov5 下载好zip压缩包,解压之后放入一个工程目录,准备开始第二步。 第二步:下载依赖 首先,在anaconda中创建环境。 打开anaconda的命令行 创建环境名 比如叫yolov5 conda create -n yolov5 进入环境 activate yolov5 然后cd到工程目录下面 开始下载环境所需的依赖了。 然后输入命令 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple, 等待pip自动下载所需要的依赖。-i 参数是从清华镜像中下载依赖包,如果不加,则从国外源下载,不仅速度慢,还容易下载失败。 当所有依赖下载完成,可以开始第三步了。 第三步:下载权重文件 在https://github.com/ultralytics/yolov5/releases中下载4个权重文件,放到工程路径下的weights文件夹中。 一般这四个就够用了,s是最小的,速度最快,但是精度不高。 第四步 测试detect.py 在工程文件在运行cmd。 然后输入python detect.py --source 0 --weights=“weights/yolov5s.pt” (如果设备有摄像头) 或者python detect.py --source=“data/images/bus.jpg” --weights=“weights/yolov5s.pt”(设备没有摄像头) 前者会打开摄像头并实时探测物品,后者将用工程自带的一张测试图片进行测试。运行结束后,会打印结果文件的位置。在这个位置中可以找到测试结果。 结束摄像头进程 按ctrl+c即可,runs文件夹下有检测的结果。、 如果检测时的帧率只有几帧,也就是时间时0点几秒一张,多半时GPU没有使用。 检查自己的GPU是否可用 In [1]: import torch In [2]: torch.cuda.current_device() Out[2]: 0 In [3]: torch.cuda.device(0) Out[3]: <torch.cuda.device at 0x7efce0b03be0> In [4]: torch.

webstorm配置less,完整的目录树效果

webstorm 2023.3.2 配置less 1. npm下载less2. webstorm配置less效果1:最基本的配置,满足使用实际效果 效果2:less文件和css文件分成两个目录生成实际效果 效果3:实现完整的目录树实际效果 自定义效果 1. npm下载less 在webstorm的终端输入以下的命令:npm install -g less 下载完成后,记录下载位置,我的下载位置是在: C:\Users\用户名\AppData\Roaming\npm\node_modules\less 可以按照上述路径找到less的位置,我是通过npm找到的less的位置,上述路径换掉用户名应该就能找到 2. webstorm配置less 打开webstorm设置——工具——File Watcher,点击“ + ” ,选择Less模板 效果1:最基本的配置,满足使用 如图所示,右侧的文件 找到lessc.cmd,点击确定 此时点击确定即可完成less最基本的配置(此处我也有个不太懂的地方,上面选择了lessc.cmd,但是下面也只显示lessc,但实际上还是要选择lessc.cmd) 实际效果 按照上述步骤,在.less输入代码,会实时编译为.css(如果没有生成.css文件,那就等待一会,有时候生成挺慢的)。而.css以及生成的.css.map和.less是在同一目录下的 效果2:less文件和css文件分成两个目录生成 程序依旧找到并选择lessc.cmd修改实参和要刷新的输出路径里面的内容不懂得中间步骤的请查看文章上面的最基本的配置,满足使用 实参 $FileName$ $FileParentDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css --source-map 要刷新的输出路径 $FileParentDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css $FileParentDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css.map 实际效果 实现这个效果必须要先新建一个less目录,然后在这个less目录里面新建.less文件,webstorm会自动在同级目录下,生成css目录,以及相应的.css文件(如果没有生成.css文件,那就等待一会,有时候生成挺慢的) 效果3:实现完整的目录树 程序依旧找到并选择lessc.cmd修改实参和要刷新的输出路径里面的内容不懂得中间步骤的请查看文章上面的最基本的配置,满足使用 实参 $FileName$ $ProjectFileDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css --source-map 要刷新的输出路径 $ProjectFileDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css $ProjectFileDir$\css\$FileDirPathFromParent(less)$\$FileNameWithoutExtension$.css.map 实际效果 实现这个效果只能在项目的根目录下新建less目录,然后在less目录里面,无论你怎么新建目录,webstorm都能按照less的目录树,新建相同的css目录树(如果没有生成.css文件,那就等待一会,有时候生成挺慢的) 自定义效果 其实还能实现更多效果,可以点击右侧“ + ” ,然后跟看文档一样,选择相应的参数。

软件设计之SOLID原则

文章目录 SOLID原则⭐(SRP) 单一职责原则 Single Responsibility Principle⭐(OCP) 开闭原则 Open Closed Principle⭐(LSP) 里氏替换原则 Liskov Substitution Principle⭐(ISP) 接口隔离原则 Interface Segregation Principle⭐(DIP) 依赖倒置原则 Dependency Inversion Principle 《敏捷软件开发 - 面向对象设计的原则》🏷️REP 重用发布等价原则🏷️CCP 共用重用原则🏷️CRP 共用封闭原则🏷️ADP 无依赖原则🏷️SDP 稳定依赖原则🏷️ASP 稳定抽象原则 李建忠 课程的资料🔖优先使用对象组合,而不是类继承🔖封装变化点🔖针对接口编程,而不是针对实现编程 END SOLID原则 ⭐(SRP) 单一职责原则 Single Responsibility Principle 一个类或模块,应该仅有一个引起它变化的原因 变化的方向隐含着类的责任。如果这个类包含两个或者多个不相干的功能,那么这个类的职责就不够单一。 ⭐(OCP) 开闭原则 Open Closed Principle 对扩展开放,对修改关闭 类模块应该是可扩展的,但是不可修改。在程序需要进行拓展的时候,不要去修改原有代码,实现一个热拔插的效果。 ⭐(LSP) 里氏替换原则 Liskov Substitution Principle 子类必须能够替换它们的基类(IS-A) 继承表达类型抽象替换后保证原来程序的行为不变及正确性不被破坏子类可以特化或者扩展父类功能,但不能改变父类原有功能子类继承父类时,除添加新的方法完成新功能外,尽量不要重写父类的方法 ⭐(ISP) 接口隔离原则 Interface Segregation Principle 不应该强迫客户程序依赖它们不用的方法 接口属于客户,不属于他所在的类层次结构。接口应该小而完备。一个类对于另一个类的依赖应该建立在最小的接口上。 ⭐(DIP) 依赖倒置原则 Dependency Inversion Principle 抽象不应该依赖细节;细节应该依赖于抽象

(QMake) 库的操作

文章目录 预备目录结构Code *.pro.qmake.confqtlib.procreator/creator.prouser/user.pro END 预备 目录结构 采用一个顶级工程qmake,管理两个子工程。 root:. │ .qmake.conf │ qtlib.pro │ ├─creator │ creator.pro │ mywidget.cpp │ mywidget.h │ └─user main.cpp user.pro Code 测试代码非常简单。但关键是需要使用Qt库中的内容。 比如这里用了最具代表的QWidget。 user/main.cpp #include <QApplication> #include "mywidget.h" int main(int argc, char** argv) { QApplication app(argc, argv); MyWidget myWidget; myWidget.show(); return app.exec(); } creator/mywidget.h #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = nullptr); }; #endif // MYWIDGET_H creator/creator.

Webstorm添加外部库获得代码提示、自定义引入库、找到下载的库

以引入Vue2的cdn为例子,发现没有代码提示 webstorm引入外部库获得代码提示 第一种方法(最便捷) 1. 如果是新引入的链接,Webstorm会出现黄色波浪线提示你下载库,我们直接点击“下载库” 2. 下载后发现已经有代码提示,且webstorm不报错误了 第二种方法(手动添加) 1. 这种办法我们必须先把使用的外部库提前下载,并且放到一个我们可以记得住、找得到的目录。这里,我已经提前下载好了文件 2. 然后我们打开webstorm:设置——语言和框架——Jacascript——库 3. 点击右侧添加 4. 名称自己起一个看得懂的,可见性:我也不太懂 5. 点击“ + ”号,然后选择附加文件或者附加目录,此处我选择的是附加目录 6. 我们找到第1步下载好的,存放外部库的目录,然后依次点击所有确定,保存好设置 7. 最后我们可以在webstorm左边目录(如下图所示)找到我们引入的外部库,此时已经成功引入外部库。 如果依然没有代码提示,可以重启webstorm,检查添加的附加文件或者附加目录是否有误 下图情况1,表示我们在第5步时,是以附加目录的方法添加外部库;情况2表示我们在第5步时,是以附加文件的方法添加外部库 webstorm怎么自定义是否引入外部库: 我们也可以在库中设置是否引入外部库,没有✔表示没有引入,则不会有代码提示。换新项目找不到引入库,可以来这里看看是否引入 webstorm怎么找到下载的外部库 第一种方法:在目录直接右键打开 第二种方法:按下图所示,找到对应的外部库,鼠标悬浮在上面,就会显示该文件所在目录

数据结构课程设计-宿舍管理查询软件-(C/C++)

目录 1. 系统需求分析 1.1 设计理由与意义 1.2 功能需求分析 1.3 数据需求分析 2. 系统设计 2.1 数据结构类型设计 2.2 整体功能结构设计 2.3 子模块详细设计 2.4 程序流程图设计 3.系统实现 3.1 系统源代码 4.运行效果截图(部分) 5.写在最后 1. 系统需求分析 1.1 设计理由与意义 宿舍管理查询软件是一个教育单位不可缺少的部分它的内容对于学校的决策者和管理者来说都至关重要所以宿舍管理查询软件应该能够为用户提供充足的信息和快捷的查询手段。以前各个学校的学生宿舍管理基本上都是靠手工进行,但随着各个学校的规模增大,有关学生宿舍管理工作所涉及的数据量也越来越大,有的学校不得不靠增加人力、物力来进行学生宿舍管理。这种管理方式存在着许多缺点,如:效率低、保密性差等,另外其所用时间长,产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。如今学校的学生越来越多,宿舍管理的工作量越来越大,手工管理宿舍信息的弊端也越来越明显。作为计算机应用的一部分,使用计算机对学生档案信息进行管理具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,能够极大地提高学生档案管理的效率。所以我想借本次课程设计之际,设计一个简易的宿舍管理查询软件。 1.2 功能需求分析 为方便学生宿舍信息的管理,设计一个宿舍管理查询系统,系统能输入每个人的基础信息,存入文件中进行归档;打印出文件中已存在的所有学生信息;可以根据学生的各种关键字对学生信息进行查找;能根据学号查找到学生信息后对学生信息进行修改或删除操作;也能够通过不同的方式对学生信息进行排序。 具体要求: 输入学生信息:输入学生的学号、姓名、性别、年龄、班级、宿舍号等各项基本信息,并能录入文件中存档。查询学生信息:采用顺序查找和二分查找两种方法对学生信息进行查找,能按学号、姓名等各项信息分别查找学生的完整记录信息。修改学生信息:能修改学生各项信息。删除学生信息:能删除任意个数的指定学生信息。打印学生信息:能够打印存储在数据库中的所有学生宿舍信息。排序学生信息:采用冒泡、选择和插入排序对学生信息进行排序。 1.3 数据需求分析 本次课程设计的题目是宿舍管理查询软件,要求可以存入学生信息,学生信息包括学生学号、姓名、班级、年龄、班级、宿舍号等各项基本信息,如下表1.1。该系统主要有以下六个功能,即对学生信息进行:输入、打印、查询、修改、删除、排序等功能。 数据结构的四种抽象类型分别是:集合结构、线性结构、树结构和网状结构,根据对该系统所需数据的分析,系统采用线性结构。顺序存储和链式存储是数据的两种最基本的存储结构,跟据用户的需求,学生宿舍管理系统的常见操作是查找、修改、筛选工作,而插入删除操作较少,所以,在本系统中采用存储密度大且能实现随机存取的顺序存储结构。 2. 系统设计 2.1 数据结构类型设计 为了对学生信息进行统一操作,使用了结构体这一数据结构,学生的各项数据信息都能用结构体来表示,具体设计如下: typedef struct Student { int StuId;//学生学号 char StuName[20];//学生姓名 char StuGender[10];//学生性别 int StuAge;//学生年龄 char StuClass[40];//学生所属班级 int StuRoom;//学生房间号 }Student; 该结构体数据定义为全局变量。 2.2 整体功能结构设计 模块功能描述: 1.系统登录模块:打开系统首先进入登录界面,正确输入系统口令后进入主菜单控制模块,如果五次口令输入错误则强制退出系统。 2.主菜单控制模块:主菜单直接控制六个模块,在各模块间起到纽带的作用。在主菜单,可以通过选择进入其他模块,其他模块运行结束后也可回到主菜单继续选择。 3.学生宿舍信息录入模块:初次打开系统,依次输入学生信息,建立学生宿舍信息数据库并保存文件,下次打开系统时,之前录入的信息依然存在并且可以选择继续输入或进行其他操作。 4.学生宿舍信息打印模块:打印出存储在学生宿舍信息数据库的所有学生的各项信息。 5.学生宿舍信息修改模块:根据学号查找到要修改的学生信息后,可对该学生的各项信息进行选择并修改,修改成功后可选择继续修改或返回主菜单。

音频筑基:码率模式CBR、VBR、CVBR一文说清

音频筑基:码率模式CBR、VBR、CVBR一文说清 是什么深入理解参考资料 在音频编码或者网络传输中,码率是我们经常遇到的概念,这里谈谈自己对CBR、VBR、CVBR模式的理解。 是什么 首先什么是码率,即指每秒传送多少比特的数据量,常用单位kbps。 码率的不同模式常见有: CBR,Constant Bitrate,定码率,常用于有互动低延迟的实时直播场景,适合编码,不适合存储VBR,Variable Bitrate,变码率,常用于点播场景(不在乎延迟,buffer大,经受得住网络抖动),适合转码Transcoding(视频商一般有视频提交后会云转码),较CBR质量更好CVBR,Constrained Variable Bitrate,受限变码率,常用于波动较小的网络传输场景,通过限制码率波动范围和比特池技术,保证平均码率恒定,同时又保证了编码质量 深入理解 码率跟传输速率的区别是? 相同点 单位都是一样的,如kbps,Mbps(宽带网速、涉及速度的都是kbps;流量计费的时候,实际下载速度的时候kBps) 不同点 码率指的是储存1s音频信息需要多大空间传输速率指的是1s内,传输管道能通过多少信息,常用单位的是Mbps。b是bit,B是Byte。宽带是100M,单位是bps;我们常用的流量计费方式或下载速度,都是KBps;相关转换要除以8 参考资料 CBR vs. VBR: The Difference Between Constant Bitrate and Variable Bitrate,linkVBR vs CBR for Video Streaming: Understanding the Difference,link

Python学习笔记(一)

写在前面 ​ 摸鱼时候发现大家现在普遍对python感兴趣,于是萌生了写这个文档的想法,希望能够帮助你加深一点对python编程语言的了解。我不生产知识,我只是一名勤劳的搬运工。本混子已经尽力搬运但文档内容有限,请配合网络资源食用。 ​ 暑假被学弟的几个问题问倒了,看来以后确实要好好学python辣,顺便采访了一下为什么想要学python,得到的答案大抵是想要学爬虫、很多人都在学不学就落伍了、python比较好入门之类的,果然越来越卷了。 一、什么是Python? ​ Python 是一种易于解释的高级面向对象的编程语言,它采用易于阅读的语法。Python 是一种提供原型和即席任务的理想方式,它广泛用于科学计算、Web 开发和自动化。作为通用、便于初学者使用的编程语言,Python 支持全球许多顶级计算机科学家和应用开发人员。 ​ 1989 年,Guido Van Rossum 在荷兰的一个计算机科学实验室工作。他决定写一种能够改善他时间最受欢迎的故障的语言。五年半后,他发布了这部声明,称其为“Python”。这是英国喜剧《 Monty Python 的飞马戏团》后,他是“Python”。 刚开始的时候进展缓慢,但当一名年轻的 Google 宣布其使用 Python 执行许多内部流程时,Python 取得了很大的休息。 ​ 2005 年,Python 发行了 Django,这是一个构建 Web 应用的框架。丹戈在流行性中爆炸,并前来挑战当时位于铁路框架上的主要 Ruby。 ​ 到 2011 年,Python 是全国计算机科学项目中最讲授的语言。几年后,由于其易于使用和可读性,它成为机器学习和人工智能领域研究人员的事实标准。 ​ 现如今,作为一个ICT从业者,如果你没听说过Python,那就太out了。作为现在最热门的程序语言,Python拥有超高的人气,可以说是IT界的新一代网红。尤其是Python和目前红得发紫的人工智能之间密切的关系,使得大家都对它投入了特别的关注。 二、为什么学Python? Python迅速走红的原因其实是多方面的,主要是以下几点: 容易上手,非常适合编程初学者作为启蒙的语言。 语法简洁易懂,有点类似英语的表达,很接近自然语言。 Python还有个昵称,叫“胶水语言”,是说Python可以很方便地调用别的语言(如C++、Java)编写的功能模块,将他们有机结合在一起形成更高效的新程序。 丰富、强大的库支持是Python的坚强后盾。 ​ Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库命名接口清晰、文档良好,很容易学习和使用。 ​ 如果对数据科学和机器学习有任何兴趣,可以进一步了解。 好了,话不多说,不管你有没有兴趣,接下来让我们继续深入了解一下吧 三、环境搭建 可参考自动化科协视频2022冬令营(1)——Python环境安装 Window 平台安装 Python ​ 需要到Python的官网上下载Windows系统的安装包就可以了。根据自己电脑的系统选择32位或者64位,x86 表示是 32 位机子的,x86-64 表示 64 位机子的。 记得勾选 Add Python 3.

软件测试自学还是报班好?

如果你学软件测试,是以就业为目的,而且是以高薪就业为目的,那我们就要去反推,为了这个目标,我们要去做什么事情。 为了“将高薪就业为目的,我们要做什么事情”阐述清楚,本文行文结构如下: 1、高薪取决于哪些环节? 2、各高薪环节要求如何?自学路径和培训路径,哪种更易达到? 一、高薪取决于哪些环节? 据黑马测试连续6年的就业工作总结,一个人能否高薪就业,主要取决于下面这4环。 第一,我们的技术符不符合要求, 第二,我有没有对应的项目经验, 第三,就是面试当中的沟通表达能力, 第四,学历要求。 PS:前面3项越强,学历要求会越低。反之也成立。学历越优秀,企业也可以放宽前面3项要求。 二、测试高薪对技术有什么要求? 1、若想高薪就业,企业对测试的技术要求 先来看下软件测试初、中、高各级别的对技术的要求。 1)初级测试的技术要求 初级功能测试阶段,掌握的技术只要能完成手工功能测试即可。 主要涉及的技术,都是测试流程里的核心,如1)需求评审 2)计划编写 3)用例设计 4)用例执行 5)缺陷管理 6)测试报告 初级要达成,需要结合具体项目。项目本身如果是有一定复杂度的,你却能梳理出合格的测试用例,提交合格缺陷,那你就可以满足该岗位了。 2)中级测试的技术要求 中级的前提是,初级的活你都要会,然后再这个基础上再补充一些知识。 补一些什么知识呢?中级里面更多的是当前市面上需要的自动化技术。比如说“一些自动化框架的这种设计跟搭建”,接口自动化,ui自动化... 中级的过程中,我们要解决更多的问题,一定需要代码能力的,否则就会“光发现问题,但解决不了”,那就很尴尬了。 总结: 1、中级虽没有提到手工,但中级的前提,一定是你对功能测试本身非常了解 2、中级和初级的区别,就是在自动化的要求上,中级阶段有明确的规定。 3) 高级测试的技术要求 高级层面上,最重要的点是,在初中级的基础上又对性能测试有要求。 所以如果你在性能上搞不定性能测试的情况下,很难晋升到高级。 4)当前市场对技术的真实要求 如果真想从事测试岗位,你如果只达到初级功能测试要求,就算这里面的技术都搞定了,在当前市场行情下,也难找到工作。因为现在的经济下行,各行各业都不好过,这个时候企业用人,就会找性价比更高的,企业会要求应聘人员具备自动化能力。所以大家想从事测试工作,在搞定功能测试基础上,希望你能够在学习一些自动化的东西,达到中级测试水平。 职友集招聘 2、若想达到企业要求的自动化测试技术,自学VS培训 现在测试岗位面试时一般要经过2-3轮,一些大的公司甚至需要4-5轮,像以前一样只面试一轮就发offer的情况已经很少见了。在多轮的面试过程中,你的技术水平会被准确的评估出来,运气的比重会越来越小。 如果你自律性好 AND 学习能力也强,自学其实也能有不错的结果。也可以从我这里拿到一些资料,完成自动化技术学习 反过来,如果你自律性不好 OR 学习能力不强,又想在半年左右时间达到高薪的中级测试水平,那可以考虑培训。培训可以提供学习氛围,包括老师的指导,同学的交流,这些都能让你高效完成学习过程。 如何评判自己是否有自律性,你可以回顾下自己自学的时候,会时不时看看网页,碰碰手机吗?如果真是这样,那你的自律性是不好的。 三、测试想高薪对项目有什么要求? 1、测试想高薪对项目有什么要求 项目是灵魂。 为什么说项目是灵魂呢? 面试有个基本常识:没有在项目中使用过的技术都不能算你会的技术,只是看看视频不可能真正理解技术的各种实际使用场景。 1)学习技术要通过项目去沉淀。 怎么才是把某项技术搞定,举例软件测试的基本功——测试用例,不是你简单学习,会填写模板就可以,而是你要借助具体的项目。项目里才会碰到比较复杂的需求,要结合项目去演练。比例说某个项目,有ABCDE好多功能,你可以不全测试,只挑选项目里的核心功能,试试拿到产品需求文档后,能否转换对应的测试用例。 举例你想参与银行的业务,那就要找个银行业务的项目。你会发现银行项目里面,你要写测试用例,需要补充很多知识,如会计知识,利息计算,存借款这些基本业务的知识。这类强业务的产品,你即便只做简单的手工测试,也得学习相关细节,才能开展用例设计。 技术本身当然是重要的,但学技术的目的一定是为了解决被测项目当中的技术问题。所以技术要达成,需要结合具体项目。 2)考察技术要通过项目去展示。 在项目中实战过,才能在面试的过程中去给别人讲出来。 可能大家没有经历够面试,说说面试。像技术岗位的面试,一般分为笔试面试。不一定所有的企业都有笔试(1/3的企业会设置笔试),但是所有企业100%一定会有面试。二者的区别是: 笔试,意味着考试,考察的就是我们一些基础的技术储备,考察技术基础怎么样。 面试,考察的是项目,不会有面试官脱离项目去问技术题。 举例测试用例方法——等价类,笔试中可能考察到,但是面试,没有企业会问这种问题。而是,面试官会这么说:你简历,有个短视频项目,能跟我讲讲你都考虑了哪些测试点,为什么要这么考虑测试点。你回答这个具体问题的过程中,谈到的测试点,测试维度,其实背后支撑的就是等价类这类用例方法和测试经验。面试官在听你讲这些的过程中,就能评估出你的技术储备到底是什么样的。 2、若想达到企业要求的项目水平,自学VS培训 求职中,面试是100%有。面试的基本问题就来自于项目。如果你自学,你也可以自己找开源项目,具体方法已经整理好,设计找项目,读项目,懂项目,写项目多个维度, 如果报班,项目就不用担心了,课程里面有大量的项目阶段实战 四、测试想高薪对沟通有什么要求? 沟通是助力。 为什么沟通是助力? 面试本质上来说就是向面试官推荐自己,想办法让面试官记住你,认可你,这是一个沟通交流的过程。 没有技术一定不能让面试官记住你认可你,有技术但是说不到点上,也同样无法吸引面试官; 只有具备了技术能力,同时能快速、准确的表达清楚,才能获得面试官的认可。 所以,一定要有意识的去训练“沟通”。

长三角地区城市公交车队向全电动车队更新的决策问题

长三角地区城市公交车队向全电动车队更新的决策问题 摘要 本文针对南京、杭州和上海三个城市的公交车队向全电动车队更新的决策问题,建立了一个基于成本效益分析的模型,计算了向全电动公交车队过渡所需的总成本、所能节省的总能源消耗和总排放量、所能改善的空气质量指数和健康影响、以及成本效益比和回收期等指标,并制定了一个 10 年的路线图,供城市交通部门参考。结果表明,向全电动公交车队过渡是一项有利可图的投资,可以为城市带来显著的生态和财务收益,提高城市的可持续性和竞争力。 关键词:电动公交车;成本效益分析;能源消耗;排放量;空气质量;健康影响 目录 文章目录 长三角地区城市公交车队向全电动车队更新的决策问题摘要目录引言背景问题重述文献综述主要贡献工作流程 假设和符号假设符号 模型准备模型建立和验证全电动公交车队过渡所需的总成本全电动公交车队过渡所能节省的总能源消耗和总排放量全电动公交车队过渡所能改善的空气质量指数和健康影响全电动公交车队过渡的成本效益比和回收期 模型结果和分析成本效益比和回收期路线图 模型优缺点致信参考文献附录附录 引言 背景 公交车是城市交通的重要组成部分,为市民提供了便捷、经济和环保的出行方式。然而,传统的内燃机公交车也会消耗大量的石油资源,产生大量的温室气体和有害物质的排放,对环境和人类健康造成不利的影响。因此,如何提高公交车的能源效率和减少公交车的排放量,是城市交通部门面临的重要挑战。电动公交车(e-bus)是一种使用电力驱动的公交车,相比于内燃机公交车,具有更高的能源效率和更低的排放量,可以有效地缓解能源危机和环境污染,提高城市的可持续性和竞争力。因此,许多城市都在积极地推进公交车队向全电动车队的过渡,以实现低碳交通的目标。本文的研究对象是南京、杭州和上海三个城市的公交车队,这三个城市都是中国的经济和文化中心,也都是中国的电动公交车的先行者和领导者。本文的目的是为这三个城市制定一个 10 年的路线图,供城市交通部门利用来规划他们的电动公交车车队更新,以实现向全电动公交车队的过渡,从而减少能源消耗和排放量,改善空气质量和健康状况,提高城市的可持续性和竞争力。 问题重述 建一个模型,帮助城市了解向全电动巴士车队转型的生态后果。选择一个人口至少为50万的都市区,该都市区目前没有完全电动的巴士车。将你的模型应用于你选择的地点。 建一个模型来关注向电动巴士转换的财务影响。 制定一个10年的路线图,让城市交通部门可以利用它来规划他们的电动巴士车队更新。 给一个选择的城市的交通官员写一封信,详细介绍你对他们向电动巴士过渡的建议。 文献综述 本文回顾了相关的文献,包括电动公交车的技术特性、优势和挑战,以及电动公交车的成本效益分析的方法和案例。本文发现,目前的文献主要集中在单个城市或国家的案例分析,缺乏一个通用的模型,可以适用于不同的城市和条件,同时考虑多个方面的影响,如能源消耗、排放量、空气质量和健康状况等。 主要贡献 本文的主要贡献是建立了一个基于成本效益分析的模型,综合考虑了电动公交车的价格、电池容量、充电时间、续航里程、电力来源、能源消耗、排放量、空气质量和健康影响等多个因素,计算了向全电动公交车队过渡所需的总成本、所能节省的总能源消耗和总排放量、所能改善的空气质量指数和健康影响、以及成本效益比和回收期等指标,并根据每个城市的实际情况和目标,制定了一个合理的更新计划。 工作流程 本文的结构如下:第二部分介绍了模型的假设和符号;第三部分介绍了模型的准备;第四部分介绍了模型的建立和验证;第五部分介绍了模型的结果和分析;第六部分介绍了模型的灵敏度分析;第七部分介绍了模型的优缺点和进一步讨论;第八部分是参考文献;第九部分是附录。 假设和符号 假设 为了简化模型的建立和计算,本文做出了以下假设: 假设每个城市的公交车队的规模、类型、平均年龄、平均行驶里程、平均油耗和平均排放量在 2023 年至 2033 年期间保持不变,不考虑公交车的新增或淘汰。假设每个城市的电动公交车的平均价格、平均电池容量、平均充电时间和平均续航里程在 2023 年至 2033 年期间保持不变,不考虑电动公交车的技术进步或成本下降。假设每个城市的电力来源的组成、价格和排放系数在 2023 年至 2033 年期间保持不变,不考虑电力来源的变化或优化。假设每个城市的空气质量指数(AQI)和相关的健康影响数据在 2023 年至 2033 年期间保持不变,不考虑其他污染源或干预措施的影响。假设每个城市的公交车队向全电动车队过渡的过程中,充电基础设施的建设和维护的成本可以忽略不计,不影响总成本的计算。假设每个城市的公交车队向全电动车队过渡的过程中,电力供应的清洁度和稳定性可以保证,不影响电动公交车的运行和排放的计算。假设每个城市的公交车队向全电动车队过渡的过程中,公交车的运营和服务的质量和水平不受影响,不影响市民的出行和满意度的评价。 符号 本文使用了以下符号: N i N_i Ni​:第 i i i 个城市的公交车队的总数, i = 1 , 2 , 3 i=1,2,3 i=1,2,3 分别代表南京、杭州和上海

rv1126-rv1109-以太网功能-eth-(调试篇)

先参考:以太网常见问题处理方法排查手册.pdf 调试指令: 1.首先dts修改 参考:Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf 2.芯片地址尝试匹配 0~3地址都试下 &mdio { phy: phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <0x0>; }; }; 3.检查io复用 find / -name pinmux-pins cat pinmux-pins 3.检查clock寄存器 find / -name clk_summary cat clk_summary 4.检查phy寄存器 find / -name phy_registers cat phy_registers 5.修改phy寄存器 busybox find / -name phy_registers找到phy_registers并进入该目录,修改示例: 修改扩展寄存器 echo 0x1e 0x50 > phy_registers //打开0x50寄存器,(0x1e,0x1f)是YT phy外部寄存器地址和值,要分开写 echo 0x1f 0x67 > phy_registers //把0x50的Bit6置1,其余位保持不变 修改0x00寄存器 echo 0x0 0x9140 > phy_registers //把0x00的Bit15置1软复位,其余位保持不变,寄存器修改生效 修改完看查看0x50寄存器是否修改成功 echo 0x1e 0x50 > phy_registers cat phy_registers 6.

Git的使用

一、Git概述 git 是一个代码协同管理工具,也称之为代码版本控制工具,代码版本控制或管理的工具用的最多的主要 是svn、 git 。 SVN 是采用的同步机制,即本地的代码版本和服务器的版本保持一致(提交版本时,直接 提交到服务器), 而git是采用异步机制(分为本地仓库和远程仓库),本地提交的版本不会影响服务器 的版本,只有本地的代码上传到服务器时才会同步。 git 是一个开源分布式版本控制系统,可用于高效的管理不同大小的项目, 05 年创造的,由林纳斯(Linux 之父)发明的。 git多人协同开发 代码版本管理工具主要的功能是多人协同开发,其作用: 防止代码丢失,可以做备份 代码版本的管理,可以进行多个版本之间的跳跃 可以方便的将代码在多人之间进行共享传输 多人开发时,有各种模式(分支、标签)可以方便代码管理 git 的特点 git 可以管理各种文件,特别是代码项目,多在 linux 和 unix 系统中使用 是分布式管理,不同于集中式,这是 git 和 svn 的核心区别 git 可以很好的支持分支,方便多人协作工作 git 分布式代码分家安全,有全球唯一的 commit 版本号 git 是开源的系统 使用 git 可以脱网工作 ( 本地仓库 ) ,且数据传输速度较快 Git的安装与应用 Window下git的安装 Linux下安装git 在 Ubuntu 系统下,基于 apt 安装 sudo apt install git -y git的配置 三个级别配置文件的路径: system (Linux /etc/gitconfig), global(~/.gitconfig), 本地配置(项目工程的配置, .

操作系统“文艺复兴”,云数智融合涌现“美第奇效应”

操作系统作为信息技术中的基础软件,是现代计算机的“灵魂”。随着大模型AI推动云计算、大数据、人工智能、物联网和5G等新一代数字技术的飞速融合,现代计算机体系结构和软件架构面临着重大创新机遇期。图灵奖获得者John Hennessy和David Patterson早在2018年就联合撰文指出:我们来到了计算机架构的文艺复兴时代。因为世界变化快,所以思考问题要回归第一性原理,要用新的眼光去重新看待旧事物。 今天,操作系统也在进入“文艺复兴”期,特别是云数智大融合的趋势下,操作系统正在焕发新的生命。作为全球第二大数字经济体,中国市场正在云数智大融合中涌现“美第奇效应”,那就是在万亿信创大潮中,越来越多的新芯片、新应用、新软件等正在互相交叉融合,为“旧事物”带来全新的能力与体验,在操作系统这样一个传统基础软件领域,正在进化出新物种。 2023年12月20日,在以“进化·向未来”为主题的2023操作系统产业大会暨统信UOS生态大会(以下简称2023生态大会)上,统信软件作为中国操作系统龙头厂商之一,首次披露了统信UOS AI架构,同时推出了支持云侧和端侧大模型接入的统信UOS AI V1.1版本,而填补国产生态空白的集成开发环境deepin-IDE已率先接入大模型并支持AI编程助手,国内首个系统级AI应用开发框架UOS AI API 1.0也在本次大会上正式开放…… 一年前,统信软件在全球首创了操作系统的“分层分类”体系架构,并采用BERT模型对软件包进行分类,该架构也成为了开源服务器操作系统龙蜥的核心理念。今天,虽然Windows操作系统和国际版Linux服务器操作系统仍占据主流市场份额,但跨越了移动互联网、云、终端、大数据、AI等众多领域的统信软件正在“美第奇效应”中,创造出新的操作系统。 多样性与包容性:操作系统的“灵魂” 操作系统实现了硬件和软件之间的有效“对话”,同时提供良好的用户体验。操作系统是现代计算机的“灵魂”,那么操作系统的灵魂是什么呢?那就是多样性和包容性。微软第三任CEO萨提亚·纳德拉上任之际,着手重新发现微软的灵魂,从第一性原理提炼出微软的灵魂是从产品设计之初就具备的多样性和包容性。作为最懂操作系统的商业公司,微软所提出的“多样性和包容性”,正是所有操作系统的“灵魂”。 进入云数智时代,国际操作系统因为既有的包袱而逐渐失去进化的动能。微软实际上是最大的单一生态的操作系统,直到2014年萨提亚·纳德拉上任才提出了“微软爱开源,微软爱Linux”,但已经错失智能手机市场。而国际Linux生态是由松散社区组成的创新者联盟,在商业化方面一直缺乏强有力的商业模式,停服或断供等也导致多样化和包容性创新的失效以及进化能力的弱化。 而安卓和iOS移动互联网操作系统的生态固然蓬勃发展,但显然在疫情后重返线下的情况下,用户对于生产力提出更高的要求,PC端和服务器端等线下终端,始终是更高生产力的选择。更进一步,PC端和服务器端正在反向要求打通与移动互联网生态的互联互通,跨平台的统一用户体验是对操作系统的全新要求。 与国际操作系统不同的是,中国操作系统正在迎来多样性和包容性的黄金时代,在中国市场除了全球各类硬件和软件生态外,中国信创产业正在激发中国芯、中国云、中国数据库、中国应用软件、中国规模的5G和AI场景等新生态家族,其中的一些成员已经冲到了全球市场前五甚至前三的位置。换言之,中国操作系统厂商目前的应用、兼容等虽然从数量无法与微软相比,但种类和场景的多样性和丰富度却有着自己的优势,从而倒逼出了新的操作系统思想——“分层分类”,进而推进多端操作系统的进化。 所谓“分层分类”,其核心思想是“垂直分层、水平分类、数据驱动、算法先行”。其中“分层”则分为内核层、核心层、系统层和应用层,“分类”则按形态、功能和场景进行分类,然后通过数据分析和BERT聚类算法对现有的开源软件进行分析,得出大概率的分层分类。简单理解,现有的Linux软件都有对不同软件包的依赖,但这些依赖关系都是由开发者自行选择,而且软件包的划分也是开发者自行决定,因此Linux开源软件的体系结构相当复杂且缺乏标准。“分层分类”就是发动整个Linux社区的力量,形成社区软件的标准体系架构,然后再按该架构进行后续的软件开发,从而为Linux世界建立新的秩序。 那么,为什么是统信软件提出“分层分类”思想呢?成立于2019年的统信软件正值全球市场环境动荡、百年未有之大变局之际,不仅有CentOS停服,也有Windows 7停服。统信软件在成立之初即收购了当前国内规模最大、最有影响力的开源操作系统深度(deepin)及其社区,随后于2022年宣布以deepin社区为基础,建设立足中国、面向全球的桌面操作系统根社区,deepin面向全球开发者和用户、基于deepin的统信UOS面向中国市场;同样在2020成立的开源服务器操作系统社区龙蜥,统信软件作为副理事长单位,从运营、技术、生态和商业等四大方向深度参与,并将“分层分类”思想应用于自研的根发行版Anolis 23版本,统信软件于2021年推出了基于龙蜥和OpenEuler双社区融合的服务器操作系统。 简单理解,统信软件没有历史包袱,其主要投资方又在智能汽车、智能终端、移动互联网和物联网等领域的操作系统层面形成了强有力的商业模式;而中国开源社区在2020年进入成熟阶段,2020年成立的国内首个开源软件基金会开放原子开源基金会,将中国开源事业推向了国家战略高度;深度社区、龙蜥社区、OpenEuler社区等都兼具国际影响力;再加上日新月异的中国信创新生态……这些都让统信软件有信心也有能力,在操作系统的“文艺复兴”时代,重新想像操作系统。 生态力量:中国操作系统的黄金时代 过去30年,中国操作系统实现了“从0到1”的跨越:桌面操作系统与服务器操作系统分别实现了从“能用”到“好用”的历史性跨越,桌面操作系统应用数量首次突破了关键值,服务器操作系统的稳定性远超国际Linux,IDE开发环境和运维工具链等也实现了“从0到1”……与此同时,中国数字新生态家族正在快速发展,再加上信创产业的万亿大潮,中国操作系统即将进入黄金时代。 在2023生态大会上,第三方权威机构发布的最新市场数据:统信UOS桌面端发货量超600万,市占率持续第一;统信UOS服务器端新增市场增速第一,中国70%党政、80%央国企、65%部委、90%金融、90%教育的核心与一般业务系统都运行在统信UOS之上。仅仅三年的时间,统信UOS就实现了桌面操作系统的市占率第一,尽管与Windows生态还存在数量级的差距,但统信UOS已经迈过了“能用”到“好用”的门槛;而龙晰操作系统服务器装机量现已超过600万,服务了金融、通信、能源、交通等众多行业超过80多万用户,位列用户迁移意愿榜首。 虽然统信UOS桌面操作系统是基于Deepin内核,但在社区版基础上进行了大量调整和适配工作,特别是加入了众多新功能、新元素、新设计,支持X86、ARM、alpha、MIPS、LoongArch等几乎所有芯片指令集,功能已超过了Windows7,达到了Windows10的水平。目前统信UOS桌面操作系统的软硬件适配数已突破500万,而当一个操作系统适配的软件超过300万时,就基本上可以满足绝大部分的用户需求,可以实现Windows替代。 统信UOS还在Windows平替方面做了更多工作,例如:在最新版本中最长支持255个中文或英文字符的文件名,满足党政企业对于长文件名的需求;更进一步,作为服务于行业用户的桌面操作系统,统信UOS需要实现对存量机器的兼容,也就是对各大企事业单位的存量机器“利旧”,让统信UOS能够顺畅跑在存量机器上,经过近几年的努力,统信UOS在存量5-10年机型上的安装成功率达到了95%,有的项目甚至达到99%,全面盘活了存量机器。 统信UOS通过UHQL(UOS硬件兼容认证体系)项目,制定在中国Linux操作系统平台上的硬件接口标准和外设标准。目前UHQL已有43家成员单位,10家完成了年度伙伴认证。UHQL三大主要方向为显卡、无线和蓝牙,包括中国GPU和WIFI 6芯片等认证。统信UOS在外设方面的利旧驱动已经支持超过了3000种,特别是已经支持超过90%的用户存量打印机和新打印机以及扫描仪等,通过外设驱动库与内置5000余种驱动,统信UOS目前支持3万多种外设硬件型号。此外,统信UOS还通过云打印的方式,提供与传统Windows连接打印机和扫描仪的方式几乎完全一样的体验。 值得一提的是,统信UOS桌面系统在V15版本后为面向桌面重新开发的版本,之前经历过WebOS阶段,也就是整个操作系统实际上是一个巨大的浏览器,而在V15版本后直到今天的V20版本,虽然是面向桌面进行重新开发,但依然继承了移动互联网的DNA,例如统信UOS的微信是原生微信应用,由腾讯、统信软件、龙芯、兆芯、飞腾等厂商联合开发与深度适配,而统信UOS上的有道云笔记、百度网盘、腾讯文档、石墨文档、飞书、腾讯会议、钉钉、美图秀秀等也都是原生应用,可以兼容适配几乎所有芯片指令集。 在生态互联方面,统信UOS也一直在探索打通手机与PC生态,最新推出的iTunes和VIVO互传,就打通了统信UOS与iOS及安卓生态,包括iPhone、iOS、VIVO手机等与统信UOS的数据互传,还可以通过互传进行多屏互动,将手机屏幕共享到统信UOS桌面。统信UOS智能终端版“有融视窗”则实现了在平板电脑上兼容PC端应用使用习惯,让Linux生态的应用与安卓生态的应用在平板电脑上并存,使用体验达到了原生体验,做到了多生态应用无缝融合于一体的无差异体验。 而统信UOS服务器版本实现了OpenAnolis和openEuler双社区融合,通过遵循分层分类的理念和算法,有效地完成双社区的底层和上层的软件包融合,让客户与服务商能够同时享受到双社区生态所带来的技术红利,获得更为多元化的技术体验。统信软件建立了完整的操作系统生产线,包括组件的集成工程、研发维护、门禁检查等。例如,集成工程就首先列出了双社区中完整的系统包清单和对应的详细信息,包括共有软件包和独有软件包的列表,以及引入独有软件包的原因等等。 除了统信UOS服务器版本,统信软件还推出了IaaS云管平台“统信有栈”,可为开源和商用IaaS平台提供替代方案,也可支持私有云建设、虚拟化平台建设、多云纳管等混合云IaaS场景;而统信UOS云原生版“统信有燕”是基于统信UOS服务器版本V20衍生而来,通过深度结合Kubernetes和容器技术,轻松搭建企业级容器云PaaS平台,满足企业业务上云需求;而统信UOS云原生版搭载统信UOS容器云管理平台产品,就形成了统信UOS容器云平台一体化解决方案,满足相关场景使用需求,包括容器云平台的平滑替换以及CentOS迁移和容器化改造等场景。 从前面提及的不同场景的统信UOS,可以看到统信软件的多样性与包容性“野心”,不仅是下一个微软,更是从端到服务器到云的全场景操作系统。这些还不包括对中国蓬勃发展新生态的包容:中国芯、中国云、中国AI、中国大模型、中国数据库、安全与合规等等,信创既是国家战略也是新生态,是全球操作系统生态不可或缺的新力量。 而中国新生态的成熟,也为中国操作系统提供了创新的机遇,例如:龙芯与统信UOS的持续兼容适配,构建了独立于X86和ARM的新型信息技术体系和产业生态,不仅解决了信创需求,更是从根本上掌握了从头开始完整构建自有芯片和操作系统的全过程,既培养了顶尖技术人才,更独立掌握了技术创新的方法论,实现从跟随创新到自主创新的跨越;统信UOS与飞腾、海光、兆芯、等芯片厂商都建立了联合生态实验室,与鲲鹏计算达成深度合作。 如今,中国操作系统已经走过了“从0到1”,接下来的“从1到N”就必须要激活开发者生态。统信软件在2023生态大会上首次推出《统信UOS开发者应用指南》,针对企业、组织和个人开发者、用户解决方案设计者、高校师生计算机专业人员,提供了中国操作系统原生开发的快速上手指引和实用实战指南。2023年9月,统信软件根社区deepin推出中国首款信创生态自研IDE,deepin-IDE的推出解决了面向中国操作系统的开发难题,释放了中国操作系统开发者的生产力,为全球提供了多样性选择。 在2023生态大会上,统信软件总经理刘闻欢表示:2023年将是中国操作系统开发者元年。实际上,以统信UOS所代表的中国操作系统,并不仅仅面向中国用户,而是面向全球用户,以及基于中国操作系统进行开发的全球开发者。正如同微软的“核心武器”Visual Studio激活了全球开发者生态,遍布全球的中国操作系统开发者将真正推动中国操作系统“从1到N”,打开中国操作系统的黄金时代。 大模型+OS:与全球操作系统同频创新 大模型AI正在重塑操作系统,以Copilot为代表的大模型AI为操作系统带来了全新的体验,微软正与OpenAI深度合作对操作系统“刷新”。而中国人才在大模型AI方面处于全球第二的水平,中国信创产业也在积极采用大模型AI。从终端到服务器到云,大模型AI都有望重塑全场景操作系统。而在大模型AI时代,中国操作系统更有机会与全球操作系统同频创新。 在2023生态大会上,统信软件首次亮相了UOS AI战略和AI架构。目前,统信UOS的AI战略是“AI+操作系统”,包括:CPU、GPU和整机AI PC层;AI框架与开发者工具层;云端大模型与本地模型层;面向开发者的API接入层UOS AI API 1.0;以及最上层的UOS AI系统助手。 在GPU方面,统信UOS与NVIDIA、摩尔线程、华为Ascend、芯动科技风华2号GPU等国内外GPU兼容,还支持国产工控GPU如天钧二号GPU等,统信UOS服务器版还支持Atlas训练卡和推理卡等。AI框架则支持Hugging Face、Azure OpenAI、Pytorch、TensorFlow等大模型与AI框架。AI开发工具方面则支持LLMOps平台dify ai、计算机视觉数据标注AI平台Landing AI等。在云侧和端侧模型接入方面,最新发布的UOS AI V1.1支持在线接入国内外主流大模型,包括百度千帆、讯飞星火、智谱、360智脑等;端侧接入文生图、语音、自然语言搜索、图片处理、图片分类等本地模型。 在应用接入方面,目前已有10+应用已接入UOS AI,通过本地模型和在线模型,UOS AI向各应用提供AI能力支持。deepin-IDE除了包含IDE常用功能,还支持AI编程助手、多种兼容协议、多种开发语言、代码版本管理集成等。此外,UOS的浏览器、全局搜索、邮箱、畅写等应用全面接入UOS AI,实现了应用体验的智能化升级。 统信UOS桌面智能AI助手,支持自然语言交互操作,覆盖打开应用、设置系统功能、创建日程等40+场景,支持知识问答、内容创作等。统信UOS服务器版还将AI与软件相结合,实现基于业务特征感知的智能资源调度,将合适的资源分配到合适的位置以执行合适的任务,从而提高人工智能计算的准确性和效率、降低性能损失、提高AI作业的整体效率。 可以看出,统信软件在大模型和AI方面,保持了与国际先进水平的一致,而由于自主掌握了操作系统的全部代码,已经能够实现各种“AI+操作系统”的场景。当然,所有的“AI+操作系统”场景都在安全合规的前提下实现:统信UOS通过UAPP(UOS主动安全防护)计划为用户提供更高的安全性,UAPP计划的伙伴规模超过130家,共享病毒样本规模突破250万,累计漏洞修复3600+;而集中域管平台是统信软件自主研发的一体化终端运维管理平台,为2+8+N各行业客户提供高效、安全、可靠的信创终端集中管控与运维,提升运维效率的同时又能降低成本投入;此外,统信ITSM智能服务管理平台还在不断提升统信软件的运维质量和效率…… 接下来就是推进UOS AI生态,让生态进一步推动UOS AI的进化。在生态共建的过程中,统信UOS AI注重与各行业、各领域的合作伙伴共同探索新的商业模式和创新模式。在2023生态大会上,统信软件与智谱、科大讯飞、360集团等大模型生态伙伴签署了“灯塔计划”。此外统信UOS 通过为开发者提供完善的开发工具和平台,降低开发门槛,鼓励更多的开发者参与到AI应用的开发和推广。 统信UOS致力于在2024年为广大开发者提供更好的开发体验,包括构建线上的开发平台以及提供类似MSDN的USDN开发者网络。同时,统信UOS还将进一步赋能开发者,为注册开发者提供统信UOS所有产品的免费授权、更易用的开发者网站、开放相关接口能力、提供开发者工具等,也将构建应用商店的分发和付费能力,帮助开发者构建商业应用。 “大模型+OS”是一个长期进化进程,从当前的“AI+OS”到未来用AI重塑操作系统,可以说为操作系统的“文艺复兴”指出下一个杰作的方向。作为中国及全球操作系统的代表之一,统信UOS无疑也将走上用AI重塑操作系统的创造之路。 【全文总结】全球计算机产业正处于“文艺复兴”兴起之机,摩尔定律等上一代信息技术逼近极限,大量新一代硬件、软件和应用不断涌现,大模型AI更打开了创新的“潘多拉魔盒”,而这一切又与国际供应链的停服或断供相叠加,就为中国操作系统打开了黄金时代的大门。以统信软件为代表的中国操作系统厂商,正在百年未有之大变局之际,创造出属于自己的新道路。信息技术是一个只尊重创新的领域,不断创新是唯一的生存方式。而云数智等新一代信息技术的大融合,加上中国的万亿信创产业,“美第奇效应”下必将出现新一代的操作系统杰出代表,以统信UOS为代表的中国操作系统,必将晋升全球一流行列!(文/宁川)

【Linux--多线程】

目录 前言一、线程的基本概念1.1什么是线程1.2线程的特点1.2.1线程的优点1.2.2线程的缺点1.2.3线程异常1.2.4线程用途 1.3进程与线程的区别 二、Linux线程控制2.1线程创建2.2线程等待2.3线程终止2.3.1return退出2.3.2 pthread_exit()2.3.3 pthread_cancel()2.3.4 pthread_detach()2.4线程ID与进程地址空间布局 前言 重谈地址空间–页表 一、线程的基本概念 1.1什么是线程 线程是进程内的一个执行分支,一个进程内有多行代码,线程通常情况下只执行这多行代码的部分代码。更准确的定义是:线程是“一个进程内部的控制序列”。 一个进程内至少有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流 操作系统中存在大量的进程,一个进程中又存在一个或多个线程,因此线程的数量一定比进程的数量多,很明显线程的执行粒度要比进程更细。 若一款操作系统要真正意义上支持线程,那么就需要对线程进行管理。比如创建线程、终止线程、调度线程、切换线程、给线程分配资源、释放资源以及回收资源等等,所有的这一套相比较进程都需要另起炉灶,搭建一套线程管理模块。 因此,若要支持真的线程一定会提高设计操作系统的复杂程度。在Linux看来,描述线程的控制块和描述进程的控制块是类似的,因此Linux并没有重新为线程设计管理模块,而是直接复用了进程控制块,即Linux中的所有执行流都是轻量级进程 但也有支持真正线程的操作系统,譬如Windows操作系统就存在专门描述线程的控制块,因此Windows操作系统系统的实现逻辑一定比Linux操作系统更为复杂 1.2线程的特点 1.2.1线程的优点 与进程切换相比,线程之间切换需要操作系统做的工作要少很多(cpu中有一个叫cache的寄存器,这个寄存器还是比较大的,里面缓存着热数据,这个热数据可以理解为高度频繁使用的数据,线程切换不需要重新加载热数据,而进程切换需要重新加载热数据)。创建一个新线程的代价要比创建一个新进程小得多线程占用的资源要比进程少很多能充分利用多处理器的可并行数量计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。 概念说明: 计算密集型(CPU密集型):执行流的大部分任务,主要以计算为主。如加密解密、大数据查找等 IO密集型:执行流的大部分任务,主要以IO为主。如刷盘、访问数据库、访问网络等 1.2.2线程的缺点 编程难度高:编写与调式一个多线程程序比较困难缺乏访问控制:在一个线程中调用某些OS函数会对整个进程造成影响。健壮性降低:编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,即线程之间是缺乏保护的,此外一个线程崩溃会导致整个进程崩溃性能损失:一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享同一个处理器。若计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失(即增加了额外的同步和调度开销,而可用的资源不变) 1.2.3线程异常 单个线程如果出现除零、野指针等问题导致线程崩溃,进程也会随着崩溃线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出 1.2.4线程用途 合理的使用多线程,能提高CPU密集型程序的执行效率合理的使用多线程,能提高IO密集型程序的用户体验(如生活中我们一边写代码一边下载开发工具,就是多线程运行的一种表现) 1.3进程与线程的区别 线程共享进程数据,但是也拥有自己的一部分数据: 栈、线程ID、一组寄存器(用来恢复上下文)、errno、信号屏蔽字、调度优先级 进程的多个线程共享同一块地址空间,如果定义一个函数、全局变量各个线程都可以访问,各线程还共享以下资源: 文件描述符、每一个信号的处理方式、当前工作目录、用户id和组id 二、Linux线程控制 在Linux中,站在内核角度上看并没有真正意义上线程相关的接口。但站在用户角度,当用户想创建一个线程时更期望使用thread_create这样类似的接口,而不是vfork函数,因此系统在应用层提供了原生线程库pthread。原生线程库实际就是对轻量级进程的系统调用进行了封装,在用户层模拟实现了一套线程相关的接口 用层指的是这个线程库并不是操作系统直接提供的,而是由第三方使用系统接口编写的原生指的是大部分Linux系统都会默认带上该线程库与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以"pthread_"开头要使用pthread库,要引入头文件<pthreaad.h>链接pthread库时,要在编译时要使用"-lpthread"选项 2.1线程创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 参数: thread:获取创建成功的线程标识符,该参数是一个输出型参数attr:用于设置创建线程的属性,传入NULL表示使用默认属性start_routine:该参数是一个函数地址,表示线程例程,即线程启动后要执行的函数arg:传给线程例程的参数(即传给start_routine的形参) 返回值: 线程创建成功返回0,失败返回错误码 使用案例 #include<iostream> using namespace std; #include<pthread.h> #include<unistd.h> void* Rountine(void* args) { while(1) { cout<<"

Vue3的v-if 和v-for优先级

文章目录 在vue2中,v-for 具有比 v-if 更高的优先级在vue3中,v-if 具有比 v-for 更高的优先级。 在vue2中,v-for 具有比 v-if 更高的优先级 在vue2中应尽量避免二者同时使用,同时使用时编译器会报错: v-for是用于循环渲染列表的指令,而v-if是用于条件渲染的指令。如果你在v-for内部使用v-if,会导致性能问题,因为每次渲染时都会对整个列表进行遍历。 一个更好的做法是使用计算属性来过滤和返回你想要在页面上渲染的列表。计算属性可以根据条件动态计算并返回一个新的数组,这样可以避免在每次渲染时遍历整个列表。 下面是一个示例代码,展示如何使用计算属性来替代在v-for内部使用v-if: <template> <div> <ul> <!-- 使用计算属性来过滤列表 --> <li v-for="item in filteredList" :key="item.id"> {{ item.name }} </li> </ul> </div> </template> <script> export default { data() { return { list: [ { id: 1, name: 'Item 1', isVisible: true }, { id: 2, name: 'Item 2', isVisible: false }, { id: 3, name: 'Item 3', isVisible: true }, // 其他列表项.

python 加载js代码,调用js函数

import execjs def passwdEncode(password, key): # JavaScript 代码 js_code = """ /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ /* * Configurable variables. You may need to tweak these to be compatible with * the server-side, but the defaults work in most cases.

怎么修复MSVCR110.dll文件?全面解析MSVCR110.dll缺失修复方法

MSVCR110.dll文件缺失问题在Windows操作系统用户中相当普遍,经常导致应用程序启动失败或崩溃。MSVCR110.dll是Microsoft Visual C++ Redistributable for Visual Studio 2012的一部分,且应用程序通常依赖这个DLL文件来执行C++库中的代码。文件的丢失可能源自多种原因,如软件卸载过程中的意外删除、病毒侵害或系统更新导致的文件兼容性问题。为了彻底解决MSVCR110.dll文件缺失的问题,本文将围绕该问题产生的根源进行讲述,并提供一系列具体可行的解决步骤与技巧,帮助用户恢复程序运行,保证系统的稳定性和应用的流畅运行。好了,废话不多少,我们一起来了解一下怎么修复MSVCR110.dll文件。 一.什么是MSVCR110.dll 在探究MSVCR110.dll文件缺失问题之前,我们应首先理解MSVCR110.dll的具体作用。作为Microsoft Visual C++ Redistributable for Visual Studio 2012的一部分,MSVCR110.dll是一个由微软公司开发的动态链接库(DLL)文件。这个库包括多种由C++编写的应用程序在运行时可能调用到的函数和资源。由于它被众多不同类型的软件所依赖,该文件的缺失或损坏可能会影响到任一使用该DLL的应用程序,进而导致它们无法正确启动或执行。 二.为什么MSVCR110.dll会丢失 MSVCR110.dll丢失的原因有很多。以下是一些可能的原因: 病毒或恶意软件导致的问题:病毒性程序和恶意软件有时会删除或破坏MSVCR110.dll文件,因为它们往往通过篡改重要的系统文件来执行恶意操作。 安装或卸载错误:不当的软件安装过程或者卸载步骤也可能会导致MSVCR110.dll文件遗失或变得损坏,这会干扰文件的正常功能。 系统级别的故障:某些情况下,MSVCR110.dll文件的丢失或损坏是由于操作系统出现错误所引起的,可能源于如硬件问题、文件系统受损或其他系统级别的异常情况。 三.如何解决MSVCR110.dll丢失问题 有几种方法可以解决MSVCR110.dll丢失的问题。以下是一些可能的解决方法: 方法1:重新安装相关应用程序 如果您遇到了MSVCR110.dll丢失的问题,首先应该尝试重新安装相关的应用程序。这通常会解决问题,因为重新安装应用程序时,它们会自动安装缺失的库文件。 方法2:使用dll修复工具 下载一个dll修复工具,利用这个dll修复工具直接进行一键修复就可以了,它会根据你电脑系统缺失了哪些dll文件,然后进行相关的修复,如你丢失了MSVCR110.dll就会帮你修复MSVCR110.dll文件,操作比较简单方便。 在任意的浏览器顶部上车俞入:dll修复.site 然后按确认Enter键就可以了 进入站点之后下载,直接使用就可以了 点击一键修复dll错误的按钮,就会自动的帮你扫描电脑系统中缺失的dll文件 等扫描完毕后,再点击修复,然后静待修复完成就可以了。 最后就是关机重启一下就能修复msvcr110.dll完成。(也可以选择手动修复,在dll修复工具上,选择手动修复,然后输入msvcr110.dll文件,直接查找,下载安装就可以了。) DLL修复工具_一键修复所有dll缺失msvcp140.dll丢失的解决方法–电脑修复精灵 方法3:复制MSVCR110.dll文件到系统目录 如果以上两种方法都没有解决问题,您可以尝试手动复制MSVCR110.dll文件到系统目录。首先,您需要找到这个文件。在大多数情况下,这个文件应该位于“C:\Windows\System32”目录中。如果您找不到这个文件,您可以从另一个计算机上复制它。然后,将文件复制到系统目录中,并重新启动您的计算机。 方法4:使用系统还原 如果您遇到了MSVCR110.dll丢失的问题,您还可以尝试使用系统还原。这将使您的计算机恢复到之前的某个时间点,可能会解决问题。请注意,在使用系统还原之前,您需要备份您的数据,因为它可能会导致数据丢失。 MSVCR110.dll丢失是一个常见的问题,但是有很多方法可以解决它。在尝试任何解决方法之前,请确保您备份了重要的数据。以上就是关于msvcr110.dll丢失的解决方法的全部推荐了,希望本文能帮助到大家。

Zookeeper在分布式命名服务中的实践

Java学习+面试指南:https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢?典型的有: 分布式API目录 分布式节点命名 分布式ID生成器 1、分布式API目录 为分布式系统中各种API接口服务的名称、链接地址,提供类似JNDI(Java命名和目录接口)中的文件系统的功能。借助于ZooKeeper的树形分层结构就能提供分布式的API调用功能。 著名的Dubbo分布式框架就是应用了ZooKeeper的分布式的JNDI功能。在Dubbo中,使用ZooKeeper维护的全局服务接口API的地址列表。大致的思路为: 服务提供者(Service Provider)在启动的时候,向ZooKeeper上的指定节点/dubbo/${serviceName}/providers写入自己的API地址,这个操作就相当于服务的公开。 服务消费者(Consumer)启动的时候,订阅节点/dubbo/{serviceName}/providers下的服务提供者的URL地址,获得所有服务提供者的API。 2、分布式节点命名 一个分布式系统通常会由很多的节点组成,节点的数量不是固定的,而是不断动态变化的。比如说,当业务不断膨胀和流量洪峰到来时,大量的节点可能会动态加入到集群中。而一旦流量洪峰过去了,就需要下线大量的节点。再比如说,由于机器或者网络的原因,一些节点会主动离开集群。 如何为大量的动态节点命名呢?一种简单的办法是可以通过配置文件,手动为每一个节点命名。但是,如果节点数据量太大,或者说变动频繁,手动命名则是不现实的,这就需要用到分布式节点的命名服务。 可用于生成集群节点的编号的方案: (1)使用数据库的自增ID特性,用数据表存储机器的MAC地址或者IP来维护。 (2)使用ZooKeeper持久顺序节点的顺序特性来维护节点的NodeId编号。 在第2种方案中,集群节点命名服务的基本流程是: 启动节点服务,连接ZooKeeper,检查命名服务根节点是否存在,如果不存在,就创建系统的根节点。 在根节点下创建一个临时顺序ZNode节点,取回ZNode的编号把它作为分布式系统中节点的NODEID。 如果临时节点太多,可以根据需要删除临时顺序ZNode节点。 3、分布式ID生成器 在分布式系统中,分布式ID生成器的使用场景非常之多: 大量的数据记录,需要分布式ID。 大量的系统消息,需要分布式ID。 大量的请求日志,如restful的操作记录,需要唯一标识,以便进行后续的用户行为分析和调用链路分析。 分布式节点的命名服务,往往也需要分布式ID。 。。。 传统的数据库自增主键已经不能满足需求。在分布式系统环境中,迫切需要一种全新的唯一ID系统,这种系统需要满足以下需求: (1)全局唯一:不能出现重复ID。 (2)高可用:ID生成系统是基础系统,被许多关键系统调用,一旦宕机,就会造成严重影响。 有哪些分布式的ID生成器方案呢?大致如下: Java的UUID。分布式缓存Redis生成ID:利用Redis的原子操作INCR和INCRBY,生成全局唯一的ID。Twitter的SnowFlake算法。ZooKeeper生成ID:利用ZooKeeper的顺序节点,生成全局唯一的ID。MongoDb的ObjectId:MongoDB是一个分布式的非结构化NoSQL数据库,每插入一条记录会自动生成全局唯一的一个“_id”字段值,它是一个12字节的字符串,可以作为分布式系统中全局唯一的ID。 前面我写过一篇关于分布式ID的设计与实现,关于其他的实现可参考这篇哈 1、基于Zookeeper实现分布式ID生成器 在ZooKeeper节点的四种类型中,其中有以下两种类型具备自动编号的能力 PERSISTENT_SEQUENTIAL持久化顺序节点。 EPHEMERAL_SEQUENTIAL临时顺序节点。 ZooKeeper的每一个节点都会为它的第一级子节点维护一份顺序编号,会记录每个子节点创建的先后顺序,这个顺序编号是分布式同步的,也是全局唯一的。 可以通过创建ZooKeeper的临时顺序节点的方法,生成全局唯一的ID /** * @author 小熊学Java * @version 1.0 * @description: TODO * @date 2023/12/17 21:08 */ public class IDMaker { private static final String ZOOKEEPER_ADDRESS = "ip:2181"; private static final int SESSION_TIMEOUT = 3000; public CuratorFramework client; public IDMaker() { // 重试策略 RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); client = CuratorFrameworkFactory.

Python就业月入20000?你需要一份真正的就业指导

最近有很多同学希望我能给他们一些关于python的就业指导;所以希望这期关于python的就业指导能够很全面很详细的聊聊就业的那些事,以下都是个人经验和建议,如有偏差还望指正! 一、就业方向 不管做任何事,一开始就有一个方向会让你有很高的效率;大家都听说python几乎无所不能,那具体有哪些职位呢? 测试开发工程师运维工程师后端开发工程师web开发工程师游戏开发工程师爬虫工程师全栈工程师云计算工程师教学讲师(可兼职)数据分析/挖掘工程师算法工程师图像识别工程师自然语言处理(NLP)工程师量化策略工程师人工智能相关架构师 上面这些只是我所知道的职位(如果有遗漏欢迎你在文章下方留言),你是否已经有心仪的职位? 这几年招聘我感觉最大的变化是:相比过去现在招聘java或其他语言岗位时,很多都会要求面试者会一些python,不信你可以去招聘网上看看; 二、岗位要求 在选择完就业方向或者学习方向之后,我们需要具备什么能力或学习哪些知识之后就可以去找工作了呢? 因为技术的不断更新迭代,各种框架流行,想要知道当下需要学习哪些知识点可以直接去招聘上看看岗位要求,这里我列举几个和大家一起分享: python测试开发工程师: 熟练掌握 python ,熟悉 pytest熟练掌握 linux 命令,具备 shell 脚本开发能力熟悉交换机基本配置命令 python web开发工程师: 熟悉 linux 的基本操至少熟悉一种 python 后端框架: flask / django 等掌握一种主流数据库( Mysql / MongoDB )的开发和实现原理,具备数据库设计经验熟悉 tcp / ip 协议、 http 协议,掌握 Web 开发相关技术精通 django 开发的优先 python爬虫工程师: 熟悉一种开源爬虫框架,如 scrapy 、 webmagic 、 nutch 、 heritrix理解 http 协议,熟悉 HTML 、 DOM 、 XPath加分项:有大规模分布式海量数据处理经验优先(如 Hadoop / Hbase / Spark / Flink / Hive 等)有移动端抓取经验有爬虫框架开发经验熟悉反爬虫、验证码识别技术有数据仓库相关开发和使用经验有机器学习相关应用经验 python量化交易工程师:

解决AndroidStudio Gradle只有testDebugUnitTest

问题复现: 问题解决: 1:点击Task list not built... 2:取消勾选Configure all Gradle tasks during Gradle Sync... 大功告成,现在去看看Gradle,屏蔽的都显示出来了。 通过脚本或者插件查看冲突的依赖 Gradle 使用技巧(四) - 如何定位和解决依赖冲突 - 掘金 Android进阶之路 - 通过Gradle 窗口、插件、命令 查看项目依赖_gradle 查看依赖树-CSDN博客

HTTPS的加密方式超详细解读

在了解https的加密方式之前,我们需要先行了解两个特别经典的传统加密方式,以此开始我们今天的学习之旅途。 1、对称加密 1.1、定义 需要对加密和解密使用相同密钥的加密算法。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。 注意:对称加密也叫密钥加密。 1.2、密钥形式 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 1.3、优缺点 优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。 缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文。 1.4、具体实现 在每次发送真实数据之前,客户端先生成一把密钥,然后先把密钥传输给服务端。之后客户端给服务端发送真实数据的时候,会用这把密钥对数据进行加密,服务端收到加密数据之后,用刚才收到的密钥进行解密。 1.5、图解 2、非对称加密 2.1、定义 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 2.2、密钥形式 公钥与私钥是一对。传输双方均有自己的一对密钥(也就是双方每方均有:公、私密钥一把,双方加起来共4把) 例子:传输双方比如是甲乙双方,甲方有配对的公、私密钥一对,且公钥负责加密,私钥负责解对应的公钥加的密。乙方同理。 2.3、优缺点 非对称密钥的算法强度复杂(是优点也是缺点),安全性依赖于算法与密钥。 优点:安全性较高,比对称密钥安全性高很多。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。 缺点:由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。 2.4、具体实现 1.客户端要向服务器发送信息,客户端和服务器都要产生一对用于加密和解密的公钥和私钥。 2.客户端的私钥保密,客户端的公钥告诉服务器;服务器的私钥保密,服务器的公钥告诉客户端。 3.客户端要给服务器发送信息时,客户端用服务器的公钥加密信息,因为服务器的公钥是公开的,客户端可以得到。 4.客户端将这个消息发给服务器(已经用服务器的公钥加密消息)。 5.服务器收到这个消息后,服务器用自己的私钥解密客户端的消息。其他所有收到这个报文的人都无法解密,因为只有服务器才有服务器的私钥。 2.5、图解 3、https的加密方式 上述的两种加密方式各有千秋,所以HTTPS作为最后出场的大佬,当然集大成者,采用的是处理信息的方式是:结合对称加密+非对称加密这两种方式,我们可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据了。 3.1、对称加密+非对称加密 服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。 但是,非对称加密的方式也并非万无一失,在此举个例子: 服务器以明文的方式给客户端传输公钥的时候,中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端。 之后客户端就会用中间人的公钥来加密自己生成的密钥。然后把被加密的密钥传输给服务器,这个时候中间人又把密钥给截取了,中间人用自己的私钥对这把被加密的密钥进行解密,解密后中间人就可以获得这把密钥了。 最后中间人再对这把密钥用刚才服务器的公钥进行加密,再发给服务器。 毫无疑问,在这个过程中,中间人获取了对称加密中的密钥,在之后服务器和客户端的对称加密传输中,这些加密的数据对中间人来说,和明文没啥区别。 3.2、证书 非对称性加密之所以不安全,是应为客户端不知道,这把公钥是不是服务器的。因此,我们需要找到一种策略来证明这把公钥就是服务器的,而不是别人冒充的,就像身份证一样,唯一标识我们服务器的公钥,解决这个问题的方式就是使用数字证书,具体是这样的: 而我们需要一个在互联网世界中充当公理的机构来签发这个证书,它就是CA机构,它是如今互联网世界正常运作的前提,而CA机构颁发的“身份证”就是数字证书: 网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。而这里又有一个显而易见的问题,“证书本身的传输过程中,如何防止被篡改”?即如何证明证书本身的真实性?身份证运用了一些防伪技术,而数字证书怎么防伪呢?解决这个问题我们就接近胜利了! 3.3、数字签名 有了数字整数之后,我们又,如何防止整数篡改呢? 我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名: 3.3.1、数字签名的制作过程: CA机构拥有非对称加密的私钥和公钥。 CA机构对证书明文数据T进行hash。 对hash后的值用私钥加密,得到数字签名S。 明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。 3.3.2、浏览器验证过程: 拿到证书,得到明文T,签名S。 用CA机构的公钥对S解密(由于是浏览器信任的机构,所以浏览器保有它的公钥。详情见下文),得到S’。 用证书里指明的hash算法对明文T进行hash得到T’。 显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信。 这样的加密和验证方式的双重保险之下,基本就能保证我们的连接以及数据交互的安全,拥有这样证书和签名的网站我们访问起来有一把小锁的标识,说明我们的访问是安全的。 参考文章: segmentfault博主徐志文章:HTTPS加密方式 知乎博主顾伊凡文章:彻底搞懂HTTPS加密原理

稳部落 – 新浪微博备份导出工具

稳部落 稳部落是新浪微博备份导出工具,可以帮助用户非常方便的导出备份新浪微博的数据,让我们可以永久保存这些微博数据。它支持新浪微博、微博私信、微博评论的导出,并可以备份包含图片、视频的完整微博内容。用户只需登录微博账号,该软件即可智能检测账号信息,实现一键备份。备份数据支持分卷导出,避免单个文件过大。同时它还提供数据过滤功能,可以自定义筛选想要备份的微博内容。该软件操作简单,支持Windows和Mac OS系统,能够帮助我们定期备份微博数据。 使用指南 1.点击获取资源 稳部落3.3.7 2.点击登录微博 由于微博网页本身问题, 输入账号/密码/验证码时略有卡顿, 请等待 10 秒后鼠标多点几下即可 3. 备份微博 3.1 回到系统设置页面, 将自己的微博主页地址贴进输入框 3.2 点击同步用户信息按钮, 可看到预估的备份时长 3.3 点击开始备份, 执行备份操作 4. 在运行日志中可见当前备份进度 5. 备份完成后自动打开电子书所在目录 5.1 在稳部落输出的电子书目录下, 即为输出的电子书 其中 5.2 html目录下为网页文件输出地址, index.html为入口页 5.3 pdf目录下为 pdf 输出位置 5.4 pdf 电子书输出效果 5.5 html 电子书输出效果 6.输出的 pdf 文件中, 按年-月-日生成目录, 支持在文件内搜索文本

js保留小数点后一位数字(不四舍五入)

保留小数点后一位数字 let num='22.256' let numNew= this.formattedNumber(num) formattedNumber(num) { const numStr = num.toString(); const decimalIndex = numStr.indexOf('.'); if (decimalIndex !== -1) { // 截取小数点后一位 return numStr.slice(0, decimalIndex + 2); } else { // 如果是整数,直接返回 return numStr; } } console.log(numNew) //22.2

关于Mysql运维人员必备技能

学习 MySQL 时,你需要掌握以下几类重要的 SQL 语句: 1. 数据定义语言(DDL): - CREATE:创建数据库、表或索引。 - ALTER:修改数据库结构,如添加列、修改列类型等。 - DROP:删除数据库、表或索引。 2. 数据操纵语言(DML): - INSERT:向表中插入新记录。 - SELECT:从表中获取数据。 - UPDATE:更新表中的记录。 - DELETE:从表中删除记录。 3. 数据查询语言(DQL): - SELECT:从一个或多个表中检索数据。 4. 事务控制语言(TCL): - COMMIT:提交当前事务。 - ROLLBACK:回滚当前事务。 - SAVEPOINT:设置事务中的保存点,可以在之后回滚到这个点。 5. 数据控制语言(DCL): - GRANT:赋予用户访问权限。 - REVOKE:撤销用户的访问权限。 除了以上基本的 SQL 语句外,还有一些高级用法,例如子查询、联合查询、存储过程、触发器等,这些也是在实际工作中经常会碰到的。因此,建议你系统地学习和练习这些 SQL 语句,以便熟练应用于实际的数据库操作中。

mysql运维知识总结

mysql运维 windows下登录mysql:mysql -uroot -p(在cmd下执行),然后输入密码即可 如果发现如图所下所示的内容,说明没有配环境变量 在系统变量Path下新增一条路径(到bin目录)即可 查询所有数据库:show databases; 选择某数据库:use test_database;(test_database是你的数据库名) 查询数据库种的所有表:show tables; 表信息操作: select * from test_table;(test_table是你的表名) truncate table test_table; 或者 delete from test_table where 1=1;(删除test_table的表数据保留表结构) update test_table set table_column_name='123' where table_column_name='' (更新表的数据) insert into table_name (列1, 列2,...) VALUES (值1, 值2,....) (插入数据) 数据导出操作: select * from test_table into outfile 'C:/test.txt' 当我们第一次执行这种导出操作时会报这样的问题: 我们来查看一下secure-file-priv这个变量的值(show variables like '%secure%';) secure-file-priv的值有三种情况: secure_file_prive=null ––限制mysqld 不允许导入导出secure_file_priv=/path/ – --限制mysqld的导入导出只能发生在默认的/path/目录下secure_file_priv=’’ – --不对mysqld 的导入 导出做限制 这时我们需要修改my.ini文件 打开my.ini,修改内容为下图 , 然后重启mysql(在服务中找到mysql,右键重启即可)

JavaScript 中的双等号(==)和三等号(===)有何不同?何时使用它们?

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-等号区别 目录 == 和 ===区别,分别在什么情况使用 一、等于操作符 二、全等操作符 三、区别 小结 == 和 ===区别,分别在什么情况使用 一、等于操作符 等于操作符用两个等于号( == )表示,如果操作数相等,则会返回 true 前面文章,我们提到在JavaScript中存在隐式转换。等于操作符(==)在比较中会先进行类型转换,再确定操作数是否相等 遵循以下规则: 如果任一操作数是布尔值,则将其转换为数值再比较是否相等 let result1 = (true == 1); // true 如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等 let result1 = ("55" == 55); // true 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法取得其原始值,再根据前面的规则进行比较 let obj = {valueOf:function(){return 1}} let result1 = (obj == 1); // true null和undefined相等 let result1 = (null == undefined ); // true 如果有任一操作数是 NaN ,则相等操作符返回 false

Mesh网格撞击变形

物理碰撞 两个游戏物体发生碰撞的必要条件: 发生碰撞的两个游戏物体有Collider(碰撞器)组件;其中一个物体有Rigidbody(刚体)组件。 MonoBehaviour中的相关回调函数: 回调函数详解OnCollisionEnter (Collision)当前碰撞器开始接触另一个碰撞器时被调用。OnCollisionStay (Collision)当前碰撞器持续接触另一个碰撞器时被调用。OnCollisionExit (Collision)当前碰撞器停止接触另一个碰撞器时被调用。 碰撞数据 物体发生碰撞时的碰撞数据存储于Collision对象中,相关属性: articulationBody:与当前碰撞器发生碰撞的物体上的Articulation Body组件;body:与当前碰撞器发生碰撞的物体上的Rigidbody或Articulation Body组件;collider:与当前碰撞器发生碰撞的碰撞器;contactCount:碰撞接触点的数量;contacts:碰撞接触点数组,碰撞接触点包含位置和法线数据;gameObject:与当前碰撞器发生碰撞的物体;impulse:碰撞冲量;relativeVelocity:两个碰撞对象的相对线性速度;rigidbody:与当前碰撞器发生碰撞的物体上的Rigidbody组件;transform:与当前碰撞器发生碰撞的物体的Transform组件。 撞击变形 撞击判定:当relativeVelocity的长度大于一定阈值时,可以判定为撞击;网格变形:通过调整撞击物体上的网格顶点,使网格发生形变: 顶点位移量:计算网格顶点到碰撞接触点的距离,距离越近的变形程度应该越大,顶点位移量也就相应越大。顶点位移方向:通过将relativeVelocity从世界空间转换到被撞击物体的局部空间获得顶点位移方向。 //变形发生的阈值 [SerializeField] private float deformationThreshold = 5f; //变形影响的半径 [SerializeField] private float deformationRadius = .5f; private void OnCollisionEnter(Collision collision) { //两个碰撞对象的相对线性速度足够大时网格变形 if (collision.relativeVelocity.magnitude > deformationThreshold) { //撞击的物体 GameObject collideGameObject = collision.gameObject; //物体上的网格 Mesh mesh = collideGameObject.GetComponent<MeshFilter>().sharedMesh; //网格上的顶点数组 Vector3[] vertices = mesh.vertices; //遍历撞击接触点 for (int i = 0; i < collision.contactCount; i++) { ContactPoint contactPoint = collision.

STM32G0-内部flash读写驱动[寄存器版]

基本概念 首先给出一个STM32G030芯片的闪存结构图: STM32G0的闪存模块由于Main memory(主储存器),information block(信息块)两个部分组成。 Main memory(主储存器):用于储存用户编译烧录的代码和数据常量。 information block(信息块):信息块同样被分为了好几个部分: system memory(系统内存):系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、 USB 以及 CAN 等 ISP 烧录功能。OTP area(OTP 区域):指的是只能写入一次的存储区域,容量为1K,写入后数据无法更改, OTP 常用于存储应用程序的加密密钥。Engineering bytes(工程字节):这里芯片手册没有提及,暂时不知道干嘛用。Option bytes(选项字节):选项字节用于配置 FLASH 的读写保护、电源管理中的 BOR 级别、软件/硬件看门狗等功能,这部分共 32 字节。可以通过修改 FLASH 的选项控制寄存器修改。 Main memory(主储存器)通常以地址0X08000000开始,结束地址与不同规格芯片有关。这里采用的是STM32G030C8T6的芯片,其内部flash为64K,根据如上闪存结构图,STM32将其划分为了32页(page0-page31),每页的大小为2k。 我们往STM32中烧写的程序默认储存在stm32的内部flash中,但是stm32的内部flash空间是充足的,因此,除了烧写的程序占用的那部分flash以外,剩下的部分我们完全可以利用起来,用于储存我们自己程序运行时需要储存的数据和信息,不必要外接额外的flash芯片。 查看工程分布 正如前面所述,stm32烧写的程序占用了一部分flash空间,因此,在使用内部flash的时候,需要查看工程分布,避免覆盖烧写程序所占空间,引起硬件故障死循环。 我们在keil中双击Target,打开工程的.map文件,找到Memory Map of the image,这里就是程序的flash分布: 可以看到,空间的基地址就是从0x08000000开始,这里占用的范围为0x00000700,既我们的代码在stm32的内部flash中占用的范围为08000000-0x08000700。 而根据上述基本概念结构图可以看出,G0芯片的flash一页大小为2k,既2048字节,转为16进制为0x00000800,则该芯片一页flash的大小为0x080007FF(区间从0开始)。因此,从第二页0x08000800开始的空间,我们都可以充分利用起来。 时钟配置 1.根据时钟树: FLASH的时钟树由AHB总线管理,因此需要开启FLASH在该总线上的时钟。 2.内部FLASH的写入速度远没有MCU的时钟频率快,因此,需要根据MCU时钟频率配置的不同,修改对应的闪存访问延迟时间 该配置在FLASH_ACR中可以进行修改: FLASH写入过程 1.解锁 为了保护数据,防止错误操作造成的故障,STM32的FLASH模块在芯片复位之后是默认保护的,既:无法对内部FLASH的相关寄存器进行操作,因此,在操作内部FLASH之前,需要先往键寄存器FLASH_KEYR中依次写入对应KEY1和KEY2,以对其进行解锁。 在STM32G0系列中,KEY1和KEY2分别为: FLASH_KEY1 0x45670123 //Flash key1 FLASH_KEY2 0xCDEF89AB //Flash key2 因此,我们可以配置解锁函数: void FLASH_unlock(void) { FLASH->KEYR=FLASH_KEY1;//写入解锁序列. FLASH->KEYR=FLASH_KEY2; } 2.状态函数 FLASH的当前状态相关寄存器在FLASH_SR寄存器中:

2024年5月软考初级程序员考哪些内容,考试大纲什么的?

初级程序员考试科目包含基础知识和应用技术,各科目的考试形式都是机试,满分均为75分。程序员考试需要各科目在一次考试中均及格才算合格,单科及格的成绩不保留,也不能转移到下次考试时使用。 这里给大家理清一个程序员考试的相关内容和备考的方式~(正文↓↓↓) 整理了一份程序员2024年备考计划表: 程序员考试科目: 1、科目一,计算机硬软件基础知识,机试。 2、科目二,程序设计,机试。 考试大纲: 科目一:综合知识 75道单项选择题,1题1分,;考点范围比较广。清楚了解各个知识考点的分布各个击破,进行混合练习 科目二:案例分析 5道大题操作题共75分;这5道案例题分布:流程图1题,c语言3题,c++和Java二选一 以c语言练习为主,最好上机进行练习操作,多做题多练习历年试题熟悉答题规则 流程图主要考点: 字符串匹配,数据的计算,数组的相关计算等(重点在于理解流程图和算法) c语言主要考点: 1.for循环、while循环、Switch case分支语句 2.查找和排序算法(选择排序、插入排序、冒泡排序、快速排序、顺序查找和二分查找) 3.字符串相关计算(匹配和对比、复制、取数字、计算单词个数等,一般会用到指针) 4.链表的相关计算(链表重构逆转、合并、排序,二叉查找树,树的构造,元素处理等) 5.函数相关知识(函数的调用、递归函数、字符串函数使用、特殊函数的编写等) 6.其他一些数值运算(特殊数字、时间日期等运算) Java和c++主要考点: 1.创建对象(类名对象名=new类名();) 2.继承类(class子类民extends父类名) 3.接口定义(interface接口名) 4.实现定义(class<类名>implements接口名) 5.抽象类和抽象方法(abstract class类名{abstract方法名()}) 6.当前类对象的引用(this关键字) 7.父类的引用,通过这个对象可以访问父类的成员(super关键字) 8.类所有的对象共享同一个成员时,使用静态变量和静态方法(static关键字) 9.方法的调用(对象名.方法名) 10.修饰符(public、protect、private和default默认) 备考建议: 初级程序员还是比较简单的,以大纲为中心,《程序员教程(第五版)》为辅助学习资料,借助网络资源,首先得掌握最基础的知识点内容可以通过看教程看视频看大纲笔记等,然后进行大量综合训练,刷题巩固所学知识....还有什么其他问题

【微服务面试题(三十三道)】

文章目录 微服务面试题(三十三道)概述1.什么是微服务?2.微服务带来了哪些挑战?3.现在有哪些流行的微服务解决方案?这三种方案有什么区别吗? 4.说下微服务有哪些组件? 注册中心5.注册中心是用来干什么的?6.SpringCloud可以选择哪些注册中心?7.说下Eureka、ZooKeeper、Nacos的区别?8.Eureka实现原理了解吗?9.Eureka Server怎么保证高可用? 配置中心10.为什么微服务需要配置中心?11.SpringCloud可以选择哪些配置中心?12.Nacos配置中心的原理了解吗?13.Nacos配置中心长轮询机制? 远程调用14.能说下HTTP和RPC的区别吗?15.那Feign和Dubbo的区别呢?16.说一下Fegin?17.为什么Feign第一次调用耗时很长?18.Feign怎么实现认证传递?19.Fegin怎么做负载均衡?Ribbon?20.说说有哪些负载均衡算法? 服务容灾21.什么是服务雪崩?22.什么是服务熔断?什么是服务降级?什么是服务熔断?什么是服务降级?有哪些熔断降级方案实现? 23.Hystrix怎么实现服务容错?24.Sentinel怎么实现限流的?Sentinel采用的什么限流算法?Sentinel怎么实现集群限流? 服务网关25.什么是API网关?26.SpringCloud可以选择哪些API网关?27.Spring Cloud Gateway核心概念? 链路追踪28.为什么要用微服务链路追踪?29.SpringCloud可以选择哪些微服务链路追踪方案? 分布式事务30.Seata支持哪些模式的分布式事务?31.了解Seata的实现原理吗?Seata的事务执行流程是什么样的?全局事务ID和分支事务ID是怎么传递的?Seata的事务回滚是怎么实现的? 服务监控32.你们的服务怎么做监控和告警?33.你们的服务怎么做日志收集? 微服务面试题(三十三道) 概述 1.什么是微服务? 微服务(Microservices)是一种软件架构风格,将一个大型应用程序划分为一组小型、自治且松耦合的服务。每个微服务负责执行特定的业务功能,并通过轻量级通信机制(如HTTP)相互协作。每个微服务可以独立开发、部署和扩展,使得应用程序更加灵活、可伸缩和可维护。 在微服务的架构演进中,一般可能会存在这样的演进方向:单体式–>服务化–>微服务。 单体服务一般是所有项目最开始的样子: 单体服务(Monolithic Service)是一种传统的软件架构方式,将整个应用程序作为一个单一的、紧耦合的单元进行开发和部署。单体服务通常由多个模块组成,这些模块共享同一个数据库和代码库。然而,随着应用程序规模的增长,单体服务可能变得庞大且难以维护,且部署和扩展困难。 后来,单体服务过大,维护困难,渐渐演变到了分布式的SOA: SOA(Service-Oriented Architecture,面向服务的架构)是一种软件架构设计原则,强调将应用程序拆分为相互独立的服务,通过标准化的接口进行通信。SOA关注于服务的重用性和组合性,但并没有具体规定服务的大小。微服务是在SOA的基础上进一步发展而来,是一种特定规模下的服务拆分和部署方式。微服务架构强调将应用程序拆分为小型、自治且松耦合的服务,每个服务都专注于特定的业务功能。这种架构使得应用程序更加灵活、可伸缩和可维护。 需要注意的是,微服务是一种特定的架构风格,而SOA是一种设计原则。微服务可以看作是对SOA思想的一种具体实践方式,但并不等同于SOA。 架构演进简图: 微服务与单体服务的区别在于规模和部署方式。微服务将应用程序拆分为更小的、自治的服务单元,每个服务都有自己的数据库和代码库,可以独立开发、测试、部署和扩展,带来了更大的灵活性、可维护性、可扩展性和容错性。 2.微服务带来了哪些挑战? 微服务架构不是万金油,尽它有很多优点,但是对于是否采用微服务架构,是否将原来的单体服务进行拆分,还是要考虑到服务拆分后可能带来的一些挑战和问题: 系统复杂性增加:一个服务拆成了多个服务,整体系统的复杂性增加,需要处理服务之间的通信、部署、监控和维护等方面的复杂性。服务间通信开销:微服务之间通过网络进行通信,传递数据需要额外的网络开销和序列化开销,可能导致性能瓶颈和增加系统延迟。数据一致性和事务管理:每个微服务都有自己的数据存储,数据一致性和跨服务的事务管理变得更加复杂,需要额外解决分布式事务和数据同步的问题。部署和运维复杂性:微服务架构涉及多个独立部署的服务,对于部署、监控和容错机制的要求更高,需要建立适当的部署管道和自动化工具,以简化部署和运维过程。团队沟通和协作成本:每个微服务都由专门的团队负责,可能增加团队之间的沟通和协作成本。需要有效的沟通渠道和协作机制,确保服务之间的协调和一致性。服务治理和版本管理:随着微服务数量的增加,服务的治理和版本管理变得更加复杂。需要考虑服务的注册发现、负载均衡、监控和故障处理等方面,以确保整个系统的可靠性和稳定性。分布式系统的复杂性:微服务架构涉及构建和管理分布式系统,而分布式系统本身具有一些固有的挑战,如网络延迟、分布式一致性和容错性。 简单说,采用微服务需要权衡这些问题和挑战,根据实际的需求来选择对应的技术方案,很多时候单体能搞定的也可以用单体,不能为了微服务而微服务。 3.现在有哪些流行的微服务解决方案? 目前最主流的微服务开源解决方案有三种: Dubbo: Dubbo 是一个高性能、轻量级的 Java 微服务框架,最初由阿里巴巴(Alibaba)开发并于2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等功能,后来一度停止维护,在近两年,又重新开始迭代,并推出了Dubbo3。Dubbo 使用基于 RPC(Remote Procedure Call)的通信模型,具有较高的性能和可扩展性。它支持多种传输协议(如TCP、HTTP、Redis)和序列化方式(如JSON、Hessian、Protobuf),可根据需求进行配置。Dubbo更多地被认为是一个高性能的RPC(远程过程调用)框架,一些服务治理功能依赖于第三方组件实现,比如使用ZooKeeper、Apollo等等。 Spring Cloud Netflix: Spring Cloud Netflix 是 Spring Cloud 的一个子项目,结合了 Netflix 开源的多个组件,但是Netflix自2018年停止维护和更新Netflix OSS项目,包括Eureka、Hystrix等组件,所以Spring Cloud Netflix也逐渐进入了维护模式。该项目包含了许多流行的 Netflix 组件,如Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API 网关)等。它们都是高度可扩展的、经过大规模实践验证的微服务组件。 Spring Cloud Alibaba: Spring Cloud Alibaba 是 Spring Cloud 的另一个子项目,与阿里巴巴的分布式应用开发框架相关。它提供了一整套与 Alibaba 生态系统集成的解决方案。该项目包括 Nacos(服务注册与发现、配置管理)、Sentinel(流量控制、熔断降级)、RocketMQ(消息队列)等组件,以及与 Alibaba Cloud(阿里云)的集成。它为构建基于 Spring Cloud 的微服务架构提供了丰富的选项。据说SpringCloud Alibaba项目的发起人已经跑路去了腾讯,并发起了SpringCloud Tecent项目,社区发展存在隐忧。 这三种方案有什么区别吗? 三种方案的区别:

GitLab 删除或移动项目

首先明说,删除后无法恢复 第一步:找到要删除的项目 第二步:进入目录后,左侧菜单,设置 >>> 通用,拉到最下面找到“高级”,点击右侧“展开” 第三步:点击“展开”后往下拉,就能看到更改路径、转移项目、删除项目三个不同的操作; 点击“删除项目”,弹出删除提示,输入“请输入以下内容以确认”提示的内容,点击“是的,删除项目”,项目成功删除 如果是转移项目,在“选择一个新的命令空间”下拉框中,选择一新的位置,点击“transfer project”转移项目

Springboot返回内容屏蔽部分字段方法

屏蔽概念 假设有一个 User 对象,我们需要将这个 User 返回给前端,但是有些字段比较敏感(如:user.password ),需要屏蔽; @Data public class User{ private String username; private String password; } 双向屏蔽 前端提交上来的表单会忽略 password , 后端返回的 User 也会忽略 password; 只需在 password 字段上添加 @JsonIgnore 注解即可; @Data public class User{ private String username; @JsonIgnore private String password; } 后端返回屏蔽(序列化时屏蔽) 添加 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 注解; @Data public class User{ private String username; @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; } 前端提交屏蔽(反序列化时屏蔽) @Data public class User{ private String username; @JsonProperty(access = JsonProperty.

linux基础之--系统配置文件

1、/etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件 TYPE=Ethernet # 网络类型 以太网 BOOTPROTO=none # 配置IP地址的方式 none static dhcp NAME=eth0 # 网卡在系统中的名字 DEVICE=eth0 # 硬件设备名称 ONBOOT=yes # 开机自动启动网络服务 IPADDR=10.0.0.200 #IP地址局域网唯一 PREFIX=24 # 子网掩码 GATEWAY=10.0.0.2 # 网关 出网的必经之路 2、/etc/hosts 本地DNS解析配置文件 解析ip 域名 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 3、/etc/resolv.conf DNS配置文件 名称 dns地址 nameserver 223.5.5.5 4、/etc/hostname 存放主机名的文件 主机名修改命令: hostname 临时修改 hostnamectl set-hostname 永久生效 5、/etc/rc.local 开机运行文件中的命令 6、/etc/fstab 系统磁盘挂载信息 7、/etc/inittab 系统运行级别 8、/etc/profile 存放系统变量的文件 9、/etc/locale.conf 存放系统语言及编码格式的文件

科学和技术的不同层次

分为技术的应用和技术原理的研究两个方面: 一、技术的应用层面 1 使用技术的人:用户、技术的体验者 2 技术的开发者:开发技术的人、使技术在实际中起作用的人、产品化的人;一般对应于程序员、硬件工程师、测试工程师等角色 3 技术平台的开发者、设计者:众所周知,解决好一个具体的问题,需要多种多样的技术,针对具体的问题,还有其特定的技术,而每一项技术都是花费不菲的时间和经历去学习,理解和应用,技术平台扮演一个帮助开发者快速、便捷、轻松开发的角色;比如安卓平台的设计者、苹果应用平台的设计者 二、技术原理研究层面 4 技术原理的开发者、研究者:每个技术都有背后的原理,这些原理非凭空而来,也是人们通过研究、开发、总结得来的;各个大学的研究者、教授等等。 5 技术的原理体系(理论体系)及(其中各个理论的)适用范围:数学界和工业界的大牛、领导者 6 整个学科的背景、生态和发展:一个学科的奠基人、领导者 7 科学的奠基人和“科学革命发动者”:牛顿、爱因斯坦

关于epoll的调试的几个问题

将今天调试的几个小问题点总结下,后续遇到再添加。 一 将总结的问题点放在最前面 1 epoll_wait的maxevents参数 epoll_wait的maxevents参数,经过测试,maxevents的值可以小于监听的描述符总数。我在下面的测试代码中,将这个值改为1,也是可以同时处理两个客户端的。 2 删除文件事件集合中的文件描述符 如下所示,最后一个参数设置为NULL即可; ret = epoll_ctl(epfd, EPOLL_CTL_DEL,sockfd, NULL); 设置为下面的形式,就是最后一个参数配置为何EPOLL_CTL_ADD时相同也没问题: ev.events = EPOLLIN | EPOLLET; ev.data.fd = sockfd; ret = epoll_ctl(epfd, EPOLL_CTL_DEL,sockfd, &ev); 3 EPOLL_CTL_DEL调用要在close之后 如果调用EPOLL_CTL_DEL之前先调用close。就会报错: EPOLL_CTL_DEL: Bad file descriptor 参考资料:《UNIX系统编程手册 下》 二 基础相关 相关结构体: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t; //感兴趣的事件和被触发的事件 struct epoll_event { __uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; 函数

修改滚动条样式(亲测好用)

::-webkit-scrollbar { width: 2px; height: 1px; } ::-webkit-scrollbar-thumb { background-color: #999; -webkit-border-radius: 5px; border-radius: 5px; } ::-webkit-scrollbar-thumb:vertical:hover { background-color: #666; } ::-webkit-scrollbar-thumb:vertical:active { background-color: #333; } ::-webkit-scrollbar-button { display: none; } ::-webkit-scrollbar-track { background-color: #f1f1f1; }

智能变电站协议系列-4、IEC 101、IEC 104协议(IEC 60870)

文章目录 一、前言二、资料收集三、lib60870运行示例及协议分析1、代码编译2、IEC101运行示例及协议分析2.1 ISO/OSI网络模型2.2 示例运行测试2.3 帧数据分析 3、IEC104运行示例及协议分析3.1 ISO/OSI网络模型3.2 示例运行测试3.3 wireshark抓包分析3.3.1 U帧3.3.2 I帧3.3.3 S帧 四、最后 一、前言 IEC 101和IEC 104对于智能变电站来说已经属于旧的协议了,其属于IEC 60870,但目前在电力自动化中仍然流行,对于IEC 61850和IEC 60870混用的场景也存在,目前官方赞助商似乎在推一些转换网关来将对应的协议做转换以此解决这种协议兼容问题,国内似乎也有在做这块的网关的企业。IEC 101为串行模式,而IEC 104走TCP/IP。 二、资料收集 协议开源库:https://github.com/mz-automation/lib60870 IEC 101协议分析:https://www.ipcomm.de/protocol/IEC101/en/sheet.html https://blog.csdn.net/weixin_39177986/article/details/115164546 IEC 104协议分析:https://www.ipcomm.de/protocol/IEC104/en/sheet.html https://www.jianshu.com/p/772582a9db11 http://47.109.31.38/wp-content/uploads/2021/12/IEC104%E8%A7%84%E7%BA%A6%E6%8A%A5%E6%96%87%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90.pdf lib60870的用户使用指南:https://github.com/mz-automation/lib60870/blob/master/user_guide.adoc 三、lib60870运行示例及协议分析 1、代码编译 没有坑点,cmake直接编译过了 #必要时使用GitHub加速 git clone https://github.com/mz-automation/lib60870.git cd lib60870/ cd lib60870-C/ mkdir build cd build/ cmake .. make clean && make ls make install 修改一下我们之前交叉编译libiec61850的全平台编译脚本: arm_linux_setup.cmake: set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(tools /usr/local/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf) set(CMAKE_C_COMPILER ${tools}/bin/armv8l-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER ${tools}/bin/armv8l-linux-gnueabihf-g++) aarch64_linux_setup.cmake:

VMwareWorkstation进入U盘的PE系统方法

VMwareWorkstation虚拟机可以安装各种操作系统,很多用户就想在VMware虚拟机中使用U盘安装系统,那么VMware要怎么设置从U盘启动呢?接下来小编就教大家VMware虚拟机进入U盘PE系统的方法。 相关阅读:电脑进入PE系统方法 一、准备工作: 1、VMwareWorkstation虚拟机:VMware12安装及激活方法 2、U盘启动盘:网上随便找个方法就能搞 3、VMware虚拟机设置连接U盘的方法 二、注意事项 1、正确顺序是先插入U盘启动盘,再打开虚拟机,否则虚拟机无法检测到U盘; 2、如果已经打开虚拟机,则需关闭,插入U盘后重新开启。 三、设置方法: 1、插入U盘启动盘,打开VMware,选中要设置的虚拟机,点击“编辑虚拟机设置”; 2、点击”添加”,选择“硬盘”,下一步; 3、磁盘类型保持默认选项,下一步; 4、选择最后一个选项“使用物理磁盘”; 5、点击“设备”下拉框,一般选择最后一个,一般是PhysicalDrive1,点击“使用整个磁盘”,0为虚拟机硬盘,1为U盘启动盘; 6、指定磁盘文件保持默认,直接点击完成; 7、返回主界面左侧列表,右键点击虚拟机—电源—打开电源时进入固件,即进入BIOS设置; 8、切换到Boot界面,展开HardDrive,使用”Shift和+”将HardDrive(0:1)或IDEHard(PS)(一般为最后一项)移动到第一位,再将HardDrive移动到首位; 9、按下F10保存修改重启虚拟机,进入到U盘启动盘界面; 10、如果不用U盘再进入BIOS修改开机启动项即可。 VMware虚拟机设置从U盘启动的方法就是这样了,大家根据以上的步骤进行设置就能进入到U盘PE系统界面了。

实车获取CANlog并回放分析-操作方法

一、连接线束 1、找到obd接口,连接CAN盒子(这里用的VN1639A),分别链接CANH 和CANL 2、CAN盒上的usb线连接电脑 二、 连接CANoe 1、新建一个CANoe工程 点击Logging 文件夹,修改log存放路径和名称,log格式选择.asc 点击start开始录制,录制完成后点击stop 三、CANlog回放 1、CANoe运行模式设为offline 2、导入要回放的log(回放log时需要保证与保存log时的数据库相同) 3、点击运行工程的按钮,等到log回放完成之后,我们就可以开始进行分析。

ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1, 512,

Traceback (most recent call last): File "E:\Anaconda\envs\opencv\lib\runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "E:\Anaconda\envs\opencv\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "E:\Anaconda\envs\opencv\Scripts\yolo.exe\__main__.py", line 7, in <module> File "E:\Anaconda\envs\opencv\lib\site-packages\ultralytics\cfg\__init__.py", line 448, in entrypoint getattr(model, mode)(**overrides) # default args from model File "E:\Anaconda\envs\opencv\lib\site-packages\ultralytics\engine\model.py", line 356, in train File "E:\Anaconda\envs\opencv\lib\site-packages\torch\nn\functional.py", line 2416, in _verify_batch_size raise ValueError("Expected more than 1 value per channel when training, got input size {}".format(size)) ValueError: Expected more than 1 value per channel when training, got input size torch.

【性能优化】EFCore性能优化(一)-IEnumerable和IQueryable

阅读本文你的收获 了解EF Core在使用上应该要注意的地方学习EF Core的优化技术,如禁用跟踪、IQueryable接口等 一、问题描述 Entity Framework Core(以下简称EF)是微软自家出品的大型O/RM框架,使用EF Core,我们可以在C#中用操作对象的方式来访问和操作数据库,它可以帮助我们把对C#对象的增删改查,转换成对应的关系型数据库的SQL语句,同时可以把从数据库返回的数据转换成C#的对象,并可以对对象的状态进行跟踪,只要状态发生改变,它就可以帮助我们生成对应的update、insert或者delete的SQL命令。使用EF可以大大提高程序员的开发效率。 但是使用EF的时候,也有不少要注意的地方。比如说EF操作数据库的性能肯定没有直接用ADO.NET操作SQL语句的性能高;另外,如果使用不当,则会导致内存占用过高,系统性能下降的问题等等。 如果你的系统对性能要求很高,我们就必须知道怎么去规避这些问题,在使用EF Core作为ORM时,你必须要注意以下几个方面: IEnumerable和IQueryable两种接口要充分理解,区别使用EF默认自带实体跟踪机制,只读查询用非跟踪式查询可以提高效率。用AsNoTracking方法。EF对批量操作的支持不太高效,所以像批量添加、删除、修改等操作的执行效率,要注意分析与改进。对于一些复杂查询,EF帮我们生成的SQL语句有时是低效的,这时可以让EF直接执行原生SQL语句,或者改用ADO.NET方式去执行。(关于这一点,请参考 EFCore基础之如何执行原生SQL语句 ) 今天先来学习一下IEnumerable和IQueryable接口。 二、理解IEnumerable和IQueryable接口 LINQ标准查询运算符是依靠一组 扩展方法 来实现的。而这些扩展方法分别在System.Linq.Enumerable和System.Linq.Queryable这两个静态类中定义。比如:Where()、Select()、Count()、Any()等方法。 以Where扩展方法为例,在System.Linq.Enumerable类中,是这样定义的,它操作的是IEnumerable< TSource > 类型的集合数据,参数是Func< T, bool >委托类型。 public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); 在System.Linq.Queryable类中,Where扩展方法是这样定义的,它操作的是IQueryable< TSource >类型的数据,参数一个Expression< T,bool >表达式树类型。 public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate); 事实上,IEnumerable是可枚举接口,集合类型如List、Dictionary等都是继承了该接口,它还有一个泛型的版本IEnumerable< T >, 实现了该接口的对象都是集合对象,可以使用foreach接口进行遍历。 对于IEnumerable接口的LINQ扩展方法,可以实现在内存中对这些集合对象进行LINQ查询。使用IEnumerable的例子: List<Department> data = new List<Department>(); //实例化一个空集合 data.Add(new Department { Id=Guid.NewGuid(), DepName="部门1" }); data.Add(new Department { Id=Guid.

虚拟机安装centos7系统步骤

1、下载系统镜像文件 下载地址:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso 2、鼠标右键点击虚拟机-->设置-->CD/DVDD-->使用ISO映像文件-->点击浏览,选择文件,而后保存设置 3、点击开启虚拟机,按tab键,输入字符 net.ifnames=0 biosdevname=0,将网卡名称更改为eth0,而后回车,进入系统 4、进入系统后,选择语言 5、点击date设置时区 选择Asia,Shanghai,然后点击左上角Done返回 6、选择系统支持的语言,把中文选上,然后点击done返回 7、点击工具选择SOFTWARE SELECTION 左侧选择minimal install(最小化安装),右侧选择第1、2、3、6(debug工具、lib库、开发者工具、管理员gong) 8、点击安装INSTALL DESTINATION划分磁盘 点击手动配置磁盘,然后点击done下一步 点击下拉框,选择标准分区,然后点击+号,添加分区 选择boot分区,用于存放系统内核,并分配200m空间(相当于windows的c盘) 继续添加分区,添加swap分区,分出1024m空间 继续添加,选择 / ,不需要输入空间,默认占用剩余全部空间 然后点done返回,并同意改变 9、关闭kdump(该功能主要作用是在内核出现问题后进行记录,一般不用开启) 10、设置网络和主机名 设置主机名 配置网络信息 勾选此选项,在网络可用时自动连接 随后点击ipv4设置 ip地址、子网掩码、网关、dns地址,随后保存 完成界面,随后点击done保存 11、开始安装 随后设置密码 等待安装完成即可 完成后点击rebooot重启服务器

【Linux--信号】

目录 一、信号的概念1.1查看系统的信号1.2信号的处理方式 二、信号的产生方式2.1通过终端按键2.2kill命令2.3系统调用2.4软条件产生信号2.5硬件异常产生信号 三、信号的保存3.1概念的认识3.2sigset_t3.3信号集操作函数3.4sigprocmask && sigpending3.4.1sigprocmask3.4.2 sigpending 3.5函数使用 四、信号的捕捉4.1内核态与用户态4.2内核空间与用户空间4.3信号捕捉4.4sigcation 五、可重入函数六、volatile七、SIGCHLD信号 一、信号的概念 1.1查看系统的信号 kill -l 1-31是普通信号,34-64是实时信号 每一个信号都有一个编号和一个宏定义名称。 1.2信号的处理方式 忽略信号。忽略信号也是处理了信号执行信号的默认处理动作利用signal系统调用,提供一个信号处理函数,要求在内核处理该信号时切换到用户态执行这个函数,这种方式称为捕捉一个信号。就像上面的代码,将2号信号捕捉为一个 handler函数。 #include<iostream> using namespace std; #include<sys/types.h> #include<unistd.h> #include<signal.h> #include<stdlib.h> void myhandler(int signo) { cout<<"process get a signal:"<<signo<<endl; } int main() { signal(2,myhandler); while(true) { cout<<"i am a happy process:"<<getpid()<<endl; sleep(1); } return 0; } 二、信号的产生方式 2.1通过终端按键 比如上面的ctrl + c 就给进程发送了2号信号SIGINT。而ctrl + \可以给进程发送3号信号SIGQUIT。 通过按键组合的方式来给进程发送信号。 2.2kill命令 kill 系统调用,作用:给当进程为pid的进程发送信号 2.3系统调用 kill系统调用 参数:pid:进程pid sig:几号信号 返回值:成功返回0,失败返回-1

nvidia相关

参考 nvidia-jetson-agx-orinjetson-linuxReal-Time Rendering Resourcesnvidia vulkancudaglvnd Status Report 2016

软件测试面试问题汇总

一般软件测试的面试分为三轮:笔试,HR面试,技术面试。 前两轮,根据不同企业,或有或无,但最后一个技术面试是企业了解你“行不行”的关键环节,每个企业都会有的。 在平时的学习、工作中一定要善于总结,如果回答不好,面试官会认为你技术能力有限或者不勤于思考,是很容易被pass掉的。 小编简单总结了些面试过程中经常会被问到的问题: hr会问的几个问题 1.你觉得自己的优缺点是什么 2.你上一家公司的薪资是多少,调了几次薪 3.为什么从上一家公司离职呢 4.离职证明和背调可以吗? 5,你还有什么问题要问吗? (这些问题都带坑!回答不好会死在这儿的,不知道怎么回答,可以百度下或者联系在线客服) 技术方面的问题 【功能方面】 1.你是怎样理解软件测试的 2.让你介绍你做的项目的业务流程 3.软件测试的流程 4..你认为什么是bug,说一下你印象深刻的bug,结合项目说一下你们公司有哪些类型的bug和bug评判严重程度的标准 5.如何保证软件测试的质量 6.如何保证你写的测试用例覆盖所有的场景 7.如果用户在正式环境发现一个bug,你在测试环境没有发现,怎么办 8.项目测试到什么程度就可以上线了 【场景方面】 1.让你写登录,支付,充值,购物车,文件上传,三角形,笔,水杯等的测试点(80%的公司会让你分析测试点!!!) 【计算机网络基础知识】 1.http协议的内容是什么? 2.请求头的内容有哪些 3.常见的状态码有些 4.http和https的区别有哪些 5.tcp和udp的区别 6.请描述下tcp的三次握手四次挥手的过程 7.网关的作用 8.osi七层模型每一层的作用 9.session是什么,cookie是什么,有什么使用场景 10.session和cookie的区别 【接口测试】 1.你认为的接口是什么 2.接口测试工具工作的原理是什么呢? 3.接口中包含哪些内容 4.接口用例如何写 5.你是如何做接口测试的,使用的什么工具? 6.接口自动化了解过吗 7.get和post的区别 【自动化测试】 1.可能会问到selenium 2.selenium元素定位的方式,显示等待,隐式等待,强制等待的区别等 3.接口自动化脚本的编写原理和过程 这块可以不用担心,只要会一些简单的就可以了,因为对于初中级测试来说,自动化是一个加分项,一般如果自动化掌握的很熟练的同学薪资是在12-25k之间的 【其他测试问题】 1.简述转包过程,你用的抓包工具是什么 2.如何分析一个bug是前端还是后端bug 3.url后面跟数据的话如何拼接上去 4.抓包的原理是什么 5.你们公司使用的bug管理工具是什么 6.弱网测试是如何实现的 7.web测试和app测试的区别是什么 8.给你一个软件你会如何进行测试 9.兼容性测试你是如何做的(从app 和 web两方面回答) 10.冒泡排序之类的一些代码题 11.如果在正是环境发现bug测试环境没发现怎么办 12.如果有一个bug,怎么判断这个bug是前端代码导致的还是后端代码导致的 这些问题回答的正确与否直接决定了你能否留下,甚至能拿多少薪资的问题,多回答对一个问题,就有可能多为自己争取到500-1000块的工资呢。 总结 如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面 自动化测试相关教程推荐: 2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili 2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili 测试开发相关教程推荐 2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili postman/jmeter/fiddler测试工具类教程推荐 讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili 2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili 2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili 总结: 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 ​

计算机组成原理课后习题

第一章 比较电子数字计算机和电子模拟计算机的特点。 模拟计算机的特点是数值由连续量来表示,运算过程也是连续的。数字计算机的主要特点是按位运算,并且不连续地跳动计算。模拟计算机用电压表示数据,采用电压组合和测量值的计算方式,盘上连线的控制方式,而数字计算机用数字0和1表示数据,采用数字计数的计算方式,程序控制的控制方式。数字计算机与模拟计算机相比,精度高,数据存储量大,逻辑判断能力强。 数字计算机如何分类?分类的依据是什么? 数字计算机可分为专用计算机和通用计算机,是根据计算机的效率、速度、价格、运行的经济性和适应性来划分的。 数字计算机有哪些主要应用? 科学计算、自动控制、测量和测试、信息处理、教育和卫生、家用电器、人工智能。 冯诺依曼型计算机的主要设计思想是什么?它包括哪些主要组成部分 主要设计思想是:采用存储程序的方式,编制好的程序和数据存放在同一存储器中,计算机可以在无人干预的情况下自动完成逐条取出指今和执行指令的任务:在机器内部,指今和数据均以二进制码表示.指今在存储器中按执行顺序存放。主要组成部分有: 运算器、逻辑器、存储器、输入设备和输出设备。 什么是存储容量?什么是单元地址?什么是数据字?什么是指令字? 存储器所有存储单元的总数称为存储器的存储容量。每个存储单元都有编号,称为单元地址。如果某字代表要处理的数据,称为数据字。如果某字为一条指令,称为指今字。 什么是指令?什么是程序? 计算机硬件可直接执行的每一个基本的算术运算或逻辑运算操作称为一条指令,而解算某一问题的一串指令序列,称为程序。 指令和数据存放在内存中,计算机如何分它们是指令还是数据? 取指周期中从内存读出的信息流是指令流,而在执行器周期中从内存读出的信息流是数据流。 什么是内存?什么是外存?什么是CPU?什么是适配器?简述其功能。 半导体存储器称为内存,存储容量更大的碰盘存储器和光盘存储器称为外存,内存和外存共同用来保存二进制数据。运算器和控制器合在一起称为中央处理器,简称 CPU,它用来控制计算机及进行算术逻辑运算。适配器是外围设备与主机联系的桥梁,它的作用相当于一个转换器,使主机和外围设备并行协调地工作。 计算机的系统软件包括哪几类?说明它们的用途 计算机的系统软件包括系统程序和应用程序。系统程序用来简化程序设计,简化使用方法,提高计算机的使用效率,发挥和扩大计算机的功能用用途:应用程序是用户利用计算机来解决某些问题而编制的程序。 说明软件发展的演变过程。 在早期的计算机中,人们是直接用机器语言来编写程序的,这种程序称为手编程户或目的程序:后来,为了编写程序方便和提高使用效率,人们使用汇编语言来编写程序称为汇编程序,为了进一步实现程序自动化和便于程序交流,使不熟悉具体计曾机的)也能很方便地使用计算机,人们又创造了算法语言,用算法语言编写的程序称为源程序.源程序通过编译系统产生编译程序,也可通过解释系统进行解释执行:随着计算机技术的日益发展,人们又创造出操作系统:随着计算机在信息处理、情报检索及各种管理统中应用的发展,要求大量处理某些数据,建立和检索大量的表格,于是产生了数据库管理系统。 现代计算机系统如何进行多级划分?这种分级观点对计算机设计会产生说明影响? 第一级是微程序设计级,这是一个实在的硬件级,它由机器硬件直接执行微指今第二级是一般机器级,也称为机器语言级,它由程序解释机器指令系统:第三级是操作系统级,它由操作系统实现,第四级是汇编语言级,它给程序人员提供一种符号形式语言,以减少程序编写的复杂性:第五级是高级语言级,它是面向用户的,为方便用户编写应用程序而设置的。用一系列的级来组成计算机的接口对于掌握计算机是如何组成的提供了一种好的结构和体制,而且用这种分级的观点来设计计算机对保证产生一个良好的系统结构也是很有帮助的。 为什么软件能够转化为硬件,硬件能够转化为软件?实现这种转化的媒介是什么? 因为任何操作可以由软件来实现,也可以由硬件来实现:任何指令的执行可以由硬件完成,也可以由软件来完成。实现这种转化的媒介是软件与硬件的逻辑等价性。 CPU的性能指标有哪些?其概念是什么? 吞吐量:表征一台计算机在某一时间间隔能够处理的信息量。响应时间:表征从输入有效到系统产生相应之间的时间度量,用时间单位来度量。利用率:在给定的时间间隔内系统被实际使用的时间所占的比率。处理机字长:指处理机运算器中以此能够完成的二进制数运算的位数。总线宽度:CPU中运算器与存储器之间进行互连的内部总线二进制位数。存储器容量:存储器中所有存储单元的总数目。存储器带宽:单位时间内从存储器读出的二进制数信息量。主频/时钟周期:CPU的工作节拍受主时钟控制,主时钟不断产生固定频率的时钟。CPU执行时间:执行一般程序所占用的CPU时间。CPI:执行一条指令所需的平均时钟周期数。MIPS: 平均每秒执行多少百万条顶点指令数。FLOPS:每秒执行浮点操作的次数。 “计算机应用”与“应用计算机”在概念上等价嘛?用学科角度和计算机系统的层次结构来说明你的观点。 计算机应用和应用计算机在概念上是不等价的。计算机应用是计算机学科与其他学科相结合的交叉学科,是计算机学科的组成部分,分为数值计算和非数值应用两大领域。应用计算机是借助计算机为实现特定的信息系统功能的手段。在计算机系统的层次结构中,应用计算机是多级计算机系统层次结构的最终目标,是高级语言级之上的服务层次。

linux filesystem 分区扩容

目标 查看挂在磁盘情况 sudo df -h 目前 /dev/sda2 大小为 25G; user@ubuntu20-server:~$ sudo df -h Filesystem Size Used Avail Use% Mounted on udev 2.9G 0 2.9G 0% /dev tmpfs 600M 1.1M 599M 1% /run /dev/sda2 25G 5.4G 18G 24% / tmpfs 3.0G 0 3.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.0G 0 3.0G 0% /sys/fs/cgroup /dev/loop2 64M 64M 0 100% /snap/core20/1828 /dev/loop0 92M 92M 0 100% /snap/lxd/24061 /dev/loop1 50M 50M 0 100% /snap/snapd/18357 /dev/loop3 41M 41M 0 100% /snap/snapd/20290 tmpfs 600M 0 600M 0% /run/user/1000 查看实际磁盘与卷大小

智能变电站协议系列-3、MMS协议示例(IEC61850)

文章目录 一、前言二、资料收集三、libiec61850的MMS协议的操作文件的示例运行及抓包分析1、协议理解2、代码查看及示例运行3、wireshark抓包及分析 四、最后 一、前言 接下来我们来分析一下MMS协议,该协议比较抽象,从定义上和理解上都比较抽象,只能在实际使用中去熟悉了,这里我们以操作文件的demo示例来理解和分析整个协议。 二、资料收集 对MMS会有一个整体的认识:https://blog.csdn.net/sinat_41915699/article/details/119905968 对MMS抓包分析有个整体的认识:https://www.anquanke.com/post/id/186560 https://www.jianshu.com/p/736505163b73 IEC61850建模,认识MMS的建模:https://blog.csdn.net/kof98765/article/details/112903104 https://www.cnblogs.com/shanwenbin/archive/2013/01/18/2865684.html https://webstore.iec.ch/preview/info_iec61850-90-5%7Bed1.0%7Den.pdf 三、libiec61850的MMS协议的操作文件的示例运行及抓包分析 1、协议理解 关于建模的过程我们暂时不做深入研究,针对IEC61850的MMS协议做一定了解后,使用demo中已有的mms示例server_example_files服务端和mms_utility这个客户端示例来做下测试,并简要分析其代码,然后以此来抓包分析整个mms协议。 如果对MMS协议不了解,面对example下面的示例程序会一脸懵,完全不知道怎么运行测试,这里可以简单理解为MMS协议或者说标准通过将一些设备、操作、数据类型等做了面向对象的抽象,将其抽象为类,比如如下这些类: Environment and General Management Services 处理网络连接VMD Support VMD全称为Virtual Machine Device, 是对现实物理设备的一种映射Domain 表示 VMD 中的可加载资源(例如程序)。 个人理解就是一块存储空间,可以存储变量、程序、文件等内容,处理上传下载等任务Program Invocation 程序调用,由一个或多个域组成的可运行程序Variable 变量,类型化数据的元素(例如整数、浮点数、数组等)Named Variable List 已命名的变量列表Event 表示事件和动作状态的对象Semaphore 信号量,用于控制共享资源访问的对象Operator Stations 供操作员使用的“显示器”和“键盘”Journals 日志,对事件和变量的记录Files 文件 然后以服务端-客户端的方式将对象的属性和方法提供出来使用,对象本身可能既具备客户端功能也具备服务端功能,将对外提供的能力以服务端形式展示,并通过客户端能力获取其他对象的服务。 有类就需要实例化对象,而对象则提供服务方法,比如文件的服务就提供读文件夹、打开文件、获取、删除和重命名方法,这样就好理解一些了吧,实际上就是将一些人为的操作内容抽象为类,然后类对象提供服务供客户端调用,实际上就像是提供web服务一样,只是将客户可能产生的接口也都通过协议方式进行了抽象,以模型方式提供xml文件,便于后续自行扩展新接口,这些接口都是包含在其协议定义的各个大类中的(就像积木一样,把常见的积木类型都定义好了为几大类,圆的,方的,三角的等等,然后根据已有的图纸或者自行想象去拼很多的积木人或者积木动物之类的,这些人和动物就像是具体业务的堆叠了,目前常见的就是电力场景业务,电力场景需要的设备、网络连接、程序、数据变量、开关电等事件、日志、文件操作等各种需要的操作都定义进去了,实际上是一套可扩展的标准,并不限于电力场景,只是电力场景用的成熟了,用这个积木已经搭出来一套完善的图纸了,各个电力业务场景可以根据这套图纸来复制搭建了,如果不满足场景可能就会扩展积木类型,也就是协议或者标准的更新)。 关于模型的作用也就是这个文章中提到的信息模型与通信协议独立(https://www.jianshu.com/p/736505163b73):IEC61850标准定义了抽象通信服务接口ACSI(Abstract Communication Service Interface)。 ACSI独立于具体的网络底层通信协议(如MMS)和具体的网络类型(如以太网),需要具体网络接口时,只需采用特定通信服务映射SCSM(Specific Communication Service Mapping),由SCSM映射到具体的通信协议栈。SCSM的内容就是根据需求将ACSI信息模型和服务映射到具体的通信协议。IEC61850需要对信息模型进行扩充,升级时,无需改变已采用的底层通信协议,只要改变具体的SCSM即可。 ACSI主要设定了各类服务模型包括连接服务模型、变量访问服务模型、数据传输服务模型、设备控制服务模型、文件传输服务模型、时钟同步服务模型等。这些服务模型定义了通信对象以及如何对这些对象进行访问,实现客户应用端和服务器应用端的通信,完成实时数据的访问和检索、对设备的控制、时间报告和记录、设备的自我描述等。 2、代码查看及示例运行 (1)服务端部分: 其中simoleIO_direct_control.cid就是对应的XML协议,这个在建模部分的文章中有提到(https://www.yuque.com/xiaoyao-nhu75/mlgg0k/kfke8akc2gcbq116#VWKxa),这里我们没有具体的标准的文献,只需要先了解相关概念即可,static_model.c就是对应的模型转换后的代码,server_example_files.c就是对应服务的代码,通过分析我们发现其设置的文件存储路径就是vmd-filestore,demo程序在其下创建了test文件,内容也是test,我们后续可以通过mms客户端的代码取打开获取相关文件的一些信息: 如下是对应代码,整体调用还是比较简单,我做了一些简单的注释: /* * server_example_files.c * * - How to use some special MMS file service features * - How to control how files file services can be used */ #include "

云数据库性能深度测评与对比

笔者一直都在非常深度关注、调研和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。 所以,近期对各个云数据库厂商做了一个较为系统的性能对比,供开发者和企业在云数据库选型时的参考。 总览:云数据库性能对比 在进行大量测试之后,对主要的云厂商分别选择了一个“企业级规格”(适合生产环境配置的)进行了对比。性能对比如下图: 可以看到: * 华为云数据库(红色),在中高并发度时(>=16),性能最强,且高于第二名约18%; * 腾讯云数据库(紫色),在低并发时(<=8),性能最强,高于第二名约15%; * 百度智能云数据库(淡蓝色),在中高并发时(>16),性能跃居第二,仅次于华为云; * 阿里云数据库(黄色)和谷歌云数据库(绿色)在低并发时也都有不错的表现,高并发之后性能则持续稳定在850 tps。这两家云数据库的响应延迟,表现得也非常接近。 * 亚马逊云数据库(Amazon RDS,蓝色)和微软Azure云在中低并发时,表现出了较为相近的性能趋势,且性能较低。但是在高并发时,两者都表现出了非常强的扩展性,AWS RDS在96和128并发时,性能超过阿里云、腾讯云、谷歌云等,跃居第三;同样的,微软Azure云的数据库在高并发时也超过了阿里云、谷歌云,也有不错的性能表现。 下图是对应的平均延迟趋势图: “企业级规格”的定义 为了方便跨云对比,笔者根据常见的企业核心数据库配置,在每朵云的RDS的中选择了一个适合的规格作为对比代表,并将该规格称之为“企业级规格”。在众多配置选项中,“企业级规格”需满足如下条件: * 具备敏捷的高可用能力。需要是双节点或更多,在其中一个节 点出现故障时,能够快速的进行切换(Switchover或failover); * 需要具备非常高的数据可靠性保障。至少需要跨可用区(同城)的容灾,且数据在不同可用区同步持久化。即需要使用同步或“接近同步”(如半同步)的复制; * 具备较好的性能一致性。核心数据库对于稳定性有着更高的要求,需要使用独享的计算、存储、内存等资源。不允许因为资源争抢导致的,故数据库的性能表现需要较为一致,不能有太大的波动,或者未知的不可预测的资源争抢。 * 关于规格的大小,这里选择中等规格4vCPU16GB内存/100GB存储/3000 IOPS。主要考虑是,一方面是改规格为核心业务使用的起步规格,另外,考虑将测试程序设计的较为简洁,便于后续持续测试与持续对比。 华为云RDS性能详情 华为云的规格选择与配置都很简洁。主要支持通用型、鲲鹏增强型、独享型实例。我们看看这三种规格的性能情况。 在前面,“企业级规格”对比中,选择了企业级用更为常用的“独享型”。该规格也在全部“企业级规格”的对比中,表现出了最强的性能。在高并发的情况下,性能高出了其他云数据库厂商约30%~100%。 华为云通用规格通过更多的资源共享,可以获得更好的性能,但是也因为共享的原因,性能会有时候不稳定。在这里的测试中,如果使用通用型规格,在高并发时,用户又可以获得约15%~20%的性能。 鲲鹏增强型,使用的是华为自研的鲲鹏芯片(基于ARM)。该芯片的自主化率是非常高的,在国产化芯片中,属于佼佼者。但,也因为复杂的环境和技术的差异,相比Intel的x86有着约20%~30%的性能退化。考虑到鲲鹏芯片在国产芯片中的地位,在国产化场景中,采用该规格是非常不错的选择。 百度智能云数据库(RDS)性能 在前面的整体对比中看到,百度智能云RDS的“企业级规格”在中高并发时,表现出了非常强的性能,位居榜眼。百度智能云RDS的选项也比较简单,性能相关主要是“异步/半同步复制”、“高性能/默认参数模板”。其中,“异步/半同步复制”与阿里云、腾讯云等类似,这里不再赘述。 “高性能/默认参数模板”的配置各个云厂商略有一些不同,在笔者测试时,百度智能云RDS对应的部分参数如下: * 高性能:sync_binlog=1000、innodb_flush_log_at_trx_commit=2 * 默认参数模板:sync_binlog=1000、innodb_flush_log_at_trx_commit=1 在实际测试中,我们也看到,不同参数模板对于性能有一些影响,但是并不明显。具体性能如下: 再来单独对比一下“默认参数模板”和“高性能参数模板”的性能情况。从如下两幅对比图中,则可以更加清晰的看到,无论是半同步还是异步模式下,这两类参数模板都并没有表现出太大的性能差别。 腾讯云RDS性能详情 在购买腾讯云数据库时,与阿里云类似,也提供了比较丰富的选项供用户选择。用户可以在数据库可靠性与性能、性能稳定性与性能峰值之间进行平衡的选择。这些选项分别是“通用/独享”、“异步/半同步复制”、“高性能/高稳定性参数模板”。其中“通用/独享”选项与阿里云相同,这里不再赘述。 “异步/半同步复制”配置的是主备复制时的同步策略,异步则意味着主备可能存在一定的延迟,不过根据经验来看这个延迟一般是毫秒级别的,有时候甚至更低。“半同步”同步复制下,主库需要再备库接受完日志后,才完成日志的提交,数据可靠性有更好的保障。 “高性能/高稳定性参数模板”的区别在于MySQL / InnoDB的一些与日志相关的参数的配置。其中“高稳定”在数据可靠性上,有着更严格的配置,例如sync_binlog=1&innodb_flush_log_at_trx_commit=1。而“高性能”参数模板,以上两个参数分别为1000和2,是在数据的可靠性上做了适当的让步,以换取更好的性能。 以上,三组选择的组合,一共有如下八个类型的实例,测试的性能表现如下: 可以看到: 首先,通用型实例因为能够获得额外的共享的CPU资源,表现出了普遍的更高的性能,在较高的并发压力之下,高出约100~200%。异步与半同步复制的实例的性能相差也非常明显,有更强可靠性的“半同步复制”性能要低20%~35%之间。 在这一次的测试中,腾讯云的独享实例,也表现出了一些异常情况。高稳定和高性能这两个参数模板之间,在独享实例测试组中,这两组模板的性能表现与其名称表现得并不同。在独享实例的测试中,高稳定的参数模板在高并发的时候,都表现出了更高的性能。即“独享-异步-高稳定” > “独享-异步-高性能” 以及 “独享-半同步-高稳定” > “独享-半同步-高性能”。这一点与预期得是非常不同的。 阿里云RDS性能详情 阿里云RDS提供了非常丰富的选项,给了开发者更大的选择空间,让开发者可以在性能的稳定性、数据可靠性、性能高低之间做更多的平衡与选择。另外,新推出的“经济型”(之前的ARM规格)实例又给了开发者更高性价比的RDS方案。但,另一方面,也让容易让开发者非常困惑,难以选择。 这里我们来看看这些规格、选项对性能的影响情况:(注:各种类型的架构与区别可以参考之前的文章:一张图读懂阿里云数据库RDS架构与选型) 阿里云提供了通用/独享、经济/标准、高性能/默认参数模板等选项,一共有八种如上的组合。“通用/独享”代表了资源的共享程度;经济/标准则代表不同的CPU类型(ARM vs x86);高性能/默认参数模板则是代表数据可靠性的严格程度。更多详细说明可以参考:一张图读懂阿里云数据库RDS架构与选型。 整体上,通用规格,凭借其更多的CPU资源共享,整体表现出了更强劲的性能。一般的,通用规格性能比独享规格的性能的要高50%~150%。所以,当使用通用规格遇到了性能波动的问题的时候,如果升级到独享规格,则需要注意,即使是看似同样大小的规格的实例,性能可能会相差很多。这就是需要获得更稳定性能的代价,下图可以更加清晰的诠释这一点: 阿里云的数据库选项中,还可以选择标准型、经济型。关于经济版是如何“经济的”,目前阿里云并没有太多阐述。不过,比较确定的是,经济版并不是简单仅包含ARM实例(参考)。经济版本,尝试通过更低的价格提供更强的计算能力,付出的代价是什么,并没有太多详细的阐述,可能会包括更激烈的资源竞争等。关于标准版和经济版的详细的对比可以参考:阿里云RDS标准版(x86) vs 经济版(ARM)性能对比。

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated="true"==e.hasActivated 进行搜索 将它改为 hasActivated="true"=="true" 重新打开typora看到成功激活!!! ———————————————— 转载:typora mac版本激活-CSDN博客

安装最新版kubenetes 1.29问题总结

1.使用最新版kubeadm安装单节点集群时,kubeadm init初始化不成功 具体问题: 解决办法: 1.本地hostname写入/etc/hosts文件 2.kubenetes官网中有这么一段话:容器运行时 | Kubernetes 注意!!!kubenetes 1.29默认使用containerd作为CRI runtime,但是由于现在大部分kubenetes版本还在使用docker,默认/etc/containerd/config.toml配置文件的disabled_plugins列表默认打开且cri在该列表中,所以!!!注释掉该行配置即可!!! ***修改该配置文件后记得重启服务生效:sudo systemctl restart containerd 3.初始化时可以接参数:--apiserver-advertise-address 本地IP地址,按需再接其余的参数。 2.退出机器或开新的终端时k8s不会自动启动 问题: 解决办法: export KUBECONFIG=/etc/kubernetes/admin.conf 临时定义 长久解决办法,把该语句写入./bashrc,source ./bashrc即可

java 经纬度验证-正则表达式

经度在 -180 到 180 度之间,纬度在 -90 到 90 度之间。 纬度验证正则表达式: private static final String LATITUDE_PATTERN = "^[-+]?((90(\\.\\d{1,6})?)|([1-8]?\\d(\\.\\d{1,6})?))$"; ^: 匹配输入的开始位置。[-+]?: 匹配可选的正号或负号。(: 开始一个分组。 90(\\.\\d{1,6})?: 匹配 -90 到 90 之间的值,小数部分最多为6位。|: 或者。[1-8]?\\d(\\.\\d{1,6})?: 匹配 -89.999999 到 89.999999 之间的值,小数部分最多为6位。$: 匹配输入的结束位置。 经度验证正则表达式: private static final String LONGITUDE_PATTERN = "^[-+]?((180(\\.\\d{1,6})?)|((1[0-7]\\d)|([1-9]\\d?))(\\.\\d{1,6})?)$"; ^: 匹配输入的开始位置。[-+]?: 匹配可选的正号或负号。(: 开始一个分组。 180(\\.\\d{1,6})?: 匹配 -180 到 180 之间的值,小数部分最多为6位。|: 或者。((1[0-7]\\d)|([1-9]\\d?))(\\.\\d{1,6})?: 匹配 -179.999999 到 179.999999 之间的值,小数部分最多为6位。$: 匹配输入的结束位置。 这两个正则表达式分别适用于验证纬度和经度的格式,并且限制了小数部分的位数为最多6位

Elasticsearch可视化平台Kibana [ES系列] - 第498篇

历史文章(文章累计490+) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 全文检索[ES系列] - 第495篇 ElasticSearch应用场景以及技术选型[ES系列] - 第496篇 ElasticSearch详细搭建以及常见错误high disk watermark [ES系列] - 第497篇 悟纤:师傅,今天是圣诞节耶。 师傅:祝徒儿圣诞节快乐🎄,祝大家圣诞节快乐。 悟纤:祝师傅圣诞节快乐,快快乐乐。 悟纤:那今天是圣诞节,师傅还要讲知识吗? ​师傅:圣诞节不影响讲知识,过节和学习不冲突。 悟纤:那师傅赶紧吧,学习好了,咱们也过节去。 导读 Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。 一、客户端Kibana安装 Kibana是一个开源分析和可视化平台,旨在与Elasticsearch协同工作。 参考文档: https://www.elastic.co/guide/en/kibana/7.17/get-started.html https://www.elastic.co/guide/en/kibana/8.10/get-started.html 1.1下载并解压缩Kibana 下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana 选择版本:8.10.2 将下载的文件kibana-8.10.2-darwin-x86_64.tar.gz进行解压。 1.2修改Kibana.yml 修改config/kibana.yml elasticsearch.hosts: ["http://localhost:9200"] 1.3运行Kibana 直接执行bin/kibana 1.3访问Kibana 访问Kibana: http://localhost:5601/app/dev_tools#/console cat API cat API 是 Elasticsearch 提供的一个用于查看和显示集群信息的 RESTful API。它可以用于获取关于索引、节点、分片、健康状态等各种集群相关的信息。 /_cat/allocation #查看单节点的shard分配整体情况/_cat/shards #查看各shard的详细情况/_cat/shards/{index} #查看指定分片的详细情况/_cat/master #查看master节点信息/_cat/nodes #查看所有节点信息/_cat/indices #查看集群中所有index的详细信息/_cat/indices/{index} #查看集群中指定index的详细信息/_cat/segments #查看各index的segment详细信息,包括segment名, 所属shard, 内存(磁盘)占用大小, 是否刷盘/_cat/segments/{index}#查看指定index的segment详细信息/_cat/count #查看当前集群的doc数量/_cat/count/{index} #查看指定索引的doc数量/_cat/recovery #查看集群内每个shard的recovery过程.

模型微调入门介绍二

上一篇博客中介绍了如何使用YelpReviewFull进行模型微调,其中,重点介绍了数据加载和数据预处理,此篇博客将介绍如何用squad数据集训练一个问答系统模型。 squad数据集 SQuAD(The Stanford Question Answering Dataset)是一组阅读数据集,该数据集基于群众在维基百科中提出的问题,其中每个问题的答案来自于对应阅读段落的一段文本,共计500 多篇文章中的10 万多个问答配对。具体的数据信息如下图所示,包括title,context,question,answers字段,answer的答案来源于context,answer字段中给出了答案在context中的start字符位置。 squad数据集最早设计出来,用于训练模型的阅读理解能力,文本摘要等能力,因为从context中寻找问题答案,本身就涵盖了对context的阅读理解能力,生成答案体现了对context内容的摘要能力。问答系统实际是一个端到端的业务场景,这个场景里面包含了阅读理解能力、文本摘要和内容生成能力。 数据预处理代码 (备注:以下代码来源于极客时间模型微调训练营) 下面的代码编写了大量脚本来对原始数据进行预处理,我们需要了解的是:这些代码究竟进行了哪些操作,为什么要进行这些操作。 from transformers import AutoTokenizer squad_v2 = False model_checkpoint = "distilbert-base-uncased" batch_size = 16 pad_on_right = tokenizer.padding_side == "right" # The maximum length of a feature (question and context) max_length = 384 # The authorized overlap between two part of the context when splitting it is needed. doc_stride = 128 tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) import transformers assert isinstance(tokenizer, transformers.

C# 读取Word表格到DataSet

目录 功能需求 Office 数据源的一些映射关系 范例运行环境 配置Office DCOM 关键代码 组件库引入 ​核心代码 杀掉进程 总结 功能需求 在应用项目里,多数情况下我们会遇到导入 Excel 文件数据到数据库的功能需求,但某些情况下,也存在使用 Word 进行表格数据编辑的情况。Word 和 Excel 其实各有特点,用户的习惯不同,即使同一数据源,可能提供的数据源文件类型也不同,这其中也包括导入Word内容的功能,比如表格数据导出到DataSet数据集。 Office 数据源的一些映射关系 下图是一个简单的 Office 数据源的映射关系: 1、第一层级比如 WORD / EXCEL 为应用层级(Application)、 DATASET / DATABASE 为数据容器 2、第二层级,比如WORD 包含一个文档对象(Docment)、Excel 包含一个工作簿对象(WorkBook)、DataSet / DataBase 包括一组数据表对象(Tables) 3、第三层级,比如Word里的表格对象(Table)、Excel里的工作表对象(Sheet) 最实际的工作任务,是要将Table或Sheet对象的二维数据对应导出生成到 DataSet 里的 Table 对象,如果有多个则生成对应的集合。最后我们可能会再次导出到 DataBase 的数据表集合里(Tables)。 范例运行环境 操作系统: Windows Server 2019 DataCenter 操作系统上安装 Office Word 2016 .net版本: .netFramework4.7.1 或以上 开发工具:VS2019 C# 配置Office DCOM 对于安装原生Office应用,我们需要对DCOM进行进一步的配置方可使用其API。 打开控制面板、管理工具、组件服务: 点击组件服务、计算机、我的电脑、DCOM配置 找到 Microsoft Word97-2003 文档应用程序

解决SpringBoot配置文件项目重启出现乱码的情况

近日,在创建了SpringBoot项目后往配置文件中写了相关的系统配置,并且在上面加了中文注释,但是在重启项目或开机重启后遇到了注释乱码的情况,查询了各种相关资料,得以解决 发现问题 首先看到我在这个application.properties的SpringBoot配置文件中加上了一些系统配置,好去连接数据库,为了方便阅读便再其上头加上了一段注释,要知道在配置文件中加注释是以【#】开头 然后我去重启了一下项目后,可以看到我在上面加的注释变成了乱码,这是为什么呢? 排查问题 如果读者学习过SpringBoot配置文件的话,就可以知道在一个SpringBoot项目中是存在两种配置文件格式的,一个是以.properties结尾,一个则是以.yml/.yaml结尾,前者用的久一些,后者是之后才出的,可以支持多种语言格式的 一般来说,如果出现乱码问题的话,都是字符集的问题,还记得MySQL无法输入中文字符的问题吗,那时候我们也是去修改的MySQL配置文件然后我去查看这两个配置文件的默认字符集,就发现是不一样的,.properties结尾的配置文件为【ISO-8859-1】,而.yml结尾的配置文件为【UTF-8】,那此时我就知道了原因所在,因为只有【UTF-8】的字符集可以识别中文字符 解决问题 然后我们就去解决一下上述这个字符集的问题 然后我们去搜索【文件编码】,英文的话为File Encoding,默认的设置就是下面这样 然后将这个页面中的所有字符集都修改为【UTF-8】即可,最后点击【应用】,然后【确定】即可 但是只改上面这个的话就只是对你当前这个项目起效,若是你再去创建一个SpringBoot项目的话,依旧会出现中文乱码的情况,所以我们还要再去做一个修改,相关步骤也是一样,这里便不再过多赘述 接下去,你要做的就是把你当前项目中的application.properties配置文件给删除,然后再建一个一模一样的然后我们就可以看到这个默认的字符集发生了变化,为【UTF-8】了 最后我们再去重启项目的时候,就发现不会出现中文乱码的情况了,如果对【新建项目的设置】也修改了的话,那么你再去新建一个项目的话也是没问题的,不会出现乱码 本文完,遇到问题特此分享,希望对您有帮助🌹

【.NET】Mapster指南

文章目录 概述具体安装 Mapster定义实体简单使用Mapster 配置 (TypeAdapterConfig)方式一方式二 忽略字段分支(Fork)NewConfig 方法运行时传参其他小技巧Adapt 扩展方法的使用拦截映射前后 来源 概述 Mapster是一个高性能的用于对象映射的类库,同类型的产品还有AutoMapper。它提供了一系列的API和工具,以下为几个重要的类和接口: @Adapt注解:用于将实体类映射到数据库表中的指定列上。@Mapper注解:用于将实体类映射到数据库表中的指定列上。Entity接口:定义了实体类的属性和映射规则。Mapper接口:定义了映射规则的具体实现。Query接口:定义了查询语句的规则。DataStore接口:定义了数据存储的接口。 Mapster与AutoMapper的性能对比: 方法平均值标准偏差错误第0代第1代第2代分配“Mapster 6.0.0”108.59毫秒1.198毫秒1.811毫秒31000--124.36 MB“Mapster 6.0.0(罗斯林)”38.45毫秒0.494毫秒0.830毫秒31142.8571--124.36 MB'Mapster 6.0.0(FEC)'37.03毫秒0.281毫秒0.472毫秒29642.8571--118.26 MB'Mapster 6.0.0(Codegen)'34.16毫秒0.209毫秒0.316毫秒31133.3333--124.36 MB“ExpressMapper 1.9.1”205.78毫秒5.357毫秒8.098毫秒59000--236.51 MB“AutoMapper 10.0.0”420.97毫秒23.266毫秒35.174毫秒87000--350.95 MB 具体 安装 Mapster PM> Install-Package Mapster 或者 dotnet add package Mapster 定义实体 目的:使用 Mapster 实现 User 到 UserDto 的映射 public class User { public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } public string like { get; set; } } public class UserDto { public string name { get; set; } public int UserAge { get; set; } public string UserSex { get; set; } public string like { get; set; } } 简单使用 /* * 默认情况下,无需任何配置,Mapster会根据两个实体字段名称相同进行匹配 * 第一次调用时,配置会被缓存,第二次将会从缓存中取,以此提升性能 */ var user = new User(); var dto = user.

怎么搭建实时渲染云传输服务器

实时渲染云传输技术方案,在数字孪生、虚拟仿真领域使用越来越多,可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器,具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建? 首先需要明确以下几个问题:1、搭建实时渲染服务器的目的是什么?2、需要流化的模型对服务器的要求是怎样的?3、实时渲染平台系统 1、点量云小芹目前接触到的搭建实时渲染服务器,一般有两个目的:(1)验证该技术方案的实际效果,一般是之前没有用过这种技术方案,使用的是一个对外演示的模型,不是具体项目的3D应用。测试一般关注的是流畅度、不同引擎模型在不同轻终端设备上的效果、显卡的利用率和负载均衡以及多并发下的稳定性。 (2)另外一种就是在项目中实际使用,需要配置什么样的显卡以及具体的数量,才能达到项目需求,该类情况下除了关注流畅性等问题外,对显卡的利用、码率、综合经济成本都都需要详细考虑。 实时渲染服务器搭建 2、需要流化的模型对服务器的要求,小芹认为第一步要保证要测试的3D引擎模型在准备的服务器上能流畅跑起来,不使用实时渲染时在模型比较复杂的场景下,GPU和CPU的利用率要在80%以下。其实这个不是实时渲染对服务器的要求,而是3D模型本身对服务器硬件的要求。这里要明确一个问题,点量云实时渲染系统并不占用服务器的显卡,也不会降低3D模型对硬件的要求,即3D模型程序在服务器上流畅跑起来是流化的前提条件。 3、实时渲染平台选择要考虑便捷、易用,而且随着国产化浪潮的发展,对于国产信创系统如果能支持就更好。当然对于常用的低延迟、实时渲染云传输肯定是必须具备的。 二、实时渲染云传输怎么用? 上文中所提的几个问题如果已经比较明确,如果都做好了准备,就到了实时渲染云传输平台怎么用的环节。 其实实时渲染系统作为产品化的软件,使用是很方便的,第一步就是将渲染客户端和云流管理平台安装在要搭建的服务器上,将要流化的3D应用模型也部署在服务器上,然后将3D应用模型的在服务器上的存储位置和视图路径告知点量云平台。也支持多台服务器负载均衡,在上传3D模型的过程中也需要盖章后云流管理系统模型使用的服务器,设置好允许多少并发,是否预启动,至于码率等参数会有默认的一般无需修改。然后就可以直接生成在浏览器或者专用客户端中访问的网址,用户在浏览器中打开网址的时候,实时渲染软件就会对各种数据进行视频流云传输。 实时渲染云传输怎么用? ​

YUM安装jenkins

一、安装 [root@localhost bin]# rpm -qa | grep java python-javapackages-3.4.1-11.el7.noarch java-11-openjdk-headless-11.0.21.0.9-1.el7_9.x86_64 java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64 tzdata-java-2023c-1.el7.noarch javapackages-tools-3.4.1-11.el7.noarch [root@localhost bin]# [root@localhost bin]# yum remove java-11-openjdk-headless-11.0.21.0.9-1.el7_9.x86_64 java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64 [root@localhost ~]# wget -c https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm [root@localhost ~]# rpm -ivh jdk-21_linux-x64_bin.rpm warning: jdk-21_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Preparing... ################################# [100%] Updating / installing... 1:jdk-21-2000:21.0.1-12 ################################# [100%] [root@localhost ~]# [root@localhost ~]# java --version java 21.0.1 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.

如何成功拿下uniapp生命周期?

uniapp介绍 Uniapp作为一款跨平台应用开发框架,具有两个生命周期: 组件生命周期+页面生命周期 什么是页面? pages下面的.vue或者.nvue(app端)文件就是页面 什么是组件? 一般通常会把项目中的组件放在components 页面生命周期 还有可以查看官网哦~ uniapp官网生命周期 组件生命周期 注意:页面生命周期可以同时拥有组件生命周期;组件生命周期不可以使用页面生命周期的函数

产品经理学习-怎么写PRD文档

目录 瀑布流方法论介绍 产品需求文档(PRD)介绍 产品需求文档的基本要素 撰写产品需求文档 优先产品需求文档的特点 其他相关文档 瀑布流方法论介绍 瀑布流模型是一种项目的开发和管理的方法论,是敏捷的开发管理方式相对应的另一种方法 瀑布流模型由以下几个阶段组成: 需求分析 设计/架构设计 实现/开发 验证/测试 维护 敏捷开发是一个完毕的圈,而瀑布流方法是一个方向性持续的开放方法 瀑布流开发的特点 瀑布流的使用历史非常长,它需要一个环节完成了之后再开始下一个阶段。这个过程是不可逆转的。当某个问题出现问题之后,需要回到这个阶段重新进行,会影响后续的所有阶段;在产品和项目管理过程中,我们发现了瀑布流的弊端,所以有其他方法的引进。 瀑布流的管理方式适用于有些特点的项目,之前的几十年都是用的瀑布流方式 适合于: 需求相对固定,不会频繁变动项目预算大,周期长项目人数多,人员相对稳定组织架构稳定,人员有替补 什么项目适合使用瀑布流? 军方项目 成熟企业的旧系统改造 大多数产品公司 产品需求文档(PRD)介绍 PRD是一份针对某一个特点的产品,包括了其全部需求描述的文档 从整体来看,PRD至少包含下面4部分内容: 目的:产品总体描述 功能描述:产品的各项功能 发布计划:各个功能发布的顺序以及质量要求 时间计划:各版本的大致发布时间 产品需求文档的基本要素 文档的命名和编号文档的版本历史词汇表项目干系人描述目录和引言正文 文档的命名和编号 ——是为了通过文件名让读者快速知道文档内容 文档的版本历史 文档版本 创建时间 创建人 类型 介绍 V1.0 2021-5-1 李四 新建 完整版 V1.1 2021-9-1 王五 修改 修改,增加xx需求 V1.2 2022-1-3 王五 新建 Xxx 词汇表 词汇表是对一些专有名词的解释 项目干系人描述 可以让读者知道这个产品背后的价值出发点,干系人就是利益相关者 撰写产品需求文档 编写前的准备工作 需求梳理 前期的需求梳理一定要有的,也不是边梳理需求边写PRD。确定产品的愿景、目的和商业模型,寻找和确定产品的用户画像 原型设计 当我们给产品的定位、产品愿景和用户体验地图都确定了之后,原型图会体现产品最终的展现的功能会包括什么;原型图在概念测试和可用性测试都需要用到。 原型设计是一个循序渐进并不断完善的过程。 质疑和修正 需要验证自己的产品是否可以解决用户的痛点,解决方式是否给用户带来了新的不便;技术和运营是否是可行的。

Spark

HIVE VS SPARK spark是一个计算引擎,hive是一个存储框架。他们之间的关系就像发动机组与加油站之间的关系。 类似于spark的计算引擎还有很多,像mapreduce,flink等等。 类似于hive的存储框架也是数不胜数,比如pig。 最底层的存储往往都是使用hdfs。 如果将spark比喻成发动机,hive比喻为加油站,hdfs类似于石油。 参考1 在超大数据规模处理的场景下,Spark和Hive都有各自的优势。Spark由于其基于内存的计算模型,可以提供比Hive更高的处理速度。然而,Hive作为一种基于Hadoop的数据仓库工具,提供了类SQL的查询语言HQL,对于熟悉SQL的用户来说非常友好。 具体选择使用哪种工具需要考虑以下因素: 数据规模:如果处理的数据规模较小(例如几百GB),并且对处理延迟的要求不是非常高,那么可以考虑使用Hive。 处理速度:对于需要快速处理大量数据的场景,Spark是更好的选择。因为Spark的计算过程中数据流转都是在内存中进行的,这极大地减少了对HDFS的依赖,提高了处理速度。 技术背景:对于熟悉SQL的用户,Hive可能更容易上手。而对熟悉Scala或Python的开发者来说,Spark可能更合适。 查询复杂性:如果需要进行复杂的数据分析和机器学习任务,Spark提供的丰富的数据处理和机器学习API将非常有用。而对于简单的查询和分析任务,Hive可能是更经济的选择。 总的来说,超大数据规模的处理需要综合考虑多种因素来选择合适的工具。在一些情况下,两者也可以并行使用,比如采用Hive on Spark的模式,结合两者的优点来进行大数据处理。 参考2 Hive简介 Hive是建立在Hadoop之上的数据仓库基础设施,它提供了类似于SQL的查询语言,使得非开发人员也能够方便地分析大规模数据。Hive将SQL语句转换为MapReduce任务,并将数据存储在Hadoop分布式文件系统(HDFS)中。 Hive的优点包括: SQL语法:Hive使用类似于SQL的查询语言,使得用户能够使用熟悉的语法进行数据分析。 数据抽象:Hive允许用户定义表结构和分区,将数据抽象为表格的形式,方便数据的组织和管理。 扩展性:Hive可以处理大规模的数据集,通过使用Hadoop集群的计算和存储能力,可以轻松地处理PB级别的数据。 生态系统:Hive在Hadoop生态系统中具有广泛的支持和集成,可以与其他工具和平台无缝集成。 然而,Hive也有一些缺点: 延迟:由于Hive将SQL语句转换为MapReduce任务,每次查询都需要进行作业调度和数据读取,因此查询的延迟较高。 灵活性:Hive的查询语言相对较为受限,不支持复杂的数据处理和计算。 Spark简介 Spark是一个基于内存的大数据处理框架,它支持多种编程语言(如Scala、Python和Java),提供了高效的数据处理和计算能力。Spark可以在内存中处理数据,并且通过将数据缓存在内存中,大大减少了查询和计算的延迟。 Spark的优点包括: 速度:由于Spark将数据缓存在内存中,可以大大减少查询和计算的延迟,提高处理速度。 灵活性:Spark提供了丰富的API和函数库,可以进行复杂的数据处理、计算和机器学习任务。 实时处理:Spark支持流式数据处理,可以进行实时的数据分析和处理。 生态系统:Spark有一个庞大的生态系统,包括Spark SQL、Spark Streaming、Spark MLlib等组件,可以满足各种不同的数据处理需求。 然而,Spark也有一些缺点: 内存消耗:由于Spark将数据缓存在内存中,因此对于大规模数据集来说,可能需要大量的内存资源。 学习曲线:相对于Hive而言,Spark的学习曲线较陡峭,需要一定的编程和开发能力。 如何选择Hive还是Spark 选择使用Hive还是Spark需要根据具体的需求和场景进行评估。下面是一些选择的考虑因素: 数据规模 如果数据规模较小(例如几百GB),并且延迟不是非常关键,那么可以考虑使用Hive。Hive可以轻松处理小规模的数据,并且具有低延迟的查询能力。 如果数据规模较大(例如几TB或PB级别),并且需要快速的查询和计算能力,那么建议使用Spark。Spark能够将数据缓存到内存中,提供高速的查询和计算,并且可以轻松处理大规模数据集。 数据处理需求 如果只需要进行简单的数据查询和报表分析,而不需要进行复杂的数据处理和计算,那么可以考虑使用Hive。Hive提供了类似于SQL的查询语言,非开发人员也能够方便地进行数据分析。 如果需要进行复杂的数据处理和计算,例如机器学习、图计算 参考3 1.spark spark是一个数据分析、计算引擎,本身不负责存储; 可以对接多种数据源,包括:结构化、半结构化、非结构化的数据; 其分析处理数据的方式有多种发,包括:sql、Java、Scala、python、R等;其中spark-sql用来对结构化数据分析处理,它将数据的计算任务通过SQL的形式转换成了RDD的计算。 2.hive 数据仓库,主要负责数据存储和管理,看作MapReduce计算引擎+HDFS分布式文件系统,直观理解就是Hive的SQL通过很多层解析成了MR程序,然后存储是放在了HDFS上,并且只能用SQL这种方式来处理结构化数据,因此spark和hive是互不依赖的。 3.spark和hive的结合 实际应用两者结合,有三种方式:hive on spark、spark on hive、spark+spark hive catalog,常见的是第一种,是因为hive底层现在支持三种计算计算引擎:mr\tez\spark。 第一种:使用hive的语法规范即hive sql,执行时编译解析成spark作业运行(当然此时底层的计算引擎是spark); 第二种:因为spark本身只负责数据处理而不是存储,支撑多种数据源,当我们使用spark来处理分析存储在hive中的数据时(把hive看作一种数据源,常见的其他数据源包括:JDBC、文件等),这种模式就称为为 spark on hive。这个时候可以使用spark的各种语言的API,也可以使用hive的hql

c# 读取sqlite3中的SQL type=TIMESTAMP字段时报错

public static DateTime safeGetDateTime(SQLiteDataReader reader, string field) { int column = reader.GetOrdinal(field); if (!reader.IsDBNull(column)) { return reader.GetDateTime(column); } return DateTime.Now; } private void process(string dbPath) { int nNum = 0; SQLiteConnection connection = null; try { connection = new SQLiteConnection("Data Source=" + dbPath + ";version=3;new=False;datetimeformat=CurrentCulture;"); connection.Open(); SQLiteCommand command = new SQLiteCommand(connection); command.CommandText = "select ZADDRESS,ZDURATION,ZORIGINATED, ZDATE ,Cast(ZDATE as nvarchar(20)) as ZDATE_NEW from ZCALLRECORD ;"; SQLiteDataReader reader = command.ExecuteReader(); while (reader.

实时渲染是什么意思,实时云渲染技术路线,怎么收费?

本文主要介绍关于实时云渲染问题比较多的三个问题,如标题所示,首先我们来说第一个问题,实时渲染是什么意思? 实时渲染的意思,从用户层来看就是对模型的每次操作都可以立即看到效果,我们可以带入下游戏场景。在游戏中每个用户在游戏关卡里互动都依赖于用户端的键盘操作,包括前进后退左右移动等,为了保证游戏的体验,每次键盘指令发出后,用户在游戏程序中的角色就立即做出反应,否则就会出现看的问题,体验会很差。 在数字孪生智慧城市/园区/工厂、虚拟仿真教育、元宇宙等场景下,用户交互的模型变成了3D大模型程序,指令也有所变化,比如变大变小左右前后变动、各类数据的调取、天气日光等变化,如果用户侧这些指令从键盘、遥感等终端输入后,服务器端的3D大模型程序需要根据指令进行效果的实时渲染,尤其是天气光影照明等的变化。总的来说,实时渲染就是将终端的指令结果即可渲染并呈现出来。 那实时云渲染的技术路线是什么呢? 从上文我们知道实时渲染技术方案中,数字孪生的3D应用模型是在服务器端的,渲染工作依赖于服务器端算力,用户侧指令的输入传输是通过网络和实时渲染系统,同时实时云渲染系统将服务器端程序的指令执行过程抓拍形成视频流,然后通过网络传输到用户侧的网页或者专用客户端。从这个过程我们可以看出,实时云渲染技术路线用到了视频流串流、实时编码等多种技术。其中任何一个环节都至关重要,但本质来说就是视频流的低延迟传播。 此外在数字孪生智慧城市/园区/工厂、元宇宙、线上展厅、虚拟仿真教育等领域,模型比较大,用户侧的网络有不同的情况,而且模型使用的场景可能不同,还要考虑在实际环境中如何更好展示3D模型的效果,比如H265编码、4K和8K分辨率的支持、弱网状态下的优化、屏幕比例等等。 第三个疑问,实时云渲染平台系统如何使用,费用又是怎样的呢? 结尾点量小芹要介绍实时云渲染平台系统如何使用以及费用情况。做为一款产品,使用肯定是以便捷为主,整个系统包括渲染客户端和云流管理平台客户端,渲染客户端主要是执行渲染工作,如果有多台渲染服务器则每台服务器都需要安装。而云流管理平台则是每个项目只需要一个,可以是单独的服务器也可以和渲染端服务器共用一台。安装程序就和安装微信或者QQ一样简单,也会有使用导引,按照导引一步步操作即可。云流管理平台可以进行多服务器、多应用实例、多流路并发等的管理。后续会有专门的文章对该部分展开介绍。 实时渲染合作费用的影响因素很多,包括并发数、服务器数量、合作方式等。可以根据实际需要选择合适的方式。目前支持纯软件授权合作模式,也可提供软硬件一体机(该模式下提供的是已安装好实时渲染程序的服务器)。如果是线上展厅或者短时间活动需要用到实时渲染,也可以考虑短期按年或者按月合作。

k8s的基本概念

(一)k8s 1、k8s:自动部署,自动扩展和管理容器化部署的应用程序的一个开源系统 (1)k8s是负责自动化运维管理多个容器化程序的集群,是一个功能强大的容器编排工具 (2)k8s以分布式和集群化的方式进行容器管理 (3)版本:1.20版本 (4)k8s是Google的borg系统作为原型,后期经由go语言编写的开源软件 (5)网站 ①官网:https://kubernetes.io ②源码包:https://github.com/kubernetes/kubernetes 2、k8s的优点 (1)传统的部署方式:一般意义上的二进制部署(安装、运行、运行维护)需要专业的人员,如果出现了故障还需要人工重新拉起来,如果任务量增大,只能水平的扩展(再部署一台) (2)容器化部署:可以用dockerfile编写好的自定义的容器,随时基于镜像都可以进行,数量少还可以管理,数量一旦增加,管理起来太复杂,而且docker一般是单机运行,没有容灾(高可用) (3)k8s部署:简单、高效的部署容器化的应用 3、k8s的作用 (1)解决了docker的单机部署和无法集群化的特点 (2)解决了随着容器数量的增加,对应增加的管理成本 (3)容器的高可用,提高了一种容器的自愈机制 (4)解决了容器没有预设模版,记忆无法快速、大规模部署,以及大规模的容器调度 (5)k8s提供了集中化配置管理的中心 (6)解决了容器的生命周期的管理工具,可以集中统一的管理容器 (7)提供了图形化工具,可以用图形化工具对容器进行管理 4、k8s是基于开源的容器集群管理系统,在docker容器技术的基础之上,为容器化的应用提供、部署、运行、资源调度、服务发现、动态伸缩等一系列完整的功能 5、k8s是大规模容器管理 (1)对docker等容器技术从应用的包——部署——运行——停止——销毁,全生命周期管理 (2)集群方式运行,跨机器的容器管理 (3)解决了docker的跨机器运行的网络问题 (4)k8s可以自动修复,使得整个容器集群可以在用户期待的状态下运行 (二)k8s的特性 1、弹性伸缩:可以基于命令,或者图形化界面基于CPU的使用情况,自动的对部署的程序进行扩容和缩容,以最小的成本运行服务 2、自我修复:节点故障时,可以重新启动失败的容器,替换和重新部署 3、自带服务发现和负载均衡:k8s为多个容器提供一个统一的访问入口(内部地址和内部的DNS名称),自动负载均衡关联的所有容器 4、自动发布和回滚:k8s采用滚动的策略更新应用(一个一个来),如果更新过程中出现问题,可以根据回滚点进行回滚 5、集中化配置管理和秘钥管理,k8s集群内的各个组件都是要进行密钥对验证,但是k8s的安全性不高,核心的组件(mysql、nginx等)最好不要部署在k8s上,k8s一般部署自定义应用 6、存储编排 (1)可以自动化的把容器部署在节点上 (2)也可以通过命令行或者yml文件(自定义pod,pod就是容器)实现指定节点部署 (3)也可以通过网络存储,NFS、gfs 7、对任务进行批次处理,提供一次性的任务,定时任务,满足需要批量处理和分析的场景 (三)k8s的核心组件(重点) 作用 master组件(主节点): kube-apiserver 1、k8s集群之中每个组件都要靠密钥对来进行验证,组件之间的通信靠apiserver 2、API是应用接口服务,k8s的所有资源请求和调用操作都是靠kube-apiserver开完成 3、所有对象资源的增删改查和监听的操作都是kube-apiserver处理完成之后交给etcd来进行 4、kube-apiserver是k8s所有请求的入口服务,apiserver接受k8s的所有请求(命令行和图形化界面),然后根据用户的具体请求,通知对应的组件展示或者运行命令 5、APIserver相当于整个集群的大脑 kube-controller-manager 1、运行管理控制器:是k8s集群中处理常规任务的后台线程,是集群中所有资源对象的自动化控制中心 2、一个资源对应一个控制器,controller-manager负责管理这些控制器 node controller 节点控制器:负责节点的发现以及节点故障时的发现和响应 replication controller 副本控制器:控制关联pod的副本数,可以随时扩缩容 endpoints controller 断点控制器:监听service和对应pod的副本变化,端点就是服务暴露出的访问点,要访问这个服务,必须要知道他的endpoints,就是内部每个服务的IP地址+端口 service account和 roken controllers 服务账户和令牌控制:为命令控件创建默认账户和API访问令牌,也就是访问不同的命名空间 resourcequota controller 资源控制器:对命名空间的资源使用进行控制,也可以对单个pod的资源进行控制 namespace controller

echarts绘制多条折线图

效果 首先引入echarts可以看这篇文章哦~ 如何在项目中使用echarts 1.定义一个div 这里的height就是y轴的高度了~ <div style="width: 100%; height: 600px" ref="chart"></div> 2.定义一个方法init 在mounted引用 mounted() { this.init() }, 3.定义数据 这个一般是后台给的接口的数据,我这里是模拟的哦~ let lineData = { x: [ '9月15日', '9月16日', '9月17日', '9月18日', '9月19日', '9月20日', '9月21日', '9月22日', '9月23日', '9月24日', '9月25日', '9月26日', ], y_green: [103, 98, 120, 65, 63, 130, 125, 75, 130, 125, 75, 115], y_red: [210, 190, 190, 160, 170, 210, 207, 176, 176, 210, 170, 180], y_blue: [315, 316, 315, 315, 317, 317, 316, 316, 315, 315, 315, 315], } 4.

gitlab注册无中国区电话验证问题

gitlab对中国不太友好,无法直接注册,因为电话经常收不到短信,所以放弃了中国市场,无法选择+86手机号进行验证码发送 Google上众多的方案是修改dom,而且时间大约是21年以前。 修改dom,对于现在的VUE、React框架来说是没有用的,所以不用尝试。 直接看请求,用魔法打败魔法。 首先看一下请求,有个叫做countries的请求,看起来像,看下内容: 找到代码打断点,刷新页面,改一下数据 放开断点,选择数据,后续操作正常进行。

分布式面试题-理论部分(十二道)

文章目录 分布式面试题(十二道)分布式理论1. 说说CAP原理2. 为什么CAP不可兼得呢?3. CAP对应的模型和应用?4. BASE理论了解吗? 分布式锁5. 有哪些分布式锁的实现方案呢?**5.1 MySQL分布式锁如何实现呢?****5.2 ZooKeeper如何实现分布式锁?****5.3 Redis怎么实现分布式锁?** 分布式事务6.什么是分布式事务?7.分布式事务有哪些常见的实现方案?**7.1 说说2PC两阶段提交?****7.2 3PC(三阶段提交)了解吗?****7.3 TCC了解吗?****7.4 本地消息表了解吗?****7.5 MQ消息事务了解吗?****7.6 最大努力通知了解吗?** 8.你们用什么?能说一下Seata吗? 分布式一致性算法9.分布式算法paxos了解么 ?**Paxos算法是什么?****Paxos算法的工作流程?**角色算法流程Prepare(准备)阶段Accept(接受)阶段 **Paxos算法有什么缺点吗?怎么优化?** 10.说说Raft算法?**Raft算法是什么?****Raft算法的工作流程?**Raft算法的角色Leader选举过程 分布式设计11.说说什么是幂等性?怎么保证接口幂等性? 分布式限流12.你了解哪些限流算法? 分布式面试题(十二道) 分布式理论 1. 说说CAP原理 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这3个基本需求,最多只能同时满足其中的2个。 选项描述Consistency(一致性)指数据在多个副本之间能够保持一致的特性(严格的一致性)Availability(可用性)指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据)Partition tolerance(分区容错性)分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障 2. 为什么CAP不可兼得呢? 首先对于分布式系统,分区是必然存在的,所谓分区指的是分布式系统可能出现的子区域网络不通,成为孤立区域的的情况。 那么分区容错性(P)就必须要满足,因为如果要牺牲分区容错性,就得把服务和资源放到一个机器,或者一个“同生共死”的集群,那就违背了分布式的初衷。 那么满足分区容错的基础上,能不能同时满足一致性和可用性? 假如现在有两个分区N1和N2,N1和N2分别有不同的分区存储D1和D2,以及不同的服务S1和S2。 在满足一致性 的时候,N1和N2的数据要求值一样的,D1=D2。在满足可用性的时候,无论访问N1还是N2,都能获取及时的响应。 假如现在有这样的场景: 用户访问了N1,修改了D1的数据。用户再次访问,请求落在了N2。此时D1和D2的数据不一致。 接下来: 保证一致性:此时D1和D2数据不一致,要保证一致性就不能返回不一致的数据,可用性无法保证。保证可用性:立即响应,可用性得到了保证,但是此时响应的数据和D1不一致,一致性无法保证。 所以,可以看出,分区容错的前提下,一致性和可用性是矛盾的。 3. CAP对应的模型和应用? CA without P 理论上放弃P(分区容错性),则C(强一致性)和A(可用性)是可以保证的。实际上分区是不可避免的,严格上CA指的是允许分区后各子系统依然保持CA。 CA模型的常见应用: 集群数据库xFS文件系统 CP without A 放弃A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。 CP模型的常见应用: 分布式数据库分布式锁 AP wihtout C 要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 AP模型常见应用: Web缓存DNS 举个大家更熟悉的例子,像我们熟悉的注册中心ZooKeeper、Eureka、Nacos中: ZooKeeper 保证的是 CPEureka 保证的则是 APNacos 不仅支持 CP 也支持 AP 4.

【centos】【golang】安装golang

下载安装包 方法1: 打开 https://go.dev/dl/ ;点击下载golang的安装包;再使用ssh传到centos上(略) 方法2:能使用Google就可以这样 wget https://dl.google.com/go/go1.21.5.linux-amd64.tar.gz 解压安装包 直接解压到安装目录 /usr/local/ 下: tar -zxf go1.21.5.linux-amd64.tar.gz -C /usr/local/ 编辑环境变量 使用 vim 编辑 vim /etc/profile 在文件的最末尾添加以下内容: export GOPROXY=https://goproxy.io export GO111MODULE=on export GOROOT=/usr/local/go export GOPATH=/home/gopath export PATH=$PATH:$GOROOT/bin:$GOPATH/bin 使得编辑生效 source /etc/profile 检查安装是否完成 输入命令: go version 输出 go version go1.21.5 linux/amd64 说明安装完成 tar -zxf go1.21.5.linux-amd64.tar.gz -C /usr/local/ ls /usr/local/ vim /etc/profile source /etc/profile

人型动画足部IK权重曲线烘焙

简介 如下图所示,Left、Right FootIK Weight两条动画曲线用于设置人物角色足部IK时获取权重值,手动编辑且动画片段较多时比较费事,可以考虑程序化烘焙这两条足部IK权重曲线。 实现思路 创建新的编辑器窗口,在OnGUI中获取当前所选中的游戏物体,并在该物体上获取Animator动画组件。获取动画组件中的动画片段数组,遍历该数组通过滚动视图列举动画片段,添加Bake按钮用于烘培权重曲线。 private Vector2 scroll; private void OnGUI() { GameObject selectedGameObject = Selection.activeGameObject; if (selectedGameObject == null) { EditorGUILayout.HelpBox("未选中任何游戏物体", MessageType.Warning); return; } Animator animator = selectedGameObject.GetComponent<Animator>(); if (animator == null) { EditorGUILayout.HelpBox("所选游戏物体不包含Animator组件", MessageType.Warning); return; } AnimationClip[] clips = animator.runtimeAnimatorController.animationClips; if (clips.Length == 0) { EditorGUILayout.HelpBox("Animator组件中的动画片段数量为零", MessageType.Warning); return; } scroll = GUILayout.BeginScrollView(scroll); for (int i = 0; i < clips.Length; i++) { AnimationClip clip = clips[i]; GUILayout.

JVM内存结构&Java内存模型&Java对象模型

悟空老师思维导图: https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9 1.JVM内存结构&&Java内存模型&&Java对象模型 1.1.JVM内存结构 1.2.Java对象模型 Java对象模型表示的是这个对象本身的存储模型,JVM会给这个类创建一个instanceKlass保存在方法区,用来在JVM层表示该Java类,当在Java代码中使用new创建一个对象时JVM会创建一个instanceOopDesc对象,这个对象中包含了对象头以及实例数据; 1.3.Java内存模型(JMM) 1.3.1.为什么需要JMM? 1.C语言不存在内存模型概念; 2.Java程序依赖处理器,不同处理器结果不一样; 3.无法保证并发安全; 1.3.2.什么是JMM? JMM是一组规范,需要各个JVM的实现来遵循JMM规范,以便开发者可以利用这些规范更方便的开发多线程程序;如果没有这样一个JMM内存模型来规范,那么很可能经过了不同JVM的不同规则的重排序后,导致不同虚拟机上运行的结果不一样;JMM不仅仅作为一组规范它同时还是“工具类”、“synchronized”、“Lock”等的原理; 1.3.3.JMM核心内容 1.重排序 2.可见性 3.原子性 并发编程线程安全问题的根源在于:重排序、可见性; 1.3.3.1.重排序 1.3.3.1.1.什么是重排序 代码在JVM中的执行顺序和在Java代码中的顺序不一致;(代码指令执行顺序并不是严格按照语句顺序执行的,这就是重排序); 1.3.3.1.2.重排序代码案例 import java.util.concurrent.CountDownLatch; /** * 演示代码执行时被JVM重排序 */ public class OutOfOrderExecution{ private static int x = 0,y = 0; private static int a = 0,b = 0; public static void main(String[] args) throws InterruptedException { // 计数器 int i = 0; for(;;){ i++; // 重置 a = 0; b = 0; x = 0; y = 0; // 闸门 CountDownLatch countDownLatch = new CountDownLatch(1); // 线程一 Thread one = new Thread(new Runnable() { @Override public void run() { try { countDownLatch.

Word使用技巧【开题报告】

1、修改目录:选中目录,点击更新域。 2、更改或删除单个页面上的页眉或页脚 3、借助其他软件在Word导入参考文献 利用zetero导入文献:安装zetero 解决参考文献插入问题 在Word中插入文献操作步骤 英文文献出现“等”,如何解决 Zotero修改英文文献的“等”为“et al” 参考文献样式下载链接:https://github.com/redleafnew/Chinese-STD-GB-T-7714-related-csl/blob/main/000gb-t-7714-2015-numeric-bilingual.csl 4、插入公式,显示不全:修改行距 5、Word公式插入编号,并设置编号 测试成功的方法:在公式输入#(1),然后光标在公式最后位置,点击enter。 6、PPT绘制技术路线图:PPT绘论文图之导出600dpi分辨率图片 7、Word如何添加页码(除去封面、目录):https://zhuanlan.zhihu.com/p/101507746