编程日记于2018年3月22日


解决了同事A的正则表达式问题

问题:
    a.matchs("正则") 测试好用,程序引入后无法使用,一直是false,程序代码大概是这样的:

        for(i=0; i < len; ++ i){
            for(j = 0; j < len1; ++ j){
                if(array[i].matchs("正则")){
                    ...
                }
            }
        }

    搞了十分钟发现是该程序的第二层for循环引用了第一层for循环的变量,传入参数有问题,这是一个低级错误。

总结: 
    值得记录的原因,这个问题有两个焦点,一个焦点是正则表达式,另外一个焦点是问题的真正所在。
    而一般情况下,我们关注的焦点都容易被我们控制力度不是很强的方向吸引,这里即正则表达式,这值得注意。

    最终解决这个问题还是把正则验证提出为函数发现的,即

        boolean regex(String i){
            return i.matchs("正则");
        }

    发现传入参数是错误的,所以这里总结的原则是:

        a.函数尽量粒度复用;
        b.调试问题时,注意焦点列举,并逐一调试;

解决Spring的@RequstBody传参问题

问题:

    前端传入的一个json对象,后台接到的一直是null

原因:

    这个json对象所有的属性都是大写的, 而SpringBoot默认情况下,将使用小写来映射到@RequestBody

总结:

    这个问题自己以前没有遇到过,因为谁都不会搞那么另类的json, 处理这个问题总结出的原则就是:

        a.无论是json属性还是变量命名,以小写优先, 驼峰次之,大写为下;
        b.遇到奇怪的问题时,从最奇怪的地方开始调试;

在某些机器上不能从maven私服获取jar

问题:

    maven私服不能获取jar,通过修改代理的仓库地址也不能解决

原因:

    尚不明确,目前的解决办法是通过在本机器的maven setting文件中,加入阿里云仓库镜像:



        <mirror>
          <id>central</id>
          <mirrorOf>*</mirrorOf>
          <name>central-mirror</name>
          <url>http://xxx:xx/nexus/content/groups/public/</url>
        </mirror>
    	<mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
          </mirror>

同事B问,为什么SpringBoot报错总是报奇怪的错误

问题:

    无论哪个Bean有问题,总是堆栈最上面显示一个固定的Bean注入失败

原因:

    Spring注入的时候,类似一个网状结构,报错总会将最开始注入的那个Bean体现在堆栈最上面

原则

异常的处理

原则:

    任何高手写出的代码,都需要异常处理,因为逻辑是完美映射的,数据有时不在这个映射集合之内。

防止工作被打断的方法

原则:

    消息驱动原则,当同事A,B,C 询问问题时,将其排在消息队列中,而不是直接被叫去解决问题,保证一个连续的工作时间片