Wildberries / WB - 4 (Команда поставщиков)
Актуальность: 1 кв 2025
Общие вопросы
Заголовок раздела «Общие вопросы»- Принципы ООП;
architecture/principles - SOLID;
architecture/principles - Как храните протофайлы (отдельная репа или в проекте);
network/grpc - Как бы реализовывал in-memory cache?
nosql-cache/caching - Как бы реализовал LRU cache?
algorithms/data-structures - Есть 3 инстанса приложения, какой бы кэш использовал?
nosql-cache/caching - Почему кириллица занимает 2 байта?
go/strings-runes
Вопросы по Go
Заголовок раздела «Вопросы по Go»- Есть ли какие-то нюансы с типом int (имеется в виду зависимость от разрядности системы)?
go/basics - Что представляют из себя строки? Как посчитать количество символов?
hr-behavioral/about-you - Различия слайсов и массивов. Из чего состоит слайс?
go/slices-arrays - Как растет слайс?
go/slices-arrays - Если не присвоить результат append к исходному слайсу, изменится ли он?
go/slices-arrays - Что можешь рассказать про тип map?
go/maps - Как растет map?
go/maps - Можно ли взять указатель на элемент map (порядок)?
go/maps - Как растет размер map?
go/maps - Мы удалили ключи из map, как сделать чтобы она освободила память? (скопировать в новую и удалить старую)
go/maps - Безопасно ли удалять элемент из nil map?
go/maps - Как понять есть ли ключ в map?
go/maps - Как работать с малой в условиях конкурентности?
go/concurrency - Можно ли перехватить Fatal error?
go/errors-panic - Какие типы каналов бывают и как с ними работать?
go/channels - Пакет context, какие бывают, для чего нужны, какие есть методы?
go/context - Зачем нужен defer? Всегда ли он выполняется?
go/errors-panic - В какой очередности выполняется defer?
algorithms/data-structures - Зачем нужен recover?
go/errors-panic - Можно ли отловить панику в горутине из другой горутины?
go/concurrency - Какие бывают примитивы синхронизации?
go/sync - RWMutex vs Mutex;
go/sync - Какая команда помогает проверить есть ли гонки или дедлоки?
go/sync - Data race и Race condition;
go/sync - Чем отличается concurrency от параллелизма, можно ли быть параллелизм на 1 ядре?
go/concurrency
Вопросы по PostgreSQL
Заголовок раздела «Вопросы по PostgreSQL»- Что делать если запрос тормозит?
sql/query-optimization - Чем отличается explain от explain analyze?
sql/query-optimization - На основании чего работает explain, если он не выполняет запрос?
sql/query-optimization - Какие есть уровни изоляции?
sql/transactions - На уровне Serializable две транзакции апдейтят одну строку, что произойдет?
sql/transactions - Как бы делал инсерт 100000000 строк?
go/strings-runes
Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»func main() { fmt.Println(arr()) // Что выведет?}
func arr() []int { arr := []int{0, 1, 2, 3, 4} arr[0] = 1 arr = append(arr, 5) // И что выведет если убрать эту строку? newArr := append(arr, 6) arr[0] = 10 return newArr}Задача: Что выведет? go/puzzles
Заголовок раздела «Задача: Что выведет? go/puzzles»type item struct { name string}
type wrapper struct { item *item}
func (b *wrapper) unwrap() item { return *b.item}
func (b *wrapper) wrap(item *item) { b.item = item // Вот тут сделать так b.item = &item - ЭТО ТО ЧТО НАДО СДЕЛАТЬ, ЧТОБЫ ВЫВОДИЛСЯ a,b,c}
func wrapItems(items []item) []*wrapper { for _, it := range items { w := new(wrapper) w.wrap(&it) result = append(result, w) } return result}
func main() { items := []item{ {"a "}, {"b "}, {"c "}, }
wrappers := wrapItems(items) for _, w := range wrappers { fmt.Println(w.unwrap()) // Что тут выведет (с, с, с) // как поправить? }}Задача: Проввести ревью. Как пофиксить? go/basics
Заголовок раздела «Задача: Проввести ревью. Как пофиксить? go/basics»func spawnMessages(n int) chan string { ch := make(chan string, 1) for i := 0; i < n; i++ { ch <- fmt.Sprintf("msg %d ", i+1) } return ch}
func main() { n := 10
for msg := range spawnMessages(n) { fmt.Println("received: ", msg) }}Системный дизайн
Заголовок раздела «Системный дизайн»Задача: Спроектировать URL-shortener - сервис для создания коротких URL-адресов для SMM-менеджеров. architecture/system-design
Заголовок раздела «Задача: Спроектировать URL-shortener - сервис для создания коротких URL-адресов для SMM-менеджеров. architecture/system-design»Будет дано короткое описание от бизнеса и аналитика по количеству запросов (RPS), рост в год и соотношение нагрузки read/write.
Нужно превратить это в функциональные требования (FT) и выписать нефункциональные требования. По мере проектирования добавляются новые входные данные, проверка на фрод. В конце нужно сделать расчеты количества данных и какие ресурсы будут требоваться для серверов.