Golang
Dokumentumfrissítések érkeznek a szolgáltatáshoz message Document { string Url = 1; // A dokumentum URL-je, egyedi azonosítója uint64 PubDate = 2; // a dokumentum bejelentett közzétételi ideje uint64 FetchTime = 3; // ennek a dokumentumfrissítésnek az időpontja, verzióazonosítóként értelmezhető. A (Url, FetchTime) pár egyedi. string Text = 4; // a dokumentum szövege uint64 FirstFetchTime = 5; // kezdetben hiányzik, ki kell tölteni } A dokumentumok tetszőleges sorrendben érkezhetnek (nem a frissítésük sorrendjében), és lehetnek duplikált üzenetek. A kimeneten ugyanazokat az üzeneteket kell létrehozni, de a következő szabályok szerint javított mezőkkel (az alábbiak mindegyike ugyanazzal a Url mezővel rendelkező dokumentumcsoportokra vonatkozik): A Text és FetchTime mezőknek a legnagyobb eddig kapott FetchTime-hoz kell igazodniuk. A PubDate-nek a legkisebb FetchTime-hoz kell igazodnia. A FirstFetchTime-nek a legkisebb FetchTime értékének kell lennie. Más szóval, minden pillanatban a FetchTime szerint rendezett első verzióból származó PubDate és FirstFetchTime, valamint a legutóbbi verzió Textje kerül kiválasztásra. A kód interfésze így valósítható meg: type Processor interface { Process(doc *Document) (*Document, error) } Ez a kód egy olyan szolgáltatásban fog működni, amely üzeneteket olvas egy sorból (Kafka vagy hasonló), és az eredményt szintén a sorba írja. Ha a Process null értéket ad vissza, akkor semmi sem kerül a sorba.
Van tapasztalatod a gRPC és a GraphQL terén? Mesélj róluk.
Ismered a Loop terméket?
Hogyan viszonyulsz a szolgálatokhoz? Volt már ilyen tapasztalatod?
Hogyan nézett ki pontosan az optimista zárolási útvonal a Kafka-ból érkező üzenet fogadásától a adatbázis frissítéséig?
Hogyan kapod meg a feladatokat, kitől érkeznek?
Milyen adatbázisokkal dolgoztál, és milyen SQL-lekérdezéseket tudsz írni?
Hogyan használtad a Kafka-t és a RabbitMQ-t brókerként? Miért kettő?
Hogyan párhuzamosíthatjuk a logok feldolgozását worker pool használatával? Hogyan kapjuk meg az eredményeket a goroutine-októl?
Mi az array és slice a Go-ban, miben különböznek? Hogyan működik az append és a capacity bővítése?
Mi az replikáció előnye? Milyen költségekkel jár?
Hatással van-e valamit a csatorna buffer mérete a worker poolban?
Hogyan lépjen kapcsolatba a külső körvonalon lévő kereskedőkkel?
Milyen szinkronizációs eszközök vannak a Go több szálas programozásában?
Milyen adatokat tároltak a Redisben, és hogyan értették meg, hogy a hirdetések forrók?
Miért használjunk interfészeket?
Nézd meg a fenti adatbázis-sémát — mit lehet hozzáadni, vagy minden rendben van?
Hiba és nil interfésszel rendelkező feladat: mit fog kiírni a kód különböző nil hozzárendelési módokkal?
Milyen jó gyakorlatok és antipatternek vannak az egységtesztelésben? Hogyan lehet felismerni, hogy a tesztek jók?
Mesélj a Go ütemező GMP-modelljéről.