发表于: 2017-08-30 20:38:06

1 1077


今天:看书,看博客,收了一个外门弟子,帮助他解决任务中的问题;复盘已无需要做的东西,在等前端弄好之后demo;


单例模式的一个例子:
public class ASingleton
{
    private static ASingleton _instance;
    private ASingleton() { }
    public static ASingleton Instance
    {
        get
        {
            if (_instance == null)
                _instance = new ASingleton();
            return _instance;
        }
    }

}


这样做的意义:
使得有且仅有一个实例存在;

使这个实例在全局都可用;


特点:私有构造器(可以类比Enum的构造器)(Enum也是实现单例的一种方式)。


单例模式的潜在问题:


public Order BuildSimpleOrder(int orderId)
{
    var order = new Order() { Id = orderId };
    Logger.Instance.Log($"Built order {orderId}");
    return order;

}


使用单例模式后,代码变得复杂,你不知道一个行为是某个方法得到的,还是方法中的某个单例的方法得到的,而且这个单例和此对象之间没有依赖关系。

例如上面中,有可能单例会抛出读写文件的IO异常,但在此方法中编译器不需要trycatch。


因为没有依赖关系,自然不存在依赖注入,代码变得更加晦涩难懂。


最后一点是,当使用单例模式时,必须确定这个单例在整个程序的生命周期只需要存在一个,一旦这个假设在开发中被打破,所有的使用单例的代码都需要修改。


——————————————————————————————————————————————————


Maven依赖冲突的原因和默认解决方式是什么?


当依赖A和依赖B同时依赖C,且二者需要的C的版本不同是,会引起依赖冲突。


如图:


一个依赖只会被引入一个版本,不可能同时加入同一个依赖的多个版本。


Maven默认的选择机制:


离root近的版本会被选择(将依赖理解为一个树,离树的根节点近的版本被选择)

如果距离一样,按pom文件的顺序进行选择。


解决方法:


IDEA自带了检查依赖冲突的界面;


Maven也有相应的插件:


mvn enforcer:enforce


<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version>
        <configuration>
            <rules><dependencyConvergence/></rules>
        </configuration>

    </plugin>


————————————————————————————————————————————————

异常处理中的几个最佳实践:


1.在finally中关闭需要关闭的资源
public void closeResourceInFinally() {
    FileInputStream inputStream = null;
    try {
        File file = new File("./tmp.txt");
        inputStream = new FileInputStream(file);
        // use the inputStream to read a file
    } catch (FileNotFoundException e) {
        log.error(e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
}

(但是,在jdk1.7之后,几乎所有类似资源在try之后都会被自动关闭,所以不需要finally中进行关闭了)如图中,实现了AutoCloseble的有一千多个:


2.抛出异常的范围越确切越好,一般不要直接抛出Exception,让别人不知道你的方法可能抛出哪些异常。


3.自定义的异常要在方法前进行说明此异常的含义。


4.catch异常时,详细打出日志说明原因。


5.多个catch时注意顺序从小到大,注意IDE提示的 unreachable code


6.永远不要catch Throwable:


Throwable是所有Exception和Error的父类,Throwable有可能是JVM中的严重错误,不是需要代码解决的问题。


7.不要在catch块中打印异常再throw相同的异常,这样会导致控制台多次现实这个异常。
——————————————————————————————————————————————————
如何写一个泛型方法,及泛型方法中的extends是什么?
public static int add(int a, int b) {
    return a + b;
}
实现整数加
public static < T extends Number > double addStaticMethod(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }
实现各种类型数加
——————————————————————————————————————————————————


明天:要去医院,感冒又加重了;总结面试中的知识点;


问题:开始准备面试了,心很虚


总结:无


进度:http://task.ptteng.com/zentao/project-burn-277.html


demo:1号


返回列表 返回列表
评论

    分享到