php面试题

php相关:

  1 超卖现象

  2 并发

  3 优化

    1 如果一个页面数据太多 分接口返回 这样既可以达到解耦效果 还可以增加反应速度

  4 in_array 的时间复杂度是 O(n)  isset 的时间复杂度是O(1)

 

 

mysql相关:

  1 索引相关文章: https://www.hollischuang.com/archives/6172  https://www.hollischuang.com/archives/6192  https://www.cnblogs.com/hollischuang/p/14749826.html

  2 锁

  3 存储过程

  4 执行顺序

  5 数据库备份

  6 读写分离

  7 主从复制

  8 事务相关

  9 优化

  10 什么是事务,事务的特性(ACID),隔离级别   

    什么是事务
      是由有限的数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行
    事务的特性
      事务4大特性(ACID) :原子性、一致性、隔离性、持久性
      原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样
      一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
      隔离性 (Isolation):事务的执行不受其他事务的干扰,当数据库被多个客户端并发访问时,隔离它们的操作,防止出现:脏读、幻读、不可重复读
      持久性 (Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失
    事务的隔离级别
      隔离性要考虑多个线程操作同一个资源造成的多线程并发安全问题
      加锁可以非常完美的保证隔离性,但是这会造成数据库性能的大大下降
      如果两个事务并发的修改——必须隔离开
      如果两个事务并发的查询——完全不用隔离
      如果一个事务修改,另一个事务查询——脏读、不可重复读、幻读

 

    脏读 一个事务读取到另一个事务未提交的数据 一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。    这种现象被称为脏读
    不可重复读 一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,我们称之为不可重复读
    幻读 一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读
    注 脏读是读取到了没有提交的数据
    不可重复读是一个事务先后读取同一条数据 发现数据不一致
    幻读是一个事务根据相同条件查询数据查询结果不一致 针对多条数据

    Read uncommitted 未提交读 可以读取没有提交的事务 不能防止
    Read committed 提交读 可以读取已经提交的事务 只能防止脏读
    repeatable read 重复读 mysql默认隔离级别 可以防止 脏读 不可重复读 不能防止幻读
    serializable 串行化 可以防止脏读 不可重复读 幻读 只是性能比较低

    

    分布式事务xa

    事务嵌套

 

  11 使用过exists吗 它与 in 的区别是什么 怎么选择使用它们

    这篇文章写的真不错: https://segmentfault.com/a/1190000008709410

    

 

 

     

 

     

 

    

 

 

 

 

 

Redis相关:

  1 什么是缓存穿透:请求不存在的数据,从图中我们可以看到对同一个数据的请求1会先去访问缓存,但是因为数据不存在,所以缓存里肯定没有,那么就落到DB去了,对同一个数据的请求2、请求3也同样会透过缓存落到DB去,这样当大量请求不存在的数据时DB压力就会特别大

  2 什么是缓存击穿:热点数据的过期,因为是热点数据,所以一旦过期可能就会有大量对该热点数据的请求同时过来,这时如果所有请求在缓存里都找不到数据,如果同时落到DB去的话,那么DB就会瞬间承受巨大的压力,甚至直接卡死

  3 什么是缓存雪崩:大量同时加载的缓存有相同的过期时间,在过期时间到达的时候出现短时间内大量缓存过期,这样就会让很多请求同时落到DB去,从而使DB压力激增,甚至卡死

 

  4 什么是redis
  非关系型数据库,
  redis 数据类型
    key-value: 字符串数据类型的相关命令用于管理 redis 字符串值
      set get del
    哈希: 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象
    列表:简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
      lpush
    集合: String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
      添加成员 sadd key member
      有序集合 :string 类型元素的集合,且不允许重复的成员
      添加成员 zadd key score1 member1 score2 member2
      移除成员 zrem key member1
      获取成员索引 zrank key member
  redis 持久化
    https://baijiahao.baidu.com/s?id=1654694618189745916&wfr=spider&for=pc
    RDB快照:RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式
    触发机制:save、bgsave、自动化
      save : 该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止
      bgsave触发方式 : Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求 具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令
      自动触发 : “save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave
  AOF机制:redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录
    触发机制:
      每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
      每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
      不同no:从不同步
  redis 使用场景
    热点数据的缓存
    队列
  redis 与 memcache mongodb 区别
    https://www.cnblogs.com/tuyile006/p/6382062.html
    memcache 缓存 多核
    mongodb 是一种文档性的数据库 最接近关系型数据库的非关系型数据库

 

posted @ 2021-05-10 14:18  包子心的土豆  阅读(67)  评论(0编辑  收藏  举报