使用 Explain 命令分析SQL语句
Explain 命令2020年12月23日
参考地址
日常开发必备操作1、日常开发,mysql数据库的慢日志先打开,并设置查询时间为1秒。
2、开启 binlog
【建议】在开发阶段,预先分析一下查询语句是否使用索引,查询字段是否为 * 等等
Explain 比较重要的字段
type
select_type
key
rows
filtered
select_type
SIMPLE
(简单SELECT,不使用UNION或子查询等)
PRIMARY
(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
UNION
(UNION中的第二个或后面的SELECT语句)
DEPENDENT UNION
(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
UNION RESULT
(UNION的结果,union语句中第二个select开始后面所有select)
SUBQUERY
(子查询中的第一个SELECT,结果不依赖于外部查询)
DEPENDENT SUBQUERY
(子查询中的第一个SEL ...
Java 泛型
概念Java 泛型是 JavaSE 5.0 新增加的特性,该特性允许在编译时检测到非法的类型,本质是参数化类型。
泛型程序设计 意味着编写的代码可以被很多不同类型的对象重用。
Java 泛型是伪泛型,因为在Java编译期间,会把所有的泛型信息擦除掉,这也称为类型擦除。更多关于类型擦除的问题,可以查看这篇文章 《Java泛型类型擦除以及类型擦除带来的问题》
package com.demo11;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;public class genericDemo { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Li ...
网页登录《记住我》功能实现原理
通常,在使用web系统时,无论是MVC,还是前后端分离的方式,都不可避免会使用到登录的功能。
为了提高用户体验,简化用户登录的操作,我们会加入一个《记住我》的功能,记录当前用户的登录状态,当下次再次进入系统时,无需进行登录。
那么这个功能的原理究竟是怎样的?
我们一起来理一下。
首先,这个功能的使用场景是登录,载体是浏览器,所以我们可以利用cookie的方式去处理。
流程1、登录 ->
2、服务器进行校验 ->
3、保存token到数据库,返回前端浏览器登录token ->
4、前端保存token到cookie ->
5、下次请求时,后端读取cookie 中的token, 并校验,通过即可快速登录
问题1、浏览器禁用cookie怎么办?
在基于cookie的前提下,禁用了cookie则无法正常使用功能。 当然session有另外的解决方式,这个另说啦。
Yii 实战合集记录
1、Yii 设置hostInfo生成绝对的url
源链接
Yii 中,可以设置请求地址中的hostInfo 来达到生成绝对的Url
Yii::app()->request->setHostInfo('http://127.0.0.1');echo Yii::$app->request->hostInfo;
同样,也可以在 config目录下,进行配置项的设置
'components' => [ 'request' => [ 'hostInfo' => '', 'baseUrl' => '', ]]
2、生成环境开启 SCHEMA CACHE缓存
# 对应 db 配置项enableSchemaCache=true
在没有开启schema缓存的情况下,Yii框架会在每次查表时,执行以下语句,可能会造成数据库响应变慢,甚至直接拖垮数据库。
SELECT ...
Hexo 问题合集
【问题】1、hexo: command not found
解决:重新全局安装 hexo-cli ,执行命令 npm install hexo-cli -g
2、node 配置国内源
解决:执行命令 npm config set registry http://registry.npm.taobao.org
MySQL主从复制部署以及遇到的问题
MySQL主从复制,就是利用MySQL本身的复制特性实现
达到互联网常用的数据库配置,如:1主+1从;1主+N从等架构
一、复制解决的根本问题让一台服务器的数据与其他服务器保持同步。
二、支持两种复制方式基于行的复制(5.1版本引入)
基于语句的复制(也称为逻辑复制)
两种方式都是通过主库上记录二进制日志,在备库重放日志的方式来实现异步的数据复制。
三、复制解决的问题1、数据分布
2、负载均衡
3、备份
4、高可用和故障切换
5、MySQL升级测试
四、复制如何工作复制通常有三个步骤:
1、在主库上把数据更改记录记录到二进制日志中(这些记录被称为二进制日志事件)
2、备库将主库上的日志复制到自己的中继日志(relay log)中
3、备库读取中继日志中的事件,将其重放到备库数据之上
五、配置复制下面列出针对新安装的主库和备库,可以从以下几步进行配置:
1、在每台服务器创建复制账号
2、配置主库和备库
3、通知备库连接到主库并从主库复制数据
1、创建复制账号注:主库和备库都执行该操作。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* ...
ubuntu20.04 安装docker
Ubuntu20.04 安装 docker
来源:清华大学开源软件镜像站
【具体步骤】docker官方安装指引
1、之前有安装过 docker , 先删除(新安装的20.04版本没有安装,其他版本可能会默认安装了)sudo apt-get remove docker docker-engine docker.io containerd runc
2、安装依赖sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
3、信任 docker 的 GPG 公钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4、添加软件仓库
sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \ $( ...
新安装完 ubuntu 20.04 , 我做了这些操作!
1、更新软件源上篇已经说过这个操作,飞机直达
2、增加中文输入法ubuntu 20.04 看到已经可以在 setting -> region & langague 相应添加中文智能拼音输入法,这里我就没有安装其他输入法
3、安装 VIMsudo apt-get install vim
4、安装 docker另一篇有介绍,直达
ubuntu20.04 更新软件源
众所周知,我们的网络都是有沃尔(wall)的。
在访问一些国外的网站,软件源等等,速度都会比国内的网站要慢。
但是我们可以更新软件源,或镜像源达到加速的目的。
下面,演示一下更新 Ubuntu 20.04 的软件源到清华大学的软件源。
【具体步骤】1、清华大学软件源清华软件源
左边栏相应地选择 ubuntu ,这里我们可以看到清华大学已经更新了Ubuntu 软件源到 20.04 版本
2、进入ubuntu,ctrl + alt + t 呼出终端# 备份原先的官方源cp /etc/apt/sources.list /etc/apt/sources.list.backup
把上图中的源列表, 覆盖到 /etc/apt/sources.list
执行更新源命令 apt-get update 即可。
PHP7 新特性与变更
官方文档: 从PHP 5.6.x 移植到 PHP 7.0.x
PHP官方文档上面说到, PHP7 相对于 PHP5.6 来说,是一个大版本的改变。
现在我们整理一下可能会影响到日常开发的点(注:实际变更涉及到的点不仅限于下述几点)。
【不向后兼容变更】异常处理和错误的更改在PHP 7中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了。 这些异常继承自Error类,此类实现了Throwable接口 (所有异常都实现了这个基础接口)。
这也意味着,当发生错误的时候,以前代码中的一些错误处理的代码将无法被触发。 因为在PHP 7版本中,已经使用抛出异常的错误处理机制了。 (如果代码中没有捕获Error异常,那么会引发致命错误)。
关于间接使用变量、属性和方法的变化对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析
使用了旧的从右到左的解析顺序的代码必须被重写,明确的使用大括号来表明顺序(参见示例 PHP5 的写法)。 这样使得代码既保持了与PHP 7.x的前向兼容性,又保持了与PHP 5.x的后向兼容性。
示例:
$a = 'b';$b = [ ...