一路走来A 发表于 2018-5-14 14:36:48

四川格智java面试题

1.mysql引擎类别
MyISAM:不支持事务,表锁,不支持外键,非聚集索引,数据文件是别离的,合适少量读使用
InnoDB:支持事务,支持外键,表锁和行锁、聚集索引,数据文件是和索引绑在一同的,必需要有主键,经过主键索引效率很高。但是辅佐索引需求两次查询,先查询到主键,然后再经过主键查询到数据。
其他:NDB和Memory(表中的数据寄存在内存中)、Maria(新开发的引擎,设计目的次要是用来取代原有的MyISAM存储引擎)

2.InnoDB表锁和行列锁的区别
表锁:略
行锁:
大体两种:共享锁和排它锁
共享锁:允许事务读取一行数据。
排它锁:允许事务删除或许更新一条数据。
行锁是经过给索引上的索引项加锁来完成的
运用:由于InnoDB预设是Row-Level Lock,所以只要「明白」的指定主键,MySQL才会执行Row lock (只锁住被选取的材料例) ,否则MySQL将会执行Table Lock (将整个材料表单给锁住)。

3.mysql索引
关于innodb来说
运用上:主键索引、独一索引、普通索引、全文索引(高版本开端支持)、组合索引
原理上:b+树,自顺应hash索引,聚集索引(主键默许爲辅佐索引,假如没有主键,自动选取一个适宜的列树立,存储索引和行数据)、辅佐索引(存储所在列数据和对应聚合索引地位)
运用1:组合索引左婚配准绳
运用2:
mysql EXPLAIN 命令
id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个独一的标识符.
select_type: SELECT 查询的类型.
table: 查询的是哪个表
partitions: 婚配的分区
type: join 类型
possible_keys: 此次查询中能够选用的索引
key: 此次查询中确切运用到的索引.
ref: 哪个字段或常数与 key 一同被运用
rows: 显示此查询一共扫描了多少行. 这个是一个估量值.
filtered: 表示此查询条件所过滤的数据的百分比
extra: 额定的信息

4.索引生效罕见状况
运用函数、左婚配、like,or(必需一切的or条件都必需是独立索引),is null,等

5.事务
四大属性ACID即事务的原子性(Atomicity)、分歧性(Consistency)、隔离性(Isolation)、耐久性(Durability).。
事务隔离级别:
脏读:指一个事务读取了另外一个事务未提交的数据。
不可反复读:在一个事务内读取表中的某一行数据,屡次读取后果不同
幻读:幻读和不可反复读都是读取了另一条曾经提交的事务(这点就脏读不同),所不同的是不可反复读查询的都是同一个数据项,而幻读针对的是一批数据全体(比方数据的个数)。
数据库隔离级别:
① Serializable (串行化):可防止脏读、不可反复读、幻读的发作。
② Repeatable read (可反复读):可防止脏读、不可反复读的发作。
③ Read committed (读已提交):可防止脏读的发作。
④ Read uncommitted (读未提交):最低级别,任何状况都无法保证。

6.如何优化一条sql
第一步:了解sql业务,逻辑上能否可以优化
第二部:explain sql执行方案,目测有没有该走的索引没有走
第三部:检查有无罕见影响效率的错误,如null,列上运用函数,or不走组合索引,join之前增加join列数
第四部:添加适宜的索引
第五步:还不行,尝试限制需求(如只可以统计指定范围数据)或许其他方式完成(如定时义务定时剖析一批)
第六步:数据量超大,只可以思索分表分库等手腕了。


black105133 发表于 2018-5-14 15:07:22

{:6_268:}

wang2580 发表于 2020-12-3 12:54:22

学习
页: [1]
查看完整版本: 四川格智java面试题