jQuery动态粒子效果

效果图 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <div id="jsi-particle-container" class="container"></div> <style> html, body { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; } .container { width: 100%; height: 100%; margin: 0; padding: 0; background-color: #000000; } </style> </head> <body> <script> var RENDERER = { PARTICLE_COUNT: 1000, PARTICLE_RADIUS: 1, MAX_ROTATION_ANGLE: Math.PI / 60, TRANSLATION_COUNT: 500, init: function(strategy) { this.

Neural Factorization Machines for Sparse Predictive Analytics(2017)

文章目录 Neural Factorization Machines for Sparse Predictive Analytics(2017)(0) 个人小结(1) 研究目标(2) 背景 & 问题描述(3) 研究方法(4) 结论与展望 Neural Factorization Machines for Sparse Predictive Analytics(2017) (0) 个人小结 该文提出了一种新的模型 NFM,将FM中特征交叉项替换成深度神经网络,该模型由输入层、Embedding层、Bi-Interaction层、隐藏层和输出层组成,其中Bi-Interaction层可以学习特征的二阶信息。这个模型是FM与Deep串行方式连接,该模型可以学习特征之间深层次的信息。 (1) 研究目标 提出一种新的模型 – NFM (2) 背景 & 问题描述 在推荐领域,数据一般非常稀疏,传统FM无法学习特征的深层次信息(FM一般用于学习特征的一阶和二阶特征信息,高阶特征信息面临复杂度高的问题)。Wide&Deep、DeepCross难以训练,易出现过拟合和梯度消失问题(NFM就没有这些问题了吗??)。 (3) 研究方法 NFM模型的公式如下: 其中前两项和FM一样,后一项的 f ( x ) f(x) f(x)是使用深度神经网络来实现。 f ( x ) f(x) f(x)的实现模型如下: 其中Embedding层是输入层向稠密向量的映射,只取非零特征的Embedding,然后将其输入至B-Interaction层,改成的操作为: 可以通过化简来降低其计算的复杂度(思路和FM化简类似),化简后为: 所以最终模型的等价公式为: (4) 结论与展望 设计更好的神经网络“部件”(例如:该模型中的B-Interaction层)或新的网络架构,或者应用到其他领域如:搜索排序、定向广告等。

Games101 计算机图形学课程笔记:Lecture 20 Color and Perception

目录 Physical Basis of Color光颜色 Tristimulus Theory of Color同⾊异谱 MetamerismColor Reproduction / MatchingCIE RGB Color Matching 颜色空间 Color SpacesStandardized RGB (sRGB)CIE XYZ Perceptually Organized Color SpacesHSV / HSLCIELAB SpaceCMYK: A Subtractive Color Space Physical Basis of Color 光 光就是不同波长的电磁辐射。 不同波长的光具有不同的折射率。 Spectral Power Distribution (SPD) 谱功率密度:光线在不同波长的强度是多少,即光线在不同波长的分布。 SPD是线性可叠加的。 颜色 颜色是人的感知,并不是光物理上的属性。 不同波长的光不是颜色。 人眼相当于相机,瞳孔=光圈,晶状体=透镜,视网膜=感光元件。 视网膜上有很多感光细胞: Rods:视杆细胞,棒状,汗多,感知光的强度(非波长)Cones:视锥细胞,锥形,较少,感知颜色 三种锥形细胞:S,M,L,感知的光线波长不同 不同的人的视锥细胞分布大不一样。 Tristimulus Theory of Color 知道光在不同波长上的分布,某细胞对某波长的响应是多少,感知的结果是将两者积分即可得到,即响应曲线和SPD的积分。 给定任何一种光线,人们看到的是S,M,L三个数,不知道原本光线的分布(SPD)。 同⾊异谱 Metamerism 两种光线不同光谱,但经过上述积分后,得到的SML是相同的,即人们看到的颜色是相同的。 通过显示器的三色光,可以混合出现实中的种种颜色,但背后的光谱一般是不一样的。 Color Reproduction / Matching 计算机中的颜色系统是加色系统。即RGB三个值最高是混合为白色。

cygwin nginx php,Cygwin 下编译 Nginx

首先安装以下库: // 貌似一起安装 apt-cyg 不能识别,得一个一个得安装,有些库貌似没找到 // apt-cyg install openssl pcre zlib automake bison curl-devel flex libiconv libmcrypt-devel libtool libxml2 libxml2-devel patchutils pcre-devel jpeg libmcrypt 配置 ./configure --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module 报错: ./configure: error: can not detect int size cat: objs/autotest.c: No such file or directory 搜索解决方法: 去掉CPU优化编译选项:–with-cpu-opt=pentium 无效,本来就没有加。。。 再次搜索,得到 原因分析: configure通过运行测试程序来获得“int、long、longlong”等数据类型的大小,由于交叉编译器所编译出的程序无法在编译主机上运行而产生错误。 解决办法: 可以通过修改configure文件来手动指定各数据类型的大小,但会非常麻烦。 这里,由于编译主机与目标平台均为32位系统,故可以用 gcc 替代 mips-openwrt-linux-gcc 来进行数据类型大小的测试 (注意:不同的编译环境可能编译器有点不同) 编辑auto/types/sizeof文件,大概36行的位置( $CC 改为 gcc ) ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS 改为 ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAGS

redis高可用之RedisCluster

1、集群搭建(三主三从) RedisCluster最少需要三台主服务器,三台从服务器 1、创建目录 mkdir -p /var/redisCluster/redis-7001 mkdir -p /var/redisCluster/redis-7002 mkdir -p /var/redisCluster/redis-7003 mkdir -p /var/redisCluster/redis-7004 mkdir -p /var/redisCluster/redis-7005 mkdir -p /var/redisCluster/redis-7006 2、进入到/var/redis-5.0.5/src/执行安装 #安装到7001目录 make install PREFIX=/var/redisCluster/redis-7001 cp /var/redis-5.0.5/redis.conf /var/redisCluster/redis-7001/bin # 修改配置文件 vim /var/redisCluster/redis-7001/bin/redis.conf #bind 127.0.0.1 protected-mode no port 7001 # 后台启动 daemonize yes # 集群 cluster-enabled yes 3、复制另外5个实例 cp -r /var/redisCluster/redis-7001/* /var/redisCluster/redis-7002 cp -r /var/redisCluster/redis-7001/* /var/redisCluster/redis-7003 cp -r /var/redisCluster/redis-7001/* /var/redisCluster/redis-7004 cp -r /var/redisCluster/redis-7001/* /var/redisCluster/redis-7005 cp -r /var/redisCluster/redis-7001/* /var/redisCluster/redis-7006 4、依次启动各个redis .

matlab高斯滤波跟中值滤波区别,matlab图像滤波处理代码讲解 均值滤波 中值滤波 高斯滤波...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 (1)均值滤波 function imres = averageFilter(im,N) % imres为均值滤波后的矩阵,参数im为图像的路径,N为滤波模板 if 3==size(im,3) %判断im是否为三维图像,若是,则转换为灰度图像。 im = rgb2gray(im); end im = double(im); h = ones(N,N)/N^2; imres = imfilter(im, h, 'conv','replicate'); 其中h = ones(N,N)/N^2; 是什么意思。 (2)中值滤波 function imres = medianFilter(im,N) if 3==size(im,3) im = rgb2gray(im); end im= double(im); imres = im; [row col] = size(im); %获取图像的行和列 wd = floor(N/2);%floor 向下取整(去掉小数点部分) for x = wd+1:1:row-wd for y = wd+1:1:col-wd subim = im(x-wd:x+wd,y-wd:y+wd); imres(x,y) = median(subim(:));

php 扑克牌洗牌算法,随机洗牌算法 | 学步园

随机洗牌 其实我最初想到的也是那3个方法:1判断生成的随机数有没有重复,2.生成一张布尔表,3.双随机数。 下面给出我的算法: #include #include #include using namespace std; void RandCard(vector, int); //函数声明 int main(int argc, char *argv[]) { vector nRetCard; int nCards=54; RandCard(nRetCard, nCards); return 0; } void RandCard(vector nRetCard, int nCards) { int i, j, temp; for(i=0; i { nRetCard.push_back(i+1); //顺序生成初始值 } srand(time(NULL)); for(i=0, j=nCards; i { temp=rand()%j; //从向量中随机取一个 cout< if( !((i+1)%17) ) cout< nRetCard.erase(nRetCard.begin()+temp); //删除用过的元素 } } 其思路很简单,每次从向量中随机取一个数出来,利用vevtor向量的自动调整长度,每次删除一个元素,再用新的向量长度j生成随机数:temp=rand()%j; 显然算法的时间复杂度为O(n)(不考虑vevtor向量API的情况下),即一趟for循环,不存在最坏情况。 但是注意,该方法的写法虽然简单,但是调用了vevtor向量的API,所以其实效率并不是特别高,但一般情况下够用了。 如果是PHP语言,那么它自带了一个随机洗牌的函数,即shuffle(),它的作用是随机地对数组元素重新排序。其形式为: void shuffle(array input_array) 考虑一个数组,其中包含扑克牌的值: $cards = array("

php 扑克牌洗牌算法,算法思维系列/洗牌算法.md · 刘欢/fucking-algorithm - Gitee.com

# 洗牌算法 我知道大家会各种花式排序算法,但是如果叫你打乱一个数组,你是否能做到胸有成竹?即便你拍脑袋想出一个算法,怎么证明你的算法就是正确的呢?乱序算法不像排序算法,结果唯一可以很容易检验,因为「乱」可以有很多种,你怎么能证明你的算法是「真的乱」呢? 所以我们面临两个问题: 1. 什么叫做「真的乱」? 2. 设计怎样的算法来打乱数组才能做到「真的乱」? 这种算法称为「随机乱置算法」或者「洗牌算法」。 本文分两部分,第一部分详解最常用的洗牌算法。因为该算法的细节容易出错,且存在好几种变体,虽有细微差异但都是正确的,所以本文要介绍一种简单的通用思想保证你写出正确的洗牌算法。第二部分讲解使用「蒙特卡罗方法」来检验我们的打乱结果是不是真的乱。蒙特卡罗方法的思想不难,但是实现方式也各有特点的。 ### 一、洗牌算法 此类算法都是靠随机选取元素交换来获取随机性,直接看代码(伪码),该算法有 4 种形式,都是正确的: ```java // 得到一个在闭区间 [min, max] 内的随机整数 int randInt(int min, int max); // 第一种写法 void shuffle(int[] arr) { int n = arr.length(); /******** 区别只有这两行 ********/ for (int i = 0 ; i < n; i++) { // 从 i 到最后随机选一个元素 int rand = randInt(i, n - 1); /*************************/ swap(arr[i], arr[rand]); } } // 第二种写法 for (int i = 0 ; i < n - 1; i++)

解决视频在钉钉播放出现转码或闪烁

问题 用录屏软件(如傲软录屏)录制的视频通过钉钉发送给对方后,接收方直接点开视频播放时会提示转码或出现画面闪烁。 原因 钉钉要求的视频的像素格式为yuv420p,而录屏软件的像素格式不符。例如,傲软录屏使用h264编码时视频的像素格式是yuvj420p。 解决方案 通过ffmpeg进行转码,可以参考下面的命令: ffmpeg.exe -i src_video_path -pix_fmt yuv420p dst_video_path

java编程实现算符优先分析法,编译原理实验三-算符优先分析法

编译原理实验3-算符优先分析法 #include #include #include #include #define SIZE 128 char priority[6][6]; //算符优先关系表数组 char input[SIZE]; //存放输入的要进行分析的句子 char remain[SIZE]; //存放剩余串 char AnalyseStack[SIZE]; //分析栈 void analyse(); int testchar(char x); //判断字符X在算符优先关系表中的位置 void remainString(); //移进时处理剩余字符串,即去掉剩余字符串第一个字符 int k; void init()//构造算符优先关系表,并将其存入数组中 { priority[1][0]='>'; priority[1][1]='>'; priority[1][2]=' priority[1][3]=' priority[1][4]='>'; priority[1][5]='>'; priority[2][0]='>'; priority[2][1]='>'; priority[2][2]='$';//无优先关系的用$表示 priority[2][3]='$'; priority[2][4]='>'; priority[2][5]='>'; priority[3][0]=' priority[3][1]=' priority[3][2]=' priority[3][3]=' priority[3][4]='='; priority[3][5]='$'; priority[4][0]='>'; priority[4][1]='>'; priority[4][2]='$'; priority[4][3]='$'; priority[4][4]='>'; priority[4][5]='>'; priority[5][0]=' priority[5][1]=' priority[5][2]=' priority[5][3]=' priority[5][4]='$'; priority[5][5]='='; } void analyse()//对所输入的句子进行算符优先分析过程的函数 { int i,j,f,z,z1,n,n1,z2,n2;

初学Springboot(四)

文章目录 前言一、Springboot整合MyBatis1.数据准备:2.创建项目,引入相应的启动器:3.编写配置文件:方式1:用注解方式整合①创建接口Mapper②创建测试类 方式2:使用配置文件的方式整合MyBatis1.创建Mapper接口文件:ArticleMapper2.创建XML映射文件:编写对应的SQL语句3.在全局文件中配置XML映射文件路径以及实体类别名映射路径4.编写测试方法进行接口方法测试及整合测试 二.Spring Boot 整合JPA1.在pom中添加Jpa依赖启动器步骤一:建立一个实体类,表示与表的映射关系步骤二:编写接口类接口类DiscussRepository 步骤三:测试类 三.Spring Boot 整合RedisRedis优点1.在pom文件中添加Spring Data Redis依赖启动器2.编写ORM实体类3.编写Repository接口4.在全局配置文件application.properties中添加Redis数据库连接配置5.编写单元测试进行接口方法测试及整合测试 总结 前言 本次来讲一讲Springboot的数据访问问题,分别整合了访问MyBatis与JPA跟Redis 提示:以下是本篇文章正文内容,下面案例可供参考 项目目录 首先要知道对应的依赖启动器有哪些 名称对应数据库spring-boot-starter-data-jpa•Spring Data JPA •Hibernatespring-boot-starter-data-mongodb•MongoDB •Spring Data MongoDBspring-boot-starter-data-neo4j•Neo4j图数据库 •Spring Data Neo4jspring-boot-starter-data-redis•Redis 一、Springboot整合MyBatis 1.数据准备: 创建数据库、数据表并插入一定的数据 这里我们引用了 先开启数据库,这里我用的是MySQL ①首先创建一张springboot的库 CREATE DATABASE springbootdata; ②创建t_article的表并插入数据 CREATE TABLE `t_article` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id', `title` varchar(200) DEFAULT NULL COMMENT '文章标题', `content` longtext COMMENT '文章内容', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO `t_article` VALUES ('1', 'Spring Boot基础入门', '从入门到退出.

联通GPON/4+1+WiFi(2.4G)TEWA-800G配置桥接模式

修改成桥接模式:如果和我的型号相同请继续,如果不同,就不打扰您宝贵的时间了。 第一步: 先获取到光猫的超级管理员密码,如果没有就打电话给宽带师傅。每个地区的宽带师傅基本上都会给你修改桥接的 不过个别的宽带师傅就是傻x,就让我碰到了,我们当地的联通宽带师傅就是很傻的那种,最起码的人情都不会做 能把人气道吐血,但是没办法。 准备明年就把家里联通宽带换掉 。 还有另外一种方法就是自己上网搜索对应型号的光猫进行破解超级管理员密码。 自己总结的破解方法: 首先我们先要查看光猫的型号,用普通用户登录,在浏览器输入 http://192.168.1.1,普通用户名是user,密码可以在光猫背面找到,默认情况下,直接输入密码就可以的。 接下来我们就想办法将管理员密码给挖出来,我们直接在浏览器地址栏里输入:http://192.168.1.1/backupsettings.conf,按下回车键后,将会把这个配置文件下载下来,这个配置文件就是光猫的配置文件,里面包含了管理员密码,我们下载完毕后,直接用记事本的方式将其打开,然后在里面搜索AdminPassword,找到后,位于<AdminPassword>和</AdminPassword>之间的部分就是管理员密码了,一般为CUAdmin+八位数字,比如CUAdmin12345678。 有了管理员密码,我们就可以登录光猫“为所欲为”了,当然了,你也可以通过http://192.168.1.1/cu.html直接进入管理员登录界面。根据自己的需要配置自己需要的服务 后期我会附上联通光猫的网页源代码文件。不包含数据文件。 特此声明:本次破解主要就是为了技术交流使用,如果有任何侵犯行为。联系作者 作者会在第一时间进行删除。切记不能使用该破解方法去破解他人光猫,出现后果与本人无关。我只是技术爱好者。 第二步: 修改为桥接模式 最后点击保存和应用。 到这里我们光猫破解和修改成桥接模式就完成了。

Cesium实现淹没分析效果(polygon方式)

通过cesium可以实现一些常规的分析功能,本文通过拉伸polygon的方式实现三维淹没分析效果 效果图如下: 原理也比较简单,大家可以试想一下通过一个立方体从地形最低处开始上升,地势低洼的地方会率先显示立方体(水),从而在视觉上实现淹没分析效果。 核心代码: ​ let ref = { "color": "rgba(0,191,255,0.5)", "targetHeight": 10, "waterHeight": 0 } this.viewer.entities.add({ polygon: { hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(floodtemparr), extrudedHeight: new Cesium.CallbackProperty(function () { ref.waterHeight += 0.0025; if (ref.waterHeight > 10) { ref.waterHeight = ref.targetHeight; } return ref.waterHeight }, false), perPositionHeight: true, closeTop: false, material: new Cesium.Color.fromCssColorString(ref.color), } }) ​ 注:floodtemparr数组是划线的经纬度坐标数组,包含每一个点的高度坐标,其余相关参数根据业务需求自行动态配置至ref。

利用Java实现(单文件上传、多文件上传和文件下载)功能和如何将其运用到实际项目中

这里写目录标题 一、文件上传步骤1、创建jsp页面2、创建控制器类3、在springmvc配置文件中定义图片上传的bean对象4、在tomcat的webapps目录下创建存放图片上传的文件夹5、在控制器类中创建jsp页面Post提交方式的对应处理方法6、在jsp页面中通过< img >标签来显示webapps文件目录下的图片7、通过request对象来获取webapps目录,使得代码更加灵活8、因为上传的图片格式和文件名不可能都是一样,所以代码做如下改进9、当jsp页面中没有点击上传图片时,则会报错,因为并没有判断上传图片是否为空10、在实际开发中不可能特意跑去tomcat目录下的webapps文件夹下再创建一个专门存放图片的子文件夹11、完整代码: 二、文件下载三、多文件上传四、如何将以上代码运用到项目中去呢?1、在实际项目中需要用到上传图片功能的代码中传入MultipartFile、HttpServletRequest参数,并添加以下代码2、为方便下面代码调用图片名参数,可将其提到 if 语句上面去定义3、在jsp页面form表单中需要加入以下代码4、在jsp页面中定义的参数要和处理该页面的方法传入的参数要一致 一、文件上传步骤 1、创建jsp页面 2、创建控制器类 1、这里定义了浏览器中访问的路径为http://localhost:8080/smv/up 2、并在springmvc配置文件中定义了视图解析器 3、在springmvc配置文件中定义图片上传的bean对象 4、在tomcat的webapps目录下创建存放图片上传的文件夹 5、在控制器类中创建jsp页面Post提交方式的对应处理方法 修改:里面的路径修改为D:\Tomcat9\tomcat9.0\webapps\imgs\7.jpg 6、在jsp页面中通过< img >标签来显示webapps文件目录下的图片 7、通过request对象来获取webapps目录,使得代码更加灵活 8、因为上传的图片格式和文件名不可能都是一样,所以代码做如下改进 9、当jsp页面中没有点击上传图片时,则会报错,因为并没有判断上传图片是否为空 10、在实际开发中不可能特意跑去tomcat目录下的webapps文件夹下再创建一个专门存放图片的子文件夹 11、完整代码: 项目的目录结构图: UploadController.java @Controller public class UploadController { @RequestMapping(value = "/up",method = RequestMethod.GET) public String uploadFile(){ return "upload"; } @RequestMapping(value = "/up",method = RequestMethod.POST) public String uploadFile(@RequestParam(value = "file",required = false)MultipartFile file , HttpServletRequest request, ModelMap model) throws IOException { String webapps = null; String fileName = null; if (!

微信小程序Animation动画的使用

目录 1,前言2,属性3,使用 1,前言 和css3动画不同,小程序中动画是主要是通过js控制的,简单来说就是创建一个动画实例animation。调用实例的方法来定义动画效果。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 2,属性 首先需要通过wx.createAnimation,创建一个动画对象,该对象接收四个属性。 属性名数据类型默认值必填说明durationnumber400否动画持续时间,单位 mstimingFunctionstring‘linear’否动画的效果delaynumber0否动画延迟时间,单位 mstransformOriginstring‘50% 50% 0’否动画起点 其中,timingFunction属性有七种值类型 值说明‘linear’动画从头到尾的速度是相同的‘ease’动画以低速开始,然后加快,在结束前变慢‘ease-in’动画以低速开始‘ease-in-out’动画以低速开始和结束'‘ease-out’动画以低速结束‘step-start’动画第一帧就跳至结束状态直到结束‘step-end’动画一直保持开始状态,最后一帧跳到结束状态 例子: let change = wx.createAnimation({ duration:500 }); change.opacity(0).step(); this.setData({ change:change.export() }); 3,使用 使用起来需要将动画对象,绑定到元素上 <view class="dialog" animation="{{ move}}"></view> 然后在js文件page对象的data中定义 Page({ data: { move:{}, } }) 因为动画对象默认接收的是px单位,如果需要使用rpx单位,比如400rpx,转换公式就是400 / 750 * wx.getSystemInfoSync().windowWidth。 元素往右边移动200rpx,并且放大1.5倍的动画例子: move(){ let move = wx.createAnimation({ duration:200 }); move.translateX(200 / 750 * wx.getSystemInfoSync().windowWidth).scale(1.5,1.5).step(); this.setData({ move:move.export() }) } 如果看了觉得有帮助的,我是@鹏多多i,欢迎 点赞 关注 评论; END 公众号 往期文章 微信小程序自定义Tabbar,附详细源码细数JS中实用且强大的操作符&运算符微信小程序API交互的自定义封装微信小程序request请求的封装 个人主页 CSDNGitHub简书博客园掘金

安装Ubuntu 20.04 LTS服务器的图文教程

今天,我们将通过图文向您展示如何安装Ubuntu 20.04 LTS服务器。如果您的系统上已经有Ubuntu 18.04 LTS服务器,则只需将其升级到Ubuntu 20.04 LTS服务器。如果您不想升级,但希望在计算机上全新安装Ubuntu 20.04 LTS服务器,则本指南适合您! 首先,下载最新的Ubuntu 20.04 LTS服务器版本,制作成可启动的USB驱动器。 然后,使用新创建的可引导USB驱动器引导系统。您将看到以下屏幕。选择您的语言,然后按Enter继续。 在Ubuntu安装向导中选择语言 接下来,选择您喜欢的键盘布局,或者您可以选择“识别键盘”选项来自动选择键盘布局。选择键盘布局后,选择“完成”并按ENTER。 选择键盘布局 接下来,配置至少一个网络接口卡,以允许该服务器与网络中的其他系统对话。如果您的网络上有DHCP服务器,则IP地址将自动分配给所有可用接口。如果您不想使用自动IP地址,请使用UP / DOWN箭头选择网络接口,然后手动配置IP地址。配置网络设置后,选择“完成”并按ENTER继续。 配置所有网络接口卡的IP地址 如果您的Ubuntu服务器在代理服务器后面,则需要在此处输入代理服务器详细信息。否则,只需将其保留为空,然后按Enter键即可继续。 在Ubuntu安装向导中输入代理服务器详细信息 接下来,您需要配置Ubuntu存档镜像。系统会自动为您选择一个默认的镜像。如果您不希望使用默认镜像,请在此处输入“镜像地址”,然后按ENTER键继续。 配置Ubuntu存档镜像 接下来,配置磁盘布局,即对硬盘进行分区。您将获得两个选择。选择任何适合您的给定分区方法。 使用整个磁盘:此方法将擦除整个硬盘并自动对驱动器进行分区。推荐给新手。如果选择此选项,则可以选择设置LVM并使用LUKS加密LVM配置。 自定义存储布局:供中级和高级用户手动设置他们选择的分区。 配置存储后,选择“完成”并按ENTER继续。 Ubuntu中的指导性存储配置 查看当前文件系统配置。如果您确定可以,请按ENTER继续,或返回并根据需要重新配置存储。 Ubuntu中的文件系统摘要 选择“继续”,然后按ENTER键将更改写入磁盘。 确认分区布局 现在,输入服务器系统的详细信息,例如您的名称,服务器名称,用户名及其密码,您将使用它们来登录服务器。按ENTER继续。 输入Ubuntu用户名和密码 接下来,您可以选择安装openSSH服务器,该服务器允许您从网络上的任何系统远程访问该服务器。按空格键选择/取消选择。如果您现在不执行此操作,则可以在安装完成后稍后再安装。SSH对于从任何地方访问Ubuntu服务器都很重要,因此我选择了它。按ENTER继续。 在Ubuntu中安装openSSH服务器 接下来,选择适用于您的Ubuntu系统的可用特性软件包列表。它们将与Ubuntu服务器安装一起安装。使用SPACE选择或取消选择它们。按ENTER查看快照应用程序的更多详细信息。这是可选的,您以后也可以这样做。 Ubuntu服务器流行快照 Ubuntu 20.04 LTS安装将立即开始。需要一段时间,具体取决于软件包的选择和Internet的速度。 成功安装Ubuntu 20.04 LTS服务器后,请重新引导它以完成安装。 Ubuntu 20.04 LTS Server安装完成 恭喜你!Ubuntu 20.04 LTS服务器可以使用了! 登录到Ubuntu 20.04 LTS服务器。

Mysql8官方分布式数据库MGR最佳实践

MGR简介 MGR是mysql Group Replication简称,中文名称是Mysql组复制,MGR是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案,提供了高可用、高扩展、高可靠的MySQL集群服务,目前只支持MYSQL5.7和mysql8.0版本。 MGR优点 1、高一致性:基于原生复制和paxos协议的组复制技术。 2、高容错性:有自动检测机制,当出现宕机后,会自动剔除问题节点,在2N+1个节点集群中,集群 只要N +1个节点还存活着,数据库就能稳定的对外提供服务。 3、高扩展性:可以在线增加和移除节点。 4、高灵活性:可以在单主模式和多主模式自由切换。 MGR缺点 MGR技术比较新,稳定性方面还需要业界验证。 Mysql8分布式数据库MGR最佳实践 环境准备 3台虚拟机搭建3节点的MGR集群,Mysql数据库用的8.0.21版本。 创建目录 mkdir -p /data/mysql/mysql8/{data,log,conf,run}/3309 mkdir -p /data/mysql/mysql8/log/3309/{redo,undo,relay} chown -R mysql:mysql /data/mysql/mysql8/mysql8 chmod 750 /data/mysql/mysql8/{data,log,conf,run} 配置参数 [mysqld] ##basic settings### server-id=1 port = 3309 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-name-resolve max_connections=1000 max_user_connections=800 max_allowed_packet=512M max_connect_errors=100000 datadir = /data/mysql/mysql8/data/3309 socket = /data/mysql/mysql8/run/3309/mysql.sock pid_file = /data/mysql/mysql8/run/3309/mysql.pid transaction_isolation = READ-COMMITTED lower_case_table_names=1 default_time_zone =+8:00 open_files_limit=65535 log_timestamps=system wait_timeout=900 interactive_timeout=900 ##innodb setting## innodb_buffer_pool_size = 256M innodb_buffer_pool_instances = 1 innodb_io_capacity=2000 innodb_flush_method=O_DIRECT innodb_log_group_home_dir = /data/mysql/mysql8/log/3309/redo innodb_log_file_size = 128M innodb_log_files_in_group=4 innodb_log_buffer_size = 32M innodb_undo_directory = /data/mysql/mysql8/log/3309/undo innodb_undo_tablespaces = 4 innodb_undo_log_truncate=1 innodb_max_undo_log_size=1G innodb_flush_neighbors=0 innodb_flush_log_at_trx_commit = 1 innodb_print_all_deadlocks = 1 innodb_online_alter_log_max_size=128M innodb_lock_wait_timeout=10 innodb_file_per_table=ON innodb_doublewrite=ON ##log settings## log-error = /data/mysql/mysql8/log/3309/error.

perror()函数的运用(详解)

1、作用: 打印系统错误信息 2、原型 #include <stdio.h> void perror(const char *s); #include <errno.h> 3、代码: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { int fd; fd=open("./file", O_RDWR);//打开文件file,读写方式 if(fd < 0){ printf("open failure\n"); perror("why");//打印失败的原因 } close(fd); return 0; } 运行结果: //我的目录下是没有文件file的 open failure why: No such file or directory 4、描述 (1)例程perror()在标准错误输出上生成一条消息,描述在调用系统或库函数时遇到的最后一个错误。首先(如果s不是NULL并且*s不是NULL字节(’\0’))将输出参数字符串s,后跟一个冒号和一个空白。然后是消息和新一行。 (2)最常用的是,参数字符串应该包括导致错误的函数的名称。错误号来自外部变量errno,该变量在发生错误时设置,但在成功调用时不清除。 (3)可以使用errno索引的全局错误列表sys_errlist[]获取不换行的错误消息。表中提供的最大消息数是sys_nerr 1。当直接访问这个列表时要小心,因为新的错误值可能没有被添sys_errlist[]。 (4)当系统调用失败时,它通常返回1,并将变量errno设置为描述出错原因的值。(这些值可以在<errno.h>中找到。)许多库函数也是这样做的。函数perror()将错误代码转换为人类可读的形式。注意,在成功的库调用之后,errno是未定义的:这个调用很可能更改这个变量,即使它成功了,例如,因为它在内部使用了其他失败的库函数。因此,如果失败的调用之后没有立即调用perror(),则应该保存errno的值。

VMTK学习——02.基本的PYPES教程

写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友。 目录 基本的PYPES教程 基本的PYPES教程 最新的稳定版本和开发版本 本教程将使您开始使用PypeS。建议的第一步是有效使用vmtk的第一步。 PypeS是vmtk脚本之间的粘合剂。它允许轻松编写新脚本并具有通用接口,但是最重要的是,它允许单个vmtk脚本相互交互,从而使vmtk模块化且灵活。 原始链接:http://www.vmtk.org/tutorials/PypesBasic.html 让我们键入vmtkmarchingcubes --help(给二进制包用户的注释:您可以在PypePad中键入相同的内容,也可以在命令行前添加vmtk,即在命令行中输入)。 vmtk vmtkmarchingcubes --help。将显示以下文本: vmtkmarchingcubes --help Creating vmtkMarchingCubes instance. Automatic piping vmtkmarchingcubes Parsing options vmtkmarchingcubes vmtkmarchingcubes : generate an isosurface of given level from a 3D image Input arguments: -id Id(int,1); default=0: script id -handle Self (self,1): handle to self -disabled Disabled (bool,1); default=0: disable execution and piping -i Image (vtkImageData,1): the input image -ifile ImageInputFileName(str,1): filename for the default Image Reader -array ArrayName (str,1): name of the array to work with -l Level(float,1); default=0.

一次破解TP-Link WAR308路由器的经历

转载地址:https://www.eatm.app/archives/395.html tp-link路由器破解/SSH登录/root权限 此方法仅适用较新款的路由器.导出的备份配置能够使用7z打开,且基于系统openwrt二次开发的系统. 从路由中备份备份配置信息 使用7z解压出文件 开启SSH-如果路由中有’开启调试’选项,勾选即可,即为开启SSH登录 #修改文件userconfig/etc/config/dropbear, #查看option ssh_port_switch值,修改为'on' #如果已经为'on'则无需修改 config dropbear option PasswordAuth 'on' option RootPasswordAuth 'on' option Port '34000' option ssh_port_switch 'on' #记下option Port端口号--这是SSH连接端口号 添加新用户 #文件:/etc/passwd #复制1行root root:x:0:0:root:/root:/bin/ash #并修改名字 myname:x:0:0:myname:/root:/bin/ash 设置密码 #文件:/etc/shadow 添加1行 myname:$1$12345678$0YZqMCdlfK6hUgWzHk5mQ1:17703:0:99999:7::: #这个密码是qwe123 #你也可以在linux下利用以下代码自己生成密码 perl -e 'print crypt("123456","\$1\$aaaabbbb\$") . "\n"' #123456为密码,成功后将输出加密后的密码 将修改过的文件替换到压缩包中去(win7+系统可能需要将原始的bin文件解锁-文件属性解锁) 路由中导入配置信息-重启-完成… 使用IP:前面看到的端口,myname,qwe123登录ssh了, 我这登录上去后不知道什么原因,登录上后直接为root 登录上去如果不是root的,需要如下操作 获取root密码 #如果TP-LINK在密码规则没改变的情况下,可以使用以下命令取得root密码 echo -n "xxxxxxxxxxxx" | md5sum #xxxx为路由器LAN口中显示的的MAC地址-大写,不要连接符号12位 #执行后返回一串32位字符串,前8位为root密码 #如果不正确,看下面 #文件/etc/init.d/dropbear #复制文件 cp /etc/init.d/dropbear /etc/init.d/getpwd #修改文件 vim /etc/init.d/getpwd #getNewPasswd函数下面的部分可以全删掉 在getNewPasswd函数下面添加一行代码 getNewPasswd #保存退出.

VMTK学习——01.入门

写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友。 目录 入门读取和显示图像关于文件名的注释 图像格式转换档案格式感兴趣体积(VOI)提取使用Marching Cubes进行表面提取 入门 本教程演示了如何在vmtk中打开数据集,导航到3D体积并设置图像以进行进一步处理。 原始链接:http://www.vmtk.org/documentation/getting-started.html 读取和显示图像 第一步是读取图像并将其显示在屏幕上。vmtkimagereader能够读取DICOM目录。另外,它将基于图像体积相对于患者的方向正确地重新定向图像体积。((可以禁用此功能)) vmtkimagereader -ifile dicom_directory_path/first_dicom_file_in_the_series.dcm --pipe vmtkimageviewer 其中dicom_directory_path是可在其中找到DICOM图像(* .dcm或任何扩展名)的路径。 关于文件名的注释 如果文件的目录路径(或文件名本身)中包含空格字符,则必须将文件的完整路径括在“引号”中,以便正确读取文件。这对于Windows用户来说尤其重要,因为Windows用户的用户名中可能有空格!示例:如果我们有dicom文件,您想查看位于的文件C:\Users\Your Name\Documents\foo.dcm,则相应的脚本为: vmtkimagereader -ifile "C:\Users\Your Name\Documents\foo.dcm" --pipe vmtkimageviewer 图像格式转换 假设您要以vti格式(图像的VTK XML格式编写图像卷-很方便,因为它是内部gzip格式的): vmtkimagereader -ifile first_dicom_file_in_the_series.dcm --pipe vmtkimagewriter -ofile image_volume.vti 其中image_volume.vti是输出文件名。 或者,也许您希望将8位png图像放入下一张纸中: vmtkimagereader -ifile first_dicom_file_in_the_series.dcm --pipe vmtkimagewriter -f png -ofile image_file_prefix 如果图像体积由多个切片组成,则单个切片将在名为image_file_prefix0001.png,image_file_prefix0002.png,image_file_prefix0003.png等的单独png文件中输出。对于8位格式,图像级别将自动缩放为0 -255。您可以使用vmtkimagewriter的-windowlevel选项进行调整。(8位图像的使用应仅限于显示目的,例如演示或出版物中使用的图像。不应对它们进行任何处理,因为重要的信息和细节会因缩放比例而丢失。) 档案格式 感兴趣体积(VOI)提取 通常,医学图像包含不感兴趣的结构。要从数据集中提取感兴趣的体积(VOI),可以通过以下方式在DICOM读取器和写入器之间通过管道传递vmtkimagevoiselector实例: vmtkimagereader -ifile dicom_directory_path/first_file_in_dicom_series.dcm --pipe vmtkimagevoiselector -ofile image_volume_voi.vti (这一次,我选择在vmtkimagevoiselector中使用内置写入器,而不是通过管道传递到vmtkimagewriter。没有真正的区别。) 此时,图像体积将被区域选择立方体(小部件)剪切,新体积将显示在渲染窗口中。现在,您可以:1)按q退出,在这种情况下,结果将通过管道传输到vmtkimagewriter实例,或者2)再次按i并定义另一个VOI继续。如果您确定不想定义另一个VOI,但已经按i激活了区域选择工具,请再按一次i从渲染窗口中删除选择小部件。现在按q将退出而不进行裁剪。 使用Marching Cubes进行表面提取 考虑具有图像卷image_volume_voi.vti的示例。 根据血管图像创建表面模型的最快,最简单的方法是使用Marching Cubes对图像进行轮廓处理: vmtkmarchingcubes -ifile image_volume_voi.vti -l 300.

DPI与DFI技术分析

参考文章:DPI与DFI技术分析,DPI技术 背景:近年来,网络新业务层出不穷,有对等网络(Peer-to-Peer,简称 P2P)、VoIP、流媒体、Web TV、音视频聊天、互动在线游戏和虚拟现实等。这些新业务的普及为运营商吸纳了大量的客户资源,同时也对网络的底层流量模型和上层应用模式产生了很大的冲击,带来带宽管理、内容计费、信息安全、舆论管控等一系列新的问题。尤其是 P2P、VoIP、流媒体等业务。当前 P2P 业务的流量已占互联网数据流量的50%-70%,如果再加上流媒体等业务,新业务的数据流量是相当巨大的,这打破了以往“高带宽、低负载”的 IP 网络 QoS 提供模式,在很大程度上加重了网络拥塞,降低了网络性能,劣化了网络服务质量,妨碍了正常的网络业务的开展和关键应用的普及。同时,P2P 的广泛使用也给网络的信息安全监测管理带来了极大的挑战。 由于 P2P 流量的带宽吞噬特性,简单的网络升级扩容是无法满足运营商数据流量增长需要的,加上网络设备缺乏有效的技术监管手段,不能实现对 P2P/WEB TV 等新兴业务的感知和识别,导致网络运营商对网络的运行情况无法有效管理。 传统的网络运维管理,往往通过设备网管实现对网元级的管理,后来发展至网络级管理,可以对上层的简单应用进行管控,而这些应用级管控技术大多采用简单网络管理协议 SNMP 或者基于端口的流量识别进行进行分析和管理。 因此,如何深度感知互联网/移动互联网业务,提供应用级管控手段,构建“可运营、可管理”的网络,成为运营商关注的焦点。 DPI技术 DPI全称为“DeepPacketInspection”,称为“深度包检测”。DPI技术在分析包头的基础上,增加了对应用层的分析,是一种基于应用层的流量检测和控制技术,当IP数据包、,或UDP数据流经过基于DPI技术的带宽管理系统时,该系统通过深入读取IP包载荷的内容来对OSI7层协议中的应用层信息进行重组,从而得到整个应用程序的内容,然后按照系统定义的管理策略对流量进行整形操作。 针对不同的协议类型,DPI识别技术可划分为以下三类: 特征字的识别技术: 不同的应用通常会采用不同的协议,而各种协议都有其特殊的指纹,这些指纹可能是特定的端口、特定的字符串或者特定的Bit序列。基于特征字的识别技术,正是通过识别数据报文中的指纹信息来确定业务所承载的应用。根据具体检测方式的不同,基于特征字的识别技术又可细分为固定特征位置匹配、变动特征位置匹配和状态特征字匹配三种分支技术。通过对指纹信息的升级,基于特征字的识别技术可以方便的扩展到对新协议的检测。 - 应用层网关识别技术: 在业务中,有一类的控制流和业务流是分离的,如与7号信令相关的业务,其业务流没有任何特征,应用层网管识别技术针对的对象就是此类业务,首先由应用层网管识别出控制流,并根据控制流协议选择特定的应用层网关对业务流进行解析,从而识别出相应的业务流。对于每一个协议,需要不同的应用层网关对其进行分析。例如:H323、SIP等协议,就属于此类,其通过信令交互过程,协商得到其数据通道,一般是RTP格式封装的语音流,纯粹检测RTP流并不能确定这条RTP流是通过那种协议建立起来的,即判断其是何种业务,只有通过检测SIP或H232的协议交互,才能得到其完整的分析。 - 行为模式识别技术: 在实施行为模式技术之前,运营商首先必须先对终端的各种行为进行研究,并在此基础上建立行为识别模型,基于行为识别模型,行为模式识别技术即根据客户已经实施的行为,判断客户正在进行的动作或者即将实施的动作。 行为模式识别技术通常用于那些无法由协议本身就能判别的业务,例如:从电子邮件的内容看,垃圾邮件和普通邮件的业务流两者间根本没有区别,只有进一步分析,具体根据发送邮件的大小、频率,目的邮件和源邮件地址、变化的频率和被拒绝的频率等综合分析,建立综合识别模型,才能判断是否为垃圾邮件。 这三类识别技术分别适用于不同类型的协议,相互之间无法替代,只有综合的运用这三大技术,才能有效的灵活的识别网络上的各类应用,从而实现控制和计费。 DFI技术 DFI(Deep/DynamicFlowInspection,深度/动态流检测)与DPI进行应用层的载荷匹配不同,采用的是一种基于流量行为的应用识别技术,即不同的应用类型体现在会话连接或数据流上的状态各有不同。 例如,网上IP语音流量体现在流状态上的特征就非常明显:RTP流的包长相对固定,一般在130~220byte,连接速率较低,为20~84kbit/s,同时会话持续时间也相对较长;而基于P2P下载应用的流量模型的特点为平均包长都在450byte以上、下载时间长、连接速率高、首选传输层协议为TCP等。DFI技术正是基于这一系列流量的行为特征,建立流量特征模型,通过分析会话连接流的包长、连接速率、传输字节量、包与包之间的间隔等信息来与流量模型对比,从而实现鉴别应用类型。 DPI和DFI优劣分析 DPI与DFI优缺点分析 DFI处理速度相对快: 采用DPI技术由于要逐包进行拆包操作,并与后台数据库进行匹配对比;采用DFI技术进行流量分析仅需将流量特征与后台流量模型比较即可,因此,目前多数基于DPI的带宽管理系统的处理能力达到线速1Gbit/s左右,而基于DFI的系统则可以达到线速10Gbit/s的流量监控能力,完全可以满足运营商需求; DFI维护成本相对较低: 基于DPI技术的带宽管理系统,总是滞后新应用,需要紧跟新协议和新型应用的产生而不断升级后台应用数据库,否则就不能有效识别、管理新技术下的带宽,提高模式匹配效率;而基于DFI技术的系统在管理维护上的工作量要少于DPI系统,因为同一类型的新应用与旧应用的流量特征不会出现大的变化,因此不需要频繁升级流量行为模型。 识别准确率方面各有千秋: 由于DPI采用逐包分析、模式匹配技术,因此,可以对流量中的具体应用类型和协议做到比较准确的识别;而DFI仅对流量行为分析,因此只能对应用类型进行笼统分类,如对满足P2P流量模型的应用统一识别为P2P流量,对符合网络语音流量模型的类型统一归类为VOIP流量,但是无法判断该流量是否采用H.323或其他协议。如果数据包是经过加密传输的,则采用DPI方式的流控技术则不能识别其具体应用,而DFI方式的流控技术则不受影响,因为应用流的状态行为特征不会因加密而根本改变。

codeforces #round706 div2

A.Split it! 题意:给你一个字符串s,和一个参数k,问是否存在k+1个非空子串 a 1 a_1 a1​, a 2 a_2 a2​,… a k a_k ak​, a k + 1 a_{k+1} ak+1​使得 s = a 1 + a 2 + . . . + a k + a k + 1 + R ( a k ) + . . . + R ( a 2 ) + R ( a 1 ) . s=a_1+a_2+...+a_k+a_{k+1}+R(a_k)+...+R(a_2)+R(a_1). s=a1​+a2​+...+ak​+ak+1​+R(ak​)+...+R(a2​)+R(a1​). R(S)表示将字符串逆转,如R(abcd)=dcba 题解:k+1个非空子串,非空意味着子串长度至少为1,那么如果要满足题目条件,至少前k个字符与后k个字符一一对应,并且中间 至少留下1个字符作为 a k + 1 a_{k+1} ak+1​ 参考代码: #include <iostream> #include<bits/stdc++.

初学Springboot(三)

文章目录 前言一、Proifile多环境配置Spring Profiles是什么:为什么要多环境配置多环境配置方式1.Profile文件多环境配置2.@Profile注解多环境配置 使用步骤1.多环境配置文件格式例子: 二.随机值设置以及参数间引用随机值设置random参数间的引用 总结 前言 本章来学习,Proifile多环境配置,随机值设置以及参数间引用 提示:以下是本篇文章正文内容,下面案例可供参考 一、Proifile多环境配置 Spring Profiles是什么: Spring Profiles允许用户根据配置文件(dev,test,prod等-开发测试生产)来注册bean,因此,当应用程序在开发中运行时候,只有某些bean可以加载,而在PRODUCTION中,某些其他bean可以加载,假设我们要求是Swagger文件仅用于QA环境,并且禁用所有其他文档,这可以是由配置文件来完成,SpringBoot使得配置文件变得简单。 为什么要多环境配置 在实际开发中,应用程序通常需要部署到不同的运行环境中,例如开发环境、测试环境、生产环境等。不同的环境可能需要不同的环境配置,针对这种情况,不可能手动变更配置文件来适应不同的开发环境,此时就需要对项目进行多环境配置 多环境配置方式 1.Profile文件多环境配置 2.@Profile注解多环境配置 使用步骤 1.多环境配置文件格式 application-{profile}.properties 注:{profile}对应具体的环境标识 dev:开发环境下 test:测试环境下 prod:生产环境下 我们需要用到哪个环境就在全局配置文件设置spring.profiles.active属性激活 #对应各个环境 #格式为spring.profiles.active=对应的环境 spring.profiles.active=dev 例子: 比如我们现在想在测试环境下进行工作 我们先要在全局配置文件中spring.profiles.active属性激活测试环境 即 spring.profiles.active=test 其次在测试环境下的配置文件编写我们想要设置的属性 这里我们试一下更改端口号 server.port=8082 然后然后运行启动类 在config包里面创建一个接口DBConnector public interface DBConnector { public void configure(); } 在接口同级别的包里面创建接口实现类 @Configuration//声明为配置类 能被spring扫描到,生成实例存到容器中 @Profile(value = "test")//指定多环境配置类的标识 public class TestDBConnector implements DBConnector { @Override public void configure() { System.out.println("数据库配置环境-test"); } } 在测试类中

ORB-SLAM2学习笔记——Triangulate三角化函数

1、 理论部分 看图然后能得到下式,用第三个与前两个结合求解: u=λP0X v=λP1X 1=λP2X 2、代码部分 //三角化 //将空间点投影到两个相机平面 void Initializer::Triangulate(const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const cv::Mat &P1, const cv::Mat &P2, cv::Mat &x3D) { //构造A矩阵,用于求解空间点 A*X = 0; cv::Mat A(4,4,CV_32F); A.row(0) = kp1.pt.x*P1.row(2)-P1.row(0); A.row(1) = kp1.pt.y*P1.row(2)-P1.row(1); A.row(2) = kp2.pt.x*P2.row(2)-P2.row(0); A.row(3) = kp2.pt.y*P2.row(2)-P2.row(1); //对A矩阵进行SVD分解,所得右矩阵的最后一列就是所需的解 cv::Mat u,w,vt; cv::SVD::compute(A,w,u,vt,cv::SVD::MODIFY_A| cv::SVD::FULL_UV); x3D = vt.row(3).t(); //保持解的齐次形式,让最后一个为1; x3D = x3D.rowRange(0,3)/x3D.at<float>(3); }

数据库的基础操作-温故知新

包含一些简单的数据库操作指令,主要暂时T-SQL语句,图形化界面暂不记录 本文知识来源:观看B站视频讲解,自己操作总结,B站链接为:https://space.bilibili.com/494829372?spm_id_from=333.788.b_765f7570696e666f.1 数据库的创建、删除和修改: create Database FiveCirclesDB2 /*创建数据库*/ drop Database FiveCirclesDB2 /*删除数据库*/ alter database FiveCirclesDB2 Modify name = FiveCirclesDB/*修改数据库名字*/ 创建表和添加主外键约束: 解释: primary key 中文叫主键,用来唯一确定表中的某一行,相当于一个人的身份证号码。 /*创建表GenderTable,主键为ID:*/ Create table GenderTable ( ID int primary key , Gender nvarchar(50) not null ) 添加主外键约束 约束:constraint 外键:foreign key alter table XX(添加外键的表名) add constraint XXXX(添加的约束名称) foreign key AA(添加外键的表的列名) references BB (CC) (外键对应表名以及列名) 实例: alter table EmployTable add constraint EmployTable_GenderID_GenderTable_ID foreign key (GenderID) references GenderTable (ID) 添加Default约束: alter table EmployTable add constraint EmployTable_Phone_default default 158665423 for Phone insert into EmployTable(ID ,[Name],GenderID) values (4,'hh','3') select * from EmployTable delete from EmployTable where ID = '4' /*删除约束 alter table EmployTable drop constraint EmployTable_Phone_default */ 添加Check & Unique 约束:

暴力破解WiFi密码

你好!欢迎来到这里,我学习的地方! 暴力破解WiFi密码 要有一个外置网卡 ;kali linux系统(这里以Ubuntu为实验);虚拟机调试(调试到外接网卡);打开终端,按照顺序敲代码;airmon-ng start wlan0 airodump-ng wlan0mon airodump-ng -c CH --bssid BSSID -w name wlan0mon aireplay-ng -0 2 -a BSSIF -c STATION wlan0mon; 加粗部分代表上次输入代码后显示的信息代码 aircrack-ng -w rockyou.txt … .cap 加粗部分代表桌面上,后来新生成的文件夹名称注:标记的信息代码可能为多个,用同一行中的信息代码。具体以灵活变换。 由于系统中自带密码字典,所以自己不用准备密码字典。;

git在提交代码时,出现unable to access “XXXXX” Permission denied权限被拒绝的警告时,应该怎么去掉

不少小伙伴去一家新的公司,领了一台新的mac,开开心心的打开电脑拉取项目,提交代码的时候,出现一排排的warning,虽然代码也提交成功了,但是对一个资深的新手来讲,确实很难受. 那么针对这个问题,我们怎么解决呢? 我先上一张图,如果是类似的问题,那么可以试试下面的办法 看这一排排的警告⚠️,着实让人难受,一般在使用新的mac的时候,会出现这个问题,是因为有一些文件夹需要root权限,所以在访问这些文件夹的时候会出现权限相关的警告 1、找到需要更改权限的文件 这个时候,我们需要打开终端,进入终端根目录 cd ~ 然后查看当前文件夹的情况 ls -al 这个时候,如果顺利的话,你将看到一些文件以及文件的权限状态; 然后根据刚才的警告内容找到这个.config文件,你的不一定是.config,报错是什么文件,这里就找什么文件,千万别搞错. 我们可以看到,它需要的root权限 2、修改root权限 这里同样,报错是什么文件,就是写什么文件.不一定是.config哦 sudo chown (这里是你自己的管理员名称) .config 这个管理员名称是什么呢? 它是上图中,马赛克挡住的那一部分.看看你的终端就知道了 最后一步,根据提示敲入解锁mac的密码,按下回车键,问题解决!

Winform实时刷新界面的正确姿势

1.前言 最近在审核工程师代码的时候,一个简单的工厂自动化软件,结果看到了居然用Timer来刷新界面通过串口过来的数据... 难怪工厂测试人员一直给我反馈说我们这个系统有时候会很卡! 这样的方式来处理界面的呈现不卡死才出怪事了! 2.如何界面上正确的体现实时交互数据 需要了解一个接口:INotifyPropertyChanged 意思是说,如果我这边的实体类数据发生了变化,会向客户端发送通知,告诉客户端来更新实体类的值,前提是实体类与界面上的客户端已经进行了绑定 在实体类里面增加以下代码: public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } 如果我们需要将哪个字段发生了变化通知到界面进行更新,则在字段的set{}里面增加: NotifyPropertyChanged("当前字段名称"); 如: private int _FPacketIndex; public int FPacketIndex { get { return _FPacketIndex; } set { _FPacketIndex = value; NotifyPropertyChanged("FPacketIndex"); } } 然后定义一个BingingList,比如: private BindingList<UpgradeObject> upgradedList = new BindingList<UpgradeObject>(); 在界面初始化的时候将upgradedList绑定到DataGridView dgv_Upgrading.DataSource = upgradingList; 这样只要FPacketIndex字段发生了更新,界面上就会马上呈现更新的值

标签传播算法(半监督图算法)

graphx 实现 参数调优很简单。LPA 使用最大迭代参数运行,并且使用默认值 5 就可以得到一些好的结果。Raghavan 和她的合作者在几个有标签的网络上测试了 LPA。他们发现至少 95% 的节点在 5 次迭代中被正确分类。运行时间内近线性。LPA 的每次迭代都是 O (m),边的数量是线性的。与 以前的一些社区检测解决方案中的O (n log n) 或 O (m+n) 相比,整个步骤序列的运行时间几乎是线性的。可解释性。当有人问起时,您可以解释为什么将节点分组到某个社区中。 标签传播算法(Label Propagation)及Python实现 https://blog.csdn.net/zouxy09/article/details/49105265 标签传播(Label Propagation)算法详解 http://www.go60.top/view/89.html (1)为每个节点随机的指定一个自己特有的标签; (2)逐轮刷新所有节点的标签,直到所有节点的标签不再发生变化为止。对于每一轮刷新,节点标签的刷新规则如下: 对于某一个节点,考察其所有邻居节点的标签,并进行统计,将出现个数最多的那个标签赋值给当前节点。当个数最多的标签不唯一时,随机选择一个标签赋值给当前节点(选择标签值最大的那个)。 算法的每个迭代过程中节点的标签更新是基于它的邻接节点的标签 同步更新是指,节点x在t时刻的更新是基于邻接节点在t-1时刻的标签。异步更新是指,节点x在t时刻更新时,其部分邻接节点是t时刻更新的标签,还有部分的邻接节点是t-1时刻更新的标签。LPA算法在标签传播过程中采用的是同步更新,研究者们发现同步更新应用在二分结构网络中,容易出现标签震荡的现象。因此,之后的研究者大多采用异步更新策略来避免这种现象的出现 在网络中,每一个样本点只能属于一个社区,这样的问题称为非重叠社区划分 对于网络中的每一个节点,在初始阶段,Label Propagation 算法对每个节点初始化一个唯一的标签,在每次的迭代过程中,每个节点根据与其相连的节点所属的标签改变自己的标签,更改的原则是选择与其相连的节点中所属标签最多的社区标签为自己的社区标签,这便是标签传播的含义。随着社区标签不断传播,最终,连接紧密的节点将有共同的标签 Label Propagation算法利用网络自身的结构指导标签的传播过程,在这个过程中无需优化任何函数。在算法开始前我们不必知道社区的个数,随着算法的迭代,在最终的过程中,算法将自己决定社区的个数 在图 2 中所示的标签传播的过程中,对于 c 节点,在选择了与 a 节点一致的标签后,与 d 节点相邻的节点中,属于 a 社区的节点最多,因此 c 节点的标签也被设置成 a,这样的过程不断持续下去,直到所有可能聚集到一起的节点都具有了相同的社区标签,此时,图 2 中的所有节点的标签都变成了 a。在传播过程的最终,具有相同社区标签的节点被划到相同的社区中成为一个个独立的社区。 同步更新是指对于节点 x,在第 t 代时,根据其所有邻居节点在第 t-1 代时的社区标签,对其标签进行更新。即: 其中,Cx(t) 表示的是节点 x 在第 t 代时的社区标签。函数 f 表示的是取的参数节点中所有社区个数最大的社区。同步更新的方法存在一个问题,即对于一个二分或者近似二分的网络来说,这样的结构会导致标签的震荡,如图 3 所示。

前端框架及项目面试一

前端框架及项目面试聚焦Vue Reacet Webpack 为什么要做面试题 面试前的准备太复杂日积月累,总结思路 我们可否自己复习?答案是可以的,但是需要有足够的时间,有自学能力,需要有足够毅力。 如果跟着课程呢? 主要分为两点: 1.全面 全面的知识体系 大量的面试真题 完整的技术面试流程 2.高效 直击面试考点和重点,无需自己去扒那些详细的文档 会深入浅出讲解原理,无需自己去阅读那些源码,原理是不等于源码的 会解读项目的设计的思路,提炼项目的经验 注意 课程不能保证100%通过面试课程不能保证覆盖所有的面试题可以覆盖面试的流程 学习前提 了解javascript和ES6基本语法用过VUe REact Wbbpack 前端面试流程 知识点介绍 授课方式 体系为导向,知识点讲解+整体验证 讲解一个题,学会一类题 不是题题海整数,而是技巧和思路 注意 不是零基础入门课程 将原理,不讲源码 不是实战项目

win10使用命令提示符启用/关闭远程桌面

一、使用命令提示符启用远程桌面 要使用命令提示符启用远程桌面协议,请使用以下步骤: 1.打开开始。 2.搜索“命令提示符”,右键单击顶部结果,然后选择“以管理员身份运行”选项。 3.输入以下命令以启用远程桌面协议,然后按Enter键: reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f 4.(可选)键入以下命令以通过Windows防火墙启用远程桌面,然后按Enter: netsh advfirewall firewall set rule group=“remote desktop” new enable=Yes 完成这些步骤后,该协议将启用,就能够远程访问计算机了。 二、使用命令提示符禁用远程桌面 要使用命令提示符禁用远程桌面协议,请使用以下步骤: 1.打开开始。 2.搜索“命令提示符”,右键单击顶部结果,然后选择“以管理员身份运行”选项。 3.输入以下命令以禁用远程桌面协议,然后按Enter键: reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 1 /f 4.(可选)键入以下命令以通过Windows防火墙禁用远程桌面,然后按Enter: netsh advfirewall firewall set rule group=“remote desktop” new enable=No 完成这些步骤后,将禁用远程桌面服务,并且Windows防火墙端口将关闭。

查询数据库各个表的数据大小及数据量

***begin查询数据库各个表里的数据行数 select b.name,a.row_count from sys.dm_db_partition_stats a, sys.objects b where a.object_id=b.object_id and a.index_id<=1 and b.type=‘U’ ORDER BY row_count ****end 先创建表 create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20)) exec sp_MSforeachtable “insert into #t exec sp_spaceused ‘?’” 后查各个表的数据大小 select * from #t order by rows desc 二。 select a.name as ‘表名’,b.rows as ‘表数据行数’ from sysobjects a inner join sysindexes b on a.id = b.id where a.

linux 获取优盘信息

这段时间做liveCD优盘管控,需要对优盘信息进行注册管理,所以就要拿到优盘的指纹信息,一般就获取一个,如果有多个也会全部现实出来,如需对其操作可以借鉴我的另一篇博客 cat /proc/scsi/usb-storage/* 例子:

springMVC 解决启动页面时,控制器类System.out.println()输出乱码

一.测试代码: 二.不要单独启动页面: 单独启动页面的结果: 三.要使用tomcat启动: 前提是在web.xml中设置tomcat启动访问的页面,如下: <!--设置服务器启动访问的页面--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> 这样再访问页面index.jsp时,跳转到控制器类时,使用System.out.println()输出就不会出现乱码了:

socket通信 bind() 函数详解

一.函数解释 1.函数的作用: 服务端用于将把用于通信的地址和端口绑定到 socket 上。所以可以猜出,这个函数的参数应该包含:用于通信的 socket 和服务端的 IP 地址和端口号。ip地址和端口号是放在 socketaddr_in 结构体里面的。 2.函数的声明: int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); (1)参数 sockfd ,需要绑定的socket。 (2)参数 addr ,存放了服务端用于通信的地址和端口。 (3)参数 addrlen ,表示 addr 结构体的大小 (4)返回值:成功则返回0 ,失败返回-1,错误原因存于 errno 中。如果绑定的地址错误,或者端口已被占用,bind 函数一定会报错,否则一般不会返回错误。 3.服务端示例代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int main(int argc,char *argv[]) { if (argc!=2) { printf("Using:./server port\nExample:./server 5005\n\n"); return -1; } // 第1步:创建服务端的socket。 int listenfd; if ( (listenfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("

m.555lu.co list.php,CST 仿真色散曲线

【实例简介】 详细介绍周期性结构的色散曲线仿真,基于CST,但HFSS设置基本相同 smr.razavizadeh @ieee.org Dispersion diagram: CST Microwave Studio flow and Pierce Impedance can be seen in the folder ID Resulls In parameter sweep window, select"Edit" to view or modify the source code taex0e-red wacc 0r parameter sweep He, inrTtring Result match 二he水 A-c result of a perameter sweep of the rhese between the periodic bourdery-wall. :: pOwer =l0w, axa. electIc -LEld amol1-ud Start It ig recommeded to perform a aweer with phaae atena

www.tf.tt index.php,恶意软件分析 & URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...

META-INF/MANIFEST.MF 6zV4B#s |ggo*k META-INF/MYKEY.SF ?09,h? r{dMQ/V META-INF/MYKEY.RSA3hbUf c,0A[{ AndroidManifest.xml U[U]tW ]UUW] J|fs=$ m|*w~Oq~ assets/.appkey9b54048e4cf881d7PK assets/1111111111.png tEXtSoftware Adobe ImageReadyq "iTXtXML:com.adobe.xmp " id="W5M0MpCehiHzreSzNTczkc9d"?> <?xpacket end="r"?> L-%@FQ {aO/z[ assets/111122.png MiCCPPhotoshop ICC profile v/{LSCs k ;t;|rtu /^v^Y^ {`:>=e f~e8?# !MkF(nh (eJhv;@ 4NHy|V Ct:|uP GO1:0z ,x|zF !NE t$Q'D1 M*!"cK] /zst9[ pR`Ne/T MGq9&@Q [oqqqAH XpttDl SKnfS{~$ &MUYKd 1FR)d /GFqLn !pxp8m$k 05Yeg* $w"_W4U hb P8Yu Tz 6BR% #itM#o| :n:/:1kv ms~b zU[KO, assets/77.png IDATx^ r*:C]K (FZjc. fDK7A\

nginx php cgi.sock,nginx中unix:/tmp/php-cgi.sock错误解决解决

出现这种问题一般是因为/tmp/php-cgi.sock功能是负责流量最主要的特征就是unix socket比tcp快,下面来解决办法。 首先建立/tmp/-cgi.sock文件,然后将之改所有者改为www-data: #我直接改成nginx的用户,好像必须要属于nginx的用户组才能正常使用未验证 sudo chown www-data /tmp/php-cgi.sock 到nginx.conf,如果你用的是虚拟机,那么就到/etc/nginx/site-available里改相关文件: 修改: # fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/tmp/php-cgi.sock; 找到init.d/php-cgi(参考文章开关提到的文章): 修改: #DAEMON_OPTS=”-a 127.0.0.1 -p 9000 -C 1 -u www-data -f /usr/bin/php-cgi” DAEMON_OPTS=”-a 127.0.0.1 -s /tmp/php-cgi.sock -C 1 -u www-data -f /usr/bin/php-cgi” 然后分别重启nginx 和 spawn-fcgi即可,你的nginx效率就更高啦!:-)

php_archive not installed,PHP 编译问题PEAR package PHP_Archive not installed的解决

php 的编译时需要依赖pear package ,目前的问题错误"PEAR package PHP_Archive not installed",已经明显报出这个问题。 因此编译使用参数 --without-pear 将pear 屏蔽掉编译安装后,再进行安装;同时因为phar 属于pear的一个库 ,所以不将phar关闭掉,同时还会报这个错误, 同时需要使用 --disable-phar 编译参数. ./configure --without-pear --disable-phar make make install 成功编译安装完成后,再安装pear wget http://pear.php.net/go-pear.phar /usr/local/bin/php go-pear.phar linux中php项目无法发送邮件:PEAR mail package is not installed 发送邮件报错误:PEAR mail package is not installed的原因是linux中缺少PEAR mail组件, PEAR mail组件也就是PHP Pear Mail / SMT ... Getting and installing the PEAR package manager Windows After you have downloaded and installed PHP, you have to manually execute the batch file loc .

YOLOV5训练数据(火焰检测)

YoloV5火焰检测 一、YOLOV5 实现检测1.1 下载源码1.2 下载模型 二、YOLOV5训练数据集2.1 火焰数据集2.2 制作数据集2.3 修改文件2.3.1 修改数据集yaml文件2.3.2 修改网络参数的yaml文件2.3.3 修改train.py中的训练参数 2.4 开始训练模型 三、训练结果 一、YOLOV5 实现检测 1.1 下载源码 官方地址下载源码 YoloV5 1.2 下载模型 下载官方模型,官方提供预训练模型,下载地址为谷歌云盘 二、YOLOV5训练数据集 2.1 火焰数据集 实验数据集共有2059张具有标签的火焰图片。 数据集下载地址 其中Annotations文件里存放的是带标注的xml文件,Image中存放的是火焰图片。 2.2 制作数据集 使用脚本voc_label.py生成labels文件,train.txt以及test.txt。其中labels是从Annotations/xxx.xml中提取的不同图像的标注信息,并采用.txt的形式存储。 train.txt 和 test.txt中分别为训练图像的绝对位置。 voc_label.py # 缺陷坐标xml转txt import os import xml.etree.ElementTree as ET import os import random classes = ["fire"] # 输入类别名称,必须与xml标注名称一致 def convert(size, box): print(size, box) dw = 1. / size[0] dh = 1. / size[1] x = (box[0] + box[1]) / 2.

keil5打开cubeMX的工程文件时点击文件不显示并且程序卡退[已解决]

项目场景: : 在使用keil uvision5打开cubeMX导出的工程文件的时候,点击main.c时无法显示并且程序卡退,但是打开别的工程文件时正常; 问题描述: 原因分析: 导致程序卡退的原因是程序运行出现问题,而运行别的工程文件时能够正常执行,那么就是keil5缺少了执行cubeMX工程文件的的某些插件?链接库?文件? 找缺少哪一个文件太麻烦也没必要,最好的办法是卸载,重装看是否仍然出现相关的问题。 解决方案: 经过一番折腾(百度、询问)无果。 最后在**卸载重装软件**之后问题解决。。。 **所以是keil5缺少相关链接文件。。。**

解决ImportError: Bad git executable.

ImportError: Bad git executable. The git executable must be specified in one of the following ways: - be included in your $PATH - be set via $GIT_PYTHON_GIT_EXECUTABLE - explicitly set via git.refresh() All git commands will error until this is rectified. This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silence|s|none|n|0: for no warning or exception - warn|w|warning|1: for a printed warning - error|e|raise|r|2: for a raised exception Example: export GIT_PYTHON_REFRESH=quiet 解决方法:

c语言在linux中进行贪吃蛇小游戏

此次贪吃蛇小游戏的目的是使得我在Linux底下使用vi进行编写的 心得: 1.自己对linux中如何使用vi更加熟悉 如::wq yy pp dd u 等等 2.对c语言的指针,结构体,链表等更加的牢固 3.借此小项目也运用到多线程作为进入linux的深入学习打下坚实的基础 代码展示 #include<curses.h> #include<stdlib.h> #define UP 1 //1与-1的目的是使用abs()函数防止一上一下 #define DOWN -1 #define LEFT 2 #define RIGHT -2 struct Snake{ //创建一个结构体 int hang; int lie; struct Snake *next; }; struct Snake *head = NULL; //全局定义一个头和尾 struct Snake *tail= NULL; int key; //定义一个按键的整形变量 int dir;//定义一个方向的整形变量 struct Snake food; void initFood(){ //定义一个食物## 可以随机生成 int x = rand()%19; int y = rand()%19; food.hang = x; food.

Vue中的Provide/Inject 实现响应式数据

Vue中, Provide/Inject实现了跨组件的通信。但可惜数据并不是响应式的(设计如此)。 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的 以上引用自官网 可能之所以这样设计,是为了避免数据的混乱。就如同props不能被子组件直接修改一样。 从代码角度讲 data() { return { foo: 'foo', bar: 'bar' baz: {hello: 'world'} } }, provide() { return { foo: this.foo, bar: this.bar, } }, 当我们以如上的形式书写代码的时候,其实相当于对this.foo和this.baz做了一层浅拷贝,固当子组件inject的时候已经丢失了响应式功能了。但由于仅仅是浅拷贝,所以响应式对象的属性仍旧是响应式的。 // 父组件 provide() { return { baz: this.baz, } }, // 子组件baz.hello仍旧是响应式的。 inject: ['baz'] 依照这个思路,如果我们希望整个数据都是响应式的。那么可以通过一下的方法实现: // 父组件: { provide() { return { reactiveMsg: () => this.msg } }, } // 子组件: { inject: ['reactiveMsg'], computed: { computedProperty() { return this.

php include怎么用,include()使用方法

php include函数应该是我们最常用的方法,include() 语句包含并运行指定文件。但是就是因为这个我们可能忽略了他的一些其他用法,本人因为工作需要又重新看了一遍,在此做一下简要记录: 1.include与require简单区别 当include所包含的文件不存在时,他只是产生一个警告,但是脚本会继续执行。 而require引用的文件如果不存在的时候,就会提示错误,并终止脚本运行。 2.被包含文件内的变量的变量范围 当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。不过所有在包含文件中定义的函数和类都具有全局作用域。 当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。 3.include()返回值 如果取得include里面的变量值,需要在include引用的文件里加上 return 例如: 文件return.php $var='ok'; return $var; ?> if( include('return.php')=='ok' ) { ... } if不执行里面的,因为include('return.php')值为1 if( (include 'return.php')=='ok' ) { ... } if可以执行里面的 所以如果用include进行条件比较,需要这样(include 'return.php') 4. 使用输出缓冲来将 PHP 文件包含入一个字符串 $string = get_include_contents('somefile.php'); function get_include_contents($filename) { if (is_file($filename)) {ob_start(); include $filename;$contents = ob_get_contents();ob_end_clean(); return $contents; } return false;

计算机网络--七层结构(一)物理层、数据链路层详解

一、简介 7层是指OSI七层协议模型,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。 在TCP/IP协议中将应用层、表示层、会话层合并为应用层又将数据链路层、物理层合并为网络接口层所以为四层结构 常说的五层模型只是OSI和TCP/IP的综合,并没有将数据链路层和物理层合并,实际应用还是TCP/IP的四层结构 引用一行网上的数据交互图 二、各层详解 1.物理层 简介: OSI模型中最低的一层,位于OSI参考模型的最底层,它直接面向实际承担数据传输的物理媒体(即通信通道),物理层的传输单位为比特(bit),即一个二进制位(0或1)。实际的比特传输必须依赖于传输设备和物理媒体。但是需要注意的一点是,物理层并不是指具体的物理设备,也不是指用来传输信息的物理媒体,指的是传输原始比特流的物理连接。对于数字应用来说,我们只需要两种物理信号来分别表示0和1,比如用高电压表示1,低电压表示0,就构成了简单的物理层协议 1.1主要任务: 确定与传输媒体的接口的一些特性,即 机械特性、电气特性、功能特性、过程特性 机械特性:接口形状、大小、引线数量等,通俗讲也就是网线的水晶头的设计等一些规定 电气特性:规定电压范围(-5V~+5V)等 在网线中传输时所用的电压范围 过程特性:也称规程特性 规定建立连接时各个相关部件的工作步骤 1.2三种信息传输的方式 信道一般表示向一个方向传送信息的媒体,所以平常说的通信线路往往包含一条发送信息的信道和一条接受信息的信道 1)单工通信:也就是单向通信,只能有一个方向的通信而没有反方向的交互,例:生活中的无线广播、有线广播等 2)半双工通信:也就是能双向通信,但是不能同时通信,一方在发送数据,另一方必须接受数据,等待对方发完,然后自己才能发,例如,电视里面军方的对讲机,都是只有等待一方说完话,另外一方才能说话。 3)全双工通信:相对于半双工通信来讲,就是能同时通信且双向,例如,电话。 1.3信道复用技术 复用:通信线路的架设费用较高,需要尽可能地充分使用每个信道的容量,尽可能不重复建设通信线路;把一个物理信道按一定的机制划分为多个互不干扰互不影响的逻辑信道,每个逻辑信道各自为一个通信过程服务,每个逻辑信道均占用物理信道的一部分通信容量。通过下图,就可以很容易知道什么是复用,就是同时公用一条信道来进行传输信息。信道复用技术:频分复用、时分复用、统计时分复用、波分复用, (1)频分复用 用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带(这个是一个范围,例如下图)所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率),采用频带传输技术的模拟通信系统,如:广播电视系统、有线电视系统、载波电话通信、调频立体声广播系统等;为避免相邻子频带之间的相互串扰影响,一般在两个相邻的子频带之间流出一部分空白频带(保护频带)频分复用技术的特点是所有子信道传输的信号以并行的方式工作,每一路信号传输时可不考虑传输时延,因而频分复用技术取得了非常广泛的应用 (2)时分复用 按时间轮流分配带宽资源给不同的用户,每个用户只在分配的时间里使用线路传输数据。 通俗来讲:就是每个用户都有自己的时间段来传输数据,没到自己时间就需要等待,直到属于自己的传输时间段的到来,周期性的周转 应用:电话、ATM等; 特点:在信道中,每个资源都有先后顺序,并且不会乱,一直是按照一定的顺序传输数据。 优点:不存在保护频带,对频带利用率高 缺点:计算机数据的突发性质,用户对分配的子信道的利用率不高,因为不知道什么时候通道就会发送数据,可能别的通道都不发数据,就一个通道需要发送,但也还是要等待一定的时间,即使信道是空的。 (3)波分复用 波分复用就是光的频分复用,在光通信领域,人们习惯按波长而不是按频率来命名。因此,所谓的波分复用(WDM,Wavelength Division Multiplexing)其本质上也是频分复用而已,主要应用光纤 (4)码分复用(CDM) 常用的名词是码分多址 CDMA (Code Division Multiple Access)。 码分复用CDM(Code Division Multiplexing)是各用户使用经过特殊挑选的不同码型,在同样的时间使用同样的频带进行通信,但彼此不会造成干扰。 这些码有个特殊的数学性质,那就是每个码自己的自相关函数的值很高,而不同码之间的互相关函数的值很小,暂且理解求相关函数的值为一种数学运算 这种系统发送的信号有很强的抗干扰能力,,其频谱类似于白噪声,不易被敌人发现。 数据链路层 数据链路层位于第二层主要是在物理层提供的服务基础上向网络层提供服务,工作在数据链路层的设备与组件主要有网卡、网桥和交换机。 主要功能: 1.数据链路层的建立,维护与拆除 2.帧包装,帧传输,帧同步,数据链路层传输的数据单位为帧 3.物理层在传输过程中很容易受到环境干扰,进而产生错误但物理层无法察觉:1 可能会变成 0 而 0 也可能变成 1,因此数据链路层负责起“差错监测”的工作。并采用重传的方法进行帧的差错恢复 4.流量控制确保中间传输设备的稳定及收发双方传输速率的匹配。 帧的封装过程: 数据链路层就是在ip数据报的前面和末尾加了一个首部和尾部来代表ip数据包的开始和结束,首部和尾部都是由8位二进制数表示的,可以一样也可以不一样。 透明传输 有一个这样的问题, 在ip数据包中如果有一个跟帧尾部一样的8位二进制数,则会提前结束接受数据包,这样数据就被破坏了。 解决:通过在特殊字符前面增加一个转义字符 ESC, 就可以解决上面所遇到的问题,在接收端,将数据包中所有ESC的字符删除,遇到两个ESC的,就删除第一个,这样一开始传输的时候有ESC转义字符,接受完就没了,所以说的是透明传输

php fpm socket 权限,解决因php-fpm socket权限错误导致nginx 502错误的一个问题

利用upgrade_php.sh脚本升级了下lnmp中的php到5.3.29,然后发现所有php页面都502错误了,经过检查日志发现,nginx尝试去访问php-fpm的sock,我这里是用的/tmp/php-fpm.sock,但是php-fpm的日志并没有任何记录, ls -alh /tmp/php-fpm.sock 后发现,显示如下: srw------- 1 root root 0 12月 2 22:17 /tmp/php-cgi.sock 感觉似乎有那么点不对劲,为嘛是root,而且,只有root可读可写。 检查php-fpm的配置文件发现如下: [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock user = www group = www pm = dynamic pm.max_children = 20 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 6 request_terminate_timeout = 100 查看相关文档发现,没有设置listen的所有者和文件权限,修改后如下(修改部分见高亮部分): [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock

初学Springboot(二)

这回来讲一下Springboot一个常用依赖以及全局配置文件的使用 本次讲到的点: 1.热部署 2.全局配置文件(properties,yaml,yml) 2.1执行优先级以及格式 3.自定义全局配置文件 热部署 热部署只需要三步走 一.在pom.xml引入依赖(这个热部署依赖代码尽量记住,以后面试可能会考到) <!-- 热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> 二,勾选自动生成项目选项 这里打开Settings也可以采用快捷键Ctrl+Alt+s, 三.Ctrl+Alt+Shift+/ 打开Maintenance面板 这里打勾后缀为running选项 我们在进行搜索的时候可以直接在键盘输入run会自动搜索出来这个选项 这样我们的热部署就设置完成了 热部署的好处 1.不用手动重新启动启动类,更加便捷 2.对后台代码修改时,可以时刻更新,不用重新启动服务器,只需要刷新页面 其实就是在我们进行代码修改时,项目会重新再次启动一次启动类,实时更新网页 全局配置文件properties以及yaml以及yml 我们项目中,全局配置文件起到的作用有很多,比如 1.绑定各种数据库 2.改端口号,虚拟路径 3.进行查看开源项目中,也可以先看全局配置文件,将其中的用户信息改成本地的,比如数据库密码以及用户名 4.springboot能够自动加载配置文件 个人见解:其实yaml和yml一样格式的,后缀名不同而已 我们先来说说properties 代码例子 #修改地址 server.address=80 #修改端口号 server.port=8443 #连接数据库地址 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.config.additional-location= spring.config.location= spring.config.name=application 我们来试试修改端口号(我们默认是8080) 端口号已经发生改变 接下来我们试试在全局配置中设置对象类型信息 继续在properties中添加 #对象类型 person.id=1 person.name=lisi person.hobby=play,read,sleep person.family=father,mother person.map.k1=v1 person.map.k2=v2 person.pet.type=dog person.pet.name=piti 然后创建对应的一个实体类Person 我们创建一个domain文件夹用于存放实体类 在其中创建Person实体类 这里说一个小技巧: 我们使用的如果是idea开发,我们在写了对应的属性后 键盘按下Alt+Insert ,可以自动生成get跟set方法还有tosring 这里要提一点,我们这边的实体类目前不需要Consturctor @Component //生成当前类的实体类对象存到IOC容器中 @ConfigurationProperties(prefix = "

php拼接where in,php – 为PostgreSQL中的WHERE IN子句绑定多个行和列

所以我想准备一个类似的查询: SELECT id FROM users WHERE (branch, cid) IN $1; 然后绑定一个可变长度的行集,如((‘a’,’b’),(‘c’,’d’)). 换句话说,像: pg_prepare($users, 'users_query', 'SELECT id FROM users WHERE (branch, cid) IN $1'); $result = pg_execute($users, 'users_query', array("(('a','b'),('c','d'))"); 我需要拆分这两个的原因是因为我想要准备一次,然后以尽可能少的开销运行它多次. 解决方法: 只使用两个记录进行顺序扫描的事实毫无意义.对于如此微小的集合,索引永远不会比seqential扫描快.我构建了一个类似于你的小样本表,并用一百万行填充它,以下查询样式始终如一地生成好的计划和快速执行: prepare s4 as select id from users join (select * from (values ($1,$2),($3,$4)) as v(branch, cid)) as p using (branch, cid); explain analyze execute s4('b11','c11','b1234','c1234'); QUERY PLAN ------------------------------------------------------------------------------------------------------------------ Nested Loop (cost=0.00..16.65 rows=1 width=4) (actual time=0.199..0.234 rows=2 loops=1) -> Values Scan on "

hello world !

# include <stdio.h> int main (void) { printf("hello world !\n"); return 0 ; } CodeBlock上面的运行结果: // 第一次见到这段代码是上一年疫情在家大一下学期的时候,现在看来还没有一年之久,第一次见它的时候,很懵。现在看来是那么的亲切。我决定把自己学习路上的点滴记录在CSDN上面,第一个一定就是hello world ! 了。上一学期,就是大二的上学期,又学习了数据结构,学校的教学几乎完全没有用,疫情在家的课程说是0一点不为过。我的计算机知识全部都是自己上一学期自学看书还有B站上面郝斌老师的学习到的,有些代码的问题,请教了学校的学长,帮助非常大,受益匪浅。 大二上学期在学校真的是非常忙,课程很多,学习的道路并不容易。在刚刚过完的寒假,从头和郝斌老师学了。函数已经学完,指针还没学到。看郝斌老师的课,学到了许多语法的知识,还有代码的规范。因为马上的四月中旬我要参加蓝桥杯单片机比赛,在网上并没有太多相关的资料,而且网上的代码语法之类的也很不规范,我还是把它放在网上,作为一个公共资源吧!我会分一个专栏,专门存放蓝桥杯单片机stc15f2k60s2的代码。我接触的时间都不是特别长的,所以应该虚心多多学习。 B站郝斌C语言:https://www.bilibili.com/video/BV1os411h77o

GitHub 和 Gitee 树形展示插件

GitHub 和 Gitee 树形展示插件 1、GitHub 树形展示插件 官网地址:Octotree;插件名称:Octotree - GitHub code tree 插件效果图 2、Gitee 树形展示插件 GiteeTree 插件源码:开源中国 / GiteeTree;插件名称:GitCodeTree 在 Gitee 上下载 .zip 插件 插件效果图

数据库登录问题

问题: 标题: 连接到服务器 无法连接到 APRILCOMPUTERHS。 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 2) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=2&LinkId=20476 系统找不到指定的文件。 解决方案: 参考博文链接如下:未找到或无法访问服务器 请验证实例名称是否正确并且SQL Server 已配置为允许远程连接_关关x雎鸠的博客-CSDN博客 结果:已解决,可连接

运放的输入电容

https://www.zhihu.com/question/46175336 http://bbs.21dianyuan.com/thread-198056-1-1.html https://www.sohu.com/a/331858713_120012815 https://blog.csdn.net/qq_29506411/article/details/70444462 https://www.eet-china.com/mp/a13105.html

在php中起什么作用,PHP中的::是什么意思?

推荐手册:php完全自学手册 在PHP中双冒号(::)操作符是一种范围解析操作符,又作用域限定操作符。它是对类中的方法的静态引用,可以访问静态、const和类中重写的属性与方法。 php调用类的内部静态成员,或者是类之间调用就要用两个冒号(::)。 说明:“::”符号可以认为是与C语言中的“.”相似的,而它更像C++中(Perl)的::类范围操作符。 示例:class A{ static $count = 0; static function haha(){ // } function diaoyoug(){ self::haha(); self::$count; }}a.b.c; /* C语言中的 */a::b::c(); // C++ 中的函数$a::b::c; # Perl 5中的标量 双冒号(::)操作符在类定义外使用的话,需使用类名调用。在PHP 5.3.0,可以使用变量代替类名。 示例:在类定义外部使用双冒号(::)操作符<?phpclass Fruit { const CONST_VALUE = 'Fruit Color';} class Apple extends Fruit{ public static $color = 'Red'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$color . "\n"; }} Apple::doubleColon();?> 输出:Fruit Color Red相关文章推荐: 1.php中双冒号::范围解析操作符的含义介绍 2.php里的双冒号范围解析操作符与箭头 -> 操作符的区别

AndroidStudio 关于安卓项目的复制拷贝 - 防止影响源文件

AndroidStudio 关于安卓项目的复制拷贝 - 防止影响源文件 1.在文件管理器中复制粘贴需要拷贝的对象,重命名为你想要的名字2. Import 刚才复制的重命名过的文件(不要open!)3.进入应用结构,修改项目ID3. 清除project4.Refacor文件名5.修改values 经常会遇到想备份一个安卓项目,然后在他的克隆上进行添加功能,但是有时候一运行安装就把之前的覆盖了,这个时候要如何处理。 1.在文件管理器中复制粘贴需要拷贝的对象,重命名为你想要的名字 2. Import 刚才复制的重命名过的文件(不要open!) 3.进入应用结构,修改项目ID Project Structure 》 Modules 》Default Config 》 Application ID 可以将ID改为之前重命名文件夹的名字 确定后可以看到Sync勾都绿了 3. 清除project 先后点击Clean Project和Rebuild Project 4.Refacor文件名 项目ID虽然修改好了,但是文件名还是原来的 这个时候我们右键主空间文件,找到重命名(快捷键 shift + F6) 会跳出一个warining框,可以看到目录名其实已经是修改后的task2了,点击Rename package 将名字修改为你需要的就行了(我是把task1改为task2,图中为修改后),点击Refactor 点击Do Refactor,可以看到文件夹名字已经变了 5.修改values res 》 values 》 strings ,把app_name也更新一下(我是把1改城2,图中为改之前) 到这里修改都OK了,重新rebuild一下 最后跑一下看一下是不是都OK吧

java lastmodified转化,Java setLastModified()修改文件最后的修改日期

Java setLastModified()修改文件最后的修改日期 以下实例演示了使用 File 类的 fileToChange.lastModified() 和 fileToChange setLastModified() 方法来修改文件最后的修改日期: Main.java 文件 import java.io.File; import java.util.Date; public class Main { public static void main(String[] args) throws Exception { File fileToChange = new File("C:/myjavafile.txt"); fileToChange.createNewFile(); Date filetime = new Date(fileToChange.lastModified()); System.out.println(filetime.toString()); System.out.println(fileToChange.setLastModified(System.currentTimeMillis())); filetime = new Date(fileToChange.lastModified()); System.out.println(filetime.toString()); } } 以上代码运行输出结果为: Sat Mar 21 22:00:48 CST 2015 true Fri Apr 10 11:09:19 CST 2015 本文网址:http://www.santii.com/java/java-files-io_setlastmodified.html

Windows获取系统的时区、系统语言、时间戳等信息

// 获取系统的时区、系统语言、时间戳等信息 static bool GetOsExtraInfo(std::string& osTimeZone, std::string& osSysLanguage, std::string& osTimeStamp) { // 系统时区信息 TIME_ZONE_INFORMATION tmp; ::GetTimeZoneInformation(&tmp); int tzRet = tmp.Bias / (-60); osTimeZone = std::to_string(tzRet); // 示例: 东8区返回的是 8, 西8区返回的是 -8 // 系统语言信息 LCID localeId = ::GetUserDefaultLCID(); unsigned long lang = localeId; osSysLanguage = std::to_string(lang); // 系统时间戳信息(1970到当前的秒数) std::chrono::system_clock::time_point nowTime = std::chrono::system_clock::now(); time_t tt; tt = std::chrono::system_clock::to_time_t(nowTime); long sec = tt; osTimeStamp = std::to_string(sec); return true; } // 时区、系统语言信息是采用的Windows api获取

vue生命周期详解

Vue生命周期 生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期 创建期间的生命周期函数: beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性 created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板 beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中 mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示 运行期间的生命周期函数: beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点 updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重 新渲染好了! 销毁期间的生命周期函数: beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。 destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <title>Document</title> </head> <body> <div id="app"> <button @click='message="改变啦"'>变变变</button> <h3 id="h3">{{ message }}</h3> </div> </body> <script> var app= new Vue({ el:'#app', data:{ message:'hello' }, beforeCreate() { // 实例完全被创建出来之前,会执行它 // console.

php源码 时间慢8小时 etc gmt,php程序时间相差8个小时的解决办法

php程序时间相差8个小时的解决办法 在使用国外主机或者本地自己配置安装的php环境中,由于默认设置的是国外的时区或者说是系统默认的时区。date函数返回的时间值和北京当地时间总是相差8小时。 解决方案是正确配置PHP的时区环境。 PHP的时区环境通过一组特定的字符串指定。最省事的办法是在php.ini文件中找到date.timezone一行,默认情况下这一行是被注释掉的,删掉前面的分号即可启用。对于中国大陆,可把它设置为Etc/GMT-8(或Asia/Sanghai、Asia/Chongqing、Asia/Urumqi、PRC)。接着再重启web服务器即可。 如果由于某种原因不能修改php.ini,可以在PHP程序开头用date_default_timezone_set()设置。例如,可以在使用date函数前先执行代码 date_default_timezone_set('Etc/GMT-8'); 我个人认为还是采用date_default_timezone_set函数比较好。一是通用性强,二来如果你的网站是面向全球用户的,这种方法可以让每个用户都能设置他所在的时区。 最后需要说明的是对于Etc/GMT这种写法。中国大陆采用的是东八区的时间,一般情况下都是记作+8,但PHP里来了个大反个儿,要写成Etc/GMT-8;相反地,如果你的时区是西2区,在PHP里就要写成Etc/GMT+2。这一点和常识不同,尤其要注意。 本文原创发布php中文网,转载请注明出处,感谢您的尊重!

clickhouse php,写了一个 clickhouse php tcp客户端

最近在one框架 增加对 clickhouse 数据库的支持,没有找到一个满意的客户端。去clickhouse 官方看了居然没有客户端的协议文档,但是还是挡不住我造轮子热情,根据官方c++的代码连蒙带猜,写出来了。目前还有部分类型不支持,后续完善…… 仓库地址 安装 composer require lizhichao/one-ck 支持类型[x] UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64 [x] Float32, Float64 [x] Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S) [x] String [x] FixedString(N) [x] UUID [x] Date [x] Datetime [x] Datetime64 [x] Nullable(T) [x] IPv4 [x] IPv6 [x] Array(T) [ ] Tuple(T) [ ] Enum (can use LowCardinality instead) Demouse OneCk\Client; use OneCk\Types; //default //$ck = new Client('tcp://127.0.0.1:9000', 'default', '', 'default');

clickhouse php,php 链接 clickhouse

1 <?php 2 //var_dump(is_dir("./sjignen")); 3 //var_dump(file_exists(__DIR__."/day4.php")); 4 $basePath = "E:/php_project/sangfor_ready/"; 5 6 function echo_all_path($pathName) 7 { 8 if (is_dir($pathName)) 9 { 10 11 $handle = opendir($pathName); 12 while ($line = readdir($handle)) 13 { 14 // echo "查找中"; 15 // echo $line."\n"; 16 if ($line!="." && $line !="..") 17 { 18 echo "当前是目录:".$pathName.$line."\n"; 19 echo_all_path($pathName.$line."/"); 20 } 21 22 } 23 closedir($handle); 24 } 25 else 26 { 27 echo "

clickhouse php,OrzClick: 国庆写个 ClickHouse 客户端

起因 我看 ClickHouse 有 C++ 客户端(clickhouse-cpp),我又用过 PHP-CPP 写扩展,于是就在国庆写了 OrzClick ,一个 PHP 用的 ClickHouse 客户端。 比较尴尬的是,我写到一半才发现 SeasClick,它也是 clickhouse-cpp 的绑定, 而且是 C 写的,感觉用 PHP-CPP 我就已经输了一半呀,所以我的小目标就是性能超越 SeasClick 。 性能测试 Select 结果: 使用 PDO 访问 ClickHouse 的 MySQL 接口,查询小量数据性能更好 小量数据时,OrzClick 和 SeasClick 性能相近,数据大时 OrzClick > SeasClick > MySQL 接口 Insert 结果: OrzClick-Indexed 对标的是 SeasClick,API 最相近(可看代码:1 2),算是达到了小目标 SeasClick 和 OrzClick 都有提高插入性能的 API,SeasClick 的 startWrite-write-endWrite 性能非常好(图上的 SeasClick-Block),OrzClick 的 InsertColumnar 只有数据量大于 5 千时才能超过它(图上的 OrzClick-Columnar) 哪个 clickhouse-cpp ?

手机拍摄界面的各种符合如何使用-以小米10为例

小米10相机符号介绍 专业模式测光方式峰值对焦曝光反馈光焦分离WB 白平衡F 对焦S 快门时间EV 曝光补偿ISO 感光度镜头 专业模式 测光方式 平均测光: 对画面的全部区域进行加权平均,适用于光照均匀的画面。中央重点测光:主要侧重于画面的中央区域,适用于主体位于画面中央。点测光: 仅对测光点覆盖的区域测光,适用于精确控制画面明暗的拍摄。 峰值对焦 开启后,对焦最清晰的区域轮廓将通过红色高亮进行显示,峰值像素最密集的区域即为画面焦点。 曝光反馈 实时显示画面过曝(红色区域)和欠曝(蓝色区域)情况,辅助调整曝光值。 峰值对焦和曝光反馈二选一。 光焦分离 在预览区域,拖动对焦测光换将其分离,可分别调整对焦和测光区域。 WB 白平衡 包含自动、预设(白炽灯、日光、荧光灯、阴天)和用户自订(色温2000-8000k)。 F 对焦 包含自动对焦和手动对焦,通过滑动数值进行手动对焦,随着数值增大,焦点将向距离相机更远的方向移动。 S 快门时间 包含自动快门时间和手动快门时间。缩短快门时间,画面变暗,反之则变亮。 EV 曝光补偿 用于调整曝光补偿值以使画面更亮或更暗。 ISO 感光度 包含自动感光和手动感光。更高的感光度可能会带来更多的噪点。 镜头 支持收到镜头切换,包含 WIDE (广角镜头)、UW(超广角镜头) 、MACRO(微距镜头)。

快速排序(讲解+动图直观过程)

快速排序 比冒泡排序法更快的排序方法:快速排序` 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。(一般为了方便通常取第一个) 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数 简言之:挖坑 + 分治 实现过程(第一部分): ( i从前寻找比基准数大的,j从后寻找小的) 分成两个区间重复上面的过程。 总结: 1.i =str; j = end; 将基准数挖出形成第一个坑a[i]。 2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。 注意: 为了加强快速性,我们选取数组中间的数为基准数,与第一个数交换,然后完成上述过程。 代码如下: #include<iostream> #include<stdlib.h> using namespace std; void Quick(int N[], int l, int r) //快速排序 { if (l >= r) return; int i = l, j = r; int k = N[(i + j) / 2]; N[(i + j) / 2] = N[i]; while (i < j){ while (i < j){ if (N[j] < k){ N[i++] = N[j]; break; } j--; } while (i < j){ if (N[i] > k){ N[j--] = N[i]; } i++; } } N[i] = k; Quick(N, l, i - 1); Quick(N, i + 1, r); } int main() { int n; //n个数 cin >> n; int *N=new int[n]; for(int i=0;i<n;i++) {//填数 cin >> N[i]; } Quick(N,0,n-1); for(int i=0;i<n;i++) { cout << N[i] << "

Hexo 部署到 Gitee

Hexo 部署到 Gitee 文章目录 Hexo 部署到 Gitee1. Gitee 创建仓库2. 修改 Hexo 配置文件3. 生成/添加 SSH 公钥3.1 生成 SSH 公钥3.2 将公钥添加到 Gitee3.3 验证公钥添加结果 4. 生成 & 部署 Hexo5. 在 Gitee 上开通/更新 Git Pages 服务6. 浏览 Hexo 页面7. 不是Bug的Bug 关于 Hexo 项目的创建过程,请参考之前的文章基于黑群晖 NAS 搭建 Hexo 博客系统。虽然这篇文章是基于黑群晖 NAS 写的,但是在其他操作系统的实现思路差不多。 1. Gitee 创建仓库 登录 Gitee,如果没有账号就先创建个账号。 创建仓库 进入主页之后,点击页面右上角的+号,然后选择新建仓库 配置仓库信息 记录仓库地址,之后会用到 2. 修改 Hexo 配置文件 修改 Hexo 工程目录下的配置文件_config.yml,在文件的最下面,找到deploy字段,配置成如下形式: type和branch没什么好说的,repo后面的值就是之前创建的仓库的地址。 3. 生成/添加 SSH 公钥 3.1 生成 SSH 公钥 Gitee 提供了基于SSH协议的Git服务,在使用SSH协议访问仓库仓库之前,需要先配置好账户/仓库的SSH公钥。

Springboot + Mybatis +Mybatis-plus整合

之前使用了spirngboot整合mybatis持久层框架,为了使开发更为便捷有引入了Mpbatis-Plus,同Mybatis一起整合到springboot。 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 SpringBoot + Mybatis + MP整合步骤 使用SpringBoot将进一步的简化MP的整合,需要注意的是,由于使用SpringBoot需要继承parent。 一、创建数据库以及表 ① 创建数据库 ② 创建表 二、创建工程 三 、导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <groupId>cn.itcast.mp</groupId> <artifactId>itcast-mp-springboot</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--springboot起步依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!--测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--lombok简化代码的工具包,注意:使用lombok必须保证idea安装了lombok插件并且同时引入了lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--mybatis-plus的springboot支持--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <!

3.Dockerfile

dockerfile的命令都是大写的,比如:FROM、RUN等 一条指令构建一层, 创建一个新的容器 3.1.FROM基础镜像 必须是第一条指令 FROM nginx服务镜像 FROM ubuntu 基础的操作系统镜像 Scratch空白镜像 FROM scratch 不以任何镜像为基础 3.2.COPY复制文件到容器中 COPY ./test test 容器中当前路径是/ 等价于COPY ./test /test 3.3.RUN执行命令 新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。 Shell格式 RUN echo ‘ Hello, Docker!’ > /usr/share/nginx/html/index.html #注释 Shell命令后面可以加注释, 必须空格隔开 Exec格式 RUN [“可执行文件”, “参数1”, “参数2”] 2层镜像, 增加了构建部署的时间 FROM nginx RUN #注释 RUN echo ‘ Hello, Docker!’ > /usr/share/nginx/html/index.html #行尾注释 简化成1层镜像 FROM nginx RUN #注释 RUN echo ‘ Hello, Docker!’ > /usr/share/nginx/html/index.html #行尾注释 3.

Aandroid studio复制工程并对包进行重命名

前因: 在课程实验的步步进阶中,有些demo会对上一个工程进行复用,在此基础上进行加工,代码量少的当然还是Ctrl + C | V简单,本人复制多次实在忍受不了,怎么能当“CV”呢? 步骤: 复制文件夹,重命名,注意不能有中文,会报错 打开as,导入(Open)外部包。(可以发现这时候包名并没有改变) 修改5处 settings.gradle的rootProject.nameapp/build.gradle的applicationId app/src/main/AndroidManifest.xml 里的package,label引用资源res下的string values/strings.xml 下string标签的name rename java目录下的文件夹 选中目录,快捷键shift + F6 选Rename directory即可修改

基于keras_bert使用CNN、LSTM、BiLSTM进行文本分类

数据集:数据集 选择了其中的10个类别 ##train.py ''' 导入所需要的库 ''' from keras_bert import load_trained_model_from_checkpoint, Tokenizer from keras.layers import Input, Dense, LSTM, Conv1D, Concatenate,MaxPool1D,Flatten,Dropout,GlobalMaxPooling1D,Bidirectional,Lambda from keras.models import Model from keras.optimizers import Adam,RMSprop from keras.utils.np_utils import to_categorical import codecs import numpy as np from random import shuffle from sklearn.preprocessing import LabelEncoder from keras.preprocessing import sequence from keras.engine import Layer from keras.callbacks import * ''' bert相关文件路径 ''' maxlen = 128 # config_path = "chinese_L-12_H-768_A-12\\bert_config.json" checkpoint_path = "

UDP实现消息发送

UDP实现消息发送 发送端 package com.caster.IP.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; //不需要连接服务器 public class UdpClientDemo01 { public static void main(String[] args) throws Exception{ //1.建立一个Socket DatagramSocket socket = new DatagramSocket(); //2.建立包 String msg = "你好"; String msg1 = "为什么收不到字符"; //发送给谁 InetAddress address = InetAddress.getByName("localhost"); int port = 9090; //数据 长度 ip 端口 DatagramPacket packet1 = new DatagramPacket(msg.getBytes(),0,address,port); DatagramPacket packet2 = new DatagramPacket(msg1.getBytes(),0,address,port); //3.发送包 socket.send(packet1); socket.send(packet2); //4.关闭流 socket.close(); } } 接收端 package com.

Android路由框架 - ARouter使用(一) Activity跳转

ARouter是阿里开源的一款路由框架,他可以方便的去跳转界面,并自动注入参数到目标页面中,处理组件化模式开发,Module间的跳转及通信。 ARoutter-Github地址 在组件化模式开发时,以前应该会遇到过需要跳转其他模块的Activity或Service,去引用其他module就会造成引用非常乱,还会出现循环引用 想跳转就需要隐式跳转,而且要配置Manifest和Intent跳转,难以维护,代码混乱。 那么使用ARouter就可以处理这些问题,首先配置gradle引用 //api api 'com.alibaba:arouter-api:1.3.1' //注解处理器(每个需要配置的Module都要引用,否则会匹配不到该Module下的route) annotationProcessor 'com.alibaba:arouter-compiler:1.1.4' 然后在defaultConfig下配置 //注解预处理时需要的字段,每个需要配置的Module都要配置,否则匹配不到该Module下的Route javaCompileOptions { annotationProcessorOptions { arguments = [moduleName :project.getName() ] } } 配置好了以后进行初始化 public class MyApplication extends Application { //是否是调试模式 private static final boolean isDebug = true; @Override public void onCreate() { super.onCreate(); if(isDebug) { //开启日志 ARouter.openLog(); //开始调试模式,如果在DEBUG下不设置的话 在移动修改某些类或配置会出问题,因为有些东西判断版本号变更使用了缓存,开启的话每次会重新获取 ARouter.openDebug(); } //ARouter 初始化 ARouter.init(this); } } 有MainActivity和SimpleActivity,想要实现跳转的话,需要先配置路由 (可将path 配置到一个常量类中进行管理维护) ⚠️ path 最少2级 /xxx/xxx @Route(path = "/app/MainActivity") public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.

BP神经网络python代码实现#超详细-小白快速入门

注释为当前行的注释或者是下一行的注释。 import numpy as np#科学计算的基础包 # 定义sigmoid函数及其求导,deriv=False时进行前向传播的运算,deriv=True进行反向传播的运算 # 即当derive为假时,不计算导数,反之计算,控制传播方向。 def sigmoid(x, deriv=False): if (deriv == True):# 求导 return x * (1 - x)#这里x=1/(1+exp(-x)),是sigmoid函数求导后的结果根据前向传播,x=sigmoid(x),求导需要(sigmoid(x)',e,而这里的return语句中的x替换为sigmoid(x)与求导等价 return 1 / (1 + np.exp(-x)) #前向传播 #输入4个样本,每个样本三个特征值 X = np.array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]]) print(X.shape) #每一行对应的类用0,1表示 y = np.array([[0, 1, 1, 0]]).T print(y.shape) # 初始化权重weight01的维数与样本特征与神经元的个数有关,random初始化的值在(0,1)的半开区间内,乘2减1后控制w0的值在(-1.+1)区间上 weight01 = 2 * np.random.random((3, 4)) - 1#生成生成3行 4列的随机浮点数,w01左边连3个特征,右边连4个神经元,浮点数范围:(0,1) weight12 = 2 * np.

docker-compose启动hyperf项目

多人开发hyper项目,减少环境的搭建,会在安装好hyperf项目后没人分配一个git账号,在服务器上单独启动一个个人开发环境。 本文以代码已经拉取下来部署到git。 master分钟的hyperf可以正常运行,各种组件已安装在服务器(可以参考上一篇hyperf运行环境搭建) 使用docker-compose启动 拉取代码到本地自己的分支(比如dev),在dev分支的根目录下面创建文件 docker-compose和dockerfile文件 dockerfile,内容如下: FROM hyperf/hyperf:7.2-alpine-cli WORKDIR /hyperf-skeleton CMD ["php","bin/hyperf.php","start"] docker-compose.yml 内容如下: version: "3" services: nginx_dev: build: context: ./ dockerfile: Dockerfile ports: - 9502:9501 volumes: - ./:/hyperf-skeleton - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/logs:/var/log/nginx 注意:nginx_dev 容器名称每人对应自己的不要重复,ports映射端口每人不要重复 进入根目录下面docker-compose up启动,注意如果不是根目录下就需要指定启动文件路径 docker-compose -f /www/docker-compose/docker-compose.yml up 执行结果,如果是首次执行需要拉取镜像。

在php中是什么意思,PHP中的::是什么意思?

推荐手册:php完全自学手册 在PHP中双冒号(::)操作符是一种范围解析操作符,又作用域限定操作符。它是对类中的方法的静态引用,可以访问静态、const和类中重写的属性与方法。 php调用类的内部静态成员,或者是类之间调用就要用两个冒号(::)。 说明:“::”符号可以认为是与C语言中的“.”相似的,而它更像C 中(Perl)的::类范围操作符。 示例:class A{ static $count = 0; static function haha(){ // } function diaoyoug(){ self::haha(); self::$count; } } a.b.c; /* C语言中的 */ a::b::c(); // C 中的函数 $a::b::c; # Perl 5中的标量 双冒号(::)操作符在类定义外使用的话,需使用类名调用。在PHP 5.3.0,可以使用变量代替类名。 示例:在类定义外部使用双冒号(::)操作符<?php class Fruit { const CONST_VALUE = 'Fruit Color'; } class Apple extends Fruit { public static $color = 'Red'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$color . "\n";

php 页面静态化处理,php页面静态化实例详解

本文主要和大家分享php页面静态化实例详解,希望能帮助到大家。 1、动态页面的解析流程 语法分析-》编译-》运行-》展示结果 2、如何优化动态页面的响应时间 动态页面静态化;优化数据库;使用负载均衡;使用缓存 3、动态页面静态化的好处 减少服务器脚本的计算时间,节省服务器资源;降低服务器的响应时间,更快的响应,让用户体检更好; 因为静态文件,直接展示结果 4、动态的url如何设置成静态url的形式 5、什么是伪静态 伪静态:看着和静态页面似的,其实访问的还是动态url(动态的url地址转换成静态页面的地址) 6、页面静态化的分类 想做静态化有一个必会的,就是buffer 7、了解buffer 案例:保存文件,先写到一个buffer(操作系统的buffer)中,当一个buffer写满了之后,在将buffer中的数据写入到硬盘中 8、php的buffer流程 语法分析-》编译-》当我们执行(运行)php程序的时候。先是保存在php的buffer缓冲区,当一个缓冲区当中写满了之后,脚本进程就会给php buffer中的数据通过tcp传给客户端 php的buffer在俩个地方控制: 1、在配置文件php.ini中 2、在脚本文件中开启ob_start() 注意:如果在php.ini中开启了buffer,在脚本中不写ob_start()照样可以使用,因为php.ini是最大的,谁都要听他的 如果php.ini和脚本中都开启了buffer,那么就会开辟2块内存缓存区(脚本中的应该是在php.ini中新开的缓存区) 9、常用的ob函数 最后一个函数,相当于第2和第3个合并起来 因为他是先放到缓冲区-》tcp-》浏览器。缓冲区都清空了,tcp没有传的了,浏览器当然就没显示了。 9、php实现页面纯静态化实现思路【最简单】 思路:查好数据-》是引入模板文件-》将数据在模板文件中遍历好-》给模板文件写成静态文件 10、php实现页面纯静态化实现思路【常用】 比上面的代码多加一个怕判断,和换一个函数(看红框) 11、php实现页面纯静态化实现思路【整体更新】 思路:点击开始更新的处理逻辑和9一样。查好数据-》是引入模板文件-》将数据在模板文件中遍历好-》给模板文件写成静态文件 12、php实现页面纯静态化实现思路【服务器定时更新】 在crontab -e 中调用9或10的脚本 13、局部纯静态(可理解为有一部分是动态文件) 思路:在模板文件中写ajax (而不是在index.shtml中,因为静态文件是根据模板文件生成的,静态文件在没生成的时候还没有呢,或过期了就被覆盖了)。ajax请求的方法(接口)里查询的数据-》组装数据-》返回数据 这样,再次刷新的时候,走到ajax他就会去动态加载数据-》填充模板-》生成静态文件-》显示给用户 14、php处理伪静态 至于apache或nginx配置伪静态可以去百度上搜,一抓一大把,也可以看我这篇博客,win和linux上一样都是改配置文件 相关推荐:

IE不支持 Promise 解决办法

1、在Nuxtjs项目中使用到了ES6的Promise对象,代码在谷歌浏览器和Edge浏览器中正常运行,而在IE浏览器和360浏览器下的兼容模式下,IE内核是不支持Promise的。 2、通过can i use网站(https://caniuse.com/)查到的ES6 promise的支持情况,可以看到IE不支持Promise。 3、要使IE浏览器兼容ES6(Promise 等语法),解决方法有两个 IE中,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转码。为了解决这个问题,我们使用一种叫做 Polyfill(代码填充,也可译作兼容性补丁) 的技术。 对于非node项目(了解polyfill),在页面引入browser-polyfill脚本: 可引入 <script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script> 或 <script type="text/javascript" src ="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script> 使用第三方插件bluebird.js,bluebird中对ES6的原生Promise进行了封装,解决了浏览器兼容性问题 github地址:https://github.com/petkaantonov/bluebird

STM32 IIC通信干货!理论+实例

I2C总线简介 I2C总线介绍 I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,期间封装形式少,通信速率高等优点。 I2C总线特征 两条总线线路:一条串行数据SDA,一条串行时钟线SCL来完成数据的传输及外围器件的扩展 I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址 I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下 可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。 I2C总线上的主设备与从设备之间以字节(8位)为单位进行单双工的数据传输。 I2C总线物理·拓扑结构 I2C 总线在物理连接上分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 I2C总线协议 I2C协议规定: 总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。 空闲状态: SCL和SDA都保持着高电平。 起始信号: 当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件 结束信号:当SCL为高而SDA由低到高的跳变,表示产生一个 停止条件 数据传输 数据传输以字节为单位 , 主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,数据在时钟的高电平被采样,一个字节按数据位从高位到低位的顺序进行传输 主设备在传输有效数据之前 要先指定从设备的地址,一般为7位,然后再发生数据传输的方向位, 0表示主设备向从设备写数据,1表示主设备向从设备读数据 应答信号 接收数据的器件在接收到 8bit 数据后,向发送数据的器件发出低电平的应答信号,表示已收到数据。这个信号可以是主控器件发出,也可以是从动器件发出。总之,由接收数据的器件发出。 I2C总线读写操作 主设备往从设备写数据 主设备读从设备数据 主设备读从设备的某个寄存器 STM32F4-I2C控制器特性 软件模拟I2C时序 由于直接控制 GPIO 引脚电平产生通讯时序时,需要由 CPU 控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。 硬件控制产生I2C时序 STM32 的 I2C 片上外设专门负责实现 I2C 通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理 I2C协议的方式减轻了 CPU 的工作,且使软件设计更加简单。 I2C的主要特点 ● I2C总线规范 rev03 兼容性: - 从机模式和主机模式 - 多主机功能 - 标准模式(高达 100kHz ) - 快速模式(高达 400kHz )

友链导航源码php,2020优化版导航源码自动收录秘趣导航批量检查友链有效性导航源码...

最新秘趣导航源码,带后台自动收录,批量检测友情连接有效性,自动收录自适应手机版 安装说明: 必须安装环境:Linux PHP7.0及以上 + Apache + MySQL5.5以上 必须配置伪静态,否则后台保存出错!!! 1、把文件上传到根目录解压 2、把文件夹里的 shuju.sql 恢复到数据库 3、修改根目录下 config.inc.php 的数据库为您的信息 4、后台登录地址:http://域名/admin 账号:admin 密码:admin1234 5、设置介绍: 1.站点图片地址:设置后将作为浏览器图标显示 2.站点描述文本:在PC访问时显示在LOGO图标旁 3.站点宣言:显示在导航菜单旁 4.顶部广告分类ID:此分类下所有内容均为顶部广告链接 5.名站广告分类ID:此分类下所有内容均为名站链接 6.导航父分类ID列表:在此分类下再创建子分类,所有子分类作为导航分类显示,所有导航链接皆添加至子分类中 7.动态信息分类ID:此分类下所有内容均为本站动态信息(幻灯片轮播,只调用一个) 8.永久地址:动态信息下显示 9.链接名称:要求提交收录网站添加的本站名称 10.链接地址:要求提交收录网站添加的本站地址 11.地址发布页地址:点击永久地址后显示链接 12.联系邮箱:管理员联系邮箱,在广告合作中显示,或关闭自动收录后在链接提交中显示 13.是否添加自助收录功能:开启则允许自助添加链接,否则仅显示站长邮箱 广告合作 6、分类ID获取:新建分类成功后,在分类列表再次点击进入编辑页面,网页地址上 category.php?mid=XX ,XX的数字就是ID 注意:设置外观时需每一项都要配置,不配置会出现404页面!!! 本次新增功能: 名站推荐导航名称 后面简介 字段名称为 jian 字段值 随意设置 首页大图广告需在源码文件设置 自助收录 在对方站点添加友链的时候 名称和网址 务必和本站后台设置的一样 否则收录不成功 站点颜色 在发布文章的时候 根据自己的需要添加或更改 其它细微功能不再一一列出,请自行测试,你需要修改的地方基本都在后台 网站后台很简单,多研究研究什么都会了,自己动手丰衣足食

grpc for php,PHP gRPC基础入门指南

gRPC是一个高性能、开放源码的通用RPC框架。本篇文章分享了如何在PHP语言编程中使用gRPC框架。并展示一个简单的PHP gRPC客户端示例。 PHP中gRPC的基本教程介绍。 通过遍历此示例,您将学习如何: 在.proto文件中定义服务。 使用协议缓冲区编译器生成客户端代码。 使用PHP gRPC API为您的服务编写一个简单的客户端。 它假定对协议缓冲区有一定的了解。请注意,本教程中的示例使用协议缓冲区语言的proto2版本。 还要注意,当前,您只能在PHP中为gRPC服务创建客户端。使用另一种语言创建gRPC服务器。 为什么要使用gRPC? 我们的示例是一个简单的路由映射应用程序,它使客户端可以获取有关其路由功能的信息,创建其路由的摘要以及与服务器和其他客户端交换路由信息(例如流量更新)。 借助gRPC,我们可以在一个.proto文件中定义一次服务,并以gRPC支持的任何语言生成客户端和服务器,而这又可以在从大型数据中心内的服务器到您自己的平板电脑的各种环境中运行– gRPC为您处理不同的语言和环境。我们还获得了使用协议缓冲区的所有优点,包括有效的序列化,简单的IDL和轻松的接口更新。 示例代码和设置 git clone -b v1.33.2 https://github.com/grpc/grpc 您需要grpc-php-plugin来帮助您生成原型文件。您可以从源代码构建它: cd grpc && git submodule update --init && make grpc_php_plugin 然后将当前目录更改为examples/php/route_guide并生成原始文件: cd examples/php/route_guide && ./route_guide_proto_gen.sh 我们的示例是一个简单的路由映射应用程序,它使客户端可以获取有关其路由功能的信息,创建其路由的摘要以及与服务器和其他客户端交换路由信息(例如流量更新)。 您还应该安装相关的工具来生成客户端接口代码(以及用于测试的另一种语言的服务器)。例如,您可以按照这些设置说明获得后者。 试试看! 要尝试示例应用程序,我们需要在本地运行的gRPC服务器。让我们在此存储库中编译并运行例如Node.js服务器: $ cd ../../node $ npm install $ cd dynamic_codegen/route_guide $ nodejs ./route_guide_server.js --db_path=route_guide_db.json 运行PHP客户端(在另一个终端中): ./run_route_guide_client.sh 下一节将逐步指导您定义此原型服务的方式,如何从中生成客户端库以及如何创建使用该库的客户端存根。 定义服务 首先,让我们看看如何定义所使用的服务。使用协议缓冲区的gRPC服务及其方法请求和响应类型。您可以在下面的示例中看到完整的.proto文件examples/protos/route_guide.proto。 要定义服务,请service在.proto文件中指定一个名称: service RouteGuide { ... } 然后,rpc在服务定义中定义方法,并指定其请求和响应类型。协议缓冲区使您可以定义四种服务方法,所有这些方法都用于RouteGuide服务中: 1.一个简单的RPC,客户端将请求发送到服务器,然后再接收响应,就像普通的远程过程调用一样。 // Obtains the feature at a given position.

php中文意思,php中::是什么意思?

一、php中的::是调用类中的静态方法或者常量,属性的符号。PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。中文名:“超文本预处理器”是一种通用开源脚本语言。 二、PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。 三、PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多,PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。被广泛的运用。 例如1、class aaa{static function ar(){}function br(){}} 2、使用非静态方法,要先创建实例 $obj = new aaa();$obj -> br(); 3、使用静态方法,无需创建实例,直接使用类名aaa::ar(); 扩展资料: 1、PHP作为网络开发的强大语言之一,现在应用非常广泛,具有开放源代码,跨平台性强,开发快捷,效率高,面向对象,并且易于上手,专业专注等诸多优点。 2、各种PHP开发框架也让程序开发变的简单有效。 3、php框架对很多新手而言可能会觉得很难攀越,其实不然 ,只要知道一个框架的流程,明白原理了,基本类似框架都可以看懂,php框架真正的发展要从php5开始了,其实php4时代就有一些框架,但是因为框架并没有给大家带来多方便而觉得很复杂,速度没有纯php好,所以一直到了php5才有大的发展,php5的面向对象模型的修改对框架的发展起了很大的作用。

php 批量删除注释,php如何删除注释

php删除注释的方法:首先创建一个用于测试的文件代码;然后自定义一个“removeComment”方法;接着通过“preg_replace”函数实现删除注释的功能;最后在浏览器中执行该文件即可。 PHP 去除代码中的注释 测试文件代码如下:<?php /** * Created by PhpStorm. * User: Yang * Date: 2019/10/16 * Time: 10:25 */ // 计算和 // 计算和 // 计算和 $a = 1; $b = 2; $c = $a+$b; //总和 /* * 求和函数 */ function sum($a, $b) { return $a + $b; //返回值 } # 第二种注释 $a = 1; $b = 2; ## 求乘积 $c = $a * $b; # 结果 //特殊 $usedFuncs = "

微信公众号api关注接口php,1.1 公众号接口绑定

### 绑定微信公众号接口 * * * * * 在应用Admin目录下新建Wecha.php,并不需要权限控制,所以直接继承Controller。 这里的接口代码,学习于方倍工作室的《微信公众平台开发》,看云有完整教程,非常适合新手来系统学习。 ~~~ Wecha.php --------- namespace app\admin\controller; use think\Controller; define("TOKEN", "zheshiweixinxiaogongnengkaifa"); class Wecha extends Controller { public function wxapi(){ if (!isset($_GET['echostr'])) { $this->responseMsg(); }else{ $this->valid(); } } //验证签名 public function valid() { $echoStr = $_GET["echostr"]; $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){

在PHP中对css的调用,php怎么调用css?

php怎么调用css?下面本篇文章就来给大家介绍一下在PHP中调用css的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 php怎么调用css? PHP脚本也是可以调用css样式的,我们可以利用echo语句调用CSS样式 代码实例如下:echo " 删除 修改 "; echo "";<?php echo ‘'; ?> php页面外部调用css样式表时有三处优点: 第一个好处:网页处理速度会更快一些,尤其在有很多网页共用一份CSS样式表时更为好用!因为你不用为每一页都写同样的CSS代码,网页自然就会更瘦一些轻快一些。 第二个好处:可以防止一些电脑程度较低的使用者直接看到CSS语法(就是有人不喜欢被看见语法),当然指的是无法直接看到,而非无法看到,稍微有点能力的,要查看CSS文件的内容简直是易如反掌。 第三个好处:当然就是维护方便了!你只要修改一个CSS文件,不管你有几千个网页文件,都会以你最新修改的版本为准了! 更多前端开发知识,请查阅 HTML中文网 !!

java中String类的substring()方法

一:public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 该子字符串从指定索引处的字符开始,直到此字符串末尾。 public class Test { public static void main(String[] args) { String str="Hello"; String subStr=str.substring(1); System.out.println(subStr); } } 输出:ello 注:如果字符串中含有空格,也算一个位置的 public class Test { public static void main(String[] args) { String str=" Hello"; String subStr=str.substring(1); System.out.println(subStr); } } 输出:Hello 二:public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。 该子字符串的长度为 endIndex-beginIndex. 注:substring(a,b)。a可以从索引0开始到b,但得出的子字符串不包括b索引代表的字符。 public class Test { public static void main(String[] args) { String str="

Soundex音似搜索的编码规则

Soundex音似搜索的编码规则 Soundex是什么?编码规则样例1. 带有特殊符号的字符串2. 短字符串 总结 Soundex是什么? Soundex是一个将单词编码为1个字母+3个数字(不足部零)的算法,它将发音相近的单词映射到同一个编码,能有效地搜索到发音相似或相近的单词。 例如:love的编码为L010,live的编码为L010。 假设用户搜索"my love"却错误地输入了"my live",那么soundex依然能匹配到正确的结果。 编码规则 Soundex只能对字母进行编码,因此预处理掉单词中的非字母字符,如数字、特殊符号等,以及转换大写。 编码规则: 保留第一个字母,去掉所有a e i o u y h w数字代替字母(基于发音分类) b 、f 、p、 v :1 c、g、j、k、q、s、x、z:2 d、t :3 l:4 m、n:5 r:6 编码去重,相邻编码相同(或中间被h、w隔开)则合并(含首字母),被其它间隔则保留。取得1个字母+3个数字,不足补0 样例 1. 带有特殊符号的字符串 输入为:he1llo#abc1 输出为:H412 预处理: he1llo#abc1 -> helloabc -> HELLOABC HELLOABC -> HLLBCH4412H412H412 2. 短字符串 输入为:jk 输出为:J000 预处理: jk -> JK JK -> JKJ2J (J对应2,即22,仅编码一次,故保留首字母即可)J000 总结 Soundex是一个简洁的发音相似的编码算法,它可以达到初级的模糊音效果。 如果需要更精准的发音映射,可以使用Metaphone算法,它使用了更高级的规则;或者改进版本的的Double Metaphone算法。

java的按位取数,java中怎么按位(bit)读取

Java codeimport java.util.*; public class Test { public static void main(String[] args) throws Throwable { byte[] data = new byte[12]; //测试数据准备,假设LZ所说的串是保存在byte数组中 data[0] = Integer.valueOf("00011101", 2).byteValue(); //头3个数据用LZ的例子数据 data[1] = Integer.valueOf("11000011", 2).byteValue(); data[2] = Integer.valueOf("11000011", 2).byteValue(); for (int i=3; i data[i] = (i%2 == 0) ? (byte)0x00 : (byte)0xff; } System.out.println("test data:"); //测试数据打印 for (int i=0; i System.out.printf("%s ", bitString((byte)data[i])); } System.out.println(); byte key = Integer.valueOf("01110111", 2).byteValue(); //在bit数据中找到的key System.out.println("key:"); System.out.printf("key=%s\n", bitString(key));

PHP保持静态页面,PHP 实现页面静态化的几种方法

1、通过buffer来实现 需要用file_put_contents ob_get_clean()等内置函数 ob_start (); include "filterpost.html"; $mtime = filemtime("./filterpost.html");//在这里可以判断文件是否存在和过期,然后做缓存或者生成静态文件操作 $pageCache = str_replace('submit2','login',ob_get_contents());//将缓存去中的内容替换 ob_end_clean(); echo $mtime; echo $pageCache; 2、通过$_SERVER['PATH_INFO']来实现 echo ' '; print_r($_SERVER); preg_match('/^\/(\d+)\/(\d+)\.html/',$_SERVER['PATH_INFO'],$arr); print_r($arr); 3、通过Apache配置来实现 需要开启rewrite重写模块 通过rewrite来配置vhost RewriteEngine on RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteRule ^/detail/([0-9]*).html$ /detail.php?id=$1 如果服务器下不存在文件夹及其文件,那么就重写定义到/detail.php http://localhost/detail/1.html 如果没有detail文件夹下的1.html 那么就重写定义到./detail.php 4、通过Nginx配置来实现 在nginx.conf中配置 rewrite ^/detail/(\d+)\.html$ /detail.php?id=$1 last; 当然建议大家参考一些比较成熟的cms的方法,对于页面数量不大的话,第一种方法还是不错的。

概率论_十 统计量一

前言: 目录: 1: 总体和样本 2: 统计量和常用统计量 3: 分布(卡方分部 ) 4: t 分布和 F分布 一 总体和样本 例: 要研究某校5000个学生的身高 目的: 用部分的数据推断出总体未知参数 总体: 研究的对象全体,5000个学生 个体: 总体中的成员。 例如某个学生的身高, 总体容量: 总体中包含的个体数,如上是5000 有限总体: 容量有限 无限总体: 容量无限 样本:总体中抽取一部分个体,根据这部分个体的数据,并利用概率论知识作出分析和腿短,被抽取的部分个体叫做样本。 抽样方式: 放回抽样, 总体容量有限 不放回抽样: 总体容量很大,或者无限大 样本性质: 与X 同分布,独立且为随机变量 总体的某个指标X,可以看作一个随机变量, 也简称X为总体。 分布函数 : F(X) 二 统计量 常用统计量 从样本中提取有用信息来研究总体的分布以及各种特征数 统计量: 样本总不含有任何未知参数的函数 设为样本,若不含有任何未知参数,则称 为统计量 2.1 常用样本统计量 样本均值: 样本方差: 样本标准差: 样本k阶矩 : 样本k阶中心矩 例子: 总体为 88,75,70,63 ,总体的均值为74, 方差为83.5 从中随机抽样两个数据,求样本均值,样本方差,样本k阶矩 import numpy as np #获取样本特征 def GetSample(data): m= len(data) for i in range(m): for j in range(m): a = data[i] b = data[j] sample = [a,b] u = np.

VR产业迎来突破,VR局域网部署怎么实施?

产业的快速发展,首先是底层基础条件具备,然后前一阶段的需求才会迎来爆发,进而使得产业走向繁荣,比如互联网基础设施的发展使得视频取代网页成为主流的呈现形式,而用户端也从有线电视-电脑-手机-IPTV电视。而2021年VR产业的繁荣也是因为2020年VR行业底层芯片取得了重大突破:高通发布的骁龙XR2专用芯片平台在2020年得以正式量产商用,并且反馈效果良好;在技术应用方面,6Dof和4K技术的普及应用,大大提升了用户视觉和交互体验;在内容生态方面,《Half-Life:Alyx》和其他VR游戏的发布,让PC VR游戏收入有望从2019年的8610万美元增长至2020年的1.89亿美元,同比增长119%。 这些基础的发展,使得国内VR领域的发展也不仅仅局限于展馆、博物馆、游戏等,将来会在在学校、医院、家庭用户等方面有更大的发展。在经历了两次产业泡沫后,消费者级VR的硬件与内容已初步成熟。VR技术和内容生态的形成,正在为产业的高速发展奠定坚实基础。多家权威数据机构预测,VR产业未来几年将会呈现爆发式增长。IDC在《2020全球AR/VR市场季度跟踪报告》中预计,2020年全球AR/VR头显出货量接近710万台,2024年将达到7670万台,复合年增长率达81.5%。Super Data预测,VR产业在2020年的全球收入将会达到29亿美元,2023年就会增长至57亿美元。 VR云端调度系统 也正是因为如此,国内互联网大厂布局的各种云服务,包括百度云、腾讯云、阿里云、华为云等等。不过这些大厂提供的基于云服务器的各种服务,都是在公网下进行的,对于学校、医院等场所来说局域网中如何部署VR内容呢?一般来说云上部署VR的目的是为了在用户量大的情况下,根据不同使用时间差来充分利用GPU服务器,从而降低成本,毕竟VR内容所需的GPU服务器性能好费用还是很高的,所以充分利用就是必要的了。如果是有多台的话,如何智能调度在保证给用户及时更快地反馈同时,充分利用每一台服务器。点量的云VR智能云端调配系统就是实现的这些功能,再就是VR体验的及时性,对于网络响应的延迟要求比较高,延迟越低越好。关于延迟性低的要求是基于用户体验,现在的VR设备会有眩晕的感觉,如果延迟达到更低,对于用户来说可以极大的降低这种眩晕,目前点量在局域网内可将延迟做到十几毫秒,是行业的领先水平,而且提供的VR局域网解决方案,包括对于硬件的一些建议,根据具体的使用场景、终端、频率等综合性方案。 种种迹象表明,VR产业的全面复苏已经到来,并且产业提速增长的基础已经奠定。从全球范围来看,为抢占“下一代移动计算平台”的战略机遇期,VR这片蓝海正吸引Facebook、HTC,以及爱奇艺、华为等越来越多国内外科技弄潮儿扎身其中。凭借已有的技术或者内容,在VR领域进一步拓展,抓住VR风口进一步发展。

第一个eBPF程序.md

背景 了解bpf的童鞋都应该知道,bpf程序是可以attach到不同的probe点上来做内核级别的trace,那么对于刚入门的人来说,如何来编写一个初级的bpf程序呢?这就是本篇博文想要介绍的内容。 bpf程序的组成 BPF程序我们知道它需要先使用LLVM进行编译,完成后加载到内核中去执行,那么也就是说对于BPF程序来说,它应该包含有两部分: 第一部分是用户态程序,它的作用是用来加载编译完成的内核BPF字节码文件,并且与内核态程序进行交互,一般是获取profiling数据。第二部分是内核态BPF程序,使用C语言编写,用来编译生成字节码。 参数获取 在编写内核程序时,有一个固定的格式,假如我们需要添加一些逻辑到一个probe点上,那么需要定义一个入口函数,这个入口函数的格式应该是怎样的呢?它应该带有什么样的参数呢? 这个格式实际是固定的,它只接受一个参数 struct pt_regs *ctx ,而我们想要trace的函数,比如系统调用sys_execve,它是有多个参数的: asmlinkage long sys_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp); 那么我们如何从ctx中来获取这些参数值呢?想要获取一个函数的入口参数,那么需要的probe类型就要是kprobe 因为这种类型会在进入函数后立刻执行我们的BPF函数,那么参数值上下文都在寄存器中会直接传入到我们的入口BPF函数中,可以通过如下的函数来获取参数。内核已经预定义了bpf helper函数来获取这些参数信息。 #define PT_REGS_PARM1(x) ((x)->di) #define PT_REGS_PARM2(x) ((x)->si) #define PT_REGS_PARM3(x) ((x)->dx) #define PT_REGS_PARM4(x) ((x)->cx) #define PT_REGS_PARM5(x) ((x)->r8) #define PT_REGS_RET(x) ((x)->sp) #define PT_REGS_FP(x) ((x)->bp) #define PT_REGS_RC(x) ((x)->ax) #define PT_REGS_SP(x) ((x)->sp) #define PT_REGS_IP(x) ((x)->ip) 那么另外一种情况,如果probe点是一个tracepoint的话,我们怎么知道入口函数中能获取什么信息呢?这里划重点!!! 比如,sys_enter_execve是内核预定义的一个tracepoint,那么如果我们BPF程序被attach到这个位置上,如何知道ctx中都保存了什么信息呢?其实可以通过: /sys/kernel/debug/tracing/events/syscalls/sys_enter_execve/format 来查看: # cat /sys/kernel/debug/tracing/events/syscalls/sys_enter_execve/format name: sys_enter_execve ID: 663 format: field:unsigned short common_type; offset:0; size:2; signed:0; field:unsigned char common_flags; offset:2; size:1; signed:0; field:unsigned char common_preempt_count; offset:3; size:1; signed:0; field:int common_pid; offset:4; size:4; signed:1; field:int __syscall_nr; offset:8; size:4; signed:1; field:const char * filename; offset:16; size:8; signed:0; field:const char *const * argv; offset:24; size:8; signed:0; field:const char *const * envp; offset:32; size:8; signed:0; print fmt: "

APB协议UVM验证环境的搭建

APB协议UVM验证环境的搭建 一、编译文件 只需编译这两个文件即可 apb_pkg.sv 里面包含了"apb.svh",即编译apb_pkg.sv这个文件的同时,也会编译所需要的所有的头文件。 `ifndef APB_PKG_SV `define APB_PKG_SV package apb_pkg; import uvm_pkg::*; `include "uvm_macros.svh" `include "apb.svh" endpackage : apb_pkg `endif // `ifndef APB_PKG_SV apb.svh `ifndef APB_SVH `define APB_SVH `include "apb_transfer.sv" `include "apb_config.sv" //master所有的头文件 `include "apb_master_driver.svh" `include "apb_master_monitor.svh" `include "apb_master_sequencer.svh" `include "apb_master_agent.svh" //slave所有的头文件 `include "apb_slave_driver.svh" `include "apb_slave_monitor.svh" `include "apb_slave_sequencer.svh" `include "apb_slave_agent.svh" //master头文件里面具体的实现方法 `include "apb_master_driver.sv" `include "apb_master_monitor.sv" `include "apb_master_sequencer.sv" `include "apb_master_agent.sv" `include "apb_master_seq_lib.sv" //slave头文件里面具体的实现方法 `include "apb_slave_driver.sv" `include "apb_slave_monitor.sv" `include "apb_slave_sequencer.sv" `include "

CentOS7系统安装配置Apache Web服务器教程

Apache Web 服务器的安装和配置必须以 root 身份执行。 防火墙的配置也需要以 root 身份执行。 使用浏览器查看安装配置的结果应该以非 root 用户的身份完成。 (在虚拟主机上使用 student 这个用户。) 安装 注意:我使用的实验环境是安装有Fedora 27 的虚拟机,Apache 版本为 2.4.29。 如果您使用的是不同的发行版或不同版本的 Fedora,您的命令以及配置文件的位置和内容可能会有所不同。 但是,您需要修改的配置行是相同的。 Apache Web 服务器非常容易安装。 在我的 CentOS 6.x 服务器上,它只需要一个简单的 yum 命令。 它会安装所有必要的依赖(如果需要的话)。 我在我的 Fedora 虚拟机上使用了下面的 dnf 命令。 除了命令本身的名称之外, dnf 和 yum 的语法是相同的。 dnf -y install httpd 这个虚拟机是个非常基础的桌面环境,我正在使用它作为编写书籍的测试平台。 即使在这个系统上,也只安装了六个依赖项,用了一分钟。 Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d 。网站的数据默认位于 /var/www ,但如果你愿意,你可以改变它。 配置 Apache 主要的配置文件是 /etc/httpd/conf/httpd.conf 。 它包含许多在基本安装中不需要更改的配置。 实际上,只需对此文件进行一些更改即可启动并运行一个简单的网站。 该文件非常大,因此,我不会将这篇文章与大量不必要的东西混淆起来,而只会显示那些需要更改的指令。 首先,花点时间熟悉一下 httpd.conf 文件。我喜欢Red Hat 的一个原因是它的配置文件注释非常的详细。 httpd.

如何维护自己得香港服务器安全?

对于大多数租用香港服务器得用户而言,服务器安全基本取决与香港服务器商得机房以及服务器自身得防御,其实数脉想在这里说下,这个看法只对了一半,另外一半其实和用户也有很大得关系,接下来就数脉和大家好好说说如何维好自己的香港服务器安全。 1、设置服务器系统防火墙 系统防火墙对服务器的安全至关重要,入侵者必须首先越过防火墙的安全设置,才能接触服务器用户的数据。将系统防火墙的级别调高,设置好安全策略,修改和关闭端口,远程登录的权限等等,可以屏蔽绝大部分的非法访问。 2、及时安装更新系统和应用程序 互联网技术在不断发展,任何程序都有可能存在漏洞,如果不及时更新补丁,就容易被入侵。服务器系统安装后,首先就要安装好系统补丁,服务器安装的其他程序也要及时更新补丁,以防漏洞被黑客抓住,从而入侵服务器。 3、安装杀毒软件 互联网中的病毒不计其数,传播的速度也是相当快,服务器中毒更是家常便饭。维护服务器的安全重点在预防。安装杀毒软件,首要目的就是利用其防护功能,提前探知和灭杀病毒,控制病毒传播;然后才是查杀病毒,病毒入侵后再运行杀毒软件查杀病毒,已经是亡羊补牢了。由于互联网中病毒不断产生和进化,所以杀毒软件也要及时的更新。 4、账号密码的保护 网络上对系统的攻击大都是从截获和猜测密码开始的,一旦黑客进入了系统,获得各种权限,防火墙,杀毒软件都起不了作用。不要认为有了各种软件的保护就万事大吉了,还是应注意防范,对账号以及密码的保护应采取相应的措施,密码数字不能太简单,用名字,出生日期或者是单一的数字或字母都是不可取的,尽量的复杂一些,尽可能复杂,避免被他人猜中。 5、定时备份 黑客入侵、系统故障、错误的操作、或者操作失误都会造成的服务器系统崩溃。如果对系统进行备份的话,就可以进行数据还原,避免了因各种故障而造成的损失。定时对系统进行备份,还要将修改过的重要系统文件存放在不同的服务器上,可以使服务器故障造成的损失降到最低。 互联网的攻防,就如矛和盾之争,永远没有尽头。服务器作为网络数据承载的核心,始终是攻防的焦点。在租用服务器时,要想保障服务器的安全,就需要设置强力有利的防御,才能在互联网经济浪潮中中获得很好的经济效益。

c++类对象的例子(非标准语法;请使用 “&“ 来创建指向成员的指针,如何解决?)

非标准语法;请使用 “&” 来创建指向成员的指针,如何解决? 在main.cpp中有问题 Game.cpp...... #include "Game.h" #include<iostream> #include<string> #include<time.h> #include<stdlib.h> #include<new> #include<typeinfo> #include<algorithm> Game::Game() { cout << "begin to no paraments initialize......\n"; } Game::Game(const string &n,const string &u,const string &g,const int &m) { cout << "begin to initialize......\n"; this->name = n; this->user = u; this->gun.push_back(g); this->money = m; } Game::~Game() { cout << "begin to deconstruct......\n"; } void Game::add_money_base(int in_m) { cout << "welcome to recharge money!!!\n"; this->money += in_m; cout << "

php7和php5对比

PHP7刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍,反正不管是媒体还是开发者都在煽风点火,不,应该是赞不绝口。 我就静静看你们装逼,不说话。 一般手机系统升级我是跑最后的,因为不愿意踩坑,毕竟iOS和Android这种系统都会出现bug,何况世界上被人黑的最多的语言。 今日时机已到,看看PHP7有没有传说的那么王炸。 安装两个PHP版本 http://php.net/ 已经有最新PHP7的最新版本,大家可自行下载。 为了测试PHP5和PHP7(PHP6已被放弃,心疼1s)的性能,我在不同的目录安装了两个php版本。 安装过程就略过了,无论源码安装还是包管理工具安装,记得自己的路径即可。 PHP7: # /usr/local/php7/bin/php -vPHP 7.1.5 (cli) (built: May 13 2017 23:36:41) ( NTS )Copyright (c) 1997-2017 The PHP GroupZend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies PHP5: # /usr/bin/php -vPHP 5.6.30 (cli) (built: Jan 19 2017 22:31:39)Copyright (c) 1997-2016 The PHP GroupZend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies 环境说明:为了保证最佳的测试效果,本次测试在直接在生产环境进行,更逼近真实情况。 操作系统:CentOS 7.2 64位 基础配置:1核 1GB 1Mbps 主机品牌:腾讯云 PHP7和PHP5的对决 1. 纯php脚本测试 vim test.

php7和php5语法一样_php5与php7的区别点总结

php5与php7的区别是什么?下面本篇文章就来给大家对比一下php5与php7,介绍php5与php7之间的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 php5与php7之间的区别: 1、性能提升:PHP7比PHP5.0性能提升了两倍。 2、以前的许多致命错误,现在改成抛出异常。 3、PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展。 4、PHP 7.0比PHP5.0新增了空接合操作符。 5、PHP 7.0比PHP5.0新增加了结合比较运算符。 6、PHP 7.0比PHP5.0新增加了函数的返回类型声明。 7、PHP 7.0比PHP5.0新增加了标量类型声明。 8、PHP 7.0比PHP5.0新增加匿名类。 9、错误处理和64位支持 如果您了解错误和异常之间的区别,那么您就会知道在PHP 5中处理致命错误非常不容易。PHP7简化了流程,因为它已用可以轻松处理的异常替换了几个主要错误。这是通过引入新的引擎异常对象实现的。 您可能已经知道,PHP 5不支持64位整数或大文件,但PHP 7中的情况已发生变化。PHP7具有64位支持,因此您也可以使用本机64位整数作为大文件,因此,您可以在64位系统体系结构上完美运行应用程序。 10、声明返回类型 在PHP 5中,程序员无法定义函数或方法的返回类型。在现实生活中,这是一个巨大的缺点,因为程序员无法防止意外的返回类型并在其他情况下生成异常。 幸运的是,PHP 7允许程序员根据期望的返回值声明函数的返回类型。这肯定会使代码健壮和准确。有四种不同的返回类型可用-bool,int,string和float。 为什么 PHP7 比 PHP5 性能提升了? 1、变量存储字节减小,减少内存占用,提升变量操作速度 2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率 3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率

php fastcgi配置_Nginx与PHP(fastCGI)安装、配置与优化

Nginx与PHP(fastCGI)安装、配置与优化 一、安装环境 1、centos5.5-32 二、利用centos自带的Yum安装、升级抽需的程序库 1、yum–yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-devellibidnlibidn-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-servers 三、从blog.s135.com下载所需要的软件(注:比较稳定,只允许在本站,或者在linux/unix下通过wget、curl等命令下载以下软件) Wgethttp://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.15.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/php/php-5.2.10.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.38.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz Wgethttp://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/pcre/pcre-7.9.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.5.3.tar.bz2 Wgethttp://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz Wgethttp://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz Wgethttp://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.2.2.tgz 1、nginx-0.8.15.tar.gz 2、php-5.2.10.tar.gz 3、php-5.2.10-fpm-0.5.11.diff.gz 4、mysql-5.1.38.tar.gz 5、libiconv-1.13.tar.gz 6、mcrypt-2.5.8.tar.gz 7、mhash-0.9.9.9.tar.gz 8、pcre-7.9.tar.gz 9、eaccelerator-0.9.5.3.tar.bz2 10、PDO_MYSQL-1.0.2.tgz 11、ImageMagick.tar.gz 12、Imagick-2.2.2.tgz 四、安装php5.2.10(fastcgi模式) 1、tar–zxflibiconv-1.13.tar.gz cdlibiconv-1.13/ ./configure–prefix=/usr/local Make Makeinstall Cd../ 2、tar–zxflibmcrypt-2.5.8.tar.gz cdlibmcrypt-2.5.8/ ./configure Make Makeinstall /sbin/ldconfig Cdlibltdl/ ./configure–enable-ltdl-install Make Makeinstall Cd../../ 3、tar–zxfmhash-0.9.9.9.tar.gz cdmhash-0.9.9.9/ ./configure Make&&makeinstall Cd../ Ln–s/usr/local/lib/libmcrypt.la/usr/lib/libmcrypt.la Ln–s/usr/local/lib/libmcrypt.so/usr/lib/libmcrypt.so Ln–s/usr/local/lib/libmcrypt.so.4/usr/lib/libmcrypt.so.4 Ln–s/usr/local/lib/libmcrypt.so.4.4.8/usr/lib/libmcrypt.so.4.4.8 Ln–s/usr/local/lib/libmhash.a/usr/lib/libmhash.a Ln–s/usr/local/lib/libmhash.la/usr/lib/libmhash.la Ln–s/usr/local/lib/libmhash.so/usr/lib/libmhash.so Ln–s/usr/local/lib/libmhash.so.2/usr/lib/libmhash.so.2 Ln–s/usr/local/lib/libmhash.so.2.0.1/usr/lib/libmhash.so.2.0.1 4、tar–zxfmcrypt-2.6.8.tar.gz cdmcrypt-2.6.8/ /sbin/ldconfig ./configure Make&&makeinstall

Cookie之免用户名登录

Cookie之免用户名登录 文件名:login.jsp。 描述:通过表单实现简易登录界面,通过EL表达式获取客户端的Cookie对象中是否存在用户名,若获取到,则直接显示到客户端的页面中。点击登录后转到LoginServlet程序。 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="http://localhost:8090/011_Cookies/loginServlet" method="get"> 用户名:<input type="text" name="username" value="${cookie.username.value}"><br/> 密码:<input type="password" name="password" id=""><br/> <input type="submit" value="登录"> </form> </body> </html> 文件名:LoginServlet.java 描述:获取表单提交的req,获取其中的username参数、password参数。判断用户名和密码是否正确,若两者正确,将用户名封装在Cookie对象中,设置其生存周期,并回传给客户端保存。 package com.servlet; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name =req.getParameter("username"); String password=req.getParameter("password"); if("username".equals(name) && "

rabbitmq的安装和配置

1 rabitmq下载 下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/ 给你截图下: 然后上传到服务器再安装。 [root@k8smaster rabbitmq]# rpm -ivh rabbitmq-server-3.8.14-1.el8.noarch.rpm warning: rabbitmq-server-3.8.14-1.el8.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 6026dfca: NOKEY error: Failed dependencies: erlang >= 21.3 is needed by rabbitmq-server-3.8.14-1.el8.noarch socat is needed by rabbitmq-server-3.8.14-1.el8.noarch [root@k8smaster rabbitmq]# 不过,安装的时候需要先安装erlang,因为rabbitmq是erlang编写的。 2 erlang安装 参考:https://blog.csdn.net/py8105/article/details/117199513 erlang是安装了,但是还要安装socat。 [root@k8smaster rabbitmq]# rpm -ivh rabbitmq-server-3.8.14-1.el8.noarch.rpm error: Failed dependencies: socat is needed by rabbitmq-server-3.8.14-1.el8.noarch [root@k8smaster rabbitmq]# yum install socat 3 rabbitmq安装 [root@k8smaster rabbitmq]# rpm -ivh rabbitmq-server-3.8.14-1.el8.noarch.rpm Verifying... ################################# [100%] Preparing.