Hoe worden berichten verwerkt die naar offlinegebruikers worden gestuurd?
Golang
Heeft u gebruik gemaakt van openbare clouds? Zo ja, welke providers en diensten?
/* We moeten gegevens van een bron naar een ontvanger overbrengen. De bron geeft gegevens in kleine batches (~tien records), terwijl de ontvanger efficiënter werkt met grote batches (~duizend records). Een echt voorbeeld is het overzetten van gegevens van Kafka-achtige wachtrijen naar een 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-aanroep nieuwe gegevens. - Na een herstart begint de bron vanaf de vorige "bevestigde" positie, bepaald door cookie. Daarom moet elke cookie-waarde die Next teruggeeft, na het opslaan van 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. Het is nodig om de functie func Pipe(p Producer, c Consumer) error te implementeren, die gegevens uit de bron leest, deze groepeert in een buffer van niet groter dan MaxItems en opslaat in de ontvanger, waarna de voortgang in de bron wordt bevestigd. */ const MaxItems = 9999 type Producer interface { // Next geeft: // - een batch van items om te verwerken // - cookie om te bevestigen wanneer de verwerking is voltooid // - 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 { // TODO }
Hoe controleer je of het venster alle benodigde tekens bevat?
Vertel ons over je recente projecten en de gebruikte technologische stack.
4 - accepteer snel inkomende taken, 5 - geef het resultaat van de taak op verzoek terug 6 - als er geen resultaat is, geef de juiste status terug /* Processor - een service die een lange, resource-intensieve operatie uitvoert. Het is al geïmplementeerd De fouten die het teruggeeft, zijn uitsluitend gerelateerd aan onjuiste invoergegevens, stabiel en het opnieuw aanvragen is zinloos */ type Processor interface { Process([]byte) ([]byte, error) } /* We gaan ervan uit dat we een generator van unieke identificaties (bijvoorbeeld UUID) hebben. De generator garandeert dat er geen botsingen zullen zijn */ type ID string // func NewID() ID /* De scheduler accepteert taken van klanten, plaatst ze in de wachtrij en start de verwerking. Zorgt ervoor dat niet meer dan 'threads' methoden van verwerking gelijktijdig worden uitgevoerd Biedt de mogelijkheid om de status van de taak te controleren en het resultaat te krijgen blokkeert zijn openbare methoden voor verwerking niet */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // initialisatie logica return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // implementatie return "" }
Beschrijf het algoritme voor het oplossen van het probleem maxSegment
Vertel eens, wat gebeurt er uiteindelijk — hoe accumuleren we de buffer?
Wat zijn je salarisverwachtingen?
Is het correct dat je momenteel in [stad] woont en het voor jou handig zou zijn om in een hybride formaat met kantoorbezoeken te werken?
Heb je ervaring met het schrijven van programma's met multithreading of asynchrone operaties?
Welke anti-patronen in microservice-architectuur ken je?
[naam] vroeg: bij het behouden van de positie van een element kleiner dan X, wat wordt de positie?
Als je een baan aangeboden krijgt en accepteert, hoe snel zou je klaar zijn om te beginnen met werken?
Laten we een voorbeeld bekijken: first=[1,1,2], second=[1,2]. Wat moet jouw algoritme teruggeven en werkt het correct met duplicaten?
De load balancer moet begrijpen dat de backend fouten antwoordt, en bij het overschrijden van een drempel voor een bepaalde tijd, deze uitsluiten van de load balancing (Circuit Breaker)
Heeft u ervaring met het ontwikkelen en ondersteunen van gedistribueerde systemen?
Met welke databases of andere gegevensopslag heb je gewerkt? Hoeveel verzoeken per seconde (RPS) voor schrijven en lezen?
Heeft u tijdens uw hele loopbaan leiderschaps taken gedaan?
Wat was de grootste hoeveelheid opgeslagen gegevens?