Java面试遇到的一些常见题

news2024/12/17 17:49:44

目录

1. Java语言有几种基本类型,分别是什么?

整数类型(Integer Types):

浮点类型(Floating-Point Types):

字符类型(Character Type):

布尔类型(Boolean Type):

2. int[]类型是不是基本类型?

3. 什么是128陷阱?什么是装箱?什么是拆箱?为什么要有包装类?

128 位整数陷阱(128-bit Integer Trap):

装箱和拆箱(Boxing and Unboxing):

包装类(Wrapper Classes):

为什么要有包装类?:

4. 位运算有哪几种?

按位与(&):

按位或(|):

按位异或(^):

取反(~):

左移(<<):

右移(>>):

无符号右移(>>>):

5. “>>”和”>>>”的区别是什么?

>> 右移操作符:

>>> 无符号右移操作符:

6. String类的常用函数有哪些?列举十种。

length() 方法:

charAt(int index) 方法:

substring(int beginIndex) 和 substring(int beginIndex, int endIndex) 方法:

concat(String str) 方法:

indexOf(String str) 和 indexOf(String str, int fromIndex) 方法:

toUpperCase() 和 toLowerCase() 方法:

trim() 方法:

startsWith(String prefix) 和 endsWith(String suffix) 方法:

replace(char oldChar, char newChar) 和 replace(CharSequence target, CharSequence replacement) 方法:

split(String regex) 方法:

7. String和StringBuffer,StringBuilder的区别有哪些?所有类名包含Buffer的类的内部实现原理是什么?有什么优势?

String 类:

StringBuffer 类:

StringBuilder 类:

优势:

8. String字符串的不可变是指哪里不可变?

值不可变:

长度不可变:

        不可变性的好处:

9. 字符串常量池是什么?不同的JDK版本都分别位于哪个区域?

10. Java异常类有哪些?分别管理什么异常?

检查异常(Checked Exception):

非检查异常(Unchecked Exception):

我的其他博客


1. Java语言有几种基本类型,分别是什么?

在Java中,基本数据类型分为两大类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。原始数据类型又分为四类:整数类型、浮点类型、字符类型和布尔类型。

  1. 整数类型(Integer Types):

    • byte:8位,有符号,范围为-128到127。
    • short:16位,有符号,范围为-32,768到32,767。
    • int:32位,有符号,范围为-2^31到2^31-1。
    • long:64位,有符号,范围为-2^63到2^63-1。
  2. 浮点类型(Floating-Point Types):

    • float:32位,单精度浮点数。
    • double:64位,双精度浮点数。
  3. 字符类型(Character Type):

    • char:16位,无符号,表示Unicode字符。
  4. 布尔类型(Boolean Type):

    • boolean:表示逻辑值,只能取truefalse

这些基本数据类型是Java语言的基础,用于存储简单的数据值。在Java中,对象都是引用数据类型,包括类、接口、数组等。这些基本数据类型具有不同的大小和范围,根据需要选择合适的类型来存储数据。

2. int[]类型是不是基本类型?

不是,int[] 不是基本数据类型,而是一种引用数据类型。在Java中,数组是一种引用数据类型,它可以包含基本数据类型的元素或其他引用类型的元素。int[] 表示一个整数类型的数组,其中的元素都是 int 类型。

基本数据类型是存储简单数值的类型,而引用数据类型是用来存储对象引用的类型。基本数据类型直接包含数据值,而引用数据类型包含对存储在内存中的对象的引用。

当你声明一个 int[] 类型的数组时,实际上创建了一个对象,该对象存储了一组整数,并且变量(数组名)存储的是对该对象的引用。因此,int[] 是引用数据类型,而不是基本数据类型。

3. 什么是128陷阱?什么是装箱?什么是拆箱?为什么要有包装类?

128 位整数陷阱(128-bit Integer Trap):

Java 中的基本数据类型 long 是 64 位的,而在某些场景下需要表示更大的整数值,比如超过 Long.MAX_VALUE。在这种情况下,有时候会考虑使用 BigInteger 类,它可以表示任意大小的整数,但由于其灵活性和大数计算的特性,性能可能相对较低,而且在处理一些常规整数时不如基本数据类型高效。

装箱和拆箱(Boxing and Unboxing):

  • 装箱: 将基本数据类型转换为对应的包装类对象。例如,将 int 装箱为 Integer
  • 拆箱: 将包装类对象转换为对应的基本数据类型。例如,将 Integer 拆箱为 int
// 装箱
int primitiveInt = 42;
Integer boxedInt = Integer.valueOf(primitiveInt);

// 拆箱
int unboxedInt = boxedInt.intValue();
  1. 包装类(Wrapper Classes):

  2. Java 提供了一组包装类,用于将基本数据类型转换为对象,以便在需要对象的上下文中使用。以下是常见的包装类:

    • Boolean:对应基本数据类型 boolean
    • Byte:对应 byte
    • Short:对应 short
    • Integer:对应 int
    • Long:对应 long
    • Float:对应 float
    • Double:对应 double
    • Character:对应 char

    通过使用包装类,可以在需要对象的情况下使用基本数据类型,也可以在集合类中存储基本数据类型,因为集合类通常只能存储对象。

  3. 为什么要有包装类?:

    • 对象化: 在需要对象而基本数据类型不够时,可以使用包装类将其转化为对象。
    • 集合框架: 集合类(如 ListSetMap 等)只能存储对象,因此需要包装类来存储基本数据类型的值。
    • 泛型: 泛型也要求使用对象,而不是基本数据类型。

    包装类提供了一种将基本数据类型转换为对象的方式,使得在某些情况下,可以方便地在面向对象的环境中使用基本数据类型。同时,自动装箱和拆箱的特性使得在基本数据类型和其对应的包装类之间进行转换更加方便。

 

 

4. 位运算有哪几种?

位运算是一种对二进制位进行操作的运算,Java 提供了几种常见的位运算操作符:

  1. 按位与(&):

    • 两个相应的位都为1时,结果为1;否则,结果为0。
  2. 按位或(|):

    • 两个相应的位只要有一个为1,结果就为1;否则,结果为0。
  3. 按位异或(^):

    • 两个相应的位不同,结果为1;相同,结果为0。
  4. 取反(~):

    • 每个位上的0变成1,1变成0。
  5. 左移(<<):

    • 将操作数的所有位向左移动指定的次数,右侧空出的位用0填充。
  6. 右移(>>):

    • 将操作数的所有位向右移动指定的次数,左侧空出的位根据符号位(正数补0,负数补1)或者补0进行填充。
  7. 无符号右移(>>>):

    • 将操作数的所有位向右移动指定的次数,左侧空出的位总是用0填充。

这些位运算操作符可以用于执行一些底层的位级操作,如掩码、权限控制、压缩存储等。在一些特定的场景中,位运算可以提高程序的执行效率。

5. “>>”和”>>>”的区别是什么?

>>>>> 都是右移操作符,但它们在处理带符号整数和无符号整数时有一些区别。

  1. >> 右移操作符:

    int x = -8;
    System.out.println(x >> 1);  // 结果为 -4
    
    • 对于正数,>>>>> 的效果相同,都是将所有位右移,左侧空出的位用0填充。
    • 对于负数,>> 采用“算术右移”,即将所有位右移,左侧空出的位用符号位填充(即保持符号位不变)。

>>> 无符号右移操作符:

>>> 无符号右移操作符:

无论正数还是负数,>>> 都是采用“逻辑右移”,即将所有位右移,左侧空出的位总是用0填充。
  • 无论正数还是负数,>>> 都是采用“逻辑右移”,即将所有位右移,左侧空出的位总是用0填充。

6. String类的常用函数有哪些?列举十种。

String 类是 Java 中用来表示字符串的类,它提供了许多常用的方法来操作字符串。以下是 String 类的一些常用方法,其中列举了十种:

length() 方法:

  • 返回字符串的长度,即包含的字符数。

charAt(int index) 方法:

  • 返回字符串中指定索引位置的字符。

substring(int beginIndex)substring(int beginIndex, int endIndex) 方法:

  • substring(int beginIndex) 返回从指定索引开始到字符串末尾的子字符串。
  • substring(int beginIndex, int endIndex) 返回从指定索引开始到指定索引结束之前的子字符串。

concat(String str) 方法:

  • 将指定字符串连接到该字符串的末尾。

indexOf(String str)indexOf(String str, int fromIndex) 方法:

  • indexOf(String str) 返回指定子字符串在该字符串中第一次出现的索引。
  • indexOf(String str, int fromIndex) 从指定的索引位置开始,返回指定子字符串在该字符串中第一次出现的索引

toUpperCase()toLowerCase() 方法:

  • toUpperCase() 将字符串中的所有字符转换为大写。
  • toLowerCase() 将字符串中的所有字符转换为小写。

trim() 方法:

  • 返回一个字符串,删除了原字符串开头和末尾的所有空格。

startsWith(String prefix)endsWith(String suffix) 方法:

  • startsWith(String prefix) 判断字符串是否以指定的前缀开始。
  • endsWith(String suffix) 判断字符串是否以指定的后缀结束。

replace(char oldChar, char newChar)replace(CharSequence target, CharSequence replacement) 方法:

  • replace(char oldChar, char newChar) 替换字符串中的所有指定字符。
  • replace(CharSequence target, CharSequence replacement) 替换字符串中的所有指定字符序列。

split(String regex) 方法:

  • 使用给定的正则表达式拆分字符串,返回一个字符串数组。

7. String和StringBuffer,StringBuilder的区别有哪些?所有类名包含Buffer的类的内部实现原理是什么?有什么优势?

StringStringBufferStringBuilder 是 Java 中用于处理字符串的三个主要类,它们有一些关键的区别,主要体现在可变性、线程安全性和性能上。

String 类:

在选择使用 StringStringBufferStringBuilder 时,需要根据具体的需求来决定。如果在多线程环境下,需要线程安全性,则选择 StringBuffer;如果在单线程环境下,并且不需要线程安全性,则选择 StringBuilder,由于 StringBuilder 不进行同步,因此性能更好。如果字符串是常量,不需要修改,则选择 String

  • 不可变性: 字符串是不可变的,一旦创建,内容无法修改。
  • 线程安全: 由于字符串是不可变的,所以是线程安全的。
  • 性能: 由于不可变性,每次对字符串进行修改都会创建一个新的字符串对象,可能导致性能开销。

    StringBuffer 类:

  • 可变性: 字符串缓冲区,可以修改其中的内容。
  • 线程安全: StringBuffer 是线程安全的,各个方法都进行了同步处理。
  • 性能: 在多线程环境下使用时,相对于 StringBuilder,由于同步处理,性能稍逊一筹。

    StringBuilder 类:

  • 可变性: 字符串生成器,可以修改其中的内容。
  • 线程安全: StringBuilder 是非线程安全的,不进行同步处理。
  • 性能: 在单线程环境下,由于不进行同步处理,性能较好。

    关于所有类名包含 "Buffer" 的类的内部实现原理,通常这些类都是基于缓冲区(Buffer)实现的。缓冲区是一块临时存储区域,用于临时保存数据,提高读写的效率。这些类通常使用数组作为底层数据结构,通过对数组的操作来实现对字符串的修改。缓冲区的使用可以避免频繁的对象创建和销毁,从而提高字符串操作的效率。

    优势:

  • 性能: StringBufferStringBuilder 通过使用可变的缓冲区,避免了频繁的对象创建和销毁,提高了字符串操作的性能。
  • 灵活性: 可以方便地对字符串进行修改,而不需要创建新的字符串对象。

8. String字符串的不可变是指哪里不可变?

字符串的不可变性是指在创建之后,字符串对象的内容不可被修改。具体来说,不可变性表现在以下几个方面:

值不可变:

一旦字符串对象被创建,其中的字符序列不可更改。

长度不可变:

字符串的长度在创建后也是不可变的。无法通过直接修改字符串对象来改变其长度。

        不可变性的好处:

  • 线程安全性: 由于字符串是不可变的,多个线程可以安全地共享字符串对象,而无需担心修改冲突。

  • 安全性: 字符串不可变性提供了一定的安全性,因为它们无法在创建后被意外地修改。

  • 缓存: 由于字符串的不可变性,可以进行一些优化,例如字符串常量池的使用,以及缓存哈希码等。

 

9. 字符串常量池是什么?不同的JDK版本都分别位于哪个区域?

字符串常量池(String Constant Pool)是 Java 中用于存储字符串常量的一个特殊的内存区域。字符串常量池的目的是提高字符串的重用性,减少内存的占用。

在 Java 中,字符串常量池位于方法区(Method Area),这是一种线程共享的内存区域,存储了类的结构信息、静态变量、常量池等数据。

不同的 JDK 版本中,字符串常量池的具体位置可能有所变化:

  1. JDK 6 及之前:

    • 字符串常量池位于永久代(Permanent Generation)中。
  2. JDK 7 和 JDK 8:

    • JDK 7 中还是位于永久代。
    • JDK 8 引入了元空间(Metaspace),替代了永久代。字符串常量池被移至堆中,与堆共享内存。
  3. JDK 9 及之后:

    • JDK 9 进一步改进了内存模型,移除了永久代,完全采用元空间,字符串常量池仍然位于堆中。

在 JDK 7 和 JDK 8 中,字符串常量池的移动到堆中的改变,是为了解决永久代内存泄漏的问题。元空间的引入进一步改善了类的元信息存储机制,避免了永久代的一些限制和问题。

请注意,由于不同的 JDK 实现和配置可能有所不同,具体的内存区域分配情况可能会有一些变化。上述描述主要是针对 Oracle JDK 和 OpenJDK 的情况。

10. Java异常类有哪些?分别管理什么异常?

Java 中的异常分为两大类:检查异常(Checked Exception)和非检查异常(Unchecked Exception)。

检查异常(Checked Exception):

  1. IOException:

    • 用于处理输入输出操作中可能发生的异常,如文件读写等。
  2. FileNotFoundException:

    • 继承自 IOException,表示尝试打开一个不存在的文件时抛出的异常。
  3. ParseException:

    • 通常用于处理字符串解析为日期等格式时可能发生的异常。
  4. SQLException:

    • 用于处理与数据库相关的异常。
  5. ClassNotFoundException:

    • 在使用 Class 类的 forName 方法时,如果指定的类不存在,会抛出此异常。

非检查异常(Unchecked Exception):

  1. RuntimeException:

    • 这是一个非常常见的非检查异常的父类,包括以下几种:
      • ArithmeticException: 用于处理算术运算中可能发生的异常,如除以零。
      • NullPointerException: 表示对一个对象调用方法、访问字段或数组元素时,对象引用为 null。
      • ArrayIndexOutOfBoundsException: 表示数组下标越界。
      • IndexOutOfBoundsException: 表示索引越界,通常由于集合操作中的错误使用引起。
      • IllegalArgumentException: 表示传递给方法的参数值不合法。
      • IllegalStateException: 表示对象的状态不合法。
      • NumberFormatException: 表示字符串转换为数字时的格式错误。
      • ConcurrentModificationException: 在使用迭代器遍历集合的过程中,如果集合的结构发生变化,会抛出此异常。
  2. NullPointerException:

    • 虽然 NullPointerException 属于 RuntimeException 的子类,但由于其普遍性,特别列出。
    • 表示对一个对象调用方法、访问字段或数组元素时,对象引用为 null。
  3. ArrayIndexOutOfBoundsException:

    • 同样属于 RuntimeException 的子类,表示数组下标越界。

这些异常类用于处理在程序运行期间可能出现的各种错误状况。检查异常在编译期强制处理,程序员必须捕获或声明抛出,而非检查异常通常是运行时异常,程序员可以选择捕获和处理,也可以不处理。

我的其他博客

简单介绍一些其他的树-CSDN博客

认识二叉树(详细介绍)-CSDN博客

正则表达式详细讲解-CSDN博客

低代码开发:创新之道还是软件开发的捷径?-CSDN博客

HTTP与HTTTPS的区别-CSDN博客

什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查-CSDN博客

在多线程中sleep()和wait()的区别(详细)-CSDN博客

谈谈我对HashMap扩容机制的理解及底层实现-CSDN博客

堆排序详细讲解(一文足矣JAVA)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot的校园失物招领系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园失物招领系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【智能家居】七、人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

一、翔云 人工智能开放平台 API文档开发示例下载 二、编译openSSL支持libcurl的https访问 安装SSL依赖库openSSL(使用工具wget)libcurl库重新配置&#xff0c;编译&#xff0c;安装运行&#xff08;运行需添加动态库为环境变量&#xff09; 三、编程实现人脸识别 四、Base6…

react中使用react-konva实现画板框选内容

文章目录 一、前言1.1、API文档1.2、Github仓库 二、图形2.1、拖拽draggable2.2、图片Image2.3、变形Transformer 三、实现3.1、依赖3.2、源码3.2.1、KonvaContainer组件3.2.2、use-key-press文件 3.3、效果图 四、最后 一、前言 本文用到的react-konva是基于react封装的图形绘…

【rabbitMQ】rabbitMQ控制台模拟收发消息

目录 1.新建队列 2.交换机绑定队列 3.查看消息是否到达队列 总结&#xff1a; 1.新建队列 2.交换机绑定队列 点击amq.fonout 3.查看消息是否到达队列 总结&#xff1a; 生产者&#xff08;publisher&#xff09;发送消息&#xff0c;先到达交换机&#xff0c;再到队列&…

深度学习之全面了解预训练模型

在本专栏中&#xff0c;我们将讨论预训练模型。有很多模型可供选择&#xff0c;因此也有很多考虑事项。 这次的专栏与以往稍有不同。我要回答的问题全部源于 MathWorks 社区论坛&#xff08;ww2.mathworks.cn/matlabcentral/&#xff09;的问题。我会首先总结 MATLAB Answers …

计算机视觉-05-目标检测:LeNet的PyTorch复现(MNIST手写数据集篇)(包含数据和代码)

文章目录 0. 数据下载1. 背景描述2. 预测目的3. 数据总览4. 数据预处理4.1 下载并加载数据&#xff0c;并做出一定的预先处理4.2 搭建 LeNet-5 神经网络结构&#xff0c;并定义前向传播的过程4.3 将定义好的网络结构搭载到 GPU/CPU&#xff0c;并定义优化器4.4 定义训练过程4.5…

机器学习算法(9)——集成技术(Bagging——随机森林分类器和回归)

一、说明 在这篇文章&#xff0c;我将向您解释集成技术和著名的集成技术之一&#xff0c;它属于装袋技术&#xff0c;称为随机森林分类器和回归。 集成技术是机器学习技术&#xff0c;它结合多个基本模块和模型来创建最佳预测模型。为了更好地理解这个定义&#xff0c;我们需要…

C语言进阶之路之结构体、枚举关卡篇

目录 一、学习目标 二、组合数据类型-结构体 结构体基本概念 结构体的声明&#xff1a; 小怪实战 结构体初始化 指定成员初始化的好处&#xff1a; 结构体成员引用 结构体指针与数组 关卡BOOS 三、结构体的尺寸 CPU字长 地址对齐 结构体的M值 可移植性 四、联合体…

ssm的健身房预约系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; ssm的健身房预约系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spring…

极智一周 | AI 算力国产化、通义开源、Gemini、鸿蒙、蔚来 And so on

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多技术分享 大家好&#xff0c;我是极智视界&#xff0c;带来本周的 [极智一周]&#xff0c;关键词&#xff1a;AI 算力国产化、通义开源、Gemini、鸿蒙、蔚来 And so on。 邀您加入我的知识星球「极智视界」&#xff0c;…

c-语言->数据在内存的存储

系列文章目录 文章目录 系列文章目录前言 前言 目的&#xff1a;学习整数在内存的储存&#xff0c;什么是大小端&#xff0c;浮点数的储存。 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#xff1a; 整数的2进制表⽰⽅法有三种&#xff0…

带有 RaspiCam 的 Raspberry Pi 监控和延时摄影摄像机

一、说明 一段时间以来&#xff0c;我一直想构建一个运动激活且具有延时功能的树莓派相机&#xff0c;但从未真正找到我喜欢的案例。我在thingiverse上找到了这个适合树莓派和相机的好案例。它是为特定的鱼眼相机设计的&#xff0c;但从模型来看&#xff0c;我拥有的廉价中国鱼…

STM32F1之CAN报文传输

目录 报文传输 1. 帧类型 1.1 数据帧 1.1.1 帧起始 1.1.2 仲裁场 1.1.3 控制场 1.1.4 数据场 1.1.5 CRC 场 1.1.6 应答场 1.1.7 帧结尾 1.2 远程帧 1.3 错误帧 1.4 过载帧 1.5 帧间空间&#xff08;INTERFRAME SPACING&#xff09; 2. 发送器/接收器的…

【动态规划】【广度优先】LeetCode2258:逃离火灾

作者推荐 本文涉及的基础知识点 二分查找算法合集 动态规划 二分查找 题目 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid &#xff0c;它表示一个网格图。每个格子为下面 3 个值之一&#xff1a; 0 表示草地。 1 表示着火的格子。 2 表示一座墙&#xff0c;你跟…

【C语言】内联函数

一、内联函数 在C语言中&#xff0c;内联函数&#xff08;Inline function&#xff09;是一种代码优化技术&#xff0c;它的目的是减少函数调用的开销。内联函数通知编译器在每个函数调用的位置插入函数的实际代码&#xff0c;而不是进行传统的函数调用。这避免了调用函数时的…

球上进攻^^

欢迎来到程序小院 球上进攻 玩法&#xff1a;点击鼠标走动躲避滚动的球球&#xff0c;球球碰到即为游戏结束&#xff0c;看看你能坚持多久&#xff0c;快去玩吧^^。开始游戏https://www.ormcc.com/play/gameStart/214 html <div id"game" class"game" …

【基于Flask、MySQL和Echarts的热门游戏数据可视化平台设计与实现】

基于Flask、MySQL和Echarts的热门游戏数据可视化平台设计与实现 前言数据获取与清洗数据集数据获取数据清洗 数据分析与可视化数据分析功能可视化功能 创新点结语 前言 随着游戏产业的蓬勃发展&#xff0c;了解游戏销售数据对于游戏从业者和游戏爱好者都至关重要。为了更好地分…

(六)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

DataFrame的使用

查看数据类型及属性 # 查看df类型 type(df) # 查看df的shape属性&#xff0c;可以获取DataFrame的行数&#xff0c;列数 df.shape # 查看df的columns属性&#xff0c;获取DataFrame中的列名 df.columns # 查看df的dtypes属性&#xff0c;获取每一列的数据类型 df.dtypes df.i…

模型能力赋能搜索——零样本分类(Zero-Shot Classification)在搜索意图识别上的探索

什么是Zero-Shot Classification https://huggingface.co/tasks/zero-shot-classification hugging face上的零样本分类模型 facebook/bart-large-mnli https://huggingface.co/facebook/bart-large-mnli 当然这是一个英文模型&#xff0c;我们要去用一些多语言的模型。 可以在…