常见HTTP代码含义

300(多种选择)针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

500   (服务器内部错误)  服务器遇到错误,无法完成请求。
501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
    

Mysql存储引擎的区别

innodb的引擎比较适合于插入和更新操作比较多的应用
而MyISAM 则适合用于频繁查询的应用

MyISAM --表锁。
innodb--设计合理的话是行锁。
MYISAM 支持表锁、读读之间并发、写写读写串行
InnoDB支持行锁(共享锁、lock in share mode)、排它锁、行锁(innodb) 表锁(myisam)

php中include与require的区别

include_once 如果文件不存在会抛出一个警告
require_once 如果文件不存在会抛出一个致命错误
include 将指定的文件读入并执行里面的程序、require将文件读入、用自身替换读入的内容

冒泡排序

将数组中的相邻元素的比较和交换来把小的数交换到最前面

//冒泡排序
function maopao($num)
{
    for ($i = 0; $i < count($num); $i++) {
        for ($j = 0; $j < count($num) - $i - 1; $j++) {
            if ($num[$j] > $num[$j + 1]) {
                list($num[$j],$num[$j+1]) = [$num[$j+1],$num[$j]];
                //$tmp = $num[$j + 1];
                //$num[$j + 1] = $num[$j];
                //$num[$j] = $tmp;
            }
        }
    }
    return $num;
}

- 阅读剩余部分 -

  1. 在七牛控制台中创建Bucket。
  2. 下载PHP-SDK包。

可以通过composer来安装 composer require qiniu/php-sdk

  1. 获取密钥信息: AccessKey、SecretKey。
  2. 项目中将文件直接传至七牛服务器、通过回调来返回需要的数据、减轻业务服务器压力。

具体逻辑:

-  客户端获取服务器颁发的上传凭证(token)。
-  客户端上传资源至七牛,并带上token作为请求内容的一部分。
-  七牛处理资源、带上参数访问回调地址。
-  回调接口处理数据返回七牛。
-  七牛返回回调接口的处理数据给客户端。

demo:

//laravel中获取上传token
public function qiniu_token ()
    {
        //用户ID加密处理.
        $uid    = $this->hashid_enconde(Auth::user()->id);
        $bucket = env('QINIU_BUCKET');
        $policy = [
            'x:uid'            => $uid,
            //回调域名
            //Laravel中回调地址尽量走api路由、走web路由post过来的数据会因为csrf验证而导致419错误
            'callbackUrl'      => env('QINIU_CALLBACK'),
            //回调中需要传给服务器的数据、其中有七牛的魔法参数、和自定义的参数
            'callbackBody'     => '{"fname":"$(fname)", "fkey":"$(key)", "mimeType":"$(mimeType)","fsize":"$(fsize)", "uid":"'.
                                  $uid.'"}',
            'callbackBodyType' => 'application/json',
            //自定义文件存储路径(七牛中就是一串字符串...)
            'saveKey'          => "tools/".$uid."/$(year)/$(mon)/$(etag)$(ext)",
        ];
        $auth = new \Qiniu\Auth();
        
        return $auth->uploadToken($bucket, null, 3600, $policy);
    }

回调策略详见 文档

Blade 模板

@extends('layouts.app')
@section('content')
    <div class="container">
        <bill :upload-token="{{$token}}"></bill>
    </div>
@endsection

前端upload组件(iviewui)bill.vue

<template>
    <div>
         <Upload
                  ref="upload"
                  multiple
                  :data="uploadToken"
                  :default-file-list="uploadList"
                  :on-success="handleUploadSuccess"
                  :format="['jpg','jpeg','png']"
                  <!-- 此处填写七牛服务器地址 -->
                  action="https://upload.qiniup.com">
            <Button icon="ios-cloud-upload-outline">图片上传</Button>
          </Upload>
        <input v-model="images_url"></input>
    </div>
</template>

<script>
    export default{
        props:{
            uploadToken: Object
        },
        data(){
            return{
                uploadList:[],
                images_url:[],
            }
        },
        methods:{
            handleUploadSuccess(){
                this.$Message.success('图片上传成功');
                this.images_url.push(res.data);
            }
        }
    }
</script>

回调:

    /**
     * 持久化媒体文件
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function qiniuCallback (Request $request)
    {
        //将文件信息存入数据库中
        $media = Media::create([
            'user_id'     => $this->hashid_decode($request->get('uid')),
            'name'        => $request->get('fname'),
            'key'         => $request->get('fkey'),
            'mimeType'    => $request->get('mimeType'),
            'size'        => $request->get('fsize'),
            'description' => $request->get('des'),
        ]);
        //$media->url 使用Eloquent模型访问器功能生成图片路径,回调返回参数可自定义
        return $this->successResponseData(200, $media->url);
    }
  1. 上传资源完成之后可以通过异步数据处理将图片裁剪、添加水印。也是在上传策略中配置。详见

公司内部服务器使用新版本Ubuntu系统,发现IP地址配置与之前版本有差别。

以下是新版本修改方法.

  1. 进入系统之后注意看欢迎页的自动分配的IP地址(使用的网卡、与IP地址段)。
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Oct  8 15:05:45 CST 2018

  System load:  0.0                Processes:           202
  Usage of /:   1.2% of 915.40GB   Users logged in:     0
  Memory usage: 8%                 IP address for eno1: 10.1.1.66
  Swap usage:   0%
  1. 编辑 /etc/netplan/50-cloud-init.yaml
$ vim /etc/netplan/50-cloud-init.yaml


network:
    ethernets:
        eno1:
            addresses: [10.1.1.66/24]
            gateway4: 10.1.1.1
            dhcp4: true
            nameservers:
                    addresses: [8.8.8.8, 114.114.114.114]
    version: 2

保存退出.

  1. 应用新配置文件
$ sudo netplan apply

介绍

在接触Docker之前,一直使用自建的开发环境来工作。

对于个人来说就是在换电脑的时候麻烦,换电脑了开发环境就得重新部署一次。差不得得要个半天时间...

对于公司团队来说更加麻烦了,每个同事部署的环境不一致,Windows系统与*nix系统的不兼容等.代码跑起来有差异。

Docker是一个类似于虚拟机的设计,一种新兴化的虚拟化方式。

特性Docker虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于原生
系统支持量单主机支持上千个容器一般几十个

Docker有三个关键概念:镜像(images)、容器(container)、仓库(registry)。其中镜像与容器两者关系类似于面向对象设计中的实例一样

镜像是静态的定义,容器是镜像运行是的实体

镜像加速:官方Docker Hub拉取镜像网络不稳定,推荐两个镜像仓库


- 阅读剩余部分 -