• Git重写上一次commit信息

    我们有时commit后才突然发现刚才的信息没有写好,想重新写怎么办?

    这时候可以用以下这条简单的命令实现上一条commit信息改写

    git commit --amend
    

    看看这条命令的解释

    --amend
            Replace the tip of the current branch by creating a new commit. The
            recorded tree is prepared as usual (including the effect of the -i
            and -o options and explicit pathspec), and the message from the
            original commit is used as the starting point, instead of an empty
            message, when no other message is specified from the command line
            via options such as -m, -F, -c, etc. The new commit has the same
            parents and author as the current one
    

    ...

    READ ALL

  • JavaScript优化之惰性载入函数

    在JavaScript中有些内存只需执行一遍即可,如浏览器类型检测是最常用的一个功能,因为我们使用Ajax的时候需要检测浏览器的内置的XHR。我们可以在第一次检测的时候记录下类型,往后在使用Ajax的时候就不需要再去检测浏览器类型了。在JavaScript中就算只有一个if也总比没有if的语句效率要高。

    普通Ajax方法

    /**
     * JS惰性函数
     * 琼台博客 www.qttc.net
     */
     
    function ajax(){
      if(typeof XMLHttpRequest != "undefined"){
        return new XMLHttpRequest();    
      }else if(typeof ActiveXObject != "undefined"){
        if(typeof arguments.callee.activeXString != "string"){
          var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];    
    
          for(var i=0,k=version.length;i<k;i++){
            try{
              new ActiveXObject(versions[i]); 
              arguments.callee.activeXString = versions[i];
              break;
            }catch(ex){
              throw ex;   
            }
          }
        }   
    
        return new ActiveXObject(arguments.callee.activeXString);
      }else{
        throw "No XHR object";  
      }
    }
    

    ...

    READ ALL

  • Nginx启动提示找不到libpcre.so.1解决方法

    启动nginx提示

    error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

    意思是找不到libpcre.so.1这个模块,而导致启动失败。

    经过搜索资料,发现部分Linux系统存有的通病。要解决这个方法非常容易

    如果是32位系统

    [root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib
    

    如果是64位系统

    [root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64
    

    ...

    READ ALL

  • MySQL中应该怎样存储IP地址

    为什么要问如何存储IP

    首先就来阐明一下部分人得反问:为什么要问IP得知怎样存,直接varchar类型不久得了吗?

    其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升。

    利用函数算法处理

    在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少看空间。因为varchar是可变长形,需要多余的一个字节存储长度。另外int型在逻辑运算上要比varchar速度快。

    ...

    READ ALL

  • MySQL中varchar与char类型区别

    在这之前,我虽然知道varchar与char的主要区别是varchar是可变长,char是定长型。但要深入的了解varchar与char的区别却是一片空白,直到读了相关书籍以后才进一步认清两者更深入的一些区别。

    varchar

    保存了可变长度的字符串,是使用较多的字符串类型。它比固定长度类型占用更少的存储空间,因为它只占用了实际需要空间,比较灵活。但如果设置了ROW_FORMAT=FIXED创建的MyISAM引擎表,那么每行占用固定长的空间,就会造成浪费。

    varchar使用额外的1到2字节来存储值得长度。如果列的最大长度小于或等于255,则使用1字节,否则使用2字节。

    ...

    READ ALL

  • JavaScript判断一个值是否在数组中

    在JavaScript中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数。但我们可以写一个类似in_array()函数来判断是一个值否在函数中。

    /**
     * JavaScript判断一个值是否在数组中
     * 琼台博客 www.qttc.net
     */
     
    // 定义一个判断函数
    var in_array = function(arr){
      // 判断参数是不是数组
      var isArr =  arr && console.log(
        typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr 
      );
    
      // 不是数组则抛出异常
      if(!isArr){
        throw "arguments is not Array"; 
      }
    
      // 遍历是否在数组中
      for(var i=0,k=arr.length;i<k;i++){
        if(this==arr[i]){
          return true;    
        }
      }
    
      // 如果不在数组中就会返回false
      return false;
    }
     
    // 给字符串添加原型
    String.prototype.in_array = in_array;
    // 给数字类型添加原型
    Number.prototype.in_array = in_array;
     
    // 声明一个数组
    var arr = Array('blue','red','110','120');
     
    // 字符串测试
    var str = 'red';
    var isInArray = str.in_array(arr);
    console.log(isInArray);  // Output: true
     
    // 数字测试
    var num = 119;
    var isInArray = num.in_array(arr);
    console.log(isInArray);  // Output: false
    

    ...

    READ ALL

  • 360搜索与百度搜索竞争

    前些日子姚晨主演的《搜索》刚火热上映不久,360就正式推出360搜索,虽然刚推出一周的时间,但从数据量来看貌似已对百度构成未知竞争。

    昨天百度知道开始对360网址导航导入的搜索流量做提示,试图引导用户把百度设为首页。360网址导航已经连夜将原本的百度问答搜索替换为360自己的奇虎搜索。

    上周四360推出的综合搜索引发各方关注。昨天起,360自主搜索引擎替换谷歌,成为360网址导航(hao.360.cn)的默认搜索引擎。在一些版本的360浏览器搜索框中,360搜索也已经被设置为默认搜索引擎。

    来自多家网站的数据显示,虽然360搜索刚刚上线几天,但已经显露出强劲的流量增势。科技资讯网站“站长之家”和手机交流社区“安卓论坛”公布的数据显示,360搜索已经成为超过搜狗,成为仅次于百度的第二大流量来源。

    ...

    READ ALL

  • Nginx搭建FLV视频服务器

    FLV视频已经是绝大多数视频网站首选的视频类型,国内外著名的视频分享站YouTube、优酷、土豆、新浪博客、IQIYI等等都是Flash播放器播放FLV/MP4视频。

    FLV有两种发布方式

    • 普通的HTTP方式 这种方式通常需要预先下载到本地才能播放,有缓冲,但下载后就不会占用服务器资源。
    • 流媒体方式 无需下载,可以实时播放任意拖拽进度,用户体验好但很耗服务器资源。

    安装模块

    在编译安装Nginx的时候把Flv Stream模块加上

    ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_flv_module
    make && make install
    

    ...

    READ ALL

  • 小内存VPS服务器Nginx优化

    VPS服务器最重要的性能指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存。所以VPS的内存越大价格就越贵,但目前市面上也有不少小内存VPS服务器,对于PV不多的站点来说正好适合又不浪费。所以在小内存VPS服务器上适当优化Nginx是最好的优化方案。

    只开启一个进程

    Nginx每个进程都要耗费内存,可能有10M至15M左右,小内存就只开一个节省内存

    worker_processes 1;
    

    开启gzip压缩

    对网页文件、CSS、JavaScript等开启gzip压缩,减少数据传输量、减少磁盘I/O、减少内存交换,节省内存提高访问速度。

    ...

    READ ALL

  • 开启Nginx的gzip压缩功能

    Nginx的gzip(GNU-ZIP)是一种压缩技术,经过gzip压缩后页面大小可以比原来的35%甚至更小。

    full

    压缩以后,不仅节省流量,更重要的是提升访问速度。gzip压缩需要浏览器和服务器双方都支持,也就是服务器压缩,浏览器解压。但目前绝大多数的浏览器都已支持gzip类型压缩的解压解析技术,就连被唾弃的IE也都能支持

    开启Nginx的gzip功能需要在nginx.conf配置文件的http{...}加入以下代码:

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    

    ...

    READ ALL