Spring Boot 中使用 Thrift
Thrift简介
Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统)、Cappuccino、Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。虽然它以前是由Facebook开发的,但它现在是Apache软件基金会的开源项目了。该实现被描述在2007年4月的一篇由Facebook发表的技术论文中,该论文现由Apache掌管。[1]
社区版IDEA中启动Tomcat
Golang 中的堆栈
Golang 中的排序算法
Golang 中的链表
PHP 8 安装amqp扩展
最近公司新项目开始使用PHP8,之前使用的扩展也需要升级,更换成支持PHP8的版本。在使用RabbitMQ时需要使用到php-amqp扩展,我安装的时候发现网上的一些安装教程都比较旧了,顶多支持到php7对应的版本。下面记录一下php8相关扩展的安装过程。
安装rabbitmq-c
安装PHP-AMQP扩展前首先要安装 rabbitmq-c,rabbitmq-c 是一个支持 RabbitMQ v2.0+ 版本的由C语言开发的 AMQP 客户端库。
按照官方说法安装rabbitmq-c需要使用 v2.6及以上版本的CMake进行构建,我们先安装一下它:
1 | sudo dnf install cmake |
MySQL 事务隔离级别和锁
Golang 中defer修改返回值问题
什么是defer
在 Golang 中 defer 是一个关键字,它用来实现 延迟调用函数:当 defer 语句被执行时,跟在 defer 后面的函数会被延迟执行。直到包含该 defer 语句的函数执行完毕时,defer 后的函数才会被执行,不论包含defer语句的函数是通过 return 正常结束,还是由于 panic 导致的异常结束。你可以在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反[1]。
既然 defer 之后的函数是在“主函数”(这个主函数是先对于 defer 定义的延迟调用函数而言的)执行完毕后执行,那就可能出现这样一种情况:“主函数”在执行完成之后生成了返回值,延迟调用函数继续执行,假如此时延迟调用函数修改了返回值,会发生什么?
Golang 中的队列
什么是队列
队列,又称为伫列(queue),计算机科学中的一种抽象资料型别,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。
队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加[1]。
Golang 实现单链队列(数组)
在 Golang 中使用数组实现一个单链队列,除了需要创建一个数组存储数据外,还要定义最大值(maxSize)、头指针(front)和尾指针(rear),其中头指针和尾指针的初始值为-1。
当向队列中插入数据时,头指针不变,尾指针+1,最后在数组的尾指针位置赋值。
当从队列中取出数据时,尾指针不变,头指针+1,最后在数组的头指针位置取值。