Sobes.tech

Υλοποιήστε την απόκτηση των 5 κορυφαίων υπηρεσιών σε O(N) χρησιμοποιώντας μια βοηθητική δομή

Middle+
X5 groupX5 group
76

Οι ενημερώσεις εγγράφων φτάνουν στην υπηρεσία message Document { string Url = 1; // URL του εγγράφου, ο μοναδικός του αναγνωριστικός uint64 PubDate = 2; // δηλωμένος χρόνος δημοσίευσης του εγγράφου uint64 FetchTime = 3; // χρόνος λήψης αυτής της ενημέρωσης εγγράφου, μπορεί να θεωρηθεί ως αναγνωριστικό έκδοσης. Το ζεύγος (Url, FetchTime) είναι μοναδικό. string Text = 4; // κείμενο του εγγράφου uint64 FirstFetchTime = 5; // αρχικά απουσιάζει, πρέπει να συμπληρωθεί } Τα έγγραφα μπορούν να φτάσουν σε οποιαδήποτε σειρά (όχι με τη σειρά που ενημερώθηκαν), και μπορεί να υπάρχουν διπλά μηνύματα. Είναι απαραίτητο να δημιουργηθούν στην έξοδο ίδια μηνύματα, αλλά με διορθωμένα πεδία σύμφωνα με τους ακόλουθους κανόνες (όλα τα παρακάτω αφορούν μια ομάδα εγγράφων με το ίδιο πεδίο Url): Το πεδίο Text και FetchTime πρέπει να είναι ίσα με αυτά του εγγράφου με το μεγαλύτερο FetchTime που έχει ληφθεί μέχρι τώρα. Το πεδίο PubDate πρέπει να είναι ίσο με αυτό του μηνύματος με το μικρότερο FetchTime. Το πεδίο FirstFetchTime πρέπει να είναι ίσο με την ελάχιστη τιμή FetchTime. Με άλλα λόγια, σε κάθε στιγμή παίρνουμε το PubDate και το FirstFetchTime από την πρώτη έκδοση που έχει ληφθεί μέχρι τώρα (αν τα ταξινομήσουμε κατά FetchTime), και το Text από την τελευταία. Ο διασυνδεδεμένος κώδικας μπορεί να υλοποιηθεί ως: type Processor interface { Process(doc *Document) (*Document, error) } Αυτός ο κώδικας θα λειτουργεί σε μια υπηρεσία που διαβάζει μηνύματα από μια ουρά (Kafka ή παρόμοια), και επίσης γράφει το αποτέλεσμα στην ουρά. Αν το Process επιστρέφει Null, τίποτα δεν γράφεται στην ουρά.

Senior
VKVK
76

Έχεις εμπειρία με gRPC και GraphQL; Μίλησέ μας γι'αυτά.

Senior
X5 techX5 tech
76

Με ποιες μισθολογικές προσδοκίες βασίζεστε;

Senior
X5
76

Γνωρίζεις το προϊόν Loop;

Middle
wilix
76

Πώς αισθάνεσαι σχετικά με τις υπηρεσίες; Έχεις τέτοια εμπειρία;

Senior
ozon_tech
76

Πώς ήταν ακριβώς η διαδρομή της αισιόδοξης κλειδώματος από τη λήψη του μηνύματος από το Kafka μέχρι την ενημέρωση στη βάση δεδομένων;

Senior
КасперскийКасперский
76

Πώς λαμβάνεις τις εργασίες, από ποιον έρχονται;

Middle+
SelectelSelectel
76

Έχεις εμπειρία στη βελτιστοποίηση ερωτημάτων σε σχεσιακές βάσεις δεδομένων;

Middle
VKVK
76

Πώς χρησιμοποιήσατε Kafka και RabbitMQ ως brokers; Γιατί δύο;

Senior
Ozon ФинтехOzon Финтех
76

Πώς να παραλληλοποιήσετε την επεξεργασία των logs χρησιμοποιώντας ένα worker pool; Πώς να λαμβάνετε αποτελέσματα από τις goroutines;

Middle+
X5 groupX5 group
76

Τι είναι οι πίνακες και τα slices στο Go, πώς διαφέρουν; Πώς λειτουργεί το append και η επέκταση της capacity;

Senior
ClearWay
76

Ποιο είναι το πλεονέκτημα της αναπαραγωγής; Ποιες είναι οι δαπάνες που συνεπάγεται;

Senior
ВайлдберрисВайлдберрис
76

// Έχουμε μια μέθοδο για την απόκτηση πληροφοριών σχετικά με τα προϊόντα, αυτή η μέθοδος καλείται πολύ συχνά // υπάρχουν προβλήματα σε αυτόν τον κώδικα και πώς μπορούμε να τα διορθώσουμε; βάση δεδομένων postgress func (r *ProductRepository) GetProductDetails(ctx context.Context, productIDs []int) []Product { products := make([]Product, 0, len(productIDs)) for _, id := range productIDs { go func(id int) { var p Product query := "SELECT name, price, description FROM products WHERE id = $1" err := r.db.QueryRowContext(ctx, query, id).Scan(&p.Name, &p.Price, &p.Desc) if err != nil { r.logger.Error("error get product", "err", err) return } products = append(products, p) }(id) } return products }

Middle+
Lenta Tech
76

Επηρεάζει το μέγεθος του buffer του καναλιού κάτι στο worker pool;

Senior
WildberriesWildberries
76

Πότε υπολογίζονται τα επιχειρήματα των καθυστερημένων συναρτήσεων — κατά τον ορισμό ή κατά την κλήση της συνάρτησης;

Senior
КасперскийКасперский
76

Πώς να αλληλεπιδράσετε με τους εμπόρους που βρίσκονται στο εξωτερικό περίγραμμα;

Senior
Финтехробот
76

Ποια μέσα συγχρονισμού υπάρχουν στον ανταγωνισμό στο Go;

Senior
I-teco
76

Τι δεδομένα αποθηκεύανε στο Redis και πώς καταλάβαιναν ότι οι διαφημίσεις ήταν καυτές;

Senior
Cloud.ru
76

Γιατί να χρησιμοποιούμε διεπαφές;

Middle+
Napoleon IT
76
/412