• 2015年工作中遇到的问题:81-90,标题党-Nginx与真实IP-Mybatis等


     81.“标题党”与“百度收录”问题。
    很久以来,就发现那些“标题党”的收录和排名情况非常好,比如CSDN某篇文章,就随便一写,就排在了第一。
    因此,如果这个收录和排名规则不变的话,今后也可以利用一下。
    比如,我自己总结的问题,如果是为了整理记录,就统一放在1篇文章里。
    如果,今后为了宣传或者推广,发帖子的时候,就取一个好的标题,吸引网友的眼球,吸引搜索引擎的眼球。

    82.Mybatis找不到参数错误:There is no getter for property named 'categoryId' in 'class java.lang.Integer'。

    错误
    List<Post> listPage(Integer categoryId);
    在测试时报错:There is no getter for property named 'categoryId' in 'class java.lang.Integer'

     问题分析:Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.value值,引起报错。
     解决方法:  List<Post> listPage(@Param("categoryId")Integer categoryId); 说明参数值。
     
     sql语句
    <select id="listPage" resultMap="PostResultMap">
    select id,title,summary,create_time from p2p_post
     where status=0 
     <if test="categoryId != null">
      and category_id=#{categoryId}
     </if>
     order by id
    desc
    </select>
     最让人郁闷的是,以前在只有1个参数的时候,都是不用@Param注解的,一般只有在多个参数的时候,才需要用。
     为什么这次,只有1个参数,也必须用@Params注解呢?
     -----------------------
     第2天早上,问了下boss,感觉还是有道理的。
     
     正解一:
     @Select("select * from ..")
     List<Post> listPage(Integer categoryId);
     
     正解二:
      List<Post> listPage(@Param("categoryId")Integer categoryId);
      <select>..</select>
      
     正解三:
       List<Post> listPage(Integer categoryId);
      <select id="listPage" parameterType="java.lang.Integer" resultMap="PostResultMap">
      
      </select>
     
     昨天遇到的那个问题,问题关键就是:xml文件中的select映射语句,默认参数类型是map,从map里取属性,所以总是找不到。
     或者是当作对象类型吧。
     因此,用@Param注解或手动指定参数类型。
     
     理论上是这样,没有去一一校验。
     
     另外需要说明,多个参数,必须使用@Param,或者用Map,或者对象。
     
    83.银行做账。
    如果账务做错了,没有“回退”这一说。
    而是再做一笔账务,把钱退回去。
    +50,-50,就是“回退”了。

    84.Tomcat的JVM经常挂掉,根据hs_err_pid23224.log这种日志文件,也没能发现具体是什么原因导致的。
    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGBUS (0x7) at pc=0x00007f1ae404fd50, pid=23224, tid=139753370498816
    #
    # JRE version: 7.0_17-b02
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode linux-amd64 compressed oops)
    # Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy
    #
    # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
    #
    # If you would like to submit a bug report, please visit:
    #   http://bugreport.sun.com/bugreport/crash.jsp
    #

    JVM致命错误日志(hs_err_pid.log)。
    为了core dumping,执行命令ulimit -c unlimited。

    参考博客园上的一篇文章
    http://www.cnblogs.com/qq78292959/archive/2012/05/08/2490443.html

    手动触发core:kill -6 pid(-6可以产生,默认的文件名是core.pid)。
    core文件很大,有200多Mb。

    分析对比最近3个月的“hs_err_pid23224.log”文件:
    Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy

    # Problematic frame:
    # v  ~StubRoutines::jint_disjoint_arraycopy

    # Problematic frame:
    # C  [libc.so.6+0x89f74]  __tls_get_addr@@GLIBC_2.3+0x89f74

    # Problematic frame:
    # C  [libc.so.6+0x89eb0]  __tls_get_addr@@GLIBC_2.3+0x89eb0
    # Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy

    # Problematic frame:
    # C  [libc.so.6+0x89f74]  __tls_get_addr@@GLIBC_2.3+0x89f74

    # Problematic frame:
    # V  [libjvm.so+0x66e040]  _Copy_arrayof_conjoint_jlongs+0x30
    # Problematic frame:
    # C  [libc.so.6+0x89e68]  __tls_get_addr@@GLIBC_2.3+0x89e68
    # Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy
    # Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy
    # Problematic frame:
    # v  ~StubRoutines::jbyte_disjoint_arraycopy

    不清楚,是不是内存不足导致的,手动设置了Tomcat的JVM内存参数。
    JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"

    现在只能等待下一次crash,看看core文件。

    鉴于Tomcat服务器现状,有必要监控内存情况,目前想到的3种方法:
    1.jconsole监控远程JVM,需要配置。
    2.web.xml配置Filter,监听内存情况。
    3.Tomcat自带的manager项目,可以留着,说不定用得上。

    下午又crash了一次,向阿里云提交了工单,看看专家能不能给点意见。

    85.Nginx与真实IP。
    配置了Nginx,Tomcat中的Web程序,获得的ip一直是“127.0.0.1”,比较纳闷。
    获得远程ip,已经判断了很多情况,为什么会这样呢?

     正解
     proxy_set_header        Host    $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     
     Java代码直接取:request.getRemoteAddr();
     再有Nginx等情况下,获得的地址不对,比如“127.0.0.1”。
     
    86.Freemarker获得属性。
    ${people.getName()},通过方法这种形式,有时会报错,而通过属性的方式${people.name}则不会。
    为啥呢?

    87.TCP/IP协议中的端口,端口号的范围从0到65535。
    有个程序的端口,12345被占用了,随手已改,改成了80001,结果越界了。

    88.项目与Git。
    之前每次从git导入一个项目后,喜欢直接把整个项目,“Add to index”,但是象Eclipse本地设置之类的文件,又不需要提交。
    每次都需要“反选”,防止错误提交。
    最近,学聪明了,只把需要提交的“文件夹”,比如“src/main”Add to index,这样就节省了“反选”需要的注意力等时间消耗。

    89.Git的文件冲突。
      有个.gitignore文件,起冲突了,但是我又从本地把它删除了。
      结果,不能把这个冲突很好地解决了。
      因为,“Add to index”或者“Delete”都会发生错误,这个文件已经不存在了嘛。
      解决办法:在原来的目录下,创建一个新的“gitignore”文件,然后再从Git里手动把它删除。
      这里的.gitignore文件,换成是A.txt这种文件,应该也是一个道理吧。

    90.“debug”的双层含义。
    log4j的debug,是一种日志级别。
    java等程序运行为debug模式,表示进行调试,可以单步跟踪。

     
  • 相关阅读:
    Qt之自定义托盘(二)
    使用react-navigation提示undefind is not a function
    vue使用mockjs配置步骤(无需启动node服务)
    input框type=file设置cursor:pointer的问题
    umi中使用scss
    umi怎么去添加配置式路由
    Rem自适应js
    解决在antd中使用 autoprefixer 9.4.5 会抛出错误 Replace text-decoration-skip: ink to text-decoration-skip-ink: auto, because spec had been changed 的问题
    file类型input框设置上传相同文件,并都可以触发change事件。
    浅谈JavaScript对象数组根据某属性sort升降序排序
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462857.html
Copyright © 2020-2023  润新知