php中GET方法的加号处理

1、网上搜的方法如下:

用 get 方法 , 参数里有 “+” 时,要做处理,否则到后台会变成空格

解决方案:

1 、改用 post 方法 ,ok

2 、在 js 里用 url = encodeURI(encodeURI(XXX))

3 、将参数里的加号进行转换 datadata = data.replace(/+/g, “%2B”);

(2,3步可以合为一步 encodeURIComponent(encodeURIComponent(xxxx)) )

4、 PHP接受使用 rawurldecode后台再解码一次, ok

2、自己添加一种方法(替换方法),其实没这么麻烦,首先认识下base64的组成:

在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。

使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。

所以字符串base64后传输之前可以先把“+”号替换掉,用“_”,“|”等等都可以,然后另一个页面接收的时候再替换过来即可(str_replace)。最后把替换之后的base64再解码。ok

Spring boot——修改html实时生效 IDEA

第一步:

在全局配置文件(application.properties)中禁用thymeleaf模板引擎的缓存,缓存是默认开启的

spring.thymeleaf.cache=false
第二步:

在idea中按 ctrl+f9 重新编译一下html文件。

 
建议:开发环境中可以禁用thymeleaf模板引擎的缓存,提高开发效率,但是生产环境中建议开启。

Nginx二级域名自动匹配到子文件夹(通过rewrite)

server_name www.test.com bbs.test.com blog.test.com;
index index.html index.htm index.php;
root /www/test.com;



#申明sub_domain变量
set sub_domain "";
#正则提取出二级域名
if (http_host ~ "(.+).test.com") {
    #把二级域名赋值给sub_domain变量
    setsub_domain 1;
}

if (sub_domain = "www") {
    set sub_domain "";
}

if (sub_domain = "bbs") {
    rewrite /(.+) /sub_domain/1 last;
}

if (sub_domain = "blog") {
    #设置rewrite规则
    rewrite ^(.*) /sub_domain/index.php?s=1 last;
}

给图片(微信头像)右下角添加中国国旗

from __future__ import print_function
from PIL import Image

"""
需求:给图片右下角添加中国国旗
欢迎国庆,喜庆70周年
"""


class Picture:
    def handle_picture(self):
        # 打开图片模版
        img1 = Image.open("icon.png")
        # img1 = img1.convert('RGBA')
        # 打开原来的微信头像
        img2 = Image.open("test.jpg")

        if img2.size != (700, 700):  # 判断图片大小,统一改为 700*700
            # 修改图片尺寸
            size = (700, 700)
            img2.thumbnail(size)
            img2.show()
        # 将img1 粘贴到 img2
        img2.paste(img1, (532, 526))
        img2.show()   # 显示图片
        img2.save("new.png")   # 保存生成的头像图片


t0 = Picture()
t0.handle_picture()

用python来个小猪佩奇Peppa Pig

#!/usr/bin/python
# encoding: utf-8

from turtle import *


def nose(x, y):  # 鼻子
    penup()  # 提起笔
    goto(x, y)  # 定位
    pendown()  # 落笔,开始画
    setheading(-30)  # 将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
    begin_fill()  # 准备开始填充图形
    a = 0.4
    for i in range(120):
        if 0 <= i < 30 or 60 <= i < 90:
            a = a+0.08
            left(3)  # 向左转3度
            forward(a)  # 向前走a的步长
        else:
            a = a-0.08
            left(3)
            forward(a)
    end_fill()  # 填充完成

    penup()
    setheading(90)
    forward(25)
    setheading(0)
    forward(10)
    pendown()
    pencolor(255, 155, 192)  # 画笔颜色
    setheading(10)
    begin_fill()
    circle(5)
    color(160, 82, 45)  # 返回或设置pencolor和fillcolor
    end_fill()

    penup()
    setheading(0)
    forward(20)
    pendown()
    pencolor(255, 155, 192)
    setheading(10)
    begin_fill()
    circle(5)
    color(160, 82, 45)
    end_fill()


def head(x, y):  # 头
    color((255, 155, 192), "pink")
    penup()
    goto(x, y)
    setheading(0)
    pendown()
    begin_fill()
    setheading(180)
    circle(300, -30)
    circle(100, -60)
    circle(80, -100)
    circle(150, -20)
    circle(60, -95)
    setheading(161)
    circle(-300, 15)
    penup()
    goto(-100, 100)
    pendown()
    setheading(-30)
    a = 0.4
    for i in range(60):
        if 0 <= i < 30 or 60 <= i < 90:
            a = a+0.08
            lt(3)  # 向左转3度
            fd(a)  # 向前走a的步长
        else:
            a = a-0.08
            lt(3)
            fd(a)
    end_fill()


def ears(x, y):  # 耳朵
    color((255, 155, 192), "pink")
    penup()
    goto(x, y)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50, 50)
    circle(-10, 120)
    circle(-50, 54)
    end_fill()

    penup()
    setheading(90)
    forward(-12)
    setheading(0)
    forward(30)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50, 50)
    circle(-10, 120)
    circle(-50, 56)
    end_fill()


def eyes(x, y):  # 眼睛
    color((255, 155, 192), "white")
    penup()
    setheading(90)
    forward(-20)
    setheading(0)
    forward(-95)
    pendown()
    begin_fill()
    circle(15)
    end_fill()

    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()

    color((255, 155, 192), "white")
    penup()
    seth(90)
    forward(-25)
    seth(0)
    forward(40)
    pendown()
    begin_fill()
    circle(15)
    end_fill()

    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()


def cheek(x, y):  # 腮
    color((255, 155, 192))
    penup()
    goto(x, y)
    pendown()
    setheading(0)
    begin_fill()
    circle(30)
    end_fill()


def mouth(x, y):  # 嘴
    color(239, 69, 19)
    penup()
    goto(x, y)
    pendown()
    setheading(-80)
    circle(30, 40)
    circle(40, 80)


def setting():  # 参数设置
    pensize(4)
    hideturtle()  # 使乌龟无形(隐藏)
    colormode(255)  # 将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
    color((255, 155, 192), "pink")
    setup(840, 500)
    speed(10)


def main():
    setting()  # 画布、画笔设置
    nose(-100, 100)  # 鼻子
    head(-69, 167)  # 头
    ears(0, 160)  # 耳朵
    eyes(0, 140)  # 眼睛
    cheek(80, 10)  # 腮
    mouth(-20, 30)  # 嘴
    done()


if __name__ == '__main__':
    main()


Sourcetree跳过注册的方法

Sourcetree跳过注册的方法

当前只有Win的版本,Mac自行百度

很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。

然而 sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作注册。

下载好之后会有这么一个界面要求你注册或登录。(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹

%LocalAppData%\Atlassian\SourceTree\

对,没错,你会看到一个很不和谐的文件你是没有的
恩,就是它,所以接下来你应该在当前文件夹下创建一个json文件,文件名为accounts.json
(如果不知道如何查看被隐藏掉的后缀名,请自行百度)
然后,编辑此文件的内容如下

[
  {
    "id": "1",
    "type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
    "Authenticate": true,
    "HostInstance": {
      "id": "2",
      "type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
      "Host": {
        "id": "3",
        "type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
        "Id": "atlassian account"
      },
      "BaseUrl": "https://id.atlassian.com/"
    },
    "Credentials": {
      "id": "4",
      "type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
      "Username": "",
      "Email": null
    },
    "IsDefault": false
  }
]

保存此文件。
重新启动sourcetree
和之前不一样的界面,无需注册
就是这样,sourcetree已经跳过注册环节了
[TOC]

Anaconda完全入门指南

Anaconda 使用指南

参考文章:
致Python初学者:Anaconda入门使用指南
Anaconda使用总结

Anaconda

下载

官网下载

推荐下载python3版本, 毕竟未来python2是要停止维护的.

配置环境变量

如果是windows的话需要去 控制面板\系统和安全\系统\高级系统设置\环境变量\用户变量\PATH 中添加 anaconda的安装目录的Scripts文件夹, 比如我的路径是D:\Software\Anaconda\Scripts, 看个人安装路径不同需要自己调整.

之后就可以打开命令行(最好用管理员模式打开) 输入 conda --version

如果输出conda 4.4.11之类的就说明环境变量设置成功了.

为了避免可能发生的错误, 我们在命令行输入conda upgrade --all 先把所有工具包进行升级

管理虚拟环境

接下来我们就可以用anaconda来创建我们一个个独立的python环境了.接下来的例子都是在命令行操作的,请打开你的命令行吧.

activate

activate 能将我们引入anaconda设定的虚拟环境中, 如果你后面什么参数都不加那么会进入anaconda自带的base环境,

你可以输入python试试, 这样会进入base环境的python解释器, 如果你把原来环境中的python环境去除掉会更能体会到, 这个时候在命令行中使用的已经不是你原来的python而是base环境下的python.而命令行前面也会多一个(base) 说明当前我们处于的是base环境下.

activate

创建自己的虚拟环境

我们当然不满足一个base环境, 我们应该为自己的程序安装单独的虚拟环境.

创建一个名称为learn的虚拟环境并指定python版本为3(这里conda会自动找3中最新的版本下载)

conda create -n learn python=3
image.png

于是我们就有了一个learn的虚拟环境, 接下来我们切换到这个环境, 一样还是用activae命令 后面加上要切换的环境名称

切换环境

activate learn

如果忘记了名称我们可以先用

conda env list

去查看所有的环境

现在的learn环境除了python自带的一些官方包之外是没有其他包的, 一个比较干净的环境我们可以试试

先输入python打开python解释器然后输入

>>> import requests

会报错找不到requests包, 很正常.接下来我们就要演示如何去安装requests包

exit()

退出python解释器

安装第三方包

输入

conda install requests

或者

pip install requests

来安装requests包.

安装完成之后我们再输入python进入解释器并import requests包, 这次一定就是成功的了.

卸载第三方包

那么怎么卸载一个包呢

conda remove requests

或者

pip uninstall requests

就行啦.

查看环境包信息

要查看当前环境中所有安装了的包可以用

conda list 

导入导出环境

如果想要导出当前环境的包信息可以用

conda env export > environment.yaml

将包信息存入yaml文件中.

当需要重新创建一个相同的虚拟环境时可以用

conda env create -f environment.yaml

其实命令很简单对不对, 我把一些常用的在下面给出来, 相信自己多打两次就能记住

activate // 切换到base环境

activate learn // 切换到learn环境

conda create -n learn python=3 // 创建一个名为learn的环境并指定python版本为3(的最新版本)

conda env list // 列出conda管理的所有环境

conda list // 列出当前环境的所有包

conda install requests 安装requests包

conda remove requests 卸载requets包

conda remove -n learn –all // 删除learn环境及下属所有包

conda update requests 更新requests包

conda env export > environment.yaml // 导出当前环境的包信息

conda env create -f environment.yaml // 用配置文件创建新的虚拟环境

深入一下

或许你会觉得奇怪为啥anaconda能做这些事, 他的原理到底是什么, 我们来看看anaconda的安装目录

image.png

这里只截取了一部分, 但是我们和本文章最开头的python环境目录比较一下, 可以发现其实十分的相似, 其实这里就是base环境. 里面有着一个基本的python解释器, lLib里面也有base环境下的各种包文件.

那我们自己创建的环境去哪了呢, 我们可以看见一个envs, 这里就是我们自己创建的各种虚拟环境的入口, 点进去看看

image.png

可以发现我们之前创建的learn目录就在下面, 再点进去

image.png

这不就是一个标准的python环境目录吗?


这么一看, anaconda所谓的创建虚拟环境其实就是安装了一个真实的python环境, 只不过我们可以通过activate,conda等命令去随意的切换我们当前的python环境, 用不同版本的解释器和不同的包环境去运行python脚本.

与pycharm连接

在工作环境中我们会集成开发环境去编码, 这里推荐JB公司的pycharm, 而pycharm也能很方便的和anaconda的虚拟环境结合

Setting => Project => Project Interpreter 里面修改 Project Interpreter , 点击齿轮标志再点击Add Local为你某个环境的python.exe解释器就行了

image.png

比如你要在learn环境中编写程序, 那么就修改为D:\Software\Anaconda\envs\learn, 可以看到这时候下面的依赖包也变成了learn环境中的包了.接下来我们就可以在pycharm中愉快的编码了.

image.png

结语

现在你是不是发现用上anaconda就可以十分优雅简单的解决上面所提及的单个python环境所带来的弊端了呢, 而且也明白了其实这一切的实现并没有那么神奇.

当然anaconda除了包管理之外还在于其丰富数据分析包, 不过那就是另一个内容了, 我们先学会用anaconda去换一种方法管里自己的开发环境, 这已经是一个很大的进步了

作者:AC手环
链接:https://www.jianshu.com/p/eaee1fadc1e9
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Linux(centos)常用命令

**查看系统版本**

cat /etc/redhat-release

**切换用户**

# su root

**yum常见命令**

yum repolist all //列出所有仓库

yum list all //列出创库所有软件包

yum install 软件包名
yum reinstall 软件包名
yum update 软件包名
yum remove 软件包名
yum clean all
yum check-update
yum grouplist
yum groupinstall 软件包组
yum groupremove
yum groupinfo

service foo start
service foo restart
service foo stop
service foo reload
service foo status
chkconfig
chkconfig foo on //开机自动启动
chkconfig foo off //开机不自动启动
chkconfig foo //查看是否为自动启动
chkconfig --list //查看各个级别下的服务启动与禁用情况
systemctl status 服务名.service //查看服务的运行状态

## 跳到文件头部尾部

# :1 和 :$

注意上面的是数字1,而不是英文的l

## 查看数据库日志

vi /var/log/mariadb/mariadb.log

日志对于我们了解一些错误很有用,比如可以通过查看数据库日志来了解数据库为什么会无缘无故的崩了。如果不确定有没有mariadb 这个目录,你可以先切换到 /var/log 这个目录,然后 ls 下,就可以看到 /var/log 目录下有没有 mariadb 目录了。

## 查看磁盘使用情况

# df -h

## 查看服务器运行使用情况

# uptime

查看服务器自上次启动运行了多长时间

[TOC]

解决Centos7不能联网且ifconfig出现command not found

在虚拟机中以最小化方式安装centos7,后无法上网,因为centos7默认网卡未激活。
而且在sbin目录中没有ifconfig文件,这是因为centos7已经不使用 ifconfig命令了,已经用ip命令代替;
并且网卡名称也不是eth0了,而是改成eno16777736了。
解决ifconfig不可用:ip addr 即查看分配网卡情况。
激活网卡:在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中
进入编辑模式,将 ONBOOT=no 改为 ONBOOT=yes,就OK

 

保存后重启网卡: service network restart
此时就可以上网了。(如果不知怎样判断能否上网,ping 一下网址就可以,就是这么简单,例如命令:ping www.baidu.com)

这样yum,wget等等都可以用啦