Golang
Pourquoi avez-vous démissionné?
Qu'est-ce qui constitue un signal d'alarme pour toi lors de l'entrée dans un nouveau poste ? Quelle est ta relation avec le code legacy ?
Comment fonctionne le ramasse-miettes en Go?
Avec quelles bases de données avez-vous travaillé ? Via ORM ou requêtes natives ? Quelles requêtes natives avez-vous écrites et à quel niveau ?
func merge(chs ...<-chan int) <-chan int { }
Explique ce qu'est l'indexation dans les bases de données, à quoi elle sert, quels sont ses avantages et ses inconvénients.
Parle-moi du modèle de mémoire en Go — comment est-il conçu?
Avez-vous limité la profondeur du défilement ? Vous avez mentionné l'utilisation de bulk pour le chargement initial des données, mais comment gérez-vous les mises à jour incrémentielles lorsque le prix ou le nom du produit changeait ? Comment assuriez-vous la synchronisation d'Elasticsearch ?
Le recruteur ne comprend pas les priorités, il dit simplement 'il me faut 300 candidats' — comment gérer cela?
package stockage import ( "database/sql" "errors" "fmt" "time" "github.com/company/my-service/internal/event" "github.com/company/my-service/internal/metric" ) type Partner struct { ID string `db:"id" json:"id"` Balance float32 `db:"balance" json:"balance"` Hold float32 `db:"hold" json:"hold"` } type PayoutRepository struct { db sql.DB eventPublisher event.Publisher metricCollector metric.Collector totalPayouts int } func NewPayoutRepository() *PayoutRepository { db, err := sql.Open("postgres", "host=localhost user=postgres password=postgres dbname=affiliate") if err != nil { panic(err) } r := PayoutRepository{ db: db, eventPublisher: event.NewKafkaPublisher("localhost:9092"), metricCollector: metric.NewPrometheusCollector("localhost:9090"), } go func() { for range time.Tick(time.Minute) { _ = r.metricCollector.Send("TotalPayouts", r.totalPayouts) } }() return r } func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil } func (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) if err != nil { if err == sql.ErrNoRows { return p, errors.New("partner not found") } return p, err } return p, nil } func (r *PayoutRepository) save(p Partner) error { _, err := r.db.Exec( fmt.Sprintf("UPDATE partners SET balance = %s, hold = %s WHERE id = %s", p.Balance, p.Hold, p.ID), ) if err != nil { return err } if err := r.eventPublisher.Publish("BalanceChanged", p); err != nil { return err } return nil }
Quel type de multitâche est utilisé dans Go ? Comment le planificateur de Go interrompt-il les goroutines ?
Pourquoi avez-vous utilisé Redis plutôt qu'un cache en mémoire?
Combien de personnes y avait-il dans l'équipe?
Avez-vous travaillé avec des transactions dans PostgreSQL et avec quels niveaux d'isolation?
Communiques-tu encore avec d'autres entreprises ? As-tu déjà des offres ?
Parlez-moi du travail avec Kafka : que se passe-t-il lorsque le lag s'accumule, quels sont les risques et comment ont-ils été résolus ?
Parle-moi d'une occasion où tu as proposé une initiative et l'as défendue.
Quelle commande affiche l'espace disque?
package main func main() { c := make(chan int) for range 3 { select { default: println(1) case <-c: println(2) case c <- 1: println(3) } } }
Quels sont les types d'interaction interprocessus (IPC) ?