Golang
Je možné implementovať RPC cez REST a naopak? Aký je zásadný rozdiel?
Čo sa stane, keď je kapacita slice vyčerpaná a pridá sa ďalší prvok?
Čo vám je bližšie — vývoj produktu alebo infraštruktúry?
Ako veľmi je aktuálne aktívne hľadanie? Už ste sa rozhodli odísť z [spoločnosti], alebo si len prezeráte zaujímavé ponuky?
Aktualizácie dokumentov prichádzajú do služby message Document { string Url = 1; // URL dokumentu, jeho jedinečný identifikátor uint64 PubDate = 2; // deklarovaný čas publikácie dokumentu uint64 FetchTime = 3; // čas prijatia tejto aktualizácie dokumentu, môže byť považovaný za identifikátor verzie. Pár (Url, FetchTime) je jedinečný. string Text = 4; // text dokumentu uint64 FirstFetchTime = 5; // zpočiatku chýba, treba doplniť } Dokumenty môžu prísť v ľubovoľnom poradí (nie v poradí, v ktorom boli aktualizované), a môžu byť aj duplicitné správy. Je potrebné na výstupe vytvoriť rovnaké správy, ale s opravenými poľami podľa nasledujúcich pravidiel (všetko nižšie platí pre skupinu dokumentov so rovnakým poľom Url): Pole Text a FetchTime by mali byť také, aké boli v dokumente s najväčším FetchTime, ktorý bol doteraz prijatý. Pole PubDate by malo byť také, aké bolo v správe s najmenším FetchTime. Pole FirstFetchTime by malo byť rovné najnižšej hodnoty FetchTime. Inými slovami, v každom momente berieme PubDate a FirstFetchTime z prvej verzie, ktorú sme doteraz obdržali (ak ich zoradíme podľa FetchTime), a Text z poslednej. Rozhranie v kóde môže byť implementované takto: type Processor interface { Process(doc *Document) (*Document, error) } Tento kód bude fungovať v službe, ktorá číta správy z fronty (Kafka alebo podobne), a tiež zapisuje výsledok do fronty. Ak Process vráti Null, nič sa do fronty nezapisuje.
// Напишите асинхронный обработчик задач как библиотеку // Клиент передает объект (Task) с данными для выполнения задачи, // в нашем примере будем использовать пустую структуру. // Обработчик одновременно может обрабатывать не более N задач, // и не более X задач могут быть поставлены в очередь на обработку. // Если нет места в очереди, сразу возвращаем клиенту ошибку. // Задача берется в обработку, если имеются свободные обработчики. // Иммитируем длительность обработки через time.Sleep(5*time.Second). // Как только очередная задача выполнена, берем следующую из очереди. // Если в очереди пусто, ожидаем новых задач от клиентов. // Со звездочкой: дополнить структуру Task и получать статусы задач через отдельный запрос.
Vždy ti pprof ukáže, že máš únik pamäte alebo prekročenie limitu?
Povedz stručne, čím si sa zaoberal na predchádzajúcich pracoviskách a aké funkcie si implementoval.
Máte skúsenosti s Dockerom a Kubernetes? Na akej úrovni?
Povedzte nám o vzorec Transactional Outbox — ako funguje a na čo slúži?
Mal(a) si skúsenosti s optimalizáciou dopytov v relačných databázach?
Aké sú vaše očakávania ohľadom platu a preferovaný formát prezentácie?
Koľko gorutín je možné vytvoriť na jednom stroji? Ako sa počítajú?
Ako ste optimalizovali vyhľadávacie scenáre?
// Máme metódu na získanie informácií o produktoch, táto metóda sa volá veľmi často // sú v tomto kóde problémy a ako ich opraviť? databáza postgress func (r *ProductRepository) GetProductDetails(ctx context.Context, productIDs []int) []Product { products := make([]Product, 0, len(productIDs)) for _, id := range productIDs { go func(id int) { var p Product query := "SELECT name, price, description FROM products WHERE id = $1" err := r.db.QueryRowContext(ctx, query, id).Scan(&p.Name, &p.Price, &p.Desc) if err != nil { r.logger.Error("error get product", "err", err) return } products = append(products, p) }(id) } return products }
**Podmienka** Žiadosti na viacero URL by mali byť vykonávané paralelne. Zobraziť HTTP stavy a spracovať chyby.
Prečo si si vybral Go?
Aké systémy kontajnerizácie a orchestrácie poznáte?
Ako často ste používali spúšťače, len v prípade s príbehom alebo boli aj iné prípady?
Čo je zásobník a čo je halda?