Sobes.tech

Golang

Hai usato cloud pubblici? Se sì, quali provider e servizi?

135

Come verificare che la finestra contiene tutti i caratteri necessari?

133

Parliamo di architettura a microservizi. Cosa è stato più recente: supporto o sviluppo?

132

Raccontami cosa succede alla fine — come accumuliamo il buffer?

131

Descrivi l'algoritmo per risolvere il problema maxSegment

131

Quali sono le tue aspettative salariali?

129

/* Dobbiamo trasferire dati da una sorgente a un consumatore. La sorgente fornisce i dati in piccoli batch (~dieci record), mentre il consumatore lavora meglio con batch più grandi (~mille record). Un esempio reale è il trasferimento di dati da code di tipo Kafka a un database Clickhouse. Sorgente: - Quasi infinita. - La sorgente non restituisce mai più di MaxItems record in una singola chiamata a Next. - All'interno di una "sessione" (una chiamata alla funzione Pipe), la sorgente restituisce nuovi dati ad ogni chiamata a Next. - Tuttavia, dopo un riavvio, la sorgente ricomincia dalla posizione "confermata" precedente, definita da cookie. Pertanto, *ogni* valore di cookie restituito da Next, dopo aver salvato i dati nel ricevitore, deve essere confermato con una chiamata a Commit, nello stesso ordine in cui sono stati restituiti da Next. Ricevitore: - Non può elaborare più di MaxItems alla volta. È necessario implementare la funzione func Pipe(p Producer, c Consumer) error che legge i dati dalla sorgente, li raggruppa in un buffer di dimensione non superiore a MaxItems e li salva nel ricevitore, dopodiché conferma il progresso nella sorgente. */ const MaxItems = 9999 type Producer interface { // Next restituisce: // - un batch di elementi da elaborare // - cookie da confermare al termine dell'elaborazione // - errore Next() (items []any, cookie int, err error) // Commit viene usato per marcare il batch di dati come processato Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }

127

Quali anti-pattern nella architettura a microservizi conosci?

127

Hai esperienza nella scrittura di programmi con multithreading o operazioni asincrone?

126

4 - accetta rapidamente i compiti in arrivo, 5 - restituisce il risultato del compito su richiesta 6 - se non c'è risultato, restituisce lo stato appropriato /* Processore - un servizio che esegue un'operazione lunga e intensiva in risorse. È già implementato Gli errori che restituisce sono esclusivamente legati a dati di input incorretti, sono stabili e richiederli di nuovo è inutile */ type Processor interface { Process([]byte) ([]byte, error) } /* Supponiamo di avere un generatore di identificatori unici (ad esempio UUID). Il generatore garantisce che non ci saranno collisioni */ type ID string // func NewID() ID /* Il pianificatore accetta compiti dai clienti, li mette in coda e li avvia nel processamento. Assicura che non più di 'threads' metodi di processo siano in esecuzione contemporaneamente Permette di verificare lo stato del compito e ottenere il risultato non blocca i metodi pubblici per il processamento */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // logica di inizializzazione return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // implementare return "" }

126

Consideriamo un esempio: first=[1,1,2], second=[1,2]. Cosa dovrebbe restituire il tuo algoritmo e funziona correttamente con i duplicati?

125

[nome] ha chiesto: mantenendo la posizione di un elemento inferiore a X, quale sarà la posizione?

124

Il bilanciatore deve capire che il backend risponde con errori, e superando una soglia per un certo tempo, escluderlo dal bilanciamento (Circuit Breaker)

123

Se ti viene offerto un lavoro e lo accetti, quanto tempo ti ci vorrà per essere pronto a iniziare a lavorare?

123

Con quali database o altri sistemi di archiviazione dati hai lavorato? Quante richieste al secondo (RPS) in scrittura e lettura?

120

Hai esperienza nello sviluppo e nel supporto di sistemi distribuiti?

120

Hai svolto compiti di leadership durante tutto il tuo lavoro?

119

Qual è il carico massimo in richieste al secondo che il servizio più trafficato ha gestito? È corretto che sia fino a 5–8 mila richieste al secondo?

118

È corretto che attualmente risiedi a [città] e ti sarebbe comodo lavorare in formato ibrido con accesso in ufficio?

118
/11