投资系列(1)-牛眼投资法

投资书籍 牛眼投资法 书中重要的观点: 席勒的研究表明,收益和股价之间没有相关性:股价由情绪主宰。 市盈率越高,那么股市的回报就越低(以年为单位的长期) 例如本章的部分论述及观点: 在熊市中,投资者会逐渐对股市指数没有增长感到厌倦和绝望,然后开始寻找其他投资机会。 由牛市到熊市的股市调整,一般……

阅读全文

go泛型简化数据库读取操作

前提 go 语言已经发布了 1.18 带有正式泛型的版本,但很多文章都仍旧只是限于官方的 Add(数学加减法) 泛型函数例子。因此本文尝试使用泛型来简化数据库操作这一个过程,深入了解及使用这个新版的泛型。当然其中的实现都以简单为主,当做使用泛型的可用例子。 注意本文使用 gorm 作为基础的数据库访问工具,当然……

阅读全文

swagger定义的api自动生成jmeter测试脚本jmx

准备工作 我们使用openapi-generator-cli这个工具用做 swagger api 转化 jmeter jmx 的工具。 该工具的文档地址:https://openapi-generator.tech/docs/installation/#jar 下载安装 OpenApiGenerator OpenAPI Generator 可用于在给定 OpenAPI 规范(v2, v3)的情况下自动生成 API 客……

阅读全文

使用jmeter命令行动态传递参数进行自动化测试

需求 对于使用 jmeter 进行接口测试来说,使用 GUI 方式只能是手工测试,而无法与 Jenkins 等集成为自动化测试。 例如:我们要对于用户登录接口进行测试,可能部署环境有 2 个,测试环境和预发环境。假设测试环境域名 host=test.localhost.com,预发环境域名 host=pre.localhost.com 那么测试的接口地址,就不可能是静态固……

阅读全文

go web 接口返回time.Time类型数据的格式化

使用自定义类型并重写 JSON 序列化和反序列化的方法 Go Web 接口结构体 type User struct { Id uint64 `json:"id"` Username string `json:"username"` Password string `json:"password"` CreateTime time.Time `json:"createTime"` } 接口输出 createTime 字段的时候其格式并不符合我们的习惯。可以使用类型别名的方式重写 JSON 的两个方法: MarshalJSON() ([]byte, error) UnmarshalJSON(data []byte) error package types import ( "fmt" "time" ) type DateTime time.Time func (d DateTime) MarshalJSON() ([]byte, error) { // 重写time转换成json之后的格式 var str = fmt.Sprintf("\"%s\"", time.Time(d).Format("2006-01-02T15:04:05")) return []byte(str), nil }……

阅读全文

go使用各种orm时无法映射time.Time类型的解决方案

问题现象 无论是使用各种 ORM 工具(sqlx,xorm,gorm 等)访问 MySQL 时,当将记录集映射为结构体的时候,当结构体中有属性类型是time.Time 的时候,总是报unsupported Scan, storing driver.Value type []uint8 into type *time.Time 的错误,并且结构体中的 time.Time 类型字段被设置为默认零值。 解决方案 解决方法是使用 MySQL 驱动程序自带……

阅读全文

docker desktop for mac is stopped!

问题 最近将 docker desktop for mac 升级到最新的版本后,竟然再也无法启动。无论是卸载重装什么的都没用。 看网上说是版本问题。要降级到旧版。结果 docker 站的旧版下载地址好难找。 解决 在 docker 的文档docker desktop for mac 安装指南网页的左侧菜单找到 【Previous versions】 点开后,点击【desktop for mac 3.x……

阅读全文

MYSQL 8 修改最大连接数

对于 mysql8 数据库设置其最大连接数,通常使用的是 max_connection。 查看设置 可以使用如下 sql 查询全局变量的设定: show variables like '%max_connections%'; 得到查询结果:(如下图所示) max_connections 这个就是通常的最大连接数; mysqlx_max_connections 这个则是指当数据库安装了各种插件(例如审计插件、查询代理插件、主从插件等)后插件能够接收的最大连接数……

阅读全文

使用jmeter抓取API请求并进行多用户多并发压力测试

我的环境 软件版本: 安装 jmeter 的最新版本,当前是 5.4.3,使用简体中文界面 操作系统: MacOs Monterey 12.3.1,ios 15.3.1 运行环境: Java 8 抓取 APP 的 https 请求 手机端安装 JMeter 证书 在使用 JMeter 抓取 APP 的 https 请求的时候,由于 ios 的安全限制比较严格,因此将 JMeter 设置为网络代理的时候,必须要安装并信任 JMeter 提供的认证证书。 位于 %JM……

阅读全文

使用 docker +gitea + jenkins 进行自动化持续集成

环境说明 本例使用 docker-compose 进行。 假设你已经安装 docker 以及 docker-compose 的最新版,并使用的是 linux 服务器。 下载 gitea 及 jenkins 镜像 docker pull gitea/gitea:1.16.4 docker pull jenkinsci/blueocean 编写 compose 采用分别为 gitea 和 jenkins 编写 docker-compose.yml 文件的形式。 gitea 的 docker-compose.yml 内容: version: "3" networks: gitea: external: false volumes: gitea: driver: local services: server: image: gitea/gitea:1.16.4 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" jenkins 的 docker-compose.yml 内容: version: "3" networks: jenkins: external: false volumes: jenkins: driver: local services: server: #image: jenkins/jenkins:alpine-jdk11 image: jenkinsci/blueocean container_name: jenkins # privileged 是……

阅读全文