月度归档:2018年05月

MySQL行列变换

employee_id season score
339 2018-1  S
339 2018-2  A
339 2018-3  B
339 2018-4  S
400 2018-1  S
400 2018-2  A
400 2018-3  B
select employee_id,
max(case when season='2018-1' then score else null end) as '2018-1',
max(case when season='2018-2' then score else null end) as '2018-2',
max(case when season='2018-3' then score else null end) as '2018-3',
max(case when season='2018-4' then score else null end) as '2018-4'                
from employee  GROUP BY employee_id
employee_id 2018-1 2018-2 2018-3 2018-4
339 S   A   B   S
400 S   A   B   

这是今天碰到的面试题,并没有完全答得上来,而且这个方案也是不完美的。等有了更好的方法再编辑

0

Include和Require的一些测试

config.php代码如下:
<?php 
    return [
        'url'=>'127.0.0.1',
        'port'=>3306,
    ];

 ?>

index.php代码如下:
<?php 

    var_dump(require_once 'config.php'); //['url'=>'127.0.0.1','port'=>3306];
    var_dump(include_once 'config.php'); //true
    var_dump(include_once 'config.php'); //true
    var_dump(include 'config.php');//['url'=>'127.0.0.1','port'=>3306];
    var_dump(include 'config.php');//['url'=>'127.0.0.1','port'=>3306];
    var_dump(require 'config.php');//['url'=>'127.0.0.1','port'=>3306];

    var_dump(include 'nofile.php');//false(warning)
    var_dump(include_once 'nofile.php');//false(warning)
    var_dump(require_once 'nofile.php');//fetal error
    var_dump(require 'nofile.php');//fetal error

 ?>

浅显的结论:require和include,require_once和include_once作用相似,主要区别在于报错级别不一样。

  • 在文件找不到的情况下require和require_once都会报致命错误而include和include_once都会报警告,值为false;
  • 在文件可以找到的情况下,include和require将正常包含文件或者返回应有的数据,当欲包含的文件已经被包含的时候,再次使用include_once或require_once时,返回值为true
0

Context代表个啥

最给力的就是那句-阿也!!!

==========================分割线==================================================

context其实说白了,和文章的上下文是一个意思,在通俗一点,我觉得叫环境更好。….林冲大叫一声“啊也!”….问:这句话林冲的“啊也”表达了林冲怎样的心里?答:啊你妈个头啊!看,一篇文章,给你摘录一段,没前没后,你读不懂,因为有语境,就是语言环境存在,一段话说了什么,要通过上下文(文章的上下文)来推断。子程序之于程序,进程之于操作系统,甚至app的一屏之于app,都是一个道理。程序执行了部分到达子程序,子程序要获得结果,要用到程序之前的一些结果(包括但不限于外部变量值,外部对象等等);app点击一个按钮进入一个新的界面,也要保存你是在哪个屏幕跳过来的等等信息,以便你点击返回的时候能正确跳回,如果不存肯定就无法正确跳回了。看这些都是上下文的典型例子,理解成环境就可以,(而且上下文虽然叫上下文,但是程序里面一般都只有上文而已,只是叫的好听叫上下文。。进程中断在操作系统中是有上有下的,不过不给题主说了,免得产生新的问题)

作者:付鹏
链接:https://www.zhihu.com/question/26387327/answer/32618592
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0

正向代理和反向代理

逛一下知乎总会发现有些客官的回答令人醍醐灌顶,有一个知乎上的问答题目是:反向代理为何叫反向代理?
回答:正向代理代理客户端,反向代理代理服务器
反向代理为何叫反向代理? – peiyuc的回答 – 知乎
https://www.zhihu.com/question/24723688/answer/51737320

0

Mysql5.7主从复制配置

Mysql使用3个线程来执行复制功能,其中1个在主服务器上,另2个在从服务器上,当执行start slave时,主服务器创建一线程负责发送二进制日志。从服务器创建一个I/O线程,负责读取主服务器上的二进制日志,然后将该数据保存到从服务器数据目录中的中继日志文件中。从服务器的SQL线程负责读取中继日志并重做日志中包含的更新,从而达到主从数据库数据的一致性。

实验环境:centos7.4+Mysql5.7,虚拟机使用virtualbox,虚拟机网络设置为桥接方式连网,主服务器ip:192.168.0.103,从服务器ip:192.168.0.101,两台虚拟机可以互相访问,Mysql开启二进制日志,确认两台服务器mysql服务已经开启并能提供服务

#主库my.cnf配置
[mysqld]
log_bin=binlog
server_id=1

#从库my.cnf配置
[mysqld]
log_bin=binlog
server_id=2

在主库192.168.0.103创建远程帐号分配给从库复制时使用,并授予replication slave权限.

mysql> CREATE USER 'rep'@'192.168.0.101' IDENTIFIED BY '123@.123';
mysql> grant replication slave on *.* to rep@192.168.0.101;

登录主库得到当前binlog的文件名和偏移量

mysql> show master logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       177 |
| binlog.000002 |      3200 |
+---------------+-----------+
2 rows in set (0.00 sec)

登录从库设置主备关系

mysql> change master to 
    -> master_host='192.168.0.103',
    -> master_port=3306,
    -> master_user='rep',
    -> master_password='123@.123',
    -> master_log_file='binlog.000002',
    -> master_log_pos=3200;

登当从库启动slave线程并检查同步状态

mysql> start slave;

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.103
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000002
          Read_Master_Log_Pos: 3200
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 1339
        Relay_Master_Log_File: binlog.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 3200
              Relay_Log_Space: 1550
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 1f170097-5354-11e8-b7ad-0800272b97b5
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

确认Slave_IO_Running: Yes和Slave_SQL_Running: Yes,如果有一个为No,则根据错误提示解决,mysql5.7版本可能会报一个server_id冲突的问题。因为在其它目录下可能有一个配置文件覆盖掉/etc/my.cnf的server_id的配置,解决方法是找到这个配置文件,在里面配置一下server_id=2

[root@localhost mysql]# find / -name "*cnf*"
/etc/my.cnf.d
/etc/my.cnf
/usr/share/mysql/my-default.cnf

[root@localhost mysql]# vim /usr/share/mysql/my-default.cnf 

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
server_id = 2

验证主从复制是否成功 登录主库192.168.0.103

mysql> use testslv;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from user_info;
+----+-----------+
| id | user_name |
+----+-----------+
|  1 | damon     |
|  2 | connie    |
+----+-----------+
2 rows in set (0.00 sec)

mysql> update user_info set user_name='connie chen' where id =2;
Query OK, 1 row affected (0.12 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from user_info;
+----+-------------+
| id | user_name   |
+----+-------------+
|  1 | damon       |
|  2 | connie chen |
+----+-------------+
2 rows in set (0.00 sec)

登录从库192.168.0.101验证

mysql> select * from testslv.user_info;
+----+-------------+
| id | user_name   |
+----+-------------+
|  1 | damon       |
|  2 | connie chen |
+----+-------------+
2 rows in set (0.00 sec)
1+

Centos7.4安装Percona XtraBackup

从Percona 存储库安装Percona XtraBackupyum
安装Percona存储库

您可以通过以root用户身份或使用sudo运行以下命令来安装Percona yum存储库 :

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

测试存储库

通过执行以下命令,确保软件包现在可以从存储库中获得:

yum list | grep percona

安装软件包

您现在可以运行以下命令来安装Percona XtraBackup:

yum install percona-xtrabackup-24

警告
为了成功安装Percona XtraBackup libev软件包将需要先安装。libev包可以从EPEL存储库安装 。

全备:

# innobackupex --user=root --password=pwd  /path/to/backup/
# innobackupex --apply-log  /path/to/backup #提交事务等保持数据一次性

还原:

# innobackupex --copy-back  /path/to/BACKUP-DIR

还原成功后,数据文件将在原文件夹内重新生成,需要手动恢复文件属性

chown -R mysql.mysql ./* 

重启服务:

# systemctl start mysqld.service
0

linux源代码安装prefix选项作用

类似于winodows平台安装应用程序的时候总是要询问用户要将程序安装在哪个目录如:c:/program files/xxx,这样的话可以合理的规划文件安装的位置很重要,而且也只可以通过删除目录的方式卸载不需要的程序释放磁盘空间。

0

关于递归和迭代的区别

举个例子吧:你要给某个小孩子买玩具。

  • 递归:你自己不太了解小孩子的需求,为了缩小范围,让你的儿子去给孙子挑选。儿子比你强点有限,但依然不太了解小孩子的需求。为了缩小范围,你又让你孙子去挑选。如此这般,直到找到合适的玩具。

  • 迭代:你挑了一件觉得不行,又挑了一件又不行。如此这般,直到找到合适的玩具。所以一句话:递归是自己调用自己,每次旨在缩小问题规模。迭代是自己执行很多次,每次旨在更接近目标。

作者:CyrusCao
链接:https://www.zhihu.com/question/20278387/answer/109266159
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0

Set-Cookie

属性说明
NAME=VALUE赋予Cookie的名称和其值(必需)
expires=DATECookie有效期(若不指定,默认到浏览器关闭则失效)
path=PATH将服务器上的文件目录作为Cookie的适用对像(若不指定,默认为文件所在目录)
domain=域名作为Cookie的适用域名(若不指定则为当前服务器域名)
secure仅在https通信时才发送Cookie
HttpOnly加以限制,使Cookie不能被javascript脚本访问
0