WSL2:Windows 亲生的 Linux 子系统

作 者:道哥,10+年的嵌入式开发老兵。 公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。 转 载:欢迎转载文章,转载需注明出处。 文章目录 安装 WSL2 的前提条件安装 WSL2安装桌面环境安装客户端配置 DISPLAY 环境变量安装服务端启动客户端中文支持 在上一篇文章中,我们主要聊了一下:在 Windows 系统中,安装 WSL 子系统。 文章在此:WSL:在 Windows 系统中开发 Linux 程序的又一神器 但是 WSL 只是长得像 Linux 而已,虽然在这个子系统中,我们可以执行 Linux 程序,但是到了底层,WSL 调用的还是 win32 API。 也就是说:WSL 只是一个适配层。 后来,微软终于放出了 WSL2 这个真正的 Linux 子系统,这是一个真正的 Linux 完整内核,与传统的虚拟机 VitualBox、VMWare 一样,但是它与宿主机的互操作性更好。 为了完整性,我们就继续把这个流程给走完。 在这个过程中遇到的问题、需要的安装软件等资源,已经上传到网盘,在文末有下载地址。 安装 WSL2 的前提条件 在开始之前,我们先来看一下目前电脑中的 WSL 的版本。 在 Windows 命令行窗口,输入指令:wsl --list --verbose(或者输入简化版本:wsl -l -v),得到结果: 可以看到我们上一篇文章中安装的 Ubuntu-18.04,而且 WSL 的版本是 1。 如果要升级到 WSL2,Windows 操作系统的内核版本必须满足一定的要求,如下: 我们就按照官方的要求,检查一下自己的电脑是否满足需求:选择 Windows 徽标键 Win + R,然后键入 winver,选择 “确定”。

用Python+PIL将多个jpg图像批量合并成一个pdf文件

一、引言 在《用Python+PIL将目录下jpg图像批量转成pdf文件》介绍了将一个目录下所有的jpg文件批量转成一对一的pdf文件的方法,但单位后来又要求将所有图片合并到一个PDF中看,在实际工作中,确实有时还需要将批量图片文件合并生成一个PDF文件,本文就简单介绍一下该方法。 二、实现方法 要将多张图片合并到一个PDF文件,还是用上文介绍的PIL库,只是不是逐一将图像文件存储为PDF文件,而是将图像文件打开后的对象实例添加到一个列表中,最后在一起存储到PDF中即可。 需要注意的是,存储是必须通过图像对象的save方法,因此将所有文件都装入后,需要从链表中将第一个文件取下作为调用save方法的对象实例,同时要从链表中删除取下的对象。 这样方法处理的PDF文件,其图像在PDF中的顺序与装载到链表中的顺序一致。 三、完整代码 下面的代码既将每个图片文件生成对应的PDF文件,同时还生成一个将所有图片都合并到一个PDF文件的合并文件: from PIL import Image import os def jpg2pdf(jpgFile): global imglist path,fileName = jpgFile.rsplit('\\',1) preName,postName = fileName.rsplit('.',1) img = Image.open(jpgFile) imglist.append(img) return img.save(path+"\\"+preName+'.pdf', "PDF", resolution=100.0, save_all=True) def jpg2pdfByPath(pathName): global imglist imglist = [] imgfile = '' files = os.listdir(pathName) for f in files: if f.lower().find(".jpg")>0 : jpg2pdf(pathName+'\\'+f) imgfile = f imgMerge = imglist.pop(0) #取出第一个图片示例 imgMerge.save(pathName+r'\merge.pdf',"PDF", resolution=100.0, save_all=True, append_images=imglist) print("all images processed!") jpg2pdfByPath(r'F:\temp\pic') 四、小结 本文介绍了使用Python+PIL库将多个图片合并成一个PDF文件的方法。

HTML+CSS 主页面美化的详细过程及全部代码(美化导航栏+文本框+按钮)

文章目录 效果图展示前言步骤0.创建css文件1.美化中间板块1.1 html改变1.2. css部分1.3. placeholder美化 2.增加导航栏2.1 html文件增加代码2.2 CSS文件增加代码 3.添加背景补充 效果图展示 效果图: 原界面: 先放原界面的代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WEATHER</title> </head> <body id="weather" style="text-align: center; padding: 5px; background-color:skyblue;"> <form action="/year" method="POST"> <br> <p>某城市某年的天气情况</p> <div class="form"> <p>查找的城市</p> <input class="form-name" placeholder="输入城市的名字,如:成都" name="city" type="text" autofocus> </div><br> <div class="form" style="margin-top: 30px;"> <p>查找的年份</p> <input class="form-name" placeholder="输入过去十年内的年份,如:2020" name="year" type="text" autofocus> </div><br> <input type="submit" value="搜索" class="btn" /></br> </form> <br><br> <a href="/high_temperature" target="_blank">全国省会城市最高气温</a> <br><br> <a href="/low_temperature" target="

安装和导入tensorflow、keras出错的问题

前提:已经安装完Anacanda。 事先创建一个tensorflow的虚拟环境,用作tf(也可以用默认的base环境),我这里创建的名字是tensorflow,python的版本号是3.6(要和后续的tf和keras的版本号对应才行) conda create --name tensorflow python=3.6, 注意:安装之前可以修改pip安装源,以提高下载速度。此目录下新建pip文件夹,创建pip.ini文件,内容: [global] index-url=https://mirrors.aliyun.com/pypi/simple [installed] trusted host=mirrors.aliyun.com 然后进入tensorflow环境下操作: cmd命令行窗口下, 安装tensorflow: pip install tensorflow # 安装 pip install tensorflow==1.3.0 # 安装指定版本号的tensorflow pip show tensorflow #查看tensorflow是否安装及版本号 pip uninstall tensorflow #卸载 安装keras: pip install keras # 安装 pip install keras==1.3.0 # 安装指定版本号的tensorflow pip show keras #查看tkeras是否安装及版本号 pip uninstall keras #卸载 ================================== 下载完成后,导入: python环境下, import tensorflow #导入tensorflow import keras #导入keras 最可气的地方就在这里,导入过程中不是导入tensorflow出错就是导入keras出错,最后查了一些资料应该是因为版本号匹配的问题,再加上自己的电脑比较老古董(忧伤),新版本支持有问题,导致重复多次,真是崩溃。。。 tensorflow和keras版本对应关系可在此查看:https://docs.floydhub.com/guides/environments/ 由于我电脑的原因,只能选择比较老的版本: 最终终于导入成功keras 下面分别是安装的版本号: =================分割线============= 后来经测试,在使用keras加载序列模型的时候,会报错 “KeyError:0”,经查资料,发现是keras版本问题:见

RPC接口设计

初识 RPC 接口设计 由于 RPC 中的术语每个程序员的理解可能不同,所以文章开始,先统一下 RPC 术语,方便后续阐述。 大家都知道共享接口是 RPC 最典型的一个特点,每个服务对外暴露自己的接口,该模块一般称之为 api;外部模块想要实现对该模块的远程调用,则需要依赖其 api;每个服务都需要有一个应用来负责实现自己的 api,一般体现为一个独立的进程,该模块一般称之为 app。 api 和 app 是构建微服务项目的最简单组成部分,如果使用 maven 的多 module 组织代码,则体现为如下的形式。 serviceA 服务 serviceA/pom.xml 定义父 pom 文件 <modules> <module>serviceA-api</module> <module>serviceA-app</module> </modules> <packaging>pom</packaging> <groupId>moe.cnkirito</groupId> <artifactId>serviceA</artifactId> <version>1.0.0-SNAPSHOT</version> serviceA/serviceA-api/pom.xml 定义对外暴露的接口,最终会被打成 jar 包供外部服务依赖 <parent> <artifactId>serviceA</artifactId> <groupId>moe.cnkirito</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <packaging>jar</packaging> <artifactId>serviceA-api</artifactId> serviceA/serviceA-app/pom.xml 定义了服务的实现,一般是 springboot 应用,所以下面的配置文件中,我配置了 springboot 应用打包的插件,最终会被打成 jar 包,作为独立的进程运行。 <parent> <artifactId>serviceA</artifactId> <groupId>moe.cnkirito</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <packaging>jar</packaging> <artifactId>serviceA-app</artifactId> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 麻雀虽小,五脏俱全,这样一个微服务模块就实现了。

深度学习基于DEAP的脑电情绪识别情感分类(附代码)

DEAP数据集: DEAP数据集来源: DEAP: A Dataset for Emotion Analysis using Physiological and Audiovisual Signals (qmul.ac.uk) DEAP数据集介绍: DEAP数据集介绍 脑电情绪识别: 主要分为三步骤:数据预处理,特征提取,构建模型。 数据预处理部分建议自己处理。其中一定要做的就是去掉63s的前三秒的基线时间。 可以考虑的地方特别多,例如选取哪几个通道,并不是一定把32个脑电通道全部选择。选择哪几个频段分析或者选择单个维度还是多个维度融合。 特征提取部分: 首先必须清楚特征分为几类:频域、时域、时频域、空间域。 时域特征包含基本的事件相关电位、功率 、Hjorth 参数特征 、高阶过零分析等等 频域特征包含功率、功率谱密度、事件相关同步化、事件相关去同步化、高阶谱、微分 熵等特征 在刚开始做的时候,先做的时域特征的提取:最简单的就是直接将60s的脑电信号处理。或者提取其中一些比较有意义的相关特征。但是准确率并不高,只有60多。 之后参考了一些网上的思路,采用了频域上的特征提取。主要参考了github上的Preprocess_deap的处理。首先选择了1,2,3,4,6,11,13,17,19,20,21,25,29,31共14个通道,分别对应于 1 : AF3; 2: F3; 3: F7; 4: FC5; 7: T7; 11: P7; 13: O117: AF4; 19: F4; 20: F8; 21: FC6; 25: T8; 29: P8; 31: O2 之后对这14个通道的数据进行频域分段,其中调用了pyeeg的bin_power函数进行傅里叶变换处理。其中频段选择为: [4-8]: theta band[8-12]: alpha band[12-16]: low beta band[16-25]: high beta band[25-45]: gamma band 选择了微分熵作为频域特征。部分代码如下:

计算机地图综合制图gdp,GDP地图可视化01: 加载地图数据

本节主要完成地图的初始化加载。 主要思路 将摄像头调整好。 读取坐标文件; 绘制; 调整位置,场景大小等,使得地图居中。 原生js读取json文件 略 使用FileLoader读取json var loader = new THREE.FileLoader(); loader.load( // resource URL './data/china.json', // onLoad回调 function (data) { // output the text to the console } ) 注意读出来的是字符串,需要转为json对象。 FileLoader 使用XMLHttpRequest来加载资源的低级类,并由大多数加载器内部使用。 它也可以直接用于加载任何没有对应加载器的文件类型。 形状(Shape) 继承关系是 Curve -> CurvePath -> Path -> shape. Shape 使用路径以及可选的孔洞来定义一个二维形状平面。 需要配合 ExtrudeGeometry、ShapeGeometry一起使用。 ShapeGeometry 与 ExtrudeGeometry ShapeGeometry 使用 shape 创建一个单面多边形几何体,是二维的。 而 ExtrudeGeometry 从一条形状路径中,挤压出一个Geometry,是三维的。 利用 边缘几何体(EdgesGeometry)添加省界线 源码 ```html地图GDP body { margin: 0; overflow: hidden;

Xilinx ISE Isim仿真错误的解决方法

Xilinx ISE Isim仿真错误的解决方法 参考文章: (1)Xilinx ISE Isim仿真错误的解决方法 (2)https://www.cnblogs.com/elitezhe/p/ise-isim-error.html 备忘一下。

【jmeter性能测试】模拟多个IP同时登录

背景 有些平台/系统不存在多个账户同时登录的情况,此时如果需要对登录接口进行压力测试,可以使用多个IP,模拟多台电脑同时登录同一平台的场景 操作步骤 1. 准备多个IP,方法如下: 在局域网内查询空闲的IP有哪些,将这些IP记录下来,并保存为csv文件 2. 将测试电脑的IP改为静态IP 将步骤1中记录的空闲IP添加到测试电脑上 网络设置-高级,添加多个IP 检查添加的IP是否成功:ping一下这个IP,如果ping得通,则说明IP设置成功 4. jmeter中添加csv数据文件设置 5. 配置csv参数 6. 配置需要多个IP访问的http请求 7. 运行登录请求,察看结果数中查看是否是多个IP在访问

HackBar 新手使用教程

啥是Hackbar? Hackbar是一个Firefox的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响。有网址的载入于访问,联合查询,各种编码,数据加密功能。 这个Hackbar可以帮助你在测试SQL注入,XSS漏洞和网站的安全性,主要是帮助开发人员做代码的安全审计,检查代码,寻找安全漏洞。Hackbar 在Burpsuite中也有该插件 这个插件是用 webextension 编写的,是原始 Hackbar 的 XUL 版本的替代品。按 F12 使用 HackBar。 安装使用教程 安装 google浏览器与火狐浏览器都支持Hackbar,谷歌浏览器需要到谷歌商店下载(需科学上网),之后打开“chrome 网上应用店”,在搜索框搜索“hackbar”: 出现如下输入注册码: 下面是火狐的插件搜索结果: 按下F12,点击如图所示: 各个英文解释如下: SQL:提供三种数据库的sql查询语句,以及一些方便联合查询的语句XSS:提供xss攻击语句string.fromcharcode():将根据UNICODE 值来输出xss语句html charactor : 将XSS语句转化为HTML字符实体(以&开头)alert(xss) statement : 构建一条xss测试语句,弹出一个框内容为xss,相当于alert(‘xss’);Encryption:对所选字符进行加密,提供了MD5,SHA-1,SHA-256,ROT13等加密方式Encoding:对所选字符进行编码解码,提供了Base64 Encode,Base64 Decode,URLencode,URLdecode, HEX encoding, HEX decoding等方式Other: addslashes:在每个双引号前加反斜杠 stripslashes:除去所选字符中的反斜杠 strip space:除去所选字符中的空格 reverse:将所选字符倒序排列 usefull strings:提供了一些特殊的数值如圆周率PI,斐波那契数列等,其中buffer overflow 可以输入一定长度的字符造成缓存溢出攻击 绕过方法食用 法一:下载安装旧版本插件,去掉更新(点击下载) Github1: https://github.com/HCTYMFF/hackbar2.1.3 Github2: https://github.com/fengwenhua/hackbar_crack 法二:修改插件 谷歌浏览器 点开HackBar插件详细页面,查看ID值找到插件目录,【“C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default\Extensions”】 找到其目录下的js文件下的 “hackbar-panel.js”文件,然后打开此js文件 打开js文件后,有两种方法对插件进行破解 方法一: 找到第25行代码,将“license_ok=false”改为“license_ok=true”,然后在Chrome浏览器按“F12”键,选择HackBar,在License框中随便输入一个许可码,点击"Save"就可以免费使用了 方法二:开始与方法一相同,找到“hackbar-panel.js”文件,打开此js文件,选择42、45、52处,将这三处的代码disable_hackbar(); 注释掉,同时再添加一行init(); ,按Ctrl+S保存代码。 然后在Chrome浏览器按“F12”键,选择HackBar,查看激活成功。 注意:方法一二可能现在都不能用了,一改就显示已损坏需修复的情况。那就直接用大佬改好的。 下载地址。 学习参考:大佬地址

C++实践之Qt学习(四):Qt中的字符串

文章目录 Qt中的字符串字符编码的坑字符串处理QString常用操作转换添加字符串操作删除子串修改检索分隔 Qt中的字符串 字符串的处理始终是我们编写程序绕不开的坑。无论是信息的输入和显示,以及数值和字符串之间的转换,都需要字符串的处理,而在Qt中有一个专门的类QString来对字符串进行操作。 但是需要注意的是,QString中内部采用Unicode编码格式处理字符数据,其中一个字符占用两个字节,而在VS编译器中,字符的编码采用的是GBK编码,一个字符占用一个字节,所以一个汉字需要两个字节的存储空间。所以这里会存在各种字符编码的转换以及乱码的问题。 字符编码的坑 在Qt中如果编写一句代码: cout << "你好" << endl; 将会输出乱码: 原因在于在QtCreator中,代码文件的默认编码格式是UTF-8,而输出的控制台编码则是GBK,因此在代码中直接编写的中文以UTF-8格式进行编码,输出时对编码后的数据按GBK解码,自然就出现了乱码。 可以在选项中看到当前默认编码是UTF-8: 这个问题并不能简单的直接通过修改默认编码来解决,在Windows 10中,默认创建的文本文件也采用了UTF-8编码,但是有个比较奇特的问题就是VS也好 QtCreator(也是VS编写的)也好,当打开一个默认编码格式的源码文件进行编辑时,如果输入了汉字,则会将该文件重新保存为了ANSI编码,而如果第一个出现的汉字是“转”字,则会出现一个非常神奇的现象:汉字要转码成ANSI,但文件未能正常修改编码,还是UTF-8编码,此时汉字就乱码了。 通过多次尝试,各种配置均尝试过,没有一个有效的解决方法,因此最后的解决方法是:不做任何解决。想要得到一个正常的中文输出,可以借助Qt中的一个字符串类QString类来进行。 string s = "你好"; QString qs(s.data()); cout << string(qs.toLocal8Bit()) << endl; 上面的代码中s中的内容是经过UTF-8编码的字符串,调用其data()方法获取到了原始的字节数据,并构造成了QString,然后调用QString对象的toLocal8Bit方法转换为windows系统的GBK编码数据,最后再包装成一个string对象,得到的就是一个GBK编码的汉字字符串了。 字符串处理 有的时候我们编写一个C++项目,使用了C++标准库中的string来存储字符串,而在QT中更多的是使用QString类,它们之间的转换也比较轻松,在程序中运行时不用考虑编码问题,直接进行转换: QString qs = QString::fromStdString(s); // s是一个string变量,转为QString string str = qs.toStdString(); // QString对象转为string 如果使用了C++的文件流从文件中读取字符串内容,或者要将字符串内容写入文件中,需要保证文件的编码也是UTF-8,这样做就可以避免因编码不一致导致的乱码。 QString常用操作 QString类非常实用,有很多对字符串操作的方法,因此有必要简单了解下它能做哪些事情(具体的使用参看帮助文档): 转换 toInt: 将字符串转换为int整数 toDouble:将字符串转换为double小数 number:QString的静态方法,将数值转换为QString字符串 fromStdString:QString的静态方法,将标准string字符串转为QString toStdString:QString成员函数,将QString对象转为标准string 添加字符串操作 append:在字符串的后面添加字符串 prepend:在字符串的前面添加字符串 insert:在指定的位置插入字符串 删除子串 remove:删除从指定位置开始的若干个字符 修改 trimmed:去掉字符串首尾的空格 simplified:去掉首尾的空格,同时中间连续的空格也用一个空格替换 toUpper:将字符串内的字母全部转换为大写形式 toLower:将字符串内的字母全部转换为小写形式 检索 count()、size() 和 length():都返回字符串的字符个数,这 3 个函数是相同的,但是要注意,字符串中如果有汉字,一个汉字算一个字符。

如何让visibility不占位置

现在我想用visibility , 因为display不支持transition 我想用来做轮播图,但是我轮播div是相对路径,图片轮播时visibility又要占位置 所以现在我暂时是在切换图片的时候将其设置为width=0,有没有优雅的方式?

OPA(运放)与MOS管组成的恒流源电路

电路图 这是一种由运放组成的恒流源电路。 原理分析: 1. OPA OPA (集成运算放大器)具有开源增益高,输入阻抗大,输出阻抗小的特点。 2. MOS管工作原理 我们知道三极管是利用 Ib 的电流控制 IC 的电流,属于电流控制电流器件。 而MOS则是利用Ugs的电压去控制电流 Id 的,所以说 MOS 管是电压控制电流的器件。 对于N沟道增强型的MOS管,当Ugs>Ugs(th)时,MOS就会开始导通,如果在D极和S极之间加上一定的电压,就会有电流Id产生。 在一定的Uds下,D极电流Id的大小是与G极电压Ugs有关的。 我们先来看一下MOS管的输出特性曲线,MOS管的输出特性可以分为三个区:截止区、恒流区、可变电阻区。 截止区 :当满足 Ugs<Ugs(th),MOS管进入截止区。 截止区在输出特性最下面靠近横坐标的部分,表示MOS管不能导电,处在截止状态。截止区也叫夹断区,在该区时沟道全部夹断,电流Id为0,管子不工作。 恒流区 :当满足 Ugs≥Ugs(th) ,且 Uds≥Ugs-Ugs(th),MOS管进入恒流区。 恒流区在输出特性曲线中间的位置, 电流Id基本不随Uds变化,Id的大小主要决定于电压Ugs,所以叫做恒流区,也叫饱和区,当MOS用来做放大电路时就是工作在恒流区(饱和区)。 注:MOS管输出特性的恒流区(饱和区),相当于三极管的放大区。 可变电阻区 :当满足 Ugs>Ugs(th),且 Uds<Ugs-Ugs(th),MOS管进入可变电阻区。 可变电阻区在输出特性的最左边, Id随着Uds的增加而上升,两者基本上是线性关系 ,所以可以看作是一个线性电阻,当Ugs不同电阻的阻值就会不同,所以在该区MOS管相当就是一个由Ugs控制的可变电阻。 击穿区在输出特性左边区域,随着Uds增大,PN结承受太大的反向电压而被击穿,工作时应该避免让管子工作在该区域。 根据MOS管的输出特性曲线,比如下图是取Uds=10V的点,然后用作图的方法,可取得到相应的 转移特性曲线 。 转移特性是表示Uds不变时,Id与Ugs之间的关系。 在上图的转移特性曲线上,我们可以看到当Ugs大于4V时,Id大幅度增加,而当Ugs到达5V以上时,Id基本没有什么大变化了。 3. 恒流源工作原理 此电路是一个负反馈电路,由采样电阻R3实时反馈负载电流,当负载电流变大时,运放反相输入端的电压比正相输入端的电压高,运放输出低电平,使三极管截止,触使负载电流减小;当负载电流变小时,运放反相输入端的电压比正相输入端的电压低,运放输出高电平,使三极管导通,触使负载电流曾大。因此,负载电流经过采样电阻的实时反馈下最终达成恒定的稳定电流。电阻R2起缓冲限流的作用,一般选取1K~100K之间;通过调节电位器RP即可改变恒流源电流的大小,可以根据实际需求选择合适的电位器及电阻大小;稳压管D的作用是为电位器提供恒定的电压,防止因为电源的波动而引起运放正输入端电压不稳定,导致负载电流有波动。三极管Q1为NPN类型,使用时根据实际电压、电流的要求选择合适的三极管,若功率大需考虑散热的要求,做好散热措施。此电路看似简单,实际原理是当采样电阻的电压变化时,直接反馈到运放的反相输入端,它与同相输入端电压的差值被运放放大,输出控制三极管的基极电流,改变三极管的内阻,从而改变发射极与集电极间的电压降,从而使采样电阻的电压保持不变,以达到负载电流恒定的目的。 此处的三极管处于放大区, 随着输入端电压差值被运放放大,使得三极管的导通程度不一样,通俗一点就是,电流大了,少导通一点,电流小了,多导通一点。

离散数学第二版计算机系,《离散数学(第2版)(计算机系列教材)》

编辑推荐: 本着离散数学为数据结构、操作系统、计算机组成原理、数据库原理、算法设计与分析、编译原理、软件工程、计算机网络及人工智能等计算机其他专业课程的学习提供必要的数学基础的原则,同时考虑到大多数高校教学学时数的安排,本书共分8章,分别介绍集合、映射与运算,关系,命题逻辑,谓词逻辑,代数结构,图论,以及几类特殊的图和组合计数。全书以集合、映射、运算和关系为主线,使全书内容联系紧密,具有较强的逻辑性,每节都有精选习题,书后有习题答案及提示。 ( 展开 ) 内容简介:《普通高等教育“十一五”国家级规划教材·计算机系列教材:离散数学(第2版)》根据IEEE-CS/ACM Computing Curricula 2005系统地阐述了离散数学的经典内容, 渗透初等数论知识。 全书共分8章,分别介绍集合、映射与运算,关系,命题逻辑,谓词逻辑,代数结构,图论,几类特殊的图以及组合计数。 本书以集合、映射、运算和关系为主线,使全书内容联系紧密,具有较强的逻辑性。 每节都有精选习题,书后有习题答案及提示。 所用符号尽可能与其他专业课程一致,专业术语均有对应的英文。 《普通高等教育“十一五”国家级规划教材·计算机系列教材:离散数学(第2版)》叙述详尽、通俗易懂、结构严谨、逻辑清晰、便于自学,适合于计算机及相关专业作为一个学期教材(48-72-90学时),也可供考研学生及相关专业技术人员参考。 《普通高等教育“十一五”国家级规划教材·计算机系列教材:离散数学(第2版)》配套的《离散数学习题解答(第2版)》(ISBN 978-7-302-21229-4)同时由清华大学出版社出版,在出版社网站有《离散数学(第2版)》配套的电子教案PPT可供下载。 目前,已编写完成10套考试题。 ( 展开 )

【jmeter性能测试】监控资源时报错:ERROR: java.net.ConnectException: Connection refused: connect

【问题描述】 监控服务器/系统资源,没有监控到数据,无曲线显示,并且报错:ERROR: java.net.ConnectException: Connection refused: connect 如下图所示: 【排查方向】 监控服务是否已经启动,如果监控的是服务器,就需要检查服务端的服务是否启动,如果监控的是本地,就需要检查本地的服务是否启动如果服务已经启动,则查看监控日志,检查客户端(jmeter)是否设置存在问题 【排查步骤】 1- 服务器端的启动、端口 需要监控服务器的资源,操作步骤如下: 准备ServerAgent-2.2.1文件,网上可以下载将ServerAgent-2.2.1放到服务器上有操作权限的位置,可以使用Linux命令操作,也可以使用xftp直接上传xshell连接服务器(此时需要服务器的账号、密码、地址等信息)使用Linux命令,进入ServerAgent-2.2.1文件,启动服务,启动命令如下: java -jar CMDRunner.jar --tool PerfMonAgent --udp-port 8000 --tcp-port 8000 #8000是端口号,在启动服务时需要指定端口号 端口号选取原则: (1)先查询一下当前服务器已被占用的端口号有哪些,使用命令:netstat -ntpl (2)选择任意一个未被占用的端口号,联系服务器维护人员,将该端口放出来 检验该服务及端口是否已经启动方法: (1)在xshell中使用命令查看:telnet 服务器IP地址 端口号 (2)示例:telnet 10.0.0.12 8000 5. 启动之后,正常情况下服务就已经开始监控了,可在这个页面查看相关监控日志 6. 服务在启动后,不要关闭或退出 2- 本地端的启动 与服务器启动原理相同,在本地端打开ServerAgent-2.2.1文件,双击startAgent.bat,弹出窗口后就说明服务已经启动,默认端口为4444 3- jmeter配置参数检查 查看监控日志发现提示:client disconnected,出现这个问题的原因可能是进程执行次数太少,client只执行了很短的时间就断开了,此时在监控页面也会没有任何数据,一直显示waiting for samples 解决方法: 增加执行次数,如增加循环次数为20次,就会有监控数据了

jvm导出dump日志,分析内存情况

1. 查看内存情况 top free top pid=18426 占用内存比例很高 2. 导出dump日志 jmap -dump:format=b,file=heap.hprof 18426 当前目录: 3. 下载到本地,使用MAT打开进行分析 设置MAT内存大小: 几种图表现形式: 内存泄露检测: 这里一个名称叫做 king-thread 的线程,持有了超过 99% 的对象,数据被一个 HashMap 所持有。 这个就是内存泄漏的点,因为我代码中对线程进行了标识,所以像阿里等公司的编码规范中为什么一定要给线程取名字,这个是有依据的,如果不取名 字的话,这种问题的排查将非常困难。 4. jmap Java内存映像工具 [root@iZuf6aveva4meli5nqltfnZ ty]# jmap -heap 18426 Attaching to process ID 18426, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.131-b11 using thread-local object allocation. Parallel GC with 2 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 2065694720 (1970.

java控制台简易计算器(基本的加减乘除功能)

java控制台简易计算器(基本的加减乘除功能) 1.源代码 package base; import java.util.Scanner; public class Example { public static void main(String[] args) { //实现计算器功能 Scanner scanner = new Scanner(System.in); boolean temp = true; while (temp){ System.out.println("+------------+"); System.out.println("| 计算器 |"); System.out.println("| 1.加法 |"); System.out.println("| 2.减法 |"); System.out.println("| 3.乘法 |"); System.out.println("| 4.除法 |"); System.out.println("| 5.退出 |"); System.out.println("+------------+"); System.out.print("请输入选项:"); int choice = scanner.nextInt(); int a; int b; switch (choice) { case 1: System.out.print("请输入第一个加数:"); a = scanner.nextInt(); System.out.print("请输入第二个加数:"); b = scanner.

数字复接系统中帧同步的基本原理

目录 一、 引言二、帧同步的基本原理2.1巴克码简介2.2关键技术2.2.1搜索态2.2.2校核态2.2.3 同步态 一、 引言 在数字通信网中,为了扩大传输容量和传输效率,通常会把若干个低速数字信号合并成为一个高速数字信号,然后通过高速信道传输。数字复接就是实现这种数字信号合并的专门技术。系统框图如下图所示: 数字通信时,一般以一定数目的码元组成一个个“字”或“句”,即组成一个个“帧”进行传输。为了保证接收端分接系统能正确的恢复出信号,需要对接收到的信息进行帧同步。帧同步信号的频率很容易由位同步信号分频得到,但每个帧的开头和末尾时刻却无法由分频器的输出决定。帧同步的任务就是要给出这个“开头”和“末尾”的时刻。 二、帧同步的基本原理 实现帧同步的基本方法是在发送端预先规定的时隙插入一组特殊码型的帧同步码组,在接收端由帧同步检测电路检测该码组以保证收发帧同步。要求插入的码组具有尖锐的自相关函数,并与信息码的差别大,以便接收端正确识别和减少伪同步的概率。帧同步码组可以集中插入在每帧的开头位置,称为帧同步码集中插入法,也可以分散插入在各个支路的前面,称为帧同步码分散插入法。 2.1巴克码简介 目性能较好且广泛应用的一种同步码就是巴克(Barker)码。它是一种具有特殊规律的二进制码组,并且是一种非周期序列。一个n位的巴克码组位{x1,x2,x3…xn},xn取值为+1或-1。其局部自相关函数为: 用matlab代码可以仿真出其局部自相关函数,7位巴克码组仿真结果如下图: 从其局部自相关函数图中可以看出,当接收到的帧头同本地巴克码组完全对齐时,其自相关函数具有峰值。可通过设定判决门限,将该码组识别出来。 目前能找到的巴克码组如下表所示: 下图所示为13位巴克码识别器的原理图: 当输入码元加到移位寄存器时,如果移位寄存器的某位进入的是1码,则移位寄存器该位的1端输出为+1,0端输出为-1;反之,当进入的是0码时,移位寄存器该位1端输出为-1,0端输出为+1。实际上该搜索电路是对输入的巴克码进行相关运算,当一帧到来时,首先进入搜索电路的是帧同步码组,只有当13位巴克码在某一时刻正好全部进入13位寄存器时,13位移位寄存器输出端都输出+1,相加后最大值输出为+13,其余情况都小于+13. 2.2关键技术 电路只有进入同步态,才能提供正常的服务。但在传输过程中,由于干扰和环境影响会使帧同步码组中码元发生错误,乃至失锁,电路就难以保证服务质量,有必要对电路采取同步状态保护措施。同时由于信息码是随机的,完全可能出现与帧同步码相同结构的码组而造成接收端的假同步。在采取了同步状态保护之后,必须在随后的规定时刻上至少M次不再出现伪同步码组,才能向下一个码组搜索。这明显拉长了同步搜索的时间,有必要采取相应的搜索校核措施。 下图所示为同步电路状态机的状态转换图: 状态机共设计了三个状态搜索态、校核态、同步态。 2.2.1搜索态 开始时,在数据接收的起始时刻或帧未同步时,帧同步电路进入搜索态。在数据流中搜索帧同步码,接收码流逐比特进入同步检测电路,当数据流与帧同步码相同时,表明已经搜索到一个同步帧头,可进入帧同步校核态。即开始时,只要检测到一个帧同步码组就进入校核态。 2.2.2校核态 为了防止信号中出现虚假同步,找到第一组同步码后跳过1帧长度必须再次确认帧同步码。若连续经过M帧同步码确认均同步正确,则系统立即转入同步态。连续同步次数小于M或有一帧未同步,系统都将返回搜索态。由首次搜索到帧同步码到进入同步态的M帧时间叫后方保护时间。 2.2.3 同步态 帧同步处于同步状态时,若连续N帧帧同步码正确则仍保持在同步状态。考虑到接收数据流的帧同步码可能受外界干扰而存在误码,在同步状态中只有连续N帧丢失同步码,才进入失步状态,并返回搜索态。其中N帧的时间叫前方保护时间。**即在同步状态下,并不是帧同步码一出现误码,就意味着系统失步,而返回搜索态。**只有连续N帧丢失同步码,才意味着系统失步,重新返回搜索态。

计算机机房的日常维护,机房日常八大维护措施

保障机房设备正常运行,对机房环境监控系统、电力系统、监控设备、计算机主机设备定期检测、维护和保养,保障机房设备运行稳定,降低故障率。确保机房在突发事故导致硬件设备故障,影响机房正常运作情况下,可及时得到设备供应商或机房管理维护人员的产品维修和技术支持,并快速解决故障。保障机房设备稳定运行,并通过保养延长设备生命周期,降低故障率。 机房的日常维护运营是离不开机房监控系统的,因为机房监控系统可以很好的保障机房设备正常运行,除了系统软件的管控外,平时也需要机房管理员对机房设备做定期保养,这些是机房监控系统不能替代的,如通过人工的方法对机房监控系统、监控设备、计算机主机设备定期检测、维护和保养,这样可以保障这些机房设备的故障率的降低,同时可以延长机房设备的使用周期,这样可以保障了机房在突发情况导致机房无法运转的情况不会发生了。那么要维护运营好机房设备正常运行就要从设备的定期检测、维护和保养开展了。 机房日常八大维护措施有: 1、消防设备维护 消防设备的维护是机房最为基本的维护,当消防设备出问题,对于机房的影响是非常巨大的,一般消防设备维护主要是检查火警探测器、手动报警按钮、火灾警报装置等; 2.机房漏水设备维护 定时查看漏水传感器跟感应绳有没有损坏或失灵,避免灾害发生时不能及时检测到; 3、UPS及电池维护 机房都会有电池以及ups相关的设备,那需要对机房不间断电源的数据进行采集以及检查维护,确保确保电池组正常工作,同时同时要根据实际情况进行电池核对性容量测试;进行电池组充放电维护及调整充电电流,确保电池组正常工作;检查记录输出波形、谐波含量、零地电压;查清各参数是否配置正确;定期进行UPS功能测试,如UPS同市电的切换试验; 4、机房空调及新风维护 机房空调主要是调节机房的温湿度,一般机房内的温湿度都需要保障常温下,所以需要检查空调运行是否正常,要检查机房换风设备运转是否正常; 5、照明电路维护: 照明电路设备维护主要包括镇流器、灯管及时更换,开关更换;线头氧化处理,标签巡查更换;供电线路绝缘检查,防止意外短路; 6、设备除尘维护 设备除尘维护主要是定期对设备进行除尘处理,清理,调整安保摄像头清晰度,防止造成机房监控设备将尘土吸入监控设备内部的情况发生; 7、机房安防保障维护 时检测视频门禁等设备确保设备的长远运行,避免设备故障,防止不相干人等随意进出; 8、机房其他维护 机房其他维护包括基础维护,如:防鼠、地面除尘、防雷器检查、静电地板清洗清洁、缝隙调整、损坏更换、接地电阻测试、主接地点除锈、接头紧固、接地线触点防氧化加固等维护同时要管理好机房那需要完善机房运维规范,同时需要优化好机房运维管理体系。 来源于:斯特纽www.stoneu.com 推荐相关文章:

出现两个计算机管理员账户,win登录界面突然多出来个Administrator的账户

您好, 了解到您在登陆系统时遇到了问题。 可能存在Administrator被启用的情况。可以尝试使用其他管理员账户登陆系统,win+X+A后使用命令net user Administrator /active:no尝试禁用掉这个账户。 Administrator账户登陆的情况下无法使用应用,在系统版本为非家庭版的情况下可以尝试win+R后输入gpedit.msc,到计算机配置-Windows设置-安全设置-本地策略-安全选项中找到策略“用户账户控制:用于内置管理员账户的管理员批准模式”,将该策略设置为启用,看下效果。 如果是家庭版,尝试win+R后输入regedit,到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current Version\Polices\System中,新建一个DWORD,名为FitlerAdministratorToken,键值设置为1。完成后,建议重启计算机,测试下效果。 通常情况下,建议您不要将Administrator账户作为日常登陆和使用的账户。 希望以上信息能帮到您。

计算机机房维护保养计划表,机房日常维护保养计划

《机房日常维护保养计划》由会员分享,可在线阅读,更多相关《机房日常维护保养计划(2页珍藏版)》请在人人文库网上搜索。 1、机房日常维护保养计划一、 日常维护保养计划其保养项目如下: (1) 网络管理员对机房例行每日巡查,详细填写机房安全检查记录表 。(2) 每周二下午对机房地板,机柜,服务器表面进行卫生清理 。 (3) 每月的第四周星期二对服务器彻底除尘。 (4) 对空调进行检查,确认其工作状况是否良好,排水管道是否通畅。 (5) 网络交换机除尘,及保证其工作状况良好。 (6) 机柜及配线架清理,及保证其接触良好。 (7) 检查UPS的工作状况及充放电是否良好。 (8) 检查机房门禁的密封性,如有问题则及时上报解决。二、季度维护计划 具体维护时间是每一季季末最后一个星期,其维护项目如下: (1) 彻底清扫机房内部和周围环境卫生。 (2) 为机房内所有设备除尘。 (3) 检查清洗空调系统。 (4) UPS系统的充放电操作。 (5) 检查设备及电源的工作情况,做好记录。 (6) 对UPS进行充放电。 (7) 换季时,检查各种安全、防火及报警设备。 (8) 检查机房防水、防雷电措施,并作好记录。 三、其它维护计划 (1) 对临时增设设备的检查及除尘。(2) 机房两年进行中修,根据实际情况对机房设备和机房进行,时间为选为年未。(3) 五年,对设备及机房进行大修(时间选为年未。

计算机发表sci论文,sci2区计算机论文容易发表吗?

sci2区计算机论文容易发表吗? sci2区计算机论文容易发表吗?相对来说二区刊物比一区期刊投稿更加容易的,而且二区计算机sci期刊投稿认可度也是比较高的。不过一般来说,计算机SCI1区发表的论文含金量高于SCI2区期刊。 作者写的计算机方向论文如果不能够在sci一区期刊发表,那么也是可以尝试sci二区期刊的,这样也能够获得较多的加分,此外学术顾问在这里也分享了几本计算机方向的2区sci期刊,都是单位认可度高的期刊,对晋升职称也是有帮助的: International Journal of Machine Learning and Cybernetics控制论涉及到描述我们日常生活中无所不在的系统之间复杂的相互作用和相互关系。机器学习发现系统中变量和变量集合之间的基本函数关系。机器学习和控制论学科的融合旨在通过不同的数据学习机制发现系统之间的各种形式的交互作用。 国际机器学习与控制论杂志(IJMLC)关注机器学习与控制论结合处出现的关键研究问题,并作为快速传播该领域最新进展的广泛论坛。 COMPUTER SPEECH AND LANGUAGE计算机语音与语言出版关于语音与语言识别、理解、生成、编码和挖掘的原始研究报告。 语音和语言科学有着悠久的历史,但直到最近才开始大规模实施和实验复杂的语音和语言处理模型。这类研究通常由人工智能、计算机科学、电子工程、信息检索、语言学、语音学或心理学的从业者分别进行。 该杂志为这项工作提供了一个重点,并鼓励跨学科的方法,以语音和语言研究和技术。 MACHINE LEARNING机器学习(ML)是对计算机系统使用的算法和统计模型的科学研究,这些算法和统计模型不使用显式指令,而是依靠模式和推理来有效地执行特定的任务。它被视为人工智能的一个子集。机器学习算法建立一个样本数据的数学模型,称为“训练数据”,以便在没有明确编程来执行任务的情况下做出预测或决策。机器学习与计算统计密切相关,计算统计集中于使用计算机进行预测。 以上就是计算机方向sci二区期刊,更多计算机方向的sci期刊,或者是论文投稿知识,也可以和在线学术顾问进行交流,这样也不耽误您论文发表。 关键字: 声明:文章来源于网络,作者观点不代表本网站立场,文章版权属于原作者所有,部分文章推送时未能及时联系作者,还望见谅,若涉及版权问题烦请联系我们,我们将会在24小时内删除。

sci二区计算机类有哪些期刊,二区材料类sci期刊有哪些

二区材料类sci期刊有哪些 发布时间:2021-03-16浏览:1次 对期刊有所了解的作者都知道,在sci期刊上投稿难度相对在国内期刊上投稿难度要大很多。加之sci属于国际期刊,所收录的论文基本上都是以英语为主。所以,国内对sci期刊了解得不是很多。下面小编就给大家推荐几本与材料相关的且在二区的sci期刊。 1、《ACS生物材料科学与工程》英文期刊名称:《ACS Biomaterials Science & Engineering》,由UNITED STATES出版。期刊ISSN:2373-9878,2017-2018最新影响因子:4.432,2017-2018自引率:7.7%。 2、《先进电子材料》英文期刊名称《Advanced Electronic Materials》由GERMANY出版。期刊ISSN:2199-160X,2017-2018最新影响因子:5.466,2017-2018自引率:5.3%。 3、《先进材料界面》英文期刊名称《Advanced Materials Interfaces》是由GERMANY出版。期刊ISSN:2196-7350,2017-2018最新影响因子:4.834,2017-2018自引率:6.2%。 4、《应用粘土科学》英文期刊名称《APPLIED CLAY SCIENCE》由NETHERLANDS出版。出版周期:双月刊。期刊ISSN:0169-1317,2017-2018最新影响因子:3.641,2017-2018自引率:20%。 5、《应用表面科学》英文期刊名称《APPLIED SURFACE SCIENCE》由NETHERLANDS出版,出版周期:半月刊。期刊ISSN:0169-4332,2017-2018最新影响因子:4.439,2017-2018自引率:14.8%。 推荐想在sci期刊发表论文的作者阅读:sci二区论文发表周期长吗 以上就是对“二区材料类sci期刊有哪些”的介绍,更多期刊可以咨询在线编辑。在sci二区上投稿的难度是非常大的,大家要想顺利地将论文发表出去,建议大家在论文翻译和润色方面下点工夫。毕竟,中英文在表达方式上不同,即便论文质量比较高,但是如果翻译上有问题,也会影响论文发表。

左神数据结构与算法课

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if(data.size()<2) return; int ret=0; *num1=0; *num2=0; for(auto data_em:data){ ret = ret^data_em; } ret =ret & (~ret + 1);// 提取最右侧的1 for(auto data_em:data){ if(data_em & ret){// 对每个data中的元素分类 *num1 ^=data_em; } else{ *num2 ^=data_em; } } return; } };

mvn -rf :jeecg-boot-base-core

在Docker中安装了Jenkins,在Jenkins中构建一个Maven项目,打包运行JeecgBoot项目,后台报错: … [ERROR] Failed to execute goal on project jeecg-boot-base-core: Could not resolve dependencies for project org.jeecgframework.boot:jeecg-boot-base-core:jar:2.4.5: Failed to collect dependencies at com.baomidou:dynamic-datasource-spring-boot-starter:jar:3.2.0: Failed to read artifact descriptor for com.baomidou:dynamic-datasource-spring-boot-starter:jar:3.2.0: Could not transfer artifact com.fasterxml.jackson:jackson-bom:pom:2.8.8 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [aliyun (http://maven.aliyun.com/nexus/content/groups/public, default, releases), jeecg (http://maven.jeecg.org/nexus/content/repositories/jeecg, default, releases), central (http://maven.aliyun.com/nexus/content/groups/public/, default, releases+snapshots)] -> [Help 1] [ERROR] [JENKINS] Archiving /var/jenkins_home/workspace/jeecg-boot-2/jeecg-boot-module-system/pom.xml to org.jeecgframework.boot/jeecg-boot-module-system/2.4.5/jeecg-boot-module-system-2.4.5.pom [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

git权限被拒绝(已添加公钥) 解决办法,亲测有效

问题 在克隆仓库时提示权限被拒绝,如下所示: $ git clone git@github.com:user/repository.git > Permission denied (publickey). 前提: 已经生成公钥,且添加到Github的SSH中使用的是Windows系统 解决办法 在git-bash中执行以下命令,添加ssh文件 eval "$(ssh-agent -s)" ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa) 在C:\Users\yourUserName\.ssh文件夹下新建文件config(注意没有后缀),添加以下命令,这是为了能够永久添加辨别文件 Host * IgnoreUnknown UseKeychain AddKeysToAgent yes UseKeychain yes IdentityFile PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa) 关闭窗口,重新打开git-bash,执行以下命令,测试是否能访问github ssh -T git@github.com 如果能够正常输出以下语句,代表成功 Hi Star-live! You've successfully authenticated, but GitHub does not provide shell access. 参考文献 错误:权限被拒绝(公钥)Github permission denied: ssh add agent has no identities.ssh/config: “Bad configuration option: UseKeychain” on Mac OS Sierra 10.

超前进位加法器(verilog)

文章目录 1.串行进位加法器2.超前进位加法器 加法器单元可以分为全加器和半加器,半加器没有输入进位端,所以半加器时两个比特相加,而全加器时3个比特相加。如下为一个1位半加器, 而一个1位全加器单元的逻辑门数量要比半加器多,: 1.串行进位加法器 多位数相加时,直接描述产生串行进位加法器。代码如下: //3位半加器 module(cout,sum,a,b); output cout; output [2:0]sum; input [2:0]a,b; assign {cout,sum} = a + b; endmodule //3位全加器,有低位向本位的进位 module(cout,sum,a,b,cin); output cout; output [2:0]sum; input [2:0]a,b; input cin; assign {cout,sum} = a + b + cin; endmodule 2.超前进位加法器 两个多bit位的数相加时,每一位都是带进位相加的,因为必须要使用全加器。如果采用串行进位加法器(如上代码所示)的话,只要依次将低位全加器的进位输出端(CO)接到高位全加器的进位输入端(CI)。这就每一位相加的结果都必须要等到低一位的计算结束,产生进位交给高一位的进位输入端,才可以计算高一位。由此类推,如果数值的位数多的话,那么这个串行进位加法器的输出延迟会非常的大。 为了提高运行速度,提前计算好进位信号,这样高位的全加器就不需要等待来自低位的进位信号了。怎么实现呢?因为第i位的信号都可以由两个数的第 (i-1) 位、第 (i-2) 位、…、第0位唯一地确定。第 i 进位可以用 : 以四阶超前进位加法器为例,进位的产生如下图: 代码如下: module four_bits_fast_adder(cout,sum,a,b,cin); output [3:0]sum;//数据累加和本位 output cout;//输出进位 input [3:0]a,b;//需要相加的数 input cin;//输入进位 wire [4:0]g,p,c;//分别对应Gi、Pi和Ci assign c[0] = din;//最低进位为输入进位 assign P = a | b;// Pi = Ai·Bi assign g = a & b;// Gi = Ai+Bi assign c[1] = g[0] | (p[0]&c[0]);//对应图中 C1 assign c[2] = g[1] | ( p[1]&(g[0] | (p[0]&c[0]) ); assign c[3] = g[2] | (p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0]))))); assign c[4] = g[3] | (p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0]))))))); assign sum = p ^ c[3:0]; assign cout = c[4]; endmodule

OSPF的基本工作原理

OSPF的基本工作原理 1.定义 2.特点 3.基本概念 4.OSPF五种分组类型 5.DR/BDR 6.区域 1.定义 开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的。 “开放” 表明OSPF协议不是受某一家产商控制,而是公开发表的。 “最短路径优先”是因为使用了dijkstra提出的最短路径算法SPF。 2.特点 ①OSPF–>基于链路状态,而不是RIP–>基于距离向量 ②OSPF采用SPF算法计算路由,从算法上保证了不会发生路由环路。 ③OSPF不限制网络的规模,更新效率高,收敛速度快。 3.基本概念 (1)链路状态:本路由器和哪些路由器相邻,以及相应链路状态的“代价”(cost)。 cost:指费用、距离、时延、带宽等。 (2)使用OSPF的路由器都会产生链路状态通告LSA。其中内容一般为 ①直连网络的链路状态信息 ②邻居路由器的链路状态信息 (3)LSA被封装在链路状态更新分组LSU中 —>洪泛法发送。 (4)使用OSPF的每一个路由器都有一个链路状态数据库LSDB,用于存储LSA。 (5)通过路由器洪泛法发送封装有自己的LSA的LSU分组。 –>各路由器的LSDB最终将达到一致 (6)使用OSPF的路由器基于LSDB进行SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自路由表。 4.OSPF有以下五种分组类型 ①问候(hello)分组 ②数据库描述(DBD)分组 ③链路状态请求分组(LSR) ④链路状态更新分组(LSU) ⑤链路状态确认分组(LSAck) 从OSPF建立邻居,到LSA的互换,到路由表的计算,需要经过一系列的数据包交换过程,过程如下: 两路由器之间首先建立邻居关系互相发送hello分组,然后双方都发送各自的数据库描述分组(DBD),若其中一方发现对方的LSDB中有自己LSDB中所没有的LSA则向对方发送链路状态请求分组(LSR),对方则将其没有的LSA通过链路状态更新分组(LSU)发送,该路由器接收并回一个链路状态确认(LSAck)。最终达到收敛状态。 5.DR/BDR OSPF在多点接入网络中路由器邻居关系 的建立: 当多台OSPF路由器连到同一个多路访问网段时,如果每两台路由器之间都相互交换LSA,那么该网段将充满着众多LSA条目,为了能够尽量减少LSA的传播数量,通过在多路访问网段中选择出一个核心路由器,称为DR(Designated Router),网段中所有的OSPF路由器都和DR互换LSA,这样一来,DR就会拥有所有的LSA,并且将所有的LSA转发给每一台路由器;DR就像是该网段的LSA中转站,所有的路由器都与该中转站互换LSA,如果DR失效后,那么就会造成LSA的丢失与不完整,所以在多路访问网络中除了选举出DR之外,还会选举出一台路由器作为DR的备份,称为BDR(Backup Designated Router)。 ①选举指定路由器DR和备用的指定路由器BDR (1).DR与BDR并没有任何本质与功能的区别,只有在多路访问的网络环境,才需要DR和BDR,DR与BDR的选举是在一个二层网段内选举的,即在多个路由器互连的接口范围内,与OSPF区域没有任何关系,一个区域可能有多个多路访问网段,那么就会存在多个DR和BDR,但一个多路访问网段,只能有一个DR和BDR;选举DR和BDR的规则为: 比较接口优先级 选举优先级最高的成为DR,优先级数字越大,表示优先级越高,被选为DR的几率就越大,次优先级的为BDR,优先级范围是0-255,默认为1,优先级为0表示没有资格选举DR和BDR。 Route-Id大小 如果在优先级都相同的情况下,Route-Id 最大的成为DR,其次是BDR,数字越大,被选为DR的几率就越大。 (2).在一个多路访问网络中,选举DR和BDR是有时间限制的,该时间为Wait时间,默认为4倍的Hello时间,即与Dead时间相同,如果OSPF路由器在超过Wait时间后也没有其它路由器与自己竞争DR与BDR的选举,那么就选自己为DR;当一个多路访问网络中选举出DR与BDR之后,在DR与BDR没有失效的情况下,不会进行重新选举,也就是在选举出DR与BDR之后,即使有更高优先级的路由器加入网络,也不会影响DR与BDR的角色,在越出选举时间(Wait时间)后,只有DR与BDR失效后,才会重新选举。DR失效后,会同时重新选举DR与BDR,而在BDR失效后,只会重新选举BDR。 ②所有的非DR/BDR只与DR/BDR建立邻居关系。 ③非DR/BDR之间通过DR/BDR交换信息。 6.区域 为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统分为若干个更小的范围–>区域 好处:把利用洪泛法交换链路状态信息的范围局限于每个区域而不是整个AS,减少了整个网络的通信量。 未完待续···· 参考于: OSPF协议介绍 计算机网络微课

WCF框架 Winform开发框架 c#开发 整个WCF框架和Winform开发框架一样,整合了权限控制管理、字典管理模块、公用类库、通用程序自动更新等模块

WCF框架 Winform开发框架 c#开发 整个WCF框架和Winform开发框架一样,整合了权限控制管理、字典管理模块、公用类库、通用程序自动更新等模块,具备良好的界面布局和分布式服务应用的特点,支持数据分页、数据导入、Excel导出、支持多界面样式、支持闪屏、热键控制、多数据库支持,并且和代码生成工具Database2Sharp紧密结合等等特点,不一一尽数。 界面层在传统的Winform框架界面中和WCF+Winform框架界面中表现一致,在局域网中部署测试,客户端+ WCF服务器+ Oracle数据库服务器这种部署模式,非常流畅,由于是基于WCF框架结构,可以应用在广域网中,不过可能服务相应及Winform的体验要依赖于带宽的大小。 WCF主要是基于客户端-服务端通讯模式来实现分布式应用,并通过服务公布的节点进行访问,实现数据的交换等服务。

JwtAuthenticationFilter config

/** 验证用户名密码正确后 生成一个token并将token返回给客户端 @author huwei */ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final StringRedisTemplate stringRedisTemplate; private final AuthenticationManager authenticationManager; public JwtAuthenticationFilter(AuthenticationManager authenticationManager,StringRedisTemplate stringRedisTemplate) { this.authenticationManager = authenticationManager; this.stringRedisTemplate = stringRedisTemplate; } /** 验证操作 接收并解析用户凭证 */ @Override public Authentication attemptAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException { // 从输入流中获取到登录的信息 // 创建一个token并调用authenticationManager.authenticate() 让Spring security进行验证 return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(request.getParameter(“username”),request.getParameter(“password”))); } /** 验证【成功】后调用的方法若验证成功 生成token并返回 */ @Override protected void successfulAuthentication(HttpServletRequest request,HttpServletResponse response,FilterChain chain,Authentication authResult) throws IOException {

QtXml:QDomText、QDomProcessingInstruction、QDomDocumentFragment、QDomAttr

这几个类比较简单,仅展示值得一说的函数或用法。 QDomText 1、QDomText splitText(int offset) 将此 DOM 文本对象拆分为两个 QDomText 对象。 这个对象保留它的第一个偏移字符,第二个(新创建的)对象被插入到这个对象之后的文档树中,并带有剩余的字符。 该函数返回新创建的对象。 QDomElement docElem = doc.documentElement(); qDebug()<<docElem.text();//helloWorld QDomText textNode = docElem.firstChild().toText(); QDomText splitNode = textNode.splitText(5); docElem.insertBefore(splitNode,textNode); QDomProcessingInstruction xml的处理指令。例: QDomDocument doc; QDomProcessingInstruction stateInstruct = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""); QDomProcessingInstruction dealInstruct = doc.createProcessingInstruction("xml-stylesheet", "type=\"text/css\" href=\"style.css\""); doc.appendChild(stateInstruct); doc.appendChild(dealInstruct); QDomElement root = doc.createElement("MyML"); doc.appendChild(root); QDomElement tag = doc.createElement("Greeting"); root.appendChild(tag); QDomText t = doc.createTextNode("Hello World"); tag.appendChild(t); QFile file("demo.xml"); file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); QTextStream out(&file); out.

c语言指针用法详解,通俗易懂超详细!

文章转自:无际单片机 大家好,我是无际。 今天给大家来讲解一下指针。 我会由浅到深,最后结合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛! 长文预警!全文大约5200多字,学指针看这篇文章就够了! 很多人跟我刚学习c语言一样,都害怕指针。 我也是后面做了一些物联网网关才知道,指针是c语言的灵魂这句话真正含义。 没有指针,很多功能实现起来确实很不方便,比如做不到真正的模块化编程。 Ok,废话不多说,下面正式进入主题。 一、通过这篇文章你能掌握以下知识: 指针的相关概念 掌握指针与数组之间的关系 掌握指针指向的指针 掌握如何使用指针变量做函数参数 掌握如何使用指针函数 掌握如何使用指针数组函数 那么这篇文章对应有视频教程,如果不喜欢看文章的可以去看视频,教程在小破站可以搜无际单片机编程找到,也可以找我们拿。 二、指针的作用: 指针是C语言中一个比较重要的东西,有人说指针是C语言的灵魂这句话说的一点也没错。 正确灵活地运用它,可以有效地表达一些复杂的数据结构,比如系统的动态分配内存、消息机制、任务调度、灵活矩阵定时等等。 掌握指针可以使你的程序更加简洁、紧凑、高效。 那么在单片机领域,如果是做稍微大一点的项目,需要把每个功能做成模块化,硬件驱动层和应用层分别独立运行。 即使更换单片机型号也不用修改应用层程序,即移植性非常强,这些都离不开指针。 甚至没指针会很难实现,即使实现代码的可移植性也很差。 三、指针的概念 前面讲了指针的作用,这里再强调一点,指针是一把双刃剑。 用好了能十分灵活而且提高程序的效率,但是如果使用不当,则会出现程序”死机”等致命问题。 而这些问题往往是由于错误地使用指针而造成的,最常见的就是内存溢出错误,指针指向未知地址。 1.地址与指针 指针是一个比较抽象的概念,如果想真正了解指针,那么要先从数据是如何存储的说起,我们通过一个图来看一下数据在内存里存储的情况。 在这个图中,都是以16进制显示。 红色标注的0x00000400代表地址内存地址,绿色37,30代表数据,而橙色标注的00 01代表地址递增量,即代表0x00000400和0x00000401,每个地址存储1个字节数据。 那么我们把这个图看作是数据在内存里的存储形式,0x00000400这个内存地址存储着数据37,0x00000401这个内存地址存储着数据30。 当我们在程序里定义一个字节的变量,那么在编译器编译时就会给这个变量分配一个这样的内存地址来存储。 假设我们定义以下变量 unsigned char a; a = 0x37; 对应这个图就是,编译器在编译时会为变量a分配一个字节的内存空间并把0x37这个数据存储进去,并将变量名a改成地址0x00000400,以便CPU的访问。 通过这个地址就能找到变量a数据的存储位置,而这个地址0x00000400其实就是指针,通过这个指针可以访问变量a的数据。 2.指针变量 通过上面讲解我们明白了通过地址能访问内存的数据,这个地址啊就是指针。 那么指针和指针变量呢是不一样的概念,大家一定要记住了。 指针是概念、指针变量是这个概念的具体应用之一,我们先来看一下C语言里怎么定义指针变量。 指针变量定义的一般形式: 变量类型 *变量名 unsigned char *p; 通过这种语法,我们就能够定义一个指针变量p。 指针变量赋值 指针和指针变量是两个概念,指针变量跟普通变量一样,在使用前一定要定义和赋值(指向地址)。 给指针变量赋的值和普通变量不同,给指针变量赋值只能赋地址,而不能赋予其他任何值,否则会引起错误。 那么怎么获取普通变量的地址呢,在C语言里可以使用”&”来获取普通变量的地址,一般用以下格式来表示: &变量名 那么通过&变量名取得变量地址后就可以赋值给指针变量。 举例: unsigned char a; unsigned char *p int main()

Hyper-v 安装Ubuntu 21.04虚拟机

一、开启Hyper-v 控制面板-->程序-->程序和功能(启用或关闭Windows功能)-->勾选Hyper-v选项-->重启电脑 二、下载ISO包 163国内镜像下载地址:http://mirrors.163.com/ubuntu-releases/21.04/ 三、配置虚拟机 1. 打开Hyper-v管理器 可以通过Windows搜索功能打开 2.创建虚拟机 新建一个外部虚拟交换机,网卡可以选择无线网卡或有线网卡 新建虚拟机,修改一下储存位置(C盘大不用改) 选择第二代 根据自己电脑硬件情况设置启动内存(开启动态内存,系统会自动分配内存) 网络选择刚才创建的虚拟交换机 配置虚拟内存,修改一下位置 安装进项默认 点击“完成” 3.安装系统镜像 添加一个DVD驱动器 选择镜像文件 关闭安全启动 启动/连接虚拟机,选择第一项回车 开始安装Ubuntu 一路默认操作(记得开启openssh) 安装完成重启虚拟机 输入用户名,密码登录系统 查看IP地址 ip addr show 知道ip就可以通过ssh工具连接了,写的比较仓促,欢迎补充。

西南交通大学计算机程序设计基础期末,西南交通大学信息科学与技术学院计算机程序设计基础 绪论.pdf...

计算机程序设计与 Visual C++ 西南交通大学 信息学院 计算机基础教育中心 课程简介 C++是当今最流行的高级程序设计语言之 一,应用十分广泛。它既支持结构化的程序 设计方法,也支持面向对象的程序设计方法。 本课程介绍最基本的概念、语法规则和编程 方法。包括:引言、基本的数据类型、运算 符和表达式、流程控制语句、函数、数组与 字符串、指针、类与对象、输入输出流等。 西南交通大学信息学院 课程简介 结 运算符与表达式 构 流程控制语句 化 C 程 + 序 函数 + 设 数组和字符串 程 计 序 指针 设 基础 计 语 面 类与对象 言 向 对 继承 象 程 多态 序 设 输入输出流 计 西南交通大学信息学院 课程目标 会用Visual C++6集成开发环境编写和 调试程序。掌握C++语言的概念、语法规则 和编程方法,理解结构化的程序设计和面 向对象程序设计的基本思想,会用结构化 的程序设计(SP)和面向对象的程序设计 方法(OOP) ,开发简单的应用程序。 西南交通大学信息学院 学习方法 • C++是一门实践性很强的课程,一定要边学 边练,边练边学,善于思考。 • 如果上课听不懂,应课前预习 • 上课应记笔记,利用电子教案做好课后复习

springboot参考笔记

**一、**Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 2、微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 单体应用:ALL IN ONE 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元; 详细参照微服务文档 3、环境准备 http://www.gulixueyuan.com/ 谷粒学院 环境约束 –jdk1.8:Spring Boot 推荐jdk1.7及以上;java version “1.8.0_112” –maven3.x:maven 3.3以上版本;Apache Maven 3.3.9 –IntelliJIDEA2017:IntelliJ IDEA 2017.2.2 x64、STS –SpringBoot 1.5.9.RELEASE:1.5.9; 统一环境; 1、MAVEN设置; 给maven 的settings.xml配置文件的profiles标签添加 <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> 2、IDEA设置 整合maven进来; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pv0iFtcC-1626449586309)(images/搜狗截图20180129151045.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-791zbTph-1626449586313)(images/搜狗截图20180129151112.png)] 4、Spring Boot HelloWorld 一个功能: 浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串; 1、创建一个maven工程;(jar) 2、导入spring boot相关的依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.

常见聚类算法汇总

文章目录 聚类一、聚类是什么?二、聚类算法的评判标准1.性能度量外部指标内部指标 三、距离计算1.闵可夫斯基距离2.欧氏距离3.曼哈顿距离3.VDM距离 四、聚类算法1.原型聚类a)K均值算法(k-means)b)学习向量化(LVQ)c)KNN算法 2.密度聚类DBSCAN 3.层次聚类AGNES 4.网格聚类5.模型聚类高斯混合聚类(EM) 6.谱聚类 总结 聚类 提示:本文适合有一定代码基础,了解机器学习概念,机器学习算法入门的读者,本文只是对常用聚类做了简单的总结,后期会加入个人理解,希望可以对大家有所帮助。 一、聚类是什么? 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”。 在无监督学习中,目标通过对无标记数据训练样本的学习来揭示数据内在的性质规律,将数据集中的样本划分为多个不相交的子集,为数据进一步分析提供基础。 二、聚类算法的评判标准 简单来说就是“簇间相似度高,簇内相似度低的时候效果最好”。 1.性能度量 外部指标 Jaccard系数(简称JC) FM系数(简称FMI) Rand系数(简称RZ) 结论:上述值均为0-1之间且越大越好 内部指标 DBI DI 结论:DBI值越小越好,DI值越大越好 三、距离计算 1.闵可夫斯基距离 2.欧氏距离 3.曼哈顿距离 3.VDM距离 四、聚类算法 1.原型聚类 a)K均值算法(k-means) 定义: 算法通过把样本分离成 n 个具有相同方差的类的方式来聚集数据,最小化称为 惯量(inertia) 或 簇内平方和(within-cluster sum-of-squares)的标准(criterion)。该算法需要指定簇的数量K。 算法 采用贪心策略通过迭代优化来近似求解。 第一部分 将x样本划分到簇内计算X样本与各均值向量之间的距离。根据均值最近的向量确定簇标记。将样本划分到相应的簇 第二部分 确定新的均值向量 Created with Raphaël 2.3.0 开始 计算新的均值向量 new==old? 结束输出old 向量=new向量 yes no b)学习向量化(LVQ) LVQ带有类标记,采用迭代优化。 样本集D,学习效率m,初始化原型向量p并设置其标记。 1.从样本集中随机选取样本。 2. 计算样本与p向量的距离 3. 找出与x距离最近的原型向量。 4. 判断X的标记和p的标记是否相等

雨课堂期末考试答案----查了好多份答案,一道一道的进行查找正确答案,基本可以保证是正确答案

1.主观题 (10分) 工程为何总是伴随着风险?导致工程风险的因素有哪些? 2.判断题 (1分) 目前对水利工程价值的伦理判断基本是遵循功利主义原则。()对 3.单选题 (1分) 下列哪一项不属于工程实践全球性特征?( )C A 生态性 B 深远性 C 社会性 D 整体性 4.单选题 (1分) 工程实践全球化中工程师的伦理责任包括职业伦理责任、()、环境伦理责任、以及文化伦理责任 B A 生态伦理责任 B 社会伦理责任 C 企业伦理责任 D 地球伦理责任 5.多选题 (2分) 影响核事故信息公开的主要因素包括()。ABC A 政治因素 B 社会因素 C 经济因素 D 人文因素 6.多选题 (2分) 以下哪些工程没有遵循自然规律,成为生态上失败的工程。()BC A三峡水利枢纽 B三门峡水利枢纽 C咸海水利工程 D里海水利工程 7.多选题 (2分) 吸收公众参与工程决策、设计和实施的全过程,其作用是:()ABCD A 有助于取得项目所在地各有关利益相关者的理解、支持和合作 B 有利于提高项目的成功率 C 有利于提高项目方案的透明度和决策民主化 D 有利于维护公正,减少不良社会后果 8.多选题 (2分) 处理工程伦理问题的基本原则包括( )ABD A 社会公正原则 B 人道主义原则 C 经济利益最大化原则

访问者模式实例与解析---实例一:购物车

顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品。此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品,而顾客和收银员作为访问这些商品的访问者,他们需要对商品进行检查和计价。不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。使用访问者模式来设计该购物过程。 public class Apple implements Product { public void accept(Visitor visitor) { visitor.visit(this); } } public class Book implements Product { public void accept(Visitor visitor) { visitor.visit(this); } } import java.util.*; public class BuyBasket { private ArrayList list=new ArrayList(); public void accept(Visitor visitor) { Iterator i=list.iterator(); while(i.hasNext()) { ((Product)i.next()).accept(visitor); } } public void addProduct(Product product) { list.add(product); } public void removeProduct(Product product) { list.remove(product); } } public class Client { public static void main(String a[]) { Product b1=new Book(); Product b2=new Book(); Product a1=new Apple(); Visitor visitor; BuyBasket basket=new BuyBasket(); basket.

模板方法模式实例与解析--实例一:银行业务办理流程

在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。现使用模板方法模式模拟银行业务办理流程。 public abstract class BankTemplateMethod { public void takeNumber() { System.out.println("取号排队。"); } public abstract void transact(); public void evaluate() { System.out.println("反馈评分。"); } public void process() { this.takeNumber(); this.transact(); this.evaluate(); } } public class Client { public static void main(String a[]) { BankTemplateMethod bank; bank=(BankTemplateMethod)XMLUtil.getBean(); bank.process(); System.out.println("---------------------------------------"); } } 配置文件config.xml文件: <?xml version="1.0"?> <config> <className>Transfer</className> </config> public class Deposit extends BankTemplateMethod { public void transact() { System.out.println("存款"); } } public class Transfer extends BankTemplateMethod { public void transact() { System.

try-catch-Exception真的能捕获所有异常吗?

今天跟大家分享一个平时开发用的最多的小知识点:异常捕获,相信绝大多数程序员都没注意到这个坑,首先上一段伪代码示例给大家看看: public class CatchExceptSample { public static void main(String[] args) { try { throw new RuntimeException("手工模拟抛出错误"); } catch (Exception e) { System.out.println("发生异常了"); e.printStackTrace(); } } } 执行后控制台输出: 可以看到异常被正确捕获并进入catch代码块,这符合我们的预期。接下来我们来看下一个伪代码示例: public class CatchExceptSample { public static void main(String[] args) { try { //注意,这里抛出的是错误Error,而非异常Exception throw new NoSuchMethodError("手工模拟抛出错误"); } catch (Exception e) { System.out.println("发生异常了"); e.printStackTrace(); } } } 这个代码示例唯一区别就是抛出的是个错误,而不是异常,我们先看一下执行结果截图如下: 可以看到这一次没有进入catch,因为没有执行我们手动打印的:"发生异常了"这段话。 如果要让这种情况进入我们预期的catch,我们需要调整代码如下: public class CatchExceptSample { public static void main(String[] args) { try { throw new NoSuchMethodError("

一级计算机wps都考些什么,计算机一级WPS考什么内容

满意答案 10月大婚 2012.12.26 采纳率:52% 等级:11 已帮助:4800人 考试科目:在一级原来基础上,新增对金山WPS Office的考核,加上原有的一级和一级B,共三个科目。三个科目名称统一规范为:一级MS Office、一级B、一级WPS Office。 考试形式:取消一级科目的纸笔考试,完全采取上机考试形式,各科上机考试时间均为90分钟。 考核内容:三个科目的考核内容包括微机基础知识和操作技能两部分。基础知识部分占全卷的20%(20分),操作技能部分占80%(80分)。各科目对基础知识的要求相同,以考查应知应会为主,题型为选择题。操作技能部分包括汉字录入、Windows使用、文字排版、电子表格、演示文稿、因特网的简单应用。一级B因特殊行业和岗位需要,减少对演示文稿、因特网两部分的考核要求。 系统环境:一级科目中操作系统版本升级为Windows 2000,MS Office版本升级为Office 2000,WPS Office版本为2003。 调整时间:一级WPS Office将于2004年上半年试点,2004年下半年在全国正式推广。调整后的一级MS Office、一级B将于2004年下半年在部分省试点,2005年上半年在全国推广。 注:现有的一级和一级B在调整之前,考试大纲、考试内容、考试形式保持不变。 00分享举报

Bug01_服务器Docker环境下,邮件发送超时 & javax.net.ssl.SSLHandshakeException: No appropriate protocol

一、Bug1:邮件发送超时 Bug1描述: 我的Java项目在用户注册激活时有邮件发送需求,开发环境下localhost能够通过25号端口实现邮件发送;部署项目到生产环境下centos系统的服务器,出现邮件发送连接超时现象。 Bug1处理: 起初我以为如下日志信息是报错信息: DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.163.com", port 465, isSSL false 后来发现开发环境下成功实现邮件发送同样会有此日志信息。 经调研,是阿里云服务器将25号端口封闭,无法通过此端口向外发送数据,需向阿里云提交申请解封。另一种解决方式是将服务器发送数据的端口改为465。为了修改端口,以邮件发送为目的,我更新后的代码如下: [1] 相关的配置文件信息如下: spring.mail.protocol=smtp spring.mail.host=smtp.163.com spring.mail.port=465 spring.mail.username=salieri97@163.com spring.mail.password=MSWLTEBIGNKFXQVW spring.mail.default-encoding=utf-8 spring.mail.properties.mail.debug=true spring.mail.sendAddressId=http://120.79.133.235:8989/salieri/user/activation [2] 以注册账户激活为目的,邮件服务模块如下: package com.salieri.service.serviceImpl; import com.salieri.service.MailService; import com.salieri.utils.TrustAllTrustManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.net.ssl.*; import java.io.UnsupportedEncodingException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.util.Date; import java.

IndexDB学习

cookie cookie是保存在客户端本地的纯文本文件。其核心目的是为了解决服务器无法识别用户身份的问题。 HTTP协议是无状态的 cookie工作原理 客户端发送一个请求到服务器服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部服务器返回响应数据 可以在浏览器调试栏中的Headers和Cookies中查看。 cookie的属性 属性项说明NAME/VAULE键值对,可以设置要保存的 Key/Value,NAME 不能和其他属性项的名字一样Domain生成该 Cookie 的域名,如 domain=“www.baidu.com”Path定义了Web站点上可以访问该Cookie的目录Secure指定是否使用HTTPS安全协议发送Cookie。HTTPOnly防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改Expires设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效max-age与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒),是一个时间段而不是一个固定的时间点。优先级高于expires。 Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。cookie存储大小4kb左右 cookie缺点 大小受限,每个cookie大约4kb左右,浏览器不同大小稍有差异。cookie可以被用户禁用,修改,删除每次请求cookie信息都会随http传递给后端,浪费了一定的带宽。安全性不高 cookie使用 /**获取cookie的值 */ const getCookie = (name?: string) => { if (name) { const cookiePair = document.cookie.split(';'); for (let pair of cookiePair) { const parirList = pair.split('='); if (parirList[0] && parirList[0] === name) { return parirList[1]; } } } else { return document.cookie; } } /**设置cookie的值 */ const setCookie = (name: string, value: string) => { const cookiePair = document.

Python 爬虫进阶必备 | 某漫画网站简单加密分析(难度 0.1 星)

点击上方“咸鱼学Python”,选择“加为星标” 第一时间关注Python技术干货! 今日网站 aHR0cHM6Ly93d3cubWFuZ2Fiei5jb20vbTE4MDk3MC8= 每天的日常就是补补环境、水水群、卖卖课,为了不掉粉还要写一写水文 加密定位与分析 先看请求,我们需要获取的是漫画图片,所以要找找页面上图片的请求,不过在网络请求里没有看到对应的包 所以先翻翻其他包,看有没有比较可疑的请求。 这里不卖关子,找到chapterimage.ashx这个请求的位置 这个请求还返回了一个eval eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('e 9(){2 6=4;2 5=\'a\';2 7="g://j.h.f/1/b/4";2 3=["/c.8","/k.8"];o(2 i=0;i<3.l;i++){3[i]=7+3[i]+\'?6=4&5=a&m=\'}n 3}2 d;d=9();',25,25,'||var|pvalue|180970|key|cid|pix|jpg|dm5imagefun|e7a63405323a7a1735bb5b6774e48c36|266|1_8812||function|com|https|mangabz||image|2_6933|length|uk|return|for'.split('|'),0,{})) 这里的eval大家应该都会,解开就是下面这样的代码 function dm5imagefun(){var cid=180970;var key='e7a63405323a7a1735bb5b6774e48c36';var pix="https://image.mangabz.com/1/266/180970";var pvalue=["/1_8812.jpg","/2_6933.jpg"];for(var i=0;i<pvalue.length;i++){pvalue[i]=pix+pvalue[i]+'?cid=180970&key=e7a63405323a7a1735bb5b6774e48c36&uk='}return pvalue}var d;d=dm5imagefun(); 在编辑器中运行一下就可以得到下面的链接 直接点开就是漫画的图片了,写入到本地大家应该都会,完事儿~ 至于请求这段 js 代码的请求中带着的 sign 是页面中返回的,不过这个 sign 测试了不带也是可以获取到 js 的。所以直接 eval 执行这段 js 然后就可以了。 eval 不难找,也可以使用 hook eval 脚本快速定位 // 脚本来源:微信群里收藏的,忘记是哪个大佬发的了,如有侵权联系我删除哈 window.__cr_eval = window.eval; var myeval = function (src) { console.log('eval:', src); return window.__cr_eval(src) }; var _myeval = myeval.

springboot实现热部署

1. 前言 在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受啊。在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。下面我=我们就看看对于简单的类修改的热部署怎么实现。 2. 原理 深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。 若想探究底层实现或者自定义加载类,可以参考大佬博客 3. 方式 springboot有3中热部署方式: 1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动 2.使用springloaded本地加载启动,配置jvm参数 -javaagent:<jar包地址> -noverify 3.使用devtools工具包,操作简单,但是每次需要重新部署 这里主要讲解一下第三种热部署方式的使用,因为在网上查找资源时,总会发现很多人就是springloaded和devtools都使用了,其实是多余的操作,而且第三种操作简单快捷。 4. 开始配置 4.1 在pom.xml中添加依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--devtools热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> 1 2 3 4 5 6 7 8 9 10 11

【虹科车用总线技术】PCAN-USB使用手册

单通道CAN转USB接口 应用 将CAN网络通过USB连接到电脑,用于监控CAN网络。也可以发送、保存、过滤CAN报文。(虹科) 1.安装驱动 拿到产品之后的第一件事就是给设备安装驱动程序。安装方式有两种: 1.1从光盘中安装驱动 在将PCAN接口系列(如PCAN-USB、PCAN-PCI系列,PCAN-PC104系列)连接到电脑上之前必须先安装驱动程序。安装步骤如下: ①如果是Windows-XP的系统,请确保您当前登录的用户具有管理员权限(这个只在安装的时候需要,使用时是不需要的); ②插入产品配套的光盘到电脑光驱中。一般等一会就会弹出一个导航窗口,如果没有,请打开光盘的根目录,点击。 ③在弹出的窗口中选择English,然后点击Drivers进入驱动安装页面,点击Install Now就会执行安装驱动程序; 注意:在安装驱动的过程中您可以根据需要选择需要安装的,如下图,如果是用PCAN-USB的话,可以选择CAN device drivers和Virtual PCAN drivers,PCAN-Basic是PCAN的二次开发包,也可以选上。 另外,这里的Virtual PCAN-Gateway是用于支持CAN转以太网或者CAN转Wifi设备的;LIN device drivers是PCAN-USB Pro FD的LIN部分驱动。如果不想安装,直接取消前面的√即可。 1.2自行下载驱动程序安装 如果您的电脑没有光驱或者公司禁止使用光驱,您也可以到PEAK System的官方网站上下载最新的驱动程序。下载地址如下: https://www.peak-system.com/produktcd/Drivers/PeakOemDrv.exe 下载完成后解压,有一个的执行文件,打开这个执行文件,按照提示安装即可。安装的第一步是选择语言,我们一般都选择第一项英语。 另外,如果您插上了硬件,想在电脑的设备管理器上选择更新驱动程序的方法安装驱动程序也是可以的。解压的文件夹中有一个drivers的文件夹,你只需在选择驱动程序路径的时候选择这个文件夹就可以了。 2.连接硬件 当没有连接PCAN硬件时,打开PCAN-View自动弹出的Connect连接窗口中可用的CAN硬件窗口是空白的,表示没有CAN硬件连接到PC。如下图左图所示。 当把PCAN-USB连接到电脑上时,正常打开弹出的连接窗口中会显示该硬件。在这里还可以设置该连接的波特率,报文过滤等信息。当然也可以选择一个已经设置好的连接,如图中的demo2。 第一次使用硬件是是只有下图红色方框中的第一行的硬件信息的,下面的网络(demo2,DemoNet)是用另外一个软件设置的。当然没有这些网络是不会影响使用的。 注意:如果插上了硬件,但是没有显示硬件,请打开电脑的设备管理器查看是否正确安装了接口的驱动程序。如果没有,可以右键单击选择更新驱动程序,驱动程序在配套的光盘里面。也可以参考驱动程序安装方法的说明。 我们都知道CAN总线终端电阻一般来说都是120Ω,实际上在设计的时候,也是两个60欧姆的电阻串起来,而总线上一般有两个120Ω的节点,如下图所示: 在连接120Ω终端电阻时,连接的方法就是把DB9接头引出来接在引脚7:CAN_H和引脚2:CAN_L上即可,PCAN-USB对应的D-Sub接口引脚图如下图所示: 如果您需要更多相关技术支持,欢迎联系虹科车辆网络【来源:虹科车用总线技术】 3.应用 PCAN-USB主要是结合在PC端的软件一起使用,在这里主要介绍免费软件PCAN-View的相关功能使用,关于PCAN-Explorer6的使用可到相应模块浏览学习。 3.1更改波特率 如果已经打开了PCAN-View,想要更改波特率,可以点击菜单栏中的CAN或者点击工具栏中的连接按钮,如上图中的红色方框所示,也会弹出如下图所示的连接对话框。 连接以后软件最下方会显示已经连接上的连接。 3.2接收报文 如果该PCAN-USB已经连接到CAN 总线上,并且总线是有数据传输的话,在接收区域是可以接收到数据的。如下图中所示。 3.3记录报文 保存的数据的格式是.trc的文件格式,可以用记事本打开,也可以用PCAN的专用转换工具PCAN-Converter将其转换为ASC或者CSV格式的文件。 3.4发送报文hongke 另外,在发送报文的界面上,点击软件左上角的保存按钮,可以将当前Transmit框中的ID保存为xml文件(发送列表),下次打开可以继续使用。 3.5自定义波特率 如果用户需要自定义波特率而非用PCAN-View中所包含的波特率,那么用户可以自己选择,如下图: 在baud rate右边的输入框中输入要得到的波特率的数值:78.85kbit/s,然后点击calculate,这个框中的所有组合都可以选择,但是用户可以根据需要来选,用户考虑的参数主要是sample point和SJW,不同的组合SJW以及sample rate会不同的。这就要看客户的要求了。关于如何选择合适的SP和SJW:SP和SJW的值取决于你正在使用的CAN系统。我们推荐SP设置为75%,如果是CAN-Open系统推荐89%,其它的使用60%。请参考SJA1000的datasheet获得更多的关于波特率设置的信息。 怎么看是否真的设置成了这个波特率,如下图:用PCAN-View下面的那个连接提示就可以看到连接下的波特率数值。 如果您需要更多相关技术支持,欢迎联系虹科车辆网络【来源:虹科车用总线技术】 Q&A Q1.快速检测PCAN-USB 收发器是否正常 A1.PCAN-USB收发器损坏是PCAN-USB维修中比较常见的问题,这主要是因为:① CAN收发器在使用环境中会受到较大的电磁干扰;② 使用过程中CAN线对电源短路。 检测CAN高速收发器比如NXP82C251或MAX3057ASA的方法: ①打开电脑,保证PCAN硬件已经连接到电脑上。 ②不能打开任何应用程序。即是说,PCAN-USB上面的LED灯应该是一直红灯并且不闪。否则,要关闭占用了PCAN硬件的应用程序。 ③将PCAN设备的CAN端的连接移除。即是说,让PCAN的CAN端空置,不接任何设备和线缆等。 ④用一个万用表(DC测试档),测试PCAN设备DB9头的pin 2 (CAN-L) 和 pin 3 (GND)。测量到的电压值应该为2.

计算机硬盘换,电脑硬盘可以随便换吗

多磁头技术:通过在同一碟片上增加多个磁头同时的读或写来为硬盘提速,或同时在多碟片同时利用磁头来读或写来为磁盘提速,多用于服务器和数据库中心。下面是学习啦小编带来的关于电脑硬盘可以随便换吗的内容,欢迎阅读! 电脑硬盘可以随便换吗? 当然可以换,硬盘在笔记本中属于可直接拆卸的硬件,如果感觉现在的硬盘因为容量,速度,或者是因为故障原因都是可以随时拆卸更换的。500GB的5400转硬盘换成1000G的7200转的硬盘或者SSD固态硬盘都是完全没有问题的,笔记本通用机械硬盘是2.5英寸的,只要有这个尺寸的硬盘就可以换上的。 一、SATA接口: 二、msata接口: 三、m.2接口: 1、首先了解本本硬盘规格、接口类型、外形尺寸。 2、如2.5"的IDE接口、SATA接口机械硬盘。新型卡式有PCIE mini、mSATA、M.2接口。 3、更换前,根据第1条的三个条件选择替换硬盘,才能避免不必要的麻烦。 相关阅读推荐: 硬盘磁道 当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。这些磁道用肉眼是根本看不到的,因为它们仅是盘面上以特殊方式磁化了的一些磁化区,磁盘上的信息便是沿着这样的轨道存放的。相邻磁道之间并不是紧挨着的,这是因为磁化单元相隔太近时磁性会相互产生影响,同时也为磁头的读写带来困难。一张1.44MB的3.5英寸软盘,一面有80个磁道,而硬盘上的磁道密度则远远大于此值,通常一面有成千上万个磁道。磁道的磁化方式一般由磁头迅速切换正负极改变磁道所代表的0和1。 硬盘扇区 磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。1.44MB3.5英寸的软盘,每个磁道分为18个扇区。 硬盘柱面 硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘单面上的磁道数是相等的。无论是双盘面还是单盘面,由于每个盘面都只有自己独一无二的磁头,因此,盘面数等于总的磁头数。所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数*磁头数*扇区数*512B。 看了电脑硬盘可以随便换吗文章内容的人还看:

计算机组成存储器实验心得,《计算机组成原理》存储器读写实验报告

《《计算机组成原理》存储器读写实验报告》由会员分享,可在线阅读,更多相关《《计算机组成原理》存储器读写实验报告(4页珍藏版)》请在人人文库网上搜索。 1、计算机组成原理实验报告实验名称: 存储器读写实验 班级: 学 号: 姓名: 一、实验目的1、掌握存储器的工作特征2、熟悉静态存储器的操作过程,验证存储器的读取方法二、实验设备1、YYZ02计算机组成原理实验仪一台。2、排线若干。3、PC微机一台。三、实验原理1.存储器是计算机的主要部件,用来保存程序和数据。从工作方式上分类,其可分为易失性和非易失性存储器,易失性存储器中的数据在关电后将不复存在,非易失性存储器中的数据在关电后不会丢失。易失性存储器又可分为动态存储器和静态存储器,动态存储器保存信息的时间只有2ms,工作时需要不断更新,既不断刷新数据;静态存储器只要不断电,信息是不会丢失的。2.静。 2、态存储器芯片6116的逻辑功能:3.存储器实验单元电路:存储器实验单元电路控制信号逻辑功能表:4.存储器实验电路:存储器读写实验需三部分电路共同完成:存储器单元、地址寄存器单元和输入、输出单元。存储器单元以6116芯片为中心构成,地址寄存器单元主要由一片74LS273组成,控制信号B-AR的作用是把总线上的数据送人地址寄存器,向存储器单元电路提供地址信息,输入、输出单元作用与以前相同。四、实验结果记录(1)连线准备1.连接输入、输出实验的全部连线。2.按实验逻辑原理图连接M-W、M-R两根信号低电平有效信号线。3.连接A7A0 8根地址线。4.连接B-AR正脉冲有效信号线。(2)记录结果(包含。 3、采集结果前的动作)地址写入数据读出数据结果说明01H0010000000100000数的写入与读取02H0001001100010011数据的写入与读取03H0010011000100110数据的写入与读取04H1000000110000001数据的写入与读取05H0000010100000101数据的写入与读取25H不写存储器11110011一个随机地址36H0010000100100001数据的写入与读取0A0H写总线悬空时的数据11111111总线悬空时表示的数据是FFH,即写入的数据是11111111,所以读出结果为11111111五、实验总结与心得体会(1)通过这次实验我更加详细的了解了存储器的读写时怎么样的一个过程;(2)这个实验讲究一个配合,如果单个人操作极易出现错误,特别是不了解实验过程和实验原理的情况下。(3)通过这次实验,我知道计算机先把存储器地址写到地址总线上,再把数据放到数据总线上,这样就可以把数据写到正确的存储单元(写操作)计算机先把存储器地址写到地址总线上,存储器在把数据放到数据总线上,这样计算机就可以从数据总线上读取数据了(读操作。