解惑

解己之惑,解人之惑

标签:BUG

新成就Get:Java的bug

搞了这么多年Java,总算是让我逮住一个Java的bug,Java不能正确的处理未经压缩的大Jar包:JDK-8223811

最开始怀疑是第三方的打包库导致的,后来进一步验证确定是Java自己的bug,因为使用jar命令打出来的包也有同样的问题。

出现的异常信息是:java.util.zip.ZipException: invalid LOC header (bad signature)

那种Jar包读取metadata都没有问题,使用第三方软件解压读取也都没有问题,唯独使用Java自己的代码从JarEntry获取InputStream读取的时候会出错,另外使用jarsigner -verify去验证jar也会出问题,估计内部实现也是调用了同样的代码。

bing好弱

今天原来的老同事问我一些Java的入门问题,我说直接google啊,他说搜了没有搜索到结果,只不过用的是bing,然后我就震惊了,都告诉他google了啊(他曾经供职微软,被毒害了😋)。bing只能用于搜索自家的东西,因为都在MSDN上,它对MSDN的索引做得最好,而除了微软自家技术外的技术内容,只能使用google。而baidu,呵呵,就是娱乐和广告的代名词吧,只是用来测试网络是否是通的时候会试一下,在没有翻墙的情况下我也是退而求其次的用bing的。
而今天晚上,我用bing试图搜索我的这个站,“cherami jiehoo”,显示有三页,翻页到第二页再点下一页的时候,又回到了第一页,还是显示有3页,而在另外一台电脑上搜索“jiehoo cherami”显示有4页,而到了第二页点击下一页,直接显示没有任何结果,而且不能回到上一页,就是认为一个匹配结果都没有。看了下,两个浏览器都是Chrome,区别是一个登录了微软账户,一个没有登录。
呵呵,基本功能做成这样也是没有谁了吧。必应的同学们,看到的话,请参考下google是怎么做的吧。。。
Bing,你听到了吗?怎么给你报bug啊🤔

 

更新:我还真给bing提了个建议,不知道是否有反馈回来。

盛大通行证登陆错误

前几个月注册了个账号想玩纵横天下,结果登陆一直失败。
这次又听到别人提到这个游戏,就又注册了下,第一次登陆成功了,然后第二天又不能登陆了,重置密码后有登陆成功了,而一个朋友说他注册了四个账号没有登陆成功过。
上Goole上搜索了下,发现百度知道里面N多人问这个问题,回答也是五花八门。
后来我仔细的回忆了下登陆的过程然后验证了下自己的猜想,原来盛大的通行证登陆页面存在一个BUG:

填写那些登陆信息后不能按回车登陆,而应该点击那个登陆按钮登陆!
由此可见盛大的测试团队工作不力,呵呵

Bug无处不在

最近在玩Travian,一个web浏览器的升级游戏,纯粹就是闲着没事的时候打发时间
今天发现一个bug,当然,任何软件系统有bug都是正常的,这里只是感觉比较有意义,就是数据量大的时候的数据的有效性最容易犯的错误。

代码覆盖帮助发现BUG

今天无意中又浏览了一下代码覆盖的结果,竟然让我无意中发现了一个用其它方法可能不会发觉的BUG。
代码片断如下:
    /**
     * This method is performance key point of this framework.
     * @see org.mockejb.interceptor.AspectSystem#findInterceptors(java.lang.reflect.Method, java.lang.reflect.Method)
     */
    public List findInterceptors(Method proxyMethod, Method targetMethod)
    {
        List resultList = new ArrayList();
        List otherResult = find(proxyMethod, targetMethod, otherAspectList);
        resultList.addAll(otherResult);
        if (proxyMethod != null)
        {
            String proxyMethodString = proxyMethod.toString();
            String targetMethodString = targetMethod.toString();
            List aspect = CacheUtil.getBeanAspects(proxyMethodString + "-" + targetMethodString);
            if (aspect != null)
            {
                resultList.addAll(aspect);//168
            }
            else
            {
                if (isARMethod(proxyMethodString, targetMethodString))
                {
                    String beanName = getBeanName(proxyMethodString, targetMethodString);
                    if (beanName != null)
                    {
                        List aspects = (List) beanAspectMap.get(beanName);
                        if (aspects != null)
                        {
                            aspect = find(proxyMethod, targetMethod, aspects);
                            CacheUtil.putBeanAspects(proxyMethodString, aspect);
                            resultList.addAll(aspect);
                        }
                    }
                }
            }
        }
        return resultList;
    }

注意标记为168的那一行,那个地方是Cache的功能,但是代码覆盖报告指出它没有被执行过,也就是那个Cache从来没有生效,因为原来的cache的key只是proxyMethod.toString(),后来为了在初始化的时候屏蔽ejbPostCreate的执行加了一些Aspect,但是ejbPostCreate和ejbCreate的proxyMethod是一样的,只是targetMethod不同。
这个BUG只影响性能,所以其它的方法是不可能发现问题的。

© 2024 解惑

本主题由Anders Noren提供向上 ↑