0.if嵌套的层数最好不要超过3层

点击(此处)折叠或打开

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class Qiantao {
  4. /*
  5. * 嵌套太多层if,阅读性非常差,和看递归代码一样
  6. * @author yifangyou
  7. * @since 2011-08-16 09:35:00
  8. */
  9. int example1(int a,String path,String account,String user){
  10. int result=0;
  11. if(account!=null){
  12. if(a==1){
  13. if("/createAccount".equals(path)){
  14. if(createAccount(account)){
  15. result=1;
  16. }else{
  17. return -4;
  18. }
  19. }else if("/createUser".equals(path)){
  20. if(i***istsAccount(account)){
  21. if(createUser(account,user)){
  22. result=2;
  23. }else{
  24. return -6;
  25. }
  26. }else{
  27. return -5;
  28. }
  29. }else{
  30. result=-3;
  31. }
  32. }else{
  33. result=-2;
  34. }
  35. }else{
  36. result=-1;
  37. }
  38. return result;
  39. }
  40. Map<String,Integer> paths=new HashMap<String,Integer>(){{
  41. this.put("/createAccount", 1);
  42. this.put("/createUser", 2);
  43. }};
  44. /*
  45. * 采用return减少嵌套层数,层次分明,便于修改,增加和删除判断比较容易
  46. * @author yifangyou
  47. * @since 2011-08-16 09:35:00
  48. */
  49. int example2(int a,String path,String account,String user){
  50. if(account==null){
  51. return -1;
  52. }
  53. if(a!=1){
  54. return -2;
  55. }
  56. Integer pathId=paths.get(path);
  57. if(pathId==null){
  58. return -3;
  59. }
  60. switch(pathId){
  61. case 1:
  62. if(!createAccount(account)){
  63. return -4;
  64. }
  65. return 1;
  66. case 2:
  67. if(!i***istsAccount(account)){
  68. return -5;
  69. }
  70. if(!createUser(account,user)){
  71. return -6;
  72. }
  73. return 2;
  74. default:
  75. return 0;
  76. }
  77. }
  78. private boolean i***istsAccount(String account) {
  79. // TODO Auto-generated method stub
  80. return false;
  81. }
  82. private boolean createUser(String account, String user) {
  83. // TODO Auto-generated method stub
  84. return false;
  85. }
  86. private boolean createAccount(String account) {
  87. // TODO Auto-generated method stub
  88. return false;
  89. }
  90. }

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语句时间

点击(此处)折叠或打开

  1. drop table IF EXISTS t1;
  2. create table t1(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
  3. drop table IF EXISTS t2;
  4. create table t2(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
  5. DROP PROCEDURE IF EXISTS test;
  6. DELIMITER ;;
  7. CREATE PROCEDURE test()
  8. BEGIN
  9. truncate t1;
  10. truncate t2;
  11. set @start_time=UNIX_TIMESTAMP();
  12. set @id=1;
  13. SET @sql_str = "insert into t1 values(?,'a')";
  14. PREPARE stmt FROM @sql_str;
  15. REPEAT
  16. EXECUTE stmt USING @id;
  17. set @id=@id+1;
  18. UNTIL @id>100000 END REPEAT;
  19. DEALLOCATE PREPARE stmt;
  20. select UNIX_TIMESTAMP()-@start_time as span;
  21. set @start_time=UNIX_TIMESTAMP();
  22. set @id=1;
  23. REPEAT
  24. insert into t2 values(@id,'a');
  25. set @id=@id+1;
  26. UNTIL @id>100000 END REPEAT;
  27. select UNIX_TIMESTAMP()-@start_time as span;
  28. END;;
  29. DELIMITER ;
  30. call test();

11.能够在数据库里做的操作,尽量在数据库里做,因为数据是集合运算
12.带索引的inner join 比in效率高得多

点击(此处)折叠或打开

  1. select count(*) from region;
  2. select count(*) from cidr;
  3. select SQL_NO_CACHE count(*) from cidr where region_id in(select id from region);
  4. 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

点击(此处)折叠或打开

  1. 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时会引起挂起

点击(此处)折叠或打开

  1. create table t(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));
  2. create table t(id int NOT NULL,name varchar(10));
  3. --客户端A
  4. SET AUTOCOMMIT =0;
  5. insert into t values (1,'a');
  6. --客户端 B
  7. SET AUTOCOMMIT =0;
  8. insert into t values (1,'b');
  9. ----------------------------------------
  10. --客户端A
  11. SET AUTOCOMMIT =0;
  12. insert into t values (2,'a');
  13. --客户端 B
  14. SET AUTOCOMMIT =0;
  15. delete from t where id=2;
  16. --或者
  17. update t set name='c' where id=2;
  18. ----------------------------------------
  19. --客户端A
  20. SET AUTOCOMMIT =0;
  21. delete from t where id=2;
  22. --客户端 B
  23. SET AUTOCOMMIT =0;
  24. update t set name='c' where id=2;
  25. --或者
  26. delete from t where id=2;

java开发之提高java和mysql代码性能和质量的更多相关文章

  1. Java开发知识之Java中的Map结构

    Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...

  2. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  3. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  4. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  5. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...

  6. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  9. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

随机推荐

  1. 免费 WebOffice使用

    目前WebOffice使用比较多主要有两个公司的产品,分别是江西金格和北京点聚.但是点聚的是免费的,虽然有欠缺之处,但是经过个人修改还是比较好用的,关键一点是,它免费啊! 把一个最主要加载页面,如果读 ...

  2. css的单位

    如果你是一名前端开发工程师,一般px和em使用频率比较高.但是今天的重点是介绍一些我们使用很少.甚至木有听说过的单位. 一.em <style type="text/css" ...

  3. 做.net的早晚会用到,并且网上还没有这方面的正确资料或几乎很少

    原文网址:http://www.cnblogs.com/langu/archive/2012/03/23/2413990.html 一直以来,找安装程序的msi源文件路径得到的都是“system32” ...

  4. OpenGL---------光照的基本知识

    从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛.人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏.因此对于人类而言,光线很大程度上表现了物体的立体感. ...

  5. JSP中文编码问题

    这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncoding="UTF- ...

  6. USB鼠标线序

    鼠标线断了,找了个废弃的手机充电线接上,特记录线序如下: 红————白          白————橙绿————绿黑————蓝

  7. [转]SSL协议详解

    背景介绍    最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识.     1.密 ...

  8. 学习笔记——策略模式Strategy

    策略模式,与模板模式一样,都是为了将接口和算法实现解耦,但策略模式更主要是整体算法的替换,而模板模式主要是流程一致,部分算法的替换. 个人理解为,一般算法替换,使用策略模式,当算法流程一致,可以提取为 ...

  9. Node.js学习 - RESTFul API

    REST Representational State Transfer (表述性状态转移), 是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTful. RESTful W ...

  10. PowerDesigner 生成数据库字典(有图有真相,绝对自创非转载)

    最近用pd做模型,生成数据字典时在网上找了很多,但是看的都很晕,说的不明白. 经过自己研究终于找到一个简单的方式,当然这只是简单的,大家举一反三去吧.辛苦弄的,求点赞!!! 先看效果图: 现在说一下步 ...