MeteoInfo-Java解析与绘图教程(四) 上文我们说到,将地图叠加在色斑图上,但大部分都是卫星绘图,现在开始讲解micaps数据绘图,同样也是更多自定义
配置
首先我们解析micaps数据,将之前学到的东西拿过来绘图
MeteoDataInfo meteoDataInfo = new MeteoDataInfo(); meteoDataInfo.openMICAPSData("D:\\解析数据\\cldas\\cldas\\TEM\\20081000.000"); GridData grid = meteoDataInfo.getGridData(); //读取地图A VectorLayer scmap = MapDataManage.readMapFile_ShapeFile("E:\\shp\\四川\\四川省(3)_市界.shp"); //描述地图边界线 PolygonBreak pb = (PolygonBreak) scmap.getLegendScheme().getLegendBreak(0); //是否设置填充 pb.setDrawFill(false); //设置轮廓大小 pb.setOutlineSize(2f); //设置轮廓颜色 pb.setOutlineColor(Color.black); //读取色阶 LegendScheme als = LgsUtil.readFromLgs("D:\\apache-tomcat-8.0.50\\alt色阶\\color\\ECMWF_HR\\TMP.lgs"); //绘制图层 VectorLayer layer = DrawMeteoData.createShadedLayer(grid,als,"","",true); //创建视图 MapView view = new MapView(); //叠加图层 view.addLayer(layer); view.addLayer(scmap); MapLayout layout = new MapLayout(); //去除图形边框 layout.getActiveMapFrame().setDrawNeatLine(false); //区域边界 Extent extent = view.getExtent(); //设置矩形的宽和高 Rectangle bounds = new Rectangle(800, (int) (800 * 1D / extent.
找到对应补丁页面 例如查找编号为 CVE-2019-0708 的漏洞,访问下面链接即可,替换末尾编号可获取其他漏洞更新补丁。
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2019-0708 根据实际情况点击右侧补丁链接即可跳转下载 最后根据实际情况下载对应补丁双击安装即可!!,下载补丁建议使用火狐浏览器
问题 使用 scroll-view 设置横向滑动时在 scroll-view 元素上设置flex布局,没有生效
<scroll-view scroll-x class='recommend-content'> <view> 点赞 </view> <view> 收藏 </view> <view> 关注 </view> </scroll-view> <style> .recommend-content{ display: flex; /* flex布局无效 */ } </style> 解决方法 在 scroll-view 下再加一层 view 包着 scroll-view 的内部元素,并在新增的这层 view 中设置 flex 布局:
<scroll-view scroll-x class='recommend-content'> <view class='recommend-content-all'> <view> 点赞 </view> <view> 收藏 </view> <view> 关注 </view> </view> </scroll-view> <style> .recommend-content-all{ display: flex; } </style> 效果 👇觉得有帮助的朋友可以支持下作者哦,您的鼓励是我创作的最大动力,如有开发问题可联系作者
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime。下面首先还是以示例说明如何使用 mktime 获取今日、昨日、上周、本月的起始时间戳和结束时间戳,然后在介绍一下 mktime 函数作用和用法。非常简单哦。
php获取今日开始时间戳和结束时间戳
$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; php获取昨日起始时间戳和结束时间戳
$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y')); $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1; php获取上周起始时间戳和结束时间戳
$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')); $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y')); php获取本月起始时间戳和结束时间戳
$beginThismonth=mktime(0,0,0,date('m'),1,date('Y')); $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y')); PHP mktime() 函数用于返回一个日期的 Unix 时间戳。
语法
mktime(hour,minute,second,month,day,year,is\_dst) 可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。
自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。
|
用法
参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。
参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
注意在 PHP 5.1 之前,如果该函数的参数非法,则会返回 false。
另外需要注意的是该函数对于日期运算和验证非常有用。它可以自动校正越界的输入,如:
echo(date("M-d-Y",mktime(0,0,0,12,36,2001))); 将输出结果如:
Jan-05-2002
使用php获取时间今、明天、昨天时间戳
<?php echo "今天:".date("Y-m-d").""; echo "昨天:".date("Y-m-d",strtotime("-1 day")), ""; echo "明天:".date("Y-m-d",strtotime("+1 day")). ""; echo "一周后:".date("Y-m-d",strtotime("+1 week")). ""; echo "一周零两天四小时两秒后:".date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")). ""; echo "下个星期四:".date("Y-m-d",strtotime("next Thursday")). ""; echo "上个周一:".date("Y-m-d",strtotime("last Monday")).""; echo "一个月前:".date("Y-m-d",strtotime("last month")).""; echo "一个月后:".date("Y-m-d",strtotime("+1 month")).""; echo "十年后:".date("Y-m-d",strtotime("+10 year")).""; strtotime()函数的作用是将日期时间描述解析为 Unix 时间戳 int strtotime ( string time \[, int now\] ) ?> 本函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间。
---------------------------------------------------------------------------------------------------------------------------------
在PHP里得到前天和昨天的日期的代码
第一步、双击安装idea程序 第二步、选中64位与更新环境变量 第三步、安装完成后双击打开 1、选中 Evaluate for free – Evaluate 进入试用期
第四步、打开后选择Plugins – 设置 1、安装来自磁盘 Install Plugin from Disk
第五步、选中我们的无限重置插件,安装 第六步、关闭重新打开软件,新建一个项目 1、选中Help – Eval Reset
2、选中Auto reset before per restart – reset – yes
大功告成,接下来就可以安心的去码代码了,以后每当我们重开关闭并打开idea的时候,试用时间均会被重置,达到我们想要的结果~
那么如何去验证我们的软件是否成功呢,这里就重点看这一段,UNTIL 截止日期,现在是09:25:02,过一段时候我们在关闭打开idea,此时已经看到日期已经变为最新
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、金融行业软件特征分析
金融行业软件系统具有集中度高、规模庞大、数量多、系统之间关联性强、业务复杂、需求变化快等特点,如何有效可行的实现软件测试和软件质量控制,是对金融行业软件测试人员提出的基本要求。
1)金融行业软件的业务特点
以金融行业软件的典型代表银行系统软件为例:
一般的银行系统软件都有一个核心系统,核心系统主要涉及账务的处理、清算、计息等。
银行的其它业务系统都会直接或间接的与核心系统进行交互,主要处理一些涉及业务的流程以及系统管理、用户管理等辅助功能。
此外,银行的业务系统也种类繁多。
比如:ACE/柜面、网上银行、电话银行、呼叫中心、信贷、资产托管、资金风险分析及风险控制系统、外汇买卖、基金、期货、黄金、汇票、信用卡业务以及其它衍生业务等等。
各个系统之间都可能有着密切的联系,之间也会涉及到不同系统之间的接口。
因此,在测试过程中,除了对银行的核心系统、业务系统进行测试之外,还会涉及对接口的测试,而接口测试往往需要测试人员构造一定的测试环境与测试数据来模拟各系统之间的交互。
2)金融行业软件的复杂性特点
就银行系统软件来说,本身就具有复杂性的特点。首先,银行软件具有不同的客户群,如个人用户、企业用户、银行内部管理人员、业务人员等,因此,银行软件会有针对不同客户所使用的版本或权限控制。
此外,对于不同的服务方式,如柜台、电话银行、网上银行等,都必须开发出不同的软件。其次,银行业务种类繁多,业务逻辑也非常复杂,对业务处理要求有很高的安全性和实时性,这些都要借助复杂的技术才能实现。
因此,对于测试而言,软件的复杂性也增加了测试的复杂性,对测试者来说要求有相当的经验和测试技术的支持。
另外,由于银行业务的快速发展,当旧的银行软件系统无法满足业务处理的要求时,就必须开发新的系统,对于重新开发的新系统来说,旧系统的用户数据必须保证能在新系统中正常使用。
这就涉及到了新旧版本的数据移植问题,由于新旧系统之间数据字典存在差异,数据移植后能否正常,就需要对新旧数据进行比对性测试。
比对测试过程往往会涉及数据库的应用及比对工具的开发使用。
2、金融行业软件测试方法及范围分析
以下主要从功能测试、接口测试、数据移植测试、性能测试、安全性测试、风险监控测试、几个方面来阐述金融行业软件的测试方法及范围。
1)功能测试
功能测试,主要是对软件的功能进行的验证,对于金融行业软件来说,功能测试主要进行以下功能的验证:
业务验证测试:
验证业务系统的功能是否正确实现,测试其业务处理的准确性。
①业务流程测试
金融行业软件测试首先关注的是业务的正确性,业务流程要合理、业务处理正确无误,这些往往需要测试人员具备一定的金融软件测试经验,才能更好的判断业务流程设计是否合理,是否满足客户实际需求。
以及业务流程处理过程中可能会涉及到的异常,通常通过正常案例和异常案例来验证业务流程的完整性和正确性。
业务流程除了验证流程的正确性,通常对于涉及金额、资金、库存等数据及业务流程中生成的记录是否正确性也是测试的重点。
②账务处理
对于银行来说,账务处理为核心系统功能,也是这类软件测试的重点,账务处理不仅涉及到资金,还与交易过程相关,在测试系统对账时,必须对账务处理流程有清晰的认识。
对于账务处理过程中账务是否处理正确、是否出现错账、是否需要进行调账等案例都要能进行完整的案例设计来覆盖测试点,这一块的测试一般需要有经验的测试人员来进行测试。
③清算
银行系统清算过程涉及的东西较多,如资金清算、库存清算、计费、计息、对账、登帐、报表生成等复杂的过程,同时涉及的数据量也是非常的大,对于大型系统来说更是如此数据检查的工作量也很大,同样测试人员需要对清算的全过程有清晰的了解。
④报表
对于银行系统来说,报表是直接呈现给用户最直接的结果,而对一个银行系统来说,报表的数量一般都较庞大,很可能涉及到几十张报表,因此对报表的检查也是测试的重点,这需要测试人员对银行系统涉及的业务非常熟悉,能判断报表的设计是否合理,报表数据是否正确等。
2)客户端测试
客户端主要针对的是软件界面功能的测试,根据功能划分一般涉及以下几类:
①系统管理类
系统管理主要包括系统参数管理、用户管理、角色管理、权限分配等,测试也包含相应的业务逻辑及页面测试,如查询功能的测试、显示风格、验证客户端页面显示数据是否正确等。
②数据查询类
主要验证数据查询结果客户端显示是否正确。
③其它涉及业务操作的功能界面
主要针对客户端界面的录入、查询等功能进行测试。
客户端测试还会对界面的友好性、提示信息的合理性等进行测试。
3)接口测试
对于银行来说,通常行内系统和与银行外对接的系统是独立开发的,行内与行外系统采用的数据库、通讯协议等都可能存在差异;
并且对于银行来说,还可能存在多个系统:
如:网上银行、ACE/柜面、电话银行、呼叫中心、信贷、资产托管、资金风险监控分析系统等,并且各个系统之间可能关联特别紧密,存在许多交互;
因此,在测试中会涉及到相关系统接口的测试,这时通常需要构造对接系统的测试环境、数据、业务等来模拟对接系统。
接口测试中,由于一方系统在测试过程中不可见,因此通常需要进行环境的模拟。
比如开发模拟软件来模拟被测试系统与所交互的系统之间的通讯,并且在测试过程中通常需要测试人员自己组报文,通过模拟发送器收发发送报文来进行测试,并通过后台检查报文转换是否正确,通过数据库来验证数据是否正确。
通常来说,接口的测试测试人员主要跟后台和数据库打交道,而很少通过客户端来操作,因此要求测试人员对数据库知识、对应的操作系统命令以及一些中间件具有一定的熟悉程度才能更好的进行测试。
接口测试一般在功能测试阶段完成,功能测试计划中应包含接口测试。
4)数据移植测试
对于银行来说,软件产品经常存在更新换代或升级的情况,新系统的运行环境和旧系统可能不一致。
因此,为了保证系统的顺利运行,在新系统研发出来,准备上线之前,需要把原来旧系统的客户历史数据移植过来,这就涉及到了数据移植问题。
数据移植并不是简单的数据迁移,因为新旧系统之间数据字典是不同的,为了保证移植结果的正确性,需要对新旧数据库的数据进行比对,通常可以通过人工方法或开发比对工具进行比对。
举例来说,旧系统采用的SQLSERVER的数据库,而新系统采用Oracle的数据库;
并且就系统可能存在50张数据表,新系统可能有200张数据表,而且,新系统的数据表结构与旧系统可能完全不一样,或者新旧系统的某张表可能对应另一个系统的几张表,这样在数据移植测试中就要进行几方面的测试。
比如,两个数据库可能存在有差异的地方,如数据类型不同,位数不同,在数据移植过程中对这部分就应该做详细的检查。
此外,表结构的不同,在做数据移植检查时,需要获得新旧版本的数据字典,并且对移植过来对应的所有字段数据是否移植正确做检查。
数据移植测试往往需要测试人员有足够的耐心,能仔细进行比对,发现存在的问题。数据移植测试一般在功能测试阶段完成,功能测试计划中应包含数据移植的测试。
5)性能测试
性能测试的目的主要是验证业务系统是否满足业务需求的多用户并发操作,是否满足业务性能需求,评估压力解除后的自恢复能力,测试系统性能极限。
随着金融行业软件的规模越来越大、处理能力要求越来越高,进行性能测试成为金融软件测试中必不可少的一个环节。
金融行业软件一般在投入使用时,需要接受大批量的业务,并且对于业务的响应处理时间也有很高的要求,这对于应用程序本身、操作系统、中心数据库服务器、中间件服务器以及网络设备的承受力都是一个严峻的考验。
任一个环节的问题都可能给用户带来巨大的商业损失。因此,如何保证在压力情况下系统能正常运行是金融行业软件质量保证的关键,同时也是测试人员最需关注的重点。
网站演示 登录页面
门户页面
博客页面
搭建过程 技术选取:HTML/CSS + VUE2 + ElementUI(Version - 2.15.14)编程软件:VSCode 环境配置与搭建 安装指令 1. 先确保你的电脑已经安装好了`npm和node` npm -v node -v 2. ElementUI下载,推荐使用 npm 的方式安装 npm i element-ui -S 3. CDN引入 <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> ELement在 node 下载后,会发现 node_modules/element-ui 文件夹,直接复制到本地,之后按照文件路径引用并配置 <head> <meta charset="UTF-8"> <link rel="stylesheet" href="{{URL::asset('elementui/lib/theme-chalk/index.css')}}"> <link rel="stylesheet" href="{{URL::asset('css/common.css')}}"> <link rel="stylesheet" href="{{URL::asset('css/layout/head.css')}}"> <link rel="stylesheet" href="{{URL::asset('css/home/home.css')}}"> <script src="https://unpkg.com/vue@2/dist/vue.js"></script> <script type="text/javascript" src="{{URL::asset('elementui/lib/index.js')}}"></script> </head> 参考文档 [1]ElementUI - 2.
在前面几讲中,我们介绍过如何为CMake添加安装库文件和头文件的能力;也介绍过如何添加额外信息,以便发布软件包的内容。
接下来这一讲,我们将在工程中添加一些必要信息,以便其它CMake工程可以利用我们的工程,这可以是从build目录中引引用,也可以本地安装,甚至是软件打包。
首先,修改 install(TARGETS) 命令,让它不仅指定DESTINATION ,还指定EXPORT。关键字EXPORT 生成一个CMake文件,其中包含从安装树导出安装命令目标的相关代码。让我们继续,修改MathFunctions/CMakeLists.txt里的install命令,显式地EXPORT MathFunctions 库。修改后的代码:
set(installable_libs MathFunctions tutorial_compiler_flags) if(TARGET SqrtLibrary) list(APPEND installable_libs SqrtLibrary) endif() install(TARGETS ${installable_libs} EXPORT MathFunctionsTargets DESTINATION lib) # install include headers install(FILES MathFunctions.h DESTINATION include) 现在,我们已经导出MathFunctions ,我们还需要明确安装所生成的MathFunctionsTargets.cmake文件。它是这样实现的:在顶层CMakeLists.txt的末尾添加以下代码:
install(EXPORT MathFunctionsTargets FILE MathFunctionsTargets.cmake DESTINATION lib/cmake/MathFunctions ) 这时,你可以尝试执行一下CMake。如果一切正常,你将看到CMake的报错:
CMake想要表达的是:在生成导出信息时,它将导出一个与当前机器绑定的路径,把它用在其它机器上可能是无效的。解决方案是修改MathFunctions 的target_include_directories() ,让它理解:从build工作目录出发,和从安装包出发,它需要不同的INTERFACE位置。这意味着为MathFunctions 转换 target_include_directories() 调用:
MathFunctions/CMakeLists.txt
target_include_directories(MathFunctions INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:include> ) 修改完毕之后,可以重试CMake,这时警告信息已经消除。
这时,我们的CMake已经能正确打包所要求的目标信息,但是还不够,我们还要生成一个MathFunctionsConfig.cmake 文件,这样 CMake的 find_package() 命令才能发现我们的工程。让我们继续,在工程顶层目录下新增一个名为Config.cmake.in的文件,其内容如下:
Config.cmake.in
@PACKAGE_INIT@ include ( "${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake" ) 接下来,配置及安装这个文件,在顶层目录的 CMakeLists.txt末尾添加以下内容:
install(EXPORT MathFunctionsTargets FILE MathFunctionsTargets.
一、概述
布隆过滤器本质上是一个很长的二进制数组,主要用来判断一个数据存不存在数组里,如果存在就用1表示,不存在用0表示,它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
二、实现原理
当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点(offset),把它们置为 1。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了,如果这些点有任何一个 0,则被检元素一定不在;如果都是 1,则被检元素很可能在。这就是布隆过滤器的基本思想。
布隆过滤器(Bloom Filter)是一个高空间利用率的概率性数据结构,由二进制向量(即位数组)和一系列随机映射函数(即哈希函数)两部分组成。
当布隆过滤器判定某个值存在时,其实这个值只是有可能存在;当它说某个值不存在时,那这个值肯定不存在,这个误判概率大约在 1% 左右。
1.布隆过滤器-添加元素
当使用布隆过滤器添加 key 时,会使用不同的 hash 函数对 key 存储的元素值进行哈希计算,从而会得到多个哈希值。根据哈希值计算出一个整数索引值,将该索引值与位数组长度做取余运算,最终得到一个位数组位置,并将该位置的值变为 1。每个 hash 函数都会计算出一个不同的位置,然后把数组中与之对应的位置变为 1。通过上述过程就完成了元素添加操作。
2.布隆过滤器-判定元素是否存在
当我们需要判断一个元素是否存时,首先对给定元素再次执行哈希计算,得到与添加元素时相同的位数组位置,判断所得位置是否都为 1,如果其中有一个为 0,那么说明元素不存在,若都为 1,则说明元素有可能存在。
三、布隆过滤器使用场景
1.解决Redis缓存穿透问题。
2.邮箱系统的垃圾邮件过滤功能也普遍用到了布隆过滤器,用了这个过滤器,平时也会遇到某些正常的邮件被放进了垃圾邮件目录中。
3.内容推荐,布隆过滤器能准确过滤掉那些已经看过的内容,没有看过的新内容,它也会过滤掉极小一部分 (误判),但是绝大多数新内容它都能准确识别。
四、布隆过滤器实现方式
1.引入Guava的依赖实现
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.0.1-jre</version> </dependency> 2.代码实现如下:
import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels; public class BloomFilterTest { public static void main(String[] args) { // 预期插入数量 long capacity = 100000L; // 错误比率 double errorRate = 0.
文章目录 ⭐️前言⭐️鼠标连点器 ⭐️前言 本次设计的鼠标连点器主要是对QVBoxLayout、QHBoxLayout和QStackedWidget进行一个回顾复习,加深对它们的理解,提高运用的熟练度。
⭐️鼠标连点器 如以下代码所示,设计两个QWidget控件,分别为QWidget1和QWidget2,QWidget1中设计的是连点器基本设计窗口,可输入鼠标的点击速度和点击总时长;QWidget2中设计的是连点器执行后的窗口,其中有倒计时准备和执行过程的窗口显示。
from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt, QTimer from PyQt5.QtGui import QIcon, QColor, QFont import sys import threading import time from pynput.mouse import Button, Controller class PushButton(QPushButton): def __init__(self, text): super().__init__() self.setText(text) # 设置阴影 def enterEvent(self, evt): # 创建QGraphicsDropShadowEffect对象 shadow = QGraphicsDropShadowEffect() # 设置阴影颜色 shadow.setColor(QColor(0, 0, 0)) # 设置阴影的偏移量 shadow.setOffset(0, 0) # 设置阴影的模糊半径 shadow.setBlurRadius(15) # 设置阴影应用于按钮 self.setGraphicsEffect(shadow) # 取消阴影 def leaveEvent(self, evt): self.
1 实现方法
Figure 1-1 Type-C Socket(母口)
Figure 1-2 Type-C Plug(公头)
Table 1-1 Type-C Socket Pin连接描述
Type-C Plug连接, 需要做一个一拖二的线,一根的一端是USB, 另外一根的一端是USB转UART, 参考Table 1-2。
Table 1-2 Type-C Plug Pin连接描述
Figure 1-3 Type-C Plug CC Connection Demo
2 Abbreviations
ARC:Argonant RISC Core
AT91SAM9260:SAM means Smart ARM-based
ATMEL SAMBA:ATMEL Smart ARM-based Boot Assistant
CC2530:TI ChipCon2530
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
文章目录 QStackedWidget的使用 QStackedWidget的使用 QStackedWidget是PyQt中的一个容器部件,用于管理多个堆叠的子部件。它只显示当前选中的子部件,而隐藏其余的子部件。
代码演示:
from PyQt5.QtWidgets import * import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() self.stacked_widget = QStackedWidget() self.setCentralWidget(self.stacked_widget) self.button1 = QPushButton("Switch to Widget 1") self.button2 = QPushButton("Switch to Widget 2") self.widget1 = QWidget() layout1 = QVBoxLayout() layout1.addWidget(QLabel("Widget 1")) layout1.addWidget(self.button2) self.widget1.setLayout(layout1) self.widget2 = QWidget() layout2 = QVBoxLayout() layout2.addWidget(QLabel("Widget 2")) layout2.addWidget(self.button1) self.widget2.setLayout(layout2) self.stacked_widget.addWidget(self.widget1) self.stacked_widget.addWidget(self.widget2) self.button1.clicked.connect(self.switch_to_widget1) self.button2.clicked.connect(self.switch_to_widget2) self.show() def switch_to_widget1(self): self.stacked_widget.setCurrentWidget(self.widget1) def switch_to_widget2(self): self.stacked_widget.setCurrentWidget(self.widget2) app = QApplication(sys.argv) window = MainWindow() sys.
最近在搞阿里云MQTT。发现消息解析的JS代码另人发指。主要是物模型序列化,太垃圾了。就自己写了一个更简单的Archive类。阿里的工程师都是傻逼吗?
class Archive { constructor(capacity) { this.capacity = capacity; this.size = 0; this.u8array = Array(this.capacity); } _check_resize(){ if ( this.size < this.capacity) return ; this.capacity = this.capacity*2; var newarray = Array(this.capacity); for (var i = 0; i < this.size; ++i) newarray[i] = this.u8array[i]; this.u8array = newarray; } SaveUint8(data ){ this._check_resize(); this.u8array[this.size] = data; this.size+=1; } SaveUint16(data){ this._check_resize(); this.u8array[this.size] = (data&0xFF00)>>8; this.size+=1; this._check_resize(); this.u8array[this.size] = (data&0x00FF); this.size+=1; } GetRawArray(){ return this.
👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
Python仓储管理系统(源码) 目录 Python仓储管理系统(源码)1. 具体要求代码实现代码截图【管理员】模式登录【管理员】查看库存【管理员】新增仓储货物信息【入库员】模式登录【入库员】修改修改货物信息【出库员】出库货物【出库员】入库货物 1. 具体要求 使用面相对象设计方法设计一个仓储管理系统。
操作的核心实体有:
货物包含(id、货物名称、货物种类、长度、宽度…)仓库 (id 、名称、长度、宽度、类别…)用户 (id、名称、类别、用户名、密码…)用户分为管理员、入库员、出库员、业务员。 对货物的操作管理包含:
新建货物
入库 (货物需要根据自己的种类入库到对应类别的仓库,如食品如食品库仓库可以预先程序数据设置好)
出库
查询货信息
查询出入库记录
修改货物信息。
登录功能:
系统运行后需要需要按照用户名密码来登录,管理员有最高权限,他可以给指定用户赋予特定的权限,如给入库员入库、查询的操作权限、给出库员出库、查询的权限、业务员查看的权限。
菜单:
设计出便于用户操作的交互菜单例如下面示例(根据自己的需求进行修改)欢迎使用仓库管理系统,请选择您要进入的功能
1、新增仓储货物信息
2、货物入库3、货物出库
4、修改货物信息
5、查询库存
6、查询出入库记录
7、退出
👇👇👇 关注公众号,回复 “仓储管理系统” 获取源码👇👇👇
代码实现 本系统中有4种角色,管理员、入库员、出库员、业务员,分别对应不同的操作权限,代码如下:
👇👇👇 关注公众号,回复 “仓储管理系统” 获取源码👇👇👇
# ......略..... # 初始化用户 users = [ User(id=1, name="张三", category="管理员", username="admin", password="admin123"), User(id=2, name="李四", category="入库员", username="stocker", password="stocker123"), User(id=3, name="王五", category="出库员", username="dispatcher", password="dispatcher123"), User(id=4, name="赵六", category="
An issue was found when checking AAR metadata: 1. Dependency 'androidx.activity:activity:1.8.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 7.4.1 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdkVerion of at least 34.
本教程需要安装以下工具,如果不清楚怎么安装的可以看下我的这篇文章
链接: https://blog.csdn.net/qq_30627241/article/details/134804675
管理工具: maven
IDE: IDEA
数据库: MySQL
测试工具: Postman
打开IDEA
创建项目,创建项目时保持网络通畅
设置项目的基本信息,其中注意jdk版本要与Java版本匹配,这里使用jdk1.8和java8
选择SpringBoot版本,选择项目依赖(依赖可以创建完项目后在pom文件中修改)
至此项目创建完成
创建数据库
创建用户表
CREATE TABLE user ( uid int(10) primary key NOT NULL AUTO_INCREMENT, uname varchar(30) NOT NULL, password varchar(255) NOT NULL, UNIQUE (uname) ); uid: 用户编号,主键,自增
uname: 用户名,作为登录的账号(业务主键),不可重复
password: 密码,因为可能要加密,所以长度设了较长的255
配置数据库
1、找到配置文件application.properties
# 配置端口号为8081 server.port=8081 # 配置数据库 # 配置驱动 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 若连接的是云数据库则将localhost改为云端ip spring.datasource.url=jdbc:mysql://localhost:3306/summer?serverTimezone=UTC # Mysql用户 spring.datasource.username=root # Mysql对应用户密码 spring.datasource.password=123456 2、输入数据库相关配置信息(此处配置了项目端口号为8081,可不配置,默认端口号为8080)
注意:配置url处summer改为你的数据库名称
现在运行项目就能成功了
3、在IDEA中连接数据库,非必要步骤,连了开发方便些
1. 背景 店铺卖东西,会将一部分子商品(单个商品,sku 粒度)打包到一起,变成一个组合商品去售卖。
用户买东西,可能会买多个组合商品。
数仓这边拿到的数据,全是已经拆分到子商品的订单商品数据,也就是说:用户买的时候是组合商品,只有一条订单数据,但数仓表中保存的全是子商品对应的订单数据,会有多条订单数据,大概示意如下。
用后购买商品产生的订单信息:
order_id(订单id)combine_goods_id(组合商品id)1122 数仓得到的拆分之后的订单信息(order):
CREATE EXTERNAL TABLE `zhibo_test.order`( `order_id` string COMMENT '订单 id', `goods_id` string COMMENT '商品 id' ) COMMENT '订单表' 数据:
order_id(订单id)goods_id(子商品id)11131224262527 组合商品 1 包含 3 个子商品,子商品 id 分别为:1、2、3,价格都是 100。
组合商品 2 包含 4 个子商品,子商品 id 分别为:4、5、6、7,价格都是 100。
数仓中的组合商品维表信息(dim_combine_goods):
CREATE EXTERNAL TABLE `zhibo_test.dim_combine_goods`( `combine_goods_id` string COMMENT '组合商品 id', `combine_goods_name` string COMMENT '组合商品名称', `goods_id` string COMMENT '商品 id' ) COMMENT '组合商品维表' 数据:
combine_goods_id(组合商品id)combine_goods_name(组合商品名称)goods_id(子商品id)1组合商品111组合商品121组合商品1311组合商品11111组合商品11211组合商品1132组合商品242组合商品252组合商品262组合商品273组合商品313组合商品35 组合商品维表中的数据说明:
一、风场类编写 /*** * 风场类 * date:2022-03-14 * author:zdh * @type {CanvasWindy} */ import {Cartesian3,EllipsoidalOccluder,SceneTransforms,Ellipsoid,Cartesian2,Math as CMath} from 'cesium/Cesium' export let CanvasWindy = function (json,params) { //风场json数据 this.windData = json; //可配置参数 this.viewer = params.viewer; this.canvas = params.canvas; this.extent = params.extent || [];//风场绘制时的地图范围,范围不应该大于风场数据的范围,顺序:west/east/south/north,有正负区分,如:[110,120,30,36] this.canvasContext = params.canvas.getContext("2d");//canvas上下文 this.canvasWidth = params.canvasWidth || 300;//画板宽度 this.canvasHeight = params.canvasHeight || 180;//画板高度 this.speedRate = params.speedRate || 100;//风前进速率,意思是将当前风场横向纵向分成100份,再乘以风速就能得到移动位置,无论地图缩放到哪一级别都是一样的速度,可以用该数值控制线流动的快慢,值越大,越慢, this.particlesNumber = params.particlesNumber || 20000;//初始粒子总数,根据实际需要进行调节 this.maxAge = params.maxAge || 120;//每个粒子的最大生存周期 this.
当java程序出现性能问题时,我们可以通过一些工具,快速定位出拖慢程序的代码:
jstack jstack是jdk自带的堆栈跟踪工具
首先,我们用ps -ef|grep java命令列出正在运行的java进程:
# ps -ef|grep java root 33 32 67 21:52 tty2 00:00:10 java -jar xxx.jar root 101 11 0 21:52 pts/0 00:00:00 grep --color=auto java 得到其进程号,这个例子里,xxx.jar程序的进程号是33。
(如果你的系统是windows执行不了这些命令,强烈建议装一个wsl1,IDEA支持把代码跑在wsl里了,调试起来会非常舒服,wsl2目前与windows本体的文件交换机制是网络传输,性能很差不建议。)
现在,我们执行两个命令,分别打印出进程33的线程运行情况、最忙的线程(建议把打印结果复制到一个txt文件里方便ctrl+f查找)
jstack -l 33命令打印线程运行情况
ps p 33 -L -o pcpu,pid,tid,time,tname,cmd打印出线程使用cpu的情况
打印结果如下:
# jstack -l 33 Full thread dump OpenJDK 64-Bit Server VM (17.0.2+8-86 mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007f3658001890, length=12, elements={ 0x00007f369c023f10, 0x00007f369c1739b0, ... } "
showDialog( context: context, builder: (context) { String label = 'test'; //StatefulBuilder return StatefulBuilder( //在这里为了区分,在构建builder的时候将setState方法命名为了setDialogState。 builder: (context, setDialogState) { print('label = $label'); return GestureDetector( child: Text(label), onTap: () { label = 'test8'; print('onTap:label = $label'); // 注意不是调用老页面的setState,而是要调用builder中的setDialogState。 setDialogState(() {}); }, ); }, ); }); bottomsheet
bool btnState=false; showModalBottomSheet( context:context, builder:(BuildContext context){ return StatefulBuilder( //在这里为了区分,在构建builder的时候将setState方法命名为了setBottomSheetState。 builder:(context1, setBottomSheetState) { return Container( child:OutlineButton( onPressed: (){ // 注意不是调用老页面的setState,而是要调用builder中的setBottomSheetState setBottomSheetState(() { btnState=!btnState; }); }, child:Stack( children: <Widget>[ Opacity( opacity: btnState ?
目录 1. R的安装2. VScode 配置参考文献 1. R的安装 推荐使用anaconda或者miniconda,创建虚拟环R_env境然后安装R;
使用conda search r-base查看可下载的R的版本;R版本比较低,一般可以先增加源: % 增加源 conda config --add channels conda-forge % 提升优先级 conda config --set channel_priority strict % 再看一看R的版本 conda search r-base % 创建python=3.8的虚拟环境 R_env conda create -n R_env python=3.8 % 安装4.1.2版本R conda install -c conda-forge r-base=4.1.2 2. VScode 配置 先安装 R 插件和 R Debugger插件;使用conda activate R_env激活虚拟环境 R_env;使用pip3 installer radian安装radian好用;参考radian | 一款21世纪的R语言编辑器输入R进入R语言控制台;在控制台输入install.packages(“languageserver”)安装languageserver,用于代码补全等;使用q()退出R控制台后,打开设置,点击【远程[ssh:xxxserver]】;在虚拟环境R_env下分别输入 ·which R和which radian,分别得到R和radian的路径,在Rpath:Linux下填入R的路径;在Rterm:Linux下填入radian的路径;在Rterm:option下删掉默认项,分别填入–r-binary = R的路径和–no-site-file; 第七条:的具体操作见参考文献【5】【8】
如果需要debug需要安装vscDebugger,安装方式如下图所示(参考文献【4】),如果安装的时候报错见参考文献【2】。
参考文献 [1]使用 VSCode 愉快地进行 R 远程开发
增强现实(AR)和三维技术(3D)是两种追求创建逼真虚拟世界的不同技术。尽管它们的目标相同,但在使用方式、呈现手段和用户体验方面存在显著差异。
三维技术(3D):这种技术通过特殊的眼镜、屏幕或者投影,使用户能够看到虚拟物体的三维效果。尽管3D技术能展示虚拟物体的深度和纹理,但用户无法与这些虚拟物体进行互动。
增强现实(AR):相反,AR技术将虚拟物体嵌入到真实环境中,使用户能够在现实环境中与虚拟物体进行互动。AR通常利用手机、平板电脑或其他手持设备,将数字内容投影到真实环境中。例如,AR技术可以在桌面上呈现虚拟的动物,使用户能够旋转、放大、缩小以及进行其他互动。
创造家(chuangzaojia.com)是国内最大的AR资源平台和3D模型库,致力于成为空间计算时代的内容入口。该平台聚集了全球数百万的3D设计师,为用户提供大量的3D模型下载和在线3D浏览服务。无论您需要逼真的家具模型、引人入胜的场景模型,还是其他类型的虚拟物体,创造家都能满足您的需求。
在创造家,您可以轻松获取各式精美的3D模型,应用于您的AR项目或其他3D应用。通过该平台,您不仅可以方便地浏览和下载精心设计的3D模型,还能在线进行3D浏览,深入观察模型的细节和纹理,以更加真实地感受虚拟世界。
综上所述,AR技术注重于用户与虚拟物体的互动,而3D技术则侧重于呈现逼真的虚拟物体。作为国内最大的AR资源平台和3D模型库,创造家为用户提供了多样化的3D模型下载和在线浏览功能。借助创造家的平台,您可以尽情探索创意的无限可能,将虚拟世界融入到现实生活中。无论您是从事设计、娱乐、教育还是其他领域,创造家都是您不可或缺的创作伙伴。
OBJ格式呈现了以下优越性:
支持多边形模型是OBJ格式的一个显著特点。OBJ文件主要专注于多边形(Polygons)模型的呈现,虽然也对曲线(Curves)、表面(Surfaces)和点组材质(Point Group Material)提供支持,但一般情况下,从Maya导出的OBJ文件并不包含这些信息。
OBJ文件在处理复杂几何体时表现出色,因为它支持由三个点以上构成的面。相较于其他模型文件格式,OBJ文件能够更好地保留模型的原始细节,无需进行繁琐的三角化处理。
OBJ文件的简洁性也是其优势之一。它专注于几何形状的表示,不包含与动画、材质、贴图路径、动力学和粒子等高级特性相关的信息。这使得在只需模型几何数据的场景中,OBJ文件成为一种非常实用的选择。
OBJ格式在多个领域都具有广泛的应用前景,包括游戏、影视、动漫、虚拟现实和科学计算等。而国内最大的AR资源聚合和分发平台——创造家(chuangzaojia.com),更是致力于成为空间计算时代的内容入口,拥有大量丰富的OBJ格式模型资源。用户可以通过这个平台方便地访问高质量的OBJ格式模型,为他们的创作和项目提供多样化的选择。
总体而言,OBJ格式以其简洁、广泛的兼容性在各个领域具有重要的应用价值。不论是游戏开发、影视制作、虚拟现实还是科学计算,OBJ格式为用户提供了一种灵活、可靠的方式来处理和交换三维模型数据。结合创造家平台,用户能够更加轻松地获取丰富的OBJ格式模型资源,为他们的创作和项目注入更多的可能性。
文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是
🚩 **基于深度学习疫情社交安全距离检测算法 **
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🥇学长这里给一个题目综合评分(每项满分5分)
难度系数:3分工作量:3分创新点:5分 🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
1 课题背景 安全的社交距离是公共预防传染病毒的途径之一。所以,在人群密集的区域进行社交距离的安全评估是十分重要的。社交距离的测量旨在保持个体之间的物理距离和减少相互接触的人群来减缓或阻止病毒传播,在抗击病毒和预防大流感中发挥重要作用。但时刻保持安全距离具有一定的难度,特别是在校园,工厂等场所,在这种情况下,开发智能摄像头等技术尤为关键。将人工智能,深度学习集成至安全摄像头对行人进行社交距离评估。现阶段针对疫情防范的要求,主要采用人工干预和计算机处理技术。人工干预存在人力资源要求高,风险大,时间成本高等等缺点。计算机处理等人工智能技术的发展,对社交安全距离的安全评估具有良好的效果。
2 实现效果 通过距离分类人群的高危险和低危险距离。
相关代码
import argparse from utils.datasets import * from utils.utils import * def detect(save_img=False): out, source, weights, view_img, save_txt, imgsz = \ opt.output, opt.source, opt.weights, opt.view_img, opt.save_txt, opt.img_size webcam = source == '0' or source.startswith('rtsp') or source.startswith('http') or source.
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、第三方支付平台的功能和结构特点
在信用方面,第三方支付平台作为中介,在网上交易的商家和消费者之间作一个信用的中转,通过改造支付流程来约束双方的行为,从而在一定程度上缓解彼此对双方信用的猜疑,增加对网上购物的可信度。
在技术层面,第三方支付平台承担安全保障和技术支持的作用,提供一系列的应用接口程序,支持多家银行的多卡种支付,将多家签约银行的支付方式整合到一个界面上,负责交易结算中心与银行的对接。
银行与商家通过接入第三方支付平台实现二次结算,并采用国际先进SSL加密模式,在银行、消费者和商家之间传输和存储资料。
第三方支付服务商所提供的支付系统能够承载很大的数据量、吞吐率,并具有极高的支付成功率。同时还可以根据不同用户的需要,对界面、功能等进行调整,增加个性化和人性化的特征。
目前国内出现了数百个第三方支付平台,这些平台的业务模式和技术实现方法不尽相同,但平台的结构则具有一个相似的基本点,即第三方支付平台前端直接面对网上客户,平台的后端连接各家商业银行,或通过人民银行的相关支付系统连接各家商业银行。
2、第三方支付平台业务流分析
根据电子支付产业链的分析我们看到,第三方支付最初的支付模式只是作为银行和网上商户的中介,这就是第三方支付“一般模式”;
随着支付业务的发展,小商户和网民之间的信用风险导致了“提供担保”的支付模式。
第三方支付一般模式的流程:
消费者通过第三方网上支付平台进行支付一般必须涉及到发卡银行(网银)、网上商户和第三方网上支付平台。
一般支付流程如下:
1)网上消费者浏览检索商户网页,并在商户网站选择商品、下订单;
2)商户网站列出可以选择的支付网关,消费者选择其一,商户网站将连接到第三方支付网关的支付页面;
3)网上消费者在第三方支付平台的支付页面,选择相应的银行、卡种;
4)第三方支付平台将网上消费者的支付信息,按照各银行支付网关的技术要求,传递到各相关银行,进入银行支付页面;
5)银行(银联)提供输入卡号、金额、密码等关键信息的安全页面;网上银行转发给银行账务系统,由相关银行(银联)检查相应账户(网上消费者)的支付能力,实行冻结、扣账或划账,并将账务系统的处理结果返回给网上消费者本身和第三方支付平台;
6)第三方支付平台将支付结果转发给网上商户;
7)网上商户确认收到成功支付应答的,向网上消费者发货或提供服务;
8)第三方平台根据协议于第二天或约定的周期向商户支付扣除手续费后的资金;第三方平台为网上商户提供差错交易处理的服务;
9)第三方平台作为商户与网上银行对帐,核对资金、核对;第三方平台代表网上商户与网上银行处理差错交易。
从整个过程上来看,多家银行和签约商家通过支付网关连成通道,消费者通过第三方支付平台付款给商家,通过第三方支付为商家提供一个可以兼容多银行支方式的接口平台。
第三方支付担保模式的流程:
第三方支付担保模式,也称为信用中介型模式。该种运营模式,基本是由大型的电子交易平台独立开发或与其他投资人共同开发,凭借运营商的实力和信誉与各大银行合作,同时能够为买卖双方提供中间担保的第三方支付运营模式。
这种模式的运营商主要是借助电子交易平台和中间担保支付平台与用户开展业务,在交易过中采用充当信用中介的模式,保证交易的正常进行。
以支付宝模式流程为例,其具体运行流程是:
以支付宝支付模式为例,其具体运行流程是:
1)买家确定购买之后从支付宝的个人账户中划拨出来,保留在支付宝监管账户中;事先用户应当保证账户中有足够的资金;如果余额不足,支付宝会自动跳转到充值页面,让客户通过网银充值;
2)支付宝扣账成功后,通知卖家发货;
3)卖家通过其配送渠道向买家发货;
4)待买方收到商品并确认无误后,通知支付宝收到货物;
5)支付宝将监管账户中资金划拨到卖家在支付宝的账户中。
支付宝作为代收代付的中介,主要是为了维护网络交易的安全性。
在网上交易中, 客户在商家网站下订单后,先把货款付给大家都信任的第三方中介机构,在商家知道货款己到第三方中介机构后把货物发送给客户。
如果客户对货物满意,货款就通过第三方中介机构付给商家;如果不满意,客户把货物返回给商家,并从第三方中介机构处取回货款。
3、第三方支付平台测试方法
从上述的两种支付流程来看,作为网络交易的主要支付渠道,第三方网上支付平台在发卡银行、网上商户间提供了接口平台,在电子支付产业链中起到重要的中介作用。
面对这样的电子化信息系统及其网络交易中可能存在的风险。
我们不得不实时地关注:第三方支付业务的流程是否能够正确实现、功能是否正确、网上大量客户的并发交易会不会导致支付系统崩溃、支付系统的不稳定或者互联网诚信体系的不健全会不会影响网上购物和交易等等问题。
目前亟待解决的问题就集中在:
如何通过有效地方法和策略以验证第三方支付系统的功能是否正确实现;
是否会造成网络拥堵及如何通过现有的网络技术如Internet Web、数据加密、防火墙技术、各种交易协议、客户端浏览技术和软件等,使得客户和商家能透明安全地进行交易等。
因此,为了防范第三方支付系统的交易风险,保障系统的稳定运行,必须考虑采取强有力的措施加以管理和控制,积极地引入软件测试,强化系统质量测试和安全评估,为网络交易支付系统提供可靠地服务保证。
4、第三方支付系统的功能、性能及安全性的测试方法
1)功能测试方法
在对第三方支付平台实施测试过程中,应采用黑盒测试策略,使用等价类划分、边界值分析、因果图法、判定表法、正交试验法、功能图法等测试用例设计方法的原理与实现。
分别对第三方支付系统的功能、第三方账户和交易风险监控、系统性能及安全性等测试指标项进行测试。黑盒测试法应制订覆盖全部功能模块的测试用例,通过执行测试用例以实现系统功能、业务流程和其它质量特性的测试。
针对第三方支付平台的业务功能,如“会员管理、账户管理、中间账户资金管理、差错处理、资金结算、对账处理、统计报表”等等。
应综合应用各类测试设计方法:
首先对业务流程进行等价类划分,设计的测试用例应是业务主流程和流程主分支的最小集,所有的判别分支都能被覆盖,在流程覆盖的同时,完成等价功能的测试;
采用边界值分析法,针对功能说明中的输入输出域,进行边界值和极限值的设计和测试;
采用逆向思维方式,结合以往测试经验和直觉设计软件在功能和流程上可能存在的各种错误,靠经验用错误推测法追加一些测试用例,进行容错性测试;
针对程序功能说明有各种输入条件组合的,用因果图和判定表驱动法进行测试;参数配置类的情况,用正交试验法选择较少组合方式达到最佳效果;
功能图法通过不同时期条件的有效性设计数据;
对于业务清晰且复杂的系统利用场景法贯穿整个测试过程。
2)性能测试方法
性能测试使用并发负载、大数据量、速度、网络故障分析及性能优化、网络应用性能监控等测试方法。
在性能测试时,通过构建与真实环境相同配置、数据规模满足系统未来三年业务发展需要的压力测试环境,采用自动化测试工具模拟最终用户向服务器发起业务请求,创建压力测试脚本程序,对测试过程中系统各点进行资源监控,最后形成压力测试结果分析报告。
采用并发性能测试方法,模拟不同数量并发用户执行关键业务,如“支付、退款、预存”等。
测试系统能够承受的最大并发用户数,在进行负载操作压力测试的同时,用测试工具对数据库服务器、应用服务器、认证及授权服务器上的操作系统、数据库以及中间件等资源进行监控。
大数据量测试主要包括单独的数据量测试及与并发性能测试相结合的综合测试。
独立的数据量测试指针对系统的存储、传输、统计、查询等业务进行的大数据量测试,如“余额查询、卡交易明细查询、账单批处理”等;
综合数据量测试指和压力性能测试、负载性能测试、疲劳性能测试相结合的综合测试,测试数据的准备借助于测试数据管理与生成工具。
速度测试主要检测系统关键操作的效率,例如统计报表查询等速度。通常是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。
一.下载ntfs-3g解压到external
二.编译external/ntfs-3g,out/target/product目录下生成二进制文件
三.修改system/vold目录下文件PublicVolume.cpp增加类型ntfs
代码下载地址:https://download.csdn.net/download/asdf_2012/87811506
有问题通过名字联系我
一、介绍 由于 Sortablejs 的 vue3 组件一直没有更新,已经跟 vue3 严重脱节,所以诞生了这个项目,这个组件是基于 Sortablejs 的,所以如果你想了解更多关于 Sortablejs 的信息,可以查看Sortablejs 官网。VueDraggablePlus 并非一个我熟悉的 Vue.js 插件或库。在 Vue.js 生态系统中,拖拽相关的功能常常由一些流行的库来实现,例如 vue-draggable、vuedraggable 等。
如果VueDraggablePlus是在这之后发布的或者是一个相对较小众的库,我建议你查看相关的文档或 GitHub 仓库,以获取详细的介绍和用法信息。以下是你可能采取的步骤:
搜索 GitHub: 在 GitHub 上搜索 VueDraggablePlus,找到相应的仓库。通常,开发者会在仓库中提供文档和用法示例。
查看 npm 页面: 如果你是通过 npm 或 yarn 安装的这个库,可以查看其在 npm 上的页面。你可以在终端中运行 npm info VueDraggablePlus 或 yarn info VueDraggablePlus 来获取有关包的信息。
查找在线文档: 如果 VueDraggablePlus 有在线文档,可以查阅这些文档以获取详细的介绍、配置选项和使用方法。
查看源代码: 如果其他方法都找不到足够的信息,你可以查看 VueDraggablePlus 的源代码,了解其 API 和实现方式。
如果你能提供更多的上下文或详细的信息,我也许可以提供更具体的帮助。
网址:VueDraggablePlus | 支持 Vue2 和 Vue3 的拖拽组件vue3拖拽排序组件https://alfred-skyblue.github.io/vue-draggable-plus/?from=ipkd.cn
二、基础使用实例: <template> <button @click="start">start</button> <button @click="
对于一切很模糊的知识,首要的是抓住概念的定义。
lambda:在 Python 中用于创建匿名函数的关键字。
也即,lambda是一种关键字,这种关键字的作用是创建匿名函数。
这一段很好懂,就是匿名函数有点懵。
什么是匿名函数?先不管定语部分“匿名”,什么是函数?
函数就是一个加工厂,输入参数,输出结果。
那匿名函数呢?匿名函数就是没有函数名的函数。平时写一个实现某种功能的小函数,都需要def func_name(**args,**kewargs),有了lambda,就可以省略这个定义的操作啦。
直接 lambda arguments: expression
这里的expression是一个表达式,而不是代码块。所以你,这个lamda就是用来创建一个功能比较简单,一个表达式就能写完的函数。
下面举例:
# 使用 lambda 定义一个简单的加法函数 add = lambda x, y: x + y # 调用 lambda 函数 result = add(3, 5) print(result) # 输出: 8 在这个例子中,lambda 函数接受两个参数 x 和 y,并返回它们的和。add 变量保存了这个匿名函数,之后可以像普通函数一样调用。
但更常见的情况是lambda函数通常在需要传递函数作为参数的地方使用,比如在 map、filter、sorted 等函数中
# 使用Lambda函数将列表中的每个元素平方 numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x**2, numbers)) print(squared_numbers) # 输出: [1, 4, 9, 16, 25] #numbers 是一个列表,[1, 2, 3, 4, 5]。 #lambda x: x**2 是一个Lambda函数,它接受一个参数 x,并返回 x 的平方。 #map() 函数将该Lambda函数映射到 numbers 列表的每个元素上。 #结果是一个新的可迭代对象,其中包含每个元素的平方值 #使用list将可迭代对象变为数组 注:这里再补充介绍一下map函数,
数字经济时代,数据已成为新型生产要素。通过“数据托管”等形式对数据进行集中管理,有助于保护数据主体权益,促进数据共享和运用效率,对数字经济的发展具有重要意义。近期,在深圳数据交易所(简称“深数所”)的支持下,鹏城实验室AI靶场与合合信息旗下启信宝达成合作,双方成功完成首批数据托管事宜的对接,为中国数据托管行业发展提供了一个创新的“范本”。
鹏城实验室系中央批准的网络通信领域新型科研机构,致力于网络通信、网络空间和网络智能等领域的战略性、前瞻性、基础性重大科学问题和关键核心技术研究。
鹏城实验室新型网络研究部基于实验室领域战略科学家、中国工程院院士方滨兴提出的“数据不动程序动、数据可用不可见、分享价值不分享数据、保留所有权释放使用权”隐私保护新理念,通过“鹏城云脑”,打造安全可信的数据共享空间——AI靶场,构建了一套全自主可控的安全保障和内容审核机制,为数据共享使用搭建了一个安全的模型加工场。
启信宝是合合信息旗下的企业商业信息查询平台。基于境内2.3亿家企业等组织机构的超过1000亿条实时动态商业大数据,启信宝在B端服务层面形成了系列基础数据服务、标准化服务、场景化解决方案,已在金融、制造业、政务等多个行业中落地。本次数据托管范围覆盖工商、司法、招投标、企业创投、新闻舆情、产业数据等数十个维度的数据,预计将助力银行、政府等机构缓解信息不对称问题,为跨区域业务办理畅通数据渠道。
据悉,该合作为深数所首个跨区域企业征信数据托管应用流通试点案例。深数所及启信宝双方计划共同推进跨区域企业征信数据服务等合作事项,推动跨区域信用信息共享机制的不断完善;数据安全层面,鹏城实验室AI靶场与深数所的合作将充分发挥各自的优势,共同打造一个高效、安全的数据托管机制,为数据供给方提供安全托管的保障,同时为数据需求方提供挖掘真实场景真实数据的充分支持。
目前,中国在全球数据治理体系中发挥着越来越重要的作用。中国信息通信研究院发布的《数据要素白皮书(2022年)》 指出,数据要素投入生产的途径包括三次价值释放过程,一是数据支撑业务贯通,二是数据推动数智决策,三是数据流通对外赋能。国家级数据交易中心、重点实验室、数商间的合作创新,将有助于建立起可信、高效的数据流通环境,促成数据要素“第三次价值”的释放。
sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。
需要注意:sort()方法仅定义在list中,而sorted()方法对所有的可迭代序列都有效。
# 用sort实现list的降序排列 nums1 = sorted(nums,reverse=True) # print(nums) [3, 2, 1, 5, 6, 4] # print(nums1) [6, 5, 4, 3, 2, 1] Python中sort函数的使用及其实现多维度列表元素的排序_python 排序 一组有2个元素的数据_靠谱的小鲸鱼的博客-CSDN博客
sorted()实现按照第一个元素降序,第二个元素排序 # 3. sorted()函数,返回排序之后的值,原来的排序数组不变 # sorted()函数,默认按第一个元素升序,第二个元素升序 >>> list0 = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]] >>> list2 = sorted(list0) >>> print("list2:", list2) list2: [[4, 4], [5, 0], [5, 2], [6, 1], [7, 0], [7, 1]] >>> print("list0:", list0) list0: [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]] # 4.
开发平台包括:Win11、VS2022、WLS2。
待开发的C++应用程序需要链接openssl的静态库libssl.a和libcrypto.a。
在win11的ubuntu中,这2个库的目录是:/usr/local/openssl/lib。
在VS2022的项目属性页上设置“库目录”如下:
不必在链接器的附加库目录中添加“/usr/local/openssl/lib”。
在链接器的库依赖项中添加:ssl、crypto。
注意不能写为:libssl.a、libcrypto.a。
查看链接器的命令行,如下显示是正确的:
一、背景 在工作中我们往往都会在自己的win10电脑中安装mysql,无论是安转在win10主机上还是虚拟机上,这时我们如果要通过win10自带的 命令行窗口去连接mysql,就要设置mysql的系统环境变量,如果不设置环境变量会有以下提示
如果遇到以上提示就说明你的你安装的mysql是没有设置系统环境变量的
一、解决方法如下: 设置系统环境变量
点击---》搜索按钮
输入“”系统环境变量“”---》点击系统环境变量
选择--》高级---》点击环境变量
选择--》系统环境变量---》path--》点击编辑
点击--》新建
输入“”mysql的安装路径“”--点击确定
点击—》确定
最后再点击--》确定
三、测试验证 win+r --》输入cmd--》打开命令行窗口
点击确定
输入数据库的账号密码--》回车即可登录数据库
到这里win10连接mysql就已经完成了
专栏集锦,大佬们可以收藏以备不时之需:
Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9
Python 专栏:http://t.csdnimg.cn/hMwPR
Redis 专栏:http://t.csdnimg.cn/Qq0Xc
TensorFlow 专栏:http://t.csdnimg.cn/SOien
Logback 专栏:http://t.csdnimg.cn/UejSC
量子计算:
量子计算 | 解密著名量子算法Shor算法和Grover算法
AI机器学习实战:
AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析
AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别
Python实战:
Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别
Spring Cloud实战:
Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用
Spring Cloud 实战 | 解密Feign底层原理,包含实战源码
Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码
1024程序员节特辑文章:
1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”
1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力
1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”
1024程序员节特辑 | OKR VS KPI谁更合适?
前言 在实验过程中可能会遇到增减配置、扩建集群的情况,各大云服务提供商提供了非常便捷的配置采购方案,使得集群管理员可以在短时间内搭建起数台新主机。在配置新机器时需要根据自身需求选用合适的镜像以达到不同的生产目的,通常各厂商提供的镜像足以满足生产需求,但某些时候仍需要使用自定义镜像来启动服务器。在近期的项目中,考虑到技术栈与实际需求,决定将DevOps核心组件部署在kubernetes外作为单独节点运行。在增添配置的过程中,考虑到之前存有的本地镜像(GitLab + Jenkins + Docker + SonarQube)可以大幅减少重新部署所需的工作量且其本身由云服务器快照制作而成,故决定使用此镜像来进行DevOps机器的配置。
注意事项 若希望服务器以本地镜像启动,需要在镜像列表中导入自定义镜像。在导入自定义镜像时,需要完成以下准备:
开通对象存储服务(OSS)创建对象的存储空间(OSS Bucket)将目标上传至Bucket赋予ECS对OSS的访问权限 在Bucket中,低于5G的文件可以直接使用Web端进行传输,大于5G的内容为提高传输效率采用分片传输,官方就分片传输提供了三种方式:
OSSUtil:一款官方且开源的命令行工具,支持大文件传输,具有简单易用的特点。仓库地址OSS Browser:一款官方且开源的图形化管理工具,具有与OSSUtil相同的功能,上手更加简单。仓库地址OSSAPI:提供了一组用于与 OSS 存储桶进行交互的编程接口。通过这些 API,开发者可以在应用程序中实现各种操作,例如上传文件、下载文件、列举对象、管理存储桶等,可以在GitHub上查找不同语言的SDK。 在本次操作中,我们选择OSS Browser。
安装OSS Browser 进入GitHub,在Release中选择需要的版本,下载解压后找到oss-browser.exe运行。
查看AccessKey ID & AccessKey Secret AccessKey ID 和 AccessKey Secret 是访问阿里云 API 的密钥,具有该账户完全的权限,必须妥善保管。
获取文件URL 使用OSS Browser 将上述信息填入Browser,可以登入Bucket图形管理界面,在此界面中,我们可以进行文件的上传与下载,需要注意的是,在将镜像文件上传至Bucket后,若希望将其导入为自定义镜像需要将其解压,因为阿里云镜像检测工具不支持压缩文件。将镜像文件正确上传到Bucket后,就可以导入自定义镜像并购置服务器了。
登录 控制台:https://yundun.console.aliyun.com/?userCode=pqofinu5&type=copy&p=cas#/certExtend/buy/cn-hangzhou
免费证书只有3个月,且有数量限制,而且安全性一般,每次需要很麻烦的更换,建议购买付费的企业级、金融级安全证书。
可以使用新用户购买,新用户可能1折优惠。
企业证书购买 https://yundun.console.aliyun.com/?userCode=pqofinu5&type=copy&p=cas#/certExtend/buy/cn-hangzhou
例如:
后台是:https://www.xxoo.cn/admin
或者https://sub.xxoo.cn/admin
单域名申请:
那域名申请时候填写
www.xxoo.cn或者sub.xxoo.cn
但是xxoo.cn和hjm.xxoo.cn都是无法使用该SSL证书的。
多域名申请:
直接填写*.xxoo.cn 即可,所有域名都能访问,都能用
不同证书类型有什么区别?安全性如何?什么场景使用?
更多区别详见:https://help.aliyun.com/zh/ssl-certificate/user-guide/functions-and-features#section-o51-mee-t0x?userCode=pqofinu5&type=copy
或者采用如下方式
验证是否生效 在浏览器中可以看到证书有效期
MD@[Gitlab 安装手册]
Gitlab 安装手册 说明: Gitlab最低配置1核2g,建议配置2核4g以上且单独部署,如有多项目CI/CD要求,可以4核8g
1. 安装相关依赖(安装policycoreutils) [root@sjclinux ~]# yum -y install policycoreutils openssh-server openssh-clients postfix
2. 启动ssh服务&设置为开机启动 [root@sjclinux ~]# systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能 [root@sjclinux ~]# systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表 [root@sjclinux ~]# firewall-cmd --add-service=ssh --permanent
[root@sjclinux ~]# firewall-cmd --add-service=http --permanent
[root@sjclinux ~]# firewall-cmd --reload
5. 下载gitlab包,并且安装 (有概率会报错,因为镜像存在问题,或者需要key,可以参考5.1)
在线下载安装包:
[root@sjclinux ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm
安装:
[root@sjclinux ~]# rpm -i gitlab-ce-16.
不同版本的linux所用命令不相同: 查看linux版本命令: cat /etc/redhat-release
[root@myYUn software]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
如果是centos7以上,用下面的命令第一行,如systemctl status firewalld.service
如果是centos6以下,用下面的命令最后行,如service iptables status
1:查看防火墙状态
[root@sjclinux ~]# systemctl status firewalld.service
systemctl status firewalld
service iptables status
2:关闭防火墙
[root@sjclinux ~]# systemctl stop firewalld.service
systemctl stop firewalld
service iptables stop
3:禁止防火墙自启动
[root@sjclinux ~]# systemctl disable firewalld.service
systemctl disable firewalld
chkconfig iptables off
4:重启防火墙
[root@sjclinux ~]# systemctl enable firewalld && systemctl restart firewalld
# enable是允许开机自启动,restart是本次重新启动
service iptables restart
这三个概念应该经常能看到,但是关于其中各自的含义,很有可能还是模糊朦胧、半懂半懵的状态。今天正好复习到这里,把我对这几个概念的理解记录一下。
首先,装饰器和另外两个“器”不太一样,装饰器可以理解为一种特殊的函数,这个函数特殊之处在于以函数为参数,也就是函数的函数。说起来有点绕,看下代码:
def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with arguments {args} and keyword arguments {kwargs}") result = func(*args, **kwargs) print(f"{func.__name__} returned {result}") return result return wrapper @log_decorator def add(a, b): return a + b #add(1,3) 首先,最后两句应该能看懂,平时编程的时候也经常在def一个函数之前加上@xxx_decorator,这也就是装饰器的用法啦,通过在自定义的函数函数前面加上@装饰器函数名,就可以实现装饰的效果(装饰装饰,说白了就是一些锦上添花的工作,所以常用的装饰器就是做一些日志记录、性能分析等小工作)。
下面看下log_decorator内部,也就是代码的第一部分,先看整体,该函数传入的参数为一个func(函数),返回的是一个wrapper(一个包装了func的函数)。
当add函数使用@log_decorator来装饰时,调用add函数相当于是执行了log_decorator(add),add函数中的参数会被传递到wrapper中,然后依次执行wrapper中的内容。现在我们调用已经装饰好了的add函数,假设是add(1,3),得到的输出会是:
Calling add with arguments (1, 3) and keyword arguments {} add returned 4 #通过这种输出,可以实现日志记录的功能 注:wrapper 函数的参数 *args 和 **kwargs 是通用的形式,表示接受任意数量和类型的位置参数和关键字参数。关于什么是位置参数和关键字参数,请看以下代码:
def add(x, y): return x + y result = add(3, 5) #在这个例子中,x 和 y 都是位置参数。 #当调用 add(3, 5) 时,3 被赋值给 x,5 被赋值给 y def greet(name, message): return f"
背景 建的表有四十多个字段,建好了已经很累了,映射成Javabean还要再写一次!!
吐槽 在建立好了sql表之后,我们已经写了一次建表了,难道还要我们自己再一次手写模Java模型吗,我的表有几十个字段,全部手写不让人内心焦虑吗?
来了来了他来了,坐坐好。
插件mybatis generator(无需安装) 1.在pom文件添加plugin,MySQL相关的包也不可以少要用的! <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--必须引入的包--> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--mysql驱动包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <!--MBG配置--> <configuration> <!--MBG配置文件位置--> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <!--运行显示详情--> <verbose>true</verbose> <!--允许覆盖文件,即如果我们原来写过这样的文件,则会将原来的文件覆盖掉--> <overwrite>true</overwrite> </configuration> </plugin> </plugins> </build> </project> 2.配置(耐心很简单的) 1.首先我们要在刚刚在pom中找到下图的配置,在IDEA中对应目录添加generatorConfig.xml文件
<!--MBG配置文件位置-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
2.接着copy下面的文件代码到generatorConfig.xml 修改几处之后就可直接使用!
代码下面有需要修改的地方,咱们只关注几个点就可以了
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!
当我们在用pycharm写Python代码时候会经常会在代码的底下出现波浪线,虽然这样并不会影响程序运行,但是对于一些有强迫症的同学来说,看着这些下划线是想要去除的,那么如何将这些下划线去除呢,下面跟着我一起来学习一下这篇文章吧,内容中详细的讲解了出现波浪线的解决方法,希望对大家的学习有所帮助。
一、产生的原因
在pycharm中是有一定的代码编写规则的,比如对变量的命令需要使用驼峰命名法,有时候在变量与常量之间需要留有空格,还要在代码中没有缩进、逗号后面没有空格或者注释之间也需要留出空格等等的操作,都会导致波浪线的存在。
二、解决方法
当代码下出现了波浪线时,有两种解决的方法
方法一、找到出现波浪线的地方,将鼠标光标移到代码的波浪线上面,此时在页面中会出现提示,我们点击“ReFormat the File”的提示的话,Pycharm会自动的将我们编写的代码变成规范操作,看到提示的旁边,也会有一个快捷键提示,也可以选择快捷键Alt +Shift +Enter ,快捷键,一键规范代码。
方法二、在菜单栏中选择file选项下的setting,打开设置对话框之后再选择inspection,继续选择子菜单中的Python把Python上面的选项框为空,就不会出现波浪线这个情况了,但是这种方法只能实现一次效果。
到此这篇关于Python代码为什么有下划波浪线?Python代码在Pycharm中出现波浪线的解决方法的文章内容就介绍到这里了,希望可以帮助到大家。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
Ubuntu20.04 arm64 安装 ROS2 foxy 主要过程参考 ROS 官网的安装提示按照官网的key配完后更新源安装提示 unmet dependencies,改用 aptitudeubuntu更换软件源的整理各种工具使用代理的参数方法(端口号根据个人情况填) 主要过程参考 ROS 官网的安装提示 ros2官网文档
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg #这一步失败可以透过科学上网下载ros.key保存到 /usr/share/keyrings/ros-archive-keyring.gpg
按照官网的key配完后更新源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null 会在路径下生成ros2 仓库源描述文件 /etc/apt/sources.list.d/ros2.list
接下来使用更新仓库源命令
sudo apt-get update #这一步连接 ports.ubuntu.com/ubuntu-ports 很缓慢,好几个9M的文件下载很久 #可以透过方式改善 sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:10809/" update #10809 端口看自己的工具的设置 安装提示 unmet dependencies,改用 aptitude apt-get install ros-foxy-desktop error:the following packages have unmet dependencies sudo apt-get install aptitude -y sudo aptitude install ros-foxy-desktop #后续会弹出几次 solution accpet的确认,输入 Y #接下来就是漫长的等待,800多个 package 安装,解压完需要2G的空间 ubuntu更换软件源的整理 中科大源 清华源
1、基本内容:
6G 网络是互联智能的网络,它对通信和感知能力都有进一步的要求。从通信角度来看,增强现实和视频流等增强型移动宽带 (eMBB) 用例需要高数据速率;大规模机器类型通信(mMTC)需要低成本、低功耗和短距离的设备;远程机器人手术和自动驾驶等关键任务应用需要超可靠低延迟通信(URLLC)服务。在传感精度方面,6G提出了厘米级严格的定位要求。将传感和通信联合集成便可以利用相同的无线基础设施、频谱和无线电硬件实现上述需求。因此,6G 网络的一项重要支持技术是双功能雷达和通信 (DFRC),它不仅受益于共享频谱和功率效率,还受益于集成传感和通信 (ISAC) 共享波形的硬件效率。
雷达和通信系统中普遍存在的两点重要设计:
(1)MIMO设计:具有空间自由度,可以更好地利用雷达和通信之间的权衡。
(2)峰均功率比 (PAPR) 传输 :实现节能目的,特别是存在非线性高功率放大器 (HPA)时。
本文考虑具有可调谐 PAPR 的ISAC 波形设计,目标是在PAPR约束和雷达线性调频信号的给定相似性约束下最小化所有通信用户的多用户干扰(MUI),采用ADMM算法。
作者利用多目标优化(MOOP)得到了MUI和波形相似性的折衷,然后通过ADMM求解了优化问题从而验证了所提出的ISAC波形的优越性,同时也考虑了雷达和通信性能的折衷。
2、系统模型:
通信信号:
雷达回波:
为了研究互干扰,通信信号重新表示为:
MUI指标:总MUI能量表示为:
假设参考信号是一个chrip信号,需要保证ISAC发射波形与参考信号的相似性,即:
峰均功率比 (PAPR) :
3、优化问题:
引入单位发射功率约束,得到
使用
对目标函数处理。
增广拉格朗日函数写出闭式解。
参考文献
A. Bazzi and M. Chafii, "On Integrated Sensing and Communication Waveforms With Tunable PAPR," in IEEE TransactionsOn Integrated Sensing and Communication Waveforms With Tunable PAPR | IEEE Journals & Magazine | IEEE XploreA. Bazzi and M.
一、安装插件 npm i @toast-ui/vue-image-editor npm i tui-code-snippet npm i tui-image-editor Image-editor | TOAST UI :: Make Your Web Delicious! 官网介绍说是“凭借简单和美观的完美结合,图像编辑器是一个功能齐全的编辑器,非常适合日常使用” ,的确,日常的功能需求确实可以满足了。
二、使用插件 1、引入插件 import "tui-image-editor/dist/tui-image-editor.css"; import "tui-color-picker/dist/tui-color-picker.css"; // 改写原插件样式 import "../../assets/css/editPicture.css"; //引入所要编辑的图片 import ImageEditor from "tui-image-editor"; 2、插件配置 // 中文菜单 const locale_zh = { ZoomIn: "放大", ZoomOut: "缩小", Hand: "手掌", History: "历史", Resize: "调整宽高", Crop: "裁剪", DeleteAll: "全部删除", Delete: "删除", Undo: "撤销", Redo: "反撤销", Reset: "重置", Flip: "镜像", Rotate: "旋转", Draw: "
15 issues were found when checking AAR metadata: 1. Dependency 'androidx.appcompat:appcompat-resources:1.6.1' requires libraries and applications that depend on it to compile against version 33 or later of the Android APIs. :app is currently compiled against android-32. Recommended action: Update this project to use a newer compileSdkVersion of at least 33, for example 33. Note that updating a library or application's compileSdkVersion (which allows newer APIs to be used) can be done separately from updating targetSdkVersion (which opts the app in to new runtime behavior) and minSdkVersion (which determines which devices the app can be installed on).
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、支付类的测试关注点及异常点
对于市场上的支付系统,其实原理大同小异。市场上大多数软件系统涉及到支付功能,都会与第三方支付系统交互,跳转到相应的支付系统实现其支付功能,下面说下开展这类型测试之前,需要考虑哪些因素:
1)了解第三方支付接口有哪些,系统直接交互如何实现,建议画流程图,重复熟悉系统实现流程,只有搞清楚流程,才能更好的评估其中的风险,才能有利于测试用例的设计;
2)除了主要功能之外,还需要考虑异常场景有哪些;
3)有哪些风险?如何规避?
针对测试过程中涉及到主要的测试点整理如下:
测试过程中需要注意的主要测试点及异常场景:
①首先要保证接口都能正常调用;
②生成一笔订单,支付完成后,同步或异步重复回调,只有一次有效;
③生成一笔订单,复制订单号和金额,再次生成一笔订单,用fiddler设置断点,用第一笔已完成的订单号和订单金额去替换现有的订单号和金额,无法完成支付;
④生成一笔订单,跳转到第三方时修改金额,无法到账,或者如果是游戏充值游戏币的话,到账为篡改后的金额对应的游戏币;
⑤异步通知屏蔽,同步有效,进行支付,同步能够正常到账;
⑥同步设置无效,异步有效,进行支付,异步能够正常到账;
⑦同步异步都设置无效,在第三方支付完成后,在重发机制时间范围内,设置异步有效,到下次通知时间点时,能够正常通知到账(补单机制的验证,如果商户收到第三方支付成功的通知后,要告知第三方支付收到了成功的通知,如果第三方支付收到商户应答不是ok或超时,第三方支付就会认为通知失败,会在规定的时间内持续调用notify_url,一般有时间或次数的限制);
⑧针对支付订单在数据库中存储是否完整和正确进行校验(比如:第三方订单号–方便与第三方对账和问题排查、订单金额、订单状态等);
⑨如果是用户购买实物商品,用户发起退货,要保证退货流程正常,资金能正常返还,要考虑下并发情况的验证以确保安全性;
⑩如果是用户购买虚拟商品,比如话费、油卡之类的商品,只有在发货失败的时候才能发起退货,注意验证;
常遇的坑
用户购买100元游戏币时,前往第三方支付跳转进行金额的篡改由100元改成0.01元,结果就拿了0.01元充值了100元的游戏币。对订单金额没有做校验导致这样的后果,损失比较大。大家在测试的过程中一定要注意对服务端进行校验,支付时数据的篡改一定要有校验。
当同步、异步通知都存在的情况的,异步通知(第三方支付成功后台通知),没有到账,导致部分用户充值不到账,引起客诉。
当同步、异步并存的时候,一定要分别对同步和异步进行检验,确保都能正常到账。
我们所做的绝大多少的互联网产品都会涉及到第三方支付,所以支付功能必然是重要的,作为测试互联网产品的一员,我们必须要做好支付的安全性。
如何规避支付风险?
为了进一步的加强支付功能的安全,也可以适当的增加一些监控机制。
比如:
订单与第三方订单进行对比,可以使用跑批完成,当我们完成支付的订单从数据库中查出来与通过第三方订单查询接口查询出来的同一个订单金额有异常时,进行报警通知能够及时发现处理,甚至当有异常情况进行创建订单的终止,从而把损失降到最低。
2、支付平台是如何测试各种渠道和银行通道的?
作为一个支付平台,接入了快钱、易宝或直连银行等多家的渠道,内在的产品流程是自己的。
业内有什么比较好的测试办法,来测试各渠道及其支持的银行通道呢?作为产品,我自己办了十几张银行卡方便测试,但QA和开发不愿意这样做,怎么办呢?
回答:对支付平台而言,与支付渠道相关的测试大致可以分为:测试支付渠道功能、测试支付产品功能。
1)支付渠道功能测试
主要是测试与银行、银联、其他外部支付渠道以及诸如实名认证等非支付类功能的功能。
一般情况下,支付渠道的接口只对第三方支付内部开放,不会直接将支付渠道暴露给外部商户,对外部商户都是包装成支付产品形式提供的。
支付渠道是第三方支付公司最基础的能力,由于涉及调用外部形形色色的各种接口及服务,各家的渠道提供的测试环境、准生产环境、生产环境要求也不同,同时第三方支付自己也需要维护对应的测试环境、准生产环境、生产环境不同版本的环境,要完整做测试确实挺麻烦。
测试方法:
在内部开发一套统一的测试网关(不管是接口通信协议是socket、http、xml等,一般都统一为http以方便测试),统一各种渠道的测试入口,针对不同的渠道维护对应的接口参数模板,方便测试人员快速输入并提交原始的支付请求。
提交到支付渠道后,如果支付渠道维护有测试环境、准测试环境,则可以直接用提供的测试账号完成实际调用支付渠道测试。
如果不提供,只能像如题一样,针对不同的渠道开通银行卡、对公账户等进行测试。
此种情况下一般都以最低限额测试。测试卡的申请、测试费用出处、日常管理可以根据每家公司实际情况制定对应政策,最好是公司承担各种费用、简化相关流程并有对应的激励措施,例如不要对此类费用还要走极为漫长的报销流程。
测试目的:
保证支付渠道功能的正确性、完整性、可用性,验证渠道是否畅通、功能是否正常。
一个典型例子是,原有支付渠道新上线一个功能,生产环境测试发现有问题,要在生产环境完整跑一边流程极为麻烦,可以用测试或准生产环境稳定版本的测试网关测试,快速定位是上线新版本影响生成功能,还是支付渠道端的问题,或者生产环境网络等问题影响。
2)支付产品功能测试
这里的支付产品可以是第三方支付内部的基础性产品,也可以是对外部商户提供的产品或接口。
此种情况下,测试重点不是支付渠道的基础功能,而是支付产品的核心功能。对支付产品而言,可以假设支付渠道是一个黑盒子,黑盒子对外提供的服务是可靠稳定的。
测试方法:
在内部开发一套支付渠道的模拟网关,对各种支付渠道的各个接口功能进行模拟并根据支付请求返回对应的模拟报文。
支付请求不用实际提交给外部支付渠道。 一般模拟网关与上面的测试网关会统一开发部署。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 一、Python编程入门到精通 二、接口自动化项目实战 三、Web自动化项目实战 四、App自动化项目实战 五、一线大厂简历 六、测试开发DevOps体系 七、常用自动化测试工具 八、JMeter性能测试 九、总结(尾部小惊喜) 秉持梦想之翼,放飞心灵的火焰,勇往直前,无惧困难。不论何时何地,坚守信念,追求卓越,终将成就不凡的人生传奇。
勇往直前,迎接挑战的呼唤。放下犹豫,抛却困惑,努力奋斗,才能获得真正的自由与成就。在每一次努力中超越自己,才能创造出辉煌的人生篇章。
在漫漫征途中,不放弃、不言败,坚守初心,追求卓越。勇敢迎接挑战,超越自己的极限,才能成就那个矢志不渝的梦想。只要努力,成功将无可避免。
文章目录 🌹简述Eureka🛸搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 🌹简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架,主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成,其中Eureka服务器负责维护整个系统的服务实例信息,而Eureka客户端则负责向Eureka服务器注册自身信息,并从Eureka服务器获取其他服务实例的信息。
通过Eureka,服务提供者可以在其启动时向Eureka服务器注册自己的网络地址和元数据信息,而服务消费者则可以从Eureka服务器查询所需服务的实例列表,并基于负载均衡策略选择合适的服务实例进行调用。同时,Eureka还具备监控、故障转移、自我保护等功能,能够有效地应对网络分区等异常情况,确保整个系统的稳定性和可靠性。
总的来说,Eureka作为服务治理框架,为微服务架构提供了一套完善的服务注册与发现机制,帮助各个服务实例之间能够自动地找到彼此,实现服务之间的通信与协作。它是构建基于微服务架构的分布式系统的重要工具之一,被广泛应用于云计算、大数据等领域。
🛸搭建Eureka服务 ⭐操作步骤 首先我们在eureka-server包中进行操作
首先我们先引入依赖
<dependencies> <!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> 下面我们新建一个启动类,来启动eureka服务
package cn.itcast.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } } 下面我们编写一个配置文件application.yml
server: port: 10086 # 服务端口 spring: application: name: eurekaserver # eureka的服务名称 eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka 这样我们就成功搭建eureka服务了
⭐服务注册 我们在user-service包中进行操作
在pom文件中引入eureka客户端依赖
<!--eureka客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> 我们编写一个配置文件application.
碰到身份证阅读器项目,直接放进trimmer里面读卡,导致主页面卡顿,就打算放进子线程里试一下,就有了这个尝试。
1.创建线程文件 直接点击左上角file新建other,delphi有自带的模版
这个勾选了,就是他会给你的线程取个名字,在execute里面加一行。
NameThreadForDebugging('线程名字'); 标准模版的代码就是这样,有几个注意事项:
1.文件名得和unit后的保持一致
2.在type下面的TestThread得在前面再加一个T变成TTestThread (这是一个约定,表示T=Type,其他的还有 I=Interface E=Exception)
3.在Execute前的TestThread和2同理
unit TestThread; interface uses System.Classes; type TTestThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; implementation { Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure TestThread.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; or Synchronize( procedure begin Form1.
高分屏、屏幕有缩放比情况下Winform窗体变形问题解决方案 环境问题描述解决方案永久方案:修改注册表(亲测有效,个人推荐) 环境 电脑:联想拯救者Y9000P
主屏分辨率:2560x1600
缩放:150%
操作系统:Windows 11
Visual Studio版本:VS2022
问题描述 我最初是在之前小米游戏(Windows10,主屏分辨率1920x1080,缩放100%)本上开发的一个winform应用,一切显示正常,在更换到高分屏的联想笔记本电脑下,在使用vs2022开发Winform窗体应用时,界面控件位置乱了,有遮挡,按钮也变小了,同时在窗体设计器顶部出现一个提示:
主显示器缩放比例设置为150%。请考虑在非DPI感知模式下打开WinForms设计器。
如下图:
运行时效果如下:
可以看出明显时有问题的。
解决方案 永久方案:修改注册表(亲测有效,个人推荐) 1、打开注册表编辑器,找到下面这个路径:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
如下图:
2、在右侧新建一个字符串值。
2.1 值为:devenv.exe所在的路径(安装vs时选择的路径不同位置会有所不同,如果安装了多个版本的vs,则需要添加多个值)
2.2 类型为:REG_SZ
2.3 数据为:DPIUNAWARE
我的VS2022版本的devenv.exe的路径为:
D:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\devenv.exe
我的VS2013版本的devenv.exe的路径为:
D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
添加完,如下图:
3、关闭注册表编辑器,关闭已打开的VS,重新打开VS,如下图:
可以看到,显示已经正常了,窗体设计器顶部的提示也没有了。
4、运行后的效果如下图:
也显示正常了。
其他临时方案不推荐用,此处不再描述。
1.运行python程序的两种方式 1.交互式 即时得到程序的运行结果 2.脚本方式 把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容 2.python程序运行的三个步骤 python3.8 C:\a\b\c.py 1.先启动python3.8解释器,此时相当于启动了一个文本编辑器 2.解释器会发送系统调用,把c.py的内容从硬盘读入内存,此时c.py中的内容全部为普通字符,没有任何语法意义 3.解释器开始解释执行刚刚读入内存的c.py的代码,开始识别python语法 3.变量 变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等 #为什么要有变量? 答:为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的 详细地说: 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现, 所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态,以及状态的变化。 #如何使用变量 1.变量基本使用 # 原则:先定义,后引用 name = 'egon' #定义-》存 print(name) #引用-》取 2.内存管理:垃圾回收机制 垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到---垃圾 3.变量名的命名规则 原则:变量名的命名应该见名知意 1. 变量名只能是 字母、数字或下划线的任意组合 2. 变量名的第一个字符不能是数字 3. 关键字不能声明为变量名,常用关键字如下 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] 4.