跟开发沟通,在测试版的 app 提供一个恢复初始状态的按钮,或者一些输入框中输入指定的代码触发初始状态
木有小伙伴用吗
python built_in 的 sort 是原地排序,并且会根据要排序的对象选择不同的算法来优化。
那么问题来了,二分法用递归写,复杂度是多少呢?
如果不用递归,要怎么优化,优化完复杂度是多少
抽空学习一下 markdown 语法
门槛高是好事,一旦门槛低了,很快就会变成一片红海,特别是现在信息那么发达。
比较少写 Java,只是偶尔复现 bug 会调试
很棒~已经 star
广州不配拥有姓名
这样做的价值点在哪里?如果不这样做能不能其他的方式完成?由你来做和别人来做有什么不同?
对业务进行了拿些赋能?你在本次解决问题中还有哪些不足?不足的地方为什么没有提前想到?
确保下次百分之百不会犯这类错误?
已经 star,期待更加完整的功能和文档
很棒!我本来也有一个这样的想法,没想到你们先实现了
我之前用 go 做过,可以参考一下。还是自己写代码比较灵活。
https://testerhome.com/topics/24998
mqtt 是长连接,发送消息之前判断连接是否是可用的,不用就重新。
from string import Template
...
... _class_template = """
... class ${klass}:
... def __init__(self, name):
... self.name = name
...
... def ${method}(self):
... print('Hi', self.name + ',', 'welcome to', '$site')
... """
...
... template = Template(_class_template)
... exec(template.substitute(klass='MyClass',
... method='greet',
... site='StackAbuse.com'))
...
... obj = MyClass("John Doe")
... obj.greet()
Hi John Doe, welcome to StackAbuse.com
能够正确的提问,已经算是解决 50% 的问题
链式调用,httprunner3 就实现了
升级前是换行的,现在换行没了
一下子不是很习惯~
感觉新版的间距太大了
另外一个问题是看到有消息提醒,但是点击进去,提示为空的
谢谢,搞定~
Mac 16 寸
Chrome 87.0.4280.141
想问一下,怎么切换回去白色主题
记一个自己写的 bug(对全局变量,类变量生命周期不理解导致的)
有个变量叫 today,是格式化后的今天日期,很多地方用到,我就把它封装到了工具类的全局变量中。
本地调试没问题,结果是正常,在服务端跑也是正常的。可是第二天获取的日期就不对,还是前一天的日期。
难道是缓存的问题?重试服务试试,结果还真的就行了。搞定,笑嘻嘻~
可是到第三天,怎么又是变成了前一天的日期???真的是见鬼了。
本地调试看看,代码没问题啊,能正常获取。这到底是怎么回事啊!
难道 Python 标准库出问题了?不会吧。换 Django 日期工具类试试。
推送代码,重新部署服务,看看获取结果,一切正常。妥妥的。这下应该不会再有问题了吧?
又是一天早上,哦豁,怎么结果又是获取了昨天的日期。
我不信,重启服务。嗯,结果是对的,果然重启能解决 99% 的问题。
就这样,通过定时任务每天重启服务的方式过了几个月。
直到有一天,要获取一个当前时间戳的变量,也是很多地方用到。代码大概是这样
一看日志,恍然大悟
[12/Jan/2021 21:17:15] "GET /api/kafka/config/ HTTP/1.1" 200 216
time is: 1610457411.562096
[12/Jan/2021 21:17:26] "GET /api/kafka/template/ HTTP/1.1" 200 5838
time is: 1610457411.562096
[12/Jan/2021 21:17:29] "GET /api/kafka/template/ HTTP/1.1" 200 5838
time is: 1610457411.562096
[12/Jan/2021 21:17:31] "GET /api/kafka/template/ HTTP/1.1" 200 5838
可以看到打印的 t 一直是没变化的,但日志时间是不停变化的
t 是类变量,并不会在 list 方法结束后就释放内存,然后下次请求进来重新获取。而是程序重启之后才会重新获取。
之前 today 那个坑不容易看出来,因为是日期,隔天才变化。
Java 的没有,给个 Go 的~
package simple
import "strconv"
func summaryRanges(nums []int) []string {
ans := []string{}
n := len(nums)
if n == 0 {
return ans
}
for i := 0; i < n; i++ {
for j := i; j < n; j++ {
cur := nums[j]
var next int
if j != n-1 {
next = nums[j+1]
}
if j == n-1 || next-cur > 1 {
if j == i {
ans = append(ans, strconv.Itoa(cur))
} else {
ans = append(ans, strconv.Itoa(nums[i])+"->"+strconv.Itoa(cur))
}
i = j
break
}
}
}
return ans
}
package simple
import (
"reflect"
"testing"
)
func Test_summaryRanges(t *testing.T) {
type args struct {
nums []int
}
tests := []struct {
name string
args args
want []string
}{
// TODO: Add test cases.
{"test1", args{nums: []int{0, 1, 2, 4, 5, 7}}, []string{"0->2", "4->5", "7"}},
{"test2", args{nums: []int{0, 2, 3, 4, 6, 8, 9}}, []string{"0", "2->4", "6", "8->9"}},
{"test3", args{nums: []int{-1}}, []string{"-1"}},
{"test4", args{nums: []int{0}}, []string{"0"}},
{"test5", args{nums: []int{}}, []string{}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := summaryRanges(tt.args.nums); !reflect.DeepEqual(got, tt.want) {
t.Errorf("summaryRanges() = %v, want %v", got, tt.want)
}
})
}
}