回答重点分别是最短暂停时间和高吞吐量。
最短暂停时间:垃圾回收调优的首要目标是减少应用程序的停顿时间,确保在垃圾回收过程中尽量保持应用的响应能力,特别是对于实时或高并发应用。
高吞吐量:第二个目标是提高应用的吞吐量,即在单位时间内完成更多的业务处理。通过合理的GC策略和配置,减少GC的频率和时间,从而提升整体性能。
针对最短暂停时间和高吞吐举个例子:
方案一:每次 GC 停顿 100 m...
回答重点
GC 调优这种问题肯定是具体场景具体分析,但是在面试中就不要讲太细,大方向说清楚就行,不需要涉及具体的垃圾收集器比如 CMS 调什么参数,G1 调什么参数之类的。
GC 调优的核心思路就是尽可能的使对象在年轻代被回收,减少对象进入老年代。
具体调优还是得看场景根据 GC 日志具体分析,常见的需要关注的指标是 Young GC 和 Full GC 触发频率、原因、晋升的速率、老年代...
回答重点
-Xms:初始化堆内存大小
-Xmx:最大堆内存大小
-Xss:设置每个线程的栈大小
-XX:MetaspaceSize:初始化元空间大小
-XX:MaxMetaspaceSize:最大元空间大小
-XX:+HeapDumpOnOutOfMemoryError:当发生 OutOfMemoryError 时,生成堆转储(heap dump)
-XX:+PrintGCDetails:打...
回答重点
jmap:用于生成堆转储的命令行工具,可以用于分析JVM内存使用情况,尤其是内存泄漏问题
jstack:用于生成线程转储的命令行工具,可以用于分析线程状态,排查死锁等问题
jstat:用于监控JVM统计信息的命令行工具,提供了实时的性能数据,如类加载、垃圾回收、编译器等信息
MAT:用于分析堆转储文件的工具,可以帮助识别内存泄漏和优化内存使用
jconsole:可以监控JVM的内存...
回答重点先确认是否真的发生了内存泄漏,即观察内存使用情况。
利用 jstat 命令(jstat -gc <pid> <interval in ms> )来观察 gc 概要信息,如果发现 GC 后内存并没有明显的减少且还是持续增加持续触发 gc,那说明内存泄漏的概率很大。
此时可以利用 jmap(jmap -dump:format=b,file=heapdump.hpr...
回答重点JVM 的主要组成部分包括 类加载器子系统(ClassLoader)、运行时数据区(Runtime Data Area)、执行引擎(Execution Engine) 以及 本地方法接口(Native Interface,JNI)。
我们要知道Java 虚拟机(JVM)是一个运行 Java 程序的虚拟环境,它负责将 Java 字节码转换为机器码并执行。
然后我们再理解型的记忆上...
回答重点Java 7 及之前的方法区被实现为永久代(PermGen)中,它是固定大小的内存区域,不能动态扩展。如果加载的类过多或常量池的数据过多,超出了永久代的限制,就会出现 OutOfMemoryError: PermGen space 错误。
在 Java 8 及之后,方法区改用元空间(Metaspace)来代替永久代。元空间不再使用堆内存,而是使用本地内存(Native Memory)...
回答重点Java 中常见的 OOM 情况可以概括为以下几种:
OOM 错误类型
原因
常见解决方法
Java Heap Space
堆内存不足,常见于大量对象创建
优化对象使用或增大堆内存
StackOverflowError
栈空间耗尽,常见于递归或深层嵌套调用
优化递归逻辑或增大栈空间
PermGen Space / Metaspace
方法区或元空间不足,...
回答重点因为 redo log 是物理日志,记录“某页(Page)某位置的数据被修改为某值”。它不记录逻辑操作(如 “插入一行”),而是直接记录对页的变更。所以在插入操作中,redo log 记录的是事务在数据页上的修改
数据页的插入点、记录的偏移量和插入的实际数据并更新页目录、页头等元数据。
扩展知识插入操作 redo log 具体执行流程
修改缓冲页(Buffer Pool): 数据先写...
回答重点
执行顺序
SQL 子句
说明
1
FROM
确定数据源,执行表连接操作。
2
JOIN
执行连接操作,结合多张表的数据。
3
WHERE
过滤不符合条件的行。
4
GROUP BY
将数据按指定的列分组。
5
HAVING
过滤分组后的数据。
6
SELECT
选择要返回的列。
7
ORDER BY
对查询结果进行排序。
8
LIMIT
限制查...
回答重点速度差很多,limit 10 快很多!
原因如下:
1)LIMIT 100000000, 10 需要先处理(通常是读取并跳过)前 100000000 条记录,然后再获取到需要的 10 条记录,开销成本很大,因为需要扫描 100000000 数据才能得到后面的 10 条数据,会导致大量的磁盘 I/O。
2)LIMIT 10 从结果集第一个记录开始扫描直接返回前 10 条记录。...
回答重点存储方式:
DATETIME:以字符串形式存储,范围为 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59',占用 8 字节。
TIMESTAMP:以 Unix 时间戳形式存储,范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07'...
回答重点1)可移植性差
数据库依赖性:存储过程是在数据库服务器上执行的,通常使用数据库特定的 SQL 方言和功能,这会导致应用程序的数据库依赖性增加,迁移到其他数据库系统时有成本。
跨平台问题:不同的数据库系统实现存储过程的方式和支持的功能不完全相同,维护比较复杂。
2)调试困难
调试工具有限:相比应用层代码,数据库层的存储过程缺乏良好的调试工具和环境。常规的代码调试方法(如设置断点、...
回答重点第一范式(1NF):
确保每个列的值都是原子值,表中的每个字段只能包含单一的数据项,不允许重复的列和多值字段。
第二范式(2NF):
在满足第一范式的基础上,确保表中的每个非主键字段完全依赖于主键,而不是部分依赖。即,非主键字段必须依赖于整个主键。
第三范式(3NF):
在满足第二范式的基础上,确保非主键字段之间不依赖,即消除传递依赖。所有非主键字段只能依赖于主键,不应相互...
回答重点这道题目被问的几率不是很大,大家可以熟悉下,可以在实际开发中使用。
以下列举一些常用的函数类别:
1)字符串函数,用于处理文本数据:
CONCAT:连接字符串。
SUBSTRING:提取子字符串。
LENGTH:返回字符串的长度。
REPLACE:替换字符串中的子字符串。
UPPER 和 LOWER:将字符串转换为大写或小写。
TRIM:去除字符串两端的空格。
LEFT 和 RIG...
回答重点TEXT 是非标准字符串类型,除了它还有 TINYTEXT、MEDIUMTEXT 和 LONGTEXT,一般我们存储一些不确定的较长文本才会使用到它们,例如文章之类的。
它们的存储的文本长度汇总如下:
1)TINYTEXT:最大长度为 255 字节。
2)TEXT:最大长度为 65,535 字节(约 64 KB)。
3)MEDIUMTEXT:最大长度为 16,777,215 字节(约...
回答重点在 MySQL 中,如果表定义的自增 ID 到达上限后,再申请下一个 ID,得到的值不变! 因此会导致报重复值的错误。
扩展知识自增 ID 上限实验例如 int 是 4 个字节,上限是 2 的 32 次方 -1,即 2147483647,当到达这个值的之后,下次插入得到的还是这个值,来看一下实验:
123456create table mianshiya( id int aut...
回答重点在数据库中业界常用两种类型来存储金额:bigint 和 decimal。
1)bigint 代码中用 long。
范围:可以存储的整数范围为 -2^63 到 2^63 - 1(在 MySQL 中为 64 位有符号整数)
存储空间:占用 8 字节(64 位)
精度:精确存储整数,但不支持小数部分,存储的金额单位是分
2)decimal 代码中使用 BigDecimal。
范围:可...
回答重点数据库的视图是一个虚拟表,它并不存储实际的数据,而是通过查询其他表的数据来生成的。视图可以简化复杂的查询、增强数据安全性(限制访问某些数据)以及提供数据的不同表示方式。
它可以包含一个或多个表的数据,并且可以对这些数据进行筛选、计算、排序等操作。
扩展知识视图的作用
简化复杂查询:视图可以将复杂的查询封装成一个简单的视图,使得用户在查询数据时更加方便。
安全性:通过视图可以限制用户访...
回答重点
这道题面试遇到的几率比较低,但是游标这个概念还是需要了解。
数据库游标是一个数据库对象,使得应用程序可以逐行访问查询结果集,而不仅仅是一次性处理所有结果。它允许开发者在结果集中的行之间移动,方便进行复杂的数据操作,比如更新或删除特定的行。
扩展知识游标的作用和性能问题
逐行处理:游标允许逐行处理查询结果集,在需要对结果集中的每一行进行复杂操作时,非常有用。
灵活性:游标提供了对结...
回答重点MySQL 是关系型数据库,它设计的初衷是高效处理结构化和关系型数据,所以存储大容量的内容本身就不是它的职责所在,因此这方面的能力也不够。
应该将大容量文件存储在文件系统或云服务提供的对象存储服务中,仅在数据库中存储文件的路径或 URL 即可。
扩展知识数据库本身性能问题
数据库性能:存储和检索大容量的二进制数据(如图片、音频、视频)会显著增加数据库的 I/O 操作和处理时...
回答重点与 Oracle 相比,MySQL 有以下优势:
1)MySQL 有免费版本,成本低,Oracle 数据库的许可费用和维护成本较高。
2)MySQL 是开源的,有广泛的社区支持和丰富的文档资源,能快速上手和解决问题。
3)MySQL 适合小型和中型应用,相比 Oracle 资源占用较少,更加轻量。
而 Oracle 在处理大型企业级应用、复杂事务、并发控制和高级功能(如高...
回答重点两者的区别就是能存储的字符串长度上限不同,字符数上限是由定义中的括号内的数字决定的。
VARCHAR(100) 最多可以存储 100 个字符。
VARCHAR(10) 最多可以存储 10 个字符。
两者存储相同字符串时占用的空间是一样的。除了存储字符本身外,还需要额外的 1 或 2 个字节来记录字符串的长度。对于长度小于 255 的字符串,使用 1 个字节;对于长度 255 及以...
回答重点一般有以下几种情况不推荐建立索引:
1)对于数据量很小的表
当表的数据量很小(如几百条记录)时,建立索引并不会显著提高查询性能,反而可能增加管理的复杂性。
2)频繁更新的表
对于频繁进行插入、更新和删除操作的表,索引会导致额外的维护开销,因为每次数据变更时都需要更新索引,这会影响性能。
3)执行大量的 SELECT *
此时二级索引可能不会显著提升性能,因为需要大量的回表...
回答重点基本功能:
EXISTS 用于判断子查询是否返回任何行,通常用于检查某个条件是否满足。
IN 用于检查某个值是否在指定的集合中,可以是一个子查询或静态值列表。
性能差异:
EXISTS 一旦找到匹配行就会立即返回,通常在子查询返回较大数据集时性能更好。
IN 通常会评估整个子查询并构建一个值列表,然后再进行匹配,在处理较大数据集时可能性能较差。
使用场景:
EXISTS 更...
回答重点WAL(Write-Ahead Logging)技术是一种数据库事务日志管理技术,它确保在修改真正的数据之前,先将修改记录写入日志。这使得即使系统崩溃,通过日志也能恢复数据。保证了数据的持久性和一致性。
WAL 它的核心思想就是先写日志,再写数据,大致执行流程如下:
1)当一个事务开始时,所有对数据库的修改都会先记录到一个日志文件中,而不是直接应用到数据库文件,这些日志记录了数据的变...
回答重点MySQL 数据库的默认隔离级别是 RR(可重复读),但是很多大公司把隔离级别改成了 RC(读已提交),主要原因是为了提高并发和降低死锁概率。
为了解决幻读的问题 RR 相比 RC 多了间隙锁(gap lock)和临键锁(next-key lock)。而 RC 中修改数据仅用行锁,锁定的范围更小,因此相比而言 RC 的并发更高。
扩展知识RC 和 RR 区别实际例子来看下例子,感受更...
回答重点迁移想着很简单,不就是把一个库的数据迁移到另一个库吗?
但是实际上有很多细节,在面试中我们可以假装思考下,然后向面试官复述以下几点:
首先关注量级,如果是几十万的数据其实直接用代码迁移,简单核对下就结束了。如果数据量大那么才需要好好设计方案。
不停服数据迁移需要考虑在线数据的插入和修改,保证数据的一致性。
迁移还需要注意回滚,因为一旦发生问题需要及时切换回老库,防止对业务产生影响。...
回答重点对开发而言,一般可以从 SQL 和库表设计两部分优化 MySQL 性能问题。
SQL 优化根据慢 SQL 日志,找出需要优化的一些语句。
常见优化方向:
1)避免 SELECT *,只查询必要的字段
2)避免在 SQL 中进行函数计算等操作,使得无法命中索引
3)避免使用 %LIKE,导致全表扫描
4)注意联合索引需满足最左匹配原则
5)不要对无索引字段进行排序操作
6)连表查询需要...
回答重点逻辑删除是一种将数据标记为已删除但实际不会从数据库中移除的删除方式。一般是在表中添加一个表示删除状态的字段,如 is_deleted ,默认是 0 表示未删除,1 表示已删除。
物理删除则是直接从数据库中删除记录。
一般业务上都是使用逻辑删除,便于后续的数据分析、追溯等。
扩展知识物理删除的优缺点优点:
节省存储空间:物理删除释放了数据占用的存储空间。
查询性能提高:由于数据被彻底...