Erzählen Sie uns von Ihren letzten Projekten und dem verwendeten Technologiestack.
Golang
Wo wohnst du, wo bist du?
Lass uns über Microservice-Architektur sprechen. Was war in letzter Zeit häufiger: Support oder Entwicklung?
Wie überprüft man, ob das Fenster alle benötigten Zeichen enthält?
Erzähle, was am Ende passiert — wie wir den Puffer ansammeln?
Beschreiben Sie den Algorithmus zur Lösung des Problems maxSegment
4 - Eingehende Aufgaben schnell annehmen, 5 - das Ergebnis der Aufgabe auf Anfrage zurückgeben 6 - wenn kein Ergebnis vorhanden ist, den entsprechenden Status zurückgeben /* Prozessor - ein Dienst, der eine lange, ressourcenintensive Operation ausführt. Er ist bereits implementiert Die von ihm zurückgegebenen Fehler beziehen sich ausschließlich auf inkorrekte Eingabedaten, sind stabil und eine erneute Anfrage ist sinnlos */ type Processor interface { Process([]byte) ([]byte, error) } /* Wir nehmen an, dass wir einen Generator für eindeutige Identifikatoren haben (z.B. UUID). Der Generator garantiert, dass keine Kollisionen auftreten */ type ID string // func NewID() ID /* Der Scheduler akzeptiert Aufgaben von Clients, schiebt sie in die Warteschlange und startet die Verarbeitung. Stellt sicher, dass höchstens 'threads' Verarbeitungsvorgänge gleichzeitig laufen Ermöglicht es, den Status der Aufgabe zu überprüfen und das Ergebnis zu erhalten blockiert nicht seine öffentlichen Methoden für die Verarbeitung */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // Initialisierungslogik return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // Implementierung return "" }
/* Wir müssen Daten von einer Quelle zu einem Verbraucher übertragen. Die Quelle liefert die Daten in kleinen Chargen (~zehn Einträge), während der Verbraucher effizienter mit größeren Chargen (~tausend Einträge) arbeitet. Ein echtes Beispiel ist die Übertragung von Daten aus Kafka-Queues in eine Clickhouse-Datenbank. Quelle: - Praktisch unendlich. - Die Quelle gibt niemals mehr als MaxItems Einträge in einem einzelnen Next-Aufruf zurück. - Innerhalb einer "Sitzung" (einen Aufruf der Funktion Pipe) liefert die Quelle bei jedem Next-Aufruf neue Daten. - Nach einem Neustart beginnt die Quelle wieder bei der vorherigen "bestätigten" Position, die durch cookie festgelegt ist. Daher muss jeder Wert von cookie, den Next zurückgibt, nach dem Speichern der Daten im Empfänger mit einem Commit bestätigt werden, und zwar in der gleichen Reihenfolge, in der sie von Next zurückgegeben wurden. Empfänger: - Kann nicht mehr als MaxItems auf einmal verarbeiten. Es ist erforderlich, die Funktion func Pipe(p Producer, c Consumer) error zu implementieren, die Daten aus der Quelle liest, sie in einen Puffer mit maximaler Größe MaxItems gruppiert und sie im Empfänger speichert, und anschließend den Fortschritt in der Quelle bestätigt. */ const MaxItems = 9999 type Producer interface { // Next gibt zurück: // - einen Batch von Items zur Verarbeitung // - cookie, das bei Abschluss der Verarbeitung bestätigt werden muss // - Fehler Next() (items []any, cookie int, err error) // Commit wird verwendet, um den Datenbatch als verarbeitet zu markieren Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Welche Gehaltsvorstellungen haben Sie?
Haben Sie Erfahrung im Schreiben von Programmen mit Multithreading oder asynchronen Operationen?
Welche Anti-Pattern in der Microservice-Architektur kennen Sie?
Betrachten wir ein Beispiel: first=[1,1,2], second=[1,2]. Was sollte Ihr Algorithmus zurückgeben und funktioniert er korrekt mit Duplikaten?
Wenn Ihnen ein Angebot gemacht wird und Sie es annehmen, wie bald wären Sie bereit, mit der Arbeit zu beginnen?
[Name] fragte: Bei Beibehaltung der Position eines Elements kleiner als X, welche Position hat es dann?
Der Load Balancer muss verstehen, dass das Backend Fehler antwortet, und bei Überschreitung einer Schwelle für eine bestimmte Zeit, es aus dem Load Balancing ausschließen (Circuit Breaker)
Haben Sie Erfahrung in der Entwicklung und Unterstützung verteilter Systeme?
Haben Sie während Ihrer gesamten Berufstätigkeit Führungsaufgaben übernommen?
Mit welchen Datenbanken oder anderen Datenspeichern hast du gearbeitet? Wie viele Anfragen pro Sekunde (RPS) für Schreiben und Lesen?
Was ist die maximale Last in Anfragen pro Sekunde, die der am stärksten ausgelastete Dienst bewältigt hat? Ist es richtig, dass es bis zu 5–8 Tausend Anfragen pro Sekunde sind?
Ist es richtig, dass Sie derzeit in [Stadt] wohnen und es Ihnen bequem wäre, im hybriden Format mit Bürobesuchen zu arbeiten?