rpmdb: Lock table is out of available locker entries…

如果运行一些程序后,远行yum命令出现

“rpmdb: Lock table is out of available locker entries…”的问题时, 你可以按照如下操作来修复它:

错误表现如下:
rpmdb: Lock table is out of available locker entries
error: db4 error(22) from db->close: Invalid argument
error: cannot open Packages index using db3 – Cannot allocate memory (12)
error: cannot open Packages database in /var/lib/rpm

操作之前请先备份 /var/lib/rpm :
tar cvzf rpmdb-backup.tar.gz /var/lib/rpm

去除rpm使用的BDB数据库:
rm /var/lib/rpm/__db.00*

重建立 rpm 使用的数据库,注意:此处可能需要一点时间:
rpm –rebuilddb

现在检查,看看 rpm 包是否一切正常:
rpm -qa | sort

为什么为发生这个问题呢?
其实当您用rpm命令后,rpm访问BDB数据库,首先会设置一个临时锁。如果在它运行时您用 control-c 中断它,或者是给它发了中断信号。那么rpm就很可能会出错误。因为这个临时锁还没有被释放呢。找到原因,相信您还可以找到其它的解决方法。

lftp 上传下载目录的方法

ftp IP
user USERNAME
PASSWORD

> open -u

下传目录 mirror DIRNAME
上传目录 mirror -R DIRNAME

下传目录
方法一 > mget -d DIRNAME/*
方法二 > mirror DIRNAME
上传目录
方法一 >mput -d DIRNAME/*
方法二 >mirror -R DIRNAME
下传普通文件
> get FILENAME
下传多个普通文件
> mget *
lftp搜索文件方法
ls -R | grep .iso
find -d 3 | grep .iso
在使用中,多看看帮助 help
bookmark 标签
cat/more/less 显示文件内容(用cat和more)
zcat/zmore/zless 显示文件内容(用zcat和zmore,区别是zcat和zmore只能直接操作.gz文件)
bzcat/bzmore/bzless 显示文件内容(用bzcat和bzmore,区别是bzcat和bzmore只能直接操作.bz2文件)
get/mget/pget 抓取文件
put/mput/ 上传文件
mirror (-R) 下载上传目录

修改浏览器的useragent

一些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)

前两行比较说明根据联合主键的第一列分组还是比根据整个联合主键分组要快一些,毕竟都是只访问索引文件
后两行比较说明根据联合主键的第一列排序还是比根据整个联合主键排序没有明显差别

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)的属性。请看下面的代码:

    alert(undefined in window);   //输出:true

    
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的比较速度。例如:

    function anyFunc()
    {
        
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

编程语言没有好坏,要选择合适的

c/c++ 、java、PHP、C#、VB、Perl、Python等等,编程语言很多,累死你也研究不完;
当你还没有掌握任何一门语言的时候,你可能会比较一下哪一个更好;其实没有哪一个更好,只有哪一个更适合你,哪一个更适合于你要做的工作;
如果你要写的程序必须效率很高,那么你可能要考虑使用c\c++;
如果你的程序必须可以跨平台,不太考虑效率,那么你可能要考虑使用java;
如果你只要求写起来简单就行,那么PHP是比较适合你的

讨论一些程序之间的优缺点是有意义的,简单地哪个语言好,哪个语言不好是没有意义的。

另外,我们做事情的时候,也不是总使用我们最熟悉的,而是使用最适合做这件事的。