工作遇到的程序方面的问题的汇总

经常遇见的问题的总结

  • String转整型

    parseInt ( cString )从字符串cString非空字符开始转换得到的整数,遇到小数点或其他0-9外的字符就停止,如“-1234a”,“-1234.0”都将返回 -1234;如果除第一个符号外一个0-9字符都不是,将返回NaN,如“-a”、“abc”等;
    Number( cString )从字符串cString转换得到的数字,包括Int和Float类型,如:“-123”返回-123,“123”和“00123”都返回 123,“234。56”返回234。56等。cString必须是合法的数字串,否则返回NaN;如“.123”、“1.23.45”、 “–123”、“123a”都返回NaN.在js中转换变量为整型的时候最好用Number.

    • java中对于String的判空:
      判断一个字符串是否为空首先就要确保他不是null然后再判断他的长度。
    String str = xxx; 
    if(str != null && str.length() != 0) { 
    return true; 
    }
    //1.  直观,效率低   
    if(s == null || s.equals("")){
    }
    
    //2.  比较字符串长度, 效率高。
    
    if(s == null || s.length() <= 0);
    
    //3.  Java SE 6.0才开始提供的方法,效率和方法二几乎相等
    
    if(s == null || s.isEmpty());
    } 
    • js中判断为空:
    //1.  判断undefined: 
    if (typeof(tmp) == "undefined"){ 
    alert("undefined");
    //说明:typeof 返回的是字符串,有六种可能:"number""string""boolean""object""function""undefined" 
    
    //2.  判断null: 
    if (!tmp && typeof(tmp)!="undefined" && tmp!=0){ 
    alert("null"); 
    
    //3. 判断NaN:
    var tmp = 0/0; 
    if(isNaN(tmp)){ 
    alert("NaN");  
    //说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。 
    //提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。  
    //4.  判断undefinednull: 
    
    var tmp = undefined; 
    if (tmp== undefined) 
    { 
    alert("null or undefined"); 
    说明:null==undefined 
    // 5.  判断undefinednullNaN: 
    
    var tmp = null; 
    if (!tmp) 
    { 
    alert("null or undefined or NaN"); 
    //提示:一般不那么区分就使用这个足够。

    bug描述:页面上drop down list控制旁边图片的改变。(在一个div中),当这个div的height超出1000,angularjs的指令会把它收缩起来。但是判断高度的代码('#tab-height').height()要等图片加载好才能获得正确的高度。问题就来了。怎样确保图片加载好再执行呢?我使用timeout,可以指定等待加载的时间
    但是这个图片的加载跟网速有关的。有时可能会比较慢。 timeout使imageonloadurlurlangularjs interval 时间设置100(ms),let images = $(‘#tab-height img’); 循环图片 直到img.complete 再加上if (typeof myimage.naturalWidth != “undefined” && img.naturalWidth == 0) 判断图片是否加载好!

    function waitImagesLoaded(callback){
                let images = $('#tab-height img');
                let timer = $interval(function(){
                    let isLoaded = true;
                    for(let i=0; i<images.length; i++){
                        let img = images[i];
                        if (!img.complete) {
                            isLoaded = false;
                            break;
                        }
                        if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) {
                            isLoaded = false;
                            break;
                        }
                    }
                    if(isLoaded){
                        callback();
                        $interval.cancel(timer);
                    }
                }, 100)
            }

    (图片完全加载好了才能判断的)
    双管齐下确保图片加载好。

    if(isLoaded){
        callback();//调用闭包函数 就是获得图片高度的代码 还有验证逻辑啥的
        $interval.cancel(timer);//关闭interval
    }//双击666

    记一次提交代码出现的幺蛾子,到处都是坑啊!!!改好代码之后我熟练地add commit。再review的时候出现这个幺蛾子:
    这里写图片描述
    要先git fetch一下。取下远程的分支的改动。再review就可以了!(想不通这里,我在commit之后明明pull –rebase过,为啥还要再去git fetch一下。)
    还有一次,页面的效果和QA的不一样,但是明明感觉我们的代码都应该是一样的啊,也是pull过master上的代码了。后面git fetch了一下后再pull,有没得问题了!
    修改commit的message:
    不需要有代码的改动,直接commit –amend,按Insert键进去编辑模式。改好后Esc键回到命令模式。:wq保存并退出。:q!只退出不保存!
    JQuery实现动态的回滚到表单验证出错的地方。
    假如我们需要去定位一个动态生成的div,我们需要为它指定一个动态的id,例如:
    前台使用EL进行迭代LIST生成div,为其添加动态的id,生成之后变成下面样式
    我们在使用Jquery获取某个div时需要这样写

    $("#" + 所定义的id变量名);而不能写成这样
    $(“#所定义的id变量名”);

            function invalidDOB(isInvalidDOB) {
                for(let i in isInvalidDOB){
                //获取input前面label标签到页面顶部的距离
                    let topPos = $("#"+"DOBLabel_"+i).offset().top;
                    if(isInvalidDOB[i]){
                    //屏幕滚动到label标签
                        window.scrollTo(0, topPos);
                        return false;
                    }
                }
                return true;
            }   

    在把maven工程导入idea的时候出现了问题,
    这里写图片描述
    红框内会出现项目的子项目 而且全都是红色,会有一些的错误的提示信息,
    The following directories are registered as VCS roots
    VCS root configuration problems 等等 搞了半天 各种谷歌百度都不行了。
    后面把哪些红色的子项目 选中 点击右上角的减号按钮 然后点OK就可以了,当然还要把项目对应的CVS改成git。

项目环境是springmvc和mybatis,出现了这面这样的错误,
这里写图片描述
这是因为有mybitis 的xml文件
namespace=”cn.migu.music.dao.mybatis.MiguMusicianRankDao”>
命名空间重复了。可能在复制粘贴的时候忘记改了。

WriteNullStringAsEmpty 可以把返回的对象中的null change to “”
但是这里我看到网上很多都说WriteMapNullValue要和WriteNullStringAsEmpty连起来使用时能生效哦。

这里写图片描述

取数据库表里的相同字段的第一行数据,需求是做一个连表查询,查询出所有的歌曲,歌曲里要有专辑的信息,歌曲和专辑竟然是多对多的关系,我也是醉了,也就是说同一首歌曲还可能收藏在几张专辑里面。问题如下:

SELECT
(
SELECT
COUNT (ID)
FROM
VOTE_COMMON V
WHERE
A .MUSIC_ID = V.TARGET_ID
AND TARGET_TYPE = ‘40001’
AND V.ACTIVITY_ID = 47
) VOTECOUNT,
(
SELECT
WM_CONCAT (
T .ARTIST_ID || ‘:’ || T .ARTIST_NAME
)
FROM
MUSIC_R_ARTIST MR,
ARTIST T
WHERE
A .MUSIC_ID = MR.MUSIC_ID (+)
AND MR.ARTIST_ID = T .ARTIST_ID
AND MR.ARTIST_TYPE = 1
) ARTIST_ID,
A .*, b.album_name,
b.album_id,
CASE
WHEN b.small_pic LIKE ‘http%’ THEN
b.small_pic
ELSE
(
SELECT
T .small_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END SMALL_PIC,
CASE
WHEN b.medium_pic LIKE ‘http%’ THEN
b.medium_pic
ELSE
(
SELECT
T .medium_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END MEDIUM_PIC,
CASE
WHEN b.large_pic LIKE ‘http%’ THEN
b.large_pic
ELSE
(
SELECT
T .large_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END LARGE_PIC,
(
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) mv_id,
CASE
WHEN (
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) IS NOT NULL THEN
1
ELSE
0
END hasMv,
CASE
WHEN (
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) IS NOT NULL THEN
(
SELECT
copyright_Id
FROM
MUSIC_R_COPYRIGHT T,
MV_R_MUSIC c
WHERE
T .music_id = A .music_id
AND c.music_id = A .music_id
AND ROWNUM = 1
)
ELSE
NULL
END mvCopyrightId
FROM
music A,
album b,
ALBUM_R_MUSIC c,
vote_common v
WHERE
A .MUSIC_ID = c.music_id (+)
AND A .MUSIC_ID IN (‘1000096675’, ‘4428971’)
AND c.album_id = b.ALBUM_ID
AND A .status (+) = 1
AND B.status (+) = 1
AND ROWNUM < 20
这里写图片描述
因为跟专辑表的多对多的关系 导致查歌曲 出现了重复的记录 当时想了很久解决这个问题,主要是连专辑表出现的问题,那么我想在专辑表里把所有的相同的music_id都只取第一条 单独成一个子查询,这样再和music表连表的话就不得出现重复的歌曲记录了。

SELECT
B.ALBUM_ID,B.ALBUM_NAME,
(
SELECT
COUNT (ID)
FROM
VOTE_COMMON V
WHERE
A .MUSIC_ID = V.TARGET_ID
AND TARGET_TYPE = ‘40001’
AND V.ACTIVITY_ID = #{activityId}
) VOTECOUNT,
(
SELECT
to_char(WM_CONCAT (
T .ARTIST_ID || ‘:’ || T .ARTIST_NAME
))
FROM
MUSIC_R_ARTIST MR,
ARTIST T
WHERE
A .MUSIC_ID = MR.MUSIC_ID (+)
AND MR.ARTIST_ID = T .ARTIST_ID
AND MR.ARTIST_TYPE = 1
) ARTIST_ID,
A .*, CASE
WHEN B.MEDIUM_PIC LIKE ‘http%’ THEN
B.MEDIUM_PIC
ELSE
(
SELECT
T .MEDIUM_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END MEDIUM_PIC,
CASE
WHEN B.SMALL_PIC LIKE ‘http%’ THEN
B.SMALL_PIC
ELSE
(
SELECT
T .SMALL_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END SMALL_PIC,
CASE
WHEN B.LARGE_PIC LIKE ‘http%’ THEN
B.LARGE_PIC
ELSE
(
SELECT
T .LARGE_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END LARGE_PIC,
(
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) MV_ID,
CASE
WHEN (
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) IS NOT NULL THEN
1
ELSE
0
END HASMV,
CASE
WHEN (
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) IS NOT NULL THEN
(
SELECT
COPYRIGHT_ID
FROM
MUSIC_R_COPYRIGHT T,
MV_R_MUSIC C
WHERE
T .MUSIC_ID = A .MUSIC_ID
AND C.MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
)
ELSE
NULL
END MVCOPYRIGHTID
FROM
MUSIC A,
(
SELECT
TEMP.*
FROM
(
SELECT
C.MUSIC_ID,
B.MEDIUM_PIC,
B.ALBUM_ID,
B.ALBUM_NAME,
B.LARGE_PIC,
B.SMALL_PIC,
B.STATUS,
ROW_NUMBER () OVER (
PARTITION BY C.MUSIC_ID
ORDER BY
NVL (B.MEDIUM_PIC, 0) DESC
) AS ROW_FLG
FROM
ALBUM B,
ALBUM_R_MUSIC C
WHERE
C.ALBUM_ID = B.ALBUM_ID
) TEMP
WHERE
TEMP.ROW_FLG = ‘1’
AND TEMP.MUSIC_ID IN (‘1000096675’, ‘4428971’)
) B
WHERE
A .MUSIC_ID = B.MUSIC_ID
AND A .STATUS = 1
AND B.STATUS = 1
这样果然就没得重复的了。

在case when里面不能写ORDER BY
n.vote_date DESC
CASE
WHEN (
SELECT
n. ID
FROM
VOTE_COMMON n
WHERE
n.mobile = ‘004f6159-91bf’
AND n.activity_id = 47
AND n.target_id = a.music_id
and n.target_type = 40001
AND TO_CHAR (
n.vote_date,
‘yyyy-mm-dd HH24:MI:SS’
) > TO_CHAR (
SYSDATE - 1,
‘yyyy-mm-dd HH24:MI:SS’
)
ORDER BY
n.vote_date DESC
) IS NOT NULL THEN
1
ELSE
0
END canVote,
莫名其妙的错误 [Err] ORA-00936: missing expression

tomcat启动突然很慢的解决办法:
解决办法是: 1、去掉debug时的断点
2、将tomca下的项目移除
3、将tomcat目录下的work目录删除
4、将需要启动的项目重新添加到tomcat,启动时间恢复正常(二十多秒

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值