Mac 安装 Xdebug 小记

环境:MacOS Catalina 10.15 pecl 方式安装 1 pecl install xdebug 报错: 1 2 3 4 5 6 7 8 phpize grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/php/Zend/zend_modules.h: No such file or directory grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory Configuring for: PHP Api Version: Zend Module Api No: Zend Extension Api No: 尝试了N种方法,以失败告终。。

Session Cookie 与 JWT 认证方式对比

在理解 Session Cookie 概念前,我们需要先了解下 HTTP 协议的特点。HTTP 是无状态协议,用于传输数据。 它启用了客户端和服务器端之间的通信。 最初是为了在Web浏览器和Web服务器之间建立连接而建立的。 注意:HTTP 是无状态的。什么叫无状态?比如你在上网冲浪,某购物平台买东西,当你将商品加入购物车时,切换到另一个页面,购物车的东西就消失了。因为每次 HTTP 请求对于服务端来说都是新的,服务端并不知道你是谁。 那有没有办法解决这个问题呢?聪明如你,如果我第一次请求后,服务端给我一个 key,每次提交请求带上它,那服务端是不是就知道我是谁了呢?Session Cookie 其实就是基于这样的设计。 我们来看一下基于 Session 的认证机制。 用户使用用户名密码登录网站。服务端生成 Session 放到内存中。 服务端往浏览器里设置 session-id (相当于上文提到的 key,唯一性由服务端保证) 客服端(指浏览器)向服务端发起获取用户数据请求,并携带 Cookie。 服务端通过 session-id 查找对应 Session ,找到即返回数据。 写到这里,有同学可能会问了,单体应用这样实现没有问题。如果应用要做负载均衡,物理机甚至都不在一起,这种情形下怎么维护 Session 呢? 在笔者实际参与的项目中,比如 Laravel 项目,我们通常会把 Session 放到 Redis 存储,多个应用使用同一个 DB,这样也是一种解决办法。

flock 文件锁

flock 是建议性锁,不具备强制性。进程在文件(inode)放了锁,其他进程可以知道。如果有进程不讲武德,不判断锁的存在,直接进行文件件操作也是允许的。 flock 常用于文件数据竞争管理,也会用来检测进程是否存在(进程终止,锁自动释放)。 主要三种操作类型: LOCK_SH,共享锁,多个进程可以使用同一把锁,常被用作读共享锁; LOCK_EX,排他锁,同时只允许一个进程使用,常被用作写锁; LOCK_UN,释放锁; LOCK_NB 参数,在获取锁失败,不会等待,立即返回错误。 下面用 Go 验证 flock 注意:Windows 不支持 pid 锁。 flock1.go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 func main() { var f = "app.

Spring Boot 集成 Spock

上一篇 Spock 入门 介绍了 Spock 基础概念。本篇主要介绍 Spring Boot 使用 Gradle 集成 Spock。 环境: java11 gradle-6.6.1 build.gradle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 plugins { id 'org.

Spock 入门

之前写单测都是用 Junit,稍微复杂点逻辑,写起来不免很繁琐。用了 Spock 后,发现单测可以如此顺滑。 在实际应用中,需要理解 Spock 阶段和块的概念。 如图: 阶段 Setup 初始化 Stimulus 刺激 Response 响应 Cleanup 清理资源 块 Given 块 准备或定义待测试的数据或对象。 1 2 3 given: def stack = new Stack() def elem = "push me" When 和 Then 块 when 和 then 块始终一起出现。他们描述了刺激和预期的反应。