面试的一些问题

面试的一些问题

一、mysql相关

详细参照这里

select进来经历了什么

连接器(管理连接,权限校验)->查询缓存(命中直接返回结构)->分析器(词法语法分析)->优化器(执行计划,索引选择)->执行器(操作引擎返回结果)->存储引擎

隔离级别

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。 目前已有间隙锁和读快照的形式防止幻读?
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

事务特性

  • 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  • 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  • 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  • 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

设计原则

如何防止sql注入

使用MYSQLI或PDO预处理,参数绑定

二、redis相关

缓存三大问题

详情点击此处

  • 缓存穿透:是指用户在查找一个数据时查找了一个根本不存在的数据。
    可以将键设置空值,redis加上过滤的机制,把不存在的key过滤掉(布隆过滤器),如果数据库加上相应数据,应及时补全redis记录的信息
  • 缓存击穿:是指缓存中没有但数据库中有的数据,由于出现大量的并发请求,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。(针对同一key
    当未命中缓存时,采用分布式锁去查询数据库并写入缓存(保障只有一个去数据库查该key)
  • 缓存雪崩:是指缓存中数据大批量到过期时间,引发的大部分缓存突然同时不可用,而查询数据量巨大,引起数据库压力过大甚至宕机的情况。
    随机过期时间

数据类型

  • string 字符串(可以为整形、浮点型和字符串,统称为元素)
  • list 列表(实现队列,元素不唯一,先入先出原则)
  • set 集合(各不相同的元素)
  • hash hash散列值(hash的key必须是唯一的)
  • sort set 有序集合

数据结构

详情见

  • 动态字符串SDS
  • 双向链表
  • ziplist压缩列表
  • 哈希表
  • intset整数集合
  • 跳表

为什么是单线程

三、php相关

单例

接口与抽象类

MVC

laraval框架,

1.依赖注入
2.一个请求进来经历了什么

swoole

1.生命周期

四、服务

1.从输入URL回车之后发生了什么

这里

2.如何定位500或502错误

五、整体工作相关

工作流程

代码规范

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页