scala概念

val声明变量和var声明变量的不同?

val修饰不可变变量,var修饰可变变量

trait与class的相同点和不同点?

它们的相同点在于都能包含抽象和非抽象成员,且不能直接实例化。

区别在于抽象类的构造方法可传参,而特质的构造方法不能。

一个类实现多个特质后,所涉及的多个构造器的执行顺序是?

所有特质被构造完毕,子类被构造。 构造器的顺序是类的线性化的反向

private修饰的属性的访问权限和protected修饰的属性在访问权限上有相同和不同?

封装性privateprotected 都是封装的一部分,用于限制类成员的访问,以保护类的内部状态和行为。

继承 :如果一个类继承了另一个类,那么继承类可以访问父类的protected成员,但不能访问private成员。

不同点

  1. 访问范围

    private :被private修饰的属性或方法只能在定义它们的类内部被访问。它们对子类和其他类都是不可见的。protected :被protected修饰的属性或方法可以被定义它们的类、同一个包中的其他类以及子类访问。它们对不同包中的非子类是不可见的。

  2. 子类访问private :子类不能访问父类的private成员,即使它们在同一个包中。protected :子类可以访问父类的protected成员,无论它们是否在同一个包中。包访问private:不允许包访问,即同一个包中的其他类也不能访问。protected:允许包访问,即同一个包中的其他类可以访问。接口实现privateprivate成员不能被接口的实现类访问,因为它们对所有外部类都是不可见的。protected :如果一个类实现了一个接口,那么这个类的protected成员可以被实现该接口的其他类访问。

  3. 隐式转换函数的特点是那些?如何让理解隐式转换?

  4. 自动性单向性 安全性上下文依赖, 可预测性, 可能导致性能损失, 可能隐藏错误

  5. 理解隐式转换的关键在于:

  6. 熟悉语言规则, 注意上下文, 性能考量 代码,可读性, 显式转换, 避免数据丢失, 测试和调试

  7. 解释一下正则表达式:1[3-8]\\d{9}.r的含义?

  8. 正则表达式 1[3-8]\d{9}.r 匹配的字符串以数字 "1" 开头,紧接着是一个3到8之间的数字,然后是任意9个数字,最后以字母 "r" 结尾

  9. 正则表达式中常见的量词及含义?

  10. *(星号):

    • 表示前面的元素可以出现0次或多次。
  11. +(加号):

    • 表示前面的元素至少出现1次或多次
  12. ?(问号):

    • 表示前面的元素可以出现0次或1次。
  13. {n}(花括号):

    • 表示前面的元素恰好出现n次。
  14. {n,}

    • 表示前面的元素至少出现n次。
  15. {n,m}

    • 表示前面的元素至少出现n次,但不超过m次。
  16. *?+???(懒惰量词):

    • 这些量词与它们对应的贪婪量词相同,但它们是懒惰的,即尽可能少地匹配字符。
  17. |(竖线):

    • 表示逻辑"或",用于匹配两个或多个选项中的一个。
  18. ^(脱字符号):

    • 表示匹配输入字符串的开始位置。
  19. $(美元符号):

    1. 表示匹配输入字符串的结束位置

    2. ListBuffer和List的区别?

    3. 可变性

      • ListBuffer:是一种可变的集合
      • List:是一种不可变的集合
    4. 性能

      • ListBuffer:由于其可变性,ListBuffer在添加和删除元素时通常比List更高效,尤其是在集合大小频繁变化的情况下
      • List:由于其不可变性,List在遍历和头部操作(如访问第一个元素)时通常更高效。
    5. 懒加载

      • List:Scala的List是懒加载的
      • ListBufferListBuffer不是懒加载的,它存储的是元素的物理集合。
    6. 使用场景

      • ListBuffer:当你需要一个可以动态修改的集合,并且关心添加和删除操作的性能时,ListBuffer是一个好选择。
      • List:当你需要一个不可变的集合,并且关心遍历和头部操作的性能时,List是更好的选择。
    7. 其他操作

      • ListBuffer提供了一些额外的操作,如removeinsert等,这些在List中是不可用的。
    8. 内存使用

      • ListBuffer可能会使用更多的内存,因为它需要存储额外的信息来支持其可变操作。
    9. 线程安全

      • ListBuffer不是线程安全的,而List由于其不可变性,天然是线程安全的。

      • 如何处理代码中的异常?

      • 精确捕获:只捕获你能够处理的异常,而不是所有异常。

      • 资源管理 :使用finally块或try-with-resources语句(Java 7+)来确保资源(如文件句柄、数据库连接)被正确关闭。

      • 避免空的Catch块:不要仅仅捕获异常而不做任何处理,至少应该记录异常信息。

      • 不吞没异常:不要捕获异常后不进行任何处理或不向上抛出。

      • 用户友好的消息:向用户提供错误信息时,避免显示技术性或模糊的消息。

      • 日志记录:记录异常信息,这对于调试和监控程序运行状态很有帮助。

      • 自定义异常:创建自定义异常类,以提供更具体的异常信息。

      • 异常链:在自定义异常时,可以通过构造函数传递原始异常,以保留原始异常堆栈信息

      • 什么是泛型?在scala中如何使用泛型?

      • 泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效 地增强程序的适用性,使用泛型可以 使得类或方法具有更强的通用性。泛型的典型应用场景 是集合及集合中的方法参数,

相关推荐
jk_101几秒前
MATLAB中binopdf函数用法
开发语言·算法·matlab
她和夏天一样热19 分钟前
【前端系列】优化axios响应拦截器
java·前端·axios
奈川直子22 分钟前
EasyExcel自定义动态下拉框(附加业务对象转换功能)
java·mysql·spring·excel
老马啸西风29 分钟前
NLP 中文拼写检测纠正论文-07-NLPTEA-2020中文语法错误诊断共享任务概述
java
木觞清36 分钟前
Python 图像处理:生成美丽的书籍封面
开发语言·python
风_流沙40 分钟前
parquet文件数据格式介绍以及python pandas对parquet常见操作
开发语言·python·pandas
极客代码1 小时前
深入理解C语言:编译原理
c语言·开发语言·性能优化·编译原理·代码优化
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍
开发语言·游戏·unity·c#·游戏引擎
征途黯然.1 小时前
大模型Agent之CrewAI框架开发指南
开发语言·python
好看资源平台1 小时前
Java Web开发基础——Java Web项目的结构与组织
java