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中如何使用泛型?

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

相关推荐
考虑考虑3 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261354 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊5 小时前
Java学习第22天 - 云原生与容器化
java
渣哥6 小时前
原来 Java 里线程安全集合有这么多种
java
间彧6 小时前
Spring Boot集成Spring Security完整指南
java
间彧7 小时前
Spring Secutiy基本原理及工作流程
java
Java水解8 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆10 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学10 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole10 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端