Dubbo之ServiceBean

什么是ServiceBean dubbo的服务,生成的spring的bean定义类型都是ServiceBean。也就是dubbo的注解@Service和配置文件里的dubbo:service/生成的bean定义类型都是ServiceBean。 举个例子: 接口 package com.mytest.dubbo; public interface DemoService { } 实现类 package com.mytest.dubbo; import com.alibaba.dubbo.config.annotation.Service; @Service public class DemoServiceImpl implements DemoService { } main方法 public static void main(String[] args) throws IOException { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DemoDubboConfig.class); context.start(); ServiceBean bean = (ServiceBean)context.getBean("ServiceBean:com.mytest.dubbo.DemoService"); System.out.println(bean); } context.getBean(“ServiceBean:com.mytest.dubbo.DemoService”)获取到的就是dubbo服务的bean。 Dubbo服务的bean定义在哪配置? Dubbo服务的bean定义在哪配置,也就是ServiceBean在哪里设置的? 以下代码展示都是基于2.6.12的版本 首先在配置类上增加注解@EnableDubbo,开启dubbo,接着就可以看下@EnableDubbo是怎么工作的,最终把ServiceBean注册到spring中的。 @Configuration @EnableDubbo(scanBasePackages = "com.mytest.dubbo" ) public class DemoDubboConfig { } @EnableDubbo上有@DubboComponentScan,再看@DubboComponentScan上导入了DubboComponentScanRegistrar.class,该类实现了ImportBeanDefinitionRegistrar接口,springIOC在执行过程中会调用ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法,用于注册bean定义。 @EnableDubboConfig @DubboComponentScan public @interface EnableDubbo { } @Import(DubboComponentScanRegistrar.class) public @interface DubboComponentScan { } public class DubboComponentScanRegistrar implements ImportBeanDefinitionRegistrar { } 接着来看下registerBeanDefinitions方法,该方法往springIOC注册了ServiceAnnotationBeanPostProcessor bean定义,该类实现了BeanDefinitionRegistryPostProcessor接口,在springIOC执行过程中又会执行postProcessBeanDefinitionRegistry方法。

__attribute__ ((at())绝对定位分析

在学习STM32 IAP 时,遇到了关于数组存储空间绝对定位的问题,例如: u8 USART_RX_BUF[USART_REC_LEN] attribute ((at(0X20001000))); 首先我们先搞懂这里的两个关键字. 1.attribute 是用来指定变量或结构位域的特殊属性,该关键字后的双括弧中的内容是属性说明. 2.at 关键字可以用来设置变量的绝对地址,也就是通过这个关键字,指定某个变量处于内存里面的某个给定的地址. 那么上面的那条语句的意思就是,将 USART_RX_BUF 数组的首地址设定为 0X20001000 (SRAM内存地址区域). ———————————————— 版权声明:本文为CSDN博主「智小星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/xinghuanmeiying/article/details/79563650

Flutter - flutter_picker选择器封装 (底部弹出,包含日期,单列、多列文本)

demo 地址: https://github.com/iotjin/jh_flutter_demo 以下代码不是最新代码,最新版支持对象数组数据格式和自定义UI,请前往github下载 使用版本 flutter_picker: ^1.1.0 date_format: ^1.0.8 #时间处理 包地址 flutter_picker packages地址 date_format packages地址 (判断上下午使用了) ###效果图 使用方法 导入 jhPickerTool.dart 单列选择器 var aa = ["11","22","33","44"]; // var aa = [11,22,33,44]; JhPickerTool.showStringPicker(context, data: aa, // normalIndex: 2, // title: "请选择2", clickCallBack: (int index,var str){ print(index); print(str); } ); 多列选择器 var bb = [["11","22"],["33","44"],["55","66"]]; // var bb = [[1,2],[3,4],["5","6"]]; JhPickerTool.showArrayPicker(context, data: bb, // title: "请选择2", // normalIndex: [0,1,0], clickCallBack:(var index, var strData){ print(index); print(strData); } ); 日期选择器 JhPickerTool.

开源邮件服务器James 3.5.x 二次开发将邮件内容推送到kafka 源码、可执行程序、部署过程分享

参考的原安装步骤文档:https://blog.csdn.net/qq_35280133/article/details/109559023 此项目百度网盘下载链接: 链接:https://pan.baidu.com/s/1g1EQVpsDLMANUsQl8sVkoA 提取码:dgap 使用步骤 一、准备环境 JDK1.8 mysql驱动包8.0 centos7 --网盘下载下来的压缩包已经包mysql驱动包 二、部署james服务、修改配置、创建初始用户 1、在linux操作系统上新建一个目录用于上传james jar包,我建的目录是/aiops/local 2、将压缩包上传到/aiops/local 解压 tar -zxvf james-server-app-3.5.1-SNAPSHOT.tar 3、配置数据库 vim james-database.properties 4、 配置域名 vim domainlist.xml 5、 vim mailetcontainer.xml 6、 vim smtpserver.xml 7、启动james服务器(注意先创建/aiops/log/james目录) cd /aiops/local/james-server-app-3.5.1-SNAPSHOT/bin ; nohup ./run.sh >>/aiops/log/james /james.log & 8、添加邮箱账户 ./james-cli.sh -h localhost -p 9999 adddomain dbemail.aiops.com ./james-cli.sh -h localhost -p 9999 AddUser aiops@dbemail.aiops.com 123456

如何展开Collapse 的所有折叠面板

方法:折叠面板默认展开值是activeNames,只需遍历所有的el-collapse-iteme,将其name值插入到 activeNames中即可。 <template> <div> <el-collapse v-model="activeNames"> <div v-for="(item,index) in moduleFiles"> <el-collapse-item :title="item.totle" :name="index"> <div>{{item.content}}</div> </el-collapse-item> </div> </el-collapse> </div> </template> data() { return { moduleFiles:[ {title:"好好学习",content:"读书不仅仅是为了强大自我,而且是为了中华之崛起"}, {title:"好好学习",content:"读书不仅仅是为了强大自我,而且是为了中华之崛起"}, {title:"好好学习",content:"读书不仅仅是为了强大自我,而且是为了中华之崛起"}, {title:"好好学习",content:"读书不仅仅是为了强大自我,而且是为了中华之崛起"}, ], activeNames:[], } }, mounted(){ const open =[]; for(let i=0;i<this.moduleFiles.length;i++){ open.push(i); } this.activeNames = open; } 结果如下:

CentOS安装CMake

文章目录 1 问题背景2 前言3 步骤 1 问题背景 最近想玩玩CLion远程调试JDK源码,需要用到CMake,因此来安装 2 前言 需要先看CLion支持哪个版本的CMake,再下载对应的版本。本文采用源码编译构建的方法安装。安装的步骤可以看源码包里面的READEME文件 3 步骤 去官网下载源码包,复制下载地址,如下图所示: 再CentOS找一个自己喜欢的路径,输入下面命令下载源码包: # wget后面的那个链接就是上面复制的下载地址 wget -c https://github.com/Kitware/CMake/releases/download/v3.22.5/cmake-3.22.5.tar.gz 下载完成后就解压压缩包 tar -zxvf xxx.tar.gz 进入解压出来的目录,执行bootstrap文件 ./bootstrap 上面的命令执行完后,会提示你接下来用gmake,直接输入gmake就好了: gmake 上面命令执行完后,cmake就在主目录的bin文件夹里面,用下面的命令做一个软连接,让系统能识别cmake命令: ln -s /cmake解压出来的绝对目录路径/bin/cmake /usr/bin/cmake 最后在任何路径下输入cmake --version都行了: cmake --version

GitLab + Jenkins + Docker 实现 CI/CD 集成发布

前言 在没有持续集成持续发布之前,传统的开发模式是项目一开始就划分模块,等到所有代码开发完成之后再集成到一起进行测试,但是随着技术的发展,业务量不断增加,软件规模也在不断的扩大,单一的划分模块的方式就会出现特别多的问题,由于代码中的很多 Bug 在项目的早期就存在,等到最后集成测试的时候才发现问题,这样会导致开发者需要在集成阶段花费大量的时间去修改代码,再加上软件的复杂性短时间内很难定位错误位置,而持续集成的出现就可以消除这个弊端,下面来讲解什么是持续集成; 一、什么是持续集成? 持续集成(Continuous integration,简称 CI)指的是,频繁的(一天多次)将代码集成到主干,如下图,程序员会将代码提交到代码仓库中,比如:GitHub、GitLab、Gitee等,提交到代码仓库之后通过集成工具(jenkins) 来将提交的代码拉取到集成机器当中,在集成机器上使用编译工具(maven/nodejs)对代码进行编译打包,通过将打好的包(jar/war)提交到需要部署的服务器运行打好的服务包实现交付,而每一次提交代码持续集成机器会通配置 Hook 来自动拉取代码,实现持续集成。 持续集成的目的:就是让产品可以快速迭代,同时还能保持高质量,它的核心措施是,将代码集成到主干之前,必须通过自动化测试们只要有一个测试用例失败,就不能集成; 二、持续集成的流程 下图为整个 CI/CD 的流程图,通过程序员提交代码到代码仓库,由代码仓库来管理程序员所提交的代码,通过 jenkins 服务器来讲代码拉取到本地,并使用 maven 工具对代码进行编译打包,并将打好的包发布到部署服务器并运行服务,下面则是整个构建流程: 1、提交(commit):流程的第一步,是开发者向代码仓库提交代码,所有后面的步骤都始于本地代码的第一次提交(commit)。 2、测试(test 第一轮):代码仓库对 commit 操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试; 3、构建(build):通过第一轮测试,代码就可以合并进主干,就算可以交付了,交付后先进行构建(build),再进入第二轮测试,所谓构建就是指的就是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等。 4、测试(test 第二轮):构建完成,就要进行第二轮测试,如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然构建步骤也就需要移动到第一轮测试前面; 5、部署(deploy):过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact),将这个版本的所有文件打包( tar filename.tar *)存档,发到生成服务器; 6、回滚(RollBACK):一旦当前版本发生问题,就要回滚到上一个版本的构建结果,最简单的做法就是修改以下符号链接,指向上一个版本的目录; 持续集成的好处: 1、降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少; 2、对系统健康持续检查,减少发布风险带来的问题; 3、减少重复性工作; 4、持续部署,提供可部署但元包; 5、持续交付可提供使用的版本; 6、增强团队信心; 三、jenkins 持续集成工具 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,在与 Oracle 发生争执后,项目从 Hudson 项目复刻。Jenkins 提供了软件开发的持续集成服务。它运行在 Servlet 容器中。它支持软件配置管理工具,可以执行基于 ApacheAnt 和 ApacheMaven 的项目,以及任意的 Shell 脚本和 Windows 批处理命令。Jenkins 的主要开发者是川口耕介。Jenkins 是在 MIT 许可证下发布的自由软件。。 1、开源的 Java 语言开发持续集成工具,支持持续集成,持续部署。 2、易于安装部署配置:可通过 yum 安装,或下载 war 包以及通过 docker 容器等快速实现安装部署,可方便 web 界面配置管理。

python学习-7-异常 错误 调试 测试

错误处理 使用错误代码 代指 错误类型 正常结果与错误码混合在一起,容易混淆 所以必须抛出错误类型 一旦出错,还得一层层上报 错误也是一个类,错误与错误之间也有者关系,例如父子关系需要对不同类型的错误进行识别与区分,并针对性的进行处理python的错误是class,所有的 都继承自 BaseException try: foo() except ValueError as e: ssss except xxxx: ssss finally: ssss 需要注意,如果代码捕获的错误有父子关系,子在前,父在后,防止提前被捕获try-except的好处在于 可以跨越多层捕获,只要main捕获到就ok若未被捕获,则会一直往上抛,直到被python解释器捕获,最终打印出来 打印的顺序是从高往低最终可以定位到错误语句python解释器打印错误信息,会将程序中止 python内置的logging模块可以很容易的记录错误信息 logging也可以将错误信息记录到日志文件中 # 打印错误信息,与python解释器输出一样,但不会中止程序 import logging logging.exception(e) 有的时候,我们捕获了错误,但是不知道如何处理,可以先打印信息,然后继续raise(不带参数)抛出 调试 print (low)断言 eg:assert n!=0, 'n is zero'n必须为0,否则抛出AssertionError: n is zeropython解释器可以用 -0 参数关闭assert,之后就相当于pass logging 使用logging代替print,打印变量的值logging.basicConfig(level=logging.INFO) 定义日志等级debug,info,warning,error,靠右原则,info时debug失效 pdb python解释器的debug ide的端点debug 单元测试 对一个模块/函数/类进行正确性检验的测试工作把测试用例放到一个测试模块中,就是一个完整的单元测试使用 编写一个测试类,继承unittest.TestCase每一类测试都写一个test_xxx()方法(严格规范)最常用的是self.assertEqual(方法,期待值)期待抛出的指定类型的Error # 当d['empty']访问不存在的key时,断言就会抛出KeyError with self.assertRaises('KeyError'): value = d['empty'] 直接运行脚本就ok,批量运行多个单元测试setUp与tearDown方法 在每个单元测试前后执行例如连接数据库,关闭数据库 文档测试 python官方文档文友一些示例代码doctest可直接提取注释中的代码并执行测试运行py,啥问题没有,就说明示例代码写的没有问题

CorelDRAW Graphics Suite2022免费图形设计软件

CorelDRAW Graphics Suite2022是一款功能强大的软件,可取代等效的图形设计软件,轻松掌握,功能齐全。 CDR2022免费图形设计软件专业矢量插图、布局、照片编辑、版式和协作所需功能一应俱全。CorelDRAW® Graphics Suite 专为提高您的效率为目标而设计,受到全球数百万图形专业人员和设计团队的信赖,可提供无限创意,而不浪费任何时间。 CorelDRAW可以从任何地方使用! 它原生支持Windows和Mac的最新技术,包括Windows 11、macOS Monterey和苹果m 1芯片的卓越性能。 在Web、iPad和其他移动设备上也能体验到真正的跨平台体验。 CorelDRAW.app提供的针对触控操作进行了优化的用户界面,使您能够更好地处理移动设备和平板电脑上的工作。 因为还加入了ipad APP,所以即使在路上也能进行设计。 有影响力的创意内容 使用CorelDRAW产品商店提供的精彩免费内容,提高您的创造力。 可以尝试可下载的字体、填充、矢量、创意模板和其他,以提高设计水平。 印刷或网页设计 始终提供完美的出版和输出。 可以在打印前准确掌握实际打印的颜色,确保各种介质上的颜色一致。 此外,您还可以利用一套卓越的图形工具和预设,创建引人注目的网站内容。 支持多种文件格式 支持图形、出版和图像文件格式,可以导入和导出各种项目资源以满足客户的文件和需求。 CorelDRAW2022产品内容 主应用程序 CorelDRAW® - 矢量插图和页面布局Corel PHOTO-PAINT™ - 图像编辑和基于像素的设计程序Corel® Font Manager - 字体开发和管理工具PowerTRACE™ – 人工智能驱动的位图转矢量图(作为 CorelDRAW 应用程序配件随附)CorelDRAW.app™ – 通过网页浏览器进行在线矢量插图和图形设计CorelDRAW.app™ for iPad – 矢量插图和图形设计 iPad 应用程序CAPTURE™ - 截屏工具AfterShot™ HDR - RAW 照片编辑器 CorelDRAW2022内容 7,000 张剪贴画、数码图像和车辆包装模板1,000 张高分辨率数码照片超过 1,000 种 TrueType 和/或 OpenType 字体,以及对超过 1,000 种 Google 字体系列的集成访问150 个专业设计模板600 多种渐变填充、矢量填充和位图填充 需要 Internet 连接才能安装和认证 CorelDRAW Graphics Suite 及访问某些内含软件组件、在线功能和内容。

Android CAN 简记

文章目录 概要adb 连接adb 常用操作CAN配置脚本SocketCANJNIJNI与SocketCANMakefilejnican.java生成的 jnican..hjnican.c运行github jni can NDKAndroid StudioAndroid_SocketCAN 工程ApktoolGithub Android_SocketCAN 概要 5年前的配置了: MSM8953(骁龙625, 14nm, 8*Cortex-A53, 64bit, ARMv8-A, 2016年), 2+16GBAndroid 7.1.x, Linux内核是3.18.x屏幕分辨率是常见的 1280*800SOC没有CAN, 通过SPI外扩的两路CAN, MCP2515, 应用层上看还是SocketCAN. 这个Linux驱动其实挺不好整的, 特别是较老的内核和驱动, 连发丢帧的问题很明显 adb 连接 操作: 设置->关于手机->连点5下版本号->返回到开发者选项->开启USB调试. (可能不需要这个步骤)设置->更多->USB Host开关两次, 最后的状态是关 插拔USB, 就可以在 Win 的设备管理里面看到 然后就可以在 wsl2 或者 powershell 中操作了 # 配置环境变量就直接adb, 不配置就切换到adb目录, ./adb.exe adb version adb devices adb logcat adb shell # 如果出现 more than one device/emulator 错误 # 如果只有一个模拟器和一个手机连着电脑: # 可以用adb -e 来指明是操作模拟器 Emulator # 可以用adb -d 来指明是操作设备 Device adb -d shell 参考:

常用类之BigDecimal、Date、Calender、SimpleDateFormat及System类

常用类 1.BigDecimal类 引言: 很多实际应用中需要精确运算,而double是近似值存储,不在符合要求,需要借助BIgDecimal。 BigDecimal 位置:java.math包中作用:精确计算浮点数基本类型存储在栈中,引用类型存储在堆中创建方式:BigDecimal bd=new BigDecimal("1.0"); 方法: BigDecimal add(BigDecimal db);//加 BigDecimal subtract(BigDecimal db);//减 BigDecimal multiply(BigDecimal db);//乘 BigDecimal divide(BigDecimal db);//除 除法:divide(BigDecimal bd,int scal,RoundingMode mode) 参数scal:指定精确到小数点后几位。参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式,取值为BigDecimal.ROUND_HALF_UP。 1.1 BigDecimal代码演示 package classes.demo08; import java.math.BigDecimal; import java.math.RoundingMode; public class TestBigDecimal { public static void main(String[] args) { double d1=1.0;//double 是近似值存储 double d2=0.9; System.out.println(d1-d2);//输出0.09999999999999998 //面式题 double result=(1.4-0.5)/0.9; System.out.println(result);//输出0.9999999999999999 //BigDecimal,大的浮点数精确计算 BigDecimal bd1 = new BigDecimal("1.0"); BigDecimal bd2 = new BigDecimal("0.9"); //加法 BigDecimal r1 = bd1.

【TI-mmWave】二、IWR6843ISK-ODS毫米波雷达【固件开发】流程

文章目录 固件开发环境-软件安装1.mmWave SDK2.MATLAB runtime3.Code Composer Studio(CCS) 固件编译和生成 此篇为TI毫米波雷达上手系列第二篇。 注:如果只需要使用做好的固件,那么请参考【mmWave】一、IWR6843ISK-ODS毫米波雷达【固件烧写和上手使用】流程,直接安装串口驱动和固件烧写工具即可使用。 本篇主要为了搭建对固件进行二次开发定制,生成.bin格式固件的环境。 固件开发环境-软件安装 下面这套流程可以参考TI官方的视频https://edu.21ic.com/video/2264 和 https://blog.csdn.net/lowbob/article/details/105671559这篇博文 1.mmWave SDK 下载:https://www.ti.com/tool/MMWAVE-SDK 我下载的版本是mmwave_sdk_03_05_00_04 安装不难 2.MATLAB runtime 是运行项目所需要的库,没装它项目会运行不了 下载:https://ww2.mathworks.cn/products/compiler/matlab-runtime.html 我安装的是MATLAB_Runtime_R2021a 安装不难 3.Code Composer Studio(CCS) 是TI的IDE,在这里开发项目,导入TI的项目。 如果我们需要自己设计满足需求的固件,就需要在CCS里面进行开发并生成固件。 安装后,在CCS里面的Resource Explorer导入Vital Signs工程 点右上角的Import import的工程: 其自带bin,位于本地安装路径 .\CCS\ccs1120\ccs\tools\compiler\mmwave_industrial_toolbox_4_11_0\labs\Vital_Signs\68xx_vital_signs\prebuilt_binaries 可以直接使用该固件,烧录板子里,跑例程测试。 固件编译和生成 对导入的工程,如果自己修改了,需要生成新的固件,这需要在选项中配置项目所需SDK的位置,把SDK安装后所产生的文件夹都加入,才可build固件,详见: 【mmWave】三、CCS Projects导入报错:This project requires product SYS/BIOS v6.73.1.01, or equivalent… 配置好后,点击 就会生成用于烧写的固件 即可把这个固件拿去烧写了,烧写步骤见【mmWave】一、IWR6843ISK-ODS毫米波雷达【固件烧写和上手使用】流程 end

vant组件样式通过类名修改无效问题

这里不说解决方案,记录下自己的粗心,如果你也跟我一样网上到处搜索类名修改vant组件无效的解决方案,大概率会搜到让你用deep穿透,去掉scope,导入css文件等方法。 在做这些之前,建议还是先去检查一下自己的less文件,你要修改的那个类是否放入正确的层级,层级不对加!important 都没用,如果真是这个原因,不要灰心,你只是用的比较少而已,才没有意识到这个问题,多用用就好了!

2023大连大学计算机考研信息汇总

大连大学研招网 http://yjs.dlu.edu.cn/ 大连大学(Dalian University),简称连大(DLU),位于浪漫之都——辽宁省大连市,为教育部卓越教师培养计划、国家大学生文化素质教育基地入选高校,首批CDIO工程教育联盟成员单位。 1978年10月成立大连工学院旅大分校,后更名为大连工学院大连分院。1983年11月大连工学院大连分院更名为大连大学。1987年10月,与大连师范学校、大连市卫生学校三校合一,组建成为如今的大连大学。 初复试信息 【2022最新报考信息】 评级: 计算机C软件工程B- 计算机相关院系: 教育部先进设计与智能计算重点实验室 081200 计算机科学与技术083500 软件工程085400 电子信息 国家863重点实验室/国家工程实验室/教育部重点实验室 081200 计算机科学与技术083900 网络空间安全085400 电子信息 信息工程学院 081200 计算机科学与技术083900 网络空间安全085400 电子信息 软件学院 083500 软件工程 学制、学费、奖学金情况 学制: (全日制)学术型硕士研究生学制为3年。 (全日制)工程硕士学制为3年。 学费 全日制临床医学学术型、临床医学专业型、口腔医学专业型、汉语国际教育专业型、体育硕士专业型、护理学、音乐与舞蹈学、美术学学科(专业)学费为:8000元/每生.每年;其他学科(专业)学费为:6000元/每生.每年。 非全日制学科(专业)学费为:8000元/每生.每年 奖学金 将进一步加大研究生奖助力度,建立和完善研究生学业奖学金、研究生助学金、研究生国家奖学金、研究生“三助”岗位等奖助政策体系,实现研究生奖助的全覆盖。 奖学金、助学金具体办法详见《大连大学研究生收费及奖、助学金办法》。 22大连大学初试科目: 教育部先进设计与智能计算重点实验室 081200 计算机科学与技术 ①101思想政治理论 ②201英语一 ③301数学一 ④838专业综合(操作系统50%+计算机网络50%) 083500 软件工程 ①101思想政治理论 ②201英语一 ③302数学二 ④836数据结构 085400 电子信息 ①101思想政治理论 ②204英语二 ③302数学二 ④838专业综合(操作系统50%+计算机网络50%) 国家863重点实验室/国家工程实验室/教育部重点实验室 081200 计算机科学与技术 083900网络空间安全 ①101思想政治理论 ②201英语一或203日语 ③301数学一 ④838专业综合(操作系统50%+计算机网络50%) 085400 电子信息 ①101思想政治理论 ②204英语二或203日语

sql注入(sqlmap)

[SWPUCTF 2021 新生赛]error 通过id的报错可以判断是字符型注入,order by 得出字段数是3 函数解释: extractvalue():从目标XML中返回包含所查询值的字符串。 EXTRACTVALUE (XML_document, XPath_string); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) extractvalue()能查询字符串的最大长度为32 简单来说,就是利用参数二的特殊字符串,去匹配参数一中的东西。 正常情况下 参数二的特殊字符串就是一段符合xpath语法规则的字符串。当参数二不符合xpath语法规矩,这个函数就会报错,显示出参数二的内容。 报错注入就是利用这个原理来进行的。 ?id=1' union select 1,extractvalue(1,concat(0x7e,(select version()),0x7e)),3--+ 看例子,这里的参数一是随便写的1,参数二是concat(0x7e,(select version()),0x7e) concat函数是用来连接字符串的,就是将它的所有参数连接起来。 0x7e代表的是~,我们前面讲的要让参数二的字符串不符合xpath规则,然后报错。 由于 ~开头不符合xpath规则,所以这里使用concat来连接 ~ 和中间括号中的sql语句的执行结果。 所以通过concat连接后的字符串肯定不符合xpath规则,所以extractvalue函数肯定报错,从而使我们可以得到中间sql语句的执行结果 所以这道题试一下有无报错注入, 用sqlmap跑。 sqlmap -u “http://1.14.71.254:28188/index.php?id=1” --dbs sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db --tables sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db -T test_tb --columns sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db -T test_tb -C flag --dump Sqlmap常用命令总结及注入实战(Access、mysql)_OKAY_TC的博客-CSDN博客_sqlmap命令 [强网杯 2019]随便注 打开界面,发现是一个字符型注入 输入select发现被过滤有些东西 然后开始堆叠注入,

js中截取字符串的三个方法 substring()、substr()、slice()、C#截取字符串的方法

JS js中有三个截取字符的方法,分别是substring()、substr()、slice(),平时我们可能都用到过,但总是会对这些方法有点混淆,特别是substring()和substr(),连方法名都差不多,下面就具体来看一下区别。 相同点 这三个方法都可以对字符串进行截取,并且返回一个新的字符串,也就是不会对原字符串进行修改。 //chrome控制台 > var a = '0123456789' < undefined > a.substr(1,5) < "12345" > a < "0123456789" //没有发生改变 不同点 这三个方法的不同之处在于参数不同。 一、substring substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法 string.substring(start,stop); 参数 参数描述start必需。一个非负的整数,规定要提取的子串的第一个字符在 string 中的位置。stop可选。一个非负的整数,比要提取的子串的最后一个字符在 string 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。 说明 1.substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。 //chrome控制台 > var a = '0123456789' < undefined > a.substring(1,5) < "1234" 2.如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。 //chrome控制台 > var a = '0123456789' < undefined > a.

VScode 模糊查找替换 正则

文章目录 1. 保留模糊匹配的部分2. 不保留模糊匹配的部分3. 正则3.1 正则匹配拼音3.2 正则匹配数字3.3 正则匹配空行3.4 正则匹配换行符加空行 1. 保留模糊匹配的部分 匹配以: 开头,以,结尾的字符串,替换成-开头的字符串。 例如:"NXRCU": "宁夏黄河农村商业银行",, 替换成 "NXRCU"-"宁夏黄河农村商业银行" 快捷键 Ctrl + f : (.*?), -$1 (.*?) 是模糊匹配的部分 $1 代表原模糊匹配的内容 替换前 替换后 2. 不保留模糊匹配的部分 匹配以: "开头,以,结尾的字符串,替换成-。 例如:"NXRCU": "宁夏黄河农村商业银行", 替换成 "NXRCU"-" 快捷键 Ctrl + f : "(.*?), - 替换前 替换后 3. 正则 3.1 正则匹配拼音 (?<pingying>[āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡa-zA-ZA-Za-z\\s∥-]+) 3.2 正则匹配数字 ([\d].*) 3.3 正则匹配空行 (^[ ]*$) 3.4 正则匹配换行符加空行 (\n^[ ]*$)

“车规级”与“功能安全”(ISO26262)的区别——摘自《5万字长文说清“车规级”》...

交流群 | 进“传感器群/滑板底盘群”请加微信号:xsh041388 交流群 | 进“域控制器群/操作系统群”请加微信号:ckc1087 备注信息:传感器/滑板底盘/域控制器+真实姓名、公司、岗位 本文摘自九章文章:《5万字长文说清楚到底什么是“车规级”》 “AEC-Q”认证与ISO26262功能安全认证的关系 我发现很多人搞不清楚“AEC-Q”认证与ISO26262功能安全认证之间的关系,经常把两者搞混淆,或者放到一起讲,其实这是不对的。AEC和ISO26262根本就是两码事,井水不犯河水,侧重点完全不一样。 “AEC-Q”认证我们已经讲得非常详细了,认证的对象必须是实物,且仅针对电子元器件(不包括零部件),如集成芯片、分立半导体、被动器件、MEMS器件、MCM模块等,认证由器件供应商Tier 2来进行认证测试。而ISO26262标准认证范围就很宽了,对象可以是实物,比如元器件,也可以是零部件;或是虚拟的非实体,比如认证一个公司流程(包括研发及生产),认证一个软件等。我大概画了个图,小伙伴们先看下,有个概念。 认证标准及区别(来源:左成钢) 1、 ISO 26262基本概念 我们先来讲一下ISO 26262功能安全标准的一些基本概念,然后再详细来讲其他的点,方便小伙伴们有个基本认知。按照惯例,我们直接回到标准原文: ISO 26262介绍及范围(来源:ISO 26262-1:2011) 针对标准的适用范围,我们提炼一下重点: 适用于道路车辆,挖掘机啥的非道路车辆就不能算; 由电子、电气(E/E)和软件组件组成的系统相关。简单来说就是没电的肯定就不能算,比如你的车玻璃,虽然和安全相关,开着车玻璃突然炸裂了可能就会发生安全事故,但那也不算在功能安全标准范围内,而是算在《中国乘用车强制性国家标准》的被动安全里面的。 与安全相关的系统。非安全相关的,比如娱乐系统就不算,开车过程中音乐播放功能失效,没法听歌了,这就不能包含在功能安全范围内。 然后我们再看下“安全”的定义,安全是相对于危害而言的,这一点估计有些小伙伴们还没搞明白: ISO 26262范围及术语定义(来源:ISO 26262-1:2011) 和安全相关是指,因E/E系统的故障行为而引起的可能的危害(hazards); 危害(hazard)的定义是:由相关项的功能异常表现而导致的伤害(harm)的潜在来源; 伤害(harm)的定义是:对人身健康的物理损害(injury)或破坏(damage); 标准术语比较拗口,我简单总结一下,用人话来讲就是:功能安全只管人会受伤的事情,只要人没事就不管了。当然这里不仅仅是受伤了,标准还包含了damage,大家自行理解,我就不翻译了。 最后总结一下,功能安全是用来干啥的。顾名思义,首先是要有一个具体的功能,抛开功能谈安全,那就是耍流氓。基于一个具体的功能,比如车辆行驶过程中转向失效导致方向盘无法转动,这就很具体,因为转向失效还包含了方向盘在没有操作的情况下自己转动的情况,这就要分开来讲了。再然后就是安全,比如你的车停在那里车门自动解锁打开了,然后东西被偷了,这也是安全,但就不算在功能安全里面,因为人没有受伤,人没事就不算。如果是行驶过程中门突然自己打开,人掉下去了,这就是功能安全了,大家要区分清楚。 接下来我们再来讲一下目前功能安全认证的两种类型。 2、 功能安全流程认证及产品认证 目前业内有两种功能安全认证,都可以拿到证书。一种是流程认证,一种是产品认证。流程认证就是指开发过程,产品认证就是指具体产品,可以是实体,比如芯片、电子零部件,也可以是开发工具;也可以是虚拟的非实体,比如软件操作系统OS。 我们以SGS官网信息为例,大体可以看出来目前大家基本都在做这两类认证,并且以流程认证居多,具体原因我们随后再讲。 功能安全认证案例(来源:SGS.com) 我们先讲流程认证。按笔者经验,对于没有相应经验的公司,认证机构一般都是建议先做流程认证,通过流程认证后,团队和能力基本上也就培养起来了,下一步就可以来做产品认证了(如果需要的话)。 因为流程认证难度较低,即使现有人员缺乏功能安全相关知识及流程经验,经过认证机构培训及辅导,短则半年,多则一年,一般都能通过,取得功能安全流程认证证书。流程认证一般也是基于一个具体的真实项目来开展的(一般是基于一个简单的产品,太复杂的难度太大,纯属找刺激,不推荐),而不是凭空只做流程文档。当然了,也可以这么做,就是只务虚,但一般不会这么做(认证机构也不推荐)。前面讲了,流程认证一般是产品认证的第一步,没有哪个公司只是为了图个虚名,拿个流程认证证书出去忽悠客户(也不排除这种情况),最终还是为了具体产品过认证。我们来看一下证书长啥样: 功能安全管理流程认证证书(来源:NXP) 从上面证书里我们可以看出来,流程认证的意思就是说,根据ISO26262标准,对于安全相关的项目,你的功能安全管理能力最高可以达到ASIL D级。那有的小伙伴们可能就要问了,C级可以不?当然可以了,不过认证机构会推荐你直接做D。因为对于流程认证来讲,C和D难度没啥差别,那为何不直接上D呢? 再来说产品认证,这个就比较复杂,要求就很高了。所以即使一个公司要做产品认证,一般都会是先做流程认证,通过后再去做产品认证就会容易一些。当然了,做产品认证的难度和流程认证就不是一个量级的,需要的人员数量要多很多。同时,因为产品认证相对于偏务虚的流程认证来讲,那可全是务实的事情,从具体产品设计,器件FIT值计算,FMEDA,FTA等,到软件代码模型检查,测试覆盖度等,那可都是实打实的工作要做的,具体认证周期我们下面再讲。我们再来看下产品认证证书长啥样。 功能安全产品认证证书(来源:网络) 从上面证书里我们可以看出来,产品认证证书是务实的,是基于具体的产品的某个功能的。我们前面也讲过,功能安全一定是基于具体功能的。上面的证书认证产品是一个电机控制器,具体功能是所控制的电机扭矩的大小和方向,就是说你要多大扭矩就多大,你要哪个方向就是哪个,这其实是两个功能,认证起来要比一个功能复杂。也就是说,要认证的功能越多,设计就越复杂,认证难度就越大,周期就越长,费用就越高。 3、 认证周期、费用及有效期 流程认证比较简单,我们就不多讲了。产品认证很复杂,工作量很大,这个和几个方面的因素有关: 企业现有的技术水平; 产品本身的复杂度,比如大模块就肯定要比小模块难度大; 需要认证的ASIL等级,等级越高,设计越复杂,难度越大; 产品设计方案,比如你直接用更高ASIL等级的器件,难度就要低一些,当然BOM成本就要高一些; 需要认证的功能,越多就越难,周期就越长; 企业的人力投入,这个比较容易理解。 我们再来看下SGS给的参考,这个和笔者了解到的实际情况是差不多的。 功能安全认证周期(来源:SGS.com) 产品认证很难,尤其是零部件级别的产品认证,ASIL C的还好,D就非常难了,需要企业投入的资源很多,周期很长,费用很高。 按照笔者经验,一般来说,采用功能安全流程开发的产品,项目研发的投入是原有的2-3倍(同样的开发内容)。企业原本的开发流程越规范,采用功能安全流程开发的投入也就越小,越不规范,投入就越高。这个很容易理解,ISO26262本质上也是个V-model,这个和汽车行业原本的零部件开发流程是一致的。对于规范的企业来讲,在开发安全相关的产品时,比如硬件方面,DFMEA,FMEDA,FTA等工作本身就是要做的,是贯穿在开发流程里面的,这部分能力本就是不缺的。又比如软件方面,配置管理工具、代码静态分析及测试工具等如果本来就在用,认证就会简单得多,所以不能一概而论。 简单来讲就是,越是大企业,越是正规企业,认证越容易过,甚至可以流程认证和产品认证一起做(没有流程认证是不可以做产品认证的,就像你必须先拿驾照才能去开车一个道理)。比如华为有一款产品,在2020年2月取得管理体系认证之后,当年11月就又取得了产品认证证书,就问你服不服。 关于具体的认证费用,笔者可以举一个简单的例子,大家感受一下,有个概念。比如流程认证,一般在一百万以内,含咨询费用和认证费用,有折扣的话,估计能谈到60万左右。因为目前国内除TUV及SGS等大家熟知的认证机构外,能做的机构也比较多了。 产品认证我们以大家熟知的VCU为例,这个产品硬件比较成熟,也比较简单,抛开研发费用不谈,单纯因认证产生的费用在300万左右,具体还是要看产品设计及OEM,不能一概而论,影响因素我们上面分析过了,在此不再赘述。 另外要提醒小伙伴们的是,功能安全证书是有有效期的,不管是流程的还是产品的。我们以下面的流程证书来举例,可以看到有效期是三年,到期后可能需要现场审核,续证审核也是有费用的,一般都是几万元。 功能安全管理流程认证证书(来源:NXP) 上面已经具体分析了流程认证及产品认证,下面我们来详细讲解一下产品认证范围。 4、 功能安全产品认证范围 关于功能安全可以认证的产品范围,实际上既可以是实体,比如电子元器件、电子零部件或开发工具,也可以是虚拟的非实体,比如软件操作系统OS,我们分开来讲。

完整恢复Linux误删数据

Linux恢复误删文件 关键时刻可以用来保命,如果这篇文章真的帮到了你,请务必点赞关注! 如果你没有按照建议管理数据并且已经删除完毕了,想要找救命稻草,听我的,赶紧跑路吧! 1、服务器数据管理建议遵循的几项规则 1、系统设备和数据设备分开,重要数据不要放在系统分区,方便卸载恢复系统和数据,底层硬件一定要使用raid0之外的磁盘阵列2、数据修改和删除前,如有必要必须备份,小文件直接使用mv命令将[filename|dirname]改为[filename|dirname].back或.orig3、rm前保存文件路径和md5值,方便数据恢复之后的文件名和路径恢复 2、Linux误删除文件的恢复 安装testdisk磁盘恢复工具 yum install epel-release -y yum install testdisk -y testdisk工具的help # testdisk --help TestDisk 7.1, Data Recovery Utility, July 2019 Christophe GRENIER <grenier@cgsecurity.org> https://www.cgsecurity.org Usage: testdisk [/log] [/debug] [file.dd|file.e01|device] testdisk /list [/log] [file.dd|file.e01|device] testdisk /version /log : create a testdisk.log file /debug : add debug information /list : display current partitions TestDisk checks and recovers lost partitions It works with : - BeFS (BeOS) - BSD disklabel (Free/Open/Net BSD) - CramFS, Compressed File System - DOS/Windows FAT12, FAT16 and FAT32 - XBox FATX - Windows exFAT - HFS, HFS+, Hierarchical File System - JFS, IBM's Journaled File System - Linux btrfs - Linux ext2, ext3 and ext4 - Linux GFS2 - Linux LUKS - Linux Raid - Linux Swap - LVM, LVM2, Logical Volume Manager - Netware NSS - Windows NTFS - ReiserFS 3.

NAS篇:群辉ds218play学习笔记

硬件:群辉ds218play,购入二手产品,自有1T硬盘*2。西数黄+蓝。 1.初期摸索 1.算法 2.三大 3.卸载应用 4.共享文件夹——移动 下载:download station:设置学习链接 5.硬盘检查:SMART:属性、硬盘、磁盘、电机、电路 群辉filestation每个文件夹什么意思:共享文件夹 6.远程开关机:自动唤醒——失败 ——软件Synology Assistant,设置WOL物理地址 ——群晖控制面板— ——手机群辉管家,可以唤醒nas,发送信号后,蓝色灯闪烁、硬盘自检、然后正常启动。 7.文件管理器: homes和home:homes是主目录,home是登录的账户在主目录的快捷键。home是homes的快捷方式,不占用额外空间。 8.文件上传,只能一个一个传,不能多线并行吗? 9.DSfile+DSphoto+Moment多人多权限照片:原来7.1版本已经把photo和moment合并到photoStation里了。 10.下载:有了网盘,电视上也要能够播放。 11.安装docker,命令行方式,命令行失败就加sudo ssh username@ip mkdir docker_install tar 2.再次摸索 1.初始化: ——每个硬盘都有系统,所以可以直接删除存储池的存储空间,需按照提示卸载占用的套件。 ——发现个现象:删除存储空间,另外活跃的存储空间会有内容出现。可能是群晖系统自动迁移? ——全部删除了存储空间后,全部删除存储池。系统正常。 ——系统没有存在硬盘上吗? 2.存储管理器:创建存储池:群晖硬盘存储池格式详解 ——新手建议使用basic模式,硬盘互相独立。 3.存储池创建存储空间:硬盘是一个存储池,两块硬盘合计2个存储池 ——存储空间1:照片;存储空间2:影音+我的文件 ——我的文件夹用到电脑映射,网上邻居隐藏不要勾选。勾选了无法在我的电脑映射。 没必要分区,不同存储池,每个文件夹设置权限即可。 4.我的电脑映射文件夹: ——打开synology Assistant——网络硬盘,下一步,选择我,修改盘符(可不改) ——失败!提示:正在以其他身份访问这台服务器。——需要勾选:登录时重新联机。 5.安装套件:图片:photo,影音:video等 ——photo安装在存储池1。安装后生成homes和home目录。 ——每个账户在home有私有目录,管理员才可查看homes。权限默认分配了。 6.下载 基本完成所需功能 1.自动备份,每人分类文件夹 2.可以公网通过QC访问 3.没有内网穿透,使用华为自动上传 4.网络唤醒 双硬盘互相复制——共享文件夹里更改存储池 黄盘作为主要盘——媳妇和老妈用黄盘,我自己蓝盘 删除原始盘——删除应用后就可以删除磁盘 删除应用:套件中心——已安装——打开应用,卸载 系统移动到黄盘?不用,蓝盘坏了无所谓。我的数据无所谓丢就丢——共享文件夹更改位置 内网穿透10086公网 1 ilo如何进入,链接 apt是linux下载工具 软件考试:网络管理员——网络工程师——[ ]

CorelDRAW 2022中文精简64位直装版下载

自从学会使用 CorelDRAW 之后,小编就会整理收集各个版本,这不去年跟小伙伴分享了CorelDRAW 2021(23.1.0.389)64-Bit直装版后,今年又出了 CorelDRAW 2022 版本,小编最喜欢尝试使用新版本,可以更好的兼容各个文件。于是决定更新一下电脑的 CDR 软件,也就是本文的主角——CorelDRAW 2022(24.0.0.301)64-Bit直装版,本文做个记录。 由于本次安装的 CorelDRAW 2022 简体中文安装包非常精简,直接安装就行,老规矩:在纯净的 Windows 10/11 操作系统下,下载安装 CorelDRAW 2022 安装包, 由于该 exe 程序是压缩文件,运行 CorelDRAW 2022 安装包后会释放压 CorelDRAW Technical Suite 2022 v24.0.0.301 x64 安装文件,静静等待即可。 老规矩,新版本 CDR 需要的最低系统要求为 Windows 10,内存建议 8G 或更高,分辨率 1920*1080 甚至更高。此处缙哥哥只是为了安装测试,用了低分辨率。 该安装包自带了 CorelDRAW 2022 序列号,无需输入直接点击下一步即可。 选择默认安装(如果你选择自定义安装路径也不是不行),静静等待安装完成即可。 安装完成后,右下角点击完成即可。然后你会发现桌面就多出了 6 个图标,分别是: CorelDRAWCorel DESIGNERCorel PHOTO-PAINTCorel CAPTURECorel Font ManagerXVL Studio 3DCAD Corel Edition x64 双击运行 CorelDRAW 打开。 经过简单试用,各种操作、功能均没有问题,适合我自己使用,6年前的老笔记本也没有问题。 CorelDRAW2022订阅版mac-安装包 https://wm.makeding.com/iclk/?zoneid=49497 CorelDRAW2022订阅版win-安装包 https://wm.makeding.com/iclk/?zoneid=49498

JAVA 字符串详解

字符串创建有两种基本形式: 1、直接赋值:String s1 = "ab"; 此操作只会在字符串常量池创建一个“ab"字符串 原因:该值能在编译期就直接确定,因此只会在常量池创建。 2、用new String来创建一个字符串 此时分两种情况: (1)字符串常量池中已经有和这个将要创建的字符串的字面量相等(.equal()返回true)的字符串,则只在堆中生成一个字符串对象。 String s1 = "ab"; String s2 = new String(“ab”); 两次ldc都是#2对应的字符串,即两次创建只在常量池中生成一个“ab”。 (2)字符串常量池中没有和这个将要创建的字符串的字面量相等的字符串: 此时会生成两个字符串对象,一个在堆中,一个在常量池。 (在此之前ldc索引只到16,而这里变成17说明常量池中也生成了一个字符串)。 3、字符串拼接 分三种情况: (1)String s10 = "abc" + "d"; 直接用字面量拼接的话,只会在常量池中生成一个字符串对象,且是拼完后的结果,拼之前的两个字符串不会在常量池中创建。 原因:本质上是先进行了字符串拼接操作,得到这个字面量,然后因为编译期就能够确定这个字面量,所以只在常量池创建。 (2)String s4 = new String("ad") + new String("c"); 总共创建了5个字符串对象,“ad“和”c”分别在堆中和在常量池中创建对象。但拼完的“adc”只在堆中而不在常量池中。 原因: 只要使用了构造器或引用方法来创建对象,那么就无法在编译期确定该字符串的值,因此会在运行期在堆中和常量池中创建。 (3)String s17 = new String("abcge") + "k"; 生成四个字符串对象,“abcge”在堆中和字符串常量池中都创建,“k”只在常量池创建,拼完的“abcgek”只在堆中。 (4) String s18 = "ab"; String s19 = "cd"; String s20 = s19 + s18; 此种形式s20只会在堆中创建一个对象”abcd".

C#使用IconFont字体图标的动态加载(&#xe格式转换)

IconFont 矢量字体图标由于文件小,资源多,可任意放大缩小不失真,方便着色等特点,在网页、Winform、WPF中被广泛使得。网页上介绍使用的文件很多,但动态加载并不多,本文将重点介绍利用C#语言动态加载IconFont 字体,以便显示矢量字体图标。 一、IConFont 基本使用参考 下面两遍文章介绍很详细,相关链接如下: 将IconFont的字体图标库转为图片WPF自定义控件与样式(1)-矢量字体图标(iconfont) 二、IConfont 样式 如下图,每个字体图标均有相应的 Unicode 编码. 三、手动写入IconFont字体图标 字体图标,如 &#xe625;表示如下图标,实际上在C#中,其相当于\ue625。通过手写字符串如下: menuItem.Icon ="\ue625"; 上述字符不存在转义错误,可以实现加载并显示图像 四、动态加载 IconFont字体图标 如下示例中,存在以下数据表,其中F_Icon 字段 包含 字体值 上述数据如果动态加载到控件中(如菜单),如果通过拼写字符串,存在转义问题,需要对Unicode 字体进行处理。处理函数如下: public string UnicodeToStr(string unicodeStr) { string outStr = ""; if (!string.IsNullOrEmpty(unicodeStr)) { string[] strlist = unicodeStr.Replace("&#", "").Replace(";", "").Split('x'); try { for (int i = 1; i < strlist.Length; i++) { outStr += (char)int.Parse(strlist[i], System.Globalization.NumberStyles.HexNumber); } } catch (FormatException ex) { outStr = ex.Message; } } return outStr; } 调用该函数代码为:

TI 毫米波雷达学习网站链接整理

欢迎加入毫米波雷达技术交流群,qq群号码:647796034 这些网站主要是培训毫米波雷达基础知识,了解其应用演示,下载相关资料所用,还有TI官网就没有放上来。 1、TI Wiki网站 主要介绍TI的嵌入式芯片,DSP,mmWave Sensors以及相应的技术开发。 Analog | Embedded processing | Semiconductor company | TI.com 2、TI Resource Explorer 提供mmWave Sensors技术文档,应用源码,软件开发工具包等下载。 TI DevTools 3、毫米波雷达e2e英文论坛 Sensors forum - Sensors - TI E2E support forums 4、e2e中文论坛 E2E™ 设计支持 5、毫米波雷达系列培训 (1)TI官网 mmWave radar sensors | TI.com Training Series (2)eeworld论坛 1.1 毫米波传感介绍:FMCW雷达 - 模块1:范围估计-mmWave系列培训-TI教室-EEWORLD大学堂 (3)21ic论坛 mmWave系列培训-mmWave sensors - 德州仪器(TI)官方视频课程培训 6、毫米波雷达芯片及技术介绍 TI 毫米波雷达技术 - 技术概览-TI 毫米波雷达技术介绍-TI教室-EEWORLD大学堂 7、TI官网毫米波雷达应用演示 mmWave Imaging Radar - Automotive Applications | TI.com Video

TI毫米波雷达开发常见问题总结

欢迎加入毫米波雷达技术交流群,qq群号码:647796034 2017年开始接触德州仪器TI发布的三款毫米波雷达AWR1243、AWR1443、AWR1642。主要使用探索汽车防撞雷达以及车内人员检测以及呼吸检测等等毫米波雷达应用(偏了解AWR1243和AWR1642)。现将该系列雷达开发过程中常见问题总结如下: 一、AWR1243 【Radar Studio】 1、RF Powered-up射频使能失败(Dev mode) [error]: [21:34:09] [RadarAPI]: ar1.PowerOn(0, 1000, 0, 0) [21:34:09] [RadarAPI]: Status: Failed, Error Type: RESP TIMEOUT [21:34:09] [RadarAPI]: ar1.SaveSettings('C:\Users\DELL\AppData\Roaming\RSTD\ar1gui.ini') [21:36:01] [RadarAPI]: ar1.RfEnable() [21:36:01] [RadarAPI]: Status: Failed, Error Type: INVALID INPUT 原因:烧录到AWR1243的固件文件加载错误 解决办法:正确的固件程序文件路径: DFP安装文件中也有以下路径的固件版本,是用于AWR1243在功能模式下烧录的固件,开发模式下用上面所附路径下固件,加载错固件会在RF Powered-up这一步报错。 2、RF Powered-up射频使能失败(Functional mode) [errror]: [RadarAPI]: ar1.RfEnable( ) [RadarAPI]: Status: Failed, Error Type: RESP TIMEOUT 解决办法: (1)BSS版本不匹配开发板的版本ES2.0/3.0(注意EVM的版本和固件版本是否匹配)。 (2)Uniflash固件烧录需三个文件:(xwr12xx_xwr14xx_radarss.bin,xwr12xx_masterss.bin,xwr12xx_memswap.bin) (3)开发板电源:TSW1400:5V, 4A以上 ,AWR1243:5V,2.5A以上。 (4)SPI控制前,使用NRST复位,主要为了保持复位后IRQ为高,使雷达以一个较好的启动状态。 3、 RS232串口连接失败 [Error]: Connection failed: Calling_ConnectTarget returned 3

Mock技术_配置json文件

我们需要先编辑一个json文件,用来模拟不同的请求,返回不同的响应。 新建一个格式改为json的文件,然后打开这个文件进行编辑,例如 kr.json 1、kr.json 文件内容 [{ "description":"demo", "request":{ "uri": "/demo" }, "response":{ "text":"Hello,world!" } }] 2、kr.json 文件内容说明 1、description # 是注释(描述),由于json无法写注释,所以提供了用这个key; 2、uri # 是我们这个接口的统一资源标识符,可以根据模拟的接口自行定义; 3、response # 是返回的值; 3、Mock技术_json文件配置不同的请求案例

后端代码生成工具SDP系列五(10分钟写一个学生课程管理系统)

10分钟写一个学生课程管理系统 创建数据库(建议使用mysql8数据库)数据库ER模型及业务简单介绍步骤一:新建数据库步骤二:下载SDP工具和模板文件步骤三:运行SDP工具步骤四:启动前端管理工具并导入模板步骤五:修改数据库配置信息步骤六.1:创建源代码目录,并生成所有的前、后端代码步骤六.2 为什么project页面的“表”有区别步骤六.3 允许生成的文件和表名不一样步骤七.1 查看生成的结果步骤七.2 SDP如何巧妙地实现了定制化业务代码和自动生成代码的融合步骤八 打开后端工程,并执行8.1打开Idea,点击“Open or Import”:8.2 修改数据库配置8.3 启动后端服务 步骤九 测试后端服务步骤十 启动前端步骤十一 开始使用后续:定制化页面、定制化接口 创建数据库(建议使用mysql8数据库) 标题要大,其实十分钟可能都没法将本文仔细看完。10分钟其实指的是实际操作,至于真正地生成所有的代码需要做的可能1分钟都不到。 这个demo仅有几个数据表,其中3个表:学生、课程和选课关系表,参考自《数据库系统概论》第五版 +学习笔记总目录中的“chp3-1.ppt”第30、31、32页。 另外,表、字段都以下划线进行了分割。原因是个人习惯,另外也是为了统一管理,因为前后端通讯时会统一使用下划线规则(ajax规则),而后端java内部会使用驼峰规则,驼峰和ajax规则使用下划线进行区分会更简单易记。 CREATE TABLE sc_dept ( d_no VARCHAR(9) primary key comment '班级编号', d_name VARCHAR(20) UNIQUE comment '班级名称', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人' ) comment '班级'; CREATE TABLE sc_student ( s_no VARCHAR(9) primary key comment '学号', s_name VARCHAR(20) UNIQUE comment '学生姓名', s_password VARCHAR(45) comment '密码', s_sex VARCHAR(2) comment '性别', s_birthday DATETIME comment '生日', d_no VARCHAR(9) comment '班级编号', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人', FOREIGN KEY (d_no) REFERENCES sc_dept(d_no) ) comment '学生'; CREATE TABLE sc_teacher ( t_no VARCHAR(9) primary key comment '教师编号', t_name VARCHAR(20) UNIQUE comment '教师姓名', t_password VARCHAR(45) comment '密码', t_sex VARCHAR(2) comment '性别', t_birthday DATETIME comment '生日', t_is_admin SMALLINT comment '是否为管理员', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人' ) comment '教师'; CREATE TABLE sc_course ( c_no VARCHAR(9) PRIMARY KEY comment '课程编号', c_name VARCHAR(20) comment '课程名称', c_pno VARCHAR(9) comment '先修课程', c_credit SMALLINT comment '学分', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人', FOREIGN KEY (c_pno) REFERENCES sc_course(c_no) ) comment '课程'; CREATE TABLE sc ( s_no VARCHAR(9) comment '学号', c_no VARCHAR(9) comment '课程编号', approve_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '批准时间', approve_t_no VARCHAR(9) comment '批准选课的教师编号', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人', PRIMARY KEY (s_no, c_no), FOREIGN KEY (s_no) REFERENCES sc_student(s_no), FOREIGN KEY (approve_t_no) REFERENCES sc_teacher(t_no), FOREIGN KEY (c_no) REFERENCES sc_course(c_no) ) comment '选课'; CREATE TABLE tc ( t_no VARCHAR(9) comment '教师编号', c_no VARCHAR(4) comment '课程编号', updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间', updated_by VARCHAR(45) comment '更新人', PRIMARY KEY (t_no, c_no), FOREIGN KEY (t_no) REFERENCES sc_teacher(t_no), FOREIGN KEY (c_no) REFERENCES sc_course(c_no) ) comment '执课'; 数据库ER模型及业务简单介绍 系统有3个角色:学生、教师、管理员(也是教师,但是属性t_is_admin为1)。

Scala基础教程--18--集合(二)

Scala基础教程–18–集合(二) 章节目标 掌握Iterable集合相关内容.掌握Seq集合相关内容.掌握Set集合相关内容.掌握Map集合相关内容.掌握统计字符个数案例. 1. Iterable 1.1 概述 Iterable代表一个可以迭代的集合, 它继承了Traversable特质, 同时也是其他集合的父特质. 最重要的是, 它定义了获取迭代器(iterator)的方法: def iterator: Iterator[A], 这是一个抽象方法, 它的具体实现类需要实现这个方法, 从而实现迭代的返回集合中的元素. 1.2 分类 Traversable提供了两种遍历数据的方式: 通过iterator()方法实现, 迭代访问元素的功能. 这种方式属于主动迭代, 我们可以通过hasNext()检查是否还有元素, 并且可以主动的调用next()方法获取元素, 即: 我们可以自主的控制迭代过程. 通过foreach()方法实现, 遍历元素的功能. 这种方式属于被动迭代, 我们只提供一个函数, 并不能控制遍历的过程, 即: 迭代过程是由集合本身控制的. 1.3 案例一: 遍历集合 需求 定义一个列表, 存储1, 2, 3, 4, 5这五个数字.通过iterator()方法遍历上述的列表.通过foreach()方法遍历上述的列表. 参考代码 //案例: 遍历集合元素. object ClassDemo01 { def main(args: Array[String]): Unit = { //1. 定义一个列表, 存储1, 2, 3, 4, 5这五个数字. val list1 = (1 to 5).

Scala基础教程--20--Akka

Scala基础教程–20–Akka 章节目标 理解Akka并发编程框架简介掌握Akka入门案例掌握Akka定时任务代码实现掌握两个进程间通信的案例掌握简易版spark通信框架案例 1. Akka并发编程框架简介 1.1 Akka概述 Akka是一个用于构建高并发、分布式和可扩展的基于事件驱动的应用工具包。Akka是使用scala开发的库,同时可以使用scala和Java语言来开发基于Akka的应用程序。 1.2 Akka特性 提供基于异步非阻塞、高性能的事件驱动编程模型内置容错机制,允许Actor在出错时进行恢复或者重置操作超级轻量级的事件处理(每GB堆内存几百万Actor)使用Akka可以在单机上构建高并发程序,也可以在网络中构建分布式程序。 1.3 Akka通信过程 以下图片说明了Akka Actor的并发编程模型的基本流程: 学生创建一个ActorSystem通过ActorSystem来创建一个ActorRef(老师的引用),并将消息发送给ActorRefActorRef将消息发送给Message Dispatcher(消息分发器)Message Dispatcher将消息按照顺序保存到目标Actor的MailBox中Message Dispatcher将MailBox放到一个线程中MailBox按照顺序取出消息,最终将它递给TeacherActor接受的方法中 2. 创建Actor Akka中,也是基于Actor来进行编程的。类似于之前学习过的Actor。但是Akka的Actor的编写、创建方法和之前有一些不一样。 2.1 API介绍 ActorSystem: 它负责创建和监督Actor 在Akka中,ActorSystem是一个重量级的结构,它需要分配多个线程.在实际应用中, ActorSystem通常是一个单例对象, 可以使用它创建很多Actor.直接使用context.system就可以获取到管理该Actor的ActorSystem的引用. 实现Actor类 定义类或者单例对象继承Actor(注意:要导入akka.actor包下的Actor)实现receive方法,receive方法中直接处理消息即可,不需要添加loop和react方法调用. Akka会自动调用receive来接收消息.【可选】还可以实现preStart()方法, 该方法在Actor对象构建后执行,在Actor生命周期中仅执行一次. 加载Actor 要创建Akka的Actor,必须要先获取创建一个ActorSystem。需要给ActorSystem指定一个名称,并可以去加载一些配置项(后面会使用到)调用ActorSystem.actorOf(Props(Actor对象), “Actor名字”)来加载Actor. 2.2 Actor Path 每一个Actor都有一个Path,这个路径可以被外部引用。路径的格式如下: Actor类型路径示例本地Actorakka://actorSystem名称/user/Actor名称akka://SimpleAkkaDemo/user/senderActor远程Actorakka.tcp://my-sys@ip地址:port/user/Actor名称akka.tcp://192.168.10.17:5678/user/service-b 2.3 入门案例 2.3.1 需求 基于Akka创建两个Actor,Actor之间可以互相发送消息。 2.3.2 实现步骤 创建Maven模块创建并加载Actor发送/接收消息 2.3.3 创建Maven模块 使用Akka需要导入Akka库,这里我们使用Maven来管理项目, 具体步骤如下: 创建Maven模块. 选中项目, 右键 -> new -> Module -> Maven -> Next -> GroupId: com.itheima ArtifactId: akka-demo next -> 设置"

Scala基础教程--19--Actor

Scala基础教程–19–Actor 章节目标 了解Actor的相关概述掌握Actor发送和接收消息掌握WordCount案例 1. Actor介绍 Scala中的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习Scala Actor的目的主要是为后续学习Akka做准备。 1.1 Java并发编程的问题 在Java并发编程中,每个对象都有一个逻辑监视器(monitor),可以用来控制对象的多线程访问。我们添加sychronized关键字来标记,需要进行同步加锁访问。这样,通过加锁的机制来确保同一时间只有一个线程访问共享数据。但这种方式存在资源争夺、以及死锁问题,程序越大问题越麻烦。 线程死锁 1.2 Actor并发编程模型 Actor并发编程模型,是Scala提供给程序员的一种与Java并发编程完全不一样的并发编程模型,是一种基于事件模型的并发机制。Actor并发编程模型是一种不共享数据,依赖消息传递的一种并发编程模式,有效避免资源争夺、死锁等情况。 1.3 Java并发编程对比Actor并发编程 Java内置线程模型Scala Actor模型"共享数据-锁"模型 (share data and lock)share nothing每个object有一个monitor,监视线程对共享数据的访问不共享数据,Actor之间通过Message通讯加锁代码使用synchronized标识死锁问题每个线程内部是顺序执行的每个Actor内部是顺序执行的 注意: scala在2.11.x版本中加入了Akka并发编程框架,老版本已经废弃。 Actor的编程模型和Akka很像,我们这里学习Actor的目的是为学习Akka做准备。 2. 创建Actor 我们可以通过类(class)或者单例对象(object), 继承Actor特质的方式, 来创建Actor对象. 2.1 步骤 定义class或object继承Actor特质重写act方法调用Actor的start方法执行Actor 注意: 每个Actor是并行执行的, 互不干扰. 2.2 案例一: 通过class实现 需求 创建两个Actor,一个Actor打印1-10,另一个Actor打印11-20使用class继承Actor实现.(如果需要在程序中创建多个相同的Actor) 参考代码 import scala.actors.Actor //案例:Actor并发编程入门, 通过class创建Actor object ClassDemo01 { //需求: 创建两个Actor,一个Actor打印1-10,另一个Actor打印11-20 //1. 创建Actor1, 用来打印1~10的数字. class Actor1 extends Actor { override def act(): Unit = for (i <- 1 to 10) println("

centos6 yum源失效解决方法

今天看到服务器提示有漏洞需要更新,在执行更新命令的时候一直报错,因为CentOS 6操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。导致不能正常更新,接下来吾爱编程为大家介绍一下Centos6 yum源失效解决方法,有需要的小伙伴可以参考一下: 1、背景信息: 2020年12月2日起,centos官方停止了对centos6的所有更新并且下架了包括官方所有的centos6源,目前阿里、163、清华等centos6源已无法使用。 如果非要用centos6的话就只能使用vault源,国内的vault源的话: https://mirrors.tuna.tsinghua.edu.cn/centos-vault/、http://mirrors.aliyun.com/centos-vault/ 2、解决方法: 2.1备份文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.2更改CentOS-Base.repo文件 vim /etc/yum.repos.d/CentOS-Base.repo 更改内容如下 [base] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.aliyun.com/centos-vault/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/centos/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.aliyun.com/centos-vault/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/centos/RPM-GPG-KEY-CentOS-6 [extras] name=CentOS-$releasever enabled=1 failovermethod=priority baseurl=http://mirrors.aliyun.com/centos-vault/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/centos/RPM-GPG-KEY-CentOS-6 [centosplus] name=CentOS-6.10 - Plus - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos-vault/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos-vault/centos/RPM-GPG-KEY-CentOS-6 [contrib] name=CentOS-6.10 - Contrib - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos-vault/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos-vault/centos/RPM-GPG-KEY-CentOS-6 2.2更改epel.repo文件 vim /etc/yum.repos.d/epel.repo 更改内容如下 [epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://mirrors.

L1D2:C语言之数据类型、常量、变量及运算符

一、C语言数据类型分类 C语言数据类型大致分类如下图所示: 1、 char类型(1字节):范围-128 ~ 127,-128补码为1000000,char前面加unsigned的话变成无符号型,范围变成0 ~ 255。(编程时一定要注意数据范围,因为数据越界在程序中是不会报错的,加<limits.h>头文件可以查看各个变量的界限) 2、 short类型(2字节):有符号时范围,-32768~32767 无符号时的范围:0~65535 3、 int类型(4字节):分有无符号型 有符号范围:-231~231-1 无符号范围:0-2^32-1 4、 long类型(4字节)等同于int么 5、long long类型(8字节 64位) 6、float类型(4字节):单精度浮点 7、double类型(8字节):双精度浮点 除此之外,还有bool类型,此类型需要添加头文件<stdbool.h>(本质情况是bool不需要加头文件,而是true和false需要这个头文件),非0为真。 二、数据类型强制转换 1、 强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来 2、 强制类型转换符是一种不安全的转换,一般都是将高级类型转换成低级类型,要丢失数据的精度 3、 强制类型转换并不改变表达式本身的数据类型 如下程序: #include <stdio.h> int main(int argc , char *argv[]) { int a = 3; int b = 2; float div = 0; div = (float)a / (float)b; printf("value b is :%f\n",div); return 0; } 如果不对a、b进行强制转换输出结果为1,强制转换后输出结果为1.5 三、常量 3.1基本数据类型的常量 1、 整型常量:即整数

JAVA-信息录入

本题要求实现一个可以实现学生姓名年龄多次录入的系统,并能够打印出来。 解析:题目就一句话,这句话包含了很多要求。 1、键盘录入学生姓名和年龄(键入的信息包括姓名和年龄,可以用String来表示) 2、实现多次录入学生信息(循环录入或者循环方法录入。多次是多少次?是用户可以指定次数!) 3、录入完成后自动打印(获取录入信息并打印) 解法: 1、可以创建一个student类,在类里保存name、age、创建写入和读取name和age的方法。 2、在主程序里调用studen类功能。 代码: //student.java public class student { String name;//创建名字信息 String age;//创建年龄信息 public student(){}//无参方法 public student(String name,String age){ this.name = name; this.age = age; }//有参方法 public void setname(String name){ this.name = name; }//写入姓名 public String getname(){ return name; }//获取姓名 public void setage(String age){ this.age = age; }//写入年龄 public String getage(){ return age; }//获取年龄 } //test.java import java.util.ArrayList; import java.util.Scanner; public class test { public static void main(String[] args) { ArrayList<student> arrlist = new ArrayList<>(); Scanner n = new Scanner(System.

虚拟自动取款机ATM设计(C语言)

1.设计一个模拟自动取款机ATM,有常用的功能 2.常用的功能有:用户输入密码登录界面;取款界面;取款后的取款金额以及剩余显示,退出功能等等 3.程序执行的命令包括:(1)输入正确密码进入主登录页面 (2)执行取款界面 (3)显示取款金额以及剩余金额 (4)退出系统界面 #define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_SECURE_NO_DEPRECATE 1 #define _CRT_NONSTDC_NO_DEPRECATE 1 #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { char key, Cmoney;//定义变量 int password, zpassword = 123456;//定义密码与密码的正确值,默认正确密码为123456 int i = 1; int a = 1000;//默认最初的金额为1000 while (1) { do { system("cls");//清屏 printf("********************欢迎来到模拟ATM取款机**********************\n"); printf("\n"); printf(" **********Please select key(请选择)**************\n"); printf("\n"); printf(" **********1.Password(密码验证)***********\n"); printf("\n"); printf(" **********2.Get money(取款)***********\n"); printf("\n"); printf(" **********3.Return(退出)*************\n"); printf("\n"); printf("********************欢迎来到模拟ATM取款机**********************\n"); key = getch();//key的值等于刚刚键盘录入的值 } while (key !

WinSCP 连接 Ubuntu,显示拒绝访问。

问题 WinSCP 连接 Ubuntu,显示拒绝访问。 出现该问题的原因很多,我的原因是ssh服务失效了。 解决方法: 安装ssh服务端 sudo apt-get install openssh-server #安装ssh服务端 打开ssh配置文件 sudo vi /etc/ssh/sshd_config 修改里面的参数,把几个的参数改成yes。 PermitRootLogin yes PermitEmptyPasswords yes PermitRootLogin yes 重启ssh服务 service sshd restart 重启服务器 sudo reboot

sysbench数据库压测工具详解与实战

sysbench是一个基于LuaJIT脚本的多线程基准测试工具。2004年由Peter Zaitsev(Percona公司创始人)开发,在其0.5版本中可以使用Lua脚本实现OLTP测试。2016年重构了sysbench代码,并在2017年2月针对新的硬件环境发布了1.0版本,优化了测试性能(是0.5版本的6倍,可以压测60万TPS)和可扩展性(无Mutex、无共享计数器、多线程扩展性更强)。 sysbench不仅可用于数据库基准测试,也可用于服务器的其他工作负载基准测试。本文主要以1.0版本为例介绍sysbench。在新的Release版本下,sysbench新增与优化了如下一些特性。 可以收集有关速率和延迟时间的统计数据,包括延迟百分比和直方图。低开销,可以执行数以千计的并发线程,能够每秒产生和跟踪数亿个事件。通过Lua脚本轻松实现了预定义的钩子,以创建新的测试基准。可以用作通用的Lua脚本解释器,只需在Lua脚本中将“#!/usr/bin/lua”替换为“#!/usr/bin/sysbench”即可。 1 安装sysbench 1.1 yum安装 执行如下命令,设置yum repo仓库/etc/yum.repos.d/akopytov_sysbench.repo,并直接使用yum安装。 # RHEL/CentOS [root@localhost~]# curl -s https://packagecloud.io/install/repositories/akopytov/ sysbench/script.rpm.sh | sudo bash [root@localhost~]# sudo yum -y install sysbench 1.2 RPM包安装 手动下载RPM包来安装(仅限RHEL/CentOS),但是在安装sysbench前需要先安装依赖包,然后再安装该RPM包。 [root@localhost~]# yum install mysql-libs postgresql-libs -y [root@localhost~]# rpm -Uvh sysbench-1.0.7-13.el6.x86_64.rpm --nodeps 由于sysbench编译时依赖libmysqlclient动态链接库,所以要选择对应版本的sysbench,或者使用软链接: [root@localhost~]# ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/ libmysqlclient_r.\ so.16 1.3 编译安装 安装依赖的编译环境: # RHEL/CentOS [root@localhost~]# yum -y install make automake libtool pkgconfig libaio-devel vim-\ common git ## For MySQL support, replace with mysql-devel on RHEL/CentOS 5

gitlab开机启动|启动 停止 重启

修改配置后的初始化 gitlab-ctl reconfigure 启动 sudo gitlab-ctl start 停止 sudo gitlab-ctl stop 重启 sudo gitlab-ctl restart 开机启动 systemctl enable gitlab-runsvdir.service 禁止开机自启动 systemctl disable gitlab-runsvdir.service

浅谈java开启异步线程的几种方法(@Async,AsyncManager,线程池)

浅谈java开启异步线程的几种方法 整体描述实现方法一、注解@Async1. 添加注解2. 创建异步方法Service和实现类3. 调用异步方法 二、AsyncManager1. 创建AsyncManager类2. 创建一个耗时的操作类3. 执行异步操作 三、线程池1. 创建线程池2. 创建一个耗时的操作类3. 执行线程池 总结 整体描述 在java中异步线程很重要,比如在业务流处理时,需要通知硬件设备,发短信通知用户,或者需要上传一些图片资源到其他服务器这种耗时的操作,在主线程里处理会阻塞整理流程,而且我们也不需要等待处理结果之后再进行下一步操作,这时候就可以使用异步线程进行处理,这样主线程不会因为这些耗时的操作而阻塞,保证主线程的流程可以正常进行。 最近在项目中使用了很多线程的操作,在这做个记录。 实现方法 线程的操作,是java中最重要的部分之一,实现线程操作也有很多种方法,这里仅介绍几种常用的。在springboot框架中,可以使用注解简单实现线程的操作,还有AsyncManager的方式,如果需要复杂的线程操作,可以使用线程池实现。下面根据具体方法进行介绍。 一、注解@Async springboot框架的注解,使用时也有一些限制,这个在网上也有很多介绍,@Async注解不能在类本身直接调用,在springboot框架中,可以使用单独的Service实现异步方法,然后在其他的类中调用该Service中的异步方法即可,具体如下: 1. 添加注解 在springboot的config中添加 @EnableAsync注解,开启异步线程功能 package com.thcb.boot.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; /** * MyConfig * * @author thcb */ @Configuration @EnableAsync public class MyConfig { // 自己配置的Config } 2. 创建异步方法Service和实现类 使用service实现耗时的方法 Service类: package com.thcb.execute.service; import org.springframework.scheduling.annotation.Async; /** * IExecuteService * * @author thcb */ public interface IExecuteService { /** * 一些耗时的操作,使用单独线程处理 * 这里就简单写了一个sleep5秒的操作 */ @Async public void sleepingTest(); } Service实现类:

梦中情盘!基于NextCloud搭建个人私有云!

目录 一.事情是这样的 二.调研与架构设计 1.调研 2.实现目标 3.架构设计 三.硬件 四.软件 五.过程 1.安装docker 2.安装mysql 3.安装nextcloud 4.挂载外部存储 5.内网穿透 六.FAQ 一.事情是这样的 基本上使用过市面上的所有网盘软件:某度网盘、某雷云、某里云、某果云、google云盘等,但是没大部分遇到了如下这些问题: 二.调研与架构设计 1.调研 肝了3晚,终于把这套搞定了!调研了市面上一些开源软件、seafile、owncloud、 nextcloud等;最终让我选定nextcloud 的是因为它官网的这段话: 重新夺回控制权!!! 2.实现目标 无限的存储容量(可低成本扩展)。外网和内网都可访问(可正常速率上传下载)。数据的永久储存。(磁盘阵列) 3.架构设计 拓扑图 软硬件环境 三.硬件 dell R620 服务器 window server 2012;80G内存;8T 硬盘;一个阵列卡。破笔记本刷成了centos 7 8G内存;120G硬盘。 百兆wifi 一个。移动硬盘一个,已格式化FAST 32。 四.软件 用到的主要软件也就是下面这几个 : 官网:Homepage - Nextcloud 官网:Home - Docker 官网: Sunny-Ngrok内网转发内网穿透 - 国内内网映射服务器 五.过程 安装主要分为5部分:安装docker、安装mysql、安装nextcloud、挂载外部存储、内网穿透。 1.安装docker yum install docker systemctl status docker 2.安装mysql yum install docker 非必须: vi /etc/docker/daemon.

河南高考录取统计分析

公开媒体资料显示2022年河南高考人数再创新高,达到125万人,稳居国内各省市第一名。这些数据当中包括对口招生、专升本的人数,实际参加普通高考的人数要低于这个数据,据统计,每年参加普通高考的人数在60-80万人之间。考生人数,本科录取率这些数据关乎着每一位考生,这些数据在志愿填报的时候是一个重要的参考依据。俗话说考的好,不如报的好。只有在充分了解历年数据的基础上,才能根据自己的分数进行合理的志愿填报,做到一分也不浪费。 【历年一分一段表获取链接】 根据近几年一分一段表的数据统计,考生人数基本呈现逐年递增的趋势,这个结果和官方发布的高考人数数据的趋势基本保持一致。其中理科考生人数要比文科考生人数多大约10万余人。 从数据可以看出来多数同学在分科的时候选择理科,一方面和个人的兴趣有关,另一方面其实和录取率也有关。 从录取人数来看,文科考生的录取人数有小幅的上升趋势,但是录取率确持续走低,从数据层面来看,是因为考生人数增加的量级,要远高于每年高校的录取人数。尽管文科的录取人数有递增趋势,但是架不住考生人数的增长,从而拉低了录取率。理科录取人数也有增长的趋势,但是录取率稳定在45%—50%的区间,相对于文科的录取率是偏高的,这也能解释为什么理科的选择人数是高于文科。 【备注:2017年后,没有本科三批,2016年的二本录取人数实际包含了二本和三本的总人数】 数据来源:招生办公开资料统计 在传统观念里面,读本科要比对专科“有前途”。 从2018-2020的文科本科录取数据来看,文科本科的录取人数基本保持稳定7万人,但是考生的人数是历年增加的,这也意味着考生能上本科的难度在提升。 本科一批的录取人数稳定在16000人,录取率在5%左右。 本科二批的录取人数稳定在6万人,录取率在20%左右。 从2018-2020的理科录取数据来看,理科本科的录取人数基本稳定在20w人。本科一批和本科二批的录取率呈现相反的趋势,从图上可以直观看出,较于上一年,如果一本录取率是上升,二本的录取率则是下降的,这和每年分数线的划定有关。 河南作为一个人口大省、农业大省,全省只有一所211大学。考生想考好学校,只能往省外考。一般来说,一所高校在本地的招生计划人数是最多的,这也意味着河南的考生想考好学校的难度是要高于其他地区的。 文科的“985”录取人数在900人左右,录取率千分之三。 “211”的录取人数在3000人左右,录取率1%。 理科的“985”录取人数在6000人左右,录取率1%。 “211”的录取人数在17000人左右,录取率4%。 这个难度,放眼全国应该是数一数二的。 如果高考是一场游戏,那么这个游戏的规则就是录取率。 作为一名普通的考生,能够做的不是吐槽“游戏”太难,而应该是在考前练好自身“技能”,考后合理填报志愿,不负自己努力得到的每一分,考上自己心仪的学校。 尽管每年的分数线在变化,除非有大规模的扩招,否则每年高校的录取人数基本是稳定的。根据目前平行志愿的录取原则,考生知道自己的排名,再根据学校的近几年的录取位次,基本能够锁定自己能上的学校。 祝愿每位考生都能心想事成,成功上岸! 2019-2021院校录取统计以及一分一段表电子版资料获取链接: http://smartgaokao.cn/index/index.html

elementui中设置背景色、鼠标经过颜色冲突失效

前言:刚毕业,一切都在慢慢学习的过程中,记录上班遇到的问题,随缘发布。 今日问题:自定义elementui表格除表头的背景颜色后,原本设置的鼠标滑过某一行的颜色失效了。 //利用cell-style设置单元格背景颜色 <el-table :data="tableData" style="width: 100%" :cell-style="{backgroundColor: '#fefefe'}" :header-cell-style="{ backgroundColor: '#f2f2f2' }"> </el-table> //鼠标经过,当前行的颜色 body tr:hover>td { background-color: #f2f2f2; } .el-table__body tr.current-row>td { background-color: #f2f2f2; } 解决方法:设置除表头外的单元格背景颜色换为`:row-style`即可。 //利用cell-style设置单元格背景颜色 <el-table :data="tableData" style="width: 100%" :row-style="{backgroundColor: '#fefefe'}" :header-cell-style="{ backgroundColor: '#f2f2f2' }"> </el-table> 也不知道为什么使用cell-style不可以,请问有大佬可以解惑一下吗?

DOCKER WSL2错误,更新安装包地址

我们安装Docker Desktop的时候,他会问我们是否需要使用WSL2(基于Windows的Linux子系统),如果我们不适用,就会使用Hyper-v虚拟机运行,不过相比于虚拟机,子系统在性能方面更加出色。在我们选择使用WSL2之后,并且我们也确定打开了如下图所示的Windows功能(如果没有打开,请先百度如何打开wsl。) 还是会出现一个下图所示的报错。 解决报错 更加报错提示,猜测可能是我们使用的wsl2版本老了,需要我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开。 更新包下载链接。 ———————————————— 版权声明:本文为CSDN博主「寻_觅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_39611230/article/details/108625840

[QT]实现点击按钮弹出图片的效果

点击按钮弹出图片的实现 void MainWindow::btnTest() { QLabel* labelImage = new QLabel(this, Qt::Dialog |Qt::WindowCloseButtonHint); /* 去掉?按钮 */ labelImage->setWindowTitle("图片"); QString imagePath = "B:\\Image\\JPG\\3.jpg"; QFileInfo file(imagePath); if(file.exists()) { QImage image; image.load(imagePath); /* 下面这两句代码是Label跟随图片大小变化 */ //ret->resize(QSize(image.width(), image.height())); //ret->setPixmap(QPixmap::fromImage(image)); /* 这两句是图片跟随label大小变化 */ labelImage->resize(300,300); labelImage->setPixmap(QPixmap::fromImage(image.scaled(300, 300, Qt::KeepAspectRatio))); } else{ qDebug() << "未找到该图片"; } labelImage->show(); } 效果 --------------------------------------------------------分割线---------------------------------------------------------- 修改:(20220628) 上述程序中labelImage作为一个指针,在关闭时并没有释放,当打开关闭很多次时,内存泄漏现象就很明显,现修改程序如下: 1. 将指针定义在函数外部,在头文件中定义QLabel* labelImage; 2. 按钮槽函数将->改为.,并且为labelImage安装事件过滤器,在程序中捕获labelImage的关闭事件,从而销毁指针; 按钮槽函数修改如下: void MainWindow::on_pushButton_clicked() { QString imagePath = "D:\\AccountFile\\Desk\\build-Test-Desktop_Qt_5_13_0_MSVC2017_64bit-Debug\\debug\\Drunk_Kobayashi_Python.png"; QFileInfo file(imagePath); if(!file.exists()) return; QImage image; image.

酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文源码齐全)

下载地址:酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文源码齐全)-Web服务器文档类资源-CSDN下载 ├── java swing mysql实现的酒店管理系统项目源码 │ ├── 截图 │ │ ├── 0.png │ │ ├── 01.png │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.

Linux 下 history 的使用小技巧

目录 HISTORY 的工作原理常用方法HISTORY的优化设置审计追踪 HISTORY 的工作原理 Linux 命令的历史记录,会持久化储存,默认储存位置在 ~/.bash_history 文件中保存。在做持久化前历史命令是储存在缓冲区中,等到你推出登入时或换 shell 环境时会进行统一的记录。 常用方法 命令 / 参数解析history查看历史命令-w将缓存区中的历史命令录入到文件中-c清楚缓存区的历史命令 HISTORY的优化设置 配置文件位置:/etc/profile 在线生效:source /etc/profile # 设置历史记录多少条 HISTSIZE=1000 # 设置缓存的历史记录到此文件 HISTFILE=~/.bash_history # 设置文件记录多少条记录 HISTFILESIZE=10000 # 设置查看历史记录时显示时间 HISTTIMEFORMAT="%F %T" # 设置这些命令不记录到历史记录 HISTGNORE="ls:history:hostname" export HISTSIZE HISTFILE HISTFILESIZE HISTTIMEFORMAT HISTGNORE 审计追踪 HISTSIZE=1000 HISTFILESIZE=10000 USER_IP=`who -u -m | awk '{print $NF}' | sed 's/[()]//g'` USER=`whoami` HISTTIMEFORMAT="[%F %T] [$USER] [$USER_IP] " 文章推荐1 文章推荐2

拼多多电商API接口详情

测试接口:https://console.open.onebound.cn/console/index.php?i=Anzexi item_get - 根据ID取商品详情: 测试数据部分截图: item_search - 根据关键词取商品列表: 测试数据部分截图: 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认yes,将调用缓存的数据,速度比较快result_typeString否[json,jsonu,xml,serialize,var_export]返回数据格式,默认为json,jsonu输出的内容中文可以直接阅读langString否[cn,en,ru]翻译语言,默认cn简体中文versionString否API版本 item_search_data-获得搜索词统计: 测试数据部分截图: 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认yes,将调用缓存的数据,速度比较快result_typeString否[json,jsonu,xml,serialize,var_export]返回数据格式,默认为json,jsonu输出的内容中文可以直接阅读langString否[cn,en,ru]翻译语言,默认cn简体中文versionString否API版本 API 工具 API SDK 调用示例 API SDK下载 API测试工具 获得此API

Material Design组件 - 使用BottomSheet展现扩展内容(一)

Material Design组件 - 使用BottomSheet展现扩展内容(一)) BottomSheet历史Bottom Sheets的展现方式非模态BottomSheetBehavior BottomSheet历史 BottomSheetBehavior最早是在Android的Design支持库中出现的,这个库中提供了许多Material Design 组件,BottomSheetBehavior即是对Material Design中Sheets: bottom即底部扩展菜单的一种实现,是对Material Design的支持,正如Material Design里面的Sheets: bottom中写的那样,其可以在屏幕的底部为整个画面提供一个补充视图增强用户体验性 BottomSheet的实现首次出现是在com.android.support.design-23.2.0的支持库中,而现在已经被Jetpack的AndroidX吞并,并且官方也推荐我们将项目迁移到AndroidX,而不是使用以前的支持库,因为以前的支持库已经不更新维护了,所以我们会直接从AndroidX的BottomSheet来学习 上表左边的是旧的支持库,右边的是AndroidX的支持库,其在com.google.android.material:material库中,所以我们使用会引用这个库来使用,另外Jetpack Compose里面也有对其的支持,本篇文章主要还是以原始XML的形式来进行说明,想要Compose的可以看BottomSheetScaffold API Reference和ModalBottomSheetLayout API Reference自行先学习下哈,后续我也会对这方面的内容进行学习分享 Bottom Sheets的展现方式 首先我们先来了解一下官方口中的Bottom Sheets到底是什么样的,我们在Material Design的BottomSheet描述中可以看到,BottomSheet有三种类型,分别是 Standard bottom sheetsModal bottom sheetsExpanding bottom sheets Standard bottom sheets是最基本的bottom sheet,其就是在底部可以展开一个菜单来,并且你的主页面不会被遮挡,也能在展开菜单的时候使用者也能与主页面进行正常交互 Modal bottom sheets是模态化的bottom sheet,其就和Dialog类似,只是是从底部可以滑动出现,展开的时候会将主页面遮挡,并且其展开的时候,使用者就不能与主页面进行交互了 Expanding bottom sheets提供了一个小小的展开画面,用户可以点击这个画面进而出现一个扩展页面来 然而,第三种BottomSheet官方并没有都提供给我们开箱即用的组件,只提供给我们了两种,Standard bottom sheets对应了AndroidX中material库里的BottomSheetBehavior类 Modal bottom sheets对应了库里的BottomSheetDialog和BottomSheetDialogFragment其两者分别继承自AppCompatDialog和AppCompatDialogFragment,其关系类似于AppCompatDialog和AppCompatDialogFragment,在BottomSheetDialogFragment中也会去给我们创建BottomSheetDialog实例,让我们能够更好更便捷的使用BottomSheet 至于Expanding bottom sheets,并没有找到有提供给我们直接使用的组件,然而如果真要使用这种效果,我们可以参考Material的github上的OWL示例来实现,不过在实现这个之前,我建议可以先从最基本的BottomSheet来学习 非模态BottomSheetBehavior 我们先来学习BottomSheetBehavior,即非模态的组件,我们可以先来看看效果, 接下来我们实现它,我们直接使用官方为我们提供的开箱即用组件BottomSheetBehavior来做,首先我们肯定先要创建一个XML布局文件,将我们的主页面先画上,那么这边会存在一个问题,我们的顶层布局是不是可以随便使用呢?答案是不行的,这边官方为我们提供的组件都有一个特点,其需要作为CoordinatorLayout的子视图来使用,对CoordinatorLayout有所了解的同学看到这个Behavior肯定不陌生,所以其离不开CoordinatorLayout布局 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="

k8s ingress-controller处理流程及原理

一、这都是什么 ingress:路由转发规则集合,k8s的默认资源 service:提供服务对外暴露功能,模式有4种:ClusterIP(这个是集群内部访问),(nodeport,loadbalance,externalNAME)这三个可以对外提供服务 ingress-controller:实际规则转发工作者, ingress-controller并不是k8s的默认资源 二、他们的工作原理 1. ingress-contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。 2. 而这个ingress规则写明了哪个域名对应k8s集群中的哪个service,然后再根据ingress-controller中的nginx配置模板,生成一段对应的nginx配置。 3. 然后再把该配置动态的写到ingress-controller的pod里,该ingress-controller的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到nginx的配置文件中,然后reload一下,使其配置生效。以此来达到域名分配置及动态更新的效果。 4. 通过ingress-controller访问后端的请求是不走kube-proxy的代理的,也就是下图中的①③不走kube-proxy,②④还是走kube-proxy 5. ingress-controller有很多种:Kubernetes-Ingress-Controller、NGINX Ingress Controller、Kong Ingress、Traefik、HAProxy Ingress等10多种,用那种需要结合自身实际需求去选择,无特殊场景一般用k8s-ingress-controller 三、访问流程图 流程分解: <>里面代表资源类型,无此符号的部分是这个资源的名字 图中实线部分是实际访问流程,虚线部分是路由规则的维护 ①企业级应用场景最常用的方式就是用外层4层或7层负载来保证后端服务的可用性,如图是负载nginx这个ingress-controller的svc ②nginx-controller有自己的service,用的是nodeport模式对外暴露端口,关联后端ingress-controller ③ingress-controller拿到请求后转发给后端的service ④service通过标签选择器,找到后面对应的pod *⑤ingress里面test.k8s.com这个域名的路由规则 *⑥ingress的规则会通过k8s-apiserver对外提供查询 *⑦ingress-controller查询k8s-apiserver拿到ingress路由规则,并更新在自己的配置文件里面 四、配置实战 1.ingress-controller安装通过kuboard集成插件完成,这里不再赘述,网上文章也很多,可以参考 kuboard安装ingress-controller参考链接:https://kuboard.cn/learning/k8sintermediate/service/ingress.html#实战-使用-ingress-访问-web-应用 2.创建ingress+svc+deployment,并关联ingress-controller [root@k8s-master ingress]# vim app-nginx.yaml ##应用的yaml文件 apiVersion: apps/v1 kind: Deployment ##资源类型deployment metadata: name: nginx-app ##pod名称 namespace: test ##名称空间 spec: replicas: 2 ##副本数 selector: matchLabels: ##标签选择器 app: nginx template: ##以下是pod模板 metadata: labels: app: nginx ##给pod作标签 spec: containers: - name: nginx ##容器名称 image: nginx:v1.

MTK Android 11 预装可卸载APP

客户突然有个又要预装又要系统权限,还要可以卸载的APP的需求,在网上找了一大堆,几乎都是什么复制到/data/data/目录然而又说的不详细。本人终天找到了蛛丝马迹。MTK android11其实很简单。想知道可以联系我 V1g6a2V2aW5DaGVuXzE5MDU=