全面系统学测试 从小白入门到实战就业

162 阅读2分钟

download:全面系统学测试 从小白入门到实战就业

本课程为销量最高、备受好评的测试入门课程2020年全新升级版。升级课程亮点:1、测试设计、测试执行、测试总结、黑盒测试、白盒测试、自动化测试、性能测试、手机测试、面试讲解等全方位多角度进行讲解;2、辅助以支付宝、余额宝等实战项目演练,更增加主流热门电商类测试项目全流程与微信红包项目实战;3、掌握从简单业务场景到复杂业务场景下的不同测试实战技巧,满足入门+提高双重需求
适合人群
软件测试初学者、刚刚从事软件测试行业的新手,在校大学生、应届毕
业准备从事软件测试行业,准备转行进入软件测试行业的小伙伴
技术储备要求
0基础入门,无论你的基础怎么样,你的背景怎么样
都可以学习这门课程
func AsyncAdd(run func() error) {
//TODO: 扔進異步協程池
go run()
}
func GetInstance(ctx context.Context,id uint64) (string, error) {
data,err := GetFromRedis(ctx,id)
if err != nil && err != redis.Nil{
return "", err
}
// 沒有找到數據
if err == redis.Nil {
data,err = GetFromDB(ctx,id)
if err != nil{
return "", err
}
AsyncAdd(func() error{
return UpdateCache(ctx,id,data)
})
}
return data,nil
}
func GetFromRedis(ctx context.Context,id uint64) (string,error) {
// TODO: 從redis獲取信息
return "",nil
}
func GetFromDB(ctx context.Context,id uint64) (string,error) {
// TODO: 從DB中獲取信息
return "",nil
}
func UpdateCache(ctx context.Context,id interface{},data string) error {
// TODO:更新緩存信息
return nil
}
func main() {
ctx,cancel := context.WithTimeout(context.Background(), 3 * time.Second)
defer cancel()
_,err := GetInstance(ctx,2021)
if err != nil{
return
}
}
剖析
我們先简單剖析一下,這一段代码要幹什麼?其實很简單,我們想要獲取一段信息,首先會從緩存中獲取,假如緩存中獲取不到,我們就從DB中獲取,從DB中獲取到信息後,在協程池中放入更新緩存的辦法,異步去更新緩存。整個設計是不是很圆滿,但是在實践工作中,異步更新緩存就沒有勝利過?

招致失敗的缘由就在這一段代码:

AsyncAdd(func() error{
        return UpdateCache(ctx,id,data)
    })

錯誤的缘由只要一個,就是這個ctx,假如改成這樣,就啥事沒有了。

AsyncAdd(func() error{
ctxAsync,cancel := context.WithTimeout(context.Background(),3 * time.Second)
defer cancel()
return UpdateCache(ctxAsync,id,data)
})