1、功能效果演示 2、技术涉及 1、登入模块,前后端分离,通过axios进行代理请求整体基于springboot+vue+shiro实现
2、cli 3.4.1+vue 2.5.2
3、主要逻辑代码 登入页面 <template> <div class="login-wrap"> <div class="ms-title">网欲音乐 后台管理登录</div> <div class="ms-login"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm"> <el-form-item prop="username"> <el-input v-model="ruleForm.username" placeholder="用户名"></el-input> </el-form-item> <el-form-item prop="password"> <el-input type="password" v-model="ruleForm.password" placeholder="密码"></el-input> </el-form-item> <!--滑块验证--> <el-form-item> <JcRange @successFun="onSuccessFun" /> </el-form-item> <div class="login-btn"> <el-button type="primary" :loading="loading" @click="submitForm">登录</el-button> </div> </el-form> </div> </div> </template> <script> import {mixin} from "../mixins/index"; import JcRange from "../components/jcRange" import {getLoginStatus} from "../api/index"; export default { mixins:[mixin], data: function(){ return { loading: false, status: false, ruleForm:{ username: "
QSignalBlocker在构造函数中阻塞信号,在析构函数中它将状态重置为构造函数运行前的状态。
QSignalBlocker用来代替blockSignals()。当使用blockSignals()来阻塞信号时,总要成对使用blockSignals(true)和blockSignals(false)。一不小心少写一个则信号一直阻塞后果难料,使用QSignalBlocker代替则不会有问题。
测试代码:
#include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QDateTime> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); connect(&timer,&QTimer::timeout,this,&Widget::onTimer); timer.start(1000); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { QSignalBlocker blocker(timer); QEventLoop eventloop; QTimer::singleShot(5000, &eventloop, SLOT(quit())); eventloop.exec(); qDebug()<<"过了5秒"; } void Widget::onTimer() { qDebug()<<"xxxxxxx"<<QDateTime::currentDateTime(); } 定时器每秒打印一次时间,按下按钮阻塞定时器5秒看效果:
PR-GNN 原文链接:https://arxiv.org/pdf/2007.14589.pdf
作者提出PR-GNN,一种端到端的能够解释fMRI的ROI的图神经网络。通过将fMRI生成的图输入PR-GNN,产生输出预测和解释的结果。由于PR-GNN模型具有可解释性,在分类性能上比其他方法更优越,同时还能检测出显著的大脑区域用于执行分类。新提出的loss 函数能够使用相同的方法进行individual-level(较小的 λ 2 λ_2 λ2)和gropu-level(较大的 λ 2 \lambda_2 λ2)的biomakers,结果揭示从样本中识别出ASD以及ASD的显著ROI。
目前,节点pooling的策略主要是两种方法:
节点poling的策略:基于聚类的pooling,基于图拓扑将节点聚类到一个super node;基于ranking的pooling,给每个节点分配一个score,保留top rank的节点; 现有方法的池化方法将其应用于显着的大脑ROI分析时具有下列问题:
丢弃的节点和其余节点的排名得分可能无法明显区分,这不适合于识别显着且具有代表性的区域生物标记;同一组中不同图中的节点的排名可能完全不同(通常是由于过度拟合造成的);
图神经网络用于脑网络分析 PR-GNN的结构如上图所示,GATConv作为节点的卷积层,分别验证了基于ranking的池化方法SAGEPooling与TopKPooling作为节点的池化层。
符号和问题定义 根据 T 1 T1 T1 sMRI将大脑划分为 N N N个ROI
符号含义符号含义 G = ( V , ε ) G=(V,ε) G=(V,ε)无向有权图 V = { v 1 , . . . , v n } V=\{v_1,...,v_n\} V={v1,...,vn}顶点集 ε ε ε边集 H = [ h 1 , . . . , h N ] T H=[h_1,.
方法/步骤
先看看与这个错误相关的后台异常 :
Packet for query is too large (1706 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
一旦数据库出现这个问题,基本执行任何查询语句,后台都会报这个错!(除非查询所得数据量特别少)!
先登录数据库,查看 max_allowed_packet 这个参数值
连接数据库服务器,登录 mysql, 执行命令 :
show variables like '%max_allowed_packate%'
即可查看这个系统参数目前的值 ! 我的系统,目前显示只有 1024 字节,确实太小了!
通过 mysql 命令更改这个值到 100M !
连接数据库服务器,登录 mysql, 执行命令 :
set global max_allowed_packet = 100*1024*1024
退出后,重新登录 mysql ,再次查看这个系统项的值, 注意,必须重新登录mysql,否则这个值还是显示为原始值(缓存)!
修改后,这个配置项显示为 100 M !
修改配置文件--Windows
我们刚才的修改是针对运行环境,但如果我们的配置文件不变,则重启数据库后,这个值又恢复为原始值了,对于 Windows 下的 MySQL,我们需要修改其配置文件 my.
python环境如何运行cmd命令? hello,互联的广大朋友们大家好,我是通过小甲鱼python入门视频的于神社中疯狂敲代码地小夜斗,今天与大家分享一期破解自家wife密码的实战项目!
故事背景 情况是这样的,今天做了一天的车回到家中,巧了,手机莫得流量了,顺手连了一波家里的wife,啊这,密码不记得了!但是小夜斗丝毫不慌,回头就去问了爸妈wife密码是多少,然后这是假的哈哈!其实小夜斗了解过一些cmd命令,其中恰好有一个能解决问题!
两行CMD命令 首先呢打开cmd窗口,大家请记住得以管理员得身份运行!
netsh wlan show profile 打码保护隐私,隐私很重要啊!大家也要注意保护隐私哈!
这行cmd代码命令的意思是: 展示本台电脑以前练过的wife的用户配置文件(ps: 这是小夜斗自己理解的意思,想详细了解的小伙伴可以自行百度哈)
netsh wlan export profile folder=C:\ key = clear
然后这一行cmd代码的意思: 将这些wife配置文件保存到C:\的根目录下
科普:
wlan:网卡
小夜斗保存下来得部分wife配置文件
接着打开你家得那个wife配置文件吧,有你想要得密码,如图所示:
小夜斗要去快乐低王者峡谷世界了!开个玩笑,下面让小夜斗写个python版本的家用wife密码烦恼遗忘解决脚本!
快进到python版本 import os # 打印连接过的wife wife_name_object = os.popen('netsh wlan show profiles') # <os._wrap_close object at 0x00000294F1E47470> 一个对象 wife_name = wife_name_object.readlines() # 执行wife_name_object对象中的cmd命令 # 打印出名字 print(wife_name) # 保存wife配置文件于C盘根目录下 wife_file = os.popen("netsh wlan export profile folder=C:\ key = clear").readlines() python文件运行不要直接在pycharm里面运行,否则会获取不到文件,只会返回一个信息 : '请求的操作需要提升(作为管理员运行)‘
BERT多语言版本可以用于处理混合了中英文单词的文本,但是在处理之前有个小坑——需要用空格对句子进行分字处理,即对英文保留原原装,中文以字为单位进行分割。
经过下面trans方法处理过的句子,可以用于后续预训练模型tokenizer方法中。
def trans(sen): buf = '' for word in sen: if '\u4e00' <= word <= '\u9fff': buf += f' {word} ' # 中文字符前后加上空格 else: buf += word return buf.replace(' ', ' ') if __name__ == "__main__": chline = '国无德不兴,人无德不立。' enline = 'The use of citations in evaluative scientometrics as a proxy for quality' chenline = '无德不兴The,无德不立 use of无德不立citations in evaluative scientometrics as a proxy for quality' print(trans(chline)) print(trans(enline)) print(trans(chenline))
set long_query_time=1; #设置慢查询时间为1 秒;
set global slow_query_log=on; #开启慢查询日志;
show global status like 'slow_queries'; #显示慢查询次数
show variables like 'long_query_time' ; #显示慢查询时间;
show variables like 'slow_query_log' ; #显示慢查询日志是否开启
日志文件默认在data目录下
在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化 SQL语句将那些运行时间 比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应 用慢查询呢?
slow_query_log
long_query_time = 1
2.测试慢查询日志功能(1)进入MySql控制台,执行如下语句:
select sleep(2);
mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2.12 sec)
(2)查看慢查询日志文件think-slow.log,在文件最后发现:
# Time: 121120 20:06:23
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 2.
当前环境 系统:win10开发工具: vs2019openssl版本:Win64 OpenSSL v1.1.1i 安装OpenSSL有两种方法,第一种为下载OpenSSL源代码并由自己编译后使用;第二种为下载已编译好的安装包,安装后直接可以使用。因第一种方法十分繁琐,需要安装Ruby进行编译,同时编译过程中可能产生各种各种的问题,因此在此采用第二种方法
开始 1、从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包
此处有Win32和Win64可选,这里的位数指的是你调用OpenSSL开发出来的软件的位数版本,而不是你计算机的位数。开发32位软件选择Win32,64位选择Win64,如果同时需要开发32位和64位的则下载两个 注意,不要下载 light 版本,因为 light 版本不带 lib 和 include。如下图:
2、下载完后打开安装,选择安装位置,64位和32位不要安装在同一个目录下。我这里安装到 C:\Users\oceanstar\source\others\OpenSSL-Win64
3、选择把dll复制到OpenSSL目录下(主要是为了以后好找,如果选择复制到Windows系统目录下,天知道复制到哪里去了。。。) OpenSSL 就这样安装完毕了,如果你按网上自己编译的方法去自己编译,恐怕要耗上你至少半天的时间。我们来看看他的目录结构。
bin:包含了测试程序、存储证书和密钥的文件(*.pem)。include:包含了所有的头文件(例如:aes.h、md5.h)。lib:包含了所有的库文件(例如:libeay32.lib、ssleay32.lib)。
使用 1、控制台应用程序
2、右击工程,选择“属性”
3、选中“Include Directories”,点击右边的下拉按钮,点击“Edit…”
4、同样的方法,将安装目录下的“lib”文件夹添加到“Library Directories”中
5、将OpenSSL安装目录下bin文件夹中的“libcrypto-1_1-x64.dll”和“libssl-1_1-x64.dll”(名字后面的版本号可能因更新而不同)复制到工程目录下
6、将工程平台调整为自己需要的平台,这里演示x64平台
7、添加lib文件
7.1、方法一
在代码中添加
#pragma comment(lib,"libssl.lib") #pragma comment(lib,"libcrypto.lib") 7.2、方法二
在“Property Pages->Linker->Input->Additional Dependencies”添加libssl.lib和libcrypto.lib
8、测试
#pragma comment(lib, "libssl.lib") #pragma comment(lib, "libcrypto.lib") #include <iostream> #include <stdio.h> #include "openssl/ssl.h" int main() { SSL_CTX* ctx = NULL; const SSL_METHOD* meth = NULL; OpenSSL_add_ssl_algorithms(); // 初始化 SSL_load_error_strings(); // 为打印调试信息作准备 meth = TLSv1_client_method(); // 采用什么协议(SSLv2/SSLv3/TLSv1)在此指定 ctx = SSL_CTX_new(meth); printf("
python导出数据到excel文件的方法:
1、调用Workbook()对象中的add_sheet()方法
wb = xlwt.Workbook() ws = wb.add_sheet('A Test Sheet') 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件
ws.write(0, 0, 1234.56, style0) ws.write(1, 0, datetime.now(), style1) ws.write(2, 0, 1) ws.write(2, 1, 1) ws.write(2, 2, xlwt.Formula("A3+B3")) wb.save('example.xls') 完整代码如下:
import xlwtfrom datetime import datetime style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',num_format_str='#,##0.00') style1 = xlwt.easyxf(num_format_str='D-MMM-YY') wb = xlwt.Workbook() ws = wb.add_sheet('A Test Sheet') ws.write(0, 0, 1234.56, style0) ws.write(1, 0, datetime.now(), style1) ws.write(2, 0, 1) ws.write(2, 1, 1) ws.
程序启动时 会调用 obs_init_video函数,创建一个obs_video_thread 线程
static int obs_init_video(struct obs_video_info *ovi) { struct obs_core_video *video = &obs->video; struct video_output_info vi; int errorcode; make_video_info(&vi, ovi); video->base_width = ovi->base_width; video->base_height = ovi->base_height; video->output_width = ovi->output_width; video->output_height = ovi->output_height; video->gpu_conversion = ovi->gpu_conversion; video->scale_type = ovi->scale_type; set_video_matrix(video, ovi); errorcode = video_output_open(&video->video, &vi); if (errorcode != VIDEO_OUTPUT_SUCCESS) { if (errorcode == VIDEO_OUTPUT_INVALIDPARAM) { blog(LOG_ERROR, "Invalid video parameters specified"); return OBS_VIDEO_INVALID_PARAM; } else { blog(LOG_ERROR, "Could not open video output"
数据库基准性能测试为 sysbench 0.5。
工具修改说明:
对 sysbench 自带的 otlp 脚本做了修改,读写比例修改为 1:1,并通过执行测试命令参数 oltp_point_selects 和 oltp_index_updates 来控制读写比例,本文测试用例的均采用 4 个 select 点,1 个 update 点,读写比例保持 4:1。
测试环境
类型
说明
实例物理机器
高 IO 版-单机器最高可支撑 488 GB 内存 6 T 硬盘数据库
实例规格
当前售卖主流配置规格(详见下文测试用例)
客户端配置
4 核 8 GB 内存
客户端数量
1~6 个(配置的提升,客户端数量也需要相应提升)
网络环境
万兆网络机房,网络延时 < 0.05 ms
环境负载
安装 mysql 机器负载 > 70% (针对非独占实例)
客户端规格说明:机器采用了较高配置的客户机器,保证单客户端可以压测出 数据库 实例的性能,如果客户端配置规格较小,建议采用多个客户并行压测实例来求取数据总和。
网络延时说明:测试环境保证客户端机器与数据库实例在同一可用区,测试结果不受网络环境影响。
测试方法
1. 测试库表结构
CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
问题:一个.mp4视频进度条无法拖动,只在谷歌浏览器中有问题,火狐中没有问题,console也不报错。
初步排查到的bug原因:与Video标签适配的请求响应有问题。
无法拖动的视频响应截图如下:
能正常拖动的视频响应截图如下:
如何去解决:
1.Chrome浏览器默认请求会在 Header 添加一个Range如下:服务器要做的就是响应这个Header
Range: bytes=0- 2.服务器接收到这个Header以后,响应的Header如下,同时需要设置状态码为206:
Accept-Ranges: bytes Content-Length: 2097152 Content-Range: bytes 0-2097151/38696534 3.百度了个服务端设置响应的代码,如下(我不太懂后台代码,仅供参考,有更好的解决方案,欢迎大家留言哈~):
public ActionResult Video(Guid id) { //数据库存储的文件路径 var archive = ManagerFactory.ArchiveManager.GetVideoArchive(id); //物理绝对路径 var path = Server.MapPath("~/" + archive.Path); //设置响应头 HttpContext.Response.Headers.Add("Accept-Ranges", "bytes"); //判定是否响应Chrome中的Range请求 var rangeQuery = HttpContext.Request.Headers["Range"]; if (rangeQuery.IsNotNullAndNotEmpty()) { //startIndex 与 endIndex 是索引值,是0开始的,注意在与 Length 比较的时候 Length 要 -1 var startIndex= 0; //视频每节长度为2MB var length = 2 * 1024 * 1024; var range = rangeQuery.
MySQL 5.6 系统表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
1.需求
现有一张利息表hyd_day_loandetil,有以下字段
主键ID、借贷IDLOAN_TURN_ID、账单日BILL_TIME、正常利息INTEREST、逾期利息OVERDUE_BALANCE字段
表中存在同一天、同一笔借贷、两条数据,现在要把重复的数据查询出来并把正常利息+逾期利息比较小的那一条查询出来
2.SQL脚本实现
SELECT N.id,DATE_SUB(N.BILL_TIME, interval 3 day) FROM(
SELECT @rownum:=@rownum*-1 AS rownum,hyd_day_loandetil.* FROM (SELECT @rownum:=1) r, hyd_day_loandetil
WHERE (LOAN_TURN_ID,BILL_TIME) IN(
SELECT LOAN_TURN_ID,BILL_TIME FROM hyd_day_loandetil
GROUP BY LOAN_TURN_ID,BILL_TIME having count(*) > 1
)
ORDER BY BILL_TIME,LOAN_TURN_ID,hyd_day_loandetil.INTEREST+hyd_day_loandetil.OVERDUE_BALANCE DESC
) N
WHERE N.rownum=13.SQL脚本分析
3.1根据LOAN_TURN_ID,BILL_TIME分组得到重复的数据并根据INTEREST+OVERDUE_BALANCE倒序排序
3.2给每条数据一个伪列值依次为-1,1,-1,1,-1,1......
3.3可以看出来我们只要筛选N.rownum=1的就是我们需要的数据
现有两张表,一张订单表(Orders)和一张产品表(Product),需要编写一个查询语句,查找出购买了所有产品的客户编号(CustomerId)。
订单表中包含的信息如下:
其中,Id表示订单编号,CustomerId表示客户编号,ProductId表示产品编号,Order表示订单量,OrderDate表示下订单的日期。
产品表中包含的信息如下图:
其中,Id表示产品编号,Name表示产品名称。
方法一:连接查询
第一步,对订单表中的每一个CustomerId统计不重复ProductId的个数,得到每个客户所购买的产品种类数量。
select CustomerId,count(distinct ProductId)as ProC1
from Orders
group by CustomerId;
第二步,计算产品表中所有的产品种类数量。
select count(Id)as ProC2
from product;
第三步,连接第一步和第二步生成的临时表,比较两个表的产品种类数量,产品种类数量相同的就是购买了所有产品的客户。
select CustomerId
from
(
select distinct CustomerId,count(distinct ProductId)as ProC1
from Orders
group by CustomerId
)o
inner join
(
select count(Id)as ProC2
from product
)p
on o.ProC1=p.ProC2;
方法二:在having子句中使用子查询。
与方法一的第一步、第二步一样,也是先分别计算出订单表中每个客户购买的产品种类数量和产品表中所有的产品种类数量,只是最后一步对比两个数量时,用having实现,具体代码如下:
select CustomerId
from Orders
group by CustomerId
having
count(distinct ProductId)
=
(select count(Id)as ProC2
from product);
喜欢
分享
MYSQL中的常用函数
count(*)---
相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录。
select count(*) from yinxiong;
Count(列名)
表示统计此列当中总行数(不计算null所在的行)
Count(distinct 列名)
表示统计此列中有几个不同的值(不计算null)
分组查询:
Select 聚合函数(列名), from 表名 group by 列名;
条件筛选 :
Where 和having?
Where :是针对整个表的数据进行筛选
Having:是针对分组以后需要进行条件筛选,一般和group by 一起使用
限制查询:
限制查询表中前几行内容:
Select * from 表名 limit n;
(n表示行数)
2,select * from 表名 limit m,n;(表示查询表中从m行开始的连续n行的数据内容)
字符串函数
length(列名或字符串)
返回的是括号内数据的字符长度
数字函数:
Round():表示对括号内的数字进行四舍五入
Round(小数):表示直接四舍五入为整数
Round(数字,保留的小数位)
Least():表示返回括号里最小的数字
Greatest():表示返回的是括号里最大的数字
InceptionGCN Methodology Affinity graph construction 构造Affinity Graph的关键是能够精准的建模病人之间的交互作用,Affinity Graph是将所有样本(训练集+测试集),下图为文中所涉及到的符号。
符号含义符号含义 G ( V , E , W ) G(V,E,W) G(V,E,W)图 n i n_i ni图中的节点V=|N|节点 η \eta η患者之间非成像数据 E E E边 x i ∈ R N x_i\in\mathbb{R}^N xi∈RN节点 n i n_i ni的特征 W ∈ R N × N W\in \mathbb{R}^{N \times N} W∈RN×N边的权重 E ∈ R N × N E\in\mathbb{R}^{N\times N} E∈RN×N二值化邻接矩阵 边 E E E定义如下:
η i \eta_i ηi与 η j \eta_j ηj是节点 i i i与节点 j j j的值, β \beta β表示 t h r e s h o l d threshold threshold,权重矩阵 W ∈ R N × N W\in\mathbb{R}^{ N \times N} W∈RN×N基于每个节点的特征之间的相关距离对边缘进行加权。
13春东财《MySQL数据库系统及应用》在线作业二(随机)
试卷总分:100 测试时间:--
单选题
多选题
、单选题(共 15 道试题,共 60 分。)
1. 执行语句“SELECT round(25.506, 2)”结果为
A. 25
B. 25.5
C. 25.51
D. 25.50
满分:4 分
2. 在MySQL中有些字符是具有特殊含义的例如(%,')如果想在字符串中正常显示这些字符需要下列哪个字符进行转义
A. \
B. /
C. >
D. <
满分:4 分
3. 语句“Rename table xs to xsqk”是将xs表重命名为xsqk
A. 正确
B. 错误
满分:4 分
4. 执行语句“SELECT (1=1) XOR (2=3); ”结果为假
A. 正确
B. 错误
满分:4 分
5. union 运算是将两个表的某些列连接在一起
A. 正确
B. 错误
满分:4 分
从seer数据库下载到数据后,部分人会感到无从下手,这是因为数据还没有经过清洗整理,不能变成我们统计软件识别的形式,不能进行分析。今天我们手把手教你使用R语言进行seer数据库清洗,让数据变为我们所用。
首先导入我们需要的R包,需要foreign,car,和stringr,需先下载好。
然后我们把我们下载好的数据导入R,有20多万条,靠手工更改是不可能完成的。
be<-read.csv("E:/r/test/seer4.csv",sep=',',header=TRUE) 查看一下数据的名字和形式还有变量
head(be)
names(be)
感觉太乱了,有些名字很长,全部给它改下名字
colnames(be)<-c("sex","time","rezult","rezult1","status","race","Subtype","nodes","Lymph.Invasion", "tumor.size","extension","lymph.nodes","age","ajcc")#数据太长,重新命名 我们重新查看一下数据集,这回清爽多了
我们发现一共有14个变量,其中Lymph.Invasion都是缺失数据,根本不能分析,只能删掉,这就是公共数据库的无奈
be<-be[,-9]#删掉第9列Lymph.Invasion,因为都是缺失的数据 很多数据中变量都是字符串,不符合要求,我们要把它们变成数字
be$sex<-ifelse(be$sex=="Female",1,ifelse(be$sex=="Male",2,NA))#性别转换成1和2,缺失的使用NA表示,其他的相同 be$rezult1 <-ifelse(be$rezult1 =="Alive or dead due to cancer",1, ifelse(be$rezult1 =="Dead (attributable to causes other than this cancer dx)", 2,NA)) be$status<-ifelse(be$status=="Alive",0,ifelse(be$status=="Dead",1,NA)) be$race<-ifelse(be$race=="White",1,ifelse(be$race=="Black",2,3)) be$Subtype<-recode(be$Subtype,"'HR-/HER2- (Triple Negative)'=1; 'HR-/HER2+ (HER2 enriched)'=2;'HR+/HER2- (Luminal A)'=3; 'HR+/HER2+ (Luminal B)'=4;else=NA")#这里是4个分类变量,使用ifelse函数套叠胎麻烦,改用car函数 be$nodes[be$nodes=="Blank(s)"]=NA#让数据中的Blank(s)变为缺失值,下面同理 be$tumor.size[be$tumor.size=="Blank(s)"]=NA be$extension[be$extension=="Blank(s)"]=NA be$lymph.nodes[be$lymph.nodes=="Blank(s)"]=NA be$age<-str_extract(be$age, "\\d+")#把年龄里面的数字提取出来 be$ajcc[be$ajcc=="Blank(s)"]=NA OK,转换得差不多了,我们来看一下,rezult没有用,我们不理他,等下删掉,我们需要的是rezult1
Ajcc我们没有转换,因为暂时还不需要用,等我们讲到探索交互效应分析的时候再说它,现在先不理他先,你如果有强迫症的话也可以按我们上面的代码转换它
OK,现在完成了?不还没有,还有一个重要的变量没有生成,就是竞争风险的结局
我们现在来生成它
be$status1<-ifelse(be$status==0,0,ifelse(be$rezult1==1,1,2)) 最后数据出来啦
把它输出为1.csv
write.csv(be,file = "1.csv") 最后打开1.csv,整理一下,这就是我们要发表的数据啦
20多万条数据,发个中文核心或者低分SCI还不是轻轻松松,玩一样。
如果想更详细了解数据挖掘过程,请关注我的科研教程
更多精彩文章请关注公众号:零基础说科研
通常我们在选择存储视频或者大文本的时候会选择TEXT和BLOB.那么两者有什么区别呢?
BLOB主要用来存储二进制,通俗的来讲就是存储比如视频、图片等等,而TEXT顾名思义是存储字符数据比如一篇文章.那么TEXT和BLOB中又包括TEXT、MEDIUMTEXT、LONGTEXT、BLOB、MEDIUMBLOB、LONGBLOB,它们之间的差别在于存储的文本和字符长度不同.我们只讨论BLOB、TEXT.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.14 MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
图像二值化代码实现 固定阈值二值化Otsu 阈值二值化自适应阈值二值化 固定阈值二值化 opencv实现:
ret, th = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) cv2.imshow('opencv', th) python实现:
thresh = 127 new_img = np.zeros((h,w),np.uint8) for i in range(h): for j in range(w): if gray[i,j]>thresh: new_img[i,j] = 255 else: new_img[i, j] = 0 cv2.imshow("threshold",new_img) Otsu 阈值二值化 日本人Nobuyuki Otsu (大津展之)发明,故名大津法、Otsu法,其实是一种最大类间方差法。
opencv实现:
ret, th = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) cv2.imshow('opencv', th) python实现:
h,w = img.shape[:2] sum = h*w #统计各灰度级数量 histogram = np.zeros(256, np.int32) for i in range(h): for j in range(w): p = gray[i,j] histogram[p] +=1 #统计各灰度级所占比例 probability = np.
if (productname != null && productname.trim().length() > 0) {
builder.append(" AND t3.productname like ? ");
params.add("%"+productname+"%");
}
if (recipientsname != null && recipientsname.trim().length()>0){
builder.append(" AND t1.recipientsname like ? ");
params.add("%"+recipientsname+"%");
}
builder.append(" ORDER BY t1.create_time DESC ");
builder.append(" limit ?,? ");
params.add(start);
params.add(limit);
以上的添加,已经证实是可以成功的。之前看了大部分的连接都是不能通过
t3.productname =?
param.add("%"+productname+"%"); 行不通
t3.productname '%?%' 这样同样也不行 如果这样连接,会出现数组下标越界,因为此时的like后边的?不是我们正常想的那样,按照一个参数的 ? 去编译。要谨慎,小白搞了好久才明白过来。
windows下
1.以系统管理员身份运行cmd.
2.查看mysql是否已经启动,如果已经启动,就停止:net stop mysql.
3.切换到MySQL安装路径下:D:\WAMP\MySQL-5.6.36\bin;如果已经配了环境变量,可以不用切换了。
4.在命令行输入:mysqld -nt --skip-grant-tables
5.重启以管理员身份运行一个cmd,输入:mysql -uroot -p,Enter进入数据库。
6.如果不想改密码,只是想看原来的密码的话,可以在命令行执行这个语句select host,user,password from mysql.user;//即可查看到用户和密码
如果要修改密码的话,在命令行下 依次 执行下面的语句use mysql
update user set password=password("new_pass") where user="root";// 'new_pass' 这里改为你要设置的密码
flush privileges;
exit
目录
文章目录 @[toc] 1、并行方法------矩阵与向量的相乘运算1.1、Rowwise Block-striped1.2、Columnwise Block-striped1.3、Checkerboard Block Decomposition 2、并行方法------矩阵与矩阵的相乘运算2.1、Block- Striped Decomposition2.2、Fox's method 3、并行方法------线性方程组求解4、并行方法------偏微分方程的数值解法 并行计算通常用来处理矩阵计算、线性系统(线性方程求解)、偏微分方程的相关问题。这篇文章将会介绍利用并行计算的方法是如何解决上述问题的。
1、并行方法------矩阵与向量的相乘运算 所谓矩阵与向量的相乘运算就是解决形如下面这样的问题:
这类问题的主要矛盾就是我们如何划分矩阵 A A A和向量 b b b,让二者的对应元素进行计算,然后合并和计算结果,得到最终的结果。
1.1、Rowwise Block-striped 那么第一种方式就是将向量 b b b拷贝到所有的节点。将矩阵 A A A以行为单位分配到不同的计算节点,与向量 b b b的全部元素进行计算之后,算出结果向量 c c c的不同部分,然后将所有结果合并到一起。这种被称作矩阵 A A A的行条带化切分。
这个方式的详细过程如上图所示, A A A的每一行分别和 b b b的全部元素做计算,因为针对 A A A中每一行元素的计算都是独立的,对于结果向量 c c c的每一部分计算都是完全并发的,最后需要一系列的通信将计算结果组合起来。
1.2、Columnwise Block-striped 除了将 A A A矩阵按行分配,我们还可以将A矩阵按列分配,这样子分配的好处是在于不用讲向量 b b b的每一个元素拷贝到所有节点。每个节点只需要有向量 b b b的一部分元素就好了。但是这样子进行划分,在每个节点上得到的结果就不是向量 c c c的一部分,需要将所有中间结果增加,才能得到最终结果。
最近在使用String类中的spilt方法对字符串进行分割的时候,在运行到下面取数组里面的元素的时候会出现StringIndexOutOfBoundsException
对此,请大家先看下面的代码
String str = "/1/2/3/4///";String[] strs = str.split("/");System.out.println("strs数组长度:" + strs.length);System.out.println("strs数组元素:" + Arrays.toString(strs)); 对于这段代码,结果是:
strs数组长度:5strs数组元素:[, 1, 2, 3, 4] 为什么,有一个空字符串存在数组中呢,按照道理来说末尾的空字符串都默认去掉了,对此,只能找到jdk源码才能解决我的疑问了。
调用spilt,默认调用了String内部的另一个重载方法,然后我猜想问题出在limit参数上面。
接着往下面,调用的重载方法有两个不同的条件,分别走不同的方法。
当传进来的regex满足下面两个条件之一就不当做正则表达式处理
(1)、字符串长度等于1,.$|()[{^?*+,并且字符串不是这里面中其中一个,也就是不是正则表达式的保留字符,使用这些字符串都要进行转义。
(2)、字符串长度等于2,第一个字符必须时反斜杠,并且第二个字符不是数字或字母
由于篇幅和时间有限,本文暂且只对目前的条件进行分析。
显然当前代码满足这个条件,继续进入if条件。
这个limit其实就是在限制分割的次数。
(1)、当limit == 0 时, limited 为false,!limited为true,默认不限制,取所有能分割的。代码走到2372就真相了,原来当limit == 0 时,默认从后往前去除为空的字符串。if (limit == 0) { while (resultSize > 0 && list.get(resultSize - 1).length() == 0) { resultSize--; }}(2)、当limit == -1时,也是不做分割次数的限制,但是也不会去除list末尾的空字符串。所以上面代码修改后再次执行就是8了修改代码后:String[] strs1 = str.split("/
drop table
drop 是直接删除表信息,速度最快,但是无法找回数据
例如删除 user 表:
drop table user;
truncate (table)
truncate 是删除表数据,不删除表的结构,速度排第二,但不能与where一起使用
例如删除 user 表:
truncate table user;
delete from
delete 是删除表中的数据,不删除表结构,速度最慢,但可以与where连用,可以删除指定的行
例如删除user表的所有数据
delete from user;
删除user表的指定记录
delete from user where user_id = 1;
三种方式的区别
相同点
truncate和不带where子句的delete,drop都会删除表内的数据;
drop,truncate都是DDL语句(数据定义语言),执行后会自动提交;
不同点
语句类型:delete语句是数据库操作语言(DML),truncate,drop是数据库定义语言(DDL);
效率:一般来说 drop > truncate> delete;
是否删除表结构:truncate和delete 只删除数据不删除表结构,truncate 删除后将重建索引(新插入数据后id从0开始记起),而 delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加),drop语句将删除表的结构包括依赖的约束,触发器,索引等;
安全性:drop和truncate删除时不记录MySQL日志,不能回滚,delete删除会记录MySQL日志,可以回滚;
返回值:delete 操作后返回删除的记录数,而 truncate 返回的是0或者-1(成功则返回0,失败返回-1);
小知识
delete 与 delete from 区别
如果只针对一张表进行删除,则效果一样;如果需要联合其他表,则需要使用from
delete tb1 from tb1 m where id in (select id from tb2);
展开全部
每个 DBA 是不是都有过删库的经历62616964757a686964616fe59b9ee7ad9431333433626437?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表定义损坏数据无法读取怎么办?
我曾遇到某初创互联网企业,因维护人员不规范的备份恢复操作,导致系统表空间文件被初始化,上万张表无法读取,花了数小时才抢救回来。
当你发现数据无法读取时,也许并非数据丢失了,可能是 DBMS 找不到描述数据的信息。
背景
先来了解下几张关键的 InnoDB 数据字典表,它们保存了部分表定义信息,在我们恢复表结构时需要用到。
SYS_TABLES 描述 InnoDB 表信息CREATE TABLE `SYS_TABLES` (`NAME` varchar(255) NOT NULL DEFAULT '', 表名`ID` bigint(20) unsigned NOT NULL DEFAULT '0', 表id`N_COLS` int(10) DEFAULT NULL,`TYPE` int(10) unsigned DEFAULT NULL,`MIX_ID` bigint(20) unsigned DEFAULT NULL,`MIX_LEN` int(10) unsigned DEFAULT NULL,`CLUSTER_NAME` varchar(255) DEFAULT NULL,`SPACE` int(10) unsigned DEFAULT NULL, 表空间idPRIMARY KEY (`NAME`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_INDEXES 描述 InnoDB 索引信息CREATE TABLE `SYS_INDEXES` ( `TABLE_ID` bigint(20) unsigned NOT NULL DEFAULT '0', 与sys_tables的id对应 `ID` bigint(20) unsigned NOT NULL DEFAULT '0', 索引id `NAME` varchar(120) DEFAULT NULL, 索引名称 `N_FIELDS` int(10) unsigned DEFAULT NULL, 索引包含字段的个数 `TYPE` int(10) unsigned DEFAULT NULL, `SPACE` int(10) unsigned DEFAULT NULL, 存储索引的表空间id `PAGE_NO` int(10) unsigned DEFAULT NULL, 索引的root page id PRIMARY KEY (`TABLE_ID`,`ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_COLUMNS 描述 InnoDB 表的字段信息CREATE TABLE `SYS_COLUMNS` ( `TABLE_ID` bigint(20) unsigned NOT NULL, 与sys_tables的id对应 `POS` int(10) unsigned NOT NULL, 字段相对位置 `NAME` varchar(255) DEFAULT NULL, 字段名称 `MTYPE` int(10) unsigned DEFAULT NULL, 字段编码 `PRTYPE` int(10) unsigned DEFAULT NULL, 字段校验类型 `LEN` int(10) unsigned DEFAULT NULL, 字段字节长度 `PREC` int(10) unsigned DEFAULT NULL, 字段精度 PRIMARY KEY (`TABLE_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_FIELDS 描述全部索引的字段列CREATE TABLE `SYS_FIELDS` ( `INDEX_ID` bigint(20) unsigned NOT NULL, `POS` int(10) unsigned NOT NULL, `COL_NAME` varchar(255) DEFAULT NULL, PRIMARY KEY (`INDEX_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;.
文章目录 一、前言二、VMware下载三、XP系统镜像下载四、创建XP虚拟机五、本机与XP虚拟机共享文件夹 一、前言 最近需要搞windows系统兼容测试,根据数据显示,目前市面上占比TOP3的系统如下:
排名系统占比1win7 sp159.25%2win1029.83%3xp sp38.87%4其他- - 没想到2021年了,xp系统还占了8.87%。
我自己本机是win10,不想安装双系统,决定弄个xp虚拟机好了。
在网上下载了一个xp的iso镜像文件,使用虚拟机加载却提示:
"EZBOOT" not found! Error loading image: DEFAULT.EZB 如下
我觉得其他人可能也会遇到这样的问题,于是我把我最后安装成功的整个流程写下来,这样其他人跟着步骤执行就不会踩坑了。
二、VMware下载 先安装VMware,使用VMware我们可以创建虚拟机。
VMware官网地址:https://www.vmware.com/cn.html
(注意,下载需要先登录账号,如果没有账号要注册一个)
我自己安装的版本是:14.1.5,安装流程没有什么特别的,不赘述。
三、XP系统镜像下载 进入这个地址:https://msdn.itellyou.cn/
展开操作系统分页,点击Windows XP,选择要安装的版本,点击详细信息,可以看到一个ed2k的链接,将其复制到迅雷中即可开始下载。
耐心等待下载完成
下载完毕
四、创建XP虚拟机 打开VMware,点击菜单文件 -> 新建虚拟机。
默认经典配置即可,为了演示,我选自定义,点击下一步。
点击下一步。
选择我们刚刚下载的iso系统镜像文件,点击下一步。
产品秘钥可以先不填,填写个性化全名,比如我填的linxinfa,点击下一步。
此时弹出询问框,点击是。
选择虚拟机的安装路径,点击下一步。
配置处理器,点击下一步。
配置内存,点击下一步。
配置网络类型,点击下一步。
配置I/O控制器类型,点击下一步。
配置磁盘类型,选择IDE,点击下一步。
配置磁盘,点击下一步。
分配磁盘空间,点击下一步。
指定存储文件,点击下一步。
最后,点击完成。
此时虚拟机就会开始安装,耐心等待。
继续等待。
差不多两三分钟后,会弹出如下的提示框,点击确定。
产品密钥输入框,可以先不填,直接点击下一步。
会弹出询问框,点击否。
进入下一阶段的等待。
等待。
安装完成,青青的草原,爷青回,哈哈哈。
整个虚拟机文件夹大小2G左右。
五、本机与XP虚拟机共享文件夹 确保虚拟机是关闭状态,点击编辑虚拟机设置。
点击选项,点击共享文件夹,点击总是启用,点击添加。
设置本机的某个文件夹,比如vmware_share文件夹,点击下一步。
点击开启此虚拟机。
右键我的电脑,点击映射网络驱动器
点击浏览。
稍等片刻后,可以看到刚刚在VMware中设置的共享文件夹,选中它,点击确定。
点击完成。
这样,我们就可以在我的电脑中看到一个网络驱动器。
RabbitMQ并发 起因通过注解并发配置工厂的时候设置并发 起因 项目中有一个业务需要先把数据从接口入到原始表,再通过MQ机制,让业务处理程序监听并处理。跑了几天以后发现有大量消息堆积,通过rabbitmq控制台看到Ready了几万条数据,Pulish是3/s左右,但Consumer ack则1/s左右,代码分析后发现有很多mysql的查询操作,但是优化起来比较有难度,于是考虑到消息并发处理
通过注解并发 搜了一些方法,最多的就是在RabbitListeners注解上加上concurrency属性
@RabbitListener( bindings = @QueueBinding( value = @Queue(value = "myQueue1"), exchange = @Exchange(value = "myExchange1"), key = "routingKey1" ), concurrency = "10" ) public void process1(Message message) throws Exception { // 执行程序 } bingdings部分可以忽略,关键是我发现我的RabbitListener注解没有concurrency属性,查看版本,我的是1.7.x,而concurrency是2.x才有的属性
配置工厂的时候设置并发 如果使用1.x版本的也可以直接在配置工厂的时候设置并发数
@Bean public RabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory mqConnectionFactory){ SimpleRabbitListenerContainerFactory listenerContainerFactory=new SimpleRabbitListenerContainerFactory(); listenerContainerFactory.setConnectionFactory(mqConnectionFactory); listenerContainerFactory.setMessageConverter(new Jackson2JsonMessageConverter()); // 最大并发数 listenerContainerFactory.setMaxConcurrentConsumers(20); // 初始并发数 listenerContainerFactory.setConcurrentConsumers(10); return listenerContainerFactory; } 再使用RabbitListener注解监听消息的时候没有concurrency属性也会并发
1.点击你的项目文件—然后右击----选择new----再选择image asset 2.先点击image然后选择图片路径,最后确定,最后Next、Finish 完成项目图标的修改
ls -l和 ll命令的作用都是以清单的形式列出文件的条目,包括文件的名称、权限、拥有者、大小、最后修改时间等
返回信息的含义 第一栏 :文件权限 (具体解释如下) 第二栏 :包含文件数(如果是文件的话,数目是1,如果是目录的话,数目就是该目录中的文件个数) 第三栏 :文件或目录的拥有者
第四栏: 所属的组(group)
第五栏: 文件大小
第六栏: 最后修改时间
文件权限: 共包含十个字母
第一个字母:
”-”,普通文件. 如上图-rwxrwxr-x为一个普通文件
”d”目录,dirtectory(目录)的缩写 如上图drwxrwxr-x为一个文件夹
“l”符号链接。请注意,一个目录或者说一个文件夹是一个特殊文件,这个特殊文件存放的是其他文件和文件夹的相关信息
“b”块设备文件
“c”字符设备文件
剩余九个字母:
每三个为一组,每一组分别代表owner 、group、 others的权限,权限包含w: write(可写) r: read(可读) x: excute(可执行)
如:drwxrwxr-x 代表 文件夹 rwx(owner) 可读可写可执行 rwx(group) 可读可写可执行 r-x(others) 可读可执行不可写
修改文件权限 使用指令
chmod +权限值 文件路径 #如 chmod +x /home/xxxx/xxx.sh 权限值是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;
通过读写执行权限的权限相加得到几种权限值:0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)
常见权限值:
444 r--r--r--
600 rw-------
644 rw-r--r--
文章目录 物理层概述物理层的作用传输介质信道的基本概念分用-复用技术 数据链路层概述封装成帧透明传输差错检测奇偶校验码循环冗余校验码(CRC) 最大传送单元MTU以太网协议详解MAC地址以太网协议 物理层概述 物理层的作用 如果是OSI七层模型的话,物理层是处于最底层的位置。对于TCP/IP四层模型,它是属于最底层的网络接口层。物理层的作用是
连接不同的物理设备(比如路由器到计算机通过网线进行连接)传输比特流(比特流就是0、1这样的高低电平,或者说是数字信号) 传输介质 连接不同物理设备的介质,包括有线介质和无线介质,其中有线介质包括
双绞线、同轴电缆、光纤、比特流
信道的基本概念 信道是往一个方向传递信息的媒体一条通信电路往往包含一个接收信道和一个发送信道因为发送信息和接收信息的方向不一样,所有这里有两个信道 一条通信线路,既发送又接收,如果引起了冲突会怎么办?
这个问题,其实物理层已经解决了。根据信道的不同,通信电路可以分成
单工通信信道半双工通信信道全双工通信信道 单工通信信道
只能一个方向通信,没有反方向反馈的信道有限电视、无线电收音机等等,都属于单工通信信道(一方发送,另外一方只能接收) 半双工通信信道
双方都可以发送和接收信息不能双方同时发送,也不能同时接收 全双工通信信道
双方都可以同时发送和接收消息网线这些都是全双工通信信道 分用-复用技术 前边介绍到,如果两个计算机进行通信,那么在他们之间就会有一条通信线路,在这条通信电路中,可能用发送信道和接收信道。考虑一种情况,如果有很多的计算机,他们都需要连接,这个时候就有很多的发送信道和接收信道,并且在很多时候,他们也并不是处于活跃的状态。这就会导致信道的利用率不高。因此就提出了分用-复用的技术,用来提升信道的利用率
分用-复用技术是如何提高信道的利用率?
多个计算机连接复用器,另一侧的计算机连接分用器。通过复用器和分用器这两个设备就可以共享一条发送信道以及接收信道,这样就可以大大提升信道的利用率。
注意:如果有很多的计算机,很频繁的通过信道收发信息,会导致信道拥塞
数据链路层概述 对于物理层,主要是进行不同设备的连接,以及传输比特流。下边是对数据链路层进行介绍,首先数据链路层是位于OSI七层模型的倒数第二层,也就是物理层的上边一层,位于TCP/IP四层模型的网络接口层
数据链路层主要是解决了以下三个问题
封装成帧透明传输差错检测 封装成帧 “帧”是数据链路层数据的基本单位(就好比比特位是物理层数据的单位)发送端在网络层的一段数据前后添加特定标记形成“帧”接收端根据前后特定标记识别出“帧” 下边是通过图示来理解封装成帧的过程
首先在网络层会将一些“IP数据报”传输到数据链路层数据链路层在接收到这个数据的时候,把它看做是数据帧的数据,然后在数据的前后加上特定的标记,表示这是数据帧的头部和尾部从帧首部到帧尾部就是数据帧的长度 而数据帧在物理层表现的就是很多的0和1组成的比特流。上边的提到的帧首部和帧尾部,都是特定的控制字符(特定比特流)
帧首部的比特流是:SOH:00000001(SOH是控制字符)
帧尾部的比特流是:EOT:00000100
如果帧数据中也恰好有帧首部或帧尾部一样的比特流该怎么办
这个就需要透明传输
透明传输 通过透明传输就可以解决上边提到的问题。在介绍透明传输之前,先了解一下什么是“透明”。“透明”在计算机领域是非常重要的一个术语。
比如我们平时在设计一个API的时候,我们会常说,你这个API设计的足够良好的话,那么底层的这个API的操作,对API的调用方是透明的。再比如说,数据链路层和物理层,对于数据链路层来说,物理层它所做的工作都是透明的,物理层只需要提供一些API给数据链路层去使用就可以了。说白了就是:一种实际存在的事务,却又看起来不存在一样。把透明这个概念使用在数据链路层就是,控制字符在帧数据中,但是要当做不存在的去处理
那么数据链路层是怎样做到,即使控制字符位于帧数据中,它还是可以装作不知道的去处理的呢?
假设此时帧数据中有一个帧尾部的控制字符,如果数据链路层没有使用透明传输,那么接收端很可能就把位于帧数据中的控制字符,看做是数据帧的尾部,从而识别出错误的帧。因此数据链路层就会对帧数据中的控制字符进行特殊处理
处理的方法就是在控制字符前边加转义字符,下边的ESC就是转义字符。这样的话,接收端在接收到数据帧之后,它就会先判断帧数据中的控制字符前边是否存在转义字符,如果存在,就不会把这个控制字符当做一个控制字符。那如果帧数据中也出现了转义字符怎么办?把转义字符重新转义一次即可
其实我们在平时的编程当中,“\”一般看做是转义字符。假设此时要输出“\”,那么在这两个反斜杠前边都加上转义字符即可,表示这两个都不是转义字符"\"
差错检测 物理层只管传输比特流,无法控制是否出错(如果物理层传输比特流的过程中受到了一些干扰,比如闪电。就会影响比特流的传输,物理层是察觉不到的)
数据链路层负责起“差错检测”的工作,主要包含两个部分:
奇偶校验码循环冗余校验码(CRC) 奇偶校验码 奇偶校验码是一种非常简单的检测比特流中是否有传输错误的方法。该方法是通过在比特流的尾部添加一位比特位来检测比特流是否有出错。假设测试要传输“00110010”这个8位的比特流
首先在这个比特流后边加“1”这个比特位当接收端接收到这个比特流之后,就会根据后边加的那个比特位来检测该比特流是否有出错这个1是通过前边的8位比特流相加得到3,因为3是奇数,所以就在这个8位的比特流后边加上1,来表示这是一个奇偶校验的位 如果我们要传输“00111010”这个比特流,那么后边添加的比特位就应是“0”,因为这8位相加的结果是4,是个偶数。下边就看一下,如何通过这个奇偶检验码来检测错误。假设此时要传输“00110010”这个比特流,那么需要在尾部添加“1”这个比特位。假设在传输的过程中发生了错误,接收端收到的是“00010010”,此时接收端会通过奇偶校验码来进行校验,接收端计算的奇偶校验码是“0”,不等于“1”,说明这个比特流在传输的过程中出现了差错
相信聪明的你已经看出来,这里边有一个局限性,假设现在还是要传输“00110010”,在尾部添加的比特位是“1”。假设此时接收端接收到的是“00000010”,接收端经过运算之后,发现后边的奇偶校验位应该是“1”,而恰好此时,最后一位校验位就是“1”,就会认为数据没问题,而实际上数据是有问题的。所以当比特流出现两位错误,奇偶校验码就检测不到错误。
循环冗余校验码(CRC) 循环冗余校验码是一种广泛使用的差错检测的算法
它是一种根据传输或保存的数据而产生固定位数校验码的方法(固定位数,可能是1位,也可能是多位)它可以检测数据传输或者保存后可能出现的错误它的过程和奇偶校验码有些类似它首先计算生成一些数字,并且附加到数据后边当接收端接收到数据之后,就会根据附加到后边的数字,来判断接收到的数据是否有出错 CRC主要有三个步骤
选定一个用于校验的多项式G(x),并在数据尾部添加r个0将添加r个0后的数据,使用模“2”除法除以多项式的位串将得到的余数填充在原数据r个0的位置,得到可校验的位串 下边直接例子
使用CRC计算“101001”的可校验位串
下边就根据上边提到的计算CRC的三步来计算
(1)首先是选定一个用于校验的多项式G(x),并在数据尾部添加r个0
什么是G(x)?
G(x)可能是下边这样的一个多项式
位串就是将多项式的常数项提取出来,得到了位串1101。在数据尾部添加r个0,其实就是在尾部添加最高阶个0。因此在“101001”后边添加3个0就得到了“101001000”
(2)将添加r个0后的数据,使用模“2”除法除以多项式的位串
SQL 基础 文章目录 SQL 基础学习资源基本语句查询(query)插入(insert)更新数据(update)删除创建修改(结构)删除表索引子查询集合运算日期函数case 语句窗口函数其它 MySQL三大范式 学习资源 SQL 在线学习
掘金 - mysql 排它锁之行锁、间隙锁、后码锁 cnblogs - 史上最全的select加锁分析(Mysql)
基本语句 查询(query) select <col_name> from <table_name> where <cond>
col_name 可以是多个,逗号隔开cond 逻辑表达式,可以是多个 用 and/or 连接,表达式可以是数值比较,或者文本匹配 select * from table <==> df select id, name from table <==> df[["id","name"]] select * from table where age > 10 <==> df.loc[df["age"]>10] 排序 order by限制行数 limit n offset m SELECT column, another_column, … FROM mytable WHERE condition(s) ORDER BY column ASC/DESC LIMIT num_limit OFFSET num_offset; Select query with unique results SELECT DISTINCT column, another_column, … FROM mytable WHERE condition(s); 由于DISTINCT关键字会盲目地删除重复的行,因此我们将在以后的课程中学习如何使用分组和GROUP BY子句基于特定的列丢弃重复项
AI CS4的不知道,CS5的知道一个方法,利用画板。你找找看在CS4里是不是2113相同的位置哦!条件是8P的文件都在一个层里面,如果是在不同的层里,还是不能5261一次性到出来的,还是要一层层导图。步骤如下:1)新建一层(也可以在8P文件所在层里,我为了看的清楚方便,喜4102欢新建1层),画8个矩形框,大小和位置要和8P的文件一样。2)逐个设为画板,菜单:对象1653>画板>转换为画板,一共将8个矩形框都转换掉(画板面板里有画板的名称,跟层面板相似)3)文件>导出>扩展名专JPG,勾选使用画板,默认是全部画板的,也就是刚才的8个。(要选择其中某个页面的话,直接在属右面的范围里输入,有点像WORD打印一样的。再导出就OK了www.mh456.com防采集。
1、打2113开AI软件,绘制多个画板的图形。
图层选择需要导出的画板,右键-导出为-全部导出就可以了,这个是多个画板导出为每个画板单独的JPG图,单个画板导出为单张图片一样适用!需要将多个画板导出为一整张图片选择导出为web格式即可
2、然后我们把5261不同画板保存为4102不同的文件。
3、有必要的时候注1653意定义文件名字。
4、打开AE,导入刚刚保存的AI文件。注意选择合并类型。
5、双击一下合成。然后我们就可以看到下面有多个项目了。
6、分别点击名字就能进入到分别的项目了。
另存为ai格式文件的时候,勾选上使用画板
本回答被网友采纳
点击软件界面里2113的“打开”按钮,将需要5261进行拆分的PDF文件4102打开。
添加完成的1653pdf文件在打开后,会以缩略图的形式呈现在页面的左侧,
打开PDF文件后,需要点击界面里的“文档”选项,然后选择里面的“拆分文档”功能,进行文档拆分操作。
最后可以给PDF添加注释的,这些都是可以的
内容来自www.mh456.com请勿采集。
声明:本文是根据博主学习内容所整理得的笔记,仅作为交流学习使用,需要观看视频的请移步:http://www.atguigu.com/
1.Filter ?什么是过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。
三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器Filter 过滤器它是 JavaEE 的规范。也就是接口Filter 过滤器它的作用是:拦截请求,过滤响应。 拦截请求常见的应用场景有:
1.权限检查 2.日记操作 3.事务管理 ……等等
2.Filter 初体验 要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件…等等)都必须是用户登录之后才允许访问。
思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到 Session 域中。所以要检查用户是否登录,可以判断 Session 中否包含有用户登录的信息,即可!!!
a.jsp:
<body> <% Object user = session.getAttribute("user"); // 如果 user = null; 说明 user 还没有登陆 if (user == null) { request.getRequestDispatcher("/login.jsp").forward(request,response); return; // 一般请求转发后,就不允许再执行任何代码,这里就直接return了 } %> 我是 a.jsp 文件 </body> 但是在 html 页面当中应该怎么写呢? 需要使用 Filter 过滤器
精品文档
精品文档
项目名称
:Bank Account Management System
银行账户管理系统
简称
BAM
项目描述
:
这是一个银行账户管理系统
,
用户可以操作自己的银行账户
.
项目实施方式
:
这是一个同步练习
,
随着
CoreJava
课程的深入
,
这个项目将趋于完整
,
学员的任务是随着知识点的深入
,
完成
每一个进阶的项目要求
.
练习
1:(
面向对象基础语法
)
创建
entity
包
,
编写一个账户类
(Account),
属性变量
:
id:
账户号码
长整数
password:
账户密码
name:
真实姓名
personId:
身份证号码
字符串类型
balance:
账户余额
方法
:
deposit:
存款方法
,
参数是
double
型的金额
withdraw:
取款方法
,
参数是
double
型的金额
这个寒假漫长而无奈,5:55之前打卡总感觉不舒服,我利用xposed edge pro进行打卡,经测试稳定有效。
一;在手机(仅限安卓)部署好:magisk(supersu)
xposed(edxposed,太极阳)
下载安装edge pro
(以上均能在酷安找到详细过程)
二:手势录制
录制技巧:把按键中的音量加点击设置为手势录制
开始录制
1:录制解锁手势(大部分手机有密码,按锁屏键亮屏后按音量加开始录制,进入桌面再按一次音量加自动保存)
2:录制打卡手势步骤同上
(不连着录制的原因是怕一些原因影响,分步录制可调性强)
设置多重动作,如图即可(根据手机性能调节延时时间)
(我设置的录屏是为了看一看效果,可不设置录屏)
手势录制界面
效果如下
https://www.zhihu.com/video/1213358493199134720 禁止转载
单棱翻、两棱换是还原四阶魔方时会出现的两种特殊情况,分别被称为O特和P特。当O特和P特单独出现时,我们用相应的公式即可解决,那么当O特和P特同时出现时,我们有没有相关的公式来解决呢?答案是有的,于是此文便诞生了。由于P特已经在文章 孙氏四阶魔方高级教程之图示四阶魔方两棱换 中介绍过了,今天便不介绍了。让我们便把重心放在O特和O特P特合一公式上吧。本期的公式图示相对方向为 情况一:四阶O特(公式为右手版,镜像为左手版) 释义:翻转UF棱块的同时交换被翻转棱块的位置,右手版和左手版的效果是一样的。 情况二:四阶O特变种(公式为右手版,镜像为左手版) 释义:翻转UF棱块角块的同时交换被翻转棱块角块的位置和交换UL棱和UR棱,是O特P特合一的情况之一,右手版和左手版效果一样。 情况三:O特P特合一(公式为右手版,镜像为左手版) 释义:交换两棱的同时翻转其中的一棱。可以看成是先翻转UF棱块的同时交换被翻转棱块的位置(O特),然后交换棱UF和UB(P特),右手版和左手版效果一样。 情况四:O特P特合一变种一右手版 释义:交换两棱的同时翻转其中的一棱。可以看成是先翻转UF棱块的同时交换被翻转棱块的位置(O特),然后交换棱UF和UR(P特变种)。 情况五:O特P特合一变种一左手版 释义:O特P特合一变种一右手版的镜像版。 情况六:O特P特合一变种二(公式为右手版,镜像为左手版) 释义:翻转UF棱块角块的同时交换被翻转棱块角块的位置,是O特P特合一的情况之一,右手版和左手版效果一样。 注:公式图示是由 孙氏四阶魔方公式转换助手 生成,如果需要将四阶魔方公式转换成示意图的,欢迎使用孙氏四阶魔方公式转换助手。 最后,谢谢大家的阅读。
顾名思义- 类型错误:“浮点数”对象无法被调用
这个问题出现的原因一般是函数命名和变量命名上出现混淆造成的,提醒我们命名的规范化。
本次问题出现在声明类时,变量和函数重名。
双十一刚刚结束,双十二又要来了,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔。在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度,介绍闲鱼交易链路业务的架构演进过程,在保证性能的前提下,不断提升研发效率,与大家一起交流过程中的思考。
业务特征
我们今天定义闲鱼交易链路,从闲鱼特有的交易模式“边聊边买”,由交易聊天为入口,下单、订单详情、订单列表及相关二级页面,包含契约签订、履行、违约服务。履约区分为正向交易流程(付款、发货、收货、评价等)、逆向交易流程(退款、退货等)。
交易链路所承接的业务有:普通交易、见一见交易、担保交易、闲鱼币交易、玩家交易、回收交易、寄卖交易等。不同业务在不同状态下提供不同的交易操作。以普通C2C交易正向交易流程为例:
交易链路具有多业务、多状态、多操作的特征。作为应用的关键链路中的一环,业务相对固化,需要保证性能与体验,同时也需要一定的动态性,能够快速地承接新增业务类型、新增业务状态、新增交易操作,视觉不常改变,对页面组件动态性无强诉求。
演进过程
手淘的方案
类似的交易场景,手淘提出来不错的解决方案——新奥创。新奥创通过页面区块化与行为通信协议,提供基于业务的页面、组件、规则,前端实现动态模板,后端根据业务将页面进行编排,实现跨端、组件动态化。
闲鱼的问题
在闲鱼业务场景中,特有的C2C交易模式,与手淘B2C交易模式下差别较大,没有购物车、没有多商品聚合订单。手淘的交易流程可以在天猫、飞猪、盒马等通用。但闲鱼的交易模式,出于业务特征,不适合在手淘完成闲鱼交易流程。
闲鱼C2C交易链路业务相对固化,没有强页面动态化的需求。在这样的背景下,前后端向新奥创迁移,成本较高且收益较少。并且,新奥创的后端开发仍然需要关心页面编排,并不是更终态的研发模式。因此,闲鱼没有将新奥创作为技术选型。闲鱼交易链路的侧重点是:
稳定:保证双端一致,减少双端逻辑不一致的场景;支持一定的动态化能力:端侧仅处理页面渲染,业务逻辑上云;新研发模式:前端深入业务,实现服务端页面渲染相关逻辑,后端领域下沉,专注领域建设,云端一体; 为达到这个目标,交易链路架构演进经过3个阶段:
我们来简单看一下闲鱼交易链路的架构演进过程:
第一阶段:****业务解耦
在2017年-2018年,交易链路由原有业务快速迭代时期的简单代码结构,进行了页面区块化改造。此时,服务端大致分为3层:底层数据模型、闲鱼C2X交易域、业务解决方案。后端基于底层数据模型,根据闲鱼不同业务特性与业务逻辑,搭建闲鱼C2X交易域,再以业务解决方案提供不同场景业务数据。
而端侧分为两层,业务数据解析将后端的业务数据,根据不同业务类型、不同交易状态进行解析、整合,转换为页面渲染协议ViewModel,同时将页面区块化,抽离出不同业务通用组件,根据ViewModel直接渲染。
页面区块化操作Action化 第二阶段:****两端一体,逐步上云
2019年,在第一阶段的基础上,我们首先解决双端逻辑不一致的问题,选择了Flutter作为跨平台解决方案,同时通过FishRedux进行页面区块化改造。交易操作也通过CommonAction完成逻辑一致,实现端上的交易操作中台,提供给交易链路多业务场景进行调用。
Flutter&Fish Redux交易操作中心业务上云 此时,服务端仍分为3层:底层数据模型、闲鱼C2X交易域、业务层。业务层包含业务解决方案、页面渲染解析。客户端上仅保留渲染层。
第三阶段:****云端一体
在前一阶段,客户端将端侧业务逻辑完整上云,但同样出现了瓶颈,在交易业务场景,后端需要更多的精力进行领域建设和沉淀,更少关心页面渲染交互的逻辑,我们希望能有更高效的研发模式,减少各端研发之间的大量的协同, 提升整体研发效率。
此时我们选择统一技术栈Dart,通过FaaS无服务器能力建设,采用Flutter+FaaS(Dart Runtime)云端一体的研发模式,让客户端同学来写服务端胶水层代码,同时还无需关心传统服务端运维、扩容等工作。原有的业务聚合、渲染协议解析,由客户端同学在Server完成,实现逻辑归一,完成端到端的研发闭环,实现资源配置的优化。
图7-云端一体化工程体系
在云端一体的研发模式中,Server进行了重新的分层,后端能够专注领域建设,客户端开发完成原有的业务解决方案以及到渲染协议的解析,即下图标红部分。当然,在实际开发过程中,FaaS与领域的边界因实际业务有一定交集。
服务端开发:完成领域建设;客户端开发:聚合多域信息,实现渲染协议,端侧直接进行UI渲染; 同时,在交易链路,我们将后端接口划分为渲染接口与交互接口:
渲染接口提供页面渲染数据,下图为FaaS部分的代码结构,完成接口校验后,定义页面协议,同时根据业务需求,将多领域数据进行聚合填充。
前文中,我们介绍过,交易包含有多操作,在不同业务中,时常有新增操作的需求。不同订单类型不同订单状态包含哪些操作,由渲染接口实现操作动态可配置,例如”已下单未付款“C2C普通交易订单,包含“付款”、”关闭交易“操作。操作触发后的实现,需要业务校验、触发领域服务的交互行为,由端侧完全迁移至FaaS,通过闲鱼的Nexus框架使用Logic Engine的Action通信协议,例如,用户触发创建订单行为,即触发CREATE_ORDER的Action,FaaS部分调用下单的领域服务后,通过NativeApi,触发端上相应的操作唤起收银台、跳转链接。
效果
当前闲鱼交易链路在云端一体的阶段不断深耕,目前已经落地了下单页面,由原有的前后端3人开发变为1人开发,减少协同显著提升研发效率,其他场景也已经在规划落地中。下单页云端一体版本闲鱼11月版本开始灰度,有兴趣的同学可以亲身体验。
后续计划
本文介绍了闲鱼交易链路的架构演进的过程与思考,不同业务场景适用不同的业务架构,在业务发展过程中,会遇到各式各样的问题或瓶颈,针对业务当前问题与发展方向,选用合理的、收益与成本得宜的技术方案,是顺势而为
小编是一个有着5年工作经验的程序员,关于Java,自己有做材料的整合,一个完整学习Java的路线,学习材料和工具。需要的伙伴可以私信我,发送“交流”后就可免费获取。对于学习Java有任何问题(学习方法,学习效率,如何就业)都可以问我。希望你也能凭自己的努力,成为下一个优秀的程序员!
作者:码农小光
来源:简书
SM4分组密码算法 一:SM4概念 SM4分组密码算法,原名SMS4,是国家密码管理局于2012年发布的密码行业标准之一(http://www.gb688.cn/bzgk/gb/newGbInfo?hcno=7803DE42D3BC5E80B0C3E5D8E873D56A)。与DES和AES算法类似,SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代Feistel结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用的轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。 二:名词解释 1:分组密码
分组密码是将明文消息编码后的数字序列划分成长为N的分组,分别在密钥K=(k0,k1,k2 ……)的控制下变换成等长的数字序列(序列长为M,输入分组长度和输出分组长度可以不等)。 2:代换
为保证加解密运算可逆,明文的每个分组在特定的加密算法作用之后应当产生唯一的密文分组,明文分组到密文分组之间的可逆变换称为代换。 3:S 盒
如果明文和密文分组的长都为N比特,则每个明文分组都对应着2N种可能的取值,不同可逆代换的个数为(2N)!个,这也意味着密钥的长度为(2^N)!比特。从实际的角度来看,分组长度很大的可逆代换是不现实的,如果分组太小,又不能满足算法的安全性能。因此实际中常将分组分为较小的子段,可将长度为N的序列的代换拆分成m个较小的子代换,每个子代换称为代换盒,简称S盒或Sbox。SM4算法中,S盒的长度为8bit。 4:Feistel加密结构
Feistel加密算法的输入是长为2w的明文和一个密钥K=(K1,K2…,Kn)。将明文分组分成左右两半L和R,然后进行n轮迭代,迭代完成后,再将左右两半合并到一起以产生密文分组。其第i轮迭代的函数为:Li=Ri-1,Ri=Li-1+F(Ri-1,Ki)其中Ki是第i轮的子密钥,“+”表示异或运算,F表示轮函数。一般地,各轮的子密钥彼此各不相同,且轮函数F也各不相同。代换过程完成后,在交换左右两半数据,这一过程称为置换。
使用上述Feistel结构的密码有几个值得注意的特点:轮函数相对简单,需要将它迭代多轮,典型地,4、8、16和32轮较为常见。最重要的部分是加密和解密可以使用同样的结构:轮函数为这两种运 算的主体(加密和解密也可能有更多的区别。如,一些Feistel结构的密码对其初始轮和末尾轮有不同的形式,比如初始置换和末尾置换不同)。轮函数可以为非线性和不可逆的。在许多密码中,例如Caesar密码,核心函数都必须可逆:我们由此才能反过来解密。但是,对于Feistel结构的密码,我们不需要计算轮函数的逆。通常地,轮函数是置换、替代和其他函数的乘积密码。由于它只对一半比特进行运算,因而使用轮函数肯定能节约时间和空间,因此必须考虑–些问题:轮函数作用于一半比特,采用暴力破解需尝试的比特位更少。此外,由于轮函数的安全性决定了算法的安全性,它必须有足够的强度。 5 IV:初始化向量
三:SM4算法实现 1:SM4密码算法整体程序框图如下:
将数据分组生成明文,密钥通过多次轮函数迭代生成密文。
2 :SM4算法结构图:
3:参数产生
(1)字节由8位2进制数表示,字由32位2进制数表示;
(2)S盒为固定的8位输入和输出置换(查表法实现);
(3)加密密钥长度为128位,表示为MK=(MK0,MK1,MK2,MK3),其中MKi (i=0,1,2,3)长度为字(32位)。轮密钥表示为rki(i=0,1,2…,31)长度为字(32位)。FK=(FK0,FK1,FK2,FK3)为系统参数,CK=(CK0,CK1,…,CK31)为固定参数,长度都为字(32位)。
4:轮函数
整体的加密函数为:
X i + 4 = F ( X i , X i + 1 , X i + 2 , X i + 3 , r k ) = X i ⨁ T ( X i ⨁ X i + 1 ⨁ X i + 2 ⨁ X i + 3 ⨁ r k ) X_{i+4}=F(X_{i},X_{i+1},X_{i+2},X_{i+3},rk)=X_{i}\bigoplus T(X_{i}\bigoplus X_{i+1}\bigoplus X_{i+2}\bigoplus X_{i+3}\bigoplus rk) Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rk)=Xi⨁T(Xi⨁Xi+1⨁Xi+2⨁Xi+3⨁rk)
参考:点云侠- https://blog.csdn.net/qq_36686437/article/details/108803098 及其它
注:亲验成功。
一. 下载PCL1.11.1的安装文件
1)下载PCL1.11.1的相关文件: https://github.com/PointCloudLibrary/pcl/releases
图1 2) 先安装PCL-1.11.1-AllInOne-msvc2019-win64.exe
问题1:在OpenNI2安装时会提示文件路径过长,此时点击确认即可,则 OpenNI2会被安装在PCL1.11.1的同级安装文件夹OpenNI2下。
a. 此时,卸载OpenNI2,然后到PCL1.11.1的安装文件下,找到C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2文件夹,则可以看到有一个安装文件:
b. 安装它,并且选择安装文件夹为“C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2”,即可安装成如下文件夹内容:
3)将pcl-1.11.1-pdb-msvc2019-win64.zip解压缩,并将解压缩文件拷贝到C:\Program Files\PCL 1.11.1\bin文件夹下。
安装完成。
二. 配置系统环境变量
环境变量Path的设置,按红线框选择相关文件夹的置入;
二. VS2019的项目配置
在VS的项目下配置属性设置
1)打开项目属性窗口,在General中确定SDK和平台版本;
2)在Debugging下,对Environment进行设置
Environment下的设置为:
PATH=$(PCL_ROOT)\bin;$(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\OpenNI2\Tools\bin;$(PCL_ROOT)\3rdParty\Qhull\bin;$(PCL_ROOT)\3rdParty\VTK\bin
3)在C/C++>General下,对SDL checks进行选择;
4)在 C/C++>Language中,对Conformance mode进行设置;
5)在VC++ Directories下,对Include Directories进行设置;
6)在VC++ Directories>Library Directories中进行如下设置:
7)在C/C++下的Preprocessor Definitions中加入如下设置:
8)Debug与Release分别配置不同的文件
Debug配置
文件名末尾带d即为debug下的库文件,可以拷贝下表: pcl_commond.lib pcl_featuresd.lib pcl_filtersd.lib pcl_iod.lib pcl_io_plyd.lib pcl_kdtreed.lib pcl_keypointsd.lib pcl_mld.lib pcl_octreed.lib pcl_outofcored.lib pcl_peopled.lib pcl_recognitiond.lib pcl_registrationd.lib pcl_sample_consensusd.lib pcl_searchd.lib pcl_segmentationd.lib pcl_stereod.lib pcl_surfaced.lib pcl_trackingd.
mph 是英里每时的意思吗?如何换算成千米每时?
mph是米/小时的意思 miters per hour 也可写成m/hA km/h= A*1000 m/h
mph 是英里每时的意思吗?如何换算成千米每时?
100mph=160.9kmh
玩极品飞车12,上面的速度是mph,怎么换算啊
1 英里 = 5 280 英尺 = 63 360 英寸 = 1 609.344 米
汽车速度表上,英制的MPH与公制的km/h的换算率是多少。 说明白些是多少.
一英里等于1.6093公里 那么就是0.6214MPH等于1km/h
国际单位mph(时速)中国单位km/h(时速)有什么不同如何换算
mph是英里每小时,kmh是公里每小时。1 mph = 1.609344 km/h 1 km/h = 0.6213712 mph KM大家都知道是公里的意思,而MPH大家都俗称“迈”,在国外是“英里”的意.
1 mph = 1.609344 km/h 1 km/h = 0.6213712 mph KM大家都知道是公里的意思,而MPH(miles per hour)大家都俗称“迈”,在国外是“英里”的意思.
速度单位的换算关系如下: 1 mph = 1.609344 km/h 1 km/h = 0.6213712 mph KM大家复都知道是公里的意思,而MPH大家都俗称“迈”,在国外制是“英里”的zhidao意.
更改spyder中文件的文件名:
在view里,点击file explorer,就可以打开文件浏览窗口。
然后,找到要修改文件名的文件,右键点击,重命名即可。
或者是更简单的办法是,在File菜单里,打开一个文件,用另存为。
其它的工具窗口。你也可以在view里找到。常用的是project explorer, outline, console, pylint等。
看到大多数博客都说的是没有在应用设置回调地址,但是我再三确认我的回调地址已填写,并且跳转连接中的地址与其一直,就像下面
<a href="https://api.weibo.com/oauth2/authorize?client_id=3661722387 &response_type=code &redirect_uri=http://auth.gulimall.com/oauth2/weibo/return"> 但是还是这个结果
直到我终于看到了这篇博客,它里面提到一句
有时候浏览器中显示的地址是编码过的,不容易判断回调地址是否设置的正确无误
并且提供了一个 在线url转换工具,可以把浏览器中的地址转换成正常的形式,或者把原地址转为浏览器编码后的格式
我的原地址是 : http://auth.gulimall.com/oauth2/weibo/return
转换后是:http%3A%2F%2Fauth.gulimall.com%2Foauth2%2Fweibo%2Freturn
于是我将授权地址变为
<a href="https://api.weibo.com/oauth2/authorize?client_id=3661722387 &response_type=code &redirect_uri=http%3A%2F%2Fauth.gulimall.com%2Foauth2%2Fweibo%2Freturn "> 最终一次成功
如果你也遇到了和我一样的问题,不妨试试吧!
1、UE根据测控满足条件后上报测量结果,源站PCI+频点查找目标站点,发送handover required;
S1AP :handover required
MME-UE-S1AP-ID;eNB-UE-S1AP-ID;Handover type;Cause;Target ID(MCC、MNC、ENB_ID、TAI–其中TAI可以查找是否有MME变更);Source to Target TransparentContainer(包含内容如下):
→1、RRC Container:
→2、erab infomation list:
这里和Direct Forwarding Path Available是有区别,不带Direct Forwarding Path Available说明是间接隧道。
→3、target cellid
2、MME发送handover request到目标基站
其中transport address是sgw地址,还有上行隧道teid,当目标基站收到后已经具备发送上行数据(SGW不变场景下),但是还缺UU口的承载建立。
3、目标基站回复handover request acknowledge
包含handover command、gtp下行隧道信息(已经发送给MME,只是MME还未转发给sgw)、以及数据转发的间接隧道信息。
**4、MME发送create indirect data Forwarding tunnel request **
包含IMSI、上下行转发隧道信息,sgw创建间接隧道。

• 自治系统AS:单一技术管理下的一组路由器,用唯一分配的AS号标识
• AS可以独立地决定网络的互联关系,以便更有效地进行路由选择
• 管理域控制了路由的扩散,因此产生外部路由的概念
• 外部信息是可达性的路由信息,而内部路由是可操作的路由信息(例如根据测度选择最优通路等)
• AS内部使用域内路由协议(IGP),AS之间的路由使用域间路由协议(EGP)。
Transit:是客户和供应者AS之间的商业关系(是要钱的,但是可以通过对方网络来访问别的网络)。
Peering:Peering关系指两个AS之间协商仅在它们以及他们的客户AS之间交换流量,也就是相互通告相应的路由,以改善相互间的可达性以及健硕性,并减少向上游的转送成本(相互开放对方的用户,双方属于互利关系,互相不收钱,但是只能发给目标是对方网络或者对方客户)。
AS之间的连接关系:
• 效益最大化 vs. 收益最大化
• Customer-Provider
• Sibling-Sibling
• Backup Sibling
• Indirect Peer
• ISP希望寻求有利于自己的互联方式(Valley-free原则)
Point-Of-Presence(POP):ISP的外边界点称为POP。ISP的POP覆盖范围确定它的规模,如全国性网络或区域性网络。分为接入点和互联点。
接入点的实现结构
• 通过高密度的接入设备实现端系统的汇聚
• 提供接入网与主干网之间的边界控制
• 通常采用多机备份结构(通常设置VLAN来实现、容错、策略路由)
互联点的实现结构
• 基于L2的IXP结构(参加互联的各路由器之间存在一个全互联的拓扑结构)
• 基于L3的IXP结构(采用路由仲裁者(RA)作为中央处理器)
Border Gateway Protocol(BGP)
BGP 跟 IGP 不一样,它并不能自己构建路由表,它只是传播路由:我不生产路由,我只是路由的搬运工。
• AS的边界路由器称为BGP路由器,要求相邻AS中的两个 BGP路由器必须处于同一个物理网中。
• BGP向邻接点通告路由信息
-基于逐跳的路由模型
-基于路由策略
-BGP不对路由表进行定期刷新
初始交换规程
• BGP使用TCP作为传输协议.
• BGP在TCP建立之后,双方均要发送 open报文,以协商连接的参数。
• 如果两个BGP路由器同时发起连接建立的要求,则会发生冲突,这时使用BGP连接标识符值大(即地址大的)的一方所发起建立的连接;另一方发起的建立若以完成,将其拆除,否则丢弃。
• 如果同意,用keepalive应答;否则notification应答,给出原因。
/ 今日科技快讯 /
近日,有网友在社交平台展示使用筋膜枪抢茅台的操作。对此天猫超市官方作出回应,表示此方法不可靠,并存在身体受伤的可能,希望广大网友理性购物。
/ 作者简介 /
明天就是周六啦,祝大家都能有一个愉快的周末!
本篇文章来自DylanCai的投稿,分享了他对ViewBinding的封装,相信会对大家有所帮助!同时也感谢作者贡献的精彩文章!
DylanCai的博客地址:
https://juejin.cn/user/4195392100243000/posts
/ 前言 /
之前看到官方公众号发文章说准备弃用 Kotlin Extensions Gradle 插件了。可能有些人不知道 Kotlin Extensions 插件是什么,就是用 Kotlin 写 Android 有个很爽的功能是,可以直接用布局里的 id 拿到控件对象。或许一些人经常这么写,但不知道是用一个插件实现的。要在 build.gradle 里配置了下面的代码才会生效,之前创建项目时会自动带上,现在最新版的模板已移除。
apply plugin: 'kotlin-android-extensions' 用 id 获取布局里的控件对象该插件的一个叫 Kotlin synthetic 的功能。貌似挺好的呀,不然写一个控件就要声明成 laterinit var 再调用 findViewById 才能拿到控件对象,写起来很繁琐。
这么方便的功能官方为什么要弃用呢?详细内容的可以看这篇文章《Kotlin Android Extensions 的未来计划》(https://mp.weixin.qq.com/s/pa1YOFA1snTMYhrjnWqIgg),官方提到了以下几点:
污染全局命名空间。
不能暴露可空性信息。
仅支持 Kotlin 代码。
官方的建议是用 ViewBinding 来代替 Kotlin synthetic 。那么相对的,ViewBinding 会有以下优势:
不污染命名空间。这个在我放弃 Kotlin synthetics 用 ViewBinding 时很有感触,终于不用在类文件里看到小写下划线命名的对象了,终于都统一成驼峰命名,强迫症患者表示这波很舒服。
可以减少获取控件的空指针异常。这是 Kotlin synthetics、ButterKnife、findViewById 都存在的问题,大家应该多多少少都有遇到过。而用 ViewBinding 的话,在布局上有什么控件才能获取什么控件,这就不会出错。
答:为了解决用户可能碰到关于"我的EPLAN 软件 符号、中断点等 关联参考 不显示 什么设置出问题 在线等大神解答"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联...
答:首先请双击中断点,看他们的“完整设备标识符”是否相同。 只有相同的时候才能连起来。 因为你加了位置框,如果在同一页内,会使中断点的完整标识符中的“位置”发生变化,所以连不起来。 把完整标识符改一致之后,设备连起来了,如果显示有误,就打...
答:在这个导航器的中断点名称上点右键,有个分类,在这里可以调整中断点的连接顺序
答:看是否选择了隐藏,双击中断点或元件。 然后可以再看一下,选项---设置---项目---“你的项目”---关联参考
答:在中段年只能在页面中关联,不能延长下一页,因为他不值得的功能
答:他们自动关联是因为你命名相同了。 只要命名相同的的设备,系统都会把它自动关联上。 你可以修改命名,可以看全名选项
答:1、创建文本时勾选下面路径功能文本复选框。 2、按下键盘上的“I”键,显示出插入点位置。 3、将路径功能文本的插入点移动到需要关联的设备符号上即可。 希望可以帮到你
答:双击元器件,进入显示一栏,点击这个可以移动关联参考,不显示的话可以直接删除掉关联参考
答:选项-设置-项目-项目名-关联参考/触点映像-常规,窗口右侧最底行 勾上就行了
答:当两个对象的功能代号,位置代号,设备标识符三者一样时,会自动关联的,同一个元件中是不能有两个或更多主功能元件的。
本节内容主要介绍了西门子802D数控铣后处理程序的内容,后处理的基本信息如下:
MASTERCAM MP POST PROCESSOR | Always back up your post-processor
#| CNC Software, Inc. | prior to making any changes. It's easy,
#| Control Model: FANUC 6M+ | just put a floppy in drive a:, at DOS
#| Machine Model: GENERIC | type "COPY C:\NC\*.PST A:"
#| PST File Name: MPFAN.PST/TXT |
#| Executable : MP.EXE 3.06
西门子802D数控铣后处理部分程序如下:
qtoolpln : no # MP386 - Enable tool plane option