Wat is het grootste databaseproject dat u hebt moeten implementeren of onderhouden?
Golang
In welke fasen van het sollicitatieproces in verschillende organisaties wordt deze vraag vaak gesteld?
Hoe worden queries uitgevoerd op de PostgreSQL database?
Kunt u het werkingsprincipe van gRPC en de belangrijkste kenmerken uitleggen?
Hoeveel schrijfvraag per seconde kwamen er bij de gegevens binnen?
Op hoeveel instanties/container(s) werkte de service?
In welke laag worden de klanten geplaatst voor externe diensten en systemen?
Wat is uw ervaring in het ontwikkelen van applicaties die gebruik maken van multithreading en parallelle berekeningen?
Kun je je oriënteren op de hosts? Hoeveel hosts, hoeveel containers worden gestart?
Hoe wordt de verbinding en weergave van gegevens in Grafana uitgevoerd?
Wat was het project met de langste duur waaraan je hebt gewerkt?
Hoe bepaal je visueel of algoritmisch dat een element uniek is in de Map-gegevensstructuur?
""" De plekken in de bioscoop zijn in één rij gerangschikt. Een net gearriveerde bezoeker kiest een plek, om zo ver mogelijk van de andere bezoekers in de rij te zitten. Dat wil zeggen, de afstand van die plek tot de dichtstbijzijnde bezoeker moet maximaal zijn. Er wordt gegarandeerd dat er altijd vrije plekken zijn en dat er al minstens één bezoeker zit. Schrijf een functie die, gegeven een rij van plekken (een array van nullen en enen), de afstand (het aantal tussenruimtes tussen de stoelen) vanaf de gekozen plek tot de dichtstbijzijnde bezoeker retourneert. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
/* 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 }
Hoe organiseer je de architectuur voor een verzoek dat bedrijfslogica uitvoert, een externe service (Google) aanroept en het resultaat opslaat in de database? Beschrijf het van boven naar beneden in lagen.
Op basis waarvan moet de 'have'-teller worden verlaagd of verhoogd?
Welke prestatie-indicatoren hebt u gebruikt om uw werk in het laatste project te beoordelen?
Werk je nu of niet, en in welk formaat: kantoor, hybride, remote?
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) n := len(s) for right := 0; right < n; right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
/* We moeten gegevens van een bron naar een consument overbrengen. De bron geeft gegevens in kleine batches (~tien records), terwijl de consument 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 echter vanaf de vorige "bevestigde" positie, aangegeven door cookie. Daarom moet elke cookie-waarde die door Next wordt geretourneerd, na het opslaan van de gegevens in de ontvanger, worden bevestigd met een Commit-aanroep, in dezelfde volgorde als ze door Next werden geretourneerd. Ontvanger: - Kan niet meer dan MaxItems tegelijk verwerken. Basissysteem: 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. Uitdaging: De methoden Next, Process en Commit zijn verbonden met netwerkoproepen en kunnen vrij lang duren. Om het proces te versnellen, moeten de lees-, schrijf- en bevestigingsprocessen parallel worden uitgevoerd. Zodat tijdens Process of Commit, het lezen uit de bron en het vormen van de nieuwe buffer doorgaan. */ 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 een gegevensbatch als verwerkt te markeren Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }