实践问题记录

174 阅读1分钟

实践问题及解答:

1.问:用户数据莫名其妙的插入了2条一模一样的数据,创建时间是一样的,记录id加了1; 答:接口只有getUserInfo,判断是否有这个用户,没有则直接创建;创建语句加锁3秒这个用户。

2.问题:mapper的xml自己写的SQL语句报找不到,没有和java方法映射关联 原因: tk.mybatis.spring.annotation.MapperScan; org.mybatis.spring.annotation.MapperScan; 使用tk时MapperScan包名不要引用错了,名字一样包名不同很容易出错,查看tk源码,引用了mybastis的,使用了tk必然会存在这个问题,但tk又比较省事。

3.sonar常见错误

1)、Double check误区 www.cs.umd.edu/~pugh/java/…

@NotThreadSafe
public class DoubleCheckedLocking {
    private static Resource resource;

    public static Resource getInstance() {
        if (resource == null) {
            synchronized (DoubleCheckedLocking.class) {
                if (resource == null)
                    resource = new Resource();
            }
        }
        return resource;
    }

    static class Resource {

    }
}

@ThreadSafe
public class SafeLazyInitialization {
    private static Resource resource;

    public static synchronized Resource getInstance() {
        if (resource == null)
            resource = new Resource();
        return resource;
    }

    static class Resource {
    }
}

//Using "volatile":
class ResourceFactory {
  private volatile Resource resource;

  public Resource getResource() {
    Resource localResource = resource;
    if (localResource == null) {
      synchronized (this) {
        localResource = resource;
        if (localResource == null) {
          resource = localResource = new Resource();
        }
      }
    }
    return localResource;
  }

  static class Resource {
  }
}

2)、类判断 if (instance != null && instance.getClass().getName().equals(String.class.getName())) 改成 instance instanceof String

3)、文件流未关闭

4)、随机数 new Random【错】 VS SecureRandom.getInstanceStrong()【对】