Vseinstrumenti / ВсеИнструменты
- Где раньше работал? Чем занимался? Какие сервисы писал? С каким сложностями сталкивался?
algorithms/complexity - Что больше всего бесит в Го?
hr-behavioral/about-you - Пробовал ли писать свои пакеты на Го? Какие?
hr-behavioral/about-you - Что такое type switch?
go/interfaces - Как работает аппенд?
go/slices-arrays - Какой у слайса zero value?
go/slices-arrays - Как устроена мапа?
go/maps - Что будет при чтении из закрытого канала? А писать?
go/channels - Как отсортировать массив структур по алфавиту поля name?
go/slices-arrays - Где лучше держать интерфейсы? Где используется или где лежит реализация.
go/interfaces - Какими ORM пользовался?
sql/orm-drivers - Работал ли с прометеусом? Какие там есть типы метрик?
devops/observability - Что из себя представляет тип string?
go/strings-runes - Что происходит при конкатенации строк?
go/strings-runes - Как эффективно слить 100к строк в одну?
go/strings-runes - Расскажи, для чего использовал Clickhouse? (есть у тебя в резюме)
nosql-cache/clickhouse - Приходилось ли тебе выбирать стук для сервисов?
architecture/system-design - Что использовал для межсервисного взаимодействия? (grpc/rest)
architecture/microservices - Чем отличается NATS от кафки?
brokers/kafka - Версионировали ли proto контракты?
network/grpc - Работал ли с мьютексами? Какие они бывают и чем отличаются?
go/sync - Можно ли один и тот же byte slice в нескольких горутинах? А зачем так делать? )
go/concurrency - Что такое контекст в Го? Для чего используется?
go/context - Чем отличается WithTimeout от WithDeadline?
go/context - Как устроен контекст внутри? (связный список с мьютексом)
algorithms/data-structures - Чем отличается context.Background от context.TODO? (внутри ничем)
go/context - Как количественно оценить покрытие тестами? (coverage)
testing/unit-mocks - Какие виды тестов писал? (unit/integration/e2e). Какими инструментами пользовался? (testify)
testing/unit-mocks - Плюсы и минусы e2e тестов (медленные, но макс. приближены к проду)
testing/integration-e2e - Что такое primary key? (unique + not null)
sql/schema-design - Какое поле обычно делают PK? (serial или uuid)
sql/schema-design - Почему uuid медленнее чем serial? (uuid - 16 байт + медленнее обновление индекса, потому что у serial новое значение индекса всегда падает в конец индекса)
sql/indexes - Что такое внешний ключ? Сослаться можно на любое поле или нет (кроме pk)? (в пг - нет, в мускуле - дa)
sql/schema-design - Что такое varchar?
sql/general - Почему иногда лучше char, чем varchar? (он быстрее)
sql/general
Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»func main() { var counter int for i := 0; i < 1000; i++ { go func() { counter++ }() }
println(counter)}Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»a := make([]int, 0, 2)b := aa = append(a, 1)b = append(b, 2)
println(a[0], b[0])Задача: Провети ревью код. go/basics
Заголовок раздела «Задача: Провети ревью код. go/basics»// Code-review// Вводные - есть условный репозиторий, стандартные CRUD методы.// Есть некая доменная модель и модель для БД и некая ORM для построения запросов.// Цель - подсветить критичные места, ошибки или указать как сделать лучше.
func (s *Storage) CreateProduct(ctx context.Context, wp *model.Product) error { dbM := ProductModelToDB(ctx, wp)
_, err := s.db.NewInsert().Model(&dbM).Exec(ctx) if err != nil { return errors.Wrap(err, "CreateProduct ") }
return nil}
func (s *Storage) ReadProduct(ctx context.Context, wp *model.Product) (*model.Product, error) { dbIn := ProductModelToDB(ctx, wp) dbM := Product{}
err := s.db.NewSelect(). Model(&dbM). Where("wp.id = ?", dbIn.ID). Scan(ctx) if err != nil { return nil, errors.Wrap(err, "ReadProduct ") }
dbOut := dbIn.ToModel(ctx)
return &dbOut, nil}
func (s *Storage) UpdateProduct(ctx context.Context, wp *model.Product) error { dbIn := ProductModelToDB(ctx, wp) values := s.db.NewValues(&dbIn)
_, err := s.db.NewUpdate(). With("_data ", values). Model(&Product{}). TableExpr("_data "). Set("guid = _data.guid "). Where("wp.guid = _data.id "). Exec(ctx) if err != nil { return errors.Wrap(err, "UpdateProduct ") }
return nil}
func (s *Storage) DeleteProduct(ctx context.Context, wp *model.Product) error { dbM := ProductModelToDB(ctx, wp)
_, err := s.db.NewDelete(). Model(&Product{}). Where("wp.id ", dbM.ID). Exec(ctx) if err != nil { return errors.Wrap(err, "DeleteProduct ") }
return nil}- Разница в поведении Fatal и panic() в го
- Что произойдет если горутина спаникует, получим ли мы панику в мейне
- Отличие errors.Wrap() и fmt.Errorf()