2015年工作中遇到的问题:51-60

51.在mysql数据库中,空值和null值是不同的。
mysql-front这个mysql数据库管理工具,看得比较明显,空""字段的背景色是“白色”,null字段的背景色是“灰绿色”。
可以右键,删除这个字段,把空变为null。

52.TOMCAT开放远程调试端口。

在eclipse中怎么设置条件断点。
a.在你要想停下的行上添加断点 
b.在断点标记上单击右键,然后打开断点属性(breakpoint properties...) 
c.在断点属性(breakpoint properties...)编辑对话框中勾选enable condition,并加入你的条件

通过Eclipse,也可以使用本地代码,远程调试线上的Web应用。
目前忘记了,在秒针工作的时候的Boss告诉我的,今后有需要再学习。

JVM远程调试,debug可以加条件(比如uid=2000),防止线上用户无法正常访问~。

53.Freemarker生成Table,每行放4个元素,1个小算法。
关键点:遍历过程中,当前索引为 item_index,item是元素取的名字。
% 为取模运算
第1个元素,<tr>
最后1个元素,本例中为第4个,</tr>
中间几个元素,只显示内容

如果不足4个,最后不足“</tr>”

<table>
<#list privilegeList as item>
  <#if (item_index+1)%4 ==1>
  <tr> <td>${item.name}<input type="checkbox" name="privilegeStr" value="${item.acl}"/>&nbsp;</td>
  <#elseif (item_index+1)%4 ==0>  
    <td>${item.name}<input type="checkbox" name="privilegeStr" value="${item.acl}"/>&nbsp; </tr>
  <#else>
    <td>${item.name}<input type="checkbox" name="privilegeStr" value="${item.acl}"/>&nbsp;
  </#if>
   </#list>
    <#if privilegeList?size%4!=0></tr></#if>
</table>

54.数据库命名规范的问题。
uid,userId,user_id。
之前还在考虑多个单词的时候,用userId,可以很方便地转换成Java变量。
但是呢,今天问了下Boss,说到Oracle的字段区分大小写可能不支持。
为了方便迁移,引起不必要的错误,不用userId这种写法。

最近几年一直在用mysql,mysql支持userId混合大小写,Oracle是否支持不太确定。
部分网友认为,Oracle不支持或者需要建表时特殊处理。
由于自己没有Oracle,又为了养成好的习惯,还是用uid或者user_id这种形式命名数据库字段吧。

55.一条流水的操作,可能是前端用户,也可能是管理员,也可能是系统。
京东购物,区分了客户和系统,我觉得这样做挺好的。

56.SpringMVC接收参数疑问。
bean的每一个get方法都被调用了。
get和set有关系,可能是get方法影响到set方法的调用。
public class TestForm {
private Money amount;
}
public class Money
long cent =0;

public long getCent() {
return cent;
}

public void setCent(long cent) {
this.cent = cent;
}
public long getIntegerPart() {
return cent/100;
}
public Long getPart() {
return null;
}
public void setPart(Long intPart){
this.cent = intPart*100;
}
}

问题,字段只有1个cent,普通的get和set方法正常。
现在的需求是,有的时候,资金直接接收integer部分,或者double部分,
    如果再增加一个字段,必须维护一个数据的多种形式,同步比较麻烦。
因此,最初尝试的方法是,不增加字段,直接增加另外一种形式的get和set方法,比如
getIntegerPart,setIntegerPart。
setIntegerPart总是失败,不会被调用。如果去掉getIntegerPart,setIntegerPart正常。
经过实践发现,get方法,如果值是long类型的0,就不再调用setIntegerPart。
如果把getIntegerPart的返回值改成Long类型,就正常了。
通过增加get方法并且返回值Long而不是long,但不增加字段,解决了这个问题,但是的但是啊,
为什么long和Long不一样,SpringMVC的代码又很难看懂,只能“知其然不知其所以然”。
57.update与case when语法,Boss犯了一个小错误。
 
一个文章的置顶按钮,如果文章的当前状态置顶,点击按钮则取消置顶,反之则将文章设置为置顶状态,数据库中使用1表示置顶状态,反之用0表示,实现该功能的SQL语句如下:

SQL Server:sql = "update Article set IsTop= (case when IsTop='0' then '1' else '0' end) where Id=" + id + "";

Boss漏掉了那个“end”。
最好加个括号,看起来比较清楚。



58.互联网服务通过Nginx实现“灰度发布”。
Boss经常会谈及阿里的一些运维等做法,我只是看新闻了解过,听他说说,也记下来。
如果有需要,就尝试一下。

至少起2台服务,一台挂了,可以切换到另外一台。同一个机房,也不够保险,万一机房之类的断网或断电,
还是直接跪,因此不同地域至少2台,是比较靠谱的。


业界,还有一个“灰度发布”的概念,就是系统升级,不停止服务。
具体做法是,先停止其中的1台服务,升级,重启,没问题之后。
再以此类推,升级下一台服务。

59.阿里云监控,为什么总是出问题呢?
监控配置错了:如果 http.status 连续3次 >= 200 就通知。
操作符应该选择“>”,而不是“>=”。
改成:如果 http.status 连续3次 >= 400 就通知。

60.上传图片,需要先创建相关目录。
idCardImageUploadPath = C:/home/whptp/upimg/yiqihao/idcard/
必须首先创建这些目录,否则直接在程序中存储图片,可能会提示找不到路径。
妈蛋,“C:homewhptpupimgyiqihao”手动去创建这个目录,结果漏掉了一个字母,搞了半天,一直看不到图片。
原文地址:https://www.cnblogs.com/qitian1/p/6462881.html