代碼優(yōu)化
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)寬城免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
代碼結(jié)構(gòu)層次的優(yōu)化(目的:更加方便代碼的維護--可維護性,可讀性)
1.代碼注釋(代碼規(guī)范)
2.工具類的封裝(方便代碼的維護,使代碼結(jié)構(gòu)更加清晰不臃腫,保證團隊里代碼 質(zhì)量一致性)
3.公共部分的提取
代碼性能的優(yōu)化(目的:使程序的性能最優(yōu)化)
1.使用一些性能比較高的類(bufferInputStream)
2.緩沖區(qū)塊的大小(4k或者8k)
3.公共部分的提取
4.通常要用stringbuffer替代string加號拼接
業(yè)務(wù)優(yōu)化
我們做項目的時候業(yè)務(wù)優(yōu)化這方面最主要是從用戶體驗度角度進行考慮,減少用戶操 作的步驟提高工作效率,通常有以下幾種:
1.可以通過tabindex屬性來改變tab鍵盤的操作順序
2.可以通過回車鍵來進行搜索或者提交操作
3.對于單選按鈕和復(fù)選按鈕可以通過操作后面的文本來選擇前面的單選按鈕以及復(fù)選 按鈕
4.添加的信息要按照id倒序進行排列
5.進行搜索操作時加入js loading操作(不僅告訴用戶所進行的請求正在被處理,而 且防止用戶多次點擊提交操作)
6.當進行刪除操作的時候要彈出提示框,警告用戶要進行刪除操作,是否確認。
7.根據(jù)returnURL在用戶登錄成功后直接跳到想要訪問的資源。
8.進行刪除操作時通過confirm提示用戶是否確認刪除操作,操作完后提示操作是否 成功。
9.減少用戶操作的步驟
10.使用autocomplete插件快速進行搜索
必背,必做:
1.可以通過回車鍵來進行搜索或者提交操作
2.添加的信息要按照id倒序進行排列
3.進行搜索操作時加入js loading操作(不僅告訴用戶所進行的請求正在被處理,而且防止用戶多次點擊提交操作)
4.當進行刪除操作的時候要彈出提示框,警告用戶要進行刪除操作,是否確認,如果刪除成功則彈出提示框告訴用戶。
5.減少用戶操作的步驟
6.通過ztree,以及kindeiditor來提高用戶的體驗度
sql優(yōu)化
1、SELECT子句中避免使用 *, 盡量應(yīng)該根據(jù)業(yè)務(wù)需求按字段進行查詢
2、盡量多使用COMMIT如對大數(shù)據(jù)量的分段批量提交釋放了資源,減輕了服務(wù)器壓力
3、在寫sql語句的話,盡量保持每次查詢的sql語句字段用大寫,因為oracle總是先解析 sql語句,把小寫的字母轉(zhuǎn)換成大寫的再執(zhí)行
4、用UNION-ALL 替換UNION,因為UNION-ALL不會過濾重復(fù)數(shù)據(jù),所執(zhí)行效率 要快于UNION,并且UNION可以自動排序,而UNION-ALL不會
5、避免在索引列上使用計算和函數(shù),這樣索引就不能使用
Sql優(yōu)化精簡版:
1.(重點)(必須說) SELECT語句中避免使用 *,盡量應(yīng)該根據(jù)業(yè)務(wù)需求按字段進行查詢
舉例:如果表中有個字段用的是clob或者是blob這種大數(shù)據(jù)字段的話,他們的查詢應(yīng)該根據(jù)業(yè)務(wù)需要來進行指定字段的查詢,切記勿直接用*
2.(重點) 刪除重復(fù)記錄(oracle):
最高效的刪除重復(fù)記錄方法(因為使用了ROWID)例子:
DELETE FROM EMP E WHERE E.ROWID >
(SELECT MIN(X.ROWID)
FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
3.用>=替換>
如一個表有100萬記錄,一個數(shù)值型字段A,
A=0時,有30萬條;
A=1時,有30萬條;
A=2時,有39萬條;
A=3時,有1萬記錄。
那么執(zhí)行A>2與 A>=3 的效果就有很大的區(qū)別了,因為 A>2 時,ORACLE會先找出為2的記錄索引再進行比較,而A>=3時ORACLE則直接找到=3的記錄索引。
4.(重點)盡量多使用COMMIT如對大數(shù)據(jù)量的分段批量提交
5. (重點)用NOT EXISTS 或(外連接+判斷為空)方案 替換 NOT IN操作符此操作是強列推薦不使用的,因為它不能應(yīng)用表的索引。推薦方案:用NOT EXISTS或(外連接+判斷為空)方案代替
6.(重點 必須說)LIKE操作符(大數(shù)據(jù)的全文檢索使用luncene)(solr)因為使用like不當,會導(dǎo)致性能問題,原因是like在左右兩邊都有%的時候,不會使用索引。
如LIKE '%5400%'這種查詢不會引用索引,而LIKE 'X5400%'則會引用范圍索引。
一個實際例子:
查詢營業(yè)編號YY_BH LIKE '%5400%'這個條件會產(chǎn)生全表掃描,如果改成YY_BH LIKE 'X5400%' OR YY_BH LIKE 'B5400%'則會利用YY_BH的索引進行兩個范圍的查詢,性能肯定大大提高。
7.(重點,必須說)避免在索引列上使用計算和函數(shù),這樣索引就不能使用
舉例:
低效:
SELECT… FROM DEPT WHERE SAL * 12 > 25000;
高效:
SELECT… FROM DEPT WHERE SAL > 25000/12;
8.(重點 必須說)用UNION-ALL 替換UNION,
因為UNION-ALL不會過濾重復(fù)數(shù)據(jù)而且不會自動排序,所執(zhí)行效率要快于UNION。
9.(優(yōu)化,重點,3個方面 a.緩存 b.分段批量 c.存儲過程)減少訪問數(shù)據(jù)庫的次數(shù)
舉例:如果批量刪除多條數(shù)據(jù),可以用 delete from tableName where id
in (1,2,3)
而不要用多條delete語句進行刪除
10.(重點 必須說)用TRUNCATE替代DELETE
TRUNCATE不記錄日志,DELETE記錄日志,所以TRUNCATE要快于DELETE但是一旦用TRUNCATE進行刪除就不能進行恢復(fù),TRUNCATE是刪除整張表的數(shù)據(jù)不能加where條件。
==================================================================
MySQL,sqlserver中如果
id為自增類型,那么如果用TRUNCATE刪除,則id字段再插入數(shù)據(jù)時從1開始,如果delete刪除的話,則從刪除之前的id的值繼續(xù)增長。
防sql注入
針對防sql注入,我們通常是這樣做的:
首先在前臺頁面對用戶輸入信息進行js驗證,對一些特殊字符進行屏蔽,比如:or ,單引號,--,= ,還有就是限制用戶名輸入的長度,我們一般將其限制在6---13位。另外,對于用戶的敏感信息我們進行Md5加密,還有,為了增加用戶體驗度和用戶友好度,為了不使用戶看到一些詳細的異常信息我們會進行錯誤信息頁面的定制,像404,500錯誤。另一個我層面講,這樣做也是為了保護我們的一些重要信息。此外,我們會給特定的人分配定定的權(quán)限,而不是給其分配管理員權(quán)限!
sql注入
所謂SQL注入,就是通過一些含有特殊字符的sql語句發(fā)送到服務(wù)器欺騙服務(wù)器并進行攻擊。(特殊字符:or, 單引號,--,空格)
Sql注入的 防護
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式(js正則或者java后臺正則),或限制長度;對單引號和雙"-"進行轉(zhuǎn)換等。
2.永遠不要使用動態(tài)拼裝sql,使用參數(shù)化的sql。(永遠不要使用+號拼接sql字符串,而是使用?傳參的方式進行)
3.不要給用戶太高的權(quán)限而根據(jù)需求進行賦權(quán)
4.對敏感信息進行加密 如md5(單向加密不可逆轉(zhuǎn))。
5.自定義錯誤頁面。目的是為了不把我們的程序的bug暴露在別有用心的人的面前。而去不會讓用戶看到報錯的頁面,也提高了用戶的體驗度。
SQL注入防范
使用參數(shù)化的過濾性語句 要防御SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數(shù)化的語句。參數(shù)化的語句使用參數(shù)而不是將用戶輸入嵌入到語句中。在多數(shù)情況中,SQL語句就得以修正。然后,用戶輸入就被限于一個參數(shù)。
輸入驗證
檢查用戶輸入的合法性,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)。數(shù)據(jù)檢查應(yīng)當在客戶端和服務(wù)器端(java代碼)都執(zhí)行之所以要執(zhí)行服務(wù)器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。 在客戶端,攻擊者完全有可能獲得網(wǎng)頁的源代碼,修改驗證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務(wù)器。因此,要保證驗證操作確實已經(jīng)執(zhí)行,唯一的辦法就是在服務(wù)器端也執(zhí)行驗證。你可以使用許多內(nèi)建的驗證對象,例如Regular Expression Validator,它們能夠自動生成驗證用的客戶端腳本,當然你也可以插入服務(wù)器端的方法調(diào)用。如果找不到現(xiàn)成的驗證對象,你可以通過Custom Validator自己創(chuàng)建一個。
錯誤消息處理
防范SQL注入,還要避免出現(xiàn)一些詳細的錯誤消息,因為黑客們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數(shù)據(jù)的長度、類型、語句、企業(yè)規(guī)則等。
加密處理
將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這相當于對用戶輸入的數(shù)據(jù)進行了“消毒”處理,用戶輸入的數(shù)據(jù)不再對數(shù)據(jù)庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。
存儲過程來執(zhí)行所有的查詢
SQL參數(shù)的傳遞方式將防止攻擊者利用單引號和連字符實施攻擊。此外,它還使得數(shù)據(jù)庫權(quán)限可以限制到只允許特定的存儲過程執(zhí)行,所有的用戶輸入必須遵從被調(diào)用的存儲過程的安全上下文,這樣就很難再發(fā)生注入式攻擊了。
使用專業(yè)的漏洞掃描工具
攻擊者們目前正在自動搜索攻擊目標并實施攻擊,其技術(shù)甚至可以輕易地被應(yīng)用于其它的Web架構(gòu)中的漏洞。企業(yè)應(yīng)當投資于一些專業(yè)的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同于網(wǎng)絡(luò)掃描程序,它專門查找網(wǎng)站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發(fā)現(xiàn)的漏洞。
確保數(shù)據(jù)庫安全
鎖定你的數(shù)據(jù)庫的安全,只給訪問數(shù)據(jù)庫的web應(yīng)用功能所需的最低的權(quán)限,撤銷不必要的公共許可,使用強大的加密技術(shù)來保護敏感數(shù)據(jù)并維護審查跟蹤。如果web應(yīng)用不需要訪問某些表,那么確認它沒有訪問這些表的權(quán)限。如果web應(yīng)用只需要只讀的權(quán)限,那么就禁止它對此表的 drop 、insert、update、delete 的權(quán)限,并確保數(shù)據(jù)庫打了最新補丁。
安全審評
在部署應(yīng)用系統(tǒng)前,始終要做安全審評。建立一個正式的安全過程,并且每次做更新時,要對所有的編碼做審評。開發(fā)隊伍在正式上線前會做很詳細的安全審評,然后在幾周或幾個月之后他們做一些很小的更新時,他們會跳過安全審評這關(guān),“就是一個小小的更新,我們以后再做編碼審評好了”。請始終堅持做安全審評。
數(shù)據(jù)庫中常用術(shù)語:
ddl:數(shù)據(jù)定義語言 Create Drop Alter
dml:數(shù)據(jù)操縱語言 insert update delete select
dcl:數(shù)據(jù)控制語言 grant revoke
tcl:事務(wù)控制語言 commit rollback
分享題目:Java個人技術(shù)知識點總結(jié)(優(yōu)化篇)
新聞來源:http://bm7419.com/article22/pciojc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、、云服務(wù)器、全網(wǎng)營銷推廣、定制開發(fā)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)