2009年7月8日 #
那么我對(duì)互聯(lián)網(wǎng)公司的比較感興趣的地方主要體現(xiàn)在軟件質(zhì)量和技術(shù)管理方面,以下2點(diǎn)可以作為討論的提綱:
1 軟件質(zhì)量,盡管質(zhì)量是我們嘴邊經(jīng)常掛念的一個(gè)詞,但不少創(chuàng)業(yè)型公司的投機(jī)心理太重,在與這些負(fù)責(zé)人的交流中發(fā)現(xiàn),談?wù)摰母嗟氖切孪敕ā⑿赂拍睿蟹浅V氐纳虡I(yè)氣息,當(dāng)然這沒(méi)什么不好,但我看了他們的一些產(chǎn)品后發(fā)現(xiàn),他們所做的產(chǎn)品用戶(hù)體驗(yàn)非常糟糕,就拿界面來(lái)說(shuō),非常的粗糙,由于有家公司做的產(chǎn)品和易趣類(lèi)似,我特意打開(kāi)2個(gè)窗口對(duì)比一下,總覺(jué)得易趣的看起來(lái)比較舒服,他們整體布局倒模仿易趣倒挺像,但問(wèn)題就體現(xiàn)在細(xì)節(jié)上,圖片失真嚴(yán)重、字體風(fēng)格不一致、細(xì)節(jié)處理的不到位。好了,那就湊合著看吧,發(fā)現(xiàn)該產(chǎn)品的功能非常的多,但讓人郁悶的是,很多功能是有問(wèn)題的,比如明明提示我系統(tǒng)給偶發(fā)了個(gè)郵件,但就是找不到,有時(shí)候提交表單是可以的,有時(shí)候見(jiàn)到一堆java異常錯(cuò)誤。所以我覺(jué)得這就是典型的追求功能的龐大而導(dǎo)致質(zhì)量的縮水。
其實(shí)自從豆瓣開(kāi)始流行后,大家都意識(shí)到功能做的簡(jiǎn)潔原來(lái)是有好處的,有不少創(chuàng)業(yè)者聲稱(chēng)自己要向豆瓣看齊,鄙視csdn,堅(jiān)決走簡(jiǎn)潔之路,但讓我納悶的是,很少有人真正的堅(jiān)持下去,我有個(gè)同學(xué)06年底曾在一家創(chuàng)業(yè)公司玩過(guò)python,準(zhǔn)備做一個(gè)很有趣的網(wǎng)站,叫做抱怨網(wǎng),其實(shí)是蠻有創(chuàng)意的,不久前JE不是有個(gè)哥們?cè)谒奶幇l(fā)帖說(shuō)我愛(ài)我家黑中介的事,其實(shí)本來(lái)這個(gè)網(wǎng)站就是干這個(gè)事的,專(zhuān)門(mén)揭不良企業(yè)底的,但做著做著,成了巨無(wú)霸,開(kāi)始是把大眾點(diǎn)評(píng)網(wǎng)的功能加進(jìn)去,接著又開(kāi)始融進(jìn)趕集網(wǎng)的分類(lèi)信息功能,最后有把智聯(lián)招聘的招聘功能加上了,結(jié)局就是1年不到,網(wǎng)站不出意料的死掉了,原因就是用戶(hù)體驗(yàn)差,根本不感興趣!最后我替他們老板做了下反思,其實(shí)說(shuō)實(shí)話,我還是很理解創(chuàng)業(yè)人的心,看到好東西都想要,而且之前幾年在互聯(lián)網(wǎng)圈錢(qián)誰(shuí)都眼紅。另外,他們的功能盡管是抄襲別人的,但還是有一定的特色與盈利模式,并且各個(gè)功能分的也蠻清的。 所以我覺(jué)得失敗的原因不能簡(jiǎn)單的歸結(jié)為功能太多,而是質(zhì)量,小公司也就那幾號(hào)人,作為開(kāi)發(fā)人員,面對(duì)這么多的需求,只有拼命的趕進(jìn)度,丫還有時(shí)間考慮質(zhì)量或者用戶(hù)體驗(yàn)嗎?所以沒(méi)有一定的資本與一批強(qiáng)有力的管理和開(kāi)發(fā)人員,切勿貪大求全,否則很可能就是在生產(chǎn)垃圾。其實(shí)質(zhì)量這個(gè)東西從高的層面上說(shuō)就是用戶(hù)體驗(yàn)的好壞,bug少不見(jiàn)得質(zhì)量高,但用戶(hù)體驗(yàn)差的東西絕對(duì)就是垃圾。
最近市面上有個(gè)說(shuō)法有個(gè)說(shuō)法是30w足以模仿個(gè)淘寶,我認(rèn)為就是扯淡,誤導(dǎo)了很多創(chuàng)業(yè)者,認(rèn)為花點(diǎn)銀子,雇幾個(gè)人,就可以輕松抄襲淘寶了,咱先不說(shuō)市場(chǎng)投資,只談技術(shù),表面上看淘寶,丫就是一個(gè)破網(wǎng)站,但背后的技術(shù)你看的見(jiàn)嗎?穩(wěn)定性、性能、維護(hù)、可擴(kuò)展性,這些都和軟件質(zhì)量息息相關(guān),直接影響著用戶(hù)的滿(mǎn)意度,你確定真的做到了嗎?淘寶的架構(gòu)師一年的薪水也30w了。所以我覺(jué)得創(chuàng)業(yè)者要領(lǐng)悟毛澤東思想,采用各個(gè)擊破的戰(zhàn)術(shù),在有限的資源下約束的自己產(chǎn)品的功能,做到小而美。
這里舉個(gè)正面的例子,有家位于芝加哥、名為37 Signals的小公司,正是這種擁抱限制的方式之代表者。37 Signals最初是一家網(wǎng)頁(yè)設(shè)計(jì)資訊公司,后來(lái)為了滿(mǎn)足自身需求而將業(yè)務(wù)擴(kuò)展到軟件開(kāi)發(fā)領(lǐng)域。他們編寫(xiě)了一些用于項(xiàng)目管理的內(nèi)部工具。為了和客戶(hù)溝通, 就向客戶(hù)開(kāi)放了部分系統(tǒng)。公司創(chuàng)始人和總裁杰森•弗瑞德(Jason Fried)解釋說(shuō),在他們自己意識(shí)到之前,已經(jīng)做出了一套基于網(wǎng)頁(yè)的應(yīng)用。又做了4個(gè)月,他們把軟件轉(zhuǎn)換為稱(chēng)作Basecamp的服務(wù)。 Basecamp發(fā)布于2004年2月,很快在類(lèi)似Flickr和Google的Gmail等新Web富應(yīng)用天堂中名列前茅。
Basecamp只是這家公司花一年多時(shí)間投入少量程序員做出來(lái)的一系列值得注意的小而精的產(chǎn)品之一。Basecamp之后是Ta-da List,用于保存和共享待辦事項(xiàng)(及類(lèi)似事項(xiàng))列表。幾個(gè)月后推出了Backpack,它允許用戶(hù)保存和共享便簽及文件。每種產(chǎn)品都可靠并易于使用,而 且都是精心設(shè)計(jì)的。每種產(chǎn)品通常也都只包括少量新特性。例如,Basecamp就有一些精巧的電子郵件功能:和其他服務(wù)和程序一樣,也可以設(shè)置郵件到達(dá)提醒——還可以從另外的計(jì)算機(jī)或手機(jī)等移動(dòng)設(shè)備向Backpack網(wǎng)頁(yè)發(fā)送郵件,郵件文本就會(huì)在頁(yè)面上顯示出來(lái)。
2 技術(shù)管理,你會(huì)發(fā)現(xiàn)很多公司的負(fù)責(zé)人不是很懂技術(shù),但卻是負(fù)責(zé)技術(shù)的,丫今天聽(tīng)到SOA是個(gè)好東西,號(hào)令紛紛SOA,反正大家都不理解這個(gè)含糊不清的東西,做唄,看誰(shuí)能忽悠的過(guò)誰(shuí),一般來(lái)講,創(chuàng)業(yè)型公司為了節(jié)約成本,不會(huì)預(yù)留專(zhuān)門(mén)的QA,有專(zhuān)門(mén)的測(cè)試人員就不錯(cuò)了,所以缺乏一個(gè)質(zhì)量保證的環(huán)節(jié),遇到問(wèn)題怎么辦?誰(shuí)做的誰(shuí)改,改成什么樣沒(méi)人關(guān)心,只要負(fù)責(zé)人看到問(wèn)題解決了就可以了,但,我想問(wèn)的是,不良代碼背后的隱患你知道嗎?結(jié)果就是你咬牙給開(kāi)發(fā)人員開(kāi)工資,開(kāi)發(fā)人員假裝幫你實(shí)現(xiàn)夢(mèng)想,或者說(shuō)造就一批劃水的人。其實(shí)很多東西不是錢(qián)的問(wèn)題,也不要以為多開(kāi)點(diǎn)薪水就可以留住人心。另外我覺(jué)得很多技術(shù)負(fù)責(zé)人喜歡把東西模糊化,比如把軟件即服務(wù)的理念掛在嘴邊,但做起來(lái)是另一碼子事,我覺(jué)得作為一個(gè)技術(shù)負(fù)責(zé)人自己就要身先士卒,至少在創(chuàng)業(yè)公司是這樣,這樣才更有說(shuō)服力,遇到問(wèn)題自己應(yīng)當(dāng)?shù)谝粋€(gè)沖上去,拿出具體的解決方案,對(duì)代碼應(yīng)當(dāng)做到精細(xì)管理,做到心中有數(shù)。說(shuō)到底,創(chuàng)業(yè)公司得有一個(gè)技術(shù)核心,一個(gè)真正能實(shí)現(xiàn)你的想法的人,一個(gè)可以讓大家凝聚起來(lái)的人,不至于讓大家劃水的人。
好了,先說(shuō)那么多,希望各位準(zhǔn)備創(chuàng)業(yè)的同仁能真正的樹(shù)立精品意識(shí),打造精品,實(shí)現(xiàn)夢(mèng)想
問(wèn)題的產(chǎn)生原因
頁(yè)面提交給Action去進(jìn)行業(yè)務(wù)處理,Action再跳轉(zhuǎn)回前臺(tái)頁(yè)面,但這時(shí)URL依然是“頁(yè)面提交給Action的鏈接”,這時(shí)前臺(tái)刷新一下頁(yè)面,就變成再次執(zhí)行了一次提交操作。
解決思路
1,在Action頁(yè)面中跳轉(zhuǎn)的時(shí)候用重定向,可以在struts-config.xml中配置<forward ... redirect=“true”>
不過(guò)這種方法會(huì)使得request中放置數(shù)據(jù)丟失;
2,用Token令牌環(huán)來(lái)實(shí)現(xiàn)
提交到Action的時(shí)候,進(jìn)行一系列操作,然后保存一個(gè)標(biāo)志,這時(shí)再跳轉(zhuǎn)到前臺(tái)頁(yè)面。如果前臺(tái)頁(yè)面刷新的話,Action通過(guò)查看是否有標(biāo)志,就能判斷用戶(hù)是刷新還是提交。
Action中操作令牌的方法
一: saveToken(HttpServletRequest request)
創(chuàng)建一個(gè)新令牌,并將其保存在當(dāng)前用戶(hù)的會(huì)話中,如果用戶(hù)的會(huì)話不存在,將首先創(chuàng)建新會(huì)話對(duì)象
二: isTokenValid(HttpServletRequest request)
判斷存儲(chǔ)在當(dāng)前會(huì)話中的令牌值和請(qǐng)求參數(shù)中的令牌值是否匹配,如果匹配,返回true,否則返回false 。
以下情況返回false:
1,用戶(hù)的HttpSession不存在
2,用戶(hù)Session中沒(méi)有保存令牌值
3,在用戶(hù)請(qǐng)求參數(shù)中沒(méi)有令牌值
4,存儲(chǔ)在用戶(hù)Session范圍內(nèi)的令牌值和請(qǐng)求參數(shù)中 的令牌值不匹配
三:resetToken()
刪除保存在Session范圍內(nèi)的令牌值
示例代碼
1,進(jìn)入目標(biāo)頁(yè),如 http://www.bt285.cn ,通過(guò)IndexAction轉(zhuǎn)發(fā),其中需要保存令牌:






























至此,大功告成!
完整示例請(qǐng)參考附件。
除了DES,我們還知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多種對(duì)稱(chēng)加密方式,其實(shí)現(xiàn)方式大同小異,這里介紹對(duì)稱(chēng)加密的另一個(gè)算法——PBE
PBE
PBE——Password-based encryption(基于密碼加密)。其特點(diǎn)在于口令由用戶(hù)自己掌管,不借助任何物理媒體;采用隨機(jī)數(shù)(這里我們叫做鹽)雜湊多重加密等方法保證數(shù)據(jù)的安全性。是一種簡(jiǎn)便的加密方式。
通過(guò)java代碼實(shí)現(xiàn)如下:












































































































再給出一個(gè)測(cè)試類(lèi):




































控制臺(tái)輸出: