Java 棘手面试问题

2023-11-04

不久前我写过一篇文章前 50 个 Java 编程问题。我们的读者非常喜欢它。所以今天我们将研究一些 Java 面试中棘手的问题。

Java 棘手面试问题

这些都是编程问题,但除非您对 Java 有深入的了解,否则很难猜测输出并解释它。

1. Null 作为参数

我们有重载函数并且传递 null。将调用哪个函数以及程序的输出是什么?

public class Test {
	public static void main(String[] args) {
		foo(null);
	}
	public static void foo(Object o) {
		System.out.println("Object argument");
	}
	public static void foo(String s) {
		System.out.println("String argument");
	}
}

2.长用“L”

你能猜出下面语句的输出吗?

long longWithL = 1000*60*60*24*365L;
long longWithoutL = 1000*60*60*24*365;
System.out.println(longWithL);
System.out.println(longWithoutL);

空参数棘手问题的解释

根据 Java 规范,如果发生重载,编译器会选择最具体的功能。显然String类比Object类更具体,因此它会打印“String argument”。但是,如果我们在类中有另一个方法(如下所示)怎么办?

public static void foo(StringBuffer i){
	System.out.println("StringBuffer impl");
}

在这种情况下,Java 编译器将抛出错误“The method foo(String) is ambigacy for the type Test”。 String 和 StringBuffer 没有继承层次结构。因此,它们中没有一个比其他的更具体。如果第一个方法处理的任何调用可以传递给另一个方法而不会出现编译时类型错误,则该方法比另一个方法更具体。我们可以将 String 作为参数传递给 Object 参数和 String 参数,但不能传递给 StringBuffer 参数方法。

长变量解释

代码片段的输出将是:

31536000000
1471228928

我们通过添加“L”后缀来显式创建第一个变量。因此编译器会将其视为 long 并将其分配给第一个变量。对于第二条语句,编译器将执行计算并将其视为 32 位整数。由于输出超出整数最大值 (2147483647) 的范围,编译器将截断最高有效位,然后将其分配给变量。 1000*60*60*24*365L 的二进制等效值 = 011101010111101100010010110000000000(36 位)。删除 4 个最高有效位以容纳 32 位 int 后,新值 = 01010111101100010010110000000000(32 位)。这等于 1471228928,因此等于输出。最近我为 java 棘手的程序创建了一个 YouTube 视频系列。

您可以从我们的网站查看更多 Java 示例程序GitHub 存储库.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 棘手面试问题 的相关文章

随机推荐

  • 如何在 Ubuntu 18.04 上设置 Nginx 服务器块

    Nginx Server Blocks 允许您在一台机器上运行多个网站 使用服务器块 您可以指定站点文档根 包含网站文件的目录 为每个站点创建单独的安全策略 为每个站点使用不同的 SSL 证书等等 在本文中 我们将提供有关如何在 Ubunt
  • 如何在 CentOS 7 上使用 Nginx 安装 WordPress

    WordPress 是全球最受欢迎的开源博客和 CMS 平台 为当今互联网上四分之一的网站提供支持 它基于 PHP 和 MySQL 并包含大量可以通过免费和高级插件和主题进行扩展的功能 WordPress 是创建在线商店 网站或博客的最简单
  • 如何在 CentOS 7 上安装 OpenCV

    OpenCV 开源计算机视觉库 是一个开源计算机视觉库 绑定了 C Python 和 Java 并支持所有主要操作系统 它可以利用多核处理并具有 GPU 加速功能来实现实时操作 OpenCV 的应用非常广泛 包括医学图像分析 拼接街景图像
  • 您应该了解的 Apache 命令

    Apache HTTP 服务器是世界上最流行的 Web 服务器 它是一个免费 开源 跨平台的 HTTP 服务器 提供强大的功能 可以通过各种模块进行扩展 如果您是开发人员或系统管理员 您很可能经常与 Apache 打交道 在本指南中 我们将
  • 如何在 Debian 10 Linux 上安装和使用 Docker

    Docker 是一个容器化平台 允许您快速构建 测试和部署应用程序作为可移植 自给自足的容器 几乎可以在任何地方运行 在本教程中 我们将解释如何在 Debian 10 Buster 上安装 Docker 并探索基本的 Docker 概念和命
  • Linux 中的 W 命令

    在这篇文章中 我们将讨论w命令 w是一个命令行实用程序 显示有关当前登录用户以及每个用户正在执行的操作的信息 它还提供有关系统已运行多长时间 当前时间和系统平均负载的信息 如何使用w命令 语法为w命令如下 w OPTIONS USER Wh
  • 如何在 CentOS 7 上安装 Skype

    Skype是世界上最受欢迎的通信应用程序之一 可让您免费进行在线音频和视频通话 并以经济实惠的价格拨打全球手机和固定电话 Skype 不是开源应用程序 也不包含在 CentOS 存储库中 本教程介绍如何在 CentOS 7 上安装最新版本的
  • 如何在 Ubuntu 18.04 上设置 OpenVPN 服务器

    无论您是想在连接不可信的公共 Wi Fi 网络时安全可靠地访问互联网 绕过地理限制内容还是允许您的同事在远程工作时安全地连接到您的公司网络 使用 VPN 都是最佳解决方案 VPN 允许您连接到远程 VPN 服务器 使您的连接加密且安全 并通
  • Android布局-LinearLayout、RelativeLayout

    在本教程中 我们将概述 Android 布局 我们还将探索一些可用于组织屏幕内容的特定布局控件 即 Android LinearLayout 和 AndroidrelativeLayout 安卓布局 用户界面的基本构建块是View从 Vie
  • Python 文件操作 - 使用 Python 读取和写入文件

    在本教程中 我们将研究 Python 中的不同文件操作 我们将介绍如何使用 Python 读取文件 写入文件 删除文件等等 所以 事不宜迟 让我们开始吧 在 Python 中处理文件 在之前的教程中 我们使用了控制台接受输入 现在 我们将使
  • 如何在 JavaScript 中编写条件语句

    介绍 在编程中 很多时候您会希望根据用户输入或其他因素运行不同的代码块 例如 如果每个字段都正确填写 您可能希望提交表单 但如果缺少某些必填字段 您可能希望阻止该表单提交 为了完成这样的任务 我们有条件语句 它们是所有编程语言的组成部分 条
  • 如何在 CentOS 7 上使用 Apache 作为带有 mod_proxy 的反向代理

    介绍 A 反向代理是一种代理服务器 它接受 HTTP S 请求并将其透明地分发到一个或多个后端服务器 反向代理非常有用 因为许多现代 Web 应用程序使用后端应用程序服务器处理传入的 HTTP 请求 这些服务器并不意味着用户可以直接访问 并
  • 如何在 Ubuntu 16.04 上安装和配置 Elasticsearch

    介绍 弹性搜索是一个实时分布式搜索和分析数据的平台 它的流行是由于它的易用性 强大的功能和可扩展性 Elasticsearch 支持 RESTful 操作 这意味着您可以将 HTTP 方法 GET POST PUT DELETE 等 与 H
  • 如何在 CentOS 7 上使用 Let's Encrypt 保护 Apache

    介绍 让我们加密是一个证书颁发机构 CA 为以下用户提供免费证书传输层安全 TLS 加密 从而在 Web 服务器上启用加密的 HTTPS 它通过提供可自动执行大部分步骤的软件客户端 简化了证书的创建 验证 签名 安装和续订过程 Certbo
  • 如何在 Ubuntu 12.04 LTS(精确穿山甲)上安装 nginx

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • R 中的 head() 和 tail() 函数 - 详细参考

    The R 中的 head 和 tail 函数通常用于读取数据集的前 n 行和后 n 行 您可能是一名在职专业人员 程序员或新手 但有时您需要阅读大型数据集并对其进行分析 消化一个拥有 20 多列甚至更多列 数千行的庞大数据集确实很困难 本
  • NoSQL 数据库管理系统和模型的比较

    介绍 当大多数人想到数据库时 他们通常会想到传统的关系数据库模型 其中涉及由行和列组成的表 虽然关系数据库管理系统仍然处理互联网上的大部分数据 但近年来 随着开发人员寻求解决关系模型局限性的方法 替代数据模型变得更加普遍 这些非关系数据库模
  • 理解 JavaScript 中的类

    介绍 JavaScript 是一种基于原型的语言 JavaScript 中的每个对象都有一个隐藏的内部属性 称为 Prototype 可用于扩展对象属性和方法 您可以在我们的文章中阅读有关原型的更多信息了解 JavaScript 中的原型和
  • 如何在角度测试中使用 Spies

    介绍 茉莉花间谍用于跟踪或存根函数或方法 间谍是一种检查函数是否被调用或提供自定义返回值的方法 我们可以使用间谍来测试依赖于服务的组件 并避免实际调用服务的方法来获取值 这有助于使我们的单元测试专注于测试组件本身的内部而不是其依赖项 在本文
  • Java 棘手面试问题

    不久前我写过一篇文章前 50 个 Java 编程问题 我们的读者非常喜欢它 所以今天我们将研究一些 Java 面试中棘手的问题 Java 棘手面试问题 这些都是编程问题 但除非您对 Java 有深入的了解 否则很难猜测输出并解释它 1 Nu