Golang
Welke benaderingen kunnen worden gebruikt om threadveiligheid te garanderen bij het werken met slices in een multithread-omgeving?
Welke bewerkingen zijn toegestaan bij het werken met een nil-slice in de programmeertaal?
Welke systeemontwerpmethoden geef je de voorkeur bij het maken van oplossingen?
Vertel over een moeilijke taak die je hebt kunnen oplossen door een script te schrijven voor het Linux-systeem
Hoe kunt u de hoeveelheid gegevens die in de cache worden opgeslagen regelen?
Bereidheid om de enige Backend-specialist in het team te zijn
Wat is de belangrijkste reden om het type sync.Map in Go te gebruiken?
Wat zijn goede praktijken en antipatterns in unittests? Hoe weet je of tests goed zijn?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Fout bij compilatie # command-line-arguments ./main.go:39:32: syntaxfout: onverwachte regelafbreking, { na if-clausule verwacht
Heeft u ooit problemen ondervonden bij het implementeren van interacties tussen verschillende services?
Hoe wordt een slice doorgegeven aan een functie in een programmeertaal?
Wat is het Saga-patroon?
Waarom hebben ze geen Testcontainers genomen?
/* 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 }
Een tabel met (id PRIMARY KEY, data JSON) — is een PostgreSQL-index erg goed voor zoeken op sleutel?
Wat is het verschil tussen virtualisatie en containerisatie?
Kan een ander codeblok met accolades binnen een bestaande functie worden geplaatst?
Hoe hebt u de taken gedefinieerd en geformuleerd in uw vorige functie?
Hoe is de uiteindelijke code geïmplementeerd in de productieomgeving in uw laatste project?
Hoe werkt de bewerking van het toevoegen van een nieuw element aan een slice in een programmeertaal?