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

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

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

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

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

(2024-07-05)

Техническое собеседование

Задача 1: Генерация уникальных случайных чисел

Написать функцию, которая возвращает слайс с заданным количеством случайных уникальных чисел.

package main 
 
import ( 
    "fmt" 
    "math/rand" 
) 
 
func main() { 
    fmt.Println(uniqRandn(10)) 
} 
 
// Написать функцию, которая возвращает слайс с заданным количеством случайных уникальных чисел 
func uniqRandn(n int) []int { 
    n1:=make([]int,n) 
    for i:=0;i<n;i++{ 
        for{ 
            num := rand.Int() 
            for j:= range n1{ 
                c:=0 
                if num==j{ 
                    c++ 
                } 
            } 
            if c!=0{ 
                n1=append(n1,num) 
                break 
            } 
        } 
    } 
    return n1 
}

Примечание: Было предложено улучшить реализацию через мапу.

Задача 2: Обработка сообщений и хранение истории

Дан следующий код:

package main 
  
import "fmt" 
  
func main() { 
    consumeMessages() 
} 
func consumeMessages() { 
    for { 
        msg := receiveMessage() 
        // Do something with msg 
        storeMessageType(getMessageType(msg)) // Сохраняем последние 1000 типов сообщений в памяти 
    } 
} 
  
func getMessageType(msg []byte) []byte { 
    return msg[:5] 
}

Как реализовать сохранение последних 1000 типов сообщений в памяти?

Задача 3: Работа со строками в Go

Объяснить поведение следующего кода:

package main 
  
import "fmt" 
  
func main() { 
    s := "hêllo" 
    for i := range s { 
        fmt.Printf("position %d: %cn", i, s[i]) 
    } 
    fmt.Printf("len=%dn", len(s)) 
}

Задача 4: Реализация Worker Pool

Реализовать worker pool. Есть 10 задач (функций), каждая засыпает на 1 сек и выводит номер воркера, который эту задачу исполнил. Количество воркеров задается при запуске.

package main 
 
import "fmt" 
  
func main() { 
    var wg sync.WaitGroup 
    n := 3 
    c:=make(chan struct{},n) 
    for i:=0;i<10;i++{ 
        wg.Add(1) 
        go func(){ 
            c<-struct{}{} 
            defer <-c 
            defer wg.Done() 
            time.Sleep(1*time.second) 
        }() 
    } 
    wg.Wait() 
}