Stackoverflow:您从未见过的7个最佳Java答案

您可以在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WORD中如何自动生成目录?

步骤&#xff1a; 1、输入当做标题的文字 2、将文字设置为标题样式 3、光标放在要添加目录的位置 4、选择插入->引用->索引和目录->目录->确定

C#控件之Repeater控件使用

歡迎大家來討論&#xff0c;修改&#xff0c;一定虛心接受。 1.為什麼使用Repeater控件&#xff1f; 關於把從數據庫讀取的數據綁定到前台頁面&#xff0c;我們可以使用DataGrid、DataGridView以及Repeater來佈局&#xff0c;三者均可以直接綁定DataTable中的字段&#xff0c;但…

linux驱动静态分配内存,Linux驱动设计——内存与IO访问

名词解释内存空间与IO空间内存空间是计算机系统里面非系统内存区域的地址空间&#xff0c;现在的通用X86体系提供32位地址&#xff0c;寻址4G字节的内存空间&#xff0c;但一般的计算机只安装256M字节或者更少的内存&#xff0c;剩下的高位内存就被用于PCI或者AGP及系统桥设备的…

Windows Socket 编程_ 简单的服务器/客户端程序

一。程序运行效果图二。程序源代码 三。程序设计相关基础知识 1.计算机网络 2.IP地址 3.协议 4.网络体系结构 5.TCP/IP体系结构与特点 6.客户机/服务器模式 7.TCP/IP特点 8.套接字的引入 9.面向 连接/无连接 的套接字的系统调用时序图/流程图 …

JDK / JRE zip

Server JRE与JRE的区别&#xff1a;Server JRE一般用于服务器上安装&#xff0c;只有64bit版本&#xff0c;不会安装浏览器插件、自动更新&#xff0c;有监视工具、没有Java Fx和其他开发工具&#xff1b;有安装程序&#xff0c;只是一压缩目录。Server JRE 8大约是完整JDK的40…

linux 磁盘挂载sde,linux lvm挂载新的硬盘并且扩容

PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层&#xff0c;它可以是实际物理硬盘上的分区&#xff0c;也可以是整个物理硬盘&#xff0c;也可以是raid设备。VG(Volumne Group)- 卷组卷组建立在物理卷之上&#xff0c;一个卷组中至少要包括一个物理卷&#xff0c;…

TDH-大数据基础

------------------------------------------------------------------------------------*******大数据概念和基础**********1.大数据的四个特点&#xff1a;数据规模大&#xff0c;生成、处理速度快&#xff0c;数据类型多样&#xff0c;价值巨大密度低&#xff1b;2.大数据历…

xshell十大技巧

xshell是我用过的最好用的ssh客户端工具&#xff0c;没有之一。这个软件完全免费&#xff0c;简单易用&#xff0c;可以满足通过ssh管理linux vps所有需要&#xff0c;唯一遗憾的是没有官方中文版。警告&#xff1a;不要下载所谓的汉化版&#xff0c;可能有木马。此前已有报道使…

深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...

solver及其配置solver算是caffe的核心的核心&#xff0c;它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为#caffe train --solver*_slover.prototxt在Deep Learning中&#xff0c;往往loss function是非凸的&#xff0c;没有解析解&…

restful服务端客户端_测试RESTful服务的客户端

restful服务端客户端开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端。 为服务器端编写集成测试可以像使用Arquillian启动服务器一样容易&#xff0c;并且可以通过REST确保测试服务是否按预期工作。 问题是如何测试客户端。 在本文中&#xff0c;我们将了解如何…

笑郭网络验证3.8研究笔记(内有视频教程)

链接&#xff1a;http://pan.baidu.com/s/1kUVkY2N 密码&#xff1a;m6de 转载于:https://www.cnblogs.com/Sendige/p/9600782.html

Java开发人员必须看到的13个Decks保持更新

Java领域中有许多关键人物&#xff0c;每个人物对语言的未来都有自己的看法和看法。 尽管我们不能参加任何活动&#xff0c;聚会或谈话&#xff0c;但要感谢各种幻灯片共享站点&#xff0c;我们才能听到这些影响者的意见。 在下面的文章中&#xff0c;我们收集了关于Java的最好…

已经windows如何在安装linux,如何在已经安装linux情况下安装windows

1.找到磁盘分区工具&#xff0c;将一个主分区磁盘格式化为windows认可的文件系统&#xff0c;如: ntfs.2.安装windows,或ghost to this partition。(最好是ghost,这样不会抢linux的启动区域。那样的话就改的就是windows下的文件。3.更改linux或windows下的grub.以liunx(ubuntu)…

标准模板库STL学习总结

标准模板库就是类与函数模板的大集合。STL共有6种组件&#xff1a;容器&#xff0c;容器适配器&#xff0c;迭代器&#xff0c;算法&#xff0c;函数对象和函数适配器。1、容器&#xff1a; 容器是用来存储和组织其他对象的对象。STL容器类的模板在标准头文件中定义。主要如下所…

MicroRNA Ranking(Tehran2016)

题意&#xff1a;给出m个n的全排列&#xff0c;求一个n的全排列&#xff0c;满足对于i<j&#xff0c;至少存在一半的全排列中&#xff0c;ai排在aj的前面&#xff0c;求字典序最小方案&#xff0c;或者是无解。 (1)首先我们对 vis[ a[i] ][ a[j] ] ,求出a[i] 对 a[j] 的贡献…

linux gpt引导分区,linux 引导gpt分区windows及clover

原因&#xff1a;电脑采用gpt分区&#xff0c;安装了win10linux(debian)mac 10.11(El capitan),使用clover做引导器时&#xff0c;可以引导linux和mac,但通过bootmgfw.efi引导win10时无限转圈,不能正常启动win10。所以考虑用linux的grubx引导器。1、引导Clocer查看clover所在EF…

查看表状态及索引碎片语句

语句&#xff1a;DBCC SHOWCONTIG (SrMissedCalls) WITH ALL_INDEXES&#xff1b; 其中‘SrMissedCalls’是表名字。 执行之后展示内容&#xff1a; 转载于:https://www.cnblogs.com/shendaxian/p/9604826.html

visualvm远程jvm_VisualVM:通过SSH监视远程JVM(是否为JMX)

visualvm远程jvmVisualVM是用于监视JVM&#xff08;5.0&#xff09;的有关内存使用&#xff0c;线程&#xff0c;GC&#xff0c;MBeans等的出色工具。让我们看看如何通过SSH使用它来监视&#xff08;甚至使用JMX进行配置&#xff09;使用JMX或不使用JMX的远程JVM。它。 这篇文章…

如何切换pip的源

参考别人的帖子https://blog.csdn.net/chenghuikai/article/details/55258957 转载于:https://www.cnblogs.com/PoeticalJustice/p/9609659.html

shp文件的读取

转载自&#xff1a;http://blog.csdn.net/gisfarmer/article/details/3861554做GIS开发的朋友可能对shp并不陌生&#xff0c;但是看到CSDN网友不断提问关于shp文件的一些问题&#xff0c;利用闲暇我对shp文件的一些知识加以总结&#xff0c;共享CSDN网友。首先了解一下shp文件的…