unit (也是公寓的意思) 但是他是由一个个的私人房间构成的,一般用在小镇的命令中: Well the difference between a unit and an apartment is pretty obvious. A unit would be a 'unit' in a group of townhouses. For example I'm in unit 18. My address is 3080 fake st, unit 18, because I live in a townhouse. If you live in an apartment, well that should be pretty obvious as well. Suite, well I have no idea on that.
apartment 则是集中式居民住宅: 如果在写地址要具体到哪一户的时候用apt number,类似与中国小区的样式,number可以带字母:如:6990 Bengs Rd APT A10 suite 也是公寓,但是他是套间(定义是通过墙隔开的房间)一般用在办公大楼里面。office building Apartment: A unit consisting of a private room or rooms in a multi-unit building with many other similar units.
HotSpotJVM在进行GC回收的时候,采用的是可达性分析法来对对象进行标记的,可达性分析法是从GC Roots出发(注意是GC Roots 说明是有多个GC Root),当某个对象到GC Roots没有任何引用链时,则该对象判定为可回收对象(当然如果该对象重写过finalize()方法的话 还会有一次自我拯救的机会,会先将该对象放入一个F-Queue对象中)。不得不说,可达性分析法是一个非常不错的方法,能够解决引用计数法中相互引用而导致无法回收的问题。
从上面的描述中,我们不难发现有个GC Roots,那么什么能作为GC Roots呢,肯定是只有引用能作为GC Roots。在JVM中,作为引用的有:①虚拟机栈中的局部变量表②本地方法栈中的局部变量③静态变量④常量。为了简化问题,我们就取虚拟机栈中的局部变量来说明。
经过上面的描述,问题已经简化成如何判断虚拟机栈中的局部变量表中的数据存的是一个引用还是一个基本数据。打个比方:
从图中可以看出,对于变量A,JVM在得到A的值后,肯定能够立刻判断出它不是一个引用,为什么?,因为引用是一个地址,JVM中地址是32位的,也就是8位的16进制,很明显A是一个4位16进制,不能作为引用(这里的专业术语叫对齐检查)。同时,JVM对变量D也是能够立刻判断出它不是引用,因为Java堆的上下边界是知道的,如同图中所标识的堆起始地址和最后地址,JVM发现变量D的值早就超出了Java堆的边界,故认为它不是引用(这里的专业术语叫做上下边界检查)。
接下来才是重点,对于变量B和变量C,发现他们两个的值是一样的,(这里要说明的是,虽然图中画了一个从变量B到实例的一个箭头,但那对于JVM是不知道的,在执行完new 指令后,B的值就变为了0x01110111,画个箭头只是我们人为便于分析的),于是JVM就不能判断了,在专业名称上,基于这种方式的GC称为“保守式GC”,为什么保守,我想应该不言而喻了。
接下来我们继续谈这个保守式GC,这种保守式GC的内存模型并不是上图所示的,我们试想,当执行B=null之后,对象B的实例的确应该没有任何指向了,但是JVM错误的认为变量C的值是一个引用,因为此时JVM很保守,担心会判断错误,所以只好认为C是一个引用,不能误删这实例对象(然而我们知道这个情况下,它不会误删)。
让我们把B=null这条语句的假设去除,B变量还是存在。对象B的实例顺利的存活了下来,然后经过一次新生代的复制算法,进入Survivor区,注意,此时对象B的实例存活了下来,但它要经过一次内存的变更,也就是说对象B的实例地址要改变,JVM现在很慌,为什么慌,因为C变量如果当做引用,它也会指向对象B的实例,此时C的值也应该随实例B内存的变量而改变C的值,但是万一C变量不是一个引用,而就是一个int型数据呢。于是保守式GC真正的内存模型出来了:
通过上图,不难发现,在java堆中增加了一个句柄池,当变量B的实例更改存放内存的地方后,JVM只要改变句柄值,而不用改变变量B和变量C的值,这样JVM就不用犯愁了,因为不论变量C是不是一个引用,之后用到C的地方,C的值也没有发生变化,可以正常使用。
通过上述的分析,我们可以发现,在保守式GC中,只能通过堆的上下边界检查和对齐检查去判断是否为一个引用。同时,我们可以发现保守式GC的一些缺点:①伪引用,如同上面所说的,当B=null之后,本来实例B应该被GC掉的,但是有变量C这么个伪引用存在,JVM不敢动手②增加了句柄池,占用java堆的空间,虽然灵活了,但是访问效率变低了,需要两次才能访问到真正的对象。
本篇文章讲述了保守式GC中如何判断一个变量是否为引用,并在此基础上给出了其内存模型,对于半保守式GC,准确式GC的判断方式,会有新的文章。
参考自:《深入理解JVM》
Django中ORM的锁和事务 一、锁1.行级锁2.表锁 二、事务1.全局开启2.局部使用事务 一、锁 1.行级锁 select_for_update(nowait=False, skip_locked=False)
#注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节。
返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT … FOR UPDATE 语句。
举个例子:
entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。create、update、delete操作时,mysql自动加行级互斥锁 所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。
一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞 的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和 skip_locked是互斥的,同时设置会导致ValueError。
目前,postgresql,oracle和mysql数据库后端支持select_for_update()。 但是,MySQL不支持nowait和skip_locked参数。
使用不支持这些选项的数据库后端(如MySQL)将nowait=True或skip_locked=True转换为select_for_update()将导致抛出DatabaseError异常,这可以防止代码意外终止。
2.表锁 class LockingManager(models.Manager): """ Add lock/unlock functionality to manager. Example:: class Job(models.Model): #其实不用这么复杂,直接在orm创建表的时候,给这个表定义一个lock和unlock方法, # 借助django提供的connection模块来发送锁表的原生sql语句和解锁的原生sql语句就可以了, # 不用外层的这个LckingManager(model.Manager)类 manager = LockingManager() counter = models.IntegerField(null=True, default=0) @staticmethod def do_atomic_update(job_id) ''' Updates job integer, keeping it below 5 ''' try: # Ensure only one HTTP request can do this update at once.
1.state state是什么?
定义:state(vuex) ≈ data (vue)
vuex的state和vue的data有很多相似之处,都是用于存储一些数据,或者说状态值.这些值都将被挂载 数据和dom的双向绑定事件,也就是当你改变值的时候可以触发dom的更新.
虽然state和data有很多相似之处,但state在使用的时候一般被挂载到子组件的computed计算属性上,这样有利于state的值发生改变的时候及时响应给子组件.如果你用data去接收$store.state,当然可以接收到值,但由于这只是一个简单的赋值操作,因此state中的状态改变的时候不能被vue中的data监听到,当然你也可以通过watch $store去解决这个问题,那你可以针是一个杠精
综上所述,请用computed去接收state,如下
//state.js let state = { count: 1, name: 'dkr', sex: '男', from: 'china' } export default state <template> <div id="example"> <button @click="decrement">-</button> {{count}} {{dataCount}} <button @click="increment">+</button> </div> </template> <script> export default { data () { return { dataCount: this.$store.state.count //用data接收 } }, computed:{ count(){ return this.$store.state.count //用computed接收 } } methods: { increment () { this.$store.commit('increment') }, decrement () { this.
parsec benchmark gem5 fs模式运行fs模式,并远程连接运行parsec基准测试 首先来梳理下在gem5模拟环境下运行parsec的大致流程: 首先parsec需要运行在fs模式下需要使用配置好的parsec disk文件或者可以将parsec中的测试编译成可执行文件,然后mount到fs模式下的系统中。 gem5 fs模式 首先,运行fs模式需要kernel文件和disk文件。因为自己最开始使用的不是官方的kernel,在运行的时候会报一个暂时无法解决的问题。在 http://www.m5sim.org/Download 中找到自己需要使用的kernel,这里我使用的是X86架构下的kernel,并且在 http://www.cs.utexas.edu/~parsec_m5/ 中找到x86架构下的image disk,并放到disks下。(使用这个镜像就不需要进行编译啦。)
准备工作做好啦,然后就是要让gem5识别到这个kernel喝disks,这里有两种方式,为什么是两种呐,来看一下配置文件就知道啦~
通过对Syspaths.py文件分析可以看到,这里可以使用环境变量和手动添加两种方式~~
还要进行disks文件的读取,需要修改FSconfig中的disks读取配置信息
到这里就完成了全部的前期配置工作~~
运行fs模式,并远程连接 这里远程连接时可以使用telnet,但是为了稳定性,也可以使用m5term哦~这里我们需要打开至少两个终端或者使用终端分屏来操作。
首先在terminal1 中启动fs模式
然后在terminal2中进行连接
因为这里我们没有连接执行脚本文件,所以显示no job control in this shell
运行parsec基准测试 这里运行基准测试有两种方式:
使用disks中的编译好的可执行文件进行测试。在启动fs模式时,连接对应的rsc脚本文件,进行命令下发~
java 使用相对路径读取文件
1.java project环境,使用java.io用相对路径读取文件的例子:
*目录结构:
DecisionTree
|___src
|___com.decisiontree.SamplesReader.java
|___resource
|___train.txt,test.txt
*SamplesReader.java:
String filepath="resource/train.txt";//注意filepath的内容;
File file=new File(filepath);
……
*我们留意filepath的内容,java.io默认定位到当前用户目录("user.dir")下,即:工程根目
录"D:\DecisionTree"下,因此,此时的相对路径(以user.dir为基路径的路径)为"resource/train.txt"
。这样,JVM就可以根据"user.dir"与"resource/train.txt"得到完整的路径(即绝对路
径)"D:\DecisionTree\resource\train.txt",从来找到train.txt文件。
*注意:相对路径的起始处无斜杆"/";例如:
filepath="resource/train.txt";
而不是filepath="/resource/train.txt"; //error!
2、javaEE环境,使用Classloader用相对路径读取xml的例子:
*参见之前写的文章“通过虚拟路径或相对路径读取一个xml文件,避免硬编码”。
*内容如下:
java使用相对路径读取xml文件:
一、xml文件一般的存放位置有三个:
1.放在WEB-INF下;
2.xml文件放在/WEB-INF/classes目录下或classpath的jar包中;
3.放在与解析它的java类同一个包中,不一定是classpath;
二、相对应的两种使用相对路径的读取方法:
方法一:(未验证)
将xml文件放在WEB-INF目录下,然后
程序代码:
InputStream is=getServletContext().getResourceAsStream( "/WEB-INF/xmlfile.xml" );
方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态
方法getSystemResourceAsStream(String s)读取;
程序代码:
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);
方法三:xml在随意某个包路径下:
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
ClassLoader classLoader=HotspotXmlParser.class.getClassLoader();
InputStream in=classLoader.getResourceAsStream(s_xmlpath);
个人笔记:
①、reader = new BufferedReader(new FileReader(file));//默认以ASCII方式读取文本
②、读写UTF-8文件:
读:
FileInputStream fis = new FileInputStream("d:\\input.txt"); InputStreamReader isr = new InputStreamReader(fis, "
字符串的格式化 Phthon2.6开始,新增了一种格式化字符串的函数str.format()
基本语法是通过{}和:来带起以前的%
Format可以接受不限个参数,位置可以不按顺序
我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("spy",18)
'名字是:spy,年龄是:18'
>>> b = "名字是:{name},年龄是:{age}"
>>> b.format(age=18,name="spy")
'名字是:spy,年龄是:18'
>>>
填充和对齐
:号后边带填充字符,只能是一个字符,不指定的话默认是空格填充
^/</>分别是剧中、左对齐、右对齐,后面带宽度
>>> "我是{0},我喜欢数字{1}".format("spy",'66')
'我是spy,我喜欢数字66'
>>> "我是{0},我喜欢数字{1:*^8}".format("spy",'66')
'我是spy,我喜欢数字***66***'
>>> "我是{0},我喜欢数字{1: ^8}".format("spy",'66')
'我是spy,我喜欢数字 66 '
>>> "我是{0},我喜欢数字{1: <8}".format("spy",'66')
'我是spy,我喜欢数字66 '
>>> "我是{0},我喜欢数字{1: >8}".format("spy",'66')
'我是spy,我喜欢数字 66'
>>>
数字格式化
浮点数通过f,整数通过d进行格式化
>>> a = "我是{1},我存款{1:.2f}"
>>> a.format("spy",288.33333)
'我是288.33333,我存款288.33'
>>> a.format("spy",288.9)
'我是288.9,我存款288.90'
>>> a.format("spy",288.999999)
'我是288.999999,我存款289.00'
>>> a = "我是{1},我存款{1:+.2f}"
>>> a.format("spy",288.999999)
'我是288.999999,我存款+289.00'
>>>
Str()实现数字转型字符串 转换浮点型、科学计数法、布尔型等为字符串
>>> str(5.3)
'5.3'
>>> str(3.14e2)
'314.0'
>>> str(True)
'True'
>>>
使用[]提取字符 字符串的本质是字符序列,可以通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符
正向搜索:最左侧第一个字符,偏移量是0,第二个偏移量是1,依次类推,直到len(str)-1为止
反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,依次类推,直到-len(str)为止
>>>a=’abcd’
>>> print(a[0],a[1],a[2],a[3]) #正向搜索
a b c d
>>> print(a[-1],a[-2],a[-3],a[-4]) #反向搜索
d c b a
>>>,
Replace()实现字符串的替换 Replace()返回的是创建的新的字符串,原字符串未替换,a指向了新创建的字符串
>>> a.replace('c','spy')
'abspyd'
>>> a
'abcd'
>>>
字符串切片slice操作 切片slice操作可以快速截取字符串
标准格式[起始偏移量start:终止偏移量end:步长step] 注意:包含头不包含尾,步长指的是隔几个字符取一个值
>>> a='abcdefjhijklm'
>>> a[2]
'c'
>>> a[1:5]
'bcde'
>>> a[1:5:2]
'bd'
>>> a[1:5:1]
'bcde'
>>>
>>> a[:] #指的是所以字符串
'abcdefjhijklm'
>>> a[2:] #第二个开始到最后
'cdefjhijklm'
>>> a[:2] #开头到2
标识符 标识符:用于变量、函数、类、模块等的名称。标识符有如下特定规则
区分大小写第一个字符必须是字母、下划线、其后的字符是:字母、数字、下划线不能使用关键字。比如:if/or/while等尽量避免双下划线开头和结尾的名称通常有特殊含义。如:__int__是类的构造函数 模块名、函数名、类名、常量名
1、首先在hadoop官网上下载hadoop到本地(不需要进行环境变量的配置,仅仅只用下载hadoop的包即可)。
2、打开intellij idea创建一个空项目,并且将源码粘贴进去,如图
2、这时可以看见代码中的许多类是无法识别的,别急。接下来打开project structure,在左侧找到modules
3、点击下方箭头天假jar或目录
4、将刚才下载的hadoop目录下的share文件夹中的相应目录添加进来
5、点击左侧的artifacts,添加一个空jar
6、输入jar的名称,这里我们输入maxtemperature,这里的output路径就是最后配置文件中的路径,jar包名就是最后配置文件中的jar包名。
7、点击output layout下方的小箭头,选择module output,然后勾选我们的项目,点击确定,一定要勾选 Buid on make
8、这时候,刚才显示的各种包和类的缺失错误信息就全部没有了。
9、接下来,点击右上角的edit configurations,如果当前没有application则新建一个application
10、经过查阅资料,发现刚才填写参数的地方着了一个参数,需要将main函数所在类的路径添加进去:
VSCode自从更新之后,vue文件的html代码格式化就失效了,而且vue文件中的js ,css格式化样式都变了,原因在于都采用了 prettier 来格式化,而配置文件中 vetur.format.defaultFormatter.html 这个配置项的值为"none",我们需要对它重新进行设置。
步骤一:
首先确保你安装了vetur扩展插件。如下图,扩展里直接搜索vetur,安装下图的Vetur这个插件即可,安装完之后点击重新加载。
步骤二:
打开VSCode,文件->首选项->设置,打开settings.json文件,找到"eslint.validate" --> 添加"vue";另外搜索vetur,将vetur插件的 vetur.format.defaultFormatter.html 的值修改成 js-beautify-html;
步骤三:
安装插件Prettier - Code formatter,然后在settings.json文件中修改如下配置:
"prettier.singleQuote": true, "prettier.semi": false, "javascript.format.insertSpaceBeforeFunctionParenthesis": true 这样以下的三个格式化的问题就被解决了:
1.单引号成双引号的问题;
2.句尾自动添加分号的问题;
3.函数中参数的那个括号后面的空格被删除的问题。
这样我们的设置就完成了,接下来打开一个Vue文件,Alt+Shift+F即可对vue文件进行格式化,或者点击鼠标右键,选择格式化文件即可。
以下是我的settings.json的完整代码,仅供参考:
// 将设置放入此文件中以覆盖默认设置 { "typescript.check.tscVersion": false, "window.zoomLevel": 0, "files.autoSave": "off", "typescript.updateImportsOnFileMove.enabled": "always", "git.confirmSync": false, "editor.minimap.enabled": true, "workbench.startupEditor": "newUntitledFile", "git.autofetch": true, "eslint.validate": [ "javascript", "javascriptreact", "vue" ], "[html]": { "editor.defaultFormatter": "HookyQR.beautify" }, "[javascript]": { "editor.defaultFormatter": "HookyQR.beautify" }, "[json]": { "
对于凯斯西储大学轴承数据的下载,现在网上随便一个帖子都可以下载到。
在下载数据的时候,发现里面分了正常数据、驱动端、风扇端等类别,然后在具体的某一类,比如驱动端里面又区分了不同类别的故障数据。具体可以参见相关说明,或者参见其他帖子。
然后下载其中某一个类别的某一个故障数据文件后,文件类型是.mat格式,可以使用MATLAB打开,打开后发现里面又区分了三种类型的数据,
如上图,这里不太清楚为什么在已经区分了正常、驱动端、风扇端数据类别的情况下,文件里面还要再分成这几类????难道又分了不同位置的故障数据?有点搞不清
当然,如果需要进行处理这些数据,用来机器学习、CNN的话,并不是需要网站中的所有数据,自然可以只选择我们需要的,比如选择驱动端+0HP的故障数据
处理数据步骤为:
①对于数据的处理,由于轴承信号数据是时间序列的数据,但是在训练使用的时候有些不方便,这里我是把同一类别的数据随机分组,将一维的序列分成二维,具体一组多少数据,看自己分类吧。下载的文件每一个都进行如此操作(可以使用程序在调用数据的时候处理)。
②然后将每个类别的数据文件对应建立标签文件。
③这样处理之后,每一类故障数据都对应着一个数据文件和一个标签文件,然后将所有类别的数据文件整合到一起组合成训练网络需要的数据集,再将数据集按比例分成训练集和测试集即可。
以上为使用凯斯西储大学自制数据集的过程,如有错误,还请大佬指点,欢迎交流!!
了解Pascal VOC 利用深度学习方法如Faster R-CNN或YOLOv3等进行目标检测时需要训练数据集,我们很少会根据自己的数据集格式修改代码,更多的是按照一定格式修改自己的数据格式,而PASCAL VOC为图像识别和分类提供了一整套标准化的数据集,为了方便我们目标检测的进行,可以先来详细的记录一下PASCAL VOC的格式。
Pascal VOC数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/
数据集下载后解压得到一个名为VOCdevkit的文件夹,该文件夹结构如下:
. └── VOCdevkit #根目录 └── VOC2017 #不同年份的数据集,这里只下载了2007的,还有2007等其它年份的 ├── Annotations #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等 ├── ImageSets #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本 │ ├── Action │ ├── Layout │ ├── Main │ └── Segmentation ├── JPEGImages #存放源图片 ├── SegmentationClass #存放的是图片,语义分割相关 └── SegmentationObject #存放的是图片,实例分割相关 (1)Annotations Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片,包含了图片的重要信息:图片的名称,图片中object的类别及其bounding box坐标。xml文件的解析如下:
其中:
标签解释filename文件名source图像来源(不重要)size图像尺寸(长宽以及通道),包含了width,height和depthsegmented是否用于分割object需检测到的物体,包含了物体名称name,拍摄角度pose,是否截断truncated,难以识别difficult,object对应的bounding box信息 bndboxbndbox包含左下角和右上角x,y坐标 (xmin,ymin,xmax,ymax) <annotation> <folder>VOC2007</folder> <filename>000051.jpg</filename> <source> <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> <flickrid>291539949</flickrid> </source> <owner> <flickrid>kristian_svensson</flickrid> <name>Kristian Svensson</name> </owner> <size> <width>500</width> <height>375</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>motorbike</name> <pose>Unspecified</pose> <truncated>1</truncated> <difficult>0</difficult> <bndbox> <xmin>352</xmin> <ymin>138</ymin> <xmax>500</xmax> <ymax>375</ymax> </bndbox> </object> <object> <name>motorbike</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>105</xmin> <ymin>1</ymin> <xmax>427</xmax> <ymax>245</ymax> </bndbox> </object> <object> <name>person</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>1</difficult> <bndbox> <xmin>415</xmin> <ymin>61</ymin> <xmax>465</xmax> <ymax>195</ymax> </bndbox> </object> </annotation> 以下程序可以将XML标签中目标绘制在图像中,并返回:
1、Vue 2.2.0+的版本里,当在组件中使用v-for时,key是必须的。
我们可以更改vetur配置 :vscode文件->首选项->设置->搜索vetur.validation.Template,将这一项去掉就可以了
2、我们在使用v-for的时候,在v-for 后添加 v-bind:key="item"
<template> <div id="vue">Hello Vue.js!{{message}} <span>{{message1}}</span> <span v-if="seen">你看到我啦!</span> <div id="app-4"> <ol> <li v-for="todo in todos" v-bind:key="todo"> {{ todo.text }} </li> </ol> </div> </div> </template> <div> </div> <script type="text/javascript"> export default { // 这里需要将模块引出,可在其他地方使用 name: 'HelloVue', data () { // 注意:data即使不需要传数据,也必须return,否则会报错 return { message: '你好使用者!', message1: '页面加载于' + new Date().toLocaleTimeString(), seen: true, todos: [ { text: '学习javascript' }, { text: '学习Vue' }, { text: '整个项目' } ] } } } </script> <style type="
RapidJSON 是一个 C++ 的 JSON 解析器及生成器。
JSON文本: //document.json {"name":"xiaoming","gender":"boy","hobby":["足球","篮球","电影"],"socre":{"数学":91.5,"英语":96.0,"语文":95.5},"lover":{"name":"xiaohong","gender":"girl","hobby":["画画","跳舞","唱歌"],"score":{"数学":78.5,"英语":90.0,"语文":89.0}}} 由于复制的过程中,json文本可以出现错误,可以用将json文本复制到JSON在线编辑器验证一下。
解析代码: #include<string> #include<fstream> #include<iostream> #include"document.h" using namespace std; int main () { std::ifstream t("./document.json"); std::string str((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>()); rapidjson::Document document; document.Parse(str.c_str()); rapidjson::Value::ConstMemberIterator iter = document.FindMember("name"); if(iter != document.MemberEnd()){ cout << "name : " << iter->value.GetString() << endl; } iter = document.FindMember("gender"); if(iter != document.MemberEnd()){ cout << "gender : " << iter->value.GetString() << endl; } if(document.HasMember("hobby")){ cout << "hobby : " << endl; const rapidjson::Value& childValue = document["
报错信息:
copy代码出自:
右键项目=》属性=》生成事件=》后期生成事件命令行如图。
首先我先说一下这段属性的作用:
因为项目属性生成选项卡有一个输出属性:
如上图,输出路径我们可以设置成自己的路径,如client。这时候我们有一个需求需要在service文件夹里也生成一下这个dll,解决方案就是在后期生成事件命令行里使用copy,复制一份到我们所需要service的文件夹。当然又要复制到另一文件夹,再加一行copy就行。可能某些项目引用了这俩文件夹中的这个文件,可能这俩文件夹里的其他文件依赖这个文件,总之这段copy指令不是无中生有,一定有它存在的价值。
解决方案,网上查解决方案,发现绝大部分解决方案都是清空里面的内容,是能生成成功,可是真的不会出问题了,看上面的解释就知道了。
真正的解决方案就是处理这个copy指令的错误原因。
首先我们可以了解一下copy的指令
批处理中Copy与Xcopy的区别
然后查看输出信息:
4> 系统找不到指定的路径。 4>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5165,5): error MSB3073: 命令“copy "bin\Debug\Lenovo.HIS.Plugin.Patients.dll" "D:\WorkFolder\SJZCode\ResidentDoctor2.0\Lenovo.HIS.ElectronicHealthRecord\\..\LenovoClient\Plugin"”已退出,代码为 1。 答案很明显了,找不到指定路径,要么copy源路径没找到,要么是copy目标路径没找到。结合copy语法和宏指定的路径即可找到答案。我这里报错的原因是数据源 ( O u t D i r ) 是 相 对 路 径 , 系 统 没 找 到 , 改 成 等 价 的 绝 对 路 径 (OutDir)是相对路径,系统没找到,改成等价的绝对路径 (OutDir)是相对路径,系统没找到,改成等价的绝对路径(TargetDir)即解决了问题。
当然这只是一种copy错误,可能会出现其他的,如权限不够,内存不足等等,仔细看提示既能找到原因
PHP读取本地JSON文件时后,使用json_decode函数返回null的解决方法
其实,很多新手在这里总是会遇到坑,在做测试实验时,明明 j s o n s t r i n g = f i l e g e t c o n t e n t s ( “ f : d a t a . j s o n ” ) 之 后 能 够 输 出 j s o n , 但 是 json_string = file_get_contents(“f:data.json”)之后能够输出json,但是 jsonstring=filegetcontents(“f:data.json”)之后能够输出json,但是data = json_decode( j s o n s t r i n g ) ; 之 后 , v a r d u m p ( json_string);之后,var_dump( jsonstring);之后,vardump(data);却输出NULL。
django的后端models
from django.db import models class Car_Home(models.Model): #标题 title = models.CharField(max_length=64) #简介 summary = models.CharField(max_length=512) #网页地址 a_url = models.CharField(max_length=64) #图片地址 img_url = models.CharField(max_length=64) #类型 tags = models.CharField(max_length=32) django的后端函数
from django.shortcuts import render,HttpResponse from django.http.response import JsonResponse from web import models def search_list(request): if request.method == 'POST': # 拿到ajax发送过来的数据,第一个是查找的内容,第二个是什么类型的内容 content = request.POST.get('search_input') tags = request.POST.get('tags') #查找全部的信息 if tags == 'all': cars_obj = models.Car_Home.objects.filter(title__contains=content) lis = [] for i in cars_obj: lis.
有时候,我们在做修改回显数据时,就需要默认触发一些事件,但是由于数据没有很快从服务器中取回,所以就有延迟执行js事件
setTimeout(function () { // 这里就是处理的事件 }, 2000); 转载于:https://www.cnblogs.com/xiaostudy/p/10918955.html
项目1 信息技术基础应用
任务3 小型局域网搭建
计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
互联网(internet)又称因特网,即广域网、城域网、局域网及单机按照一定的通讯协议组成的国际计算机网络。互联网是指将两台计算机或者是两台以上的计算机终端、客户端、服务端通过计算机信息技术的手段互相联系起来的结果,人们可以与远在千里之外的朋友相互发送邮件、共同完成一项工作、共同娱乐。同时,互联网还是物联网的重要组成部分,根据中国物联网校企联盟的定义,物联网是当下几乎所有技术与计算机互联网技术的结合,让信息更快更准得收集、传递、处理并执行
1.3.2 任务描述
为了便于和同学们在一起共同讨论学习,交流心得,共享资源等,王明同学需要动手创建一个独立的宿舍局域网,所以便在模拟器下搭建了一个拓扑图,拓扑图如下:
1.3.2 任务分析
要完成本项工作任务,需要进行以下操作。
(1)按照拓扑图搭建拓扑
(2)理解交换机路由器的基本概念和功能
(3)创建宽带网络连接。
(4)可以正常访问外网
该工作任务的实施,要求操作人员必须了解交换机路由器的基本概念和功能
并且理解Internet的基本知识,,并掌握宽带连接的创建操作,这样才能将个人计算机通过宿舍局域网接入Internet。
1.3.3 任务实现
一、 必备知识
1.计算机网络的分类
计算机网络的分类标准有很多种,主要的分类标准有根据网络所使用的传输技术分类、
根据网络的拓扑结构分类、根据网络协议分类等。各种分类标准只能从某一方面反映网络的特征。根据网络覆盖的地理范围和规模分类是最普遍采用的分类方法,它能较好地反映出网络的本质特征。由于网络覆盖的地理范围不同,它们所采用的传输技术也就不同,因此形成不同的网络技术特点与网络服务功能。依据这种分类标准,可以将计算机网络分为三种:局域网、城域网和广域网。
2.网络拓扑结构
按照拓扑学的观点,将主机、交换机等网络设备单元抽象为“点”,网络中的传输介质抽象为“线”,那么计算机网络系统就变成了由点和线组成的几何图形,它表示了通信介质与各结点的物理连接结构。这种结构称为计算机网络拓扑结构。
按照网络中各结点位置和布局的不同,计算机网络可分为星型拓扑、环型拓扑、总线型拓扑、树型拓扑、网状拓扑和混合型拓扑等网络类型,如图所示。
网络基本拓扑结构图
现今网络中,Internet和广域网都采用网状型拓扑结构;而大多数局域网都采用树型拓扑结构,也就是多个层次的星型网络纵向连接而成。
3.TCP/IP协议
TCP/IP协议(Transfer Controln Protocol/Internet Protocol)叫做传输控制协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。
TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。
TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。
之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。以下我们对协议族中一些常用协议英文名称和用途作一介绍:
TCP(Transport Control Protocol)传输控制协议
IP(Internetworking Protocol)网间网协议
UDP(User Datagram Protocol)用户数据报协议
ICMP(Internet Control Message Protocol)互联网控制信息协议
SMTP(Simple Mail Transfer Protocol)简单邮件传输协议
SNMP(Simple Network manage Protocol)简单网络管理协议
FTP(File Transfer Protocol)文件传输协议
ARP(Address Resolation Protocol)地址解析协议
数据链路层包括了硬件接口和协议ARP,RARP,这两个协议主要是用来建立送到物理层上的信息和接收从物理层上传来的信息;
网络层中的协议主有IP,ICMP,IGMP等,由于它包含了IP协议模块,所以它是所有机遇TCP/IP协议网络的核心。在网络层中,IP模块完成大部分功能。ICMP和IGMP以及其他支持IP的协议帮助IP完成特定的任务,如传输差错控制信息以及主机/路由器之间的控制电文等。网络层掌管着网络中主机间的信息传输。
传输层上的主要协议是TCP和UDP。正如网络层控制着主机之间的数据传递,传输层控制着那些将要进入网络层的数据。两个协议就是它管理这些数据的两种方式:TCP是一个基于连接的协议;UDP则是面向无连接服务的管理方式的协议。
Telnet:提供远程登录(终端仿真)服务。 FTP :提供应用级的文件传输服务,说的简单明了点就是远程文件访问等等服务。 SMTP:不用说拉,天天用到的电子邮件协议。 TFTP:提供小而简单的文件传输服务,实际上从某个角度上来说是对FTP的一种替换(在文件特别小并且仅有传输需求的时候)。 SNTP:简单网络管理协议。看名字就不用说什么含义了吧。 DNS:域名解析服务,也就是如何将域名映射城IP地址的协议。 HTTP:不知道各位对这个协议熟不熟悉啊?这是超文本传输协议。 那么我现在为大家详细的解释OSI七层模型,以及对应的功能