作為一名程序員,在編程中,難免會(huì)遇到很多坑。小編有過幾年的編程經(jīng)歷,這中間為自己為別人挖過很多坑,也踩過別人的坑,幫別人填過坑。作為一名過來人,我把自己踩坑的經(jīng)驗(yàn)總結(jié)一下,讓大家參考一下,或許能避免一些坑。
1.任何修改都要經(jīng)過測(cè)試才可以上線
小編有次在投產(chǎn)上線前發(fā)現(xiàn)自己的代碼有bug
,由于時(shí)間緊迫,小編改完后閱讀了下代碼自認(rèn)為沒有問題了,自測(cè)都沒有進(jìn)行,就把代碼提交上線了。
結(jié)果第二天用戶使用這個(gè)功能時(shí),直接報(bào)錯(cuò)了,只得當(dāng)天晚上重啟服務(wù)器放上經(jīng)過測(cè)試的代碼。
此事被大領(lǐng)導(dǎo)通報(bào)批評(píng),連累項(xiàng)目經(jīng)理一起挨批。
2.sql防注入是最基本的常識(shí)
小編剛開始做項(xiàng)目的時(shí)候,看到項(xiàng)目組中有把入?yún)⑵唇釉?code>sql中,沒有采用預(yù)編譯的方式輸入?yún)?shù),小編也跟著這樣寫。
而這些接口都是通過外網(wǎng)手機(jī)app端來調(diào)用的,危險(xiǎn)性瞬間提高。
部門的安全組及時(shí)掃描識(shí)別出這些問題,小編花了整整一個(gè)元旦的假期才把這些sql
拼接參數(shù)的代碼換成預(yù)編譯的方式,還改錯(cuò)了一個(gè)接口,還好修復(fù)完后沒有大礙。
sql注入
是一件極其危險(xiǎn)的事情,使用預(yù)編譯的方式避免sql注入
是最有效的方式之一。當(dāng)然,除了sql注入
,還有命令注入等等注入。
3.編程的關(guān)鍵在于解耦以及可讀性
小編之前的老板教小編,好的代碼一定要具有良好的可讀性,可讀性是可維護(hù)性的基礎(chǔ)。
小編寫代碼的時(shí)候就琢磨,這個(gè)類,這個(gè)方法,這個(gè)變量起什么名字好呢?好的代碼是具有自解釋的能力。
小編在維護(hù)之前同事的代碼時(shí),發(fā)現(xiàn)有的同事的代碼寫得又臭又長(zhǎng),變量有時(shí)是a1
,a2
,a3
之類的。明明是個(gè)新增方法,偏偏用get
開頭;有的同事用魔鬼數(shù)字,看得小編莫名其妙。
解耦性呢,就是我做我該做的事情,你做你該做的事情,互不干涉內(nèi)政,各自應(yīng)對(duì)變化。
比如說大家繼承了一個(gè)類或者實(shí)現(xiàn)了一個(gè)接口,就各自做好自己本分的工作就好了。
又比如說一個(gè)復(fù)雜的邏輯,可以分拆成多個(gè)子邏輯,每個(gè)子邏輯就解耦開來,修改一個(gè)方法,不會(huì)影響另一個(gè)方法的使用,方法的復(fù)雜度也降低了。
4.盡量不要重復(fù)造輪子
有的類或者jar包
已經(jīng)被廣泛應(yīng)用,沒有什么問題了,自己有空研究就好,沒有必要再寫一個(gè)了。
之前小編做一個(gè)導(dǎo)入的功能時(shí),由于要入庫的數(shù)據(jù)很大,需要對(duì)集合分割分批導(dǎo)入。
小編就寫了一個(gè)分割集合的方法,經(jīng)項(xiàng)目另外一個(gè)同事的提醒,發(fā)現(xiàn)系統(tǒng)引入的開源jar包
中已經(jīng)有這個(gè)方法了,直接導(dǎo)包使用就行了。
集合的分組,過濾,list
轉(zhuǎn)map
,list
對(duì)象提取屬性等使用java 8
的項(xiàng)目都可以通過java8
的流來操作。
5.數(shù)據(jù)庫建表要盡量遵循數(shù)據(jù)庫表的范式
小編的項(xiàng)目組發(fā)現(xiàn)很多表都建立了不必要的冗余字段,比如名稱這些。
當(dāng)用戶修改了基表的數(shù)據(jù)時(shí),業(yè)務(wù)表的名稱數(shù)據(jù)又沒有修改過來,而查詢的時(shí)候卻不是關(guān)聯(lián)基表去查詢名稱字段的,導(dǎo)致用戶兩邊看到的數(shù)據(jù)不一致。
維護(hù)這些數(shù)據(jù)和修改查詢功能花費(fèi)了小編大量的時(shí)間。
6.盡量不要答應(yīng)業(yè)務(wù)直接在后臺(tái)數(shù)據(jù)庫導(dǎo)數(shù)入庫
數(shù)據(jù)庫導(dǎo)入數(shù)繞過了代碼邏輯,沒有經(jīng)過代碼邏輯的攔截和業(yè)務(wù)規(guī)則的校驗(yàn),有可能導(dǎo)致不合法的數(shù)據(jù)入庫,甚至影響正常的業(yè)務(wù)流程。
而且導(dǎo)入的數(shù)據(jù)往往數(shù)量巨大,更加重的之后的維護(hù)成本。之前小編做的功能也導(dǎo)入過大量歷史存量數(shù)據(jù),結(jié)果這些數(shù)據(jù)很多有問題。
導(dǎo)完這些數(shù)據(jù)后,用戶發(fā)現(xiàn)對(duì)現(xiàn)有的使用造成了影響,不得不一筆筆向業(yè)務(wù)確認(rèn),重新刷數(shù),真是心累。
那么有想了解SQL數(shù)據(jù)庫
的同學(xué),可以看一下教程
SQL教程:http://m.hgci.cn/sql/