java泛型面试_Java泛型面试问题

java泛型面试

Java面试中的通用面试问题在相当长的时间内在Java 5周围越来越普遍,许多应用程序都转移到Java 5上,并且几乎所有新的Java开发都发生在Tiger(Java 5的代号)上。 泛型和Java 5功能(例如Enum)的重要性,Collection实用程序在Java面试中越来越受欢迎。 如果您不熟悉有界和无界的通配符 , 泛型如何在内部工作 ,类型擦除以及是否熟悉用Java编写参数化的泛型类和方法,那么泛型采访问题会变得非常棘手。 准备进行仿制药面试的最佳方法是,尝试对仿制药的各种功能进行简单的编程。 无论如何,在这篇Java访谈文章中,我们将看到一些流行的访谈问题,以及有关Java中泛型的答案。

1. Java中的泛型是什么? 使用泛型有什么优势?

这是在任何Java访谈中都针对泛型提出的首批访谈问题之一,主要是初学者和中级。 那些来自Java 5之前的背景的人知道,将对象存储在Collection中然后在使用它之前将其转换回正确的Type是多么不便。 泛型阻止了这些。 它提供了编译时的类型安全性,并确保仅在集合中插入正确的Type,并避免在运行时出现ClassCastException。

2.泛型如何在Java中工作? 什么是类型擦除?

这是泛型中较好的面试问题之一。 泛型使用Type Erase实现,编译器在编译时擦除所有与类型相关的信息,并且在运行时不提供与类型相关的信息。 例如List <String>在运行时仅由List表示。 这样做是为了确保与Java 5之前开发的库具有二进制兼容性。您在运行时无法访问Type参数,并且编译器在运行时将泛型转换为Raw类型 。 根据您的回答,您可以根据该通用面试问题得到很多后续问题,例如, 为什么使用类型擦除来实现泛型或提供一些无效的泛型代码而导致编译器错误。 阅读我的文章泛型如何在Java中工作以获取更多详细信息

3.泛型中有界和无界通配符是什么?

这是泛型上另一个非常流行的Java面试问题 。 有界通配符是那些强加给Type的通配符。 有两种有界通配符<? 扩展T>,通过确保类型必须是T和<?的子类来施加上限。 超级T>,其中通过确保类型必须施加的下限必须是T的超类。此泛型类型必须在边界内用Type实例化,否则会导致编译错误。 另一方面,<?>表示和无限制类型,因为<?>可以用任何Type替换。 请参阅我在泛型中有界和无界通配符之间的职位差异的更多信息。

4. List <有 什么区别 扩展T> List <? 超级T>

这与以前的仿制药面试问题有关,有一段时间而不是询问什么是有界和无界通配符,访调员会提出此问题以评估您对仿制药的理解。 两个List声明都是有界通配符的示例,List <? 扩展T>将接受任何类型为扩展T的列表,而列表<? super T>将接受任何类型为T的超类的List。例如List <? 扩展Number>可以接受List <Integer>或List <Float>。 在上面的链接中查看更多。

5.如何编写一个接受泛型参数并返回泛型的泛型方法?

编写通用方法并不困难,而不是使用原始类型,您需要使用通用类型,例如T,E或K,V,它们是Type,Element和Key,Value的占位符。 查看Java Collection框架以获取泛型方法的示例。 最简单的通用方法如下所示:
public V put(K key, V value) {return cache.put(key, value);
}

6.如何使用泛型用Java写参数化类?

这是以前的Java泛型采访问题的扩展。 而不是要求编写泛型方法,Interviewer可能会要求使用泛型编写类型安全的类 。 再次,关键是不要使用原始类型,而需要使用泛型类型,并且始终使用JDK中使用的标准占位符。

7.编写一个使用Generics实现LRU缓存的程序。

这是喜欢Java编码的任何人的练习。 一个提示是,可以使用LinkedHashMap实现固定大小的LRU缓存,其中需要在缓存已满时删除最旧的条目。 LinkedHashMap提供了一个称为removeEldestEntry()的方法,该方法由put()和putAll()调用,可用于指示删除最旧的条目。 只要您具有工作版本的书面版本以及单元测试,就可以自由提出自己的实现。

8.是否可以将 List <String> 传递给接受List <Object>的方法

Java中的这个通用面试问题可能会使任何对Generics不太熟悉的人感到困惑,因为乍一看,它看起来像String是对象,因此可以在需要List <Object>的地方使用List <String>,但这不是事实。 这将导致编译错误。 如果您更进一步,这确实是有道理的,因为List <Object>可以存储任何内容,包括String,Integer等,但是List <String>仅可以存储String。
List<Object> objectList;
List<String> stringList;objectList = stringList;  //compilation error incompatible types

9.我们可以在数组中使用泛型吗?

如果您知道Array不支持Generics的事实,这可能是Java中最简单的泛型访谈问题,这就是为什么Joshua bloach建议使用List而不是Array的原因,因为List可以提供比Array更可靠的编译时间类型安全性

10.如何抑制Java中未经检查的警告?

如果您使用合并原始类型和泛型类型,则Java 5的Javac编译器会生成未经检查的警告,例如
List<String> rawList = new ArrayList()Note: Hello.java uses unchecked or unsafe operations.;
可以通过使用@SuppressWarnings(“ unchecked”)注释来取消显示。
这些是Java中一些常见的泛型面试问题和答案 。 这些通用面试问题都不是强硬的,而是基于通用的基础知识。 任何对泛型有相当了解的Java程序员都必须熟悉Java中的这些泛型问题。 如果您在任何面试中都提出了其他很好的通用问题,或者您正在寻找Java中任何通用面试问题的答案,那么请在评论部分中发布。

参考:我们的JCG合作伙伴 Javin Paul在Javarevisited博客上针对程序员和开发人员的Java泛型的10个访谈问题 。


翻译自: https://www.javacodegeeks.com/2012/07/java-generics-interview-questions.html

java泛型面试

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

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

相关文章

Python 连接MongoDB并比较两个字符串相似度的简单示例

本文介绍一个示例&#xff1a;使用 pymongo 连接 MongoDB&#xff0c;查询MongoDB中的 字符串 记录&#xff0c;并比较字符串之间的相似度。 一&#xff0c;Python连接MongoDB 大致步骤&#xff1a;创建MongoClient---> 获取 DataBase --->获取Collection&#xff0c;代码…

Vue3 实现网页背景水印功能

经常有一些公司和组织出于系统文件或信息安全保密的需要&#xff0c;需要在系统网页上增加带有个人标识&#xff08;系统账号或个人信息&#xff09;的水印&#xff0c;可以简单防止截图外传首先我们来看这样一个水印功能的实现思路&#xff0c;通常是在我们原有的网页上附上一…

部署微服务– Spring Boot fatjar到Amazon Elastic Beanstalk

最近&#xff0c;我正在研究概念验证的Web应用程序&#xff0c;我想将其部署到公共云以进行快速演示。 我决定使用Amazon&#xff0c;因为我已经有过使用它的经验。 亚马逊提供了几种不同的方式来部署Java Web应用程序。 EC2使我们可以灵活地在机箱上安装和配置任何我们想要的…

洛谷P2286 [HNOI2004]宠物收养场

题目描述 凡凡开了一间宠物收养场。收养场提供两种服务&#xff1a;收养被主人遗弃的宠物和让新的主人领养这些宠物。 每个领养者都希望领养到自己满意的宠物&#xff0c;凡凡根据领养者的要求通过他自己发明的一个特殊的公式&#xff0c;得出该领养者希望领养的宠物的特点值a&…

Vue 自定义指令可以实现哪些有用的功能

Vue 有一些很实用的指令 v-show v-if v-text v-html v-bind v-on 可以帮助我们实现很复杂的功能&#xff0c;同时它还开辟了钩子供我们自己实现自定义指令。根据自己平时开发总结了一些可以通过指令实现的功能场景&#xff1a;控制页面元素显示与隐藏&#xff0c;可用作控制权限…

正三角形的外接圆面积

描述给你正三角形的边长&#xff0c;pi3.1415926 ,求正三角形的外接圆面积。 输入只有一组测试数据 第一行输入一个整数n(1<n<1000)表示接下来要输入n个边长m(1.0<m<1000.0)输出输出每个正三角形的外接圆面积&#xff0c;保留两位小数&#xff0c;每个面积单独占一…

在线答卷系统的前端设计与数据库系统的设计与实现

如果要你实现一个在线的答题系统&#xff0c;你能想到它该具有哪些功能&#xff1f;当我接到这样一个需求的时候&#xff0c;脑海中立马能想到的就是它有录入题库的功能&#xff0c;创建试卷后可以从题库选择试题&#xff0c;并且可以针对试题进行分数的设置和排序。试卷发布后…

jgroups传输消息_使用JGroups进行ElasticMQ消息复制

jgroups传输消息ElasticMQ是一个消息服务器&#xff0c;具有Scala&#xff0c;Java和与Amazon SQS兼容的接口。 它通过跨服务器群集复制消息来支持有保证的消息传递&#xff0c;并通过日志记录实现消息持久性。 消息复制是ElasticMQ的核心功能之一。 但是&#xff0c;如果您看一…

使用 Element 组件搭建在线学习的课程卡片设计

假如我们要做一个在线课程学习的系统&#xff0c;其中我们需要做的一个功能就是课程信息流的一个展示&#xff0c;以等高卡片列表或者瀑布流的方式呈现。首先我们来罗列下这个卡片内应该包括哪些信息点&#xff1a;课程名称课程简介分类信息课程评分等级课程文件课时观看学习人…

MySQL多种安装方式选择

1.rpm包安装方式 rpm包的安装方式非常简单&#xff0c;这里以el6平台下的mysql-5.6.34版本为例&#xff0c;首先&#xff0c;要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包。 a.下载安装包 MySQL-client-5.6.34-1.el6.x86_64.rpm MySQL-devel-5.6.34-1.el6.x86_64.…

12个很棒的Spring数据教程来启动您的数据项目

Spring Data的任务是为数据访问提供一个熟悉且一致的&#xff0c;基于Spring的编程模型&#xff0c;同时仍保留基础数据存储的特​​殊特征。 它使使用数据访问技术&#xff0c;关系和非关系数据库&#xff0c;map-reduce框架以及基于云的数据服务变得容易。 这是一个总括项目…

python多线程编程(3): 使用互斥锁同步线程

问题的提出 上一节的例子中&#xff0c;每个线程互相独立&#xff0c;相互之间没有任何关系。现在假设这样一个例子&#xff1a;有一个全局的计数num&#xff0c;每个线程获取这个全局的计数&#xff0c;根据num进行一些处理&#xff0c;然后将num加1。很容易写出这样的代码&am…

如何防止水印被恶意删除或者隐藏?

继上篇 Vue3 实现网页背景水印功能 我们了解了常见的网页水印功能是如何实现的&#xff0c;懂原理的都知道水印是通过在网页中添加代码绘制 DOM 元素覆盖在原有的网页上而来的&#xff0c;一旦你打开浏览器中的元素审查&#xff0c;可以通过删除元素或者在元素的样式上操作属性…

jmc线程转储_如何分析线程转储– IBM VM

jmc线程转储本文是我们的线程转储分析系列的第4部分&#xff0c;它将为您提供什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点的概述。 您将看到和学习​​到&#xff0c;IBM VM Thread Dump格式是不同的&#xff0c;但是提供了更多现成的故障排除数据。 在这一点上&…

java lock

多线程访问同一个变量&#xff0c;不进行同步&#xff0c;会造成结果不一致。这里解决方案有很多&#xff0c;使用原子变量。加锁同步&#xff0c;使用synchronized同步。下面是一个lock demo&#xff0c;后面会分析lock实现原理。lock使用的是公平锁还是非公平锁等 import jav…

Java 8:使用交替接口公开的类型安全地图生成器

动态展示您的课程 当我是Java新手时&#xff0c;我记得当时想过应该有一种方法可以删除或隐藏我不想公开的类中的方法。 就像用private方法或类似方法覆盖public方法一样&#xff08;哪种情况是不可能的&#xff0c;也不应该是不可能的&#xff09;。 显然&#xff0c;今天&…

nodejs面试题

1、为什么用Nodejs,它有哪些缺点&#xff1f; 事件驱动&#xff0c;通过闭包很容易实现客户端的生命活期。不用担心多线程&#xff0c;锁&#xff0c;并行计算的问题V8引擎速度非常快对于游戏来说&#xff0c;写一遍游戏逻辑代码&#xff0c;前端后端通用当然Nodejs也有一些缺点…

sts-bundle的使用_使用WS-Trust / STS采样器扩展JMeter

sts-bundle的使用JMeter没有对WS-Security或WS-Trust的任何内置支持&#xff0c;这使我为JMeter开发了此STS采样器–可以在负载测试STS时使任何人的生活变得更好。 首先&#xff0c;您需要拥有Apache JMeter发行版。 我正在使用v2.7。 然后&#xff0c;您可以从此处下载sts.sam…

001_jdk配置

配置JAVA_HOME,CLASSPATH,PATH 其中JAVA_HOME必须的 JAVA_HOMEE:\java\jdk1.8.0_77 CLASSPATH(告诉java程序运行时&#xff0c;你的类或者类库在哪里) .; E:\java\jdk1.8.0_77\lib\dt.jar;E:\java\jdk1.8.0_77\lib\tools.jar;E:\java\jdk1.8.0_77\jre\lib\rt.jar 改成变量 .;%J…

Spring MVC 4快速入门Maven原型得到了改进–更多Java 8功能

对于所有有兴趣在没有Spring Boot的情况下快速引导Spring 4应用程序的开发人员&#xff0c;请检查刚刚更新的我的Spring MVC 4 Quickstart Maven原型。 原型已经将Java 8用作目标平台已有一段时间了&#xff0c;但是不支持特定的Java 8功能。 最近的更改带来了Thymeleaf&#x…