MySQL SQL执行顺序from确定查询的表,jion连接表、on对from进行过滤,where进行条件过滤,group by和having进行分组后过滤,select进行指定的列,distinct去重,排序,限制行数定表过滤-分组过滤-选列过滤。
MySQL 事务与锁 原子性:事务要么同时成功,要么同时失败,事务的原子性通过undo log日志保证一致性:业务代码要抛出报错,让数据库回滚隔离性:事务并发执行时,他们内部操作不能互相干扰持久性:事务一旦提交,对数据库的改变就是永久性的。通过redo log日志保证InnoDB引擎中的隔离机制的通过MySQL的锁和MVCC机制实现,提供四种隔离级别,越高隔离性越好,分别是读未提交(脏读)、读已提交(不可重复读)、可重复读(赃写)、串行所有事务都可以看到其他未提交事务的执行结果。是某一事务A读取到了事务B修改未提交的数据。
MySQL 分库分表 将表按照某种规则拆分成多个表。当数据量超大的时候,B-Tree索引就无法起作用了。切分原则: 把不常用或存储内容比较多的字段分到新的表中可使表存储更多数据。Innodb主索引叶子节点存储着当前行的所有信息,所以减少字段可使内存加载更多行数据。切分原则: 增量区间或散列或其他业务逻辑。使用哪种切分方法要根据实际业务逻辑判断。比如对表的访问多是近期产生的新数据,历史数据访问较少,可以考虑根据时间增量把数据按照一定时间段(比如每年)切分。
MySQL 索引 索引是帮助MySQL高效获取数据排好序的数据结构。不走索引,会发生全表扫描产生无用的IO。normal普通索引、unique唯一索引、fulltext全文索引、spatial空间索引1.普通索引:索引允许重复值和空值2.唯一索引:索引列不允许重复值,但允许空值3.主键索引:是一种特殊的唯一索引,不允许有空值4.全文索引:用于查找文本中的关键字,全文索引列必须创建索引5.空间索引:索引MySQL中存储的地理空间数据6.位图索引:索引MySQL中存储的位序列数据。
手机验证码登入设计思路 用户输入手机号、点击获取验证码(查看redis是否当前有验证码,有的话请不要频繁获取验证码)服务器生成验证码服务器使用短信服务提供商的API将验证码发送到手机验证码存到redis中,设置验证码有效期时间(如果短信发送失败、没有存入redis,可以继续获取验证码)
Go compress包 compress包是 Go 标准库中的一个重要包,提供了对常见压缩格式(如 gzip、zlib、bzip2 和 lzw)的支持。这个包主要用于处理压缩和解压缩数据流。compress。
Go bufio包 bufio包通过提供缓冲读写操作,大大提高了 I/O 操作的效率。无论是读取文件、网络数据,还是处理大数据文件,bufio都是一个非常有用的工具。熟练掌握bufio包,可以显著提升 Go 程序的性能和可靠性。
Go archive包 包提供了读取和写入 tar 格式归档文件的功能。Tar 文件是一种用于将多个文件和目录打包成一个单一文件的归档格式。包提供了读取和写入 zip 格式归档文件的功能。Zip 文件是一种用于压缩和归档文件的格式。
Go 命令 Go语言的工具链提供了一系列命令来帮助开发者编译、运行、测试和管理Go程序。go build: 编译Go源代码。对于库文件,它检查包的有效性。对于可执行文件,它会构建可执行文件。go run: 编译并运行Go程序。这个命令会构建程序,然后立即执行生成的可执行文件。go test: 运行测试。该命令会自动找到所有的测试文件,运行它们,并报告测试结果。go get: 下载并安装包及其依赖。从Go 1.17版本开始,推荐使用来安装二进制文件。go install: 编译并安装包和依赖。
审批流程设计思路 表示申请已经提交但尚未进行审批。:表示申请正在进行审批流程中。:表示申请已经提交,等待负责人进行处理。:表示申请已经开始处理但尚未完成:表示申请正在进行处理或审批的过程中。:表示申请已经被审批通过。:表示申请已经被审批拒绝。:表示申请已经完成处理,可能是通过审批也可能是被拒绝。不用的用户视角看到不同的审批记录。
Go context包 Go通常写后端服务,启动一个HTTP请求会启动多个goroutine,可以共享token数据。context时goroutine之间传递上下文消息,包括信号取消,储存数据。或者处理时间长,通过停止信号关联goroutine退出。