数据分析师是当下热门的职业之一,越来越多的人希望能够从事这个领域。然而,想要成为一名数据分析师并非易事,除了需要扎实的技能外,还需要应对众多面试题目。接下来,本文将为大家介绍常见的数据分析师面试题目。
1、如何提升oracle的查找速率
● 创建索引:尽量使用where或order by 后面的字段创建索引。
● 尽量避免全表查询:可以添加where条件,但是要尽量避免在where条件中使用!=操作符;尽量避免在where条件中使用or连接条件;尽量避免在where条件中的字段使用表达式;尽量避免在where条件的字段使用函数;尽量避免在where条件中对字段进行null判断。
● 对表中数据进行分区:好处是查询数据时,只检索数据所在的分区即可,可以提升查询速度;同时可以增强可用性,当某个分区存在故障时,其他分区的数据仍可以正常使用;维护也方便,需要修复数据时,只修复故障分区即可;还可以均衡I/o,可以把不同的分区映射到磁盘以平衡I/O,改善系统性能。
● 尽量避免使用select * from表,使用字段列表代替*,不使用的字段不查询。
● 尽量避免大事务操作,提高系统并发能力。
● 尽量避免使用游标,当使用游标操作数据超过1万行时,应考虑改写。
● 优化关键字:当外表数据量大,内表数据量小时,使用in关键字;当外表数据量小,内表数据量大时,使用exists关键字。
2、请介绍一下oracle三大范式
● 第一范式1NF:数据库表中的字段都是单一属性,不可再分的。1NF是关系模式应具备的最基本的条件,如果数据库设计不能满足1NF,就不能称之为关系型数据库。也就是说,只要是关系型数据库,一定满足1NF。
● 第二范式2NF:在1NF的基础上,消除非主属性对主属性的部分函数依赖,需要确保数据库表中的每一列都和主键相关,而不是和主键的某一部分相关(针对联合主键而言)。
● 第三范式3NF:在2NF的基础上,任何非主属性不依赖于其它非主属性(在2NF的基础上,消除传递依赖)。需要确保数据库表的每一列都和主键直接相关,而不是间接相关。
3、请列举3种结构化查询语言,并说明使用方法
DDL:Data Definition Language数据定义语言,用于创建、删除、修改数据库或表等对象。
Create:创建数据库或表等对象。
Drop:删除数据库或表等对象。
Alter:修改数据库或表等对象。
DML:Data Manipulation Language 数据操作语言,查询或修改表中的记录。
Select:查询表中的数据。
Insert:向表中插入数据。
Update:更新表中的数据。
Delete:删除表中的数据。
DCL:Data Control Language 数据控制语言,确认或取消对数据库中的数据进行变更的操作,以及赋予或收回用户的操作数据库的权限。
Commit:确认对数据库中的数据进行变更。
Rollback:取消对数据库中的数据进行变更。
Grant:赋予用户操作权限。
Revoke:取消用户的操作权限。
4、什么是索引?有什么作用?他的优点和缺点有哪些?
● 索引是一种快速查询表中内容的机制,类似于新华字典的目录。
● 索引运用在表中某些字段上,但存储时,独立于表之外。
● 索引加快数据库的检索速度
● 索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引)
● 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
● 索引需要占用物理和数据空间
5、什么是事务?事务的特性有哪些?
● 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性:原子性、一致性、隔离性和持久性。
● 原子性(Atomic):事务中的各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
● 一致性(Consistent):事务结束后系统状态是一样的。在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
● 隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态。数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
● 持久性(Durable):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
6、事务的隔离级别有哪些?
● 读未提交(Read uncommitted):另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据脏读。
● 读已提交(Read committed):事务能够看到的数据都是其他事务已经提交的修改,也就是保证不会看到任何中间性状态,当然脏读也不会出现。
● 可重复读(Repeatable reads):在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象
● 串行化(Serializable):并发事务之间是串行化的,通常意味着读取需要获取共享读锁,更新需要获取排他写锁,并发的事务,就像事务是在一个个按照顺序执行一样。这是最高的隔离级别
7、什么是存储过程?用什么来调用?优点有哪些?
● 存储过程是一个预编译的 SQL 语句, 使用存储过程比单纯 SQL 语句执行要快。
● 可以用一个命令对象来调用存储过程,也可以供外部程序调用,比如:java 程序。
● 能够将代码封装起来保存在数据库之中;让编程语言进行调用;存储过程是一个预编译的代码块,执行效率比较高;可以降低网络通信量,提高通信速率。
8、什么是视图?视图的应用场景有哪些?什么是游标?
● 视图是一种基于数据表的虚表,通常是由一个表或者多个表的行或列的子集组成,具有和物理表相同的功能。
● 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句;视图是向用户提供基表数据的另一种表现形式;视图没有存储真正的数据,真正的数据还是存储在基表中;程序员虽然操作的是视图,但最终视图还会转成操作基表;一个基表可以有0个或多个视图。
● 游标就是指向一个结果集的记录定位器(指示器),用于定位记录。
9、delete、drop、truncate区别
● Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行或者撤销删除操作。会触发这个表上所有的delete触发器
● Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小;
● Drop命令从数据库中删除表,包括所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。
10、什么是逻辑备份?什么是物理备份?有什么不同之处?
● 物理备份:物理备份是磁盘块为基本单位将数据从主机复制到备机。是数据库对象级备份,备份内容是表、索引、存储过程等数据库对象。
● 逻辑备份:逻辑备份是以文件为基本单位将数据从主机复制到备机。是数据库文件级备份,备份内容是操作系统上数据库文件。不同之处:
● 高效性:物理备份是位于文件系统之下和硬件磁盘驱动之上。增加了一个软驱动,它忽略了文件和结构,处理过程简洁,开销较少,备份的性能很高;逻辑备份是基于文件级别的备份,由于每个文件都是由不同的逻辑块组成。一个文件的不同逻辑块极有可能存储在分散的磁盘块上,在对文件进行备份时需要额外的查找操作。这些额外的操作增加了磁盘的开销,降低了磁盘的吞吐率。所以,跟物理备份相比较,备份性能较差。当文件出现改动的时候,物理备份不需要对整个文件做备份,只是会去做改动部分的备份,有效的提高了备份效率,节省了备份时间;逻辑备份需将整个文件备份,会降低备份效率,增加磁盘开销和备份时间。
● 实时性:物理备份可以做到高效的实时备份,因为在每次主机往磁盘写数据的时候,都需要同时将数据写入到备机,这种写入操作都是基于磁盘扇区的,所以很快就能被识别;逻辑备份是很难做到实时备份的,因为它的每次修改都是基于文件的,而文件的哪部分被修改,系统很难实时捕获到,所以备份的时候需要把整个文件读一遍再发到备机 ,实时的效率不是很高。
● 支持度:物理备份是在文件系统之下对数据进行复制,所以它不受文件系统限制,可以支持各种文件系统包括RAW分区。逻辑备份是以单个文件为单位对数据进行复制,所以它受文件系统限制,仅能对部分支持的文件系统做备份,不支持RAW分区。
11、关系型数据库和非关系型数据库的区别?关系型数据库的优点?
容易理解,因为它采用了关系模型来组织数据。
可以保持数据的一致性。
数据更新的开销比较小。
支持复杂查询(带 where 子句的查询)非关系型数据库的优点:
无需经过 SQL 层的解析,读写效率高。
基于键值对,读写性能很高,易于扩展
可以支持多种类型数据的存储,如图片,文档等等。
高扩展性(可分为内存性数据库以及文档型数据库,比如 Redis,MongoDB,HBase 等,适合场景:数据量大高可用的日志系统/地理位置存储系统)
12、请简述MySQL、oracle的区别?
Oracle数据库产品是闭源同时也是收费的,MySQL是开源的项目(免费);
Oracle是大型数据库,MySQL是中小型数据库;
Oracle可以设置用户权限、访问权限、读写权限等,MySQL没有;
Oracle有表空间的概念,MySQL没有;
Oracle默认不自动提交,需要用户手动提交。MySQL默认是自动提交。
Oracle逻辑备份时不锁定数据,且备份的数据是一致的。MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常使用。
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等;MySQL的诊断调优方法较少,主要有慢查询日志。
Oracle容量无限,根据配置决定;而MySQL使用MyISAM存储引擎,最大表尺寸为65536TB。MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定。
Oracle在Linux下的性能,在少量数据时速度低于MySQL,在千万级时速度快于MySQL。
Oracle全面,完整,稳定,但一般数据量大,对硬件要求较高 ;而MySQL使用CPU和内存极少,性能很高,但扩展性较差。
13、请列举几种表连接方式,并说明区别
● 内连接:只有两个元素表相匹配的才能在结果集中显示。
● 左连接:以左表为主,筛选完全匹配的行之外还会把左表中没有匹配的行也筛选,找不到匹配的数据用null填充
● 右连接:以右表为主,筛选完全匹配的行之外还会把有表中没有匹配的行也筛选,找不到匹配的数据用null填充
● 全连接:连接的表中不匹配的数据全部会显示出来。
● 交叉连接:笛卡尔效应,显示的结果是链接表数的乘积。
14、数据库的乐观锁和悲观锁是什么?
● 确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,乐观锁和悲观锁是并发控制主要采用的技术手段。
● 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作.在查询数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制。
● 执行select xxx for update操作时,数据会被锁定,只有执行commit或rollback才会释放.执行select xxx for update nowait操作时,数据也会被锁定,其他人访问时或返回ORA-00054错误,内容是资源正忙,需要采取相应的业务措施进行处理。
● 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定.实现方式:使用version版本或者时间戳。
● 在数据取得的时候把整个数据都copy到应用中,在进行提交的时候比对当前数据库中的数据和开始的时候更新前取得的数据。当发现两个数据一模一样以后,就表示没有冲突可以提交,否则就是并发冲突,需要去用业务逻辑进行解决。
● 新增一个Table的Column,这个column是采用timestamp型,存储数据最后更新的时间。这种Timestamp的数据精度在Oracle的时间类型中是最高的,精确到微秒,是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突。
15、索引的三种常见底层数据结构和优缺点?
● 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。因为是使用hash算法对key求值取余得到其在数组的存储位置。所以哈希表只适用于等值查询的场景,不适合范围查询。
● 有序数组在范围查询中优势非常明显,可以采用二分法,能大大缩短查询时间,尤其是数据量比较大时,时间复杂度是 O(log(N))。如果往中间插入一条数据,就需要把后续数组都往后移,这个时候有序数组的成本就很高了。所以有序数组索引只适用于静态存储引擎,等值和范围查询性能好,但更新数据成本高。
● N 叉树由于读写上的性能优点以及适配磁盘访问模式以及广泛应用在数据库引擎中。根据叶子节点的内容,索引类型分为主键索引和非主键索引。
● 主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。如果查询条件是主键就能获取整行数据。
● 非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。如果查询条件是非主键,那么先查非主键索引得到主键id,根据主键Id再查主键索引得到整行数据。
更多数据分析相关推荐: