大数据scala面试题汇总
1. scala语言有什么特点?什么是函数式编程?有什么优点?
- scala同时具有⾯向对象和函数式编程的多种编程范式。
- 函数式编程是一种编程范式,主要思想就是将程序写成一系列函数嵌套的形式,让程序的条例更清晰,灵活性更强。
2. 什么是scala中的闭包?
- 闭包(closure /ˈkloʊʒər/)
- 闭包就是能够读取其他函数内部变量的函数。
val a = 3
def add(b:Int) = a + b
// add就是是一个闭包
COPY
3. 什么是scala中的纯函数?有什么好处?
- 是什么
- 纯函数(Pure Function /pjʊr/ /ˈfʌŋkʃn/)所有的输入通过参数传递到函数内部,所有的输出通过返回值传递到函数外部;
- 闭包或者带有打印语句的函数为非纯函数。
- 好处
- 无状态,线程安全,不需要线程同步;
- 纯函数相互调用组装起来的函数,还是纯函数;
- 应用程序或者运行环境(Runtime)可以对纯函数的运算结果进行缓存,运算加快速度。
//纯函数 输入都来自参数 输出都通过返回值
def f1(a:Int,b:Int) = a + b
//非纯函数
val x = 1
// 输入变量x不是通过参数输入
def f2(y:Int) = x + y
// 除了返回值还包含打印语句
def f3(x:Int) = {println(x)x+1
}
COPY
4. 什么是scala中的模式匹配?
- 类似java中的swich-case;
- scala的模式匹配包括了⼀系列的匹配选项,匹配选项以关键字case为单位,每个匹配选项包括⼀个模式或多个表达式,如果匹配成功将执行或返回=>后面的表达式;
val x:Any = 1
val res = x match {case x:Int => "这是一个Int"case x:String => "这是一个String"case _ => "这是一个非Int,非String的对象"
}
COPY
5. case class和class的区别
case class是一个样例类;
- 样例类默认将主构造器的参数使用val声明,即作为类的成员属性;
- 样例类默认添加伴生对象和全参的apply方法,方便对象构建;
- 样例类默认添加伴生对象和全参的unapply方法,方便模式匹配和属性提取;
- 样例类默认实现了toString,equals,hashcode,copy⽅法;
class是一个不具有上述样例类特点的普通类
6. 什么是scala中的隐式转换
- scala中通过implicit关键字修饰的变量、函数或者类,在调用时,不用显式书写调用过程的一种语法。
7. 什么是scala中的伴生类和伴生对象
- 在scala中,object与class名字完全相同,且声明在同一个scala源代码文件中,那么该对象被称为该类的伴⽣对象,该类被称为该对象的伴⽣类;
- 伴⽣对象和伴⽣类可以互相访问其私有成员。
8. scala和java的区别
区别 | Scala | Java |
---|---|---|
变量声明 | scala:使用var或val声明,类型可以省略不写,编译器通过赋值自动推断类型 | 需要在变量前明确声明变量类型 |
返回值 | 可以省略return关键字,编译器根据代码块最后一行自动返回 | 需要显式使用return关键字 |
结束符 | 非必要使⽤分号作为结束符 | 必须使用分号作为语句结束符 |
循环 | for中可以使用守卫,但没有continue和break关键字 | 没有守卫语法有continue和break关键字 |
通配符 | _ | * |
构造器 | 主构造器直接跟在类的声明之后,辅助构造器命名为this,辅助构造器必须直接或间接调用主构造器 | 构造器名称与类名一致 |
内部类 | scala实例化的内部类是不同的,可以使⽤类型投影,例如 Outer#Inner表示Outer的Inner类 | 内部类从属于外部类 |
接口 | scala中接口称为特质(trait),特质中可以写抽象⽅法,也可以写具体的⽅法。且类可以实现多个特质;特质中未被实现的⽅法默认就是抽象的;⼦类的实现或继承统⼀使⽤extends关键字,如需实现或继承多个使⽤with关键字拼接;特质中可以有构造器特质可以继承普通的类,并且这个类称为所有继承trait的父类 | java中的接口(interface),接口中的⽅法只能是抽象⽅法,不可以写具体包含⽅法体的⽅法;接口中不能有抽象的属性,且属性的修饰符都是public static final;类实现接口需要使⽤implements关键字,实现多个接口,需要用逗号隔开;接口中不可以有构造器;接口不可以继承普通的类 |
赋值 | scala中的赋值语句返回结果是unit,不可以串联,例如x=y=1,x没有被赋值为1 | x=y=1,这样没问题 |
9. 什么是scala的高阶函数
- 一个函数作为其他函数的参数
- 一个函数作为其他函数的返回值
//例如
//函数作为参数
def f1(f:Int => Int,x:Int) ={f(x)
}
//函数作为返回值
def f1(x:Int) : Int => Int ={(y:Int) => x + y
}
COPY
10. 隐式参数使用的优先顺序是什么
- 当前类声明的implicits ;
- 导入包中的 implicits;
- 外部域(声明在外部域的implicts);
- 继承的父类中的;
- 所属包对象中的;
- 伴生对象的以上作用域。
11. Option类型的定义和使用场景?
- 在Java中, null是⼀个关键字,不是⼀个对象,当开发者希望返回⼀个空对象时,却返回了⼀个关键字,为了解决这个问题, Scala建议开发者返回值是空值时,使⽤Option类型,在Scala中null是Null的唯⼀对象,会引起异常, Option则可以避免。 Option有两个⼦类型, Some和None(空值)。
12. Unit类型是什么?
- Unit代表没有任何意义的值类型,类似于java中的void类型,他是anyval的⼦类型,仅有⼀个实例对象"( )"
13. Scala类型系统中Nil, Null, None, Nothing四个类型的区别?
- Null是⼀个trait(特质),是所以引⽤类型AnyRef的⼀个⼦类型, null是Null唯⼀的实例。
- Nothing也是⼀个trait(特质),是所有类型Any(包括值类型和引⽤类型)的⼦类型,它不在有⼦类型,它也没有实例,实际上为了⼀个⽅法抛出异常,通常会设置⼀个默认返回类型。
- Nil代表⼀个List空类型,等同List[Nothing]。
- None是Option的一个实例,代表空结果集的返回。
关注微信公众号【飞哥大数据】,回复666 获取2022年100+公司面试真题,以及spark与flink面试题汇总
大数据scala面试题汇总相关推荐
- 【2020大数据应用赛试题】Spark分析处理
文章目录 2020大数据应用赛试题 任务一.Spark技术栈有哪些组件?简述其功能,及应用场景. 任务二.本题目使用spark进行数据分析 数据说明 题目 题目一 题目二 题目三 题目四 2020大数 ...
- 大数据常见面试题----冲!!!
大数据常见面试题 一.Hadoop生态 1.1 HDFS 1.1.1 hdfs读写流程 1.1.2 NameNode.DataNode的作用 1.3 hive 1.3.1 hive中内部表.外部表的区 ...
- 大数据Scala编程.问题集(02)
大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...
- 机器学习及大数据经典算法笔记汇总
机器学习及大数据经典算法笔记汇总 一.总结 二.机器学习及大数据算法 机器学习及大数据经典算法笔记汇总 一.总结 前面的博文,介绍了很多TensorFlow 以及 DeepLeaning 的算法.这里 ...
- 大数据常见面试题 Hadoop篇(2)
大数据常见面试题 Hadoop篇(1)_后季暖的博客-CSDN博客1)序列化和反序列化序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输.反序列化就是将收到字 ...
- 大数据常见面试题 Hadoop篇(1)
目录 1.描述一下hdfs的写流程 读流程? 2.详细讲解一下hdfs的体系结构 3.如果一个datanode出现宕机,恢复流程是什么样的? 4.通常你是如何解决Haddop的NameNode宕机的, ...
- 2018年全球大数据公司全景画像汇总
伟大的力量,伟大的责任,2018年全球大数据公司全景画像汇总.在未来不掌握数据的公司,如盲人般看不到未来,更无从去谈理想与发展了.如今无论是互联网巨头,创业新贵,中国到全世界,都已经有无数技术公司投身 ...
- 【面试题】京东大数据面试真题汇总,收藏必备
今年冬天冷的好慢,现在空气中吹的风还是暖的... 京东大数据面试题 _ hive中都有哪些join操作? left join:以左侧为主表,返回记录与主表记录数相同,关联不上的字段为空. right ...
- 大数据开发面试题总结-超详细
1.文件上传: 总结: 客户端上传请求--->namenode检查,返回响应--->客户端真正的文件上传请求,包括文件名,文件大小--->namenode返回上传节点--->客 ...
- 史上最全,100+大数据开源处理工具汇总
本文除了一些常用的大数据工具,还总结汇总了其他大数据工具,几乎是最全的大数据工具的总结. 如果你想入门大数据,可以对他们进行简单的了解. 如果你想学习自己熟悉意外的大数据工具,可以看这篇文章. 如果你 ...
最新文章
- Spring Boot 2.3.0 发布:支持Java14、打包Docker镜像、优雅关机配置...
- biztalk adapter for mysql_BizTalk Schedule Adapter的使用
- 位置式PID与增量式PID的介绍和代码实现
- 在 Web 应用中增加用户跟踪功能
- python爬虫之图片
- x390更换开机_ThinkPad X390怎么装win10系统|ThinkPad X390用u盘重装win10系统教程-系统城...
- (备忘)打开office2010总是在配置进度
- python远程执行shell 防止注入脚本_解决 window 上python远程执行shell paramiko 下令 Permission denied...
- Modelsim仿真tcl脚本与wave.do文件
- 测试身体素质健康的软件,《体质健康测试与评价》手机应用(App)的开发及应用...
- 拥抱ROS2系列:ROS2概述和实践入门(一)
- 深入浅出Hibernate 笔记一(面向应用的持久层设计)
- 程序员哀叹:专科都是几十万的年薪,互联网的泡沫要破了
- linux虚拟机上挂载U盘
- 简单聊聊智能硬件的固件测试
- 机器学习基础--各种学习方式(18)--核方法和多核学习
- CISSP-D7-运营安全
- Python连载(0011): 十分钟理解元组
- 横图图片广告代码html,jQuery网页底部固定横幅图片广告代码
- TFT液晶屏是怎样诞生的?