隨筆-204  評論-90  文章-8  trackbacks-0
           

          摘自:http://edu.codepub.com/2009/0929/15909.php
          應用舉例
          (1) 判斷int型變量a是奇數(shù)還是偶數(shù)           
          a&1  = 0 偶數(shù)
                a&1 =  1 奇數(shù)
          (2) 取int型變量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
          (3) 將int型變量a的第k位清0,即a=a&~(1 < <k)
          (4) 將int型變量a的第k位置1, 即a=a ¦(1 < <k)
          (5) int型變量循環(huán)左移k次,即a=a < <k ¦a>>16-k  (設sizeof(int)=16)
          (6) int型變量a循環(huán)右移k次,即a=a>>k ¦a < <16-k  (設sizeof(int)=16)
          (7)整數(shù)的平均值
          對于兩個整數(shù)x,y,如果用 (x+y)/2 求平均值,會產(chǎn)生溢出,因為 x+y 可能會大于INT_MAX,但是我們知道它們的平均值是肯定不會溢出的,我們用如下算法:
          int average(int x, int y)  //返回X,Y 的平均值
          {   
              return (x&y)+((x^y)>>1);
          }
          (8)判斷一個整數(shù)是不是2的冪,對于一個數(shù) x >= 0,判斷他是不是2的冪
          boolean power2(int x)
          {
              return ((x&(x-1))==0)&&(x!=0);
          }
          (9)不用temp交換兩個整數(shù)
          void swap(int x , int y)
          {
              x ^= y;
              y ^= x;
              x ^= y;
          }
          (10)計算絕對值
          int abs( int x )
          {
          int y ;
          y = x >> 31 ;
          return (x^y)-y ;        //or: (x+y)^y
          }
          (11)取模運算轉(zhuǎn)化成位運算 (在不產(chǎn)生溢出的情況下)
                  a % (2^n) 等價于 a & (2^n - 1)
          (12)乘法運算轉(zhuǎn)化成位運算 (在不產(chǎn)生溢出的情況下)
                  a * (2^n) 等價于 a < < n
          (13)除法運算轉(zhuǎn)化成位運算 (在不產(chǎn)生溢出的情況下)
                  a / (2^n) 等價于 a>> n
                  例: 12/8 == 12>>3
          (14) a % 2 等價于 a & 1       
          (15) if (x == a) x= b;
                      else x= a;
                  等價于 x= a ^ b ^ x;
          (16) x 的 相反數(shù) 表示為 (~x+1)


          實例

              功能              ¦          示例            ¦    位運算
          ----------------------+---------------------------+--------------------
          去掉最后一位          ¦ (101101->10110)          ¦ x >> 1
          在最后加一個0        ¦ (101101->1011010)        ¦ x < < 1
          在最后加一個1        ¦ (101101->1011011)        ¦ x < < 1+1
          把最后一位變成1      ¦ (101100->101101)          ¦ x ¦ 1
          把最后一位變成0      ¦ (101101->101100)          ¦ x ¦ 1-1
          最后一位取反          ¦ (101101->101100)          ¦ x ^ 1
          把右數(shù)第k位變成1      ¦ (101001->101101,k=3)      ¦ x ¦ (1 < < (k-1))
          把右數(shù)第k位變成0      ¦ (101101->101001,k=3)      ¦ x & ~ (1 < < (k-1))
          右數(shù)第k位取反        ¦ (101001->101101,k=3)      ¦ x ^ (1 < < (k-1))
          取末三位              ¦ (1101101->101)            ¦ x & 7
          取末k位              ¦ (1101101->1101,k=5)      ¦ x & ((1 < < k)-1)

          取右數(shù)第k位          ¦ (1101101->1,k=4)          ¦ x >> (k-1) & 1

          把末k位變成1          ¦ (101001->101111,k=4)      ¦ x ¦ (1 < < k-1)
          末k位取反            ¦ (101001->100110,k=4)      ¦ x ^ (1 < < k-1)
          把右邊連續(xù)的1變成0    ¦ (100101111->100100000)    ¦ x & (x+1)
          把右起第一個0變成1    ¦ (100101111->100111111)    ¦ x ¦ (x+1)
          把右邊連續(xù)的0變成1    ¦ (11011000->11011111)      ¦ x ¦ (x-1)
          取右邊連續(xù)的1        ¦ (100101111->1111)        ¦ (x ^ (x+1)) >> 1
          去掉右起第一個1的左邊 ¦ (100101000->1000)        ¦ x & (x ^ (x-1))
          判斷奇數(shù)      (x&1)==1
          判斷偶數(shù) (x&1)==0       

          例如求從x位(高)到y(tǒng)位(低)間共有多少個1

          public static int FindChessNum(int x, int y, ushort k)
                  {
                      int re = 0;
                      for (int i = y; i <= x; i++)
                      {
                          re += ((k >> (i - 1)) & 1);
                      }
                      return re;
                  }

          posted @ 2010-10-29 12:21 一凡 閱讀(1473) | 評論 (0)編輯 收藏

          目錄結(jié)構:com/test/JniTest.java

          package : com.test

          javac com/test/JniTest.java

          javah -classpath ./ -jni com.test.JniTest

          在當前目錄下生成:
          com_test_JniTest.h

          posted @ 2010-10-27 12:17 一凡 閱讀(347) | 評論 (0)編輯 收藏

          方法一:

                  進入MySQL安裝目錄 打開MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改為 max_connections=1000 ,服務里重起MySQL即可
                  注意:如果新增max_connections,必須放在mysqld下,如:       

            [mysqld]
            max_connections
          =300

          方法二:
                  登錄至數(shù)據(jù)庫,執(zhí)行以下命令:      

          set GLOBAL max_connections=500;
          show variables 
          like 'max_con%';
          posted @ 2010-09-16 14:08 一凡 閱讀(259) | 評論 (0)編輯 收藏

          需求:廣告按權重展現(xiàn)

          基本算法描述如下:
          1、每個廣告增加權重
          2、將所有匹配廣告的權重相加sum,
          3、以相加結(jié)果為隨機數(shù)的種子,生成1~sum之間的隨機數(shù)rd
          4、.接著遍歷所有廣告,訪問順序可以隨意.將當前節(jié)點的權重值加上前面訪問的各節(jié)點權重值得curWt,判斷curWt >=  rd,如果條件成立則返回當前節(jié)點,如果不是則繼續(xù)累加下一節(jié)點. 直到符合上面的條件,由于rd<=sum 因此一定存在curWt>=rd。
          特別說明:
                  此算法和廣告的順序無關

          測試代碼如下:

          import java.util.ArrayList;
          import java.util.Collections;
          import java.util.Comparator;
          import java.util.LinkedHashMap;
          import java.util.List;
          import java.util.Map;

          public class Test {

              
          /**
               * 
          @param args
               
          */

              @SuppressWarnings(
          "unchecked")
              
          public static void main(String[] args) {
                  
                  List
          <Node> arrNodes = new ArrayList<Node>();
                  Node n 
          = new Node(10"測試1");
                  arrNodes.add(n);
                  n 
          = new Node(20"測試2");
                  arrNodes.add(n);
                  n 
          = new Node(30"測試3");
                  arrNodes.add(n);
                  n 
          = new Node(40"測試4");
                  arrNodes.add(n);
                  
                  
          //Collections.sort(arrNodes, new Node());
                  Map<String, Integer> showMap = null;
                  
          int sum = getSum(arrNodes);
                  
          int random = 0;
                  Node kw 
          = null;
                  
          for(int k = 0; k < 20; k++{
                      showMap 
          = new LinkedHashMap<String, Integer>();
                      
          for(int i = 0; i < 100; i++{
                          random 
          = getRandom(sum);
                          kw 
          = getKW(arrNodes, random);
                          
          if(showMap.containsKey(kw.kw)) {
                              showMap.put(kw.kw, showMap.get(kw.kw) 
          + 1);
                          }
           else {
                              showMap.put(kw.kw, 
          1);
                          }

                          
          //System.out.println(i + " " +random + " " + getKW(arrNodes, random));
                      }

                      System.out.print(k 
          + " ");
                      System.out.println(showMap);
                  }

              }

              
              
          public static Node getKW(List<Node> nodes, int rd) {
                  Node ret 
          = null;
                  
          int curWt = 0;
                  
          for(Node n : nodes){
                      curWt 
          += n.weight;
                      
          if(curWt >= rd) {
                          ret 
          = n;
                          
          break;
                      }

                  }

                  
          return ret;
              }

              
          public static int getSum(List<Node> nodes) {
                  
          int sum = 0;
                  
          for(Node n : nodes)
                      sum 
          += n.weight;
                  
          return sum;
              }

              
          public static int getRandom(int seed) {
                  
          return (int)Math.round(Math.random() * seed);
              }

          }

          class Node implements Comparator{
              
          int weight = 0;
              String kw 
          = "";
              
              
          public Node() {}
              
              
          public Node(int wt, String kw) {
                  
          this.weight = wt;
                  
          this.kw = kw;
              }

              
          public String toString(){
                  StringBuilder sbBuilder 
          = new StringBuilder();
                  sbBuilder.append(
          " weight=").append(weight);
                  sbBuilder.append(
          " kw").append(kw);
                  
          return sbBuilder.toString();
              }

              
          public int compare(Object o1, Object o2) {
                  Node n1 
          = (Node)o1;
                  Node n2 
          = (Node)o2;
                  
          if(n1.weight > n2.weight)
                      
          return 1;
                  
          else 
                      
          return 0;
              }

          }
          posted @ 2010-08-31 17:08 一凡 閱讀(3402) | 評論 (0)編輯 收藏
          #!/bin/bash

          MYSQL_HOME
          ="/home/work/local/mysql5"
          MYSQL_SRC_HOME
          ="mysql-5.1.38"

          cd 
          $MYSQL_SRC_HOME
          make clean
          ./configure \
          --prefix=$MYSQL_HOME \
          --with-tcp-port=3308 \
          --enable-thread-safe-client \
          --enable-local-infile \
          --with-unix-socket-path=$MYSQL_HOME/mysql.sock \
          --with-charset=gbk \
          --with-innodb \
          --with-extra-charsets=gbk,utf8,ascii,big5,latin1 \
          --enable-static \
          --enable-assemble

          make
          make install

          cd 
          $MYSQL_HOME
          cp 
          ./share/mysql/my-huge.cnf ./my.cnf

          ./bin/mysql_install_db
          ./bin/mysqld_safe &

          posted @ 2010-08-30 16:43 一凡 閱讀(244) | 評論 (0)編輯 收藏

          設計與開發(fā)應用服務器(一)------常見模式:http://blog.csdn.net/cutesource/archive/2010/08/02/5783213.aspx

          posted @ 2010-08-30 14:41 一凡 閱讀(167) | 評論 (0)編輯 收藏
          分布式設計與開發(fā)http://www.javaeye.com/topic/748178
          posted @ 2010-08-30 14:40 一凡 閱讀(140) | 評論 (0)編輯 收藏

          構建高性能web之路------mysql讀寫分離實戰(zhàn)


           

          posted @ 2010-08-30 14:33 一凡 閱讀(196) | 評論 (0)編輯 收藏

          摘自:http://hi.baidu.com/zhouqleilo/blog/item/f76297127ed0c9085aaf5330.html

          經(jīng)常使用的正則表達式

          ^                                 行首

          $                                 行尾

          .            任意一個字符

          *            任意多個字符

          \            轉(zhuǎn)義字符

          ^ [ t h e ]                      t h e開頭行

          [ S s ] i g n a [ l L ]              匹配單詞s i g n a ls i g n a LS i g n a lS i g n a L

          [Ss]igna[lL]".                同上,但加一句點

          [ m a y M A Y ]             包含m a y大寫或小寫字母的行

          ^ U S E R $                  只包含U S E R的行

          [tty]$                           t t y結(jié)尾的行

          \ .                                帶句點的行

          ^ d . . x . . x . . x          對用戶、用戶組及其他用戶組成員有可執(zhí)行權限的目錄

          ^ [ ^ l ]                        排除關聯(lián)目錄的目錄列表

          ^[^d]                ls –l | grep ^[^d] 只顯示非文件夾的文件         

          [ . * 0 ]                       0之前或之后加任意字符

          [ 0 0 0 * ]                  0 0 0或更多個

          [ iI]                             大寫或小寫I

          [ i I ] [ n N ]                大寫或小寫in

          [ ^ $ ]                         空行

          [ ^ . * $ ]                     匹配行中任意字符串

          ^ . . . . . . $                  包括6個字符的行

          [a- zA-Z]                     任意單字符

          [ a - z ] [ a - z ] *         至少一個小寫字母

          [ ^ 0 - 9 " $ ]                非數(shù)字或美元標識

          [ ^ 0 - 0 A - Z a - z ]     非數(shù)字或字母

          [ 1 2 3 ]                       13中一個數(shù)字

          [ D d ] e v i c e            單詞d e v i c eD e v i c e

          D e . . c e                    前兩個字母為D e,后跟兩個任意字符, 最后為c e

          " ^ q                            ^ q開始行

          ^ . $                            僅有一個字符的行

          ^".[0-9][0-9]                以一個句點和兩個數(shù)字開始的行

          ' " D e v i c e " '            單詞d e v i c e

          D e [ V v ] i c e \ .               單詞D e v i c ed e v i c e

          ([0-9]{2}/[a-zA-Z]{3}/[0-9]{4})      對 日期格式08/Jun/2010

          ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) I P地址格式

          [ ^ . * $ ]                     匹配任意行

          [A-Za-z]*            匹配所有單詞

          功能說明:查找文件里符合條件的字符串。

          語  法:grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數(shù)>][-B<顯示列數(shù)>][-C<顯示列數(shù)>] [-d<進行動作>][-e<范本樣式>][-f<范本文件>][--help][范本樣式][文件或目錄...]

          補充說明:grep指令用于查找內(nèi)容包含指定的范本樣式的文件,如果發(fā)現(xiàn)某文件的內(nèi)容符合所指定的范本樣式,預設 grep指令會把含有范本樣式的那一列顯示出來。若不指定任何文件名稱,或是所給予的文件名為“-”,則grep指令會從標準輸入設備讀取數(shù)據(jù)。

          參  數(shù):
             -a或--text    不要忽略二進制的數(shù)據(jù)。
             -A<顯示列數(shù)>或--after-context=<顯示列數(shù)>    除了顯示符合范本樣式的那一列之外,并顯示該列之后的內(nèi)容。
             -b或--byte-offset    在顯示符合范本樣式的那一列之前,標示出該列第一個字符的位編號。
             -B<顯示列數(shù)>或--before-context=<顯示列數(shù)>    除了顯示符合范本樣式的那一列之外,并顯示該列之前的內(nèi)容。
             -c或--count    計算符合范本樣式的列數(shù)。
             -C<顯示列數(shù)>或--context=<顯示列數(shù)>或-<顯示列數(shù)>    除了顯示符合范本樣式的那一列之外,并顯示該列之前后的內(nèi)容。
             -d<進行動作>或--directories=<進行動作>    當指定要查找的是目錄而非文件時,必須使用這項參數(shù),否則grep指令將回報信息并停止動作。
             -e<范本樣式>或--regexp=<范本樣式>    指定字符串做為查找文件內(nèi)容的范本樣式。
             -E或--extended-regexp    將范本樣式為延伸的普通表示法來使用。
             -f<范本文件>或--file=<范本文件>    指定范本文件,其內(nèi)容含有一個或多個范本樣式,讓grep查找符合范本條件的文件內(nèi)容,格式為每列一個范本樣式。
             -F或--fixed-regexp    將范本樣式視為固定字符串的列表。
             -G或--basic-regexp    將范本樣式視為普通的表示法來使用。
             -h或--no-filename    在顯示符合范本樣式的那一列之前,不標示該列所屬的文件名稱。
             -H或--with-filename    在顯示符合范本樣式的那一列之前,表示該列所屬的文件名稱。
             -i或--ignore-case    忽略字符大小寫的差別。
             -l或--file-with-matches    列出文件內(nèi)容符合指定的范本樣式的文件名稱。
             -L或--files-without-match    列出文件內(nèi)容不符合指定的范本樣式的文件名稱。
             -n或--line-number    在顯示符合范本樣式的那一列之前,標示出該列的列數(shù)編號。
             -q或--quiet或--silent    不顯示任何信息。
             -r或--recursive    此參數(shù)的效果和指定“-d recurse”參數(shù)相同。
             -s或--no-messages    不顯示錯誤信息。
             -v或--revert-match    反轉(zhuǎn)查找。
             -V或--version    顯示版本信息。
             -w或--word-regexp    只顯示全字符合的列。
             -x或--line-regexp    只顯示全列符合的列。
             -y    此參數(shù)的效果和指定“-i”參數(shù)相同。
             --help    在線幫助。

          posted @ 2010-07-15 19:40 一凡 閱讀(755) | 評論 (0)編輯 收藏
          摘自:http://learn.akae.cn/media/ch03s03.html

          Man Page

          Man Page是Linux開發(fā)最常用的參考手冊,由很多頁面組成,每個頁面描述一個主題,這些頁面被組織成若干個Section。FHS(Filesystem Hierarchy Standard)標準規(guī)定了Man Page各Section的含義如下:

          表 3.1. Man Page的Section

          Section 描述
          1 用戶命令,例如ls(1)
          2 系統(tǒng)調(diào)用,例如_exit(2)
          3 庫函數(shù),例如printf(3)
          4 特殊文件,例如null(4)描述了設備文件/dev/null/dev/zero的作用
          5 系統(tǒng)配置文件的格式,例如passwd(5)描述了系統(tǒng)配置文件/etc/passwd的格式
          6 游戲
          7 其它雜項,例如bash-builtins(7)描述了bash的各種內(nèi)建命令
          8 系統(tǒng)管理命令,例如ifconfig(8)

          注意區(qū)分用戶命令和系統(tǒng)管理命令,用戶命令通常位于/bin/usr/bin目錄,系統(tǒng)管理命令通常位于/sbin/usr/sbin目錄,一般用戶可以執(zhí)行用戶命令,而執(zhí)行系統(tǒng)管理命令經(jīng)常需要root權限。系統(tǒng)調(diào)用和庫函數(shù)的區(qū)別將在第 2 節(jié) “main函數(shù)和啟動例程”說明。

          Man Page中有些頁面有重名,比如敲man printf命令看到的并不是C函數(shù)printf,而是位于第1個Section的系統(tǒng)命令printf,要查看位于第3個Section的printf函數(shù)應該敲man 3 printf,也可以敲man -k printf命令搜索哪些頁面的主題包含printf關鍵字。本書會經(jīng)常出現(xiàn)類似printf(3)這樣的寫法,括號中的3表示Man Page的第3個Section,或者表示“我這里想說的是printf庫函數(shù)而不是printf命令”。

          posted @ 2010-06-21 15:20 一凡 閱讀(410) | 評論 (0)編輯 收藏
          僅列出標題
          共21頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 阿巴嘎旗| 仙桃市| 北碚区| 秭归县| 方正县| 舟曲县| 涞源县| 松滋市| 琼结县| 郸城县| 辽宁省| 福建省| 花垣县| 青海省| 阿合奇县| 九龙城区| 任丘市| 札达县| 黄陵县| 泸水县| 光山县| 古浪县| 仁寿县| 长丰县| 重庆市| 蕲春县| 德清县| 华坪县| 界首市| 镇原县| 宁海县| 新乡县| 淳化县| 陈巴尔虎旗| 南京市| 瑞昌市| 神农架林区| 景宁| 阿坝| 甘孜| 石河子市|