接口超时优化代码案例记录
语言:PHP 接口超时问题是一个比较常见的场景,当接口中包含有较多的数据库查询语句,并且涉及到循环执行这些查询语句时,执行时间就会变大很多,初期可能因为新表数据量少还在接受范围,当后期数据量变大后,可能就会消耗极的时间,甚至是超时。 方法一:延长可执行时间对面这个问题,我们可以延长可执行时间, 1set_time_limit(30); //设置程序执行时间为30s 但这种方式,对用户其实特别不友好。除了一些特殊场景外,并不建议无限制的延长可执行时间。特别是不要将时间设置为set_time_limit(0)无限时长,这样一旦遇到死循环情况,执行就不会结束,可能会导致大量进程堆积,极大的消耗CPU。 方法二:消息队列通过消息队列的方式,将请求插入队列(可以借助Redis等缓存),直接返回结果。再脚本通过获取队列信息执行需要的操作。 优点:这样返回的速度会极快,而且内容也可以有效执行。 缺点:脚本如果执行失败,但之前请求已经返回成功。 优化: 1231. 脚本完成时通过请求**回调接口**告知执行结果;(当然,脚本执行过程中的日志记录也很重要)2. 前端收到接口返回成功信息时,展示...
Go-解决go的fatal error: concurrent map writes map非并发安全
普及概念: 普及1Golang sync.WaitGroup的用法 1234567891011121314package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) //并行 } time.Sleep(time.Second)} 上述方法,其实就是通过sleep等待go并行线程都完成再往下走,但是这个也是有问题的因为sleep的时间无法精确。 可以考虑使用管道来完成上述操作: 12345678910111213func main() { c := make(chan bool, 100) for i := 0; i < 100; i++ { go func(i int) { fmt.Println(i) c <-...
Go-单元测试篇(简单)
参考文章 golang test测试使用 Go Test 单元测试简明教程 Golang 单元测试执行 _test.go 中的某个 func 方法 正文 为什么需要单元测试,因为你可能修改的只是一个方法,但如果整个接口都放进去测试,明显效率不高。 创建测试go文件,测试文件以 _test.go 结尾;引入包 import “testing”;测试用的参数有且只有一个,在这里是 t *testing.T。 12345678910111213package mainimport "testing"func TestAdd(t *testing.T) { if ans := Add(1, 2); ans != 3 { t.Errorf("1 + 2 expected be 3, but %d got", ans) } if ans := Add(-10, -20); ans != -30 { t.Errorf("-10 + -20 expected be -30, but %d g...
MYSQL查询~ 存在一个表而不在另一个表中的数据
业务场景: account表保存的用户信息 包含 真正用户 和 测试用户(内部测试账号),test表保存测试用户信息,对应account表id字段test.account_id。 查询时需要剔除account表测试用户,找出account表id字段中,不与test表account字段相等的值。 方法一: 使用 not in ,容易理解,效率低 执行时间为:8.6ms(其他数据相同方法) 123注:这边因为account_id字段具有唯一性,所以才不用distinct去重。select account.id from account where account.id not in (select account_id from test) 方法二:使用 left join…on… , “test.account_id is null” 表示左连接之后在test.account_id 字段为 null的记录 执行时间:9ms(其他数据相同方法) 1select account.id from account left join test on account.id ...
GO time篇
go Time篇当前日期 time.Now().Format(“2006-01-02”) 当前时间 time.Now().Format(“2006-01-02 15:04:05”) 年月日 year, mon, day := time.Now().UTC().Date() mon格式为month需要转换 也可以单独获取 加一天 time.Parse(“2006-01-02 15:04:05”, date).AddDate(0, 0, 1).Format(“2006-01-02 15:04:05”) 减一天 time.Parse(“2006-01-02 15:04:05”, date).AddDate(0, 0, -1).Format(“2006-01-02 15:04:05”) 0 0 1 前面两个零分别代表年,月 date初始日期 golang包time用法详解 golang map 获取某个值 https://blog.csdn.net/weixin_39524842/article/details/111890157
当访问不到类似http-xxxx-9001内容时
查看是否使用阿里云,确认安全组是否开启端口 查看防火墙端口是否开启https://www.cnblogs.com/zxg-blog/p/9835263.html 查看netstat -lnpt | grep “端口” 查看端口是否允许 查看是否是0.0.0.0,而非127.0.0.1 通过telnet 0.0.0.0 9001 通过curl 0.0.0.0 9001 通过ping 0.0.0.0 9001 端口是否被占用
关于git撤回内容的思考
本地如果是在本地就直接用Reset Git Reset 三种模式
位运算
二进制二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。 简单的理解就是满二进一位,每一位只可能是0或1。 以1,2,3,4为例,1就是1; 而2在1的基础上加1,位满2进一位,所以前面新增一位是1,之前的栏位因为进位所以为0,二进制就是1 0;那么,3的情况就是在2的末位加上1,所为为 1 1; 最后,4在3的末位加1,末位满2需要往倒数第二位进位加1,末位则为0,倒数第二位因为末位进位也满2进位,所为为0,新增一位为1,就是 1 0 0 。 位运算 运算符 作用 \ | 位或 & 位与 ^ 位异或 << 位左移 >> 位右移 ~ 位取反 上面就是常见的运算符。下面讲解具体的运算: | 位或 (1遇0保存1) 举例:10 | 15 10 转二进制 1010 15 转二进制 1111 1010 1111 1111 结果:15 & 位与(1遇0保存0) 举例:10 &15 10 转二进制 1010 15 转二进制 ...
扩展管理工具composer
前言作为最热门的php的扩展工具,composer在各个php框架基本都会用到,本文介绍一下实用常规操作。 composer的作用Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。 初始化扩展包先创建一个空目录,再在空目录里执行 Composer 自带的 init 命令,自动生成 Composer 的配置文件(composer.json)。 123$ mkdir composer_test$ cd composer_test$ composer init 请注意: Minimum Stability(官方说明) 要输入 dev,表明我们的扩展包最小稳定版的开发版。否则 Composer 的默认 Minimum Stability 是 stable,扩展包需要打上版本号才能被 Composer 认为是稳定版(stable),前期开发调试时简单点处理,设置为 dev,这样引入开发中的 Composer 扩展包时不需要去管什么版本号,等开发调试过了...
GO mod篇
三分钟掌握Go mod常用与高级操作链接 go mod 使用链接 更多内容 跳转到 pprof记录 123https://pkg.go.dev/github.com/revel/modules/pprof#section-readmehttps://pkg.go.dev/net/http/pprof

