mirror of
https://github.com/goavengers/go-interview.git
synced 2026-02-04 04:36:19 +00:00
Update README.md
This commit is contained in:
@@ -325,4 +325,101 @@ func main() {
|
||||
sem.Dec(n)
|
||||
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
### <a name="7"></a> 7. Что выведет код?
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
runtime.GOMAXPROCS(1)
|
||||
|
||||
done := false
|
||||
|
||||
go func() {
|
||||
done = true
|
||||
}()
|
||||
|
||||
for !done {
|
||||
}
|
||||
fmt.Println("finished")
|
||||
}
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ или подсказка</summary>
|
||||
Как можно изменить этот код, чтобы был вывод “finished”?
|
||||
</details>
|
||||
|
||||
### <a name="8"></a> 8. Какая есть проблема в коде?
|
||||
|
||||
```go
|
||||
var counter int
|
||||
for i := 0; i < 1000; i++ {
|
||||
go func() {
|
||||
counter++
|
||||
}()
|
||||
}
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ или подсказка</summary>
|
||||
Как её можно решить?
|
||||
А как её можно бы было решить, если бы в языке не было пакета sync?
|
||||
</details>
|
||||
|
||||
### <a name="9"></a> 9. Что выведет код?
|
||||
|
||||
```go
|
||||
func main() {
|
||||
v := 5
|
||||
p := &v
|
||||
println(*p)
|
||||
|
||||
changePointer(p)
|
||||
println(*p)
|
||||
}
|
||||
|
||||
func changePointer(p *int) {
|
||||
v := 3
|
||||
p = &v
|
||||
}
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ или подсказка</summary>
|
||||
Почему? Как нужно изменить функцию changePointer, чтобы вывело 5 и 3 (в оригинальной версии выводится 5 и 5)?
|
||||
</details>
|
||||
|
||||
### <a name="10"></a> 10. Что выведет код?
|
||||
|
||||
```go
|
||||
func worker() chan int {
|
||||
ch := make(chan int)
|
||||
|
||||
go func() {
|
||||
time.Sleep(3 * time.Second)
|
||||
ch <- 42
|
||||
}()
|
||||
|
||||
return ch
|
||||
}
|
||||
|
||||
func main() {
|
||||
timeStart := time.Now()
|
||||
|
||||
_, _ = <-worker(), <-worker()
|
||||
|
||||
println(int(time.Since(timeStart).Seconds())) // что выведет - 3 или 6?
|
||||
}
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ или подсказка</summary>
|
||||
Что нужно изменить, чтобы код работал за 3 секунды?
|
||||
</details>
|
||||
|
||||
Reference in New Issue
Block a user