Czego powinienem oczekiwać od oceny technicznej dla C ++? [Zamknięte]

10

Zostałem poproszony o przeprowadzenie testu technicznego / oceny pracy jako młodszy programista, głównie przy użyciu C ++. To mój pierwszy test / ocena i trwa on 2 godziny.

Moje C ++ jest trochę zardzewiałe, ponieważ ostatnio realizowałem projekty w PHP.

Jest to brytyjska firma, jednak przypuszczenie, że testy techniczne kandydatów będą wszędzie takie same.

Czego powinienem się spodziewać w jednym z tych testów?

chleb niedźwiedzi
źródło
1
To pytanie dotyczy PHP, ale odpowiedzi mają zastosowanie: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Odpowiedzi:

5

To jest C ++, więc możesz oczekiwać wszystkiego, mam na myśli NAPRAWDĘ wszystko.

Zwykle dotyczy to podstępnych pytań i pytań o polimorfizm.

Ale może to być również coś prostego.

Bądź gotowy odpowiedzieć na pytanie w rodzaju „dlaczego wirtualny destrukter”, „niestabilność”, „zaprojektuj klasę” na jakiś nierealistyczny problem, „zaimplementuj połączoną listę”, „odwróć ciąg znaków” itp.

Koder
źródło
Chcę dodać „Do czego służy mutablesłowo kluczowe?” do jakiejkolwiek kategorii.
Tom
5

Jeśli jest to czysty test C ++ (tj. Nie test systemu Windows / MFC / Managed C ++), to spędź kilka godzin lub dzień z Effective C ++ Scotta Meyera i powinieneś zrobić bardzo dobrze. Nie obejmuje szablonów i STL, ale gdyby byli zainteresowani, prawdopodobnie nie dałby ci dwugodzinnego testu. Minęło kilka lat, ale często przeprowadzałem wywiady z programistami C ++. Mimo że idee w Effective C ++ są fundamentalne dla programowania w C ++, znało je tylko około 10 procent kandydatów.

Kevin Cline
źródło
1
+1 za rekomendację książki - i pomiń Bardziej skuteczną książkę C ++ Scotta Meyera. Kiedy rozmawiałem z programistami, patrzyłem też na uczciwość intelektualną (czy próbujesz blefować, czy przyznajesz, że nie wiesz), czy wiesz, czego nie wiesz i czy wiesz, gdzie znaleźć Odpowiedź. (Jeśli przeprowadzasz wywiad z kimś, kto twierdzi, że pracował w C ++, pytania byłyby o wiele trudniejsze). Jeśli w twoim CV nie było niczego, co sugerowałoby umiejętności programowania w innych językach, poprosiłbym cię również o napisanie prostego programu i sprawdzenie, czy poprawnie uwzględniłeś przypadki narożne.
MZB
Jestem absolwentem informatyki, nauczyłem się, jak robić programy w konsoli w C ++, nauczyłem się implementować drzewa sortowania binarnego i podwójnie powiązane listy itp. Następnie uczono nas tam na temat klas abstrakcyjnych, dziedziczenia i polimorfizmu, ale nie jak je wdrożyć. Praca jest dla absolwenta, więc nie wiem, czego ode mnie oczekują, ponieważ nie mam prawdziwego doświadczenia zawodowego w C ++.
bearbread
4

Cóż, zależy to od tego, czy będą dostępne, czy nie. Pozwolą ci korzystać z Google. : P

Zazwyczaj radzę sobie całkiem dobrze w testach technicznych, o ile mogę korzystać z narzędzi wokół mnie. Kiedy chcą, żebym kodował w ciemno, to gdy mam kłopoty. Więc najlepszą radą, jaką mogę ci dać, jest ślepy na kod w domu ... Pamiętaj, że trywialne rzeczy uważamy za oczywiste, ponieważ możemy je łatwo sprawdzić, jeśli nie pamiętamy.

Ponadto, zwykle sprawdzają, czy potrzebują konkretnych umiejętności, więc jeśli wiesz, nad czym będziesz pracować, skoncentruj się na tym.

(Z mojego ogólnego doświadczenia wynika, że ​​nie jestem z Wielkiej Brytanii)

AJC
źródło
Co z teorią, polimorfizmem, dziedziczeniem. Znam teorię na ten temat dopiero po ukończeniu studiów, ale nie wiem, jak ją zaimplementować w C ++
bearbread
Ich wdrożenie nie jest trudne, prawdopodobnie można je bardzo szybko przejrzeć. Ważną częścią jest wiedza, kiedy można z nich korzystać, kiedy będzie to potrzebne. Są bardziej funkcjonalnym wzorem niż faktycznym warunkiem wstępnym. Chodzi mi o to, że możesz uciec bez ich używania, ale oczekuje się, że będziesz je znać, jeśli zajdzie taka potrzeba.
AJC
@bearbread: sama teoria nie jest wiele warta. przeczytaj o wzorcach projektowych i spróbuj je wdrożyć.
Karoly Horvath,
Wiem, że wzorce projektowe, takie jak MVC dla PHP, czy to masz na myśli?
bearbread
1

Ćwicz kata kodu Wybierz prosty algorytm (bufor pierścieniowy, wieża Hanoi, wyszukiwanie binarne, cokolwiek) i koduj go od zera. Następnie zrób to ponownie następnym razem, następnym razem, następnym razem i następnym razem i tak dalej. Zobacz, jak możesz je ulepszyć przy każdej iteracji.

Sardathrion - przeciw nadużyciom SE
źródło
1
+1. Zrób to również z przyjacielem, który jest nieco bardziej doświadczony. Programujcie kolejno, oboje nauczycie się czegoś nowego.
Tom
0

To prawda, że ​​możesz oczekiwać wszystkiego.

Mówili ci, że testem jest C ++, ale może tak naprawdę jest to podzbiór C C ++, którego używają w swoich testach (użyjesz tablic char zamiast standardowych ciągów biblioteki). Trudno będzie to wiedzieć.

Jeśli to naprawdę C ++, radzę zapoznać się z podstawami:

  • Klasy, zmienne, tablice
  • referencje, wskaźniki (i dlaczego nie należy ich używać domyślnie)
  • użycie słowa kluczowego const
  • Koncepcje obiektów zorientowanych (dziedziczenie, polimorfizm ...)
  • Szablony

następnie:

  • Standardowe zastosowania biblioteki (std :: string, std :: vector, pojemniki, ...)
Nikko
źródło
0

To, co zostało opublikowane, było jak dotąd świetne, ale dodam coś i historię! Powiedziałbym, że ćwiczysz stosowanie tego, co wiesz w C ++, do problemów w dziedzinie oprogramowania. To wspaniale, jeśli znasz wszystkie tajniki C ++, ale jeśli nie możesz zgłosić problemu, jesteś bezużyteczny dla firmy. Biorąc pod uwagę, że jest to pozycja dla programistów młodszych, nie sądzę, że oczekiwaliby od ciebie wszystkiego o C ++.

W zeszłym tygodniu wziąłem swój pierwszy test techniczny do mojej pierwszej pracy programisty i byłem zaskoczony tym, co znalazłem. Spodziewałem się czegoś takiego jak FizzBuzz lub coś bardziej drobiazgowego (to było dla Javy, btw), ale znalazłem, że dali mi plik i kazali mi parsować go do nowego formatu, co było częścią pracy. Ponadto pozwalają mi korzystać z Google i własnych bibliotek. Podsumowując, musisz znać C ++, ale jeśli chcesz wiedzieć, jak może wyglądać test, spójrz na domenę stanowiska, o które się ubiegasz i pracuj nad implementacją C ++ w kierunku czegoś w tej dziedzinie.

Jetti
źródło
Domyślam się, że <1% programistów C ++ zna wszystko o języku :) Wystarczy wziąć przykład wszystkich zachowań niezdefiniowanych / nieokreślonych / zdefiniowanych w implementacji.
0

Jesteś:

  1. Pisanie kodu
  2. biorąc wielokrotny wybór
  3. Rozmowa osobista

Podczas pisania kodu

Będą oczekiwać, że wiesz (i używasz):

  • RAII
  • Reguła trzech
  • Zrozum inteligentne wskaźniki

Prawdopodobnie przetestują cię na:

  • Dziedzictwo
  • Funkcje wirtualne
  • Serializacja do / ze strumienia
  • przeciążają operatory arytmetyczne (rzadko używane w prawdziwym życiu, ale łatwe do napisania testu).

Jeśli masz pecha, mogą pomyśleć

  • Powinieneś wiedzieć o wielokrotnym dziedziczeniu i wirtualnych klasach podstawowych.
    • Nie, ale niektórzy ludzie oszaleli.

Przy wyborze wielokrotnego wyboru

  • Poznaj całą terminologię OO
  • Poznaj sposoby implementacji OO w C ++

Wywiad osobisty

  • Wszystko powyższe.
  • Znajomość rekurencji
  • Jak przekonwertować rekurencję na pętlę
  • Jak oszacować złożoność Big O ()
  • Standardowe algorytmy sortowania (nie tylko bąbelkowe).
Martin York
źródło
1
Jestem programistą C zamiast C ++, więc nie znam mowy ... ale nigdy nie słyszałem o RIAA i regule trzech. Słyszałem jednak o RAII (pozyskiwanie zasobów to inicjalizacja, tzn. Twój destruktor powinien posprzątać własny bałagan) i wiem, że jeśli twój kod potrzebuje kopiowania ctr, operatora przypisania przeciążenia lub destruktora, potrzebuje wszystkich trzech z nich. Wydaje mi się, że wywiad, który jest tandetną ciekawostką w programowaniu slangu, a nie test twoich umiejętności, mówi coś złego o firmie.
1
Podobnie, jeśli zapytają o wielokrotne dziedziczenie i rekurencję, zakładam, że ich baza kodu jest wielkim bałaganem. Jeśli oczekują, że znasz wszystkie popularne algorytmy sortowania nieoczekiwanie, jak rozwinąć rekurencję, serializację obiektów itp., Oznacza to również coś złego o firmie. Czy nie oczekują od twórców roboty? W prawdziwym świecie wyglądasz na takie rzeczy przed ich użyciem. Nawet jeśli znam teorię leżącą u podstaw tych wszystkich rzeczy, nadal bym je szukał, aby upewnić się, że używam optymalnego rozwiązania, a nie czegoś takiego, więc wymyśliłem sobie.
@Lundin: Nie musisz znać jedwabistych imion, ale musisz znać zasady, wymieniając je tutaj, ułatwia to wyszukiwanie. Musisz znać algorytmy sortowania, ponieważ musisz wiedzieć, którego użyć i kiedy (i, co ważniejsze, dlaczego) (rzeczy, których roboty nie mogą zrobić, ale ludzie robią bardzo dobrze).
Martin York,
Nie ma nic z natury złego w rekurencji lub wielokrotnym dziedziczeniu. Problem polega na tym, że programiści używają go (i robią to niepoprawnie). Niektóre problemy można rozwiązać (łatwo) tylko za pomocą rekurencji (najpierw parsowanie głębokości struktury drzewa).
Martin York,
@Lundin: Patrz devblog.seomoz.org/2011/10/679
Martin York,
-1

W ostatnim wywiadzie dostałem:

Różnica między przekazywaniem obiektu do funkcji według wartości / referencji / wskaźnika oraz gdzie i dlaczego to zrobiłbyś.

Zamień 2 ostatnie 8 bitów liczby całkowitej, np. RGBA na RGAB.

Co to jest RIAA?

Zdefiniuj meta programowanie szablonu: może pojawić się pytanie dotyczące „rozwiązania tego problemu za pomocą TMP ..”

Co oznacza zmienne, zmienne, stałe itp. Itd. Itd.? znać wszystkie słowa kluczowe.

wielokrotne dziedziczenie ... jeszcze raz i jeszcze raz.

Wielowątkowość: Producent konsumenta i buforowane obiekty pamięci współużytkowanej.

Kilka dodatkowych pytań peryferyjnych:

Agregacja i składanie UML

Wzory projektowe: wdrażaj singletona ... Jakie są wspólne elementy MVC?

Pepe
źródło