线上阿里云环境出现一个异常 lock wait timeout exceeded; try restarting transactio,而且这个异常导致项目短暂时间卡住了。
第一步、分析日志 通过日志分析,有其他定时任务work1在某个时间点大并发的访问某个接口interface1,操作了表B,然后后来的其他的任务work2要访问接口interfac2,而interface2也要更新表B。表现就是接口interfac2报了上面的异常。
第二步、Google问题 google这个问题,大致都得到这样的描述
information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。
我们可以用下面三张表来查原因:
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系。
确实在 innodb_trx发现了wait的事物,而且mysql数据库默认的事务等待时间是50s
show variables like 'innodb_lock%'; 第三步、解决方案 3.1临时解决 通过 innodb_trx查找到等待的事务,kill +事务ID即可。
3.2缓解 减少高并发,或者调用接口先进入队列,然后按照顺序出兑这样肯定能一定程度缓解这个问题。将mysql的innodb_lock_wait_timeout时间加长 3.3代码层面 主要原因还是代码效率不高
分析发现接口interface1操作的更新表B没有利用到索引,导致在百万表中更新会特表慢。其实改接口是单一的,有事务和没有事务都是一样的,没有说必须一起成功或者失败的东西,去掉事务是可行的。如果接口效率高了,但是并发量太大,还出现这个问题,我认为这个时候就需要从设计层面考虑这个问题了,比如拆分表B等等。
提交任务 带着依赖包提交 ./bin/spark-submit --class sparkJava.SparkOnHive_SqlContext \
--master spark://192.0.0.0:7077 \
--driver-memory 1g --executor-memory 1g --total-executor-cores 1 \
--jars (依赖的jar,多个的话用英文逗号隔开)
jarpath
提交到yarn ./bin/spark-submit \
--class net.ctzcdn.processmonitor.monitored.WordContSpark \
--driver-memory 600m \
--executor-cores 1 \
--executor-memory 1g \
--num-executors 1 \
--master yarn \
--deploy-mode cluster myprocess-1.0.jar
后台提交 nohup ./bin/spark-submit --class net.ctzcdn.processmonitor.monitored.WordCountScala --driver-memory 600m --executor-cores 1
--executor-memory 1g
--num-executors 1
--master yarn --deploy-mode cluster
myprocess-1.0.jar >> /home/adminuser/soft/scalaWordCount01.log &
普普通通提交 ./spark-submit \
--master spark://openstack-030.cdnyf.io:7077 \
请看:https://www.sohu.com/a/245708839_100215799
人认识事物总是有一个过程,一般都是从具体到抽象。认识特性阻抗也是一样的,在我们认识特性阻抗之前,先认识跟特性阻抗比较相关的一个物理量—电阻。
电阻是一个实实在在的物理元器件,通过欧姆定律我们可以知道,电压、电流和电阻三者之间的关系,U=I*R
我们通过一个具体的电路来分析这三者之间的具体关系,请看下面的一张最简单的电路图。这个电路图只有一个电源一个电阻和一些导线组成。
当然这个电阻的阻值也可以通过用万用表来直接测量。
特性阻抗就不一样了,用万用表测量一根50欧姆特性阻抗时,将会发现是短路的。这就需要我们从概念上区分电阻(哪怕是刚好是50欧姆的电阻)和特性阻抗是两码事。就像温度上面的度(摄氏度)和角度上的度一样,不是一个东西。
电阻这个物理量大家都懂,这里就不解释了。我们来分析一下这个特性阻抗到底是何方神圣,是在什么条件下才会用这个东西的。
其实特性阻抗是和射频紧密相隔的一个物理量,在认识特性阻抗之前先认识一下射频。我们知道电台,手机通讯信号,wifi等都是向外部发射信号能量的装置,也就是说能量是从天线射出去,能量不再回来到天线了,可以想像就像机枪向外面扫射一样,子弹打出去就不回来了。
好了,明白射频这个东西之后,我们再来到具体的传输射频能量的导线上面来。导线上面传输的射频信号也是一样的,希望它传过去就不要反传回来了,要是有能量反传回来就说明传输的效果差了。
为了更具体的说明特性阻抗这个东西 我这里打一个比方:
同一个电路板上面有2根导线(假设都是很长的两根线,你能想像它有多长就有多长),因为同一个板,那么2根导线的铜皮厚度都是一样的。两根导线,长(无限长)和厚度是一样的,只能唯一不同的是宽度了,假设1号导线宽度是1(单位),2号导线是2(单位)。也就是说2号线宽度是1号线的两倍。
下面的图可以具体看到两根导线的示意图。
如上图所示,假如同时都接的是一样的射频发射源,同样的一小段时间T,那么我们看看这两根导线会有什么区别。同一个发射源,那么两根线的输出射频电压是一样的,射频传输的距离是一样的(假设都是光速,实际比光速少)。
唯一不同的是线宽,而2号线的线比1号线宽一倍,那么2号线需要1号线2倍的电量来填满多出的线宽面积(其实是导线铜皮与底面产生的电容效应)。也就是说: Q2=两倍的Q1
因为 i = Q/T (射频电流=电量/时间),那么可以知道2号线的射频电流是1号线的两倍(因为时间是一样的,2号线电量是1号线的两倍)。
好了,我们知道了 i2=两倍的i1
到了这里,我们找出个神秘的特性阻抗就不远了,为什么呢,因为我们知道电阻=电压/电流。其实特性阻抗也有这种关系:特性阻抗=射频电压/射频电流。
从上面我们知道,射频电压一样的,电流关系为 i2=两倍的i1
则2号线的特性阻抗只有1号线的一半!
这就是我们所说的线越是宽,特性阻抗越小。
上面是我举个例子说明特性阻抗与电阻的区别,以及为什么同样一个板子,特性阻抗与线宽有关系,与长度没有关系。
实际上影响特性阻抗的因素很多,包括材料,导线与底板地间距等等很多因素相关。
导线的特性阻抗用通俗的话来描述(只是比喻),就是导线对其上面传输的射频能量阻碍力的大小。
认识传输线的反射
上面我们是假设导线是无限长的,而实际上的导线长度是有限。当射频信号到达导线末端,能量没有办法释放,就会沿着导线反传回来。就跟我们对着墙喊,声音碰到墙反传回来产生回音。也就是说我们想像中的射频信号发射出去就没有反射回来的情况在现实是不存在的。
如上图所示,假如我们在线的末端接上一个电阻来消耗(或者接收)线上传输过来的射频能量。
有人会问,为什么导线的特性阻抗的电阻不消耗能量,非要接个电阻才能消耗呢?其实啊,导线只是传输能量的,导线本身并不消耗能量或者近似于不损耗能量(有点想电容或者电感的属性)。电阻则是一个损耗能量的元件。
我们发现有三种特殊情况:
当R=RO 时,传输过来的能量刚刚好被末端的电阻R吸收完,没有能量反射回去。可看成这导线是无线长。
当R=∞时(开路),能量全部反射回去,而且在线的末端点会产生2倍于发射源的电压。
当R=0时,末端点会产生一个-1倍于源电压反射回去。
认识阻抗匹配
阻抗匹配是指负载阻抗与激励源内部阻抗互相适配,得到最大功率输出的一种工作状态。
阻抗匹配是针对射频等而言的,对于功率电路则不适用的,否则会烧掉东西。
我们常常听说特性阻抗50欧姆,75欧姆等等,这个50欧姆是怎么来的,为什么是50欧姆 而不是51欧姆呢,或者45欧姆呢?
这个是约定来的,50欧姆应该说对于一般射频电路传输效果更好。也就是说,我们的导线,电缆要做50欧姆,是因为电路负载已经相当于50欧姆的电阻。你做别的阻抗值导线,就和负载不匹配。偏离越远,传输的效果就会越差!
Vivado进行时序分析,对时钟的约束是必不可少的,设计中的时钟可分为一下几种:
Primary Clocks 主时钟;Generated Clocks 衍生时钟;Virtual Clocks 虚拟时钟。 Primary Clocks 主时钟一般是FPGA外部芯片如晶振提供的时钟,通过FPGA引脚输入。Vivado进行时序分析时,以主时钟的源端点作为延时计算起始点(0ns点)。主时钟的约束命令如下:
create_clock-name <clock_name> -period <period> -waveform {<rise_time> <fall_time>} [get_ports <input_port>]
下面通过几个实例说明一下约束命令:
create_clock-name clk_main -period 10 -waveform {0 5} [get_ports GCLK]
周期10ns,0ns上升沿,5ns下降沿。
create_clock-name clk_main -period 10 -waveform {0 2.5} [get_ports GCLK]
周期10ns,0ns上升沿,2.5ns下降沿;与a例周期相同,但是占空比不同,a例中50%,b例中25%。
create_clock-name clk_main -period 20 -waveform {0 10} [get_ports GCLK]
周期20ns,0ns上升沿,10ns下降沿;与a例占空比相同,都是50%,但是周期不同,a例中10ns,b例中20ns。
Generated Clocks 衍生时钟是由设计内部产生,一般由时钟模块(MMCM or PLL)或者逻辑产生,并且对应有一个源时钟,源时钟可以是系统的主时钟或者另外一个衍生时钟。约束衍生时钟时,除了定义周期,占空比,还需要指明与源时钟的关系。通过create_generated_clock命令约束衍生时钟,命令如下: create_generated_clock -name<generated clock name> -source <master clock source pin or port> -divide_by <div_factor> <pin_or_port>
这是一个经常遇到的问题了,但是为什么专门拿出来写一个博客呢,因为啊,博主啊博主,你太笨了,总是忘!
最后一次啊,不能再忘了!
data[['w','z']] #选择表格中的'w'、'z'列 不是
data['w','z'] 记住啊!!
我们平常在Android,前段开发的时候,难免需要取一些颜色值,我就推荐一个非常好用的取色器,方便快捷,非常好用。
双击“取色器.exe”点击想要取得颜色值左键,然后就把颜色值复制下来了 下载地址:取色器
正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产。以分类问题为例,当训练好了分类模型之后,我们要用这个模型预测测试集中每一个样本的标签,这里有两个常用的方法:predict()方法和predict_classes()方法,下面将以具体例子说明二者的区别。
相关文件的下载地址如下:
链接:https://pan.baidu.com/s/1qQU3FTtGeLYK5jXn0cRpQQ
提取码:qn8r
1 predict()方法
当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标签。下面以卷积神经网络中的图片分类为例说明,代码如下:
import numpy as np import scipy.misc from keras.models import model_from_json from keras.optimizers import SGD # 加载模型 model_architecture = 'cifar10_architecture.json' model_weights = 'cifar_weights.h5' model = model_from_json(open(model_architecture).read()) # 加载模型结构 model.load_weights(model_weights) # 加载模型权重 # 加载图片 img_names = ['cat.jpg', 'deer.jpg', 'dog.jpg'] # np.transpose:对数组进行转置,返回原数组的视图 # scipy.misc.imresize:重新调整图片的形状 # scipy.misc.imread:将图片读取出来,返回np.array类型 imgs = [np.transpose(scipy.misc.imresize(scipy.misc.imread(img_name), (32, 32)), (1, 0, 2)).astype('float32') for img_name in img_names] imgs = np.array(imgs) / 255 # 归一化 # 训练 optim = SGD() model.
准备虚拟机 如果你操作的是服务器,那么本副标题下的准备工作可以省略。。。
下面进入正题~~
首先检查你的计算机是否支持虚拟化,度娘上有好多检测工具自己下载一个检测下,如果不支持虚拟化,那么恭喜你换电脑吧;如果支持虚拟化,但是没有启动,重启电脑然后进入到BIOS界面开启一下即可。
这里我用的软件是VMware Workstation Pro,Xshell 5,Xftp 4
Linux系统用的是CentOS 6.5
节点我准备了5个:即,node001,node002,node003,node004,node005
为了以后的操作方便建议: 1、分别修改/etc/sysconfig/network文件,把HOSTNAME修改为本节点名
2、分别修改/etc/hosts文件把自己和其他节点名和ip地址写上
3、跟上述同样,修改本机windows下的C:\Windows\System32\drivers\etc\hosts文件
4、完事之后ping一下其他节点,检查能否ping通
如上图所示即成功
应用知识:定时器输入捕获,脉宽测量 定时器相关知识链接:https://blog.csdn.net/weixin_42046883/article/details/85224572
模块图片如下图:
硬件连接:Trig(控制端)---> PG2 Echo(接收端)---> PA6 通用定时器3通道1
#include "distance.h" #include "usart.h" //Trig(控制端)---> PG2 //Echo(接收端)---> PA6 通用定时器3通道1 /** * @brief NVIC配置 * @param 无 * @retval 无 **/ static void Distance_NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //定时器3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&NVIC_InitStructure); } /** * @brief GPIO引脚配置 * @param 无 * @retval 无 **/ static void Distance_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOG, ENABLE); GPIO_InitStructure.
【python】(虚拟环境)安装,配置和使用 写在前面的话 本文为个人在 OneNote 上的笔记,分享到网络上(我的 CSDN blog 上)。仅供参考。
并非手把手一步步的教程。所以有看得不明白的地方欢迎在评论区解释和补充,但是请勿喷一篇个人笔记。
一行一行输入命令即可 Reference Pipenv & 虚拟环境 @ readthedocs.io
https://blog.csdn.net/xx790008409/article/details/78461929
开始操作 $ sudo pip3 install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
100% |████████████████████████████████| 1.9MB 12.4MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
$ mkdir usePythonVirtualEvn
$ cd use…
$ virtualenv usePythonVirtualEvn
Using base prefix '/usr'
New python executable in /home//usePythonVirtualEvn/usePythonVirtualEvn/bin/python3
Also creating executable in /home//usePythonVirtualEvn/usePythonVirtualEvn/bin/python
Installing setuptools, pip, wheel...done.
$ ### 以上为方法一 ?
Win10系统中临时文件夹位置及临时文件的删除 工具/原料 硬件:电脑 操作系统:Windows10 百度经验:jingyan.baidu.com 方法/步骤 1 ①Windows临时文件夹
查找Windows临时文件夹在系统盘中的位置。
进入资源管理器,点击系统C:\盘;
步骤阅读 2 在打开的系统C:\盘中找到并点击:Windows,打开Windows文件夹窗口;
步骤阅读 3 在Windows文件夹窗口右上角的搜索栏中输入:Temp;
步骤阅读 4 系统自动搜索,搜索出来的临时文件全部显示在窗口中,但这些文件中有的是安装信息文件,有的是脚本文件,还有的是.dll文件,如果不清楚文件用途,建议不要随便删除;
步骤阅读 5 ②用户帐户临时文件夹
查找用户帐户临时文件夹在系统盘中的位置及删除用户帐户临时文件。
进入资源管理器,依次展开 C:\Users(用户)\xyz75(用户名)\AppData\Local\Temp;
步骤阅读 6 我们也可以点击系统桌面左下角的【开始】,在开始菜单中点击【运行】,在运行对话框中输入:%temp%命令,点击确定或者回车,打开用户帐户临时文件夹;
步骤阅读 7 Temp文件夹显示的都是用户帐户临时文件,我们按下键盘上的Ctrl+A键,选中全部临时文件,右键点击,在右键菜单中点击:删除;
步骤阅读 8 可能出现少数或个别临时文件正在使用中,无法删除的现象,跳过可以了(注销系统或电脑重启后可以删除);
步骤阅读 9 ③IE临时文件夹
查找IE临时文件夹及删除IE临时文件。
进入资源管理器,依次展开 C:\Users(用户)\xyz75(用户名)\AppData\Local\Microsoft\Windows\INetCache;
步骤阅读 10 我们也可以进入【控制面板】,点击【Internet选项】,在打开的Internet 属性窗口,点击【浏览历史记录】项的【设置(S)】(在退出时删除历史记录复选框内打勾);
步骤阅读 11 在打开的网站数据设置窗口,点击【查看文件】,也可以打开INetCache文件夹(IE高速缓存临时文件夹);
步骤阅读 12 INetCache文件夹显示的都是IE临时文件,我们按下键盘上的Ctrl+A键,选中全部临时文件,右键点击,在右键菜单中点击:删除;
步骤阅读 13 我们点击删除后,会弹出一个警告对话框:确实要删除选中的Cookie吗?,如果一定要删除,点击:是(Y);
步骤阅读 14 点击【是】以后,INetCache文件夹中的IE临时文件全部删除了。
步骤阅读 15 以上即:Windows10系统中,Windows临时文件夹、用户帐户临时文件夹和IE临时文件夹在系统盘中的位置,删除临时文件夹中临时文件的方法。供朋友们参考使用。
标题没贴完整,这里补充下异常情况:
java.io.FileNotFoundException: class path resource [spring/applicationContext.xml] cannot be opened because it does not exist 这是一个很奇葩的问题,好多原因都可以导致这种问题,还有一点就是clean及package后启动Tomcat,就报上面那个异常,但是rebuild一下,就能正常启动了,这就怪了。总之就是开始了多日的爬坑
现就我多日爬坑经历,简单介绍下:
1、配置文件路径错误
这个具体大家可以看自己项目的配置文件路径,该配置在web.xml文件中
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param> 网上也找了很多,好多都是说路径错误,要在classpath 后加*,即:
classpath*:spring/applicationContext.xml 这样不能说没用,只是能说对我是没用,并且个人觉得,这只是解决一时的问题。总之就是要确认自己的路径没问题。
2、编译有问题
这个首先要到工程目录或本地项目目录下看看编译后的文件有没有问题
正常应该是有这些文件夹:(idea下工程目录)
注意,红框中是配置文件(注意编译文件夹的颜色,idea下一般是橙色)
也可在本地查看:
同样,红框中为配置文件
(我的问题就是编译后没有配置文件及文件夹)
网上有些说要设置成自动编译,即勾选setting-compiler下的Build project Automatically选项。但是对比了一下同类项目,没有勾选也能正常编译,总之,这个对我又没用。
之后,想到了pom文件中的打包配置插件,于是找到了那块代码:
<resources> <resource> <directory>src/main/java</directory> <filtering>false</filtering> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> 这是我的配置和配置文件资源文件,不仔细看还真没发现,两边一个resource,一个resources,这样编译的时候当然找不到配置文件啦。粗心!!!当然这并不是我的坑,这个项目是成品接过来的,并不是推卸责任,追根溯源,到svn版本库的初始上传就是这么个问题,这里只是提醒大家一定要细心,或许能少走弯路。
希望能帮到大家。总之原因很多,归根究底,还是回归到路径问题。
FileSystemWatcher用法详解 FileSystemWatcher控件主要功能:
监控指定文件或目录的文件的创建、删除、改动、重命名等活动。可以动态地定义需要监控的文件类型及文件属性改动的类型。
1.常用的几个基本属性:
(1) Path :设置要监视的目录的路径。
(2) IncludeSubdirectories :设置是否级联监视指定路径中的子目录。
(3) Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。
(4) NotifyFilter :设置文件的哪些属性的变动会触发Changed事件,同时监控多个属性变动可以按“或”组合。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName 组合)
子项: Attributes -- 文件或文件夹的属性。 CreationTime -- 文件或文件夹的创建时间。 DirectoryName -- 目录名。(常用) FileName -- 文件名。 (常用)
LastAccess -- 文件或文件夹上一次打开的日期。 LastWrite -- 上一次向文件或文件夹写入内容的日期。 Security -- 文件或文件夹的安全设置。 Size -- 文件或文件夹的大小。 (常用)
(5) EnableRaisingEvents :设置是否开始监控。(默认为false)
2.常用事件:
(1) Changed :当更改文件和目录时发生,可以通过NotifyFilter属性设置触发该事件的需要文件更改的属性。
(2) Created : 当创建文件和目录时发生。 (3) Deleted : 删除文件或目录时发生。 (4) Renamed :重命名文件或目录时发生。
(5) FileSystemEventArgs 对象:
http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD
1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3、yum clean all 之后运行yum makecache生成缓存
今日分享一款分页插件,让页面变的更加简单。
Pagination.js 官网:http://pagination.js.org/
该js文档非常清晰,非常简单明了,所以很容易手上
1、引入jQuery和jQuery.pagination.js文件
<script src="../js/public/jquery.min.js"></script> <script src="../js/public/pagination/pagination.js"></script> 2.css样式
<link href="../css/public/pagination/pagination.css" rel="stylesheet"/> 3.html代码
<div class="mui-content"> <div class="profit_titleBox"> <span class="span1">年份</span> <span class="span2">日期</span> <span class="span3">分润金额</span> </div> <!-- 分页内容部分 --> <div class="row page-list"> </div> <!-- 分页显示页数部分 --> <div class="row "> <div class="page-container"> </div> </div> </div> 4.js代码
<script type="text/javascript"> const pageSize = 10 // 默认页码大小 const dataCount = 100 // 测试数据数量 const pager = new Pagination('.page-container', { pageSize: pageSize, autoLoad: true, unit: '条', toPage: function(index, _pageSize) { // 设置记录总数,用于生成分页HTML内容 if (index === 0 || _pageSize) this.
先参考一段代码:
来自 https://blog.csdn.net/amnes1a/article/details/64125120
#include "mainwindow.h" #include “QApplication” #include ”QDebug“ #include ”QDataStream“ #include ”QFile“ #include ”QVector“ #include ”QMap“ int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //write QFile file("test.dat"); if (!file.open(QIODevice::ReadWrite)) { qDebug() << "open file failed"; return 0; } QDataStream ds(&file); const char *wstr = "hello-world"; quint32 wi = 1234; double wd = 1.1; float wf = 2.2f; QVector<int> wvector; wvector.push_back(1); wvector.push_back(2); wvector.push_back(3); QMap<int,int> wmap; wmap.insert(4, 4); wmap.insert(5, 5); wmap.
今天在玩npm时,到npm run 时,或者npm run-script,都报错,形式如下:
这是我报错时使用的package.json文件
{ "name": "nodeTest", "version": "1.0.0", "description": "", "main": "index.js", "dependencies": { "jshint": "^2.9.7", "lodash": "^4.17.11", "md5": "^2.2.1" }, "devDependencies": {}, "scripts": { "hehe":"node index.js" "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "lgx <1134569285@qq.com>", "license": "MIT" } 错误原因是:package.json文件的格式问题。
查到最后,我这文件的问题就处在少了一个“ ,”,导致了package.json格式不正确(果然细节很重要啊)
总结:这类问题错误原因是:package.json文件的格式问题。 a.检查属性名称和属性值是否都用 “” ,
b.有些地方逗号不能少
c.还有最后一个依赖的末尾不需要加 “,”;以及冒号问题。
cts测试,本来测试得好好的,关闭终端后重新打开,再次开启,运行./cts-tradefed命令出错,显示Unable to find aapt in path
解决方案:
1.安装aapt
输入sudo apt-get install aapt
安装成功后重新输入./cts-tradefed
2.如果以上方案还没有解决,可以尝试去out 目录下将out/host/linux-x86/bin/aapt放到某个目录下(如:/usr/bin/),将该目录(如:/usr/bin/) 添加到 PATH 中去。
export PATH=$PATH:~/tools/bin/
如果采用第二种方案后面又报错,apk installed but AaptParser failed
可以看出还是aapt的问题 。可以尝试运行一下aapt,发现又报错了:
aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory
可以看出是找不到libc++.so文件,于是在linux-x86目录下搜索,复制到/usr/lib下,重新运行aapt,发现aapt可以运行了。
尝试./cts-tradefed未报错。
正经学徒,佛系记录,不搞事情
监控平台与管理平台一样,不是必须品,仅仅作为统计服务的调用次调和调用时间的监控中心
管理平台的搭建参考博客:https://blog.csdn.net/qq_31748587/article/details/84883504
下载地址:https://github.com/apache/incubator-dubbo-ops/tree/master
下载后在pom.xml目录直接执行命令
mvn clean package 执行完成后,会生成target文件夹,内有一个压缩文件dubbo-monitor-simple-2.0.0-assembly.tar.gz
解压该文件后如下:
conf目录下有dubbo.properties配置文件
dubbo.protocol.port=7070:服务消费者和提供者通过该端口发送统计信息到monitor(监控平台)
dubbo.jetty.directory:7010:监控平台的端口,这里使用的是jetty容器,作用同tomcat
启动服务:
进入assembly.bin目录,执行start.bat即可
访问7010端口服务:
修改dubbo的消费者和提供者的配置文件,追加
#连接监控中心 dubbo.monitor.protocol=registry 启动服务后:
软件版本 Vmware WorkStation版本:VMware® Workstation 12 Pro (12.1.0 build-3272444)Ubuntu版本:ubuntu-16.04.5-desktop-i386# 物理机网络配置 我的物理机安装win10系统,通过WiFi连接无线路由器上网,无线路由器IP地址为192.168.3.1。我的物理机无线网卡设置如下。
目的 Vmware WorkStation中运行Ubuntu,把Ubuntu配置成固定IP地址,且固定IP地址与物理主机在同一网段(即子网192.168.3.0,子网掩码255.255.255.0),虚拟机中的Ubuntu可以上网。
方法 将虚拟机的网络适配器设置为桥接模式,如图
打开Vmware的虚拟网络编辑器
设置网络适配器VMnet8连接到的网络
注意:不要勾选DHCP设置 网络适配器Vmware Network Adapter VMnet8的IPv4属性
5. 进入虚拟机,打开Ubuntu,修改网络接口配置
(1)在Terminal中输入ifconfig查看网络接口卡的名字,一般是ens33,记住ens33 ifconfig (2)编辑网络接口配置文件/etc/network/interfaces
sudo gedit /etc/network/interfaces 没配置之前应该看到的只有一个接口lo,如下
auto lo iface lo inet loopback 编辑该文件如下,address后面改成你需要的ip,网关和物理机的网关一样,注意应在同一子网内。
(3)编辑/etc/resolv.conf,配置默认网关
sudo gedit /etc/resolv.conf (4)在配置文件/etc/resolvconf/resolv.conf.d/base中添加网关
sudo gedit /etc/resolvconf/resolv.conf.d/base (5)重启虚拟机,大功告成。
locale命令 locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
[oracle@game ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
[oracle@game ~]$ locale分类 locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:
1、语言符号及其分类(LC_CTYPE) 2、数字(LC_NUMERIC) 3、比较和排序习惯(LC_COLLATE) 4、时间显示格式(LC_TIME) 5、货币单位(LC_MONETARY) 6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES) 7、姓名书写方式(LC_NAME) 8、地址书写方式(LC_ADDRESS) 9、电话号码书写方式(LC_TELEPHONE) 10、度量衡表达方式 (LC_MEASUREMENT) 11、默认纸张尺寸大小(LC_PAPER) 12、对locale自身包含信息的概述(LC_IDENTIFICATION)。
所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。
字符集 上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。
zh_CN.GB2312到底是在说什么? Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]。所以说呢,locale总是和一定的字符集相联系的。下面举几个例子:
1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。 2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。 3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。zh_TW.BIG5=中文_台湾.大五码字符集 4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集 5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。de_DE.UTF-8@euro=德语_德国.UTF-8字符集@按照欧洲习惯加以修正,注意不是de_DE@euro.UTF-8,所以完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。 其中,与中文输入关系最密切的就是LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定 义zh_CN中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。
怎样设定locale 设定locale就是设定12大类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:LC_ALL > LC_* >LANG。可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。
2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。
3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值zh_CN.UTF-8。
4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。
若想给表格增加点色彩,可以使用 Carlisle 的 colortbl 宏包[7]。它提供 的 \columncolor、\rowcolor、\cellcolor 命令可以分别设置列、行、单 元格的颜色。这三个命令的基本语法相似:
语法:{颜色}
\columncolor 需要放到列前置命令里,rowcolor、\cellcolor 分别 放到行、单元格之前。colortbl 宏包可以使用 xcolor 宏包的色彩模型;两 者同时,前者不能直接加载,需要通过后者的选项 table 来加载。三个命 令同时使用时,它们的优先顺序为:单元格、行、列。
\usepackage[table ]{ xcolor} \begin{table }[ htbp] \centering \begin{tabular }{l >{\ columncolor {Yellow }}ll} \rowcolor{Red}操作系统 & 发行版 & 编辑器 \\ Windows & MikTeX & TexMakerX \\ \rowcolor{Green}Unix/Linux & \ cellcolor {Lavender}teTeX & Kile \\ Mac OS & MacTeX & TeXShop \\ \rowcolor{Blue}通用 & TeX Live & TeXworks \\ \end{tabular} \usepackage[table ]{ xcolor} \begin{table }[ htbp] \centering \rowcolors {1}{ White }{ Lavender } \begin{tabular }{ lll} \hline 操作系统 & 发行版 & 编辑器 \\ Windows & MikTeX & TexMakerX \\ Unix/Linux & teTeX & Kile \\ Mac OS & MacTeX & TeXShop \\ 通用 & TeX Live & TeXworks \\ \hline \ hiderowcolors \end{tabular} \end{table} 这种颜色更符合审美。
一般读取文件我们用fopen 或者 file_get_contents ,前者可以循环读取,后者可以一次性读取,但都是将文件内容一次性加载来操作。
如果加载的文件特别大时,如几百M,上G时,这时性能就降下来了,那么PHP里有没有对大文件的处理函数或者类呢? 答案是:有的。
PHP真的越来越“面向对象”了,一些原有的基础的SPL方法都开始陆续地实现出class了。
从 PHP 5.1.0 开始,SPL 库增加了 SplFileObject 与 SplFileInfo 两个标准的文件操作类。SplFileInfo 是从 PHP 5.1.2 开始实现的。
从字面意思理解看,可以看出 SplFileObject 要比 SplFileInfo 更为强大。
不错,SplFileInfo 仅用于获取文件的一些属性信息,如文件大小、文件访问时间、文件修改时间、后缀名等值,而 SplFileObject 是继承 SplFileInfo 这些功能的。
/** 返回文件从X行到Y行的内容(支持php5、php4) * @param string $filename 文件名 * @param int $startLine 开始的行数 * @param int $endLine 结束的行数 * @return string */ function getFileLines($filename, $startLine = 1, $endLine=50, $method='rb') { $content = array(); $count = $endLine - $startLine; // 判断php版本(因为要用到SplFileObject,PHP>=5.
cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的;
cat主要有三大功能:
1.一次显示整个文件。
$ cat filename
2.从键盘创建一个文件。
$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。
$cat file1 file2 > file
cat具体命令格式为 : cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)
参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting
范例:
cat -n linuxfile1 > linuxfile2 把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里
cat -b linuxfile1 linuxfile2 >> linuxfile3 把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到linuxfile3 里。
本文假设您已明白决策树原理及CART生成算法
随机森林的算法核心思想有二:采样 和 完全分裂。采样又分为行采样和列采样,这里的行与列对应的就是样本与特征。完全分裂指的是决策树每一次分裂扩展节点时,能分裂必须分裂,分裂依据可以是信息增益或者增益率。
对于行采样,模型从M条数据集中随机采样m条数据,一般情况下m取M的平方根大小,分别作为每一棵决策树的训练集。行采样保证了每棵决策树使用的训练集各不相同,这在一定程度上抑制了over-fitting问题。对于列采样,每一棵决策树都从M个特征中随机挑选m个特征作为节点分裂特征来计算,一般情况下m也取M的平方根大小。列采样具体又分为两种方式,一种是全局列采样,即同一棵树的建树过程均采用同一批采样特征;另一种是局部列采样,即每一次节点分裂的时候均单独随机挑选m个特征进行扩展。列采样进一步保证了随机森林不会出现over-fitting问题。 随机森林的最终输出由每一棵决策树的结果共同决定。如果是分类树则通过投票产生最终分类,如果是回归树则取所有结果的平均值。
随机森林优缺点:
优点
1、 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好
2、它能够处理很高维度(feature很多)的数据,并且不用做特征选择( PS:特征子集是随机选择的)
3、在训练完后,它能够给出哪些feature比较重要( PS:http://blog.csdn.net/keepreder/article/details/47277517)
4、在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
5、训练速度快,容易做成并行化方法(PS:训练时树与树之间是相互独立的)
6、 在训练过程中,能够检测到feature间的互相影响
7、 实现比较简单
8、 对于不平衡的数据集来说,它可以平衡误差。
9、如果有很大一部分的特征遗失,仍可以维持准确度。
缺点:
1、随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟
2、对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
随机森林生成算法:
根据下列算法而建造每棵树 :
1.用N来表示训练用例(样本)的个数,M表示特征数目。
2.输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
3.从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
4.对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
5.每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。
以下代码可编译通过!
from random import seed from random import randint from csv import reader # 建立一棵CART树 '''试探分枝''' def data_split(index, value, dataset): left, right = list(), list() for row in dataset: if row[index] < value: left.append(row) else: right.
/.只匹配第一个符合条件的子串
preg_match($p, $str, $match);
结果排序为$match[0]保存完整模式的首个匹配, $match[1] 保存第一个子组的首个匹配,以此类推,正则表达式中每个()表示一个子组。
/.匹配所有符合条件的子串
$str = "tom,john,ted";
$p = '/\w+/';
preg_match_all($p, $str, $matches);
print_r($matches[0][0]);
结果排序为数组$matches[0]保存完整模式的所有匹配, 数组$matches[1] 保存第一个子组的所有匹配,以此类推。
注:
header("Content-Type: text/html;charset=utf-8"); //设置页面内容是html,编码格式是utf-8
$pattern = '/[\x{4e00}-\x{9fa5}_a-zA-Z0-9]+/u';//匹配中文、下划线、字母、数字
转载于:https://www.cnblogs.com/shiyiaccn/p/10127170.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div class="container"> <img src="" /> </div> <div class="container"> <img src="" /> </div> <style> img{ max-height: 100%; max-width: 100%; vertical-align: middle; } .container{ height: 500px; width: 500px; margin-top: 20px; line-height: 498px; text-align: center; border: 1px solid #05a; } </style> </body> </html>
先给出ajax完整的调用和获取错误信息的方式
function queryData(searchPageNum){ __showLoading(); var json =getQueryParameter(searchPageNum); $.ajax({ type: "POST", url: "../userFilter/queryUser.action", contentType : "application/json", dataType:"json", data: JSON.stringify(json), success: function(resp){ alert("success"); }, error:function(XMLHttpRequest, textStatus, errorThrown){ debugger // 状态码 console.log(XMLHttpRequest.status); // 状态 console.log(XMLHttpRequest.readyState); // 错误信息 console.log(textStatus); __hideLoading(); if(XMLHttpRequest.readyState==0){ // 对应登录超时问题,直接跳到登录页面 location.href='../Login.action'; }else{ $.messager.alert('提示','系统内部错误,请联系管理员处理!','info'); } } }); } 第一种情况页面控制台是 XMLHttpRequest.status:200 XMLHttpRequest.readyState:4 textStatus:parsererror 针对此种情况可能是下面三种原因: 1)返回内容格式与ajax请求中声明的不一致,声明的dataType是txt,但是返回的实际是json dataType:"json",是否前后台数据类型保持了一致 如下面的实例,dataType是txt,但是返回的是json 请求内容: 返回内容: 2)后台代码内部处理问题 后台代码报错: 前台返回时空 3)在后台请求进行了页面跳转或下载等功能,ajax不支持;因为ajax请求获取的数据的都是字符串(此点当时在调试页面的时候,Response响应中满是乱码的字符串文本),它没法解决后台返回的文件流,也就是无法实现文件的下载功能 第二种情况是登陆超时的情况,此时会先报如下错误
POST http://localhost:8080/rsbi/userFilter/queryUser.action net::ERR_CONNECTION_REFUSED
然后
XMLHttpRequest.status:0
XMLHttpRequest.readyState:0
textStatus:error
此时就是调用被拒绝了,可能是服务没有启动 或者没登录或者,登陆后超时,那么可以跳转到登录页面,如下
本节介绍如何创建和使用Helm chart repo。在高层次上,chart库是可以存储和共享打包chart的位置。
官方chart库由Kubernetes Charts维护 ,我们欢迎参与贡献。Helm还可以轻松创建和运行自己的chart库。本指南讲解了如何做到这一点。
我在网址 https://whmzsu.github.io/helm-doc-zh-cn/ 不断更新,同时也会搬运到这里,大家有兴趣加入https://github.com/whmzsu/helm-doc-zh-cn/的可以给我提交意见和建议。
前提条件 阅读快速入门指南Quickstart通读chart文件Charts 创建chart库 chart库是带有一个index.yaml文件和任意个打包cahrt的HTTP服务器。当准备好分享chart时,首选方法是将其上传到chart库。
注意: 对于Helm 2.0.0,chart库没有任何内部认证。 在GitHub中有一个跟踪进度的问题issue tracking progress。
由于chart库可以是任何可以提供YAML和tar文件并可以回答GET请求的HTTP服务器,因此当托管自己的chart库时,很多选择。例如,可以使用Google云端存储(GCS)存储桶,Amazon S3存储桶,Github Pages,甚至可以创建自己的Web服务器。
chart库结构 chart库由打包的chart和一个名为的特殊文件组成, index.yaml其中包含chart库中所有chart的索引。通常,index.yaml描述的chart也是托管在同一台服务器上,源代码文件也是如此。
例如,chart库的布局https://example.com/charts 可能如下所示:
charts/ | |- index.yaml | |- alpine-0.1.2.tgz | |- alpine-0.1.2.tgz.prov 这种情况下,索引文件包含有关一个chart(Alpine chart)的信息,并提供该chart的下载URL https://example.com/charts/alpine-0.1.2.tgz。
不要求chart包与index.yaml文件位于同一台服务器上 。但是,发在一起这样做通常是最简单的。
索引文件 索引文件是一个叫做yaml文件index.yaml。它包含一些关于包的元数据,包括chart的Chart.yaml文件的内容。一个有效的chart库必须有一个索引文件。索引文件包含有关chart库中每个chart的信息。helm repo index命令将根据包含打包的chart的给定本地目录生成索引文件。
下面一个索引文件的例子:
apiVersion: v1 entries: alpine: - created: 2016-10-06T16:23:20.499814565-06:00 description: Deploy a basic Alpine Linux pod digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd home: https://k8s.io/helm name: alpine sources: - https://github.
Go语言自带了强大的性能测试工具pprof,位于 net/http 包下的 pprof。 官方文档
PProf 关注的模块 CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据Memory Profile(Heap Profile):报告程序的内存使用情况Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的 PProf 使用方式 PProf 主要涉及两个包:“net/http/pprof”、“runtime/pprof”。
net/http/pprof:只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来。使用 net/http/pprof 可以做到直接看到当前 web 服务的状态,包括 CPU 占用情况和内存使用情况等。如果服务是一直运行的,如 web 应用,可以很方便的使用第一种方式 import "net/http/pprof"。
runtime/pprof:可以用来产生 dump 文件,再使用 Go Tool PProf 来分析这运行日志。
引入示例:
#web服务器: import ( "net/http" _ "net/http/pprof" ) #一般应用程序(实际应用无web交互) import ( "net/http" _ "runtime/pprof" ) 下面主要介绍web收集PProf信息方式
使用示例:
package main import ( "fmt" "log" "net/http" _ "
理解MySQL主从复制之realy_log_recovery 参数含义:当slave重启之后会根据slave_relay_log_info重新创建一个文件,SQL线程会根据这个文件进行恢复复制,IO线程会读取SQL线程的POS点,根据这个POS点向主库申请拉取数据
该参数是默认打开的,在数据库启动后立即启动自动relay log恢复。在恢复过程中,创建一个新的relay log,并将IO线程初始化到SQL线程的位置。
MySQL运行过程中,如果出现宕机的情况,从库启动后必须能够恢复到已经执行事务的位置,该信息传统上是存在文件中,那么久有可能存在不一致或者损坏的风险。从MySQL5.7开始,可以用表来存储这些信息,并发这些表设置为InnoDB引擎,通过使用事务型存储引擎,恢复这个信息。可以配置参数master_info_repository=table和relay_log_info_repository=table使从库信息存储在表中。从库如何从宕机的状态恢复到正确的状态,取决于从库是单线程还是多线程、relay_log_recover参数的值,以及master_auto_position的使用方式。
1、单线程模式的复制
1)当基于GTID模式复制的时候,并且设置了master_auto_position参数和relay_log_recover=0,使用该配置,其relay_log_info_repository和其他变量的设置都不会影响恢复。
2)当基于传统模式(file position)的情况,请设置relay_log_recover=1和relay_log_info_repository=table。
2、多线程模式的复制
1)当基于GTID模式复制的时候,并且设置了master_auto_position和relay_log_recovery=0,使用该配置,其relay_log_info_reposition和其它变量的设置都不会影响恢复。
2)当基于传统模式复制的时候,请设置relay_log_recovery=1、sync_relay_log=1和relay_log_info_repository=table。
本文章主要包括如下几个章节:类介绍、Path实例获取和文件路径管理。文件路径管理中,主要介绍了Path中定义的主要方法。
1、类的介绍 Path接口 是JDK1.7中定义的接口,主要用来在文件系统中定位文件,通常表示系统相关的文件路径。JDK中的介绍:An object that may be used to locate a file in a file system. It will typically represent a system dependent file path.
Paths类 是JDK1.7中定义的静态工具类,用来根据String格式的路径或者URI返回Path的实例。JDK中的介绍:This class consists exclusively of static methods that return a {@link Path} by converting a path string or {@link URI}.
2、Path实例的获取 Path是接口,实例不能通过new关键字直接去构建;而Path的实现类,官方并不想暴露出来给用户使用,所以我们应该通过其他途径去获取Path的实例。
这里,我总结了4个方向去获取Path的实例:
1)根据字符串格式的路径获取:使用Paths工具类中的get方法去获取,方法的参数是1个或1个以上的String,Paths会自动根据参数中的字符串对路径做拼接。另外,两个点".."表示的是路径向上回退一级。
2)根据URI获取:使用Paths的get(URI url)方法获取。
3)根据File的实例进行转换:File中定义了实例方法toPath(),可以将File实例转换为Path的实例。
4)从对其他Path实例的操作中获取:这个相关的方法就有很多了,例如Path自己的getParent()、normalize()等,或者Files中的诸多create、copy、walk等等多个系列的很多方法。这里就不一一列举了。
代码实例:
Path path; // 1. From String path = Paths.get(System.getProperty("user.dir"), "..", "data") // 2. From URI path = Paths.
yml中
xxx: uploadPath: D:/files/ 配置类
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix="xxx") public class XxxConfig { //上传路径 private String uploadPath; public String getUploadPath() { return uploadPath; } public void setUploadPath(String uploadPath) { this.uploadPath = uploadPath; } } 静态资源加载
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Component class WebConfigurer extends WebMvcConfigurationSupport { @Autowired XxxConfig xxxConfig; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //静态资源加载相对路径 registry.addResourceHandler("/files/**").addResourceLocations("file:///"+schoolConfig.getUploadPath()); } }
原文https://blog.csdn.net/qq_34508530/article/details/84989990
linux部署Docker出现:Failed to start docker.service: Unit not found
用的linux 之前部署过 k8s 等项目,有一些残留很多 Docker 损坏了
重新安装后总是 起不来服务 出现:Failed to start docker.service: Unit not found
警告:酌情适用 我的情况是要重装的
解决:
直接 yum update
一定要重启linux
yum install Docker
systemctl start docker.service
偶然想起来写一个数独的小游戏自己没事的时候玩一玩,锻炼锻炼思路。
先上效果截图
数独生成的算法,参见博客:数独生成算法 数独游戏的最基础的在于生成数独,由于生成数独的算法运算问题,为了简化,本次数独的生成使用了 10 个基类,每次生成数独的时候随机从是个基类中选取一个模板,在根据模板将对应的 a--i 的字母 随机与 1--9 分别对应,然后生成一个数独。
数独模板基类
public class StandShudu { /** * 从10个基准数组中抽取一个基准数组 * 然后将 a-i 随机分配 1-9 * 随机赋予 a--i的值为不重复的 1--9 的值 生成一个数组 * 有多少种可能我也不会算,反正够玩的了 */ public String[][] getStand(int index){ switch (index){ case 0: return stand0; case 1: return stand1; case 2: return stand2; case 3: return stand3; case 4: return stand4; case 5: return stand5; case 6: return stand6; case 7: return stand7; case 8: return stand8; case 9: return stand9; default: return stand0; } } private String[][] stand1=new String[][]{ {"
from OpenSSL import crypto
# path表示证书路径,file_name表示证书文件名
cert_file = '/path/file_name/'
cert_file = '/path/to/your/certificate'
cert = crypto.load_certificate(crypto.FILETYPE_PEM, open(cert_file).read())
subject = cert.get_subject()
# 得到证书的域名
issued_to = subject.CN issuer = cert.get_issuer()
# 得到证书颁发机构
issued_by = issuer.CN
rem:相对于根元素缩放,设定根元素的字体大小,在不同屏幕尺寸下,其他元素对应显示不同的字体大小。
em:继承父级的字体大小。
rem的使用:
1)设置根元素的字体大小
浏览器默认的字体大小为16px,跟元素<html>设置 font-size: 62.5%; 相当于页面font-size定义为10px (16px * 62.5% = 10px);
html { font-size: 62.5%; } 此时,换算关系如下:
px
rem
10px
1rem
12px
1.2rem
14px
1.4rem
16px1.6rem 踩坑:
chrome浏览器默认支持的最小字号是12px;
当html根元素设置 font-size为62.5%(10px)时,在chrome浏览器中,字体1.6rem会等同于16px,但是宽高用rem定义会比16px更大。
因此,兼容chrome浏览器,建议将根目录设置为625%;
html { font-size: 625%; } 此时,换算关系如下:
px
rem
10px
0.1rem
12px
0.12rem
14px
0.14rem
16px0.16rem 也可以根据实际项目需求,自定义根目录字体大小,进行换算。
本文例子是基于道琼斯指数、墨西哥MXX指数、日经225、富时100四个指数来构建有效前沿,思路很简单,在给定组合的收益率下,寻找最小方差的投资比例,然后分别取不同的组合收益率,寻找对应的最小方差;那么这个过程如何在python中实现呢?可以利用scipy.optimize中的minimize函数进行求解,代码如下:
# -*- coding: utf-8 -*- """ 计算有效边界上的mean-std组合 @author: solon """ import pandas as pd import numpy as np from scipy.optimize import minimize df1=pd.read_csv(r'Z:\User\data\data_indexes.csv') #读取指数收益率数据 mean_r=np.array(df1.mean()) df2=df1.cov() def std(x0): '''计算给定权重下的组合的标准差''' ww=np.array(x0) std=np.dot(np.dot(ww,np.array(df2)),ww.T) return std x0=[0.1,0.2,0.3,0.4] #任意给定一个初始投资比例 l_r=[] l_std_1=[] l_std_2=[] for r in np.linspace(-0.0033,0.015,100): cons1=({'type':'eq','fun':lambda x: np.sum(x)-1},{'type':'eq','fun':lambda x: np.dot(x,mean_r.T)-r}) #等式类型的约束条件,约束条件为投资比例之和为1,以及组合收益率为r cons2=({'type':'eq','fun':lambda x: np.sum(x)-1},{'type':'eq','fun':lambda x: np.dot(x,mean_r.T)-r},{'type':'ineq','fun':lambda x:x[0]},{'type':'ineq','fun':lambda x:x[1]},{'type':'ineq','fun':lambda x:x[2]},{'type':'ineq','fun':lambda x:x[3]}) #包含不等式约束,增加了投资比例都非负这样的约束条件 res1=minimize(std,x0,method='SLSQP',constraints=cons1) #minimize函数中的第一个参数std表示要最小化的目标函数,x0为ndarray,表示目标函数中的待求解的未知变量,以std的第一个参数的形式传入,需要一个初始值 res2=minimize(std,x0,method='SLSQP',constraints=cons2) l_r.append(r) l_std_1.append(res1.fun) l_std_2.append(res2.fun) df=pd.DataFrame([l_r,l_std_1,l_std_2]).T df.columns=['return','sigma_uncons','sigma_cons'] #对得到的df进行处理,以方便后续作图 df2['return_unlimited']=df['return'] df2['return_limited']=df['return'] df2.
错误信息:
Error: JAVA_HOME is incorrectly set. Please update D:\work\hadoop-2.4.1\conf\hadoop-env.cmd '-Xmx512m' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 原因:java默认安装在C:\Program Files\Java,路径存在空格,所以启动会报错。
解决办法:两种解决办法一个是修改JAVA_HOME环境变量,另一个是修改etc/hadoop/hadoop-env.cmd中的JAVA_HOME配置。两种方式都是将JAVA_HOME的值中的Program Files改成8字符缩写。如将C:\Program Files\Java\jdk1.7.0_79修改为C:\Progra~1\Java\jdk1.7.0_79。
ARM32入门学习笔记之 GPIO库 固件库中的GPIO函数 固件库中的GPIO函数 函数名描述GPIO_Init根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_ReadInputDataBit读取指定端口管脚的输入GPIO_ReadInputData读取指定的GPIO端口输入GPIO_ReadInputDataBit读取指定端口管脚的输出GPIO_ReadOutputData读取指定的GPIO端口输出GPIO_SetBits设置指定的数据端口位GPIO_ResetBits清除指定的数据端口位GPIO_WriteBit设置或者清除指定的数据端口位GPIO_Write向指定GPIO数据端口写入数据 1.GPIO_Init函数
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
参数1:GPIOx:x可以是A、B、C、D、E,来选择GPIO外设;
参数2:GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息参阅Section:GPIO_InitTypeDef查阅更多该参数允许取值范围;
例如:
//声明一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体 GPIO_InitTypeDef GPIO_InitStructure; //选中端口1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选择端口的速度为10M GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //选择端口为输出模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //选择端口为推挽输出 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //选择端口为无上拉和下拉 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA,&GPIO_InitStructure); 2.GPIO_ReadInputDataBit函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 读取指定端口管脚的输入
参数1:GPIOx:同上
参数2:GPIO_Pin:待读取的端口位
例如:
uint8_t ReadValue; ReadValue = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7); 3.GPIO_ReadInputData函数
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 读取指定的GPIO端口输入
例如:
uint16_t ReadValue; ReadValue = GPIO_ReadInputData(GPIOA); 4.GPIO_SetBits函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 设置指定的数据端口位
本题要求实现一个函数,可统计二叉树中度为1的结点个数。
函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCount返回二叉树中度为1的结点个数,若树为空,返回0。
裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create();/* 细节在此不表 */ int NodeCount ( BiTree T); int main() { BiTree T = Create(); printf("%d\n", NodeCount(T)); return 0; } /* 你的代码将被嵌在这里 */ 输出样例(对于图中给出的树): 1 int NodeCount( BiTree T){ if(T==NULL) { return 0; } if(T->lchild==NULL&&T->rchild!=NULL||T->rchild==NULL&&T->lchild!=NULL){ return 1+NodeCount(T->lchild)+NodeCount(T->rchild); } return NodeCount(T->lchild)+NodeCount(T->rchild); }
99Day资源分享:找资源,分享好资源!99Day资源,专注于分享福利,动态图,gif出处,电影资源,教程分享,资源图片,好玩的视频软件下载等,我们正在努力做全网最专业的资源网站。
https://www.99day.com/
借鉴博客:
解决RabbitMQ安装后Web管理页面打不开的问题
上述博主答案不能解决请参考下方:
1、打开rabbitmq命令行窗口
2、rabbitmq-service remove(输入正确后按回车)
3、rabbitmq-service install(输入正确后按回车)
4、rabbitmq-service start(输入正确后按回车)
5、rabbitmq-plugins enable rabbitmq_management(输入正确后按回车)
6、rabbitmq-service stop(输入正确后按回车)
7、rabbitmq-service start(输入正确后按回车)
完整命令行截图:
8、浏览器输入 http://127.0.0.1:15672 验证
操作顺序:5/1/2/3/4/6,要是不按照顺序,肯定升级失败。
操作没有多少,洋洋洒洒好长的篇幅,都是查看的文件目录。
1、安装包准备。
2、安装rpm包
3、备份openssl并编译升级zlib-1.2.11以及openssl1.0.2p
4、编译安装openssh
5、开启telnet
6、关闭telnet
1、安装包准备。
准备所有rpm包并上传至/mnt/ssh/rpm
liuyt:~ # cd /mnt/ssh/rpm
liuyt:/mnt/ssh/rpm # ll
total 516
-rw-r--r-- 1 hlj users 2184038 12月 11 21:28 gcc43-4.3.4_20091019-0.37.30.x86_64.rpm
-rw-r--r-- 1 hlj users 5021 12月 11 21:28 gcc-4.3-62.198.x86_64.rpm
-rw-r--r-- 1 hlj users 5055406 12月 11 21:28 glibc-devel-2.11.3-17.54.1.x86_64.rpm
-rw-r--r-- 1 hlj users 283101 12月 11 21:28 libopenssl-devel-1.0.2j-25.1.x86_64.rpm
-rw-r--r-- 1 hlj users 737479 12月 11 21:28 linux-kernel-headers-2.6.32-1.13.5.noarch.rpm
-rw-r--r-- 1 hlj users 79617 12月 11 21:28 pam-devel-1.
原文网址:http://www.geekpark.net/news/203985
摘要
想在平板上看硬盘里的电影,要共享点资料给朋友, NAS私有云是极客们好帮手,本文将介绍QNAP TS-221家庭NAS后买后两个月的使用情况,并手把手教你组建一台家庭NAS。
更多科技报道,请关注极客之选微信公众号(搜索:GeekChoice),也可以关注微博 @极客之选那些事儿 了解我们的最新动态
如今自己和家人都有了不少的电子设备,而散布于这些设备中的影音、文档等数据也越来越多,经常遇到旅游回来的照片放在某台电脑里、想在平板上看硬盘里的电影、要共享点资料给朋友等等问题,迫切需要有一个数据的存储管理中心,将各设备中的数据统一管理,并能够通过互联网操作,而家用 NAS 恰好提供了这个解决方案,它可将不同设备存储于其中的数据分类管理,并支持本地与互联网的多种访问途径,提供用户访问权限设定,还可以随时随地的备份数据,扩容也很方便,更重要的是系统可通过安装 APP 来扩展各种新功能,形象的说,家用 NAS 就是一朵自己的私有云。
1、什么是NAS? NAS 全称 Network Attached Storage,即网络附加存储服务器,它通过自身的操作系统和 SMB/NFS/CIFS/FTP 等多种通信协议来给各种设备和平台提供数据的存储、访问和管理的服务,详细可见百度、维基。而家用 NAS 厂家都给我们提供了友善的图形化 Web 操作界面,定制化程度很高,可以很方便的进行服务部署、端口设置、权限管理等操作。
下面直入主题,介绍下笔者的 QNAP TS-221 家庭 NAS 从购买到现在两个月的使用情况。
2、存储设备的选择和购买 家用 NAS 操作系统的使用和系统日后的升级、维护、扩展十分重要,这些都需要专业的 NAS 厂家来保障,因此我挑选了群晖 Synology 和威联通 QNAP 这两家同在台湾的专业网络存储设备供应商作为候选。接下来需要比较下这两家的 NAS 操作系统,正好他们也都提供了各自系统的在线 Demo 体验入口(群晖 登陆名:admin 密码:synology,威联通 登陆名:qnap 密码:qnap)。
群晖 NAS 的 DSM 系统
威联通 NAS 的 QTS 系统
两家的系统都是图形化的界面,各功能都以图标显示,使用起来很方便,对比下来两家系统的功能和使用逻辑十分相似,连提供的服务都几乎相同,支持 Windows、Mac 和 Linux 的文件共享,并能将 NAS 中的多媒体数据汇整通过网页发布与共享,提供部署 HTTP/FTP/DLNA/iTunes/MySQL/VPN 等服务器,可以进行本地和网络备份,支援多终端设备的登陆,有自己的应用商店可以通过下载应用来扩展 NAS 的功能(如迅雷远程下载、Google Drive、Dropbox 同步、WordPress 等),提供移动 APP 对 NAS 进行使用和管理。
int n[1000000];这样肯定是不行的,因为这样定义的数组用的是栈内存,系统默认值为最大1Mb,一个int型占4字节这样最大可以申请1024*1024/4=264144个,如果考虑到系统自身的占用最大值约为25000个。int *p=(int )malloc(1000000sizeof(int));,这样用的是堆内存,只要你内存有那么多的连续空间就可以;例子如下:
#include<stdio.h> #include<malloc.h> int main() { int *p=(int *)malloc(1000000*sizeof(int)); //int p[1000000]; int i=0; for(;i<1000000;i++) printf("%d\n",p[i]=i); free(p); return 0; } 通常用两个办法解决这个问题:
1.声明一个全局数组。就是在所有函数之外声明,如int a[1000000];就可以了。
2.在需要的函数中用malloc函数动态申请内存,如int *pt=(int *)malloc(sizeof(int)*1000000);就可以了。用完后要用free(pt);释放所申请的内存空间。
在Windows上使用git命令push代码时,提示:SSL certificate problem: self signed certificate
具体是什么问题,也不清楚,也不管是不是SSL证书的问题,解决方案:在git配置窗口中输入以下命令:
git config --global http.sslVerify false 问题就可以解决了。
转载于:https://www.cnblogs.com/pupilLZT/p/10099451.html
POJ4151 电影节 总时间限制:
1000ms
内存限制:
65536kB
描述:
大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。
输入:
多组数据。每组数据开头是n(n<=100),表示共n场电影。
接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间
n=0则数据结束
输出:
对每组数据输出最多能看几部电影
样例输入:
8
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
0
样例输出:
3
来源:
Guo Wei
题意分析: 由题目可知,要尽量看更多的电影,那么策略就是通过对电影时间进行某一种排序后,再进行贪心策略
下面给出两种方法: 方法一: 对电影结束时间进行从早到晚的排序,然后尽量选取结束早的电影看,以节省时间看后面的更多的电影。具体的操作方法是:对按结束时间排序后的电影从早到晚一个个遍历,若当前遍历到的这部电影的结束时间早于下一部电影的开始时间,则sum++(sum初始化为1,因为显然最少可以看一部电影),若当前遍历到的这部电影的结束时间完于下一部电影的开始时间,则看当前这部,不看下一部电影了(原因:对于重合的两场电影,当然选择结束早的,为后面留下更多的时间,这就是一种贪心思想)。 AC代码: // An highlighted block #include<bits/stdc++.h> using namespace std; struct node { int begin,end;//记录开始时间和结束时间 }a[105]; int cmp(node a,node b) { return a.end<b.end;//按结束时间由小到大排序 } int main() { int t; while((cin>>t)&&(t!
DRRN:深度递归残差网络
1.介绍 本文提出了一种非常深的CNN模型(多达52个卷积层),称为深度递归残差网络(DRRN),它致力于深入而简洁的网络。 具体而言,采用残差学习,以减轻培训深层网络的难度; 递归学习用于控制模型参数,同时增加深度。 广泛的基准评估表明,DRRN明显优于SISR的最新技术水平,同时利用更少的参数。
主要有两个新颖点:
在VDSR和DRCN中应用的只是从输入到输出的全局残差学习(GRL),GRL主要可以降低训练深层网络的难度。DRRN中又添加了局部残差学习(LRL),可以减少经过深层网络后图像细节的丢失。(LRL每几个堆叠层就可以有一个而GRL只会有一个)关于残差单元的递归学习,可以使得模型更加紧凑。在DRCN中,递归层被学习并且权重在16个卷积递归层中分享。DRRN和DRCN有两个主要的区别:一是并不所有卷积层共享一个权重,DRRN拥有由数个残差单元组成的递归块,权重在这些残差单元中共享;二是DRRN通过设计具有多路径结构的递归块从梯度爆炸/消失的负担中解脱出来,可以很容易的训练,并且仅仅增加卷积深度而不添加参数就能提升准确度。 2.相关工作 以上是RESNET,VDSR,DRCN和DRRN的简略模型图
VDSR在残差分支有20个权重层,这也导致了更大的感受野,GRL以及可调节的梯度裁剪使VDSR收敛更快,并且可以处理不同缩放程度的图像。
DRCN添加了更多的权重层,引进了更多的参数。为了解决多参数导致的过拟合问题,DRCN应用了递归层,所以即使递归层中有再多的递归,模型的参数也不会增加。DRCN包括三部分:嵌入网,推断网和重塑网。推断网即递归层(有16层递归,共享w)。DRCN拥有梯度监管以及跳跃链接:
3.具体创新点介绍 首先如上图结构所示,ResNet在同一分支下应用了两次不同的x(第二次的x用的是第一次所得到的结果),而DRRN则在同一分支的两次残差学习中应用了相同的x,这样也促进了残差学习。
3.1 残差单元Residual Unit 残差单元的基本计算如下:
后来那个何教授提出了一种新的残差学习方式,即在权重层计算前先进行激活函数的计算,这样可以提高性能并使得网络更容易训练,具体公式如下:
本文作者又进行了进一步改良,使得identify branch 和residual branch的输入不同,就像第3节开头所说,对于在一个递归区内的所有identify branch的输入保持相同,结构如下图,
这样的结果是在我们的递归区内会有多条不同的路径,
residual path帮助学习高度复杂的特征,identity path则用来帮助训练时的梯度反向传播,与链模式相比,这种模式有利于学习,不容易过拟合,具体计算公式如下:
由于残差单元被递归学习,权重w在一个递归区中共享,但是在不同的递归区内不同。
3.2 递归区Recursive Block 递归区具体形状如上图Figure4.在递归区最初有一个conv层。然后加入数个3.1中所提到的残差单元。用B来表示递归区的数目,xb-1 和 xb 分别是第b个递归区的输入和输出,U是残差单元的数量,最后有公式(这里有点小理解问题,回头看):
3.3 网络结构
DRRN的网络深度可以如下公式计算:
loss通过下式计算:
4.实验 总感觉实验没什么需要记的东西...
5.结论 在本文中,我们提出了深度递归残差网络(DRRN)的单图像超分辨率。 在DRRN中,在递归块中递归地学习增强的残差单元结构,并且我们堆叠若干递归块以学习HR和LR图像之间的残差图像。 然后将残差与从identity branch传来的LR图像相加来估计HR图像。 广泛的基准实验和分析表明,DRRN是SISR的深度,简洁和卓越的模型。