中科曙光二面面经/成都base/高性能计算/Java开发
中科曙光二面
应该是leader面,对面开了摄像头,俺的压力有点大,面试官说时间有限,一共就面了20分钟左右。
1.讲一下JVM里的数据结构,如果产生异常会在哪里产生异常?有哪些解决方案?
JVM的运行时数据区域主要包括以下几个部分:
- 方法区 (Method Area):这部分用于存储已被加载的类信息、常量、静态变量和即时编译器编译后的代码等数据。
- 堆 (Heap):这是JVM所管理的最大一块内存区域,用于存放对象实例,几乎所有的对象实例都会在这里分配内存。
- 虚拟机栈 (Java Virtual Machine Stacks):每个线程都有一个私有的栈,随线程创建而创建。栈里保存了方法调用的栈帧,每次调用一个方法时都会为该方法创建一个新的栈帧并压入栈,方法返回时该栈帧出栈。
- 本地方法栈 (Native Method Stacks):本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。
- 程序计数器 (Program Counter Register):当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
异常来源:
- 堆溢出 (OutOfMemoryError):当堆中无法再为新的对象分配内存时,会抛出这个异常。解决方案:可能的解决方法包括增加堆内存的分配(使用-Xms和-Xmx参数)、优化代码来减少对象的创建、或者使用Profiler工具检查是否有对象泄露。
- 栈溢出 (StackOverflowError):当线程请求的栈深度大于虚拟机所允许的深度时,抛出这个异常。解决方案:可能的方法包括减少方法调用的深度,优化递归逻辑,或者增加栈内存的分配(使用-Xss参数)。
- 方法区溢出 (OutOfMemoryError):当方法区无法满足内存分配需求时,会抛出这个异常。解决方案:增加方法区的分配大小(例如,使用-XX:PermSize和-XX:MaxPermSize参数,取决于你使用的JVM版本和类型)或者检查类加载逻辑,确保没有意外地加载过多的类。
总结:
JVM为Java程序提供了运行时数据存储的地方。当这些地方无法满足程序的需求时,JVM会抛出异常。处理这些异常的关键是识别异常的来源,然后采取适当的措施,这可能包括为JVM分配更多的资源或优化代码来减少资源的使用。
2.Error和Exception有什么不同吗?
3.堆和栈中都会OOM,那么这两种OOM引起的原因有什么不同吗?
堆和栈中的异常情况:
- 堆溢出 (OutOfMemoryError):堆是用于存储Java对象的地方。当堆中没有足够的空间分配新对象时,JVM会抛出
OutOfMemoryError
异常。 引起的原因:常见的原因是程序中创建了大量大生命周期的对象,并且垃圾收集器无法及时回收这些对象。还可能是因为JVM的堆内存设置过小。 - 栈溢出 (StackOverflowError):栈是用于存储局部变量、方法调用等的地方。每当一个方法被调用,一个新的栈帧就会被添加到栈顶。当栈的大小超过了JVM允许的深度,会抛出
StackOverflowError
。 引起的原因:常见的原因是程序中有无限的递归调用。
确切地说,栈中通常不发生OutOfMemoryError
,而是StackOverflowError
。
4.JVM栈主要是做啥的?
5.A方法调用B方法,B调用C方法,请问在栈中表现是什么?
6.入栈会入一些什么东西吗?
7.方法区会存什么东西?
8.类的加载机制?
9.MySQL索引的数据结构说一下
10.为什么矮胖的B+树,IO就会少?
11.这种数据结构适合全文索引吗?
MySQL的全文索引:
- 数据结构:MySQL全文索引基于倒排索引(Inverted Index)实现。这是一种在文档检索系统中常见的数据结构,用于存储一组文档中每个词及其位置的映射。
- 用法和声明:MySQL提供了FULLTEXT索引,主要用于InnoDB和MyISAM存储引擎。可以通过以下语句创建:
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... FULLTEXT(column_name) );
B+树与全文索引:虽然MySQL常用B+树作为其主要的索引结构,但对于全文索引,它使用倒排索引。B+树主要用于范围查询,而全文索引是为了提高文本搜索的效率。全文索引中,每个唯一的词作为一个键,指向出现该词的文档或文档中的位置。
举例: 假设我们有一个名为articles
的表,其中有一个名为content
的文本列。我们可以创建一个全文索引:
ALTER TABLE articles ADD FULLTEXT(content);
之后,可以使用MATCH AGAINST
进行搜索:
SELECT * FROM articles WHERE MATCH (content) AGAINST ('search_term');
总的来说,MySQL的全文索引为文本搜索提供了高效的方法,而不是使用传统的B+树结构,而是采用倒排索引结构。
12.数据仓库和普通数据库有什么不同?
一周后oc了。但是经了解,HR说一个月有三个周六要加班,22个工作日有10个工作日要加班到晚上9点,所以我想去的意愿并不是很大。
#中科曙光#