一些wap服务总是根据用户的浏览器类型来判断是否跳转到适合用户访问的页面,比如只有在手机上才能访问到wap页面; 但是我确实想用Firefox访问,这样更方便一些,于是就有了修改Firefox的useragent的需求,修改办法有二:
一、安装插件: User Agent Switcher
二、通过about:config 修改,添加 general.useragent.override , 值就是你要使用的useragent
导数据中学到的几点东西
1. mysql 的查询速度可能受mysql qcache的影响,更可能受系统cache的影响,而且系统cache影响可能是200和6000的差别,不可小视啊。
2. 如果能批量处理就不要一条一条地处理,批量处理方法:
a. mysqldump 工具
b. select * into outfile "myfile" from atable; // 这样将以tab分隔的方式将记录写到文件里面,对于反斜线会自动加反斜线转义的
c. 用loaddata将b的结果导入到目标表里面
3. mysql的瓶颈一般在磁盘IO上
4. 不要小看sql语句的优化,注意下面两条语句的区别
a. select * from atable where akey = ‘avalue’;
b. select count(*) from atable where akey = ‘avalue’;这里不仅仅是结果集的数据量的差异,a语句除了访问索引文件,还要访问数据文件; 而b语句只访问索引文件就够了; 如果内存小的话,这里的差异就比较大了。
5. mysql 需要修改表结构时的一些到数据的问题
a. 首先考虑上面提到的使用文件的方式处理
b. 如果需要逐条数据处理则可以将源数据导成文本文件,逐行处理; 注意: 数据要干净,否则就不要使用文件处理
c. 如果需要逐条处理,但是数据量很大,又不能一次查询获取,一般的做法为:
按照主键排序,每次取一部分(如:1万条,和每条数据量大小有关,既不要频繁获取,又不要每次获取数据量太大,以至于占太多内存)
这种做法似乎很常用,但是
写程序并不简单,需要考虑的地方比较多;
排序只是为了将数据分块,所以做了一些无用功;
排序是一件很耗时的事情,如果数据量很大,非常不建议使用order by;
排序还很可能出现[ERROR] /usr/local/mysql/libexec/mysqld: Sort aborted 的错误
下面介绍一种比较简单有效的做法:
思路是我们只是想把要取的数据分块儿,很自然就想到了hash,如果主键(的一)部分是数字,则可以根据数量的大小选取一个适当的素数,根据对该素数取模来分块; 将设有900万条数据,每次想取约1万条,则 900万/1万 = 100 ,则取100左右的素数就行,如:127;
如果主键不是数字,也可以使用hash函数
6. 联合主键时的一些查询
mysql> select sql_no_cache count(*) into outfile "/tmp/a" from t_user_friend_list_52 group by user_
id;
Query OK, 878180 rows affected (6.65 sec)mysql> select sql_no_cache count(*) into outfile "/tmp/b" from t_user_friend_list_52 group by user_
id,friend_id;
Query OK, 9511565 rows affected (10.48 sec)mysql> select sql_no_cache * into outfile "/tmp/c" from t_user_friend_list_52 order by user_id,frie
nd_id limit 9000000,1000;
Query OK, 1000 rows affected (31.82 sec)mysql> select sql_no_cache * into outfile "/tmp/d" from t_user_friend_list_52 order by user_id limi
t 9000000,1000;
Query OK, 1000 rows affected (31.96 sec)前两行比较说明根据联合主键的第一列分组还是比根据整个联合主键分组要快一些,毕竟都是只访问索引文件
后两行比较说明根据联合主键的第一列排序还是比根据整个联合主键排序没有明显差别
vim 复制、粘贴
http://hi.baidu.com/069liuqing/blog/item/d2c88a188521f4be4bedbc53.html
javascript 中null与undefined到底有啥区别
在JavaScript开发中,被人问到:null与undefined到底有啥区别?
一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。
总所周知:null == undefined
但是:null !== undefined
那么这两者到底有啥区别呢?
请听俺娓娓道来…
null
这是一个对象,但是为空。因为是对象,所以 typeof null 返回 ‘object’ 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null 结果值:123
表达式:123 * null 结果值:0
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 ‘undefined’ 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
var anObj = {};
alert(‘undefined‘ in anObj); //输出:false
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
undefined参与任何数值计算时,其结果一定是NaN。
随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!
提高undefined性能
当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。
同样,当我们定义一个变量但未赋予其初始值,例如:
var aValue;
这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用,
于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined’的属性,然后再比较两个操作数的引用指针是否相同。
由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:
{
var undefined; //自定义局部undefined变量

if(x == undefined) //作用域上的引用比较

while(y != undefined) //作用域上的引用比较

};
其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。
这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!
原著:李战(leadzen).杭州-阿里软件 2009-2-18
javascript 点滴2
1. 只能输入字母的文本框
<input name="year" type="text" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/,”)" onpaste="this.value=this.value.replace(/[^a-zA-Z]/,”)">
不过这个也不太好,用户想输入数字时还以为自己键盘坏了,还不如不限制,但是输入数字时,红字提示就行了
2. 关于javascript中的引用
var m;
var n;
alert(m === n); //true, 说明m、n地址具有相同的引用
var m = 5;
alert(n); // n 没有发生变化,说明m赋值时,不是把m地址空间的值修改了,而是m引用到另外一个地方了;所以这里的复制和引用是比较特殊的
alert(‘undefined’ in window); // true 说明undefined是window的一个属性
alert(n === window.undefined); // true, 说明只定义未赋值的变量都是和window.undefined 有相同引用的
参考文章: http://book.csdn.net/bookfiles/1112/100111233201.shtml
javascript 回退到前一页的写法
javascript中回退的前一页可以写为:
history.go(-1)
或
location.href = document.referrer;
二者的区别为:
前者回退到前一页时,前一页的请求信息和上次一样(referrer没有变),其实这才是真正的后退
后者回退到前一页时,前一页的referrer就是当前页面
IE 中无提示关闭窗口的方法
<script language="javascript" type="text/javascript">
function closeWindow() {
window.open('','_parent','');
window.close();
}
</script>
<a href="javascript:closeWindow();">无提示关闭窗口</a>
注意: 这种方法骗不过Firefox
编程语言没有好坏,要选择合适的
c/c++ 、java、PHP、C#、VB、Perl、Python等等,编程语言很多,累死你也研究不完;
当你还没有掌握任何一门语言的时候,你可能会比较一下哪一个更好;其实没有哪一个更好,只有哪一个更适合你,哪一个更适合于你要做的工作;
如果你要写的程序必须效率很高,那么你可能要考虑使用c\c++;
如果你的程序必须可以跨平台,不太考虑效率,那么你可能要考虑使用java;
如果你只要求写起来简单就行,那么PHP是比较适合你的
…
讨论一些程序之间的优缺点是有意义的,简单地哪个语言好,哪个语言不好是没有意义的。
另外,我们做事情的时候,也不是总使用我们最熟悉的,而是使用最适合做这件事的。
如何寻找优秀程序员
在delicious上看到一篇去年的文章: How to recognise a good programmer。 正好这段时间一直在为面试发愁,看看这篇文章很有帮助。原文篇幅很长,这里就不逐字逐句地翻译了, 只把要点和看过之后的体会写出来,希望能给同样是为寻找程序员而头疼的同仁们提供帮助。
优秀程序的几个必要条件:
1. 要有热情
企业中有这样一种人:职业程序员。他们之所以做IT是因为IT是个好工作,而不是因为对技术充满热情。这些人回家后绝对不会写程序。 对于他们来说,编程是每天必须的工作,公司为他们提供技术培训也是理所应当的。 这种人缺乏热情,也不会是好的程序员。
其实这类人相当相当多,随手一抓就能抓出一大把。他们自己也有电脑,但那是用来上网看电影打游戏的,不是用来搞开发的。 开发环境、编辑器甚至连Office都没有。这样的人也很难期待他是优秀程序员。
2. 会自学,爱自学
大家都知道IT行业更新很快,不会主动学习的人很快就会被淘汰。有些人你要他们学习某项技术时他会说“公司给我培训我就学”。 当然,在找工作时他们有可能在家里学习必要的技术,但那不是主动的自学。好的程序员热爱学习新技术, 对于他们来说学技术纯粹是好玩,纯粹是个人兴趣。有些人还会制定出完善的学习计划。 这样的程序员根本不用培训。
3. 聪明
也许程序员都给人以不善交际的印象,但其实他们不是。好的程序员都是智商奇高的人, 不可能不善交际。而事实上的确在某些场合他们不善言辞,那是因为他们的兴趣不在那里。 一旦讨论到他们感兴趣的技术话题,他们就会扯开话匣子说个不停。
在招聘时可以试着去谈论一些他可能感兴趣的技术话题,看他能侃到什么程度。 如果问一句说一句或者说不出来什么,那就不用再抱希望了。
4. 隐藏的经验
优秀程序员或多或少都有些“课外活动”,如参加开源社区,为处理日常生活的事情而写的小程序, 个人网站,或者纯粹为了好玩而做的小东西。而面试时这些东西是不会写在简历上的, 因为他们觉得这些根本算不上简历要求的“经验”。
我经常看到有些应聘者的简历上把大学时做的小学期作业都写在上面。这种人就不必考虑了—— 连作业都自认为是“经验”的人可以想到他的水平有多高。
所以,优秀程序员的简历通常都很简短,不过你可以去问问他们,除了简历上写的东西之外, 工作之外有无技术经验,即使完全和工作无关也行。如果他答不出,那即使简历有20页长,他也不会是优秀程序员。
5. 广博的技术知识
这一点很简单,学得技术越多水平越高。不一定要完全精通,但了解许多毫不相关的知识对个人水平有很大帮助。 但同样,优秀程序员不会把他知道的东西全都写上,那些他不精通的东西会认为不值得一写。
不过有一点要注意。如果简历上写到“精通Java、J2EE、Ant、XML、SQL、Hibernate、Spring、Struts、EJB”, 就要小心了,这个人不一定优秀。因为这些技术都属同一个领域,关联性太强。 但当你对这些技术一无所知时,如何分辨呢?你可以让他讲讲这些技术有什么联系。 精通一个领域的技术的人经验丰富,但他很可能不是个优秀程序员。
为什么需要有广博的技术知识?我个人认为,即使是毫不相关的技术,其实也是能融会贯通的。 学得技术多了、杂了,看到不懂的问题自然而然地就能想出最合适的解决办法来。
不过有一点要注意,如果他关心的技术中有尖端技术,如今天的AIR、Flex之类, 那你就可以考虑录用他。
另外优秀的程序员对技术很敏感,他能判断出某项技术是否适合于完成工作。 如果被迫使用一种他认为不适合的技术去工作,他会觉得很不爽的。
6. 资格证书
资格证书、学位等不是优秀程序员的必要条件,但至少不是个反面信号。优秀程序员大都有计算机科学的学位。 也有很多人没有,但这并不能说明他不优秀。专业资格认证如MCSE、CCNA等也是, 这些只是用来证明这个人已经学会了相关知识,企业在招聘的时候就可以省去考核的麻烦, 并不能证明程序员有多么优秀。如果你的企业确确实实需要非常优秀的程序员, 那就别去理会这些认证,而是把精力花在实际能力的考察上吧。
总结
如果将优秀程序员的条件按条列出的话,可以得到如下内容:
正面信号
- 对技术有热情
- 以编程为乐
- 对感兴趣的技术话题会滔滔不绝
- 工作之外自己做过某些项目
- 主动自学技术,但不是为工作而学习
- 对技术的好坏、是否合适有自己的看法
- 使用自认为不合适的技术完成工作时会很不爽
- 聪明,很多话题都能侃侃而谈
- 在上大学或工作之前就写过程序
- 有许多简历上没写出来的经验
- 知道许多毫不相关的技术(一般不会写在简历上)
负面信号
- 把编程当作每天的工作
- 不喜欢谈论技术,即使受到鼓励也不会说
- 只通过公司的培训来学新技术
- 愿意使用你选择的任何技术来完成工作,认为“所有技术都是好的”
- 看起来不怎么聪明
- 在大学时才开始学编程
- 简历上写出自己的所有经验
- 仅专注于一个或两个领域
摘自: http://tech.idv2.com/2008/01/24/how-to-recognise-a-good-programmer/
关于飞速土豆
• 飞速土豆是在本机起的一个服务,浏览器安装该插件后,遇到可以代理的请求时,就由本地服务进程来下载数据了
• 飞速土豆还有缓存的功能,就是如果浏览器里通过飞速土豆下载过某段视频,再用控制台走该代理下载该视频就很快了
• 飞速土豆限制wget下载,是通过限制agent实现的,用-U参数修改agent就可以搞定了