161.用户表和超级用户分成2个表,很不合理,查询的时候,非常复杂。

162.left join还是很有“市场”的。
机构表Org连接User时,想获得user的名字,可能存在,也可能不存在,left join就适合。

##多个left join 之间不能使用","隔开
select cg.*,u.loginName creatorName,org.nativeName advertiserName
from CampaignGroup cg
left join Organization org on cg.advertiserId=org.id
left join User u on cg.creator = u.id

163.MySQL Explain命令。
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

参考资料:http://database.51cto.com/art/200912/168453.htm

164.JSTL标签用法
<select id="advertiserId">
                                <!– <option value="">请选择</option> –>
                                <c:forEach var="advertiser" items="${advertiserList}">
                                    <c:choose>                                                               
                                        <c:when test="${campaignGroupBean.advertiserId == advertiser.id}">
                                            <option selected="selected" value="${advertiser.id}">${advertiser.englishName}</option>
                                        </c:when>
                                        <c:otherwise>
                                            <option value="${advertiser.id}">${advertiser.englishName}</option>
                                        </c:otherwise>
                                    </c:choose>

</c:forEach>
                        </select>
           
#eq 可以代替 ==
<c:when test="${campaignGroupBean.advertiserId eq advertiser.id}">           
                       
165.Spring MVC接收请求参数。
a.基本类型@RequestParam可要可不要。
b.实体类型的bean/model,一定不能加。如果非要加,可以使用@ModelAttribute来修饰。
c.Map类型的,一定要加@RequestParam。

public String viewDetail(@RequestParam Integer id);
public PageVO list(CampaignGroupBean campaignGroupBean);
public PageVO listByIds(@RequestParam Map<String, Object> map);

越来越发现,通过做项目,学习知识/技术,不够系统。
只能在实践中慢慢系统化了。

166.Hibernate插入和更新数据失败。

1个好友遇到这个问题了,问我。
我首先想到的是 没有配置事务,后来我又提示debug是否显示有“insert语句”,没有。
最终,是他自己解决的。

最终的原因:
进行批量的插入数据库的数据是,不管是save/update等。首先是在session的一级缓存里面进行操作存储数据。
当数据量过大时,导致缓存不够。
所以你要进行批量数据操作时,要么定时flush一下,要么配置文件,让数据库执行sql的数量进行限制。

167.通过HTTP-Get方法同步数据的时候出现乱码。
   接口使用SpingMVC响应get请求,Server是Tomcat。

Get请求的默认编码是ISO-8859-1,SpringMVC也没有做特殊处理。
  
   需要在Tomcat的配置文件中,指定编码。

上面的描述其实是有问题的:

Tomcat-server.xml配置文件,可以配置URLEncoding指的是URL的编码。

我通过
httpclient同步spingmvc实现的接口数据出现乱码,是因为我们使用SpringMVC已经设置了编码UTF-8.

之所以出现乱码,是因为我自己多转换了一次编码。正所谓 “画蛇添足”。

是否需要转码,需要结合项目的实际情况。

168.Hibernate和Mybatis执行分页查询需要2个步骤。
  list,获得1页记录,count查询总记录数。
  这2个方法的sql语句,where的条件是一样的。

在Mybatis中可以通过
  <sql id="listAndCountCommonSql">my sql</sql>
  <select id="list" parameterType="campaignGroupBean" resultType="campaignGroupBean">
        select cg.*,u.loginName creatorName,org.nativeName advertiserName

<include refid="listAndCountCommonSql" />

order by ${orderBy}
        ${order}
    </select>

<select id="count" parameterType="campaignGroupBean" resultType="int">
        select count(*)

<include refid="listAndCountCommonSql" />
    </select>
   
    在Hibernate中,需要自己构造通用的sql。
   
    维护2份类似的sql,太费劲了。
   
    类似的还有,
    <if test="firstResult !=null">
            <if test="maxResult
            !=null"> limit #{firstResult},#{maxResult} </if>
        </if>

169.Equals比较。
       String id="1";
        Integer i = 1;
        boolean flag = i.equals(id);
   
    Integer.equals方法
        Compares this object to the specified object. The result is true if and only if the argument is not null and is an Integer object that contains the same int value as this object.
       
    不同类型,返回false。

170.JS中的String方法没有trim()方法,
可以写一个工具方法

function trimString(var str);
  也可以调用jquery的$.trim()方法。

网上也有人直接扩展了js原生的String,
  /** trim() method for String */ 
  String.prototype.trim=function() { 
    return this.replace(/(^\s*)|(\s*$)/g,''); 
  };

不过这种方法,公司js大牛大龙哥不建议这样做,可能破坏js。

171.变量的取名问题。

#Mybatis sql语句
<if test="mustIn != null and mustIn !='' ">
            and mc.AgencyId in (${mustIn})
        </if>

这个地方"mustIn"的名字不够准确。
  我想表达的意思是“代理商的id一定要在muscIn这个范围内”,
  而我最初的sql脚本写的是“活动的id”。

我是建议/习惯 取个长一点的名字,可以避免很多bug。

测出bug 的另外一种方法就是认真编写“单元测试”,JUnit很不错。

172.js响应“回车事件”。
  搜索、翻页(跳转到) 需要响应“回车”事件。
  (搜索、翻页 的"值"一般会进行"trim")

btns[4].onkeydown = function(e) {
                e = e || window.event;
                var code = e.keyCode;
                var val = (e.target || e.srcElement)['value'];
                if (code == 13) {
                    that.goTo(val);
                }
            };
           
    //响应回车事件
        $("#searchText").keydown(function(event){
            alert(event.keyCode);
            if(event.keyCode == 13){
                searchCampaignGroup();
            }
        });

特别注意:js和jquery中,函数名"keydown"似乎都是“小写”,变量名是驼峰式"keyCode"。
   
   
173.正则表达式 牛逼网站。
     http://www.regexpal.com/
     写正则,在网页上就可以进行“输入校验”了。
   
174.经常打错单词,很重要的原因是“左手按键更快,或者说当左手指与要打的字母距离更近时”。
比如 update达成了udpate。左手按“d”的速度高于右手按“p”的速度。

175.CSS样式中的换行问题
    white-space:nowrap

定义和用法white-space 属性设置如何处理元素内的空白。
    这个属性声明建立布局过程中如何处理元素中的空白符。值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的。默认值: normal继承性: yes版本: CSS1JavaScript 语法: object.style.whiteSpace="pre"实例规定段落中的文本不进行换行:
    p  {  white-space: nowrap  }
    TIY浏览器支持所有浏览器都支持 white-space 属性。
   
    注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit"。可能的值normal 默认。空白会被浏览器忽略。pre 空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。nowrap 文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。pre-wrap 保留空白符序列,但是正常地进行换行。pre-line 合并空白符序列,但是保留换行符。inherit 规定应该从父元素继承 white-space 属性的值。
   
    参考资料:http://zhidao.baidu.com/question/134023734.html
   
176.jQuery的bug。
    "".replace is not a function
   
    jQuery1.4中的$.trim()方法有bug。
    新版本的1.8和1.9 都没有问题。
   
    建议:放弃旧版本的jQuery吧,使用新版本的更好。

177.Sitemesh导致网站报错。

<!DOCTYPE decorators PUBLIC "//SITEMESH/" "http://www.opensymphony.com/sitemesh/dtd/sitemesh_1_5_decorators.dtd">

刚才http://www.iac-i.org,http://advocab.miaozhen.com/和http://pr.cn.miaozhen.com/三个网站不能正常访问,看日志是 sitemesh报错,发现这三个网站/WEB-INF/decorators.xml开头都有如上头信息,刚才将url放到浏览器执行,返回500错误。注释掉如上头信息后网站可以正常运行。
   
    最近sonatype网站永久关闭了,所以如果有 <DOCTYPE>那段就解析不通过的。

开发的时候把描述文件都本地化来避免这个问题。

178.浮点数的比较。
    以下是JUnit中的源码。
    /**
     * Asserts that two doubles are equal concerning a delta.  If they are not
     * an AssertionFailedError is thrown with the given message.  If the expected
     * value is infinity then the delta value is ignored.
     */
    static public void assertEquals(String message, double expected, double actual, double delta) {
        if (Double.compare(expected, actual) == 0)
            return;
        if (!(Math.abs(expected-actual) <= delta))
            failNotEquals(message, new Double(expected), new Double(actual));
    }
   
    它使用的是 Double.compare(expected, actual) == 0和Math.abs(expected-actual) <= delta
    来判断2个浮点数是否相等。
   
    这种比较浮点数的方法完全值得我们去借鉴。
   
    看高质量开源项目的源码还是很有好处的。

179. Mybatis不使用Map传递多个参数。
    public List<Campaign> listEqualOrgId(@Param(value="orgId") int orgId, @Param(value="userId") int userId);
    <select id="listEqualOrgId" parameterType="Map" resultType="com.miaozhen.cms.business.model.Campaign">
   
    我习惯的写法是public List<Campaign> listEqualOrgId(Map<String,Object params);
   
    上面的代码是同事写的,也是我想找的,有次我就想用这种方式。
   
180.参数命名的一致性问题。

public PageVO list(@RequestParam Map<String, Object> params);

//合理的调用方式
CampaignValidate.validate(params);

//当使用Eclipse调用CampaignValidate.validate默认给出的参数提示是param,而不是params。
Eclipse是根据被调用方法的参数名称,给出的建议/默认参数。

public static boolean validate(Map<String, Object> param);

很多人不屑于这种“细节问题”,但我想说,掌握这些细节问题一次可能只能帮你节省1s的时间,
但是这个细节使用频率非常高,1年可以节省不少时间的。如果按1秒*20次*300天=100分钟。

相关阅读

工作问题 http://blog.csdn.net/FansUnion/article/category/1334371

原文参见http://fansunion.cn/articles/2267

2013年工作中遇到的20个问题(Bug):161-180的更多相关文章

  1. [前端] 记录工作中遇到的各种问题(Bug,总结,记录)

    最近一年,在开发实践过程中遇到了不少问题,大多都能得到解决 部分知其原理,部分只能做到解决问题,而半年前遇到的问题,或多或少都忘得差不多了 是该记录一下一些问题,防止再遇到就得再查资料了 1. 浏览器 ...

  2. 工作中遇到的令人头疼的bug

    工作中我们会遇到形形色色的bug,但是很多bug都可以调试很明显的看出来,这种bug解决起来我们不会那么头疼但是有些却让人头疼而捉急,特别是本地运行一切正常,上传服务器就会出现bug.现在我总结几个我 ...

  3. 工作中常用的Linux命令:crontab命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...

  4. 运维工作中常用到的几个rsync同步命令

    作为一个运维工程师,经常可能会面对几十台.几百台甚至上千台服务器,除了批量操作外,环境同步.数据同步也是必不可少的技能.说到“同步”,不得不提的利器就是rsync. 下面结合本人近几年运维工作中对这一 ...

  5. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  6. 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据

    分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前 ...

  7. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

  8. 工作中linux定时任务的设置及相关配置

    工作中会用到定时任务,来处理以前采集来的数据备份, 每周一凌晨4点执行一次    0 4 * * */1 find/data/templatecdr/oracle/dcndatabak/ -type ...

  9. 运维工作中sed常规操作命令梳理

    sed是一个流编辑器(stream editor),一个非交互式的行编辑器.它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲 ...

随机推荐

  1. bzoj3673 & bzoj3674 & 洛谷P3402 可持久化并查集

    题目:bzoj3673:https://www.lydsy.com/JudgeOnline/problem.php?id=3673 bzoj3674:https://www.lydsy.com/Jud ...

  2. C++调用shell脚本

    调用函数时候,传入脚本路径名称或者具体命令. int shell_call(std::string &cmdstr) { }; char line[maxline]; FILE *fpin; ...

  3. iOS开发之KVC全解

    一  KVC的基本概念 1.KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过g ...

  4. C语言和C++的应用领域都在哪些?学C语言好,还是学习C++好?

    从事嵌入式开发十几年,基本上围绕着这两种编程语言展开,都可以直接操作底层的编程语言,用的越熟练越是感觉工具属性越强.虽然两种编程语言分属于不同的编程思想,用的时间长了觉得差异也不是很大,现在就个人的从 ...

  5. C# 取两位小数

    double s=0.55555;result=s.ToString("#0.00");//点后面几个0就保留几位 如果要四舍五入的话,用这个double dbdata = 0.5 ...

  6. netty之ByteBuf详解

    [ChannelPromise作用:可以设置success或failure 是为了通知ChannelFutureListener]Netty的数据处理API通过两个组件暴露——abstract cla ...

  7. POJ 1985 求树的直径 两边搜OR DP

    Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants h ...

  8. C#开发微信公众号——网页开发之微信网页授权

    首先咱们先看下公众号的文档里面的介绍 上述图片的文字描述就是讲述了网页授权有什么用,就是为了获取微信用户的基本信息:授权回调域名的规范,说到域名回调的事情就不得不提一下设置网页授权域名 最好将这三个域 ...

  9. windows phone媒体应用开发

    MediaElement 可以播放许多不同类型的音频和视频媒体. MediaElement 是一个可以在其表面显示视频的矩形区域,也可以播放音频.MediaElement 支持触控输入事件. 使用属性 ...

  10. MxNet : use the MxNet windows versioin

    The MxNet needs  the following thirdparties: 1. lapack complie lapack-3.6.1: download the lapack-3.6 ...