版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
招聘Java开发工程师面试题与参考回答(某大型央企)面试问答题(总共10个问题)第一题题目:请描述一下Java中的垃圾回收(GarbageCollection,GC)机制,并解释几种常见的垃圾回收算法及其特点。参考回答:Java中的垃圾回收机制是Java虚拟机(JVM)自动管理内存的一种方式,它帮助程序员自动释放那些不再被使用的对象所占用的内存空间。这种机制极大地简化了内存管理的工作,减少了内存泄露和内存溢出的风险。垃圾回收算法是JVM用来识别并回收无用对象所占用的内存空间的具体实现方法。以下是几种常见的垃圾回收算法及其特点:标记-清除(Mark-Sweep)算法工作原理:首先,通过根集合(如全局变量、活动线程的栈帧中的局部变量等)来标记所有从根集合可达的对象;然后,扫描整个堆,清除那些未被标记的对象。特点:实现简单,但会产生内存碎片,即清除后的空间可能不连续,导致后续的大对象分配失败,即使堆内存还有足够的空间。复制(Copying)算法工作原理:将内存分为两块大小相等的区域,每次只使用其中一块。当这块内存使用完时,就将还存活的对象复制到另一块内存区域中,然后一次性清理掉原内存区域中的所有对象。特点:效率高,解决了内存碎片问题,但代价是内存使用率低(因为只有一半的空间可用)。适用于存活对象较少的场景。标记-整理(Mark-Compact)算法工作原理:与标记-清除算法类似,首先标记出所有从根集合可达的对象,但不直接清除不可达对象,而是将所有存活的对象压缩到内存的一端,然后清理边界以外的内存。特点:解决了内存碎片问题,同时保持了较高的内存使用率。但整理过程需要移动对象,增加了额外的开销。分代收集(GenerationalCollection)算法工作原理:基于对象存活周期的不同,将内存划分为几块,如新生代(YoungGeneration)、老年代(OldGeneration)等。不同代使用不同的垃圾回收算法。新生代中对象存活率低,常使用复制算法;老年代中对象存活率高,常使用标记-清除或标记-整理算法。特点:通过分代收集算法,JVM可以根据不同代的特点选择最合适的垃圾回收方式,从而提高整体的垃圾回收效率。解析:本题主要考察了Java内存管理的基本知识,特别是垃圾回收机制及其算法。了解这些算法有助于深入理解JVM的内存管理机制,从而编写出更高效、更稳定的Java应用程序。在面试中,除了准确回答算法的基本工作原理和特点外,还可以结合具体的JVM实现(如HotSpotVM)和实际应用场景进行进一步的讨论和分析。第二题题目:请描述一下Java中的垃圾回收机制(GC),并解释一下常见的几种垃圾回收算法。参考答案:Java中的垃圾回收机制(GarbageCollection,GC)是Java语言的一个核心特性,它负责自动管理内存,释放那些不再被应用程序所引用的对象所占用的内存空间。这种机制大大减轻了开发者管理内存的负担,减少了内存泄露和内存溢出的风险。Java虚拟机(JVM)中的垃圾回收器会定期检查堆(Heap)中的对象,判断哪些对象是“存活”的(即被应用程序中的变量所引用),哪些对象是“死亡”的(即不再被任何变量所引用)。对于“死亡”的对象,垃圾回收器会将其占用的内存空间回收,以便供后续的对象分配使用。常见的几种垃圾回收算法包括:标记-清除(Mark-Sweep)算法:首先,通过根集合(如栈上的局部变量表、静态变量等)和可达性分析算法来标记所有存活的对象。然后,遍历堆内存中的所有对象,清除未被标记的对象(即死亡对象),回收其占用的空间。缺点是会产生内存碎片,即空闲内存空间不连续。复制(Copying)算法:将堆内存分为两个大小相等的区域(From和To),每次只使用其中一个区域。当From区满时,进行垃圾回收,将存活的对象复制到To区,然后清空From区。优点是实现简单,不会产生内存碎片;缺点是内存利用率低,只有一半的内存空间被使用。标记-整理(Mark-Compact)算法:类似于标记-清除算法,但在清除死亡对象后,会对存活对象进行整理,使它们紧挨在一起,消除内存碎片。优点是解决了内存碎片问题;缺点是整理过程需要移动对象,影响性能。分代收集(GenerationalCollection)算法:考虑到大多数对象很快成为垃圾,只有少数对象存活时间较长,因此将堆内存分为新生代(YoungGeneration)和老年代(OldGeneration)。新生代对象存活时间短,采用复制算法或较小的Eden区和两个Survivor区(From和To)进行垃圾回收。老年代对象存活时间长,采用标记-清除或标记-整理算法进行垃圾回收。分代收集算法结合了多种垃圾回收算法的优点,提高了垃圾回收的效率。解析:理解Java中的垃圾回收机制及其算法对于Java开发者来说至关重要。这不仅有助于编写更加高效、稳定的Java应用程序,还有助于在出现内存问题时进行故障排查和优化。通过掌握这些算法的基本原理和适用场景,开发者可以更好地利用JVM提供的垃圾回收机制来管理内存资源。第三题题目:请解释一下Java中的”垃圾回收机制”(GarbageCollection,GC),并谈谈你了解到的几种主要的垃圾回收算法及其适用场景。参考回答:垃圾回收机制(GarbageCollection,GC)是Java语言提供的一种自动内存管理机制,用于自动识别和回收那些不再被程序使用的对象所占用的内存空间。Java程序员无需(也通常不建议)直接管理内存分配和释放,这一任务由Java运行时环境(JRE)中的垃圾回收器自动完成。这大大降低了内存泄漏和内存溢出的风险,使得Java程序更加健壮和易于维护。主要的垃圾回收算法及其适用场景包括:标记-清除(Mark-Sweep)算法工作原理:首先标记出所有从根集合(GCRoots)可达的对象,然后清除掉所有未被标记的对象。适用场景:实现简单,但会产生内存碎片。适用于小型应用或内存使用不太频繁的场景。复制(Copying)算法工作原理:将内存分为两块大小相等的区域,每次只使用其中一块。当这块内存快用完时,就将还存活的对象复制到另一块内存区域中,然后清理掉原来的内存区域。适用场景:适用于存活对象较少的情况,因为它通过复制的方式解决了内存碎片问题,但会增加内存的消耗(因为需要额外的空间进行复制)。标记-整理(Mark-Compact)算法工作原理:首先进行标记,然后让所有存活的对象都向内存的一端移动,最后清理掉边界以外的内存。适用场景:适用于老年代(OldGeneration)的回收,因为老年代中对象存活率较高,标记-整理算法可以有效减少内存碎片。分代收集(GenerationalCollection)算法工作原理:将Java堆分为新生代(YoungGeneration)和老年代(OldGeneration),新生代进一步细分为Eden区、两个Survivor区(FromSurvivor和ToSurvivor)。根据对象的存活周期采用不同的垃圾回收策略。适用场景:绝大多数Java对象都是朝生夕灭的,因此分代收集算法可以显著提高垃圾回收的效率。新生代主要采用复制算法,老年代则采用标记-清除或标记-整理算法。解析:Java的垃圾回收机制是Java语言的核心特性之一,它极大地简化了内存管理的复杂性,但也引入了垃圾回收的延迟(GCpause)和可能的性能开销。了解不同垃圾回收算法的工作原理和适用场景,有助于我们根据具体的应用场景选择合适的垃圾回收器,优化Java程序的性能。此外,随着Java版本的更新,垃圾回收器也在不断演进,比如G1(Garbage-First)收集器就是一种面向服务端应用的垃圾回收器,旨在满足停顿时间要求的同时,达到较高的吞吐量。第四题题目:请解释Java中的“垃圾回收(GarbageCollection,GC)”机制,并说明几种常见的垃圾回收算法。同时,请谈谈如何优化Java应用以减少GC的影响。参考答案:解释Java中的“垃圾回收”机制:Java的垃圾回收机制是一种自动内存管理机制,用于识别和释放那些不再被程序中的任何活动部分所引用的对象所占用的内存。这种机制允许Java程序员更专注于应用程序的逻辑,而无需担心内存泄漏和内存管理问题。Java虚拟机(JVM)通过垃圾回收器(GC)来实现这一功能,GC会定期或根据特定条件(如内存不足时)运行,检查堆内存中的对象,识别出那些不可达(即没有引用指向)的对象,并回收它们所占用的内存空间。几种常见的垃圾回收算法:标记-清除(Mark-Sweep):分为标记和清除两个阶段。首先,标记出所有从根集合(如静态变量、活动线程的栈变量等)可达的对象;然后,清除未被标记的对象。缺点:产生内存碎片。复制(Copying):将堆内存分为两个大小相等的半区(From区和To区)。每次GC时,将存活的对象从From区复制到To区,然后清空From区。优点:简单、高效,无内存碎片;缺点:内存利用率低(只有一半可用)。标记-整理(Mark-Compact):类似于标记-清除,但在清除阶段,将存活的对象向一端移动,然后直接清理边界外的内存。优点:解决了内存碎片问题;缺点:需要移动对象,影响性能。分代收集(GenerationalCollection):根据对象的存活周期将堆内存划分为不同的代(如新生代、老年代)。不同的代使用不同的垃圾回收算法。新生代中对象生命周期短,通常使用复制算法;老年代中对象生命周期长,可能使用标记-清除或标记-整理算法。优化Java应用以减少GC的影响:减少对象创建:优化代码逻辑,减少不必要的对象创建,降低GC压力。使用对象池:对于需要频繁创建和销毁的对象,使用对象池可以减少对象创建的开销。避免使用全局变量:过多的全局变量会增加GC的根集合大小,增加GC的工作量。选择合适的垃圾回收器:根据应用的特点选择合适的垃圾回收器,如CMS(ConcurrentMarkSweep)适合响应时间敏感的应用,G1(Garbage-First)适合大内存应用。分析GC日志:定期分析GC日志,了解GC的行为和性能瓶颈,针对性地进行优化。解析:本题旨在考察面试者对Java垃圾回收机制的理解,包括其基本概念、常见的垃圾回收算法以及如何通过编程和配置优化来减少GC对应用性能的影响。通过本题,可以评估面试者的Java内存管理能力和对JVM内部工作原理的理解程度。第五题题目:请解释一下Java中的垃圾回收(GarbageCollection,GC)机制,并谈谈你对其重要性及常见垃圾回收器的了解。参考回答:解释垃圾回收机制:Java的垃圾回收机制是一种自动内存管理机制,用于自动检测并释放那些不再被应用程序使用的对象所占用的内存空间。这一机制是Java语言的一个显著特点,它简化了内存管理的工作,减少了内存泄漏和程序崩溃的风险。在Java中,程序员不需要手动分配和释放内存,这些工作由垃圾回收器自动完成。重要性:防止内存泄漏:通过及时回收无用对象,避免内存资源被持续占用,从而防止内存泄漏。提高内存利用率:自动管理内存使得内存分配和回收更加高效,有助于提高程序的性能和响应速度。简化编程工作:程序员无需关注内存分配和释放的细节,可以更加专注于业务逻辑的实现。常见垃圾回收器:SerialGC(串行垃圾回收器):适用于单CPU环境,它使用单个垃圾回收线程来执行垃圾回收操作,会暂停所有用户线程(Stop-The-World)。简单且易于管理,但不适合多核CPU环境。ParallelGC(并行垃圾回收器):是SerialGC的多线程版本,使用多个垃圾回收线程来加快垃圾回收过程,适用于多核CPU环境。同样会暂停所有用户线程,但回收效率更高。CMS(ConcurrentMarkSweep,并发标记清除):是一种以减少应用程序停顿时间为目标的垃圾回收器,它尽量与应用程序线程并发执行。主要分为四个步骤:初始标记、并发标记、重新标记、并发清除。虽然可以显著降低停顿时间,但可能会因为碎片化而降低内存使用效率,且不适合大量CPU资源。G1(Garbage-First):是面向服务端应用的垃圾回收器,旨在满足垃圾收集停顿时间的同时,具备高吞吐量。将堆内存划分为多个大小相等的独立区域(Region),并以优先级的方式回收垃圾,同时监控停顿时间,以调整回收策略。G1可以预测垃圾回收的停顿时间,并尽可能减少停顿时间。解析:本题考察了面试者对Java垃圾回收机制的理解程度,以及对其重要性和常见垃圾回收器的认识。通过回答,可以评估面试者是否具备扎实的Java基础知识,以及在实际开发中是否能有效地利用Java的内存管理机制来提高程序的性能和稳定性。同时,对常见垃圾回收器的了解也反映了面试者对于Java性能调优方面的掌握程度。第六题题目:请描述一下Java中的接口(Interface)与抽象类(AbstractClass)之间的主要区别,并举例说明在何种情况下你会选择使用接口而非抽象类,或者反之。参考回答:主要区别:抽象程度:接口:是一种完全抽象的类型,仅包含方法的声明,不包含具体实现。它定义了一组规范,由实现该接口的类来具体实现这些方法。抽象类:是一种不能被实例化的类,它可以包含部分实现的方法(即具体的方法实现)以及抽象方法(仅声明,无实现)。抽象类可以拥有构造方法、字段、静态方法和非抽象方法等。实现方式:接口:一个类可以实现多个接口,通过implements关键字实现。实现接口的类必须实现接口中声明的所有方法,除非该类也是抽象的。抽象类:一个类只能继承一个抽象类(Java不允许多重继承),通过extends关键字继承。子类必须实现父类(抽象类)中声明的所有抽象方法,除非子类也是抽象的。设计目的:接口:主要用于定义对象的行为规范,强调“是什么”而非“怎么做”,促进多态性的实现。抽象类:主要用于代码的复用,当多个类之间存在共同的属性和方法时,可以使用抽象类来提取这些共同的元素,避免代码重复。选择使用场景:使用接口的情况:当你需要定义一个完全抽象的类型,只关心对象能够做什么,而不关心它是如何做的。当你希望一个类可以拥有多个行为(通过实现多个接口)。当你需要一种形式上的契约或规范,确保所有实现该接口的类都遵循某种行为模式。使用抽象类的情况:当你需要一些共同的字段或方法实现被多个子类共享时。当你希望通过继承来复用代码,并希望子类之间保持一定的关系(如“is-a”关系)。当你想要限制子类数量,或者认为继承关系是类之间关系的主要方式时。举例:接口示例:定义一个Shape接口,包含draw()方法。然后,可以有多个类如Circle、Rectangle等实现这个接口,分别提供自己的draw()方法实现,这样我们就定义了一个图形的行为规范,而不需要关心每个图形具体如何绘制。抽象类示例:定义一个Animal抽象类,包含一些基本的属性和方法(如move()),以及一些抽象方法(如makeSound())。然后,可以有多个具体的动物类(如Dog、Cat)继承这个抽象类,并实现makeSound()方法。这样,我们就复用了一些共通的代码,并保证了所有动物类都有一些基本的属性和行为。第七题题目:请解释一下Java中的垃圾回收(GarbageCollection,GC)机制,并谈谈你了解到的几种常见的垃圾回收算法,以及它们各自的优缺点。参考回答:Java中的垃圾回收机制是Java虚拟机(JVM)提供的一种自动内存管理机制,用于自动识别和释放那些不再被程序使用的对象所占用的内存空间。这一机制大大简化了程序员的内存管理工作,减少了内存泄漏和内存溢出的风险。常见的垃圾回收算法包括:标记-清除(Mark-Sweep)算法工作原理:首先标记出所有从根集合(如活动线程、静态字段等)可达的对象,然后清除未被标记的对象。优点:实现简单,不需要移动对象。缺点:会产生内存碎片,即空闲内存不连续,可能导致后续分配大对象时无法找到足够的连续空间。复制(Copying)算法工作原理:将内存分为两个大小相等的半区,每次只使用其中一个半区。当这一半区内存使用完时,就将还存活的对象复制到另一个半区,然后清理掉当前半区的所有对象。优点:解决了内存碎片问题,实现简单,效率高。缺点:内存利用率低,只有一半的内存空间被有效利用。标记-整理(Mark-Compact)算法工作原理:与标记-清除算法类似,但在清除阶段不是直接清除未标记的对象,而是将所有存活的对象压缩到内存的一端,然后清理掉边界以外的内存。优点:解决了内存碎片问题,提高了内存利用率。缺点:需要移动对象,增加了额外的开销。分代收集(GenerationalCollection)算法工作原理:基于对象存活周期的不同将内存划分为几块,如新生代、老年代等。不同代的内存区域使用不同的垃圾回收算法。通常,新生代使用复制算法,老年代使用标记-清除或标记-整理算法。优点:根据对象存活周期的不同,采用不同的回收策略,提高了垃圾回收的效率。缺点:实现复杂,需要维护不同代的内存区域。解析:了解Java中的垃圾回收机制及其算法对于Java开发者来说是非常重要的。这不仅有助于深入理解Java的内存管理机制,还能帮助开发者在编写程序时更加合理地使用内存,避免内存泄漏和内存溢出等问题。同时,对于性能调优和故障排查也有很大的帮助。在实际应用中,JVM会根据实际情况选择合适的垃圾回收算法,并可以通过JVM参数进行调整和优化。因此,作为Java开发者,了解这些算法及其优缺点,能够帮助我们更好地理解和优化JVM的性能。第八题题目:请描述一下Java中的异常处理机制,并给出一个具体的try-catch-finally示例,说明每个部分的作用。参考回答:Java中的异常处理机制是Java语言设计的一个重要特性,它提供了一种结构化的方式来处理程序中可能出现的错误。异常处理通过三个主要的关键字来实现:try、catch和finally。try块:catch块:catch块紧随try块之后,用于捕获并处理try块中发生的异常。可以有多个catch块来捕获不同类型的异常,但每个catch块只能捕获一种类型的异常或其子类型的异常。当找到匹配的catch块时,程序会进入该catch块执行相应的异常处理代码。finally块(可选):finally块无论是否发生异常都会被执行。它主要用于执行清理操作,如关闭文件、释放资源等。这对于确保资源的正确释放非常重要,即使在发生异常的情况下也能保证程序的稳定性。示例代码:publicclassExceptionDemo{publicstaticvoidmain(String[]args){try{//假设这里有一段可能抛出异常的代码intresult=10/0;//这里会抛出ArithmeticExceptionSystem.out.println("除法操作成功完成,结果:"+result);}catch(ArithmeticExceptione){//处理除以0的异常System.out.println("发生算术异常:"+e.getMessage());}finally{//无论是否发生异常,都会执行的代码System.out.println("执行finally块中的代码");}//继续执行try-catch-finally之后的代码System.out.println("程序继续执行");}}解析:在上述示例中,尝试执行了一个除法操作,但由于除数为0,因此会抛出ArithmeticException。捕获到这个异常后,程序进入对应的catch块,打印出异常信息。无论是否发生异常,finally块中的代码都会被执行,确保了资源的正确释放或执行必要的清理操作。最后,程序继续执行try-catch-finally之后的代码。第九题题目:请解释Java中的垃圾回收(GarbageCollection,GC)机制,并描述几种常见的垃圾回收算法及其适用场景。参考回答:解释:Java的垃圾回收机制是Java内存管理中的一个重要组成部分,它负责自动回收程序中不再使用的对象所占用的内存空间,从而避免内存泄露和内存溢出等问题。垃圾回收的主要目标是识别并丢弃程序中不再使用的对象,释放其占用的内存,以便程序能够继续使用这些内存。垃圾回收机制是自动进行的,程序员无法直接控制其执行时机,但可以通过一些编程习惯和技巧来影响垃圾回收的效率。常见的垃圾回收算法及其适用场景:标记-清除(Mark-Sweep)算法:过程:首先标记出所有从根集合(GCRoots)可达的对象,然后清除未被标记的对象。优点:实现简单,不需要对对象进行移动。缺点:清理后会产生内存碎片,可能导致无法分配大对象。适用场景:主要用于老年代(OldGeneration)的垃圾回收,但现代JVM中通常不会单独使用此算法。复制(Copying)算法:过程:将现有的内存空间分为两块,每次只使用其中一块,当这块内存满了时,就将还存活的对象复制到另一块上面,然后清理掉原内存块中的所有对象。优点:解决了内存碎片问题,简单高效。缺点:内存利用率低,因为必须预留一半的空间作为复制的对象使用。适用场景:主要用于年轻代(YoungGeneration)的垃圾回收,特别是新生代(Eden区)的对象,因为大部分对象都是朝生夕灭的。标记-整理(Mark-Compact)算法:过程:类似于标记-清除算法,但在清除死对象后,还会将所有存活的对象向一端移动,并整理内存空间。优点:解决了内存碎片问题,不需要预留额外空间。缺点:在整理过程中需要移动对象,增加了垃圾回收的复杂性和开销。适用场景:主要用于老年代(OldGeneration)的垃圾回收,特别是当老年代空间较大时,能够更有效地减少内存碎片。分代收集(GenerationalCollection)算法:过程:根据对象的存活周期将内存划分为几个不同的区域(如年轻代、老年代等),每个区域采用不同的垃圾回收算法。优点:能够根据对象的特点选择合适的垃圾回收算法,提高垃圾回收的效率。缺点:需要维护多个内存区域和相应的垃圾回收算法,增加了实现的复杂性。适用场景:几乎所有的现代JVM都采用了分代收集算法,因为它能够显著提高垃圾回收的效率和性能。解析:理解Java的垃圾回收机制及其算法对于编写高效、稳定的Java应用程序至关重要。不同的垃圾回收算法各有优缺点,适用于不同的内存区域和对象特征。在实际开发中,了解JVM的默认垃圾回收策略以及如何通过JVM参数来调优垃圾回收性能是非常重要的。第十题题目:在Java中,什么是多态性(Polymorphism)?请举例说明在Java中如何实现多态性,并解释其好处。参考回答:在Java中,多态性(Polymorphism)是一种允许我们以统一的方式处理不同类型的对象的能力。这意味着,我们可以将子类的对象视为父类类型的对象来进行操作,并且可以在运行时根据对象的实际类型调用其相应的方法。多态性主要通过方法重写(Override)和接口实现(Implementation)来实现。实现方式:方法重写(Override):子类可以重写父类中的方法。当子类对象被当作父类对象使用时,如果调用了重写的方法,则实际上会执行子类中的方法。这是多态性的一种表现形式。classAnimal{voideat(){System.out.println("Thisanimaleatsfood.");}}classDogextendsAnimal{@Overridevoideat(){System.out.println("Dogeatsmeat.");}}publicclassTestPolymorphism{publicstaticvoidmain(String[]args){AnimalmyDog=newDog();//Dog对象被当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 喷色机皮革工业用产品供应链分析
- 带兜帽的风雪大衣产业链招商引资的调研报告
- 可拆卸衣领产业链招商引资的调研报告
- 农村教育产业行业市场调研分析报告
- 手表修理行业市场调研分析报告
- 员工持股计划管理服务行业营销策略方案
- 福建省莆田第二十五中学2024-2025学年高一上学期期中考试生物试题(解析版)
- 废物磁选技术行业营销策略方案
- 为会议中心提供餐饮供应服务行业营销策略方案
- 科学研究用具有人工智能的人形机器人项目营销计划书
- 企业名称预先核准通知书
- 大学生职业生涯规划学习通超星期末考试答案章节答案2024年
- 2023-2024学年湖南省长沙市八年级(上)期中物理试卷
- 2024年人教版语文三年级上册《第八单元》大单元整体教学设计
- 学校义务教育均衡发展一校一策方案
- 躬耕教坛强国有我教师心得体会范文(10篇)
- 国开2024年秋《机械制图》形考作业1-4答案
- 2024中国中煤招聘笔试参考题库含答案解析
- 23S519 小型排水构筑物(带书签)
- GA/T 544-2021多道心理测试系统通用技术规范
- 矩阵论知到章节答案智慧树2023年哈尔滨工程大学
评论
0/150
提交评论