zoukankan      html  css  js  c++  java
  • 22--面试手册

    目录

    1、你接触过哪几种数据库软件,各自的优缺点是什么?

    1、关系型数据库-MySQL
    在不同的引擎上有不同的存储方式。
    查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
    开源数据库的份额在不断增加,mysql的份额也在持续增长。
    缺点就是在海量数据处理的时候效率会显著变慢。
      
    非关系型数据库MongoDB
    优势:
     1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
     2、MongoDB的高可用和集群架构拥有十分高的扩展性。
     3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
     4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
    
    劣势:
     1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
     2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
     3、MongoDB占用空间过大。
     
     非关系型数据库Redis
    Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
    redis用于存储使用较为频繁的数据到缓存中,读取速度快。
    MySQL偏向于存数据,Redis偏向于快速取数据,但Redis查询复杂的表关系时不如MySQL,所以可以把热门的数据放Redis,MySQL存基本数据。
    

    2、MySQL binlog的几种日志格式有什么区别?

    2、mysql binlog 三种格式
    mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作),对数据库查询的语句如show,select开头的语句,不会被binlog日志记录,最大的作用是用来数据增量恢复和主从库复制
    
    ROW
    ROW格式会记录每行记录修改的记录,这样可能会产生大量的日志内容,比如一条update语句修改了100条记录,那么这100条记录的修改都会被记录在binlog日志中,这样造成binlog日志量会很大,这种日志格式会占用大量的系统资源,mysql5.7和myslq8.0安装后默认就是这种格式。
    
    STATEMENT
    记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件)所以大大减少了binlog日志量,节约磁盘IO,提高性能,看上面的图解可以很好的理解row和statement 两种模式的区别。但是STATEMENT对一些特殊功能的复制效果不是很好,比如:函数、存储过程的复制。由于row是基于每一行的变化来记录的,所以不会出现类似问题
    
    MIXED
    实际上就是前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
    

    3、MySQL的存储引擎有哪几种?

    MyISAM
    
    使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件。
    
    (1)frm文件:存储表的定义数据
    
    (2)MYD文件:存放表具体记录的数据
    
    (3)MYI文件:存储索引
    
    INNODB
    InnoDB是默认的数据库存储引擎,他的主要特点有:
    
    (1)可以通过自动增长列,方法是auto_increment。
    
    (2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。
    
    (3)使用的锁粒度为行级锁,可以支持更高的并发;
    
    (4)支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。
    
    (5)配合一些热备工具可以支持在线热备份;
    
    (6)在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;
    
    Memory
    
    将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。
    (1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;
    
    (2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;
    
    (3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;
    
    (4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;
    

    4、MySQL主从复制原理是什么?

    当复制开始时,从库就会创建从库I/O线程和从库的SQL线程进行复制处理。
    
    从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。 从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
    
    从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
    

    5、MySQL中myisam和innodb的区别?

    1>.InnoDB支持事物,而MyISAM不支持事物
    2>.InnoDB支持行级锁,而MyISAM支持表级锁
    3>.InnoDB支持MVCC, 而MyISAM不支持
    4>.InnoDB支持外键,而MyISAM不支持
    5>.InnoDB不支持全文索引,而MyISAM支持。
    

    6、字段类型varchar和char的区别是什么?varchar(50)中50代表什么?

    char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
    char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节。
    varchar(50)表示最多占用50个字符。
    

    7、关系型数据库和非关系型数据库的区别?你都用过哪些?

    关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
    优点:
    1、易于维护:都是使用表结构,格式一致;
    2、使用方便:SQL语言通用,可用于复杂查询;
    3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
    缺点:
    1、读写性能比较差,尤其是海量数据的高效率读写;
    2、固定的表结构,灵活度稍欠;
    3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
    常用的关系型数据库有Oracle、mysql、sqlserver、postgresql
    
    非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
    优点:
    1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
    2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
    3、高扩展性;
    4、成本低:nosql数据库部署简单,基本都是开源软件。
    非关系型数据库常见的软件有Redis、mongdb
    

    8、MySQL数据库备份有哪几种备份方式?如何选择?

    在之前工作中,经常用到的两种备份方式是mysqldump以及xtrabackup
    mysqldump是逻辑备份,备份效率较低,数据量较少的情况下可以采用mysqldump的备份方式
    xtrabackup是物理备份,备份效率高,切支持在线热备,缺点是只支持innodb引擎。数据量较大的情况下可使用xtrabackup的方式进行备份。
    

    9、之前公司的数据备份采用什么样的备份方案?如何实施?

    之前工作中公司业务量较少,且生产环境是阿里云的RDS,因此采用阿里云RDS的备份策略以及本地备份结合的方式。
    备份策略是每天凌晨两点进行一次全量备份,本地备份则是通过脚本以及计划任务,同样是每天进行一次全备,并且每天的备份数据进行打包压缩,并保存三个月。
    

    10、实际使用中使用过哪几种数据恢复方式?

    实际工作中主库的宕机故障没有发生过,但是有一些临时需求,开发环境需要导入生产环境的数据进行调试,使用全量结合增量恢复的方式,将备份的全量数据以及增量数据通过xtrabackup恢复到数据库中。
    

    11、什么是数据库事务?

    事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
    一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
    事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同
    

    12、数据库事务的特性是什么?

    事务四大特征(ACID)
    原子性(A):事务是最小单位,不可再分
    一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
    隔离性(I):事务A和事务B之间具有隔离性
    持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
    

    13、数据库的部署环境以及部署方式?

    之前工作中生产环境的数据库都是采用阿里云的RDS服务,采用的是阿里云企业版的rds产品。
    开发环境是在本地服务器部署的,基于linux操作系统部署的。
    部署过程中采用的是源码编译安装的方式。
    

    14、如果单表数据量过大,有什么优化方式?

    1)优化索引
    2)进行表的切割。根据实际表的字段采用水平或者垂直切割的方式,对单表进行分表操作。
    

    15、针对数据库权限,你们是如何管理的?

    对于生产环境的数据库,程序调用需要使用的账号,给予非root用户的较高的权限。
    开发人员、数据分析人员需要用到的查询生产数据的账号,给予select权限。
    生产环境中相关的update、insert等的数据修复或者新增数据工作都是由运维采用非root的高权限账号进行。
    

    16、详细描述SQL语句分类及对应代表性关键字。

    DDL(Data Definition Language)---数据库定义语言(create、alter、drop),管理基础数据库,例如:库,表  
    DCL(Data Control Language)---数据控制语言(grant、revoke、commit、rollback),用户授权,权限回收,数据提交回滚等    
    DML(Data Manipulation Language)---数据操作语言(insert、delete、update),针对数据库里的表,记录 
    DQL:Data Query Language --数据查询语言(SELECT)
    

    17、MySQL有哪些日志,分别是什么用处?

    mysql日志一般分为5种
    错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)
    二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)
    查询日志:-log (记录建立的客户端连接和执行的语句)
    慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)
    更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL5.1中不再使用)
    

    18、MySQL服务器因断电、异常关闭等导致表损坏,无法读取表数据的时候,如何进行修复?

    如果MySQL服务器突然断电、异常关闭,可能会导致表损坏,无法读取表数据。这时就可以用到MySQL自带的两个工具进行修复,myisamchk和mysqlcheck。
    myisamchk:只能修复myisam表,需要停止数据库
    
    常用选项:
    -f –force    强制修复,覆盖老的临时文件,一般不使用
    -r –recover  恢复模式
    -q –quik     快速恢复
    -a –analyze  分析表
    -o –safe-recover 老的恢复模式,如果-r无法修复,可以使用此参数试试
    -F –fast     只检查没有正常关闭的表
    
    快速修复xxx数据库:
    # cd /var/lib/mysql/xxx
    # myisamchk -r -q *.MYI
    
    mysqlcheck:myisam和innodb表都可以用,不需要停止数据库,如修复单个表,可在数据库后面添加表名,以空格分割
    常用参数:
    -a  –all-databases  检查所有的库
    -r  –repair   修复表
    -c  –check    检查表,默认选项
    -a  –analyze  分析表
    -o  –optimize 优化表
    -q  –quik   最快检查或修复表
    -F  –fast   只检查没有正常关闭的表
    
    快速修复xxx数据库:
    mysqlcheck -r -q -uroot -pxxx xxx
    

    19、MySQL数据库中出现中文乱码是什么原因?如何解决?

    中文乱码的问题通常是由于没有设定默认字符集引起的,在mysql命令行中设置全局默认的字符集为UTF8。
    

    20、事务的隔离级别?

    事务有4 个隔离级别,分别是:
        读未提交(read uncommit)
        读已提交(read commit)
        可重复读(repeatable read)
        和序列化(serializable)。
    

    21、MySQL主从环境部署流程的重点是什么?

    1)主库和从库需要设置不同的server-id。
    2)主库需要开启binlog日志并确定准确的binlog起始信息。
    3)从库在建立主从关系时要指定正确的host、port、user、password、binglog日志信息。
    

    22、nosql指什么?

    nosql是所有非关系型数据库的统称
    

    23、用过什么监控软件?

    在之前工作中一直使用的是zabbix监控软件。
    

    24、常用的监控软件有哪些特点?

    常见的监控软件有:
    • Cacti:是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。
    • Zabbix:Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案。可以用来监控设备、服务等可用性和性能。
    • Open-falcon:open-falcon是一款用golang和python写的监控系统,由小米启动这个项目。
    • Prometheus:Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
    

    25、为什么要使用监控软件?最终要达到的目的是什么?

    1.对系统不间断实时监控
    2.实时反馈系统当前状态
    3.保证服务可靠性安全性
    4.保证业务持续稳定运行
    5.及时发现和解决问题。
    

    26、zabbix有哪些优势?

    Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案。可以用来监控设备、服务等可用性和性能。其主要优势有:
    • 自由开放源代码产品,可以对其进行任意修改和二次开发,采用GPL协议;
    • 安装和配置简单;
    • 搭建环境简单,基于开源软件构建平台;
    • 完全支持Linux、Unix、Windows、AIX、BSD等平台,采用C语言编码,系统占用小,数据采集性能和速度非常快;
    • 数据采集持久存储到数据库,便于对监控数据的二次分析;
    • 非常丰富的扩展能力,轻松实现自定义监控项和实现数据采集。
    

    27、使用zabbix主要监控哪些内容?

    硬件监控、web监控、MySQL监控、服务监控、日志监控
    

    28、zabbix架构体系有哪些?

    Zabbix体系相对清晰,其主要组件有:
    • Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行。
    • Database Storage:专用于存储所有配置信息,以及有zabbix收集的数据。
    • Web interface(frontend):zabbix的GUI接口,通常与server运行在同一台机器上。
    • Proxy:可选组件,常用于分布式监控环境中,代理Server收集部分被监控数据并统一发往Server端。
    • Agent:部署在被监控主机上,负责收集本地数据并发往Server端或者Proxy端。
    
  • 相关阅读:
    第六周 组合数据类型
    第五周 函数和代码复用
    第四周 程序的控制结构
    第三周 Python基本数据类型
    python库
    sublime text3自定义设置及快捷键大全
    Sublime Text3插件安装教程
    Linux 标准目录结构
    快学Scala-10--List 和Set
    快学Scala-09--模式匹配
  • 原文地址:https://www.cnblogs.com/caodan01/p/15060156.html
Copyright © 2011-2022 走看看