scala概念

news/2025/1/7 15:40:25/

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


http://www.ppmy.cn/news/1560535.html

相关文章

网络爬虫性能提升:requests.Session的会话持久化策略

网络爬虫面临的挑战 网络爬虫在运行过程中可能会遇到多种问题,包括但不限于: IP被封禁:频繁的请求可能会被网站的反爬虫机制识别,导致IP被封。请求效率低:每次请求都需要重新建立TCP连接,导致请求效率低下…

Node.js应用程序遇到了内存溢出的问题

vue 项目 跑起来,一直报错,内存溢出 在 文件node_modules 里 .bin > vue-cli-service.cmd 在依赖包这个文件第一行加上这个 node --max-old-space-size102400 "%~dp0\..\vue\cli-service\bin\vue-cli-service.js" %* node --max-old-s…

电子电器架构 -- 什么是用于ADAS/AD系统的雷达?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

Qt从入门到入土(七)-实现炫酷的登录注册界面(下)

前言 Qt从入门到入土(六)-实现炫酷的登录注册界面(上)主要讲了如何使用QSS样式表进行登录注册的界面设计,本篇文章将介绍如何对登录注册界面进行整体控件的布局,界面的切换以及实现登录、记住密码等功能。…

SpringMVC(五)实现文件上传

目录 1.先导jar包 2.在Springmvc.xml配置文件上传解析器 3. 编写文件上传的html页面 4.在controller包中创建FileController.class文件 5.文件下载 6.重启服务器测试 1.先导jar包 <dependency><groupId>commons-fileupload</groupId><artifactId>…

solr9.7 单机安装教程

1.环境要求:jdk11以上 2.下载wget https://dlcdn.apache.org/solr/solr/9.7.0/solr-9.7.0.tgz 3.解压 4.修改solr.in.sh配置 5.启动命令 bin/solr start 6.创建core bin/solr create -c <core名称> 注意:用solr ui界面创建&#xff0c;会提示找不到solrconfig.xml和m…

美畅物联丨视频上云网关获取视频流地址供第三方调用的方法

在视频监控与流媒体传输领域&#xff0c;视频流地址的获取与调用是极为关键的环节。视频上云网关作为一款高效且稳定的视频传输设备&#xff0c;为获取视频流地址提供了便捷途径&#xff0c;从而使外部系统或平台能够方便地进行调用。今天我们就来讨论一下如何在视频上云网关上…

目录中只有一个子目录时把子目录移动到父目录

直接上代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…