Golang
/** * Arbeit mit Slices * * Zwei ungeordnete Slices beliebiger Länge werden eingegeben. * Schreiben Sie eine Funktion, die ihre Schnittmenge zurückgibt **/
// alle Elemente des Slices müssen eindeutig sein + insgesamt 1000 Elemente enthalten // das Programm darf aufgrund von time.sleep nicht lange hängen bleiben func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("doppelte Inkrement") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }
Haben Sie Erfahrung in Mentoring oder Schulung jüngerer Kollegen?
Schreiben Sie eine Funktion, die alle Elemente, die gleich val sind, im Slice in-place entfernt. Gibt den Slice ohne die entfernten Werte zurück. func RemoveValue(slice []int, val int) []int { // Ihr Code } // Beispiel RemoveValue([]int{1,2,3,2,4}, 2) // -> []int{1,3,4} RemoveValue([]int{1,2,3}, 5) // -> []int{1,2,3} RemoveValue([]int{}, 1) // -> []int{}
Verstehen Sie richtig, dass wir beim Cache-aside trotzdem den Cache aufrufen und die Daten dort invalidieren müssen, wenn wir Daten in der Datenbank aktualisieren?
Was sehen wir auf dem Bildschirm beim Start des Programms, wenn wir den Bug mit wg (Zeiger übergeben) beheben?
Wie ist die Kommunikation zwischen Microservices organisiert?
Was ist dir im Team und im Arbeitsprozess wichtig?
var defaultTxOptions = &sql.TxOptions{} const defaultCurrency = "RUB" func CreateUserWithDefaultCurrency(ctx context.Context, db *sql.DB, email, passwordHash string) error { tx, err := db.BeginTx(ctx, defaultTxOptions) if err != nil { return err } defer func() { if err != nil{ tx.Rollback() } }() _, err = tx.Exec("INSERT INTO users (email, password) VALUES (?, ?)", email, passwordHash) if err != nil { return err } rows, err := tx.Query("SELECT id FROM users WHERE email = ?", email) if err != nil { return err } defer rows.Close() id := 0 for rows.Next() { err = rows.Scan(&id) if err != nil { return err } } _, err = tx.Exec("INSERT INTO balances (user_id, currency, current_balance) VALUES (?, ?, 0)", id, defaultCurrency) if err != nil { return err } return tx.Commit() }
Ab wann sind Sie verfügbar?
Kann man den Profiler in der Produktion aktivieren?
Mussten Sie jemals die Zeit verfolgen, Aufgaben in einem System erfassen?
Fallbeispiel: Der Service beginnt, in 3 Sekunden anstelle von 100 Millisekunden zu antworten. Was wären deine Maßnahmen?
Es gibt einen Parkplatz im Einkaufszentrum: Autos fahren rein und raus, und am Ende der Parksession muss bezahlt werden. Wie siehst du das? Entwerfe ein System.
Wie würde das aktualisierte Redis-Schema mit timeout-worker für zeitlich begrenzte Spiele aussehen?
Erzählen Sie mir vom Go-Planer, wie er funktioniert und welchen Algorithmus er verwendet.
Hast du Erfahrung mit Proxy-Services und VPN-Protokollen?
Erzählen Sie mir von Ihrem größten Misserfolg bei der Arbeit. Was haben Sie daraus gelernt?
Warum immer Arrays anstelle von Slices verwenden?
Erzähle mir eine interessante Ingenieuraufgabe, an der du gearbeitet hast — eine schwierige, die du deinen Freunden erzählen kannst.