今天在项目操作中突然遇到这个问题;查了之后发现原来是对应的实体中注解的cloumn在表中不存在;表中加上对应字段后,就ok了;
解决地址来自于:http://jingyan.baidu.com/article/9f7e7ec05c5ad76f281554ab.html
1.创建数据库:
CREATE DATABASE my_db;
2.创建表:
CREATE TABLE Persons ( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ) 数据类型: int smallint tinyint 整数 , char(size) 容纳固定长度的字符串,
varchar(size) 容纳可变长度的字符串,
date(yyyymmddd) 容纳日期。
3.约束:
NOT NULL 约束强制列不接受 NULL 值。
UNIQUE 约束唯一标识数据库表中的每条记录。
PRIMARY KEY PRIMARY KEY 约束唯一标识数据库表中的每条记录。
FOREIGN KEY 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
CHECK 约束用于限制列中的值的范围。
DEFAULT 约束用于向列中插入默认值。
3.1.Not Null
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ) 3.
JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
Class 众所周知Java有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class 对象。 Class 类十分特殊。它和一般类一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class 对象。如果您想借由“修改Java标准库源码”来观察Class 对象的实际生成时机(例如在Class的constructor内添加一个println()),这样是行不通的!因为Class并没有public constructor。 1. 得到某个对象的属性 public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); Object property = field.get(owner); return property; } Class ownerClass = owner.getClass():得到该对象的Class。 Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。 Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。 2. 得到某个类的静态属性
public Object getStaticProperty(String className, String fieldName) throws Exception { Class ownerClass = Class.
NotePad++是一款轻型的免费软件,相对于VC等大型软件来说,具有简便高效的特点。如果我们能够使用NotePad++来编译运行C程序,那么可以说是非常方便的。
下面我们就来介绍一下如何用NotePad++来编写并运行C程序。
工具/原料 NotePad++ (百度搜索即得) TDM-GCC,或Dev C++ (文中有地址,或上官网下载)等 方法/步骤 1.下载软件并安装:NotePad++(利用文本编辑功能)
TDM-GCC(GCC编译器,GCC For Windows中比较方便的一个版本)百度TDM-GCC进入官网即可。这里为了方便,提供原版安装包:链接:http://pan.baidu.com/s/1o6HUxo2备用地址:链接:http://pan.baidu.com/s/1c01tGJ2 密码:2gey
或者Dev C++(利用内部的gcc编译器)Dev C++我是上官网下载的,这里为了方便,提供原版安装包:主链接:http://pan.baidu.com/s/1mgspFPe备用链接:http://pan.baidu.com/s/1ntyts4T 密码:tkdi
2.设置环境变量:
TDM-GCC已经设定好了环境变量,如果是Dev-Cpp,需要手动配置:
在"计算机"图标或按钮上,右键属性,有一个”高级系统设置“,点击这个按钮,修改。
如果存在Path属性,直接编辑,在最末尾加上个分号然后写上Dev-Cpp的安装路径至bin文件夹;不存在,直接新建,加上该条。
注:
如出现"找不到命令"的情况,即为未配置好环境变量,可能是编译器安装出现问题所致。请查找目录至bin文件夹,看有否gcc.exe文件。如未出现,即为安装问题。
3.创建文件:新建一个.c文件,输入#include<stdio.h>int main(){ printf("Hello World!\n"); return 0;}并保存。
4.编译并运行:
单击菜单,选择最上选项”运行“,或直接按下F5。弹出运行窗口。
输入:cmd /k gcc -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" && CLS && "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" & PAUSE & EXIT单击运行即可。
也可以使用其他命令:
编译:
cmd /k gcc -Wall -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" & PAUSE & EXIT
运行:
cmd /k "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" & PAUSE & EXIT
5.命令行解释:
可以直接点击保存,弹出窗口,输入名称如”编译并运行 C“,并设定好快捷键。
今天在打开sql server 的时候打不开。报了一个错误,然后我打开sql server配置管理器,就看到了如下图这个错误。
然后就去网上搜了这个问题的解决方法,综合起来有以下几种:
第一种:
给数据库程序network service读取权限即可。
C:/Program Files/Microsoft SQL Server/90/Shared给这个目录增加network service权限或者 user权限就可以了,当然你加Everyone也行。
这种方法我都不知道怎么操作。。不会加。。
第二种: 检查一下 windows下的system32 中是否有framedyn.dll这个系统文件,如果没有到system32 下的wbem文件中拷贝framedyn.dll到system32 目录下。 我进到system32目录找framedyn.dll文件,果然没有找到,再进入system32/wbem目录,找framedyn.dll,拷贝到system32目下。
我的这个framedyn.dll文件原来就有的,所以这种方法对我无效。。
第三种:
开始运行Cmd.exe进命令行
进入安装目录cd /Program Files/Microsoft SQL Server/90/Shared
输入 mofcomp "C:/Program Files/Microsoft SQL Server/90/Shared/sqlmgmproviderxpsp2up.mof"
具体的路径要看你SQL的安装路径了
执行结果大致如下
Microsoft (R) 32-bit MOF Compiler Version 5.1.2600.2180
Copyright (c) Microsoft Corp. 1997-2001. All rights reserved.
Parsing MOF file: C:/Program Files/Microsoft SQL Server/90/Shared/sqlmgmprovider
xpsp2up.mof
MOF file has been successfully parsed
Storing data in the repository.
$.ajax({ url:templateRoot+"user//getLogin", contentType: "application/json", type:"post", data:JSON.stringify({"name":name,"pwd":pwd}), dataType:"json", success:function(data){ } }); 必须加上contentType: "application/json"这句。
function make_coupon_card() { mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" $uuid = //chr(123)// "{" substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12); //.chr(125);// "}" return $uuid; }
时间冒泡: 如果元素a嵌套在b中,那么a被点击不仅a的onclick事件会被触发,b的onclick也会被触发,触发的顺序由内而外 <input type="button" value="click" οnclick="alert(event.srcElement.value)" />//获取哪个按钮被按下 <input type="button" value="你好" οnclick="alert(this.value)" /> 举例: <script type="text/javascript"> function btnClick(btn){ alert(btn.value);//如果果这是this.value在这就获取不了,要把this从外边传过来 } </script> <input type="button" value="click" οnclick="btnClick(this)" /> 而event.srcElement.value不受此限制 <script type="text/javascript"> function btnClick(){ alert(event.srcElement.value);//如果果这是this.value在这就获取不了,要把this从外边传过来 } </script> <input type="button" value="click" οnclick=" btnClick()" />
Connecting to localhost:2181 2016-09-09 15:29:06,788 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09: 09 GMT 2016-09-09 15:29:06,793 [myid:] - INFO [main:Environment@100] - Client environment:host.name=10.1.39.11 2016-09-09 15:29:06,794 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_92 2016-09-09 15:29:06,798 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2016-09-09 15:29:06,799 [myid:] - INFO [main:Environment@100] - Client environment:java.home=C:\Program Files\Java\jre1.8.0_92 2016-09-09 15:29:06,799 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=E:\work_new\wk_as\zookeeper-3.4.6\bin\.. \build\classes;E:\work_new\wk_as\zookeeper-3.4.6\bin\..\build\lib\*;E:\work_new\wk_as\zookeeper-3.4.6\bin\..\zookeeper-3.4.6.jar;E:\work_new \wk_as\zookeeper-3.4.6\bin\..\lib\jline-0.9.94.jar;E:\work_new\wk_as\zookeeper-3.4.6\bin\..\lib\log4j-1.2.16.jar;E:\work_new\wk_as\zookeeper -3.4.6\bin\..\lib\netty-3.7.0.Final.jar;E:\work_new\wk_as\zookeeper-3.4.6\bin\..\lib\slf4j-api-1.6.1.jar;E:\work_new\wk_as\zookeeper-3.4.6\b in\..\lib\slf4j-log4j12-1.6.1.jar;E:\work_new\wk_as\zookeeper-3.4.6\bin\..\conf 2016-09-09 15:29:06,800 [myid:] - INFO [main:Environment@100] - Client environment:java.
!/bin/bash http://www.runoob.com/linux/linux-command-manual.html # zip命令用于压缩文件 # 参数: # -A 调整可执行的自动解压缩文件。 # -b<工作目录> 指定暂时存放文件的目录。 # -c 替每个被压缩的文件加上注释。 # -d 从压缩文件内删除指定的文件。 # -D 压缩文件内不建立目录名称。 # -f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。 # -F 尝试修复已损坏的压缩文件。 # -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 # -h 在线帮助。 # -i<范本样式> 只压缩符合条件的文件。 # -j 只保存文件名称及其内容,而不存放任何目录名称。 # -J 删除压缩文件前面不必要的数据。 # -k 使用MS-DOS兼容格式的文件名称。 # -l 压缩文件时,把LF字符置换成LF+CR字符。 # -ll 压缩文件时,把LF+CR字符置换成LF字符。 # -L 显示版权信息。 # -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 # -n<字尾字符串> 不压缩具有特定字尾字符串的文件。 # -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 # -q 不显示指令执行过程。 # -r 递归处理,将指定目录下的所有文件和子目录一并处理。 # -S 包含系统和隐藏文件。 # -t<日期时间> 把压缩文件的日期设成指定的日期。 # -T 检查备份文件内的每个文件是否正确无误。 # -u 更换较新的文件到压缩文件内。 # -v 显示指令执行过程或显示版本信息。 # -V 保存VMS操作系统的文件属性。 # -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。 # -x<范本样式> 压缩时排除符合条件的文件。 # -X 不保存额外的文件属性。 # -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。 # -z 替压缩文件加上注释。 # -$ 保存第一个被压缩文件所在磁盘的卷册名称。 # -<压缩效率> 压缩效率是一个介于1-9的数值。 # 压缩文件(要压缩的文件:xaa、xab;压缩后的文件:tmp.
在上一篇中已经介绍如何搜索附近可连接的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(一)——搜索蓝牙设备 获取到设备后就可以开始处理蓝牙设备之间的连接。 在上一篇教程中我们将搜索到的蓝牙设备展示在列表中,现在我们为列表项增加上点击事件。 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (bTAdatper.isDiscovering()) { bTAdatper.cancelDiscovery(); } BluetoothDevice device = (BluetoothDevice) adapter.getItem(position); //连接设备 connectDevice(device); } }); 当我们点击了列表项后,如果蓝牙设备当前处于搜索状态,则取消搜索。获取到列表项相对应的蓝牙设备后调用连接方法。 /** * 连接蓝牙设备 */ private void connectDevice(BluetoothDevice device) { text_state.setText(getResources().getString(R.string.connecting)); try { //创建Socket BluetoothSocket socket = device.createRfcommSocketToServiceRecord(BT_UUID); //启动连接线程 connectThread = new ConnectThread(socket, true); connectThread.start(); } catch (IOException e) { e.printStackTrace(); } } 可以看到,在connectDevice()方法中,首先用一个TextView提示连接状态,然后用我们选择的设备调用createRfcommSocketToServiceRecord(UUID uuid)获取BluetoothSocket。最后开启一个线程去处理BluetoothSocket。 这里需要注意的是传入的UUID。UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符。我们在连接蓝牙设备的时候,必须确保两个设备的UUID是相同的。通常UUID是16字节128位长的数字,通常以36字节的字符串表示,示例如下: 3F2504E0-4F89-11D3-9A0C-0305E82C3301。 //如果是自动连接 则调用连接方法 if (activeConnect) { socket.
之前一直远程调试服务器。
Tomcat 40003端口
后来发现这个服务器的端口被关掉了。然后tomcat log 就在一直报Debugger failed to attach: handshake failed - connection prematurally closed。
所以解决版本基本上就是换个端口或者把远程调试关掉。
关掉的意思就是
#JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=40003,suspend=n,server=y"
如果你想知道像 git init , git checkout 等等的基本 Git 命令是如何在 JGit 上运行的话,请往下看。
本教程提供了最常用的 git 命令以及它们在 JGit 上对应部分的概述。本教程将依次介绍:创建一个存储库,从远程获取内容,向历史版本中添加和删除文件,检查历史操作,并最终将更改的文件推回到原始存储库。
JGit 提供了一个类似于 Git 高级命令的 API,你会在 JGit 里面的命令行用这个代码
git.commit().setMessage( "My first commit" ).call(); 代替
git commit -m "My first commit" 所有的 JGit 命令 有一个 call() 方法,在命令被建立之后用来实际执行它。这些类的命名是在各自的 Git 命令后加上后缀命令。虽然有些命令提供一个公共构造函数,还是建议使用 Git 的工厂类来创建命令,如在上面的示例中所示。
获取库 但是在更深入到 JGit API 之前,让我们先得到库。最常见的取得 JGit 的方法可能就是从 Maven 仓库中取。但是如果你更喜欢 OSGi 捆绑,也有 P2 仓库供你使用。 下载页面 上列出了整合该库的必要信息。
对于本文所涉及的范围来说,整合在 project/bundle 下的 org. Eclipse .jgit 核心库已经足够了。如果你对其他 JGit 的源代码库感兴趣, 我推荐阅读 JGit 资源介绍
gist可以无限制的创建私有的代码片段gist可以当作版本管理的工具在phpstorm下使用gist,只需要右键,然后gist提交就可以了。
gist的网址https://gist.github.com/+你的用户名在gist中可以写简介,更方便你查找自己的代码片段
在取一段github代码时,发现说是支持jdk 7 ,但是使用MAVEN编译不过去。
报错信息为错误: -source 1.6 中不支持 diamond 运算符
我使用的环境是1.7 + intellij idea
解决思路:
1.检查ide的默认编译环境 ,快捷键ctrl + alt +s
找Java Compiler ,发现设置是 Target bytencode version 是1.6 改成1.7 发现还是报错。
2.检查项目的SDK选择和项目语言level 都改成1.7 和7
发现还是报错
3.检查项目的 Modules 中的language level 改成 7 发现还是报错
4.检查maven的compile plugin 插件 由1.6改成1.7
成功。
造成此问题的原因在于:
private static MessageFactory<IsoMessage> txtfact = new MessageFactory<>(); 其实改成这个样子也是能够解决编译不够去的问题的。 private static MessageFactory<IsoMessage> txtfact = new MessageFactory<IsoMessage>(); 如果一开始导入项目时项目不报错,但是再maven compile编译的时候报错,就应该想到是maven的问题。
失误!
参考Link-time optimization for the kernel —— 2012
内核开发人员总是在寻找让系统运行更快的方法,在优化方面投入了大量的工作。所以当一个不需要重写关键性能相关的代码就可以让内核变得更快的机会出现时,很自然的,吸引了很多人的兴趣。新版本gcc支持的Link time optimizations LTO功能是不是这样的一个机会还有待验证,但是Andi Kleen决定去找出来。
LTO背后的理念是: 通过检查编译完单独文件后的整个程序,探索可能出现的任何优化机会。最重要的机会是小函数的inlining。编译器也可以更积极的检测和消除为使用的代码和数据。当源文件编译时,LTO将编译器中间表示(GIMPLE,与机器无关的中间表示)放入到目标文件中。实际LTO阶段加载所有的GIMPLE代码到一个单一核心的映像中,重写进一步优化的目标代码。 LTO功能最开始在GCC4.5上出现,但是在4.7上才变得可用。但是它仍然有一些限制,其中一个就是:所有涉及的对象文件都必须使用相同的命令行选项来编译。下面将讲到,这个限制对于kernel来说是一个问题。 Andi的LTO补丁包含了74个改动,不是一个小的改动,而且是侵入性的。但是大部分改动具有相同的基本范围:确保编译器知道特定的symbols(即使没有用到);所以LTO阶段将不会优化它们。举个例子来说,导出到模块的symbols可能没有任何的调用者,但是他们需要保留下来,应为可能有module后来加载进来。为此,Andi第一个补丁定义了一个新属性(__visible)用来标记这些symbols,大部分其他的补丁都是致力于将__visible属性加入到需要的地方。 此外,当使用LTO构建Kernel时还会出现一小部分的固定或特定问题。当长参数列表的函数在LTO阶段inlined的话,看可能会导致一些参数被破坏,为了阻止这种情况发生,将这些函数标记为noinline。Andi抱怨“我希望有一个通用的方式来做这件事,这就像一个定时炸弹问题”。他承认LTO可能会引入新的优化相关的bug,找到所有的这些bug是一个难题。 接着说所有文件需要使用相同的选项来编译的问题。当前kernel不是这样构建的,不同的部分使用不同的选项。一些地方,可禁用特定的优化,一些地方则禁用LTO。 使用新版本gcc是必要的,同时需要安装一个development版本的binutils。使用LTO,即使是一个小的kernel构建,也需要4GB的内存,allyesconfig更多,需要9GB。 实际上,大部分人不想用LTO。因为LTO可能会引入微妙的bugs、优化相关的误解,甚至LTO功能本身也可能存在问题,所以在使用LTO来构建产品的Kernel之前需要广泛的测试。 鉴于以上挑战,补丁包的尺寸和维护的负担,人们可能会怀疑,使用LTO是否值得。这就涉及到了加入LTO,kernel究竟会有多快? 现在还没有得到准确的数据,LTO补丁是新的,同时还有许多问题需要处理。Andi报告"hackbench" benchmark表明提升了5%,一些网络benchmarks提升了18%。这几个数字是粗糙的,但是足以鼓励进一步的工作,Andi也希望GCC提升LTO的实现。 Andi还建议,从长期来看,通过消除将inline函数放到include文件的需要,LTO可以帮助提升kernel代码的质量。 所有的这些都只是该补丁的早期开发阶段,不太可能merge到近期的kernel中,即使作为一个试验性的功能也不可能。长期来看,它可以让kernel更快。此外,kernel中使用LTO会帮驱动GCC实现,进一步所有项目都会受益。因此,值得关注此事。 总结:
1. LTO实验性太强,它不是完全可靠,缺少大量实验。 2. Patch只针对X86平台,且对编译器版本有一定的要求。 3. 主要目的是提升CPU速度,而不是删减尺寸。 4. 编译时间变长
对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用: each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理。jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话 说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对jQuery内 部的子元素进行逐个调用。
each函数根据参数的类型实现的效果不完全一致:
1、遍历对象(有附加参数)
代码如下: $.each(Object, function(p1, p2) { this; //这里的this指向每次遍历中Object的当前属性值 p1; p2; //访问附加参数 }, ['参数1', '参数2']); 2、遍历数组(有附件参数)
代码如下: $.each(Array, function(p1, p2){ this; //这里的this指向每次遍历中Array的当前元素 p1; p2; //访问附加参数 }, ['参数1', '参数2']); 3、遍历对象(没有附加参数)
代码如下: $.each(Object, function(name, value) { this; //this指向当前属性的值 name; //name表示Object当前属性的名称 value; //value表示Object当前属性的值 }); 4、遍历数组(没有附加参数)
代码如下: $.each(Array, function(i, value) { this; //this指向当前元素 i; //i表示Array当前下标 value; //value表示Array当前元素 }); 下面提一下jQuery的each方法的几种常用的用法
var arr = [ "one" , "two" , "three" , "
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
font: 8em '微软雅黑';
padding: 200px;
}
.zhi{
margin: 0.2em;
color: #369;
position: relative;
}
.zhi::before,.zhi::after{
content: attr(data-zhi);
position: absolute;
top: 0;
left: 0;
transform-origin: left top;
transition: all 0.3s;
}
.zhi::before{
color: #fff;
z-index: 3;
transform: rotateY(-15deg);
}
.zhi::after{
color: rgba(0,0,0,.2);
transform: scale(1.1,1);
z-index: 2;
}
.zhi:hover::before{
color: #fafafa;
transform: rotateY(-40deg) skewY(3deg);
}
将AS2.0升到2.1.3出现的问题:
Noservice of type Factory available in ProjectScopeServices
在项目中找到build.gradle这个文件,然后在dependencies中 将版本改为1.4.1即可 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
要锁定桌面,通常的做法是按下组合键Ctrl+Alt+Del,打开“Windows任务管理器”对话框,然后选择“关机”→“锁定计算机”,或者直接按组合键“Windows键+L”。可是习惯了使用鼠标操作的用户,会更希望在桌面上有一个能够锁定计算机的快捷方式,通过双击它而达到锁定计算机的目的。下面这种方法可以帮助我们建立这样一个快捷方式。 1、在桌面的空白处单击右键,然后选择“新建”→“快捷方式”。 2、在“创建快捷方式”对话框中输入“rundll32.exe user32.dll,LockWorkStation”,并单击“下一步”。 3、在“选择程序标题”对话框中输入快捷方式的名称“锁定桌面”,并单击“完成”按钮。 这样就在桌面上创建了一个名为“锁定桌面”的快捷方式,只要双击它,就可以实现桌面的锁定了。要解除锁定,只需输入您在Windows XP中的登录用户名和密码即可。
测试最基本的原理就是比较预期结果是否与实际执行结果相同,如果相同则测试成功,否则测试失败。 python 单元测试官方文档:
[Python: 2.7] (https://docs.python.org/2/library/unittest.html)
1.用import语句引入unittest模块
coding=utf-8 import json #导入json模块 import unittest #导入unittest模块 import os from nose.tools import * from tests import helper from youcart import create_app, db from youcart.models import ShipmentState, Shipment, ShipmentService #导入测试类ShipmentService模块 2.定义unittest.TestCase,让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合。
class ShipmentServiceTest(unittest.TestCase): 3.在setUp()方法中进行测试前的初始化工作(在每个测试用例前后做一些辅助工作),并在tearDown()方法中执行测试后的清除工作,setUp()和tearDown()都是TestCase类中定义的方法。
def setUp(self): self.app = create_app('testing') self.app_crx = self.app.app_context() self.app_crx.push() self.client = self.app.test_client() db.drop_all() db.create_all() user = generate_user(self.app) login(self, user.email, user.password) self.user = user from data import seeds seeds.all_(self.app) def tearDown(self): self.
电脑上的IntelliJ IDEA有段时间没用了,今天有朋友在相关文章 IntelliJ IDEA 运行你的第一个Java应用程序 中提出问题,我就打开IntelliJ IDEA看看,结果提示以下信息:
The environment variable JAVA_HOME(with the value of xxx) does not point to a valid JVM installation
如下图:
环境变量 JAVA_HOME 的值没有指向可用的JVM安装目录。
解决方法: 右键单击我的电脑》属性》高级系统设置》高级》环境变量
修改 JAVA_HOME 的值为正确的JDK目录
确定,确定 保存设置。
这时再打开 IntelliJ IDEA 一切正常了。
===========文档信息============ 版权声明:非商用自由转载-保持署名-注明出处 署名(BY) :testcs_dn(微wx笑) 文章出处:[无知人生,记录点滴](http://blog.csdn.net/testcs_dn)
1.ffmpeg切片命令,以H264和AAC的形式对视频进行输出
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8
2.ffmpeg转化成HLS时附带的指令 -hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
3.对ffmpeg切片指令的使用
ffmpeg -i output.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 output1.m3u8 将输出的 M3u8 可直接使用vlc打开,发现拖动的时候会出现画面丢失的现象,待解决。
文/zjcxq(简书作者) 原文链接:http://www.jianshu.com/p/e1395a896f36 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
解密HLS中的AES加密 时间 2016-02-26 13:47:44 Dola 原文 http://dola.xinfan.org/?p=549 主题 加密解密 如果m3u8文件中包含#EXT-X-KEY字段,那么可以断定这个HLS中的ts文件是被加密的,如:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:11 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="https://drm.fptplay.net/secure/vod_decrypt2?token=eyJoYXNoX3ZhbHVlIjogImRiMGM3YjExNmVkNjRhMmE4ZGQ0NTg4NWEwMDc1M2VkIiwgInZpZGVvX2lkIjogIjU1NzgyZTgzMTdkYzEzMjg2NzljZjJkMCIsICJzZXJ2ZXJfdGltZSI6IDE0NTYyMTc2ODUsICJ2YWxpZF9taW51dGVzIjogNzIwfQ" #EXTINF:10.0, media_0.ts?token=eyJoYXNoX3ZhbHVlIjogImRiMGM3YjExNmVkNjRhMmE4ZGQ0NTg4NWEwMDc1M2VkIiwgInZpZGVvX2lkIjogIjU1NzgyZTgzMTdkYzEzMjg2NzljZjJkMCIsICJzZXJ2ZXJfdGltZSI6IDE0NTYyMTc2ODUsICJ2YWxpZF9taW51dGVzIjogNzIwfQ #EXTINF:10.0, media_1.ts?token=eyJoYXNoX3ZhbHVlIjogImRiMGM3YjExNmVkNjRhMmE4ZGQ0NTg4NWEwMDc1M2VkIiwgInZpZGVvX2lkIjogIjU1NzgyZTgzMTdkYzEzMjg2NzljZjJkMCIsICJzZXJ2ZXJfdGltZSI6IDE0NTYyMTc2ODUsICJ2YWxpZF9taW51dGVzIjogNzIwfQ 每个HLS文件都被使用AES-128方法加密,而解密的key文件可以通过URI指定的方式获得。
解密步骤如下:
1. 获取key文件,在HLS文件中找到#EXT-X-KEY,有一个uri,下载下来是16个字节的密钥
$ strkey=$(hexdump -v -e '16/1 "%02x"' key) 2. 下载ts文件,针对每个ts文件(media_0.ts),从0开始按顺序编号(变量index)3. 将编号格式化成32字节长的字符串作为iv $ iv=$(printf '%032x' $index) 4. 解密ts文件:
$ openssl aes-128-cbc -d -in media_0.ts -out media_decryptd_0.ts -nosalt -iv $iv -K $strkey 另外,通过FFmpeg接收该HLS,则会自动完成解密操作。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.SpringBootJdbcDemoApplication.SpringBootJdbcDemoApplication': Unsatisfied dependency expressed through field 'userRepository': No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.
Linux文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。linux文件的删除方式是用rm 命令。 Linux文件类型; Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。
Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;现在我们进行一个简要的说明;
1 普通文件 [root@localhost ~]# ls -lh install.log -rw-r--r-- 1 root root 53K 03-16 08:54 install.log 我 们用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。这类文件的删除方式是用rm 命令;
2 目录 [root@localhost ~]# ls -lh 总计 14M -rw-r--r-- 1 root root 2 03-27 02:00 fonts.scale -rw-r--r-- 1 root root 53K 03-16 08:54 install.log -rw-r--r-- 1 root root 14M 03-16 07:53 kernel-6.15-1.2025_FC5.i686.rpm drwxr-xr-x 2 1000 users 4.
cocos2dx lua已经集成了对lua脚本的加解密,见AppDelegate.cpp LuaStack* stack = engine->getLuaStack(); stack->setXXTEAKeyAndSign("123", strlen("123"), "cloud", strlen("cloud")); 复制代码 它是通过XXTEA来加解密的。参数,key,keyLen,signment,signmentLen。它的签名作用可能是用来判断文件是否经过加密的。 好,我们来对文件加密。打开cocos2d-x\external\xxtea文件夹,调用相关函数xxtea_encrypt进行加密,最后在文件开始位置,写上签名就可以了。我把相关操作封装成一个python文件。可以直接调用。 import xxteaModule import os def ReadFile(filePath): file_object = open(filePath,'rb') all_the_text = file_object.read() file_object.close() return all_the_text def WriteFile(filePath,all_the_text): file_object = open(filePath,'wb') file_object.write(all_the_text) file_object.close() def BakFile(filePath,all_the_text): file_bak = filePath[:len(filePath)-3] + 'bak' WriteFile(file_bak,all_the_text) def ListLua(path): fileList = [] for root,dirs,files in os.walk(path): for eachfiles in files: if eachfiles[-4:] == '.lua' : fileList.append(root + '/' + eachfiles) return fileList def EncodeWithXxteaModule(filePath,key,signment): all_the_text = ReadFile(filePath) if all_the_text[:len(signment)] == signment : return #bak lua BakFile(filePath,all_the_text) encrypt = xxteaModule.
看起来很简单的东西,实践过程中还是出现了很多麻烦,比如上拉时,状态条跑到了顶部,因为内容没有添加到容器中,再比如下拉的回调函数使用问题,this的传递。
在这里只做记录了,代码是简单分离出来的,不能说明太多问题。有使用mui的,可以留言交流
html实现部分
<div class="list-t-wrap"> <div id="refreshContainer" class="mui-scroll-wrapper"> <div class="mui-scroll"> <div class="list-wrapper"> <!--列表一定要放到容器内,因为会有一个div append到mui-scroll中,需要在底部才能起作用--> </div> </div> </div> </div> js代码的实现过程
mui.init({ pullRefresh : { container:"#refreshContainer",//待刷新区域标识,querySelector能定位的css选择器均可,比如:id、.class等 up : { height:50,// 可选.默认50.触发上拉加载拖动距离 auto:false,// 可选,默认false.自动上拉加载一次 contentrefresh : "正在加载...",// 可选,正在加载状态时,上拉加载控件上显示的标题内容 contentnomore:'没有更多数据了',// 可选,请求完毕若没有更多数据时显示的提醒内容; callback : function() { var self = this; // 这里的this == mui('#refreshContainer').pullRefresh() // 加载更多的内容 loadMore(this); } //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据; } } }); // var loadMore = function(pullRefresh) { // 加载更多的内容到列表中 // TODO // 如果没有更多数据了,则关闭上拉加载 pullRefresh.
(1)查看操作系统的类型。
getconf_LONG_BIT 返回为64 说明操作系统为64位。
(2)在官网下载需要的版本的jdk,最新版本为jdk1.7.0.79
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
(3)在/usr/local/下建java文件夹,上次jdk文件到java下输入如下命令
rpm -ivh jdk-7u79-linux-x64.rpm --prefix=/u/opt/ /u/install #chmod 755 /etc/profile /u/install # vi /etc/profile vi编辑信息如下: 按ESC键,退出vi:
:wq! (4)shutdown -r now 立刻重启(root用户使用) (5)查看安装结果。
zookeeper 常用命令 创建结点 语法: create [-s] [-e] path data acl
默认创建是持久化创建, zookeeper根节点是/ 类似linux文件系统
path : 代表创建结点的路径data : 结点的内容-s : 顺序创建-e : 临时结点 获取结点列表 ls 是列举结点下所有的子节点.
语法: ls path [watch]
获取结点内容 get 命令: 可以获取zookeeper指定结点的内容和属性结点
语法: get path [watch]
修改结点内容 set 命令: 修改指定结点的内容
set path 删除结点 delete命令: 删除没有没有子节点的结点,如果结点含有子节点则删除失败 Node not empty
语法: delete path [version]
关于编写HIVE的UDF,有两个不同的接口可以实现。一个非常简单,另一个则并不容易。
只要你的函数能够读取原始类型数据并返回原始类型数据就能使用简单的API(org.apache.hadoop.hive.ql.exec.UDF),这个原始类型数据是指Hadoop和Hive的可写类型-Text, IntWritable, LongWritable, DoubleWritable等。
无论如何,如果你打算编写一个UDF能够操作嵌入式的数据结构,比如Map,List,Set,那么你应该使用org.apache.hadoop.hive.ql.udf.generic.GenericUDF,这个更加复杂一些。
简单的API - org.apache.hadoop.hive.ql.exec.UDF复杂的API - org.apache.hadoop.hive.ql.udf.generic.GenericUDF 接下来我要用上述的两个接口编写一个UDF的例子,我将会提供编写过程中用到的代码和测试数据。 #简单的API 编写一个继承简单的api的UDF只比编写一个只有一个函数的类复杂一点,下面是一个例子: <span style="font-family:Microsoft YaHei;font-size:14px;">class SimpleUDFExample extends UDF { public Text evaluate(Text input) { return new Text("Hello " + input.toString()); } }</span> 完整的代码:https://github.com/rathboma/hive-extension-examples #测试简单的UDF 由于这个UDF只有简单的一个函数,所以你能够使用测试工具测试它,比如Junit. public class SimpleUDFExampleTest { @Test public void testUDF() { SimpleUDFExample example = new SimpleUDFExample(); Assert.assertEquals("Hello world", example.evaluate(new Text("world")).toString()); } } #也要在hive下进行测试 你应该在hive上直接测试这个UDF,特别是当你不确定这个是否能够处理正确的类型的 %> mvn assembly:single %> hive hive> ADD JAR target/hive-extensions-1.0-SNAPSHOT-jar-with-dependencies.jar; hive> CREATE TEMPORARY FUNCTION helloworld as 'com.
module capt( clk, rst_n, //disabled, catin, PonTemp, Poff_reg ); input clk,rst_n,catin; output PonTemp,Poff_reg; //reg[16:0] value; //output [7:0] segdata; //output [2:0] segcs; //reg [16:0] PonTemp;//PoffTemp;//char:256 max,data temp //reg [15:0] Pon,Poff; //首先对脉冲输入进行同步处理 reg syn1; reg syn2; always @ (posedge clk) begin syn1 <= catin; syn2 <= syn1; end wire catin_pos; //获得输入脉冲的上升沿 assign catin_pos = syn1 & (~syn2); //计算高低电平宽度 reg [16:0] Pon_reg,PonTemp,Poff_reg; wire reset = (~rst_n); always @ (posedge reset or posedge clk) begin if(reset) begin Pon_reg <= 16'd0; Poff_reg <= 16'd0; //Pon <= 16'd0; //Poff <= 16'd0; end else if(catin_pos) begin //Pon <= Pon_reg; //Poff <= Poff_reg; if(Pon_reg !
LinkedList:贪吃蛇 新手,这几天刚学到集合,用LinkedList写了一个很low的贪吃蛇小游戏(只能在控制台 一帧一帧的跳),纪念一下学习的过程.但是还是用到了一些关于集合的知识,可以参考下.希望大家多多指点让我这个新手慢慢成长^_^. snake 类 package com.lsm.program.snakemodel;
import java.util.LinkedList; import java.util.Queue;
import org.junit.Test;
/** * 描述一条蛇 * * @author lsm * @create time 2016年8月5日 下午5:13:58 */ public class Snake { private LinkedList snake = new LinkedList<>();
public LinkedList<Node> getSnake() { return snake; } public void setSnake(LinkedList<Node> snake) { this.snake = snake; } public Snake() { super(); } public Snake(LinkedList<Node> snake) { super(); this.snake = snake; } // 蛇进一步 public boolean step(int dir, SnakePanel dd) { //判断是否已经吃完所有的豆子 if(dd.
之前ftp上传文件完全没问题,后来突然变得不能上传了,删除了整个工程重新导入都不行,后来发现原来是防火墙的原因。关闭防火墙之后,上传就成功了。有点蛋疼。那么问题就来了,防火墙开着的时候怎么去设置才可以上传了。 一下是百度到的原因跟方法: 2003 server用于提供web和ftp服务,通过互联网用flashfxp实现远程上传网页。如果关闭防火墙,ftp上传下载正常,但启用windows防火墙后就不行,即使把web、ftp等服务列为例外也不行。究其原因,flashfxp工作时实际还要用1024以上的tcp端口,而且对端口的指定是要变的。请有类似经验的朋友指点一下,这种情况下如何在开启windows防火墙时保证flashfxp能正常上传下载?只知道ftp使用20、21端口的就请免开尊口了。 解决办法: 1.开启windows防火墙; 2.在防火墙设置的“例外”中把IIS的核心程序c:\windows\system32\inetsrv\inetinfo.exe加入; 3.在防火墙设置的“高级-本地连接-设置”中把FTP的勾选取消。 大功告成。
思路非常简单:<p>创建window,设置窗口大小,创建label1,导入图片,创建label2,导入文字,show,结束!</p>
import sys from PyQt5 import QtWidgets,QtGui #定义窗口函数window def window(): #我事实上不太明白干嘛要这一句话,只是pyqt窗口的建立都必须调用QApplication方法 app=QtWidgets.QApplication(sys.argv) #新建一个窗口,名字叫做w w=QtWidgets.QWidget() #定义w的大小 w.setGeometry(100,100,300,200) #给w一个Title w.setWindowTitle('lesson 2') #在窗口w中,新建一个lable,名字叫做l1 l1=QtWidgets.QLabel(w) #调用QtGui.QPixmap方法,打开一个图片,存放在变量png中 png=QtGui.QPixmap('/home/capture/Pictures/Selection_026.png') # 在l1里面,调用setPixmap命令,建立一个图像存放框,并将之前的图像png存放在这个框框里。 l1.setPixmap(png) #在窗口w中,新建另一个label,名字叫做l2 l2=QtWidgets.QLabel(w) #用open方法打开一个文本文件,并且调用read命令,将其内容读入到file_text中 file=open('/home/capture/eric6_test/auto_k2_all/test1.log') file_text=file.read() #调用setText命令,在l2中显示刚才的内容 l2.setText(file_text) #调整l1和l2的位置 l1.move(100,20) l2.move(140,120) #显示整个窗口 w.show() #退出整个app app.exit(app.exec_()) #调用window这个函数 window() 不过,这样写的目的是什么,弄一个函数,来生成一个图像,没有参数可以输入?还不如不用函数呢。所以,我改了一下。
import sys from PyQt5 import QtWidgets,QtGui #定义窗口函数window def window(png,file_text): #新建一个窗口,名字叫做w w=QtWidgets.QWidget() #定义w的大小 w.setGeometry(100,100,300,200) #给w一个Title w.setWindowTitle('lesson 2') #在窗口w中,新建一个lable,名字叫做l1 l1=QtWidgets.QLabel(w) #调用QtGui.QPixmap方法,打开一个图片,存放在变量png中 # 在l1里面,调用setPixmap命令,建立一个图像存放框,并将之前的图像png存放在这个框框里。 l1.setPixmap(png) #在窗口w中,新建另一个label,名字叫做l2 l2=QtWidgets.QLabel(w) #用open方法打开一个文本文件,并且调用read命令,将其内容读入到file_text中 #调用setText命令,在l2中显示刚才的内容 l2.
清空数组的三种方式:
1、splice(0,数组的长度);
var arr1 = arr.splice(0,arr.length);
console.log(arr1);
2、让数组的长度为0;
这种方式很有意思,其它语言如Java,其数组的length是只读的,不能被赋值。如
int[] ary = {1,2,3,4}; ary.length = 0; Java中会报错,编译通不过。而JS中则可以,且将数组清空了;
(在JS中length的属性是可读可写的,也就是可以给length属性赋值)
console.log(arr.length);
arr.length=0;
console.log(arr);
3、让数组为空;
var arr = [12,23,"a",undefined,null,90];
arr = [];
conlose.log(arr);
这里其实并不能说是严格意义的清空数组,只是将ary重新赋值为空数组,之前的数组如果没有引用在指向它将等待垃圾回收。
第2种方式保留了数组其它属性,第3种则未保留。很多人认为方式2的效率很高些,因为仅仅是给length重新赋值了,而方式3则重新建立个对象。经测试恰恰是方式3的效率高。测试代码如下:
var a = []; for (var i=0; i< 1000000; i++){ a.push(i); } var start = new Date(); //a = []; a.length = 0; var end = new Date(); alert(end - start); 以上结果可看到:第3种更快,效率更高。因此如果不保留原数组的其它属性Ext采用的方式更值得推荐。
转载于:https://www.cnblogs.com/Ma-lulu/p/5731251.html
我们在学习js中遍历数组的有两种方式
代码:
var array=['a']
//标准的for循环
for(var i=1;i<array.length;i++){
alert(array[i])
}
//foreach循环
for(var i in array){
alert(array[i])
}
正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一个区别
标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。自己试试 alert(typeof i);这个区别是小问题。现在我加上如下代码,上面的执行结果就不一样了。
代码
//扩展了js原生的Array
Array.prototype.test=function()
}
我们发现标准的for循环任然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。这就是for与foreach遍历数组的最大区别,如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。
建议
1.不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array)
2.如果要对js的原生类扩展的时候,不要采用prototype了
转载于:https://www.cnblogs.com/Ma-lulu/p/5724376.html
学习Web前端中的JavaScript总结以下必会的知识点:
1. js的基本数据类型
Undefined、Null、Boolean、Number、String
2. js有哪些内置对象?
数据封装类对象:Object、Array、Boolean、Number 和 String
其他对象:Function、Arguments、Math、Date、RegExp、Error
3. this对象的理解
this总是指向函数的直接调用者(而非间接调用者);
如果有new关键字,this指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。
4. eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')。
5. DOM怎样添加、移除、移动、复制、创建和查找节点
// 创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
// 添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
// 查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() //通过元素Id,唯一性
6. null和undefined的区别?
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
undefined:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
7. new操作符具体干了什么呢?
(1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
(2)属性和方法被加入到 this 引用的对象中。
概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。常用的语言基本上都有正则表达式,如JavaScript、java等。其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些。文本主要围绕解决下面问题展开。
有哪些常用的转义字符什么是限定符与定位符什么是单词定位符特殊字符有哪些什么是逆向引用以及怎样使用逆向引用匹配模式php中怎样使用正则表达式php中哪些方面需要用到正则怎样进行邮箱匹配,url匹配,手机匹配怎样使用正则替换字符串中某些字符贪婪匹配与惰性匹配区别正则表达式之回溯与固态分组正则优缺点有哪些 正则表达式的基本知识汇总 行定位符(^与$) 行定位符是用来描述字符串的边界。“$”表示行结尾“^”表示行开始如"^de",表示以de开头的字符串 "de$",表示以de结尾的字符串。
单词定界符 我们在查找的一个单词的时候,如an是否在一个字符串”gril and body”中存在,很明显如果匹配的话,an肯定是可以匹配字符串“gril and body”匹配到,怎样才能让其匹配单词,而不是单词的一部分呢?这时候,我们可以是哟个单词定界符\b。 \ban\b 去匹配”gril and body”的话,就会提示匹配不到。 当然还有一个大写的\B,它的意思,和\b正好相反,它匹配的字符串不能使一个完整的单词,而是其他单词或字符串中的一部分。如\Ban\B。
选择字符(|) ,表示或 选择字符表示或的意思。如Aa|aA,表示Aa或者是aA的意思。注意使用”[]”与”|”的区别,在于”[]”只能匹配单个字符,而”|”可以匹配任意长度的字符串。在使用”[]”的时候,往往配合连接字符”-“一起使用,如[a-d],代表a或b或c或d。
排除字符,排除操作 正则表达式提供了”^”来表示排除不符合的字符,^一般放在[]中。如[^1-5],该字符不是1~5之间的数字。
限定符(?*+{n,m}) 限定符主要是用来限定每个字符串出现的次数。
限定字符含义?零次或一次*零次或多次+一次或多次{n}n次{n,}至少n次{n,m}n到m次 如(D+)表示一个或多个D
点号操作符 匹配任意一个字符(不包含换行符)
表达式中的反斜杠(\) 表达式中的反斜杠有多重意义,如转义、指定预定义的字符集、定义断言、显示不打印的字符。
转义字符 转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”,”?”、”\”等。
指定预定义的字符集 字符含义\d任意一个十进制数字[0-9]\D任意一个非十进制数字\s任意一个空白字符(空格、换行符、换页符、回车符、字表符)\S任意一个非空白字符\w任意一个单词字符\W任意个非单词字符 ###显示不可打印的字符
字符含义\a报警\b退格\f换页\n换行\r回车\t字表符 括号字符() 在正则表达式中小括号的作用主要有:
改变限定符如(|、* 、^)的作用范围 如(my|your)baby,如果没有”()”,|将匹配的是要么是my,要么是yourbaby,有了小括号,匹配的就是mybaby或yourbaby。进行分组,便于反向引用 反向引用 反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。在下面php应用中,我将详细展开学习反向引用。
模式修饰符 模式修饰符的作用是设定模式,也就是正则表达式如何解释。php中主要模式如下表:
修饰符说明i忽略大小写m多文本模式s单行文本模式x忽略空白字符 正则表达式在php中应用 php中字符串匹配 所谓的字符串匹配,言外之意就是判断一个字符串中,是否包含或是等于另一个字符串。如果不使用正则,我们可以使用php中提供了很多方法进行这样的判断。
不使用正则匹配 strstr函数 string strstr ( string haystack,mixedneedle [, bool $before_needle = false ]) 注1:haystack是当事字符串,needle是被查找的字符串。该函数区分大小写。注2:返回值是从needle开始到最后。注3:关于$needle,如果不是字符串,被当作整形来作为字符的序号来使用。注4:before_needle若为true,则返回前东西。stristr函数与strstr函数相同,只是它不区分大小写strpo函数 int strpos ( string haystack,mixedneedle [, int $offset = 0 ] ) 注1:可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的起始位置而言的。stripos -查找字符串首次出现的位置(不区分大小定)strrpos -计算指定字符串在目标字符串中最后一次出现的位置strripos -计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写) 使用正则进行匹配 在php中,提供了preg_math()和preg_match_all函数进行正则匹配。关于这两个函数原型如下:
sql的安装网上教程很多,这里主要讲卸载以及安装与卸载及删除过程中常见注册表的问题
SQL Server的卸载:
(一)卸载SQL程序,用360或者电脑管家或在控制面板里找,利用 Windows Install Clean Up软件 (二) 手工删除安装目录,默认情况下位于: C:\Program Files\Microsoft SQL Server C:\Program Files (x86)\Microsoft SQL Server C:\Users\Administrator\请仔细查找……
C:\WINDOWS\inf \ MSSQLServer 下所用文件(我是在该文件夹下搜索“sqlserver”,然后删除所有结果文件)
(三)删除注册表 (1) 删除以下注册表子项: HKEY_LOCAL_ MACHINE \ SOFTWARE \ Microsoft \MSSQLServer HKEY_LOCAL_ MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search //卸载Microsoft Search 服务 (2) 卸载Microsoft 全文查询,还需要删除: HKEY_LOCAL_ MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MSSQLServer HKEY_LOCAL_ MACHINE \ SYSTEM \ CurrentControlSet \Services\ MSSQLServerADHelper HKEY_LOCAL_ MACHINE \ SYSTEM \ CurrentControlSet \Services\ MSSQLServerOLAPService HKEY_LOCAL_ MACHINE \ SYSTEM \ CurrentControlSet \Services\MSFTPSVC HKEY_LOCAL_ MACHINE \ SYSTEM\ CurrentControlSet \Services\MSSCNTRS HKEY_LOCAL_ MACHINE \ SYSTEM \ CurrentControlSet \Services\MSSEARCH HKEY_LOCAL_ MACHINE \ SYSTEM \CurrentControlSet\Services\MSSGATHERVER HKEY_LOCAL_ MACHINE \ SYSTEM \CurrentControlSet\Services\MSSGTHRSVC HKEY_LOCAL_ MACHINE \ SYSTEM \CurrentControlSet\Services\MSSINDEX HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVER AGENT
一、---使用方式--- (1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
(3)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。
如下是Hashtable 的简单使用方式:在遍历时使用是三种遍历方式来对其进行遍历
package ThreeWeek; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class HashTableTest { public static void main(String args[]){ Hashtable<String, Integer> table = new Hashtable<String, Integer>(); //[1]添加元素 table.put("zhangsan", 22); table.put("lisi", 33); table.put("wangwu", 44); //[2]toString()方式打印 System.out.println(table.toString()); //[3]Iterator遍历方式1--键值对遍历entrySet() Iterator<Entry<String, Integer>> iter = table.entrySet().iterator(); while(iter.hasNext()){ Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>)iter.next(); String key = entry.getKey(); int value = entry.getValue(); System.out.println("entrySet:"+key+" "+value); } System.
编写了一个最简单的server/client聊天工具练练手:
server.c 的作用是接受client的请求,并与client进行简单的数据通信,整体为一个阻塞式的网络聊天工具。
server.c: #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> const short port = 8080; char *ip = "127.0.0.1"; void *pthread_run(void *arg) { int fd = (int)arg; char buf[1024]; memset(buf, '\0', sizeof(buf)); while (1) { ssize_t sz = read(fd, buf, sizeof(buf) - 1); if (sz < 0) { perror("read"); break; } else if (0 == sz) { printf("read done...\n"); break; } else { buf[sz - 1] = '\0'; printf("
题目描述 一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1-N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入 输入在一行中给一个正整数N(<=1000)。
输出 在一行中输出当选猴王的编号。
样例输入 11 样例输出 7
AC代码如下:
#include "iostream" using namespace std; int main(int argc, char* argv[]) { int count=0,num,i; int a[1010],n; cin>>n; num=n;//记录未退出的猴子数 for (i=1;i<=n;i++) { a[i]=1;//每个猴子标记为1,表示该猴子未退出 } while(num!=1)//当只有一猴子时,退出循环 { for (i=1;i<=n;i++) { if (a[i]==1) { count++; } if (count==3) { a[i]=0; // num--; //退出一只猴子 count=0; } } } for (i=1;i<=n;i++) { if (a[i]==1)//输出最后剩下的那只猴子,猴王 { cout<<i<<endl; break; } } return 0; } 链表实现: #include <iostream> #include <stdio.
redis的文档写的还是比较详细的,中文版: http://doc.redisfans.com/ 英文版:http://redis.io/commands。这篇文章主要是自己亲自实践一下redis的基本操作,做个备忘,加深印象。
ZADD key score member [[score member] [score member] ...] 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
score 值可以是整数值或双精度浮点数。
如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
当 key 存在但不是有序集类型时,返回一个错误。
返回值:
被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
例子:
# 添加单个元素 redis> ZADD page_rank 10 google.com (integer) 1 # 添加多个元素 redis> ZADD page_rank 9 baidu.com 8 bing.com (integer) 2 redis> ZRANGE page_rank 0 -1 WITHSCORES 1) "
前期拍摄 前期拍摄时应尽量保证画面平稳,注意对准选定的参考点以及检查电子水平仪保持水平(过大的抖动后期只能手动去抖,而且效果没有保证)。
后期流程 首先参考《延时去闪大致流程》(链接:http://blog.csdn.net/lczdk/article/details/51755457),对画面进行去闪处理。
去闪完成后通过lr导出为JPG格式图片,并使用pr将图片导入为jpg序列
使用导入的jpg序列新建一个视频序列,并套用pr自带的 变形稳定器(视频效果>扭曲>变形稳定器) 效果进行自动去闪。设置如下图: 其中红圈两项按实际情况决定大小(前期画面抖动大就调大点数值)。
如果前期抖动比较厉害的话,自动去抖动后画面可能还会有部分抖动,这是进行手动除抖
用ps做一个如图的背景透明的参考线: 将参考线至于视频序列上方并对齐视频中的水平或垂直的线(最好是经过前期参考点的线条,这样防止线条位移带来的不便)
将抖动的小序列片段或单帧画面用剃刀工具剪出,对照参考线进行画面调整(一般是位移或旋转画面)
最后裁剪去画面边缘的无图像部分,处理成想要的分辨率导出即可。
ps.前期还是要尽量保持画面稳定啊啊啊啊啊,后期手动除抖又费时间而且效果还没保证的说!!!
之前自己买了一台阿里云的服务器,一直没时间配置,这几天老大看要项目演示,没办法,这个服务器必须要配起来了。
这里先说下我要的环境是什么吧。JDK6 + Tomcat 6 + MySQL。对的,是比较老的一些版本了。但是这有什么关系了,能跑通代码我就很开心了。
JDK 6 首先说下JDK 6 吧,这个直接从官网上下载,我的是window 64 位。选择自己系统的就行了。然后就是一顿安装。安装完后关键来了。注意下要配置环境。
我这边就直接是百度经验的配置环境。其实配置环境就那个几步骤,直接贴上链接,我也不去粘贴复制了。http://jingyan.baidu.com/album/6dad5075d1dc40a123e36ea3.html?picindex=1
Tomcat 6 1.解压tomcat:tomcat 6 我是直接用的解压版的。直接解压文件就行了。jdk必须保证已经先安装好了。然后点击bin下的startup.bat就是开启tomcat服务。
2.防止tomcat启动闪退措施:
修改startup.bat文件:
在第一行前面加入如下两行--
SET JAVA_HOME=D:\Program Files\Java\jdk1.6.0_14(JDK目录)
SET CATALINA_HOME=D:\Program Files\tomcat(解压后Tomcat的目录)
3.进入tomcat主页:打开浏览器的http://localhost:8080。如果显示成功就说明tomcat安装好了。
4.配置端口号:我们每次在浏览器中访问的时候都需要输入8080端口,现在要修改下配置端口为80,这时候我们就不需要在访问的时候输入端口了。直接输入地址就是默认的访问80端口了。打开%CATALANA_HOME%\conf\server.xml文件:
http默认端口号为80,也就是说在URL中不给出端口号时就表示使用80端口。当然你也可以修改为其它端口号。当把端口号修改为80后,在浏览器中只需要输入:http://localhost就可以访问Tomcat主页了。
5.项目文件设置:Tomcat设置默认启动项目,顾名思义,就是让可以在浏览器的地址栏中输入ip,就能访问到我们的项目。具体操作如下:
打开tomcat的安装根目录,找到Tomcat 6.0\conf\server.xml,打开该文件,找到<Host>节点,在该节点中添加<Context path="" docBase="../WebTest" debug="0" reloadable="true"/>。
再将WebTest工程放到tomcat根目录下,并将webapps文件夹中的ROOT文件夹删除或者重命名为另外一个名字。
启动tomcat,在浏览器中输入ip,就可以访问到你的项目了。
注意:<Context>节点中的docBase属性的值是指向web工程的绝对路径。
这样子tomcat部分就配置完毕了。
MySQL
最后就是配置mysql了。在这上面我可吃了不少的坑。。。
一、安装mysql。我选的还是解压版的。直接解压。然后在mysql-5.6.21-win32目录下有一个my-default.ini文件(可能版本不同有的人没有,但是不重要)。把他改为my.ini。就是最后我们只要确保文件夹下有一个my.ini就可以了。my.ini打开它里面有一个重要的东西配置(我的mysql安装在F:\SQL\mysql-5.6.21-win32\mysql-5.6.21-win32路径下):
就是basedir和datadir要记得配置。然后在电脑环境Path后面添加“mysql安装路径\bin;"
二、配置完后要安装mysql服务和启动mysql服务。打开cmd,进入到mysql目录\bin目录下,然后输入一下指令:
mysqld -install安装mysql服务
net start mysql启动mysql服务
这个时候如果报错,
第一种可能就是你的my.ini书写错误。
第二种就是就是你可以把my.ini移动到C:WINDOWS目录下。
第三种就是你只能卸载重装一遍(我就是这种情况),重装mysql之前要记得删除这几个东西【
1.mysql的目录 2.刚刚移动到WINDOWS下的my.ini文件
3.mysql的注册表(开始->运行-> regedit 看看注册表里这几个地方删除没有 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录删除)】
然后在重复上面的一、二步骤。还是重启。请重启。重启有惊喜。
本文作者:小雷FansUnion-一个有创业和投资经验的资深程序员-全球最大中文IT社区CSDN知名博主-排名第119 实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。 听说Swagger这个工具,还不错,就网上找了些资料,自己实践了下。 一:Swagger介绍
Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目
实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,
同时swagger-ui还可以测试spring restful风格的接口功能。
官方网站为:http://swagger.io/
中文网站:http://www.sosoapi.com 二:Swagger与Spring MVC集成步骤 1.Maven关键配置 <dependency> <groupId>com.mangofactory</groupId> <artifactId>swagger-springmvc</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> 2. 插件配置 CustomJavaPluginConfig 3.复制swagger的相关js等静态资源到webapp目录。 swagger-ui.js之类的。 我copy过一次,但是有问题,最后从网上下载了一个项目,可以直接用的那种。 然后自己再逐步改造。 4.启动项目 http://localhost:8080/ 三、常见swagger注解一览与使用 最常用的5个注解 @Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
其它若干
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiClass
@ApiError
@ApiErrors
@ApiParamImplicit
@ApiParamsImplicit
四、关键代码和实际例子 例子1: @ApiOperation(value = "获得用户列表", notes = "列表信息", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody @RequestMapping(value = "list", method = RequestMethod.
写了7,8年的c++的代码,第一次在三木运算符上遇到坑。
pstrValue = ProbeBind(pstrValue) ? ParseBind(pstrValue) : pstrValue; ParseBind 返回值的类型与pstrValue是不一样的类型的,结果发现在运算的时候,不管ProbeBind函数返回true或者false,pstrValue会被隐私转换到ParseBind的返回值类型上,于是就会有临时对象产生出现了bug。
通过这种方式解决以下问题:
pstrValue = ProbeBind(pstrValue) ? decltype(pstrValue)(ParseBind(pstrValue)) : pstrValue;
轻松搞定下载MyDownloadManager 序言: 软件更新想必大家都用过,很多是用友盟的下载,但是也有自己公司服务器下载的处理方式,本文主要讲解的是自己下载的处理方法 想必大家就会说,这还用自己做呀,系统自带的一行代码不就解决了-------DownloadManager,如果你还在用这个下载,那你就太年轻了,不是说这个方法不好,而是在中国这样的大环境下********你懂的,三星note系列部分手机需要手动打开这个权限才能用这个功能(确定不是逗我????),而有些国产手机更加nb了直接个阉割了(nm) 好吧,既然这样还是规规矩矩的自己写吧,同样的需求我标示ios分分钟搞定,咱们这边无数的坑呀,废话到处结束!咱们看如何自己写一个DownloadManager!先上效果 流程: 正常的逻辑我们需要先通过服务器判断是否需要更新软件,然后如果需要则返回一个url下载链接,下载安装更新 实现: 1.获取更新的url然后启动服务后台下载 2.后台服务器中启动下载和通知 下载使用的是xutils,大家可以自己替换你自己喜欢的下载框架(自己写也是可以的!!!) 3.在onlading中更新通知栏更新就行了!下载完成或者错误以后停止后台服务然后关闭通知栏通知信息
4.安装apk 最后啰嗦几句关于布局文件中的progressbar自定义背景(如果是处女座请详细学习这些属性的差别吧!) 第一种: 第二种: 第一种的实现方式是优化的实现: 第二种: 5.需要注意的细节: 启动服务的时候千万别用action的方式去启动,部分手机无法启动(Galaxy A8亲测不好用呀)憋忘记添加网络权限和本地文件读写权限记得关闭服务 6.更多细节大家看源码吧,不啰嗦了都挺忙的:戳我*************************
日期格式(年,月,日)转化为数字
>> n = datenum(2001,12,19) n = 731204 反过来,数字如何转化为日期格式呢?
>> datestr(731204,'yyyy-mm-dd') ans = 2001-12-19