0.if嵌套的層數最好不要超過3層css
- import java.util.HashMap;
- import java.util.Map;
-
-
- public class Qiantao {
-
- /*
- * 嵌套太多層if,閱讀性很是差,和看遞歸代碼同樣
- * @author yifangyou
- * @since 2011-08-16 09:35:00
- */
- int example1(int a,String path,String account,String user){
- int result=0;
- if(account!=null){
- if(a==1){
- if("/createAccount".equals(path)){
- if(createAccount(account)){
- result=1;
- }else{
- return -4;
- }
- }else if("/createUser".equals(path)){
- if(i***istsAccount(account)){
- if(createUser(account,user)){
- result=2;
- }else{
- return -6;
- }
- }else{
- return -5;
- }
- }else{
- result=-3;
- }
- }else{
- result=-2;
- }
- }else{
- result=-1;
- }
-
- return result;
- }
-
- Map<String,Integer> paths=new HashMap<String,Integer>(){{
- this.put("/createAccount", 1);
- this.put("/createUser", 2);
- }};
-
-
- /*
- * 採用return減小嵌套層數,井井有條,便於修改,增長和刪除判斷比較容易
- * @author yifangyou
- * @since 2011-08-16 09:35:00
- */
- int example2(int a,String path,String account,String user){
- if(account==null){
- return -1;
- }
-
- if(a!=1){
- return -2;
- }
- Integer pathId=paths.get(path);
- if(pathId==null){
- return -3;
- }
- switch(pathId){
- case 1:
- if(!createAccount(account)){
- return -4;
- }
- return 1;
- case 2:
- if(!i***istsAccount(account)){
- return -5;
- }
- if(!createUser(account,user)){
- return -6;
- }
- return 2;
- default:
- return 0;
- }
-
- }
-
- private boolean i***istsAccount(String account) {
- // TODO Auto-generated method stub
- return false;
- }
-
- private boolean createUser(String account, String user) {
- // TODO Auto-generated method stub
- return false;
- }
-
- private boolean createAccount(String account) {
- // TODO Auto-generated method stub
- return false;
- }
- }
1.儘可能重用數據庫鏈接或者文件句柄
2.過度的建立對象會消耗系統的大量內存,嚴重時,會致使內存泄漏,所以,保證過時的對象的及時回收具備重要意義。
JVM的GC並不是十分智能,所以建議在對象使用完畢後,手動設置成null。
3.採用在須要的時候纔開始建立的策略。
4.array(數組)和ArrayList的使用。
array 數組效率最高,但容量固定,沒法動態改變,ArrayList容量能夠動態增加,但犧牲了效率。
5.儘可能使用基本數據類型代替對象。
6.使用具體類比使用接口效率高,但結構彈性下降了
7.讀取配置文件內容,最好放在static變量裏,不要用到時再解析配置文件
8.避免在同一個類中動過調用函數或方法(get或set)來設置或調用變量
9.輸入和輸出(I/O),避免屢次讀寫同一個文件,讀時最好儘可能一次讀取完須要的數據,寫時,先把要寫的內容所有放到變量裏,一次寫入文件
10.數據庫查詢最好使用PrepStatement防止SQL注入,提升性能,prepStatement減小解析sql語句時間
- drop table IF EXISTS t1;
- create table t1(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
- drop table IF EXISTS t2;
- create table t2(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
- DROP PROCEDURE IF EXISTS test;
- DELIMITER ;;
- CREATE PROCEDURE test()
- BEGIN
- truncate t1;
- truncate t2;
- set @start_time=UNIX_TIMESTAMP();
- set @id=1;
- SET @sql_str = "insert into t1 values(?,'a')";
- PREPARE stmt FROM @sql_str;
- REPEAT
- EXECUTE stmt USING @id;
- set @id=@id+1;
- UNTIL @id>100000 END REPEAT;
- DEALLOCATE PREPARE stmt;
- select UNIX_TIMESTAMP()-@start_time as span;
- set @start_time=UNIX_TIMESTAMP();
- set @id=1;
- REPEAT
- insert into t2 values(@id,'a');
- set @id=@id+1;
- UNTIL @id>100000 END REPEAT;
- select UNIX_TIMESTAMP()-@start_time as span;
- END;;
- DELIMITER ;
- call test();
11.可以在數據庫裏作的操做,儘可能在數據庫裏作,由於數據是集合運算
12.帶索引的inner join 比in效率高得多
- select count(*) from region;
- select count(*) from cidr;
- select SQL_NO_CACHE count(*) from cidr where region_id in(select id from region);
- select SQL_NO_CACHE count(*) from cidr inner join region on cidr.region_id=region.id;
13.常常查詢的字段加上索引,這個可以提升20倍
14. 當只要一行數據時使用 LIMIT 1,這樣mysql查詢到1條後能夠立刻返回結果;
15.避免 SELECT *,查詢哪一個字段就寫哪一個,這樣能夠減小查詢時間和網絡傳輸;
16. 拆分大的 DELETE 或 INSERT 語句
若是你須要在一個在線的網站上去執行一個大的 DELETE 或 INSERT 查詢,你須要很是當心,要避免你的操做讓你的整個網站中止相應。
由於這兩個操做是會鎖表的,表一鎖住了,別的操做都進不來了。
17.隱式提交數據庫
在事務執行過程當中,執行下面語句至關於執行COMMIT數組
- ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.
runcate 或者drop臨時表會引發隱式提交函數
CREATE TEMPORARY TABLE 臨時表不會引發隱式提交性能
delete from 臨時表不會引發隱式提交網站
CREATE VIEW 會引發隱式提交
18.事務並行問題,按照誰先執行事務的順序生效
兩個事務同時delete,update,insert操做同一行時,或者含有自增id時會引發掛起
- create table t(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
- create table t(id int NOT NULL,name varchar(10));
- --客戶端A
- SET AUTOCOMMIT =0;
- insert into t values (1,'a');
- --客戶端 B
- SET AUTOCOMMIT =0;
- insert into t values (1,'b');
- ----------------------------------------
- --客戶端A
- SET AUTOCOMMIT =0;
- insert into t values (2,'a');
- --客戶端 B
- SET AUTOCOMMIT =0;
- delete from t where id=2;
- --或者
- update t set name='c' where id=2;
- ----------------------------------------
- --客戶端A
- SET AUTOCOMMIT =0;
- delete from t where id=2;
- --客戶端 B
- SET AUTOCOMMIT =0;
- update t set name='c' where id=2;
- --或者
- delete from t where id=2;