stackoverflow_Stackoverflow:您尚未发现的7个最佳Java答案

stackoverflow

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

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

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

相关文章

json请求 post vue_Spring Boot+Vueaxios异步请求数据的12种操作(上篇)

Java大联盟致力于最高效的Java学习关注Spring Boot Vue 前后端分离最核心的操作就是通过异步请求完成数据同步&#xff0c;这其中又可以分为很多种不同的情况&#xff0c;比如是 GET 请求还是 POST 请求&#xff1f;参数是普通变量还是 JSON&#xff1f;基于 RESTful 架构如何…

【WebRTC---源码篇】(十三)WebRTC/Pacer

pacer作用 NextSendTime Timestamp PacingController::NextSendTime() const {Timestamp now = CurrentTime();if (paused_) {return last_send_time_ + kPausedProcessInterval;}// If probing is active, that always takes priority.if (prober_.IsProbing()) {Timest…

全景视觉空间直线检测_视觉SLAM深度解读

近年来&#xff0c;SLAM技术取得了惊人的发展&#xff0c;领先一步的激光SLAM已成熟的应用于各大场景中&#xff0c;视觉SLAM虽在落地应用上不及激光SLAM&#xff0c;但也是目前研究的一大热点&#xff0c;今天我们就来详细聊聊视觉SLAM的那些事儿。视觉SLAM是什么&#xff1f;…

对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...

前言:面向对象的三大特征封装 (Encapsulation)继承 (Inheritance)多态 (Polymorphism)编程思想&#xff1a;面向过程&#xff1a;做某件事情都需要自己亲历亲为&#xff0c;按照步骤去完成面向对象&#xff1a;做某件事情不需要自己亲历亲为&#xff0c;只需指定特定的对象去完…

HH SaaS电商系统的结算系统设计

文章目录一、第三方卖家销售货款结算流程说明&#xff1a;销售货款结算逻辑流程图预期收入如何统计二、第三方卖家推广分销佣金结算佣金结算逻辑流程图逾期佣金收入如何统计三、采购货款结算租户采购货款结算流程说明商城采购货款结算流程说明店铺商家的采购货款结算流程说明四…

postgresql删除索引_PostgreSQL 13 发布,索引和查找有重大改进

9月24日&#xff0c;PostgreSQL全球开发组宣布PostgreSQL 13正式发布&#xff0c;作为世界上使用最多的开源数据库之一&#xff0c;PostgresSQL 13是目前的最新版本。PostgreSQL 13 在索引和查找方面进行了重大改进&#xff0c;有利于大型数据库系统&#xff0c;改进包括索引的…

【WebRTC---源码篇】(十六)WebRTC/NetEQ

WebRTC【4096版本】 NetEQ的作用 进行抖动控制和丢包隐藏,通过该技术可以让音频更平滑 NetEQ插入packet数据 int NetEqImpl::InsertPacketInternal(const RTPHeader& rtp_header,rtc::ArrayView<const uint8_t> payload) {//如果有效荷载payload为空if (paylo…

HH SaaS电商系统的销售订单设计

文章目录订单销售类型订单优惠优惠方式子订单优惠金额订单拆单订单发货销售订单拆单逻辑图销售订单的信息结构相关实体订单运营类型&#xff08;作废&#xff09;售后截止时间订单状态状态机的设计不同属性组合下的订单状态组合1&#xff1a;实物线上非预售非定制非拼单快递组合…

kafka netty_惠而浦:使用Netty和Kafka的微服务

kafka netty介绍 在上一个博客中 &#xff0c;我介绍了Netty用作Web服务器。 该示例运行良好……只要需要广播服务器即可。 大多数情况下不是很有用。 更有可能的是&#xff0c;每个客户端仅接收针对其的数据&#xff0c;并保留了特殊情况下的广播&#xff0c;例如“服务器在1…

HH SaaS电商系统的拼团系统设计

文章目录拼团业务流程拼团单实体拼团单的状态拼团型订单的销售状态注意点拼团业务流程 创建活动 管理后台创建拼团活动&#xff0c;设置好活动有效期、成团人数、成团时效、限购数量、活动对象、添加活动商品&#xff0c;设置团长价和团员价&#xff0c;活动开始后活动对象在买…

统信uos系统考试题_离Windows更近一步!微信Linux原生版上线:国产统信UOS系统已适配...

就在本月11号&#xff0c;国产操作系统-统信 UOS发布了专业版 V20(1030)&#xff0c;功能更强大&#xff0c;同时性能和安全性均有所提升。而距离这个好消息过去没多久&#xff0c;统信软件官方再次发布了一个好消息&#xff1a;那就是微信桌面客户端(统信 UOS 版)研发完成&…

npm 引用子项目模块_Java / Web项目中的NPM模块Browser-Sync

npm 引用子项目模块Browser-Sync是一个方便的基于Node.js的NPM模块&#xff0c;可用于更快的Web开发。 浏览器同步可在许多设备之间同步文件更改和交互。 最重要的功能是实时重新加载。 我们也可以在Java / Web项目中使用Browser-Sync。 Cagatay Civici创造了一个伟大的 视频教…

xrd精修教程_XRD精修系列干货 | 带你领略晶体之美

1. XRD精修教程(一)——XRD精修基本原理与GSAS软件简介(附GSAS软件下载链接)点击上图即可查看全文X射线衍射分析(XRD)在研究材料的相结构、相成分等多个方面有广泛的应用&#xff0c;但最常用的多晶衍射法有个缺点&#xff1a;得到的谱峰重叠严重&#xff0c;从而造成大量材料结…

多个cpp文件生成so_C++:C++的文件搜索路径

在做大型工程的时候&#xff0c;除了有C语法知识之外&#xff0c;还要有工程能力。最先要具备的能力是&#xff1a;理解C文件的编译&#xff0c;链接过程。明白C头文件的搜索路径。本文&#xff0c;介绍C的文件搜索路径。对于C文件来说&#xff0c;主要有两种&#xff0c;一种是…

HH SaaS电商系统的店铺系统设计

文章目录为什么店铺运营模式要区分B2C、C2C、O2O&#xff1f;O2O店铺B2C店铺自营B2C店铺第三方B2C店铺C2C店铺为什么O2O店铺不允许售卖快递类的商品&#xff1f;B2C、C2C模式的自提和O2O的自提有什么区别&#xff1f;B2C、C2C模式的配送和O2O的配送有什么区别&#xff1f;为什么…

监听js变量的变化_JS监听事件型爬虫

点击上方“Python数据科学”&#xff0c;选择“星标公众号”关键时刻&#xff0c;第一时间送达&#xff01;作者&#xff1a;zuobangbang来源&#xff1a;zuobangbang最近开始研究网页参数的JS加密&#xff0c;但是大型网站的JS文件过于繁杂&#xff0c;不适合新手上路&#xf…

HH SaaS电商系统的支付模块设计

文章目录支付单支付单状态流转逻辑说明支付相关实体支付流水记录支付方式支付渠道支付单 销售订单生成时&#xff0c;同步生成支付单&#xff0c;如果销售订单的应付金额由首付款和尾款组成&#xff0c;那么会生成两个支付单 支付单与销售订单的“联合单号”或者“退款单ID”关…

添加几个手机联系人_One UI 3.0: 更细腻、更好用,这才是手机系统该有的样子

作为全球出货量最多的 Android 手机厂商&#xff0c;三星宣布将于北京时间 1 月 14 日正式召开 2021 年度的新品发布会。伴随着 S21 的即将发售&#xff0c;我想借此机会和大家一起来聊一聊前不久刚刚推送正式版本的 One UI 3.0。One UI 3.0 是三星基于 Android 11.0 打造的新一…

HH SaaS电商系统的商城模块设计

文章目录好获SaaS电商系统层级关系商城实体商城运营模式商城可选子系统创建商城商城管理后台有供应系统和无供应系统的B2C和混合模式的商城系统对比有仓储系统和无仓储系统的B2C和混合模式的商城系统对比有店铺系统和没有店铺系统的商城系统对比商城关闭商家入驻通道B2C模式商城…

HH SaaS电商系统的物流单设计

业务说明 物流信息提交后&#xff0c;系统生成物流单&#xff0c;出库单与物流单是一对多的关系 退货时买家填写物流信息&#xff0c;提交后系统生成物流单和入库单&#xff0c;物流单需要保存入库单的id 物流单实体