Sobes.tech

Data Analyst

Πώς θα δημιουργούσες ένα benchmark για τη γεωμετρία; Περιέγραψε τη διαδρομή από την ιδέα μέχρι το τελικό σύνολο δεδομένων.

126

val_a, val_b = 0, 0 t = None ενώ i < μήκος(a) ή j < μήκος(b): a_next = a[i][0] αν i < μήκος(a) αλλιώς float('inf') b_next = b[j][0] αν j < μήκος(b) αλλιώς float('inf') αν a_next < b_next: val_a = a[i][1] t = a[i][0] i += 1 elif b_next < a_next: val_b = b[j][1] t = b[j][0] j += 1 αλλιώς: val_a = a[i][1] val_b = b[j][1] t = a[i][0] i += 1 j += 1 result.append((t, val_a + val_b)) return result

123

Ο Afanasy εργαζόταν για 2 εβδομάδες στην συγγραφή κώδικα που θα μπορούσε να λύσει ιαπωνικά σταυρόλεξα με υποστήριξη εννέα χρωμάτων, όταν σε μια συνάντηση ομάδας, ένας συνάδελφός του του είπε ότι μπορούσε να χειριστεί το έργο πιο γρήγορα ο ίδιος, και το πρόγραμμα πλέον δεν είχε νόημα. Αλλά ο Afanasy, ως αισιόδοξος, αποφάσισε να συνεχίσει να εξασκείται σε αυτό το έργο και να κάνει το εξής — να εκτιμήσει πόσο καλά χειρίζεται ο συνάδελφός του τα σταυρόλεξα. Για αυτήν την αξιολόγηση, επέλεξε ένα ανάλογο του μετρικού IoU — ο υπολογισμός θα είναι παρόμοιος με το κλασικό Intersection Over Union, αλλά κατά χρώματα. Λειτουργεί ως εξής: κάθε ταιριαστό κελί στο αρχικό και στη λύση κατά χρώμα προσθέτει 1 στον αριθμητή, και στον παρονομαστή, προστίθεται 1 για κάθε κελί στο αρχικό και στη λύση (για ταιριαστά κελία, προστίθεται μόνο ένα). Μετά, γίνεται μέση τιμή πάνω στον αριθμό των χρωμάτων στην αρχική εικόνα, στρογγυλεμένη σε δύο δεκαδικά ψηφία; το μηδέν δεν θεωρείται χρώμα, οπότε η μετρική δεν πρέπει να υπολογίζεται για τα κελία αυτού του χρώματος. Η εισαγωγή ξεκινά με μια γραμμή που περιέχει τον αριθμό των γραμμών n και των στηλών m (με αυτή τη σειρά). Στη συνέχεια, ακολουθούν 2n γραμμές, που περιέχουν m αριθμούς διαχωρισμένους με κενά — οι πρώτες n γραμμές αφορούν το αποσταλμένο σταυρόλεξο, και οι επόμενες n — την αρχική εικόνα. Υποτίθεται ότι κάθε γραμμή, ξεκινώντας από τη δεύτερη, περιέχει ακριβώς m αριθμούς. Ως απάντηση, εκτυπώστε έναν αριθμό στρογγυλεμένο σε δύο δεκαδικά ψηφία, όπως στα παραδείγματα. Εδώ είναι μερικά παραδείγματα: 1. Πρώτο παράδειγμα [phone] -> 1.0 Εξήγηση: η συνεισφορά των ταιριασμένων και μη ταιριασμένων κελιών (1.0 + 1.0 + 1.0 + 1.0) / αριθμός χρωμάτων (4) 2. Δεύτερο παράδειγμα [phone] -> 0.08 Εξήγηση: η συνεισφορά των ταιριασμένων και μη ταιριασμένων κελιών (0.25 + 0.0 + 0.0) / αριθμός χρωμάτων (3); τα μηδενικά δεν λαμβάνονται υπόψη, ούτε ως κελία στις αναπαραστάσεις, ούτε στον αριθμό χρωμάτων. 3. Τρίτο παράδειγμα [phone] όπου η αποσταλμένη εικόνα αρχίζει [phone] — όπου τελειώνει η αποσταλμένη εικόνα 0 1 2 — όπου αρχίζει η αρχική εικόνα [phone] -> 0.47 Εξήγηση: η συνεισφορά των ταιριασμένων και μη ταιριασμένων κελιών (0.4 + 0.5 + 0.5) / αριθμός χρωμάτων (3); τα μηδενικά δεν λαμβάνονται υπόψη, ούτε ως κελία στις αναπαραστάσεις, ούτε στον αριθμό χρωμάτων. 4. Τέταρτο παράδειγμα [phone] -> 0.0 Εξήγηση: η συνεισφορά των ταιριασμένων και μη ταιριασμένων κελιών (0.0) / αριθμός χρωμάτων (1); τα μηδενικά δεν λαμβάνονται υπόψη, ούτε ως κελία στις αναπαραστάσεις, ούτε στον αριθμό χρωμάτων.

123

Γράψτε έναν κώδικα σε Python που υπολογίζει το εσωτερικό γινόμενο δύο διανυσμάτων που έχουν συμπιεστεί με RLE σε μια μόνο διαδρομή.

123

Πώς ονομάζεται ο τελεστής ταξινόμησης στη SQL και πότε εκτελείται; Πού βρίσκεται το LIMIT στη σειρά εκτέλεσης;

121

Ποια είναι η λογική σειρά εκτέλεσης των FROM, JOIN, GROUP BY και SELECT σε αυτό το ερώτημα SQL;

121

Εξηγήστε τη λογική επίλυσης του προβλήματος sum_series: πώς να κατασκευάσετε το άθροισμα δύο διαδοχικών χρονικών σειρών;

119

Ψευδοκώδικας sum_series(a={{1, 2}, {5, 1}}, b={{2, 4}, {3, 6}, {9, 7}}) -> {{1, 2}, {2, 6}, {3, 8}, {5, 7}, {9, 8}} def sum_series(a, b): result = [] i , j = 0, 0 val_a, val_b = 0, 0 while i < len(a) or j < len(b): a_next = a[i][0] if i < len(a) else float('inf') b_next = b[j][0] if j < len(b) else float('inf') if a_next <= b_next: val_a = a[i][1] t = a[i][0] i += 1 else: val_b = b[j][1] t = b[j][0] j += 1 result.append((t, val_a + val_b)) return result

117

Πώς θα ρύθμιζες ένα τεστ A/B για να ελέγξεις έναν νέο αλγόριθμο αναζήτησης; Πώς θα καθόριζες το απαραίτητο μέγεθος δείγματος και τη διάρκεια του τεστ;

115

B. Προθέματα και Επιθέματα Δίνεται ένας ταξινομημένος πίνακας με n μηδενικά. Σε κάθε βήμα, μπορείτε να επιλέξετε έναν τυχαίο αριθμό από τα πρώτα ή τα τελευταία στοιχεία αυτού του πίνακα και να προσθέσετε ένα σε όλα τα επιλεγμένα στοιχεία. Είναι δυνατόν να φτάσετε στην καθορισμένη κατάσταση του πίνακα μετά από κάποιο αριθμό τέτοιων ενεργειών; Μορφή εισόδου Η πρώτη γραμμή περιέχει έναν ακέραιο 1 ≤ n ≤ 100000 — τον αριθμό των στοιχείων στον πίνακα. Η δεύτερη γραμμή περιέχει n μη αρνητικούς ακέραιους a1, a2, ..., an χωρισμένους με κενά, όπου ai ≤ 10^18 — τα επιθυμητά τελικά στοιχεία. Μορφή εξόδου Εκτυπώστε "YES" αν μια τέτοια κατάσταση είναι εφικτή, και "NO" αν δεν είναι. Παράδειγμα Είσοδος [phone] Έξοδος YES Σημείωση Οι καταστάσεις [phone] μπορούν να επιτευχθούν ως εξής: προσθέτοντας ένα στα πρώτα τρία στοιχεία, με αποτέλεσμα [phone] προσθέτοντας ένα στα τελευταία τέσσερα στοιχεία, με αποτέλεσμα [phone] προσθέτοντας ένα στο τελευταίο στοιχείο, με αποτέλεσμα [phone]

114

Πώς συλλέγουμε τις απαντήσεις ground truth για το benchmark στη γεωμετρία;

114

-- Σχετικά με τις προωθητικές καμπάνιες που αποστέλλονται στους χρήστες: -- 2.1 Γράψτε ένα ερώτημα που εμφανίζει τον αριθμό των χρηστών που έλαβαν επιτυχώς την επικοινωνία, για κάθε καμπάνια. -- 2.2 Τροποποιήστε το ερώτημα ώστε να εμφανίζει: τον αριθμό των χρηστών που τελικά δεν έλαβαν καμία επιτυχημένη επικοινωνία, για κάθε καμπάνια. -- 3. Προστέθηκε ένα επιπλέον πεδίο στον πίνακα communications – event_timestamp – η ημερομηνία και η ώρα του γεγονότος παράδοσης της επικοινωνίας σε μορφή '%Y-%m-%d %H:%M:%S'. -- Για όλες τις καμπάνιες, συμπεριλαμβανομένων αυτών που δεν ξεκίνησαν, υπολογίστε το δείκτη: το ποσοστό των χρηστών για τους οποίους η επιτυχημένη παράδοση μηνύματος πραγματοποιήθηκε από την πρώτη προσπάθεια. -- Μπορούν να χρησιμοποιηθούν λειτουργίες παραθύρου ή όχι, αλλά είναι σημαντικό το ερώτημα να είναι βέλτιστο.

112

Καταγράψτε σαφώς τα κριτήρια που πρέπει να πληρούνται ώστε τα δεδομένα να έχουν κανονική κατανομή.

111

Έχετε ερωτήσεις για τον συνεντευκτή;

110

Περαμεικός κώδικας sum_series(a={{1, 2}, {5, 1}}, b={{2, 4}, {3, 6}, {9, 7}}) -> {{1, 2}, {2, 6}, {3, 8}, {5, 7}, {9, 8}} def sum_series(a, b): result = [] i , j = 0, 0 val_a, val_b = 0, 0 while i < len(a) or j < len(b): a_next = a[i][0] if i < len(a) else float('inf') b_next = b[j][0] if j < len(b) else float('inf') if a_next < b_next: val_a = a[i][1] t = a[i][0] i += 1 else: val_b = b[j][1] t = b[j][0] j += 1 result.append((t, val_a + val_b)) return result

108

Τι είναι το benchmark και πώς θα αξιολογούσες την ποιότητα ενός πολυτροπικού μοντέλου;

107

-- Οι marketers ξεκινούν προωθητικές καμπάνιες στην εφαρμογή της υπηρεσίας. Υπάρχουν δύο πίνακες: -- campaigns – λίστα καμπανιών -- - campaign – όνομα καμπάνιας -- - action_type – τύπος καμπάνιας: "push" ή "banner" -- communications – λογιστικό αρχείο backend με τις αποστολές επικοινωνιών αυτών των καμπανιών στους χρήστες -- - user_id – αναγνωριστικό χρήστη -- - campaign – όνομα καμπάνιας -- - status – κατάσταση γεγονότος: "success" ή "error" --------------------------------------------------------------------------- -- 1. Αρχικά, στον πίνακα campaigns υπάρχουν 4 γραμμές: -- | campaign | action_type | -- |-------------|-------------| -- | promo_dogs | push | <- τυχαία διπλότυπο -- | promo_cats | banner | -- | promo_cats | banner | <- δύο γραμμές -- | promo_rats | push | -- Είναι επίσης γνωστό ότι: -- οι καμπάνιες promo_dogs και promo_cats πραγματοποιήθηκαν με επιτυχία σε 100 χρήστες και κάθε χρήστης έλαβε μια επικοινωνία, -- και το promo_rats βρίσκεται μόνο στο στάδιο του σχεδιασμού. -- 1.1 Τι θα εμφανίσει το ερώτημα: SELECT campaign, COUNT(*) as rows, COUNT(DISTINCT co.user_id) AS users FROM campaigns AS ca INNER JOIN communications AS co ON ca.campaign = co.campaign GROUP BY ca.campaign AS campaign -- 1.2 Πώς θα αλλάξει η απάντηση αν αλλάξει ο τύπος JOIN σε LEFT;

107

Θα διανεμηθεί η απόδοση των μετοχών [όνομα] κανονικά; (Αυξήσεις τιμών ανά λεπτό σε όλη την ιστορία των συναλλαγών από το 2000 έως το 2026)

101

D. Κινέζικα πυροτεχνήματα Ο Βλαντιμίρ αγόρασε ένα σετ από 3 κινέζικα πυροτεχνήματα. Φαίνονται ακριβώς τα ίδια και ανακατεύονται σε ένα κουτί, αλλά σύμφωνα με τις οδηγίες, έχουν διαφορετική αξιοπιστία: 1. "Ελίτ" — ποσοστό ελαττωμάτων 10% (πιθανότητα επιτυχίας 0.9). 2. "Πρότυπο" — ποσοστό ελαττωμάτων 20% (πιθανότητα επιτυχίας 0.8). 3. "Οικονομικό" — ποσοστό ελαττωμάτων 40% (πιθανότητα επιτυχίας 0.6). Ο Βλαντιμίρ παίρνει τυχαία το πρώτο πυροτέχνημα, το ανάβει, και λειτουργεί επιτυχώς. Ευτυχισμένος, αποφασίζει να πυροδοτήσει τα υπόλοιπα δύο ένα μετά το άλλο. Ποια είναι η πιθανότητα και τα δύο δεύτερα και τρίτα πυροτεχνήματα να λειτουργήσουν επίσης — χωρίς ελάττωμα; Στρογγυλοποιήστε την απάντηση σε τρία δεκαδικά ψηφία.

99

-- Διορθώθηκε ο πίνακας campaigns: αφαιρέθηκαν οι διπλότυποι, προστέθηκε κλειδί (PK). -- Πραγματοποιήθηκαν περισσότερες καμπάνιες, λόγω σφαλμάτων οι χρήστες άρχισαν να λαμβάνουν αποτυχημένες προσπάθειες παράδοσης επικοινωνιών, και μερικοί δεν κατάφεραν καν να εμφανιστούν. -- Σχετικά με τις προωθητικές καμπάνιες που στάλθηκαν στους χρήστες: -- 2.1 Γράψτε ένα ερώτημα που εμφανίζει τον αριθμό των χρηστών που έλαβαν επιτυχώς την επικοινωνία, για κάθε καμπάνια. -- 2.2 Τροποποιήστε το ερώτημα ώστε να εμφανίζει: τον αριθμό των χρηστών που δεν έλαβαν καμία επιτυχημένη επικοινωνία, για κάθε καμπάνια. -- Προστέθηκε ένα πεδίο στον πίνακα communications – event_timestamp – ημερομηνία και ώρα του γεγονότος παράδοσης της επικοινωνίας σε μορφή '%Y-%m-%d %H:%M:%S'. -- Για όλες τις καμπάνιες, συμπεριλαμβανομένων αυτών που δεν ξεκίνησαν, υπολογίστε το δείκτη: το ποσοστό των χρηστών για τους οποίους η επιτυχής παράδοση μηνύματος πραγματοποιήθηκε από την πρώτη προσπάθεια. -- Μπορούν να χρησιμοποιηθούν λειτουργίες παραθύρου, ή όχι, αλλά είναι σημαντικό το ερώτημα να είναι βέλτιστο.

99
/3