App下載

充滿了汗水和淚水的編程經(jīng)驗(yàn),初學(xué)者請(qǐng)注意

猿友 2020-07-30 10:14:37 瀏覽數(shù) (3115)
反饋

作為一名程序員,在編程中,難免會(huì)遇到很多坑。小編有過(guò)幾年的編程經(jīng)歷,這中間為自己為別人挖過(guò)很多坑,也踩過(guò)別人的坑,幫別人填過(guò)坑。作為一名過(guò)來(lái)人,我把自己踩坑的經(jīng)驗(yàn)總結(jié)一下,讓大家參考一下,或許能避免一些坑。

1.任何修改都要經(jīng)過(guò)測(cè)試才可以上線

小編有次在投產(chǎn)上線前發(fā)現(xiàn)自己的代碼有bug,由于時(shí)間緊迫,小編改完后閱讀了下代碼自認(rèn)為沒(méi)有問(wèn)題了,自測(cè)都沒(méi)有進(jìn)行,就把代碼提交上線了。

結(jié)果第二天用戶使用這個(gè)功能時(shí),直接報(bào)錯(cuò)了,只得當(dāng)天晚上重啟服務(wù)器放上經(jīng)過(guò)測(cè)試的代碼。

此事被大領(lǐng)導(dǎo)通報(bào)批評(píng),連累項(xiàng)目經(jīng)理一起挨批。

2.sql防注入是最基本的常識(shí)

小編剛開(kāi)始做項(xiàng)目的時(shí)候,看到項(xiàng)目組中有把入?yún)⑵唇釉?code>sql中,沒(méi)有采用預(yù)編譯的方式輸入?yún)?shù),小編也跟著這樣寫(xiě)。

而這些接口都是通過(guò)外網(wǎng)手機(jī)app端來(lái)調(diào)用的,危險(xiǎn)性瞬間提高。

部門(mén)的安全組及時(shí)掃描識(shí)別出這些問(wèn)題,小編花了整整一個(gè)元旦的假期才把這些sql拼接參數(shù)的代碼換成預(yù)編譯的方式,還改錯(cuò)了一個(gè)接口,還好修復(fù)完后沒(méi)有大礙。

sql注入是一件極其危險(xiǎn)的事情,使用預(yù)編譯的方式避免sql注入是最有效的方式之一。當(dāng)然,除了sql注入,還有命令注入等等注入。

編程經(jīng)驗(yàn)

3.編程的關(guān)鍵在于解耦以及可讀性

小編之前的老板教小編,好的代碼一定要具有良好的可讀性,可讀性是可維護(hù)性的基礎(chǔ)。

小編寫(xiě)代碼的時(shí)候就琢磨,這個(gè)類,這個(gè)方法,這個(gè)變量起什么名字好呢?好的代碼是具有自解釋的能力。

小編在維護(hù)之前同事的代碼時(shí),發(fā)現(xiàn)有的同事的代碼寫(xiě)得又臭又長(zhǎng),變量有時(shí)是a1,a2,a3之類的。明明是個(gè)新增方法,偏偏用get開(kāi)頭;有的同事用魔鬼數(shù)字,看得小編莫名其妙。

解耦性呢,就是我做我該做的事情,你做你該做的事情,互不干涉內(nèi)政,各自應(yīng)對(duì)變化。

比如說(shuō)大家繼承了一個(gè)類或者實(shí)現(xiàn)了一個(gè)接口,就各自做好自己本分的工作就好了。

又比如說(shuō)一個(gè)復(fù)雜的邏輯,可以分拆成多個(gè)子邏輯,每個(gè)子邏輯就解耦開(kāi)來(lái),修改一個(gè)方法,不會(huì)影響另一個(gè)方法的使用,方法的復(fù)雜度也降低了。

4.盡量不要重復(fù)造輪子

有的類或者jar包已經(jīng)被廣泛應(yīng)用,沒(méi)有什么問(wèn)題了,自己有空研究就好,沒(méi)有必要再寫(xiě)一個(gè)了。

之前小編做一個(gè)導(dǎo)入的功能時(shí),由于要入庫(kù)的數(shù)據(jù)很大,需要對(duì)集合分割分批導(dǎo)入。

小編就寫(xiě)了一個(gè)分割集合的方法,經(jīng)項(xiàng)目另外一個(gè)同事的提醒,發(fā)現(xiàn)系統(tǒng)引入的開(kāi)源jar包中已經(jīng)有這個(gè)方法了,直接導(dǎo)包使用就行了。

集合的分組,過(guò)濾,list轉(zhuǎn)map,list對(duì)象提取屬性等使用java 8 的項(xiàng)目都可以通過(guò)java8的流來(lái)操作。

5.數(shù)據(jù)庫(kù)建表要盡量遵循數(shù)據(jù)庫(kù)表的范式

小編的項(xiàng)目組發(fā)現(xiàn)很多表都建立了不必要的冗余字段,比如名稱這些。

當(dāng)用戶修改了基表的數(shù)據(jù)時(shí),業(yè)務(wù)表的名稱數(shù)據(jù)又沒(méi)有修改過(guò)來(lái),而查詢的時(shí)候卻不是關(guān)聯(lián)基表去查詢名稱字段的,導(dǎo)致用戶兩邊看到的數(shù)據(jù)不一致。

維護(hù)這些數(shù)據(jù)和修改查詢功能花費(fèi)了小編大量的時(shí)間。

6.盡量不要答應(yīng)業(yè)務(wù)直接在后臺(tái)數(shù)據(jù)庫(kù)導(dǎo)數(shù)入庫(kù)

數(shù)據(jù)庫(kù)導(dǎo)入數(shù)繞過(guò)了代碼邏輯,沒(méi)有經(jīng)過(guò)代碼邏輯的攔截和業(yè)務(wù)規(guī)則的校驗(yàn),有可能導(dǎo)致不合法的數(shù)據(jù)入庫(kù),甚至影響正常的業(yè)務(wù)流程。

而且導(dǎo)入的數(shù)據(jù)往往數(shù)量巨大,更加重的之后的維護(hù)成本。之前小編做的功能也導(dǎo)入過(guò)大量歷史存量數(shù)據(jù),結(jié)果這些數(shù)據(jù)很多有問(wèn)題。

導(dǎo)完這些數(shù)據(jù)后,用戶發(fā)現(xiàn)對(duì)現(xiàn)有的使用造成了影響,不得不一筆筆向業(yè)務(wù)確認(rèn),重新刷數(shù),真是心累。

程序員最討厭的四件事

那么有想了解SQL數(shù)據(jù)庫(kù)的同學(xué),可以看一下教程

SQL教程:http://hgci.cn/sql/

MySQL微課:http://hgci.cn/minicourse/play/mysqlcourse

0 人點(diǎn)贊