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实例化,否则将导致编译错误。 另一方面,<?>表示和无界类型,因为<?>可以用任何类型替换。 有关我在Generics中有界和无界通配符之间的差异之处,请参见我的更多信息。

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.编写程序以使用泛型实现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

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

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

相关文章

隐层元素闪一下_太阳一直依靠什么元素在燃烧,地球上的重元素又是怎么来的?...

本文基于回答网友一个这样的问题&#xff1a;太阳目前氢核聚变是氦碳氧稳定燃烧地球上的铁镍重元素哪里来的&#xff1f;可以说&#xff0c;这是一个毫无逻辑乱七八糟的问题&#xff0c;但既然邀请回答&#xff0c;就从中挑出几个稍显合理的问题说明一下。太阳核心每时每刻都在…

基于Token的WEB后台认证机制

基于Token的WEB后台认证机制 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password&#xff0c;简言之&#xff0c;Basic Auth是配合RESTful API 使用的最简单的认证方式&#xff0c;只需提供用户名密码即可&#xf…

saltstack

第一&#xff1a;安装前准备&#xff1a; 声明我用的是ubuntu 16.04的系统 1.修改主机名&#xff0c;并保证两台机器可以互相ping同主机名 ip1 master_hostname ip2 slave_hostname 第二&#xff1a;安装 服务器安装 yum install salt-master -y客户端安装 yum install salt…

ios 百度地图指定区域_获取百度地图可视区域范围的数据

有个业务场景&#xff0c;需要根据获取到的地图区域显示&#xff0c;根据相应的经纬度反查 左侧区域的会议室。思路&#xff1a;1.得到百度地图可视区域--可视区域的中心点2.可视区域的四个角的其中两个(东北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采样器扩展JMeter

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

vue怎么改logo_vue全家桶项目构建教程

前言vue是现阶段很流行的前端框架&#xff0c;很多人通过vue官方文档的学习&#xff0c;对vue的使用都有了一定的了解&#xff0c;但再在项目工程化处理的时候&#xff0c;却发现不知道改怎么更好的管理自己的项目&#xff0c;如何去引入一些框架以及vue全家桶其他框架的使用&a…

stm32 内部sram大小_在SRAM、FLASH中调试代码的配置方法(附详细步骤)

聊天界面发送嵌入式大杂烩获取1TB大杂烩资料包STM32的FLASH擦写次数有限(大概为1万次)&#xff0c;所以为了延长FLASH的使用时间&#xff0c;我们平时调试时可以选择在SRAM中进行硬件调试。除此之外&#xff0c;SRAM 存储器的写入速度比在内部 FLASH 中要快得多&#xff0c;所以…

自定义控件_VIewPager显示多个Item

一直以来想搞明白这个不完全的VIewPager是怎么做到的&#xff0c;有幸看到这片篇文章 有二种实现方法 1.设置的属性 1.clipChildren属性 2.setPageMargin 3.更新Item外界面 2.重写getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…

华为怎么改输入法皮肤_微信和QQ个性键盘皮肤

hello大家好&#xff0c;今天是2019年1月1号&#xff0c;祝大家新年快乐今天是新年的第一天&#xff0c;所以说给大家介绍一个好玩的&#xff0c;微信和QQ都能设置的个性的键盘皮肤&#xff0c;看下图&#xff0c;这样的个性的键盘主题怎么设置呢&#xff1f;其实很简单&#x…

用金万维怎么设置路由器_家用路由器怎么设置 家庭路由器设置方法【图文】...

这里以TP-link的无线路由器为例&#xff0c;教一下怎么调试路由器上网。准备工具:网线两条&#xff0c;电脑或者手机&#xff0c;用手机的话就不需要用网线了1、用网线连接光纤猫与路由器&#xff0c;光猫的LAN1口与路由器的WAN相连。路由器的LAN任意一个口用网线连接电脑。2、…

Liferay –简单主题开发

实际上&#xff0c;Liferay的6.1版本已经走了很长一段路&#xff0c;该版本完全支持JSF和IceFaces。 我的目标是使它成为我们团队中的标准协作工具&#xff0c;因此我仍在尝试学习它的精髓。 好的软件应用程序可以解决问题&#xff0c;但是好的软件应用程序不仅可以解决问题&am…

springmvc初步配置

导包/添加依赖&#xff1a;<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springfram…

行号 设置vim_在VSCode里面配置Vim正确姿势(细节解析)

一、导论对于不用vim的人来说&#xff0c;vim简直是个噩梦&#xff0c;复杂的指令、丑陋的界面、令人头痛的配置文件&#xff0c;任何一项都足以劝退一大波人&#xff0c;但是对于已经习惯了使用vim的人来说&#xff0c;vim简直就是马良神笔&#xff0c;似乎vim除了生孩子什么都…

巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!

科技美肤&#xff0c;无龄焕变。美浮特2019全国美肤巡回沙龙第一期活动圆满结束&#xff01;优秀的小伙伴&#xff0c;雅致的茶歇环境&#xff0c;精美的甜点小食&#xff0c;理论与体验并行的肤感测试课堂……不知道是哪一个环节给大家留下了深刻的印象呢&#xff1f;首先让我…

UIAutomation识别UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是随.net framework3.0一起发布的&#xff0c;虽然在如今这个几乎每天都有各种新名词、新技术出来的所谓的21世纪&#xff0c;它显得已经有些过时了。前些日子&#xff0c;正好一个…

【C++第一个Demo】---控制台RPG游戏3【登陆菜单树】

【登陆系统--树结构】 1 首先我这里设计&#xff0c;由一个基类MainMenu构建树结构&#xff0c;并实现控制台上菜单之间的切换和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“与“不存在”——巴蜀文明概论

海德格尔有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一个伟大的存在&#xff0c;偏偏存在于四川的口头禅却是“不存在”。在不存在中追求存在&#xff0c;在存在中摆脱存在。六月白鹿镇&#xff0c;书院学习了《李白与海德格尔…

Altium 原理图出现元件“Extra Pin…in Normal of part ”警告的解决方法

转载于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的时候编译完后&#xff0c;只关注过错误没有关注过警告&#xff0c;现在认真排查一下有哪些警告。 正在进行的项目原理图编译完成后提示标题中的警告信息。经过在网上搜索&…

Zookeeper开源客户端框架Curator简介

Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇…

适当的Java堆大小的5个技巧

确定生产系统合适的Java堆大小不是一件容易的事。 在我的Java EE企业经验中&#xff0c;我发现由于Java堆容量和调整不足而导致的多个性能问题。 本文将为您提供5个技巧&#xff0c;这些技巧可以帮助您确定当前或新生产环境的最佳Java堆大小。 这些技巧中的一些对于预防和解决j…