完美

[学习|工作|博客|交流平台|完美起航]

作者头像congming2017.06.09 17:27 

git的使用笔记

git的使用:usage:git[--version][--help][-C<path>][-cname=value] [--exec-path[=<path>]][--html-path][--man-path][--info-path] [-p|--paginate|--no-pager][--no-replace-objects][--bare] [--git-dir=<path>][--work-tree=<path>][--namespace=<name>] <command>[<args>] availablegitcommandsin'/usr/libexec/git-core' addcheckoutcvsexportcommitfor-each-refinit-dbmerge-recursiveprune-packedremote-testsvnshow-branchupdate-ref add--interactivecheckout-indexcvsimportformat-patchinstawebmerge-resolvepullrepackshow-indexupdate-server-info amcherrycvsserverfsckinterpret-trailersmerge-subtreepushreplaceshow-refupload-archive annotatecherry-pickdaemonfsck-objectslogmerge-treequiltimportrepo-configstageupload-pack applycitooldescribegclost-foundmergetoolread-treerequest-pullstashvar archimportcleandiffget-tar-commit-idls-filesmktagrebaserererestatusverify-commit archiveclonediff-filesgrepls-remotemktreereceive-packresetstripspaceverify-pack bisectcolumndiff-indexguils-treemvreflogrev-listsubmoduleverify-tag bisect--helpercommitdiff-treegui--askpassmailinfoname-revrelinkrev-parsesubmodule--helperweb--browse blamecommit-treedifftoolhash-objectmailsplitnotesremoterevertsubtreewhatchanged branchconfigdifftool--helperhelpmergep4remote-extrmsvnworktree bundlecount-objectsfast-exporthttp-backendmerge-basepack-objectsremote-fdsend-emailsymbolic-refwrite-tree cat-filecredentialfast-importhttp-fetchmerge-

git 2691 2

作者头像congming2017.06.08 14:52 

SQl插入数据时判断是否存在,存在则跳过,不存在则插入

SQl插入数据时判断是否存在,存在则跳过,不存在则插入insertintotest(name)select'test1'fromDUALWHERENOTEXISTS(SELECT`name`fromtestwherename='test1');test是表明,test1是要插入的内容,name是对应的字段首次执行结果[SQL]insertintotest(name)select'test1'fromDUALWHERENOTEXISTS(SELECT`name`fromtestwherename='test1'); 受影响的行:1 时间:0.002s第二次执行结果[SQL]insertintotest(name)select'test1'fromDUALWHERENOTEXISTS(SELECT`name`fromtestwherename='test1'); 受影响的行:0 时间:0.002s

mysql 2921 2

作者头像SmartZ2017.06.08 10:41 

MYsql 出现This function has none of DETERMINISTIC, NO SQL解决办法

完整错误描述:This function has none of DETERMINISTIC, NO SQL解决办法创建存储过程时出错信息:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)原因:这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据,当然也不会修改数据4 MODIFIES SQL DATA 要修改数据5 CONTAINS SQL 包含了SQL语句其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。解决方法:SQL codemysql> show variables like 'log_bin_trust_function_creators';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| log_bin_trust_function_creators | OFF |+---------------------------------+-------+mysql> set global log_bin_trust_function_creators=1;mysql> show variables like 'log_bin_trust_function_creators';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| log_bin_trust_function_creators | ON |+---------------------------------+-------+这样添加了参数以后,如果mysqld重启,那个参数又会消失,因此记得在my.cnf配置文件中添加:log_bin_trust_function_creators=1

mysql 5438 2

作者头像SmartZ2017.06.07 20:06 

PHP的五种设计模式

工厂模式:最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏。该问题在于紧密耦合 。系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起,以避免出现联锁。在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的 User 类。您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。下面是工厂模式的一个示例。<?php interfaceIUser { functiongetName(); } classUserimplementsIUser { publicfunction__construct($id){} publicfunctiongetName() { return"Youarename"; } } classUserFactory { publicstaticfunctionCreate($id) { returnnewUser($id); } } $uo=UserFactory::Create(1); echo($uo->getName()."\n"); ?>IUser 接口定义用户对象应执行什么操作。IUser 的实现称为 User,UserFactory 工厂类则创建 IUser 对象。此关系可以用图 1 中的 UML 表示。下图是工厂类及其相关 IUser 接口和用户类测试代码会向工厂请求 User 对象,并输出 getName 方法的结果。有一种工厂模式的变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对象,然后设置许多属性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不必将复制好的代码在在代码库中到处粘贴。清单 2 显示使用工厂方法的一个示例。清单 2. Factory2.php<?php interfaceIUser { functiongetName(); } classUserimplementsIUser { publicstaticfunctionLoad($id) { returnnewUser($id); } publicstaticfunctionCreate() { returnnewUser(null); } publicfunction__construct($id){} publicfunctiongetName() { return"Jack"; } } $uo=User::Load(1); echo($uo->getName()."\n"); ?>这段代码要简单得多。它仅有一个接口IUse

PHP 2960 4

作者头像SmartZ2017.06.06 15:37 

NodeJS实现Http请求

PHP中可以通过CUrl请求一个链接,NodeJS中可以通过Http或Https发送请求。实现如下:http.jsvarhttpServer=require("http"); varqueryString=require("querystring"); classHttp{ constructor(){ this.params={}; this.isPost=false; this.req=null; this.hostname=''; this.port=80; this.urlPath=''; this.protocol='http:'; this.timeout=10000; this.headers={}; } /** *[setParamsdescription] *@param{Object}[params]{key:value} */ setParams(params){ this.params=queryString.stringify(params); } setHostName(hostname){ this.hostname=hostname; } setUrlPath(path){ this.urlPath=path; } setIsPost(isPost){ this.isPost=isPost; } setPort(port){ this.port=port; } setProtocol(protocol){ this.protocol=protocol; } setTimeout(timeout){ this.timeout=timeout; } /** *[setHeaderdescription] *@param{[Object]}headers[description] */ setHeader(headers){ this.headers=headers; } sendRequest(){ letoptions={ protocol:this.protocol, hostname:this.hostname, port:this.port, path:this.urlPath, method:"GET", timeout:this.timeout, headers:this.headers } if(this.isPost){ options.method="POST"; options.headers['Content-Type']="application/x-www-form-urlencoded"; options.path=this.urlPath; options.headers['Content-Length']=Buffer.byteLengt

NodeJs 4429 3

作者头像SmartZ2017.06.06 11:28 

nodejs中三种变量声明方式var let const

在nodejs开发学习中,发现有let申明变量,故查询了下javascript的变量申明方式:var 申明方式;申明了一个要么是全局,要么是函数级的变量;这种是我们最常见也是最常用的。描述:1. 变量声明无论出现在代码的任何位置,都会在任何代码执行之前处理;2. 给一个非声明变量赋值会隐式创建一个全局变量(全局object的一个属性)3.如果不初始化,输出undefined或者''varhttps; console.log(https);//这里输出undefined或者''let 申明方式;申明了一个块级域的局部变量,并且可以给它一个初始化值;描述:1. 与var相比let把变量的作用域限制在块级lethttpz=3; console.log(httpz); functionchange(){ lethttpz=6; console.log(httpz);//输出6 } change(); console.log(httpz);//输出3const 申明方式;创建一个只读常量,在不同浏览器上表现为不可修改;建议申明后不修改;拥有块级作用域。描述:1. 可以在全局作用域或者函数内申明常量,但是必须初始化常量;2. 常量不能和它所在作用域内其它变量或者函数拥有相同名称;consthttp=require('http'); //consthttp;这种会报错Missinginitializerinconstdeclaration

nodejs 5115 3

作者头像SmartZ2017.06.06 11:13 

C/C++开发node扩展之优化累加求和

累加求和即从最小数开始一直加到最大数,例如:1累加到100,即1+2+3......+100;普通算法for(inti=min,i<=max;i++){ sum+=i; }下面是以扩展的形式开发的优化算法。#include<nan.h> voidchange(longlong*num1,longlong*num2){ *num1=*num2+*num1; *num2=*num1-*num2; *num1=*num1-*num2; } longlongadd(longlongmin,longlongmax){ if(min>max){ change(&min,&max); } longlongsum=0; longlongaddTimes=0; if((min+max)%2==0){ addTimes=(max-min)/2; returnaddTimes*(max+min)+(max+min)/2; }else{ addTimes=(max-min+1)/2; return(max+min)*addTimes; } } voidaccumulation(constNan::FunctionCallbackInfo<v8::Value>&info){ if(info.Length()<2){ Nan::ThrowTypeError("至少需要两个参数"); return; } if(!info[0]->IsNumber()||!info[1]->IsNumber()){ Nan::ThrowTypeError("错误的参数"); return; } longlongarg0=(longlong)info[0]->NumberValue(); longlongarg1=(longlong)info[1]->NumberValue(); longlongsum=0; sum=add(arg0,arg1); charbuf[100]; sprintf(buf,"%lld",sum); v8::Local<v8::String>num=Nan::New(buf).ToLocalChecked(); info.GetReturnValue().Set(num); } voidInit(v8::Local<v8::Object>exports){ exports->Set(Nan::New("accumulation").ToLocalChecked(), Nan::New<v8::FunctionTemplate>(accumulation)->GetFunction()); } NODE_MODULE(accumulation,Init)建立binding.gyp{ "targets":[ { "target_name":"accumulation", "sources":["accumulation.cc"], "include_dirs":[ "<!(node-e\"requ

node 22182 8

作者头像SmartZ2017.06.05 18:40 

累加求和算法

例子:求1累加100。普通算法intsun=0; for(inti=1;i<100i++){ sum=sum+i; }优化后的算法intsum=(1+99)*50+50;如果1累加到99.intsun=0; for(inti=1;i<99i++){ sum=sum+i; }优化后的算法intsum=(1+98)*50;优化算法与通用算法对比#include<stdio.h> voidchange(int*num1,int*num2){ *num1=*num2+*num1; *num2=*num1-*num2; *num1=*num1-*num2; } intadd(intmin,intmax){ if(min>max){ change(&min,&max); } intsum=0; intaddTimes=0; if((min+max)%2==0){ addTimes=(max-min)/2; returnaddTimes*(max+min)+(max+min)/2; }else{ addTimes=(max-min+1)/2; return(max+min)*addTimes; } } intcommAdd(intmin,intmax){ if(min>max){ change(&min,&max); } intsum=0; for(inti=min;i<=max;i++){ sum+=i; } returnsum; } voidmain(){ intmin=-1,max=-100; printf("add=%d\n",add(min,max)); printf("addcomm=%d\n",commAdd(min,max)); }结果如下:add=-5050 addcomm=-5050 Pressanykeytocontinue

数据结构 2054 2

作者头像SmartZ2017.06.05 15:55 

nodejs异常处理

在nodejs开发中,异常处理十分麻烦。一下代码捕捉不到错误functionasync_error(){ setTimeout(function(){ thrownewError("Error"); },10) } functionrun(){ try{ async_error(); }catch(err){ console.log(err); } } run();在回调函数内捕获错误,我们不得不在异步函数内写错误处理语句。functionasync_error(){ setTimeout(function(){ try{ thrownewError("Error"); }catch(e){ console.log(e); } },10) } async_error();如果函数嵌套过多,就会变成这样foo('a',function(a){ if(a.error){ thrownewError(a.error); } foo('b',function(b){ if(b.error){ thrownewError(b.error); } foo('c',function(c){ if(c.error){ thrownewError(c.error); } console.log(a,b,c); }); }); });但是,在es6里,这个就变的很简单。function*g(){ try{ vara=yieldfoo('a'); varb=yieldfoo('b'); varc=yieldfoo('c'); }catch(e){ console.log(e); } console.log(a,b,c); }如果我们使用async来控制流程varasync=require('async'); async.series([ function(cb){ cb(null); }, function(cb){ cb(newError("Error")); } ],function(err){ console.log(err); });async串行执行函数过程中,一旦错误,就会停止执行剩下的函数,直接执行结果回调函数。这样就统一处理错误,变得很清晰。那么使用promise呢varpromise=newPromise(function(resolve,reject){ if(/*异步操作成功*/){ resolve(value); }else{ reject(error); } }); promise.then(function(value){ //success },function(value){ //failure });promise中每个函数执行都有一个错误处理函数。流程控制库帮助我们简化来错误处理机制。另外,我们也可以用 events 来帮助触发错误处理函数。varevents=require('events'); varutil=require('util'); functionA(){ events.EventEmitter.call(this); } ut

node 2429 1

作者头像SmartZ2017.06.05 15:41 

koa-static组件的使用

koa-static组件的使用constpath=require('path'); app.use(require('koa-static')(path.join(__dirname,'./static'),{ maxAge:365*24*60*60,extensions:true }));npminstallkoa-static--save

Node 2347 1

a6bfb44cbd5549740eb36647f36ef83a