您可以在Stackoverflow上找到哪些最有趣的答案?

Stackoverflow是开发人员的金矿。 它可以帮助我们找到遇到的特定问题的最有用答案,并且我们总是从中学习新事物。

对于以下文章,我们研究了最流行的Java问题和答案,并决定重点介绍一些我们发现的珍贵宝石。 即使您是一位经验丰富的开发人员,也总会有一些新东西要学习。

所有人的Java答案

Java是Stackoverflow上第二受欢迎的标签 ,与它相关的问题超过一百万。 在过去的一周中,该网站上载了4,600多个问题,毫无疑问,它是最大,最活跃的在线开发者社区。

这些信息与Stackoverflow的2016年开发人员调查结果紧密相关,在该调查中,有56,033名编码员被问到他们选择哪种语言。 Java排在第三位:

2016年最受欢迎的技术。来源:Stackoverflow

我们已经知道Java统治着就业市场 ,可以肯定地假设您也曾经访问过Stackoverflow一次或两次来找到问题的答案。 但是,即使您只是随便浏览Stackoverflow而没有特定的问题,也会弹出很多有趣的东西。 让我们看看其中一些宝石。

1.分支预测

在Stackoverflow上最受争议的Java问题之一是:“ 为什么处理排序数组比未排序数组快? ”。 为了回答这个问题,您需要使用分支预测。 它是一种架构,旨在通过猜测在选择实际路径之前特定分支的运行方式来改善应用程序流程。 如果您愿意,可以进行有根据的猜测,但这实际上并不是猜测。

for (int i = 0; i < 100000; ++i){// Primary loopfor (int c = 0; c < arraySize; ++c){if (data >= 128)sum += data;}}

这里的分支是if语句。 在这种情况下,如果对数组进行排序,则分支预测将起作用。 如果未排序,它将无法正常工作。

Mysticial已尝试使用铁路和火车以更简单的方式对此进行解释。 想象一下,您经营一个路口,需要确定火车的行驶方向,您会选择向左还是向右? 当然,您可以停止火车,并问司机哪种方法是正确的方法,但这会使整个过程缓慢,笨拙且令人讨厌。 您需要猜测。 您如何确定自己的猜测是正确的? 查看当前列车的过去行驶情况,了解每次行驶的方向。

那就是分支预测:识别模式并遵循它们。

不幸的是,在这种情况下,提出主要问题的用户是分支预测失败的受害者。 发生这种情况是因为分支没有可识别的模式,因此尝试预测其动作是非常随机的。

2. Java的安全性

Java用户经常会提出的另一个常见问题是:“ 为什么 Java中使用char []而不是String来代替String? ”。 这个问题本身更加具体,询问为什么Swing密码字段具有getPassword()(返回char [])方法而不是getText()(返回String)。

在这里不足为奇–这是一个安全问题。 字符串是不可变的,这意味着您无法在创建字符串后对其进行修改。 这也意味着您无法在GC敲门前清除数据。 如果有机会有人可以访问您的内存,则可以使用带有密码的字符串来获取他。

这就是为什么您应该使用char数组的原因。 完成数据处理后,您将可以明确擦除数据,也可以用其他任何方式覆盖数据。 即使在GC运行之前,敏感数据也不会出现在系统中的任何位置。

3.例外

即使许多开发人员更喜欢忽略检查的异常 ,但仍有许多关于Java中异常的问题。 这是您应该在代码中解决的主要问题,而忽略该问题并不能解决它。

最受质疑的问题之一是“什么是NullPointerException,以及如何解决它?”。 我们对这种异常的流行程度并不感到震惊,因为它在生产Java应用程序中也被列为第一大异常类型 。

在Takipi,我们实际上可以选择在系统上引入新的NullPointerException(或任何其他异常)时设置警报。 检查一下 。

4.怪癖和魔术

时不时地,您在Stackoverflow中遇到一个令人困惑的问题,它会教给您一些新的知识。 我们选择了一些我们最喜欢的宝石:

问题提出了以下打印声明,打印出“ hello world”:

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();
}System.out.println(randomString(-229985452) + " " + randomString(-147909649));

答案是没有汤匙。 这意味着选择随机的整数集将不是随机的。 相反,该实例将遵循以特定种子参数(在这种情况下为-229985452或-147909649)开头的随机数生成算法。 每次您要求一个随机模式时,相同的种子将生成相同的模式-这将打印出您好世界。

用户Eng.Fouad完美地解释了这一点:

在新的Random(-229985452).nextInt(27)中,随机产生的前6个数字是:
8、5、12、12、15、0

新的Random(-147909649).nextInt(27)生成的前6个数字是:
23、15、18、12、4、0

当您将这些数字添加到字符`(即96)的整数表示形式时,您会得到“ hello world”:
104 –>小时
101 –> e 108 –> l 108 –> l 111 –> o

119 –> w
111 –> o
114 –> r 108 –> l 100 –>天

在下面的问题中,用户解析两个日期字符串,它们相隔一秒的时间进行引用,并进行比较。

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);
}

由于它们相距1秒,因此没有得到1的结果,而是得到了结果353(排队怪异的音乐)。 这有一个非常基本的解释:这是时区问题。 1927年12月31日,上海时间倒退了5分52秒,Java将其解析为该本地日期/时间的瞬间。

我们确实必须指出,如果您尝试从原始问题中运行代码,它将产生不同的结果。 正如乔恩·斯凯特(Jon Skeet) 在回答中指出的那样 ,在2014年时区数据库项目中,更改的时间已移至1900-12-31,现在仅343秒更改。

这是一个显而易见的问题:如果引发了异常但没有人可以捕获它,应用程序会崩溃吗? 或如问题所问:“是否有可能在Java中构建一小段代码,使假设的java.lang.ChuckNorrisException无法捕获?”。

简短的答案是有可能的,但其中涉及“但是”。 您可以编译引发ChuckNorrisException的代码,并定义一个在运行时不会扩展Throwable的类ChuckNorrisException。 仅凭这一点还不足以使其正常工作,并且您必须禁用字节码验证程序。 jtahlborn给出的答案将带您完成整个过程。

如果您是Java难题的粉丝,则可能需要查看我们的Java Deathmatch游戏。

5.哈希图

我们在Stackoverflow上遇到的最常见问题之一与哈希图有关。 许多用户想知道集合之间的区别以及何时应该在另一个之上使用集合。

这里的关键要素是迭代顺序。 使用HashMap,您将没有有关订单的信息,并且当您向集合中添加更多元素时,该订单可能会更改。 使用TreeMap,您将获得排序的迭代,而使用LinkedHashMap,您将获得FIFO顺序。

如果您对此仍然感到困惑,Rebel Labs的朋友们会帮您制作一张方便的图表 ,说明一个收藏相对于另一个收藏的好处。

最后的想法

对Java的了解并不重要,您可以学到的东西总是更多。 Stackoverflow可以帮助解决代码中的特定问题,但是它也是学习有关我们认为我们从头到尾知道的事情的新信息的好资源。

如果您遇到一个有趣的问题,激烈的辩论或其他怪癖,我们很乐意在下面的评论中听到。

翻译自: https://www.javacodegeeks.com/2016/07/stackoverflow-7-best-java-answers-havent-seen.html

Stackoverflow:您从未见过的7个最佳Java答案相关推荐

  1. 重磅 | 一场你从未见过的数据中心盛会

    DCD>上海国际峰会 你还不知道?! 来来来~~~ 小编给你科普一下 这是一场全球顶尖的数据中心峰会 全世界第二高楼 - 上海中心作为举办地 1500+到场专家学者 40+业内顶级赞助商 50+ ...

  2. 你从未见过的 HTML5 动画效果

    HTML5 的 Canvas 对象将改变 JavaScript 的使命,使之成为 HTML5 下强大的动画脚本编写工具.本文介绍了 8 个你从未见过的,基于 HTML5 Canvas 和 JavaSc ...

  3. AlphaZero:一种人类从未见过的智慧

    从AlphaGo Zero的"双手互搏"理解人工智能 重点提示: 1.什么是AlphaZero的洞察力? 2.人类智能和机器智能是否都是来自概率统计? 神经网络算法其实是一种概率算 ...

  4. 深度学习环境搭建(从卸载CUDA到安装,以及Pytorch与torchvision的安装。你从未见过的全有版本)

    深度学习环境搭建(从卸载CUDA到安装,以及Pytorch与torchvision的安装.你从未见过的全有版本) 先来点头疼的:在深度学习的过程中,环境搭建是必须要经过的一个关卡,由于版本对应麻烦,很 ...

  5. 你从未见过的“地狱级”烂项目

    作者 | 欧剃 来源 | projectfailures.wordpress.com/ 你见过最烂的项目,撑了多长时间才完蛋?六个月?一年? 今天介绍的这个奇葩项目,不但一开始就烂得透透的,还硬撑了 ...

  6. 我从未见过一个早起、勤奋、谨慎、诚实的人抱怨命运不好

    我从未见过一个早起.勤奋.谨慎.诚实的人抱怨命运不好.--富兰克林 转载于:https://www.cnblogs.com/daxuejia/p/4557431.html

  7. spyder一打开就卡了_保时捷透露了3款从未见过的概念车-一起来看看

    Porsche revealed 3 never-before-seen concept cars - take a look 保时捷透露了3款从未见过的概念车-一起来看看 Porsche's 919 ...

  8. 从未见过的堂兄杀了人,你的DNA是关键证据

    大数据文摘出品 作者:宋欣仪 当你将自己的DNA数据上传到互联网时,你等于是把自己和所有亲属置于执法部门的监督之下. 今年三月,一位华盛顿州温哥华的普通妇女布兰迪·詹宁斯意外得知,她的DNA数据帮助爱 ...

  9. 英语演讲 | 清华大学留学生伊瓦娜2020年毕业演讲:我从未见过任何一个国家像中国这样

    Professors, fellow graduates, friends, ladies and gentlemen, 尊敬的各位老师.各位毕业生.各位朋友们,女士们.先生们! It is an h ...

最新文章

  1. 分享几个vs code 的几个插件
  2. python绘制动态图-Python利用Echarts绘制动态交互图:快速入门
  3. nginx http proxy 反向代理
  4. Java并发与锁设计实现详述 - Java中的Condition
  5. 信息学奥赛一本通(1198:逆波兰表达式)
  6. 用正则表达式抽取文本
  7. atitit.java解析sql语言解析器解释器的实现
  8. 管理之道(七) - 不可奖励员工错误的行为
  9. strdup linux,内存管理 – Linux内核API kstrdup
  10. 【数据可视化应用】绘制风玫瑰图(附Python代码)
  11. 结对作业 ——UI组第八组 冯富禹 齐天浩
  12. java scene_JavaFX中场景(Scene)的意义是什么?
  13. 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念
  14. c加加语言complex的用法,complex的用法总结大全
  15. 关于安装公司监控软件后导致Mac电脑需要每天重启4次才能连网的解决办法
  16. 视频教程-Echarts+Asp.Net+Sql Server报表开发视频教程-.NET
  17. 计算机与打印机未连接,win7系统无法打印提示似乎未连接打印机的恢复步骤
  18. IO回忆录之怎样过目不忘(BIO/NIO/AIO/Netty)2017版
  19. 读《倚天屠龙记》小感
  20. 【算法•日更•第十九期】动态规划:RMQ问题

热门文章

  1. Java中的内存泄露的几种可能
  2. 浅析负载均衡的6种算法,Ngnix的5种算法
  3. 员工管理系统---SpringBoot
  4. Mybatis入门 使用注解
  5. Android实现动画Dialog
  6. python 线性回归函数_Python实现的简单线性回归算法实例分析
  7. mininet编程实现交换机规则的插入、删除与修改。_可编程网卡芯片在滴滴云网络的应用实践...
  8. Future取消线程执行
  9. java安全——类加载器+字节码校验+安全管理器与访问权限
  10. 如何用css3实现简单旋转的风车