Golang вопросы собеседований
13.5K subscribers
631 photos
3 videos
1 file
433 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
加入频道
👣 Почему это не вызывает ошибку?

package main
import "fmt"

func main() {
slice := []int{1}
fmt.Println(slice[1:])

}

Мы ведь обращаемся к элементу слайса с индексом 1, которого нет


▶️Итак, лучше 1 раз увидеть (определение поведения слайсов от авторов), чем 100 раз услышать (читать чьи-то интерпретации)

Вот цитата:
"For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range. For slices, the upper index bound is the slice capacity cap(a) rather than the length."
Особенно важно последнее предложение

Ну и небольшой пример для полного понимания:

package main
import "fmt"

func main() {

slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
slice1 := slice[5:6]
slice2 := slice1[1:10]
fmt.Println(slice1, slice2, cap(slice2), len(slice2))

}


Подробнее

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как организовать структуру проекта с несколькими модулями Golang?

▶️Итак, в 1 проекте должны содержаться 3 различные программы: Repeater, Controller и Executor.
Также нужно сделать 1 модуль, который они будут импортировать с некоторым набором общих для них функций.
Как организовать структуру такого проекта?


▶️Всё просто, делаем 3 разных файла main.go под каждый сервис. Кладём их каждый в свою подпапку в директории, например cmd.
А для общих библиотек используем отдельную директорию, например pkg, и будем импортировать отсюда функционал во все 3 сервиса.

Т.е. у нас получается структура файлов:
cmd/
repeater/
main.go
controller/
main.go
executor/
main.go
pkg/
c-library/
clibrary.go
go.mod


И потом запускаем компиляцию:
go build ./cmd/repeater
go build ./cmd/controller
go build ./cmd/executor


Пример main.go:
package main

import c_library "test/pkg/c-library"

func main() {
c_library.HelloWorld()
}


И общая библиотека:
package c_library

import "fmt"

func HelloWorld() {
fmt.Println("HELLO WORLD")
}


@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Здоровая конкуренция в Go. Главное не перехитрить самого себя

Вот неплохая статья, которая обсуждает параллельные вычисления на одном процессоре и масштабирование с ограничением количества одновременных запросов.
Рекомендуется использовать первый паттерн для выполнения параллельных вычислений без ограничений с использованием errgroup.

Если возможен бесконтрольный рост удаленных запросов, следует ограничить одновременное выполнение и подобрать лимит опытным путем.
Ну и для ускорения сложных вычислений можно использовать runtime.NumCPU в качестве лимита для распараллеливания на все ядра процессора.

📎 Статья

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Учимся разрабатывать REST API на Go на примере сокращателя ссылок

Держите годный контент
В этой статье описывается создание полноценного REST API сервиса — URL Shortener — и его деплой на виртуальный сервер с помощью GitHub Actions.

Это будет не игрушечный проект, а полностью готовый к использованию:
— для него будет выбран актуальный http-роутер
— важное место отведено о логам
— будут написаны тесты: unit-тесты, тесты хэндлеров и функциональные
— будет настроен автоматический деплой через GitHub Actions и др.

📎 Статья

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ 4 Репозитория на Github для подготовки к 4 различным типам собеседований по разработке программного обеспечения:

1. Собеседования по системному дизайну: https://github.com/ashishps1/awesome-system-design-resources

2. Собеседования по низкоуровневому проектированию: https://github.com/ashishps1/awesome-low-level-design

3. Собеседования по программированию: https://github.com/ashishps1/awesome-leetcode-resources

4. Поведенческое собеседование: https://github.com/ashishps1/awesome-behavioral-interviews

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Отличный обучающий материал по Go

Держите полезный ресурс, здесь показана большая часть того, что понадобится в реальной работе с Go: структуры, интерфейсы, создание своего веб-сервера, межсайтовый скриптинг, работа с БД и много всего ещё.
Очень полезно, рекомендую

📎 Ссылка

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang
👣 Шпаргалка по Go

Мощная шпаргалка по Go, которая покрывает практически все темы
Если пролистать хотя бы по диагонали, есть отличный от нуля шанс пройти собеседование и получить оффер)

Что внутри?
├╼ Компилятор
├╼ Пакеты
├╼ Функции
├╼ Управление памятью
├╼ Операторы
├╼ Управляющие структуры
├╼ Объектноориентированность
├╼ Интерфейсы
├╼ Обработка ошибок
├╼ Горутины (Goroutine)
├╼ Проверка управления памятью
├╼ Reflect
├╼ Добавление кода C
├╼ GUI
╰╼ Распределенные системы

📎 Cheatsheet

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Собственная функция sleep

Итак, задача: написать свою фукнцию sleep
🟡Первое, что может прийти в голову — использовать time.After, вот так:
package main

import (
"log"
"time"
)

func sleep(d time.Duration) {
select {
case <-time.After(d):
}
}

func CallSleep() {
log.Println("Do something")
sleep(5 * time.Second)
log.Println("Something else")
}

Но выглядит как-то громоздко, да и вообще.

🟡Второй вариант — сделать так:
func sleep2(d time.Duration) time.Time {
ticker := time.Tick(d)
for done := range ticker {
return done
}
return time.Now()
}


🟡А можно вообще сделать так:
func sleep(d time.Duration) {
<-time.After(d)
}

Ну вот, то, что нужно

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Golang HTTP синхронизация

▶️Кейс: пишем Restful сервер с использованием патернов network_api -> data(UseCase->Repository).

Так как все http хендлеры обрабатываются параллельно, то каким образом корректно протянуть зависимости репозиториев и use_case объектов в слой network_api? То есть это будут синглтоны или же их нужно создавать для каждого отдельного request?
Что насчёт доступа к общим ресурсам?
Например, use_case при загрузке читает json-конфигурацию и в дальнейшем к ней обращается по многим путям из слоя nwtwork_api.

Есть какие нибудь best practices?


▶️Здесь всё зависит от того, какие требования предъявляются к нашим данным (т.е именно модель данных диктует требования к архитектуре).
Если наши данные терпимы к параллельному одновременному доступу — тогда можно не замарачиваться. Если же нельзя одновременно из нескольких потоков обращаться к менеджеру данных — тогда стоит ввести глобальную блокировку. Фактически, такой глобальной блокировкой будет являться единственное соединение к базе данных.
Вот и всё, пожалуй

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Go, Allure и HTTP, или как тестировать HTTP-сервисы на Go

Держите полезную статью о тестировании Go-приложений
Что внутри?

В статье рассматривается создание библиотеки CUTE для упрощения тестирования HTTP-сервисов на языке Go.

Библиотека CUTE облегчает создание автотестов и упрощает переход на Go, предоставляя возможности для создания HTTP-тестов и реализации проверок.

Ранее в компании Ozon не было подходящих инструментов для тестирования HTTP-сервисов, и библиотека CUTE была создана для решения этой проблемы.

В статье описывается процесс создания теста, начиная с подготовки сервиса и инициализации билдера.

Библиотека предоставляет возможности для информирования о тесте, подготовки дополнительных шагов и создания запросов.

В библиотеке доступны готовые ассерты для проверки кода ответа, JSON-схем и полной проверки ответа.

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

Для создания теста необходимо вызвать ExecuteTest, передавая контекст и testing.TB или provider.T

📎 Статья

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 5 неожиданных вопросов с собеседований по Go

Многие собеседования традиционно включают в себя оторванные от практики вопросы, которые могут поставить в ступор даже сеньера.
Но если ты посмотришь это видео, то будешь знать ответы, и во всеоружии встретишь такие вопросы, если они попадутся
Уверен, будет полезно)

📎 YouTube

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как проверить, имплементирует ли переменная интерфейс?

В Go, реализация интерфейса является неявной, поэтому используется конструкция вида
var _ myInterface = &myImplementation{}:
type T struct{}
var _ I = T{} // Проверка, что T имплеменирует I.
var _ I = (*T)(nil) // Проверка, что *T имплеменирует I.


Обычно это указывают, чтобы ошибки были выявлены уже во время компиляции.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM