- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Scala面试题及答案(实战版)
1.请说明val和var的区别,实际开发中如何选择?
答案:
核心区别:val声明的变量不可变(初始化后不能重新赋值),var声明的变量可变(可多次赋值)。
选择原则:优先用val,因为Scala推崇函数式编程的“不可变性”——不可变数据在多线程环境下无需考虑锁竞争,代码可读性和可维护性更高;仅当变量需要动态修改时(如循环计数器、动态拼接的缓冲数据)才用var。
示例:
//配置参数用val(不可变,多线程安全)
valappConfig:String=prod.conf
//循环计数器用var(需动态修改)
varcount=0
for(i-1to5){
count+=i//仅var支持重新赋值
}
2.caseclass有哪些核心特性?为什么在Scala中常用它?
答案:
核心特性:
自动生成apply方法(无需new关键字创建实例);
自动生成unapply方法(支持模式匹配解构);
自动重写equals、hashCode、toString方法(基于属性值判断相等);
属性默认是val(不可变,符合函数式风格)。
常用原因:适合作为“数据载体”(如DTO、领域模型),简化代码且支持模式匹配。
示例:
caseclassUser(id:Long,name:String)
//无需new创建实例
valuser=User(1,Alice)
//模式匹配解构
usermatch{
caseUser(id,Alice)=println(sFoundAlice,id:$id)
case_=println(Unknownuser)
}
3.什么是高阶函数?请举一个实际开发中的应用例子
答案:
定义:接收其他函数作为参数,或返回一个函数的函数,就是高阶函数。
实际用途:常用于抽象通用逻辑(如集合过滤、数据转换),减少重复代码。
示例(自定义高阶函数实现“数据过滤”):
//高阶函数:接收“过滤规则函数”作为参数
deffilterData[T](data:List[T],rule:T=Boolean):List[T]={
data.filter(rule)//复用List的filter方法,逻辑由rule决定
}
//实际调用:过滤偶数(传递匿名函数作为规则)
valnumbers=List(1,2,3,4,5)
valevenNumbers=filterData(numbers,num=num%2==0)//结果:List(2,4)
//过滤长度3的字符串
valwords=List(a,bb,ccc,dddd)
vallongWords=filterData(words,word=word.length3)//结果:List(dddd)
4.闭包的概念是什么?结合例子说明它的实际用途
答案:
定义:函数访问了其“作用域之外”的变量,且该变量随函数一起存活(即使外部变量所在的作用域已结束),这样的函数就是闭包。
实际用途:常用于“保存上下文状态”(如计数器、带配置的工具函数)。
示例(生成带初始值的计数器):
//外部函数:定义初始值(作用域在createCounter调用时)
defcreateCounter(init:Int):()=Int={
varcount=init//闭包会“捕获”count变量
//内部函数:访问了外部的count(作用域之外的变量)
()={
count+=1
count
}
}
//实际使用:两个计数器独立保存状态
valcounter1=createCounter(0)
println(counter1())//1(count=1)
println(counter1())//2(count=2)
valcounter2=createCounter(10)
println(counter2())//11(与counter1的count独立)
5.Scala的模式匹配比Java的switch强在哪里?用代码示例说明
答案:
核心优势:支持任意类型匹配、守卫条件、样例类解构、类型匹配,而Javaswitch仅支持基本类型和字符串(Java7+),且无解构能力。
示例(多场景匹配):
defhandleData(data:Any):String=datamatch{
您可能关注的文档
最近下载
- GB50209-2010建筑地面工程施工质量验收规范(新).pdf VIP
- 新苏教版六年级科学上册 第一单元《物质的变化》测试卷(A卷).docx VIP
- 2025年中国便利店发展报告.pptx VIP
- 新苏教版六年级科学上册第一单元《物质的变化》测试卷及答案.pdf VIP
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
- 住院患者跌倒护理风险评估与护理指导意见.pdf VIP
- 煤矿用防爆电气设备防爆检查标准-培训课件.pptx
- 半导体物理学(第8版)刘恩科课后习题答案解析.pdf
- 新媒体背景下信息技术的发展及其应用分析.pdf VIP
- 一种大吨位玄武岩纤维锚索整体张拉试验系统及试验方法.pdf VIP
文档评论(0)