跨域设置Cookie不生效

场景是 a.com 中页面 标签中嵌套 b.com, 而 b.com 是设置 b.com 的 Cookie, 于是在 chrome 调试模式看到如下图的提示, 解决办法其实提示已经告诉了:

但是发现如果设置成 None 的话还需要加 Secure 即须支持 https, 果断放弃, 最终选择 Lax 的方式, 其中预加载的方式可以解决:

SameSite详细参数: https://www.cnblogs.com/tianma3798/p/13517336.html
预加载格式: https://www.w3school.com.cn/tags/tag_link.asp

发表在 跨域解决方案 | 留下评论

shell字符串截取

详细 http://c.biancheng.net/view/1120.html

发表在 bash | 留下评论

Golang main.go调用同目录下其它go文件时报“undefined”错误

golang main包下推荐只有一个main.go的入口文件,如果非得这样做那么go run 的时候把所有文件都得加上,否则默认只加载main.go这一个文件,只有非main包里的文件才会通过依赖去自动加载。所以你需要输入多个文件作为参数如: go run a.go b.go c.go 或 go run *.go

发表在 GO | 留下评论

安装Golang环境

# install golang from https://code.google.com/p/go/downloads/list
# here golang 1.2(linux-amd64)
$ wget https://go.googlecode.com/files/go1.2.linux-amd64.tar.gz
$ tar -xvf go1.2.linux-amd64.tar.gz
$ cp -R go /usr/local/
$ vim /etc/profile.d/golang.sh
# add below to golang.sh
# export GOROOT=/usr/local/go
# export PATH=$PATH:$GOROOT/bin
# export GOPATH=/data/apps/go
$ source /etc/profile.d/golang.sh

IDEA指定golang安装路径时出现“The selected directory is not a valid home for Go SDK”的解决办法:

https://www.cnblogs.com/smartisn/p/15737839.html

发表在 GO | 留下评论

二进制相加

假设计算机字长为8

10 + 16

10 的二进制: 0000 1010
16 的二进制: 0001 0000

相加的方式为从右(低位)往左(高位)依次按位相加: 0+0为0、0+1 or 1+0为1、1+1为0并且往左进1

注意:
1、反码二进制相加遇到最高位进位时需要+1
2、补码二进制相加遇到最高位进位时需要舍弃最高位

参考: http://c.biancheng.net/view/3300.html

发表在 概念名词 | 留下评论

机器数、真值、原码、反码、补码

之前一直搞不清这几个概念的区别联系

机器数

指的是十进制数的二进制表示,正负号用计算机字长的最高位表示,“+”用0表示,“-”用1表示
如计算机字长为8:

10 的机器数为: 000001010
-10 的机器数为: 100001010

真值

是相对机器数来说的,是机器数的十进制表示

假如计算机字长为8:

机器数为: 00001010 真值为: 10
机器数为: 10001010 真值为: -10

原码、反码、补码都属于机器数,是机器数的三种编码方式

原码的也就是待编码的机器数,即等于原来的机器数,如:

机器数为: 00001010 原码为: 00001010
机器数为: 10001010 原码为: 10001010

反码:

如果机器数的真值是正数,则 反码 = 原码
如果机器数的真值是负数,则 反码 = 原码的二进制位取反(除符号位)

真值: 10 原码为: 00001010 反码为: 00001010
真值: -10 原码为: 10001010 原码为: 11110101

补码:

如果机器数的真值是正数,则 补码 = 原码
如果机器数的真值是负数,则 补码 = 原码的二进制位取反(除符号位) + 1, 即反码 + 1

真值: 10 原码为: 00001010 反码为: 00001010
真值: -10 原码为: 10001010 原码为: 11110110

为啥要原码、反码、补码呢,存在的意义是啥?
存在即合理,因为计算机是不会通过真值来加减法的,只能转换为二进制,如:

1、要想求 10 – 5 的值,计算机是把公式表示为 10 + (-5),也就是两个数的加法

真值: 10 原码为: 00001010
真值: -6 原码为: 10000110

假设直接通过两个原码直接相加的结果肯定是不对的,这时借助反码:
真值: 10 原码为: 00001010 反码: 00001010
真值: -6 原码为: 10000110 反码: 11111001
两个反码相加为: 00000001 00000011
再转成原码为: 00000100 (反码相加进位的话要加1)
真值为: 4

2、举个补码的例子:
看起来反码就能满足加减运算了,可是为什么还要补码呢,看下面:

真值: 2 原码为: 00000010 反码: 00000010
真值: -2 原码为: 10000010 反码: 11111101
两个反码相加值为: 11111111
转成原码为: 10000000
真值为: -0

这样真值貌似也没啥问题,0的原码就可表示为: 10000000 和 00000000,明显就是不靠谱的,因此补码:

真值: 2 原码为: 00000010 反码: 00000010
真值: -2 原码为: 10000010 反码: 11111110
两个反码相加值为: 1 00000000 (补码相加进位的话要舍弃)
转成原码为: 00000000
真值为: 0

于是0的原码只能为 00000000, 这里 10000000 可以作为 -128 的原码,完美~

反码、补码背后的原理我看了好几天还是没搞懂,后面有空再看吧:

目前网上有以下几种对加减运算的理解:
1、利用同余数的特点,将进行加减法的两个值等价替换

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html#!comments

2、利用二进制的特点,认为负数可以直接被表示,通过判断结果的正负值来调整计算公式

http://www.ruanyifeng.com/blog/2009/08/twos_complement.html

3、通过取模运算+负数等价替换来实现

https://blog.csdn.net/mkr67n/article/details/114701908

4、也是通过取模运算,只不过负数是通过拍脑门儿设置的

https://www.zhihu.com/question/30395946?sort=created

发表在 概念名词 | 留下评论

Laravel中间件原理

setContent(str_replace('{img_list}', '', $tplContent->getContent()));

        echo $tplContent->getContent(), PHP_EOL;

        return $next();
    }
}

class Title {
    public static function handle($tplContent, Closure $next) {
        $tplContent->setContent(str_replace('{title}', 'Test Title', $tplContent->getContent()));

        echo $tplContent->getContent(), PHP_EOL;

        return $next();
    }
}

$parsers = ['ImageList', 'Title'];

class TplContent {
        private $tplContent = '

{title}

{img_list}'; public function setContent($content) { $this->tplContent = $content; } public function getContent() { return $this->tplContent; } } $tplContent = new TplContent; $callback = array_reduce(array_reverse($parsers), function($stack, $pipe) use ($tplContent) { return function() use ($tplContent, $stack, $pipe) { return $pipe::handle($tplContent, $stack); }; }, function() use ($tplContent) { echo 'real process result: ', $tplContent->getContent(), PHP_EOL; }); call_user_func($callback);
发表在 涨姿势 | 留下评论

Composer 镜像

镜像源

国内的
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer config -g repo.packagist composer https://packagist.phpcomposer.com
官方的
composer config -g repo.packagist composer https://packagist.org

解决问题:

https://blog.csdn.net/u011337280/article/details/81434548

发表在 涨姿势 | 留下评论

declare(strict_types=1)跟不加有啥区别

PHP7中增加强类型校验支持,默认是弱类型转换

关闭情况下:

// declare(strict_types=1);

function val(): string {
return 1;
}

echo val();

返回: 1

打开情况下:

PHP Fatal error:  Uncaught TypeError: Return value of val() must be of the type string, integer returned in /test.php:6
发表在 php异常, 涨姿势 | 留下评论

SQL分组取每组前一(或几)条记录(排名)

https://www.cnblogs.com/netserver/p/4518995.html

发表在 mysql | 留下评论