zoukankan      html  css  js  c++  java
  • 2014年工作中遇到的20个问题:141-160

    141.日期转换。

      //输入的时间为毫秒的准确时间

      //firstTime:1417139867916,lastTime:1419731867916

      public static int getDayBetweenTwoDate(long firstTime, long lastTime){

          //当天的0点:1417104000000

     long firstCalendaStartTime = getTheDayStartTime(firstTime);

     //当天的0点:1419696000000

     long lastCalendaStartTime = getTheDayStartTime(lastTime);

     //0点相减结果为-2592000000,转int(1702967296),再除,导致结果不对

     int days = (int)(firstCalendaStartTime - lastCalendaStartTime) / 86400000;

     return days;//结果为-19

      }

      

      问题原因:firstCalendaStartTime - lastCalendaStartTime 是比较大的负数,强制转换成int,变成了正数。

      应该是溢出或者long强制转换成int导致的。

      

      

      不改变代码结构,只调整优先级,先执行 除法,再执行 强制转换:

       public static int getDayBetweenTwoDate(long firstTime, long lastTime){

     long firstCalendaStartTime = getTheDayStartTime(firstTime);

     long lastCalendaStartTime = getTheDayStartTime(lastTime);

     int days = (int)((firstCalendaStartTime - lastCalendaStartTime) / 86400000);

     return days;//-30 2014年11月28日执行,两月相差确实是30天

      }

      

      这段代码还有个“有歧义”的地方,通常betweenTwoDate应该返回正数,表明后面的比前面的大几天。

      但,咱们的代码想实现的是,前面的时间是否比后面的时间大,如果小于,就表明过期了。

      

      

       public static void main(String[] args) {

     Date now = new Date();

     Date d2 = DateUtil.addMonth(now, 1);

     System.out.println(now.toString());

     System.out.println(d2.toString());

     int days = DateUtil.getDayBetweenTwoDate(now.getTime(), d2.getTime());

     System.out.println(days);

      }

      

    142.分类循环,都加上“编辑”事件。


    可行方法1:只有1个地方使用el表达式,使用ready方法,页面加载完成,再渲染

    <#list categoryRows as category>

    <!-- 循环过程中,js的变量相加‘"#cms_editor"+categoryId’不会生效,所有地方都直接使用${category.id}-->

    <script type="text/javascript">

    $(document).ready(

    function(){

      var id=${category.id};

    $("#cms_editor"+id).bind("click",function(){

    $("#editor_name"+id).toggle();

    $("#category_name"+id).toggle();

    });

    });

    </script>

    </#list>


    可行方法2:每个地方都直接使用el表达式

    <#list categoryRows as category>

    <script type="text/javascript">

    $("#cms_editor${category.id}").bind("click",function(){

    $("#editor_name${category.id}").toggle();

    $("#category_name${category.id}").toggle();

    });

    </script>

    </#list> 


    不可行方法3:只有最后1个分类,绑定了事件

    <#list categoryRows as category>


    <script type="text/javascript">

      var id=${category.id};

    $("#cms_editor"+id).bind("click",function(){

    $("#editor_name"+id).toggle();

    $("#category_name"+id).toggle();

    });

    </script>

    </#list> 


    注意事项:

    先执行For循环,Freemarker模版渲染完成之后,返回前端Html,才可能执行js调用。

    循环过程中,js的变量相加‘"#cms_editor"+categoryId’不会立即生效。



    143. SpringMVC配置了异常处理器,通过实现HandlerExceptionResolver接口。


      //解决异常

    public ModelAndView resolveException(HttpServletRequest request,

    HttpServletResponse response, Object handler, Exception ex) {

    logger.error("error:", ex);

    ModelAndView view = new ModelAndView(exceptionPage);

    view.addObject("err", ex);

    //ex.printStackTrace();

    return view;

    }

    没有在控制台打印异常,错在哪都不知道,略显坑爹啊~



    144.Tomcat中配置了404页面。

    <error-page>

        <error-code>500</error-code>

        <location>/error/500.html</location>

      </error-page>

      <error-page>

        <error-code>404</error-code>

        <location>/error/404.html</location>

      </error-page>

     访问一个不存在的页面,结果总是提示/error/404.html找不到。

     加上SpringMVC配置<mvc:default-servlet-handler/>,就好了。


    145.修改SiteMesh的Decorator.xml配置文件,需要重启应用服务器。



    146.URL区分大小写。

      http://localhost:8080/jsgame/flappypig/flappyPig.html

      URL中的字母区分大小写,最好统一成小写。


    147.Javascript严格模式。

    var flappy = (function (self) {

        'use strict';

    });

    设立"严格模式"的目的,主要有以下几个:

      - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

      - 消除代码运行的一些不安全之处,保证代码运行的安全;

      - 提高编译器效率,增加运行速度;

      - 为未来新版本的Javascript做好铺垫。

    参考资料:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html


    148.数据库表的字段不能是关键字,比如“key”。

    CREATE TABLE `briefcms_setting` (

      `id` int(11) NOT NULL AUTO_INCREMENT,

      `key` varchar(255) DEFAULT NULL COMMENT 'key是关键字',

      `value` varchar(255) DEFAULT NULL,

      PRIMARY KEY (`id`)

    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;


    数据库的字段名称key,在写update语句的时候,会报错。

    update briefcms_setting set value='' where key ='';


    把key改为name就可以了,太坑了。


    149.Web服务器响应静态请求。

    线上配置Nginx代理。


    本地开发配置Tomcat

    <servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>/static/*</url-pattern>

    </servlet-mapping>

    SpringMVC的也加上,<mvc:default-servlet-handler/>


    150.SpringMVC的Controller与Struts2的Action,单例Singleton与多例Prototype。

    Struts接收参数,是在Action类定义一个字段,比如Person,接收参数,是类作用域的变量。如果是单例,会共享。

    所以,必须配置@Prototype

    SpringMVC接收参数,是在Controller的某个方法定义一个参数,比如Person,接收参数,是局部变量。


    151.Mybatis的in查询。

    方法一:参数list是个集合

    <select id="batchList" resultType="java.util.Map">

    select * from p2p_loan_info where lid in

    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  

         #{item.lid}  

     </foreach>  

    </select>

    方法二:参数idList是"a,b,c"这种格式

    @Select("select count(*) from p2p_post where category_id in (#{idList}) and status= 0")

    Integer getCountIn(String idList);

    不可行的方法: category_id in #{idList},category_id in ${idList},idList是"(a,b,c)"。

    #{}提示'' 字符串不对

    ${}提示,找不到变量的getter方法


    152.dao和mapper在同一个目录不需要???

    <mapper class="com.p2p.user.dal.dao.IdCardDao"/>

    <mapper resource="mybatis/IdCardInfoMapper.xml"/>

    不需要在mybatis-config.xml引入,只配置Dao根据接口Mapper扫描就可以了。

    153. Java和Freemarker对“%”和“-”的支持不好。

    Freemarker显示变量,不支持“-”和“%”,params.like-lid或者params.%lid不可以,貌似对"%"和“-”不能正常识别。

    <input type="text" class="i-inp" id="search_lid" name="params[like_lid]" 

    <#if page.params.like_lid> value="${page.params.like_lid}" </#if> />

    Java的变量定义,不能以“-”结尾,比如“like-”不行。

    //可行

       String flagLike = "like_";

    154.对第123个问题的修正。


       第123.Git Push错误“Error writing request body to server”,解决方法可能会有问题。

       

       我是在“User Setting”中增加的配置,而不是在“System Setting”里。

       System Setting是不可写的,提示配置文件“Unknown”。

       

       Boss也遇到了这个问题,他想通过设置“System Setting”,但是总是被拒绝,报NTFile相关的权限异常。

       在“User Setting”里设置,就Ok了。


    155.Eclipse日志文件存放在何处 。

      工程目录,比如J:JavaWebfansunion.metadata.log


    156.  日期比较between and不够灵活。

    where time between ${startDate} and ${endDate}

    输入的可能只有startDate或endDate.


      <if test="startDate != null">

           and time >= startDate 

         </if>

         

         <if test="endDate != null">

            and time &gt;= endDate

         </if>


    157. Mybatis解决“大于等于号”的问题。

     &gt; 大于

     或者使用 CDATA

    <![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>   

     

    158.遇到2个很像的单词,意思也类似。

    totle:信息总数;资讯总数;整个;周遍

    total:总计的(金额等); 全部的; 完全的; 绝对的

    n.总计,总数; 全体数量

    159.网上有HTML在线编辑器格式化功能,会把FTL的表达式,弄坏。

    <#list list as item>


    </#list>


    格式化为

    &lt;&gt;


    160.Commons-Collections的MapUtils工具方法还是不错的。

    本来想自己去写个的,结果输入MapUtils.get有自动提示,发现有现成的,又可以偷懒了。


     Integer org.apache.commons.collections.MapUtils.getInteger(Map map, Object key)

     Gets a Integer from a Map in a null-safe manner. 

  • 相关阅读:
    10个用Console来Debug的高级技巧
    JS Object对象
    图解你身边的 SOLID 原则
    JavaScript判断数据类型
    三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
    开发者的福利,报名即可领取代金券,赢运动手环
    用Python调用华为云API接口发短信
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(中)
    学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(上)
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463077.html
Copyright © 2011-2022 走看看