Тех собес на middle-senior Golang Разработчик в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории Golang Разработчик

Посмотреть видео в категории

(2024-07-05)

Code Analysis

  • Проанализируйте данный код на Go, использующий каналы и WaitGroup. Каков будет результат выполнения программы?
package main 
 
import ( 
 "fmt" 
 "sync" 
) 
 
func main() { 
 ch := make(chan int) 
 wg := &sync.WaitGroup{} 
 wg.Add(3) 
  
 for i := 0; i < 3; i++ { 
  go func(v int) { 
   defer wg.Done() 
   ch <- v * v 
  }(i) 
 } 
 
 go func() { 
  wg.Wait() 
  close(ch) // Закрываем канал после завершения всех горутин 
 }() 
 
 var sum int 
 for v := range ch { 
  sum += v 
 } 
 
 fmt.Printf("result: %dn", sum) 
}
  • Проанализируйте данный код на Go, работающий с map. Будет ли ошибка при выполнении fmt.Printf("%v", &m["1"])? Если да, то почему? (Подсказка: будет ошибка)
package main 
 
import "fmt" 
 
func main() { 
    m := make(map[string]int) 
    m["1"] = 0 // Используем оператор `=` для присваивания значения 
   fmt.Printf("%v", &m["1"]) // Печатаем значение элемента по ключу "1" 
}
  • Проанализируйте данный код на Go, демонстрирующий работу с интерфейсами и nil. Что выведет fmt.Println(a == b)? Объясните, почему ‘nil бывает разный’.
package main 
 
import "fmt" 
 
type impl struct{} 
 
type I interface { 
 C() 
} 
 
func (*impl) C() {} 
 
func A() I { 
 return nil 
 
} 
func B() I { 
 var ret *impl 
 return ret 
} 
 
func main() { 
 a := A() 
 b := B() 
 fmt.Println(a == b) 
}
  • Проанализируйте данный код на Go, использующий defer. В каком порядке и с какими значениями будут вызваны fmt.Println? (Подсказки: call 0 -> 21, call 1 -> 20, call 2 -> 11)
package main 
 
import ( 
 "fmt" 
) 
 
func main() { 
 a := 10 
 defer func() { fmt.Println("call 0 ", a+10) }() //21 
 defer fmt.Println("call 1 ", a+10)              //20 
 a++ 
 fmt.Println("call 2 ", a) //11 
}