Sobes.tech

Data Engineer

Analiza frecvenței vizitelor în cluburile de fitness Lucrați ca analist într-o rețea de cluburi de fitness. Aveți informații despre vizitele utilizatorilor și abonamentele pe care le cumpără. Este necesar să analizați eficiența utilizării abonamentelor. Calculați pentru fiecare tip de abonament: • numărul total de utilizatori care au folosit acest tip de abonament. Luați în considerare doar user_id unice; • numărul total de vizite pentru acest abonament. Luați în considerare toate vizitele utilizatorilor cu acest abonament; • proporția utilizatorilor acestui abonament în procent din numărul total de utilizatori (rotunjit la o zecimală). Pentru calcul, folosiți raportul dintre numărul de utilizatori cu acest abonament și numărul total de utilizatori unici. Fiecare utilizator poate avea doar un abonament. Sortați rezultatul după tipul abonamentului în ordine alfabetică. Formatul de intrare Tabelul memberships: • membership_id (int) — identificator unic al abonamentului • user_id (int) — identificator unic al utilizatorului • membership_type (text) — tipul abonamentului Tabelul visits: • visit_id (int) — identificator unic al vizitei • user_id (int) — identificator al utilizatorului • visit_date (timestamp) — data și ora vizitei Datele nu conțin valori lipsă sau incorecte. Formatul de ieșire Interogarea trebuie să returneze un tabel cu următoarele câmpuri în această ordine: • membership_type (text) — tipul abonamentului • users_count (int) — numărul de utilizatori unici cu acest tip de abonament • total_visits (int) — numărul total de vizite ale acestor utilizatori • user_share (numeric) — proporția utilizatorilor cu acest tip de abonament în procent din total, rotunjită la o zecimală Rezultatul trebuie sortat după tipul abonamentului în ordine alfabetică.

Junior
250

Cunoașteți metodologia Domain Driven Design (DDD)? Dacă da, împărtășiți exemple de aplicare în proiectele dumneavoastră.

Junior
212

Cum să eliminați un submodul și fișierele asociate din proiect? git submodule remove <cale-către-submodul> git rm --cached <cale-către-submodul>; eliminați secțiunea din .gitmodules; git commit git clean --submodules <cale> git submodule delete <cale> git remove submodule <cale>

Junior
201

Ce expresie de pe locul [...] va duce automat la crearea unui index? Pe platforma mobilă există o derulare orizontală a codului create table some_table( col_name [...] ); unique references other_table(col_name) not null serial integer check (col_name > 0)

Junior
198

În procesul de lucru cu git bisect, te-ai confruntat cu un commit care nu poate fi verificat din cauza lipsei mediului necesar. Ce trebuie să faci în această situație? - Repetă comanda git bisect start cu alte hash-uri - Sari peste acest commit cu comanda git bisect skip - Resetează bisect cu comanda git bisect reset - Marchează commit-ul ca bun cu comanda git bisect good - Marchează commit-ul ca rău cu comanda git bisect bad

Junior
197

Raport pentru compania logistică Ești un analist al unei companii logistice care ține evidența operațiunilor din depozite. Trebuie să întocmești un raport despre eficiența fiecărui depozit. Pentru fiecare depozit, calculează: • numărul total de operațiuni (count_operations); • numărul total de produse procesate în depozit (sum_quantity); • timpul mediu de procesare a unei operațiuni (avg_processing_time), luând în considerare doar operațiunile cu timp specificat (nu NULL), rotunjit la cel mai apropiat număr întreg; • numărul maxim și minim de produse procesate într-o singură operațiune (max_quantity, min_quantity); • numărul de operațiuni de fiecare tip («livrare», «expediere», «transfer») în coloane separate: supply_operations, shipment_operations, transfer_operations. Filtrează depozitele a căror număr total de operațiuni este mai mare de 2 și timpul mediu de procesare nu depășește 60 de minute. Ordonează rezultatul după ID-ul depozitului în ordine crescătoare. Formatul de intrare Tabelul operations: • operation_id (int) — identificator unic al operației • warehouse_id (int) — ID-ul depozitului • operation_type (text) — tipul operației: «livrare», «expediere», «transfer» • quantity (int) — numărul de unități ale produsului în operație • operation_date (timestamp) — data și ora operației • processing_time (int) — timpul de procesare al operației Coloana processing_time poate conține valori nule. Formatul de ieșire Interogarea trebuie să returneze un tabel cu câmpurile în următoarea ordine: • warehouse_id (int) — ID-ul unic al depozitului • count_operations (int) — numărul total de operațiuni efectuate în depozit • sum_quantity (int) — numărul total de produse procesate în depozit • avg_processing_time (numeric) — timpul mediu de procesare a operației (în minute), luând în considerare doar operațiunile cu timp nenul, rotunjit la cel mai apropiat număr întreg • max_quantity (int) — numărul maxim de produse procesate într-o singură operațiune • min_quantity (int) — numărul minim de produse procesate într-o singură operațiune • supply_operations (int) — numărul de operațiuni de tip «livrare» • shipment_operations (int) — numărul de operațiuni de tip «expediere» • transfer_operations (int) — numărul de operațiuni de tip «transfer»

Junior
197

De ce următoarea interogare nu va utiliza indexul dacă în tabelul records (id) s-a creat un index B-tree obișnuit pe id? select * from records where id % 2 = 0 - Pentru id este nevoie de un index de tip GIN - Indecșii nu funcționează cu expresii în WHERE - % este o operație de comparație, nu de filtrare - limit și offset sunt obligatorii pentru optimizarea cu index - Interogarea accesează un câmp numeric, nu unul de text

Junior
196

A fost creată o secvență specială numită even_sequence, care generează doar numere pare. Ce trebuie să se pună în locul [...] pentru ca, în cazul în care valoarea even_column nu a fost specificată la inserare, să se ia valoarea din 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

Explicați cum funcționează tehnic Git LFS și ce avantaje oferă în comparație cu Git standard atunci când lucrați cu fișiere mari.

Junior
193

Aveți experiență în lucrul cu biblioteca Langchain? Ce sarciniți ați rezolvat cu ajutorul său?

Junior
190

Ce ai dori să faci în echipa noastră?

Junior
189

Căutați să creați o vizualizare care afișează toți utilizatorii și, dacă există, ultimele lor comenzi. Tabele: users(id, name) și orders(id, user_id, created_at). Ce tip de join trebuie utilizat pentru a include și utilizatorii fără comenzi? CROSS JOIN RIGHT JOIN INNER JOIN FULL JOIN LEFT JOIN

Junior
181

Care dintre următoarele afirmații reflectă consecințele acțiunilor de mai sus din perspectiva metodologiei Git Flow extinse și a gestionării istoricului modificărilor?

Junior
179

Cum recomandă Git Flow să se formalizeze o nouă versiune a aplicației? - Creând o nouă ramură issue - Creând o ramură hotfix din master - Creând o ramură release separată din develop - Făcând commit direct în ramura master - Îmbinând direct ramura master cu develop

Junior
179

Lucrați pe o ramură dev pentru o funcție nouă. Dintr-odată, devine necesar să treceți rapid pe ramura main pentru a corecta o greșeală de ortografie în fișierul README.md. Aveți câteva modificări nesalvate: în src/feature.js (nesalvat) și styles/main.css (salvat). Doriți să salvați temporar toate aceste modificări pentru a reveni ulterior la ele în ramura dev. Ce secvență de comenzi ar trebui să folosiți pentru aceasta? 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
175

Ai descoperit că în istoricul depozitului principal Git există commit-uri care conțin date confidențiale critice. Aceste date trebuie eliminate complet din întreg istoricul depozitului. Evaluează cât de corect și sigur ar fi să folosești următoarea strategie: creează un nou commit care să elimine datele confidențiale din versiunea curentă a fișierelor și să îl trimiți în main. - Corect, dar nu optim. Este mai bine să folosești git revert pentru a anula commit-urile - Condiționat corect. Este o soluție temporară până când se găsește o metodă mai radicală de eliminare a datelor - Incorect și nesigur. Datele vor fi eliminate din versiunea curentă, dar vor rămâne accesibile în istoria depozitului - Incorect. Acest commit poate duce la conflicte noi la fuziunea cu alte ramuri - Corect și sigur. Această metodă garantează că datele vor fi eliminate și nu vor mai apărea în depozit

Junior
175

Analiza vânzărilor pe categorii de produse într-un magazin de retail Lucrați ca analist într-un magazin de retail. Sarcina dvs. este să creați un raport de vânzări pe categorii cu următoarele calcule: • numărul total de unități vândute în categorie (total_units_sold); • venitul total pe categorie, luând în considerare reducerile, unde reducerea se calculează ca unit_price × units_sold × (1 − discount/100). Dacă reducerea lipsește (NULL), se consideră 0%. Rotunjiți la două zecimale; • media unităților vândute pe vânzare (avg_units_per_sale), rotunjită la două zecimale; • proporția vânzărilor fără reducere (no_discount_share) — numărul de vânzări cu NULL sau 0% reducere, împărțit la numărul total de vânzări din categorie, rotunjit la trei zecimale. Ordonați rezultatele mai întâi după venitul total (total_revenue) descrescător, apoi după media unităților pe vânzare (avg_units_per_sale) crescător, și în final după numele categoriei în ordine alfabetică. Formatul de intrare Tabelul sales: • sale_id (int) — identificator unic de vânzare • product_id (int) — identificatorul produsului • category (text) — categoria produsului • sale_date (timestamp) — data și ora vânzării • units_sold (int) — unitățile vândute • unit_price (numeric) — prețul pe unitate • discount (numeric) — reducerea în procente, poate fi NULL Coloana discount poate conține valori nule. Formatul de ieșire Interogarea trebuie să returneze un tabel cu câmpurile în această ordine: • category (text) — categoria produsului • total_units_sold (int) — numărul total de unități vândute în această categorie • total_revenue (numeric) — venitul total pe categorie, rotunjit la două zecimale • avg_units_per_sale (numeric) — media unităților pe vânzare, rotunjită la două zecimale • no_discount_share (numeric) — proporția vânzărilor fără reducere (valoare între 0 și 1), rotunjită la trei zecimale Rezultatul trebuie sortat mai întâi după total_revenue descrescător, apoi după avg_units_per_sale crescător, și în final după numele categoriei în ordine alfabetică.

Junior
172

Aveți experiență în lucrul cu framework-ul web Gin? Povestiți-ne mai în detaliu despre sarcinile pe care le-ați rezolvat cu ajutorul său.

Junior
167

[nume] a corectat greșelile și stilul în text: «Salut! Sunt [nume], ai cerut anterior să treci pe Telegram» — într-un mod informal, dar respectuos

Junior
166

În PostgreSQL, este necesar să se optimizeze performanța tranzacțiilor prin nivelul minim de izolare, în care: • tranzacțiile paralele pot vedea modificări nefinalizate ale celorlalte; • sunt posibile "citiri murdare" (dirty read). Ce nivel de izolare trebuie specificat pentru tranzacție pentru a atinge acest scop? dirty read nu este posibil în PostgreSQL repeatable read read uncommitted read committed serializable

Junior
166
/3