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

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

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

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

示例:

bash 复制代码
echo "Hello, World!" > output.txt

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

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

示例:

bash 复制代码
echo "Appended text." >> output.txt

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

常用查看日志的命令:

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

示例:

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

示例:

bash 复制代码
less filename

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

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

示例:

bash 复制代码
tail filenameb

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

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

示例:

bash 复制代码
head filename

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

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

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

SCP命令的基本语法如下:

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

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

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

tar命令的基本语法如下:

bash 复制代码
tar [选项] [目标] [源]

常见的tar选项包括:

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

一些常见的tar命令示例:

  1. 创建归档文件
bash 复制代码
tar -cvf archive.tar file1 file2 directory1

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

  1. 提取归档文件
bash 复制代码
tar -xvf archive.tar

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

  1. 查看归档文件中的内容
bash 复制代码
tar -tvf archive.tar

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

  1. 使用gzip压缩
bash 复制代码
tar -czvf archive.tar.gz directory1

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

  1. 解压缩gzip压缩的归档文件
bash 复制代码
tar -xzvf archive.tar.gz

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

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

相关推荐
好好学习啊天天向上5 分钟前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
好奇的菜鸟1 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°1 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
典学长编程2 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
wuk9982 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
DuelCode2 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理2 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
Hello.Reader3 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客4 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法4 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡