Ποιες ερωτήσεις συνέντευξης .NET να περιμένω;

Από Aaron Cao · Ενημερώθηκε

Ποιες ερωτήσεις συνέντευξης .NET να περιμένω;
Να περιμένετε ερωτήσεις για το περιβάλλον εκτέλεσης (CLR, συλλογή απορριμμάτων, τύποι τιμής έναντι τύπων αναφοράς), τη γλώσσα (async και await, LINQ, γενικεύσεις, records), τα frameworks (middleware και έγχυση εξαρτήσεων στο ASP.NET Core, EF Core), καθώς και σενάρια όπως διαρροή μνήμης σε μια υπηρεσία μακράς λειτουργίας ή ένα αργό API endpoint. Οι συνεντευκτές αξιολογούν τον συλλογισμό.

Να περιμένετε ερωτήσεις για το περιβάλλον εκτέλεσης (CLR, συλλογή απορριμμάτων, τύποι τιμής έναντι τύπων αναφοράς), τη γλώσσα (async και await, LINQ, γενικεύσεις, records), τα frameworks (middleware και έγχυση εξαρτήσεων στο ASP.NET Core, EF Core), καθώς και σενάρια όπως διαρροή μνήμης σε μια υπηρεσία μακράς λειτουργίας ή ένα αργό API endpoint. Οι συνεντευκτές αξιολογούν τον συλλογισμό.

Ποιες ερωτήσεις για runtime και γλώσσα ανοίγουν μια συνέντευξη .NET;

Οι συνεντευκτές ξεκινούν από εκεί όπου ξεκινά και το framework: το runtime. Να περιμένετε να εξηγήσετε τι κάνει το Common Language Runtime (φορτώνει assemblies, μεταγλωττίζει ενδιάμεσο κώδικα την κατάλληλη στιγμή και διαχειρίζεται τη μνήμη) και έπειτα να εμβαθύνετε στη συλλογή απορριμμάτων. Η ακολουθία των συμπληρωματικών ερωτήσεων είναι προβλέψιμη: γιατί ο συλλέκτης βασίζεται σε γενιές, τι κάνει ένα αντικείμενο να επιβιώνει και να περνά σε μεταγενέστερη γενιά, σε τι χρησιμεύει το large object heap και γιατί υπάρχουν τα IDisposable και using αφού η μνήμη είναι διαχειριζόμενη. Στο τελευταίο, απαντήστε αναφέροντας μη διαχειριζόμενους πόρους, όπως handles αρχείων και συνδέσεις, τους οποίους ο συλλέκτης δεν γνωρίζει πώς να αποδεσμεύσει έγκαιρα.

  • Τύποι τιμής και τύποι αναφοράς. Πού αποθηκεύεται ο καθένας, τι σημαίνει η αντιγραφή για κάθε τύπο και ποιο είναι το κόστος του boxing.
  • async και await. Εξηγήστε ότι ένα task σε αναμονή ελευθερώνει το νήμα που το κάλεσε αντί να το μπλοκάρει, γιατί το async void προορίζεται για event handlers και σε ποιο deadlock αναφέρονται όταν προειδοποιούν για το .Result.
  • LINQ. Η παγίδα είναι η αναβαλλόμενη εκτέλεση: ένα query IEnumerable εκτελείται όταν γίνεται απαρίθμηση και όχι όταν γράφεται, ενώ ένα query προς πάροχο βάσης δεδομένων μεταφράζεται σε SQL μόνο για εκφράσεις που κατανοεί ο πάροχος.
  • Γενικεύσεις, interfaces και records. Περιορισμοί, γιατί προτιμώνται τα interfaces από τις βασικές κλάσεις για καλύτερη δυνατότητα ελέγχου και τι προσφέρει η ισότητα βάσει τιμής ενός record.

Απαντήστε σε κάθε θέμα εξηγώντας τον μηχανισμό και μία συνέπεια. Το να πείτε ότι η συλλογή της νεότερης γενιάς είναι φθηνή επειδή τα περισσότερα αντικείμενα έχουν μικρή διάρκεια ζωής είναι το επίπεδο που ζητούν οι συνεντευκτές· η απλή απαρίθμηση των γενεών χωρίς αιτιολόγηση δεν αρκεί.

Πώς είναι οι ερωτήσεις για ASP.NET Core και EF Core;

Νιώθετε σίγουροι όταν γράφετε controllers, αλλά ανησυχείτε ότι οι ερωτήσεις θα αφορούν τον εσωτερικό μηχανισμό που σπάνια αγγίζετε. Η ανησυχία είναι βάσιμη, επειδή εδώ βρίσκονται οι ερωτήσεις για το framework. Ακολουθεί λοιπόν ο μηχανισμός με τη σειρά που συνήθως εξετάζεται, μαζί με τη συμπληρωματική ερώτηση που συνοδεύει κάθε θέμα.

  • Το request pipeline. Το middleware εκτελείται με τη σειρά που καταχωρίζεται και κάθε component επιλέγει αν θα καλέσει το επόμενο. Συμπληρωματική ερώτηση: πού τοποθετείται το authentication σε σχέση με το authorization και τι συμβαίνει αν καταχωριστούν με την αντίστροφη σειρά;
  • Διάρκειες ζωής της έγχυσης εξαρτήσεων. Το singleton ζει όσο η εφαρμογή, το scoped όσο ένα request και το transient δημιουργείται κάθε φορά που επιλύεται. Η κλασική παγίδα είναι η έγχυση μιας scoped υπηρεσίας, όπως ενός database context, σε ένα singleton· να είστε έτοιμοι να εξηγήσετε γιατί αυτό αποτελεί σφάλμα.
  • Configuration και options. Διαδοχικές πηγές ρυθμίσεων, παρακάμψεις ανά περιβάλλον και το options pattern για ρυθμίσεις με συγκεκριμένους τύπους.
  • EF Core. Παρακολούθηση αλλαγών και πότε πρέπει να απενεργοποιείται για queries μόνο για ανάγνωση, το πρόβλημα N+1 και πώς αποφεύγεται με eager loading ή projection, migrations και το σημείο όπου ένα χειρόγραφο query υπερτερεί πραγματικά του LINQ.
  • Έλεγχος. Πώς τα interfaces και το DI container καθιστούν μια υπηρεσία ελέγξιμη και τι αποδεικνύει ή δεν αποδεικνύει ένας in-memory provider για μια πραγματική βάση δεδομένων.

Οι ισχυρότεροι υποψήφιοι συνδέουν αυτά τα θέματα: ένα scoped context που επιλύεται μέσα σε μια singleton υπηρεσία παρασκηνίου δεν είναι ερώτηση εγκυκλοπαιδικών γνώσεων, αλλά πραγματικό σφάλμα μνήμης και ορθότητας που έχουν κυκλοφορήσει οι ίδιοι οι συνεντευκτές στην παραγωγή· θέλουν να ακούσουν ότι θα δημιουργούσατε ρητά ένα scope.

Πώς εξελίσσονται οι ερωτήσεις με σενάρια;

Οι συνεντεύξεις για ανώτερους ρόλους παρουσιάζουν ένα σύμπτωμα και παρατηρούν τη μέθοδό σας. Ένα αντιπροσωπευτικό παράδειγμα: ένας backend engineer που διεκδικεί ανώτερη θέση σε εταιρεία logistics πληροφορείται ότι η κατανάλωση μνήμης ενός ASP.NET Core API αυξάνεται επί ημέρες, ώσπου γίνεται επανεκκίνηση του container. Η ισχυρή απάντηση δεν κάνει εικασίες. Ρωτά τι άλλαξε, ελέγχει για αντικείμενα που διατηρούνται από static caches ή μακρόβιες event subscriptions, αναζητά scoped υπηρεσίες που κρατούνται από singletons, εξετάζει την αύξηση του large object heap και χρησιμοποιεί ένα memory snapshot προτού προτείνει λύση. Ο συνεντευκτής αξιολογεί τη σειρά της διερεύνησης.

Άλλα επαναλαμβανόμενα σενάρια: ένα endpoint που γίνεται αργό μόνο υπό φόρτο, όπου η απάντηση περνά από τις σύγχρονες κλήσεις στη βάση δεδομένων στο async, στην εξάντληση του connection pool και στο caching· ένα race condition σε μια κοινόχρηστη συλλογή και το κόστος των concurrent collections και των επιλογών κλειδώματος· ένα request που πρέπει να καλέσει τρεις downstream υπηρεσίες και ο τρόπος διαχείρισης των χρονικών ορίων, των επαναλήψεων και της μερικής αποτυχίας· και ένα migration που πρέπει να προσθέσει μια στήλη χωρίς διακοπή λειτουργίας. Σε κάθε περίπτωση, δηλώστε τον περιορισμό, επιλέξτε έναν μηχανισμό και εξηγήστε φωναχτά τον συμβιβασμό.

Αυτά γίνονται πολύ ευκολότερα όταν τα έχετε εξασκήσει φωναχτά με συμπληρωματικές ερωτήσεις, κάτι για το οποίο έχει σχεδιαστεί η λειτουργία προσομοίωσης συνέντευξης· οι υπόλοιπες συλλογές ανά γλώσσα και ρόλο βρίσκονται στις ερωτήσεις συνέντευξης ανά ρόλο και θέμα.

Μπορεί ένας βοηθός συνέντευξης AI να βοηθήσει με ερωτήσεις .NET;

Στους προφορικούς γύρους, ναι, εντός των δηλωμένων ορίων. Η εγγενής εφαρμογή desktop του SubcueAI για macOS και Windows καταγράφει τον ήχο συστήματος και το μικρόφωνό σας και εμφανίζει σύντομες προτάσεις απάντησης σε ένα τοπικό overlay. Έτσι, όταν ο συνεντευκτής ρωτά γιατί ένα scoped context μέσα σε singleton αποτελεί σφάλμα, ο μηχανισμός εμφανίζεται στην οθόνη σας ενώ τον εξηγείτε με δικά σας λόγια. Η επέκταση browser καλύπτει κλήσεις σε καρτέλες των Chrome και Edge, καταγράφοντας μόνο τον ήχο της καρτέλας της συνάντησης. Κανένα bot δεν συμμετέχει στην κλήση και τίποτα δεν εισάγεται στη σελίδα της συνάντησης· οι οδηγίες ρύθμισης βρίσκονται στη σελίδα εκμάθησης.

Οι περιορισμοί: μια επιτηρούμενη αξιολόγηση, μια καταγραφόμενη οθόνη, ένας εταιρικά διαχειριζόμενος φορητός υπολογιστής ή μια άσκηση live coding όπου πληκτρολογείτε C# υπό παρακολούθηση είναι εκτός πεδίου, και ο βοηθός είναι πιο αδύναμος ακριβώς όταν η συνέντευξη σας ζητά να γράψετε κώδικα. Είναι ισχυρότερος στις παραπάνω ερωτήσεις για το runtime, το framework και τους συμβιβασμούς. Δώστε του πρώτα το βιογραφικό σας, ώστε οι προτάσεις να αντικατοπτρίζουν τα συστήματα που πράγματι δημιουργήσατε· το εργαλείο δημιουργίας βιογραφικού είναι το σημείο όπου βρίσκεται αυτό το προφίλ.

Συχνές ερωτήσεις

Γιατί ο garbage collector του .NET έχει γενιές;

Τα περισσότερα αντικείμενα έχουν μικρή διάρκεια ζωής, επομένως η συχνή και οικονομική συλλογή της νεότερης γενιάς ανακτά το μεγαλύτερο μέρος της μνήμης χωρίς σάρωση ολόκληρου του heap. Τα αντικείμενα που επιβιώνουν προάγονται και συλλέγονται λιγότερο συχνά, διατηρώντας τις παύσεις σύντομες για τα συνήθη μοτίβα εκχώρησης μνήμης.

Ποια είναι η διαφορά μεταξύ singleton, scoped και transient στο ASP.NET Core;

Το singleton δημιουργείται μία φορά για την εφαρμογή, το scoped μία φορά ανά request και το transient κάθε φορά που επιλύεται. Η έγχυση μιας scoped υπηρεσίας σε ένα singleton την κρατά για όλη τη διάρκεια ζωής της εφαρμογής, κάτι που αποτελεί συνηθισμένο σφάλμα με database contexts.

Τι κάνει πραγματικά το await;

Καταχωρίζει το υπόλοιπο της μεθόδου ως continuation και επιστρέφει τον έλεγχο στον caller, ώστε το νήμα να είναι ελεύθερο όσο ολοκληρώνεται η εργασία σε αναμονή. Αντίθετα, το μπλοκάρισμα σε ένα task με .Result ή .Wait μπορεί να προκαλέσει deadlock σε contexts που χρειάζονται ξανά αυτό το νήμα.

Τι είναι το πρόβλημα N+1 στο EF Core;

Είναι η φόρτωση μιας λίστας γονικών εγγραφών και έπειτα η εκτέλεση ξεχωριστού query ανά γονική εγγραφή για τα παιδιά της. Το eager loading με Include ή η προβολή μόνο των πεδίων που χρειάζεστε το μετατρέπει σε ένα ή δύο queries.

Μπορεί το SubcueAI να βοηθήσει σε επιτηρούμενο τεστ κώδικα .NET;

Όχι. Οι επιτηρούμενες και καταγραφόμενες αξιολογήσεις είναι εκτός πεδίου και το live coding υπό παρακολούθηση είναι δική σας εργασία. Προορίζεται για προφορικούς γύρους, ενώ η λειτουργία προσομοίωσης συνέντευξης είναι το κατάλληλο μέρος για εξάσκηση πριν από αυτούς.

Σχετικές ερωτήσεις

← Περισσότερα για Ερωτήσεις συνέντευξης ανά ρόλο & θέμα