Golang
Wat werd er in de cache opgeslagen? Sommige directories?
/* We moeten gegevens van een bron naar een ontvanger overbrengen. De bron levert de gegevens in kleine pakketten (~tientallen records), terwijl de ontvanger efficiënter werkt met grotere batches. Een echt voorbeeld is het overzetten van gegevens van Kafka-achtige wachtrijen naar de Clickhouse-database. Bron: - Bijna oneindig. - De bron geeft nooit meer dan MaxItems records terug in één Next-aanroep. - Tijdens één "sessie" (één aanroep van de Pipe-functie) geeft de bron bij elke Next nieuwe gegevens. - Na een herstart begint de bron weer vanaf de vorige "bevestigde" positie, aangegeven door cookie. Daarom moet elke waarde van cookie die Next teruggeeft, na het opslaan van de gegevens in de ontvanger, worden bevestigd met een Commit-aanroep, in dezelfde volgorde als waarin ze door Next werden teruggegeven. Ontvanger: - Kan niet meer dan MaxItems tegelijk verwerken. Basisniveau: Het is nodig om de functie func Pipe(p Producer, c Consumer) error te implementeren, die gegevens uit de bron leest, ze groepeert in een buffer van niet meer dan MaxItems en opslaat in de ontvanger, en vervolgens de voortgang in de bron bevestigt. */ const MaxItems = 9999 type Producer interface { // Next geeft terug: // - een batch van items om te verwerken // - een cookie om te bevestigen wanneer de verwerking is voltooid // - een fout Next() (items []any, cookie int, err error) // Commit wordt gebruikt om de gegevensbatch als verwerkt te markeren Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Kunt u de bedrijven of leveranciers noemen waarmee u te maken hebt gehad?
Vertel over je laatste baan: wat deed je, welke stack gebruikte je, wat waren de moeilijke taken?
Wat is een slice in Go?
Kunt u de belangrijkste typen oproepen die in gRPC worden gebruikt, opsommen?
Is het toegestaan om informatie uit een kanaal met ingeschakelde gesloten modus te verkrijgen?
Is het mogelijk om rechtstreeks naar een specifieke Kafka-partitie te schrijven, zonder de sleutel voor hashing te gebruiken?
Kun je het mechanisme uitleggen van het toevoegen van een element aan het einde van een gegevensstructuur, zoals een lijst of array?
Welke gegevens en op welke manier worden in de stack geplaatst tijdens het uitvoeren van het programma?
Welke caching-methoden gebruik je het liefst in je projecten en waarom?
Wat is het verschil tussen een gematerialiseerde view en een gewone view?
Welke componenten maken deel uit van de structuur van een gekoppelde lijst?
Hoe wordt de uitvoeringstijd van de bewerking om een element met een sleutel toe te voegen aan de Map-gegevensstructuur bepaald?
Waarom wordt de initiële grootte van de stack van threads meestal ingesteld op 2 MB?
Heeft u ooit de ErrGroup-structuur gebruikt in uw projecten voor het beheren van parallelle taken?
Welke ongebruikelijke of niet-standaard pakketten hebt u in uw praktijk gebruikt?
Waarom vertraagt de groei van de plak en waarom kan je niet constant verdubbelen?
Op welke plek worden de commando's uitgevoerd tijdens het werkproces van GitLab CI/CD?
Welke gevolgen kunnen er optreden bij het niet naleven van de SOLID-principes bij softwareontwerp?