推免面试经历 | 南理+湖大+浙大+华工+南航+吉大+中南+重大

9月疯狂投了一堆学校预推免。下面讲一些进入复试的学校。 南京理工大学 当时想着要是实在没有985就读,就去211强校吧。所以我投了南理CS学硕,这也是我第一个面试的学校。当时是微信一位导师面,首先是一段英文自我介绍,接下来基本围绕我在系统上填的比赛项目论文和个人信息问。面试很顺利,半小时后我就收到了offer。个人感觉南理非常重视排名百分比,在211排前5%就肯定能进面试拿offer了。当然在计算机保研交流群里,很多朋友说南理问了很多刁钻的专业问题。我个人猜测,双非或排名不前,就是多导师平台面试,会比较难。 湖南大学 这个学校是我最早填的,有很大概率也有无数次想法去湖大就读。湖大简直不能再海了hh,预推免面试了上千人。我那场的面试首先是一段英文自我介绍,然后逐个老师问问题。 你最擅长的一门专业课是?我回答分数上计网更高但我更喜欢数据结构,也对其有更好的理解。追问我对数据结构的理解,我回答了大段话然后老师哈哈大笑说很好。接下来的老师都是问项目的细节。 我面试的是电子信息(软件过程)专业,结果排名第二。在28号那天填了湖大,半小时就收到了offer。(还打电话让我15mins内确认志愿) 浙江大学软件学院 机考好像占比15%,面试占比85%。中文机考四道题,前两道都是思维题,对我来说思考时间比较久,实现很容易。后面没时间就直接骗分。最后我考了49分(满分100)。面试时感觉非常严谨和正式,现场十多位老师。首先是在个人展示PPT中穿插1mins以上的英文介绍。然后老师们问比较多项目的细节,比方说除了这一种方法,你知道还有其他方法可以解决这个问题嘛?为什么这个技术可以解决这个问题?专业问题是:‘C++和Java的本质区别’?这个我答解释性语言和编译性语言的点,然后老师提示往安全和内存那边思考,最后没有答上来哈哈。结果是递补110+名,在下午三点接到浙软电话。多少有点可惜哈哈哈 华南理工大学 首先挑一道英文题,两小问,第一个是问我最感兴趣的AI应用,第二个是直接翻译一段话(AI相关的)。我第一个直接卡顿了,英文题答得超级卡顿和紧张。然后就开始展示我的自我介绍pdf。老师提问:参加这么多比赛和项目,时间怎么平衡的?也问了项目和论文的细节。没有问专业课问题。结果是84.4分,CS学硕的线是85.5,又是递补。华工bar很高,所以递补大概率能进的。提前打其招生办电话被告知没希望补录上,我在28日晚上七点才接到华工递补得上的电话,老师告知他们四五点才开始核查志愿放弃情况。效率比较慢,递补的同学都可以耐心等等。 南京航天航空大学 我要狠狠夸一下南航。面试挺严谨和专业的,面试老师特别温柔。这是我面试中唯一一个和我英文对话的学校,那位老师发音特别纯正。问为什么要来我们学校,我本来想说南航工科强势,然而南航不知道怎么用英文表达,直接卡了一会。然后中文自我介绍,项目介绍,提问项目相关问题也问了本人英文水平。可能是面试官特别想捞我,最后结果出来,我在一千多人里面排40+,很前。在28号那位温柔的面试老师打电话问我有没有来南航。他说他给我打分很高打算带我做研究,他真的态度超好。个人认为能跟对好导师比学校title重要很多,而且南航也算是头部211了。我至今想起来仍觉得很值得去。 吉林大学 这算是意外之外的选择了,我应该是27号早上才面试的。挑一道英文题和一道专业问题。也是一段英文现场翻译,这次会比较不慌了哈哈。专业问题很简单,是回答C++题的数组输出结果。然后是一分钟自我介绍,老师们再围绕我的简历提问,问项目和论文。个人感觉这场表现得还可以,至少是不紧张的状态。结果在28号是最快打电话给我的学校,我就看着表犹豫了很久还是上了。感觉CS学科实力A-也挺好了哈哈哈 中南大学 在保研交流群看到有群友分享中南在开腾讯会议紧急面试(我想大概是被鸽穿了)。这是28号当天面试的学校,时间非常紧张。一分钟展示PPT,提问一两个项目问题,然后就结束了。没有说任何结果,而且听说中南非常海,我也不敢填。要是当时能够及时去注意到垃圾邮箱里的邮件就能参加他夏令营了。听说中南夏令营基本都发了offer。 重庆大学 XXX!退钱!这是我唯一需要交钱面试的学校。而且也很海,给很多人发了面试交钱邮件。最印象深刻的问题是,还报了哪些学校?我觉得这里强调自己非常想去只想去重庆大学的话比较容易拿offer。由于这个问题我答得不好,结果是递补。其他问题千篇一律,和其他学校差不多。 天津大学 和浙软一样,是机考和面试。不一样的是,天大需要机考前200名才给面试机会,而且机考只能用C/C++。想不起来什么题目了,我机考太菜,没进面试。 10月28日可谓是一个非常紧张的日子。我也从没想过华工浙软吉大南航都要我。一开始还沉浸在选择湖大还是南理上。录取吉大后,我也很快就和心仪导师双向选择了。相信一切都是最好的安排。 [经过那段时间不断的报名交材料面试,我对于保研有了更深的一些认识,包括信息的获取、院校导师的选择、文书模板(好的文书真的非常重要,我夏令营就是吃了文书的亏)、英语/专业问题准备、联系导师等等。如果有特别想了解的内容或资料也欢迎大家后台留言哟。](https://mp.weixin.qq.com/s/NAZueN28k3602Z-4j8wPlg) 现在正在实习,这段时间我对于计软专业就业有了全新的认识,这也直接影响我研究生期间的规划。打算实习结束再写篇推文和大家分享我的感悟,想看的朋友可以点关注公众号支持一下哈哈哈哈。 [如果有任何问题也欢迎关注公众号后台留言,看到都会尽快回复嘻嘻](https://mp.weixin.qq.com/s/NAZueN28k3602Z-4j8wPlg)。 https://mp.weixin.qq.com/s/NAZueN28k3602Z-4j8wPlg

如何剪辑电影视频片段?影视剪辑的方法介绍

如何剪辑电影视频片段?不知道大家平时有没有看到一些精彩的影视剪辑片段,所谓的电影视频片段其实就是将一部电影中的精彩部分剪辑到一起。这种剪辑手法在如今还是十分常见的,学会这样的剪辑方法,我们不仅可以进行视频剪辑,而且还可能会给自己带来收益。下面小编就来教大家如何进行剪辑。 步骤一:新建项目 打开电脑上的【视频剪辑软件】,进入软件的首页,新建一个视频序列。如果是需要使用其他操作比如视频分割、视频合并、视频压缩等,我们就可以直接点击右侧的相应的选项即可。 步骤二:导入视频 新建好项目之后,点击【文件】-【导入】选项,上传准备好的视频文件,并将其拖动到时间轴面板上,排列好。 步骤三:进行编辑 我们已经做好准备工作之后,接下来我们对视频进行编辑。看到在软件的左上方位置的工具栏里面有着文字、贴纸、滤镜、转场等操作。每次的编辑我们都可以在右侧进行预览,不满意的话可以直接撤销。 步骤四:点击导出 编辑完成之后,我们可以整体预览一下制作的效果,然后点击下方的【导出】按钮。 以上就是小编给大家介绍的剪辑电影视频片段的具体方法了,相信大家应该已经学会了具体的方法了,那么就可以动手试一试哦!

EasyExcel生成多个exel文件并zip压缩

前言 最近项目上有个关于excel导出的需求,要求如下: 1,表头除了固定的几个,可以动态添加,比如下面表格,范围1,时间,值是固定,其他的表头都是动态的 2,范围1,范围2,范围3是合并列 3,范围2,范围3是联动的 4,自适应宽高,自适应居中,样式设置 5,生成多个excel最后zip压缩 注意: 1,因为产品的需求,合并列范围1,范围2,范围3严格遵守合并的格式,并不是任意合并,所以比较复杂。 2,不支持列与列之间的合并,如果想要支持,可以基于此demo开发是没任何问题的。 POM <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.7</version> </dependency> 设计 1,数据库获取数据用List<Map<String,Object>>,后面需要转换成List<List>(原因:easyexcel对List不兼容) 代码如下 压缩工具类 public class ZipUtils { private static final Charset DEFAULT_CHARSET = Charset.defaultCharset(); /** * 将文件流压缩到目标流中 * * @param out 目标流,压缩完成自动关闭 * @param fileNames 流数据在压缩文件中的路径或文件名 * @param ins 要压缩的源,添加完成后自动关闭流 */ public static void zip(OutputStream out, List<String> fileNames, List<InputStream> ins) { zip(out, fileNames.

jieba分词器使用指南

简单易用的分词器分享,使用jieba分词java版(支持中文)实现。 文章目录 一.分词应用场景二.分词难点三.分词实现总结 一.分词应用场景 统计文章高频关键词 比如我有一篇文章,我要统计文章中出现词语频率最高的前5名 分析一句话或者一段话中词语出现的次数 提取词语 … 二.分词难点 由于这里我们考虑使用中文分词器,所以一些特定词语也需要能够支持识别,例如赛博朋克等新兴词语。另外一些介词或者语气助词最好不在统计范围内,比如的,地,得… 并且还有一个特点,就是在较短的时间内能够分析出结果。 三.分词实现 结合以上难点的分析,我们接下来使用开源的jieba分词进行实现。首先最开始这是一个python实现版本,源仓库:https://github.com/fxsjy/jieba 后来在团队huaban的改进下,支持了java版本,再到后来由于huaban团队停止了维护,就由Xinyao Qian个人开发经手维护开发,源仓库:https://github.com/huaban/jieba-analysis 使用方法很简单,源码示例: public static void main(String[] args) { String content="孩子上了幼儿园 安全防拐教育要做好"; int topN=5; TFIDFAnalyzer tfidfAnalyzer=new TFIDFAnalyzer(); List<Keyword> list=tfidfAnalyzer.analyze(content,topN); for(Keyword word:list){ // 防拐:0.1992,幼儿园:0.1434,做好:0.1065,教育:0.0946,安全:0.0924 System.out.print(word.getName()+":"+word.getTfidfvalue()+","); } } 通过分析词语出现频率就能够满足计算出高频词等需求。 同时还能够配置停用词stop_words.txt以及自定义词库idf_dict.txt。 总结 我们站在巨人的肩膀上,所以能看的更远,致敬前辈。 参考资料: TF-IDF理解及其Java实现 python实现源仓库java实现源仓库

Java对象序列化、Hessian、Json

Java对象序列化、Hessian、Json 内存中的数据对象只有转换为二进制流才可以进行数据持久化和网络传输。将数据对象转换为二进制流的过程称为对象的序列化(Serialization)。 反之,将二进制流恢复为数据对象的过程称为反序列化(Deserialization)。 序列化需要保留充分的信息以恢复数据对象,但是为了节约存储空间和网络带宽,序列化后的二进制流又要尽可能小。 序列化常见的使用场景是 RPC 框架的数据传输。常见的序列化方式有三种 JAVA原生序列化 Java 类通过实现 Serializable 接口来实现该类对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用。 Java 序列化保留了对象类的元数据(如类、成员变量、继承类信息等),以及对象数据等,兼容性最好,但不支持跨语言,而且性能一般。 实现 Serializable 接口的类建议设置 serialVersionUID 字段值,如果不设置,那么每次运行时,编译器会根据类的内部实现 包括类名、接口名、方法和属性等来自动生成serialVersionUID。 如果类的源代码有修改,那么重新编译后 serialVersionUID 的取值可能会发生变化。因此实现 serializable 接口的类一定要显式地定义serialVersionUID 属性值。 修改类时需要根据兼容性决定是否修改 serialVersionUID如果是兼容升级,请不要修serialVersionUID 字段 避免反序列化失败。 如果是不兼容升级,需要修改 serialVersionUID 值,避免反序列化混乱。 使用 Java 原生序列化需注意, Java 反序列化时不会调用类的无参构造方法,而是调用 native 方法将成员变量赋值为对应类型的初始值。 基于性能及兼容性考虑,不推荐使用 Java 原生序列化。 Hessian 序列化 Hessian 序列化是一种支持动态类型、跨语言、基于对象传输的网络协议。 Java 对象序列化的二进制流可以被其他语言 (C++/Python)反序列化。 Hessian 协议具有如下特性: 自描述序列化类型。不依赖外部描述文件或接口定义用一个字节表示常用基础类型, 极大缩短二进制流。 语言无关,支持脚本语言。 协议简单,比 Java 原生序列化高效。 相比 Hessian 1.0, Hessian 2.0 中增加了压缩编码,其序列化二进制流大小是 Java序列化的 50% 序列化耗时是 Java 序列化的 30 ,反序列化耗时是 Java 反序列化的20% Hessian 会把复杂对象所有属性存储在一个 Map 进行序列化.

在matlab中使用模糊编辑器实现模糊控制器的设计详解

目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 所谓模糊控制技术是指通过模糊集合和模糊逻辑等原理,并且和经典的控制理论相结合,并通过模拟人类的思考方式,对一些难以建模的控制对象进行控制的一种控制策略。模糊控制器的模糊规则的制定是建立在专家经验的基础之上的,即通过具有丰富经验的专家对控制对象进行分析,并基于个人经验建立一套合理的控制机制,通过参数化的方式将这些经验用具体的数学参数和公式进行建模,从而得到一个符合实际情况的控制。这种控制策略通过使用专家经验知识,将专家的经验转换为控制方式,对过程复杂、模型不精确的控制系统进行有效的控制。这种将个人的经验转换为具体的数学公式,并通过模糊数学理论将其转换为模糊控制的过程,就是模糊控制理论。通常情况下,模糊控制器的基本结构如图所示。 从图的模糊控制器的基本结构图可知,模糊控制器的核心部分包括控制变量计算,模糊量化处理,模糊控制规则,模糊决策以及逆模糊化处理五个模块。整个控制系统通过计算机编程来实现的,将模糊控制器的反馈输出信号和参考输入信号的误差作为整个模糊控制器的输入控制信号,将误差信号转换为模糊量,并通过模糊语言来表示,从而得到的模糊语言集合的一个子集e,然后由子集e和模糊控制规则R,然后根据模糊推理的合成规则进行模糊决策,得到模糊控制量u,u的关系。 一个标准的模糊控制系统和传统的控制方法想比较有如下几个优点:首先,模糊控制器具有较为广泛的应用范围,这种特性比较适合应用在非线性系统中;其次,模糊控制器的控制过程独立于控制对象,且对于一些较为复杂的难以建模的控制对象,可以通过模糊控制器进行有效的控制。模糊控制器具有较好的鲁棒性,对被控对象的特征变化不敏感,而且模糊控制器的设计参数可随时根据需要进行调整。模糊控制以计算机为主,模糊控制的数学计算都由计算机来完成,得到的结果精确,表现出很强的智能性,操作简单易实现。 模糊控制器中的模糊控制规则表格的制定是通过模糊条件语句来设计的,所以模糊控制器本质上也是一种模糊语言控制器,即一个标准的模糊化控制器包括模糊接口、知识库和推理以及解模糊接口。 对于一个模糊输入变量,模糊子集通的划分主要三种类型: 五个模糊集合的控制变量,即负大(Negative big,NB),负小(Negative small,NS),零(Zero,ZO),正小(Positive small,PS),正大(Positive big,PB); 六个模糊集合的控制变量,即负大(Negative big,NB),负中(Negative middle,NM),负小(Negative small,NS),零(Zero,ZO),正小(Positive small,PS),正中(Positive middle,PM),正大(Positive big,PB); 七个模糊集合的控制变量,即负大(Negative big,NB),负中(Negative middle,NM),负小(Negative small,NS),零负(Negative Zero,NZ),零正(Positive Zero,NZ),正小(Positive small,PS),正中(Positive middle,PM),正大(Positive big,PB)。 根据控制器控制精度的不同需求,选择不同划分精度的模糊输入变量。 首先对于模糊控制库,其结构上由一个规则库和一个数据库两个部分构成。其中规则库中保存的是模糊规则,模糊规则是一种基于专家经验知识,并根据某种推理获得的模糊语言表现;而数据库中保存的是输入、输出的模糊子集的隶属函数值。 其次对于模糊控制器的推理过程,其主要通过模糊控制器所输入的模糊变量,通过模糊规则来实现模糊推理来获得模糊控制输出量。此输出量是一种模糊矢量信号,需要通过模糊清晰化处理获得精确的控制输出作为最终的控制量,即解模糊过程。 在一个完整的模糊控制系统中,通过根据输入控制器的个数,将模糊控制器划分为一维模糊控制器,二维模糊控制器以及多维模糊控制器,即通过模糊控制器的输入个数定位模糊控制器的维度,图2所示的是不同输入格式的模糊控制器结构图. 模糊控制器的语言等级,从负最大到正最大依次为:NB负大、NM负中、NS负小、ZO零、PS正小、PM正中、PB正大。选取模糊语言输入变量E、Ec和输出变量、的模糊值域分别为{NB,NM,NS,ZO,PS,PM,PB}。 在MATLAB中,使用模糊函数编辑工具设计上述讲述的模糊模糊集和隶属函数。 在图的模糊控制器工具箱设计界面,根据模糊隶属函数的选择原则,系统中的NB和PB采用正态型分布;NM、NS、20、Ps、PM则采用三角形分布,模糊控制器输入输出参数的隶属度函数图。 图4 模糊控制器输入输出参数隶属度函数 通过上面的设置,可以获得如下结构的模糊控制器: 根据模糊规则的性质,并由模糊语言的等级可以得知,模糊控制规则有49条模糊条件语句。故本文所建立的模糊规则表如下所示。 Kp规则控制表 Kp Ec E NB NM NS ZO PS PM PB NB PB PB PM PM PS ZO ZO NM PB PB PM PS PS ZO NS

html2Canvas + jsPDF vue生成pdf(A4纵向或A3横向)

1: 第一个.将页面html转换成图片 npm install --save html2canvas 第二个.将图片生成pdf npm install jspdf --save 2:创建名称 htmlToPdf.js // 页面导出为pdf格式 import html2Canvas from 'html2canvas' import jsPDF from 'jspdf' const htmlToPdf = { getPdf(title, url) { html2Canvas(document.querySelector('#pdfDom'), { allowTaint: false, taintTest: false, logging: false, useCORS: true, dpi: window.devicePixelRatio * 4, // 将分辨率提高到特定的DPI 提高四倍 scale: 4 // 按比例增加分辨率 }).then(canvas => { // eslint-disable-next-line new-cap var pdf = new jsPDF('l', 'mm', 'a3') // A3纸,横向 // var pdf = new jsPDF('p', 'mm', 'a4') // A4纸,纵向 var ctx = canvas.

RuntimeError: DataLoader worker (pid(s) 46220) exited unexpectedly

raise RuntimeError(‘DataLoader worker (pid(s) {}) exited unexpectedly’.format(pids_str)) from e RuntimeError: DataLoader worker (pid(s) 46220) exited unexpectedly 其实吧,这个问题说难不难,说简单也简单。 出现这个Error很明显,就是CPU加载数据和GPU处理数据速度不匹配了,而且不是以往那种CPU利用率拉满,而GPU虽然占用率拉满,但实际利用率不高的情况。打个比方,以前是cpu加载数据要个20-30s,但gpu零点几秒就处理完成了,从而一直等待。这种情况只会让模型运行时间变长而已。 torch.utils.data.DataLoader(datasets[x], batch_size=batch_size, shuffle=True, num_workers=8, pin_memory=True) 现在则是两极反转,Dataloader的batchsize设置的比较大(64,128),而且还使用多个num_workers去多进程load数据,比如16-32个,甚至还把pin_memory设为True了。导致cpu加载数据快到飞起,反而GPU跟不上了,就会出现异常,然后杀死进程,出现如上结果。 解决方案 就是根据以上提的三点来呗 batchsize减小num_workers设的小一点,比如2,甚至不设置(默认为1)pin_memory = False 以上3点使用一至两种一般就能解决,不行就都用。 并且把数据加载,预/后处理这种IO任务让GPU去做, load checkpoint的时候 map_location也别设成cpu了,这么拉后腿,肯定可以成功。

可预览文件转PDF-使用Aspose

Word、Excel、TXT、PDF文件等转PDF--使用Aspose 需求背景Word、Excel文档转PDFPPT转PDF图片转PDF 需求背景 支持各种文件上传,并支持部分文件的预览。 由于项目前端的文件预览需要支持以下格式,但是ppt、txt无法预览,需要转换为PDF查看。 1.docx、doc文件起初使用documents4j,因为项目是部署在Linux上的,本地转换是正常的,在Linux上执行需要ms office,执行不了vbs,会报错,最后换成了Aspose。 2.Excel文件用documents4j转换时效果不好,列数太多,宽度太宽会分页显示,也换成Aspose来处理。 word和excel都参考了这个地址 传送门。 3.ppt使用 itextpdf 和 poi,转换为图片再写入PDF中。 Word、Excel文档转PDF 下载aspose-word的jar包,在项目的resource下创建lib,放入jar包。网上找个license.xml也放在resource下。没有license会有水印。 maven项目,需要在pom文件中引入依赖,项目打包时也要把jar包打上。 <dependency> <groupId>com.aspose</groupId> <artifactId>cells</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/aspose-cells-8.5.2.jar</systemPath> </dependency> <dependency> <groupId>com.aspose</groupId> <artifactId>words</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/aspose-words-16.8.0.jar</systemPath> </dependency> 原帖是写的接口,在我的项目中我写成了工具类,方便调用。 1.载入license授权文件,License导入的是com.aspose.words.License下的,excel导入的是cells下的。 protected static boolean matchLicense() { boolean result = false; InputStream is = Word2Pdf.class.getClassLoader().getResourceAsStream("licenses/license.xml"); License wordLicense = new License(); try { wordLicense.setLicense(is); result = true; } catch (Exception e) { log.warn("载入word授权文件失败"); } return result; } 2.匹配文件类型,doc、docx、txt都支持 protected static boolean matchFileType(String fileName) { //fileTypes为static变量 fileTypes.

接口自动化

@yaml+allure+pytest接口自动化框架TOC 一、创建用例步骤: 在data文件夹下方创建相关的yaml用例 写完之后,需要执行 utils/read_files_tools/case_automatic_control.py这个文件,生成自动化代码 执行caseAutomaticControl.py文件之后,会发现,在test_case层新增该条用例的对应代码,可直接执行该用例调试 当所有接口都编写好之后,可以直接运行run.py主程序,执行所有自动化接口(从A-Z排序依次执行) 二、配置文件解释: 域名:新增域名需要自定义方法,需要在regular_Contrl里面去封装(按照现有的域名封装方法添加),目前我封装了两个域名,有需要可以自己去加 实时更新pytest文件,开启后若改yaml测试用例会将testcase一同更新,若关闭,改后需要重新生成新的测试文件 数据库相关配置,目前只支持连接一个,如果有兴趣的同学可以拓展一下 三、测试用例相关字段解释: 见下图: 四、用例中调用方法的一些介绍: 1、设计相关依赖的数据: dependence_case 需要设置成 True,并且在下面的 dependence_case_data 中设计相关依赖的数据。 case_id:例如 在某测试场景中我们在写B接口时需要依赖A接口返回的id,因此依赖的case_id 就是A接口的 case_id :send_test_01 dependent_type:我们依赖的是A接口的响应内容,因此这次填写的是 response jsonpath: 通过jsonpath 提取方式 replace_key:拿到id之后,我们将B用例中的data中的响应id参数,那么我们使用jsonpath的方式,进行替换 $.data.id,可以添加多个 dependent_type 例: dependence_case_data: case_id: send_tset_01 dependent_data: 提取接口响应的id dependent_type: response jsonpath: $.data.id replace_key: $.data.id 提取接口响应的Token dependent_type: response jsonpath: $.data.Token 替换请求头中的Token replace_key: $.headers.Token 2、调用缓存方式: 如果用例中的依赖cache文件中的缓存,直接写我们存入缓存中的名称即可 例: headers: Content-Type: application/json;charset=UTF-8; type: $cache{B_type} authorization: $cache{B_work_login_init} 3、data中随机字符: 我们在用例中编写的格式为函数名称()的方法,程序调用时,会生成当前时间。在regularControl.py文件中,还封装了一些常用的随机数,如随机生成男生姓名、女生姓名、身份证、邮箱、手机号码之类的;比如在用例中,假设我们需要获取一个 1-10之间的随机数,那么我们直接这样调用该数据即可下面reason是key:测试 {{random_int(1, 10)}}是值 reason:测试 {{random_int(1, 10)}}

hyperf 遇到的情况总结

楼主已经转go,不再更新 hyperf踩过的坑 楼主已经转go,不再更新 协程变量注解注入坑 启动启动没扫描文件报没有input() 内存常驻构造函数实例化类bug 继承 协程 变量 public const const = 1000; public static $static; public function setvar() { $this->var = 'var'; self::$static = 'static'; Context::set('testvar', '1000'); return [ 'context' => Context::get('testvar'), ]; } public function getvar() { return [ 'var' => $this->var, 'static' => self::$static, 'const' => self::const, 'context' => Context::get('testvar', 'no'), ]; } 像这种,全局定义的变量,静态属性,是所有协程共享的 但是,协程上下文,是协程隔离的 注解注入坑 突然报:must not be accessed before initialization /** * @Inject * @var SourceTypeNewService */ private $sourceTypeNewService; runtime 删掉重起就行 启动 启动没扫描文件 遇到一个坑,很坑,深坑,start启动后不扫描文件,然后导致最新的文件没没改变。

Python中numpy.polyfit的用法详解

numpy中polyfit的用法 参数 polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False): x:M个采样点的横坐标数组; y:M个采样点的纵坐标数组;y可以是一个多维数组,这样即可拟合相同横坐标的多个多项式; deg:多项式阶数。 rcond:Relative condition number,float型,缺省值为 l e n ( x ) ∗ 2 e − 16 len(x)*2e^{-16} len(x)∗2e−16 full:bool型,缺省为False,此时只返回系数向量;full=True时还返回奇异值分解的诊断信息。 w:要应用于采样点的y坐标的权重。缺省为None,形式应该为和y一样长的数组。 cov:bool型,返回估计值及其协方差矩阵。当full=True时不返回cov。 返回值p:多项式系数矩阵,从高阶到低阶,最后一位是常数项。 功能 根据用户给定的x、y、多项式阶数等信息拟合多项式。返回值是一个系数向量。 原理 最小二乘拟合。即使得平方误差最小化。即使得下式最小: E = ∑ j = 0 k ∣ p ( x j ) − y j ∣ 2 E = \sum_{j=0}^k |p(x_j) - y_j|^2 E=j=0∑k​∣p(xj​)−yj​∣2 用例 >>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.

电脑如何录屏?分享4个屏幕录制的好方法,建议收藏

电脑录制画面是一件非常简单的事情,在电脑上打开相应软件就可以轻松的录制电脑屏幕上正在进行的操作了。但是很多朋友并不清楚如何录制电脑上各个窗口的内容,比如游戏、文档等等。那么电脑如何录屏?下面分享分享4个屏幕录制的好方法。 方法一:步骤记录器 win10自带录屏在哪?Windows的电脑都自带一个工具:步骤记录器。借用这个工具来录制电脑屏幕也是一个不错的选择。这个系统步骤记录器一般用于需要简单的图文教程的制作,不需要在视频录制之后,还得二次截图操作,确实方便了很多。操作步骤如下: 首先,点击开始菜单,选择运行,也可以快捷键Win+R,在窗口中,输入”PSR”,调出问题步骤记录器。 接下来,点击开始录制,即可录制屏幕。在录制过程中有“开始记录”、“停止记录”、“添加注释”、“暂停记录”、“恢复记录”的按钮录制完成,点击结束录制就可以了。 方法二:电脑QQ录屏 QQ录屏的方法很简单,只需要同时按下快捷键Ctrl+Alt+S就能启动录屏功能,然后选择需要录制的区域开始录制,点击结束,全程无需太复杂的操作。电脑上如何进行屏幕录制?QQ录屏更详细的操作步骤如下: 步骤1.打开要发送录屏的聊天窗口; 步骤2.点击下图所示截图图标,选择“屏幕录制”,也可直接快捷键ctrl+alt+S; 步骤3.然后选择要录制的区域,设置需要录制的屏幕大小; 步骤4.选择区域后点击右下角的“开始录制”;录制前可以设置扬声器和麦克风,录制完毕点击【结束录制】。 方法三:电脑系统录屏工具 不论是Windows电脑,还是macOS苹果电脑,一般都是可以借助电脑自带的屏幕录制功能来进行电脑屏幕录制。电脑怎么录屏的?下文以Windows 10电脑为例分享下录屏的步骤: 首先,打开游戏栏设置选项—打开录制游戏、截屏等功能。 接下来,使用Win+G快捷键就能调动X-box游戏录制功能啦。 备注:其实电脑系统录屏工具是专门为了X-box游戏录制而定做的,结合到我们平时的录屏需求上,比如你录制一些工具操作、或者翻刻其他视频的话,就不是很适合了。 方法四:专业录屏工具 最近市面上有一款后起之秀专业录屏工具——数据蛙录屏软件,功能齐全,画质超清,声画同步,让不少用户大呼好用。这款软的优点是:界面简单,在主界面有5个模式选择(视频录制、音频录制、游戏录制、摄像头录制、窗口录制),用户可以根据自己的需求。在录制过程中,也选择录全屏、录区域还是只录摄像头或声音。 打开数据蛙录屏软件,主界面显示了几个主要的录制模式(视频录制、摄像头录制、窗口录制、音频录制、截图等等),大家可以根据自己的需求选择。怎么进行电脑录屏?本文以【视频录制】为例,一般的录屏需求用这个模式足够了。 步骤1.安装完毕软件之后,在软件的首界面点击【视频录制】,进入视频录制设置界面,也可以根据录屏的需求选择不同的录制模式,比如音频录制或者窗口录制。 步骤2.选择需要录制的区域(全屏或者自定义区域),根据本次录屏的需求调节摄像头是否开启、扬声器和麦克风音量的声源选择。在录制之前,也可点击右上角齿轮进入详细的设置界面进行设置,最后点击右侧【REC】按钮,倒数3秒后开始录制。 备注:清晰度、帧率在【设置】窗口即可调整,若需要设置文件格式、键盘、鼠标等参数,可以点击设置进行调整。 步骤3.录制完后之后,软件自动会弹出已经录制的视频预览窗口,确实好本次录制的视频之后,点击右下角的的【完成】按钮即可哦。 备注:录制结束后视频将会自动保存到文件列表,无需担心录制的视频丢失。 上述即是分享4个屏幕录制的好方法,电脑如何录屏?今天的分享就到这里了,欢迎你分享更多发现的细节。最后说明一下,使用数据蛙录屏软件,在我们选择了录屏模式后,我们还可以在设置菜单里,设置文件的存储位置、软件的快捷键、光标、添加水印等,如果需要全天或者固定某一时段录制,则可以使用数据蛙录屏软件的计划任务功能,通过预设计划,软件自启动、自关闭,超级人性化设计。

通过nodeJS如何实现爬虫功能

对于新手小白刚入行爬虫行业来说,是选择java、C++、python还是nodeJS作为爬虫语言编程爬虫程序呢,每一种语言都有它独特的特点,那么今天本文将以nodeJS实现一个简单的网页爬虫功能说起。 网页源码 使用http.get()方法获取网页源码,以hao123网站的头条页面为例 http://tuijian.hao123.com/hotrank var http = require('http'); http.get('http://tuijian.hao123.com/hotrank',function(res){ var data = ''; res.on('data',function(chunk){ data += chunk; }); res.on('end',function(){ console.log(data); }) }); 筛选数据 以网页中的综艺热点部分 相关源代码如下 通过分析可知,‘综艺’模块与其他模块都位于<div class="top-wrap">中,其中,综艺模块的内层div的monkey='zy',综艺模块的10条综艺节目的信息都位于<div class="poinr clearfix">中,综艺节目的名称位于中 cheerio 我们怎么从源代码中获取到有用的数据呢?首先,nodeJS不支持document对象。如果要使用笨办法,只能使用正则表达式来处理 cheerio 是nodejs特别为服务端定制的,能够快速灵活的对JQuery核心进行实现。它工作于DOM模型上,且解析、操作、呈送都很高效 【安装】 【使用】 它的使用方法和jQuery相当类似,上手非常容易。以获取综艺热度前10名的节目名称为例 var http = require('http'); var cheerio = require('cheerio'); http.get('http://tuijian.hao123.com/hotrank',function(res){ var data = ''; res.on('data',function(chunk){ data += chunk; }); res.on('end',function(){ filter(data); }) }); function filter(data){ //保存搜索量前10的综艺节目标题 var result = []; //将页面源代码转换为$对象 var $ = cheerio.

采用python 批量下载ocean color中的卫星数据

1.安装python 关于python安装,可以参考网上安装步骤,下载python包,自行安装; 2.数据准备工作 (1)注册一个earthdata账号,建议使用google账号,方便通过。 注册时的网站参考链接:https://oceancolor.gsfc.nasa.gov/registration/ (2)注册完成后获得一个AppKey,获得网站链接: https://oceandata.sci.gsfc.nasa.gov/appkey/` (3)下载一个python脚本,用于后面数据下载运行,后面附录中有一个样例脚本obdaac_download.py (4)根据自己的需求,预定数据,预定数据链接:https://oceancolor.gsfc.nasa.gov/l3/, 之后邮件会收到一个预定清单; (5)使用脚本下载数据,直接使用cmd下载数据, usage:obdaac_download [-h] [-v] [–filelist FILELIST] [–http_manifest HTTP_MANIFEST] [–odir ODIR] [–uncompress] [–force] [filename] - positional arguments: filename - name of the file (or the URL of the file) to retrieve - optional arguments: -h, --help - show this help message and exit -v, --verbose - print status messages –filelist FILELIST - file containing list of filenames to retrieve, one per line

mac node如何升级版本

使用版本管理器 首先确定本机node版本 node -v 第一步:清除nodejs的缓存:sudo npm cache clean -f 第二步:使用npm安装n模块:sudo npm install -g -n 第三步:查看node的版本:npm view node versions 第四步:选择你想升版本的方式 升级到指定版本:sudo n 16.19(比如14.19) 升级到最新版本:sudo n latest 升级到稳定版本:sudo n stable

Activiti 6研究01 - 流程文件的手动导入

在某些场景下,需要进行流程定义文件的手动导入,此处分享一下我的大致流程及踩过的坑,希望对大家有所帮助。 读入文件(此处以上传文件为例) InputStream fileInputStream = file.getInputStream(); XMLInputFactory xif = XMLInputFactory.newInstance(); InputStreamReader in = new InputStreamReader(fileInputStream, "UTF-8"); XMLStreamReader xtr = xif.createXMLStreamReader(in); 通过BpmnXMLConverter将xml内容转换为BpmnModel对象 // 转为bpmnModel BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr); 建立Model,通过BpmnJsonConverter将BpmnXML对象转成Json对象并保存入仓库(若不需要建立Model,此步可跳过) Model model = createNewModel(); ObjectNode objectNode = new BpmnJsonConverter().convertToJson(bpmnModel); repositoryService.addModelEditorSource(model.getId(), objectNode.toString().getBytes("utf-8")); /** * 创建新的模型 * * @return */ private Model createNewModel() { Model model = repositoryService.newModel(); String modelKey = String.valueOf(CommonFunc.genID()); ObjectNode modelNode = objectMapper.createObjectNode(); modelNode.put(ModelDataJsonConstants.MODEL_NAME, modelKey); modelNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); model.setName(modelKey); model.setKey(modelKey); model.

小米商城——HTML,CSS(附:源码)

大家好,作为刚接触前端不久的一个学生来说,我第一次学习完HTML5和CSS的时候,我就自己学习着自己做了一个小米官网,之前一直没有展现出来,最近一直写博客,这才想起来。 源代码会放在最后。 接下来是我自己的一点个人的感受,我们都知道,写一个网页的时候,我们都要从他的名称,每个标签的命名等等开始,很遗憾,我第一次写这样的代码的时候,就没有发现这样的一个问题。因此,在这里给一个很宝贵的意见就是,以后再写代码的时候一定要自己的写注释。因为代码是你自己写的,过一段时间,我们就会忘记,当时的结构和命名规则,所以在这里一定要自己写注释。 接下来给大家来看一下自己的HTML部分源代码。 <body> <div class="header"> <div class="header-font-first" onclick="window.open('https://www.mi.com/index.html')">小米商城</div> <div class="header-font" onclick="window.open('https://home.miui.com/')">MIUI</div> <div class="header-font" onclick="window.open('https://iot.mi.com/')">loT</div> <div class="header-font" onclick="window.open('https://i.mi.com/')">云服务</div> <div class="header-font" onclick="window.open('https://airstar.com/home')">天星数科</div> <div class="header-font" onclick="window.open('https://www.xiaomiyoupin.com/')">有品</div> <div class="header-font" onclick="window.open('https://xiaoai.mi.com/')">小爱开放平台</div> <div class="header-font" onclick="window.open('https://qiye.mi.com/')">企业团购</div> <div class="header-font" onclick="window.open('https://www.mi.com/aptitude/list?id=88')">资质证照</div> <div class="header-font" onclick="window.open('https://www.mi.com/aptitude/list')">协议规则</div> <div class="header-font" onclick="window.open('https://www.mi.com/appdownload')">下载app</div> <div class="header-font" onclick="window.open('https://xiaomishare.mi.com/?from=micom#/')">智能生活</div> <div class="header-font-last">seselect Location</div> <div class="header-font-first2">登录</div> <div class="header-font">注册</div> <div class="header-font-last">消息通知</div> </div> <div class="header2"> <div class="header2-logo"></div> <div class="header2-font">Xiaomi手机</div> <div class="header2-font-list"></div> </div> <div class="header3"> <div class="header3-list"> <div class="header3-list-square"></div> </div> <div class="

离线数仓分层(基础)

搞数仓开发的,肯定要对数仓的结构了如指掌,好久没有复习,今天正好回顾一下 数仓分层作为最基础的数仓结构知识,通常分为离线数仓和实时数仓,一般分为贴源层(ODS)、明细层(DWD)、维度层(DIM)、轻度聚合层(DWS)、主题层(DWT)、数据中间层(DWM)和结果展示层(ADS)。下面简单介绍数仓各层的分层依据和每一层的功能。 1、贴源层(ODS): ODS层主要存储原始数据(一般都是来源于各个app的日志或者线下门店的表格,txt文本等) 2、明细层(DWD):基于原始数据层,将数据进行简单的清洗、脱敏后处理后建立明细表(明细表中一般也会有etl时间的字段,业务不同,字段也不相同) 3、维度表(DIM):基于原始数据层提取公共指标进行维度建模(实际上和明细层没有依赖关系,主要是根据业务需求来定,常见的有时间,地区编码对应表,所属机构编码对应表,业务类型编码对应表等等,后面想起来再补充) 4、轻度聚合层(DWS):是基于明细层数据,对明细层的数据进行轻度聚合得出(所谓轻度聚合,个人理解是提取业务核心字段,根据业务需求对数据进行进一步的加工) 5、主题层(DWT):根据主题提炼出相关指标,从DWS中提取和维度表关联得出(这个时候业务就要开始详细划分了,一般都是许多小需求围绕一个核心需求作为主题---个人理解) 6、数据中间层(DWM):对于一些跨部门协同,会产生一些公共字段,用DWM进行临时存储从而避免重复计算(类似于咱们这边的模型层) 7、结果展示层(ADS):基于需求,从主题中提取相关字段得出,用于结果展示(咱们这边是把报送的数据导入到Oracle中进行展示,只报送增量数据)

卸载MySQL

1、基本方法: 首先停止Mysql服务打开控制面板,程序---->卸载程序删除注册表信息删除环境变量配置 2、命令行的形式: 停止MySQL服务删除MySQL服务删除注册表删除文件删除环境变量配置 我们知道,当我们需要使用更高版本的mysql数据库,想卸载低版本的mysql的话,是需要删除干净的,不然就会导致可能无法安装新版本的mysql(sqlserver数据库同理),那么本文就这一问题给出解决方法。 基本方法【应用程序安装】 1、首先停止Mysql服务 此电脑---管理---服务 2、打开控制面板,程序---->卸载程序 找出并删除mysql先关的软件 3、删除注册表信息 dos命令输入regedit打开注册表 删除注册表(可能你没有这么多注册信息) HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 4、删除环境变量配置 找到path环境变量,将其中关于mysql的环境变量删除,切记不要全部删除 5、查看原来mysql所在文件夹的信息是否删除干净 命令行的方法【zip安装包安装】 停止MySQL服务 net stop mysql 删除MySQL服务 sc delete MySQL 删除注册表(可能你没有这么多注册信息) HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 删除文件: MySQL整个文件夹删除 删除环境变量配置 找到path环境变量,将其中关于mysql的环境变量删除

vs单步调试及断点调试基本介绍(入门版详细图文介绍)

简述:本文面向小萌新介绍visual studio2022下的基本调试技巧(其他主流IDE均相似,仅具体快捷键键位不同) //本文无废话,建议小萌新仔细阅读 // //本文无废话,建议小萌新仔细阅读 // //本文无废话,建议小萌新仔细阅读 // //注,用win10/win11系统初学c/c++的话建议直接安装vs,省心,初学没必要为难自己 vs2022安装教程https://blog.csdn.net/qq_43444947/article/details/104476963 // // 1: 断点调试 //作用:可以用来快速定位问题在哪一块,如:正常运行到断点位置后停住,通过窗口输出情况可以判断运行到断点之前的部分是否符合预期 // // 用法:打断点,在侧栏点击一下,即可生成断点,就是那个红色的点 // 断点的作用: 在调试启动时可以运行到这一步之后停止, // 使用方法:调试->开始调试 // // // // 断点停住后, 1:可配合单步调试一步步的运行(见后文介绍) 2:也可以恢复运行状态,继续运行程序,直到等待输入,异常或者运行到下一个断点。 // // // // 如上图 停止在断点行 解释:此时有两个断点,停在第一个断点处,前面的运行完,输出hello // 而下方窗口显示局部变量i的值是468,因为此时停在断点,还没有进入for语句的初始化i为0,所以此时i的值是内存中的值 // // 而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常-----按预期输出了hello // // 而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常-----按预期输出了hello // // 而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常-----按预期输出了hello // // (实际中你可以通过多个关键地方打印信息,结合断点来快速定位问题) // // 在断点停住的情况下,可以接单步调试(见后面介绍),也可以恢复运行状态(使用方法,vs中是快捷键按f5) // // //vs中的位置------调试->继续,别的IDE也是类似,可能在侧边栏 //此处选择继续运行 // // 此时,按完f5(vs中是点击继续)(别的IDE找到类似的选项之类),继续执行(或者叫“恢复程序运行状态”)后如图 上图解释: 调试启动后停在第一个断点后,程序停止在那一步,此处选择继续运行,恢复运行状态,此时一切顺利(没有异常等情况,一切顺利运行),直接运行至下一个断点,查看窗口输出 // // 此时,按照预期输出了hello和3 6 9,然后停在第二个断点 //

计算list的字节数/mb数

目标是RPC传输不能超过10mb,所以需要计算list的大小。 代码如下: ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(baos); os.writeObject(list); os.close(); System.out.println("字节数:" + baos.size()); System.out.println("MB:" + baos.size()/ 1048576);

Matlab自相关/互相关函数xcorr

转载自:https://ww2.mathworks.cn/help/matlab/ref/xcorr.html 语法 r = xcorr(x,y) r = xcorr(x) r = xcorr(_,maxlag) r = xcorr(_,scaleopt) [r,lags] = xcorr(_) 说明 r = xcorr(x,y) 返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量 y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另一个向量相同。 示例 r = xcorr(x) 返回 x 的自相关序列。如果 x 是矩阵,则 r 也是矩阵,其中包含 x 的所有列组合的自相关和互相关序列。 示例 r = xcorr(___,maxlag) 将上述任一语法中的滞后范围限制为从 -maxlag 到 maxlag。 示例 r = xcorr(___,scaleopt) 还为互相关或自相关指定归一化选项。除 ‘none’(默认值)以外的任何选项都要求 x 和 y 具有相同的长度。 示例 [r,lags] = xcorr(___) 还返回用于计算相关性的滞后。 示例 两个向量的互相关 创建向量 x 和向量 y,后者是 x 右移 5 个元素的结果。计算并绘制 x 和 y 的估计互相关。在 x 和 y 的元素完全匹配的滞后值 (-5) 处,出现最大峰值。

ES使用记录

官方文档:Elasticsearch Guide [8.4] | Elastic 官方中文:序言 | Elasticsearch: 权威指南 | Elastic 社区文档:Getting Started(入门指南) - elasticsearch中文文档 一. ES安装相关 1. 使用docker安装es 和kibana docker pull elasticsearch:7.4.2 存储和检索数据 docker pull kibana:7.4.2 可视化检索数据 2. 创建对应的ES挂载文件 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data mkdir -p /mydata/elasticsearch/plugins echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml 3. 添加selinux规则,将要挂载的目录添加到白名单 chcon -Rt svirt_sandbox_file_t /mydata/elasticsearch/config chcon -Rt svirt_sandbox_file_t /mydata/elasticsearch/data chcon -Rt svirt_sandbox_file_t /mydata/elasticsearch/plugins 4. 启动es docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "

数据结构(未完)

目录 前言 一、抽象数据类型 二、线性结构 1.顺序表 2.单向链表 3.循环链表 4.双向循环链表 5.栈 6.队列 7.双端队列 三、树 1.树的基本存储结构 2.递归 3.树,二叉树,森林之间的转换 4.二叉树基础知识 5.二叉树的遍历 6.二叉排序树 7.二叉平衡树(AVL树) 8.并查集 9.线索二叉树 10.哈夫曼树 四、图 1.图的基本概念 2.邻接矩阵 3.邻接表 4.十字链表 5.临接多重表 6.边集数组 7.深度优先搜索(DFS)与广度优先搜索(BFS) 总结 前言 有一种说法是程序是由数据结构和算法组成的,这很能体现出数据结构在编码中的重要性。而代码优化的能力也是区别有基础的程序员和码农的重要标准,所以对于这一块的学习一定要稳重与细致,每一个章节都要实打实敲出能够实现该种结构的代码才算完成。 数据结构的学习本质上是让我们能见到很多前辈在解决一些要求时间和空间的难点问题上设计出的一系列解决方法,我们可以在今后借鉴这些方法,也可以根据这些方法在遇到具体的新问题时提出自己的解决方法。(所以各种定义等字眼就不用过度深究啦,每个人的表达方式不一样而已)在此以下的所有代码都是仅供参考,绝对不是唯一的答案,任何一种操作能达到相同的结果,只要逻辑上能行的通,复杂度上差不多,是无所谓怎么去实现最后的功能的。 一、抽象数据类型 在一开始学习数据结构的时候不用关注复杂度的问题,等到基础的数据结构学习完之后再去了解复杂度不迟。 学习数据结构之前先了解什么是抽象数据类型。我们现在认识的数据类型就是一些类似整形字符型等表示数据取值范围的类型,而最初的程序员使用语言的是机器语言,即以0和1存储来实现功能,这样数据没有类型,我们每次在对他进行操作的时候都不清楚这个数据可以做的具体操作方式(是加减乘除还是合并),每次存储的时候也要去找相对于的空间。为了解决这个问题后来的程序员引入了数据类型的概念,这样我们再存储的时候我们就不需要再去寻找存储器的地址了,直接定义变量之后赋值就行。 抽象数据类型的用途与普通的数据类型类似,他的本质就是一组数学模型,里面存放着这个模型的具体数值和这个模型能做的具体操作。(比如int能实现加减乘除,字符串能实现字符串的拼接)。而他与数据类型的区别就是,数据类型是前人给我们定义好的,而抽象数据类型是我们自己定义的。 这就可以引出下一章线性表,线性表的属性是什么,操作是什么,他的本质就是一个抽象数据类型。 二、线性结构 定义:除了第一个和最后一个元素,其他每个元素只有一个前和一个后的结构。 线性结构又分为两种:顺序表和链表。 1.顺序表 特性:一组地址连续的存储单元(数组) 主要用到的操作:增删改查,初始化 以下是对应的抽象数据类型 : parr 用来存放数据 size 当前顺序表内数据个数 length 顺序表容量 typedef struct slist { int* parr;//用来存放数据 int size;//当前顺序表内数据个数 int length;//当前顺序表的容量 }slist; ①在最后一位增加 这个操作非常的简单,只要知道当前的顺序表内元素个数,然后在+1的位置执行插入操作就好了。 void add_slist(slist* array, int key) { if (array->size == array->length)//先判断是否需要空间 { array->length += UNIT; int* newp = (int*)realloc(array->parr, sizeof(int) * (array->length));//第二个数不得等于0 if (!

Spring boot锦集(一):日期格式化的两种方式 | 在Bean对象的日期对象上添加注解 | 对Bean的日期格式统一处理

前言 在日常开发中,日期类是经常使用的,本篇提供两种日期格式的配法,以供不时之需。 方式一、单独在Bean对象的日期对象上添加注解 该方法省时省力,相当的Nice @com.fasterxml.jackson.annotation.JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; 方式二、创建配置类,对Bean的日期格式统一处理 1、代码片段 package com.example.demo.conf; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.text.SimpleDateFormat; /** * @create 2022-10-06 12:27 * @describe */ @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { System.out.println("日期格式转换,被调用了");//如果这行代码,在项目启动时没有被控制台打印,说明该配置未生效 ObjectMapper objectMapper = new ObjectMapper(); // 自定义日期转换格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return objectMapper; } } 2、注意事项 如果添加该配置类后,配置一直未生效,可以尝试在对应的Controller类上添加@ComponentScan注解。 package com.example.demo.controller; import com.example.demo.bean.User; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.

Prometheus + Grafana 在 CentOS 中搭建可视化性能监控平台

我们在做性能测试的时候,经常需要通过各种命令去查看服务器的资源情况,由于关注的内容较多,所以也挺麻烦的。对运维来说,也需要一款工具能随时监控线上服务器的各项指标。 通过 Prometheus + Grafana 就可以搭建出一套监控平台。 个人网站 17test.cn 同步更新 Prometheus Prometheus 是由谷歌研发的一款开源的监控软件。 Prometheus 是一款基于时序数据库的开源监控告警系统,通过安装在远程机器上的 exporter 收集数据并通过HTTP协议从远程的机器上获取数据,最后存储在本地的时序数据库上。 Node exporter 是 Prometheus 最常用的一种 exporter,主要负责收集 Linux 的 /proc 以及 /sys 目录下的系统文件获取操作系统运行状态。 另外还有一些其他的 exporter 分别用来监控不同的应用程序: reids exporter:通过Reids命令行获取指标mysql exporter:通过读取数据库监控表获取MySQL的性能数据 这些获取到的监控数据,再通过 Grafana 实现可视化、图形化、图表化的信息展示。 这样,我们在做性能测试、生产服务器监控的时候,就不用 Linux 命令,而且更直观。 Prometheus官网 Grafana官网 本篇文章演示如何在一台 Centos 服务器上部署 Prometheus。 部署 Prometheus + Grafana 在 Centos 上部署 Prometheus + Grafana 包含以下 3 个大的步骤: 安装 Prometheus,并部署成服务安装 Node exporter, 并部署成服务安装 Grafana 安装 Prometheus 创建 Prometheus 用户 $ useradd -m -s /bin/false prometheus 创建配置目录 $ mkdir /etc/prometheus $ mkdir /var/lib/prometheus $ chown prometheus:prometheus /var/lib/prometheus/ 下载最新版的 prometheus 通过 wget 命令下载

git修改分支名

使用git命令操作 1、修改本地分支名称 git branch -m oldBranchName newBranchName 2、将本地分支的远程分支删除 git push --delete origin oldBranchName 3、将改名后的本地分支推送到远程,并将本地分支与之关联 git push --set-upstream origin newBranchName

Java:实现简单的计算器(加减乘除)

基本要求: 1、采用Java Application方式建立应用程序框架 2、仿照Windows计算器,利用多种布局方式实现界面设计 3、完成简单的整数加、减、乘、除运算 简单计算器的界面如下: 代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; public class Gui_Calculator { JFrame jFrame;// JLabel text,text2,text3,text4;//操作数1,运算符,操作数2,结果 JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;//数字 JButton b_add,b_sub,b_mul,b_div;//+,-,*,/ JButton b_del,b_equal;//删除,= JPanel jPanel,jPanel2;//jPanel放操作数1,运算符,操作数2,结果 jPanel2放按钮 Container contentPane;// Font font=new Font("微软黑体",Font.PLAIN,25);//设置字体为25磅的普通微软黑体 double outcome=0;//初始化结果为零 public Gui_Calculator() { jFrame=new JFrame("计算器"); jFrame.setBounds(300, 200, 300, 400);//位置及大小 jFrame.addWindowListener(new WindowAdapter(){//关闭窗口的监听 public void windowClosing(WindowEvent e){ System.out.println("系统退出!"); System.

C语言——分支语句循环语句练习题(10个)

在分支语句和循环语句里面,有几个经典的练习题,接下来给大家来分享一下。 1:周末周内的判断 2:年龄的判断 3:判断是否为奇数 4:计算一个数的阶乘 5:阶乘相加 6:输出1—100之间的奇数 7:登录验证 8:二分法查找 9:getchar用于读取多个字符 10:关机程序 接下来开始吧!!! 1:周末周内的判断 在这个代码里面运用了switch语句,注意break是结束循环的标志。 #include <stdio.h> int main () { int day = 0; scanf("%d",&day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("周内\n"); break; case 6: case 7: printf("周末\n"); break; } return 0; } 2:年龄的判断 在这个代码里面运用了if else if语句。注意他们的用法。 #include <stdio.h> int main() { int age = 0; scanf("%d",&age); if (age < 18) printf("少年\n"); else if (age >=18 && age<26) printf("

MyBatis--判断boolean类型实现动态sql--方法/实例

原文网址:MyBatis--判断boolean类型实现动态sql--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MyBatis如何判断boolean类型实现动态sql。 使用MyBatis时,有时需要使用if标签判断boolean类型,从而决定是否拼接sql(动态查询)。 代码 mapper public interface HouseTypeMapper extends BaseMapper<HouseType> { List<HouseType> queryHouses(@Param("isCity") Boolean isCity); } xml <select id="queryHouses" resultType="com.xxx.xxx.entity.HouseType"> SELECT * FROM house_type ht WHERE 1 = 1 <if test="!isCity"> AND ht.covered_area = 5 </if> </select> 测试SQL输出 isCity为false时 SELECT * FROM house_type ht WHERE 1 = 1 AND ht.covered_area = 5 isCity为true时 SELECT * FROM house_type ht WHERE 1 = 1

Windows11/10 环境下安装Madagascar (WSL Ubuntu)

目录 前言WSLMadagascar 安装Windows WSL Ubuntu开启开发者模式开启Windows子系统功能安装Ubuntu 进入Ubuntu换源(可选) 安装Madagascar确定你想保存软件源文件、软件安装路径的位置下载安装依赖开始安装配置编译和安装 环境变量配置 写在最后参考文献(网站) 前言 WSL Windows Subsystem for Linux(WSL)是一个可以直接执行Linux二进制可执行文件(ELF)的兼容层。和Hyper-v虚拟化不同,WSL是底层把Linux系统调用翻译成Native Windows API。例如安装Ubuntu子系统,就基本可以当作一个Ubuntu系统来用,例如使用Linux Bash,apt-get安装软件,编译和运行Linux程序,文件系统交互等。 WSL官方文档(中文) 在Windows下安装Ubuntu子系统网上教程很多,也没有太大的问题,这里简要介绍一下安装流程。 Madagascar Madagascar Main Page Madagascar is an open-source software package for multidimensional data analysis and reproducible computational experiments. Its mission is to provide: a convenient and powerful environmenta convenient technology transfer tool for researchers working with digital image and data processing in geophysics and related fields. Technology developed using the Madagascar project management system is transferred in the form of recorded processing histories, which become “computational recipes” to be verified, exchanged, and modified by users of the system.

Python10个好用的集成开发环境介绍

Python IDE工具是每个Python工程师必须使用的开发工具,选择正确的编辑器对Python编程效率的影响是非常大的,因此选择合适的Python开发工具十分重要,以下是通过长期实践发掘的好用的Python IDE,它们功能丰富,性能先进,能够帮助开发人员快速的进行应用程序开发。 1. Pydev + Eclipse – 最好的免费python IDE Pydev的是Python IDE中使用最普遍的,原因很简单,它是免费的,同时还提供很多强大的功能来支持高效的Python编程。Pydev是一个运行在eclipse上的开源插件,它把python带进了eclipse的王国,如果你本来就是是一个eclipse的用户那么Pydev将给你家里一样的感觉。 Pydev能高居榜首,得益于这些关键功能,包括Django集成、自动代码补全、多语言支持、集成的Python调试、代码分析、代码模板、智能缩进、括号匹配、错误标记、源代码控制集成、代码折叠、UML编辑和查看和单元测试整合等。 虽然Pydev是最好的开源python IDE,但是 它也和另一个名为Liclipse的产品一起打包,Liclipse是一个商业产品,同样也构建在eclipse上,提供了易用性改进和额外的主题选项。除了python,Pydev也支持Jython and IronPython。 2. PyCharm – 最好的商业python IDE PyCharm是专业的python集成开发环境,有两个版本。一个是免费的社区版本,另一个是面向企业开发者的更先进的专业版本。 大部分的功能在免费版本中都是可用的,包括智能代码补全、直观的项目导航、错误检查和修复、遵循PEP8规范的代码质量检查、智能重构,图形化的调试器和运行器。它还能与IPython notebook进行集成,并支持Anaconda及其他的科学计算包,比如matplotlib和NumPy。 PyCharm专业版本支持更多高级的功能,比如远程开发功能、数据库支持以及对web开发框架的支持等。 3. VIM VIM是一个很先进的文本编辑器,在python开发者社区中很受欢迎。它是一个开源软件并遵循GPL协议,所以你可以免费的使用它。 虽然VIM是最好的文本编辑器,但是它提供的功能不亚于此,经过正确的配置后它可以成为一个全功能的Python开发环境。此外VIM还是一个轻量级的、模块化、快速响应的工具,非常适合那些很牛的程序员——编程从不用鼠标的人。 初始化配置需要花一定时间,因为你需要安装些VIM的插件,并配置让他们正常工作,最后你会发现这一切都是值得努力的。如果你在寻找一个Linux系统下的python IDE,那么VIM将是你的不二选择。 4. Wing IDE Wing IDE是另外一个商业的、面向专业开发人员的python集成开发环境,可以运行在windows、OS X和Linux系统上,支持最新版本的python,包括stackless Python(python的增强版)。Wing IDE分三个版本:免费的基础版,个人版,以及更强大的专业版。 调试功能是Wing IDE的一大亮点,包括多线程调试,线程代码调试,自动子进程调试,断点,单步代码调试,代码数据检查等功能,此外还提供了在树莓派上进行远程调试的功能。 在代码管理方面,Wing IDE能非常灵活的与Git、subversion、perforce、cvs、Bazaar、Mercurial等工具集成。 此外,Wing IDE也支持其他更多的python框架,比如Maya、MotionBbuilder、Zope、PyQt、PySide、pyGTK、PySide、Django、matplotlib等等。 5. Spyder Python Spyder Python是一个开源的python集成开发环境,非常适合用来进行科学计算方面的python开发。是一个轻量级的软件,是用python开发的,遵循MIT协议,可免费使用。 Spyder python的基本功能包括多语言编辑器、交互式控制台、文件查看、variable explorer、文件查找、文件管理等。Spyder IDE也可以运行于windows、Mac 或者 Linux系统之上。 虽然Spyder是一个独立的集成开发环境,能运行在windows、MacOS 、MacOS X、Linux等系统之上。但是它也可以作为PyQT的扩展库,可以嵌入到PyQT的应用中去。 6. Komodo IDE Komodo是Activestate公司开发的一个跨平台的集成开发环境,支持多种语言包括python。它是商用产品,但是提供了开源的免费版本叫Komodo Edit,能够安装在Mac、Windows 和Linux系统上。 全功能的Komodo对教育机构用户是免费的,老师和教授可以将其应用于实验室及教学中。学生也可以通过较低的费用得到Komodo的授权许可。 和大多数的专业python IDE一样,Komodo也提供了代码重构,自动补全,调用提示,括号匹配,代码浏览器,代码跳转,图形化调试,多进程调试,多线程调试,断点,代码分析,集成测试单元等功能,并且集成其他的第三方库,比如pyWin32。

临床预测模型之综合判别改善指数IDI计算

本文首发于公众号:医学和生信笔记,完美观看体验请至公众号查看本文。 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。 IDI,综合判别改善指数,也适用于评价不同模型优劣的,比起NRI,IDI能够从整体角度对模型进行评价,和NRI一起使用效果更佳! 文章目录 logistic模型的IDI生存资料的IDI logistic模型的IDI 二分类变量的IDI计算使用PredictABEL包。 使用survival包中的pbc数据集用于演示,这是一份关于原发性硬化性胆管炎的数据,其实是一份用于生存分析的数据,是有时间变量的,但是这里我们用于演示logistic回归,只要不使用time这一列就可以了。 library(survival) # 只使用部分数据 dat = pbc[1:312,] dat = dat[ dat$time > 2000 | (dat$time < 2000 & dat$status == 2), ] str(dat) # 数据长这样 ## 'data.frame': 232 obs. of 20 variables: ## $ id : int 1 2 3 4 6 8 9 10 11 12 ... ## $ time : int 400 4500 1012 1925 2503 2466 2400 51 3762 304 .

git问题大合集

关于git上次问题大总结 文章目录 关于git上次问题大总结一、OpenSSL SSL_read: Connection was reset, errno 10054二、Proxy CONNECT aborted 一、OpenSSL SSL_read: Connection was reset, errno 10054 问题重现 解决办法 git config --global http.sslVerify "false" 如上述不能解决,则使用 git config --global https.sslVerify "false" 参考博客 二、Proxy CONNECT aborted 问题重现 解决办法 cmd下执行 ipconfig/flushdns项目根目录执行如下: git config --global --unset http.proxy git config --global --unset https.proxy 参考链接

大气科学领域必备的模型软件汇总丨WRF、WRF-CMAQ、WRF-Chem、WRF-Hydro、WRF DA、PMF、MCM、CAMx、SMOKE、CMIP6等

目录 全套区域高精度地学模拟WRF气象建模、多案例应用与精美制图 系统学习CMAQ空气质量模式 空气质量预报模式系统(CMAQ)应用及改进与污染源排放清单建立实践技术 区域气象-大气化学在线耦合模式(WRFChem)在大气环境领域实践 气象水文耦合模式WRF-Hydro前处理、运行及实践应用 WRF DA资料同化系统理论、运行与与变分、混合同化新方法技术应用 大气颗粒物PMF源解析实践技术应用 MCM箱模型建模方法及大气O3来源解析实践技术应用 更多 全套区域高精度地学模拟WRF气象建模、多案例应用与精美制图 气候是多个领域(生态、水资源、风资源及碳中和等问题)的主要驱动因素,合理认知气候变化有利于解释生态环境变化机理及过程,而了解现在、未来气候变化则是进行生态、环境及能源评估、碳政策规划的先决条件,而气候模拟是获取高精度气候信息的最主要手段,现代生态、水文、新能源及碳中和领域需要亚公里及更高分辨率的气象模拟,WRF模式是国内外应用最为广泛的气象模式,使用该模式进行高精度甚至几百米的模拟应用也越来越多。另一方面,该模式不断扩展模式模块,现在已经可以实现对气溶胶及化学过程(WRF-CHEM)、资料同化(WRF-DA)、水文过程(WRF-HYDRO)、城市化(URBAN)等过程的精细模拟,其应用范围及实际业务及科研应用也越来越多。但该模式运行于Linux平台,前处理、运行及分析过程复杂、难度大。 【目标】: 1、掌握WRF模式的各个组成部分; 2、自主完成该模式的移植; 3、自主完成模式运行; 4、自主完成模式后处理; 5、通过多领域案例分析、实践,熟悉在多领域中的应用。 【专家】:于老师(副研究员),长期从事气候变化及相关科研工作,拥有十几年使用WRF模式的实际操作经验,在多所高校及科研院所讲授过WRF模式。熟悉从模式安装、运行、解译到模式结果展示的各个方面,特别关注WRF模式在生态、环境、水文、农业林业、城市化、新能源等领域应用推广、模式使用与授课经验。 区域气候模式 理论知识梳理 一、WRF模式能干什么?(气温、降水、风、压、能量、水分、植被模拟和预报) 二、WRF模式框架和流程 三、WRF使用什么样的计算平台?计算系统?Linux,非windows Linux操作系统 WRF模式系统 实际操作 一、如何安装WRF模式所需要的平台?(vmware,linux) 二、如何从零开始搭建WRF编译所需的系统?(RockyLinue) 三、安装软件(OneAPI) 四、WRF模式结果文件格式?(NetCDF) 模式调试及运行 一、WRF如何获取模拟区域的DEM、LUCC、植被、反照率等多种信息 1.1 WPS如何定义模拟区域?如何准备地形土地利用等资料(geogrid.exe) 1.2 WPS如何准备气象资料?(温度、气压、风场、湿度等等) 1.3 WPS如何水平插值?(软件如何匹配不同的空间分辨率资料,如何从百公里到几百米降尺度) 二、WRF模式如何积分解算气象变量和能量水分传输 2.1 WRF如何完成等压层向地形追随坐标系的转变 2.2 WRF模式如何精确计算气象和相关过程 模式操作及案例实践 一、案例操作1:软件基本运行流程 二、案列操作2:研究区设置技巧 三、案例操作3:软件如何进行天气预报 四、案例操作4:软件模拟月或年尺度气象 五、案例操作5:如何模拟分析观测气温 六、案例操作6:如何模拟分析降水 七、案例操作7:如何模拟分析水汽和湿度 八、案例操作8:如何模拟分析土地利用变化的影响 九、案例操作9:如何模拟分析土壤及近地层能量水分通量 十、案例操作10:如何模拟分析风场 十一、案例操作11:如何模拟分析其他变量,包括土壤、水体、植被等相关气象变量 实际应用及案例分析 一、WRF模拟结果如何分析?(NCL) 二、WRF结果如何展示?(Vapor) 三、WRF结果如何展示?(Python) 系统学习CMAQ空气质量模式 空气质量预报模式系统(WRF-CMAQ)和污染源处理技术是目前大范围灰霾天气预警及综合治理的重要手段,其在全国的推广应用将有利于提高实际的业务预报水平、增强防灾减灾能力、取得显著的社会经济效益。 【专家】:程老师(研究员),长期从事空气质量模拟改进科研工作,自主研发了多种污染源反演方法和基于三维变分的气溶胶激光雷达资料同化技术,拥有十几年使用CMAQ模式的实际操作经验,在多所高校讲授过CMAQ模式。熟悉从模式安装、运行、解译到模式结果展示的各个方面,特别关注CMAQ模式在环境、气象等领域应用推广。 CMAQ模式理论及化学机制 基本功能 关键技术解析 1.国际空气质量模式发展历程和常用模式; 2.CMAQ模式理论框架和化学机制;

idea连接服务器运行python

1.在服务器安装python环境,并启动。 2.which python 命令查看python安装路径(后续会用到) 3.在IDEA中,选择Tools->Deployment->Configuration->左上角+号,选择SFTP连接 4.在SFTP连接中,配置Connection信息以及Mapping映射信息 4.新建一个modul,File->New0>Modul,选择python->New(SDK)。选择SSH Interpreter ->Existing server configuration,选择刚刚配置好的STPF连接。 5.进入到下一步,填入刚刚的python地址,Sync folder就是映射到服务器的文件地址。 6.到此就创建完毕。直接在modul中新建python文件,在Tools->Deployment选择Automatic Upload (always),文件保存即可自动上传到服务器,接下来就可以编写代码在服务器上运行~~

(附源码)基于Java SpringBoot的电影院管理系统设计与实现 毕业设计 011633

电影院管理系统的设计与实现 摘 要 在飞速发展的今天,网络已成为人们重要的交流平台。电影院每天都有大量的需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的电影院管理系统。 该系统以Java编程语言、springboot框架、MySQL数据库和Web前端等为开发技术,实现了添加、修改、查看、删除系统数据。本系统采取组件化的方式对系统进行拆分,并对数据库中各个表的增删查改、表与表之间的约束关系进行分析与设计,最终实现符合用户需求功能的商业级应用。 系统界面简洁大方,布局合理,易操作易上手。对应用户的每一步操作,系统都能高响应地做出反馈。系统具体包含对用户的管理、用户注册、最新电影、电影分类管理、场次管理、电影、订单中心管理、取消订单管理等功能,为电影院提供一个管理平台,实现对数据地高效、安全地管理。 关键词:电影院管理,B/S模式,Java编程语言,MySQL Design and Implementation of Cinema Management System Abstract Today, with the rapid development of information, the network has become an important information exchange platform for people. Every day, a large amount of information in cinemas needs to be published through the Internet. Therefore, I developed a cinema information management system based on B/S (browser/server) mode. The system uses Java programming language, springboot framework, MySQL database and Web front-end as development technologies, and realizes adding, modifying, viewing and deleting system data.

Vue引用public中的js文件

在public文件夹下创建config.js文件。 config.js中可以使用变量,也可以使用window来挂载 测试: 注意: index.html在引入config.js时,config.js前面一定要加上/ ,否则子路由菜单刷新会报错,提示找不到js文件如果引入config.js后,在template模板中使用config对象发现报错,那么可以在mounted中打印一下(应该可以打印出来),并赋值给data中的某个属性

Kitti Stereo dataset 2015

发现国内很多人分享kitti目标检测数据集,但少有分享立体匹配数据集的朋友。所以特做此分享。下载链接: 2015:https://s3.eu-central-1.amazonaws.com/avg-kitti/data_scene_flow.zip 下载的时候可以直接复制链接进迅雷,这样虽然下载速度慢一点但是免费呀。如果自己可以科学上网的话,科学上网的下载速度还是比较快的。 有百度网盘会员的朋友也可以去网盘链接下载: 链接:https://pan.baidu.com/s/1yNItFX-Ly_lSqI_a9SaZJg 提取码:tjjb

UVM实战笔记(五)

第五章. UVM验证平台的运行 5.1 phase机制 5.1.1 task phase和function phase UVM中的phase按是否消耗仿真时间($time打印出的时间),分为两类: function phase:不消耗仿真时间,通过函数来实现task phase:消耗仿真时间,通过任务来实现 下图中灰色背景的是task phase,其他的为function phase。所有phase都会按照图中的顺序自上而下自动执行(从整个验证平台来看)。 对于function phase来说,同一时间只有一个phase执行;对于task phase来说,run_phase和pre_reset_phase等12个小的phase并行运行。这12个小的phase称为动态运行(run-time)的phase。 UVM提供了这么多的phase,目的是方便验证人员将不同的代码写在不同的phase内,有利于其他验证方法学向UVM迁移。在一般的应用中,不会将function phase和task phase全部用上。使用频率最高的是build_phase,connect_phase和main_phase。 5.1.2 动态运行phase 动态运行(run-time)phase是UVM1.0引入的新phase,其他phase是在UVM1.0之前就已存在的。12个run_time phase中,reset,configure,main,shutdowm是核心。这四个phase通常模拟DUT的正常工作方式: reset_phase对DUT进行复位,初始化等操作。config_phase进行DUT的配置。DUT的运行主要在main_phase完成。shutdown_phase则是做一些DUT断电相关的操作。 通过细分实现DUT更加精确的控制。 5.1.3 phase的执行顺序 UVM有9个phase: build_phase connect_phase end_of_elaboration_phase start_of_simulation_phase run_phase extract_phase check_phase report_phase final_phase 执行顺序可以从以下几个角度来看: 首先从整个验证平台或验证平台中的每个组件来看。9个function phase按照上表中各phase的顺序自上而下(此处指的是时间上的自上而下,即验证平台/组件的前一个phase执行完毕后再执行下一个phase。)执行的。其次是从每个function phase的角度来看。 build_phase是自上而下执行(此处指的是空间上的自上而下,即验证平台中的每个组件在UVM树中的顺序,由根节点向叶节点自上而下执行。如先执行env的 build_phase,再执行agent的build_phase,因为env在UVM树中的位置比agent更靠上。UVM树中同一层级的组件(如i_agent和o_agent)执行顺序是如何的?UVM源码表明按照组件名称的字典顺序(但UVM并未保证一直按组件实例化名称字典的顺序,如验证平台对同一层级组件执行顺序有要求,应该修改代码,消除这种对实例化名称时字典顺序的依赖))。除build_phase外,其他7个function phase执行顺序是自下而上(空间上,同build_phase)。run_phase也是按照自下而上(此处自下而上指的是空间上的,但是由于run_phase消耗仿真时间,所以又不同于第一条中的时间上的自上而下,function phase不消耗仿真时间,所以仿真时间不会改变。可以理解为将验证平台中各组件的run_phase按照自下而上的顺序使用fork join_none语句全部启动,所以对于run_phae的自下而上更准确的表达是,自下而上启动,并行运行)执行。 前文提到每个run_phase又具有12个run-time phase: pre_reset_phase reset_phase post_reset_phase pre_configure_phase configure_phase post_configure_phase pre_main_phase main_phase post_main_phase pre_shutdown_phase shutdown_phase post_shutdown_phase 从全局来看run phase和run-time的执行顺序按以下代码中顺序执行。 有几点需要说明: run_phase和12个run-time phase是并行执行。 12个run-time phase按照上表中的顺序自上而下执行(确切的说是自上而下启动,并行运行)。

Jmeter5.x之Linux下非GUI压测实战

前言 使用Jmeter在非GUI环境对项目进行压测,属于高级测试工程师需掌握的技能之一;阅读本章需要掌握linux基本操作命令,jvm基础知识;也适合开发工程师了解Jmeter在非GUI环境的压测流程。 疑问:为什么要在非GUI环境使用Jmeter进行压测?为什么要求Jmeter和项目必须保持在同个内网压测?GUI环境使用Jmeter的图形界面操作挺方便的。 在windows等GUI环境下,由于windows的可视化操作界面,后台其他进程等都会占用系统资源,会导致Jmeter压测相关指标不精准;在linux等非GUI界面下,常规都是命令行操作模式,无没必要的进程占用系统资源,jmeter可以更好的进行压测,得到更精准的压测报告常规开发完成的项目都部署在远程Linux服务器上,测试人员如果使用windwos系统对远程Linux上的项目进行压测,由于还要多走网络通许协议,此时公司带宽或服务器带宽较低,同样也会导致测试结果不精准,所以一般是要求Jmeter和项目进行内网压测; 配置和要求 Jmeter压测脚本jmx:对接口“课程列表”和“秒杀接口”进行压测,集合点500,持续2分钟; Linux服务器:CentOS 7.8,2核8G(推进使用云服务器,如阿里云,腾讯云等) jdk要求:JDK8,Linux安装JDK教程,JDK官网 Linux文件上传下载,命令行操作工具: mac使用: filezilla、item2win使用:winscp、putty、SecureCRT+FX 作者本地环境windows,使用SecureCRT+FX做服务器操作工具 案例实战 1、使用服务器命令工具创建目录;并将JDK8上传到服务器; // 创建java目录,存放jdk和项目环境 mkdir /usr/local/java // 创建jmeter目录,存放jmeter压测软件 mkdir /usr/local/jmeter 2、解压JDK8 tar -zxvf jdk-8u181-linux-x64.tar.gz 3、配置环境变量 // 使用命令编写环境变量,在最底部加入jdk8的路径 vim /etc/profile # jdk8环境变量,路径不能有中文或空格 JAVA_HOME=/usr/local/java/jdk8 //改成自己安装的jdk版本路径和地址 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH 环境变量立刻生效,并查看环境变量配置结果 source /etc/profile 查看安装情况 java -version,显示版本号则安装成功; 4、上传Jmeter5.x压缩包和压测jmx脚本到服务器;并使用命令对Jmeter5.x压缩包进行解压 安装解压工具:yum install unzip Jmeter5.x压缩包,解压命令:unzip apache-jmeter-5.5 5、上传应用程序,并启动; // 进入项目所在目录 cd /usr/local/java/jmeter // 使用命令启动项目;守护进程方式,退出终端,进程依旧再 nohup java -Dfile.encoding=utf-8 -jar jmeter-edu.jar >jmeter-edu.log & // 查看项目启动情况

Spring Boot项目学习之通用权限管理项目02

接着上一篇,这里完成最基本的页面分页展示的功能。这也是权限管理系统的最基本功能的组成。 1. 创建业务层 创建service包,在该包下创建UrmsUserService.java 接口类及其实现类。 UrmsUserService.java public interface UserService { /** * 新增用户(完整信息) * @param urmsUser * @return */ int insert(UrmsUser urmsUser); /** * 新增用户(不完整信息) * @param urmsUser * @return */ int insertSelective(UrmsUser urmsUser); /** * 根据ID修改用户信息(完全修改) * @param urmsUser * @return */ int updateByPrimaryKey(UrmsUser urmsUser); /** * 根据ID修改用户信息(部分修改) * @param urmsUser * @return */ int updateByPrimaryKeySelective(UrmsUser urmsUser); /** * 根据ID删除用户信息 * @param urmsUserId * @return */ int deleteByPrimaryKey(Integer urmsUserId); /** * 根据ID查询用户 * @param urmsUserId * @return */ UrmsUser get(Integer urmsUserId); } UrmsUserServiceImpl.

面经-网络+操作系统

网络基础 TCP三次握手 一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili 三次握手过程: 客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_send状态 服务端——发送带有SYN/ACK标志的数据包——客户端 二次握手 服务端进入syn_rcvd 客户端——发送带有ACK标志的数据包——服务端 三次握手 连接就进入Established状态 为什么三次: 主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力 为什么两次不行? 假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些原因,并未到达服务器,在中间某个网络节点产生了滞留,为了建立连接客户端会重发SYN包,这次数据包正常送达,服务端回复SYN+ACK,之后建立连接。但是第一包数据阻塞的网络节点突然恢复,第一包SYN包又送达到服务端,这时服务端会误认为是客户端又发起了一个新的连接,这样服务端进入等待数据状态,这样客户端认为是一个连接,服务端认为是两个连接。 TCP协议如何处理丢包问题以及乱序问题 TCP为每一个连接,建立一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从发送缓冲区,取一部分数据组成发送报文,在发送报文的tcp协议头中会附带序列号和长度,接受端在收到数据后,需要回复确认报文,确认报文中的ACK,等于接收序列号加长度,也就是下一包数据要发送的起始序列号。这样一问一答的发送方式能够使发送端确认发送的数据已经被接收端收到,发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端,可以把待发送的数据分割成一系列的碎片发送到对端,对端根据序列号和长度,在接收后重构出来完整的数据。假设其中丢失了某些数据包,在接收端可以要求发送端重传,比如丢失了100-199这100个字节,接收端向发送端发送ACK=100的报文,发送端收到后重传这一包数据,接收端进行补全,以上过程不区分客户端和服务端,tcp连接是全双工的,对于两端来说都采取这种机制。 TCP四次挥手过程 四次挥手过程: 客户端——发送带有FIN标志的数据包——服务端,关闭与服务端的连接 ,客户端进入FIN-WAIT-1状态 服务端收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1,服务端就进入了CLOSE-WAIT状态 服务端——发送⼀个FIN数据包——客户端,关闭与客户端的连接,客户端就进入FIN-WAIT-2状态 客户端收到这个 FIN,发回 ACK 报⽂确认,并将确认序号设置为收到序号加1,TIME-WAIT状态 为什么四次: 因为需要确保客户端与服务端的数据能够完成传输。 CLOSE-WAIT: 这种状态的含义其实是表示在等待关闭 TIME-WAIT(等待超时时间): 这是为了保证对方已收到ACK包,因为假设客户端发送完最后一包 ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态,如果客户端发送最后一包ACK包后等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应这个FIN包,重发ACK包并刷新超时时间,也是为了保证在不可靠的网络链路中进行可靠的连接断开确认 如何查看TIME-WAIT状态的链接数量? netstat -an |grep TIME_WAIT|wc -l 查看连接数等待time_wait状态连接数 为什么会TIME-WAIT过多?解决方法是怎样的? 可能原因: 高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接 解决:负载均衡服务器;Web服务器首先关闭来自负载均衡服务器的连 UDP协议 首先udp协议是基于非连接的,发送数据,就是简单地将数据包封装起来,然后从网卡发出去,数据包之间并没有状态上的联系,正因为udp这种简单的处理方式,导致他的性能损耗很小,资源占用也很小,但是对于网络传输过程中产生的丢包,UDP协议并不能保证,所以UDP在传输稳定性上要弱于tcp 1、OSI与TCP/IP 模型 OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 2、TCP/IP模型各层的功能 TCP/IP五层:物理层、数据链路层、网络层、传输层、应用层 2、常见网络服务分层 应用层:HTTP、SMTP(支持电子邮件的 SMTP 协议)、DNS、FTP 传输层:TCP 、UDP 网络层:ICMP 、网际协议 IP 、NAT协议 网络接口层:以太网技术、MAC 协议、CSMA/CD 协议

(思路)修复删除配置的管理员账户-与-修复临时账户配置

本文为作者遇到问题操作过程产生的思路,不一定能解决诸位的疑难杂症,但可参考一下。 修复删除配置的管理员账户 修复临时账户配置 修复的前提是,系统有2个及以上的管理员账户。 作者用其他管理员账户,不小心删除了主账户Administrator的用户配置文件,导致了一系列把作者搞懵了的问题。 前因是把默认配置文件复制覆盖搞错成删除了。有兴趣的可以看看这个:修复WIN7系统开机黑屏,只剩下鼠标能动的问题。_马克的异世界旅途的博客-CSDN博客 第一个问题是控制面板那个用户帐号的Administrator依旧存在,且无法删除,可是用户配置却已经没了。 如图所示,1是我其他的管理员账号,Administrator的配置文件已经没了。 控制面板那个用户帐号的Administrator依旧存在 为了避免本文过于水,所以作者会过滤掉那些我操作过的,但是却无效的过程。 因为这个Administrator账号魔愣了,无法正常登录,登录之后会新建临时用户配置,右下角就会有提示,用户文件夹是temp之类的,重启会再次建一个新的temp,所以作者是用管理员账号1操作的。 因为作者需要这个Administrator账号,所以必须要修复。 如何修复? 用户配置文件是保存在(C:\Users\)这里的,Administrator被删了,里面肯定没了这个文件夹了,只剩下唯一的管理员账号1. 运行命令:regedit,打开注册表。(注意,用其他管理员账号操作) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList s1521这几个文件夹,一一点击,看右边视图的ProfileImagePath列表, 把Administrator的账户删了,一般文件后缀会有.bak或者.公用之类的东西。 作者的这个是这样的。1000是admin,1003是1,500.bak是Administrator.公用。 所以作者把500.bak那个删了,然后重启,选择admin账户登录,系统会自动创建全新的Administrator用户配置,然后把那个管理员账号1删了就大功告成了。 正常的是这样的: 原本的状态显示的是临时,而不是本地

选择器汇总

目录 选择器类型 通用选择器 标签选择器 类选择器 id选择器 属性选择器 伪类选择器 伪元素选择器 示例汇总 关系选择器 后代选择器 相邻后代选择器 兄弟选择器 相邻兄弟选择器 选择器权重 权重分配 原则 选择器类型 通用选择器 通用选择器以*选择页面上的所有的 HTML 元素 * { text-align: center; line-height: 50px; } 标签选择器 标签选择器根据标签名称来选择 HTML 元素。 p { color: red; width: 100px; height: 50px; border: 1px solid burlywood; } 类选择器 类选择器选择有特定 class 属性的 HTML 元素。以.开始 .class-selector { width: 100px; height: 50px; background-color: aquamarine; } id选择器 id 选择器使用 HTML 元素的 id 属性来选择特定元素。以#开始

Buff/Cache概念和清理方法

最近在工作中遇到了LInux系统中Buff/Cache过大的问题,从网上查找资料,了解不释放的原因。 buff/cache占用比较大的原因分析:频繁存取文件会导致内存文件被用光,即便是程序结束后,也不会被正常释放,这就会导致buffer和cache占用比较高。 free -h total:是指计算机总物理内存。 used:已用的内存。 free:空余的内存。 shared:被多个进程共享的内存。 buffers:用于存放到输出到disk(块存储)的数据,在这里buff是指被OS buff住的内存。 cached: 存放从disk上读出的数据,buff和cache是为了提高IO性能并由OS管理的。 我们可以使用下面的命令进行清理: 1)清理pagecache(页面缓存) echo 1 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=1 2)清理dentries(目录缓存)和inodes echo 2 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=2 3)清理pagecache、dentries和inodes echo 3 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=3 编写脚本如下: #!/bin/bash # # sync;sync;sync sleep(10) echo 3 > /proc/sys/vm/drop_caches 可见:Buff/Cache被清理。

C语言——初识C语言(define定义常量和宏,指针,结构体)

1.1define定义常量和宏 define 定义符号(定义常量) //define 定义标识符常量 #define MAX 1000 define 定义宏(宏是有参数的,参数用来替换) //define定义宏 #define ADD(x, y) ((x)+(y)) #include <stdio.h> int main() { int sum = ADD(2, 3); printf("sum = %d\n", sum); sum = 10*ADD(2, 3); printf("sum = %d\n", sum); return 0; } 2.1指针(地址) 我们在了解指针之前,就必须知道——<内存> 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元 那么一个个小小的内存单元他们是怎么编号的呢?一个内存的单元到底是多大呢? 1:日常生活中,我们的计算机,要么是32位,要么是64位。 我们拿32位举例:32位 ( 指的是它有32个地址线 )这里的地址线,指的就是物理线,当他通电的时候,要么显示1要么显示0。 在这样的一个过程中:电信号转化成了数字信号(0和1组成的二进制序列) 因此我们可以知道,再是32位的时候,他的内存单元个数是2的32次方。这样依次编号。 2:在这里不妨做一个假设:假设一个内存单元的大小是 1bit。 那么2的32次方就有 42 9496 7296个bit 化成字节就是 5 3687 0912个byte 化成KB就是 524 288KB 化成MB就是 512MB 化成GB就是 0.

只需要一招,改变你的网易云皮肤(仅限于PC端)

我们废话不多说,直接上才艺。我们首先打开我们的网易云音乐。 第一步:点击设置——关于网易云音乐——下滑至最下面我们可以看到版本号,不确定的同学们可以试着点击检查与更新,来确定一下是不是最新版本。(检查完之后记得关闭网易云音乐!!!) 第二步:各位小伙伴可以根据接下来我提供的下载一个插件即可。链接我会放到文章的最后。 第三步:我们打开文件夹后,复制以下这个插件 第四步:我们回到电脑的桌面。我们右键网易云音乐图标——点击(打开文件所在位置)——我们进入网易云根目录,然后粘贴进去就可以了。 第五步:我们重新启动网易云音乐。记住先把自己的网易云音乐主题设置成——酷炫黑主题——然后我们打开设置——我们可以看到一个加载插件列表,我们点击。 第六步:我们点击进去之后,我们就可以看到一系列的插件列表,这里,先安装MOT开头的这个。 第七步:安装好之后,我们进入设置点击Choose File。我们就可以选择我们喜欢的壁纸啦!!! 接下来给大家来看一下效果 接下来给大家分享一下下载链接: https://pan.baidu.com/s/1GL3g1zQCmWVcYMm85UdxiQ 提取码: 4g5h 复制这段内容后打开百度网盘手机App,操作更方便哦 分享知识是一种美德,希望大家给一个免费的关注,博主接下来还会给大家更多好玩的,有趣的知识。 网盘里面还附有小编收藏的壁纸,仅供参考。

【Linux学习】vim编辑器的使用

Linux环境中vim编辑器的使用 前言一、vim是什么?二、vim的使用1. vim的三种模式1.1 命令模式(Command mode)1.2 输入模式(Insert mode)1.3 底线命令模式(Last line mode) 2. vim命令集2.1 vim命令模式命令集2.2 vim底线模式命令集 前言 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。 vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 一、vim是什么? vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 vim键盘图 二、vim的使用 1. vim的三种模式 基本上 vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 1.1 命令模式(Command mode) 当我们在命令行输入vim,就启动了vim,进入了命令模式。 此状态下敲击键盘动作会被vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。 以下是常用的几个命令: i 切换到输入模式,以输入字符。x 删除当前光标所在处的字符。: 切换到底线命令模式,以在最底一行输入命令。 若想要编辑文本:启动vim,进入了命令模式,按下i,切换到输入模式。 命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。 1.2 输入模式(Insert mode) 在命令模式下进入输入模式的方式: 输入a输入i输入o 在输入模式中,可以使用以下按键: 字符按键以及Shift组合,输入字符Enter,回车键,换行Back space,退格键,删除光标前一个字符Del,删除键,删除光标后一个字符方向键,在文本中移动光标Home/End,移动光标到行首/行尾Page Up/Page Down,上/下翻页Insert,切换光标为输入/替换模式,光标将变成竖线/下划线Esc,退出输入模式,切换到命令模式 1.3 底线命令模式(Last line mode) 在命令模式下按下:(英文冒号)就进入了底线命令模式。