chrome DNS 缓存
有一次由于修改了hosts,造成chrome无法访问公网上的域名,似乎是chrome DNS 缓存问题。要查看chrome DNS 缓存,可以在浏览器中输入如下地址:
chrome://net-internals
里面包含了很多有用的东西,其中一项是DNS,你可以看到当前缓存的所以域名的DNS解析地址。
有一次由于修改了hosts,造成chrome无法访问公网上的域名,似乎是chrome DNS 缓存问题。要查看chrome DNS 缓存,可以在浏览器中输入如下地址:
chrome://net-internals
里面包含了很多有用的东西,其中一项是DNS,你可以看到当前缓存的所以域名的DNS解析地址。
在ie6 下对于div的浮动,当设置了margin后,div可能占有的宽度是div的宽度加上两倍的margin值,解决此Bug只需要设置div的display属性为inline即可
机器原配的4G内存真心不够用,开机使用一段时间,稍微多打开一些应用就慢的不行,经常看到那朵菊花。所有下定决心把内存升级为8G了。从使用半天的情况下来看,打开应用的速度明显加快,基本上没有出现卡的情况。还是比较满意的。没换之前使用预览打开qq对话框中别人发的图片,要好久才能出来,现在基本上一点就马上出来了。
内存和拆机的螺丝刀都是在京东上选的。内存选择的是金士顿 DDR3 1333 4GB 苹果(APPLE)笔记本专用内存,比普通贵几十块,也是考虑兼容性的问题,怕到时候出问题换货麻烦,不过也有人说这个也就是普通的金士顿然后在包装上加上了苹果专用,不过我收到的内存看上去有点旧的感觉,心想只要能用就算了。选螺丝刀到是花费我一番功夫,MBP后盖10颗螺丝需要用PH00型号的十字螺丝刀,似乎没有单独买的,只有套装里面有,而且大多6件套最小型号的是PH0(PH00更小),开始选择是史丹利金属6件套,看销量还不错,都已经下单了,后来看评论有人说不是太好,而且它最小型号也是PH0,后来发终于发现另一个六件套里面含有PH00的,取消订单后又重新下单了。网上看到很多人说由于螺丝刀的问题导致螺丝花掉了,所以比较重视这个。算好后来买的那个还行,比较轻松的拧下后盖的螺丝,顺利安装上内存了。方便准备升级的朋友,少走一些弯路,现把我购买链接放上来。声明:本人绝不是拖。
内存:http://www.360buy.com/product/386261.html
螺丝刀:http://www.360buy.com/product/618282.html
mac os lion中有一项功能是恢复窗口,就是在退出应用时没有关闭窗口,下次启动应用时会再次打开这些窗口。例如在safari中打开了5个tab,使用command+q退出后,当下次启动safari时会再次打开这个5个tab。有些应用的偏好设置中提供是否恢复窗口的选项,例如chrome。
这项功能有好也有坏,例如使用excel打开了10来个文件,在没有全部关闭的情况下退出了,下次打开一个excle文件又都会帮你打开以前的,从而造成响应慢的问题。如果不想使用这项功能,可以在系统偏好设置中的个人、通用中把“退出并重新打开应用应用时恢复窗口”前的勾去掉。这样一来就所有的应用都没有这项功能。如果只是想某些应用不要这个功能,那么在退出该应用时养成习惯,先关闭所有已打开的窗口再退出应用。可以先狂按 command+w 一阵,再使用 command+q 退出应用。或者使用 command+option+q 来退出应用。
用惯了Win的人可能知道,选中文件夹后按回车键就能打开文件夹,但是在mac下回车键是重命名文件夹或文件的。那在不用鼠标和触摸板的情况如何打开文件呢?有两个组合快捷键可以使用。第一种方法是 command + o;第二种方法是 command + ↓。另外 command + ↑可以进入当前目录的上一级目录。
在已知参数名的情况下,获取参数值,使用正则表达式能很容易做到。js的实现方法如下:
function getValue(url, name) { var reg = new RegExp('(\\?|&)' + name + '=([^&?]*)', 'i'); var arr = url.match(reg); if (arr) { return arr[2]; } return null; }
如果想获取所有的参数名和其对应的值,同样也可以使用正则表达式的方法,js实现方法:
function getKeyValue(url) { var result = {}; var reg = new RegExp('([\\?|&])(.+?)=([^&?]*)', 'ig'); var arr = reg.exec(url); while (arr) { result[arr[2]] = arr[3]; arr = reg.exec(url); } return result; }
注意在js中用于匹配的还有一个叫match,match是字符串的方法,而exec是RegExp对象的方法。使用字符串的match方法,同时正则表达式指定为全局匹配,那么正则表达式中的分组将没有用,返回的结果是所有匹配正则表达式的子字符串。exec方法没有使用全局匹配标志时,返回的时间第一个匹配的子字符,如果使用了全局匹配标志,第一次执行从头开始匹配符号的字符串,再次调用,就从上一次匹配结果后开始匹配。
下面提供php的实现方法:
function getKeyValue($url) { $result = array(); $mr = preg_match_all('/(\?|&)(.+?)=([^&?]*)/i', $url, $matchs); if ($mr !== FALSE) { for ($i = 0; $i < $mr; $i++) { $result[$matchs[2][$i]] = $matchs[3][$i]; } } return $result; }
php的preg_match_all方法把匹配的结果存放在第三个指定的参数中,是一个二维数组。第一维度是分组信息的数组,即第一个数组存放的是所有匹配的完整字符串,第二个数组存放的是第一个()对应的值得,第二维度是分组的值。
javascript中使用正则表达式有两种方式。第一种是构建一个RegExp对象;第二种是使用”//”来定义,也即perl风格。例如:
var str = 'http://www.netingcn.com/'; var reg = new RegExp('http', 'i'); alert(reg.test(str)); 或 alert(/http/.test(str));
上述例子就是使用两种方式判断字符串str中是否包含http,注意第二种方式 // 一定不能使用引号。
第一种方式生成对象是参数为字符串,所以可以动态(字符串拼接)的设定正则表达式的内容,第二种则不行。我们知道,正则表达式中有很多特殊字符,例如.,*,?等等,如果表达式中就是需要匹配这些特殊字符,那么就需要使用转义符 “\”。特别要注意的是第一种处理转义符时候,需要使用两个“\”。例如:
var str = 'http://www.netingcn.com/'; var reg = new RegExp('www\\.', 'i'); //此处使用了两个 \ alert(reg.test(str)); 或 alert(/www\./.test(str));
那为什么要使用 \\ 来转义呢?因为第一种方式“编译”后还是会变为第二种方式。例如alert(new RegExp(‘www\\.’, ‘i’)) 结果是 /www\./i 。
sshd服务中设置了UseDNS yes,当配置的DNS服务器出现无法访问的问题,可能会造成连接该服务器需要等待10到30秒的时间。由于使用UseDNS,sshd服务器会反向解析连接客户端的ip,即使是在局域网中也会。
当平时连接都是很快,突然变的异常的慢,可能是sshd服务的服务器上配置的DNS失效,例如DNS配置的是外网的,而此时外面故障断开。终极解决方案是不要使用UseDNS,在配置文件/etc/sshd_config(有些linux发行版在/etc/ssh/sshd_config)中找到UseDNS 设置其值为 no,如果前面有#号,需要去掉,重启sshd服务器即可。
mysql创建表时,如果使用timestamp类型没有指定默认值,它会把第一个使用timestamp的字段默认值设定为CURRENT_TIMESTAMP,如果后面还有其他字段使用timestamp,则指定为‘0000-00-00 00:00:00’,同时Extra列中看到on update CURRENT_TIMESTAMP,注意它会在更新操作时会把该字段时间设置为当前时间,即使你更新时没有指定要更新该字段。例子如下:
create table netingcn(id int(11), ts1 timestamp, ts2 timestamp); desc netingcn; +-------+-----------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+---------------------+-----------------------------+ | id | int(11) | YES | | NULL | | | ts1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | ts2 | timestamp | NO | | 0000-00-00 00:00:00 | | +-------+-----------+------+-----+---------------------+-----------------------------+ insert into netingcn(id,ts2) values(1,now()); select * from netingcn; +------+---------------------+---------------------+ | id | ts1 | ts2 | +------+---------------------+---------------------+ | 1 | 2012-08-04 22:15:20 | 2012-08-04 22:15:20 | +------+---------------------+---------------------+ update netingcn set ts2 = '2012-08-01' where id = 1; select * from netingcn; +------+---------------------+---------------------+ | id | ts1 | ts2 | +------+---------------------+---------------------+ | 1 | 2012-08-04 22:15:27 | 2012-08-01 00:00:00 | +------+---------------------+---------------------+
在上述的例子中插入值时没有ts1,故使用当前的系统时间默认值。当使用更新,此处只是更新了ts2字段,但ts1字段值也发生了变化。所以需要注意extra信息中的提示“on update CURRENT_TIMESTAMP”,如果你想使用timestamp类型又不想让该字段存储的值随着更新而自动更新,那就需要创建表是为该类型的字段显示的指定一个默认值,可以使用CURRENT_TIMESTAMP或0000-00-00 00:00:00。例如:
create table netingcn_1(ts1 timestamp default CURRENT_TIMESTAMP, ts2 timestamp default '0000-00-00 00:00:00'); desc netingcn_1; +-------+-----------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------+------+-----+---------------------+-------+ | ts1 | timestamp | NO | | CURRENT_TIMESTAMP | | | ts2 | timestamp | NO | | 0000-00-00 00:00:00 | | +-------+-----------+------+-----+---------------------+-------+
mysql数据库中对整型分为5个不同的小类型,分别是tinyint、smallint、mediumint、int和bigint,主要区别是数据库存储时使用几个字节,也就是说限定整数的范围,上述类型存储使用的字节为1、2、3、4和8。取值范围可以根据字节数来算出来。注意:它们都可以指定为无符号(大于等于零)的整数。
在使用时候往往在类型后面会用括号指定一个数字,该值的含义是表明显示宽度,对数值的范围是无关的。例如tinyint(1),tinyint(3)存储的数值范围都是-128到127。如果使用了zerofill,在显示的时候才有可能不一样。例如:
create table netingcn_test1(a tinyint(1), b tinyint(2)); insert into netingcn_test1 values(1,1),(100,100); select * from netingcn_test1; +------+------+ | a | b | +------+------+ | 1 | 1 | | 100 | 100 | +------+------+
上述例子可以看到tinyint(1),tinyint(2)没有任何区别,下面使用zerofill来看看是什么情况:
create table netingcn_test2(a tinyint(1) zerofill, b tinyint(2) zerofill); insert into netingcn_test2 values(1,1),(100,100); select a,b,bin(a),bin(b) from netingcn_test2; +------+------+---------+---------+ | a | b | bin(a) | bin(b) | +------+------+---------+---------+ | 1 | 01 | 1 | 1 | | 100 | 100 | 1100100 | 1100100 | +------+------+---------+---------+
可以看到当结果小于显示宽度时,左边用0补齐,当等于或超过显示宽度时正常显示,通过bin函数可以得知数据存储值都是一样的。