Sobes.tech

Data Engineer

Анализ на посещаемостта на фитнес клубов Вие работите като анализатор в мрежа от фитнес клубове. Имаме информация за посещенията на потребителите и за закупените от тях абонаменти. Необходимо е да анализирате ефективността на използването на абонаментите. Изчислете за всеки тип абонамент: • общия брой потребители, използвали този тип абонамент. Вземете предвид само уникалните user_id; • общия брой посещения за този абонамент. Вземете предвид всички посещения на потребителите с този абонамент; • делът на потребителите с този абонамент в проценти от общия брой потребители (закръглен до една десета). За изчисление използвайте отношението между броя на потребителите с този абонамент и общия брой на уникалните потребители. Всеки потребител може да има само един абонамент. Резултатът сортирайте по тип на абонамента в азбучен ред. Формат на входа Таблица memberships: • membership_id (int) — уникален идентификатор на абонамента • user_id (int) — уникален идентификатор на потребителя • membership_type (text) — тип на абонамента Таблица visits: • visit_id (int) — уникален идентификатор на посещението • user_id (int) — идентификатор на потребителя • visit_date (timestamp) — дата и час на посещението Данните не съдържат пропуски или некоректни стойности. Формат на изхода Заявката трябва да върне таблица с полетата в следния ред: • membership_type (text) — тип на абонамента • users_count (int) — брой уникални потребители с този тип абонамент • total_visits (int) — общ брой посещения на тези потребители • user_share (numeric) — делът на потребителите с този тип абонамент в проценти от общия брой, закръглен до една десета Резултатът трябва да бъде сортиран по тип на абонамента в азбучен ред.

Junior
250

Познат ли ви е методологията Domain Driven Design (DDD)? Ако да, споделете примери за нейното приложение във вашите проекти.

Junior
211

Как да премахнете подмодул и свързаните с него файлове от проекта? git submodule remove <път-до-подмодул> git rm --cached <път-до-подмодул>; премахнете секцията от .gitmodules; git commit git clean --submodules <път> git submodule delete <път> git remove submodule <път>

Junior
201

Кое из изразите на мястото [...] автоматично ще доведе до създаване на индекс? На мобилната платформа има хоризонтално превъртане на кода create table some_table( col_name [...] ); unique references other_table(col_name) not null serial integer check (col_name > 0)

Junior
198

Доклад за логистична компания Вие сте анализатор в логистична компания, която води отчет за операциите в складовете. Трябва да изготвите доклад за ефективността на всеки склад. За всеки склад изчислете: • общия брой операции (count_operations); • общия брой обработени стоки в склада (sum_quantity); • средното време за обработка на операция (avg_processing_time), като се вземат предвид само операциите с посочено време (не NULL), закръглено до най-близкото цяло число; • максималното и минималното количество стоки, обработени в една операция (max_quantity, min_quantity); • броя на операциите от всеки тип («доставка», «изпращане», «прехвърляне») в отделни колони: supply_operations, shipment_operations, transfer_operations. Филтрирайте складовете, при които общият брой операции е повече от 2 и средното време за обработка не надвишава 60 минути. Подредете резултата по ID на склада във възходящ ред. Формат на входа Таблица operations: • operation_id (int) — уникален идентификатор на операцията • warehouse_id (int) — ID на склада • operation_type (text) — тип на операцията: «доставка», «изпращане», «прехвърляне» • quantity (int) — брой единици стока в операцията • operation_date (timestamp) — дата и час на операцията • processing_time (int) — време за обработка на операцията Колоната processing_time може да съдържа NULL стойности. Формат на изхода Заявката трябва да върне таблица с полетата в следния ред: • warehouse_id (int) — уникален ID на склада • count_operations (int) — общ брой операции, извършени в склада • sum_quantity (int) — общ брой обработени стоки в склада • avg_processing_time (numeric) — средно време за обработка на операцията (в минути), като се вземат предвид само операции с ненулево време, закръглено до цяло число • max_quantity (int) — максимално количество стоки, обработени в една операция • min_quantity (int) — минимално количество стоки, обработени в една операция • supply_operations (int) — брой операции от тип «доставка» • shipment_operations (int) — брой операции от тип «изпращане» • transfer_operations (int) — брой операции от тип «прехвърляне»

Junior
197

В процеса на работа с git bisect, срещнахте се с комит, който не може да бъде проверен поради липсата на необходимата среда. Какво трябва да направите в тази ситуация? - Повторете командата git bisect start с други хешове - Пропуснете този комит с командата git bisect skip - Нулирайте bisect с командата git bisect reset - Обявете комита за добър с командата git bisect good - Обявете комита за лош с командата git bisect bad

Junior
196

Защо следният заявка няма да използва индекса, ако в таблицата records (id) е създаден обикновен B-Tree индекс по id? select * from records where id % 2 = 0 - За id е необходим индекс тип GIN - Индексите не работят с изрази в WHERE - % е операция за сравнение, а не филтриране - limit и offset са задължителни за оптимизация с индекс - Заявката се обръща към числово поле, а не към текстово

Junior
196

Обяснете как технически работи Git LFS и какви предимства предоставя в сравнение със стандартния Git при работа с големи файлове.

Junior
193

Създадена е специална последователност с името even_sequence, която генерира само четни числа. Какво трябва да се постави на мястото на [...], така че ако стойността на even_column не е указана при вмъкване, да се взема от even_sequence? create table some_table( even_column [...] ); integer computed as nextval('even_sequence') integer generated always as identity (start with 2 increment by 2) integer default nextval('even_sequence') integer unique default nextval('even_sequence') integer generated by even_sequence’

Junior
193

Имали ли сте опит с библиотеката Langchain? Какви задачи решавахте с ней?

Junior
190

Какво бихте искали да правите в нашия екип?

Junior
189

Какъв тип съединение трябва да използвате, за да включите в избора и тези потребители, които нямат поръчки? Таблици: users(id, name) и orders(id, user_id, created_at). CROSS JOIN RIGHT JOIN INNER JOIN FULL JOIN LEFT JOIN

Junior
181

Кое от следните твърдения отразява последиците от такива действия от гледна точка на разширения Git Flow и управлението на историята на промените?

Junior
179

Как Git Flow препоръчва да се оформя ново издание на приложението? - Създаване на нова issue-ветка - Създаване на hotfix-ветка от master - Създаване на отделна release-ветка от develop - Пряк комит в ветката master - Сливане на ветката master директно в develop

Junior
179

Открихте, че в историята на основния репозитори Git има комити, съдържащи критични поверителни данни. Тези данни трябва да бъдат напълно премахнати от цялата история на репозитория. Оценете колко правилно и безопасно би било да използвате следната стратегия: създайте нов комит, който ще премахне поверителните данни от текущата версия на файловете и го изпратете в main. - Правилно, но не оптимално. По-добре е да използвате git revert за отменяне на комитите - Условно правилно. Това е временно решение, докато не бъде намерено по-радикално средство за премахване на данните - Грешно и небезопасно. Данните ще бъдат премахнати от текущата версия, но ще останат достъпни в историята на репозитория - Грешно. Този комит може да доведе до нови конфликти при сливане с други клонове - Правилно и безопасно. Този метод гарантира, че данните ще бъдат премахнати и повече няма да се появят в репозитория

Junior
174

Вие работите върху нова функция в клон dev. Неочаквано възниква необходимост бързо да превключите към клон main, за да поправите правописна грешка във файла README.md. Имаш няколко незакомитвани промени: в src/feature.js (неиндексирани) и styles/main.css (индексирани). Искате временно да запазите всички тези промени, за да можете по-късно да се върнете към тях в клона dev. Каква последователност от команди трябва да използвате за това? git stash save "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash push -m "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash && git checkout main && [fix] && git checkout dev && git stash apply git add . && git stash && git checkout main && [fix] && git checkout dev && git stash drop git commit -m "Temp commit" && git checkout main && [fix] && git checkout dev && git reset HEAD^

Junior
173

Анализ на продажбите по категории продукти в търговията на дребно Работите като анализатор в търговията на дребно. Вашата задача е да създадете отчет за продажбите по категории с следните изчисления: • общият брой продадени единици в категорията (total_units_sold); • общият приход по категория, като се вземат предвид отстъпките, където отстъпката се изчислява като unit_price × units_sold × (1 − discount/100). Ако отстъпката е NULL, се счита за 0%. Закръглете до две десетични места; • средният брой продадени единици на продажба (avg_units_per_sale), закръглен до две десетични места; • делът на продажбите без отстъпка (no_discount_share) — броят на продажбите с NULL или 0% отстъпка, разделен на общия брой продажби в категорията, закръглен до три десетични места. Подредете резултатите първо по общите приходи (total_revenue) в низходящ ред, след това по средния брой единици на продажба (avg_units_per_sale) във възходящ ред, и накрая по името на категорията в азбучен ред. Формат на входа Таблица sales: • sale_id (int) — уникален идентификатор на продажбата • product_id (int) — идентификатор на продукта • category (text) — категория на продукта • sale_date (timestamp) — дата и час на продажбата • units_sold (int) — продадени единици • unit_price (numeric) — цена за единица • discount (numeric) — отстъпка в проценти, може да бъде NULL Колоната discount може да съдържа празни стойности. Формат на изхода Заявката трябва да върне таблица с полетата в следния ред: • category (text) — категория на продукта • total_units_sold (int) — общият брой продадени единици в тази категория • total_revenue (numeric) — общият приход по категория, закръглен до две десетични места • avg_units_per_sale (numeric) — средният брой единици на продажба, закръглен до две десетични места • no_discount_share (numeric) — делът на продажбите без отстъпка (стойност между 0 и 1), закръглен до три десетични места Резултатът трябва да бъде сортиран първо по total_revenue в низходящ ред, след това по avg_units_per_sale във възходящ ред, и накрая по името на категорията в азбучен ред.

Junior
172

Имали ли сте опит с уеб фреймуърка Gin? Разкажете по-подробно за задачите, които сте решавали с неговата помощ.

Junior
167

[име] поправи грешки и стил в текста: «Здравей! Аз съм [име], по-рано поиска да преминеш към Telegram» — на „ти“, но уважително

Junior
166

В PostgreSQL е необходимо да се оптимизира производителността на транзакциите чрез минимално ниво на изолация, при което: • паралелните транзакции могат да виждат незавършени промени една на друга; • възможни са "мръсни четения" (dirty read). Кой ниво на изолация трябва да се посочи за транзакцията, за да се постигне тази цел? мръсно четене не е възможно в PostgreSQL repeatable read read uncommitted read committed serializable

Junior
166
/3