https://192.168.244.139/
Peer’s Certificate issuer is not recognized.
HTTP Strict Transport Security: false
HTTP Public Key Pinning: false
Certificate chain:
-----BEGIN CERTIFICATE-----
MIIDMjCCAhoCCQCiqUaZA5xeMTANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJD
TjELMAkGA1UECAwCSlMxCzAJBgNVBAcMAldYMQwwCgYDVQQKDAN6d3gxDTALBgNV
BAsMBGpobXkxFTATBgNVBAMMDGh1Yi5qaG15LmNvbTAeFw0yMjAyMjIwNTQ3NTda
Fw0yMzAyMjIwNTQ3NTdaMFsxCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJKUzELMAkG
A1UEBwwCV1gxDDAKBgNVBAoMA3p3eDENMAsGA1UECwwEamhteTEVMBMGA1UEAwwM
aHViLmpobXkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx13G
8daXfwY/Jf41As/4F2/fEEzpLo1w88B0ZPgQTvi/UbMuXYBbdkmO0vdMdnZExKxe
Uwp+g6HSnosNqeIN4JQEhFaCG16s0wOSQ5iQqf960D3lDxWi+Sy/cAIjD65C3Rj+
sASStBbsFaAq89+T4BCPpn86SkoT7H3DlEosOlhVrmqNTJfZozbSjtulAKZZ3jkj
oph9P2Htj3yPMMC4FvelPzL5zAOcmFlqXArPJlWYKDdxBBhBj/Ld4k5C10U2kauI
V9BLhbeSb0bn2/9ga1rKDwlSkyXxZ55Il/35nClUgnHFDonoBe5O/nXBl0stcGXy
vlor3GvTvxl+SzPRxQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBWA3SNtxALBQZL
aayz+3Btrn4vD4HE+WYh8eD5T7boz1BWUEvGpbERJGIj3wJvkL9g9KoSgpMPnf4C
ng3t4LRNDrxqmFqhAl4a2hCocLVp6hYXeMF7bT0GHe32rMIVkkIRUxKibcmLTKGD
fQ/JGE82KqQWiXw0+q3pLPeoF+w3rOpVAc7mWHOZbGYOUrdJjJki2MtpwdXk6NbD
tUYRi1Yb3a8MK1oCICjU0okG0WdAvGnM0xvJ+U5Z/8MJUTtN+bPCdG5Gye7FQGoT
C8qL8aWED7OeFnEEfWovIxsSWYFKkXutW5Oz2bAhpRHQIVznqDWJ5QEQoABdDvyW
yc+mr8JW
-----END CERTIFICATE-----
刚刚不知道咋回事我点开那个【Add Exception】,然后点了下大概是不报告这个异常,然后就找到了我的harbor界面:
循环输入5个数据,进行降序排序后输出结果 冒泡排序选择排序逆序排序 冒泡排序 1.冒泡排序的思路:
每轮排序将未排序中的最大值或最小值冒上去。每轮比较是通过相邻值的比较交换来将最小值或最大值冒泡冒上去。 如:数组:9,23,90,22,15;
第一轮:所有数字还未排序(我们这里将最小值冒上去)
注意:(这里的上指的是数组较大的坐标,当然你可以按自己的思路理解)
第二轮比较的时候就无需再比较队顶的元素:
通过该方法就可以进行排序了。
2.冒泡排序的特点:
(1)总共要需要 数组长度-1 轮比较,因为最后一个数字无需再独自排序
(2)第一轮比较的次数是 总长度-1,第二次比较的次数是 总长度-2,所以第 i 轮比较次数是 总长度 - i
3.代码:
#include <iostream> using namespace std; int main() { /* 总共要需要 总长度-1 轮比较,因为最后一个数字无需再排序 第一轮比较的次数是总长度-1,第二次比较的次数比第一次-1 */ int num[]{15,22,90,23,9}; int n=sizeof(num)/sizeof(int); //外层循环控制比较的轮数 for(int i=0;i<n-1;i++ ){ //内层循环控制每轮的比较和交换 //下标从0开始所以是 n-i-1 for(int j=0;j<n-i-1;j++){ //将比较大的数向上冒泡,(这里的上指的是数组较大的坐标,当然你可以按自己的思路理解) if(num[j]>num[j+1]){ int t=num[j]; num[j]=num[j+1]; num[j+1]=t; } } } for(int i=0;i<n;i++) cout<<num[i]<<" "; cout<<endl; return 0; } 输出:
9 15 22 23 90 选择排序 1.
Arduino端 1、连接上单片机,选择对应的端口
2、Arduino端简单代码示例
//Arduino端代码 void setup() { Serial.begin(9600); // 打开串口,设置波特率为9600 bps } void loop() { int val;//定义数据类型 val=analogRead(0); //光照传感器接于模拟口0 Serial.println(val,DEC);//从串口发送数据并换行 delay(200);//延迟发送 } 3、上传程序到单片机
Unity端 1、下载unity插件实现Arduino和Unity的通信的unity插件https://download.csdn.net/download/weixin_42872122/84992844
2、打开可实现读写的场景
3、修改端口和波特率值一致
4、 运行就可以得到单片机传过来的值啦
5、当然啦,这个是插件的演示程序。想复刻到自己的项目中也很简单,按照演示程序的东西依次添加进自己的项目就可,就添加两个脚本的事。 6、脚本中需要注意的几个点 //定义端口 public string portName = "COM3"; //定义波特率 public int baudRate = 9600; //
FRS100自主研发的低功耗远距离无线监控模组,模组分为主机(FRS100-A)和从机(FRS100-B)两个硬件模块,搭配自主研发的APP一起使用。
从机自带镜头,各个从机可以把监控数据上传到主机,主机通过RJ45连接公网,使用户可以在APP上实时动态掌握监控情况。
网络摄像机又叫IP CAMERA(简称IPC)由网络编码模块和模拟摄像机组合而成。网络摄像机内置一个嵌入式芯片,采用嵌入式实时操作系统。网络摄像机是传统摄像机与网络视频技术相结合的新一代产品。
智能远距离无线监控模组,既先进、实用、成熟、可靠、又具有开放性和可扩展性,让数字视频监控对现场设备进行集中监控、控制和管理,使这些设备得以安全、可靠、高效地运行。
最大限度地发挥智能管理的作用,创造安全、健康、舒适宜人和能提高工作效率的优良环境,节约能源,并减少维护人员,是解决远距离视频监控领域问题最优解决方案。
IPC支持WIFI无线接入,基于网络传输的数字化设备,还有网络输出接口,可直接将摄像机接入本地局域网。
可以实现音视频同步存储录制,同时具备手动录像、报警录像、定时 录像等多种录像方式。可在设备上智能检索录像文件,并且直接在显示屏上回放录像。
智能低功耗远距离监控模组,可用于别墅、庭院、果园、养殖、工程、水利、石油开发、户外科考调研、平安农村及城市项目建设、森林防火领域。
整套方案采用两个硬件模块和一个APP软件,硬件模块分为主机和从机,从机自带摄像头和WIFI模块,可将采集的视频流数据,通过WIFI传输到主机(一个主机最多可接六个从机),主机可通过RJ45连接至外网。
将各个从机传输过来的数据,通过P2P透传技术传送至APP端,使用户能在APP端在线观看监控信息,也可以通过APP给从机下发各种指令,主机模块预留硬盘接口,用户也可以在将监控的数量存储到硬盘里面。
主机模块(FRS100-A)器件图
从机模块(FRS100-B)器件图
从机FRS100-B镜头YTOT,FNO.:2.0±10%;焦距:2.58±5%;光学后焦:4.25±0.2(in air),机械后焦:4.17±0.2(in air);分辨率:1920*1080(HD)。
主机FRS100-A网络WIFI,私有协议云望CWS2200 WIFI模组;RJ45 ,通过RJ45连接至公网。本地存储,支持移动硬盘,支持USB和SATA接口。闪存16M。
智能FRS100低功耗远距离无线监控模组,支持MESH组网自动信道侦测,支持并发6路MESH组网,最远距离<3KM,复杂环境有衰减。支持APP上实时监控;P2P透传;手机客户端安卓、IOS;支持录像回放;支持手机实时截图。
如果家人外出,还可以帮你看家。如果有人非法闯入,或者家里不慎起火,会立刻报警,同时抓拍图片,通过email把图片发送给你,让你第一时间了解家里发生的事情。
HTML5媒体元素(audio与video)及其常用属性详解
HTML 音频(Audio)元素 HTML5 元素是一个 HTML5 元素,在 HTML 4 中是非法的,但在所有浏览器中都有效。
The element works in all modern browsers.
互联网上的音频
直到现在,仍然不存在一项旨在网页上播放音频的标准。
今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了在网页上嵌入音频元素的标准,即使用<audio> 元素。
HTML 音频/视频 方法 HTML5 DOM 为 和 元素提供了方法、属性和事件。
这些方法、属性和事件允许您使用 JavaScript 来操作 和 元素。
方法描述addTextTrack()向音频/视频添加新的文本轨道。canPlayType()检测浏览器是否能播放指定的音频/视频类型。play()开始播放音频/视频。pause()暂停当前播放的音频/视频。 audio元素的常用属性 属性描述autoplay设置或返回是否在加载完成后随即播放音频。controls设置或返回音频/视频是否显示控件(比如播放/暂停等)。currentTime设置或返回音频中的当前播放位置(以秒计)。duration返回当前音频的长度(以秒计)ended返回音频的播放是否已结束。loop设置或返回音频/视频是否应在结束时重新播放。paused设置或返回音频/视频是否暂停。preload设置或返回音频/视频是否应该在页面加载后进行加载。 以下我们将使用 <audio> 标签来描述 MP3 文件(Internet Explorer、Chrome 以及 Safari 中是有效的),
同样添加了一个 OGG 类型文件(Firefox 和 Opera浏览器中有效)。
如果失败,它会显示一个错误文本信息:
<audio controls> <source src="horse.mp3" type="audio/mpeg"> <source src="horse.ogg" type="audio/ogg"> Your browser does not support this audio format.
回调的本质:A类a方法调用B类的b方法,b方法再调用A类的c方法。
举个例子:
现在领导要员工A做一件事,给他发布了任务,需要员工A做完后通知再领导。
对于领导来说:发布任务(fabuTask),获得结果(result)
对于员工来说:处理任务(doSomthing),通知领导结果(result)
代码实现:
/** * 回调的方法 * */ public interface CallBack { void result(String result); } 领导发布的任务:让员工做事 /** * 领导发布任务、获得结果 * */ public class Manager implements CallBack{ @Override public void result(String result) { System.out.println(result); } public void fabuTask(EmployeeInterfce employee) throws InterruptedException { System.out.println("领导发布任务"); employee.doSomthing(new Manager()); } } 员工处理事情,需要接收一个CallBack参数,这样才能知道要向谁反馈 /** * 员工做事、通知领导 * */ public class Employee implements EmployeeInterfce{ @Override public void doSomthing(CallBack callBack) { String result = "
putchar()和printf()的比较 代码练手:输入一个字符,如果输入字符是小写字母(a-z),则程序以大写字母打印;如果输入字符是大写字母(A-Z),则程序以小写字母打印。 如果字符是数字(0-9),程序将打印其值的平方
#include <stdio.h> #include <math.h> int main() { char a,c,d,z; a=getchar(); if(a >= 'a'&&a <= 'z') { a=a-32; putchar(a); } else if(a >= 'A'&&a <= 'Z') { a=a+32; putchar(a); } else { printf("%c, %d\n", a, (a-48)*(a-48));//此处不能是putchar((a-48)*(a-48)) } return 0; } putchar()和printf()的比较:
编程者层面来说,主要有这么几个区别:
①:printf 可以输出一个任意的字符串,还可以有参数,而putchar只能输出一个字符。
②:printf 的返回值是正常输出的参数的数量,而 putchar 则是是否正常输出。
底层来说,区别更大:
①:printf 的时间复杂度是 NlogN , 而 putchar 复杂度是 O1 , 输出句子也只有 ON 。
②:printf 每执行一次,解析一次格式串,而putchar是编译时尽量优化。
printf功能更强大 可以输出各种格式。
putchar只能输出单个字符。因为字符的处理很特殊,所以专门有对字符的处理,如 putchar ,getchar 之类的。
如果执行作业步骤的时候在历史记录中看到报错"SQLServer 服务器主体无法在当前安全上下文下访问数据库"的问题,可以使用以下方式查询哪些数据库开了trustworthy属性,命令如下:
SELECT name, database_id, is_trustworthy_on FROM sys.databases 默认就msdb开的有。
要打开数据库trustworthy属性,命令如下:
ALTER DATABASE 数据库名 SET TRUSTWORTHY 如果还是报错,继续下面语句:
消息:
已以用户 dbo 的身份执行。 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "test"。 [SQLSTATE 08004] (错误 916). 该步骤失败。
ALTER AUTHORIZATION ON DATABASE::数据库名 TO [sa]
文章目录 C++.简易计算器的实现1 前言1.1 知识点 2 实现流程2.1 简单的流程图2.2 主要函数2.3 其它注意点为什么使用vector存储后缀表达式? 3 代码分析3.1 头文件head.h3.2 函数实现 head.cpp3.3 main主函数 4 运行截图5 总结 C++.简易计算器的实现 1 前言 为了巩固自己的C++知识点,写了一个简易的四则运算计算器。尤其多用到了一些简单的数据结构与STL标准库的模板。
1.1 知识点 vector、string、map、stack的使用中缀表达式转后缀表达式对后缀表达式的计算 2 实现流程 2.1 简单的流程图 2.2 主要函数 Despace,去除输入字符串中的空格Convert,对表达式进行转换Caculate,对后缀表达式进行计算 2.3 其它注意点 利用map实现运算符的优先级(这里也可以使用函数与switch语句)Convert函数中使用中转字符串,“当下一字符为符号或NULL时,将数字压入vetcor” 为什么使用vector存储后缀表达式? 这里的vector存储的是string元素,如果直接以string输出,每一个元素是char类型,将不适合参与计算。使用string后可以使用函数stoi与to_string进行字符串与整数的转换。
3 代码分析 3.1 头文件head.h #ifndef HEAD_H_ #define HEAD_H_ #include <iostream> #include <string> #include <vector> #include <stack> #include <map> using namespace std; //空格的去除 void Despace(string &s); //中缀表达式转后缀 vector<string> Convert(string &s); //对后缀表达式进行计算 void Calculate(vector<string> &s); #endif 3.
最近在各个项目中因为相对路径的问题苦恼许久。尤其是给窗口设置图标时们总是出现java.lang.NullPointerException,在网上寻找解决方法时,找到的只说要修改Working directory,但是也没说要改成什么。
下面说一下要怎么修改。
1、修改的位置为:Run ->Edit Configrations ->Working directory
例子:
比如我的项目是D:\com\test test是项目名称,
图片的绝对路径为D:\com\test\src\image\logo.jpg ,
类的绝对路径为D:\com\test\src\Main.java
那么在类里引用图片的相对路径就应该是 image/logo.jpg
Working directory为 D:\com\test\src
如果有其他lib resources等package的话,Working directory可能就不能写到src了,得写到上一级。
在用到el表达式的c:foreach时,出现以下错误
因为score是一个自定义的数据类型,刚开始怀疑是否不可以引用对象属性,后来始终不能解决问题。偶然发现在as类中没有写score的get set方法。于是添加上了。后来经过查询,发现在引用时属性的首字母需要小写,于是进行修改。运行成功!
一、Qt写XML文件
1.准备xml文件
QFile file("my.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
2.准备QDomDocument对象doc
QDomDocument doc;
3.准备QDomProcessingInstruction处理指令对象instruction,使用QDomDocument的createProcessingInstruction创建指令,并使用QDomDocument的appendChild, 将指令添加到doc中
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml","version=\"1.0\"encoding=\"utf-8\"");
doc.appendChild(instruction);
4.使用QDomDocument的createElement创建根元素,使用QDomDocument的appendChild, 将根元素添加到doc中
QDomElement root = doc.createElement(tr("library")); //根元素的值为library
doc.appendChild(root);
5.为根元素root添加子元素
QDomElement book = doc.createElement(tr("book")); //根元素的子元素book
QDomAttr id = doc.createAttribute(tr("id")); //创建属性
id.setValue(tr("1")); //设置属性的值
book.setAttributeNode(id); //将属性添加到子元素book中
6.为元素book添加子元素及设置值,并将子元素添加到book元素中
QDomElement title = doc.createElement(tr("title")); //创建book的子元素title
QDomText text;
text = doc.createTextNode(tr("Qt")); //创建节点文本
title.appendChild(text); //将文本设置为title子项
QDomElement author = doc.createElement(tr("author"));
text = doc.createTextNode(tr("shiming"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
7.将book添加到根元素root中
root.appendChild(book);
打开Tomcat\apache-tomcat-9.0.34\apache-tomcat-9.0.34\conf
打开server.xml文件
将8080改为你需要的改的端口号即可
VoIP 运营业务提供的支撑系统,除满足运营费率设定、套餐管理,账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等基本功能以外,系统还融合了 IVR 回拨直拨业务包,
H.323 呼叫建立过程涉及到三种信令:RAS 信令(R=注册:Registration、A=许可:Admission
和S=状态:Status),H.225.0 呼叫信令和H.245 控制信令。其中RAS 信令用来完成终端与网守
之间的登记注册、授权许可、带宽改变、状态和脱离解除等过程;H.225.0 呼叫信令用来建立两
个终端之间的连接,这个信令使用Q.931 消息来控制呼叫的建立和拆除,当系统中没有网守时,呼叫
信令信道在呼叫涉及的两个终端之间打开;当系统中包括一个网守时,由网守决定在终端与网守
之间或是在两个终端之间开辟呼叫信令信道;H.245 控制信令用来传送终端到终端的控制消息,
包括主从判别、能力交换、打开和关闭逻辑信道、模式参数请求、流控消息和通用命令与指令等。
H.245 控制信令信道建立于两个终端之间,或是一个终端与一个网守之间。
虽然H.323 提供了窄带多媒体通信所需要的所有子协议,但H.323 的控制协议非常复杂。此
外,H.323 不支持多点发送(Multicast)协议,只能采用多点控制单元(MCU)构成多点会议,因
而同时只能支持有限的多点用户。H.323 也不支持呼叫转移,且建立呼叫的时间比较长。与H.323
相反,SIP 是一种比较简单的会话初始化协议。它不像H.323 那样提供所有的通信协议,而是只提
供会话或呼叫的建立与控制功能。SIP 可以应用于多媒体会议、远程教学及Internet 电话等领域。
SIP 既支持单点发送(Unicast)也支持多点发送,会话参加者和媒体种类可以随时加入一个已存在
的会议。SIP 可以用来呼叫人或机器设备,如呼叫一个媒体存储设备记录一个会议,或呼叫一个点
播电视服务器向会议播放视频信号。
SIP 是一种应用层协议,可以用UDP 或TCP 作为其传输协议。与H.323 不同的是:SIP 是一种基
于文本的协议,用SIP 规则资源定位语言描述(SIP Uniform Resource Locators),这样易于实现和
调试,更重要的是灵活性和扩展性好。由于SIP 仅作于初始化呼叫,而不是传输媒体数据,因而造成
的附加传输代价也不大。SIP 的URLL 甚至可以嵌入到web 页或其它超文本链路中,用户只需用
鼠标一点即可发出一个呼叫。与H.323 相比,SIP 还有建立呼叫快,支持传送电话号码的特点
编码技术
话音压缩编码技术是VOIP 电话/VOIP 网络电话技术的一个重要组成部分。主要的编码技术
有ITU-T 定义的G.729、G.723(G.723.1)等。其中G.729 可将经过采样的64kbit/s 话音以几乎不
失真的质量压缩至8kbit/s。由于在分组交换网络中,业务质量不能得到很好保证,因而需要话音的
编码具有一定的灵活性,即编码速率、编码尺度的可变可适应性。G.729 原来是8kbit/s 的话音编
前言:
导入新的项目到eclipse,之前设置的个人偏好问题消失。
方法一 1、在已打开的工作空间,点击file,找到Switch Workspace,点击other。
2、Workspace新建工作空间地址,Copy Settings将Preferences勾选上。
方法二 通过导入和导出偏好
导出 1、在已设置好的项目中,空白处右键点击Export,找到preferences
2、选择需要保存的位置,点击finish
导入 1、打开需要导入配置的工作空间,点击Import
2、导入之前导出的偏好文件,点击finish
1. 问题描述 在使用kubeadm init出现报错[ERROR DirAvailable–var-lib-etcd]: /var/lib/etcd is not empty)
[preflight] Some fatal errors occurred: [ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` error execution phase preflight 2. 解决问题和原由 之所有出现/var/lib/etcd报错是因为改目录之前初始化已经生成了该目录,是需要将其删除即可
rm -rf /var/lib/etcd 3. 重新进行初始化
1. 前言 什么是 Beautiful Soup 4 ?
Beautiful Soup 4(简称 BS4,后面的 4 表示最新版本)是一个 Python 第三方库,具有解析 HTML 页面的功能,爬虫程序可以使用 BS4 分析页面无素、精准查找出所需要的页面数据。有 BS4 的爬虫程序爬行过程惬意且轻快。
BS4 特点是功能强大、使用简单。相比较只使用正则表达式的费心费力,BS4 有着弹指一挥间的豪迈和潇洒。
2. 安装 Beautiful Soup 4 BS4 是 Python 第三库,使用之前需要安装。
pip install beautifulsoup4 2.1 BS4 的工作原理 要真正认识、掌握 BS4 ,则需要对其底层工作机制有所了解。
BS4 查找页面数据之前,需要加载 HTML 文件 或 HTML 片段,并在内存中构建一棵与 HTML 文档完全一一映射的树形对象(类似于 W3C 的 DOM 解析。为了方便,后面简称 BS 树),这个过程称为解析。
BS4 自身并没有提供解析的实现,而是提供了接口,用来对接第三方的解析器(这点是很牛逼的,BS4 具有很好的扩展性和开发性)。无论使用何种解析器,BS4 屏蔽了底层的差异性,对外提供了统一的操作方法(查询、遍历、修改、添加……)。
认识 BS4 先从构造 BeautifulSoup 对象开始。BeautifulSoup 是对整个文档树的引用,或是进入文档树的入口对象。
分析 BeautifulSoup 构造方法,可发现在构造 BeautifulSoup 对象时,可以传递很多参数。但一般只需要考虑前 2 个参数。其它参数采用默认值,BS4 就能工作很好(约定大于配置的典范)。
什么是事件冒泡 事件冒泡就是指父元素和子元素有相同的事件,当触发子元素事件时,会向上冒泡,同时也会触发父元素事件
事件冒泡的三个阶段 1、捕获阶段:从window对象传导到目标节点(上层传到底层)称为“捕获阶段”,捕获阶段不会响应任何事件;
2、目标阶段:在目标节点上触发称为“目标阶段”;
3、冒泡阶段:从目标节点传导回window对象(从底层传回上层),称为“冒泡阶段”;
事件冒泡的原理 事件委托原理就是利用事件冒泡机制把里层所需要响应的事件绑定到外层
5.8G微波雷达感应模块方案,具有高集成、高性能、抗干扰能力强、低功耗、高性价比等优势,简化了厂商想要接入传感化、智能化的产品需求。
针对智能家居、智能安防、智能照明、智能门锁等物联网市场,开发业界领先的智能感知、计算处理到无线通信接入云端的雷达感应方案。
智能人体存在感应雷达方案,5.8G存在感应雷达模组,集成高性能32位MCU,单芯片直接输出感应控制信号,真正的SoC。
性能强大,可做丰富算法,拓展性强,适合高性能要求的场景,实现存在感应。支持标准UART接口,可与其他主控或传感器互联互通,也可作为主控使用。
雷达原理是产生并通过发射器发送一个频率随时间逐渐增加的信号,当这个信号遇到物体之后会反射回来,其时延是距离/光速数值的2倍。
而返回来的波形和发出的波形之间有个频率差,这个频率差和时延呈线性关系,将这两个频率做一个减法,就可以得到二者频率的差频(差拍频率),由此就可以计算出物体与雷达的距离。
在此基础上,不仅可以获知被测目标是否存在,还可以计算出目标的位置、方向、距离和速度等信息。
雷达传感器可开发具有强抗干扰性,并支持密集分布的微波探测模块;高集成,小尺寸;可灵活设置感应距离;可灵活设置频点,同频、异频抗干扰能力强;支持挂高应用;支持微动检测;支持存在检测微波雷达感应。
SOC方案保证频率、功率、探测距离和覆盖角度的一致性,有效解决同频干扰、环境干扰等问题,降低成本;灵活的功率、延时可调和PWM驱动功能,使产品适用于多种环境。
通过外接MCU的SPI接口与之相连并进行设置,不受外围IO数量的限制,通过对内部寄存器的操作可实现更加灵活和多样的控制。
雷达传感器的独有特性使其不易受环境干扰、便于隐藏等特点,支持移动侦测感应,还可以支持模糊测距、接近远离、脉冲发射等功能。
5.8G多普勒微波雷达,探测角度可调,高灵敏度,不受光线、灰尘、温度等外部环境影响,距离、延时、频点可通过软件控制,支持脉冲发射低功耗模式,支持低成本测距、方位、接近远离。
作为人体和运动传感器,雷达可以对区域内的人员数量、位置进行精准的感知,并以此为依据去控制照明、空调等系统,实现更高效的节能。
在安防监控领域,尽管摄像头目前是这一领域的主流方案,但是个人隐私也一直是伴随着视觉解决方案的敏感的话题。因此在特定的场合,雷达可以作为一个替代方案,代替摄像头去进行流量分析、入侵检测等工作。
此外“摄像头+雷达”相互联动的方案,还可增强原有方案的性能和可靠性,有利于实现更高的识别率、更低的误报率、更低的人工成本。
雷达传感器可以提供有关人体存在、运动、位置、速度以及与传感器的距离等信息。小型化、低功耗、低成本是雷达方案提供商努力进行技术突破的主要方向。
雷达实现小尺寸、低成本和易用性方面近年来获得长足进展,在物体检测、跟踪、安全控制和防撞警告系统等应用中开启了创新潮。
雷达消费市场刚起步,潜力巨大。在走廊或楼梯时,大声跺脚和咳嗽触发声控的经历很多人都有,在更多的场景下,这种方式有非常大的缺陷,这时候雷达传感器大可派上用场,无需发出任何声音即可为你亮灯。
同样的,一些家电厂商也在把这个功能加入到产品中实现智能化控制,比如在空调安装雷达传感器可以实时探测房间内是否有人,无人时自动关闭,以节省能源。
compareTo 方法是接口 Comparable 的实现 返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值;如果此字符串大于字符串参数,则返回一个大于 0 的值。 说明:
如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。
Integer 和 String 实现了compareTo 方法
实体对象实现方法
package com.study.stream; import java.util.Objects; public class Person implements Comparable<Person>{ private String name; private Integer age; private Integer height; public Person(String name, Integer age, Integer height) { this.name = name; this.age = age; this.height = height; } public String getName() { return name; } public void setName(String name) { this.
一、html5是什么 HTML5 是最新的 HTML 标准。HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件。HTML5 拥有新的语义、图形以及多媒体元素。HTML5 提供的新元素和新的 API 简化了 web 应用程序的搭建。HTML5 是跨平台的,被设计为在不同类型的硬件(PC、平板、手机、电视机等等)之上运行。 二、新增语义化标签 html5中新增的语义化标签可以分为两大类:块元素标签和内联元素标签。
1.块元素标签 (1)<header></header>:定义文档的头部区域
<header>我是头部</header> (2)<nav></nav>:定义导航链接的部分
<nav>我是导航</nav> (3)<section></section>: 定义文档中的节(section、区段)。比如章节、页眉、页脚或文档 中的其他部分。
<section> <header>section中的头部</header> <article>section中的内容区域</article> <footer>section中的脚注</footer> </section> (4)<footer></footer>:定义 页面 的页脚。
<footer>我是页脚</footer> (5)<main></main>:定义文档的主体部分。
<main>文章主体部分放在这里</main> tips:main标签在网页中应该是唯一的,只能出现一次,不能重复出现,只能放在body里面 不能是其他元素的子元素,只能是其他元素的包含框元素。
(6)<aside></aside>:定义页面的侧边栏内容。
<aside>我是侧边栏哈哈哈</aside> (7)<article></article>:定义一个文章区域。
<article>这里放文章哦</article> (8)<figure></figure>:规定独立的流内容(图像、图表、照片、代码等等)。
<figure> <figcaption>独立流内容标题</figcaption> <!-- 独立流内容(图标、代码、图片、表格等) --> </figure> (9)<details></details>:用于描述文档或文档某个部分的细节。
<details> <summary>概要</summary> <!-- 文字/图片等 --> </detail> 2.内联元素标签 (1)<progress></progress>:定义运行中的进度(进程)。
<progress value="进度值" min="最小值" max="最大值"> 你的浏览器不支持此标签 </progress> <!-- 若浏览器版本太低 则不显示进度条 显示浏览器不支持此标签 --> (2)<meter></meter>:定义度量衡。仅用于已知最大和最小值的度量。
sed -i “s分隔符old_str分隔符new_str分隔符g” 操作的目标文件名 注:分隔符可根据替换的字符串进行任意指定,如下指定为#,也可为其他。
实例一:
sed -i "s#old_str#new_str#g" defult.cfg 示例二:
当存在\等字符时,需要进行转义
如在2.txt文件中存在行:url=http://www.baidu
需将2.txt中的baidu替换为aliyun
sed -i "s#http:\\/\\/www\\/baidu#http:\\/\\/www\\/aliyun#g" 2.txt
Ubuntu下安装和配置LDAP服务 此部分也可以参考 LDAP环境搭建
运行如下命令
sudo apt-get install slapd ldap-utils 安装过程会要求输入密码
默认的配置相关的目录在
/etc/ldap 目录结构如下
对配置文件进行简单修改,内容如下
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. # #BASE dc=example,dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #BASE dc=主机名或者用户名,dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 BASE dc=Andrea,dc=com URI ldap://127.0.0.1:389 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs/ca-certificates.crt 终端输入slap然后tab键,可以发现系统中多出来一些可执行文件
slapacl slapauth slapd(守护进程) slapindex slapschema slapadd slapcat(导出ldap数据库文件为.
目录 一、下载二、安装三、设置环境变量四、验证 一、下载 1、通过 python 官网 https://www.python.org/ 找到 2.7 版本进行下载:
https://www.python.org/downloads/release/python-2718/
二、安装 双击下载的安装包进行安装,按提示操作即可。我的安装目录为 D:\Python27
注意:安装后需要重启操作系统,否则后面第4步的验证不成功。
三、设置环境变量 设置环境变量 Python,值为 D:\Python27。
四、验证 cmd 下验证是否安装成功:
三种图形如下 MATLAB代码如下
clc clear Image=imread('红绿圆.png'); R=Image(:,:,1); G=Image(:,:,2); B=Image(:,:,3); figure(1); subplot(2,2,1),imshow(Image),title('image') subplot(2,2,2),imshow(R),title('r')%有红则显示白,没有则黑 subplot(2,2,3),imshow(G),title('g')%有绿则白,无则黑 subplot(2,2,4),imshow(B),title('b')%有蓝则白,无则黑 XYR=((R-G)>80&(R-B)>80); XYG=((G-R)>80&(G-B)>80); XYB=((B-R)>80&(B-G)>80); XYY=((R-B)>200&(G-B)>200&(R-B)&(R-G)<30); sumG=sum(sum(XYG)); sumR=sum(sum(XYR)); sumB=sum(sum(XYB)); sumY=sum(sum(XYY)); if(sumR>sumG&sumR>sumB) disp('It is red!'); MY_Bit_img=XYR; end if(sumG>sumR&sumG>sumB) disp('It is green!'); MY_Bit_img=XYG; end if(sumB>sumG&sumB>sumR) disp('It is blue!'); MY_Bit_img=XYB; end if(sumY>sumR&sumY>sumB&sumY>sumG) disp('It is yellow!'); MY_Bit_img=XYY; end sum_l=sum(MY_Bit_img); sum_r=sum(MY_Bit_img,2); len_l=max(sum_l); len_r=max(sum_r); len=(len_r+len_l)/2; area=sum(sum_l); circle=(3.14*len^2)/4; square=len_l*len_r; triangle=1.732*len_l*len_r/4; a=[circle/area,square/area,triangle/area]; b=[1,1,1]; [value,pos]=min(abs(a-b)); if(pos==1) disp('It is circle!'); elseif(pos==2) disp('It is square!'); else disp('It is triangle!'); end 效果图 红圆
参考:pytorch学习笔记-UserWarning: CUDA initialization: CUDA unknown error - 简书
跑yolov5时,安装好pytorch之后,运行脚本
import torch a=torch.cuda.is_available() print(torch.__version__) print(a) 出现了错误:
UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /opt/conda/conda-bld/pytorch_1623448255797/work/c10/cuda/CUDAFunctions.cpp:115.) return torch._C._cuda_getDeviceCount() > 0 首先检查显卡驱动,CUDA,cudnn,以及pytorch的版本是否匹配,如果不匹配,需要卸载之后重装对应的版本。
CUDA10.2 Python3.8 pytorch1.8 没有错。
如果版本都是正确的,需要设置一下环境变量,输入sudo vim ~/.bashrc,在最后加上:
# 前三行是安装CUDA的时候需要设置的 export PATH=/usr/local/cuda/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export CUDA_HOME=/usr/local/cuda/bin export CUDA_VISIBLE_DEVICES=0 保存退出,试一下是否能够使用CUDA。
xilinx高速收发器学习记录 说明:本文摘自 V3学院 尤老师的培训班笔记,仅用于个人学习,不用于任何商业用途。
满足个人在公交车上或者其他需要不得不等待的时间段内学习的需要。
高速收发器的QUAD,如果级联以共享时钟,往上和往下不能超过2级。也就是说,共享时钟的时候,最多是5个QUAD使用一个gtrefclk。
为什么只能驱动5个,因为时钟的驱动能力有限。
每个quad是4个收发对,5个quad就是20个收发对。GTP的带宽为5G.
GT0-GT3可以使用同一个gtrefclk,也可以自定义选择使用不同的gtrefclk。(一个QUAD有两个gtrefclk参考时钟)
======================
Gtrefclk进来必须要进一个IBUFDS_GTE.即一个差分转单端的buf
HROW是全局时钟放在水平方向还是垂直方向的节点,ODIV2是输出给用户逻辑用的,可以分选二分频或者不分频或者直接拉低降低功耗。
======================
GTE输出的时钟可以接GT-COMMON(共享时钟资源)。GT-COMMON是在Reference Clock Distribution中。
可以通过在common原语上选择给QPLL哪个时钟,实现四个收发对用不同的参考时钟。
======================
高速收发器的结构
1)TX
FPGA Parallel 的接口就是逻辑的并行数据,比如AXI的接口。
用户的并行数据实际是64bit, PCS中会插入两bit数据让他变成66bit.(做64b/66b编码),但是PCS parallel clock 和PMA parallel clock之间的交互,它并不会一次将66位取走,比如他一次取走32位,两次才会取走64位。多余的两位就取不走了,怎么办?
每一次多两位,等到16个周期之后,就满32位了,此时TX Sync Gearbox缓存了32位了,就会告诉用户端,让他停一拍,此时TX Sync Gearbox就把积累的32位传递给PMA parallel clock这边了。
TX-PCS中有bist数据(pattern generator, pcie beacon, sata oob),可以发送出去,再接收端接受,从而测试物理连接是否正常。
TX-PMA中有预加重和后加重,且PMA都是串行数据。
TX Serial Clock 是串行时钟,是端口串行速率的一半,原因是上升沿和下降沿都发送数据。
====
2)Rx
Rx-PMA中有CDR(时钟恢复模块),依赖refclk,从数据中将时钟恢复出来。
Rx-PCS中有checke模块,检查TX发过来的bist数据是否正确(如果有),验证物理层是否工作正确。
====
为了便于理解,PMA的功能可以简单描述为:
1)串并转换(图中的SIPO和PISO);
2)模拟部分;
由此可以反推出来,PCS中的功能,都是并行的数字电路处理。
理论上说GTX的最小必要单元就是PMA,其主要原因就是核心的模拟部分。而PCS理论上可以全部由FPGA普通逻辑来实现。当然作为硬核提供的PCS功能更多、性能更好、使用更方便。
======================
高速收发器的速度
GTP < GPX < GTH < GTZ < GTY < GTM
Ubuntu 安装软件报错问题
错误信息
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable)
解决办法:
sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock
由来 前几天在一个游戏设计群里看到有人发的一份数值策划笔试题,虽然不知道是不是真的是数值策划的笔试题,但每个题都还挺有意思的。这第一题就在我们宿舍中产生了一段短暂的讨论,当时的讨论都是定性的,没有严格分析,今个闲着就把这一道我也不知道叫什么名字就暂且叫做“三枪手决斗”问题用编程的方法看一下结果。
题目 彼此痛恨的ABC三个枪手准备决斗。A枪法最好,平均十发八中。B的枪法次之,平均十发六中。C枪法最差,平均十发四中。假设他们了解彼此实力,也能做出理性判断。
三人同时开枪,谁的存活概率大?
解法一 秉承着由简单到复杂的做法,我先假设这是个只有一回合的静态博弈,每个人想让自己存活的概率最高,这应该是直观上最容易想到的情景了。
在这样的假设下,策略空间一共是2*2*2(A、B、C分别选择射杀另外的谁),然后每个策略组合下会有三个值,分别是三人的存活概率,代码如下:
import numpy as np prob=[0.8,0.6,0.4] value=np.zeros((2,2,2,3)) print(value.shape) for i in range(0,2): for j in range(0,2): for k in range(0,2): a,b,c=1,1,1 if i==0: b*=0.2 else: c*=0.2 if j==0: a*=0.4 else: c*=0.4 if k==0: a*=0.6 else: b*=0.6 value[i][j][k][0]=a value[i][j][k][1]=b value[i][j][k][2]=c print(value) 下面是输出,第一维是A的两个选择(杀B\C),第二维是B的两个选择(杀A\C),第三维是C的两个选择(杀A\B),最后一维就是三人分别的存活概率了。(应该不会有人选择自杀吧,大概)
可以看到啊,每一种策略组合都是此静态博弈的纳什均衡点(),这也很好理解,因为自己无论做出什么选择都没办法改变自己被杀的概率(除了朝自己开枪),只是改变了别人被杀的概率。这就没意思了,但是另外再想,既然他们三个要进行决斗,那么自己活着肯定就不是唯一的目的(不然不决斗不就完事了),他们还想让对方死!基于这点,做出如下解法二的改进。
解法二 因为题中提到是“彼此痛恨”的枪手,那按道理讲,每个人应该也很乐意看到对方死亡。如果把自己活着视为奖赏1,其他的每一个人死亡给自己的奖赏也为1,则
value2=np.zeros((2,2,2,3)) for i in range(0,2): for j in range(0,2): for k in range(0,2): value2[i][j][k][0]=value[i][j][k][0]*1+value[i][j][k][1]*(-1)+value[i][j][k][2]*(-1) value2[i][j][k][1]=value[i][j][k][0]*(-1)+value[i][j][k][1]*1+value[i][j][k][2]*(-1) value2[i][j][k][2]=value[i][j][k][0]*(-1)+value[i][j][k][1]*(-1)+value[i][j][k][2]*1 print(value2) 直接基于已经求解出的存活概率进行进一步的计算即可。结果如下:
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
PackagesNotFoundError: The following packages are not available from current channels:
opencv-python=4.5.1.48 Current channels:
https://repo.anaconda.com/pkgs/main/win-64https://repo.anaconda.com/pkgs/main/noarchhttps://repo.anaconda.com/pkgs/r/win-64https://repo.anaconda.com/pkgs/r/noarchhttps://repo.anaconda.com/pkgs/msys2/win-64https://repo.anaconda.com/pkgs/msys2/noarch To search for alternate channels that may provide the conda package you’re
looking for, navigate to
https://anaconda.org and use the search bar at the top of the page.
前端开发完成的项目,不管是使用vue、react、或者是别的web项目,最终都是要部署到外网上,让用户可以通过域名来访问。这篇文章以一个 react 移动端的项目为例,讲怎样将自己本地的项目部署到阿里云服务器上。
文章比较长,第一次部署项目的大体流程如下:
部署前的准备,项目打包、阿里云服务器准备;本地连接阿里云服务器;服务器安装epel仓库;服务器安装nginx;启动nginx,如果出现无法访问网站,需要检查端口号的配置;上传本地文件到服务器;服务器配置nginx代理;服务器搭建 node 环境;服务器部署Mock数据,使用pm2管理node进程。 1. 部署前的准备 本地要部署的项目。阿里云服务器,服务器操作系统一般都是 CentOS ,版本不要选最新的,容易有问题,选7.5或者7.6都可以。 1.1 项目打包 终端进入到项目根目录,执行 npm run build,对项目进行打包,打包成功显示如下,打包完成后在根目录下会生成一个 build 的文件夹(如果是vue项目,会生成 dist 文件夹),部署就是将 build 或者 dist 文件夹里的内容放在公网上。
打包后生成的 build 文件夹及里面的内容。
1.2 登录阿里云后台 登录阿里云后台 => 控制台 => 云服务器ECS => 实例,打开实例管理控制台,阿里云平台登录地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
2. 本地连接阿里云服务器 方式一:通过阿里云云服务器管理控制台中的远程连接进行连接。
输入用户名(默认为root)、密码(阿里云的登录密码/初始化磁盘时设置的密码),点击确定登录。
登录后看到这个页面说明已经登录成功了。
方式二:本地终端连接
在本地终端中输入下面的命令,服务器用户名默认为root,公网ip在云服务器管理控制台中可以找到。
ssh 服务器用户名@公网ip
输入 yes,回车
输入登录密码,输密码的时候,不会显示输入的内容,输完直接回车就行
出现下面这个页面则说明连接成功。
3. 装epel仓库 终端中继续输入下面的命令,安装epel仓库,-y表示一路确认。
yum install epel-release -y
4. 服务器安装nginx 终端中执行下面的命令,安装nginx。出现下面的内容,说明安装成功。
yum install nginx -y
5. 启动nginx 在终端执行下面的命令,启动nginx,执行命令后如果没有报错,则说明执行成功。
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1 阶 + 1 阶2 阶 示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶 提示:
1 <= n <= 45
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs
方法一:动态规划+滑动数组
C++提交内容:
class Solution { public: int climbStairs(int n) { int p = 0, q = 0, r = 1; for(int i = 0 ; i < n; ++i){ p = q; q = r; r = p + q; } return r; } };
1.Dataset
pytorch中提供了两种Dataset,一种是Dataset,另一种是IterableDataset。
在构建Dataset子类的时候,一般来说只需要定义__init__、__get_item__和__len__这3个方法,它们的作用分别如下:
__init__:初始化类
__get_item__:提取Dataset中的元素,通常是元组形式,如(input,target)
__len__:在对Dataset取len时,返回Dataset中的元素个数
IterableDataset是一个迭代器,需要重写__iter__方法,通过__iter__方法获得下一条数据。(这个目前没有遇到,待深入研究)
2.DataLoader
DataLoader提供了将数据整合成一个个批次的方法,用于进行模型批量运算。DataLoader中有如下几个需要注意的参数:
batch_size:一个批次数据中的样本数量
shuffle:打扰数据,避免模型陷入局部最优的情况,在定义了sampler之后,这个参数就无法使用了
sampler:采样器,如果有特殊的数据整合需求,可以自定义一个sampler,在sampler中返回每个批次的数据下标列表
pin_memory:将数据传入CUDA的Pinned Memory,方便更快的传入GPU中
collate_fn:进一步处理打包sampler筛选出来的一组组数据
num_workers:采用多进程方式加载,如果CPU能力较强,可以选择这种方法
drop_last:在样本总数不能被批次大小整除的情况下,最后一个批次的样本数量可能会与前面的批次不一致,若模型要求每个批次样本数量一致,可以将drop_last设置为True
一、nohup方法 1.默认将日志输出到nohup.out文件里:
nohup xxx.py & 2.指定日志输出到特定文件:
nohup xxx.py >output 2>&1 & 操作系统中有三个常用的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
一般当我们用 > output.txt,实际是 1>output.txt的省略用法;< output.txt ,实际是 0 < output.txt的省略用法。
2>&1的意思 :
这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖。
(引用https://www.cnblogs.com/bhchenli/p/7744132.html)
二、tmux方法 常用命令:
tmux new -s <session_name> #创建 tmux ls #显示session列表 tmux a #连接上一个session tmux a -t <session_name> #连接指定session,a可以换成attach tmux rename -t <session_original_name> <session_new_name> #session重命名 tmux kill-session #关闭上一个session tmux kill-session -t <session_name> #关闭指定session tmux kill-session -a -t <session_name> #关闭指定session以外的所有session tmux kill-server #关闭所有session 快捷键操作:
方案1 通过MyBatis配置文件创建读写分离两个DataSource,每个SqlSessionFactoryBean对象的mapperLocations属性制定两个读写数据源的配置文件。将所有读的操作配置在读文件中,所有写的操作配置在写文件中。
方案2 通过Spring AOP在业务层实现读写分离,在DAO层调用前定义切面,利用Spring的AbstractRoutingDataSource解决多数据源的问题,实现动态选择数据源
方案3 通过Mybatis的Plugin在业务层实现数据库读写分离,在MyBatis创建Statement对象前通过拦截器选择真正的数据源,在拦截器中根据方法名称不同(select、update、insert、delete)选择数据源。
方案4 如果你的后台结构是spring+mybatis,可以通过spring的AbstractRoutingDataSource和mybatis Plugin拦截器实现非常友好的读写分离,原有代码不需要任何改变。推荐第四种方案
https://blog.csdn.net/u010681191/article/details/79748173
思路:首先遍历循环文件夹,输出地址判断是否读对了文件,读取出文件中的内容,用正则匹配的模式匹配匹配出对应的字段,将两个匹配出来的列表字段合并,去重,写入目标文件夹中。 import re # 导入正则包 import os path = "D:\腾讯QQ\QQ下载\资源" # 文件夹目录 files = os.listdir(path) # 读取文件夹目录 allresult = [] # 定义空列表 for file in files: # 遍历文件夹 position = path + '\\' + file # 构造绝对路径,"\\",其中一个'\'为转义符 print(position) f = open(position, "r", encoding='utf-8') # 设置文件对象 data = f.readlines() # 直接将文件中按行读到list里,效果与方法2一样 pattern = re.compile('rsas_.\S*') # 匹配从rsas开始,到空格处结束的内容 result = pattern.findall(str(data)) # 模式匹配方法,找到所有模式为pattern的字段 pattern2 = re.compile('RSAS_.\S*') result2 = pattern2.findall(str(data)) allresult = allresult + result + result2 # 两个模式为去除来的列表合并 f.
使用T-SQL语句将excel表数据写入SQLserver的实现方式.
一、使用OPENDATASOURCE前需要确保该服务开启:
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 二、相关操作语句
--SQLserver中查询EXCEL表中的数据 SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=C:\test.xlsx;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"') ...sheet$ --表格存放路径可以自定义,一般都是C盘. --将excel数据插入到数据表,进行数据加工处理,注意查询出来的列和表列数需一致. insert into test.dbo.test(字段名A,B,C,D) --必须和EXCEL列名一致. SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=C:\Data\DDfiles\test.xlsx;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"') ...[sheet$] --表格文件里的表名 三、使用结束后关闭。
--使用完成后,关闭Ad Hoc Distributed Queries: exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_configure 'show advanced options',0 reconfigure
随着Window10操作系统停止支持,Win11已经开始了普及。经过更换系统,对 默认的Edge浏览器进些配置,目前工商银行、农业银行的电子银行,已经可以通过Edge,以兼容IE的方式,正常登录和使用。
从支持性上看,工行是以Edge扩展插件实现支持,而农业银行,通过在PC上安装密码控件,K宝驱动,提供支持。
工商银行
农业银行
相对于之前无法在Windows10 、Windows Server 2022 上无法正常使用,这一点还是很好的
当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。
当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法,作用对象是调用该方法的对象。
结论:类锁和对象锁不同,他们之间不会产生互斥。
public class SynchoronizedDemo { //synchronized修饰非静态方法 public synchronized void function() throws InterruptedException { for (int i = 0; i <3; i++) { Thread.sleep(1000); System.out.println("function running..."); } } //synchronized修饰静态方法 public static synchronized void staticFunction() throws InterruptedException { for (int i = 0; i < 3; i++) { Thread.sleep(1000); System.out.println("Static function running..."); } } public static void main(String[] args) { final SynchoronizedDemo demo = new SynchoronizedDemo(); Thread t1 = new Thread(new Runnable() { @Override public void run() { try { staticFunction(); } catch (InterruptedException e) { e.
一,更新ubuntu以及安装snap(以下内容均在root权限下执行), 1.先使用"whereis snap"来确认是否已经安装snap,如果有输出路径则已安装, apt update # 更新源 2.安装snap, apt install snap apt install snapd 3.使用 snap list查看是否安装成功 nextcloud 22.2.3snap3 29249 latest/stable nextcloud✓ - 二,配置 1.输入自己的IP地址来登录nextcloud,第一次登录需要设置管理员账号的密码, 2.遇到访问不受信任的域名和ip,在config.php的 'trusted_domains' 中添加你的域名或ip nano /var/snap/nextcloud/current/nextcloud/config/config.php 3.配置Https,
1.Let’s Encrypt证书:(我没弄成功)
nextcloud.enable-https lets-encrypt 输入邮箱和域名即可
自签名证书:(可以使用Https 但是浏览器会提示不安全)
nextcloud.enable-https self-signed 使用自己的ssl证书 (自己购买十几块钱也可以白嫖,自行百度)
将 <*.key> <*chain.crt> <*public.crt> 放到 /var/snap/nextcloud/common 下,然后执行以下命令:
nextcloud.enable-https custom -s <cert> <key> <chain> 三,挂载本地硬盘作为数据存放点 1. 创建数据目录
mkdir /var/snap/nextcloud/common/nextcloud/目录名 2.查看硬盘信息
fdisk -l 3.格式化硬盘
mkfs.exfat /dev/sda1 # 注意这里的路径输入自己的,在硬盘信息中有体现,不要原封不动的复制我这个,万一格式化错了就完了 4.挂载硬盘到刚刚创建的目录
mac环境下java研发相关环境配置教程。
一、jdk
进入官网进行下载,选择8系列的版本。
Java Downloads | Oracle
安装完成后,配置环境变量。
在终端下输入:open .bash_profile 命令,会打开此文件(如果没有则手动创建),添加如下内容。
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home PATH=$JAVA_HOME/bin:$PATH:. CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:. export JAVA_HOME export PATH export CLASSPATH 保存文件,在终端下输入 source .bash_profile 命令使配置生效。
在终端下输入 java -version 命令能够输出java版本信息,表示安装配置成功。
二、maven
进入官网进行下载:
Maven – Download Apache Maven
下载之后解压到某个文件夹下。
再次修改bash_profile文件为:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home PATH=$JAVA_HOME/bin:$PATH:. CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:. export M2_HOME=/Users/xxx/apache/apache-maven-3.8.1 export M2=$M2_HOME/bin export PATH=$PATH:$M2 export JAVA_HOME export PATH export CLASSPATH 注意:当 Maven 升级到3.8.1 之后,执行 mvn clean package 命令后会报错如下:
maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories maven在3.8.1 的默认配置文件中增加了一组标签,如果仓库镜像是http 而不是https 就会被拦截禁止访问,而当前公司私服一般是http 而不支持https.
短是因为过去是有工作要做,而所谓的”旅“,只不过是在淮安看了看庙而已,总共几个小时。在盐城也就呆了6个小时。工作2小时,剩下的时间就是等车、坐车了。
目的地是盐城,但实际上是先到的淮安,因为机票比起直接去盐城便宜1/3。
第一天,早上9点出发,折腾到机场,下午4点半到了淮安的涟水机场(中间还停了一次义乌)。再折腾去酒店,到的时候7点,天都黑了。好在不冷。10小时就这么过去了:全在路上。120一天的酒店,从外面看是不咋地的,房间内也就那么回事儿,好在明面儿上卫生还可以,不临街,也不吵。悲剧的是笔记本电脑电源没带,就这样只能喝了几杯啤酒,看了看电影。
第二天,早上7点出去吃早饭,酒店马路对面就有个淮味面馆。点的鱿鱼面真心不咋地,怪不得别人来了都是肉丝面、雪菜面,这顿算是失败了。这时正好是小朋友门上学的点儿(附近有个小学,大概隔一站路),马路上汽车、电动车多到不行,自行车极少。饭后去高铁站。这附近大部分是开发区,还有富士康的厂,路况好,马路宽而且没车,也没人。就不得不说一下淮安的公交车司机师傅。开车相当稳,态度相当好,要点赞。淮安高铁站不错,宽敞、整洁、路标明确,可见管理上心。顺便吐槽一下北京的火车站,还有北京的机场:都不小,可内部规划过于拥挤,满眼都是是各类商家,空间被切割的七零八落,留给乘客的空间被过多挤占。像南站,本来旅客就多,首发车也多,上车时队都排拐弯儿了,不同的队也都快混了,满世界都是人,想找个地方坐都不容易。根本原因是留给旅客的空间太少。相比而言广州南站、淮安站,包括盐城站,站内的商业设施的占地控制得很好,留给乘客很多空间,候车厅内的视野较好,遮挡视线的各种店铺没那么多,不熟的人找指示牌什么的就比较容易。当然肯定有些情况我是不知道的,那就不管了。从淮安,高铁半小时到盐城,再45分钟公车到工作地点。慢悠悠地2小时干完工作,就又准备回淮安了。失算的是没有在市内吃午饭。到了盐城站发现饭馆儿价格就都上去了。最后整了个面包,还好有热茶。这么着,不到4点就又回到了淮安。还住那个地儿。好好研究了一下附近,发现有个羊肉汤馆儿评价似乎可以。晚饭时去吃了,发现上当了。灰常一般。我记得以前在郑州吃羊肉汤,都得有直径1m的大锅不停地滚着白汤才行。幸好吃的小碗。晚上还是看电视,变1,变2复习了一下,确实精彩。
第三天,没有正经事儿了,但飞机要下午5点才飞,所以这才有了”旅“,这就是整天的计划了。
早饭是包子+辣汤。一般般了,辣汤吗,其实一点儿不辣的。
先去景会寺,就在开发区的办公中心马路对面。看资料发现是始建于北宋,据说以前很大,香火极旺,不过几起几伏,最终1943年焚毁了。现在的是两年前新建的,号称淮安首寺。山门和孙悟空变的庙一模一样,区别是没旗杆。山门前有个小广场,再前面是个影壁,用来把马路隔在外面。影壁的浮雕,应该是佛祖说法的故事吧。影壁和广场之间有个小水池,里面用荷花缸拼成了万字,只可惜太早,荷花还没发芽,只有些去年的荷叶和莲蓬,都干干的,黑褐色,或立或倒。寺庙整体不大,也没什么游客。主线上是山门、天王殿、大雄宝殿、毗卢阁和法堂。 两侧有钟楼、鼓楼、祖师堂什么的。不过山门里只有四大天王,中间是空的,弥勒佛供奉在其后的天王殿里,背后是韦陀,这和以前看得大部分寺庙格局不同。后面大雄宝殿当然供奉释迦摩尼,在后面的毗卢阁和法堂就不让看了。不过从门缝里还是看到法堂中间挂了一幅画,题字是”登狮子座“。后面还看了观音殿,里面供奉的是千手千面观音。最后看了一个殿,供奉的关公:左边关平、右边周仓。当时心里一闪念:可能是为了让来参拜的人多点儿吧。转过来,发现有个捐的巨大石头的莲花缸,再过一个小石桥,旁边是一排用来净手的小莲花缸,都是整块石头雕的,每个缸上有个滴水,里面放了一个竹勺。细看构造,其实就是半截连节、连枝的竹筒,而且每个都特意把小竹枝缠绕在主枝上,末端仔细地用线缠好。形状上看有点儿像丁丁历险记里船长的烟斗。
时间还早,按计划,去文庙并在路上午饭。一看地图,发现从酒店坐93路到景会寺,从景会寺到文庙,还是93路,而且从文庙出来,走10分钟就是去机场的公车,这还是挺顺的。
文庙在市里。市里吗,和一般的市里就没什么区别了。下车先找午饭。当心里想着:看到第一个面馆就进去吃的时候,一抬头,就看到了”胖子面馆“。走进去就能发现,是那种本地的普通人常去的饭馆儿。特色各种面条儿。热菜号称是淮扬菜,还有不少看起来不错的凉菜:卤蛋、炸虾、拌海带、花生米什么的。点了皮肚面,这个熟,在南京吃过好多次的,口味无论如何不容易翻车。拿着餐牌往里走,过个门就是人少的区域,但就立刻发现了俩喝的晕乎乎的家伙:舌头粗了,说话声音也大了,絮絮叨叨,而且显得比平时更讲义气、更牛逼。当时心里是咯噔一下这顿饭药丸。坐定,面上来了:一碗面,一盘里面有7~8中配料的炒皮肚!这个就有点儿独特了。就着炒皮肚吃了半碗面,然后倒在一起了。旁边俩哥们儿谈完从中国银行总经理那儿贷款3000万元的事儿以后,又抓住了可怜的大厨强行讨论小葱炒鸡蛋该怎么放油,怎么控制火候,一顿BB,我想大厨字典里恭维的话已经快见底儿了,又不好意思强行结束谈话,这个尴尬啊~~~我赶快吃碗面逃跑。
这真是嗑瓜子儿磕出个臭虫。
文庙本来就不咋滴,本质上是一堆开在返修古建筑和仿古建筑里的小商铺。宠物花鸟,书画文玩,小孩儿玩具,反正就是各种用的玩儿的。有点儿失望。本来就不是节假日,人少,好多店铺都铁将军把门。再加上之前的臭虫加持,逛逛就撤退了。时间多得很,慢悠悠的去公车站,发现淮安竟然还有有轨电车。线路的一部分沿着大运河,还真的有点儿特色的。
到了机场就是等着了。
上飞机有个小插曲,头回遇到:廊桥弄错了!本来大家都沿着用警戒线圈起来的路线往里走。突然之前进去的人又都出来了,嚷嚷着”没飞机啊“。我擦~~~,这也行。走到窗边一看,果然没飞机!廊桥尽头啥也木有。还是负责检票的小哥动作快,一看大家要回候机厅,立马明白了,飞也似的跑过来改警戒线。于是大家又鱼贯而入。
就这样,晚上11点半的时候,我打开门,看到灰灰在门里站着:喵~喵~喵~~~
小区搜索过程之后,UE已经与小区取得下行同步,得到小区的PCI(Physical Cell ID)以及检测到系统帧的timing(即10ms timing)。接着,UE需要获取到小区的系统信息(System Information),这样才能知道该小区是如何配置的,以便接入该小区并在该小区内正确地工作。小区会不断地广播这些系统信息。
系统信息是小区级别的信息,即对接入该小区的所有UE生效。系统信息可分为MasterInformationBlock(MIB)和多个SystemInformationBlock(SIB),每个系统信息包含了与某个功能相关的一系列参数集合。系统信息类型包括:
表2.1:系统信息类型
并不是所有的SIB都必须存在。例如对于运营商部署的基站而言,就不需要SIB9;如果某小区不提供MBMS,就不需要SIB13。
有3种类型的RRC消息用于传输系统信息:MIB消息、SIB1消息、一个或多个SI消息。
图2.1:3类用于发送系统信息的RRC消息
小区是通过逻辑信道BCCH向该小区内的所有UE发送系统信息的。
从图2.2、图2.3、图2.4可以看出,逻辑信道BCCH会映射到传输信道BCH和DL-SCH。其中,BCH只用于传输MIB信息,并映射到物理信道PBCH;DL-SCH用于传输各种SIB信息,并映射到物理信道PDSCH。
图2.2:下行信道匹配
图2.3:从RRC信令中可以看出:MIB在BCH上传输
图2.4:从RRC信令中可以看出:SIB在DL-SCH上传输
2.1 MIB 对于MIB而言,除了RRC消息(MasterInformationBlock)里所带的信息外,它还有额外一些信息要告诉UE。本节所要介绍的,就是小区会通过MIB告诉UE哪些信息,以及UE是如何检测到这些信息的。
UE通过检测PBCH,能得到以下信息:
(1)通过接收到的MasterInformationBlock可以知道小区的下行系统带宽、PHICH配置(详见《LTE:PHICH(一)》)、系统帧号(System Frame Number,SFN。更确切地说,获取到的是SFN的高8位,最低2位需要在PBCH盲检时得到,这会在后面介绍)。
(2)小区特定的天线端口(cell-specific antenna port)的数目:1或2或4。
(3)用于L1/L2 control signal(包括PCFICH、PHICH、PDCCH)的传输分集模式(transmit-diversity scheme):PBCH和L1/L2 control signal都只能使用单天线传输或传输分集,如果使用传输分集, PBCH和L1/L2 control signal会使用相同的多天线传输分集模式。
从图2.2可以看出,MIB会在物理信道PBCH上传输。PBCH时域上位于每个系统帧的子帧0的第2个slot的前4个OFDM symbol上,并在频域上占据72个中心子载波(不含DC)。对应RE不能用于发送DL-SCH数据。如图2.5所示。
图2.5:BCH传输信道的资源映射
把BCH传输限制在72个中心的子载波,而不考虑小区的下行系统带宽的原因在于:UE在接收BCH时并不知道小区的下行系统带宽。因此UE在第一次接收BCH时,可以假定小区的下行系统带宽等于可能的最小下行系统带宽(6个RB,对应72个子载波)。在解码了MIB后,UE就能从MIB中得到实际的下行系统带宽。
MIB在40ms周期内重复4次,每一次发送的PBCH都携带相同的coded bit,也就是说,每一次都是可以独自解码的。因此,在信道质量(SIR)足够好的情况下,UE可能只接收这40ms内的其中一个,就能够成功解码出PBCH的内容;如果不行,就与下一个10ms发送的PBCH的内容进行软合并,再进行解码,直到成功解码出PBCH。
图2.6:MIB在时域上的调度
前面已经说过,通过MIB,UE只能获取到SFN的高8位,最低2位(也就是40ms timing)是通过盲检PBCH得到的。40ms内每次发送的PBCH会使用不同scrambling and bit position(即共有4个不同的phase of the PBCH scrambling code),并且每40ms会重置一次。
UE可以通过使用4个可能的phase of the PBCH scrambling code中的每一个去尝试解码PBCH,如果解码成功,也就知道了小区是在40ms内的第几个系统帧发送MIB,即知道了SFN的最低2位。([2]和[6]中介绍了检测SFN最低2位的几种策略,有兴趣的可以了解一下)
PBCH的多天线传输只能使用传输分集,而且在2天线端口传输时,只能使用SFBC;4天线端口传输时,只能使用combined SFBC/FSTD。UE使用3种不同的CRC mask(见36.212的Table 5.3.1.1-1)来盲检PBCH,可得到天线端口数目,而天线端口数目与传输分集模式一一对应(1天线端口 <-> 单天线端口传输;2天线端口 <-> SFBC;4天线端口 <-> combined SFBC/FSTD),因此当UE成功解码PBCH时,就知道了小区特定的天线端口数以及用于L1/L2 control signal的传输分集模式。(关于SFBC、FSTD的说明,详见[1]的5.
问题描述如下
解决方法:把报错提示信息中的lock文件删除重新运行即可
sudo rm /xxx/xxx/lock-xxx 重新运行apt-get,可以正常使用
樽海鞘群算法( salp swarm algorithm,SSA)是Seyedali Mirjalili等于2017年提出的一种新型智能优化算法。 该算法模拟了樽海鞘链的群体行为,是一种较新颖的群智能优化算法。每次迭代中,领导者指导追随者,以一种链式行为,向食物移动。移动过程中,领导者进行全局探索,而追随者则充分进行局部探索,大大减少了陷入局部最优的情况。
部分代码如图
https://mianbaoduo.com/o/bread/YpeXkpdt
文章目录 一、Mybatis的各种查询功能二、特殊SQL的执行三、动态SQL四、Mybatis缓存1.Mybatis的一级缓存2.Mybatis的二级缓存 一、Mybatis的各种查询功能 1.若查询结果只有一条时
(1)可以使用实体类对象接收
(2)也可以使用list和map集合接收;
2.若查询结果有多条
(1)使用实体类类型的的list集合接收
(2)使用map类型的list集合接收
(3)可以在mapper接口的方法上添加@MapKey注解,此时可以将map集合作为值,以某个唯一字段的值作为键,放在同一个map集合中
二、特殊SQL的执行 1.模糊查询
<!--三种方式都可以实现模糊查询,推荐使用方式3--> <select id="getUserByLike" resultType="com.jd.wds.pojo.User"> <!--select * from user where username like '%${username}%'--> <!--select * from user where username like concat ('%',#{username},'%')--> select * from user where username like "%"#{username}"%" </select> 2.批量删除
<!--批量删除的特殊情况--> <delete id="deleteMore"> <!--此处只能使用${}的形式,因为#{}的方式会添加引号,而id的字段名是int--> <!--delete from user where id in (#{id})--> delete from user where id in (${id}) </delete> 3.动态设置表名
<select id="getUserByTableName" resultType="com.jd.wds.pojo.User"> <!--此处只能使用${},不能使用#{}--> <!--select * from #{tableName}--> select * from ${tableName} </select> 4.
在Linux中:
0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)
shell命令:command >/dev/null 2>&1 & 等同于 command 1>/dev/null 2>&1 &
1)command:表示shell命令或一个可执行的程序
2)>:表示重定向到
3)/dev/null:表示Linux的空设备文件
4)2:表示标准错误输出
5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等同于1的重定向
6)&:表示后台执行这条指令
1>/dev/null:表示标准输出重定向到空设备文件,即不输出任何信息到终端。
2>&1:表示错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以错误输出也重定向到空设备文件。
上述例子中的shell命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.(shell命令:command >/dev/null 2>&1 & 等同于 command 1>/dev/null 2>&1 &)
" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。
作者:Kyunban
链接:https://www.jianshu.com/p/071e49f5f48e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
CorelDRAW Graphics Suite 2022 年 3 月订阅者更新 新增功能!调整预设
在"CorelDRAW Graphics Suite 2022 年 3 月订阅者更新"中,调整预设已完全重建。现在,您可以在 Corel PHOTO-PAINT 中以非破坏性方式创建多过滤器调整预设,并在 CorelDRAW 和 Corel PHOTO-PAINT 中应用这些预设。当您获得了一个满意的图像编辑结果时,可以轻松地组合并保存调整过滤器设置,以便在其他项目中快速轻松地重复使用这些设置。
您还可以将预设整理到自定义类别中,或者仅将其分配到默认类别中。此外,您可以从一组精心策划且经过测试的预设样式(包括黑白、彩色和色调等类别)中进行选择,以便快速启动编辑过程。
新功能和增强功能!"调整"菜单
当您从 Corel PHOTO-PAINT 重组后的"调整"菜单中选择过滤器时,"调整"泊坞窗会自动打开所选过滤器对应的工具和设置。现在的所有调整都是非破坏性的,因此您可以无限次地进行实验。一次单击即可重置或拼合调整。此外,它还提供了新的快捷方式和命令,可为您节省时间,通过使用菜单命令,可立即复制和粘贴调整。
新功能和增强功能!"调整"泊坞窗
Corel PHOTO-PAINT 中的"调整"泊坞窗已进行重组,可以一站式处理各种调整过滤器。新增了四个过滤器,同时现有过滤器中引入了新的界面元素和编辑选项,使您可以更轻松地实现想要的结果。
黑白过滤器提供了一个新的创意选项,让您在将彩色图像转换为灰度时可以更好地控制图像。现在,您可以隔离图像的阴影和高光,并单独调整每个图像特征的色度和饱和度,这对减淡颜色非常有效。
此外,还更新了对"颜色平衡"、"均衡"以及"样本和目标"过滤器的控制,并添加了一个新的"色阶"过滤器,可以更轻松地调整图像对比度。新的颜色取样工具包含"颜色平衡"过滤器,只需一次单击,即可设置中性灰色。"柱状图"界面已得到增强,而且为了让您在进行调整时获得更好的视觉呈现效果,我们为以下过滤器的滑块添加了颜色,分别是:“色度”、“饱和度”、“亮度”、“黑白”、“替换颜色”、“通道混合器"和"颜色平衡”。
增强功能!"调整"泊坞窗性能
借助于 Corel PHOTO-PAINT,使用"调整"泊坞窗进行图像编辑时,可以体验到速度的显著提升。显示缓存系统有所改进,这意味着调整过滤器将变得流畅且响应迅速,特别是对较小的图像细节和区域进行放大时。此外,CorelDRAW 和 Corel PHOTO-PAINT 都支持多核处理,所以在任一应用程序中应用调整都变得轻而易举。
新功能和增强功能!常规改进
"CorelDRAW Graphics Suite 2022 年 3 月订阅者更新"中提供了一系列受频繁用户请求而启发的常规改进。CorelDRAW 提供了五个新的调整过滤器和 19 种用于处理位图的效果,所有这些功能均可从"效果"菜单中访问。
在 Corel PHOTO-PAINT 中,现在的"对象"泊坞窗提供了一个显示实时结果的不透明度滑块,使用户可以更轻松地调整对象不透明度并评估更改效果。现在,您还可以对包含多个对象的选项应用非破坏性效果,即使在使用遮罩时也是如此。
当您在 Corel PHOTO-PAINT 中保存具有非破坏性效果的作品时,您可能会注意到文件大小有所减小,通常缩小了两倍之多,这是因为对效果数据创新使用了 ZIP 压缩功能。"遮罩"菜单中还有一个新的"边缘透明度"选项,可用于控制遮罩边缘透明度的衰减。此外,还更新了多个遮罩工具的光标,以便更好地指示您是处于创建还是转换状态。
新功能和增强功能!"学习"泊坞窗
在"学习"泊坞窗(在以前的版本中称为"提示"泊坞窗)的全新"浏览"部分中,搜索学习资源和工具。从应用程序中访问和浏览丰富的在线资源库,有助于快速熟悉产品功能。完成您的个人资料,以便获取我们推荐的与您的经验水平和需求相匹配的视频和书面教程。此外,通过应用过滤器,可以只查看您喜欢的学习资源类型;并且可以按相关性、日期或最佳匹配对搜索结果进行排序。有关详细信息,请参阅 "学习"泊坞窗.
新增功能!个性化设置
我们对学习资源的个性化建议基于您在个人资料调查中提供的回答。当您更新个人资料时,我们会相应地修改学习资料建议,以更好地满足您的需求。您也可以将个人资料重置为默认状态,以选择不需要推荐。有关详细信息,请参阅 您的隐私和个人资料.
如图所示,因为数据太多,看起来比较杂,所以需要用dataZoom实现区域缩放。
echarts代码如下:
let zoom = 100; dataZoom: [ { type: 'inside', realtime: true, start: 0, end: zoom }, { show: true, realtime: true, height: 24,//这里可以设置dataZoom的尺寸 bottom: 6, start: 0, end: zoom, backgroundColor: '#1d76e6', // 填充颜色 textStyle: { color: '#fff' // 左右两边文字颜色 } } ],
一、用户管理 切换用户登录 su - 用户名 root用户切换其他用户不需要密码,反之需要密码
exit # 返回原来用户 创建用户 useradd [选项] 用户名 如: useradd jack # 创建用户jack,默认家目录为 /home/jack useradd -d /home/cat tom # 创建用户tom,指定家目录为 /home/cat (就不会再创建默认家目录) 设置密码 passwd 用户名 删除用户 userdel 用户名 如: userdel tom # 删除tom,保留家目录 userdel -r tom # 删除tom及其家目录 查询用户 查询用户uid与组信息
id 用户名 二、用户组管理 创建组 groupadd 组名 删除组 groupdel 组名 增加用户时指定组 useradd -g 用户组 用户名 修改用户所属组 usermod -g 用户组 用户名 三、相关的配置文件 /etc/passwd 文件 用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell