匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。
匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。
匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。
匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files …”,有强迫症的童鞋心里肯定不爽。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
举个例子:
假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
然后,继续忽略Python编译产生的.pyc、.pyo、dist等文件或目录:
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
加上你自己定义的文件,最终得到一个完整的.gitignore文件,内容如下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说“working directory clean”。
使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore
文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore
了。
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
忽略文件夹写法
经测试发现,若要忽略一个文件夹下的部分文件夹,应该一个一个的标示。可能有更好的方法。 若test下有多个文件和文件夹。若要ignore某些文件夹,应该这个配置.gitignore文件。若test下有test1,test2,test3文件。要track test3,则.gitignore文件为: test/test1 test/test2 !test/test3 若为: test/ !test/test3 ,则不能track test3。 Git 中的文件忽略 1. 共享式忽略新建 .gitignore 文件,放在工程目录任意位置即可。.gitignore 文件可以忽略自己。忽略的文件,只针对未跟踪文件有效,对已加入版本库的文件无效。 2. 独享式忽略针对具体版本库 :.git/info/exclude针对本地全局: git config --global core.excludefile ~/.gitignore 忽略的语法规则: (#)表示注释 (*) 表示任意多个字符; (?) 代表一个字符; ([abc]) 代表可选字符范围 如果名称最前面是路径分隔符 (/) ,表示忽略的该文件在此目录下。 如果名称的最后面是 (/) ,表示忽略整个目录,但同名文件不忽略。 通过在名称前面加 (!) ,代表不忽略。 例子如下: # 这行是注释 *.a # 忽略所有 .a 伟扩展名的文件 !lib.a # 但是 lib.a 不忽略,即时之前设置了忽略所有的 .a /TODO # 只忽略此目录下 TODO 文件,子目录的 TODO 不忽略 build/ # 忽略所有的 build/ 目录下文件 doc/*.txt # 忽略如 doc/notes.txt, 但是不忽略如 doc/server/arch.txt
最近,有网友反映称谷歌官网域名google.com、谷歌香港google.com.hk都打不开, ping了一下google.com和google.com.hk两个域名的服务器情况,最后ping出来的IP地址均显示为“美国”,也就是说谷歌香港(google.com.hk)的服务器,已由香港转移至美国,所以链接时间会很长,甚至断断续续出现请求超时的情况.
Google服务在大陆的崩溃情况不仅影响到了广大网民,也影响到了数百万的站长。WordPress是世界上最大的开源博客程序,而WordPress大部分的主题都在使用Google的在线字体方案——Google Fonts,Google服务一不稳定,大量的独立博客字体就加载不出来,直接导致了几十万独立博客打开速度令人无法忍受,严重的时候会导致网站打不开。
图:Google字体打开时间19秒
为此,360网站卫士推出一项字体加速服务,站长只要修改一行代码,就可以免费使用到由360网站卫士CDN加速的字体服务。
修改方法如下:
打开wordpress代码中的文件wp-includes/script-loader.php文件,搜索:fonts.googleapis.com找到这行代码:
$open_sans_font_url = “//fonts.googleapis.com/css?family1=Open+Sans:300italic,400italic,600italic,300,400,600⊂=$subsets”;
把fonts.googleapis.com替换为fonts.useso.com
修改完保存,再次刷新,大家就可以发现,自己的网站速度已经比以前快了很多,几乎瞬间就可以拿到Google字体了。原因就是本来需要从美国服务器才能拿到的google字体,现在已经遍布360全国的机房了。
欢迎大家试用我们的新福利。
如果各位站长想要更威猛的加速效果,使用专业的加速解决方案,只需要登陆360网站卫士官网(wangzhan.360.cn),申请加入即可。
1、结构体 struct
定义格式:
type 结构体名称 struct { 属性1 类型 属性2 类型 ... }
结构体的初始化可以使用new关键词和var关键词,不同的是如果使用new,则返回类型是一个指针,使用var,则是结构体自身。
type User struct { name string age int } user := new(User) user.name = "tom" user.age = 20 fmt.Println(user) //输出&{tom 20}
上例中使用new来初始化一个结构体,user的类型就是*User,在输出内容中的&字符号也表现了这点。接下来看下使用var的情况:
type User struct { name string age int } var user User user.name = "tom" user.age = 20 fmt.Println(user) //输出{tom 20}
这里输出中没有&符号了。
如果结构体属性比较多,每个属性初始化都要一行,代码就显的比较冗长,Go语言提供更简洁的写法:
type User struct { name string age int } user := User{"tom", 20} //按顺序给属性赋值 //user := User{age: 20, name: "tom"} //指明属性赋值 fmt.Println(user)
要注意的就是如果不指明属性,就是按照结构体内属性的先后顺序进行赋值。
2、数组 array
数组使用很广泛,很多语言都有会有数组的实现。
定义格式:
[长度]类型{初始化值}
其中长度可以省略或者换成三个点“…”,如果这么做的话,系统会根据初始化的值自动定义数组的长度。
简单的示例:
arr := [2]int{3, 2} //arr := []int{3, 2} //arr := [...]int{3, 2} fmt.Println(arr) //输出[3 2]
如果指明了长度,但是没有初始值,则会根据数组类型初始化每个值
arr := [5]int{} fmt.Println(arr) //输出[0 0 0 0 0]
3、切片 slice
切片可以和数组很好的配合使用,可以用来获取数组中一段数据。格式:
数组变量[开始索引:结束索引]
其中不包括结束索引。
arr := [5]int{3,4,5,6,7} slice := arr[0:3] fmt.Println(slice) //输出[3 4 5]
切片也可以用于字符串:
str := "Anny is a beautiful girl." fmt.Print(str[0:6]) //输出Anny i
4、字典 map
在Go语言数组中,字符串是不能做键值的,我觉着字典很好的弥补了这个不足。
字典定义格式:
map[键类型] 值类型 { 键: 值, .... }
一个简单示例:
ages := map[string] int { "tom": 21, "anny": 18, } fmt.Println(ages["tom"])
使用字典时,还能动态添加字典元素,也很方便。
ages := map[string] int { "tom": 21, "anny": 18, } ages["jack"] = 20 fmt.Println(len(ages))
如果键在字典里是不存在的,则返回一个默认值,默认值根据不同的类型决定。
ages := map[string] int { "tom": 21, "anny": 18, } fmt.Println(ages["jack"]) //输出0
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…
此外,JavaScript 允许自定义对象。
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
对象只是带有属性和方法的特殊数据类型。
属性是与对象相关的值。
访问对象属性的语法是:
objectName.propertyName
这个例子使用了 String 对象的 length 属性来获得字符串的长度:
var message="Hello World!";
var x=message.length
;
在以上代码执行后,x 的值将是:
12
方法是能够在对象上执行的动作。
您可以通过以下语法来调用方法:
objectName.methodName()
这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写:
var message="Hello world!";
var x=message.toUpperCase()
;
在以上代码执行后,x 的值将是:
HELLO WORLD!
通过 JavaScript,您能够定义并创建自己的对象。
创建新对象有两种不同的方法:
这个例子创建了对象的一个新实例,并向其添加了四个属性:
person=new Object(); person.firstname="Bill"; person.lastname="Gates"; person.age=56; person.eyecolor="blue";
替代语法(使用对象 literals):
person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};
本例使用函数来构造对象:
function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; }
一旦您有了对象构造器,就可以创建新的对象实例,就像这样:
var myFather=new person("Bill","Gates",56,"blue"); var myMother=new person("Steve","Jobs",48,"green");
您可以通过为对象赋值,向已有对象添加新属性:
假设 personObj 已存在 – 您可以为其添加这些新属性:firstname、lastname、age 以及 eyecolor:
person.firstname="Bill"; person.lastname="Gates"; person.age=56; person.eyecolor="blue"; x=person.firstname;
在以上代码执行后,x 的值将是:
Bill
方法只不过是附加在对象上的函数。
在构造器函数内部定义对象的方法:
function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; this.changeName=changeName; function changeName(name) { this.lastname=name; } }
changeName() 函数 name 的值赋给 person 的 lastname 属性。
现在您可以试一下:
myMother.changeName("Ballmer");
JavaScript 是面向对象的语言,但 JavaScript 不使用类。
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。
JavaScript for…in 语句循环遍历对象的属性。
for (对象中的变量) { 要执行的代码 }
注释:for…in 循环中的代码块将针对每个属性执行一次。
循环遍历对象的属性:
var person={fname:"Bill",lname:"Gates",age:56}; for (x in person) { txt=txt + person[x]; }
from:w3school
在使用富文本编辑器编辑文章内容时,经常会用到<pre>元素,下面的CSS帮助解决<pre>元素内的文字不会自动换行,而“撑破”页面的情况:
pre{ white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; }
一维数组的重复项:
二维数组的重复项:
原理:用javascript识别操作系统语言来切换网页语言。
兼容浏览器:IE、火狐、chrome、safari等主流浏览器
相关代码:
<script language=javascript> var sysLan = (navigator.language || navigator.browserLanguage).toLowerCase(); if(sysLan != 'zh-cn') { alert('en'); window.location.href="http://www.chengxusheji.com/en/index.html"; } else { alert('cn'); window.location.href="http://www.chengxusheji.com/cn/index.html"; } </script>
根据ip库判断用户ip例子:http://www.yemiansheji.com/ip/
各浏览器对 navigator 对象中几个与语言相关的属性(language、userLanguage、browserLanguage、 systemLanguage)的返回值存在很大的差异。
由于不同浏览器对这几个属性的返回值有很大差异,同时返回的有效值的大小写也有差异。若在获取当前浏览器语言的时候没有考虑到这些差异则可能造成兼容性问题。
首先查看一下 navigator 对象中的这几个与 language 相关的属性。
navigator 对象包含有关浏览器的信息。没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象。但是其内部一些属性及其返回值在各浏览器并不统一。
关于 navigator 对象的更多资料,请参见:MSDN、Mozilla Developer Center。
对于浏览器,Mozilla Developer Center 中的 language 属性与 MSDN 中的 browserLanguage 属性描述很像。
分析以下代码:
<script> document.write('navigator.language:'+navigator.language); document.write('<br>navigator.userLanguage:'+navigator.userLanguage); document.write('<br>navigator.browserLanguage:'+navigator.browserLanguage); document.write('<br>navigator.systemLanguage:'+navigator.systemLanguage); </script>
代码中打印出了各浏览器对于这 4 个属性返回值的情况:
IE6 IE7 IE8 | Firefox Chrome Safari | Opera | |
---|---|---|---|
navigator.language | undefined | zh-CN | zh-CN |
navigator.userLanguage | zh-cn | undefined | zh-cn |
navigator.browserLanguage | zh-cn | undefined | zh-cn |
navigator.systemLanguage | zh-cn | undefined | undefined |
可以使用下面的代码获取当前浏览器语言:
(navigator.language || navigator.browserLanguage).toLowerCase()
来自:转载
PHP面试题中,关于日期的题目作为基础考题经常出现,下面讨论一下获取两个日期之间的天数的方法。
收到一个答案,拆分年、月、日,分别进行减法,然后统计天数,好累。
针对低版本的PHP可以用下面的方式搞定:
$date1 = '2014-02-18 00:09:13'; $date2 = '2014-03-19 00:02:18'; function differDays($date1, $date2) { $differNums = strtotime($date2) - strtotime($date1); $differNums = $differNums / (3600 * 24); echo floor(abs($differNums)); } echo differDays($date1, $date2); echo "\n"; //或者 function difDays($date1,$date2){ $date1 = substr($date1, 0, 10); $date2 = substr($date2, 0, 10); $time1 = explode("-", $date1); $time2 = explode("-", $date2); $date1 = mktime(0, 0, 0, $time1[1],$time1[2],$time1[0]); $date2 = mktime(0, 0, 0, $time2[1],$time2[2],$time2[0]); return ($date2 - $date1)/(3600*24) - 1; } echo difDays($date1, $date2);
PHP5.3以上版本可以使用date_diff:
function dateDiff($date1, $date2) { $datetime1 = new DateTime($date1); $datetime2 = new DateTime($date2); $interval = $datetime1->diff($datetime2); return $interval->format('%a'); } echo dateDiff($date1, $date2);
本文例子下载:http://pan.baidu.com/s/1eQ1Nn14