刘仁 Java后端开发

每天注意问题集锦

2018-12-21
LIUREN

每天注意问题集锦

随便注意问题

集合类 key value super
HashTable 不允许为null 不允许为null Dictionary
CurrentHashMap 不允许为null 不允许为null AbstratMap
TreeMap 不允许为null 允许为null AbstratMap
HashMap 允许为null 允许 AbstratMap

注意: HashTable 线程是安全的,CurrentHashMap锁分段技术,TreeMap是线程不安全的,HashMap线程不安全

mysq数据库选择字段是否遵循以下已知道的规则

对象 年龄区间 类型 字节 表示范围
150岁之间 tinyint 1 无符号值:0 到 255
数百岁 smallint 2 无符号值:0 到 65535
恐龙化石 数千万年 int 4 无符号值:0 到约 42.9 亿
太阳 约 50 亿年 bigint 8 无符号值:0 到约 10 的 19 次方

建立索引的时候,首先查看数据库版本,查询语句select version();

  • 如果数据库版本是5.6那么需要建立索引的字段的长度不能大于:

    字符集为 utf8mb4, 所以可申请索引的 varchar 长度为:767/4 ≈ 191;

    而字符集为 utf8 时,可设置的创建索引 varchar 长度为: 767/3 ≈ 255;

  • 如果数据库版本高于5.6那么需要建立索引的字段的长度不能大于:

    字符集为 utf8mb4 时,限制 varchar 字符为:3072/4 = 768;

    字符集为 utf8 时,限制 varchar 字符为:3072/3 = 1024;

数字型所占用的字节数如下,根据字节数即可算出表示的范围了

TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53 FLOAT 4 个字节 DOUBLE 8 个字节 DOUBLE PRECISION 8 个字节 REAL 8 个字节 DECIMAL(M,D) M字节(D+2 , 如果M < D) NUMERIC(M,D) M字节(D+2 , 如果M < D) 日期和时间类型 列类型 需要的存储量 DATE 3 个字节 DATETIME 8 个字节 TIMESTAMP 4 个字节 TIME 3 个字节 YEAR 1 字节 字符串类型 列类型 需要的存储量 CHAR(M) M字节,1 <= M <= 255 VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255 TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8 BLOB, TEXT L+2 字节, 在此L< 2 ^ 16 MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24 LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32 ENUM(‘value1’,’value2’,…) 1 或 2 个字节, 取决于枚举值的数目(最大值65535) SET(‘value1’,’value2’,…) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员

使用 ISNULL()来判断是否为 NULL 值。

在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。

在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明

  • DO(Data Object):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
  • DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
  • BO(Business Object):业务对象。由 Service 层输出的封装业务逻辑的对象。
  • AO(Application Object):应用对象。在 Web 层与 Service 层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
  • VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象

A) Service/DAO 层方法命名规约 1) 获取单个对象的方法用 get 做前缀。 2) 获取多个对象的方法用 list 做前缀。 3) 获取统计值的方法用 count 做前缀。 4) 插入的方法用 save/insert 做前缀。 5) 删除的方法用 remove/delete 做前缀。 6) 修改的方法用 update 做前缀。 B) 领域模型命名规约 1) 数据对象:xxxDO,xxx 即为数据表名。 2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。 3) 展示对象:xxxVO,xxx 一般为网页名称。 4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。

时间格式化功能SimpleDateFormat不安全换成JDK1.8的

package cn.codepeople.foo;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class DateTimeTest {

    public static void main(String[] args) {
        System.out.println(getTime());

    }

    public static String getTime() {
        Instant now = Instant.now();
        LocalDate lNow = LocalDate.now();
        LocalTime sNow = LocalTime.now();
        LocalDateTime dNow = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String nowFormat = dateTimeFormatter.format(dNow);
        System.out.println("========请高手指教======>>>>" + now);

        System.out.println("=========只有年月日======>>>>" + lNow);

        System.out.println("=========只有时分秒======>>>>" + sNow);

        System.out.println("========年月日时分秒都有======>>>>" + dNow);
        return nowFormat;
    }

}

Comments

Content