1:Washington DC Mal,Indian Pine等
https://engineering.purdue.edu/~biehl/MultiSpec/hyperspectral.html
2:Indian Pines, Salinas,Pavia Centre and University, Cuprite 等
http://www.ehu.eus/ccwintco/index.php?title=Hyperspectral_Remote_Sensing_Scenes
3:hydice的urban 等
http://www.erdc.usace.army.mil/Media/Fact-Sheets/Fact-Sheet-Article-View/Article/610433/hypercube/#
4:cave 数据集:
http://www1.cs.columbia.edu/CAVE/databases/multispectral/
5: icvl 数据集:
http://icvl.cs.bgu.ac.il/hyperspectral/
6:nus 数据集:
http://www.comp.nus.edu.sg/~whitebal/spectral_reconstruction/index.html
如有其他的数据集,欢迎补充!
前置条件 靶机:metasploitable2
靶机IP:192.168.88.137
初始密码是:msfadmin/msfadmin
kali安装的镜像为:kali-linux-2019.1a-amd64.iso
KaliIP为:192.168.88.132
使用Metasploit获取mysql登录密码 进入Metasploit的控制台执行命令:
msfconsole 查询ssh服务相关模块信息,选择如下模块:
use auxiliary/scanner/ssh/ssh_login 查看ssh_login配置参数选项:
show options 设置远程服务RHOSTS参数值:
set RHOSTS 192.168.88.137 设置USERPASS_FILE参数,本文使用系统本身提供的:
set USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/piata_ssh_userpass.txt 执行攻击命令:
exploit 上述操作截图如下:
退出攻击,CTRL+C,查看会话列表:sessions -l
进入指定会话:sessions -i 1,进入到会话1,执行shell命令如下截图:
上述操作时通过,ssh_login模块获取到靶机的ssh会话信息,通过会话可以操作靶机上的信息,删除创建文件等。
下面讨论一下微信朋友圈的实现方式。先分析结构,和布局。
微信朋友圈,看起来很有秩序,而且滑动的时候也不卡,应用的非常好。对于微信朋友圈的样式,我们可以大致分成以下6种类型。
纯文字类型单张图得显示多张图得显示(按照九宫格排练)链接类型视频类型广告类型 那么我们需要分析每种类型的布局有什么共同点,和不同点。
每种类型都是有一个头像和一个姓名,这个是必须的,我们可以封装到父类里。每种类型,都可以附带文字说明,也可以不带,我们也可以封装到父类里,但是这个不是必须要创建的时候,就生成的,而是根据当前有没有文字说明来生成的,所有说他应该是动态生成的,对于复用我们可以用隐藏。最好不要从父类移除。
还有就是评论,每种类型都可以评论。那么我们就要把评论封装到一起。也可以封装到父类。对于显示时间这个也是必须的我们也可以封装到父类里。
那么我们可以看到如下结构:
以一个多张图类型,我们分析一下,红框算一个cell,只有黑框位置的内容是不一样的,所以我们只要把黑框以外的分装好做成基类,其他的类型都继承基类,这样我们就能减少布局的变化,并且还能更多的复用。
那么我们用MVC的模式来分析:
模型 class JHSMessageModel: NSObject { var name = ""; var modelType: MessageModelType! var contentText: String! init(type: MessageModelType) { super.init(); modelType = type; self.configData(); } func configData() -> Void { } private var _contextSize: CGSize! var contextSize: CGSize { if contentText == nil { return CGSize.zero; } if _contextSize != nil { return _contextSize; } _contextSize = contentText.textSize(size: CGSize(width: PengConfigParamter.maxWidth, height: CGFloat.
起因:因最近实习期间,要求查看.xlsx文件中数据是否有误,由于数据较多,想用python去执行,结果发现网上对xlsx文件操作或是太旧,大多难以应用,所以自己整理了一下,以备自己后用。
模拟一个测试数据集data_test.xlsx文件,文件如下:
导入pandas,并读入文件 # 若报错:SyntaxError: Non-UTF-8 code starting with '\xd0' in file,则把下面这句加上 # coding=gbk import pandas as pd df = pd.read_excel('C:/Users/enuit/Desktop/data_test.xlsx') 读取行列数及索引 # 行数 (不包含表头,且一下均如此) print(len(df.index.values)) # 行索引 print(df.index.values) # 列数 print(len(df.columns.values)) # 列索引 print(df.columns.values) 读取指定单行和多行数据 # 表示第0行数据 data = df.loc[0].values print('第0行数据: \n', data) # 读取多行数据(这里是第1行和第2行) data = df.loc[[1, 2]].values print('第1行和第2行数据: \n', data) 读取指定单列和多列数据 # 读第1列数据 data = df.iloc[:, 1].values print('第1列数据: \n', data) # 读取多列数据(这里是第1列和第2列) data = df.iloc[:, [1, 2]].
通常情况下程序员接所接触到的套接字(Socket)为两类:
(1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用;
(2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的 UDP 服务应用。
从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了 TCP/IP 应用的全部,因为基于 TCP/IP 的应用,从协议栈的层次上讲,在传输层的确只可能建立于 TCP 或 UDP 协议之上,而 SOCK_STREAM、SOCK_DGRAM 又分别对应于 TCP 和 UDP,所以几乎所有的应用都可以用这两类套接字实现。
但是,当我们面对如下问题时,SOCK_STREAM、SOCK_DGRAM 将显得这样无助:
(1)怎样发送一个自定义的 IP 包?
(2)怎样发送一个 ICMP 协议包?
(3)怎样分析所有经过网络的包,而不管这样包是否是发给自己的?
(4)怎样伪装本地的 IP 地址?
这使得我们必须面对另外一个深刻的主题——原始套接字(SOCK_RAW)。原始套接字广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的网络sniffer(一种基于被动侦听原理的网络分析方式)、拒绝服务攻击(DOS)、IP 欺骗等都可以通过原始套接字实现。
原始套接字(SOCK_RAW)可以用来自行组装数据包,可以接收本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用。
原始套接字是基于 IP 数据包的编程(SOCK_PACKET 是基于数据链路层的编程)。另外,必须在管理员权限下才能使用原始套接字。
原始套接字(SOCK_RAW)与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于原始套接字直接置“根”于操作系统网络核心(Network Core),而 SOCK_STREAM、SOCK_DGRAM 则“悬浮”于 TCP 和 UDP 协议的外围。
流式套接字只能收发 TCP 协议的数据,数据报套接字只能收发 UDP 协议的数据,原始套接字可以收发内核没有处理的数据包。
--------------------- 作者:Mike__Jiang 来源:CSDN 原文:https://blog.csdn.net/tennysonsky/article/details/44655077
文章目录 checkbox全选与单选第一步,设置checkbox标签第二步,写方法效果 checkbox全选与单选 第一步,设置checkbox标签 <center> <table> <tr><td>已选中【<span id="number"></span>】个</td><td></td></tr> <tr><td><input type="checkbox" id="check_all" onchange="check_all();"/></td><td>全选</td></tr> <tr><td><input type="checkbox" name="check" onchange="num()"/></td><td>西瓜</td></tr> <tr><td><input type="checkbox" name="check" onchange="num()"/></td><td>苹果</td></tr> <tr><td><input type="checkbox" name="check" onchange="num()"/></td><td>香蕉</td></tr> <tr><td><input type="checkbox" name="check" onchange="num()"/></td><td>橙子</td></tr> <tr><td><input type="checkbox" name="check" onchange="num()"/></td><td>凤梨</td></tr> </table> </center> 第二步,写方法 <%--全选--%> <script type="text/javascript"> function check_all() { //根据id找到元素,获取选择状态 var status = document.getElementById("check_all").checked; var mycc = document.getElementsByName("check"); //遍历集合,改变每个checkbox状态随着全选按钮的状态儿改变 for (a=0;a<mycc.length;a++){ mycc[a].checked=status; } num(); } <%--计数--%> function num() { //统计被选中数量 var checknum=0; var myck= document.getElementsByName("check"); for (a=0;a<myck.length;a++){ if (myck[a].
ioctl作用:应用层的ioctl函数传入的cmd和arg参数会直接传入驱动层的ioctl接口,在对应驱动文件里会对相应的命令进行操作
对于传递的ioctl命令有一定的规范,具体可以参考:/include/asm/ioctl.h,/Documentation/ioctl-number.txt 这两个文件
应用层和驱动程序联系如下:
最终ioctl是通过系统调用sys_ioctl软中断陷入到内核,通过系统中断号最终调用到内核态的ioctl函数。
构造ioctl命令linux已经给我们提供了宏命令:
举一个简单的例子:
欢迎使用CSDN-markdown编辑器 96 流水潺湲 关注
2017.03.09 10:41* 字数 876 阅读 965评论 0喜欢 0
—来自CSDN博客
欢迎使用Markdown编辑器写博客
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
Markdown和扩展Markdown简洁的语法
代码块高亮
图片链接和图片上传
LaTex数学公式
UML序列图和流程图
离线写博客
导入导出Markdown文件
丰富的快捷键
标题快捷键 加粗 Ctrl + B
斜体 Ctrl + I
引用 Ctrl + Q
插入链接 Ctrl + L
插入代码 Ctrl + K
插入图片 Ctrl + G
提升标题 Ctrl + H
有序列表 Ctrl + O
无序列表 Ctrl + U
横线 Ctrl + R
撤销 Ctrl + Z
重做 Ctrl + Y
为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁。为了实现所谓的互斥锁的概念,一般都需要所在平台提供支持。
本文主要用来说明ARM平台上特有的独占访问指令LDREX和STREX的工作原理,以及如何使用。而它们也是ARM平台上,实现互斥锁等线程同步工具的基础。
我们先来看看LDREX和STREX两条指令的语义。其实LDREX和STREX指令,是将单纯的更新内存的原子操作分成了两个独立的步骤。
1)LDREX用来读取内存中的值,并标记对该段内存的独占访问:
LDREX Rx, [Ry]
上面的指令意味着,读取寄存器Ry指向的4字节内存值,将其保存到Rx寄存器中,同时标记对Ry指向内存区域的独占访问。
如果执行LDREX指令的时候发现已经被标记为独占访问了,并不会对指令的执行产生影响。
2)而STREX在更新内存数值时,会检查该段内存是否已经被标记为独占访问,并以此来决定是否更新内存中的值:
STREX Rx, Ry, [Rz]
如果执行这条指令的时候发现已经被标记为独占访问了,则将寄存器Ry中的值更新到寄存器Rz指向的内存,并将寄存器Rx设置成0。指令执行成功后,会将独占访问标记位清除。
而如果执行这条指令的时候发现没有设置独占标记,则不会更新内存,且将寄存器Rx的值设置成1。
一旦某条STREX指令执行成功后,以后再对同一段内存尝试使用STREX指令更新的时候,会发现独占标记已经被清空了,就不能再更新了,从而实现独占访问的机制。
大致的流程就是这样,但是ARM内部为了实现这个功能,还有不少复杂的情况要处理。
在ARM系统中,内存有两种不同且对立的属性,即共享(Shareable)和非共享(Non-shareable)。共享意味着该段内存可以被系统中不同处理器访问到,这些处理器可以是同构的也可以是异构的。而非共享,则相反,意味着该段内存只能被系统中的一个处理器所访问到,对别的处理器来说不可见。
为了实现独占访问,ARM系统中还特别提供了所谓独占监视器(Exclusive Monitor)的东西,其结构大致如下:
可以看出来,一共有两种类型的独占监视器。每一个处理器内部都有一个本地监视器(Local Monitor),且在整个系统范围内还有一个全局监视器(Global Monitor)。
如果要对非共享内存区中的值进行独占访问,只需要涉及本处理器内部的本地监视器就可以了;而如果要对共享内存区中的内存进行独占访问,除了要涉及到本处理器内部的本地监视器外,由于该内存区域可以被系统中所有处理器访问到,因此还必须要由全局监视器来协调。
对于本地监视器来说,它只标记了本处理器对某段内存的独占访问,在调用LDREX指令时设置独占访问标志,在调用STREX指令时清除独占访问标志。
而对于全局监视器来说,它可以标记每个处理器对某段内存的独占访问。也就是说,当一个处理器调用LDREX访问某段共享内存时,全局监视器只会设置针对该处理器的独占访问标记,不会影响到其它的处理器。当在以下两种情况下,会清除某个处理器的独占访问标记:
1)当该处理器调用LDREX指令,申请独占访问另一段内存时;
2)当别的处理器成功更新了该段独占访问内存值时。
对于第二种情况,也就是说,当独占内存访问内存的值在任何情况下,被任何一个处理器更改过之后,所有申请独占该段内存的处理器的独占标记都会被清空。
另外,更新内存的操作不一定非要是STREX指令,任何其它存储指令都可以。但如果不是STREX的话,则没法保证独占访问性。
现在的处理器基本上都是多核的,一个芯片上集成了多个处理器。而且对于一般的操作系统,系统内存基本上都被设置上了共享属性,也就是说对系统中所有处理器可见。因此,我们这里主要分析多核系统中对共享内存的独占访问的情况。
为了更加清楚的说明,我们可以举一个例子。假设系统中有两个处理器内核,而一个程序由三个线程组成,其中两个线程被分配到了第一个处理器上,另外一个线程被分配到了第二个处理器上。且他们的执行序列如下:
大致经历的步骤如下:
1)CPU2上的线程3最早执行LDREX,锁定某段共享内存区域。它会相应更新本地监视器和全局监视器。
2)然后,CPU1上的线程1执行LDREX,它也会更新本地监视器和全局监视器。这时在全局监视器上,CPU1和CPU2都对该段内存做了独占标记。
3)接着,CPU1上的线程2执行LDREX指令,它会发现本处理器的本地监视器对该段内存有了独占标记,同时全局监视器上CPU1也对该段内存做了独占标记,但这并不会影响这条指令的操作。
4)再下来,CPU1上的线程1最先执行了STREX指令,尝试更新该段内存的值。它会发现本地监视器对该段内存是有独占标记的,而全局监视器上CPU1也有该段内存的独占标记,则更新内存值成功。同时,清除本地监视器对该段内存的独占标记,还有全局监视器所有处理器对该段内存的独占标记。
5)下面,CPU2上的线程3执行STREX指令,也想更新该段内存值。它会发现本地监视器拥有对该段内存的独占标记,但是在全局监视器上CPU1没有了该段内存的独占标记(前面一步清空了),则更新不成功。
6)最后,CPU1上的线程2执行STREX指令,试着更新该段内存值。它会发现本地监视器已经没有了对该段内存的独占标记(第4步清除了),则直接更新失败,不需要再查全局监视器了。
所以,可以看出来,这套机制的精髓就是,无论有多少个处理器,有多少个地方会申请对同一个内存段进行操作,保证只有最早的更新可以成功,这之后的更新都会失败。失败了就证明对该段内存有访问冲突了。实际的使用中,可以重新用LDREX读取该段内存中保存的最新值,再处理一次,再尝试保存,直到成功为止。
还有一点需要说明,LDREX和STREX是对内存中的一个字(Word,32 bit)进行独占访问的指令。如果想独占访问的内存区域不是一个字,还有其它的指令:
1)LDREXB和STREXB:对内存中的一个字节(Byte,8 bit)进行独占访问;
2)LDREXH和STREXH:中的一个半字(Half Word,16 bit)进行独占访问;
3)LDREXD和STREXD:中的一个双字(Double Word,64 bit)进行独占访问。
它们必须配对使用,不能混用。
--------------------- 作者:roland_sun 来源:CSDN 原文:https://blog.csdn.net/roland_sun/article/details/47670099 版权声明:本文为博主原创文章,转载请附上博文链接!
以上是转载自其他作者的解释,这里在调试cortex a7的时候,会碰到多核情况,原子操作编译出strex和ldrex指令,当需要访问的这段内存是uncahced,mmu属性没有配置,会直接进入到指令异常,我理解这个指令是需要过cache的,monitor在提供给竞争线程返回数据的时候,是利用了cache的数据,实际并不会真的访问到实际内存。
layui表单自动提交问题 最近使用layui的表单提交时,遇到了这个问题:在form内的按钮总是会自动提交。
而按钮放在form外面就不会出现这种问题,很让人头痛。
下面让我们来看看如何解决form内按钮自动提交问题的吧。
<form class="layui-form"> <label class="layui-form-label">银行卡号</label> <input type="text" name="bankCard" lay-verify="required" class="layui-input"> <label class="layui-form-label">银行卡开户行</label> <input type="text" name="bankInfo" lay-verify="required" class="layui-input"> <button class="layui-btn layui-btn-sm" lay-submit lay-filter="formDemo">评审完成</button> <button class="layui-btn layui-btn-sm" "window.scrollTo(0,0);">返回顶部 </button> </from> <script type="text/javascript"> form.on('submit(formDemo)',function(data){ }); </script> 上面是出现自动提交的代码,点击返回顶部和评审完成都会自动提交表单。
解决的方案:
1、放在表单中的button将其type设置为button,则不会自动提交。
Button按钮的type有三个可选属性:Button,submit,reset,而Button按钮的type属性默认值是submit ,所以在没有指定type属性的情况下,点击Button按钮会触发提交form表单
<button type="button" class="layui-btn layui-btn-sm" "window.scrollTo(0,0);">返回顶部</button> 2、使用a标签做成的按钮来替代button。
<a class="layui-btn layui-btn-sm" "window.scrollTo(0,0);">返回顶部</a> 3、在表单中按钮的js回调函数里添加 return false制止。
form.on('submit(formDemo)',function(data){ ...... return false; }); 但是按钮中若没有添加lay-submit属性,layui的form.on的表单提交监听不到这个按钮,那么return false对提交的制止也就失效了。
对应的按钮需要加上lay-filter=“formDemo” , 里面的formDemo标识用于绑定方法。
RTTI含义:运行时类型信息Class对象和类加载器
Class对象:包含了与类有关的信息,每一个类都有一个Class对象
类加载器:类加载器是Java虚拟机(JVM)的一个子系统,所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创 建一个对类的静态引用时,就会加载这个类。因此证明了构造器也是类的静态方法,用new操作费创建类的新对象也会被当做对类的静态成员引用。类加载时,类加载器首先检查类的Class对象是否已经加载,如果尚未加载,默认的类加载器就会根据类名查找.class文件。static初始化是在类加载时进行的。获取类的Class对象的方式
(1)Class 对象名 = Class.forName(“包名.类名”); 需要检查异常(用try-catch包围或throws抛出异常),并会初始化类
(2)Class 对象名 = 类名.class; 无需检查异常,不会进行初始化,比类名.forName方式更高效
(3)Class 对象名 = 类名.getClass();
(4)通过ClassLoader加载,ClassLoader.getSystemClassLoader().loadClass(“包名.类名”); 没有对类进行初始化,只是把类加载到了虚拟机中使用类时准备工作三个步骤
(1)加载:由类加载器执行,查找字节码(通常在classpath所指定的路径中查找),并从这些字节码中创建一个Class对象、
(2)链接:在链接阶段将验证类中的字节码,为静态域分配存储空间,如果必需的话,将解析这个类创建对其它类的所有引用。
(3)初始化:如果该类具有超类,则对其进行初始化,执行静态初始化器(如构造方法)和静态初始化块。
使用.class方式获取类的Class对象时。初始化操作被延迟到对静态方法(构造器也是隐式地是静态的)或非常数静态域(需要运行时才能确定的静态域)进行首次调用时才执行 import java.util.Random; class Initable { static final int staticFinal = 47; static final int staicFinal2 = Test1.rand.nextInt(1000); static { System.out.println("Initializing Initable"); } } class Initable2 { static int staticFinal = 147; static { System.out.println("Initializing Initable2"); } } class Initable3 { static final int staticFinal = 74; static { System.
更新方法一: 直接点击图中的箭头就可以更新项目(这是最简单的)
更新方法二: 项目上点击右键,然后进行以下步骤的操作就好
提交方法一: 注意:在提交项目之前一定要先对项目进行更新,假如别人有项目提交到服务器上,你没有更新的话就会提交不上去或者是有冲突。
直接使用上面的步骤就可以提交项目了,记得一定要写备注信息。提交项目之后可以去服务器上确认一下是否提交成功。
提交方法二:
树挪死,人挪活。
大城市小人物,生活最终会把你变成你讨厌的人。
以前就随便用了一个5的版本,结果搜到有关于漏洞的消息
Xmanager 5 的最新版网上找了一圈,都被国内某代理公司给起诉了,最新版不好下载,下面就告诉大家一个方法下载最新版:
随便装一个Xmanager 5版本,需要挂VPN翻墙
下载后运行安装包,一般来说就结束了,但是最新的安装包还是没有保留下来,其实很简单
任务管理器右键正在执行的安装包,找到下载目录直接复制出来安装包就好。
方便没有翻墙的小伙伴,网盘地址:(带注册机)
初级防爆密码:Xmanager Enterprise 1249
链接: https://pan.baidu.com/s/1f-oqV2YyXl4rCj86vItuxg 提取码: 7fam VPN付费使用注册地址:(shadowsocks)
shadowsocks
使用anaconda对应的python3.7版本,win10,64位
一、安装whl文件
1、下载whl文件。
2、打开窗口“anaconda prompt"
3、在命令窗口输入 pip install +whl文件名
4、输入pip list 检查是否安装成功
检查方法二、首先输入Python
然后再输入 import wx
检查是否安装成功。
二、安装tar.gz文件
把相关文件解压缩在根目录,
PS:目前依然不清楚,在命令窗口使用PIP已经安装成功,但是不能调用,只有在prompt窗口输入才能成功调用
问题2:在命令窗口安装,在pycharm和anaconda都不能用,若在prompt安装则都可以成功调用。
首先下载tar.gz文件,比如web.py,下载后是一个tar.gz文件,用好压或其他解压软件解压,你会看到目录里有一个setup.py文件,这时,在地址栏输入%comspec%,这样会出现该目录下的提示符,再写python.exe setup.py install,回车即可。(前提,环境变量已设置,否则无法使用)
淘宝api sign加密算法 转载学习:https://cloud.tencent.com/developer/article/1200820
淘宝对于h5的访问采用了和客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通过cookie带回服务端分配的token, 客户端利用分配的token对请求的URL参数生成摘要值sign,
MTOP利用这个摘用值和cookie中的token来防止URL篡改。
流程 当本地cookie中的token为空时(通常是第一次访问),mtop会收到”FAIL_SYS_TOKEN_EXOIRED:: 令牌过期“这个错误应答,同时mtop会生成token写入cookie中(response.cookies)。第二次请求时,js通过读取cookie中的token值,按照约定的算法生成sign, sign在mtop的请求中带上,mtop通过cookie中和token用同样的方式计算出sign,与请求的sign进行比较,检查通过将返回api的应答,失败提示“FAIL_SYS_ILLEGAL_ACCESS:: 非法请求”cookie中的token是有时效性的,遇到token失效时,将收到应答"FAIL_SYS_TOKEN_EXOIRED:: 令牌过期", 同时会写入新的token,js利用新的token重新计算sign并重发请求。 关于cookie中的token的自我检查,由于token在cookie中是明文的,可能会被仿冒,在输出的cookie中包含一个用非对称密钥的公钥加密后的token, MTOP在每次请求时会先检查cookie中的token是否是由服务端分配出去的(利用加密后的token和私钥还原token,与回传的明文token比较)
sign 生成 关于sign的生成公式:
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CNZSWYMP/article/details/78676642 </div> <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"> <div class="htmledit_views" id="content_views"> <p>开发环境为微信web开发者工具,实现的功能是可以在首页查看豆瓣电影评分前250名并且可以点击跳转到详情页,在搜索页输入关键字搜索相关电影。效果图如下</p> 代码
app.json { "pages":[ "pages/index/index", "pages/movie/movie", "pages/search/search", "pages/profile/profile" ], "window":{ "navigationBarBackgroundColor": "#35495e", "navigationBarTextStyle": "white", "navigationBarTitleText": "豆瓣电影", "backgroundColor": "#fff", "backgroundTextStyle": "dark", "enablePullDownRefresh": true }, "tabBar":{ "list":[ { "text": "推荐电影", "iconPath": "images/board.png", "selectedIconPath": "images/board-actived.png", "pagePath": "pages/index/index" }, { "text": "发现电影", "iconPath": "images/search.png", "selectedIconPath": "images/search_black.png", "pagePath": "pages/search/search" }, { "text": "我的电影", "iconPath": "images/profile.png", "selectedIconPath": "images/profile-actived.png", "pagePath": "pages/profile/profile" } ] } } app.wxss page{ font-family: "
问题描述: 我希望在cmd中执行mysql,已经把mysql所在bin目录配在了环境变量里面,但是依然报错:‘mysql’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
解决:
首先要确定你配置在环境变量中的路径能访问到该.exe文件,比如mysql.exe.检查该路径是否带了多余的分号,需要把分号去掉。
重新开一个cmd窗口。执行mysql命令,ok!
目录
1:document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件
2:$(function()和$(document).ready(function()和$().ready(function()
3:document.ready和onload的区别
1.$(window).load(function(){...}方法
⑴执行时机:
⑵多次使用:
2.$(document).ready()方法
⑴执行时机:
⑵多次使用:
注:一般情况先一个页面响应加载的顺序是:域名解析-加载html-加载js和css-加载图片等其他信息。
1:document.ready和onload的区别——JavaScript文档加载完成事件
页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)
二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
2:$(function()和$(document).ready(function()和$().ready(function() 用jQ的人很多人都是这么开始写脚本的:
$(function(){
// do something
});
其实这个就是jq ready()的简写,他等价于:
$(document).ready(function(){
//do something
})
//或者等价于下面这个方法,jQuer的默认参数是:“document”;
$().ready(function(){
//do something
})
这个就是jq ready()的方法就是Dom Ready,他的作用或者意义就是:在DOM加载完成后就可以可以对DOM进行操作。
那么Dom Ready应该在“加载js和css”和“加载图片等其他信息”之间,就可以操作Dom了。
3:document.ready和onload的区别 1.$(window).load(function(){...}方法 ⑴执行时机: 在网页中所有元素(包括元素的所有关联文件)完全加载到浏览器后才执行,即JavaScript 此时可以访问网页中的所有元素。
window.οnlοad=function(){
//原生js
} $(window).load(function(){
//jquery的window.load
});
⑵多次使用: JavaScript的onload事件一次只能保存对一个函数的引用,他会自动用最后面的函数覆盖前面的函数。
function one(){
alert("one");
}
function two(){
alert("two");
}
window.οnlοad=one;
window.οnlοad=two;
//运行代码后只有 two
2.$(document).ready()方法 ⑴执行时机: 在DOM完全就绪时就可以被调用。(这并不意味着这些元素关联的文件都已经下载完毕)
举个例子:$(document).ready()方法明知要DOM就绪就可以操作了,不需要等待所有图片下载完毕。
⑵多次使用: function one(){
输入数据(用循环语句),判断数据是否小于等于0或大于12,应用if…else分别判断季节
#include<iostream> using namespace std; int main() { int a; for(int i=0;;i++) { cin>>a; if(a<=0||a>12) cout<<"错误,请重新输入"<<endl; else if(a>=3&&a<=5) cout<<"春季"<<endl; if(a>=6&&a<=8) cout<<"夏季"<<endl; if(a>=9&&a<=11) cout<<"秋季"<<endl; if(a<=2&&a>0||a==12) cout<<"冬季"<<endl; } system("pause"); return 0; }