[通用]计算机经典面试题基础篇Day3

[通用]计算机经典面试题基础篇Day3

1、请说明mysql的两种主要引擎

MySQL有多种存储引擎,但最常见的两种主要引擎是InnoDB和MyISAM。

2、说一下mysql这两种引擎的使用场景

MySQL的两种主要引擎,InnoDB和MyISAM,各自适用于不同的使用场景,以下是它们的主要用途和适合的应用场景:

  1. InnoDB引擎:
  • 事务支持:InnoDB是MySQL的默认事务存储引擎,因此它非常适合需要事务支持的应用程序,例如电子商务网站、银行系统、订单处理系统等。它确保了数据的一致性和完整性,以及事务的原子性、一致性、隔离性和持久性(ACID属性)。
  • 高并发性能:InnoDB支持行级锁定,这使得多个并发用户可以同时访问同一表的不同行,从而提高了并发性能。这对于具有大量同时在线用户的应用程序非常重要。
  • 外键约束:如果您的数据库需要维护表之间的关系和引用完整性,InnoDB是更好的选择,因为它支持外键约束。

适合的应用场景:

  • 事务性应用程序
  • 高并发读写操作
  • 需要外键支持的应用
  • 数据完整性和一致性要求较高的应用
  1. MyISAM引擎:
  • 读密集应用:MyISAM在处理大量读操作时表现得相当不错。因为它使用表级锁定,所以在并发写入操作较少的情况下,适合用于读取密集型应用程序,如博客、新闻网站、数据仓库等。
  • 不需要事务支持:MyISAM不支持事务,因此对于不要求ACID属性的应用程序,可以考虑使用它。如果数据的一致性和完整性对应用程序不是关键问题,而且性能是首要考虑因素,那么MyISAM可能是一个选择。
  • 临时表:MyISAM通常用于创建临时表,用于存储中间结果或缓存数据。

适合的应用场景:

  • 读密集型应用
  • 简单的查询和报表生成
  • 不需要事务支持的应用
  • 临时表和缓存需求

3、你认为mysql的优化方式都有什么

  1. 合适的索引设计
  • 创建适当的索引可以大大提高查询性能。确保表中的字段经过良好选择和规划,以便在常见的查询中使用索引。
  1. 查询优化
  • 使用合适的SQL查询,避免使用SELECT *,只选择所需的列,尽量减少数据传输。
  • 使用EXPLAIN来分析查询执行计划,以便优化查询。
  1. 硬件优化
  • 使用高性能硬件,包括快速磁盘、大内存和多核处理器,以提高数据库服务器的性能。
  • 使用SSD来加速磁盘I/O操作,以减少读写延迟。
  1. 调整缓冲区
  • 调整MySQL的缓冲区参数,如缓冲池大小、查询缓存等,以确保数据在内存中得到良好的管理和访问。
  1. 分区和分表
  • 对于大型表,可以考虑分区或分表,将数据分割成更小的部分,以提高查询性能。
  1. 定期维护
  • 定期进行数据库维护,包括优化表、重建索引、清理不再使用的数据,以保持数据库性能。
  1. 使用合适的存储引擎
  • 根据应用需求选择合适的存储引擎,如InnoDB或MyISAM,以满足事务性或读写需求。
  1. 分布式架构
  • 对于高负载应用程序,考虑采用分布式数据库架构,如MySQL集群或分片,以实现水平扩展。
  1. 查询缓存和缓存层
  • 使用查询缓存或缓存层,如Memcached或Redis,以减轻数据库服务器的负载。
  1. 监控和日志分析
  • 使用监控工具和日志分析来跟踪数据库性能,及时发现并解决问题。
  1. SQL优化器提示
  • 使用SQL_HINTS来指导MySQL优化器执行查询。这可以通过索引提示、查询缓存提示等来实现。
  1. 连接池管理
  • 使用连接池来管理数据库连接,以减少连接开销和提高并发性能。
  1. 优化表结构
  • 考虑使用合适的数据类型、避免NULL值、规范化数据,以减少数据存储和提高查询性能。
  1. 备份和恢复策略
  • 建立有效的备份和恢复策略,以防止数据丢失或硬件故障。

4、什么查询条件的索引会失效

  1. 使用函数或表达式:如果在查询条件中使用了函数或表达式,通常会导致索引失效。例如,WHERE YEAR(date_column) = 2023,这会使索引失效,因为数据库无法直接使用索引来查找年份。
  2. 对索引列进行了类型转换:如果查询中对索引列进行了类型转换,比如将整数列强制转换为字符列,索引可能会失效。
  3. 使用通配符在索引列开头进行模糊搜索:当在索引列的开头使用通配符(如LIKE '%keyword')时,索引通常不会被有效使用。通配符在开头会使索引失效,因为数据库无法快速定位匹配项。
  4. 使用NOT操作符:使用NOT操作符来否定查询条件时,索引可能会失效。例如,WHERE NOT column_name = 'value'
  5. 使用OR操作符:当使用OR操作符连接多个条件时,如果其中一个条件无法使用索引,整个查询可能会导致索引失效。
  6. 使用不等于操作符(!=或<>):在某些情况下,使用不等于操作符进行过滤可能导致索引失效,特别是当不等于操作符涵盖大部分数据时。
  7. 数据分布不均匀:如果数据在索引列上分布不均匀,即某些值出现频率非常高,而其他值很少出现,那么对于频繁出现的值,索引可能不会被使用。
  8. 索引列参与了计算:如果查询中的条件涉及到对索引列进行计算,索引可能会失效。例如,WHERE column1 * 2 = 10
  9. 表太小:对于非常小的表,使用索引可能不会提供明显的性能提升,因为数据库引擎可能选择全表扫描来更快地获取数据。
  10. 数据类型不匹配:如果查询条件中的数据类型与索引列的数据类型不匹配,索引可能会失效。

5、说一下mysql的索引分类

  1. B树索引(B-tree Index)
  • B树索引是MySQL中最常见的索引类型,也是默认的索引类型。
  • 它适用于等值查询、范围查询和排序操作。
  • B树索引适用于大多数数据类型,包括数字、字符串和日期等。
  • InnoDB存储引擎的默认索引类型是B树索引。
  1. 哈希索引(Hash Index)
  • 哈希索引适用于等值查询,即只能用于精确匹配。
  • 它在特定场景下可以提供非常快的查询速度,但不适用于范围查询或排序操作。
  • 哈希索引通常用于Memory存储引擎中,不支持持久性存储。
  1. 全文索引(Full-Text Index)
  • 全文索引适用于文本数据,用于实现全文搜索。
  • 它可以处理包含单词的文本字段,并支持高级搜索和排序功能。
  • MyISAM和InnoDB存储引擎都支持全文索引,但MyISAM的全文索引功能更为强大。
  1. 空间索引(Spatial Index)
  • 空间索引适用于处理地理空间数据,如坐标点、线、面等。
  • 它支持空间几何操作,如包含、相交、距离计算等。
  • MySQL使用R-tree索引来实现空间索引,支持InnoDB和MyISAM存储引擎。
  1. 前缀索引(Prefix Index)
  • 前缀索引是对列的前N个字符创建的索引,而不是整个列。
  • 它可以用于减小索引的大小和提高查询性能,但可能会牺牲精确性。
  • 前缀索引通常用于处理较长的文本列。
  1. 复合索引(Composite Index)
  • 复合索引是将多个列组合到一个索引中,以支持多列查询。
  • 它可以提高多列条件查询的性能,但要谨慎设计,以确保最佳的性能。
  • 复合索引的顺序和选择哪些列非常重要。
  1. 唯一索引(Unique Index)
  • 唯一索引确保索引列中的值是唯一的,不允许重复值。
  • 唯一索引可用于实现主键或唯一性约束。
  • 在插入或更新数据时,MySQL会检查唯一索引以确保数据的唯一性。
  1. 主键索引(Primary Key Index)
  • 主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行。
  • 每个表只能有一个主键索引,通常与主键列一起定义。
  • 主键索引是表的物理排序顺序,因此查询主键列通常非常高效。

6、列举几个linux的使用命令

  1. ls:列出当前目录中的文件和子目录。
ls
  1. pwd:显示当前工作目录的路径。
pwd
  1. cd:更改当前目录。
cd /path/to/directory
  1. mkdir:创建新目录。
mkdir new_directory
  1. touch:创建新文件或更新文件的时间戳。
touch filename
  1. cp:复制文件或目录。
cp source_file destination
  1. mv:移动文件或重命名文件。
mv old_name new_name
  1. rm:删除文件或目录。
rm filename
  1. cat:显示文件内容。
cat filename
  1. less:逐页查看文件内容。
less filename
  1. head:显示文件的前几行。
head -n 10 filename
  1. tail:显示文件的最后几行。
tail -n 10 filename
  1. grep:在文件中搜索文本模式。
grep pattern filename
  1. ps:显示正在运行的进程。
ps aux
  1. kill:终止运行中的进程。
kill process_id
  1. ifconfig:显示网络接口信息。
ifconfig
  1. ping:测试与远程主机的网络连接。
ping remote_host
  1. ssh:通过SSH协议远程登录到另一台计算机。
ssh username@hostname
  1. top:实时显示系统的资源使用情况和运行中的进程。
top
  1. tar:创建或解压归档文件(通常是.tar.gz或.tar.bz2文件)。
tar -zxvf archive.tar.gz

7、linux中 > 和 >> 的区别,常用查看日志命令

在Linux中,>>> 是用于重定向输出的特殊符号,它们有以下区别:

  1. >
  • > 符号用于将命令的输出重定向到一个文件,如果目标文件已存在,则会覆盖原有内容。
  • 例如:command > file 将命令的输出写入到名为 file 的文件中。如果文件不存在,则会创建一个新文件,如果文件已存在,则会清空原有内容并写入新的输出。

示例:

echo "Hello, World!" > output.txt

这会创建一个新文件 output.txt,并将字符串 “Hello, World!” 写入其中。

  1. >>
  • >> 符号也用于将命令的输出重定向到一个文件,但与 > 不同的是,如果目标文件已存在,>> 会将新的输出追加到现有内容的后面。
  • 例如:command >> file 将命令的输出追加到名为 file 的文件的末尾。

示例:

echo "Appended text." >> output.txt

这会在已存在的 output.txt 文件末尾追加文本 “Appended text.”。

常用查看日志的命令:

  1. cat
  • cat 命令用于显示文件的内容。可以用于查看小型文件的内容。

示例:

cat filename
  1. less
  • less 是一个分页查看器,可以用于逐页查看大型文件,同时提供搜索和浏览功能。

示例:

less filename

less 中,可以使用箭头键上下滚动,按 / 键进行搜索,按 q 键退出。

  1. tail
  • tail 命令用于显示文件的末尾几行,默认情况下显示最后10行。

示例:

tail filenameb

可以使用 -n 选项指定显示的行数,例如 tail -n 20 filename 会显示最后的20行。

  1. head
  • head 命令用于显示文件的开头几行,默认情况下显示前10行。

示例:

head filename

可以使用 -n 选项指定显示的行数,例如 head -n 20 filename 会显示前20行。

8、说一下你对scp命令的理解

SCP(Secure Copy Protocol)是一个用于在不同系统之间安全复制文件和目录的命令行工具。它建立在SSH协议之上,提供了数据加密和认证,因此数据传输是安全的。

SCP命令的基本语法如下:

scp [options] source destination
  • source:要复制的文件或目录的源路径。可以是本地文件系统路径或远程主机上的文件路径。如果是远程路径,通常以user@host:source_path的形式指定,其中user是远程主机上的用户名,host是远程主机的主机名或IP地址,source_path是源文件或目录的路径。
  • destination:复制的目标路径。同样,可以是本地文件系统路径或远程主机上的路径。如果是远程路径,也以user@host:destination_path的形式指定。

常用的SCP选项包括:

  • -r:递归复制,用于复制目录及其内容。
  • -P:指定远程SSH端口号。
  • -i:指定用于身份验证的私钥文件。
  • -v:启用详细的输出,用于调试目的。

SCP的一些常见用途包括:

  1. 从本地系统向远程主机复制文件或目录
scp local_file user@remote_host:remote_path
  1. 从远程主机复制文件或目录到本地系统
scp user@remote_host:remote_file local_path
  1. 在远程主机之间复制文件或目录
scp user1@remote_host1:source_path user2@remote_host2:destination_path
  1. 使用不同的SSH端口号
scp -P 2222 local_file user@remote_host:remote_path

9、说一下你对tar命令的理解

tar(tape archive)是一个常用的命令行工具,用于在Unix和Linux系统中创建、查看、提取和压缩文件和目录的归档文件。tar命令通常用于将多个文件和目录打包成单个文件,以便进行备份、传输或存档。以下是我对tar命令的理解:

tar命令的基本语法如下:

tar [选项] [目标] []

常见的tar选项包括:

  • -c:创建新的归档文件。
  • -x:从归档文件中提取文件。
  • -t:列出归档文件中的文件列表。
  • -f:指定归档文件的名称。
  • -v:显示详细信息,通常用于显示提取或创建的文件列表。
  • -z:使用gzip进行压缩/解压缩。
  • -j:使用bzip2进行压缩/解压缩。
  • -C:在提取文件时指定目标目录。

一些常见的tar命令示例:

  1. 创建归档文件
tar -cvf archive.tar file1 file2 directory1

这将创建名为archive.tar的归档文件,包含了file1file2directory1

  1. 提取归档文件
tar -xvf archive.tar

这将从archive.tar中提取所有文件和目录。

  1. 查看归档文件中的内容
tar -tvf archive.tar

这将列出archive.tar中的文件列表。

  1. 使用gzip压缩
tar -czvf archive.tar.gz directory1

这将使用gzip对directory1进行压缩,并创建名为archive.tar.gz的归档文件。

  1. 解压缩gzip压缩的归档文件
tar -xzvf archive.tar.gz

这将解压缩archive.tar.gz并提取其中的文件。

tar命令非常有用,可以用于备份、迁移文件、创建软件分发包等任务。它是Unix和Linux系统中的标准工具之一,具有丰富的选项和功能,可根据需要进行配置。要了解更多详细信息,可以查看tar命令的手册页,使用man tar命令。

你可能感兴趣的:(计算机面试题,面试,mysql,数据库,linux)