• 面试题整理


    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相关

    消息队列相关

    网络协议相关

    进程相关

  • 相关阅读:
    source命令
    bash中单引号与双引号的总结
    鸟哥的linux私房菜学习笔记3
    鸟哥的linux私房菜学习笔记2
    /usr/sbin/atd 和 /etc/init.d/atd有什么区别
    Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较
    服务器本机不能登陆的解决
    有用的博客
    推荐几个好用的PHP集成开发环境
    ANDROID开发笔记(二)
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/14806919.html
Copyright © 2020-2023  润新知