Rk3588 Rk3588s对比

RK3588是瑞芯微最新推出的八核旗舰芯片,专为8K场景应用设计,性能十分出色,可广泛应用于ARM集群服务器、边缘计算、视频编解码、车载电子、PC等领域。RK3588的拓展接口也十分丰富,非常适合行业产品定制。RK3588S是RK3588的低配版,其区别类似RK3568跟RK3566的区别,设计框架基本一致,面向的细分领域不同。RK3588可以说是目前接口最丰富的通用型ARM SoC芯片,芯片性能也十分均衡,视频解码能力十分突出,在影音领域将会有广泛的应用,丰富的接口也十分适合行业客户的定制开发。因此,RK3588是面向高端的行业应用,而RK3588S框架和RK3588类似,但是接口较少,主要面向消费类的产品。RK3588S的视频输入输出接口,type-c接口,SATA接口,RJ45网口均比RK3588少,并且RK3588S不支持PCI-E拓展,这使得二者的定位明显的区分。 考虑到RK3588跟RK3588S的堆叠设计比较复杂,建议大家多考虑核心板加底板的产品形态,推荐使用B2B连接器,目前连接器合高已经可以控制到3mm,连接器本身对PCBA的厚度影响已经很小。核心板产品对降低多项目的开发成本,包括后期的库存成本都有很大的作用。 RK3588封装尺寸为2323mm,RK3588S封装尺寸为1717mm。RK3588更适合对产品体积限制不大的行业用品,RK3588S则更适合便携式设备。总的来说,RK3588跟RK3588S二者的性能是一致的,如果使用场景比较单一,对接口要求并不复杂,建议考虑RK3588S,这样可以有效控制成本。反之,如果是需要跨场景使用,对接口要求比较复杂的产品,建议首选RK3588。以RK3588的性能设计来看,可以满足未来五年的迭代需求,非常适合AIoT应用。

8 种CSS实现内容居中的方法

关于CSS实现内容居中的方式有很多种,在今天这篇文章里,我给大家整理了8种实现内容居中的方式,希望这些方法对你学习和使用CSS进行开发有帮助。 1. Flex 可能是当今最流行和最简单的居中方式,我可以放心地承认,当我可以使用 text-align: center 代替时,我使用它来对齐段落。 .flexbox-row { display: flex; flex-direction: row; /* default value */ justify-content: center; /* x-axis */ align-items: center; /* y-axis */ } 如果您不知道自己在做什么,Flexbox 可能会有些混乱。基本上 justify-content 跨越 x 轴,align-items 跨越 y 轴。如果将 flex-direction 设置为 column,则轴将反转。 .flexbox-col { display: flex; flex-direction: column; justify-content: center; /* y-axis */ align-items: center; /* x-axis */ } 这不是一个 flexbox 的文章,所以,在这里不详细介绍flexbox。 2. grid 这个也是非常实用的方法。 .grid { display: grid; place-items: center; } 3.

linux 后台运行程序命令

文章目录 一、cmd &二、nohup command & 这篇文章记录了两种linux程序后台运行的方式,两种方式略有区别,各位根据需求使用。 一、cmd & 通过 cmd 命令后加 & 完成程序启动并在后台运行。 可通过重定向的方式把日志打印到指定文件中如cmd > cmd.out 2>&1 & 需要注意的是 当终端断开时,任务就会停止 二、nohup command & 默认情况下,该命令的所有输出都被重定向到nohup.out文件中。 也可以使用下面的命令来指定输出文件为nohupcmd.out: nohup command > nohupcmd.out 2>&1 & nohup只有在使用exit命令正常退出终端,才能保证命令一直在后台运行。终端异常退出后台命令也会停止运行。 文章参考 https://www.cnblogs.com/kebaoye/p/16339500.html。感谢@柯宝宝智商感人 博主整理的内容。

34-Vue之ECharts高级-调色盘

ECharts高级-调色盘 前言调色盘主题调色盘全局调色盘局部调色盘渐变颜色 前言 本篇来学习下ECharts中调色盘的使用 调色盘 它是一组颜色,图形、系列会自动从其中选择颜色, 不断的循环从头取到尾, 再从头取到尾, 如此往复主要分三种:主题调色盘、全局调色盘、局部调色盘 主题调色盘 echarts.registerTheme('myCustomTheme', { "color": [ "#893448", "#d95850", "#eb8146", "#ffb248", "#f2d643", "#ebdba4" ], "backgroundColor": "rgba(242,234,191,0.15)", }) 完整代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>ECharts高级-调色盘</title> <!-- cdn方式 引入echarts.js文件 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script> <script src="lib/CustomTheme.js"></script> </head> <body> <div id='app' style="width: 600px;height:400px"></div> <script> // 主题调色盘 echarts.registerTheme('myCustomTheme', { "color": [ "#893448", "#d95850", "#eb8146", "#ffb248", "#f2d643", "#ebdba4" ], "backgroundColor": "

【Linux安全管理】Firewalld详解

目录 1、与iptables不同 2、配置防火墙 3、firewalld区域概念 4、filewalld 配置生效 5、firewalld服务 firewalld 端口映射 富规则 rich-rule 1、与iptables不同 firewalld采用区域和服务管理,而不是链式规则动态管理规则,允许更新规则而不破坏原有会话与连接 2、配置防火墙 firewall-cmd 命令行模式 推荐使用firewall-config(如果没装图形化界面就不行)vi /etc/firewalld/firewalld.conf # (查看状态) # firewall-cmd --state #(更新配置) # firewall-cmd --reload 3、firewalld区域概念 zone trusted 信任区域 默认允许所有流量传入public 公共区域 (默认区域)默认允许ssh 服务 dhcp external 外部区域 默认允许ssh其余均拒绝home 家庭区域 有ssh, 预定于服务等internal 内部区域 默认允许ssh 服务 dhcp服务等work 工作区域 默认sshdmz 隔离区 block 限制区域 默认拒绝所有流量传入drop 丢弃区域 默认丢弃所有流量传入 工作原理: 管理数据包时: 1、先根据数据包的源IP进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。 2、根据传入的网络接口,进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。 绑定源地址的区域规则> 网卡绑定的区域规则> 默认区域规则 4、filewalld 配置生效 运行时配置: 不中断现有连接不能修改服务配置 永久配置

python 字符串相关操作汇总

目录 1. 使用 += 连接字符 2. 替换字符串中的部分字符 3. 删除字符串中的字符 4. 分割字符串 1. 使用 += 连接字符 示例: 2. 替换字符串中的部分字符 (1)使用 replace() 函数:一次只能替换一种字符 语法: str.replace(old, new[, max]) old -- 将被替换的字符串 new -- 新字符串,用于替换old字符串 max -- 可选参数,若不指定该参数,则字符串中所有old字符将被new替代;若指定该参 数,则只有max个old字符被替换为new 示例: (2)使用 translate() 函数:可以同时将多种字符替换为不同字符 语法: str.translate(table) table -- 翻译表,翻译表是通过maketrans方法转换而来。 示例: 3. 删除字符串中的字符 (1)使用 strip() 函数:只能用于删除字符串首尾的字符 语法: str.strip([chars]) chars -- 要删除的字符,若不指定,则默认删除字符串首尾的空格和换行符;若指定, 则删除字符串首尾的指定的字符。 示例: (2)切片法 示例: 4. 分割字符串 (1)使用 split() 函数 语法: str.split(string, num) string -- 分割符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数,默认为-1,即分割所有。 示例: 

架构设计(容量分析)

架构设计(容量分析) 容量分析 性能标准(不同机器数值会有差异) # mysql 单端口读:5000/s 单端口写:3000/s 单表容量:5000万 # redis 单端口读写:4万/s 单端口内存容量:32g # kafka 单端口读:3万/s 单端口写:5000/s # 应用服务器 处理请求的峰值:5000/s 场景1:用户下单地址读写,使用缓存存储常用地址 用户量2亿,每天增长5万 促销日订单量1400万,且50%的订单集中在2个小时内 假设新增的用户全部增加一条地址,并且高峰期20%的用户在下单时添加地址 当前2亿用户,每天增长5万,平均每个用户5个地址,按照30年计算 按照峰值的5倍冗余设计,常用地址容量按照30倍计算 # 数据库mysql计算 读吞吐量:(1400万*0.5)/(2*60*60)=1000/s,5倍冗余:5000/s,需要1个端口 写吞吐量:(1400万*0.2+5万)/(2*60*60)=400/s,5倍冗余:2000/s,需要1个端口 数据容量:(2亿+5万*365*30)*5=35亿,5倍冗余:175亿,需要350张表 读写混合部署:2主2从 读写分离部署:1主1从 表的数量:2的指数对齐,需要512张表(考虑到端口拓展时不用拆分数据库,尽可能使用更多的库) 设计结果:1端口*32库*16表、1主1从 # 缓存Redis计算 当天下单用户全部为活跃用户,缓存24小时, 每个用户5调地址,每条地址数据大小1kb 读写:redis可以处理读5000/s、写2000/s 数据容量:1400万*5*1kb=70g,5倍冗余350g,360g/32g=11,需要11台redis服务器 设计结果:11主11从 # 应用服务器计算 单台服务器可以处理读5000/s、写2000/s 为防止单点故障,使用2台应用服务器 场景2:通过消息队列异步产生物流订单,并提供查询服务 用户下单3天后到货,三天内50%的用户每天查询一次物流订单、物流记录 用户下单产生一次物流订单,促销日订单量1400万,50%的下单集中在2个小时 按照促销日每天产生1400万订单,订单3天到货,每个订单产生8个物流记录,8条记录在3天内均匀产生 当前又2亿条订单数据,每天新增400万订单,按照3年订单量存储数据 三方物流记录查询接口吞吐量峰值:5000/s # 数据库计算 读吞吐量:(1400万*3*0.5)/(24*60*60)=250/s,5倍冗余1250/s,1个端口 写吞吐量:(1400万*0.5)/(2*60*60)=1000/s, (1400万*3*8)/(3*24*60*60)=1200/s, 5倍冗余(1000/s+1200/s)*5=11000/s,需要4个端口 数据容量:物流订单数据2亿+400万*365*3=46亿,5倍冗余;230亿,需要460张表 物流记录数据是订单的8倍,需要460*8=3580张表 混合读写:5主5从 读写分离:4主4从 考虑到端口拓展师不拆分数据库,尽可能设置更多的库 设计结果:物流订单表 4端口*16库*8表、 物流记录表 4端口*16库*64表 4主4从 # 消息队列计算 物流订单通过kafka发送,5倍冗余峰值为5000/s,单台kafka可以满足需求 设计结果:考虑到单点问题,至少使用2台kafka机器 # 定时任务轮询物流记录时间间隔 每天产生1400万订单,平均3天到货 1400万*3/5000=2h,定时任务每隔2小时查询一次 # 应用服务器计算 读吞吐量:1250、写吞吐量:11000/s,3台应用服务器可以处理 定时任务轮询三方记录服务器:单台服务器就可处理,考虑单点故障,使用2台服务器 性能分析 性能指标

Windows 利用tensorflow2 object-detection api训练自己的模型

预备工作: windows tensorflow2 object-detection api 下载安装 根据这个文档一步步走 训练自定义对象检测器 — 张量流 2 对象检测 API 教程文档 (tensorflow-object-detection-api-tutorial.readthedocs.io) 1.准备数据集 需将数据集分为训练集和测试集两部分,使用labelImg工具打标签生成.xml文件,然后将.xml文件转成.record文件。 2.训练模型 models/tf2_detection_zoo.md at master · tensorflow/models · GitHub 在这里下载需要的模型,配置config文件时最好将batch_size的值改为1,以防显存不足,当然也可以自己设置一个合适的值。 可能遇到的报错: self._read_buf = _pywrap_file_io.BufferedInputStream( UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 114: invalid continuation byte 可能的解决方法: 配置模型config文件时,将路径中的‘ \ '改成' /'.如:'.....training_demo/annotations/label_map.pbtxt' 路径中含有中文,需将路径改为全英文 AssertionError: Found 260 Python objects that were not bound to checkpointed values, likely due to changes in the Python program.

判断成绩等级。判断三位数,是否为水仙花数。判断门票价格

//引入java中util包中的Scanner这个类 import java.util.Scanner; /** * @author ran */ public class java_1 { public static void main(String[] args){ //调用方法 text2(); } /*************** *方法名字:text1 *功能:通过if的嵌套实现,输入一个成绩,判断其处在哪个分段 * >=90用A表示,60-89用B表示,60以下用C表示 * */ public static void text1(){ /* * 1.定义整形变量num * 2.定义一个Scanner类的指向(指向的位置是通过new Scanner出来的对象的位置) * 3.4.将从控制台上输出的值传赋值给num * */ int num; Scanner sc=new Scanner(System.in); System.out.println("请输入您的分数(1-100的整数):"); num= sc.nextInt(); //判断输出的数值是否符合取值范围,不符合则停止程序并提示重新输入 if(num>=0&&num<=100){ //用多分支if去判断输入的数值符合哪个等级 if(num>=90){ System.out.println("A"); } else if(num>=60){ System.out.println("B"); } else{ System.out.println("C"); } } else{ System.out.println("您的输入有误!输入数值应是 1-100 的整数!"); } } /**************** *方法名字:text2 *功能:输入三位数,判断是否输入正确,正确则判断这个数是否是水仙花数 * 水仙花数指各个位数上的立方和等于该数自己,如153是一个水仙花数 * 因为 153=1*1*1+5*5*5+3*3*3 * */ public static void text2(){ /* * 1.

<TCP 协议内容分析><1>基于Wireshark分析TCP交互数据包

目录 (一) 目标&方法(二) 平台(三) 步骤一. 实现TCP通信( TCP源码 - 文末附 )二. 获取1. 选择(网卡)通道2. 过滤 + 抓取 三. 分析1. 简要信息2. 拆解<1>三次"握手"<2>传输数据<3>四次"挥手" 3. ACK & Seq 变化 (四) 结语-------------TCP源码tcp_client.ctcp_server.c (一) 目标&方法 为了可以更深入,更直观的理解TCP通信原理,理解TCP数据段格式,本文对 – 字符"A"通过TCP协议传输的数据包进行分析 TCP数据段格式 (二) 平台 Linux - 实现TCP通信Wireshark - 实时捕获TCP传入和传出数据包 安装包 官方 - win64-3.4.9.exe 官方 - macOS Intel 64-bit.dmg 官方 - Source Code文章 ( 请自行评测! ) ubuntu下安装-link1 ubuntu下安装-link2 (三) 步骤 一. 实现TCP通信( TCP源码 - 文末附 ) 传输的数据为 单字符 “A” 注意

PYTHON导出表格数据到EXCEL

要在 Python 中将表格数据导出到 Excel,可以使用一些第三方库,比如 openpyxl、xlsxwriter 或 pandas。 使用 openpyxl: 安装 openpyxl:pip install openpyxl导入 openpyxl 模块:import openpyxl创建一个工作簿:wb = openpyxl.Workbook()创建一个工作表:ws = wb.create_sheet()将数据写入工作表:ws.append(["列1", "列2", "列3"])保存工作簿:wb.save("文件名.xlsx") 使用 xlsxwriter: 安装 xlsxwriter:pip install xlsxwriter导入 xlsxwriter 模块:import xlsxwriter创建一个工作簿:wb = xlsxwriter.Workbook("文件名.xlsx")创建一个工作表:ws = wb.add_worksheet()将数据写入工作表:ws.write(0, 0, "列1")保存工作簿:wb.close() 使用 pandas: 安装 pandas:pip install pandas导入 pandas 模块:import pandas as pd创建一个 DataFrame:df = pd.DataFrame({"列1": [1, 2, 3], "列2": [4, 5, 6], "列3": [7, 8, 9]})将 DataFrame 写入 Excel 文件:df.to_excel("文件名.xlsx", index=False) 注意:在导出数据到 Excel 文件时,如果文件已存在,默认会覆盖原文件。如果希望在原文件中追加数据,可以使用 engine 参数,例如:df.

大数据的基础知识上(大数据的概念和生态、linux系统与命令、虚拟机导入、虚拟机额配置和联网)

目录 一、数据分析的方向二、数据分析步骤1.明确分析目的和思路2.数据传输收集过程3.数据处理4.数据分析5.数据展现6.报告撰写 三、数据是什么 大数据时代大数据的应用有哪些 四、分布式和集群1.概念 🎡(by the way)大数据生态系统🎡(by the way)大数据和物联网、人工智能、云计算的关系五、linux的关键虚拟机:SHH协议 五、linux文件系统1. 基础知识2.常用命令 一、数据分析的方向 这三个方向正好对应大数据中的三个名词: 实时分析,离线分析和机器学习 实时分析是指 别名流式计算、流式处理。 二、数据分析步骤 数据分析步骤 (流程)的重要性体现在:对如何开展数据分析提供了强有力的逻辑支撑; 张文霖在《数据分析六步曲》说,典型的数据分析应该包含以下几个步骤 1.明确分析目的和思路 2.数据传输收集过程 3.数据处理 干净规整的结构化数据 4.数据分析 5.数据展现 6.报告撰写 甚至可以卖钱 给出商业建议 数据从数据源来到应用的地方去 核心:采集 处理 分析 应用 三、数据是什么 大数据时代 (通俗的说 就是数据太大 普通方法处理不了(上万)) 数据大是一回事 数据还要真实才行 大数据的应用有哪些 ●电商领域 精准广告位、个性化推荐、大数据杀熟 ●传媒领域 精准营销、猜你喜欢、交互推荐 ●金融方面 理财投资,通过对个人的信用评估,风险承担能力评估,集合众多理财产品、推荐响应的投资理财产品。 ●交通领域 拥堵预测、智能红绿灯、导航最优规划 ●电信领域 基站选址优化、舆情监控、客户用户画像 ●安防领域 犯罪预防、天网监控 ●医疗领域 智慧医疗、疾病预防、病源追踪 思考:大数据的存储和计算的两大问题 四、分布式和集群 数据结构真实才能更好额的反应民意。 最几年数据呈现爆炸级增长,然而我们要好好儿利用数据,分析数据,因为数据之中有规律,数据之中有价值。 1.概念 分布式:如京东。多台机器,但是每台机器上运行着不同的服务。有的承担支付服务,有的服务器专门承担用户评论等等。多台机器通过网络通信共同配合,对外提供服务。 集群:多台机器,每台机子上的系统是一样的。如,百度,多个服务器实现搜索功能。 🎡(by the way)大数据生态系统 🎡(by the way)大数据和物联网、人工智能、云计算的关系 五、linux的关键 虚拟机: 课程链接:https://www.

Python 正则提取字符串中的地区

方法一 re正则 这里我查找的优先级是 市->省->自治区->县->区 代码实现 import re PATTERN = r'([\u4e00-\u9fa5]{2,5}?(?:市|省|自治区|县|区)){1}' data = '''11111111111231231深圳市中药制造业创新中心有限公司经典名方麦门冬汤复方制剂开发研究''' pattern = re.compile(PATTERN) m = pattern.search(data) place = m.group() print(place) #深圳市 如果想要功能更全的匹配 #description: 从字符串中提取省市县等名称 import re import sys #匹配规则必须含有u,可以没有r #这里第一个分组的问号是懒惰匹配,必须这么做 PATTERN = r'([\u4e00-\u9fa5]{2,5}?(?:省|自治区|市)){0,1}([\u4e00-\u9fa5]{2,7}?(?:区|县|州)){0,1}([\u4e00-\u9fa5]{2,7}?(?:村|镇|街道)){1}' data_list = ['北京市南瓜村', '陕西省西安市雁塔区大村', '西班牙镇街道', '北京市海淀区', '黑龙江省佳木斯市汤原县大村', '内蒙古自治区赤峰市', '贵州省黔南州贵定县', '新疆维吾尔自治区伊犁州奎屯市'] for data in data_list: country = '' province = '' city = '' district = '' #pattern = re.compile(PATTERN3) pattern = re.compile(PATTERN) m = pattern.

css的几种居中样式

css的几种居中样式 一、水平居中 /*块级元素*/ /*1-外边距*/ { margin: 0 auto; } /*2-定位*/ { display: absolute; left:50%; transform:translateX(-50%); } 设置了宽度,可以margin负值 + transform:translateX(-50%)实现; /*行内元素*/ /*1-对齐 给父级元素添加*/ { text-align: center; } 二、垂直居中 1-块级元素; /*定位*/ { display: absolute; top:50%; transform:translateY(-50%); } 设置了宽度,可以margin:-50% + transform:translateY(-50%)实现; 2-行内元素; 单行:行内子元素的高度等于块级父元素的高度即可 多行:给父元素添加 { display: table-cell; vertical-align:middle; } 三、水平垂直居中 1, margin负值 + 定位(transform); 2, { position:absolute; top:50%; left:50%; transform:transition(-50%,-50%); } 3,flex布局居中 /*给父元素添加*/ { display: flex; justify-content: center; /*水平居中*/ align-items: center; /*垂直居中*/ } 4,grid布局居中 /*给父元素添加*/ { display: grid; place-align:center; /*或者*/ place-content:center; }

labelme2coco 使用方法

首先 将标注的json 文件和图像放在一个文件夹下。 文件夹名字为image,如上图所示。 新建一个labels的txt 里面填进去你标注的类型,如标注了cat这一类: 将 image 和labelme2coco放到同一个文件夹下,我放到了D盘的dataset文件夹下: 打开cmd 进入到目标文件夹下 D:\dataset 输入: python labelme2coco.py image coco --labels labels.txt 按enter键运行即可。 效果: 会生成一个coco文件夹 缺点:并没有划分训练集测试集,可在人为划分训练集和测试集后再使用这种方式 进行训练

解决idea使用卡顿问题

问题原因:1.缓存过多 2.内存不足 解决方案: 1.修改配置文件 选择help,点击edit custom vm options.. 修改两个配置 尽可能大一些 跟我这样也行 2.清理缓存 这里清理缓存 完成以上步骤就可以使idea更流畅啦! 以上就是两个方案,最终还是和电脑配置有很大关系。感谢您能够看完,如果有帮助就给个关注吧,我会继续更新,为大家解决更多问题。

【关于谷歌浏览器 无法翻译此网页的解决方法】

文章目录 问题描述解决思路1.找到hosts文件2.修改hosts文件 问题解决 问题描述 今天使用Chrome的时候,想翻译一下网页内容,突然发现怎么也无法翻译此网页,如下图所示,所以才有了这篇博客,下面针对此问题讲解一下解决方案。 解决思路 1.找到hosts文件 找到hosts文件的路径 C:\Windows\System32\drivers\etc 2.修改hosts文件 打开hosts文件后,在最下面添加以下内容,保存。 142.250.4.90 translate.googleapis.com 172.253.114.90 translate.googleapis.com 172.217.203.90 translate.googleapis.com 172.253.112.90 translate.googleapis.com 142.250.9.90 translate.googleapis.com 172.253.116.90 translate.googleapis.com 142.250.97.90 translate.googleapis.com 142.250.30.90 translate.googleapis.com 142.250.111.90 translate.googleapis.com 172.217.215.90 translate.googleapis.com 142.250.11.90 translate.googleapis.com 142.251.9.90 translate.googleapis.com 108.177.122.90 translate.googleapis.com 142.250.96.90 translate.googleapis.com 142.250.100.90 translate.googleapis.com 142.250.110.90 translate.googleapis.com 172.217.214.90 translate.googleapis.com 172.217.222.90 translate.googleapis.com 142.250.31.90 translate.googleapis.com 142.250.126.90 translate.googleapis.com 142.250.10.90 translate.googleapis.com 172.217.195.90 translate.googleapis.com 172.253.115.90 translate.googleapis.com 142.251.5.90 translate.googleapis.com 142.250.136.90 translate.googleapis.com 142.250.12.90 translate.googleapis.com 142.250.101.90 translate.googleapis.com 172.217.192.90 translate.googleapis.com 142.250.0.90 translate.googleapis.com 142.

【Linux】 at命令详解

目录 一、安装 at 命令 二、at 命令基本用法 使用 at 命令交互性安排任务 使用 at 命令安排任务 查看 at 任务队列 使用 at 命令,你可以在特定时间自动完成你所 设定的任务,也可以实现自动化,非常方便快捷! 一、安装 at 命令 使用下面的命令安装:yum install at -y 安装成功后使用 systemctl 命令启用 atd 服务并将它们设置为从现:systemctl start atd 再开始自动启动: systemctl enable --now atd 二、at 命令基本用法 语法: at [选项] [日期时间] 选项: -f:指定包含具体指令的任务文件 -q:指定新任务的队列名称 -l:显示待执行任务的列表 -d:删除指定的待执行任务 -m:任务执行完成后向用户发送 E-mail 参数 日期时间:指定任务执行的日期时间 使用 at 命令交互性安排任务 首先你输入 at 命令,然后再跟上具 体的时间。 回车之后就进入到交互性界面,你再具体输入要做的事情(命令),最后以结束输 入,任务就设置好了。 例如: 你想在早上 11:07 的时候,在 1.txt 文档里写入 123 这句 话,可以这样交互性输入:

【计算机网络】 IP地址划分

目录 一、IPv4地址概述 二、ip地址的组成和表示方式 点分十进制 二进制转十进制 十进制转二进制 三、分类编址的IPv4地址 A类地址 B类地址 C类地址 IP地址的分类 特殊的IP地址 练习 四、子网IP的划分 子网划分划分目的 逻辑与的概念 五、无分类编址的IPv4地址 无分类编址的IPv4地址--总结 一、IPv4地址概述 二、ip地址的组成和表示方式 点分十进制 ip地址(ipv4)由32位二进制数组成,分为4段(4个字节),每一段为8位二进制数 (1个字节),每一段8位二进制,中间使用英文的标点符号“.”隔开。 由于二进制数太长,为了便于记忆和识别,把每一段8位二进制数转成十进制,大小 为0-255,这种表示Ip地址的方法称为“点分十进制数法”,表示为如192.168.0.1这样 的IP地址。 二进制转十进制 十进制转二进制 三、分类编址的IPv4地址 网络号一般是不会变的,用来标识是属于哪个网段的,主机号用来分配主机或路由器; A类地址 B类地址 C类地址 IP地址的分类 特殊的IP地址 练习 四、子网IP的划分 子网划分划分目的 节约IP地址,避免浪费。限定广播的传播。保证网络的安全了几个。有助于覆盖大型地理区域。 32比特的子网掩码可以表明分类IP地址的主机号被借用几个比特作为子网号 逻辑与的概念 简单来说 全1为1,有0为0 0 1 0 0 1 1 1 1 0 1 0 0 ------------------- 0 1 0 0 0 0 一个比特位表示从主机号中借用一个比特作为子网掩码,所以分配的子网为218.75.230.00000000 218.75.230.10000000; 子网0可分配的最小地址为218.75.230.0000001(218.75.230.1),最大地址为218.75.230.01111110(218.75.230.126) 子网1可分配的最小地址为218.75.230.1000001(218.75.230.129),最大地址为218.75.230.11111110(218.75.230.254) 一个比特位表示从主机号中借用一个比特作为子网掩码,可以理解为子网 218.75.230.0000 0000中的218.75.230.0作为了网络号,剩余的7位比特作为主机号,主机号则不能出现全0或全1,子网1218.75.230.1000000中也一样;(全1是广播地址,全0是网络地址)

前端json数据遍历如何形成一对多的关系问题

前端接收json数据总是存在一个这样的问题如图: 我想达到的效果是: 标题1: 商品1 商品2 标题2: 商品1 标题3: 商品1 商品2 商品3 ....... 很明显,对于放在同一个json数据集里面,在遍历的时候存在一个标题对应多个商品的情况,但是这样的遍历话标题会随着商品的出现次数而被打印N次。我的问题是如何让遍历形成一种一对多的关系?

vscode 配置R

conda solving environment慢: 其中一个方法:更新conda conda upgrade -n base -c defaults --override-channels conda conda solving environment慢: 第二个方法:安装mamba conda install -c conda-forge mamba mamba install 包名 安装完之后就可以使用mamba来替代conda进行所有下载操作 VScode连接远程服务器创建jupyter后运行R 使用conda search r-base在conda的频道中检索都有什么版本的R 为R创建一个虚拟环境,推荐通过新建环境的方式安装不同版本的R语言,这样就能在不同环境间切换,然后在该虚拟环境下安装ipykernel,为了能运行jupter conda create -n r-4.2.2 r-base=4.2.2 source activate r-4.2.2 #添加镜像源 conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --set show_channel_urls yes # conda install ipykernel #用Jupyter notebook调用R,再下载一个irkernel

STM32 HAL 库实现gpio外部中断

功能很简单,就是按键实现一个中断,然后使用一个变量做计数 HAL_GPIO_EXTI_Callback 这个回调函数中,判断GPIO_PIN_X即可,选择那个gpio就用那个gpio,比如PB0打开外部中断后,那么pa0在cubemx中就不能同时设置外部中断。 我不确定PB0设置了外部中断后,那么加入PA0是否也会被中断打断,或者说有什么影响。 不过如下代码就可以判断这个GPIO中断之后,所需要做的事情; 我创建了一个EXTI_Gpio.c的文件,内容如下 #include "gpio.h" #include "stdio.h" uint32_t CountBtn; /** * @brief 外部中断函数处理 * @param GPIO_Pin:中断引脚号 * @retval None */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_0) { CountBtn++; } }

MySQL -2 指令

客户端SQL指令记录: -- 针对 数据库和针对数据表 (一)数据库 1. 查看当前所有数据库:show databases; 2. 创建数据库:create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 3. 删除数据库:drop database 数据库名; 4. 进入数据库:use 数据库; 》》 show tables; python 代码远程发送SQL指令给MySQL 英语单词: collate: vt.核对,校对;校勘 ==> 字符集的设定,需要校对 cursor : 游标;n.光标;(计算尺的)[计] 游标,指针 commit: 委托,==》 connect 对象类似于一个中间人,每次需要execute SQL指令,都需要中介人委托一下;而要求的SQL指令会记录到游标中进行传递信息; fetch: v.(去)拿来,(去)找来 import pymysql # 连接MySQL conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root123', charset='utf8') cursor = conn.cursor() #发送指令 cursor.execute("show databases") #会有返回值 5,意思是有五个数据库 result = cursor.fetchall() print(result) #(('information_schema',), ('db2',), ('mysql',), ('performance_schema',), ('sys',)) cursor.

auto 类型

1.atuo 定义必须要初始化 auto i = 0; 2.auto 可以同时声明多个变量,但类型必须相同 atuo sz=0,pi=3.14; 3.数组不能直接使用auto auto b[3] = { 1,2,3 }; 4.模板实例化不能使用auto vector<auto> b[3] = { 1,2,3 }; 5.类成员变量不能使用auto 6.如果想得到const类型,需要明确指出 const auto f = &i; 7.不能将常量引用绑定字面值,可以绑定到常量引用上 auto &i = 10; const auto &i = 10;

mysql无法启动

MySQL 无法启动可能有多种原因。 MySQL 服务器没有正确安装或者配置。在这种情况下,您可以尝试重新安装 MySQL 服务器,或者检查 MySQL 服务器的配置文件(通常是 my.cnf 或者 my.ini),确保它正确配置了数据库目录、端口号等信息。 MySQL 服务器遇到了意外错误。在这种情况下,您可以尝试查看 MySQL 服务器的错误日志(通常在 MySQL 的数据库目录下的 log 文件夹中),以确定错误的原因。 MySQL 服务器的进程已经在运行,但是由于某些原因无法连接到数据库。在这种情况下,您可以尝试重启 MySQL 服务器的进程,或者使用命令行工具 mysqladmin 来检查 MySQL 服务器的状态。 如果以上方法都不能解决 MySQL 无法启动的问题,您还可以尝试搜索相关的错误信息,或者向 MySQL 官方或者其他专业人士寻求帮助。

flask框架之多app应用、flask-scrip、导出依赖、偏函数、threading.local、请求上下文执行流程

多app应用 以前我们在写flask都是实例化得到一个app对象,其实flask是可以使用多个app from flask import Flask from werkzeug.middleware.dispatcher import DispatcherMiddleware from werkzeug.serving import run_simple app01 = Flask('app01') app02 = Flask('app02') @app01.route('/app01') def index(): return 'app01' dm = DispatcherMiddleware(app01, {'/app02': app02}) @app02.route('/app02') def home(): return 'app02' if __name__ == '__main__': run_simple('localhost', 5000, dm) ps:内部执行 1.请求来了会执行dm(environ,start_response) 2.dm的__call__根据请求的地址拿到不同的app,执行app(environ,start_response) flask_script使用 通过这个第三方模块我们可以定制命令,完成像django的 python manage.py runserver的命令 安装模块 pip3 install flask-script ''' 注意依赖版本: Flask==2.2.2 Flask_Script==2.0.3 ''' 快速使用 from flask import Flask from flask_script import Manager app = Flask(__name__) manager = Manager(app) if __name__ == '__main__': manager.

JAVA三种文件读写操作,四种文件拷贝操作

一、文件读写操作 1.使用FileWriter和FileReader,对文件内容按字符读取 String dir = "D:\\aaa\\a.txt"; File file = new File(dir); //如果文件不存在,创建文件 if (!file.exists()) file.createNewFile(); //创建FileWriter对象 FileWriter writer = new FileWriter(file); //向文件中写入内容 writer.write("the first way to write and read"); writer.flush(); //刷新该流的缓冲。 writer.close(); //创建FileReader对象,读取文件中的内容 FileReader reader = new FileReader(file); char[] ch = new char[100]; reader.read(ch); for(char c:ch) { System.out.print(c); } System.out.println(); reader.close(); 2.使用包装类BuffredReader和BufferedWriter,对文件内容进行整行读取 String dir = "D:\\aaa\\b.txt"; File file = new File(dir); //如果文件不存在,创建文件 if (!file.exists()) file.createNewFile(); //创建BufferedWriter对象并向文件写入内容 BufferedWriter bw = new BufferedWriter(new FileWriter(file)); //向文件中写入内容 bw.

Linux Command vgextend 扩展卷组

Linux Command vgextend 扩展卷组 tags: 设备 文章目录 Linux Command vgextend 扩展卷组1. 简介2. 什么是 LVM?3. Creating Physical Volumes4. Creating Volume Groups5. extend Volume Groups 1. 简介 在 Linux 中使用逻辑卷管理 (LVM) 为用户提供了创建和使用分区的灵活性。您可以轻松地创建、修改、调整大小和删除各种存储卷。 您可以使用vgextend命令通过物理卷扩展卷组来轻松调整其大小。该命令很简单,只需在使用 vgextend 命令时添加物理卷作为参数即可。 2. 什么是 LVM? LVM 是一个 Linux 系统,负责管理 Linux 系统中的文件系统和逻辑卷。尽管 Linux 中还有其他卷管理工具,但还是推荐使用 LVM 的高级功能。正如我们将在本指南中看到的那样,您可以使用此命令行工具实现很多目标。 为了更好地理解如何使用vgextend命令,我们将创建两个物理卷和一个卷组。完成后,我们将使用 vgextend 将一个物理卷添加到另一个物理卷的卷组中。 3. Creating Physical Volumes 我们目前没有物理卷。我们需要一个块设备来初始化物理卷。我们可以使用以下命令列出块设备: $ pvs $ sudo lvmdiskscan 由于我们需要创建两个物理卷,我们将使用/dev/sda1和/dev/sdb1。但在此之前,我们必须卸载块设备。 要卸载块设备,请使用以下命令并替换块设备以匹配您的情况: $ sudo umount /dev/sda1 $ sudo umount /dev/sdb1 卸载块设备后,我们可以继续使用pvcreate命令来初始化物理卷。

从 Arm Compiler 5 迁移到 Arm Compiler 6

在开始之前,建议先备份你的工程代码。 迁移条件 要使用 ARM Compiler 6,建议MDK的版本至少为: MDK版本5.23或更高版本 MDK版本5.23提供两个编译器,分别是 ARM Compiler 5.06 和 ARM Compiler 6.6。 软件包也需要支持 ARM Compiler 6,以下是支持 ARM Compiler 6 的最低软件包版本: Keil MDK-Middleware包: 版本7.4.0及以上 Keil ARM Compiler Support 包: 版本1.3.0及以上 ARM CMSIS 包: 版本5.0.1及以上 切换编译器 使用MDK打开工程。 选择 Project - Options for Target from the menu。 点击 Target 选项卡,找到 ARM Compiler: 下拉列表。 设置ARM编译器为 Version 6 。 点击 OK 键确认更改。 切换后的ARM Compiler 6所有设置都为默认值。 设置警告级别 ARM Compiler 6 提供的警告级别比 ARM Compiler 5 多,如果你习惯 ARM Compiler 5 的警告级别,选择AC5-like Wamings。

c语言include语句的一些基本语法(引入任意文件等)

一,c语言include语句的基本语法 首先,众所周知,c语言的#include语句可以引入任何后缀名的文件。 下面来看它可以怎么引入相关文件 1,引入标准库头文件 这个就是一般的用法,例如: #include<stdio.h> 这个就是引入标准输入输出头文件,有了它,你就可以在接下来的代码里面使用相关的输入输出等函数了。 这种用法中,include后面接的是尖括号,编译器会在系统目录下寻找这个头文件。 2,引入自定义文件 (1)同目录下的自定义文件 例如: 先看一个问题:如何在当前.c文件里引用同目录下的另一个.c文件里面的函数? 假设当前文件名为main.c,另一个.c文件名为test.c。 一般情况下,我们都是在.h文件里面声明函数,然后在它同名的.c文件里面实现该函数。然后在另一个.c文件里用include引入.h文件 但是现在,为了简单且能运行出结果,我就直接在main.c里面用include引入test.c了。 具体做法如下: 例如你有两个文件:main.c,test.c。这两个文件都是在同一目录下的。 在test.c中定义了一个void类型的函数test_out();, 现在你想在main.c里面调用这个函数。 两个文件的内容如下: test.c #include<stdio.h> void test_out() { puts("you get it!"); } /* 如果要在另一个.c文件里引入test.c文件,那么test.c文件里面是不能写main函数的, 否则两个文件里面都有main函数,就重复了. */ main.c #include<stdio.h> #include "test.c" int main() { test_out(); return 0; } 运行main.c的结果: 可以看到,这种用法中,main.c文件里面的include后面跟的不是尖括号,而是双引号。 include "文件名"既可以用来引入系统已有的头文件,又可以用来引入用户自定义的文件。 其他文件类型示例: 随便取一个文件格式:abccd 同目录下有两个文件:main2.c和test2.abccd 名为test2的文件,它的文件类型是任意的,里面的内容是: #include<stdio.h> void test_out() { puts("succeed!"); } main2.c里面的内容是: #include<stdio.h> #include "test2.abccd" int main() { test_out(); return 0; } 运行main2.

Python 下载库文件

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32https://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32whl文件安装:pip install 绝对路径 (简单直接),要什么就装什么

macos iTerm oh my zsh

下载iTerm2-Color-Schemes, https://github.com/mbadolato/iTerm2-Color-Schemes.git, 在iTerm的偏好中选择profiles,再选择color,导入下载好的iTerm2-Color-Schemes(从scheme中),我选择的是cyberdyne。安装oh-my-zsh,oh-my-zsh会自动配置zshrc。在zsh’rc配置中找到ZSH_SCHEME,修改为ZSH_THEME=“agnoster” 记得每次修改完zshrc,需要source激活

五个步骤解决IDEA开发卡顿

五招搞定IDEA开发卡顿 大多数开发都会遇到的几个问题,idea显得特别卡,启动项目慢,编译慢,提代码,commit解析也慢,有的甚至会死机,跑几个服务写代码的时候卡的要死,及其影响开发效率,接下来总结一下如果显著提高IDEA开发效率 通过显示内存使用情况查看当前项目占用的内存大小 1.更改操作系统快捷方式 首先,安装IDEA软件后,自动生成的桌面启动方式都是32位的,如果你是64位系统,我们使用这个快捷方式运行大项目,一般都会很卡。找到idea的安装目录,进入bin文件,找到名称为 idea64的程序,生成快捷方式,用这个快捷方式启动 2.更改idea启动配置参数 找到idea安装目录下的bin文件夹下的 idea64.exe.vmoptions 基于 64位机器运行修改相关参数 1、 -Xms 是最小启动内存参数 2、 -Xmx 是最大运行内存参数 3、 -XX:ReservedCodeCacheSize 保留代码占用的内存容量参数 手动修改 根据自身机器内存设置 例如: -Xms=1024m -Xmx=2048m -XX:ReservedCodeCacheSize =300m 3.增加编译内存(必做) 项目启动慢,项目起不来 就把编译内存搞大点,效果很显著,各方面速度都有提升,计算机配置硬件高的话,可以多分配点编译内存 4.卸载不必要的插件(选做) 打开settings-plugins 和java开发无关的都可以卸了 5.清理缓存(选做) PS:再快的速度也要基于一定的开发电脑配置上,如果本机内存实在太低。。。那还是建议先加个内存条吧~

mysql插入大量数据的几种方法executeBatch,load data local infile

mysql插入数据集合可以循环插入,可以使用jdbc的批处理executeBatch语句,可以使用load data local infile语句插入。 目录 一、循环遍历插入 二、批处理executeBatch语句 三、load data local infile语句 1.生成文件插入 2.采用setLocalInfileInputStream方法,这个方法可以不用生成文件,减少生成文件,往文件写入数据的IO操作 报错问题 反射获取表的所有数据库字段名称 一、循环遍历插入 List<BimXmlLevel> levels=new ArrayList<>(); for (BimXmlLevel level : levels) { service.save(level); } 每个对象每次都会生成一条插入语句 insert into tableName values () 这种方法只要数据量一多速度会很慢。 二、批处理executeBatch语句 使用prepareStatement预编译语句 使用addBatch,executeBatch批量插入语句 private static JdbcTemplate jdbcTemplate = SpringContextHolder.getBean(JdbcTemplate.class); /** * 使用prepareStatement预编译语句 * 使用addBatch,executeBatch批量插入语句 * 需要在数据库url连接添加参数rewriteBatchedStatements=true * 实现原理就是把多条插入语句变成一条 INSERT INTO tableName(xx) values(xx),(xx),(xx) * 提示:sql后面不要加; 不然底层会拼接sql报错 * * @param list * @throws Exception */ public static void saveList(List list) throws Exception { long start = System.

java 接口返回字符串带引号的问题解决

访问后台接口返回: 将返回数据修改为文本类型text/plain @GetMapping(value = "findSubscribeDetailById", produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String findSubscribeDetailById(ComponentClientSubscribe componentClientSubscribe) {...} 返回结果:

架构设计(日志系统)

架构设计(日志系统) 日志系统 日志系统组件 logback:日志框架,可将日志输出到控制台、文件、数据库、logstash等目的地 filebeat:日志文件采集组件,一个filebeat处理一个数据源,相比logstash更轻量级,消耗资源更少 kafka:对采集的日志数据缓冲处理,防止logstash负载过高 logstash:可直接采集日志,也可接受filebeat数据源,对日志进行分析过滤 elasticsearch:日志数据通常使用elasticsearch存储 kibana:可视化展示日志数据 logstash采集日志数据(同步或者异步传输) filebeat同步采集传输日志:filebeat直传logstash filebeat异步采集传输日志:使用kafka异步传输到logstash 容量分析 采集200台服务器日志,每天的日志总量2TB,每条日志大小约为1kb, 日志处理后进行监控和报警,监控报警延时不能超过5分钟, 每台服务器的日志峰值吞吐量10000/s,所有服务器瞬时峰值之和为1000000/s # 每台机器平均每秒处理的日志量 2TB/200/1kb/(24*60*60)=115/s 115/s小于10000/s,单台服务器可以满足要求 # 网络负载 单台kafka的处理峰值:100000/s 需要kafka机器数:1000000/100000=10 网络负载:100000*1kb=100mb,千兆网卡可以满足需求 # 延时处理 假设每条日志的处理时间为20ms, 1000000*20ms/1000/5分钟=66.7,需要66个cpu处理峰值的吞吐量延时才不会超过5分钟 假设每条服务器4个cpu、8g内存,需要的机器数:66/4=16, 需要16台机器部署logstash对日志进行解析处理 一般需要对系统做5到10倍的冗余处理,防止系统超载,使用docker部署可动态拓展机器

easyExcel导出表头合并 不得不说真牛

有个导出单元格合并的任务,表头不规则合并格式,看得就烦,尤其是对于没玩儿过合并的我来说,任务放在哪里不知咋做,网上也看了一堆合并的方法,自己写注解来写的那些,麻烦得要命,我写一半就写不下去了。 直到我再想重建信心,开始做的时候,去看了下我们统一使用的excel工具是alibaba的easyExcel,然后再去了解这个强大的工具使用。完全可以满足复杂单元格合并的需求。 现在还在找寻合并单元格方案的朋友们,看这篇文章,轻松搞定! 1.上效果 2.上代码 其实也就是用了一个注解就搞定了:@ExcelProperty。value内,支持多个值,想哪几列合并,就在第几个参数使用相同的值即可。下面只列举一列,相信大家就能看明白。 @ExcelProperty(value = {"标准科目名称"}, index = 8) @ColumnWidth(20) private String standardName; @ExcelProperty(value = {"截止至12月31日累计预提余额","A"}, index = 9) @ColumnWidth(20) private String accumulatedBalance; @ExcelProperty(value = {"本年年末余额(按计提方式划分)", "系统计提(附事项申请单)","B"}, index = 10) @ColumnWidth(20) private String systemAccrual; @ExcelProperty(value = {"本年年末余额(按计提方式划分)", "手工计提(附预提费用明细及列明所属期间)","C"}, index = 11) @ColumnWidth(20) private String thisYearHandAccrualWithDetail; @ExcelProperty(value = {"本年年末余额(按计提方式划分)", "手工计提(未附预提费用明细)手工计提(未附预提费用明细)","D"}, index = 12) @ColumnWidth(20) private String thisYearHandAccrualWithoutDetail; 导入的excel校验,和读取复杂的导入模板,如合并行或名字重复的表头,还有导出的复杂单元格合并,我最近基本都踩过坑了。在之前看到这问题,想想就头大,现在没在怕的。下一期出个excel复杂表头的校验和读取的文章。 文章如果写的不清晰的地方,或者没太明白的朋友,大家评论区留言吧~

父组件使用this.$refs调用子组件参数或方法时,提示undefined的解决方法

报错信息:Vue warn]: Error in v-on handler: "TypeError: Cannot set property 'baseurl' of undefined" found in 这种情况下,一般都是父组件调用子组件方法的时候,子组件还未渲染成功。要搞清楚这个问题,我们要搞清楚父子组件的生命周期就行了。 1、加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子 beforeMount->子mounted->父mounted 2、子组件更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated 3、父组件更新过程 父beforeUpdate->父updated 4、销毁过程 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed 这种情况下,我们可以在使用父组件调用子组件方法的时候,使用this.$nextTick() ​ this.$nextTick(() => { console.log('子组件参数值为:', this.$refs.myChild.baseurl) }) ​ 详情请看原作者文章:(4条消息) vue父组件调用子组件this.$refs报错,undefined、not a function问题解决方法_银鞍照白马的博客-CSDN博客_not a functionhttps://blog.csdn.net/weixin_41698051/article/details/112670188

通过java代码实现ES中的常用搜索

目录 测试环境准备 在指定索引下搜索全部(可以指定字段) 通过ids进行搜索 对搜索结果进行分页 match分词搜索 不分词模糊搜索:wildcardQuery与matchPhraseQuery term 搜索(精确匹配) multi_match搜索 bool搜索 多条件匹配 filter过滤搜索 sort排序搜索 后续待补充:queryStringQuery,minimumShouldMatch,对检索结果中的关键词进行高亮 测试环境准备 测试环境: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <version>2.0.6.RELEASE</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.3.0</version> <exclusions> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.3.0</version> </dependency> 2配置 application.yml spring: application: name: service-search eslearn: elasticsearch: hostlist: 127.0.0.1:9200 #多个结点中间用逗号分隔 3主类代码 @SpringBootApplication public class SearchApplication { public static void main(String[] args) { SpringApplication.run(SearchApplication.class,args); } } 配置类:

MATLAB中,设置fig图片线型、颜色、显示比例,并另存为eps, jpg, png等多种格式

在MATLAB中,画图有时候需要调整图片比例, 下面展示一些小段MATLAB代码,举例说明 // 画y = x^2 函数 figure x = 1:10 plot(x,x.^2,'r-.s','LineWidth',2); 上述代码中, (1)‘r’ 表示曲线颜色为红色,一些常见颜色设置:‘b’ 为蓝色,‘g’ 为绿色,‘k’ 为黑色,‘y’ 为黄色,等等; (2)‘-.’ 表示线型为长短间隔虚线,其他类型,如下图所示: (3)‘s’ 表示图例为方框,常见的marker如下图所示: (4)‘LineWidth’ 来控制线宽,默认值为1. 上述代码运行结果如下: 当然,你也可以通过画图工具,来修改上述图片中各种参数设置,如下图所示: 然后,可以通过gcf命令获取当前图片参数,如下图所示: 我们关注Position行所对应的四个参数,前两个参数为图片的当前位置坐标,后两个为图片的宽度和高度。 通过调整整两个参数,可以调整图片的比例,具体代码如下: // 调整图片的比例 set(gcf, 'Position', [573 437.6667 400 300]); 通过调整后面两个参数的大小"400"和"300",可以调整图片的显示比例。该命令比较好用之处在于对于多个图片,可以严格设定图片的显示位置(前两个参数)和大小(后两个参数),确保多个图片保持严格一致。 当我们设置好需要的线型、颜色、图例和标注、以及图片比例及大小之后, 可以通过"File"—>“Save As”,根据需要,选择合适图片的保存格式, 比如在LaTeX中,插入图片常用的eps格式,等等。

flask之g对象、flask-session使用、数据库连接池、信号

目录 g对象 flask-session的使用 数据库连接池 flask中集成mysql wtfroms使用(了解) 信号 g对象 全称global,是一个全局对象在此次请求过程中一直有效,其实就是请求的上下文从请求进来就一直存在直到请求结束,所以在当次请求过程中,如果调用别的函数不需要把参数传入只需要放到g对象中在别的函数中直接使用g获取即可 具体使用 user.py from flask import Flask, g from home import text app = Flask(__name__) app.debug = True @app.route('/') def index(): # 给g对象放入值 g.username = 'abc' text() return 'ok' if __name__ == '__main__': app.run() home.py from flask import g def text(): # 请求可以使用g对象中的值 print(f'用户:{g.username}') ps:g对象和session的区别 session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session,但是g对象不是,g对象不需要管过期时间,请求一次g对象就改变了一次,或者重新赋值了一次 flask-session的使用 flask内置的session把数据加密后保存到浏览器中,那我们能不能自己写session类来重写open_session和save_session把数据保存到服务端到redis中,而flask-session就是用来干这个事,可以把数据保存到redis、mongodb等 安装 pip3 install flask-session # 安装 pip3 install -U flask-session # 升级最新 快速使用

MySQL锁情况查看

本文介绍如何在MySQL数据库中分析锁的情况及处理思路。 MySQL版本 mysql> select version(); +------------+ | version() | +------------+ | 5.7.38-log | +------------+ 1 row in set (0.01 sec) 模拟锁产生 A会话加锁 mysql> show create table t\G; *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` int(11) NOT NULL, `name` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 1 row in set (0.00 sec) ERROR: No query specified mysql> select * from t; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | s | | 3 | c | | 4 | d | | 5 | e | +----+------+ 5 rows in set (0.

web开发:linux常用命令总结

1.关于目录操作: (1)ls 列出当前目录下都有哪些文件/目录 也可以写成: ls + 指定目录 =列出指定目录下的文件/目录 还可以写成 ls + -l + 指定目录 = 以列表的形式列出 或缩写成 ll + 指定目录 (2)pwd 查看当前目录的绝对路径: (3)cd 切换当前工作目录(当前所在目录) cd + 绝对路径/相对路径 相对路径:以../(上一级目录) 或 ./(当前目录)开头--(./可以省略) ----------------------------------------------------------------------------- (返回上一级) (进入根目录) cd / 根目录就叫 / 命令行前面的 [ ] 中有当前工作目录的信息 2.针对文件的操作 (1)touch touch + 文件名 = 创建一个空文件,如果已经存在不会清空原文件 (2)cat cat + 文件名 = 显示文件内容到控制台上(也就是命令行) (3)echo echo + 文件 = 把(内容)写到文件中 通常搭配: echo + 内容 =把内容打印在控制台上 echo + 内容 + > +文件 =把内容写到文件中

2022 最新版 JAVA 如何上传自己的jar包到Maven中央仓库

发布 Jar 包到 Maven 中央仓库 在项目开发过程中,我们常常会使用 Maven / Gradle 从仓库拉取开源的第三方 jar 包,可能是私有仓库,可能是 Maven 中央仓库,也可能是第三方的镜像。本文将一些简单实用的操作步骤和示例,带领大家将自己写好的代码或开源项目发布到 Maven中央仓库(https://mvnrepository.com/)中,让其他人可以直接依赖你的 jar 包,而不需要先下载你的代码 / jar 后 install 到本地。。 Maven中央仓库并不支持直接发布 jar 包,需要将 jar 包发布到一些指定的第三方Maven仓库,然后该仓库再将 jar 包同步到 Maven中央仓库,Sonatype便是 Maven中央仓库指定的暂存库。 1. 注册帐号 入口有点难找,提示一下,在 Build 选项卡里面 https://issues.sonatype.org/secure/Signup!default.jspa 密码设置十分变态,12位,必须包含大小写数字特殊字符,有必要拿小本本记一下。而且最好不要设置在 xml 中需要转义的特殊字符,比如 &,否则后面配置 xml 时还要转义!不要问我为啥知道的。。 2. Jira申请 点击新建按钮或者直接访问 https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134,提一个 issue,只有申请通过了才有可能上传到中央仓库上,一般 5 分钟左右会有回应,我昨晚 10 点左右申请的,不知道是不是时差问题他们回应比较快: Project选择【Community Support - Open Source Project Repository Hosting (OSSRH)】Issue Type:选择【New Project】Summary和Description :自己填,注意要用英文Group Id:这个必须要注意,如果你用的是GitHub, 一定要是 io.github.你的github用户名, 例如我的项目地址是: https://github.com/admin4j/common-http, 那我的 groupId就是io.

Jmeter的非GUI页面压测命令

1、压测指令: jmeter.bat -n -t 脚本文件绝对路径\脚本文件.jmx -l 结果文件.jtl -e -o 生成测试报告绝对路径 注意:非GUI压测指令须在Jmeter的bin目录下执行 2、命令解析 -n 命令行模式 -t 指定jmx脚本地址(地址可以是相对路径,可以是绝对路径) -h 查看帮助 -v 查看版本 -p 指定读取jmeter属性文件,比如jmeter.properties文件中设置的 -l 记录测试结果的文件,通常结果文件为jtl格式(文件可以是相对路径,可以是绝对路径) -s 以服务器方式运行(也是远程方式,启动Agent) -H 设置代理,一般填写代理IP -P 设置代理端口 -u 代理账号 -a 代理口令 -J 定义jmeter属性,等同于在jmeter.properties中进行设置 -G 定义jmeter全局属性,等同于在Global.properties中进行设置,线程间可以共享) -D 定义系统属性,等同于在system.properties中进行设置 -S 加载系统属性文件,可以通过此参数指定加载一个系统属性文件,此文件可以用户自己定义 -L 定义jmeter日志级别,如debug、info、error等 -j 制定执行日志路径。(参数为日志路径,不存在不会自动创建,将日志输出到命行控制台) -r 开启远程负载机,远程机器列表在jmeter.properties中指定 -R 开启远程负载机,可以指定负载机IP,会覆盖jmeter.properties中remote_hosts的设置 -d 指定Jmeter Home目录 -X 停止远程执行 -g 指定测试结果文件路径,仅用于生成测试报表,参数是csv结果文件 -e 设置测试完成后生成测试报表 -o 指定测试报告生成文件夹(文件夹必须存在且为空文件夹)

架构设计(服务跟踪)

架构设计(服务跟踪) 服务跟踪 微服务调用链路 # 链路跟踪背景 随着业务的发展,系统规模越来越大,微服务之间的调用关系越来越复杂; 客户端发起的请求,会经过不同的微服务调用,形成一条复杂的调用链路,返回最终的结果; 每条链路上的依赖的服务如果出现延时过高、运行出错都会导致请求失败 # 链路跟踪作用 错误追踪:快速发现服务调用链路在哪个微服务中出错 延时分析:统计链路中每个依赖的服务运行的的时间,判断延时 # 链路跟踪组件 spring cloud sleuth + zipkin 阿里巴巴天眼、美团cat 京东hydra、新浪watchman sleuth实现原理 # traceId:请求链路的唯一标识,链路中的所有单元保持一致 请求达到分布式系统的入口端点时,会创建唯一的追踪标识, 请求在分布式系统中流转时,该值保持不变 # spanId:链路中的单元组件标识 为了统计各单元的时间延时,当请求到达依赖服务、或者请求转发时, 会创建一个span,用来记录开始时间、执行状态,结束时间 # annotation:记录单元信息 cs(client send):客户端或者单元发起请求时间戳 sr(server received):服务端或者单元接到请求时间戳 ss(server send):服务端或者单元处理完成后返回响应的时间戳 cr(client received):客户端或者单元接到响应的时间 sleuth span示例(收集到zipkin时,该对象会转换成zipkin中的span对象格式) zipkin 延时分析 收集、分析、展示跟踪信息 # collector组件:收集跟踪信息 收集跟踪信息,将其转换为zipkin内部使用的span格式 可使用http同步收集、mq异步收集 # storage组件:存储跟踪信息 默认将跟踪信息存储到内存中, 也可存到mysql、elasticsearch等数据库中 # restful api组件:提供外部访问接口 给客户端展示跟踪信息、外部系统访问实现监控 # web ui组件:展示跟踪信息 调用restful api接口,给用户展示跟踪信息 zipkin span示例(annotations对应logs、binaryAnnotations对应tags)

Ubuntu18.04安装教程

Ubuntu18.04安装 安装步骤Ubuntu初始化配置1、配置网卡:2、root用户管理: 其他 Ubuntu系统自行网上查找链接下载,我使用的是18.04服务器版本,搞服务器用 安装步骤 1、进入操作系统,选择第一项进行安装: 2、选择语言: 3、选择键盘: 4、手动配置网络(网段、ip地址、网关、dns服务器地址): 5、代理(不配置): 6、镜像源:选择阿里云的或者清华镜像: (http://mirrors.aliyun.com/ubuntu) (https://mirrors.tuna.tsinghua.edu.cn/ubuntu) 7、配置磁盘分区(选择默认的使用整块磁盘自动分区,并使用lvm): 8、配置系统信息(配置系统主机名、登录用户和密码): 9、安装openssh远程连接工具: 10、安装额外的服务(这里跳过,之后需要再添加): 11、安装中,直到出现Reboot Now,选择重启即表示安装成功,再输入用户密码进行登录: Ubuntu初始化配置 1、配置网卡: 尝试ping网关、外网,如果没法ping通 可以通过命令模式查看前面配置的网络是否有误: sudo vim /etc/netplan/00-installer-config.yaml 配置完成后,执行如下配置命令生效: sudo netplan apply 2、root用户管理: 切换root账户 sudo su 修改root密码 sudo passwd root 其他 进入操作系统出现这个报错: cloud-init [1781]: YYYY-MM-DD HH:MM:SS,182 -cc_final_message.py [WARNING]: Used fallback datasource 方法一:直接输入用户名密码进行登录,不理会提示; 方法二:执行Ctrl + Alt + F4,类似另开窗口 之后可以正常登录使用; 参考:https://askubuntu.com/questions/1321968/ubuntu-server-20-04-2-lts-hangs-after-bootup-cloud-init-1781-yyyy-mm-dd-h

Oracle启动 监听 创建用户

启动oracle需要有两个服务 1、监听服务 2、Oracle实例prod重启服务器后 将Oracle监听服务打开 [oracle@localhost ~]$ lsnrctl status [oracle@localhost ~]$ lsnrctl start [oracle@localhost ~]$ sqlplus / as sysdba su - oracle # 进入oracle的用户,读取oracle的配置文件 lsnrctl status # 查看状态 lsnrctl start # 启动监听 sqlplus / as sysdba # 以操作系统权限认证的oracle sys管理员登陆. startup # 以默认参数文件开启实例,装载默认的数据库,并打开数据库。 监听的作用 监听客户端请求 为客户端请求分配Server Process 注册实例服务 错误转移failover 负载均衡 Oracle默认三个用户 sys用户:超级管理员,权限最高,它的角色是DBA(数据库管理员) system用户:系统管理员,权限很高,它的角色是DBA operator(数据库管理员操作者),不具有创建数据库的权限! 普通用户(normal),如系统安装时的scott用户,默认密码是tiger。普通用户的权限是SYS用户或SYSTEM用户给的,如果没有给,那普通用户连很基本的访问权限,连接权限也没有。 查看当前数据库命令 SQL> select name from v$database; NAME --------- PROD 查看版本 SQL> select * from v$version; BANNER

idea tomcat10 使用jstl报500错误问题解决

这个问题和tomcat版本和jar包有关, 我刚开始就是试过各种jar包(不要和我一样乱导包),以下是解决方案 1.tomcat 8及其以下可用这个jar包链接: https://pan.baidu.com/s/1BEsg0HDNuoB27SROvPdVFw 提取码:xqee 2.tomcat 9及其以上需要以下两个jar包 jakarta.servlet.jsp.jstl-2.0.0.jar jakarta.servlet.jsp.jstl-api-2.0.0.jar 下载Jakarta Standard Tag Library 2.0 | The Eclipse Foundationhttps://jakarta.ee/zh/specifications/tags/2.0/ 如果高版本tomcat10用不了就下一个tomcat 8吧 效果一样的 等以后碰到更好的解决方法再使用 没必要浪费太多时间卡在这里。 感谢您的阅读 如果有帮助就给个关注吧!