您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    StackOverflow: 你没见过的七个特别好的Java答案
    时间:2019-07-20 08:08 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    StackOverflow开展到目前,曾经成为了全球开发者的金矿。它可以协助我们找到在各个范围遇到的成绩的最有用的处置方案,同时我们也会从中学习到很多新的东西。这篇文章是在我们审阅了StackOverflow上最盛行的Java成绩以及答案后从中挑出来的。即使你是一个有丰厚阅历的开发者,也能从中学到不少东西。

    一、分支预测

    成绩链接:

    https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

    StackOverflow上最多投票的一个Java成绩是:为什么处置一个排序数组要比非排序数组快的多。为了回答这个成绩,你需求运用分支预测(branch prediction)。分支预测是一种架构,旨在经过在真实的途径发作前猜测某一分支的下一步来提升处置进程。

    分支在这里即一个if语句。这样的话,假设是一个排序数组,那么分支预测将会停止,否则不会停止。

    StackOverflow上的一个回答者,链接:#11227902

    试图运用铁路和火车来复杂引见这个概念。假定你在铁轨衔接处要决议火车要走哪条路,你会选择左边还是左边?你可以拦住火车,然后问司机该往那里,但是这样会让整个进程变慢。因此你只能去猜正确的方向,那么如何去猜呢?最好的办法就是经过察看目前这个火车每次经过时的路途,推测出正确的方向。

    这就是分支预测:辨认形式并运用它。

    不幸的是,这个成绩的提问者是分支预测失败的受益者。由于他的分支没有任何可以辨认出的形式,所以预测出的行为是随机的。

    二、Java中的安全

    成绩链接:

    另一个盛行的Java成绩是:为什么在Java中有关密码的中央愈加喜欢运用char[]而不是String?其实原始的成绩愈加详细一些,就是问的在Swing中,password控件有一个getPassword办法(前往char[]而不是getText()前往的String)。

    其实这里不用诧异-这是一个安全成绩。String是不可变的,意味着一旦它被创立了,那么你就不能够去修正它。这也意味着在GC之前,你对这些数据不能做任何处置。因此,只需有人可以拜访你的内存,那么String就有能够被他获取到。

    这也就是为什么要运用char数组。你可以显示地肃清数据或许掩盖它。这样密码这种敏感数据即使GC还没有停止也不会再在舷留下痕迹。

    三、异常

    成绩链接:

    即使很多开发者倾向于疏忽对受检异常的处置,StackOverflow上依然有很多关于异常的成绩。其中一个最盛行的成绩是:什么是NullPointerException,我该怎样处置它?对此,我们并没有感到诧异,由于这个成绩也是在消费环境的Java运用中排名第一的异常。

    实践上,当NullPointerException(或许其他exception)在系统出现的时分,我们可以收回一个告警。由于这种异常普通状况下都是业务代码逻辑有成绩形成(笔者注)。

    四、为什么这段代码运用随机字符串打印出了”hello world”

    成绩链接:

    这个成绩给出了下面的代码,并打印出了”hello world”。

    System.out.println(randomString(-229985452) + " " + randomString(-147909649)); 

     

    public static String randomString(int i){ 

        Random ran = new Random(i); 

        StringBuilder sb = new StringBuilder(); 

        while (true

        { 

            int k = ran.nextInt(27); 

            if (k == 0

                break

     

            sb.append((char)('`' + k)); 

        } 

     

        return sb.toString(); 

    其实,选择一组随机的整数并不是随机的。给定一个seed参数(在这个例子中是-229985452和-147909649), 那么每次随机,异样的seed则会产生异样的输入。

    Random(-229985452).nextInt(27)产生的前六个数字:8, 5, 12, 12, 15, 0

    Random(-147909649).nextInt(27)产生的前六个数字:23, 15, 18, 12, 4, 0

    这样,最终输入的就是”hello world”。

    五、为什么两个时间戳相减(in 1927)得出一个奇异的结果?

    成绩链接:

    public static void main(String[] args) throws ParseException { 

        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   

        String str3 = "1927-12-31 23:54:07";   

        String str4 = "1927-12-31 23:54:08";   

        Date sDt3 = sf.parse(str3);   

        Date sDt4 = sf.parse(str4);   

        long ld3 = sDt3.getTime() /1000;   

        long ld4 = sDt4.getTime() /1000

        System.out.println(ld4-ld3); 

    (责任编辑:admin)