Coder Social home page Coder Social logo

blog's Introduction

随手笔记

内容全在issue中

blog's People

Contributors

hardshen avatar

Watchers

 avatar  avatar

blog's Issues

初识docker-1

前戏:
docker是啥? 。what 据小道消息描述说是类似git。服务环境托管。
不要在意细节 什么,。啥的,我有换行让你喘气就够了。
为啥前面废话那么多呢 ,是因为我在学习docker,我想记录下来,但是还没下载完,so
image 废话较多,哈哈。
我就照着这位前辈的文章照猫画虎了,blog的都是抄的他的issues,哈哈哈 。太TM机智了。。。等待下载完毕开始演练。。。。。。。。。。。。

三样东西 (个人理解,欢迎指正)正解描述链接
image(镜像)相当于我们git工程中一个个小项目文件目录
container (容器) 相当于我们的工程最外层的文件目录夹,里面都放啥,具体里面文件怎么存,放到哪个目录
repository(仓库)相当于我们的git仓库,我们可以放github ,私有git仓库,docker类似,可以放dockerhub,私有docker仓库

记录实现步骤和问题:
先获取基础环境镜像,个人爱好centos
docker pull centos:7

命令行进入容器,安装环境。�未指定端口映射,如需指定端口查看
docker run -it --name 容器名 centos:7 /bin/bash
配置yum php7源并安装

查看运行中的docker容器
docker container ls

守护进程执行容器后再次进入docker容器中(使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。)
docker attach 容器id

或者使用这种方式进入容器
docker exec -it 容器id /bin/bash

在centos中自己yum安装php,安装好后启动fpm(由于本地fpm端口是9000,docker的fpm端口改成了9009)
php-fpm已经启动

image

但是此时本机的nginx无法访问9009 因为没有做docker的端口映射,创建容器时也没有指定端口

指定端口启动容器
docker run -ti -p 9009:9009 镜像名

-v 挂在目录 php执行文件路径 宿主机和docker路径一致启动 -p端口映射
docker run -ti -p 9009:9009 -v /www:/www 镜像名

宿主机的nginx访问docker容器的fpm已经可以,访问遇到502几个fpm配置要注意
listen = 127.0.0.1:9009改为 listen = 0.0.0.0:9009 原先的本机允许改成其他允许
;listen.allowed_clients 注释掉,允许任何服务器请求连接,注释掉默认所有

查看所有的容器(运行以及停止的)
docker ps -a

生成新的镜像
docker commit 容器id dockerhub仓库

docker commit -a hardshen -m fpm应配置完成 6368b6ba278c hardshen/doc_cloud_ins

推送到dockerhub仓库
docker push dockerhub仓库:标签默认latest

至此已经完全可以运行了,中间有其他的问题,只记录了一些关键的步骤,强化记忆。

phpstorm xdebug 配置参数

xdebug.remote_enable =1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_mode = "req"
xdebug.remote_port = 9001
xdebug.remote_autostart = true
xdebug.idekey="PHPSTORM"

php oracle oci 调用存储过程链接正常返回无数据

在调用医院的oracle 存储过程时用的是oci8扩展 ,链接服务都是正常的,但是在获取数据的时候总是null,其实应该是线获取到游标对象,然后将游标数据赋值给到data参数, oci_new_cursor 很重要

如下示例:
`$ociDsn = '(DESCRIPTION=' .
'(ADDRESS=(PROTOCOL=TCP)(HOST=' . $config['server'] . ')(PORT=' . $config['port'] . '))' .
'(CONNECT_DATA=(SERVICE_NAME=' . $config['databaseName'] . ')))';

$oci = oci_connect(username, password, $ociDsn, charset);

$parse = oci_parse($oci, $sql);
oci_bind_by_name($parse, $key, $val);

$curs = oci_new_cursor($oci);
oci_bind_by_name($parse, ":data", $curs, -1, OCI_B_CURSOR);
oci_execute($parse);
oci_execute($curs);

$res = [];
while ($row = oci_fetch_array($curs, OCI_ASSOC + OCI_RETURN_LOBS)) {
$res[] = $row;
}
oci_free_statement($parse);
oci_free_statement($curs);
oci_close($oci);`

ascii特殊的隐藏字符xml无法解析

image

见上图FF导致我的xml无法正常解析,可以使用正则替换掉该字符即可

$str = '<xml>科室: 普外二科      床号:110101  </xml>';
$str = preg_replace( '/[\x00-\x1F]/','',$str);
echo $str;     

选择排序算法

两个循环,第一层循环所有的数据,并记录一个最小值的位置默认第一个,第二次循环第一层数据位置后面的所有数据,和最小值位置的值对比,如果更小则把当前位置的值更新为当前的位置。每次遍历完第二次的循环后更换第一次循环中的数据值。

function selectSort($arr)
{
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    //第一次循环
    for ($i = 0; $i < $len; $i++) {
        //记录最小默认值
        $p = $i;
        //第二次循环
        for ($j = $i + 1; $j < $len; $j++) {
            //每次循环都和最小值对比
            if ($arr[$p] > $arr[$j]) {
                $p = $j;
            }
        }
        if ($p != $i) {
            $tmp = $arr[$i];
            $arr[$i] = $arr[$p];
            $arr[$p] = $tmp;
        }
    }
    return $arr;
}

二分查找思路

如何查找中间值
如何定义最小和最大的临界值
思路详解点击

    二分查找我们都经常听到,这个算法的主要逻辑我们根据字面意思就能了解,从中间劈开查找我们所要的索引号。只要知道了如何查找中间值就好办了。

    二分查找首要前提就是有序数组。
   
    第一次找中间值,我们拿到数组的长度/2  我们拿到了中间值先去对比索引值是否是我们想要的,如果是直接返回即可,如果索引值大于我们要找的值我们就往左移动缩小我们的最大值查找值,反之扩大我们的最小查找值向右移动

    那么第二次去查找的我们的中间值该如何查找?
    中间值=(最小查找值+最大查找值)/2
    中间值=最小查找值+(最大查找值-最小查找值)/2(第一种方式有可能会溢出查找值所以建议使用第二种,同样的结果用尽量小的值去运算)

    注意点必须是>=  或<=的判断  =不可漏掉,否则会丢失=情况的查找

示例

function binarySearch(array $arr, $search)
{
    $h = count($arr) - 1; //长度
    $m = 0; //默认查找开始

    while ($m <= $h) {
        //第一次找中间值,我们拿到数组的长度$h/2 $m=0
        //记住查找中间值的规则就是下列两种$k的计算方式,第一种方式有可能会溢出查找值所以建议使用第二种,同样的结果用尽量小的值去运算

        //(最小查找值+最大查找值)/2
        //$k = (int)(($h + $m) / 2);

        //最小查找值+(最大查找值-最小查找值)/2
        $k = (int)($m + ($h - $m) / 2);

        //我们拿到了中间值$arr[$k]先去对比索引值是否是我们想要的
        if ($arr[$k] > $search) {
            //如果索引值大于我们要找的值我们就缩小我们的最大查找值
            $h = $k - 1;
        } elseif ($arr[$k] < $search) {
            //反之扩大我们的最小查找值
            $m = $k + 1;
        } else {
            //如果是直接返回即可
            return $k;
        }
    }
    return -1;
}

学习制作一个composer包

1.首先在github上简历一个仓库我的仓库名字叫composer-learn,并clone到本地
git clone https://github.com/hardshen/composer-learn.git
cd composer-learn

2.在目录中初始化composer包
composer init
会提示一些输入,参考composer规范

Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (/) [sww/hardshen-composer-learn]: composer-learn-hardshen/tools
Description []: 学习composer
Author [shenwenwen [email protected], n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n

{
"name": "composer-learn-hardshen/tools",
"description": "学习composer",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "shenwenwen",
"email": "[email protected]"
}
],
"minimum-stability": "dev",
"require": {}
}

Do you confirm generation [yes]? yes`

最后我们手动加入自动加载规范autoload部分

{
  "name": "composer-learn-hardshen/tools",
  "description": "学习写一个composer package  名字是tools",
  "type": "library",
  "require": {
    "php": ">=5.6"
  },
  "license": "mit",
  "authors": [
    {
      "name": "sww",
      "email": "[email protected]"
    }
  ],
  "minimum-stability": "dev",
  "autoload": {
    "psr-4": {
      "Tools\\": "src/"
    }
  }
}

安装如果php版本有限制可参考这种composer.phar安装

按照psr-4规范写我们的composer包内容,具体书写结构见下图

image

提交至github中然后配置我们的composer package
https://packagist.org/packages/submit 在package中的submit配置git仓库的地址点击check
符合规范即可提交,这样我们就可以使用composer下载包使用了

我在我lumen项目中使用测试,下载测试包
composer require composer-learn-hardshen/tools

引入包使用,在浏览器中执行查看输出
image

invalid document for insert: empty key

mongo入库失败

无法插入key为空的文档格式

在入库的是json结构为
{
"name":"",
"str":{
"调温费":"-51.80",
"":"-2079.99",
"基本统筹":"-7463.38",
"预交金额":"0.00",
"退款":"0.00",
"收款":"0.00",
"合计":"-9543.37"
},
"code":""
}

可以使用工具格式化,但是总是提示失败,原来是个很大的json数据,很难发现json中有个节点是”“ 空字符串

快速排序算法

快速排序的算法中心**是找到一个对比值,一般情况可以用第一个key的数据来做对比也可以使用其他的规则找到对比值
然后我们将剩余的数据一一对比,分成两个部分存放一个是比对比值小的,一个是比对比值大的,递归调用函数,最后合并数据

以下为例子


    $arr = [3,1,6,4,9];

    function quickSort($arr)
    {
        if (count($arr) <= 1){
            return $arr;
        }
        //找到中间值
        $number = $arr[0];
        $left = [];
        $right = [];
        //对比中间值,区分大小两个区域
        for ($k = 1; $k < count($arr); $k++) {
            if ($number > $arr[$k]) {
                $left[] = $arr[$k];
            }else{
                $right[] = $arr[$k];
            }
        }

        //递归调用
        $left = $this->quickSort($left);
        $right = $this->quickSort($right);

        //数据合并返回
        return array_merge($left, [$number], $right);
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.