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;

转载于:https://www.cnblogs.com/qiuh/p/3677942.html

java开发之提高java和mysql代码性能和质量相关推荐

  1. 祖玛java代码_androidzuma 基于java开发的安卓祖玛龙珠游戏代码,可帮助 的 学习。 Develop 238万源代码下载- www.pudn.com...

    文件名称: androidzuma下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1174 KB 上传时间: 2013-11-27 下载次数: 1 提 供 者: ...

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

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

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

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

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

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

  5. JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法

    JAVA基础再回首(一)--基本概念.JAVA开发工具.JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷..我在上章博客中提到了我以后的几个学习计划和目标就是把 ...

  6. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

  7. 面向 Java 开发人员的区块链链代码

    面向 Java 开发人员的链代码简介 点击查看视频演示查看抄本 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger F ...

  8. java开发微信设计论文_java+mysql微信的烘焙公众号的设计与实现

    摘要随着社会的发展人们的生活压力逐渐变大,人们日常的生活节奏也急剧加速,由此导致时间的缺少,人与人之间面对面交流的机会也越来越少.然而人类是一种群居生物,随时渴望有着他人的陪伴,这种陪伴不仅仅是物质上 ...

  9. 阿里巴巴Java开发手册 (Alibaba Java Coding Guidelines)

    参考资料: 阿里巴巴Java开发手册  https://www.cntofu.com/book/78/index.html 一.编程规约 ##(一)命名风格 [强制]代码中的命名均不能以下划线或美元符 ...

最新文章

  1. 0x54. 动态规划 - 树形DP(习题详解 × 12)
  2. nginx配置websocket代理
  3. Android 通信--蓝牙
  4. sdi线缆标准_Roland V1SDI——专业、便携、高性价比的SDI摄像机直播解决方案
  5. BZOJ 4665: 小w的喜糖
  6. MySQL可以用localhost 连接,但不能用IP连接的问题
  7. java swing 等待框_java – 让用户使用Swing等待
  8. android Log工具框架,LogUtils让你摆脱TAG的魔爪
  9. 华为hs8145v5如何改桥接_口译vlog | 跟我一起去华为东莞“欧洲小镇”吧!
  10. 10本畅销全球的技术经典,这次整个大的
  11. 【优化求解】基于matlab NSGA2算法多技能员工调度优化模型【含Matlab源码 1775期】
  12. [软件应用]深入验证Nero是否注册成功
  13. 常用软件运维部署篇(一)--Linux安全加固
  14. 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
  15. 华硕AURA无法启动问题或者AURA解压缩支持文件时出错,灾难性故障
  16. Word文档转/打印成PDF图片模糊问题解决
  17. 点击电脑版微信一直打不开解决方案
  18. Keil编译后Code RO Data Rw Data ZI的含义
  19. 【JAVASE】泛型基础
  20. Entity Framework基础

热门文章

  1. 如何在Oracle中导入dmp文件
  2. android asmack调用MultiUserChat.getHostedRooms方法出现空指针的异常解决方案
  3. mysql 插入数据会执行事务吗_在代码中,插入数据到数据库时,如果不使用事务,将会导致速度极慢...
  4. 图片资源添加出现问题: No resource found that matches the given name
  5. 如何在Android中设置铃声+震动
  6. Android单元测试(七):Robolectric,在JVM上调用安卓的类
  7. 第八章- 测试并发应用(引言)
  8. Mongo 与 SQL 操作对应介绍
  9. Windows 7安装到虚拟磁盘VHD文件中
  10. 基于嵌入式操作系统VxWorks的多任务并发程序设计(3)――任务调度