• 跟开发沟通,在测试版的 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
    
  • 如何问问题 at 2021年01月27日

    能够正确的提问,已经算是解决 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)
                }
            })
        }
    }
    
    

    执行结果