<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評論-26  文章-1  trackbacks-0
     

    本文來自網上,本人只是整理一下,放到這里以備查用。

    1. 特殊變量與常數

    主題詞意義主題詞意義
    ans 計算結果的變量名 computer 確定運行的計算機
    eps 浮點相對精度 Inf 無窮大
    I 虛數單位 inputname 輸入參數名
    NaN 非數 nargin 輸入參數個數
    nargout 輸出參數的數目 pi 圓周率
    nargoutchk 有效的輸出參數數目 realmax 最大正浮點數
    realmin 最小正浮點數 varargin   實際輸入的參量
    varargout 實際返回的參量    

    2. 操作符與特殊字符

    主題詞意義主題詞意義
    + -
    * 矩陣乘法 .* 數組乘(對應元素相乘)
    ^ 矩陣冪 .^ 數組冪(各個元素求冪)
    \ 左除或反斜杠 / 右除或斜面杠
    ./ 數組除(對應元素除) kron Kronecker張量積
    : 冒號 () 圓括號
    [] 方括 . 小數點
    .. 父目錄 ... 繼續,下一行接著上一行
    , 逗號(分割多條命令) ; 分號(禁止結果顯示),矩陣行分割
    % 注釋 ! 感嘆號
    ' 轉置或引用 = 賦值
    == 相等 <>或~= 不等于
    & 邏輯與 | 邏輯或
      ~ 邏輯非 xor 邏輯異或

             3、基本數學函數

    主題詞意義主題詞意義
    abs 絕對值和復數模長 acos,acosh 反余弦,反雙曲余弦
    acot,acoth 反余切,反雙曲余切 acsc,acsch 反余割,反雙曲余割
    angle 復數z的相角(Phase angle) asec,asech 反正割,反雙曲正割
    secant 正切 asin,asinh 反正弦,反雙曲正弦
    atan,atanh 反正切,雙曲正切 tangent 正切
    atan2 四象限反正切 ceil 向著無窮大舍入
    complex   建立一個復數 conj 復數z的共軛復數
    cos,cosh

    余弦,雙曲余弦

    csc,csch 余切,雙曲余切
    cot,coth

    余切,雙曲余切

    exp 指數
    fix 朝0方向取整  gcd 最大公因數
    lcm 最小公倍數 log 自然對數
    log2 以2為底的對數 log10 常用對數
    mod   有符號的求余 nchoosek

    二項式系數和全部組合數

    real 復數的實部 imag 復數值的虛部
    rem 相除后求余 round 取整為最近的整數
    sec,sech 正割,雙曲正割 sign 符號數
    sin,sinh 正弦,雙曲正弦 sqrt 平方根
    tan,tanh 正切,雙曲正切 floor 朝負無窮取整

           4、基本矩陣和矩陣操作

    主題詞意義主題詞意義
    blkding 從輸入參量建立塊對角矩陣 eye 單位矩陣
      linespace 產生線性間隔的向量 logspace

    產生對數間隔的向量

    numel 元素個數 cat 連接數組
    zeros 建立一個全0矩陣 colon 等間隔向量
    ones   產生全為1的數組 rand 均勻頒隨機數和數組
    randn 正態分布隨機數和數組 diag 對角矩陣和矩陣對角線
    fliplr 從左自右翻轉矩陣 flipud 從上到下翻轉矩陣
    repmat 復制一個數組 reshape 改造矩陣
    roy90 矩陣翻轉90度 tril 矩陣的下三角
    triu

    矩陣的上三角

    dot 向量點集
    cross 向量叉集 ismember 檢測一個集合的元素
    intersect 向量的交集 setxor 向量異或集
    setdiff 向是的差集 union 向量的并集

        5.數值分析和傅立葉變換

    主題詞意義主題詞意義
    cumprod 累積 cumsum 累加
    cumtrapz 累計梯形法計算數值微分 factor 質因子
    inpolygon 刪除多邊形區域內的點 max 最大值
    mean 數組的均值 mediam 中值
    min 最小值 perms 所有可能的轉換
    polyarea 多邊形區域 primes 生成質數列表
    prod 數組元素的乘積 rectint 矩形交集區域
    sort 按升序排列矩陣元素 sortrows 按升序排列行
      std 標準偏差   var

    方差

    sum 求和 trapz 梯形數值積分
    del2 離散拉普拉斯 diff 差值和微分估計
    gradient 數值梯度 cov 協方差矩陣
    corrcoef 相關系數 conv2 二維卷積
       conv 卷積和多項式乘法 deconv 反卷積和多項式除法
    filter IIR或FIR濾波器 filter2 二維數字濾波器
    cplxpair 將復數值分類為共軛對 fft 一維的快速傅立葉變換
    fft2 二維快速傅立葉變換 fftshift 將FFT的DC分量移到頻譜中心
    ifft 一維快速反傅立葉變換
    ifft2 二維傅立葉反變換
    ifftn 多維快速傅立葉變換 ifftshift

       反FFT偏移

    nextpow2 最靠近的2的冪次 unwrap 校正相位角

     6.多項式與插值

    主題詞意義主題詞意義
    conv

    卷積和多項式乘法

    roots 多項式的根
      poly 具有設定根的多項式 polyder 多項式微分
    polyeig 多項式的特征根 polyfit 多項式擬合
    polyint 解析多項式積分 polyval 多項式求值
    polyvalm   矩陣變量多項式求值 residue 部分分式展開
    interp1 一維插值 interp2 二維插值
    interp3 三維插值 interpft 使用FFT的一維插值
    interpn 多維插值 meshgrid 為3維點生成x和y的網格
    ndgrid 生成多維函數和插值的數組
    pchip 分段3次Hermite插值多項式
    ppval 分段多項式的值 spline 3次樣條數據插值

               
     7.繪圖函數

    主題詞意義主題詞意義
    bar 豎直條圖 barh 水平條圖
    hist 直方圖 histc 直方圖計數
    hold 保持當前圖形 loglog x,y 對數坐標圖
    pie 餅狀圖 plot 繪二維圖
    polar

    極坐標圖

    semilogy y軸對數坐標圖
    semilogx x軸對數坐標 subplot 繪制子圖
    bar3 數值3D豎條圖 bar3h 水平3D條形圖
    comet3 3D慧星圖 cylinder   圓柱體
    fill3 填充的3D多邊形 plot3 3維空間繪圖
    quiver3 3D震動(速度)圖 slice 體積薄片圖
    sphere stem3 繪制離散表面數據
    waterfall 繪制瀑布 trisurf 三角表面
    clabel 增加輪廓標簽到等高線圖中   datetick 數據格式標記
    grid 加網格線 gtext 用鼠標將文本放在2D圖中
    legend 圖注   plotyy 左右邊都繪Y軸
    title 標題 xlabel X軸標簽
    ylabel   Y軸標簽   zlabel Z軸標簽
    contour 等高線圖 contourc 等高線計算
    contourf 填充的等高線圖 hidden 網格線消影
    meshc 連接網格/等高線 mesh 具有參考軸的3D網格
    peaks 具有兩個變量的采樣函數 surf 3D陰影表面圖
    surface 建立表面低層對象 surfc 海浪和等高線的結合
    surfl 具有光照的3D陰影表面 trimesh 三角網格圖
    http://www.cnblogs.com/gtts/archive/2011/05/20/2052271.html
    posted @ 2015-08-22 11:11 華夢行 閱讀(171) | 評論 (0)編輯 收藏
    將DocumentRoot設在/var/www/html下可以訪問
    但是將DocumentRoot設在其他目錄(如:/webroot)下就出現Forbidden了。在./etc/httpd/conf/httpd.conf中的相關部分是這樣的:
    Alias /query "/home/query"

    Options Indexes MultiViews
    AllowOverride None

    Order allow,deny
    Allow from all

    但是在瀏覽器中輸入:http://localhost/query/ 時,出現Forbidden:

    Forbidden

    You don't have permission to access /query on this server.

    Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
    Apache/2.0.52 (Red Hat) Server at localhost Port 80


    對于剛使用Redhat Enterprise Linux4 或Fedora Core 2以上/CentOS 4的用戶,一定會為Apache經常無法正常運轉,報以"Permission denied"等錯誤而大為不解,甚至大為惱火。

    其實這是因為這些系統里激活了SELinux,而用戶的apache配置與SELinux的配置策略有抵觸產生的,只有通過適當調整,使apache的配置和訪問符合策略才能正常使用。

    現在下面來分析一下SELinux中有關httpd(apache)的context定義(略有刪節)

    /home/[^/]+/((www)|(web)|(public_html))(/.+)? system_u:object_r:httpd_user_content_t
    /var/www(/.*)? system_u:object_r:httpd_sys_content_t
    /var/www/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
    /usr/lib/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
    /var/www/perl(/.*)? system_u:object_r:httpd_sys_script_exec_t
    /var/www/icons(/.*)? system_u:object_r:httpd_sys_content_t
    /var/cache/httpd(/.*)? system_u:object_r:httpd_cache_t
    /etc/vhosts -- system_u:object_r:httpd_config_t
    /usr/sbin/httpd -- system_u:object_r:httpd_exec_t
    /usr/sbin/apache(2)? -- system_u:object_r:httpd_exec_t
    /usr/sbin/suexec -- system_u:object_r:httpd_suexec_exec_t
    /var/log/httpd(/.*)? system_u:object_r:httpd_log_t
    /var/log/apache(2)?(/.*)? system_u:object_r:httpd_log_t
    /var/log/cgiwrap.log.* -- system_u:object_r:httpd_log_t
    /var/cache/ssl.*.sem -- system_u:object_r:httpd_cache_t
    /var/cache/mod_ssl(/.*)? system_u:object_r:httpd_cache_t
    /var/run/apache(2)?.pid.* -- system_u:object_r:httpd_var_run_t
    /var/lib/httpd(/.*)? system_u:object_r:httpd_var_lib_t
    /var/lib/php/session(/.*)? system_u:object_r:httpd_var_run_t
    /etc/apache-ssl(2)?(/.*)? system_u:object_r:httpd_config_t
    /usr/lib/apache-ssl(/.*)? -- system_u:object_r:httpd_exec_t
    /usr/sbin/apache-ssl(2)? -- system_u:object_r:httpd_exec_t
    /var/log/apache-ssl(2)?(/.*)? system_u:object_r:httpd_log_t
    /var/run/apache-ssl(2)?.pid.* -- system_u:object_r:httpd_var_run_t
    /var/run/gcache_port -s system_u:object_r:httpd_var_run_t
    /var/lib/squirrelmail/prefs(/.*)? system_u:object_r:httpd_squirrelmail_t
    /usr/bin/htsslpass -- system_u:object_r:httpd_helper_exec_t
    /usr/share/htdig(/.*)? system_u:object_r:httpd_sys_content_t
    /var/lib/htdig(/.*)? system_u:object_r:httpd_sys_content_t

    針對上述的內容,可以對如下的幾個常見問題進行簡單處理:

    1.phpmyadmin在非默認/var/www/html目錄下無法運轉
    通常類似的情況都是在配置了虛擬主機時,訪問/phpmyadmin等提示403訪問拒絕,日志里也提示Permission denied,這是因為phpmyadmin防止的目錄及文件本身屬性不符合context要求。

    假設phpmyadmin放在/web目錄下,那么執行:

    chcon -R -t httpd_user_content_t /web

    則會令/web及其下所有子目錄/文件,包括phpmyadmin文件都獲得了httpd_user_content_t的屬性,如果其傳統的Unix屬性對httpd來說是可讀的話,再重新訪問一下就應該可以了。

    2./home目錄下的虛擬主機無法運轉
    與問題1也是類似的,不過根據上文中context的定義,/home目錄下必須是用戶的$HOME/www或public_html或web目錄才是 httpd_user_content_t類型,因此建議將要作為web頁面的內容放置在用戶的$HOME/www或web或public_html里,并確保其屬性是httpd_user_content_t,使用如下命令查看:

    ls -Z /home/abc/
    drwxr-xr-x abc abc user_u:object_r:user_home_dir_t tmp
    drwxrwxr-x abc abc user_u:object_r:httpd_user_content www

    如不是,則可通過chcon來逐級目錄及文件更改,直至最后能訪問:

    chcon -R -t httpd_user_content_t /home/abc/web
    chcon -t user_home_dir_t /home/abc

    3.CGI程序無法運行
    如果cgi程序放在/var/www/cgi-bin/里也無法執行,遇到403或500錯誤的話,可以檢查cgi 程序的屬性,按SELinux contexts文件里定義的,/var/www/cgi-bin/里必須是httpd_sys_script_exec_t 屬性。通過ls -Z查看,如果不是則通過如下命令更改:

    chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi

    如果是虛擬主機里的cgi,則參考問題2使之能正常使用普通的功能后,再通過chcon設置cgi文件的context為httpd_sys_script_exec_t即可。

    4.Setuid/gid 程序無法運行
    例如早期的SqWebMail及qmailadmin等,需要setuid/gid的支持,但在SELinux下這將受到嚴格限制。第一種方法是比較徹底的辦法,能保留系統的安全性,通過:

    audit2allow -l -i /var/log/messages

    將SELinux拒絕的信息轉換為相應的policy allow指令,將這些指令添加到SELinux policy 的src里相應的配置文件,重新生成policy并加載。但這樣做相對比較麻煩。

    另一個方法最簡單,但將使apache得不到保護。首先確定SELinux 類型是targeted的:

    cat /etc/selinux/config|grep SELINUXTYPE

    然后,使apache脫離SELinux保護:

    setsebool -P httpd_disable_trans 1

    然后重啟動apache:

    /etc/init.d/httpd restart

    這樣所有apache強制的檢查都失效,需要setuid/gid的程序可以正常使用。但這樣帶來了增加漏洞的危險,對于迫切需要運行而又很急的情況,本方法是一個最大限度減少系統安全缺失的最后辦法。對于取消SELinux 未必是一個好方法。
    posted @ 2015-08-15 00:21 華夢行 閱讀(378) | 評論 (0)編輯 收藏
    掛載好新硬盤后輸入fdisk -l命令看當前磁盤信息
    可以看到除了當前的第一塊硬盤外還有一塊sdb的第二塊硬盤,然后用fdisk /dev/sdb 進行分區
    進入fdisk命令,輸入h可以看到該命令的幫助,按n進行分區
    這里輸入e即分為邏輯分區,按p即分為主分區,我們要將這塊盤分為主分區即輸入p
    到這里輸入該主分區為第幾個主分區,由于是新盤我們輸入1來分第一個主分區
    First Cylinder是選擇該分區的起始磁盤數,這里可自定義也可不做選擇,默認是1,如無特殊需求強烈建議選擇默認,也就是1來分區(直接按回車)
    接下來是定義該分區的大小,如果按默認(按回車)即是使用全部可用存儲額,也可以是用M或m單位結尾的數字(大寫M是大B的意思,如果輸入1M實際上是X8也就是8m的空間),這里我們先分一個1G的空間,所以輸入+1024m
    之后輸入w寫入分區,等待結束皆可
    再輸入fdisk -l 可以看到我們剛才分的一個分區,之后用mkfs -t ext3 -c /dev/sdb1進行格式化,如有多個分區可把sdb1改成sdb2 sdb3...以此類推,具體可用fdisk -l看到每個分區的名字
    上圖藍色部分是寫硬盤卷標的,如不想要卷標可直接按回車,現在分區好了我們用mount 掛載一下該分區即可使用了,這里我把它掛載到mnt目錄下,也可以自建一個目錄掛載
    來看一下分區大小是否和預定的一樣,使用df -TH命令看一下當前掛載的分區和大小,看到我們剛分的分區了吧
    如果想每次系統重啟都能自動掛載該分區可修改/etc/fstab文件,在最后加一段 /dev/sdb1    /www    ext3    defaults 1 2 (格式說明:/dev/sdb1 代表哪個分區  ext3是該分區的格式 defaults 是掛載時所要設定的參數(只讀,讀寫,啟用quota等),輸入defaults包括的參數有(rw、dev、exec、auto、nouser、async) ,1是使用dump是否要記錄,0是不要。 2是開機時檢查的順序,是boot系統文件就為1,其他文件系統都為2,如不要檢查就為0)
    posted @ 2015-08-14 19:04 華夢行 閱讀(119) | 評論 (0)編輯 收藏

    Centos 

    辛辛苦苦編譯安裝完Ngnix,mysql ,PHP,后發現不能訪問,后來發現是防火墻把80端口給禁用了。開啟之:(以下參考自:http://llhdf.javaeye.com/blog/526176)

     
    #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 
    #/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 
     
    然后保存: 
    #/etc/rc.d/init.d/iptables save 
     
    再查看是否已經有了: 
    [root@vcentos ~]# /etc/init.d/iptables status 
    Table: filter 
    Chain INPUT (policy ACCEPT) 
    num  target     prot opt source               destination         
    1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:80 
    2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
    3    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0           
     
    Chain FORWARD (policy ACCEPT) 
    num  target     prot opt source               destination         
    1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
    二.重啟電腦。
     
    1.CentOS操作系統防火墻默認已經開放了80和22端口
     
    2.這里應該也可以不重啟計算機:
    #/etc/init.d/iptables restart
    防火墻的關閉,關閉其服務即可:
     
    3.查看防火墻信息:
    #/etc/init.d/iptables status
     
    4.關閉防火墻服務:
    #/etc/init.d/iptables stop
     
    三.永久關閉防火墻
     
    我們也可以永久的關閉防火墻,但是我不建議大家這樣做.永久關閉防火墻可以這樣:
    #chkconfig –level 35 iptables off
    也可以直接修改
    /etc/sysconfig/iptables
    添加一條
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    posted @ 2015-08-14 19:02 華夢行 閱讀(436) | 評論 (0)編輯 收藏
    今天我們這篇php的技術文章主要為各位朋友們介紹如何使用yum進行安裝php的5.4或者5.5版本。當然我們使用centos6.5作為我們的測試機器。其實非常簡單,只要下面的兩個命令就可以輕松的進行安裝php的5.4版本了。


    yum remove php php-bcmath php-cli php-common php-devel php-fpm php-gd php-imap php-ldap php-mbstring php-mcrypt php-mysql php-odbc php-pdo php-pear php-pecl-igbinary php-xml php-xmlrpc

    rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

    yum install php54w php54w-bcmath php54w-cli php54w-common php54w-devel php54w-fpm php54w-gd php54w-imap php54w-ldap php54w-mbstring php54w-mcrypt php54w-mysql php54w-odbc php54w-pdo php54w-pear php54w-pecl-igbinary php54w-xml php54w-xmlrpc php54w-opcache php54w-intl php54w-pecl-memcache


    當然擴展的話,可以根據你自己的需要進行添加或者刪除哦,至于說php5.5的安裝,跟php5.4的安裝還是大同小異的哦。

    yum remove php php-bcmath php-cli php-common php-devel php-fpm php-gd php-imap php-ldap php-mbstring php-mcrypt php-mysql php-odbc php-pdo php-pear php-pecl-igbinary php-xml php-xmlrpc

    rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

    yum install php55w php55w-bcmath php55w-cli php55w-common php55w-devel php55w-fpm php55w-gd php55w-imap php55w-ldap php55w-mbstring php55w-mcrypt php55w-mysql php55w-odbc php55w-pdo php55w-pear php55w-pecl-igbinary php55w-xml php55w-xmlrpc php55w-opcache php55w-intl php55w-pecl-memcache
    posted @ 2015-07-30 14:53 華夢行 閱讀(188) | 評論 (0)編輯 收藏
    遇到頁面顯示空白很有可能的一種原因就是編碼不正確                  
    posted @ 2012-09-07 09:23 華夢行 閱讀(215) | 評論 (0)編輯 收藏
    var main_frame:damain=Application.application as damain;var main_frame:damain=Application.application as damain;
    posted @ 2010-09-02 11:43 華夢行 閱讀(220) | 評論 (0)編輯 收藏
    寫給c/c++的新同行門,CTO門把你們的寶貴經驗拿出來吧,讓這個帖對大伙有用

    1、越界

     越界是最難查的,注意memcpy strcpy,strncpy這些函數使用前一定要檢查邊界

     特別是你提供函數給別人用時,你的函數中用到了這些東西,一定要檢查別人傳給你的指針的
     邊界

    2、變量初始化

     這種問題要養成好習慣,否則出來偶然性問題,非常難查

    3、多線程指針管理

     在多線程環境下使用指針時,最好采用引用計數,讓最后一個放充引用計數時,指針刪除,避免一個線程在使用指針,另外線程刪除掉

    4、多線程鎖的管理

     多線程鎖要粒度要適中,盡量減少 一個函數 進入多個鎖,避免一個大函數一個大鎖影響性能,可學習數據庫的表級,行級鎖

     盡量不要在回調函數中放鎖,易 引起死鎖

    做到線程安全函數單向調用,上層往下層調用,下屋向上層采用事件驅動反饋,避免調用棧

     過深,易引起死鎖 
    ,
    5、多線程對象生存期管理

     盡量當多線程共享對象 盡量不要直接刪除,建議采用狀態機形式來管理,其它線程設置狀態

     由一個線程統一按狀態管理生存期

    6、構造函數

    函造函數中不要放虛函數,絕對不要在構造函數中開線程,并且線程調用自己的成員

    7、內聯
     
      虛函數不要內聯

    8、多線程創建辦法

    如果用C運行庫函數,要注意用C運行庫的方法

    9,內存管理

    建議采用內存池管理

    10、線程生存期管理

    線程中盡量不要調用同步函數,不要強行殺線程,要讓線程不斷循環,等待死亡信號自己退出

    posted @ 2010-05-08 19:30 華夢行 閱讀(231) | 評論 (0)編輯 收藏
     int  **p1;  //指向指針的指針
        int  *p2;    //指向指針的變量  其中所存儲的值為變量的地址,或者變量的地址的地址
        int  i=3;
        p2=&i;
        p1=&p2;
     printf("Hello World!\n"); 
     printf("%d\n",i);  //3
     printf("%d\n",**p1); //3
     printf("%d\n",*p2); //3
     printf("%d\n",&i);  //1245044
     printf("%d\n",*p1);  //1245044
     printf("%d\n",p2);   //1245044
     printf("%d\n",p1);   //1245048
     printf("%d\n",&p2);  //1245048
     printf("%d\n",&p1);  //1245052
     return 0;
    posted @ 2010-03-08 11:07 華夢行 閱讀(228) | 評論 (0)編輯 收藏

    架構設計是一個非常大的話題,不管寫幾篇文章,接觸到的始終只是冰山一角,更多的是實踐中去體會。這篇文章主要介紹面向對象OO、面向方面AOP和面向服務SOA這三個要素在架構設計中的位置與作用。

    架構設計有三個維度,或者說是我們在考慮架構時需要思考三個方向。

    這三個維度分別為面向對象、面向方面、面向服務。

    這三個維度可以看作是正交的,但不同維度會互相印證,互相支撐,整個架構的示意圖如圖所示。

    軟件架構設計的三個維度
    圖:架構三維度結構圖

    面向對象

    面向對象技術最初是從面向對象的程序設計開始的,它的出現以上世紀60年代Simula語言為標志,并在Smalltalk語言的完善和標準化過程中得到更多的擴展和對以前思想的重新注解。

    上世紀80年代中后期,面向對象程序設計逐漸成熟,被計算機界理解和接受,人們又開始進一步考慮面向對象的開發問題。直到現在,面向對象已經成為一種非常流行的編程方式,以及軟件設計的架構。

    面向對象提出有三個主要目標:重用性、靈活性和擴展性,強調對象的“抽象”、“封裝”、“繼承”和“多態”。它能讓人們以更加接近于現實世界的方式來思考程序,這點可以說是面向對象最大的進步。

    在OO思想的運用上,業界出現了很多好的經驗與技巧,從而涌現出大量的設計模式,可以說面向對象是系統分析與設計時的一個很重要的方面。

    面向方面

    面向方面最初來源于hook技術,本質上就是滿足擴展的需求,可以在程序中自由擴展功能。

    面向方面不僅僅是一門編程技術,同樣也是一種架構設計的思路。如果說OO是縱向地分析、切割整個系統,那么可以認為AOP是橫向地對系統作切片。

    簡單地理解,OO與AOP分別從兩個不同的角度給我們提供了分析系統的思路。面向方面可以彌補面向對象的缺陷,兩種方式有機的結合在一起,可以更加有效地對系統進行分析。

    我們認為OO是接近于人類認識自然的思維方式,但對于東方而言卻并不一定是這樣的。

    當西方人看到一個復雜系統的時候,只會有一種思路,就是“分解”,將系統分解成一塊一塊,然后每個部分進行研究。

    當東方人看到一個復雜系統的時候,更多地會關注系統中存在的關系,將系統作為一個有機的整體進行研究,這也是東方和西方在事物看法上存在的差異。

    這兩種思維方式都沒有問題,如果結合起來分析問題,解決問題會更好。面向對象與面向方面也同樣如此,都能對應到人類認識自然的思維方式上。

    面向服務

    面向服務可以說是最近炒得比較火熱的概念。包括現在提到的SaaS(Software as a service),軟件即服務。準確而言,面向服務不僅僅是軟件行業的概念,這個要從社會的產業結構說起。

    社會產業總共分為三個,第一產業農業,第二產業工業,第三產業服務業。最早社會的主要產業是第一產業農業,將近有幾萬年的歷史。

    十八世紀下半葉在英國開始的工業革命,對人們的生活產生了根本性的影響,社會的主要產業成了第二產業工業。

    現在仍然屬于工業時代,或者有人說的“后工業時代”。而在后工業時代,社會的經濟體制必定要向第三產業服務業逐漸轉型。面向服務其實是社會經濟體制重心的一種遷移。

    還是說回到軟件行業,社會的主要產業將轉變成服務業,自然軟件行業也會出現對應的變化,那就是這里提到的面向服務。面向服務今后會影響到軟件的交付模式,會對整個軟件行業的體制產生影響。

    而說到架構層面,面向服務是系統發布功能的一種方式。并且基于這種方式下不同的系統之間能有效地通信、協作。常見的實現技術就是Web Service。

    軟件全局觀

    軟件架構設計的三個維度:面向對象、面向方面、面向服務。

    最年長的一個維度就是面向對象,發展了好幾十年,也是相對而言比較成熟的一個維度。它解決的問題是系統內部結構的設計。

    面向方面思想的提出能夠彌補面向對象的缺陷。面向對象的方式不能實現橫切關注點的分離,而面向方面正是為了解決這個問題。面向方面與面向對象一樣都是解決系統內部結構的設計。

    面向服務更多的是涉及到系統的外部,簡單地說就是發布功能。它并不關注系統內部結構的實現,所以說面向服務與面向對象或者面向方面并不沖突。

    這三個維度并不是絕對孤立的,它們之間會互相影響、制約,相互發展的。我們在分析架構的時候需要同時考慮到這三個維度的問題,這樣有助于我們設計出更加優秀的架構。

    posted @ 2010-02-04 16:34 華夢行 閱讀(265) | 評論 (0)編輯 收藏
        if(!/^[a-zA-Z0-9]{6,15}$/.test($('oldpwd').value)){  正則,6-15 位的字母或者數字

    (^$)|(^\w{5,11}$)   為空或者 5-10為字符
    posted @ 2010-02-04 11:24 華夢行 閱讀(218) | 評論 (0)編輯 收藏

    十幾年軟件研發的滄桑歲月,和一度險瀕于破產的痛苦經歷,讓俺對軟件產品開發有了更深層的體會。新年到來之際,寫出來和大家作個交流。

    一、農業境界

      剛參加工作,朋友問我,你能用電腦干啥?我口出狂言,只要你想得出來的,我都能做得到。其實,我說這話相當無知。

      柏拉圖曾經說過,人的知識猶如一個圓,圓內是你已經知道的,圓外是你還不知道的,圓周就是你已經知道的還沒解決的問題。你的知識越豐富,這個圓就越大,圓的周長也越長,也就是你知道的沒解決的問題也越多。

      如果你覺得自己沒有啥問題,就說明你很無知。

      無數年輕人就是憑自己的熱情,初生牛犢不怕虎的沖勁,在完全沒有經驗和章法的情況下,投入了不會取得勝利的第一場戰斗。通俗一點講,就是試圖用壘狗窩的技術建高樓大廈。

      企業在這個階段,充其量就是個手工作坊。有人說,我的研發團隊上百號人呢。對不起,您是否出于這個階段和企業人數沒多大關系。

    二、工業境界

      了解到軟件產品設計研發是一個復雜的系統工程,很多人會嘗試運用一些必要的技術把復雜系統分解成簡單子系統。在這個階段,一些軟件工程理論開始逐步被吸收。這包括:

      面向對象的設計思想

      UML、RUP、XP編程、設計模式等軟件工程理論和工具

      組件化系統設計——COM、DCOM、ActiveX、Corba、WebServices等技術開始進入產品設計

      簡單地講,已經知道如何把高樓大廈拆解成多個狗窩,化繁為簡;已經懂得遵循軟件工業標準開發能重用的系統組件。

      很多人以為已經到達軟件研發的終點,掌握了終極的技術手段。然而,這只是軟件產品研發的啟蒙階段,隨著發現更多并解決深層次的問題,你需要更有效的理論提升你對軟件產品開發的駕馭能力。

    三、數學境界

      工業化境界提供了化繁為簡的技術支撐和思路,但是,好的工具并不能保證出現正確的設計。

      我們學習解一元二次方程的時候,什么十字相乘法、配方法等等,開始會學習很多技巧性的解法。這類似工業化境界——讓你把復雜問題分解轉化成更簡單的問題。但是,這些技巧不總是有效,最終的解決方案還是推導出求解公式,徹底解決此類問題。

      軟件產品設計是否存在從需求到代碼的求解公式呢?這是一個已經被研究半個世紀的課題了,可惜國內99%的軟件研發人員并不了解這方面的進展。等到洋人的堅船利炮打到你家門口的時候,你才發現人家用這么好的技術武裝自己,那就為時太晚了。

      在這個階段,你會用數學方法保障軟件系統設計的正確性。你可能會把下面這些理論引入你的設計過程:

      在系統設計中自覺運行有限狀態機、Petri網等數學模型去設計、分析系統結構。

      引進諸如凈室技術、B方法、Z語言等形式化軟件工程技術,確保系統設計的正確性。

      最后你會發現,軟件產品設計真正是一件嚴格科學過程,如果以山野村夫的心態做這件事情,最終必然一塌糊涂。

    四、藝術境界

      人本質上是非理性的動物,我們為人類設計產品的最終目標不是為了正確,因此,數學境界并未把你帶到最終目的地。

      人類還沒解決溫飽問題的時候,就學會了在巖石上涂鴉,在脖子上掛項鏈,為人類設計產品,得滿足他們這些貌似毫無價值的癖好。

      因此,在能熟練駕馭正確設計產品的技能之后,軟件產品設計將為藝術而戰——我們不是在替客戶設計干活的工具,相反,我們是在為他們設計一個吸引眼球的超級玩具,一件藝術品。

      軟件產品設計師——你不僅僅是工程師,更進一步,你應該是一名駕馭高科技技術的藝術家!

    五、宗教境界

      阿克毛被槍斃了,他不是為科學而來,亦不是為藝術而來,而是為奪取我們的心靈而來!

      之所以被槍斃,是因為他采取了文明社會不認可的手段和產品——海洛因。

      異曲同工,軟件產品設計的最高境界亦是征服客戶的心靈,讓客戶像崇拜上帝一樣被您的軟件所征服。似乎除了海洛因,能做到這一點的就是宗教了。

      看看IBM、看看微軟、看看Intel、看看蘋果,這些超級商業巨人,為了讓你把口袋的錢老老實實地掏出來,是不是一個個儼然一副布道者的模樣?

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/quicmous/archive/2010/01/03/5125373.aspx

    posted @ 2010-01-23 09:33 華夢行 閱讀(260) | 評論 (0)編輯 收藏

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.URLDecoder;
    import java.util.StringTokenizer;

    /*
    用Java語言實現HTTP服務器,首先啟動一個java.net.ServerSocket在提供服務的端口上監聽連接.向客戶返回文本時,可以用
    PrintWriter,但是如果返回二進制數據,則必須使用OutputStream.write(byte[])方法,返回的應答消息字符串可以使用
    String.getBytes()方法轉換為字節數組返回,或者使用PrintStream的print()方法寫入文本,用
    write(byte[])方法寫入二進制數據.

    以工程所在目錄為web的根目錄。 在工程的根目錄下放一個大概如下的index.html

    <!DOCTYPE html PUBLIC "-//WDTD HTML  Transitional//EN"
     * "http://www.wg/TR/htmlose.dtd"> <html> <head> <meta
     * http-equiv="Content-Type" content="text/html; charset=gbk">
     * <title>簡單的測試</title> </head> <body> 你好!這是一個 簡單的web服務器。<br>
     * 這是一個圖片!br>
     *
     * <form action="/index.html"> <img alt="" src="images/test.gif"><br>
     * 姓名:<input type="text" name="name" /><br>
     * 密碼:<input type="password" name="pass"></input><br>
     * <input type="submit"/> </form> </body> </html>
     *
     * 放入圖片位置: 工程根目錄/images/test.gif <br>
     * 打開瀏覽器輸入http://localhost/index.html 可以展示index.html
     *
     * @author guazi
     */
    public class SimpleHttpServer implements Runnable {

        ServerSocket serverSocket;// 服務器Socket
        /**
         * 服務器監聽端口, 默認為
         */
        public static int PORT = 81; // 標準HTTP端口

        /**
         * 開始服務器 Socket 線程.
         */
        public SimpleHttpServer() {
            try {
                serverSocket = new ServerSocket(PORT);
            } catch (Exception e) {
                System.out.println("無法啟動HTTP服務器:" + e.getMessage());
            }
            if (serverSocket == null) {
                System.exit(0);
            }

            new Thread(this).start();
            System.out.println("HTTP服務器正在運行,端口:" + PORT);
        }

        /**
         * 運行服務器主線程, 監聽客戶端請求并返回響應.
         */
        public void run() {
            while (true) {
                try {
                    Socket client = null;// 客戶Socket
                    client = serverSocket.accept();// 客戶機(這里是 IE 等瀏覽器)已經連接到當前服務器
                    if (client != null) {
                        System.out.println("連接到服務器的用戶:" + client);
                        try {
                            // 第一階段: 打開輸入流
                            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

                            System.out.println("客戶端發送的請求信息: ***************");
                            // 讀取第一行, 請求地址
                            System.out.println("http協議頭部信息:");

                            String line = in.readLine();
                            System.out.println("開始:"+line+"結束");
                            String resource = line.substring(line.indexOf('/'), line.lastIndexOf('/') - 5);
                            // 獲得請求的資源的地址
                            resource = URLDecoder.decode(resource, "gbk");// 反編碼

                            String method = new StringTokenizer(line).nextElement().toString();// 獲取請求方法, GET 或者 POST

                            // 讀取瀏覽器發送過來的請求參數頭部信息
                            while ((line = in.readLine()) != null) {
                                System.out.println(line);

                                if (line.equals("")) {
                                    break;
                                }
                            }

                            System.out.println("http協議頭部結束 ***************");
                            System.out.println("用戶請求的資源是:" + resource);
                            System.out.println("請求的類型是: " + method);

                            String params = null;

                            if (resource.indexOf("?") > -1) {
                                params = resource.substring(resource.indexOf("?") + 1);
                                resource = resource.substring(0, resource.indexOf("?"));
                            }

                            // 顯示 POST 表單提交的內容, 這個內容位于請求的主體部分
                            if ("POST".equalsIgnoreCase(method)) {
                                if (params != null) {
                                    params += "&" + in.readLine();
                                } else {
                                    params = in.readLine();
                                }
                            }

                            System.out.println("打印提交的數據:");
                            printParams(params);

                            // 讀取資源并返回給客戶端
                            fileReaderAndReturn(resource, client);
                            // 關閉客戶端鏈接
                            client.close();
                            System.out.println("客戶端返回完成!");
                        } catch (Exception e) {
                            System.out.println("HTTP服務器錯誤:" + e.getMessage());
                        }
                    }

                } catch (Exception e) {
                    System.out.println("HTTP服務器錯誤:" + e.getMessage());
                }
            }
        }

        /**
         * 讀取一個文件的內容并返回給瀏覽器端.
         *
         * @param fileName
         *            文件名
         * @param socket
         *            客戶端 socket.
         * @throws IOException
         */
        void fileReaderAndReturn(String fileName, Socket socket) throws IOException {
            if ("/".equals(fileName)) {// 設置歡迎頁面,呵呵!
                fileName = "/index.html";
            }
            fileName = fileName.substring(1);
            PrintStream out = new PrintStream(socket.getOutputStream(), true);
            File fileToSend = new File(fileName);

            String fileEx = fileName.substring(fileName.indexOf(".") + 1);
            String contentType = null;
            // 設置返回的內容類型
            // 此處的類型與tomcat/conf/web.xml中配置的mime-mapping類型是一致的。測試之用,就寫這么幾個。
            if ("htmlhtmxml".indexOf(fileEx) > -1) {
                contentType = "text/html;charset=GBK";
            } else if ("jpegjpggifbpmpng".indexOf(fileEx) > -1) {
                contentType = "application/binary";
            }
            if (fileToSend.exists() && !fileToSend.isDirectory()) {
                // http 協議返回頭
                out.println("HTTP/1.0 200 OK");// 返回應答消息,并結束應答
                out.println("Content-Type:" + contentType);
                out.println("Content-Length:" + fileToSend.length());// 返回內容字節數
                out.println();// 根據 HTTP 協議, 空行將結束頭信息

                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(fileToSend);
                } catch (FileNotFoundException e) {
                    out.println("<h1>404錯誤!</h1>" + e.getMessage());
                }
                byte data[];
                try {
                    data = new byte[fis.available()];

                    fis.read(data);
                    out.write(data);
                } catch (IOException e) {
                    out.println("<h1>500錯誤!</h1>" + e.getMessage());
                    e.printStackTrace();
                } finally {
                    out.close();
                    try {
                        fis.close();
                    } catch (IOException e) {

                        e.printStackTrace();
                    }
                }
            } else {
                out.println("<h1>404錯誤!</h1>" + "文件沒有找到");
                out.close();

            }

        }

        void printParams(String params) throws IOException {
            if (params == null) {
                return;
            }
            String[] maps = params.split("&");
            for (String temp : maps) {
                String[] map = temp.split("=");
                System.out.println(map[0] + "==" + map[1]);
            }
        }

        /**
         * 啟動 HTTP 服務器
         *
         * @param args
         */
        public static void main(String[] args) {
            try {
                if (args.length != 1) {
                    System.out.println("這是一個簡單的web服務器 ,端口是: 80.");
                } else if (args.length == 1) {
                    PORT = Integer.parseInt(args[0]);
                }
            } catch (Exception ex) {
                System.err.println("服務器初始化錯誤" + ex.getMessage());
            }

            new SimpleHttpServer();

        }
    }

    posted @ 2009-12-29 08:59 華夢行 閱讀(265) | 評論 (0)編輯 收藏

    在python中import this就會展示出The Zen of Python如下:


    The Zen of Python, by Tim Peters

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!


    從網上搜尋了一下,這被稱為python之禪,以下是翻譯


    Python之禪
    賴勇浩翻譯

    優美勝于丑陋(Python 以編寫優美的代碼為目標)
    明了勝于晦澀(優美的代碼應當是明了的,命名規范,風格相似)
    簡潔勝于復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現)
    復雜勝于凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持接口簡潔)
    扁平勝于嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
    間隔勝于緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
    可讀性很重要(優美的代碼是可讀的)
    即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
    不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的代碼)
    當存在多種可能,不要嘗試去猜測
    而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
    雖然這并不容易,因為你不是 Python 之父(這里的 Dutch 是指 Guido )
    做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
    如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
    命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)

     

    The Zen of Python,
    蛇宗三字經

    作者:Tim Peters
    翻譯:元創


    Beautiful is better than ugly.
    美勝丑
    Explicit is better than implicit.
    明勝暗
    Simple is better than complex.
    簡勝復
    Complex is better than complicated.
    復勝雜
    Flat is better than nested.
    淺勝深
    Sparse is better than dense.
    疏勝密
    Readability counts.
    辭達意
    Special cases aren't special enough to break the rules.
    不逾矩
    Although practicality beats purity.
    棄至清
    Errors should never pass silently.
    無陰差
    Unless explicitly silenced.
    有陽錯
    In the face of ambiguity, refuse the temptation to guess.
    拒疑數
    There should be one-- and preferably only one --obvious way to do it.
    求完一
    Although that way may not be obvious at first unless you're Dutch.
    雖不至,向往之
    Now is better than never.
    敏于行
    Although never is often better than *right* now.
    戒莽撞
    If the implementation is hard to explain, it's a bad idea.
    差難言
    If the implementation is easy to explain, it may be a good idea.
    好易說
    Namespaces are one honking great idea -- let's do more of those!
    每師出,多有名


    比較惡搞的是,其實 this 模塊的代碼完全違背了這些原則,為了方便你查看它的代碼,我把它貼出來:
    s = """Gur Mra bs Clguba, ol Gvz Crgref

    Ornhgvshy vf orggre guna htyl.
    Rkcyvpvg vf orggre guna vzcyvpvg.
    Fvzcyr vf orggre guna pbzcyrk.
    Pbzcyrk vf orggre guna pbzcyvpngrq.
    Syng vf orggre guna arfgrq.
    Fcnefr vf orggre guna qrafr.
    Ernqnovyvgl pbhagf.
    Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
    Nygubhtu cenpgvpnyvgl orngf chevgl.
    Reebef fubhyq arire cnff fvyragyl.
    Hayrff rkcyvpvgyl fvyraprq.
    Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
    Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
    Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
    Abj vf orggre guna arire.
    Nygubhtu arire vf bsgra orggre guna *evtug* abj.
    Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
    Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
    Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

    d = {}
    for c in (65, 97):
        for i in range(26):
            d[chr(i+c)] = chr((i+13) % 26 + c)

    print "".join([d.get(c, c) for c in s])

    這段晦澀、復雜、凌亂的代碼,莫非是 Tim Peters 提供的反例?

    posted @ 2009-11-05 10:54 華夢行 閱讀(4810) | 評論 (0)編輯 收藏

    再談如何成為技術領袖寇衛東

    ——技術不是充分條件

    被訪者:IBM軟件集團兩岸三地大中華區
    總工程師  寇衛東

    文/盧鶇翔

    要想成為一名優秀的技術領袖,需要具備哪些方面的素質?我在IBM輔導很多年輕同事,如何才能幫助他們在職業生涯中成長為技術領軍人物?是否只要擁有了過硬的技術本領,就能成為技術領袖?許多年輕的朋友技術拔尖,然而卻覺得沒有得到領導的賞識, 這又是什么原因呢?我常常都在思考這些問題。去年這個時候,我同讀者朋友們分享了一些心得,我想結合自己多年的高校教育和IT從業經驗,再同大家談談這一話題。

    1.我很清楚地告訴大家,要成為技術領袖,技術是必要條件,但不是充分條件。如果一個人技術基礎不夠扎實,他幾乎等同外行,領導其他技術人員不說沒有可能,但至少會相當困難。另一方面我們在國內外都能看到不少拔尖的技術人員,有的是一流的科學家,有的是一流的技術專才,可一旦把他們放在領導崗位上,卻都以失敗告終。他們雖然技術出色,但是沒有當領袖的能力,工作中四處碰壁,缺乏凝聚力,不得人心。

    2.要成為技術領袖就要清楚公司的業務,知道技術應當如何配合業務需求。作為技術領袖,只有做到這點,才能使公司業務有大的發展,才會得到高層領導的認同。如果你只懂技術而不懂公司業務,或者你在大學工作而不懂領導教學科研,是沒有辦法勝任技術領袖的。我們鉆研技術的朋友往往忽略了這一點,對某項技術非常專注,但是兩耳不聞窗外事,沒有把注意力放到公司的發展需求上來。

    為了更好地協調個人職業發展與企業業務發展,需要處理好工作的優先級,分清主次。在日常工作當中,我常常為同事畫下面這幅圖,幫助他們進行分析。

    如果有一項工作擺在面前,我們如何定義它的重要性,應該花多少力氣去做?我們可以通過象限分析找出答案。第I象限表示此項工作對企業業務發展和個人職業發展都很重要,這是最完美的結合,優先級應該放在最高級。我們在企業中應該多做此類工作。第II象限表示此項工作對企業業務非常重要,但是對個人目前的職業發展看似并不特別重要。我們要以企業的利益為重,所以優先級應該放在第二位。第III象限表示此項工作對個人職業發展很重要,但是對企業業務發展不那么重要,我們應該把它放在第三位。第IV象限表示此項工作對企業業務發展和個人職業發展都不重要,優先級應該是最低的。對這類工作,自己最好不做或者少做;就是做,也應該盡可能少花時間去做;或是請其他同事去做,因為對你的個人職業發展不重要的工作不等于對其他同事的個人職業發展也不重要,換言之,此項工作可能對其他同事的個人職業發展很重要呢。

    許多企業都在創造一種文化,希望能將企業業務發展和員工的個人職業發展緊密結合起來,盡管有時候很難兼顧。作為一名領袖人物,他一定更多地在關注大局,而不是僅僅看到自己。關注大局的人會處處從公司的業務、公司的需求出發。在實際工作中我們常常可以看到,一個真正把大局放在第一位的人,即便今天不是領袖,明天也一定非他莫屬。現在的領導不欣賞,將來必會為其他領導所賞識。

    3.一個能把握大局的人需要具備很多能力,其中非常重要的一項就是我下面要談到的第三點——決策力。作為技術領袖,要有堅強的領導能力,敢于面對各種困難的挑戰,敢于決斷。有些人天生就有準確的決策能力,而更多人需要靠后天來培養。

    在我的孩子還小的時候,我就給他灌輸這種思想,培養鍛煉他。如果他要問我,我就讓他自己做決定,不論決定是對是錯、是好是壞,在我看來都是正確的。因為最大的錯誤是該做決定時你舉棋不定。再舉一個例子,美國前總統布什剛剛上任的時候,很多人批評他沒有總統的風范,但是經過幾年的洗禮他的確擁有了總統的氣質。原因又是什么呢?因為那個職位訓練了他,很多情況他必須要做出決策。

    對于程序員來說,雖然無法像領導那樣做重大的決定,但仍然可以在自己的范圍內做出決策。例如使用什么樣的技術手段, 采用何種算法實現, 選擇哪種數據結構,如何撰寫文檔,同誰一起合作,這些并不一定非要等老板或者構架師來判斷。大家應該有意識地鍛煉自己,慢慢成長,直到將來能夠領導大的項目。每個人不可能一開始就能對一個完整的系統做出決策,可是如果不從當程序員的時候就開始鍛煉自己,將來也做不了。

    面對決策失敗可能帶來的后果,我們應該學會坦然面對,學會承擔。如果不去做決策,不愿承擔責任,就永遠無法取得進步,無法獲得做技術領袖的能力。

    4.要想成為技術領袖必須有遠見,有智慧。有遠見有智慧的人才能有承擔。我有一個在加拿大的同事,開始的時候只是一般的技術人員,很短的時間內就變成經理,再后來沒有經過多長時間又被提升為主管。原因很簡單:他有遠見,并且有足夠的智慧知道應該如何去做。像他這樣的員工雖然剛開始的職位很低,但是公司領導覺得這樣的人才對公司將來的發展大有幫助,另外,如果這樣的員工離職,不但是公司的損失,還會助長競爭對手的實力。所以公司一旦有職位就會提升這樣的員工。我們作為技術人員也是一樣的道理,面對一套大的系統方案,只有穿透障礙看到未來,才有機會獲得提升,成為技術領袖。

    5.成為技術領袖需要自信、自覺和自律。自信,這和領導能力有關,沒自信怎么來領導別人呢?自覺包含兩個方面的內容:自我感知和自我解嘲。自我感知是要對自己有一個正確的評價,“人貴有自知之明”——我們老祖宗都這樣講。有些人不知道自己的情況,要么估計過低,要么估計過高,對自己沒有一個公正的評價。很多事情要靠下意識的感覺,你可能并不知道具體發生了什么事情,但是憑感覺就能判斷出對錯。自嘲是能給自己臺階下,這很重要,往往很多人都做不到,一不小心就陷入騎虎難下的境地。另外對自己有一個正確的評價,才不會弄得自己下不來臺。

    自律就是要約束自己,保持良好的品行。自律不是做給別人看,也不是做給領導看,而是為自己而做。每個人心中都應該有把標尺,衡量什么事情該做,什么事情不該做。自律很關鍵,年輕人尤其應該加以重視。有好的人品才會得到大家信任,如果不自律,沒有良好的品行,有誰會對他心悅誠服,又怎樣來做大家的榜樣呢?

    6.勇于承擔,敢于付出。也就是說一個人的工作既不是為了金錢,也不是為了名譽,單單只是為了實現自己人生的價值,獲得成功。自己驅動自己,不畏艱難險阻,不達目的誓不罷休。不愿意承擔,不愿意付出,處處計較得失的人是沒有辦法成為領袖的。

    這里所說的成功,并非單純的職位上的成功,還包括技術上的成功,做人的成功等。其中做人的成功最重要,往往卻被最多的人所忽視。職位只不過是領導給的一個頭銜,技術領袖所具有的影響力并不是單單靠領導所給的頭銜就能獲得的。不管大公司小公司,很重要的一點就是先做人。我認為衡量一個人是否成功,首先看做人,然后看技術,最后才是職位、名譽、金錢。而且往往人和技術做好了,金錢名譽就會隨之而來。正如諾貝爾獎得主們無一人不是勤勤懇懇做事,假使一開始就想著名譽、獎金,或許他們永遠都無法取得舉世矚目的成就。

    成功是一個很寬泛的概念,如何衡量成功是因人而異的。一般來說,成功是一個正態分布的頻譜,不是一個單脈沖。有些人擁有很高的職位、很豐厚的收入,但卻沒有家庭、沒有生活,因為他們把所有心思都放在了工作上,最終獲得了事業上的成功,一個脈沖式的成功。相對他們的度量標準來說是成功了,然而對另一些人來說,他們并不成功、或者不值得效仿。因為事業成功只是一方面,除了工作,我們還有生活,還有家庭的維系、子女的教育、八小時后的個人愛好。一個和諧的成功是一個頻譜式的成功:也許沒有哪一方面是特別突出的,但是有幾個方面是相當好的,其他方面也還可以,這樣綜合來看是最好的。

    7.能領會別人的感覺和想法,會與他人相處。一個擁有領袖潛質的人,往往能夠很快感知周圍的氛圍,別人的感受,他能夠通過簡單的語言、位置調整,使大家輕松舒服地投入工作。

    8.能把大家團結起來,人氣旺。很多時候,某個人并不是領導,但是大家都愿意聽他的話,成了無冕之王,這樣的人即便現在不是,將來也必然會成為領袖,這只是時間的問題。

    讀者朋友們大多都是技術人員,但是大家不要被技術所束縛。我年輕的時候也走過彎路,希望這些心得體會能對年輕的朋友們有所幫助。成為技術領袖并非遙不可及,只需要比別人多付出一點堅定和執著,多注重先做人后做事。

    posted @ 2009-10-28 16:13 華夢行 閱讀(205) | 評論 (0)編輯 收藏
    java 觀察者模式
    2009-09-10 09:51

    觀察者模式可以參考郵件訂閱的例子

    郵件訂閱設計到2個主要角色,一個是訂閱者(觀察者),一個是發布者

    發布者可以擁有一個觀察者的集合,可以添加,刪除觀察者,當發布者發布一個新的消息時,要郵件通知觀察者集合中的每一個。

    所以,發布者實現的接口至少應具備三個方法,即注冊觀察者,注銷觀察者,通知觀察者。

    通知有兩種方式,一種是推(push),一種是拉(pull).

    推,即發布者通過調用觀察者提供的接口,來告之所有的變動(比如新增一個消息),主動推送給觀察者。

    拉,及觀察者可以按需提取所要接受的數據,而不是全盤接受,主要體現在程序自己主動調用觀察者的傳值接口,而區別于推由發布者來調用,此時,需要這個借口中的參數包含發布者對象,讓程序知道掃描變動來自于哪個發布者。

    JDK中內置了觀察者模式,位于java.util包中,一個接口Observer,一個類Observable,將這兩個類組合起來使用,既可以推,又可以拉。

    一個普通的類,如果繼承了Observable,就成了一個發布者,實現了Observer接口,就成了觀察者。

    JDK中的觀察者模式有一個弊端,就是發布者需要繼承一個類,而不是實現一個接口,如果需要成為發布者的類已經集成了一個類,就不能再繼承Observable了。這時候,就需要自己來設計一種觀察者模式了。

    JDK 中Swing包中,大量運用了觀察者模式,所有的組件都繼承了JComponent,這就是一個發布者,它里面包含一個監聽器的集合:EventListenerList,用戶可以自定義一個監聽器,然后添加到一個組件中的時候,該組件就會把這個監聽器注冊到 EventListenerList中,相當于添加了一個發布者,當用戶對組件做出反映時,所有的監聽器(發布者)都會收到信息并作出反應。

    網上商店中的商品在名稱、價格發生變化時,必須自動通知會員,Java的API為我們提供了
       Observer接口和Observable類來實現所謂觀察者模式。Observable(可觀察者)類允許在自身發生改變時,通知其它對象(實現接口Observer,觀察者)。


       下面是一個可觀察者(產品類):
    import java.util.*;
    public class product extends Observable{
       private String name;////產品名
       private float price;////價格

       public String getName(){ return name;}
       public void setName(String name){
       this.name=name;
       ////設置變化點
       setChanged();
       notifyObservers(name);////通知觀察者

       }   

       public float getPrice(){ return price;}
       public void setPrice(float price){
       this.price=price;
       ////設置變化點
       setChanged();
       notifyObservers(new Float(price));

       }

       ////以下可以是數據庫更新 插入命令.
       public void saveToDb(){
       System.out.println("saveToDb");
         }

    }

    下面是兩個觀察者:
    import java.util.*;
    public class NameObserver implements Observer{

       private String name=null;
       public void update(Observable obj,Object arg){
         if (arg instanceof String){
         name=(String)arg;
         ////產品名稱改變值在name中
         System.out.println("NameObserver :name changet to "+name);

         }

            }
       }

    import java.util.*;
    public class PriceObserver implements Observer{
       private float price=0;
       public void update(Observable obj,Object arg){
         if (arg instanceof Float){

         price=((Float)arg).floatValue();
      
         System.out.println("PriceObserver :price changet to "+price);

         }


       }

    }
    下面是測試類:
    public class Test {

       public static void main(String args[]){
          Product product=new Product();
          NameObserver nameobs=new NameObserver();
          PriceObserver priceobs=new PriceObserver();

          ////加入觀察者
          product.addObserver(nameobs);
          product.addObserver(priceobs);

          product.setName("applet");
          product.setPrice(9.22f);

       }
    }
    運行結果:
    C:\java>java    Test
    NameObserver :name changet to applet

    posted @ 2009-10-22 10:16 華夢行 閱讀(516) | 評論 (0)編輯 收藏
         摘要:   Struts2架構圖         請求首先通過Filter chain,Filter主要包括ActionContextCleanUp,它主要清理當前線程的ActionContext和Dispatcher;FilterDispatcher主要通過AcionMapper來決定需要調用哪個Action。  &nb...  閱讀全文
    posted @ 2009-10-21 10:05 華夢行 閱讀(7478) | 評論 (2)編輯 收藏
    1、父子二人經過五星級飯店門口,看到一輛十分豪華的進口轎車。 兒子不屑地對他的父親說:「坐這種車的人,肚子里一定沒有學問!」 父親則輕描淡寫地回答:說這種話的人,口袋里一定沒有錢 (注:你對事情的看法,是不是也反映出你內心真正的態度?) 2、晚飯后,母親和女兒一塊兒洗碗盤,父親和兒子在客廳看電視。 突然,廚房里傳來打破盤子的響聲,然后一片沉寂。 兒子望著他父親,說道:「一定是媽媽打破的。」 「你怎么知道?」 「她沒有罵人」 (注:我們習慣以不同的標準來看人看己,以致往往是責人以嚴,待己以寬。) 3、有兩個臺灣觀光團到日本伊豆半島旅游,路況很壞,到處都是坑洞。 其中一位導游連聲抱歉,說路面簡直像麻子一樣。 而另一個導游卻詩意盎然地對游客說:諸位先生,我們現在走的這條道路,正是赫赫有名的伊豆迷人酒窩大道。」 (注:雖是同樣的情況,然而不同的意念,就會產生不同的態度。思想是何等奇妙的事,如何去想,決定權在你。) 4、同樣是小學三年級的學生,在作文中說他們將來的志愿是當小丑。 中國的老師斥之為:「胸無大志,孺子不可教也!」 外國的老師則會說:「愿你把歡笑帶給全世界!」 (注:身為長輩的我們,不但容易要求多于鼓勵,更狹窄的界定了成功的定義。) 5、有一個歐巴桑在首飾店里看到二只一模一樣的手環。一個標價五百五十元,另一個卻只標價二百五十元。 她大為心喜,立刻買下二百五十元的手環,得意洋洋的走出店門。 臨出去前,聽到里面的店員悄悄對另一個店員說:「看吧,這一招屢試不爽。」 (注:試探如餌,可以輕而易舉的使許多人顯露出貪婪的本性,然而那常常是吃虧受騙的開始。) 6、乞丐:「能不能給我一百塊錢?」 路人:「我只有八十塊錢?!? 乞丐:「那你就欠我二十塊錢吧」 (注:有些人總以為是上蒼欠他的,老覺得老天爺給的不夠多、不夠好,貪婪之欲早已取代了感恩之心。) 7、在故宮博物院中,有一個太太不耐煩地對她先生說: 「我說你為甚么走得這么慢。原來你老是停下來看這些東西?!? (注:有人只知道在人生的道路上狂奔,結果失去了觀看兩旁美麗花朵的機會。) 8、妻子正在廚房炒菜。丈夫在她旁邊一直嘮叨不停:慢些。小心!火太大了。 趕快把魚翻過來??扃P起來,油放太多了!把豆腐整平一下。哎唷,鍋子歪了!」 「請你住口!」妻子脫口而出,「我懂得怎樣炒菜。」 「你當然懂,太太,」丈夫平靜地答道:「我只是要讓你知道,我在開車時,你在旁邊 喋喋不休,我的感覺如何?!? (注:學會體諒他人并不困難,只要你愿意認真地站在對方的角度和立場看問題。) 9、第一名 畢業典禮上,校長宣布全年級第一名的同學上臺領獎,可是連續叫了好幾聲之後,那位學生才慢慢的走上臺。 後來,老師問那位學生說:"怎麼了?是不是生病了?還是沒聽清楚?" 學生答:"不是的,我是怕其他同學沒聽清楚。" (名與利是多少人的捆綁、多少人的心結?我們被教育要爭氣、要出頭,但是爭氣出頭的,不過是少數人,沉默的大眾畢竟還多數。想一想,有那麼多人都和你我一樣,不也是很興奮的一件事嗎?) 10、理由充份 一輛載滿乘客的公共汽車沿著下坡路快速前進著,有一個人後面緊緊地追趕著這輛車子。 一個乘客從車窗中伸出頭來對追車子的人:"老兄!算啦,你追不上的?。? "我必須追上它,"這人氣喘吁吁地說:"我是這輛車的司機" (有些人必須非常認真努力,因為不這樣的話,後果就十分悲慘了!然而也正因為必須全力以赴,潛在的本能和不為人知的特質終將充份展現出來。) 11、原來如此 甲:「新搬來的鄰居好可惡,昨天晚上三更半夜、夜深人靜之時然跑來猛按我家的門。」 乙:「的確可惡!你有沒有馬上報警?」「沒有。我當他們是瘋子,繼續吹我的小喇 叭?!? (事出必有因,如果能先看到自己的不是,答案就會不一樣。在你面對沖突和爭執時,先想一想是否心中有虧,或許很快就能釋懷了。) 12、誤會 某日,張三在山間小路開車。 正當他悠哉地欣賞美麗風景時,突然迎面開來一輛貨車,而且滿囗黑牙的司機還搖下窗 戶對他大罵一聲:"豬" 張三越想越納悶,也越想越氣,於是他也搖下車窗回頭大罵:"你才是豬?。? 才剛罵完,他便迎頭撞上一群過馬路的豬。 (不要錯誤的詮釋別人的好意,那只會讓自己吃虧,并且使別人受辱。 在不明所以之前,先學會按捺情緒,耐心觀察,以免事後生發悔意。) 13、後生可畏 小男孩問爸爸:"是不是做父親的總比做兒子的知道得多?" 爸爸回答:"當然啦!" 小男孩問:"電燈是誰發明的?" 爸爸:"是愛迪生。" 小男孩又問:"那愛迪生的爸爸怎麼沒有發明電燈?" (很奇怪,喜歡倚老賣老的人,特別容易栽跟斗。權威往往只是一個經不起考驗的空殼子,尤其在現今這個多元開放的時代。) 14、不必緊張 小明洗澡時不小心吞下一小塊肥皂,他的媽媽慌慌張張地打電話向家庭醫生求助。 醫生說:"我現在還有幾個病人在,可能要半小時後才能趕過去。" 小明媽媽說:"在你來前,我該做甚麼?" 醫生說:"給小明喝一杯白開水,然後用力跳一跳,你就可以讓小明用嘴巴吹泡泡消磨時間了。" (Take it easy!放輕松些,生活何必太緊張?事情既然已經發生了,何不坦然自在的面對。擔心不如寬心,窮緊張不如窮開心。) 15、鑰匙 一把堅實的大鎖掛在大門上,一根鐵桿費了九牛二虎之力,還是無法將它撬開。 鑰匙來了,他瘦小的身子鉆進鎖孔,只輕輕一轉,大鎖就"啪"地一聲打開了。 鐵桿奇怪地問:"為什麼我費了那麼大力氣也打不開,而你卻輕而易舉地就把它打開了呢?" 鑰匙說:"因為我最了解他的心。" (每個人的心,都像上了鎖的大門,任你再粗的鐵棒也撬不開。唯有關懷,才能把自己變成一只細膩的鑰匙,進入別人的心中,了解別人。)
    posted @ 2009-10-14 14:36 華夢行 閱讀(159) | 評論 (0)編輯 收藏
    中國民企的行銷中的溝通,主要是語言方面的溝通,如何與客戶有效地交談是一項很重要的商業技能。 孔子說過:“言不順,則事不成”。 鬼谷子人際兵法是古代游說技術的集大成者,古代縱橫家們就是憑借出色的口才來說服那些帝王將相們的。 據歷史記載,蘇秦、張儀等縱橫家們的口才都是非常出眾、且富有煽動性,他們甚至能夠將黑的說成白的,沒有的說成有的,充滿了詭辯的色彩。 今天的商業,以誠信為本無疑是企業發展的根本動力。 行銷中與人溝通,完全不講策略性是不夠的,但是顛倒黑白,混淆視聽也是不足取的。 語言才華與個人天賦有關,也與一個人的自身修養、知識積累有關,本章重點不是討論如何提高語言表達的才華,而是從策略性方面來討論如何提高語言溝通的效果。 對于絕大多數的行銷人員來說,如何說話似乎是一件簡單得不能夠再簡單的事情了,但實際上,我們經常會遇到一些行銷人員在與客戶交談中所表現出來的幼稚性。 一次,某公司的行銷人員拜訪一位客戶,這位行銷人員問客戶:“什么時候討論我們的產品???” 客戶說:“要下個月?!? 行銷人員說:“這么久哇,能不能這個月就討論呢?” 客戶說:“這是我們自己的事情,我們愿意什么時候討論就什么時候討論!” 這位行銷人員并不氣餒,又談起了別的話題:“某某客戶已經與我們合作了,你們也應該與我們合作?!? 客戶說:“某某客戶是個小公司,我們是大公司,請你不要用小公司與我們比較!” 也許你會說這是新手們常犯的毛病,那么我曾經聽說過這樣一個故事:一次,某經理請客戶甲吃飯,由于客戶甲與客戶乙關系很好,于是一起邀來吃飯。 席間,某經理夸夸其談,說他們公司多大多大,他本人多有本事,如何會做生意云云。 客戶乙屬于那種愛較真的性情中人,當某經理說道“沒有我搞不定的客戶”時,客戶乙一拍桌子,指著某經理說道:“如果這樣說,我你就搞不定!” 果然,到現在某經理也沒有搞定客戶乙。 某經理不是沒有能力,但是講話太不注意小節,結果造成了不必要的麻煩,實在應該引以為誡。 鬼谷子認為,嘴巴是用來吃飯的,而不是用來亂講話的,因為言多必失。 在古代,政治斗爭十分殘酷,因此,官僚們都是以無事少言、緘默其口作為安身立命的準則。 今天,與客戶溝通交談時,注重說話的策略更顯重要,因為你說的每一句話,都可能會使客戶產生不同的心理反應。 客戶是上帝,甚至是被寵壞的上帝,不恰當的話語:——可以令和睦的關系轉為生疏;——可以令生疏的關系轉為緊張;——可以令緊張的關系轉為破裂。 鬼谷子對于語言的溝通提出了許多充滿智慧的見解,對于我們從事行銷工作很有幫助。 鬼谷子認為,人之常情是:——說出來的話就希望被別人接受;——做出來的事就希望能夠成功。 因此,游說的關鍵在于掌握揚長避短的策略,例如:——我們極力宣傳某種行為的利益,是因為我們可以提供這方面的利益;——我們極力宣傳某種行為的危害,是因為我們不擅長這種行為的操作;掌握了揚長避短的溝通策略,就可以有針對性地游說人物了:——與精明的人交談,要思路廣博,多方論證,避免糾纏一點不放;——與知識廣博的人交談,要善于抓住重點,辨析事理;——與地位高的人交談,不要表現出一種自卑的氣勢;——與自覺富有的人交談,要從人生意義、社會價值等方面來發揮;——與自覺貧窮的人交談,要從如何獲利的角度來探討;——與地位低下的交談,要表現出充分的尊重來;——與有魄力的人交談,要表現出果敢的一面來;——與愚蠢的人交談,要從最有說服力的幾個要點來反復闡述;針對不同的目標對象,有策略地溝通,東西方自古以來都有類似的看法。 古希臘哲學家亞里士多德認為,說服別人就要研究:——“人類性格”的類型與人類感情之間的關系;——“人類性格”的類型與人類道德之間的關系;——“人類性格”的類型與人物年齡之間的聯系;——“人類性格”的類型與人類“命運”如:出身、財產、地位之間的聯系;等等。 因此,亞里士多德將人物分為:——“青年型”、——“壯年型”、——“老年型”、——“富人型”、——“權貴型”等類型。 并分別對這些類型的人物進行了詳細的心理特征描述,與鬼谷子的觀點十分相似。 按照人物的:——性格特征;——社會地位;——職業特點;——年齡狀況;——智力水平;——氣質風格;——經濟條件,等內容。 將這些特征、條件綜合起來,針對不同的目標個體,采取個性化的溝通策略,無疑是古今不變的溝通秘訣。 除了針對不同的目標人物,采勸看人下菜碟”式的溝通策略外,鬼谷子對于語言溝通的表達形式也做了深入的研究。 例如,語言溝通的三種常見形式是:——陳述觀點、——回答問題、——提出反駁。 對于這三種常見的溝通形式,掌握了基本的操作要領,可以有效地與人物溝通,而不會犯下無謂的錯誤。 下面分別介紹:1、陳述觀點鬼谷子認為,與人物溝通,是為了說服別人接受自己的觀點,并認同自己。而要達到這樣的目的,一定要注意采取有利于對方的溝通方式,令對方覺得所陳述的觀點、主張確實有利于對方,是對方所需要的。 這一觀點在今天看來,是行銷常識了。 訴諸利益,是行銷過程中最關鍵的環節,如果你所訴諸的利益確實是對方所需要的、或最感興趣的,那么行銷就成功一大半了。 然而,對于利益的陳述,不是簡單地將利益講清楚就可以了,還需要在溝通中作進一步地修飾。 鬼谷子式語言溝通的特點是,與人物交談猶如炒菜,加減佐料,完全視人物的口味來調整,但是菜的性質并沒有改變。 現在一些公司要求行銷人員學會背誦固定的銷售臺詞,如果行銷人員不會臨場發揮,只是一味機械地照本宣科,其行銷效果如何就不必多說了。 2、回答問題鬼谷子認為,回答問題的要領在于簡單明了,盡量不要過于隨便地發揮,更不要輕易地表態。 在鬼谷子智能行銷工具中,回答客戶問題的內容完全是策略上的需要,而不是想怎么說就怎么說,要注意說話的場合與背景。 例如,在回答客戶的問題時,有的人生怕回答得不夠詳細,恨不得把所知道的全都講出來,這其實是很愚蠢的:——一方面言多必失,話說多了,可能會導致相反的效果;——另一方面,講得越多,客戶對你的心理透視也越深入,就會很被動。 因此,行銷中點到為止式的回答技巧是鬼谷子所推崇的。觀察那些行銷高手們說話,雖然表面上看起來似乎輕松隨意,但是仔細分析,你會發現:他們所講的每句話,并不是隨隨便便地脫口而說的,而是設下了很多前提,埋下了很多伏筆。 3、提出反駁在鬼谷子看來,提出反駁,目的不在于因此而說服對方,相反,卻是一種試探人物心理虛實的策略。 鬼谷子認為,反駁別人的觀點,不是說服別人的最好辦法,卻是了解別人真實想法的有效辦法。 行銷中,與客戶溝通不是舉行辯論賽,說服客戶不是靠論理明確、論據充分,而是靠客戶心甘情愿的認同。 記住,與客戶洽談生意,談的不是道理,而是合作。道理只是形式,合作才是根本。你把客戶說服了并不能夠獲得合作,你把客戶說得心動了才能夠獲得合作。 因此,鬼谷子反對用反駁的方式來證明自己、打擊客戶(當然,與競爭對手較量時適當的反駁會很重要),卻主張用反駁的方式來刺激對方,從而獲得更多的信息。 需要說明的是,鬼谷子的這些語言表達的要領,只適合特定情形下的溝通,而不適合學術辯論會等形式的溝通,因而其特殊的溝通思維方式,與人們平時的習慣性思維是有區別的。 一些人總搞不清楚的是:在不同的環境與情形中,語言溝通的特點是不同的。 甚至有些人以為只要掌握了辯論賽式的口才就足以應付行銷工作了,殊不知,有時候這種辯論賽式的語言表達不但于事無補,反而可能會“火上澆油”,令溝通無法有效展開。 鬼谷子式語言表達形式的另一個特點,就是強調語言表達方式的策略性,這種策略性根據我們在行銷中的體會,主要表現為:——幽默性、——奇特性等內容。 正如有學者說所言:“當謀略靠幽默的語言來實現時,這幽默的語言本身就是謀略,謀略就是幽默的語言,二者是統一的……幽默的語言必定是精煉含蓄的語言,妙趣橫生的語言?!保▌⒔▏吨\略初論》)鬼谷子也認為:——語言的表達貴在奇特性。 下面,我們從將從語言表達的——幽默性、——奇特性兩方面來具體分析:1、行銷言語的幽默性行銷中,與客戶溝通,語言的幽默性是十分重要的,因為幽默具有藝術性的含蓄與夸張等特點:——含蓄是幽默的深層;——夸張則是幽默的表層。 含蓄的語言往往暗示性較強,更容易令客戶在心里上接受,許多難以用道理說明的事情,用含蓄的幽默表達方式會更方便些。 夸張的語言風格,雖然會導致邏輯上的荒謬,但是卻更容易啟發客戶領悟到荒謬背后的真相,而不至于傷害彼此感情。 同時,夸張還帶有某種證明性,可以更吸引他人的注意。 記得有一部外國電影,其中有這樣一個情節:一個人當街推銷領帶,這位老兄在大街上侃侃而談:“女士們,先生們,現在是衛星發射的時代!”(觀眾笑)這位老兄更加得意了:“我的領帶質量非常的好,昨天我就發射了一條,到現在還沒有回收呢!”(觀眾大笑)幽默感強的行銷高手們,往往以自我嘲諷的方式來回避客戶的刁難,既避免了難堪,卻又不傷和氣。 2、行銷言語的奇特性策略性語言的另一個特點是語言的奇特性,這種語言風格的奇特性雖然也部分地包含在幽默當中了,卻具有更廣闊的發揮空間。 語言的奇特性,是指與人們的習慣思維、常識認知等相違背的,一種非常規的、獨特的表達方式,其目的是制造出一種出人意料的戲劇性效果。 這種戲劇性的效果,可以令客戶的興趣指數在極短的時間內迅速擴大數倍,將客戶的重視程度迅速放大數倍,從而為工作的開展打下良好的基矗需要注意的是,實踐中語言的幽默性與奇特性發揮是有一定限度的,過分地追求語言的幽默性與奇特性,有時候反而會影響溝通的效果。 某公司的經理與業務員拜訪客戶,這位經理開玩笑說:“我代表我們公司來貴單位拜訪,是想關心關心你們?!? 不料,這位客戶今天的心情并不好,于是臉一沉地說:“我很忙,你們給我出去!” 搞得這位經理一臉的難堪。 鬼谷子不愧是語言表達的專家,除了針對不同的語言表達方式提出了應對策略外,還提出了幾種可以產生不同效果的語言表達系列套餐。 鬼谷子認為,運用語言來獲得他人的喜歡與重視,需要學會:——佞言;——諛言;——平言;——戚言;——靜言等五種表達技巧。 因為:——佞言可以表現你的忠誠;——諛言可以表現你的智慧;——平言可以表現你的果斷;——戚言可以表現你的可信性;——靜言可以表現你的權威性。 對于今天的人們來說,佞言、諛言等都帶有貶義色彩,其實鬼谷子的思維方式與今天的思維方式是有所區別的,正如鬼谷子強調“陰謀”,在鬼谷子的字典里“陰謀”是隱性策略的意思,而不是今天漢語中“陰謀詭計”的貶義解釋。 上述的五種語言技巧,其功能主要是表現出你的:——忠誠;——智慧;——果斷;——可信性;——權威性。 這是五種含有濃厚包裝色彩的語言表達技巧,目的是獲得他人的好感,或者展示個人魅力以及能力。 當然,究竟向客戶表達出你的哪些優點,還需要視具體情況來定。 例如:——如果客戶需要你是個忠誠、可信的人,就需要運用語言的策略性來表現出這方面的優點;——如果客戶需要你的建議具有權威性,就需要運用語言的策略性來表現出你這方面的優點;等等。 那么,如何具體操作呢? 1、“忠誠”的語言表達技巧操作要領:預先知道客戶的意圖、需求,只要順著客戶的意圖、需求來說話,經過一段時間后,就可以令客戶欣賞你的為人了,因為你們的想法與需求是如此的一致。 回顧一下你周圍的朋友,你覺得對你最忠誠的朋友是哪些?他們有什么樣的特征? 經過思考,你會發現,你認為對你最忠心的朋友,一定是那些最能理解你、并總是和你的行事意圖相一致的人。 他們憑什么獲得了你的好感呢? 很簡單,他們的想法總是與你保持高度的一致,而很少會違背你的意愿。 2、“智慧”的語言表達技巧操作要領:在論述、發表意見時,要表現出你的知識淵博來。雖然你的智慧程度與你的知識面可能無法劃等號,但是,在你的客戶看來,你廣博的知識往往會給客戶留下智慧的印象。 行銷中,智慧的表現方式不是要求你就某個人生命題講解得十分透徹,這樣很難,而且你的大多數客戶也沒有這個雅興,他們中很多是普通人。 因此,只要平時能夠表現出你廣博的知識面來,就可以給客戶一個充滿智慧的印象,并開始重視你的為人。 3、“果斷”的語言表達技巧操作要領:果斷是自信的表現;優柔寡斷是不自信的表現。 你的果斷表現在:——你的是非觀念是否分明? ——你的判斷依據是否符合邏輯? ——你的分析能力是否可以洞察問題的本質? 等等。 你平時與客戶交流中,如果所作的分析,常??梢远床焓挛锏谋举|,并且針對這些分析,可以做出較明確的判斷。 那么一段時間后,你在客戶心目中無疑會留下十分果斷的印象。 4、“可信性”的語言表達技巧操作要領:你的觀點是否可信,在于你的證據是否可信,你的論證是否符合邏輯。這需要你列舉出一些有說服力的證據,通過論證的方式,將各種方案的優劣、長短逐一比較分析,并從中優選出最佳的方案來。 擺事實,講道理,這是說服客戶最有效的辦法。 任何客戶都具有精明、理智的一面,如果你能夠通過有力證據、有說服力的方案而獲得客戶的認可,一段時間后,客戶對于你的建議的可信性自然提高許多。 5、“權威性”的語言表達技巧操作要領:樹立權威的最好辦法就是找出其他待選方案的缺點與不足,通過這些比較,自然可以建立起自己的權威性來。當然,有時候如果能夠找出權威性的依據自然更好。 所謂“打擊別人,抬高自己”。 古代縱橫家們,往往善于玩弄詭辯伎倆,無限夸大競爭對手或競爭方案的缺點,同時無限夸大自己方案的優點,通過對于異己力量的打擊與自我吹捧,達到樹立權威的目的。 當然,這種作法即使一時得逞,終究會被人揭穿的。 行銷中,我們主張以誠信為本,對于一些有根有據的東西,可以適當地宣傳,但不要超出一個度,否則適得其反。 以上,我們介紹了鬼谷子式語言策略的五個自我表現技巧,對于我們從事行銷工作有很大幫助,因為從:——忠誠;——智慧;——果斷;——可信性;——權威性五個方面來表現自己,可以在一定程度上獲得客戶的欣賞與重視,這也是你提高個人魅力的一個有效辦法。 但是,客戶是很現實的,他們最終還是要通過行動來考核你。 因此,語言表達的威力充其量只是你行銷的一個輔助性工具,你還需要不斷地用你的行動來“說話”。 以上,我們從策略性的角度將鬼谷子的語言表達藝術做了一點總結,中國古代縱橫家們的口才是中華民族文學寶庫中的奇葩,許多膾炙人口的文章都出自于縱橫家之口,對于縱橫家們口才的研究是一個具有相當深度與廣度的課題,顯然本文只是滄海一粟,難窺全貌,希望有機會與大家共同探討、切磋。
    posted @ 2009-10-14 14:03 華夢行 閱讀(252) | 評論 (0)編輯 收藏
    1. 當藝術評論家聚在一起的時候他們談論的都是關于版式結構以及意蘊之類的話題,而真正的藝術家在一起的時候談論的則是到哪里才能買到便宜的松節油。 2.軟件開發的過程: 1)定義問題 2)需求分析 3)規劃構架 4)軟件構件 5)詳細設計 6)編碼與調試 7)單元測試 8)集成測試 9)集成 10)系統測試 11)保障維護 3.重要的研發成果產出產自類比。通常把不理解的東西和一些較為理解的且十分相似的東西作比較,可以對理解不深刻的東西產生更深刻的理解。這種隱喻的方法叫做建模。 4. 文字寫作編程模式這一隱喻暗示著軟件開發過程是一種代價昂貴的試錯過程,而非仔細的 規劃和設計。 5.三思而后行。 6.有一些程序員確實知道如何進行這些前期工作,但是他們并沒有這么做。因為他們不能抵抗'盡快開始編碼'的欲望。為什么會這樣?是一種基于什么樣的心理狀態才導致了這種近似幼稚的情況的出現呢?
    posted @ 2009-10-13 17:08 華夢行 閱讀(454) | 評論 (0)編輯 收藏
    僅列出標題
    共15頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 亚洲无码日韩精品第一页| 亚洲成人高清在线| 三级黄色在线免费观看| 亚洲综合在线一区二区三区| 亚洲国产精品乱码一区二区| 国产va在线观看免费| 亚洲中文字幕无码永久在线 | 久久久国产精品福利免费| 亚洲AV无码专区电影在线观看| 免费成人黄色大片| 日本免费无遮挡吸乳视频电影| 亚洲Av无码国产一区二区| 亚洲成人黄色在线观看| 国内外成人免费视频| 美国免费高清一级毛片| 亚洲av午夜福利精品一区人妖| 亚洲欧洲久久久精品| 91精品视频免费| 成人a毛片免费视频观看| 亚洲国产精品无码久久| 久久精品国产亚洲AV蜜臀色欲| 亚洲视频一区二区在线观看| 亚洲成av人片在线观看无码不卡| 老司机亚洲精品影视www| 亚洲男人的天堂在线va拉文| 免费一看一级毛片| 免费一看一级毛片人| 免费在线观看毛片| 免费人妻av无码专区| 亚洲国产电影av在线网址| 免费一级毛片女人图片| 免费一级一片一毛片| 国产成人精品日本亚洲专区| 亚洲国产中文字幕在线观看| 亚洲国产成人五月综合网 | 亚洲AV无码乱码在线观看代蜜桃| 亚洲国产日韩一区高清在线 | 免费91麻豆精品国产自产在线观看| 中文字幕在线成人免费看| 久久国产精品免费网站| 91精品国产免费|