请用 go 语言实现

2020-06-10 17:14:36 +08:00
 accidentaly
- 实现方法:FindFatestUrl(ctx context.Context,urls []string)(url string,ts time.Duration)
- 找出最快响应 200 的 url 及其响应时间
- 并发请求 url,但同一时刻最多并发请求 5 个 url
- 请求发送 3 秒后若未返回则超时,视为请求失败
- 仅使用 Go 标准库,可使用伪代码表示发送 http 请求
1836 次点击
所在节点    问与答
9 条回复
ym1ng
2020-06-10 17:41:59 +08:00
作业请自己做(手动狗头
fiypig
2020-06-10 17:46:07 +08:00
面试题吗
morty961
2020-06-10 17:47:01 +08:00
这个面试题我也做过。变量名都一样,不会是同一家公司吧
dallaslu
2020-06-10 18:02:09 +08:00
话说这个题的 point 在协程吗?
sadfQED2
2020-06-10 18:56:57 +08:00
每个 url 都开一个 go 程请求下,请求结束添加到管道,管道够 200 个就返回,是这个意思吗?
WhatC
2020-06-10 19:03:53 +08:00
@sadfQED2 200 是 http 的 200 吧
blackeeper
2020-06-11 00:10:04 +08:00
伪代码,golang 初学者,请大神检阅
```
#urls 放入通道
go func() {ch <- urls;ch.Close()}()
#五个 goroutine,并发
for i=0;1<5;i++ {
go func() {
for url := range ch {
#消费通道
r,err := httpGet(url,timeout=3)
if err != nil || err == TimeoutError {
log.err("请求失败:%s"url)
break
}
#存储返回 200 的结果
if r.StatusCode == 200 {
ts := r.time.Duration
results[url] = ts
}

}
}()
}
#最快相应 200 的 URL
sortTime(results)
```
blackeeper
2020-06-11 00:15:30 +08:00
xkeyideal
2020-06-11 09:31:51 +08:00
作业不会做,给钱,我给你完整可运行的实现方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680405

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX