Golang
func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) { var ( res []uint32 args []interface{} ) query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;` args = append(args, limit, offset) rows, err := r.slave.Query(ctx, query, args...) if err != nil { return nil, err } for rows.Next() { var orderID uint32 if err = rows.Scan(&orderID); err != nil { return nil, err } res = append(res, orderID) } return res, nil }
Crea una procedura e falla un SELECT.
Parlaci dell'ottimizzazione delle query al database: come avete individuato le query problematiche e cosa avete fatto?
Progettazione di un sistema di messaggistica scalabile che supporti 150 milioni di utenti, 75 milioni di DAU, 225 milioni di MAU, 1,2 milioni di letture / 300k scritture QPS, 5 milioni di utenti simultanei, 60 PB di nuovi dati all'anno, crescita del 30% annuo, P99 <200 ms per la lettura, <300 ms per la scrittura, SLA 99,95%. CONTESTO È necessario progettare un sistema di messaggistica distribuito, simile a WhatsApp, che supporti chat 1:1 e di gruppo, garantisca la consegna dei messaggi, visualizzi gli stati online degli utenti e trasmetta file multimediali (foto, video, audio). Il sistema deve garantire alta disponibilità e bassa latenza, supportare alto parallelismo e scalare a livello globale. REQUISITI FUNZIONALI - Supporto per chat personali (1:1) e di gruppo con possibilità di aggiungere/rimuovere partecipanti - Invio e ricezione di messaggi di testo e file multimediali Requisiti non funzionali: - Nessuna implementazione esplicita di crittografia end-to-end a livello di servizi o client, tranne un'annotazione generale. - Mancanza di una descrizione chiara dello sharding e della replica dei database per chat_id o user_id per scalabilità e tolleranza ai guasti. - Nessun componente o meccanismo esplicito per gestire la sincronizzazione offline dei messaggi e le ricevute di consegna. - Non è chiaro come venga effettuato il bilanciamento del carico tra database e servizi, specialmente durante i picchi di traffico. **Punti critici da considerare:** (Il diagramma mostra un'architettura con Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage e CDN)
Il worker lavora a lungo (2 minuti), la transazione rimane nel database in caso di crash — cosa fare?
Qual è la differenza tra un'immagine e un contenitore?
Parlami della tua formazione e del percorso nello sviluppo. Non hai seguito una formazione specifica, vero?
Descrivi l'algoritmo per contare le sottostringhe con tutti i caratteri unici
Quando sei pronto a tornare al lavoro? Hai bisogno di tempo per riposarti dopo le dimissioni?
SELECT * c.id, -- seleziona tutte le chat (c.id, c.name) per tutti gli utenti per nome ($1) where text > 'abc'
Quale tipo usare per implementare un set in Go?
Quale protocollo di trasporto utilizza gRPC? Qual è la differenza tra HTTP/2 e HTTP/1.1?
Parlami della tua esperienza, cosa hai fatto, su quale progetto hai lavorato e quale ruolo hai ricoperto?
Qual è la differenza tra map e sync.Map?
Quale errore si verifica tentando modificare un carattere di una stringa: un panico, un errore gestito o qualcos'altro?
Come viene implementato l'isolamento dei container a livello del kernel Linux? Raccontaci di più sui namespace
Quando si verifica la riallocazione dell'array di supporto durante l'append?
Qual è il tuo formato di lavoro? Lavori completamente in remoto? Dove ti trovi attualmente?
Cosa è inaccettabile per te nel lavoro?
Parlami dei tipi di dati in Go.