面试题整理

mysql相关

1,存储引擎与底层实现

 Mysql 底层数据引擎以插件形式设计,最常见的是 Innodb 引擎和 Myisam 引擎,用户可以根据个人需求选择不同的引擎作为 Mysql 数据表的底层引擎。我们刚分析了,B+树作为 Mysql 的索引的数据结构非常合适,但是数据和索引到底怎么组织起来也是需要一番设计,设计理念的不同也导致了 Innodb 和 Myisam 的出现,各自呈现独特的性能。

MyISAM 引擎的底层实现(非聚集索引方式)

MyISAM 用的是非聚集索引方式,即数据和索引落在不同的两个文件上。MyISAM 在建表时以主键作为 KEY 来建立主索引 B+树,树的叶子节点存的是对应数据的物理地址。我们拿到这个物理地址后,就可以到 MyISAM 数据文件中直接定位到具体的数据记录了。

Innodb 引擎的底层实现(聚集索引方式)

InnoDB 是聚集索引方式,因此数据和索引都存储在同一个文件里。首先 InnoDB 会根据主键 ID 作为 KEY 建立索引 B+树,如左下图所示,而 B+树的叶子节点存储的是主键 ID 对应的数据,比如在执行 select * from user_info where id=15 这个语句时,InnoDB 就会查询这颗主键 ID 索引 B+树,找到对应的 user_name='Bob'。

这是建表的时候 InnoDB 就会自动建立好主键 ID 索引树,这也是为什么 Mysql 在建表时要求必须指定主键的原因。当我们为表里某个字段加索引时 InnoDB 会怎么建立索引树呢?比如我们要给 user_name 这个字段加索引,那么 InnoDB 就会建立 user_name 索引 B+树,节点里存的是 user_name 这个 KEY,叶子节点存储的数据的是主键 KEY。注意,叶子存储的是主键 KEY!拿到主键 KEY 后,InnoDB 才会去主键索引树里根据刚在 user_name 索引树找到的主键 KEY 查找到对应的数据。

2,最左原则于命中规则

index(a,b,c)
where a=3    只使用了a
where a=3 and b=5    使用了a,b
where a=3 and b=5 and c=4    使用了a,b,c
where b=3 or where c=4    没有使用索引
where a=3 and c=4    仅使用了a
where a=3 and b>10 and c=7    使用了a,b
where a=3 and b like 'xx%' and c=7    使用了a,b
where b=5 and c=4不可以

其实相当于创建了多个索引:key(a)、key(a,b)、key(a,b,c)

3,主备原理

过程:主服务器的bin_log写到从服务器relay_log,然后执行sql,共3个线程;

1,主服务器和从服务器都需要开启bin_log日志
主:log-bin=master-bin
从:log_bin=mysql-bin
syn_binlog = 1 
2,server-id不能一样
server-id=1
server-id=2
3,主服务器授权 grant replication slave on *.* to zs@'192.168.43.%' identified by '123456';
4,从服务器连接 change master to master_host='192.168.43.22',master_user='zs',master_password='123456',master_log_file='maste-bin.000001',master_log_pos=107;
start slave; #开启从库SQL线程 (关闭:stop slave)

4,索引的数据结构:和问题是同一个意思

b+树:innodb和myisam实现方式不一样;

hash:

5,覆盖索引

索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。
举例:
有联合索引(a,b,c),如果有如下的sql: select a,b,c from table where a=xxx and b = xxx。那么MySQL可以直接通过遍历索引取得数据,而无需读表

6,事务的特性和隔离级别

4大特性:原子性,一致性,持久性,隔离性

隔离级别:
未提交读:更新丢失:一个事务的更新覆盖了另一个事务的更新
已提价读:脏读:一个事务读取了另一个事务未提交的数据
可重复读:解决不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致
可串行化:幻读:一个事务两次读取一个范围的记录,两次读取的记录数不一致

如何设置:
set session transaction isolation level 级别标识

nginx功能模块与配置

1,反向代理的模式与写法

轮询:
server ip1;
server ip2;

权重:
server ip1 weight=1;
server ip2 weight =2;

热备
server ip1;
server ip2 backup;

hash
server ip1;
server ip2;
ip_hash;

2,压缩配置

3,资源缓存配置

4,路由转发

5,路由匹配

6,http状态码

204:成功但无内容
300:多种地址选择
301:永久重定向
302:临时重定向
400:客户端请求错误
401:身份认证
403:拒绝
405:请求方法不支持
502:网关错误 503:请求太多 504:超时

redis

参考:https://blog.csdn.net/riemann_/article/details/103689122

1,zset的数据结构

php

1,反射

2,hash_table

3,底层运行原理

4,垃圾回收机制

shell相关

消息队列相关

网络协议相关

进程相关

原文地址:https://www.cnblogs.com/tkzc2013/p/14806919.html