Przerażający test wywiadu programistycznego C # - jakieś porady? [Zamknięte]

21

Mam możliwą pracę w C # dev w kolejce, ale zanim będę mógł przeprowadzić wywiad, muszę zdać test w agencji pracy.

Teraz, mimo że jestem starszym programistą z ponad 10-letnim doświadczeniem programistycznym i ponad 3 z tych lat z c #, naprawdę nie mogę się doczekać tego testu i myślę, że istnieje spora szansa, że ​​go nie zdołam.

Z mojego doświadczenia wynika, że ​​testy te są nieprzewidywalne, gdy pytają Cię o rzeczy, których rzadko używasz w codziennych sytuacjach zawodowych.

Potrzebuję najlepszej porady na temat tego, co powinienem zmienić - na przykład dobrej książki lub strony internetowej. Mam mniej niż tydzień na przygotowanie się i muszę to zaliczyć.

Z góry dziękuję.

EDYCJA: Aby jeszcze bardziej uzasadnić moje obawy związane z pisaniem takich testów - rozważ następujące pytanie:

12) Wydarzenie to:

   a) The result of a users action - correct answer
   b) The esult of a party
   c) code to force users action

Prawidłowa odpowiedź zgodnie z testem to A, ale ponieważ robię SOA (często, gdy zdarzenia mogą być oparte na zdarzeniach systemowych (nie na działaniach użytkownika), jestem w 100% pewien, że zdarzenie nie musi być sterowane przez działanie użytkownika. To było również pytanie C # (nie pytanie ASP.net). W oparciu o moje zrozumienie, tak naprawdę nie mogłem znaleźć poprawnej odpowiedzi, ale B wydaje się najlepszy z całej partii (jeśli definicja strony to: dowolna podmiot, który może wywołać zdarzenie. Tego rodzaju pytania mnie przerażają.

JL01
źródło
4
Jeśli jesteś „starszym programistą” i korzystasz z C # od trzech lat, powinieneś być w porządku. Testy te zwykle mają na celu wyeliminowanie osób, które nie znają języka ani jego zastosowań. Jeśli korzystasz z niego codziennie od 3 lat, powinieneś napotkać prawie wszystkie pułapki w danym teście.
George Stocker
11
@GeorgeStocker - w rzeczywistości musiałem wykonać niektóre z tych testów (ukierunkowanych bardziej na pełną platformę .NET) i były one bardzo szczegółowe. Uznałem je za dość trudne, ponieważ najpierw przeszli do obszarów frameworka (takich jak WCF), w których po prostu nie miałem dużego doświadczenia, a ponadto musieliście wiedzieć, na przykład, jakiej opcji konfiguracji użyjesz w pliku .config, aby włączyć jakaś niejasna opcja. Było to coś, czego rzadko zapamiętywałeś, ponieważ prawdopodobnie używałbyś go tylko raz, a do tego Google. To doświadczenie było trochę frustrujące.
Scott Whitlock,
7
Aha, i jednym z pytań, które pomyliłem, było: „w VB.NET, jakie słowo kluczowe jest używane do deklarowania struktury? A) struct b) Struktura c) struktura d) Struktura”. Myślałem „Intellisense wie o tym, więc nie muszę!” Teraz, oczywiście, odpowiedź zapada mi w pamięć.
Scott Whitlock,
17
@ScottWhitlock: Nie ma możliwości odpowiedniego przygotowania się do źle zaprojektowanego wywiadu. W pewnym momencie musisz zaufać, że są wystarczająco kompetentni, aby pytać i oceniać na podstawie obszarów, w których twierdzisz, że specjalizujesz się, a także niektórych umiejętności koncepcyjnych. Jeśli nie są, prawdopodobnie i tak będziesz miał dla nich nędzny czas.
Aaronaught
2
Czy to jest test języka C # czy test .NET Framework?
Ants

Odpowiedzi:

24

Chociaż ten post jest nieco stary, może być dla Ciebie przydatny: co powinni wiedzieć wielcy programiści .NET (więcej pytań do wywiadu .NET)

Każdy, kto pisze kod

  • Opisz różnicę między wątkiem a procesem?
  • Co to jest usługa systemu Windows i czym różni się jej cykl życia od „standardowego” pliku EXE?
  • Jaka jest maksymalna ilość pamięci, którą może rozwiązać pojedynczy proces w systemie Windows? Czy różni się to od maksymalnej pamięci wirtualnej dla systemu? Jak wpłynie to na projekt systemu?
  • Jaka jest różnica między EXE a DLL?
  • Co to jest pisanie mocne a słabe? Który jest preferowany? Czemu?
  • Produkt Corillian to „pojemnik na komponenty”. Wymień przynajmniej 3 kontenery składowe, które są teraz dostarczane z rodziną Windows Server.
  • Co to jest PID? Jak to jest przydatne podczas rozwiązywania problemów z systemem?
  • Ile procesów może nasłuchiwać na jednym porcie TCP / IP?
  • Co to jest GAC? Jaki problem rozwiązuje?

Programista średniego poziomu .NET

  • Opisz różnicę między programowaniem zorientowanym na interfejs, obiektowym i aspektowym.
  • Opisz, czym jest interfejs i czym różni się od klasy.
  • Co to jest odbicie?
  • Jaka jest różnica między usługami XML sieci Web korzystającymi z ASMX i .NET Remoting przy użyciu SOAP?
  • Czy system typów jest reprezentowany przez XmlSchema i CLS izomorficzny?
  • Pod względem koncepcyjnym, jaka jest różnica między wczesnym wiązaniem a późnym wiązaniem?
  • Czy używasz Assembly.Load odniesienie statyczne lub dynamiczne?
  • Kiedy użycie Assembly.LoadFrom lub Assembly.LoadFile byłoby odpowiednie?
  • Co to jest nazwa kwalifikowana zespołu? Czy to nazwa pliku? Czym się różni?
  • Czy to jest ważne? Assembly.Load („foo.dll”);
  • Czym różni się zestaw o silnej nazwie od zestawu, który nie ma takiej nazwy?
  • Czy DateTimes może mieć wartość NULL?
  • Co to jest JIT? Co to jest NGEN? Jakie są ograniczenia i zalety każdego z nich?
  • W jaki sposób generacyjny moduł czyszczący w środowisku .NET CLR zarządza czasem życia obiektu? Co to jest niedeterministyczna finalizacja?
  • Jaka jest różnica między Finalize () a Dispose ()?
  • Jak przydatny jest wzorzec using ()? Co to jest IDisposable? Jak wspiera deterministyczną finalizację?
  • Do czego służy ta przydatna linia poleceń? tasklist / m "mscor *"
  • Jaka jest różnica między procesem in-proc a out-of-proc?
  • Jakie technologie umożliwiają komunikację poza procesem w .NET?
  • Kiedy uruchamiasz komponent w ASP.NET, jaki proces działa w systemie Windows XP? Windows 2000? Windows 2003?

Starsi programiści / architekci

  • Co jest nie tak z taką linią? DateTime.Parse (myString);
  • Co to są PDB? Gdzie muszą się znajdować, aby debugować do pracy?
  • Co to jest złożoność cykliczna i dlaczego jest ważna?
  • Napisz standardową blokadę () oraz „podwójne sprawdzenie”, aby utworzyć krytyczną sekcję wokół dostępu do zmiennej.
  • Co to jest FullTrust? Czy zespoły GAC mają FullTrust?
  • Jakie korzyści otrzyma Twój kod, jeśli ozdobisz go atrybutami wymagającymi określonych uprawnień zabezpieczeń?
  • Co to robi? gacutil / l | znajdź / i „Corillian”
  • Co to robi? sn -t foo.dll
  • Jakie porty muszą być otwarte dla DCOM przez zaporę? Jaki jest cel Port 135?
  • Kontrast OOP i SOA. Jakie są założenia każdego z nich?
  • Jak działa XmlSerializer? Jakich uprawnień ACL wymaga proces, który z niego korzysta?
  • Dlaczego catch (wyjątek) prawie zawsze jest złym pomysłem?
  • Jaka jest różnica między Debug.Write a Trace.Write? Kiedy należy stosować każdy z nich?
  • Jaka jest różnica między wersją debugowania i wydania? Czy istnieje znacząca różnica prędkości? Dlaczego lub dlaczego nie?
  • Czy JITting występuje na każdym zestawie czy na metodzie? Jak to wpływa na zestaw roboczy?
  • Kontrastuje użycie abstrakcyjnej klasy bazowej z interfejsem?
  • Jaka jest różnica między a.Equals (b) a a == b?
  • W kontekście porównania czym jest tożsamość obiektu a równoważność obiektu?
  • Jak zrobić głęboką kopię w .NET?
  • Wyjaśnij obecne myślenie o IClonable.
  • Co to jest boks?
  • Czy łańcuch jest typem wartości czy typem odniesienia?
  • Jakie jest znaczenie wzorca „PropertySpecified” używanego przez XmlSerializer? Jaki problem próbuje rozwiązać?
  • Dlaczego nasze parametry to zły pomysł w .NET? Czy oni są?
  • Czy można przypisać atrybuty do określonych parametrów metody? Dlaczego to jest przydatne?

Developerzy komponentów C #

  • Połącz użycie przesłonięcia z nowym. Co to jest shadowing?
  • Wyjaśnij użycie wirtualnego, zapieczętowanego, zastąpienia i abstrakcyjnego.
  • Wyjaśnij znaczenie i użycie każdego składnika tego ciągu: Foo.Bar, Wersja = 2.0.205.0, Kultura = neutralny, PublicKeyToken = 593777ae2d274679d
  • Wyjaśnij różnice między publicznym, chronionym, prywatnym i wewnętrznym.
  • Jakie korzyści czerpiesz z korzystania z Primary Interop Assembly (PIA)?
  • Za pomocą jakiego mechanizmu NUnit wie, jakie metody testować?
  • Jaka jest różnica między: catch (wyjątek e) {throw e;} i catch (wyjątek e) {throw;}
  • Jaka jest różnica między typof (foo) a myFoo.GetType ()?
  • Wyjaśnij, co dzieje się w pierwszym konstruktorze: public class c {public c (string a): this () {;}; public c () {;}} Jak przydatna jest ta konstrukcja?
  • Co to jest Czy można tego użyć w ramach metody statycznej?

Programiści ASP.NET (UI)

  • Opisz, w jaki sposób formularz POST oparty na przeglądarce staje się zdarzeniem po stronie serwera, takim jak Button1_OnClick ...
Konamiman
źródło
1
Każda wymieniona tutaj odpowiedź była pomocna i dobra, jednak przejrzałem wszystkie pytania na twojej liście (zajęło mi to 4 godziny) i napisałem próbny test online i zdałem. Zachęcam każdego programistę .net, aby przynajmniej raz przejrzał te pytania i upewnił się, że rozumiesz odpowiedzi, i upewnij się, że otrzymałeś 2. i 3. opinię. Wiele osób odpowiada na pytania (znalezione w Google), ale wiele odpowiedzi nie jest zwięzłych, a czasem nawet błędnych. Więc uważaj. Sprawdź, jakie odpowiedzi znajdziesz.
JL01,
2
Dobry link! Dziwi mnie, ilu znałem. this.Ego ++;
Justin Self,
@justnS: To samo przydarzyło mi się, gdy odkryłem post. :-)
Konamiman,
Kilka tygodni temu poszedłem na rozmowę, a oni wydrukowali mi tę odpowiedź. co dla mnie odzwierciedlone w ankiecie.
dbones
1
Kiedy dodasz odpowiedzi? ;)
Thijs van Dien
10

Po prostu odejdź, Renee

Kilka razy brałem takie testy. Teraz po prostu odchodzę. Testy mierzą najbardziej trywialne fragmenty wiedzy programistycznej. Czy chcesz pracować dla kogoś, kto uważa, że ​​te testy są dobrym sposobem oceny programistów? Ja nie.

Kevin Cline
źródło
1
Są dobrym sposobem jako minimalny standard , tj. Warunek konieczny , ale niewystarczający .
Sklivvz,
4
@Sklivvz: może, gdyby były to dobre testy. Większość testów komercyjnych to głupie ćwiczenia z ciekawostek: „Której klasy użyłbyś do odczytania pliku tekstowego?” Dobry programista może mówić przez dziesięć minut na temat różnic między strumieniami bajtów i strumieni znaków oraz szczegółami kodowania UTF i nadal nie dostrzega tego pytania. Gdy informacje są łatwo dostępne, nie ma sensu ich zapamiętywać.
kevin cline,
2
Zgadzam się z Kevinem. W testach jest zbyt wiele informacji nieistotnych dla twojej pracy. Właśnie dlatego wymyślili Google i IntelliSense - kiedy potrzebujemy odpowiedzi, znajdujemy je na zasadzie potrzeby użycia
ADNow
2
To zależy od testu. Są testy, od których odejdę, ale są też testy, które są dobre. Mamy prosty test na 3 pytania programistyczne. Pierwszym pytaniem jest napisanie prostej aplikacji w języku C #. Drugi prosi o napisanie 5 prostych zapytań SQL. Pytanie trzecie jest pytaniem, na które nie można odpowiedzieć bez pytania osoby badanej o dodatkowe informacje. Pierwsze i drugie pytanie wykluczają całkowicie niekompetentnych programistów. To oszczędza nam czasu od przeprowadzania wywiadów z osobami, które nie są warte naszego czasu. Trzecie pytanie daje nam wgląd w to, jak programista podchodzi do rozwiązywania problemów. Bardzo cenne rzeczy.
Pete,
8

Byłem w takiej sytuacji jak w zeszłym roku. Minęło tyle czasu, że byłem w wywiadzie, że się tego obawiałem. Przeszukałem pytania do wywiadu w języku C # i znalazłem kilka stron (wiele z nich wymienionych na innych plakatach) i przestudiowałem je. Ku mojemu zaskoczeniu 90% wywiadów pochodziło z tych stron, dosłownie . Myślę, że ankieterzy również używają Google, aby znaleźć pytania :)

System wyłączony
źródło
6

Całkowicie się z tobą zgadzam w sprawie:

testy są nieprzewidywalne i pytają o rzeczy, których rzadko używasz w codziennych sytuacjach zawodowych.

ale są częścią tego procesu, więc nic nie możemy na to poradzić. Jestem coś takiego jak ty z około 10-letnim doświadczeniem, z czego około 5 w .NET C #. Znalazłem te, że te dwie BARDZO dobre książki:

Głębokość C #

C # w pigułce

powinien obejmować wszystko, co musisz wiedzieć o C #. Reszta to twoje własne umiejętności i umiejętności, które nabywasz w określonych technologiach opartych na C #, takich jak ASP.NET itp.

TheBoyan
źródło
3
ale są częścią tego procesu, więc nic nie możemy na to poradzić. Co powiesz na to, by nie popierać głupich testów programowych w miejscu pracy w ramach procesu rekrutacji? Procesy rekrutacyjne powinny pokazywać twoje kompetencje, a nie to, że potrafisz zapamiętać niejasne ciekawostki.
joshin4colours
@ joshin4colours - dlatego wierzę w dobrą długą rozmowę podczas wywiadu ... są jednak dobrzy do eliminacji
TheBoyan
2
Przeprowadziłem wywiad z autorem jednej z książek i odrzuciłem go ...
Sklivvz,
3

Testy te coraz częściej stają się częścią kandydatów do wstępnej kontroli przez profesjonalne firmy rekrutacyjne i niektóre firmy. Zostały zaprojektowane, aby dać ankieterom nietechnicznym możliwość oceny czyichś umiejętności technicznych. Są to jednak w zasadzie tylko testy ciekawostek, które nie powiedzą nic znaczącego o możliwościach programisty innych niż wyeliminowanie tych, którzy naprawdę nic nie wiedzą. Niestety niektóre firmy / osoby rekrutujące przykładają zbyt dużą wagę do tych wyników.

Sposób na naukę dla nich polega na znalezieniu witryn z pytaniami na rozmowy kwalifikacyjne, wiarygodnych witryn, a nie tych, które próbują sprzedać Ci odpowiedzi, otynkowane reklamami wyskakującymi lub innymi tego rodzaju nonsensami, i wcisnąć odpowiedzi. W ten sposób uzyskasz przyzwoity wynik i przeskoczysz przeszkodę. Jeśli firma przykłada zbyt dużą wagę do tych wyników, prawdopodobnie nie jest to najlepsza firma do pracy.

jfrankcarr
źródło
2

Jeśli jest to test agencji pracy, nie powinno to być takie trudne. To nie tak, że mają specjalistów językowych do opracowania testu. Najprawdopodobniej wszystko, co zrobią, to skopiuj / wklej pytania ze strony internetowej.

Tak długo, jak wiesz, jak ogólnie działa framework i jakie są najczęściej używane przestrzenie nazw / biblioteki dla zadań, jakich rzeczy musisz używać do pewnych zadań, powinieneś być dobry.

silverCORE
źródło
2

Dzięki testom przeprowadzanym podczas wywiadów wiele zależy od kultury korporacyjnej i twórcy testów. Jeśli zamierzają zadawać niejasne pytania i próbować cię potknąć, przeniosę się do innej firmy lub agencji, która jest bardziej zainteresowana osobami wysokiej jakości, inteligentnymi i zdolnymi do wykonania pracy.

To powiedziawszy, gdy używasz c # w swojej codziennej pracy, skoncentrowałbym cię na rozwiązywaniu problemów i logice, a mniej na książkowej stronie rzeczy.

Project Euler to świetne miejsce do ćwiczenia i doskonalenia umiejętności, które najprawdopodobniej stały się nieco zardzewiałe.

SetiSeeker
źródło