10 道关于 Java 泛型的面试题

转载自   10 道关于 Java 泛型的面试题

1.Java中的泛型是什么 ? 使用泛型的好处是什么?

这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便。

泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。

  

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

这是一道更好的泛型面试题。泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如List<String>在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。

你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。根据你对这个泛型问题的回答情况,你会得到一些后续提问,比如为什么泛型是由类型擦除来实现的或者给你展示一些会导致编译器出错的错误泛型代码。更多请参考这篇文章《揭开Java 泛型类型擦除神秘面纱》。

 

3. 什么是泛型中的限定通配符和非限定通配符 ?

这是另一个非常流行的Java泛型面试题。限定通配符对类型进行了限制。有两种限定通配符,一种是<? extends T>它通过确保类型必须是T的子类来设定类型的上界,另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。另一方面<?>表示了非限定通配符,因为<?>可以用任意类型来替代。

  

4. List<? extends T>和List <? super T>之间有什么区别 ?

这和上一个面试题有联系,有时面试官会用这个问题来评估你对泛型的理解,而不是直接问你什么是限定通配符和非限定通配符。这两个List的声明都是限定通配符的例子,List<? extends T>可以接受任何继承自T的类型的List,而List<? super T>可以接受任何T的父类构成的List。例如List<? extends Number>可以接受List<Integer>或List<Float>。在本段出现的连接中可以找到更多信息。

 

5. 如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?

编写泛型方法并不困难,你需要用泛型类型来替代原始类型,比如使用T, E or K,V等被广泛认可的类型占位符。泛型方法的例子请参阅Java集合类框架。最简单的情况下,一个泛型方法可能会像这样:

public V put(K key, V value) {return cache.put(key, value);}

   

6. Java中如何使用泛型编写带有参数的类?

这是上一道面试题的延伸。面试官可能会要求你用泛型编写一个类型安全的类,而不是编写一个泛型方法。关键仍然是使用泛型类型来代替原始类型,而且要使用JDK中采用的标准占位符。

 

7. 编写一段泛型程序来实现LRU缓存?

对于喜欢Java编程的人来说这相当于是一次练习。给你个提示,LinkedHashMap可以用来实现固定大小的LRU缓存,当LRU缓存已经满了的时候,它会把最老的键值对移出缓存。

LinkedHashMap提供了一个称为removeEldestEntry()的方法,该方法会被put()和putAll()调用来删除最老的键值对。当然,如果你已经编写了一个可运行的JUnit测试,你也可以随意编写你自己的实现代码。

 

8. 你可以把List<String>传递给一个接受List<Object>参数的方法吗?

对任何一个不太熟悉泛型的人来说,这个Java泛型题目看起来令人疑惑,因为乍看起来String是一种Object,所以List<String>应当可以用在需要List<Object>的地方,但是事实并非如此。真这样做的话会导致编译错误。

如果你再深一步考虑,你会发现Java这样做是有意义的,因为List<Object>可以存储任何类型的对象包括String, Integer等等,而List<String>却只能用来存储Strings。 

List<Object> objectList; 
List<String> stringList;
objectList = stringList;

 

9. Array中可以用泛型吗?

这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

 

10. 如何阻止Java中的类型未检查的警告?

如果你把泛型和原始类型混合起来使用,例如下列代码,Java 5的javac编译器会产生类型未检查的警告,例如  

List<String> rawList = new ArrayList();

更多面试题及答案请在后台回复:面试

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

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

相关文章

【2018.3.31】模拟赛之三-ssl2408 比萨【搜索,dfs】

正题 大意 有t种配料&#xff0c;有n种限制。限制就是几种配料不能同时使用&#xff08;可能有多种&#xff09;。求方案数 解题思路 暴力搜索能过 代码 #include<cstdio> using namespace std; int n,t,k[53],a[53][21],v[21],s; bool flag; void dfs(int dep,int x)…

CSS3的几个变形案例……

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;那个……辣椒酱很好吃的&#xff0c;哈哈哈哈&#xff01;今天给大家分享的内容是利用CSS制作网页的动画。辣椒酱&#xff1a;自从有了这款辣椒酱&#xff0c;拌饭再也不用老干妈CSS变形CSS的变形包括这么几种效果&#xff…

图片管理应用

文章目录一、简介二、父项目三、图片管理服务的数据库设计四、定义module &#xff1a; img_pojo五、定义module &#xff1a; img_mapper六、定义module &#xff1a; img_service_api七、module &#xff1a; img_service_provider八、 定义module &#xff1a; imp_service_…

我眼中的ASP.NET Core之微服务

前言 前几天在博客园看到有园友在分享关于微软的一个微服务架构的示例程序&#xff0c;想必大家都已经知道了&#xff0c;那就是eShopOnContainers。 我们先不看项目的后缀名称 OnXXX &#xff0c;因为除了 OnContainers 还有 OnAzure&#xff0c;OnWeb&#xff0c;OnKuberne…

形象的解释神经网络激活函数的作用是什么

转载自 形象的解释神经网络激活函数的作用是什么 神经网络中激活函数的作用 查阅资料和学习&#xff0c;大家对神经网络中激活函数的作用主要集中下面这个观点&#xff1a; 激活函数是用来加入非线性因素的&#xff0c;解决性模型所不能解决的问题。 下面我分别从这个方面…

【2018.3.31】模拟赛之四-ssl2408 句子【dp,字符串】

正题 大意 先给出n个句子&#xff0c;然后给出一个最终句子。最终句子由多个句子加密后组成&#xff08;可能重复&#xff09;。加密方法就是将字母调换位置&#xff0c;加密代价就是该位置与原来的字母不同的数量。求达到最终句子的最小加密代价 解题思路 用f[i]f[i]表示最终…

CSS3中的动画示例

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;上一期我们分享了几个CSS变形案例&#xff0c;大家还记得有哪几个吗&#xff1f;原文在这里&#xff1a;CSS3的几个变形案例……今天&#xff0c;我们来看看CSS的过渡&#xff1a;过渡简单的来讲&#xff0c;就是元素由一种…

ASP.NET Core之跨平台的实时性能监控(2.健康检查)

前言 上篇我们讲了《如何使用App Metrics 做一个简单的APM监控》,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core之跨平台的实时性能监控 首先我们来了解一下什么是健康检查(health checks)? 1.什么是健康检查? 健康检查…

​通俗理解神经网络BP反向传播算法

转载自 ​通俗理解神经网络BP反向传播算法 通俗理解神经网络BP反向传播算法 在学习深度学习相关知识&#xff0c;无疑都是从神经网络开始入手&#xff0c;在神经网络对参数的学习算法bp算法&#xff0c;接触了很多次&#xff0c;每一次查找资料学习&#xff0c;都有着似懂非…

ssl初一组周六模拟赛【2018.3.31】

前言 先说一下成绩&#xff1a; 姓名成绩hjq300wyc(本人千年老二)270zyc260xjq240lw223xxy220lrz200hzb200 正题 题目1&#xff1a;ssl2406 约数【水题】 水题 链接&#xff1a; https://blog.csdn.net/mr_wuyongcong/article/details/79768338 题目2&#xff1a;ssl2407 …

CSS动画示例(上一篇是CSS过渡…)

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;前面&#xff0c;我们将CSS的变形和过渡都整理了&#xff0c;有需要的可以移步这里看&#xff1a;CSS3中的动画示例CSS3的几个变形案例……今天&#xff0c;我们来看看CSS3的动画。CSS3使用动画分为两个步骤&#xff1a;1.通…

Health Check in eShop -- 解析微软微服务架构Demo(五)

引言 What is the Health Check Health Check&#xff08;健康状态检查&#xff09;不仅是对自己应用程序内部检测各个项目之间的健康状态&#xff08;各项目的运行情况、项目之间的连接情况等&#xff09;&#xff0c;还包括了应用程序对外部或者第三方依赖库的状态检测。 W…

为什么梯度反方向是函数下降最快的方向

转载自 为什么梯度反方向是函数下降最快的方向 为什么梯度反方向是函数下降最快的方向&#xff1f; 刚接触梯度下降这个概念的时候&#xff0c;是在学习机器学习算法的时候&#xff0c;很多训练算法用的就是梯度下降&#xff0c;然后资料和老师们也说朝着梯度的反方向变动&a…

ssl1335-最佳派对【二分图,最大匹配,图论】

正题 题目 有n个中国学生与若干个外国学生&#xff0c;一些中国学生与外国学生之间可以很好的配对&#xff0c;求能配成的最多对数 解题思路 二分图匈牙利算法 代码 #include<cstdio> #include<cstring> using namespace std; struct line{int x,y,next; }a[100…

javaweb中实现分页,持续更新……

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;昨天分享了个分页工具类一个简单的分页工具类&#xff0c;其实&#xff0c;也是为今天的分享做的铺垫&#xff0c;今天&#xff0c;给大家带来的是javaweb实现分页的全过程&#xff01;前言&#xff1a;为什么需要分页&…

Redis(入门)

文章目录一、 Redis简介二、 基于Docker安装Redis单机版三、 Redis常用命令1 Key操作2 字符串值(String)&#xff08;值的长度不超过512MB&#xff09;3 哈希表(Hash)4 列表&#xff08;List&#xff09;5 集合(Set)6 有序集合&#xff08;Sorted Set&#xff09;四、 Redis持久…

浅析神经网络为什么能够无限逼近任意连续函数

转载自 浅析神经网络为什么能够无限逼近任意连续函数 神经网络为什么能够无限逼近任意连续函数&#xff1f; 下面通过一个分类例子一步一步的引出为什么神经网络能够无限逼近任意函数这个观点&#xff0c;并且给出直观感觉! 我们首先有这个需求&#xff0c;需要将下面的数据…

前端模块化工具--webpack学习心得

话说前头 webpack前段时间有听说一下&#xff0c;现在已经到了3.x的版本&#xff0c;自己没去接触。因为之前使用gulp来作为自己的项目构建工具。现在感觉gulp使用的趋势在减少。现在这段时间去接触了webpack&#xff0c;感觉很不错&#xff0c;它的模块化打包机制&#xff0c…

ssl1333-地鼠的困境【二分图,最大匹配,图论】

正题 大意 有n个地鼠有m个地洞&#xff0c;每只地鼠的速度都是v。若不在s秒之内回到地洞就会狗带&#xff0c;每只地洞只能躲一只地鼠&#xff0c;求能活下来多少只 代码 #include<cstdio> #include<cstring> #include<cmath> using namespace std; struct…

javaweb实现分页查询(一)

大家好&#xff0c;欢迎来到雄雄的小课堂&#xff0c;昨天分享了个分页工具类&#xff0c;其实&#xff0c;也是为今天的分享做的铺垫&#xff0c;今天&#xff0c;给大家带来的是javaweb实现分页的全过程&#xff01; 前言&#xff1a;为什么需要分页&#xff1f;假设某大学有…