Golang
Quali metodi di sincronizzazione delle goroutine esistono in Go?
Parla dei canali in Go: cosa sono, cosa contiene, cosa succederà con un canale con buffer di 5 elementi quando si scrivono 5 valori?
Hai domande sui processi, le condizioni di lavoro e i prossimi passi?
Hai attualmente altri colloqui o offerte?
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)
Hai mai lavorato con transazioni in PostgreSQL? Con quali livelli di isolamento delle transazioni ti sei trovato, in quali casi vengono utilizzati?
Implementa una funzione che accetta []any e delta int. È necessario aumentare di delta solo le prime occorrenze di numeri unici (int). Altri tipi e numeri ripetuti devono essere lasciati invariati. La funzione deve restituire la slice aggiornata e 2 numeri: updated — quanti numeri unici sono stati modificati, duplicates — quanti elementi numerici si sono rivelati duplicati func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // il tuo codice }
Come sincronizzare i worker tramite PostgreSQL (lock distribuito nel database)?
Alla settima riga si conclude che l'array interno sarà sovraccarico e ne verrà creato uno nuovo. Perché hai deciso così?
Cos'è il pattern Outbox e come viene implementato?
Come il browser rende le pagine? Cos'è il compositing?
Se un compito del genere fosse inserito in uno sprint ora, da dove inizieresti e come gestiresti l'incertezza?
Come hai lavorato con Kubernetes nel tuo team precedente?
Perché sono necessarie due verifiche if (alla riga 79 e alla riga con len(buf)==MaxItems), invece di una sola?
Qual è la motivazione del cambiamento? Perché hai deciso di entrare nel mercato?
Quale tipo usare per implementare un set in Go?
Hai scritto o supportato servizi ad alta intensità?
Parlami della tua esperienza, cosa hai fatto, su quale progetto hai lavorato e quale ruolo hai ricoperto?
Quanto sono generalmente chiare le richieste?
Quali sono i livelli di isolamento delle transazioni? Quali hai usato?