Перейти к содержимому

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
func main() {
var counter int
for i := 0; i < 1000; i++ {
go func() {
counter++
}()
}
println(counter)
}
a := make([]int, 0, 2)
b := a
a = append(a, 1)
b = append(b, 2)
println(a[0], b[0])
// 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()