隨筆-295  評(píng)論-26  文章-1  trackbacks-0
           

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

          1. 特殊變量與常數(shù)

          主題詞意義主題詞意義
          ans 計(jì)算結(jié)果的變量名 computer 確定運(yùn)行的計(jì)算機(jī)
          eps 浮點(diǎn)相對(duì)精度 Inf 無窮大
          I 虛數(shù)單位 inputname 輸入?yún)?shù)名
          NaN 非數(shù) nargin 輸入?yún)?shù)個(gè)數(shù)
          nargout 輸出參數(shù)的數(shù)目 pi 圓周率
          nargoutchk 有效的輸出參數(shù)數(shù)目 realmax 最大正浮點(diǎn)數(shù)
          realmin 最小正浮點(diǎn)數(shù) varargin   實(shí)際輸入的參量
          varargout 實(shí)際返回的參量    

          2. 操作符與特殊字符

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

                   3、基本數(shù)學(xué)函數(shù)

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

          余弦,雙曲余弦

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

          余切,雙曲余切

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

          二項(xiàng)式系數(shù)和全部組合數(shù)

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

                 4、基本矩陣和矩陣操作

          主題詞意義主題詞意義
          blkding 從輸入?yún)⒘拷K對(duì)角矩陣 eye 單位矩陣
            linespace 產(chǎn)生線性間隔的向量 logspace

          產(chǎn)生對(duì)數(shù)間隔的向量

          numel 元素個(gè)數(shù) cat 連接數(shù)組
          zeros 建立一個(gè)全0矩陣 colon 等間隔向量
          ones   產(chǎn)生全為1的數(shù)組 rand 均勻頒隨機(jī)數(shù)和數(shù)組
          randn 正態(tài)分布隨機(jī)數(shù)和數(shù)組 diag 對(duì)角矩陣和矩陣對(duì)角線
          fliplr 從左自右翻轉(zhuǎn)矩陣 flipud 從上到下翻轉(zhuǎn)矩陣
          repmat 復(fù)制一個(gè)數(shù)組 reshape 改造矩陣
          roy90 矩陣翻轉(zhuǎn)90度 tril 矩陣的下三角
          triu

          矩陣的上三角

          dot 向量點(diǎn)集
          cross 向量叉集 ismember 檢測(cè)一個(gè)集合的元素
          intersect 向量的交集 setxor 向量異或集
          setdiff 向是的差集 union 向量的并集

              5.數(shù)值分析和傅立葉變換

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

          方差

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

             反FFT偏移

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

           6.多項(xiàng)式與插值

          主題詞意義主題詞意義
          conv

          卷積和多項(xiàng)式乘法

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

                     
           7.繪圖函數(shù)

          主題詞意義主題詞意義
          bar 豎直條圖 barh 水平條圖
          hist 直方圖 histc 直方圖計(jì)數(shù)
          hold 保持當(dāng)前圖形 loglog x,y 對(duì)數(shù)坐標(biāo)圖
          pie 餅狀圖 plot 繪二維圖
          polar

          極坐標(biāo)圖

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

          Options Indexes MultiViews
          AllowOverride None

          Order allow,deny
          Allow from all

          但是在瀏覽器中輸入:http://localhost/query/ 時(shí),出現(xiàn)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


          對(duì)于剛使用Redhat Enterprise Linux4 或Fedora Core 2以上/CentOS 4的用戶,一定會(huì)為Apache經(jīng)常無法正常運(yùn)轉(zhuǎn),報(bào)以"Permission denied"等錯(cuò)誤而大為不解,甚至大為惱火。

          其實(shí)這是因?yàn)檫@些系統(tǒng)里激活了SELinux,而用戶的apache配置與SELinux的配置策略有抵觸產(chǎn)生的,只有通過適當(dāng)調(diào)整,使apache的配置和訪問符合策略才能正常使用。

          現(xiàn)在下面來分析一下SELinux中有關(guān)httpd(apache)的context定義(略有刪節(jié))

          /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

          針對(duì)上述的內(nèi)容,可以對(duì)如下的幾個(gè)常見問題進(jìn)行簡(jiǎn)單處理:

          1.phpmyadmin在非默認(rèn)/var/www/html目錄下無法運(yùn)轉(zhuǎn)
          通常類似的情況都是在配置了虛擬主機(jī)時(shí),訪問/phpmyadmin等提示403訪問拒絕,日志里也提示Permission denied,這是因?yàn)閜hpmyadmin防止的目錄及文件本身屬性不符合context要求。

          假設(shè)phpmyadmin放在/web目錄下,那么執(zhí)行:

          chcon -R -t httpd_user_content_t /web

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

          2./home目錄下的虛擬主機(jī)無法運(yùn)轉(zhuǎn)
          與問題1也是類似的,不過根據(jù)上文中context的定義,/home目錄下必須是用戶的$HOME/www或public_html或web目錄才是 httpd_user_content_t類型,因此建議將要作為web頁面的內(nèi)容放置在用戶的$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來逐級(jí)目錄及文件更改,直至最后能訪問:

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

          3.CGI程序無法運(yùn)行
          如果cgi程序放在/var/www/cgi-bin/里也無法執(zhí)行,遇到403或500錯(cuò)誤的話,可以檢查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

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

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

          audit2allow -l -i /var/log/messages

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

          另一個(gè)方法最簡(jiǎn)單,但將使apache得不到保護(hù)。首先確定SELinux 類型是targeted的:

          cat /etc/selinux/config|grep SELINUXTYPE

          然后,使apache脫離SELinux保護(hù):

          setsebool -P httpd_disable_trans 1

          然后重啟動(dòng)apache:

          /etc/init.d/httpd restart

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

          Centos 

          辛辛苦苦編譯安裝完Ngnix,mysql ,PHP,后發(fā)現(xiàn)不能訪問,后來發(fā)現(xiàn)是防火墻把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 
           
          再查看是否已經(jīng)有了: 
          [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操作系統(tǒng)防火墻默認(rèn)已經(jīng)開放了80和22端口
           
          2.這里應(yīng)該也可以不重啟計(jì)算機(jī):
          #/etc/init.d/iptables restart
          防火墻的關(guān)閉,關(guān)閉其服務(wù)即可:
           
          3.查看防火墻信息:
          #/etc/init.d/iptables status
           
          4.關(guān)閉防火墻服務(wù):
          #/etc/init.d/iptables stop
           
          三.永久關(guān)閉防火墻
           
          我們也可以永久的關(guān)閉防火墻,但是我不建議大家這樣做.永久關(guān)閉防火墻可以這樣:
          #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 華夢(mèng)行 閱讀(444) | 評(píng)論 (0)編輯 收藏
          今天我們這篇php的技術(shù)文章主要為各位朋友們介紹如何使用yum進(jìn)行安裝php的5.4或者5.5版本。當(dāng)然我們使用centos6.5作為我們的測(cè)試機(jī)器。其實(shí)非常簡(jiǎn)單,只要下面的兩個(gè)命令就可以輕松的進(jìn)行安裝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


          當(dāng)然擴(kuò)展的話,可以根據(jù)你自己的需要進(jìn)行添加或者刪除哦,至于說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 華夢(mèng)行 閱讀(189) | 評(píng)論 (0)編輯 收藏
          遇到頁面顯示空白很有可能的一種原因就是編碼不正確                  
          posted @ 2012-09-07 09:23 華夢(mèng)行 閱讀(217) | 評(píng)論 (0)編輯 收藏
          var main_frame:damain=Application.application as damain;var main_frame:damain=Application.application as damain;
          posted @ 2010-09-02 11:43 華夢(mèng)行 閱讀(221) | 評(píng)論 (0)編輯 收藏
          寫給c/c++的新同行門,CTO門把你們的寶貴經(jīng)驗(yàn)?zāi)贸鰜戆桑屵@個(gè)帖對(duì)大伙有用

          1、越界

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

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

          2、變量初始化

           這種問題要養(yǎng)成好習(xí)慣,否則出來偶然性問題,非常難查

          3、多線程指針管理

           在多線程環(huán)境下使用指針時(shí),最好采用引用計(jì)數(shù),讓最后一個(gè)放充引用計(jì)數(shù)時(shí),指針刪除,避免一個(gè)線程在使用指針,另外線程刪除掉

          4、多線程鎖的管理

           多線程鎖要粒度要適中,盡量減少 一個(gè)函數(shù) 進(jìn)入多個(gè)鎖,避免一個(gè)大函數(shù)一個(gè)大鎖影響性能,可學(xué)習(xí)數(shù)據(jù)庫的表級(jí),行級(jí)鎖

           盡量不要在回調(diào)函數(shù)中放鎖,易 引起死鎖

          做到線程安全函數(shù)單向調(diào)用,上層往下層調(diào)用,下屋向上層采用事件驅(qū)動(dòng)反饋,避免調(diào)用棧

           過深,易引起死鎖 

          5、多線程對(duì)象生存期管理

           盡量當(dāng)多線程共享對(duì)象 盡量不要直接刪除,建議采用狀態(tài)機(jī)形式來管理,其它線程設(shè)置狀態(tài)

           由一個(gè)線程統(tǒng)一按狀態(tài)管理生存期

          6、構(gòu)造函數(shù)

          函造函數(shù)中不要放虛函數(shù),絕對(duì)不要在構(gòu)造函數(shù)中開線程,并且線程調(diào)用自己的成員

          7、內(nèi)聯(lián)
           
            虛函數(shù)不要內(nèi)聯(lián)

          8、多線程創(chuàng)建辦法

          如果用C運(yùn)行庫函數(shù),要注意用C運(yùn)行庫的方法

          9,內(nèi)存管理

          建議采用內(nèi)存池管理

          10、線程生存期管理

          線程中盡量不要調(diào)用同步函數(shù),不要強(qiáng)行殺線程,要讓線程不斷循環(huán),等待死亡信號(hào)自己退出

          posted @ 2010-05-08 19:30 華夢(mèng)行 閱讀(234) | 評(píng)論 (0)編輯 收藏
           int  **p1;  //指向指針的指針
              int  *p2;    //指向指針的變量  其中所存儲(chǔ)的值為變量的地址,或者變量的地址的地址
              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 華夢(mèng)行 閱讀(230) | 評(píng)論 (0)編輯 收藏

          架構(gòu)設(shè)計(jì)是一個(gè)非常大的話題,不管寫幾篇文章,接觸到的始終只是冰山一角,更多的是實(shí)踐中去體會(huì)。這篇文章主要介紹面向?qū)ο驩O、面向方面AOP和面向服務(wù)SOA這三個(gè)要素在架構(gòu)設(shè)計(jì)中的位置與作用。

          架構(gòu)設(shè)計(jì)有三個(gè)維度,或者說是我們?cè)诳紤]架構(gòu)時(shí)需要思考三個(gè)方向。

          這三個(gè)維度分別為面向?qū)ο蟆⒚嫦蚍矫妗⒚嫦蚍?wù)。

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

          軟件架構(gòu)設(shè)計(jì)的三個(gè)維度
          圖:架構(gòu)三維度結(jié)構(gòu)圖

          面向?qū)ο?/strong>

          面向?qū)ο蠹夹g(shù)最初是從面向?qū)ο蟮某绦蛟O(shè)計(jì)開始的,它的出現(xiàn)以上世紀(jì)60年代Simula語言為標(biāo)志,并在Smalltalk語言的完善和標(biāo)準(zhǔn)化過程中得到更多的擴(kuò)展和對(duì)以前思想的重新注解。

          上世紀(jì)80年代中后期,面向?qū)ο蟪绦蛟O(shè)計(jì)逐漸成熟,被計(jì)算機(jī)界理解和接受,人們又開始進(jìn)一步考慮面向?qū)ο蟮拈_發(fā)問題。直到現(xiàn)在,面向?qū)ο笠呀?jīng)成為一種非常流行的編程方式,以及軟件設(shè)計(jì)的架構(gòu)。

          面向?qū)ο筇岢鲇腥齻€(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性,強(qiáng)調(diào)對(duì)象的“抽象”、“封裝”、“繼承”和“多態(tài)”。它能讓人們以更加接近于現(xiàn)實(shí)世界的方式來思考程序,這點(diǎn)可以說是面向?qū)ο笞畲蟮倪M(jìn)步。

          在OO思想的運(yùn)用上,業(yè)界出現(xiàn)了很多好的經(jīng)驗(yàn)與技巧,從而涌現(xiàn)出大量的設(shè)計(jì)模式,可以說面向?qū)ο笫窍到y(tǒng)分析與設(shè)計(jì)時(shí)的一個(gè)很重要的方面。

          面向方面

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

          面向方面不僅僅是一門編程技術(shù),同樣也是一種架構(gòu)設(shè)計(jì)的思路。如果說OO是縱向地分析、切割整個(gè)系統(tǒng),那么可以認(rèn)為AOP是橫向地對(duì)系統(tǒng)作切片。

          簡(jiǎn)單地理解,OO與AOP分別從兩個(gè)不同的角度給我們提供了分析系統(tǒng)的思路。面向方面可以彌補(bǔ)面向?qū)ο蟮娜毕荩瑑煞N方式有機(jī)的結(jié)合在一起,可以更加有效地對(duì)系統(tǒng)進(jìn)行分析。

          我們認(rèn)為OO是接近于人類認(rèn)識(shí)自然的思維方式,但對(duì)于東方而言卻并不一定是這樣的。

          當(dāng)西方人看到一個(gè)復(fù)雜系統(tǒng)的時(shí)候,只會(huì)有一種思路,就是“分解”,將系統(tǒng)分解成一塊一塊,然后每個(gè)部分進(jìn)行研究。

          當(dāng)東方人看到一個(gè)復(fù)雜系統(tǒng)的時(shí)候,更多地會(huì)關(guān)注系統(tǒng)中存在的關(guān)系,將系統(tǒng)作為一個(gè)有機(jī)的整體進(jìn)行研究,這也是東方和西方在事物看法上存在的差異。

          這兩種思維方式都沒有問題,如果結(jié)合起來分析問題,解決問題會(huì)更好。面向?qū)ο笈c面向方面也同樣如此,都能對(duì)應(yīng)到人類認(rèn)識(shí)自然的思維方式上。

          面向服務(wù)

          面向服務(wù)可以說是最近炒得比較火熱的概念。包括現(xiàn)在提到的SaaS(Software as a service),軟件即服務(wù)。準(zhǔn)確而言,面向服務(wù)不僅僅是軟件行業(yè)的概念,這個(gè)要從社會(huì)的產(chǎn)業(yè)結(jié)構(gòu)說起。

          社會(huì)產(chǎn)業(yè)總共分為三個(gè),第一產(chǎn)業(yè)農(nóng)業(yè),第二產(chǎn)業(yè)工業(yè),第三產(chǎn)業(yè)服務(wù)業(yè)。最早社會(huì)的主要產(chǎn)業(yè)是第一產(chǎn)業(yè)農(nóng)業(yè),將近有幾萬年的歷史。

          十八世紀(jì)下半葉在英國開始的工業(yè)革命,對(duì)人們的生活產(chǎn)生了根本性的影響,社會(huì)的主要產(chǎn)業(yè)成了第二產(chǎn)業(yè)工業(yè)。

          現(xiàn)在仍然屬于工業(yè)時(shí)代,或者有人說的“后工業(yè)時(shí)代”。而在后工業(yè)時(shí)代,社會(huì)的經(jīng)濟(jì)體制必定要向第三產(chǎn)業(yè)服務(wù)業(yè)逐漸轉(zhuǎn)型。面向服務(wù)其實(shí)是社會(huì)經(jīng)濟(jì)體制重心的一種遷移。

          還是說回到軟件行業(yè),社會(huì)的主要產(chǎn)業(yè)將轉(zhuǎn)變成服務(wù)業(yè),自然軟件行業(yè)也會(huì)出現(xiàn)對(duì)應(yīng)的變化,那就是這里提到的面向服務(wù)。面向服務(wù)今后會(huì)影響到軟件的交付模式,會(huì)對(duì)整個(gè)軟件行業(yè)的體制產(chǎn)生影響。

          而說到架構(gòu)層面,面向服務(wù)是系統(tǒng)發(fā)布功能的一種方式。并且基于這種方式下不同的系統(tǒng)之間能有效地通信、協(xié)作。常見的實(shí)現(xiàn)技術(shù)就是Web Service。

          軟件全局觀

          軟件架構(gòu)設(shè)計(jì)的三個(gè)維度:面向?qū)ο蟆⒚嫦蚍矫妗⒚嫦蚍?wù)。

          最年長(zhǎng)的一個(gè)維度就是面向?qū)ο螅l(fā)展了好幾十年,也是相對(duì)而言比較成熟的一個(gè)維度。它解決的問題是系統(tǒng)內(nèi)部結(jié)構(gòu)的設(shè)計(jì)。

          面向方面思想的提出能夠彌補(bǔ)面向?qū)ο蟮娜毕荨C嫦驅(qū)ο蟮姆绞讲荒軐?shí)現(xiàn)橫切關(guān)注點(diǎn)的分離,而面向方面正是為了解決這個(gè)問題。面向方面與面向?qū)ο笠粯佣际墙鉀Q系統(tǒng)內(nèi)部結(jié)構(gòu)的設(shè)計(jì)。

          面向服務(wù)更多的是涉及到系統(tǒng)的外部,簡(jiǎn)單地說就是發(fā)布功能。它并不關(guān)注系統(tǒng)內(nèi)部結(jié)構(gòu)的實(shí)現(xiàn),所以說面向服務(wù)與面向?qū)ο蠡蛘呙嫦蚍矫娌⒉粵_突。

          這三個(gè)維度并不是絕對(duì)孤立的,它們之間會(huì)互相影響、制約,相互發(fā)展的。我們?cè)诜治黾軜?gòu)的時(shí)候需要同時(shí)考慮到這三個(gè)維度的問題,這樣有助于我們?cè)O(shè)計(jì)出更加優(yōu)秀的架構(gòu)。

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

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

          十幾年軟件研發(fā)的滄桑歲月,和一度險(xiǎn)瀕于破產(chǎn)的痛苦經(jīng)歷,讓俺對(duì)軟件產(chǎn)品開發(fā)有了更深層的體會(huì)。新年到來之際,寫出來和大家作個(gè)交流。

          一、農(nóng)業(yè)境界

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

            柏拉圖曾經(jīng)說過,人的知識(shí)猶如一個(gè)圓,圓內(nèi)是你已經(jīng)知道的,圓外是你還不知道的,圓周就是你已經(jīng)知道的還沒解決的問題。你的知識(shí)越豐富,這個(gè)圓就越大,圓的周長(zhǎng)也越長(zhǎng),也就是你知道的沒解決的問題也越多。

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

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

            企業(yè)在這個(gè)階段,充其量就是個(gè)手工作坊。有人說,我的研發(fā)團(tuán)隊(duì)上百號(hào)人呢。對(duì)不起,您是否出于這個(gè)階段和企業(yè)人數(shù)沒多大關(guān)系。

          二、工業(yè)境界

            了解到軟件產(chǎn)品設(shè)計(jì)研發(fā)是一個(gè)復(fù)雜的系統(tǒng)工程,很多人會(huì)嘗試運(yùn)用一些必要的技術(shù)把復(fù)雜系統(tǒng)分解成簡(jiǎn)單子系統(tǒng)。在這個(gè)階段,一些軟件工程理論開始逐步被吸收。這包括:

            面向?qū)ο蟮脑O(shè)計(jì)思想

            UML、RUP、XP編程、設(shè)計(jì)模式等軟件工程理論和工具

            組件化系統(tǒng)設(shè)計(jì)——COM、DCOM、ActiveX、Corba、WebServices等技術(shù)開始進(jìn)入產(chǎn)品設(shè)計(jì)

            簡(jiǎn)單地講,已經(jīng)知道如何把高樓大廈拆解成多個(gè)狗窩,化繁為簡(jiǎn);已經(jīng)懂得遵循軟件工業(yè)標(biāo)準(zhǔn)開發(fā)能重用的系統(tǒng)組件。

            很多人以為已經(jīng)到達(dá)軟件研發(fā)的終點(diǎn),掌握了終極的技術(shù)手段。然而,這只是軟件產(chǎn)品研發(fā)的啟蒙階段,隨著發(fā)現(xiàn)更多并解決深層次的問題,你需要更有效的理論提升你對(duì)軟件產(chǎn)品開發(fā)的駕馭能力。

          三、數(shù)學(xué)境界

            工業(yè)化境界提供了化繁為簡(jiǎn)的技術(shù)支撐和思路,但是,好的工具并不能保證出現(xiàn)正確的設(shè)計(jì)。

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

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

            在這個(gè)階段,你會(huì)用數(shù)學(xué)方法保障軟件系統(tǒng)設(shè)計(jì)的正確性。你可能會(huì)把下面這些理論引入你的設(shè)計(jì)過程:

            在系統(tǒng)設(shè)計(jì)中自覺運(yùn)行有限狀態(tài)機(jī)、Petri網(wǎng)等數(shù)學(xué)模型去設(shè)計(jì)、分析系統(tǒng)結(jié)構(gòu)。

            引進(jìn)諸如凈室技術(shù)、B方法、Z語言等形式化軟件工程技術(shù),確保系統(tǒng)設(shè)計(jì)的正確性。

            最后你會(huì)發(fā)現(xiàn),軟件產(chǎn)品設(shè)計(jì)真正是一件嚴(yán)格科學(xué)過程,如果以山野村夫的心態(tài)做這件事情,最終必然一塌糊涂。

          四、藝術(shù)境界

            人本質(zhì)上是非理性的動(dòng)物,我們?yōu)槿祟愒O(shè)計(jì)產(chǎn)品的最終目標(biāo)不是為了正確,因此,數(shù)學(xué)境界并未把你帶到最終目的地。

            人類還沒解決溫飽問題的時(shí)候,就學(xué)會(huì)了在巖石上涂鴉,在脖子上掛項(xiàng)鏈,為人類設(shè)計(jì)產(chǎn)品,得滿足他們這些貌似毫無價(jià)值的癖好。

            因此,在能熟練駕馭正確設(shè)計(jì)產(chǎn)品的技能之后,軟件產(chǎn)品設(shè)計(jì)將為藝術(shù)而戰(zhàn)——我們不是在替客戶設(shè)計(jì)干活的工具,相反,我們是在為他們?cè)O(shè)計(jì)一個(gè)吸引眼球的超級(jí)玩具,一件藝術(shù)品。

            軟件產(chǎn)品設(shè)計(jì)師——你不僅僅是工程師,更進(jìn)一步,你應(yīng)該是一名駕馭高科技技術(shù)的藝術(shù)家!

          五、宗教境界

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

            之所以被槍斃,是因?yàn)樗扇×宋拿魃鐣?huì)不認(rèn)可的手段和產(chǎn)品——海洛因。

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

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

           

          本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/quicmous/archive/2010/01/03/5125373.aspx

          posted @ 2010-01-23 09:33 華夢(mèng)行 閱讀(261) | 評(píng)論 (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語言實(shí)現(xiàn)HTTP服務(wù)器,首先啟動(dòng)一個(gè)java.net.ServerSocket在提供服務(wù)的端口上監(jiān)聽連接.向客戶返回文本時(shí),可以用
          PrintWriter,但是如果返回二進(jìn)制數(shù)據(jù),則必須使用OutputStream.write(byte[])方法,返回的應(yīng)答消息字符串可以使用
          String.getBytes()方法轉(zhuǎn)換為字節(jié)數(shù)組返回,或者使用PrintStream的print()方法寫入文本,用
          write(byte[])方法寫入二進(jìn)制數(shù)據(jù).

          以工程所在目錄為web的根目錄。 在工程的根目錄下放一個(gè)大概如下的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>簡(jiǎn)單的測(cè)試</title> </head> <body> 你好!這是一個(gè) 簡(jiǎn)單的web服務(wù)器。<br>
           * 這是一個(gè)圖片!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;// 服務(wù)器Socket
              /**
               * 服務(wù)器監(jiān)聽端口, 默認(rèn)為
               */
              public static int PORT = 81; // 標(biāo)準(zhǔn)HTTP端口

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

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

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

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

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

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

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

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

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

                                  String params = null;

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

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

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

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

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

              /**
               * 讀取一個(gè)文件的內(nèi)容并返回給瀏覽器端.
               *
               * @param fileName
               *            文件名
               * @param socket
               *            客戶端 socket.
               * @throws IOException
               */
              void fileReaderAndReturn(String fileName, Socket socket) throws IOException {
                  if ("/".equals(fileName)) {// 設(shè)置歡迎頁面,呵呵!
                      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;
                  // 設(shè)置返回的內(nèi)容類型
                  // 此處的類型與tomcat/conf/web.xml中配置的mime-mapping類型是一致的。測(cè)試之用,就寫這么幾個(gè)。
                  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 協(xié)議返回頭
                      out.println("HTTP/1.0 200 OK");// 返回應(yīng)答消息,并結(jié)束應(yīng)答
                      out.println("Content-Type:" + contentType);
                      out.println("Content-Length:" + fileToSend.length());// 返回內(nèi)容字節(jié)數(shù)
                      out.println();// 根據(jù) HTTP 協(xié)議, 空行將結(jié)束頭信息

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

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

                              e.printStackTrace();
                          }
                      }
                  } else {
                      out.println("<h1>404錯(cuò)誤!</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]);
                  }
              }

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

                  new SimpleHttpServer();

              }
          }

          posted @ 2009-12-29 08:59 華夢(mèng)行 閱讀(266) | 評(píng)論 (0)編輯 收藏

          在python中import this就會(huì)展示出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!


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


          Python之禪
          賴勇浩翻譯

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

           

          The Zen of Python,
          蛇宗三字經(jīng)

          作者:Tim Peters
          翻譯:元?jiǎng)?chuàng)


          Beautiful is better than ugly.
          美勝丑
          Explicit is better than implicit.
          明勝暗
          Simple is better than complex.
          簡(jiǎn)勝復(fù)
          Complex is better than complicated.
          復(fù)勝雜
          Flat is better than nested.
          淺勝深
          Sparse is better than dense.
          疏勝密
          Readability counts.
          辭達(dá)意
          Special cases aren't special enough to break the rules.
          不逾矩
          Although practicality beats purity.
          棄至清
          Errors should never pass silently.
          無陰差
          Unless explicitly silenced.
          有陽錯(cuò)
          In the face of ambiguity, refuse the temptation to guess.
          拒疑數(shù)
          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!
          每師出,多有名


          比較惡搞的是,其實(shí) 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])

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

          posted @ 2009-11-05 10:54 華夢(mèng)行 閱讀(4812) | 評(píng)論 (0)編輯 收藏

          再談如何成為技術(shù)領(lǐng)袖寇衛(wèi)東

          ——技術(shù)不是充分條件

          被訪者:IBM軟件集團(tuán)兩岸三地大中華區(qū)
          總工程師  寇衛(wèi)東

          文/盧鶇翔

          要想成為一名優(yōu)秀的技術(shù)領(lǐng)袖,需要具備哪些方面的素質(zhì)?我在IBM輔導(dǎo)很多年輕同事,如何才能幫助他們?cè)诼殬I(yè)生涯中成長(zhǎng)為技術(shù)領(lǐng)軍人物?是否只要擁有了過硬的技術(shù)本領(lǐng),就能成為技術(shù)領(lǐng)袖?許多年輕的朋友技術(shù)拔尖,然而卻覺得沒有得到領(lǐng)導(dǎo)的賞識(shí), 這又是什么原因呢?我常常都在思考這些問題。去年這個(gè)時(shí)候,我同讀者朋友們分享了一些心得,我想結(jié)合自己多年的高校教育和IT從業(yè)經(jīng)驗(yàn),再同大家談?wù)勥@一話題。

          1.我很清楚地告訴大家,要成為技術(shù)領(lǐng)袖,技術(shù)是必要條件,但不是充分條件。如果一個(gè)人技術(shù)基礎(chǔ)不夠扎實(shí),他幾乎等同外行,領(lǐng)導(dǎo)其他技術(shù)人員不說沒有可能,但至少會(huì)相當(dāng)困難。另一方面我們?cè)趪鴥?nèi)外都能看到不少拔尖的技術(shù)人員,有的是一流的科學(xué)家,有的是一流的技術(shù)專才,可一旦把他們放在領(lǐng)導(dǎo)崗位上,卻都以失敗告終。他們雖然技術(shù)出色,但是沒有當(dāng)領(lǐng)袖的能力,工作中四處碰壁,缺乏凝聚力,不得人心。

          2.要成為技術(shù)領(lǐng)袖就要清楚公司的業(yè)務(wù),知道技術(shù)應(yīng)當(dāng)如何配合業(yè)務(wù)需求。作為技術(shù)領(lǐng)袖,只有做到這點(diǎn),才能使公司業(yè)務(wù)有大的發(fā)展,才會(huì)得到高層領(lǐng)導(dǎo)的認(rèn)同。如果你只懂技術(shù)而不懂公司業(yè)務(wù),或者你在大學(xué)工作而不懂領(lǐng)導(dǎo)教學(xué)科研,是沒有辦法勝任技術(shù)領(lǐng)袖的。我們鉆研技術(shù)的朋友往往忽略了這一點(diǎn),對(duì)某項(xiàng)技術(shù)非常專注,但是兩耳不聞窗外事,沒有把注意力放到公司的發(fā)展需求上來。

          為了更好地協(xié)調(diào)個(gè)人職業(yè)發(fā)展與企業(yè)業(yè)務(wù)發(fā)展,需要處理好工作的優(yōu)先級(jí),分清主次。在日常工作當(dāng)中,我常常為同事畫下面這幅圖,幫助他們進(jìn)行分析。

          如果有一項(xiàng)工作擺在面前,我們?nèi)绾味x它的重要性,應(yīng)該花多少力氣去做?我們可以通過象限分析找出答案。第I象限表示此項(xiàng)工作對(duì)企業(yè)業(yè)務(wù)發(fā)展和個(gè)人職業(yè)發(fā)展都很重要,這是最完美的結(jié)合,優(yōu)先級(jí)應(yīng)該放在最高級(jí)。我們?cè)谄髽I(yè)中應(yīng)該多做此類工作。第II象限表示此項(xiàng)工作對(duì)企業(yè)業(yè)務(wù)非常重要,但是對(duì)個(gè)人目前的職業(yè)發(fā)展看似并不特別重要。我們要以企業(yè)的利益為重,所以優(yōu)先級(jí)應(yīng)該放在第二位。第III象限表示此項(xiàng)工作對(duì)個(gè)人職業(yè)發(fā)展很重要,但是對(duì)企業(yè)業(yè)務(wù)發(fā)展不那么重要,我們應(yīng)該把它放在第三位。第IV象限表示此項(xiàng)工作對(duì)企業(yè)業(yè)務(wù)發(fā)展和個(gè)人職業(yè)發(fā)展都不重要,優(yōu)先級(jí)應(yīng)該是最低的。對(duì)這類工作,自己最好不做或者少做;就是做,也應(yīng)該盡可能少花時(shí)間去做;或是請(qǐng)其他同事去做,因?yàn)閷?duì)你的個(gè)人職業(yè)發(fā)展不重要的工作不等于對(duì)其他同事的個(gè)人職業(yè)發(fā)展也不重要,換言之,此項(xiàng)工作可能對(duì)其他同事的個(gè)人職業(yè)發(fā)展很重要呢。

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

          3.一個(gè)能把握大局的人需要具備很多能力,其中非常重要的一項(xiàng)就是我下面要談到的第三點(diǎn)——決策力。作為技術(shù)領(lǐng)袖,要有堅(jiān)強(qiáng)的領(lǐng)導(dǎo)能力,敢于面對(duì)各種困難的挑戰(zhàn),敢于決斷。有些人天生就有準(zhǔn)確的決策能力,而更多人需要靠后天來培養(yǎng)。

          在我的孩子還小的時(shí)候,我就給他灌輸這種思想,培養(yǎng)鍛煉他。如果他要問我,我就讓他自己做決定,不論決定是對(duì)是錯(cuò)、是好是壞,在我看來都是正確的。因?yàn)樽畲蟮腻e(cuò)誤是該做決定時(shí)你舉棋不定。再舉一個(gè)例子,美國前總統(tǒng)布什剛剛上任的時(shí)候,很多人批評(píng)他沒有總統(tǒng)的風(fēng)范,但是經(jīng)過幾年的洗禮他的確擁有了總統(tǒng)的氣質(zhì)。原因又是什么呢?因?yàn)槟莻€(gè)職位訓(xùn)練了他,很多情況他必須要做出決策。

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

          面對(duì)決策失敗可能帶來的后果,我們應(yīng)該學(xué)會(huì)坦然面對(duì),學(xué)會(huì)承擔(dān)。如果不去做決策,不愿承擔(dān)責(zé)任,就永遠(yuǎn)無法取得進(jìn)步,無法獲得做技術(shù)領(lǐng)袖的能力。

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

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

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

          6.勇于承擔(dān),敢于付出。也就是說一個(gè)人的工作既不是為了金錢,也不是為了名譽(yù),單單只是為了實(shí)現(xiàn)自己人生的價(jià)值,獲得成功。自己驅(qū)動(dòng)自己,不畏艱難險(xiǎn)阻,不達(dá)目的誓不罷休。不愿意承擔(dān),不愿意付出,處處計(jì)較得失的人是沒有辦法成為領(lǐng)袖的。

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

          成功是一個(gè)很寬泛的概念,如何衡量成功是因人而異的。一般來說,成功是一個(gè)正態(tài)分布的頻譜,不是一個(gè)單脈沖。有些人擁有很高的職位、很豐厚的收入,但卻沒有家庭、沒有生活,因?yàn)樗麄儼阉行乃级挤旁诹斯ぷ魃希罱K獲得了事業(yè)上的成功,一個(gè)脈沖式的成功。相對(duì)他們的度量標(biāo)準(zhǔn)來說是成功了,然而對(duì)另一些人來說,他們并不成功、或者不值得效仿。因?yàn)槭聵I(yè)成功只是一方面,除了工作,我們還有生活,還有家庭的維系、子女的教育、八小時(shí)后的個(gè)人愛好。一個(gè)和諧的成功是一個(gè)頻譜式的成功:也許沒有哪一方面是特別突出的,但是有幾個(gè)方面是相當(dāng)好的,其他方面也還可以,這樣綜合來看是最好的。

          7.能領(lǐng)會(huì)別人的感覺和想法,會(huì)與他人相處。一個(gè)擁有領(lǐng)袖潛質(zhì)的人,往往能夠很快感知周圍的氛圍,別人的感受,他能夠通過簡(jiǎn)單的語言、位置調(diào)整,使大家輕松舒服地投入工作。

          8.能把大家團(tuán)結(jié)起來,人氣旺。很多時(shí)候,某個(gè)人并不是領(lǐng)導(dǎo),但是大家都愿意聽他的話,成了無冕之王,這樣的人即便現(xiàn)在不是,將來也必然會(huì)成為領(lǐng)袖,這只是時(shí)間的問題。

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

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

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

          郵件訂閱設(shè)計(jì)到2個(gè)主要角色,一個(gè)是訂閱者(觀察者),一個(gè)是發(fā)布者

          發(fā)布者可以擁有一個(gè)觀察者的集合,可以添加,刪除觀察者,當(dāng)發(fā)布者發(fā)布一個(gè)新的消息時(shí),要郵件通知觀察者集合中的每一個(gè)。

          所以,發(fā)布者實(shí)現(xiàn)的接口至少應(yīng)具備三個(gè)方法,即注冊(cè)觀察者,注銷觀察者,通知觀察者。

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

          推,即發(fā)布者通過調(diào)用觀察者提供的接口,來告之所有的變動(dòng)(比如新增一個(gè)消息),主動(dòng)推送給觀察者。

          拉,及觀察者可以按需提取所要接受的數(shù)據(jù),而不是全盤接受,主要體現(xiàn)在程序自己主動(dòng)調(diào)用觀察者的傳值接口,而區(qū)別于推由發(fā)布者來調(diào)用,此時(shí),需要這個(gè)借口中的參數(shù)包含發(fā)布者對(duì)象,讓程序知道掃描變動(dòng)來自于哪個(gè)發(fā)布者。

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

          一個(gè)普通的類,如果繼承了Observable,就成了一個(gè)發(fā)布者,實(shí)現(xiàn)了Observer接口,就成了觀察者。

          JDK中的觀察者模式有一個(gè)弊端,就是發(fā)布者需要繼承一個(gè)類,而不是實(shí)現(xiàn)一個(gè)接口,如果需要成為發(fā)布者的類已經(jīng)集成了一個(gè)類,就不能再繼承Observable了。這時(shí)候,就需要自己來設(shè)計(jì)一種觀察者模式了。

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

          網(wǎng)上商店中的商品在名稱、價(jià)格發(fā)生變化時(shí),必須自動(dòng)通知會(huì)員,Java的API為我們提供了
             Observer接口和Observable類來實(shí)現(xiàn)所謂觀察者模式。Observable(可觀察者)類允許在自身發(fā)生改變時(shí),通知其它對(duì)象(實(shí)現(xiàn)接口Observer,觀察者)。


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

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

             }   

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

             }

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

          }

          下面是兩個(gè)觀察者:
          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;
               ////產(chǎn)品名稱改變值在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);

               }


             }

          }
          下面是測(cè)試類:
          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);

             }
          }
          運(yùn)行結(jié)果:
          C:\java>java    Test
          NameObserver :name changet to applet

          posted @ 2009-10-22 10:16 華夢(mèng)行 閱讀(517) | 評(píng)論 (0)編輯 收藏
               摘要:   Struts2架構(gòu)圖         請(qǐng)求首先通過Filter chain,F(xiàn)ilter主要包括ActionContextCleanUp,它主要清理當(dāng)前線程的ActionContext和Dispatcher;FilterDispatcher主要通過AcionMapper來決定需要調(diào)用哪個(gè)Action。  &nb...  閱讀全文
          posted @ 2009-10-21 10:05 華夢(mèng)行 閱讀(7485) | 評(píng)論 (2)編輯 收藏
          1、父子二人經(jīng)過五星級(jí)飯店門口,看到一輛十分豪華的進(jìn)口轎車。 兒子不屑地對(duì)他的父親說:「坐這種車的人,肚子里一定沒有學(xué)問!」 父親則輕描淡寫地回答:說這種話的人,口袋里一定沒有錢 (注:你對(duì)事情的看法,是不是也反映出你內(nèi)心真正的態(tài)度?) 2、晚飯后,母親和女兒一塊兒洗碗盤,父親和兒子在客廳看電視。 突然,廚房里傳來打破盤子的響聲,然后一片沉寂。 兒子望著他父親,說道:「一定是媽媽打破的。」 「你怎么知道?」 「她沒有罵人」 (注:我們習(xí)慣以不同的標(biāo)準(zhǔn)來看人看己,以致往往是責(zé)人以嚴(yán),待己以寬。) 3、有兩個(gè)臺(tái)灣觀光團(tuán)到日本伊豆半島旅游,路況很壞,到處都是坑洞。 其中一位導(dǎo)游連聲抱歉,說路面簡(jiǎn)直像麻子一樣。 而另一個(gè)導(dǎo)游卻詩意盎然地對(duì)游客說:諸位先生,我們現(xiàn)在走的這條道路,正是赫赫有名的伊豆迷人酒窩大道。」 (注:雖是同樣的情況,然而不同的意念,就會(huì)產(chǎn)生不同的態(tài)度。思想是何等奇妙的事,如何去想,決定權(quán)在你。) 4、同樣是小學(xué)三年級(jí)的學(xué)生,在作文中說他們將來的志愿是當(dāng)小丑。 中國的老師斥之為:「胸?zé)o大志,孺子不可教也!」 外國的老師則會(huì)說:「愿你把歡笑帶給全世界!」 (注:身為長(zhǎng)輩的我們,不但容易要求多于鼓勵(lì),更狹窄的界定了成功的定義。) 5、有一個(gè)歐巴桑在首飾店里看到二只一模一樣的手環(huán)。一個(gè)標(biāo)價(jià)五百五十元,另一個(gè)卻只標(biāo)價(jià)二百五十元。 她大為心喜,立刻買下二百五十元的手環(huán),得意洋洋的走出店門。 臨出去前,聽到里面的店員悄悄對(duì)另一個(gè)店員說:「看吧,這一招屢試不爽。」 (注:試探如餌,可以輕而易舉的使許多人顯露出貪婪的本性,然而那常常是吃虧受騙的開始。) 6、乞丐:「能不能給我一百塊錢?」 路人:「我只有八十塊錢。」 乞丐:「那你就欠我二十塊錢吧」 (注:有些人總以為是上蒼欠他的,老覺得老天爺給的不夠多、不夠好,貪婪之欲早已取代了感恩之心。) 7、在故宮博物院中,有一個(gè)太太不耐煩地對(duì)她先生說: 「我說你為甚么走得這么慢。原來你老是停下來看這些東西。」 (注:有人只知道在人生的道路上狂奔,結(jié)果失去了觀看兩旁美麗花朵的機(jī)會(huì)。) 8、妻子正在廚房炒菜。丈夫在她旁邊一直嘮叨不停:慢些。小心!火太大了。 趕快把魚翻過來。快鏟起來,油放太多了!把豆腐整平一下。哎唷,鍋?zhàn)油崃耍 ? 「請(qǐng)你住口!」妻子脫口而出,「我懂得怎樣炒菜。」 「你當(dāng)然懂,太太,」丈夫平靜地答道:「我只是要讓你知道,我在開車時(shí),你在旁邊 喋喋不休,我的感覺如何。」 (注:學(xué)會(huì)體諒他人并不困難,只要你愿意認(rèn)真地站在對(duì)方的角度和立場(chǎng)看問題。) 9、第一名 畢業(yè)典禮上,校長(zhǎng)宣布全年級(jí)第一名的同學(xué)上臺(tái)領(lǐng)獎(jiǎng),可是連續(xù)叫了好幾聲之後,那位學(xué)生才慢慢的走上臺(tái)。 後來,老師問那位學(xué)生說:"怎麼了?是不是生病了?還是沒聽清楚?" 學(xué)生答:"不是的,我是怕其他同學(xué)沒聽清楚。" (名與利是多少人的捆綁、多少人的心結(jié)?我們被教育要爭(zhēng)氣、要出頭,但是爭(zhēng)氣出頭的,不過是少數(shù)人,沉默的大眾畢竟還多數(shù)。想一想,有那麼多人都和你我一樣,不也是很興奮的一件事嗎?) 10、理由充份 一輛載滿乘客的公共汽車沿著下坡路快速前進(jìn)著,有一個(gè)人後面緊緊地追趕著這輛車子。 一個(gè)乘客從車窗中伸出頭來對(duì)追車子的人:"老兄!算啦,你追不上的!" "我必須追上它,"這人氣喘吁吁地說:"我是這輛車的司機(jī)" (有些人必須非常認(rèn)真努力,因?yàn)椴贿@樣的話,後果就十分悲慘了!然而也正因?yàn)楸仨毴σ愿埃瑵撛诘谋灸芎筒粸槿酥奶刭|(zhì)終將充份展現(xiàn)出來。) 11、原來如此 甲:「新搬來的鄰居好可惡,昨天晚上三更半夜、夜深人靜之時(shí)然跑來猛按我家的門。」 乙:「的確可惡!你有沒有馬上報(bào)警?」「沒有。我當(dāng)他們是瘋子,繼續(xù)吹我的小喇 叭。」 (事出必有因,如果能先看到自己的不是,答案就會(huì)不一樣。在你面對(duì)沖突和爭(zhēng)執(zhí)時(shí),先想一想是否心中有虧,或許很快就能釋懷了。) 12、誤會(huì) 某日,張三在山間小路開車。 正當(dāng)他悠哉地欣賞美麗風(fēng)景時(shí),突然迎面開來一輛貨車,而且滿囗黑牙的司機(jī)還搖下窗 戶對(duì)他大罵一聲:"豬" 張三越想越納悶,也越想越氣,於是他也搖下車窗回頭大罵:"你才是豬!" 才剛罵完,他便迎頭撞上一群過馬路的豬。 (不要錯(cuò)誤的詮釋別人的好意,那只會(huì)讓自己吃虧,并且使別人受辱。 在不明所以之前,先學(xué)會(huì)按捺情緒,耐心觀察,以免事後生發(fā)悔意。) 13、後生可畏 小男孩問爸爸:"是不是做父親的總比做兒子的知道得多?" 爸爸回答:"當(dāng)然啦!" 小男孩問:"電燈是誰發(fā)明的?" 爸爸:"是愛迪生。" 小男孩又問:"那愛迪生的爸爸怎麼沒有發(fā)明電燈?" (很奇怪,喜歡倚老賣老的人,特別容易栽跟斗。權(quán)威往往只是一個(gè)經(jīng)不起考驗(yàn)的空殼子,尤其在現(xiàn)今這個(gè)多元開放的時(shí)代。) 14、不必緊張 小明洗澡時(shí)不小心吞下一小塊肥皂,他的媽媽慌慌張張地打電話向家庭醫(yī)生求助。 醫(yī)生說:"我現(xiàn)在還有幾個(gè)病人在,可能要半小時(shí)後才能趕過去。" 小明媽媽說:"在你來前,我該做甚麼?" 醫(yī)生說:"給小明喝一杯白開水,然後用力跳一跳,你就可以讓小明用嘴巴吹泡泡消磨時(shí)間了。" (Take it easy!放輕松些,生活何必太緊張?事情既然已經(jīng)發(fā)生了,何不坦然自在的面對(duì)。擔(dān)心不如寬心,窮緊張不如窮開心。) 15、鑰匙 一把堅(jiān)實(shí)的大鎖掛在大門上,一根鐵桿費(fèi)了九牛二虎之力,還是無法將它撬開。 鑰匙來了,他瘦小的身子鉆進(jìn)鎖孔,只輕輕一轉(zhuǎn),大鎖就"啪"地一聲打開了。 鐵桿奇怪地問:"為什麼我費(fèi)了那麼大力氣也打不開,而你卻輕而易舉地就把它打開了呢?" 鑰匙說:"因?yàn)槲易盍私馑男摹#? (每個(gè)人的心,都像上了鎖的大門,任你再粗的鐵棒也撬不開。唯有關(guān)懷,才能把自己變成一只細(xì)膩的鑰匙,進(jìn)入別人的心中,了解別人。)
          posted @ 2009-10-14 14:36 華夢(mèng)行 閱讀(160) | 評(píng)論 (0)編輯 收藏
          中國民企的行銷中的溝通,主要是語言方面的溝通,如何與客戶有效地交談是一項(xiàng)很重要的商業(yè)技能。 孔子說過:“言不順,則事不成”。 鬼谷子人際兵法是古代游說技術(shù)的集大成者,古代縱橫家們就是憑借出色的口才來說服那些帝王將相們的。 據(jù)歷史記載,蘇秦、張儀等縱橫家們的口才都是非常出眾、且富有煽動(dòng)性,他們甚至能夠?qū)⒑诘恼f成白的,沒有的說成有的,充滿了詭辯的色彩。 今天的商業(yè),以誠信為本無疑是企業(yè)發(fā)展的根本動(dòng)力。 行銷中與人溝通,完全不講策略性是不夠的,但是顛倒黑白,混淆視聽也是不足取的。 語言才華與個(gè)人天賦有關(guān),也與一個(gè)人的自身修養(yǎng)、知識(shí)積累有關(guān),本章重點(diǎn)不是討論如何提高語言表達(dá)的才華,而是從策略性方面來討論如何提高語言溝通的效果。 對(duì)于絕大多數(shù)的行銷人員來說,如何說話似乎是一件簡(jiǎn)單得不能夠再簡(jiǎn)單的事情了,但實(shí)際上,我們經(jīng)常會(huì)遇到一些行銷人員在與客戶交談中所表現(xiàn)出來的幼稚性。 一次,某公司的行銷人員拜訪一位客戶,這位行銷人員問客戶:“什么時(shí)候討論我們的產(chǎn)品啊?” 客戶說:“要下個(gè)月。” 行銷人員說:“這么久哇,能不能這個(gè)月就討論呢?” 客戶說:“這是我們自己的事情,我們?cè)敢馐裁磿r(shí)候討論就什么時(shí)候討論!” 這位行銷人員并不氣餒,又談起了別的話題:“某某客戶已經(jīng)與我們合作了,你們也應(yīng)該與我們合作。” 客戶說:“某某客戶是個(gè)小公司,我們是大公司,請(qǐng)你不要用小公司與我們比較!” 也許你會(huì)說這是新手們常犯的毛病,那么我曾經(jīng)聽說過這樣一個(gè)故事:一次,某經(jīng)理請(qǐng)客戶甲吃飯,由于客戶甲與客戶乙關(guān)系很好,于是一起邀來吃飯。 席間,某經(jīng)理夸夸其談,說他們公司多大多大,他本人多有本事,如何會(huì)做生意云云。 客戶乙屬于那種愛較真的性情中人,當(dāng)某經(jīng)理說道“沒有我搞不定的客戶”時(shí),客戶乙一拍桌子,指著某經(jīng)理說道:“如果這樣說,我你就搞不定!” 果然,到現(xiàn)在某經(jīng)理也沒有搞定客戶乙。 某經(jīng)理不是沒有能力,但是講話太不注意小節(jié),結(jié)果造成了不必要的麻煩,實(shí)在應(yīng)該引以為誡。 鬼谷子認(rèn)為,嘴巴是用來吃飯的,而不是用來亂講話的,因?yàn)檠远啾厥А? 在古代,政治斗爭(zhēng)十分殘酷,因此,官僚們都是以無事少言、緘默其口作為安身立命的準(zhǔn)則。 今天,與客戶溝通交談時(shí),注重說話的策略更顯重要,因?yàn)槟阏f的每一句話,都可能會(huì)使客戶產(chǎn)生不同的心理反應(yīng)。 客戶是上帝,甚至是被寵壞的上帝,不恰當(dāng)?shù)脑捳Z:——可以令和睦的關(guān)系轉(zhuǎn)為生疏;——可以令生疏的關(guān)系轉(zhuǎn)為緊張;——可以令緊張的關(guān)系轉(zhuǎn)為破裂。 鬼谷子對(duì)于語言的溝通提出了許多充滿智慧的見解,對(duì)于我們從事行銷工作很有幫助。 鬼谷子認(rèn)為,人之常情是:——說出來的話就希望被別人接受;——做出來的事就希望能夠成功。 因此,游說的關(guān)鍵在于掌握揚(yáng)長(zhǎng)避短的策略,例如:——我們極力宣傳某種行為的利益,是因?yàn)槲覀兛梢蕴峁┻@方面的利益;——我們極力宣傳某種行為的危害,是因?yàn)槲覀儾簧瞄L(zhǎng)這種行為的操作;掌握了揚(yáng)長(zhǎng)避短的溝通策略,就可以有針對(duì)性地游說人物了:——與精明的人交談,要思路廣博,多方論證,避免糾纏一點(diǎn)不放;——與知識(shí)廣博的人交談,要善于抓住重點(diǎn),辨析事理;——與地位高的人交談,不要表現(xiàn)出一種自卑的氣勢(shì);——與自覺富有的人交談,要從人生意義、社會(huì)價(jià)值等方面來發(fā)揮;——與自覺貧窮的人交談,要從如何獲利的角度來探討;——與地位低下的交談,要表現(xiàn)出充分的尊重來;——與有魄力的人交談,要表現(xiàn)出果敢的一面來;——與愚蠢的人交談,要從最有說服力的幾個(gè)要點(diǎn)來反復(fù)闡述;針對(duì)不同的目標(biāo)對(duì)象,有策略地溝通,東西方自古以來都有類似的看法。 古希臘哲學(xué)家亞里士多德認(rèn)為,說服別人就要研究:——“人類性格”的類型與人類感情之間的關(guān)系;——“人類性格”的類型與人類道德之間的關(guān)系;——“人類性格”的類型與人物年齡之間的聯(lián)系;——“人類性格”的類型與人類“命運(yùn)”如:出身、財(cái)產(chǎn)、地位之間的聯(lián)系;等等。 因此,亞里士多德將人物分為:——“青年型”、——“壯年型”、——“老年型”、——“富人型”、——“權(quán)貴型”等類型。 并分別對(duì)這些類型的人物進(jìn)行了詳細(xì)的心理特征描述,與鬼谷子的觀點(diǎn)十分相似。 按照人物的:——性格特征;——社會(huì)地位;——職業(yè)特點(diǎn);——年齡狀況;——智力水平;——?dú)赓|(zhì)風(fēng)格;——經(jīng)濟(jì)條件,等內(nèi)容。 將這些特征、條件綜合起來,針對(duì)不同的目標(biāo)個(gè)體,采取個(gè)性化的溝通策略,無疑是古今不變的溝通秘訣。 除了針對(duì)不同的目標(biāo)人物,采勸看人下菜碟”式的溝通策略外,鬼谷子對(duì)于語言溝通的表達(dá)形式也做了深入的研究。 例如,語言溝通的三種常見形式是:——陳述觀點(diǎn)、——回答問題、——提出反駁。 對(duì)于這三種常見的溝通形式,掌握了基本的操作要領(lǐng),可以有效地與人物溝通,而不會(huì)犯下無謂的錯(cuò)誤。 下面分別介紹:1、陳述觀點(diǎn)鬼谷子認(rèn)為,與人物溝通,是為了說服別人接受自己的觀點(diǎn),并認(rèn)同自己。而要達(dá)到這樣的目的,一定要注意采取有利于對(duì)方的溝通方式,令對(duì)方覺得所陳述的觀點(diǎn)、主張確實(shí)有利于對(duì)方,是對(duì)方所需要的。 這一觀點(diǎn)在今天看來,是行銷常識(shí)了。 訴諸利益,是行銷過程中最關(guān)鍵的環(huán)節(jié),如果你所訴諸的利益確實(shí)是對(duì)方所需要的、或最感興趣的,那么行銷就成功一大半了。 然而,對(duì)于利益的陳述,不是簡(jiǎn)單地將利益講清楚就可以了,還需要在溝通中作進(jìn)一步地修飾。 鬼谷子式語言溝通的特點(diǎn)是,與人物交談猶如炒菜,加減佐料,完全視人物的口味來調(diào)整,但是菜的性質(zhì)并沒有改變。 現(xiàn)在一些公司要求行銷人員學(xué)會(huì)背誦固定的銷售臺(tái)詞,如果行銷人員不會(huì)臨場(chǎng)發(fā)揮,只是一味機(jī)械地照本宣科,其行銷效果如何就不必多說了。 2、回答問題鬼谷子認(rèn)為,回答問題的要領(lǐng)在于簡(jiǎn)單明了,盡量不要過于隨便地發(fā)揮,更不要輕易地表態(tài)。 在鬼谷子智能行銷工具中,回答客戶問題的內(nèi)容完全是策略上的需要,而不是想怎么說就怎么說,要注意說話的場(chǎng)合與背景。 例如,在回答客戶的問題時(shí),有的人生怕回答得不夠詳細(xì),恨不得把所知道的全都講出來,這其實(shí)是很愚蠢的:——一方面言多必失,話說多了,可能會(huì)導(dǎo)致相反的效果;——另一方面,講得越多,客戶對(duì)你的心理透視也越深入,就會(huì)很被動(dòng)。 因此,行銷中點(diǎn)到為止式的回答技巧是鬼谷子所推崇的。觀察那些行銷高手們說話,雖然表面上看起來似乎輕松隨意,但是仔細(xì)分析,你會(huì)發(fā)現(xiàn):他們所講的每句話,并不是隨隨便便地脫口而說的,而是設(shè)下了很多前提,埋下了很多伏筆。 3、提出反駁在鬼谷子看來,提出反駁,目的不在于因此而說服對(duì)方,相反,卻是一種試探人物心理虛實(shí)的策略。 鬼谷子認(rèn)為,反駁別人的觀點(diǎn),不是說服別人的最好辦法,卻是了解別人真實(shí)想法的有效辦法。 行銷中,與客戶溝通不是舉行辯論賽,說服客戶不是靠論理明確、論據(jù)充分,而是靠客戶心甘情愿的認(rèn)同。 記住,與客戶洽談生意,談的不是道理,而是合作。道理只是形式,合作才是根本。你把客戶說服了并不能夠獲得合作,你把客戶說得心動(dòng)了才能夠獲得合作。 因此,鬼谷子反對(duì)用反駁的方式來證明自己、打擊客戶(當(dāng)然,與競(jìng)爭(zhēng)對(duì)手較量時(shí)適當(dāng)?shù)姆瘩g會(huì)很重要),卻主張用反駁的方式來刺激對(duì)方,從而獲得更多的信息。 需要說明的是,鬼谷子的這些語言表達(dá)的要領(lǐng),只適合特定情形下的溝通,而不適合學(xué)術(shù)辯論會(huì)等形式的溝通,因而其特殊的溝通思維方式,與人們平時(shí)的習(xí)慣性思維是有區(qū)別的。 一些人總搞不清楚的是:在不同的環(huán)境與情形中,語言溝通的特點(diǎn)是不同的。 甚至有些人以為只要掌握了辯論賽式的口才就足以應(yīng)付行銷工作了,殊不知,有時(shí)候這種辯論賽式的語言表達(dá)不但于事無補(bǔ),反而可能會(huì)“火上澆油”,令溝通無法有效展開。 鬼谷子式語言表達(dá)形式的另一個(gè)特點(diǎn),就是強(qiáng)調(diào)語言表達(dá)方式的策略性,這種策略性根據(jù)我們?cè)谛袖N中的體會(huì),主要表現(xiàn)為:——幽默性、——奇特性等內(nèi)容。 正如有學(xué)者說所言:“當(dāng)謀略靠幽默的語言來實(shí)現(xiàn)時(shí),這幽默的語言本身就是謀略,謀略就是幽默的語言,二者是統(tǒng)一的……幽默的語言必定是精煉含蓄的語言,妙趣橫生的語言。”(劉建國《謀略初論》)鬼谷子也認(rèn)為:——語言的表達(dá)貴在奇特性。 下面,我們從將從語言表達(dá)的——幽默性、——奇特性兩方面來具體分析:1、行銷言語的幽默性行銷中,與客戶溝通,語言的幽默性是十分重要的,因?yàn)橛哪哂兴囆g(shù)性的含蓄與夸張等特點(diǎn):——含蓄是幽默的深層;——夸張則是幽默的表層。 含蓄的語言往往暗示性較強(qiáng),更容易令客戶在心里上接受,許多難以用道理說明的事情,用含蓄的幽默表達(dá)方式會(huì)更方便些。 夸張的語言風(fēng)格,雖然會(huì)導(dǎo)致邏輯上的荒謬,但是卻更容易啟發(fā)客戶領(lǐng)悟到荒謬背后的真相,而不至于傷害彼此感情。 同時(shí),夸張還帶有某種證明性,可以更吸引他人的注意。 記得有一部外國電影,其中有這樣一個(gè)情節(jié):一個(gè)人當(dāng)街推銷領(lǐng)帶,這位老兄在大街上侃侃而談:“女士們,先生們,現(xiàn)在是衛(wèi)星發(fā)射的時(shí)代!”(觀眾笑)這位老兄更加得意了:“我的領(lǐng)帶質(zhì)量非常的好,昨天我就發(fā)射了一條,到現(xiàn)在還沒有回收呢!”(觀眾大笑)幽默感強(qiáng)的行銷高手們,往往以自我嘲諷的方式來回避客戶的刁難,既避免了難堪,卻又不傷和氣。 2、行銷言語的奇特性策略性語言的另一個(gè)特點(diǎn)是語言的奇特性,這種語言風(fēng)格的奇特性雖然也部分地包含在幽默當(dāng)中了,卻具有更廣闊的發(fā)揮空間。 語言的奇特性,是指與人們的習(xí)慣思維、常識(shí)認(rèn)知等相違背的,一種非常規(guī)的、獨(dú)特的表達(dá)方式,其目的是制造出一種出人意料的戲劇性效果。 這種戲劇性的效果,可以令客戶的興趣指數(shù)在極短的時(shí)間內(nèi)迅速擴(kuò)大數(shù)倍,將客戶的重視程度迅速放大數(shù)倍,從而為工作的開展打下良好的基矗需要注意的是,實(shí)踐中語言的幽默性與奇特性發(fā)揮是有一定限度的,過分地追求語言的幽默性與奇特性,有時(shí)候反而會(huì)影響溝通的效果。 某公司的經(jīng)理與業(yè)務(wù)員拜訪客戶,這位經(jīng)理開玩笑說:“我代表我們公司來貴單位拜訪,是想關(guān)心關(guān)心你們。” 不料,這位客戶今天的心情并不好,于是臉一沉地說:“我很忙,你們給我出去!” 搞得這位經(jīng)理一臉的難堪。 鬼谷子不愧是語言表達(dá)的專家,除了針對(duì)不同的語言表達(dá)方式提出了應(yīng)對(duì)策略外,還提出了幾種可以產(chǎn)生不同效果的語言表達(dá)系列套餐。 鬼谷子認(rèn)為,運(yùn)用語言來獲得他人的喜歡與重視,需要學(xué)會(huì):——佞言;——諛言;——平言;——戚言;——靜言等五種表達(dá)技巧。 因?yàn)椋骸钥梢员憩F(xiàn)你的忠誠;——諛言可以表現(xiàn)你的智慧;——平言可以表現(xiàn)你的果斷;——戚言可以表現(xiàn)你的可信性;——靜言可以表現(xiàn)你的權(quán)威性。 對(duì)于今天的人們來說,佞言、諛言等都帶有貶義色彩,其實(shí)鬼谷子的思維方式與今天的思維方式是有所區(qū)別的,正如鬼谷子強(qiáng)調(diào)“陰謀”,在鬼谷子的字典里“陰謀”是隱性策略的意思,而不是今天漢語中“陰謀詭計(jì)”的貶義解釋。 上述的五種語言技巧,其功能主要是表現(xiàn)出你的:——忠誠;——智慧;——果斷;——可信性;——權(quán)威性。 這是五種含有濃厚包裝色彩的語言表達(dá)技巧,目的是獲得他人的好感,或者展示個(gè)人魅力以及能力。 當(dāng)然,究竟向客戶表達(dá)出你的哪些優(yōu)點(diǎn),還需要視具體情況來定。 例如:——如果客戶需要你是個(gè)忠誠、可信的人,就需要運(yùn)用語言的策略性來表現(xiàn)出這方面的優(yōu)點(diǎn);——如果客戶需要你的建議具有權(quán)威性,就需要運(yùn)用語言的策略性來表現(xiàn)出你這方面的優(yōu)點(diǎn);等等。 那么,如何具體操作呢? 1、“忠誠”的語言表達(dá)技巧操作要領(lǐng):預(yù)先知道客戶的意圖、需求,只要順著客戶的意圖、需求來說話,經(jīng)過一段時(shí)間后,就可以令客戶欣賞你的為人了,因?yàn)槟銈兊南敕ㄅc需求是如此的一致。 回顧一下你周圍的朋友,你覺得對(duì)你最忠誠的朋友是哪些?他們有什么樣的特征? 經(jīng)過思考,你會(huì)發(fā)現(xiàn),你認(rèn)為對(duì)你最忠心的朋友,一定是那些最能理解你、并總是和你的行事意圖相一致的人。 他們憑什么獲得了你的好感呢? 很簡(jiǎn)單,他們的想法總是與你保持高度的一致,而很少會(huì)違背你的意愿。 2、“智慧”的語言表達(dá)技巧操作要領(lǐng):在論述、發(fā)表意見時(shí),要表現(xiàn)出你的知識(shí)淵博來。雖然你的智慧程度與你的知識(shí)面可能無法劃等號(hào),但是,在你的客戶看來,你廣博的知識(shí)往往會(huì)給客戶留下智慧的印象。 行銷中,智慧的表現(xiàn)方式不是要求你就某個(gè)人生命題講解得十分透徹,這樣很難,而且你的大多數(shù)客戶也沒有這個(gè)雅興,他們中很多是普通人。 因此,只要平時(shí)能夠表現(xiàn)出你廣博的知識(shí)面來,就可以給客戶一個(gè)充滿智慧的印象,并開始重視你的為人。 3、“果斷”的語言表達(dá)技巧操作要領(lǐng):果斷是自信的表現(xiàn);優(yōu)柔寡斷是不自信的表現(xiàn)。 你的果斷表現(xiàn)在:——你的是非觀念是否分明? ——你的判斷依據(jù)是否符合邏輯? ——你的分析能力是否可以洞察問題的本質(zhì)? 等等。 你平時(shí)與客戶交流中,如果所作的分析,常常可以洞察事物的本質(zhì),并且針對(duì)這些分析,可以做出較明確的判斷。 那么一段時(shí)間后,你在客戶心目中無疑會(huì)留下十分果斷的印象。 4、“可信性”的語言表達(dá)技巧操作要領(lǐng):你的觀點(diǎn)是否可信,在于你的證據(jù)是否可信,你的論證是否符合邏輯。這需要你列舉出一些有說服力的證據(jù),通過論證的方式,將各種方案的優(yōu)劣、長(zhǎng)短逐一比較分析,并從中優(yōu)選出最佳的方案來。 擺事實(shí),講道理,這是說服客戶最有效的辦法。 任何客戶都具有精明、理智的一面,如果你能夠通過有力證據(jù)、有說服力的方案而獲得客戶的認(rèn)可,一段時(shí)間后,客戶對(duì)于你的建議的可信性自然提高許多。 5、“權(quán)威性”的語言表達(dá)技巧操作要領(lǐng):樹立權(quán)威的最好辦法就是找出其他待選方案的缺點(diǎn)與不足,通過這些比較,自然可以建立起自己的權(quán)威性來。當(dāng)然,有時(shí)候如果能夠找出權(quán)威性的依據(jù)自然更好。 所謂“打擊別人,抬高自己”。 古代縱橫家們,往往善于玩弄詭辯伎倆,無限夸大競(jìng)爭(zhēng)對(duì)手或競(jìng)爭(zhēng)方案的缺點(diǎn),同時(shí)無限夸大自己方案的優(yōu)點(diǎn),通過對(duì)于異己力量的打擊與自我吹捧,達(dá)到樹立權(quán)威的目的。 當(dāng)然,這種作法即使一時(shí)得逞,終究會(huì)被人揭穿的。 行銷中,我們主張以誠信為本,對(duì)于一些有根有據(jù)的東西,可以適當(dāng)?shù)匦麄鳎灰鲆粋€(gè)度,否則適得其反。 以上,我們介紹了鬼谷子式語言策略的五個(gè)自我表現(xiàn)技巧,對(duì)于我們從事行銷工作有很大幫助,因?yàn)閺模骸艺\;——智慧;——果斷;——可信性;——權(quán)威性五個(gè)方面來表現(xiàn)自己,可以在一定程度上獲得客戶的欣賞與重視,這也是你提高個(gè)人魅力的一個(gè)有效辦法。 但是,客戶是很現(xiàn)實(shí)的,他們最終還是要通過行動(dòng)來考核你。 因此,語言表達(dá)的威力充其量只是你行銷的一個(gè)輔助性工具,你還需要不斷地用你的行動(dòng)來“說話”。 以上,我們從策略性的角度將鬼谷子的語言表達(dá)藝術(shù)做了一點(diǎn)總結(jié),中國古代縱橫家們的口才是中華民族文學(xué)寶庫中的奇葩,許多膾炙人口的文章都出自于縱橫家之口,對(duì)于縱橫家們口才的研究是一個(gè)具有相當(dāng)深度與廣度的課題,顯然本文只是滄海一粟,難窺全貌,希望有機(jī)會(huì)與大家共同探討、切磋。
          posted @ 2009-10-14 14:03 華夢(mèng)行 閱讀(253) | 評(píng)論 (0)編輯 收藏
          1. 當(dāng)藝術(shù)評(píng)論家聚在一起的時(shí)候他們談?wù)摰亩际顷P(guān)于版式結(jié)構(gòu)以及意蘊(yùn)之類的話題,而真正的藝術(shù)家在一起的時(shí)候談?wù)摰膭t是到哪里才能買到便宜的松節(jié)油。 2.軟件開發(fā)的過程: 1)定義問題 2)需求分析 3)規(guī)劃構(gòu)架 4)軟件構(gòu)件 5)詳細(xì)設(shè)計(jì) 6)編碼與調(diào)試 7)單元測(cè)試 8)集成測(cè)試 9)集成 10)系統(tǒng)測(cè)試 11)保障維護(hù) 3.重要的研發(fā)成果產(chǎn)出產(chǎn)自類比。通常把不理解的東西和一些較為理解的且十分相似的東西作比較,可以對(duì)理解不深刻的東西產(chǎn)生更深刻的理解。這種隱喻的方法叫做建模。 4. 文字寫作編程模式這一隱喻暗示著軟件開發(fā)過程是一種代價(jià)昂貴的試錯(cuò)過程,而非仔細(xì)的 規(guī)劃和設(shè)計(jì)。 5.三思而后行。 6.有一些程序員確實(shí)知道如何進(jìn)行這些前期工作,但是他們并沒有這么做。因?yàn)樗麄儾荒艿挚?盡快開始編碼'的欲望。為什么會(huì)這樣?是一種基于什么樣的心理狀態(tài)才導(dǎo)致了這種近似幼稚的情況的出現(xiàn)呢?
          posted @ 2009-10-13 17:08 華夢(mèng)行 閱讀(455) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共15頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 新营市| 伊宁市| 陆良县| 饶平县| 晋宁县| 洪泽县| 城步| 恩平市| 三都| 娱乐| 靖州| 青铜峡市| 南城县| 黑水县| 韩城市| 波密县| 乐至县| 墨脱县| 剑河县| 即墨市| 前郭尔| 高州市| 弋阳县| 沈阳市| 辽宁省| 平果县| 富裕县| 营山县| 淳安县| 沾益县| 广平县| 衡南县| 玉田县| 湖北省| 太白县| 长顺县| 大厂| 桐乡市| 合肥市| 漳州市| 辰溪县|