💡 根据 遗忘曲线:如果没有记录和回顾,6天后便会忘记75%的内容,读书笔记正是帮助你记录和回顾的工具,不必拘泥于形式,其核心是:记录、翻看、思考

日常工作怎么优化sql?

  1. 查询必要的列;
  2. 尽量使用覆盖索引;
  3. explain查询分析调整sql语句,添加索引;
  4. 主从架构,提升读性能;
  5. 分库分表;
  6. 在高并发情况下的查询操作,可以使用缓存(如 Redis)代替数据库操作,提高并发性能;
  7. 表字段比较复杂、易变动、结构难以统一的情况下,可以考虑使用 Nosql 来代替关系数据库表存储,如 ElasticSearch、MongoDB;

redis常用的数据类型有哪些?

字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) ,范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询;

  • 字符串使用场景:缓存数据、计数器、共享session;
  • 哈希 hash使用场景:对象存储;
  • 列表使用场景:消息队列、热销榜;
  • 集合使用场景:标签、社交相关;
  • 有序集合使用场景:排行榜、延迟队列;

各数据的使用场景可参考:https://mp.weixin.qq.com/s/-3fcK4WspGk6SEsaVrdx8A

redis持久化有几种方式?

Redis 支持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程 退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

  • RDB 是一次全量备份,AOF 日志是连续的增量备份, RDB 是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。
  • AOF 以独立日志的方式记录每次写命令, 重启时再重新执行 AOF 文件中的命令达到恢复数据的目的。AOF 的主要作用 是解决了数据持久化的实时性,目前已经是 Redis 持久化的主流方式。

AOF 日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会无比漫长。所以需要定期进行 AOF 重写,给 AOF 日志进行瘦身。

常见的限流算法:

  1. 固定窗口(计数器算法);
  2. 滑动窗口;
  3. 漏桶算法;
  4. 令牌桶算法;

PHP垃圾回收机制:

https://www.php.net/manual/zh/features.gc.php

  • 变量容器在”refcount“变成0时就被销毁. 当任何关联到某个变量容器的变量离开它的作用域(比如:函数执行结束),或者对变量调用了函数 unset()时,”refcount“就会减1。
  • 由于数组元素“1”仍然指向数组本身,所以这个容器不能被清除 。因为没有另外的符号指向它,用户没有办法清除这个结构,结果就会导致内存泄漏。庆幸的是,php将在脚本执行结束时清除这个数据结构,但是在php清除之前,将耗费不少内存。

InnoDB和MyISAM的区别:

  1. InnoDB支持事务,MyISAM不支持;
  2. InnoDB支持外键,MyISAM不支持;
  3. InnoDB支持表锁、行锁,MyISAM只支持表锁;
  4. InnoDB是聚集索引,MyISAM是非聚集索引。

Mysql如何处理死锁?

当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。

  • 等待超时,可以通过参数innodb_lock_wait_timeout来设置;
  • 开启死锁检测,通过innodb_deadlock_detect=on 进行设置,那么当InnoDB 发现有死锁发生时,直接回滚其中一个事务。

如何避免死锁:降低并发、拆分逻辑。

B+tree和hash区别:

https://mp.weixin.qq.com/s/qHJiTjpvDikFcdl9SRL97Q

Mysql 有哪些日志及作用描述:

  • undo log(回滚日志),InnoDB引擎特有的日志,保证了事务的原子性;
  • redo log(重做日志),InnoDB引擎特有的日志,保证了事务的持久性;
  • binlog(归档日志),MySQL的Server层实现的,所有引擎都可以使用;

Mysql分库分表:

常见的http状态码:

[https://www.zhihu.com/search?type=content&q=HTTP%20%E7%8A%B6%E6%80%81%E7%A0%81](https://www.zhihu.com/search?type=content&q=HTTP 状态码)

301 Moved Permanently 永久性重定向
302 Found 临时性重定向
304 Not Modified 资源未修改
403 Forbidden 禁止访问
404 Not Found 找不到资源
405 Method Not Allowed 请求方法不允许
502 Bad Gateway 从远程服务器接收到了一个无效的响应
504 Gateway Timeout 响应超时

trait的理解:

为了减少单继承语言的限制,实现代码复用;