轻松应对Java试题,这是一份大数据分析工程师面试指南
作者 | HappyMint
转载自大数据与人工智能(ai-big-data)
导语:经过这一段时间与读者的互动与沟通,本文作者发现很多小伙伴会咨询面试相关的问题,特别是即将毕业的小伙伴,所以决定输出一系列面试相关的文章。本文Java篇,介绍了大数据分析工程师面试时最常被问到的Java相关问题以及解答技巧。
为什么要考察Java?
作为稳居编程语言排行榜前三的Java语言,具有非常多的优秀特性,同时拥有庞大的类库生态和大量的开发者。
Java语言在大数据生态体系中地位也是无可撼动,目前流行的大数据生态组件,很多都是用Java语言或基于JVM的语言(如Scala)开发的。
因此,要想玩转大数据,或多或少需要对Java有所了解。
重点考题集锦
1 程序设计基本概念考察
对于一个初级岗求职者或者应届毕业生来说,公司除了对项目经验有所问询之外,最好的考察办法就是检查基本功,包括编程风格,以及程序结构,数据类型,赋值语句,类型转换,运算符,异常处理等程序设计基本概念的理解。
因此面试之前,一定要对自己所掌握的基本概念知识较为熟悉,尤其是对各种细致的考点要加以重视。
Java程序设计基本概念考察中,对类型转换和异常处理的考察最为常见,有以下原因:
1.在Java程序中,不同的基本类型的值经常需要进行互相转换,实际工作中因为对它们的掌握不够熟练写出错误代码的情况经常发生。
2.异常处理机制在实际工作中会经常被用来实现将程序的异常处理代码和正常业务代码分离,异常处理代码的错误要么高调抛出以让开发者定位处理或低调捕获从而不影响代码的正常执行,从而提高程序的健壮性,现在异常机制已经成为判断一门编程语言是否成熟的标准。
考题模拟:
面试例题1
Java基本类型的类型转换有几种方式,你能简单阐述一下吗?
解析:有两种类型转换方式:自动类型转换和强制类型转换,低级数据类型到高级数据类型的转换称为自动类型转换,高级数据类型到低级数据类型的转换称为强制类型转换。
这些类型由低级到高级分别为(byte,short,char)-->int-->long-->float-->double。
以上回答基本就是这道考题的标准答案,不过如果你能就此考题回答出更为展现你基本功底的以下扩展知识点和举出具体示例,将会给面试大大加分。
加分答法:基本类型的转换首先要分为简单数据类型之间的转换和其他数据类型到字符串的转换。
1.简单数据类型之间的转换可以分为:低级到高级的自动类型转换、高级到低级的强制类型转换、通过包装类过渡类型进行转换。
自动类型转换示例:
char c = 'c';int i = c;System.out.println("output:" + i);输出:output:99
强制类型转换示例:
double dl = 3.14;int i = (int)dl;//这种转换可能会导致溢出或精度的下降
br
包装类过渡类型转换示例:
float f1 = 100.00f;Float F1 = new Float(f1);//根据Java的自动装箱拆箱机制,也可直接写成Float F1=f1;Double d1 = F1.doubleValue();
br
2.其他数据类型转化为字符串,一般通过toString()方法;Character、Integer、Float、Double、Boolean、Short等类的toString方法用于将字符、整数、浮点数、双精度数、逻辑数、短整形等类型转化为字符串。
示例如下:
int i1 = 10;Integer I1 = new Integer(i1);//也可直接写成Integer I1 =i1;String s = I1.toString();
面试例题2
关于异常处理机制,你能简单阐述一下吗?
解析:在Java程序运行时,常常会出现一些非正常的现象,根据其性质可分为错误和异常。一般来说,最常见的错误有程序进入死循环、内存泄漏等。这种情况下,程序运行时本身无法解决。Java错误对应的类为Error类。通常Java程序不对这类错误进行处理。
异常是程序执行时遇到的可避免的程序错误,常见的有数组下标越界,算法溢出(超出数值表达范围)、除数为零、无效参数等。这种情况程序运行时本身可以解决,Java异常对应的类为Exception类。它有各种不同的子类分别对应于不同类型的异常。通常异常有两种处理方式,一种是通过catch捕获,一种是通过throws声明异常。
PS:实际公司面试中,若之前有笔试,很可能会针对异常处理出一道针对具体异常类型的代码考题。所以面试者还是需要对异常处理的不同场景的具体运用有所研究和准备才行,建议在认真学习了异常处理机制的理论知识前提下,多找找相关笔试题刷刷。
面试例题3
异常处理的关键语句是什么样的?
Java异常处理的关键语句有五个:try、catch、throw、throws、finally。
1.抛出异常并进行捕获的完整语句格式如下,当然也允许try...catch或try...finally这两种写法。
try{ //throw Exception throw语句抛出明确的异常 } catch{ //find Exception //hand of it }finally{ //must be run}
br
try、catch、finally三个语句块可能会涉及以下考题:
1)try、catch、finally可以单独使用吗? 不可以,只能组成以上所述三种语句格式。
2)try中定义的变量catch和finally能够访问吗?不能,三个代码块中变量的作用域为代码块内部,分别独立而不能互相访问,如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
3)如有多个catch能够捕获所抛出异常,那多个catch块的代码都会被执行吗?不会,只会执行第一个匹配上的catch块代码。
4)finally语句块的代码一定会被执行吗?会,无论异常是否发生,finally都会被执行。
2.如果一个方法想抛出异常但自身不进行处理,交给上层处理,它就必须标记这种行为,以使方法的调用者能够正常运行程序,无需处理异常。要做到这点,我们可以在方法声明中包含一个throws子句。一个throws子句列举了一个方法可能引发的所有异常类型。
PS:Java编译器会要求方法必须声明抛出可能发生的未被捕获的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。由程序错误导致的异常属于运行时异常(RuntimeException);而程序本身没有问题,但由于像I/O错误这类异常导致的异常属于其他异常。程序本身的问题,也就是抛出的运行时异常最好是就地解决。
public void info() throws Exception{ //body of method}//Exception 是该方法可能引发的所有的异常,也可以是异常列表,中间以逗号隔开。
2 语言特性考察
通过以上基本概念的考察,如果能够应对如上,那么面试官对你的程序设计基本功底应该是比较认可的。接下来就会加大难度,考察你对Java语言特性的掌握深度,以下考题别看耳熟能详,却很能见功底,面试者完全可以侃侃而谈一番,但如果说了半天还是没能准确道出实质的话,那么,就会给面试官留下知识的探索不够深入的印象。
此类考题重点包括:Java语言的三个特性,继承、封装、多态;反射机制;类的初始化过程。
考题模拟
面试例题4
Java有哪三大语言特性? 你能说下对多态的理解吗?
解析:面试官首先会问Java的三大语言特性是啥,通常情况下,这个问题90%多的人肯定都能答上来,所以考察的重点在于面试者答上来以后,再让说说对这三个特性的理解或者某一个特性的理解。通常情况下,对多态的考察更为常见,当然,面试者也要做好回答另两大特性的准备。
Java的三大语言特性是继承、封装和多态。多态可以简单地概括为“一个接口,多种方法”。在程序运行的过程中才决定调用哪个函数。通常,继承可以扩展已存在的代码模块(类),它们的目的都是为了代码重用。而多态则是为了实现另一个目的--接口重用。实际工作中,重用接口比重用代码使用得更为普遍。
面试例题5
简单说下Java的反射机制,能举例说下其应用吗?
解析:Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。反射被广泛地用于那些需要在运行时检测或修改程序行为的程序中。尽管反射非常强大,但也不能滥用。如果一个功能可以不用反射完成,那么最好就不用。在我们使用反射技术时,下面几条内容应该牢记于心:
1.性能第一
反射包括了一些动态类型,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射。
2.安全限制
使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了。
3.内部暴露
由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用--破坏了抽象性,降低了可移植性。
Java反射机制的应用场景,比如:
1.工厂模式:Factory类中用反射的话,添加了一个新的类之后,就不需要再修改工厂类Factory了。
2.数据库JDBC中通过Class.forName(Driver)来获得数据库连接驱动。
3.分析类文件:能得到类中的方法等等。
4.访问一些不能访问的变量或属性:破解别人代码。
面试例题6
类的初始化过程是怎样的?
解析:JVM初始化一个类包含如下几个步骤。
1.假如这个类还没有被加载和连接,则程序先加载并连接该类。
2.假如该类的直接父类还没有被初始化,则先初始化其直接父类。
3.假如类中有初始化语句,则系统依次执行这些初始化语句。
在执行第2步时,系统对直接父类的初始化步骤也遵循此步骤1~3,如果该直接父类又有直接父类,则系统再次重复这三个步骤来先初始化这个父类......所以JVM最先初始化的总是java.lang.Object类。当程序主动使用任何一个类时,系统会保证该类以及所有父类(包括直接父类和间接父类)都会被初始化。
3 实际操作考察
如果通过了对语言特性的考察,那么,接下来就要面对实际动手能力方面的考察了。
这个方面的知识点通常都是以一个非常具体的随机性的题目呈现,考题范围重点包括字符串的处理、日期函数的运用、正则表达式的运用、Java的集合。
关于字符串的处理、日期函数和正则表达式的运用,大家可前去查看本公众号系列课程《大数据分析工程师入门1-Java基础》相关部分,此类考题随机且小知识点很多,系列课程讲解的非常全面且均给出了示例,足以满足大家应试要求,所以这里将不再赘述。
接下来会带领大家重点挖掘一下Java集合相关的考题。
考题模拟
面试例题7
你需要存储元素到某种数据结构中,而且要确保元素在自然队列中没有重复,下面哪个接口能保证这种能力?
A. java.util.Map
B. java.util.List
C. java.util.Collection
D. java.util.Set
解析:要想正确回答这个问题,面试者需要对Java集合有一个清晰的脉络。
Java容器类库一共有两种主要类型:Collection和Map。它们之间的区别在于容器内每个“槽”所存储的元素个数不同,Collection每个槽内只能存储一个元素,而Map类型中,每个槽内存储key-value关联。Java容器类都可以自动调整自己的尺寸。
各自旗下的子类关系如下:
Collection的子类:① --List:以特定次序存储元素,取出来的顺序可能和放入的顺序不同 |--ArrayList:擅长随机访问元素,但在List中进行插入、删除和移动元素较慢 |--LinkedList:插入、删除、移动元素方便,但随机访问元素差② --Set:每个值只能保存一个对象,不能包含重复的元素 |--HashSet:使用散列函数 |--TreeSet:使用红黑树 |--LinkedHashSet:使用链表结合散列函数③ --Queue:先进先出的容器Map的子类:① --HashMap:使用散列函数② --HashTable:使用散列函数③ --TreeMap:使用红黑树
故答案选D。
对每个容器子类的特性上图已做简单说明,但如果要应对面试官的继续追问,考察更为细节性的知识点,那么,面试者最好要对每个子类的特性有一个更全面更深入的学习和总结,一般实际动手操作过的面试者对此类问题的认识会更为深刻。比如,以前经常会被问到的考题,请说明HashMap和HashTable的区别。不能说出个两三点,那是很难让面试官满意的,因为如果你实际操作过,通常会有很深的体会和印象。
(PS:现在由于HashTable的概念基本完全淡化了,该问题应该会很少再被问到了,举此案例是为了说明面试官会出类似题型来进行深入考察面试者动实际操作情况,面试者需要深入学习总结。)
小结
本文所列题型是作者认为较具代表性的。文章更多的是想传达一种面试官的面试思路。程序设计基本概念会简单考察一下,看看面试者的基本功。语言特性让面试者说说自己的见解,通过面试者的陈述,探探面试者学习的深浅。
最后来几道实际操作题,看看平时的实际动手能力,毕竟有时候临时背背书是可以通过前两关的,所以,平时实践经验的积累这时候就能更显实力了。
(*本文为 AI科技大本营转载文章,转载请联系原作者)
◆
精彩推荐
◆
“只讲技术,拒绝空谈!”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。大会早鸟票倒计时最后一天,速抢进行中......
推荐阅读
数十篇推荐系统论文被批无法复现:源码、数据集均缺失,性能难达预期
SpanBERT:提出基于分词的预训练模型,多项任务性能超越现有模型!
百度、快手、商汤、旷视、图森等重磅嘉宾确认出席AI ProCon 2019
抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?
华为收入超过阿里腾讯总和!等等,先把鸿蒙说清楚!
扎克伯格再谈Libra:为十亿人打造“金融梦”(全文)
漫画 | Kubernetes带你一帆风顺去远航
“对不起,我就是传说中的 10 倍工程师”

相关文章:

【Elasticsearch 5.6.12 源码】——【3】启动过程分析(下)...
版权声明:本文为博主原创,转载请注明出处!简介 本文主要解决以下问题: 1、ES启动过程中的Node对象都初始化了那些服务?构造流程 Step 1、创建一个List暂存初始化失败时需要释放的资源,并使用临时的Logger对…

C++中的封装、继承、多态
封装(encapsulation):就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程&…

比尔盖茨护犊子 称iPad让大批用户沮丧
为什么80%的码农都做不了架构师?>>> 在5月6日接受美国CNBC电视台访问时,微软前任掌门人比尔盖茨维护了自家反响不那么好的Surface系列平板电脑,同时他还不忘吐槽了一把iPad。 当 谈到日渐颓败的PC市场时,盖茨称平板电…

小心陷阱:二维动态内存的不连续性
void new_test() {int** pp;pp new int*[10];for(int i0; i<10; i){pp[i] new int[10];}//pp[0], pp[1], ... , pp[9]在内存中连续;//a1 pp[0][0], pp[0][1], ... , pp[0][9]在内存中也是连续的;//a2 pp[1][0], pp[1][1], ... , pp[1][9]在内存中也是连续的;//...//a9 …

超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图
作者 | Saikat Basu等译者 | 陆离责编 | 夕颜出品 | AI科技大本营(ID: rgznai100)导读:现如今,即使可以借助卫星图像和绘制软件,创建精确的道路图也依然是一个费时费力的人力加工过程。许多地区,特别是在发…
npm包发布记录
下雪了,在家闲着,不如写一个npm 包发布。简单的 npm 包的发布网上有很多教程,我就不记录了。这里记录下,一个复杂的 npm 包发布,复杂指的构建环境复杂。 整个工程使用 rollup 来构建,其中会引进 babel 来转…
设计模式之单例模式(Singleton)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式)࿱…

关于知识蒸馏,这三篇论文详解不可错过
作者 | 孟让转载自知乎导语:继《从Hinton开山之作开始,谈知识蒸馏的最新进展》之后,作者对知识蒸馏相关重要进行了更加全面的总结。在上一篇文章中主要介绍了attention transfer,FSP matrix和DarkRank,关注点在于寻找不…
设计模式之建造者模式(生成器模式、Builder)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

[置顶] webservice系列2---javabeanhandler
摘要:本节主要介绍以下两点,1.带javabean的webservice的开发和调用 2.handler的简单介绍及使用1.引言在之前的一篇博客webservice系列1---基于web工程上写一个基本数据类型的webservice中介绍了如何采用axis1.4来完成一个简单的webservice的开发流程(入参…

AI教育公司物灵科技完成战略融资,商汤科技投资
1月2日消息,从相关媒体报道,AI教育公司物灵科技近日完成了商汤的战略融资,本轮融资将用于产品迭代和扩大市场。 此前投资界曾报道,物灵科技已经获得1.5亿元Pre-A轮融资,当时具体资方未透露。 公开资料显示࿰…

Python之父发文,将重构现有核心解析器
原题 | PEG Parsers作者 | Guido van Rossum译者 | 豌豆花下猫转载自 Python猫(ID: python_cat) 导语:Guido van Rossum 是 Python 的创造者,虽然他现在放弃了“终身仁慈独裁者”的职位,但却成为了指导委员会的五位成员…

全面支持三大主流环境 |百度PaddlePaddle新增Windows环境支持
2019独角兽企业重金招聘Python工程师标准>>> PaddlePaddle作为国内首个深度学习框架,最近发布了更加强大的Fluid1.2版本, 增加了对windows环境的支持,全面支持了Linux、Mac、 windows三大环境。 PaddlePaddle在功能完备的基础上,也…
设计模式之原型模式(Prototype)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

NFS共享服务挂载时出现“access denied by server while mounting”的解决方法
笔者用的Linuxf发行版本为Centos6.4,以下方法理论上讲对于Fedora, Red Hat均有效: 搭建好NFS服务后,如果用以下的命令进行挂载: # mount -t nfs 172.16.12.140:/home/liangwode/test /mnt 出现如下错误提示: mount.nf…
设计模式之桥接模式(Bridge)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

原360首席科学家颜水成正式加入依图科技,任首席技术官
7 月 29 日,依图科技宣布原 360 首席科学家颜水成正式加入,担任依图科技首席技术官(CTO)一职。依图方面称,颜水成加入后将带领团队进一步夯实依图在人工智能基础理论和原创算法方面的技术优势,为依图在商业…

分布式存储fastdfs安装使用
1.下载地址https://github.com/happyfish100/fastdfshttps://github.com/happyfish100/fastdfs/wiki安装辅助说明文档2.安装编译环境yum install git gcc gcc-c make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y三台主机:…

Hibernate学习(九)———— 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例。之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了。基本上先这样…

超详细中文预训练模型ERNIE使用指南
作者 | 高开远,上海交通大学,自然语言处理研究方向最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对之后还是觉得百…
linux内核SMP负载均衡浅析
需求 在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每个CPU对应一个run_queue(可执行队列)。如果一个进程处于TASK_RUNNING状态(可执行状态),则它…

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区。比起指针,用空数组有这样的优势:(1)、不需要初始化,数组名直接就是所在的偏移;(2)、不占任何空间,指针需…

超全!深度学习在计算机视觉领域的应用一览
作者 | 黄浴,奇点汽车美研中心首席科学家兼总裁转载自知乎简单回顾的话,2006年Geoffrey Hinton的论文点燃了“这把火”,现在已经有不少人开始泼“冷水”了,主要是AI泡沫太大,而且深度学习不是包治百病的药方。计算机视…

SHAREPOINT2010数据库升级2013
在作TEST-SPCONTENT命令时,会提示认证方式不一样。 The [SharePoint - 80] web application is configured with claims authentication mode however the content database you are trying to attach is intended to be used against a windows classic authentic…
设计模式之简单工厂模式(Simply Factory)摘录
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的…

别得意,你只是假装收藏了而已
今天分享我在看罗振宇的《2018 时间的朋友》演讲视频记下的一些思考。跨年演讲中有过这样的一个来自印象笔记的片段,列举了几组对比来说明: 『你在朋友圈里又佛又丧,你在收藏夹里偷偷地积极向上。』 扎心了,这不就是说我吗&#x…

Exchange2003-2010迁移系列之四,配置第一台Exchange CAS/HUB服务器
配置第一台CAS/HUB关于Cas/hub的配置请大家详见前面关于Ex2010的部署(两个配置基本相同在这里就不做详细的解说了)下面关于Cas的配置在前面已经提到了但是下面是另一种新的方法大家就看看吧生产环境中部署Exchange2010服务器时,是需要按照一定…
设计模式之适配器模式(Adapter)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给…

JAVA方法中的参数用final来修饰的效果
很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那么在这个方…

2019世界机器人大赛圆满落幕,荆州中学等15支队伍获「全能奖」
7月28日,2019世界机器人大赛总决赛在河北保定圆满落下帷幕。保定市市委常委罗德强、中国电子学会副秘书长梁靓、保定市政府秘书长王保辉、保定市政府副秘书长安利文、保定市徐水区区长李志永、保定市莲池区政府党组副书记赵建军、世界机器人大赛组委会秘书长李洋、长…